@workflow/web-shared 5.0.0-beta.17 → 5.0.0-beta.18

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 (37) hide show
  1. package/dist/components/new-trace-viewer/components/span-markers.d.ts +46 -0
  2. package/dist/components/new-trace-viewer/components/span-markers.d.ts.map +1 -0
  3. package/dist/components/new-trace-viewer/components/span-markers.js +85 -0
  4. package/dist/components/new-trace-viewer/components/timeline.d.ts +3 -1
  5. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
  6. package/dist/components/new-trace-viewer/components/timeline.js +34 -51
  7. package/dist/components/new-trace-viewer/components/use-row-window.d.ts +14 -0
  8. package/dist/components/new-trace-viewer/components/use-row-window.d.ts.map +1 -1
  9. package/dist/components/new-trace-viewer/components/use-row-window.js +39 -1
  10. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
  11. package/dist/components/new-trace-viewer/trace-viewer.js +87 -23
  12. package/dist/components/new-trace-viewer/utils.d.ts +15 -0
  13. package/dist/components/new-trace-viewer/utils.d.ts.map +1 -1
  14. package/dist/components/new-trace-viewer/utils.js +37 -31
  15. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  16. package/dist/components/sidebar/attribute-panel.js +3 -25
  17. package/dist/components/sidebar/attributes-block.d.ts +1 -1
  18. package/dist/components/sidebar/attributes-block.d.ts.map +1 -1
  19. package/dist/components/sidebar/attributes-block.js +5 -7
  20. package/dist/components/trace-viewer/trace-viewer.module.css +4 -4
  21. package/dist/lib/hydration.d.ts.map +1 -1
  22. package/dist/lib/hydration.js +6 -1
  23. package/dist/lib/zstd-browser-decoder.d.ts +7 -0
  24. package/dist/lib/zstd-browser-decoder.d.ts.map +1 -0
  25. package/dist/lib/zstd-browser-decoder.js +41 -0
  26. package/package.json +4 -3
  27. package/src/components/new-trace-viewer/components/span-markers.tsx +173 -0
  28. package/src/components/new-trace-viewer/components/timeline.tsx +142 -95
  29. package/src/components/new-trace-viewer/components/use-row-window.ts +47 -0
  30. package/src/components/new-trace-viewer/trace-viewer.tsx +108 -23
  31. package/src/components/new-trace-viewer/utils.test.ts +150 -0
  32. package/src/components/new-trace-viewer/utils.ts +61 -34
  33. package/src/components/sidebar/attribute-panel.tsx +5 -43
  34. package/src/components/sidebar/attributes-block.tsx +9 -18
  35. package/src/components/trace-viewer/trace-viewer.module.css +4 -4
  36. package/src/lib/hydration.ts +7 -0
  37. package/src/lib/zstd-browser-decoder.ts +42 -0
@@ -4,7 +4,6 @@ import { parseStepName, parseWorkflowName } from '@workflow/utils/parse-name';
4
4
  import { format } from 'date-fns';
5
5
  import { useCallback, useContext, useMemo, useState } from 'react';
6
6
  import { isEncryptedMarker, isExpiredMarker } from '../../lib/hydration';
7
- import { useToast } from '../../lib/toast';
8
7
  import { extractConversation, isDoStreamStep } from '../../lib/utils';
9
8
  import { CopyButton } from '../new-trace-viewer/components/copy-button';
10
9
  import { MiddleTruncate } from '../new-trace-viewer/components/middle-truncate/middle-truncate';
@@ -389,6 +388,7 @@ const copyableBasicAttributes = new Set([
389
388
  'hookId',
390
389
  'eventId',
391
390
  'deploymentId',
391
+ 'moduleSpecifier',
392
392
  ]);
393
393
  export const AttributeBlock = ({ attribute, value, isLoading, inline = false, context, }) => {
394
394
  const decryptCtx = useContext(DecryptClickContext);
@@ -423,7 +423,6 @@ export const AttributeBlock = ({ attribute, value, isLoading, inline = false, co
423
423
  return (_jsxs("div", { className: "relative", children: [typeof isLoading === 'boolean' && isLoading && (_jsx("div", { className: "absolute top-9 right-4", children: _jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-b-2", style: { borderColor: 'var(--ds-gray-900)' } }) })), _jsxs("div", { className: "my-2 flex flex-col gap-0", children: [_jsx("span", { className: "text-label-14 text-gray-1000 font-medium first-letter:uppercase", children: attribute }), _jsx("span", { className: "text-xs", style: { color: 'var(--ds-gray-1000)' }, children: displayValue })] }, attribute)] }));
424
424
  };
425
425
  export const AttributePanel = ({ data, moduleSpecifier, isLoading, error, expiredAt, onStreamClick, onRunClick, onDecrypt, isDecrypting = false, resource, }) => {
426
- const toast = useToast();
427
426
  // Extract workflowCoreVersion from executionContext for display
428
427
  const displayData = useMemo(() => {
429
428
  const result = { ...data };
@@ -497,16 +496,6 @@ export const AttributePanel = ({ data, moduleSpecifier, isLoading, error, expire
497
496
  const displayContext = useMemo(() => ({
498
497
  stepName: displayData.stepName,
499
498
  }), [displayData.stepName]);
500
- const handleCopyModuleSpecifier = useCallback((value) => {
501
- navigator.clipboard
502
- .writeText(value)
503
- .then(() => {
504
- toast.success('moduleSpecifier copied');
505
- })
506
- .catch(() => {
507
- toast.error('Failed to copy moduleSpecifier');
508
- });
509
- }, []);
510
499
  const outerDecryptCtx = useContext(DecryptClickContext);
511
500
  const decryptValue = onDecrypt
512
501
  ? {
@@ -517,20 +506,9 @@ export const AttributePanel = ({ data, moduleSpecifier, isLoading, error, expire
517
506
  : outerDecryptCtx;
518
507
  return (_jsx(ContextCardProvider, { children: _jsx(RunClickContext.Provider, { value: onRunClick, children: _jsx(StreamClickContext.Provider, { value: onStreamClick, children: _jsxs(DecryptClickContext.Provider, { value: decryptValue, children: [visibleBasicAttributes.length > 0 && (_jsxs("div", { className: "flex flex-col overflow-hidden divide-y divide-gray-alpha-400 mb-3", children: [orderedBasicAttributes.map((attribute) => {
519
508
  const displayValue = attributeToDisplayFn[attribute]?.(displayData[attribute]);
520
- const isModuleSpecifier = attribute === 'moduleSpecifier';
521
509
  const isCopyableBasicAttribute = copyableBasicAttributes.has(attribute) &&
522
510
  typeof displayValue === 'string';
523
- const moduleSpecifierValue = typeof displayValue === 'string'
524
- ? displayValue
525
- : String(displayValue ?? displayData.moduleSpecifier ?? '');
526
- return (_jsxs("div", { className: "flex items-center justify-between py-2", children: [_jsx("span", { className: "text-label-14 text-gray-900", children: getAttributeDisplayName(attribute) }), isModuleSpecifier ? (_jsx("button", { type: "button", className: "min-w-0 max-w-[70%] truncate text-right text-label-13 font-mono", style: {
527
- color: 'var(--ds-gray-1000)',
528
- background: 'transparent',
529
- border: 'none',
530
- padding: 0,
531
- }, title: moduleSpecifierValue, onClick: () => handleCopyModuleSpecifier(moduleSpecifierValue), children: moduleSpecifierValue })) : isCopyableBasicAttribute ? (_jsxs("div", { className: "flex min-w-0 max-w-[70%] items-center justify-end gap-1 text-right text-[13px] font-mono", style: {
532
- color: 'var(--ds-gray-1000)',
533
- }, title: displayValue, children: [_jsx(MiddleTruncate, { value: displayValue, className: "flex-1" }), _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));
511
+ 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));
534
512
  }), 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] }) }) }) }));
535
513
  };
536
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLXBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2lkZWJhci9hdHRyaWJ1dGUtcGFuZWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHOUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDaEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixlQUFlLEVBQ2Ysa0JBQWtCLEdBQ25CLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0s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QUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2xDLDRCQUNHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FDckMsS0FBQyxjQUFjLElBQ2IsU0FBUyxFQUFFLFNBQVMsRUFFcEIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxTQUFxQyxDQUFDLEVBQ3pELE9BQU8sRUFBRSxjQUFjLElBSGxCLFNBQVMsQ0FJZCxDQUNILENBQUMsR0FDRCxDQUNKLENBQUMsQ0FBQyxDQUFDLElBQUksSUFDcUIsR0FDSCxHQUNMLEdBQ1AsQ0FDdkIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgcGFyc2VTdGVwTmFtZSwgcGFyc2VXb3JrZmxvd05hbWUgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMvcGFyc2UtbmFtZSc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBTdGVwLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IE1vZGVsTWVzc2FnZSB9IGZyb20gJ2FpJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB0eXBlIHsgS2V5Ym9hcmRFdmVudCwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNFbmNyeXB0ZWRNYXJrZXIsIGlzRXhwaXJlZE1hcmtlciB9IGZyb20gJy4uLy4uL2xpYi9oeWRyYXRpb24nO1xuaW1wb3J0IHsgdXNlVG9hc3QgfSBmcm9tICcuLi8uLi9saWIvdG9hc3QnO1xuaW1wb3J0IHsgZXh0cmFjdENvbnZlcnNhdGlvbiwgaXNEb1N0cmVhbVN0ZXAgfSBmcm9tICcuLi8uLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgQ29weUJ1dHRvbiB9IGZyb20gJy4uL25ldy10cmFjZS12aWV3ZXIvY29tcG9uZW50cy9jb3B5LWJ1dHRvbic7XG5pbXBvcnQgeyBNaWRkbGVUcnVuY2F0ZSB9IGZyb20gJy4uL25ldy10cmFjZS12aWV3ZXIvY29tcG9uZW50cy9taWRkbGUtdHJ1bmNhdGUvbWlkZGxlLXRydW5jYXRlJztcbmltcG9ydCB7IENvbnRleHRDYXJkUHJvdmlkZXIgfSBmcm9tICcuLi91aS9jb250ZXh0LWNhcmQnO1xuaW1wb3J0IHtcbiAgRGVjcnlwdENsaWNrQ29udGV4dCxcbiAgUnVuQ2xpY2tDb250ZXh0LFxuICBTdHJlYW1DbGlja0NvbnRleHQsXG59IGZyb20gJy4uL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IEVycm9yQ2FyZCB9IGZyb20gJy4uL3VpL2Vycm9yLWNhcmQnO1xuaW1wb3J0IHsgRXJyb3JTdGFja0Jsb2NrLCBpc1N0cnVjdHVyZWRFcnJvciB9IGZyb20gJy4uL3VpL2Vycm9yLXN0YWNrLWJsb2NrJztcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSAnLi4vdWkvc2tlbGV0b24nO1xuaW1wb3J0IHsgVGltZXN0YW1wVG9vbHRpcCB9IGZyb20gJy4uL3VpL3RpbWVzdGFtcC10b29sdGlwJztcbmltcG9ydCB7IFJ1bkF0dHJpYnV0ZXNDYXJkIH0gZnJvbSAnLi9hdHRyaWJ1dGVzLWJsb2NrJztcbmltcG9ydCB7IENvbnZlcnNhdGlvblZpZXcgfSBmcm9tICcuL2NvbnZlcnNhdGlvbi12aWV3JztcbmltcG9ydCB7IENvcHlhYmxlRGF0YUJsb2NrLCBFbmNyeXB0ZWREYXRhQmxvY2sgfSBmcm9tICcuL2NvcHlhYmxlLWRhdGEtYmxvY2snO1xuaW1wb3J0IHsgRGV0YWlsQ2FyZCB9IGZyb20gJy4vZGV0YWlsLWNhcmQnO1xuXG4vKipcbiAqIFRhYiBidXR0b24gZm9yIGNvbnZlcnNhdGlvbi9KU09OIHRvZ2dsZVxuICovXG5mdW5jdGlvbiBUYWJCdXR0b24oe1xuICBhY3RpdmUsXG4gIG9uQ2xpY2ssXG4gIGNoaWxkcmVuLFxufToge1xuICBhY3RpdmU6IGJvb2xlYW47XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByb2xlPVwidGFiXCJcbiAgICAgIGFyaWEtc2VsZWN0ZWQ9e2FjdGl2ZX1cbiAgICAgIHRhYkluZGV4PXthY3RpdmUgPyAwIDogLTF9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgY2xhc3NOYW1lPVwicHgtMyBweS0xLjUgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgLW1iLXB4XCJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIC8vIEV4cGxpY2l0IHN0eWxlcyB0byBwcmV2ZW50IGFwcC1sZXZlbCBidXR0b24gb3ZlcnJpZGVzIHdoZW4gd2ViLXNoYXJlZFxuICAgICAgICAvLyBpcyBlbWJlZGRlZCBpbiBhIHNlbGYtaG9zdGVkIGFwcC5cbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICBib3JkZXJUb3A6ICdub25lJyxcbiAgICAgICAgYm9yZGVyTGVmdDogJ25vbmUnLFxuICAgICAgICBib3JkZXJSaWdodDogJ25vbmUnLFxuICAgICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHthY3RpdmUgPyAndmFyKC0tZHMtYmx1ZS02MDApJyA6ICd0cmFuc3BhcmVudCd9YCxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgY29sb3I6IGFjdGl2ZSA/ICd2YXIoLS1kcy1ncmF5LTEwMDApJyA6ICd2YXIoLS1kcy1ncmF5LTYwMCknLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbi8qKlxuICogU2hhcmVkIHRhYmJlZCBjb250YWluZXIgd2l0aCBhY2Nlc3NpYmxlIEFSSUEgcm9sZXMgYW5kIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gKiBVc2VkIGJ5IENvbnZlcnNhdGlvbldpdGhUYWJzIGZvciB0aGUgY29udmVyc2F0aW9uL0pTT04gdG9nZ2xlLlxuICovXG5mdW5jdGlvbiBUYWJiZWRDb250YWluZXI8VCBleHRlbmRzIHN0cmluZz4oe1xuICB0YWJzLFxuICBhY3RpdmVUYWIsXG4gIG9uVGFiQ2hhbmdlLFxuICBhcmlhTGFiZWwsXG4gIGNoaWxkcmVuLFxufToge1xuICB0YWJzOiB7IGlkOiBUOyBsYWJlbDogc3RyaW5nIH1bXTtcbiAgYWN0aXZlVGFiOiBUO1xuICBvblRhYkNoYW5nZTogKHRhYjogVCkgPT4gdm9pZDtcbiAgYXJpYUxhYmVsOiBzdHJpbmc7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KSB7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnQXJyb3dSaWdodCcgJiYgZXZlbnQua2V5ICE9PSAnQXJyb3dMZWZ0JykgcmV0dXJuO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRhYnMuZmluZEluZGV4KCh0KSA9PiB0LmlkID09PSBhY3RpdmVUYWIpO1xuICAgICAgY29uc3QgbmV4dEluZGV4ID1cbiAgICAgICAgZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCdcbiAgICAgICAgICA/IChjdXJyZW50SW5kZXggKyAxKSAlIHRhYnMubGVuZ3RoXG4gICAgICAgICAgOiAoY3VycmVudEluZGV4IC0gMSArIHRhYnMubGVuZ3RoKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgb25UYWJDaGFuZ2UodGFic1tuZXh0SW5kZXhdLmlkKTtcbiAgICB9LFxuICAgIFt0YWJzLCBhY3RpdmVUYWIsIG9uVGFiQ2hhbmdlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXJcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBnYXAtMSBib3JkZXItYlwiXG4gICAgICAgIHJvbGU9XCJ0YWJsaXN0XCJcbiAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RhYnMubWFwKCh0YWIpID0+IChcbiAgICAgICAgICA8VGFiQnV0dG9uXG4gICAgICAgICAgICBrZXk9e3RhYi5pZH1cbiAgICAgICAgICAgIGFjdGl2ZT17YWN0aXZlVGFiID09PSB0YWIuaWR9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvblRhYkNoYW5nZSh0YWIuaWQpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0YWIubGFiZWx9XG4gICAgICAgICAgPC9UYWJCdXR0b24+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgcm9sZT1cInRhYnBhbmVsXCI+e2NoaWxkcmVufTwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCBjb252ZXJzYXRpb25UYWJzID0gW1xuICB7IGlkOiAnY29udmVyc2F0aW9uJyBhcyBjb25zdCwgbGFiZWw6ICdDb252ZXJzYXRpb24nIH0sXG4gIHsgaWQ6ICdqc29uJyBhcyBjb25zdCwgbGFiZWw6ICdSYXcgSlNPTicgfSxcbl07XG5cbi8qKlxuICogVGFiYmVkIHZpZXcgZm9yIGNvbnZlcnNhdGlvbiBhbmQgcmF3IEpTT05cbiAqL1xuZnVuY3Rpb24gQ29udmVyc2F0aW9uV2l0aFRhYnMoe1xuICBjb252ZXJzYXRpb24sXG4gIGFyZ3MsXG59OiB7XG4gIGNvbnZlcnNhdGlvbjogTW9kZWxNZXNzYWdlW107XG4gIGFyZ3M6IHVua25vd25bXTtcbn0pIHtcbiAgY29uc3QgW2FjdGl2ZVRhYiwgc2V0QWN0aXZlVGFiXSA9IHVzZVN0YXRlPCdjb252ZXJzYXRpb24nIHwgJ2pzb24nPihcbiAgICAnY29udmVyc2F0aW9uJ1xuICApO1xuXG4gIHJldHVybiAoXG4gICAgPERldGFpbENhcmQgc3VtbWFyeT1cIklucHV0XCI+XG4gICAgICA8VGFiYmVkQ29udGFpbmVyXG4gICAgICAgIHRhYnM9e2NvbnZlcnNhdGlvblRhYnN9XG4gICAgICAgIGFjdGl2ZVRhYj17YWN0aXZlVGFifVxuICAgICAgICBvblRhYkNoYW5nZT17c2V0QWN0aXZlVGFifVxuICAgICAgICBhcmlhTGFiZWw9XCJDb252ZXJzYXRpb24gdmlld1wiXG4gICAgICA+XG4gICAgICAgIHthY3RpdmVUYWIgPT09ICdjb252ZXJzYXRpb24nID8gKFxuICAgICAgICAgIDxDb252ZXJzYXRpb25WaWV3IG1lc3NhZ2VzPXtjb252ZXJzYXRpb259IC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTNcIj5cbiAgICAgICAgICAgIHtBcnJheS5pc0FycmF5KGFyZ3MpXG4gICAgICAgICAgICAgID8gYXJncy5tYXAoKHYsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmaXJzdDptdC0wXCIga2V5PXtpfT5cbiAgICAgICAgICAgICAgICAgICAge0pzb25CbG9jayh2KX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgIDogSnNvbkJsb2NrKGFyZ3MpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9UYWJiZWRDb250YWluZXI+XG4gICAgPC9EZXRhaWxDYXJkPlxuICApO1xufVxuXG4vKipcbiAqIFJlbmRlciBhIHZhbHVlIHdpdGggdGhlIHNoYXJlZCBEYXRhSW5zcGVjdG9yIChPYmplY3RJbnNwZWN0b3Igd2l0aFxuICogY3VzdG9tIHRoZW1pbmcsIG5vZGVSZW5kZXJlciBmb3IgU3RyZWFtUmVmL0NsYXNzSW5zdGFuY2VSZWYsIGV0Yy4pXG4gKi9cbmZ1bmN0aW9uIEVuY3J5cHRlZEZpZWxkQmxvY2soKSB7XG4gIHJldHVybiA8RW5jcnlwdGVkRGF0YUJsb2NrIC8+O1xufVxuXG4vKipcbiAqIElubGluZSBkaXNwbGF5IGZvciBhbiBleHBpcmVkIGZpZWxkIOKAlCBmbGF0IGxhYmVsIGluZGljYXRpbmcgZGF0YSBpcyBubyBsb25nZXIgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiBFeHBpcmVkRmllbGRCbG9jaygpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IHJvdW5kZWQtbWQgYm9yZGVyIHB4LTMgcHktMiB0ZXh0LXhzXCJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS0zMDApJyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPkRhdGEgZXhwaXJlZDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSnNvbkJsb2NrKHZhbHVlOiB1bmtub3duKSB7XG4gIHJldHVybiA8Q29weWFibGVEYXRhQmxvY2sgZGF0YT17dmFsdWV9IC8+O1xufVxuXG5jb25zdCBoYXNEaXNwbGF5Q29udGVudCA9ICh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4gPT4ge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5sZW5ndGggPiAwO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPiAwO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnR5cGUgQXR0cmlidXRlS2V5ID1cbiAgfCBrZXlvZiBTdGVwXG4gIHwga2V5b2YgV29ya2Zsb3dSdW5cbiAgfCBrZXlvZiBIb29rXG4gIHwga2V5b2YgRXZlbnRcbiAgfCAnbW9kdWxlU3BlY2lmaWVyJ1xuICB8ICdldmVudERhdGEnXG4gIHwgJ3Jlc3VtZUF0J1xuICB8ICdleHBpcmVkQXQnXG4gIHwgJ3dvcmtmbG93Q29yZVZlcnNpb24nXG4gIHwgJ3JlY2VpdmVkQ291bnQnXG4gIHwgJ2xhc3RSZWNlaXZlZEF0J1xuICB8ICdkaXNwb3NlZEF0J1xuICB8ICdpc1N5c3RlbSdcbiAgfCAnZXJyb3JDb2RlJztcblxuY29uc3QgYXR0cmlidXRlT3JkZXI6IEF0dHJpYnV0ZUtleVtdID0gW1xuICAnd29ya2Zsb3dOYW1lJyxcbiAgJ21vZHVsZVNwZWNpZmllcicsXG4gICdzdGVwTmFtZScsXG4gICdzdGF0dXMnLFxuICAnc3RlcElkJyxcbiAgJ2hvb2tJZCcsXG4gICdldmVudElkJyxcbiAgJ3J1bklkJyxcbiAgJ2F0dGVtcHQnLFxuICAndG9rZW4nLFxuICAncmVjZWl2ZWRDb3VudCcsXG4gICdsYXN0UmVjZWl2ZWRBdCcsXG4gICdkaXNwb3NlZEF0JyxcbiAgJ2NvcnJlbGF0aW9uSWQnLFxuICAnZXZlbnRUeXBlJyxcbiAgJ2RlcGxveW1lbnRJZCcsXG4gICdzcGVjVmVyc2lvbicsXG4gICd3b3JrZmxvd0NvcmVWZXJzaW9uJyxcbiAgJ293bmVySWQnLFxuICAncHJvamVjdElkJyxcbiAgJ2Vudmlyb25tZW50JyxcbiAgJ2V4ZWN1dGlvbkNvbnRleHQnLFxuICAnY3JlYXRlZEF0JyxcbiAgJ3N0YXJ0ZWRBdCcsXG4gICd1cGRhdGVkQXQnLFxuICAnY29tcGxldGVkQXQnLFxuICAnZXhwaXJlZEF0JyxcbiAgJ3JldHJ5QWZ0ZXInLFxuICAnZXJyb3InLFxuICAnbWV0YWRhdGEnLFxuICAnZXZlbnREYXRhJyxcbiAgJ2lucHV0JyxcbiAgJ291dHB1dCcsXG4gICdhdHRyaWJ1dGVzJyxcbiAgJ3Jlc3VtZUF0Jyxcbl07XG5cbmNvbnN0IHNvcnRCeUF0dHJpYnV0ZU9yZGVyID0gKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyID0+IHtcbiAgY29uc3QgYUluZGV4ID0gYXR0cmlidXRlT3JkZXIuaW5kZXhPZihhIGFzIEF0dHJpYnV0ZUtleSkgfHwgMDtcbiAgY29uc3QgYkluZGV4ID0gYXR0cmlidXRlT3JkZXIuaW5kZXhPZihiIGFzIEF0dHJpYnV0ZUtleSkgfHwgMDtcbiAgcmV0dXJuIGFJbmRleCAtIGJJbmRleDtcbn07XG5cbi8qKlxuICogRGlzcGxheSBuYW1lcyBmb3IgYXR0cmlidXRlcyB0aGF0IHNob3VsZCByZW5kZXIgZGlmZmVyZW50bHkgZnJvbSB0aGVpciBrZXkuXG4gKi9cbmNvbnN0IGF0dHJpYnV0ZURpc3BsYXlOYW1lczogUGFydGlhbDxSZWNvcmQ8QXR0cmlidXRlS2V5LCBzdHJpbmc+PiA9IHtcbiAgbW9kdWxlU3BlY2lmaWVyOiAnTW9kdWxlJyxcbiAgd29ya2Zsb3dOYW1lOiAnV29ya2Zsb3cgTmFtZScsXG4gIHN0ZXBOYW1lOiAnU3RlcCBOYW1lJyxcbiAgc3RlcElkOiAnU3RlcCBJRCcsXG4gIGhvb2tJZDogJ0hvb2sgSUQnLFxuICBhdHRlbXB0OiAnQXR0ZW1wdHMnLFxuICBldmVudElkOiAnRXZlbnQgSUQnLFxuICBydW5JZDogJ1J1biBJRCcsXG4gIHRva2VuOiAnVG9rZW4nLFxuICBldmVudFR5cGU6ICdFdmVudCBUeXBlJyxcbiAgZXJyb3JDb2RlOiAnRXJyb3IgQ29kZScsXG4gIGNvcnJlbGF0aW9uSWQ6ICdDb3JyZWxhdGlvbiBJRCcsXG4gIGRlcGxveW1lbnRJZDogJ0RlcGxveW1lbnQgSUQnLFxuICBzcGVjVmVyc2lvbjogJ1NwZWMgVmVyc2lvbicsXG4gIHdvcmtmbG93Q29yZVZlcnNpb246ICdAd29ya2Zsb3cvY29yZSB2ZXJzaW9uJyxcbiAgY3JlYXRlZEF0OiAnQ3JlYXRlZCcsXG4gIHN0YXJ0ZWRBdDogJ1N0YXJ0ZWQnLFxuICB1cGRhdGVkQXQ6ICdVcGRhdGVkJyxcbiAgY29tcGxldGVkQXQ6ICdDb21wbGV0ZWQnLFxuICBleHBpcmVkQXQ6ICdFeHBpcmVkJyxcbiAgcmV0cnlBZnRlcjogJ1JldHJ5IEFmdGVyJyxcbiAgcmVzdW1lQXQ6ICdSZXN1bWUnLFxuICBsYXN0UmVjZWl2ZWRBdDogJ0xhc3QgUmVjZWl2ZWQnLFxuICBkaXNwb3NlZEF0OiAnRGlzcG9zZWQnLFxuICByZWNlaXZlZENvdW50OiAnVGltZXMgUmVzb2x2ZWQnLFxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGRpc3BsYXkgbmFtZSBmb3IgYW4gYXR0cmlidXRlIGtleS5cbiAqL1xuY29uc3QgZ2V0QXR0cmlidXRlRGlzcGxheU5hbWUgPSAoYXR0cmlidXRlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gYXR0cmlidXRlRGlzcGxheU5hbWVzW2F0dHJpYnV0ZSBhcyBBdHRyaWJ1dGVLZXldID8/IGF0dHJpYnV0ZTtcbn07XG5cbmNvbnN0IGdldE1vZHVsZVNwZWNpZmllckZyb21OYW1lID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcmF3ID0gU3RyaW5nKHZhbHVlKTtcbiAgY29uc3QgcGFyc2VkU3RlcCA9IHBhcnNlU3RlcE5hbWUocmF3KTtcbiAgaWYgKHBhcnNlZFN0ZXApIHtcbiAgICByZXR1cm4gcGFyc2VkU3RlcC5tb2R1bGVTcGVjaWZpZXI7XG4gIH1cbiAgY29uc3QgcGFyc2VkV29ya2Zsb3cgPSBwYXJzZVdvcmtmbG93TmFtZShyYXcpO1xuICBpZiAocGFyc2VkV29ya2Zsb3cpIHtcbiAgICByZXR1cm4gcGFyc2VkV29ya2Zsb3cubW9kdWxlU3BlY2lmaWVyO1xuICB9XG4gIHJldHVybiByYXc7XG59O1xuXG5jb25zdCBwYXJzZURhdGVWYWx1ZSA9ICh2YWx1ZTogdW5rbm93bik6IERhdGUgfCBudWxsID0+IHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc05hTih2YWx1ZS5nZXRUaW1lKCkpID8gbnVsbCA6IHZhbHVlO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGRhdGUgPVxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyBuZXcgRGF0ZSh2YWx1ZSkgOiBuZXcgRGF0ZShTdHJpbmcodmFsdWUpKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkgPyBudWxsIDogZGF0ZTtcbn07XG5cbmNvbnN0IGZvcm1hdExvY2FsTWlsbGlzZWNvbmRUaW1lID0gKGRhdGU6IERhdGUpOiBzdHJpbmcgPT5cbiAgZm9ybWF0KGRhdGUsICdNTU0gZGQgSEg6bW06c3MuU1MgT08nKS50b1VwcGVyQ2FzZSgpO1xuXG5leHBvcnQgY29uc3QgbG9jYWxNaWxsaXNlY29uZFRpbWUgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBkYXRlID0gcGFyc2VEYXRlVmFsdWUodmFsdWUpO1xuICBpZiAoIWRhdGUpIHtcbiAgICByZXR1cm4gJy0nO1xuICB9XG5cbiAgcmV0dXJuIGZvcm1hdExvY2FsTWlsbGlzZWNvbmRUaW1lKGRhdGUpO1xufTtcblxuY29uc3QgbG9jYWxNaWxsaXNlY29uZFRpbWVPck51bGwgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZVZhbHVlKHZhbHVlKTtcbiAgaWYgKCFkYXRlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdExvY2FsTWlsbGlzZWNvbmRUaW1lKGRhdGUpO1xufTtcblxuY29uc3QgdGltZXN0YW1wV2l0aFRvb2x0aXBPck51bGwgPSAodmFsdWU6IHVua25vd24pOiBSZWFjdE5vZGUgfCBudWxsID0+IHtcbiAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZVZhbHVlKHZhbHVlKTtcbiAgaWYgKCFkYXRlKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIChcbiAgICA8VGltZXN0YW1wVG9vbHRpcCBkYXRlPXtkYXRlfT5cbiAgICAgIDxzcGFuPntmb3JtYXRMb2NhbE1pbGxpc2Vjb25kVGltZShkYXRlKX08L3NwYW4+XG4gICAgPC9UaW1lc3RhbXBUb29sdGlwPlxuICApO1xufTtcblxuaW50ZXJmYWNlIERpc3BsYXlDb250ZXh0IHtcbiAgc3RlcE5hbWU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGF0dHJpYnV0ZVRvRGlzcGxheUZuOiBSZWNvcmQ8XG4gIEF0dHJpYnV0ZUtleSxcbiAgKHZhbHVlOiB1bmtub3duLCBjb250ZXh0PzogRGlzcGxheUNvbnRleHQpID0+IG51bGwgfCBzdHJpbmcgfCBSZWFjdE5vZGVcbj4gPSB7XG4gIC8vIE5hbWVzIHRoYXQgbmVlZCBwcmV0dHktcHJpbnRpbmdcbiAgd29ya2Zsb3dOYW1lOiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICBtb2R1bGVTcGVjaWZpZXI6ICh2YWx1ZTogdW5rbm93bikgPT4gZ2V0TW9kdWxlU3BlY2lmaWVyRnJvbU5hbWUodmFsdWUpLFxuICBzdGVwTmFtZTogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgLy8gSURzXG4gIHJ1bklkOiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICBzdGVwSWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgaG9va0lkOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIGV2ZW50SWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgLy8gUnVuL3N0ZXAgZGV0YWlsc1xuICBzdGF0dXM6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIGF0dGVtcHQ6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgLy8gSG9vayBkZXRhaWxzXG4gIHRva2VuOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIGlzV2ViaG9vazogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICBpc1N5c3RlbTogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICByZWNlaXZlZENvdW50OiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIGxhc3RSZWNlaXZlZEF0OiBsb2NhbE1pbGxpc2Vjb25kVGltZU9yTnVsbCxcbiAgZGlzcG9zZWRBdDogbG9jYWxNaWxsaXNlY29uZFRpbWVPck51bGwsXG4gIC8vIEV2ZW50IGRldGFpbHNcbiAgZXZlbnRUeXBlOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIGNvcnJlbGF0aW9uSWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgLy8gUHJvamVjdCBkZXRhaWxzXG4gIGRlcGxveW1lbnRJZDogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICBzcGVjVmVyc2lvbjogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICB3b3JrZmxvd0NvcmVWZXJzaW9uOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIC8vIFRlbmFuY3kgKHdlIGRvbid0IHNob3cgdGhlc2UpXG4gIG93bmVySWQ6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIHByb2plY3RJZDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgZW52aXJvbm1lbnQ6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIGV4ZWN1dGlvbkNvbnRleHQ6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIC8vIEF0dHJpYnV0ZXMg4oCUIHN0cmluZy1zdHJpbmcgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhlIHJ1bi5cbiAgLy8gUmVuZGVyZWQgYXMga2V5LXZhbHVlIHJvd3MgaW4gaXRzIG93biBjb2xsYXBzaWJsZSBEZXRhaWxDYXJkO1xuICAvLyBpZiBlbXB0eS9taXNzaW5nLCBoaWRkZW4gYnkgdGhlIGhhc0Rpc3BsYXlDb250ZW50IGdhdGUuXG4gIGF0dHJpYnV0ZXM6ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmICghaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFJ1bkF0dHJpYnV0ZXNDYXJkIGF0dHJpYnV0ZXM9e3ZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz59IC8+O1xuICB9LFxuICAvLyBEYXRlcyDigJQgd3JhcHBlZCB3aXRoIFRpbWVzdGFtcFRvb2x0aXAgc2hvd2luZyBVVEMvbG9jYWwgKyByZWxhdGl2ZSB0aW1lXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wV2l0aFRvb2x0aXBPck51bGwsXG4gIHN0YXJ0ZWRBdDogdGltZXN0YW1wV2l0aFRvb2x0aXBPck51bGwsXG4gIHVwZGF0ZWRBdDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgY29tcGxldGVkQXQ6IHRpbWVzdGFtcFdpdGhUb29sdGlwT3JOdWxsLFxuICBleHBpcmVkQXQ6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIHJldHJ5QWZ0ZXI6IHRpbWVzdGFtcFdpdGhUb29sdGlwT3JOdWxsLFxuICByZXN1bWVBdDogdGltZXN0YW1wV2l0aFRvb2x0aXBPck51bGwsXG4gIC8vIFJlc29sdmVkIGF0dHJpYnV0ZXMsIHdvbid0IGFjdHVhbGx5IHVzZSB0aGlzIGZ1bmN0aW9uXG4gIG1ldGFkYXRhOiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBpZiAoIWhhc0Rpc3BsYXlDb250ZW50KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHZhbHVlKSkgcmV0dXJuIDxFbmNyeXB0ZWREYXRhQmxvY2sgLz47XG4gICAgaWYgKGlzRXhwaXJlZE1hcmtlcih2YWx1ZSkpIHJldHVybiA8RXhwaXJlZEZpZWxkQmxvY2sgLz47XG4gICAgcmV0dXJuIEpzb25CbG9jayh2YWx1ZSk7XG4gIH0sXG4gIGlucHV0OiAodmFsdWU6IHVua25vd24sIGNvbnRleHQ/OiBEaXNwbGF5Q29udGV4dCkgPT4ge1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJJbnB1dFwiPlxuICAgICAgICAgIDxFbmNyeXB0ZWRGaWVsZEJsb2NrIC8+XG4gICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc0V4cGlyZWRNYXJrZXIodmFsdWUpKSByZXR1cm4gPEV4cGlyZWRGaWVsZEJsb2NrIC8+O1xuICAgIC8vIENoZWNrIGlmIGlucHV0IGhhcyBhcmdzICsgY2xvc3VyZSB2YXJzIHN0cnVjdHVyZVxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdhcmdzJyBpbiB2YWx1ZSkge1xuICAgICAgY29uc3QgeyBhcmdzLCBjbG9zdXJlVmFycywgdGhpc1ZhbCB9ID0gdmFsdWUgYXMge1xuICAgICAgICBhcmdzOiB1bmtub3duW107XG4gICAgICAgIGNsb3N1cmVWYXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIHRoaXNWYWw/OiB1bmtub3duO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhhc0Nsb3N1cmVWYXJzID0gaGFzRGlzcGxheUNvbnRlbnQoY2xvc3VyZVZhcnMpO1xuICAgICAgY29uc3QgaGFzVGhpc1ZhbCA9IGhhc0Rpc3BsYXlDb250ZW50KHRoaXNWYWwpO1xuICAgICAgY29uc3QgaGFzQXJncyA9IGhhc0Rpc3BsYXlDb250ZW50KGFyZ3MpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgZG9TdHJlYW1TdGVwIC0gc2hvdyBjb252ZXJzYXRpb24gdmlldyB3aXRoIHRhYnNcbiAgICAgIGlmIChjb250ZXh0Py5zdGVwTmFtZSAmJiBpc0RvU3RyZWFtU3RlcChjb250ZXh0LnN0ZXBOYW1lKSkge1xuICAgICAgICBjb25zdCBjb252ZXJzYXRpb24gPSBleHRyYWN0Q29udmVyc2F0aW9uKGFyZ3MpO1xuICAgICAgICBpZiAoY29udmVyc2F0aW9uICYmIGNvbnZlcnNhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxDb252ZXJzYXRpb25XaXRoVGFicyBjb252ZXJzYXRpb249e2NvbnZlcnNhdGlvbn0gYXJncz17YXJnc30gLz5cbiAgICAgICAgICAgICAge2hhc0Nsb3N1cmVWYXJzICYmIChcbiAgICAgICAgICAgICAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PVwiQ2xvc3VyZSBWYXJpYWJsZXNcIj5cbiAgICAgICAgICAgICAgICAgIHtKc29uQmxvY2soY2xvc3VyZVZhcnMpfVxuICAgICAgICAgICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2hhc1RoaXNWYWwgJiYgKFxuICAgICAgICAgICAgICAgIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJUaGlzIFZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICB7SnNvbkJsb2NrKHRoaXNWYWwpfVxuICAgICAgICAgICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRG9uJ3QgcmVuZGVyIGFuIGVtcHR5IFwiSW5wdXQgKDAgYXJndW1lbnRzKVwiIGNhcmQgd2hlbiBubyBpbnB1dCBleGlzdHMuXG4gICAgICBpZiAoIWhhc0FyZ3MgJiYgIWhhc0Nsb3N1cmVWYXJzICYmICFoYXNUaGlzVmFsKSB7XG4gICAgICAgIHJldHVybiA8RGV0YWlsQ2FyZCBzdW1tYXJ5PVwiSW5wdXQgKG5vIGRhdGEpXCIgZGlzYWJsZWQgLz47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIklucHV0XCI+XG4gICAgICAgICAgICB7QXJyYXkuaXNBcnJheShhcmdzKVxuICAgICAgICAgICAgICA/IGFyZ3MubWFwKCh2LCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmlyc3Q6bXQtMFwiIGtleT17aX0+XG4gICAgICAgICAgICAgICAgICAgIHtKc29uQmxvY2sodil9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICA6IEpzb25CbG9jayhhcmdzKX1cbiAgICAgICAgICA8L0RldGFpbENhcmQ+XG4gICAgICAgICAge2hhc0Nsb3N1cmVWYXJzICYmIChcbiAgICAgICAgICAgIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJDbG9zdXJlIFZhcmlhYmxlc1wiPlxuICAgICAgICAgICAgICB7SnNvbkJsb2NrKGNsb3N1cmVWYXJzKX1cbiAgICAgICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtoYXNUaGlzVmFsICYmIChcbiAgICAgICAgICAgIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJDb250ZXh0XCI+e0pzb25CbG9jayh0aGlzVmFsKX08L0RldGFpbENhcmQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrOiB0cmVhdCBhcyBwbGFpbiBhcnJheSBvciBvYmplY3RcbiAgICBpZiAoIWhhc0Rpc3BsYXlDb250ZW50KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJJbnB1dCAobm8gZGF0YSlcIiBkaXNhYmxlZCAvPjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJJbnB1dFwiPlxuICAgICAgICB7QXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlLm1hcCgodiwgaSkgPT4gKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmlyc3Q6bXQtMFwiIGtleT17aX0+XG4gICAgICAgICAgICAgICAge0pzb25CbG9jayh2KX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApKVxuICAgICAgICAgIDogSnNvbkJsb2NrKHZhbHVlKX1cbiAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICApO1xuICB9LFxuICBvdXRwdXQ6ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJPdXRwdXRcIj5cbiAgICAgICAgICA8RW5jcnlwdGVkRmllbGRCbG9jayAvPlxuICAgICAgICA8L0RldGFpbENhcmQ+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWhhc0Rpc3BsYXlDb250ZW50KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKGlzRXhwaXJlZE1hcmtlcih2YWx1ZSkpIHJldHVybiA8RXhwaXJlZEZpZWxkQmxvY2sgLz47XG4gICAgcmV0dXJuIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJPdXRwdXRcIj57SnNvbkJsb2NrKHZhbHVlKX08L0RldGFpbENhcmQ+O1xuICB9LFxuICBlcnJvcjogKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIkVycm9yXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgPEVuY3J5cHRlZEZpZWxkQmxvY2sgLz5cbiAgICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzRXhwaXJlZE1hcmtlcih2YWx1ZSkpIHJldHVybiA8RXhwaXJlZEZpZWxkQmxvY2sgLz47XG4gICAgaWYgKCFoYXNEaXNwbGF5Q29udGVudCh2YWx1ZSkpIHJldHVybiBudWxsO1xuXG4gICAgLy8gU3RydWN0dXJlZCB3b3JrZmxvdyBlcnJvcnMgbWF5IGJlIHBlcnNpc3RlZCBhcyBlaXRoZXIgYHsgbWVzc2FnZSB9YCBvclxuICAgIC8vIGB7IG1lc3NhZ2UsIHN0YWNrIH1gLiBSZW5kZXIgYm90aCB3aXRoIHRoZSBkZWRpY2F0ZWQgZXJyb3IgYmxvY2suXG4gICAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIkVycm9yXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgPEVycm9yU3RhY2tCbG9jayB2YWx1ZT17dmFsdWV9IC8+XG4gICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJFcnJvclwiIGRlZmF1bHRPcGVuPlxuICAgICAgICB7SnNvbkJsb2NrKHZhbHVlKX1cbiAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICApO1xuICB9LFxuICBldmVudERhdGE6ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJFdmVudCBEYXRhXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgPEVuY3J5cHRlZEZpZWxkQmxvY2sgLz5cbiAgICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzRXhwaXJlZE1hcmtlcih2YWx1ZSkpIHJldHVybiA8RXhwaXJlZEZpZWxkQmxvY2sgLz47XG4gICAgaWYgKCFoYXNEaXNwbGF5Q29udGVudCh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PVwiRXZlbnQgRGF0YVwiIGRlZmF1bHRPcGVuPlxuICAgICAgICB7SnNvbkJsb2NrKHZhbHVlKX1cbiAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICApO1xuICB9LFxuICBlcnJvckNvZGU6ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH0sXG59O1xuXG5jb25zdCByZXNvbHZhYmxlQXR0cmlidXRlcyA9IFtcbiAgJ2lucHV0JyxcbiAgJ291dHB1dCcsXG4gICdlcnJvcicsXG4gICdtZXRhZGF0YScsXG4gICdhdHRyaWJ1dGVzJyxcbiAgJ2V2ZW50RGF0YScsXG5dO1xuXG4vLyBBdHRyaWJ1dGVzIHdob3NlIGRpc3BsYXlGbiByZW5kZXJzIGl0cyBvd24gc2VjdGlvbiBoZWFkZXIgdmlhIERldGFpbENhcmQsXG4vLyBzbyB0aGUgb3V0ZXIgQXR0cmlidXRlQmxvY2sgc2hvdWxkIG5vdCBkdXBsaWNhdGUgdGhlIGxhYmVsLlxuY29uc3Qgc2VsZkhlYWRlcmVkQXR0cmlidXRlcyA9IG5ldyBTZXQoW1xuICAnaW5wdXQnLFxuICAnb3V0cHV0JyxcbiAgJ2Vycm9yJyxcbiAgJ2F0dHJpYnV0ZXMnLFxuICAnZXZlbnREYXRhJyxcbl0pO1xuXG5jb25zdCBFeHBpcmVkRGF0YU1lc3NhZ2UgPSAoKSA9PiAoXG4gIDxkaXZcbiAgICBjbGFzc05hbWU9XCJ0ZXh0LWNvcHktMTIgcm91bmRlZC1tZCBib3JkZXIgcC00IG15LTJcIlxuICAgIHN0eWxlPXt7XG4gICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTEwMCknLFxuICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxuICAgIH19XG4gID5cbiAgICA8c3Bhbj5UaGUgZGF0YSBmb3IgdGhpcyBydW4gaGFzIGV4cGlyZWQgYW5kIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuPC9zcGFuPlxuICA8L2Rpdj5cbik7XG5cbmNvbnN0IGNvcHlhYmxlQmFzaWNBdHRyaWJ1dGVzID0gbmV3IFNldDxBdHRyaWJ1dGVLZXk+KFtcbiAgJ3N0ZXBJZCcsXG4gICdob29rSWQnLFxuICAnZXZlbnRJZCcsXG4gICdkZXBsb3ltZW50SWQnLFxuXSk7XG5cbmV4cG9ydCBjb25zdCBBdHRyaWJ1dGVCbG9jayA9ICh7XG4gIGF0dHJpYnV0ZSxcbiAgdmFsdWUsXG4gIGlzTG9hZGluZyxcbiAgaW5saW5lID0gZmFsc2UsXG4gIGNvbnRleHQsXG59OiB7XG4gIGF0dHJpYnV0ZTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgaW5saW5lPzogYm9vbGVhbjtcbiAgY29udGV4dD86IERpc3BsYXlDb250ZXh0O1xufSkgPT4ge1xuICBjb25zdCBkZWNyeXB0Q3R4ID0gdXNlQ29udGV4dChEZWNyeXB0Q2xpY2tDb250ZXh0KTtcbiAgY29uc3QgaXNFeHBhbmRhYmxlTG9hZGluZ1RhcmdldCA9XG4gICAgYXR0cmlidXRlID09PSAnaW5wdXQnIHx8XG4gICAgYXR0cmlidXRlID09PSAnb3V0cHV0JyB8fFxuICAgIGF0dHJpYnV0ZSA9PT0gJ2V2ZW50RGF0YSc7XG4gIGlmIChpc0xvYWRpbmcgJiYgaXNFeHBhbmRhYmxlTG9hZGluZ1RhcmdldCAmJiAhaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSB7XG4gICAgY29uc3QgbGFiZWwgPVxuICAgICAgYXR0cmlidXRlID09PSAnZXZlbnREYXRhJ1xuICAgICAgICA/ICdFdmVudCBEYXRhJ1xuICAgICAgICA6IGF0dHJpYnV0ZSA9PT0gJ291dHB1dCdcbiAgICAgICAgICA/ICdPdXRwdXQnXG4gICAgICAgICAgOiAnSW5wdXQnO1xuICAgIGlmIChkZWNyeXB0Q3R4Py5oYXNFbmNyeXB0ZWREYXRhKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PXtsYWJlbH0gZGVmYXVsdE9wZW49e2F0dHJpYnV0ZSA9PT0gJ2V2ZW50RGF0YSd9PlxuICAgICAgICAgIDxFbmNyeXB0ZWRGaWVsZEJsb2NrIC8+XG4gICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiA8RGV0YWlsQ2FyZCBzdW1tYXJ5PXtsYWJlbH0gLz47XG4gIH1cblxuICBjb25zdCBkaXNwbGF5Rm4gPVxuICAgIGF0dHJpYnV0ZVRvRGlzcGxheUZuW2F0dHJpYnV0ZSBhcyBrZXlvZiB0eXBlb2YgYXR0cmlidXRlVG9EaXNwbGF5Rm5dO1xuICBpZiAoIWRpc3BsYXlGbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGRpc3BsYXlGbih2YWx1ZSwgY29udGV4dCk7XG4gIGlmICghZGlzcGxheVZhbHVlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaW5saW5lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNVwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtWzExcHhdIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHthdHRyaWJ1dGV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1bMTFweF1cIiBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknIH19PlxuICAgICAgICAgIHtkaXNwbGF5VmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpZiAoc2VsZkhlYWRlcmVkQXR0cmlidXRlcy5oYXMoYXR0cmlidXRlKSkge1xuICAgIHJldHVybiA8PntkaXNwbGF5VmFsdWV9PC8+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICB7dHlwZW9mIGlzTG9hZGluZyA9PT0gJ2Jvb2xlYW4nICYmIGlzTG9hZGluZyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTkgcmlnaHQtNFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgaC00IHctNCBib3JkZXItYi0yXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxkaXYga2V5PXthdHRyaWJ1dGV9IGNsYXNzTmFtZT1cIm15LTIgZmxleCBmbGV4LWNvbCBnYXAtMFwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTE0IHRleHQtZ3JheS0xMDAwIGZvbnQtbWVkaXVtIGZpcnN0LWxldHRlcjp1cHBlcmNhc2VcIj5cbiAgICAgICAgICB7YXR0cmlidXRlfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHNcIiBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknIH19PlxuICAgICAgICAgIHtkaXNwbGF5VmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IEF0dHJpYnV0ZVBhbmVsID0gKHtcbiAgZGF0YSxcbiAgbW9kdWxlU3BlY2lmaWVyLFxuICBpc0xvYWRpbmcsXG4gIGVycm9yLFxuICBleHBpcmVkQXQsXG4gIG9uU3RyZWFtQ2xpY2ssXG4gIG9uUnVuQ2xpY2ssXG4gIG9uRGVjcnlwdCxcbiAgaXNEZWNyeXB0aW5nID0gZmFsc2UsXG4gIHJlc291cmNlLFxufToge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbW9kdWxlU3BlY2lmaWVyPzogc3RyaW5nO1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICBlcnJvcj86IEVycm9yO1xuICBleHBpcmVkQXQ/OiBzdHJpbmcgfCBEYXRlO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhIHN0cmVhbSByZWZlcmVuY2UgaXMgY2xpY2tlZCAqL1xuICBvblN0cmVhbUNsaWNrPzogKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgcnVuIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uUnVuQ2xpY2s/OiAocnVuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYW4gZW5jcnlwdGVkIG1hcmtlciBpcyBjbGlja2VkICh0cmlnZ2VycyBkZWNyeXB0aW9uKSAqL1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciBkZWNyeXB0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICAvKiogUmVzb3VyY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc3BhbiDigJQgdXNlZCB0byBzaG93IHRhcmdldGVkIGxvYWRpbmcgc2tlbGV0b25zLiAqL1xuICByZXNvdXJjZT86IHN0cmluZztcbn0pID0+IHtcbiAgY29uc3QgdG9hc3QgPSB1c2VUb2FzdCgpO1xuICAvLyBFeHRyYWN0IHdvcmtmbG93Q29yZVZlcnNpb24gZnJvbSBleGVjdXRpb25Db250ZXh0IGZvciBkaXNwbGF5XG4gIGNvbnN0IGRpc3BsYXlEYXRhID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0geyAuLi5kYXRhIH07XG4gICAgY29uc3QgZXhlY0N0eCA9IGRhdGEuZXhlY3V0aW9uQ29udGV4dCBhc1xuICAgICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGV4ZWNDdHg/LndvcmtmbG93Q29yZVZlcnNpb24pIHtcbiAgICAgIHJlc3VsdC53b3JrZmxvd0NvcmVWZXJzaW9uID0gZXhlY0N0eC53b3JrZmxvd0NvcmVWZXJzaW9uO1xuICAgIH1cbiAgICBpZiAobW9kdWxlU3BlY2lmaWVyKSB7XG4gICAgICByZXN1bHQubW9kdWxlU3BlY2lmaWVyID0gbW9kdWxlU3BlY2lmaWVyO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEuc3RlcE5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXN1bHQubW9kdWxlU3BlY2lmaWVyID0gZGF0YS5zdGVwTmFtZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhLndvcmtmbG93TmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlc3VsdC5tb2R1bGVTcGVjaWZpZXIgPSBkYXRhLndvcmtmbG93TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgW2RhdGEsIG1vZHVsZVNwZWNpZmllcl0pO1xuICBjb25zdCBoYXNFeHBpcmVkID0gZXhwaXJlZEF0ICE9IG51bGwgJiYgbmV3IERhdGUoZXhwaXJlZEF0KSA8IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGJhc2ljQXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKGRpc3BsYXlEYXRhKVxuICAgIC5maWx0ZXIoKGtleSkgPT4gIXJlc29sdmFibGVBdHRyaWJ1dGVzLmluY2x1ZGVzKGtleSkpXG4gICAgLnNvcnQoc29ydEJ5QXR0cmlidXRlT3JkZXIpO1xuICBjb25zdCByZXNvbHZlZEF0dHJpYnV0ZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBwcmVzZW50ID0gT2JqZWN0LmtleXMoZGlzcGxheURhdGEpXG4gICAgICAuZmlsdGVyKChrZXkpID0+IHJlc29sdmFibGVBdHRyaWJ1dGVzLmluY2x1ZGVzKGtleSkpXG4gICAgICAuc29ydChzb3J0QnlBdHRyaWJ1dGVPcmRlcik7XG5cbiAgICBpZiAoIWlzTG9hZGluZykgcmV0dXJuIHByZXNlbnQ7XG5cbiAgICBpZiAocmVzb3VyY2UgPT09ICdzbGVlcCcpIHJldHVybiBwcmVzZW50O1xuXG4gICAgLy8gRHVyaW5nIGxvYWRpbmcsIGVuc3VyZSBzZWN0aW9ucyBhcHBlYXIgc28gdGhlaXIgc2tlbGV0b25zIHJlbmRlclxuICAgIC8vIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uIChhYm92ZSB0aGUgZXZlbnRzIHNlY3Rpb24pLlxuICAgIGNvbnN0IGxvYWRpbmdEZWZhdWx0cyA9IFsnaW5wdXQnLCAnb3V0cHV0J107XG4gICAgZm9yIChjb25zdCBrZXkgb2YgbG9hZGluZ0RlZmF1bHRzKSB7XG4gICAgICBpZiAoIXByZXNlbnQuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBwcmVzZW50LnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZXNlbnQuc29ydChzb3J0QnlBdHRyaWJ1dGVPcmRlcik7XG4gIH0sIFtkaXNwbGF5RGF0YSwgaXNMb2FkaW5nLCByZXNvdXJjZV0pO1xuXG4gIC8vIEZpbHRlciBvdXQgYXR0cmlidXRlcyB0aGF0IHJldHVybiBudWxsXG4gIGNvbnN0IHZpc2libGVCYXNpY0F0dHJpYnV0ZXMgPSBiYXNpY0F0dHJpYnV0ZXMuZmlsdGVyKChhdHRyaWJ1dGUpID0+IHtcbiAgICBjb25zdCBkaXNwbGF5Rm4gPVxuICAgICAgYXR0cmlidXRlVG9EaXNwbGF5Rm5bYXR0cmlidXRlIGFzIGtleW9mIHR5cGVvZiBhdHRyaWJ1dGVUb0Rpc3BsYXlGbl07XG4gICAgaWYgKCFkaXNwbGF5Rm4pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSBkaXNwbGF5Rm4oXG4gICAgICBkaXNwbGF5RGF0YVthdHRyaWJ1dGUgYXMga2V5b2YgdHlwZW9mIGRpc3BsYXlEYXRhXVxuICAgICk7XG4gICAgcmV0dXJuIGRpc3BsYXlWYWx1ZSAhPT0gbnVsbDtcbiAgfSk7XG5cbiAgLy8gS2VlcCBgbW9kdWxlU3BlY2lmaWVyYCBpbW1lZGlhdGVseSBhZnRlciBgd29ya2Zsb3dOYW1lYCBvciBgc3RlcE5hbWVgLlxuICBjb25zdCBvcmRlcmVkQmFzaWNBdHRyaWJ1dGVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IFsuLi52aXNpYmxlQmFzaWNBdHRyaWJ1dGVzXTtcbiAgICBjb25zdCBtb2R1bGVTcGVjaWZpZXJJbmRleCA9IGF0dHJpYnV0ZXMuaW5kZXhPZignbW9kdWxlU3BlY2lmaWVyJyk7XG4gICAgaWYgKG1vZHVsZVNwZWNpZmllckluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgYXR0cmlidXRlcy5zcGxpY2UobW9kdWxlU3BlY2lmaWVySW5kZXgsIDEpO1xuICAgIGNvbnN0IHdvcmtmbG93TmFtZUluZGV4ID0gYXR0cmlidXRlcy5pbmRleE9mKCd3b3JrZmxvd05hbWUnKTtcbiAgICBpZiAod29ya2Zsb3dOYW1lSW5kZXggIT09IC0xKSB7XG4gICAgICBhdHRyaWJ1dGVzLnNwbGljZSh3b3JrZmxvd05hbWVJbmRleCArIDEsIDAsICdtb2R1bGVTcGVjaWZpZXInKTtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIGNvbnN0IHN0ZXBOYW1lSW5kZXggPSBhdHRyaWJ1dGVzLmluZGV4T2YoJ3N0ZXBOYW1lJyk7XG4gICAgaWYgKHN0ZXBOYW1lSW5kZXggIT09IC0xKSB7XG4gICAgICBhdHRyaWJ1dGVzLnNwbGljZShzdGVwTmFtZUluZGV4ICsgMSwgMCwgJ21vZHVsZVNwZWNpZmllcicpO1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgYXR0cmlidXRlcy51bnNoaWZ0KCdtb2R1bGVTcGVjaWZpZXInKTtcbiAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgfSwgW3Zpc2libGVCYXNpY0F0dHJpYnV0ZXNdKTtcblxuICAvLyBNZW1vaXplIGNvbnRleHQgb2JqZWN0IHRvIGF2b2lkIG9iamVjdCByZWNvbnN0cnVjdGlvbiBvbiByZW5kZXJcbiAgY29uc3QgZGlzcGxheUNvbnRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBzdGVwTmFtZTogZGlzcGxheURhdGEuc3RlcE5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIH0pLFxuICAgIFtkaXNwbGF5RGF0YS5zdGVwTmFtZV1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29weU1vZHVsZVNwZWNpZmllciA9IHVzZUNhbGxiYWNrKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZFxuICAgICAgLndyaXRlVGV4dCh2YWx1ZSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdG9hc3Quc3VjY2VzcygnbW9kdWxlU3BlY2lmaWVyIGNvcGllZCcpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gY29weSBtb2R1bGVTcGVjaWZpZXInKTtcbiAgICAgIH0pO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb3V0ZXJEZWNyeXB0Q3R4ID0gdXNlQ29udGV4dChEZWNyeXB0Q2xpY2tDb250ZXh0KTtcbiAgY29uc3QgZGVjcnlwdFZhbHVlID0gb25EZWNyeXB0XG4gICAgPyB7XG4gICAgICAgIG9uRGVjcnlwdCxcbiAgICAgICAgaXNEZWNyeXB0aW5nLFxuICAgICAgICBoYXNFbmNyeXB0ZWREYXRhOiBvdXRlckRlY3J5cHRDdHg/Lmhhc0VuY3J5cHRlZERhdGEsXG4gICAgICB9XG4gICAgOiBvdXRlckRlY3J5cHRDdHg7XG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGV4dENhcmRQcm92aWRlcj5cbiAgICAgIDxSdW5DbGlja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e29uUnVuQ2xpY2t9PlxuICAgICAgICA8U3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblN0cmVhbUNsaWNrfT5cbiAgICAgICAgICA8RGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17ZGVjcnlwdFZhbHVlfT5cbiAgICAgICAgICAgIHt2aXNpYmxlQmFzaWNBdHRyaWJ1dGVzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuIGRpdmlkZS15IGRpdmlkZS1ncmF5LWFscGhhLTQwMCBtYi0zXCI+XG4gICAgICAgICAgICAgICAge29yZGVyZWRCYXNpY0F0dHJpYnV0ZXMubWFwKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGF0dHJpYnV0ZVRvRGlzcGxheUZuW1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgYXMga2V5b2YgdHlwZW9mIGF0dHJpYnV0ZVRvRGlzcGxheUZuXG4gICAgICAgICAgICAgICAgICBdPy4oZGlzcGxheURhdGFbYXR0cmlidXRlIGFzIGtleW9mIHR5cGVvZiBkaXNwbGF5RGF0YV0pO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNNb2R1bGVTcGVjaWZpZXIgPSBhdHRyaWJ1dGUgPT09ICdtb2R1bGVTcGVjaWZpZXInO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNDb3B5YWJsZUJhc2ljQXR0cmlidXRlID1cbiAgICAgICAgICAgICAgICAgICAgY29weWFibGVCYXNpY0F0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZSBhcyBBdHRyaWJ1dGVLZXkpICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkaXNwbGF5VmFsdWUgPT09ICdzdHJpbmcnO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyVmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZGlzcGxheVZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgID8gZGlzcGxheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZSA/PyBkaXNwbGF5RGF0YS5tb2R1bGVTcGVjaWZpZXIgPz8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHktMlwiXG4gICAgICAgICAgICAgICAgICAgICAga2V5PXthdHRyaWJ1dGV9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTE0IHRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRBdHRyaWJ1dGVEaXNwbGF5TmFtZShhdHRyaWJ1dGUpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7aXNNb2R1bGVTcGVjaWZpZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtaW4tdy0wIG1heC13LVs3MCVdIHRydW5jYXRlIHRleHQtcmlnaHQgdGV4dC1sYWJlbC0xMyBmb250LW1vbm9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17bW9kdWxlU3BlY2lmaWVyVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ29weU1vZHVsZVNwZWNpZmllcihtb2R1bGVTcGVjaWZpZXJWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7bW9kdWxlU3BlY2lmaWVyVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogaXNDb3B5YWJsZUJhc2ljQXR0cmlidXRlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IG1pbi13LTAgbWF4LXctWzcwJV0gaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0xIHRleHQtcmlnaHQgdGV4dC1bMTNweF0gZm9udC1tb25vXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17ZGlzcGxheVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWlkZGxlVHJ1bmNhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZGlzcGxheVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxDb3B5QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weVRleHQ9e2Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9e2BDb3B5ICR7Z2V0QXR0cmlidXRlRGlzcGxheU5hbWUoYXR0cmlidXRlKX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNocmluay0wIC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0IHRleHQtbGFiZWwtMTMgZm9udC1tb25vXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtkaXNwbGF5VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIHtpc0xvYWRpbmcgJiYgcmVzb3VyY2UgPT09ICdzbGVlcCcgJiYgIWRpc3BsYXlEYXRhLnJlc3VtZUF0ICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHktMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWluLWgtWzMycHhdIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgcm91bmRlZC1zbSBweC0yLjUgcHktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LVsxNHB4XSBmaXJzdC1sZXR0ZXI6dXBwZXJjYXNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyB9fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZUF0XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTQgdy1bNTUlXVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Vycm9yID8gKFxuICAgICAgICAgICAgICA8RXJyb3JDYXJkXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJGYWlsZWQgdG8gbG9hZCByZXNvdXJjZSBkZXRhaWxzXCJcbiAgICAgICAgICAgICAgICBkZXRhaWxzPXtlcnJvci5tZXNzYWdlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm15LTRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IGhhc0V4cGlyZWQgPyAoXG4gICAgICAgICAgICAgIDxFeHBpcmVkRGF0YU1lc3NhZ2UgLz5cbiAgICAgICAgICAgICkgOiByZXNvbHZlZEF0dHJpYnV0ZXMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7cmVzb2x2ZWRBdHRyaWJ1dGVzLm1hcCgoYXR0cmlidXRlKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQmxvY2tcbiAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgIGtleT17YXR0cmlidXRlfVxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU9e2F0dHJpYnV0ZX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Rpc3BsYXlEYXRhW2F0dHJpYnV0ZSBhcyBrZXlvZiB0eXBlb2YgZGlzcGxheURhdGFdfVxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0PXtkaXNwbGF5Q29udGV4dH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9EZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICA8L1N0cmVhbUNsaWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgIDwvUnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvQ29udGV4dENhcmRQcm92aWRlcj5cbiAgKTtcbn07XG4iXX0=
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=
@@ -10,7 +10,7 @@ export declare const isReservedAttributeKey: (key: string) => boolean;
10
10
  */
11
11
  export declare function sortAttributeKeys(keys: string[]): string[];
12
12
  /**
13
- * Collapsible card showing a run's materialized attributes as key-value
13
+ * Collapsible section showing a run's materialized attributes as key-value
14
14
  * rows. Reserved (`$`-prefixed) keys are visually de-emphasized with a
15
15
  * badge and sorted after user keys.
16
16
  */
@@ -1 +1 @@
1
- {"version":3,"file":"attributes-block.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/attributes-block.tsx"],"names":[],"mappings":"AASA;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAAI,KAAK,MAAM,KAAG,OACN,CAAC;AA0DhD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAO1D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,GACX,EAAE;IACD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,kDAiBA;AAgCD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,2CAgC5D"}
1
+ {"version":3,"file":"attributes-block.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/attributes-block.tsx"],"names":[],"mappings":"AASA;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAAI,KAAK,MAAM,KAAG,OACN,CAAC;AAqDhD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAO1D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,GACX,EAAE;IACD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,kDAaA;AAgCD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,2CAgC5D"}
@@ -17,9 +17,7 @@ function ReservedBadge() {
17
17
  }
18
18
  function AttributeRow({ attributeKey, value, removed = false, }) {
19
19
  const reserved = isReservedAttributeKey(attributeKey);
20
- return (_jsxs("div", { className: "flex items-center justify-between gap-3 py-1.5", children: [_jsxs("span", { className: "flex min-w-0 items-center gap-1.5 text-label-12 font-mono", style: {
21
- color: reserved ? 'var(--ds-gray-700)' : 'var(--ds-gray-900)',
22
- }, children: [_jsx("span", { className: "truncate", children: attributeKey }), reserved && _jsx(ReservedBadge, {})] }), removed ? (_jsx("span", { className: "shrink-0 text-label-12 italic", style: { color: 'var(--ds-gray-700)' }, children: "removed" })) : (_jsx("span", { className: "max-w-[60%] truncate text-right text-label-12 font-mono text-gray-1000", title: value, children: value }))] }));
20
+ return (_jsxs("div", { className: "flex items-center justify-between gap-3 py-0.5", children: [_jsxs("span", { className: "flex min-w-0 items-center gap-1.5 text-label-13 text-gray-900", style: reserved ? { color: 'var(--ds-gray-700)' } : undefined, children: [_jsx("span", { className: "truncate", children: attributeKey }), reserved && _jsx(ReservedBadge, {})] }), removed ? (_jsx("span", { className: "shrink-0 text-copy-13 italic text-gray-700", children: "removed" })) : (_jsx("span", { className: "max-w-[60%] truncate text-copy-13 text-gray-1000", title: value, children: value }))] }));
23
21
  }
24
22
  /**
25
23
  * Sort attribute keys for display: user keys first (alphabetical), then
@@ -36,7 +34,7 @@ export function sortAttributeKeys(keys) {
36
34
  });
37
35
  }
38
36
  /**
39
- * Collapsible card showing a run's materialized attributes as key-value
37
+ * Collapsible section showing a run's materialized attributes as key-value
40
38
  * rows. Reserved (`$`-prefixed) keys are visually de-emphasized with a
41
39
  * badge and sorted after user keys.
42
40
  */
@@ -44,7 +42,7 @@ export function RunAttributesCard({ attributes, }) {
44
42
  const keys = sortAttributeKeys(Object.keys(attributes));
45
43
  if (keys.length === 0)
46
44
  return null;
47
- return (_jsx(DetailCard, { summary: `Attributes (${keys.length})`, defaultOpen: true, contentClassName: "mb-0", children: _jsx("div", { className: "flex flex-col divide-y divide-gray-alpha-400", children: keys.map((key) => (_jsx(AttributeRow, { attributeKey: key, value: attributes[key] }, key))) }) }));
45
+ return (_jsx(DetailCard, { summary: "Attributes", defaultOpen: true, contentClassName: "mb-4", children: _jsx("div", { className: "flex flex-col", children: keys.map((key) => (_jsx(AttributeRow, { attributeKey: key, value: attributes[key] }, key))) }) }));
48
46
  }
49
47
  function isAttrSetEventData(data) {
50
48
  if (data === null || typeof data !== 'object')
@@ -75,9 +73,9 @@ export function AttrSetEventBlock({ data }) {
75
73
  return _jsx(CopyableDataBlock, { data: data });
76
74
  }
77
75
  const writerLabel = describeWriter(data.writer);
78
- return (_jsxs("div", { className: "flex flex-col px-3 py-1", children: [_jsx("div", { className: "flex flex-col divide-y divide-gray-alpha-400", children: data.changes.map((change, index) => (_jsx(AttributeRow, { attributeKey: change.key, removed: change.value === null, value: change.value ?? undefined }, `${change.key}:${index}`))) }), writerLabel && (_jsx("div", { className: "border-t py-1.5 text-label-12", style: {
76
+ return (_jsxs("div", { className: "flex flex-col px-3 py-1", children: [_jsx("div", { className: "flex flex-col", children: data.changes.map((change, index) => (_jsx(AttributeRow, { attributeKey: change.key, removed: change.value === null, value: change.value ?? undefined }, `${change.key}:${index}`))) }), writerLabel && (_jsx("div", { className: "border-t py-1.5 text-label-12", style: {
79
77
  borderColor: 'var(--ds-gray-alpha-400)',
80
78
  color: 'var(--ds-gray-700)',
81
79
  }, children: writerLabel }))] }));
82
80
  }
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlcy1ibG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvYXR0cmlidXRlcy1ibG9jay50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFFTCw2QkFBNkIsR0FDOUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsR0FBVyxFQUFXLEVBQUUsQ0FDN0QsR0FBRyxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBRWhELFNBQVMsYUFBYTtJQUNwQixPQUFPLENBQ0wsZUFDRSxTQUFTLEVBQUMsc0VBQXNFLEVBQ2hGLEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSwwQkFBMEI7WUFDdkMsZUFBZSxFQUFFLG9CQUFvQjtZQUNyQyxLQUFLLEVBQUUsb0JBQW9CO1NBQzVCLEVBQ0QsS0FBSyxFQUFFLHVCQUF1Qiw2QkFBNkIsK0NBQStDLHlCQUdyRyxDQUNSLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsRUFDcEIsWUFBWSxFQUNaLEtBQUssRUFDTCxPQUFPLEdBQUcsS0FBSyxHQUtoQjtJQUNDLE1BQU0sUUFBUSxHQUFHLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FDTCxlQUFLLFNBQVMsRUFBQyxnREFBZ0QsYUFDN0QsZ0JBQ0UsU0FBUyxFQUFDLDJEQUEyRCxFQUNyRSxLQUFLLEVBQUU7b0JBQ0wsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtpQkFDOUQsYUFFRCxlQUFNLFNBQVMsRUFBQyxV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QkFBaUIsQ0FBQyxFQUFFLElBQUksRUFBcUI7SUFDM0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxLQUFDLGlCQUFpQixJQUFDLElBQUksRUFBRSxJQUFJLEdBQUksQ0FBQztJQUMzQyxDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVoRCxPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUMseUJBQXlCLGFBQ3RDLGNBQUssU0FBUyxFQUFDLDhDQUE4QyxZQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQ25DLEtBQUMsWUFBWSxJQUNYLFlBQVksRUFBRSxNQUFNLENBQUMsR0FBRyxFQUV4QixPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQzlCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLFNBQVMsSUFGM0IsR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUc3QixDQUNILENBQUMsR0FDRSxFQUNMLFdBQVcsSUFBSSxDQUNkLGNBQ0UsU0FBUyxFQUFDLCtCQUErQixFQUN6QyxLQUFLLEVBQUU7b0JBQ0wsV0FBVyxFQUFFLDBCQUEwQjtvQkFDdkMsS0FBSyxFQUFFLG9CQUFvQjtpQkFDNUIsWUFFQSxXQUFXLEdBQ1IsQ0FDUCxJQUNHLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7XG4gIHR5cGUgQXR0cmlidXRlQ2hhbmdlLFxuICBSRVNFUlZFRF9BVFRSSUJVVEVfS0VZX1BSRUZJWCxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IENvcHlhYmxlRGF0YUJsb2NrIH0gZnJvbSAnLi9jb3B5YWJsZS1kYXRhLWJsb2NrJztcbmltcG9ydCB7IERldGFpbENhcmQgfSBmcm9tICcuL2RldGFpbC1jYXJkJztcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGFuIGF0dHJpYnV0ZSBrZXkgaXMgaW4gdGhlIHJlc2VydmVkIChgJGAtcHJlZml4ZWQpXG4gKiBuYW1lc3BhY2UgdXNlZCBieSBmcmFtZXdvcmsvbGlicmFyeSBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgaXNSZXNlcnZlZEF0dHJpYnV0ZUtleSA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAga2V5LnN0YXJ0c1dpdGgoUkVTRVJWRURfQVRUUklCVVRFX0tFWV9QUkVGSVgpO1xuXG5mdW5jdGlvbiBSZXNlcnZlZEJhZGdlKCkge1xuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzc05hbWU9XCJzaHJpbmstMCByb3VuZGVkIGJvcmRlciBweC0xIHB5LXB4IHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtIGxlYWRpbmctM1wiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktYWxwaGEtNDAwKScsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyxcbiAgICAgIH19XG4gICAgICB0aXRsZT17YEtleXMgcHJlZml4ZWQgd2l0aCBcIiR7UkVTRVJWRURfQVRUUklCVVRFX0tFWV9QUkVGSVh9XCIgYXJlIHJlc2VydmVkIGZvciBmcmFtZXdvcmsgYW5kIGxpYnJhcnkgY29kZWB9XG4gICAgPlxuICAgICAgUmVzZXJ2ZWRcbiAgICA8L3NwYW4+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEF0dHJpYnV0ZVJvdyh7XG4gIGF0dHJpYnV0ZUtleSxcbiAgdmFsdWUsXG4gIHJlbW92ZWQgPSBmYWxzZSxcbn06IHtcbiAgYXR0cmlidXRlS2V5OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICByZW1vdmVkPzogYm9vbGVhbjtcbn0pIHtcbiAgY29uc3QgcmVzZXJ2ZWQgPSBpc1Jlc2VydmVkQXR0cmlidXRlS2V5KGF0dHJpYnV0ZUtleSk7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTMgcHktMS41XCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4IG1pbi13LTAgaXRlbXMtY2VudGVyIGdhcC0xLjUgdGV4dC1sYWJlbC0xMiBmb250LW1vbm9cIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGNvbG9yOiByZXNlcnZlZCA/ICd2YXIoLS1kcy1ncmF5LTcwMCknIDogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRydW5jYXRlXCI+e2F0dHJpYnV0ZUtleX08L3NwYW4+XG4gICAgICAgIHtyZXNlcnZlZCAmJiA8UmVzZXJ2ZWRCYWRnZSAvPn1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtyZW1vdmVkID8gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT1cInNocmluay0wIHRleHQtbGFiZWwtMTIgaXRhbGljXCJcbiAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHJlbW92ZWRcbiAgICAgICAgPC9zcGFuPlxuICAgICAgKSA6IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJtYXgtdy1bNjAlXSB0cnVuY2F0ZSB0ZXh0LXJpZ2h0IHRleHQtbGFiZWwtMTIgZm9udC1tb25vIHRleHQtZ3JheS0xMDAwXCJcbiAgICAgICAgICB0aXRsZT17dmFsdWV9XG4gICAgICAgID5cbiAgICAgICAgICB7dmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8qKlxuICogU29ydCBhdHRyaWJ1dGUga2V5cyBmb3IgZGlzcGxheTogdXNlciBrZXlzIGZpcnN0IChhbHBoYWJldGljYWwpLCB0aGVuXG4gKiByZXNlcnZlZCBgJGAtcHJlZml4ZWQga2V5cyAoYWxwaGFiZXRpY2FsKSwgc28gZnJhbWV3b3JrIG1ldGFkYXRhIGRvZXNuJ3RcbiAqIGNyb3dkIG91dCB1c2VyLXNldCBhdHRyaWJ1dGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydEF0dHJpYnV0ZUtleXMoa2V5czogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4ua2V5c10uc29ydCgoYSwgYikgPT4ge1xuICAgIGNvbnN0IGFSZXNlcnZlZCA9IGlzUmVzZXJ2ZWRBdHRyaWJ1dGVLZXkoYSk7XG4gICAgY29uc3QgYlJlc2VydmVkID0gaXNSZXNlcnZlZEF0dHJpYnV0ZUtleShiKTtcbiAgICBpZiAoYVJlc2VydmVkICE9PSBiUmVzZXJ2ZWQpIHJldHVybiBhUmVzZXJ2ZWQgPyAxIDogLTE7XG4gICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29sbGFwc2libGUgY2FyZCBzaG93aW5nIGEgcnVuJ3MgbWF0ZXJpYWxpemVkIGF0dHJpYnV0ZXMgYXMga2V5LXZhbHVlXG4gKiByb3dzLiBSZXNlcnZlZCAoYCRgLXByZWZpeGVkKSBrZXlzIGFyZSB2aXN1YWxseSBkZS1lbXBoYXNpemVkIHdpdGggYVxuICogYmFkZ2UgYW5kIHNvcnRlZCBhZnRlciB1c2VyIGtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSdW5BdHRyaWJ1dGVzQ2FyZCh7XG4gIGF0dHJpYnV0ZXMsXG59OiB7XG4gIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59KSB7XG4gIGNvbnN0IGtleXMgPSBzb3J0QXR0cmlidXRlS2V5cyhPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKSk7XG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8RGV0YWlsQ2FyZFxuICAgICAgc3VtbWFyeT17YEF0dHJpYnV0ZXMgKCR7a2V5cy5sZW5ndGh9KWB9XG4gICAgICBkZWZhdWx0T3BlblxuICAgICAgY29udGVudENsYXNzTmFtZT1cIm1iLTBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBkaXZpZGUteSBkaXZpZGUtZ3JheS1hbHBoYS00MDBcIj5cbiAgICAgICAge2tleXMubWFwKChrZXkpID0+IChcbiAgICAgICAgICA8QXR0cmlidXRlUm93IGF0dHJpYnV0ZUtleT17a2V5fSBrZXk9e2tleX0gdmFsdWU9e2F0dHJpYnV0ZXNba2V5XX0gLz5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0RldGFpbENhcmQ+XG4gICk7XG59XG5cbmludGVyZmFjZSBBdHRyU2V0RXZlbnREYXRhIHtcbiAgY2hhbmdlczogQXR0cmlidXRlQ2hhbmdlW107XG4gIHdyaXRlcj86XG4gICAgfCB7IHR5cGU6ICd3b3JrZmxvdycgfVxuICAgIHwgeyB0eXBlOiAnc3RlcCc7IHN0ZXBJZDogc3RyaW5nOyBhdHRlbXB0OiBudW1iZXIgfTtcbn1cblxuZnVuY3Rpb24gaXNBdHRyU2V0RXZlbnREYXRhKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEF0dHJTZXRFdmVudERhdGEge1xuICBpZiAoZGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcmVjb3JkID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIChcbiAgICBBcnJheS5pc0FycmF5KHJlY29yZC5jaGFuZ2VzKSAmJlxuICAgIHJlY29yZC5jaGFuZ2VzLmV2ZXJ5KFxuICAgICAgKGMpID0+XG4gICAgICAgIGMgIT09IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIGMgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHR5cGVvZiAoYyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikua2V5ID09PSAnc3RyaW5nJ1xuICAgIClcbiAgKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVXcml0ZXIod3JpdGVyOiBBdHRyU2V0RXZlbnREYXRhWyd3cml0ZXInXSk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIXdyaXRlcikgcmV0dXJuIG51bGw7XG4gIGlmICh3cml0ZXIudHlwZSA9PT0gJ3dvcmtmbG93JykgcmV0dXJuICdTZXQgYnkgd29ya2Zsb3cnO1xuICBpZiAod3JpdGVyLnR5cGUgPT09ICdzdGVwJykge1xuICAgIHJldHVybiBgU2V0IGJ5IHN0ZXAgJHt3cml0ZXIuc3RlcElkfSAoYXR0ZW1wdCAke3dyaXRlci5hdHRlbXB0fSlgO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHBheWxvYWQgb2YgYW4gYGF0dHJfc2V0YCBldmVudDogdGhlIGxpc3Qgb2YgYXR0cmlidXRlXG4gKiBjaGFuZ2VzIChzZXRzIGFuZCByZW1vdmFscykgcGx1cyB3aGljaCB3cml0ZXIgKHdvcmtmbG93IG9yIHN0ZXApXG4gKiBtYWRlIHRoZW0uIEZhbGxzIGJhY2sgdG8gdGhlIGdlbmVyaWMgSlNPTiBibG9jayBmb3IgdW5leHBlY3RlZCBzaGFwZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBBdHRyU2V0RXZlbnRCbG9jayh7IGRhdGEgfTogeyBkYXRhOiB1bmtub3duIH0pIHtcbiAgaWYgKCFpc0F0dHJTZXRFdmVudERhdGEoZGF0YSkpIHtcbiAgICByZXR1cm4gPENvcHlhYmxlRGF0YUJsb2NrIGRhdGE9e2RhdGF9IC8+O1xuICB9XG5cbiAgY29uc3Qgd3JpdGVyTGFiZWwgPSBkZXNjcmliZVdyaXRlcihkYXRhLndyaXRlcik7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgcHgtMyBweS0xXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZGl2aWRlLXkgZGl2aWRlLWdyYXktYWxwaGEtNDAwXCI+XG4gICAgICAgIHtkYXRhLmNoYW5nZXMubWFwKChjaGFuZ2UsIGluZGV4KSA9PiAoXG4gICAgICAgICAgPEF0dHJpYnV0ZVJvd1xuICAgICAgICAgICAgYXR0cmlidXRlS2V5PXtjaGFuZ2Uua2V5fVxuICAgICAgICAgICAga2V5PXtgJHtjaGFuZ2Uua2V5fToke2luZGV4fWB9XG4gICAgICAgICAgICByZW1vdmVkPXtjaGFuZ2UudmFsdWUgPT09IG51bGx9XG4gICAgICAgICAgICB2YWx1ZT17Y2hhbmdlLnZhbHVlID8/IHVuZGVmaW5lZH1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgICAge3dyaXRlckxhYmVsICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlci10IHB5LTEuNSB0ZXh0LWxhYmVsLTEyXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LWFscGhhLTQwMCknLFxuICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7d3JpdGVyTGFiZWx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlcy1ibG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvYXR0cmlidXRlcy1ibG9jay50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFFTCw2QkFBNkIsR0FDOUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsR0FBVyxFQUFXLEVBQUUsQ0FDN0QsR0FBRyxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBRWhELFNBQVMsYUFBYTtJQUNwQixPQUFPLENBQ0wsZUFDRSxTQUFTLEVBQUMsc0VBQXNFLEVBQ2hGLEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSwwQkFBMEI7WUFDdkMsZUFBZSxFQUFFLG9CQUFvQjtZQUNyQyxLQUFLLEVBQUUsb0JBQW9CO1NBQzVCLEVBQ0QsS0FBSyxFQUFFLHVCQUF1Qiw2QkFBNkIsK0NBQStDLHlCQUdyRyxDQUNSLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsRUFDcEIsWUFBWSxFQUNaLEtBQUssRUFDTCxPQUFPLEdBQUcsS0FBSyxHQUtoQjtJQUNDLE1BQU0sUUFBUSxHQUFHLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FDTCxlQUFLLFNBQVMsRUFBQyxnREFBZ0QsYUFDN0QsZ0JBQ0UsU0FBUyxFQUFDLCtEQUErRCxFQUN6RSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLGFBRTdELGVBQU0sU0FBUyxFQUFDLFVBQVUs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Q0FBQztRQUM5QixPQUFPLEtBQUMsaUJBQWlCLElBQUMsSUFBSSxFQUFFLElBQUksR0FBSSxDQUFDO0lBQzNDLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWhELE9BQU8sQ0FDTCxlQUFLLFNBQVMsRUFBQyx5QkFBeUIsYUFDdEMsY0FBSyxTQUFTLEVBQUMsZUFBZSxZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQ25DLEtBQUMsWUFBWSxJQUNYLFlBQVksRUFBRSxNQUFNLENBQUMsR0FBRyxFQUV4QixPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQzlCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLFNBQVMsSUFGM0IsR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUc3QixDQUNILENBQUMsR0FDRSxFQUNMLFdBQVcsSUFBSSxDQUNkLGNBQ0UsU0FBUyxFQUFDLCtCQUErQixFQUN6QyxLQUFLLEVBQUU7b0JBQ0wsV0FBVyxFQUFFLDBCQUEwQjtvQkFDdkMsS0FBSyxFQUFFLG9CQUFvQjtpQkFDNUIsWUFFQSxXQUFXLEdBQ1IsQ0FDUCxJQUNHLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7XG4gIHR5cGUgQXR0cmlidXRlQ2hhbmdlLFxuICBSRVNFUlZFRF9BVFRSSUJVVEVfS0VZX1BSRUZJWCxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IENvcHlhYmxlRGF0YUJsb2NrIH0gZnJvbSAnLi9jb3B5YWJsZS1kYXRhLWJsb2NrJztcbmltcG9ydCB7IERldGFpbENhcmQgfSBmcm9tICcuL2RldGFpbC1jYXJkJztcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGFuIGF0dHJpYnV0ZSBrZXkgaXMgaW4gdGhlIHJlc2VydmVkIChgJGAtcHJlZml4ZWQpXG4gKiBuYW1lc3BhY2UgdXNlZCBieSBmcmFtZXdvcmsvbGlicmFyeSBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgaXNSZXNlcnZlZEF0dHJpYnV0ZUtleSA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAga2V5LnN0YXJ0c1dpdGgoUkVTRVJWRURfQVRUUklCVVRFX0tFWV9QUkVGSVgpO1xuXG5mdW5jdGlvbiBSZXNlcnZlZEJhZGdlKCkge1xuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzc05hbWU9XCJzaHJpbmstMCByb3VuZGVkIGJvcmRlciBweC0xIHB5LXB4IHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtIGxlYWRpbmctM1wiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktYWxwaGEtNDAwKScsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyxcbiAgICAgIH19XG4gICAgICB0aXRsZT17YEtleXMgcHJlZml4ZWQgd2l0aCBcIiR7UkVTRVJWRURfQVRUUklCVVRFX0tFWV9QUkVGSVh9XCIgYXJlIHJlc2VydmVkIGZvciBmcmFtZXdvcmsgYW5kIGxpYnJhcnkgY29kZWB9XG4gICAgPlxuICAgICAgUmVzZXJ2ZWRcbiAgICA8L3NwYW4+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEF0dHJpYnV0ZVJvdyh7XG4gIGF0dHJpYnV0ZUtleSxcbiAgdmFsdWUsXG4gIHJlbW92ZWQgPSBmYWxzZSxcbn06IHtcbiAgYXR0cmlidXRlS2V5OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICByZW1vdmVkPzogYm9vbGVhbjtcbn0pIHtcbiAgY29uc3QgcmVzZXJ2ZWQgPSBpc1Jlc2VydmVkQXR0cmlidXRlS2V5KGF0dHJpYnV0ZUtleSk7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTMgcHktMC41XCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4IG1pbi13LTAgaXRlbXMtY2VudGVyIGdhcC0xLjUgdGV4dC1sYWJlbC0xMyB0ZXh0LWdyYXktOTAwXCJcbiAgICAgICAgc3R5bGU9e3Jlc2VydmVkID8geyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfSA6IHVuZGVmaW5lZH1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidHJ1bmNhdGVcIj57YXR0cmlidXRlS2V5fTwvc3Bhbj5cbiAgICAgICAge3Jlc2VydmVkICYmIDxSZXNlcnZlZEJhZGdlIC8+fVxuICAgICAgPC9zcGFuPlxuICAgICAge3JlbW92ZWQgPyAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNocmluay0wIHRleHQtY29weS0xMyBpdGFsaWMgdGV4dC1ncmF5LTcwMFwiPlxuICAgICAgICAgIHJlbW92ZWRcbiAgICAgICAgPC9zcGFuPlxuICAgICAgKSA6IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJtYXgtdy1bNjAlXSB0cnVuY2F0ZSB0ZXh0LWNvcHktMTMgdGV4dC1ncmF5LTEwMDBcIlxuICAgICAgICAgIHRpdGxlPXt2YWx1ZX1cbiAgICAgICAgPlxuICAgICAgICAgIHt2YWx1ZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLyoqXG4gKiBTb3J0IGF0dHJpYnV0ZSBrZXlzIGZvciBkaXNwbGF5OiB1c2VyIGtleXMgZmlyc3QgKGFscGhhYmV0aWNhbCksIHRoZW5cbiAqIHJlc2VydmVkIGAkYC1wcmVmaXhlZCBrZXlzIChhbHBoYWJldGljYWwpLCBzbyBmcmFtZXdvcmsgbWV0YWRhdGEgZG9lc24ndFxuICogY3Jvd2Qgb3V0IHVzZXItc2V0IGF0dHJpYnV0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0QXR0cmlidXRlS2V5cyhrZXlzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5rZXlzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgYVJlc2VydmVkID0gaXNSZXNlcnZlZEF0dHJpYnV0ZUtleShhKTtcbiAgICBjb25zdCBiUmVzZXJ2ZWQgPSBpc1Jlc2VydmVkQXR0cmlidXRlS2V5KGIpO1xuICAgIGlmIChhUmVzZXJ2ZWQgIT09IGJSZXNlcnZlZCkgcmV0dXJuIGFSZXNlcnZlZCA/IDEgOiAtMTtcbiAgICByZXR1cm4gYS5sb2NhbGVDb21wYXJlKGIpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb2xsYXBzaWJsZSBzZWN0aW9uIHNob3dpbmcgYSBydW4ncyBtYXRlcmlhbGl6ZWQgYXR0cmlidXRlcyBhcyBrZXktdmFsdWVcbiAqIHJvd3MuIFJlc2VydmVkIChgJGAtcHJlZml4ZWQpIGtleXMgYXJlIHZpc3VhbGx5IGRlLWVtcGhhc2l6ZWQgd2l0aCBhXG4gKiBiYWRnZSBhbmQgc29ydGVkIGFmdGVyIHVzZXIga2V5cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJ1bkF0dHJpYnV0ZXNDYXJkKHtcbiAgYXR0cmlidXRlcyxcbn06IHtcbiAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn0pIHtcbiAgY29uc3Qga2V5cyA9IHNvcnRBdHRyaWJ1dGVLZXlzKE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpKTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJBdHRyaWJ1dGVzXCIgZGVmYXVsdE9wZW4gY29udGVudENsYXNzTmFtZT1cIm1iLTRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICB7a2V5cy5tYXAoKGtleSkgPT4gKFxuICAgICAgICAgIDxBdHRyaWJ1dGVSb3cgYXR0cmlidXRlS2V5PXtrZXl9IGtleT17a2V5fSB2YWx1ZT17YXR0cmlidXRlc1trZXldfSAvPlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvRGV0YWlsQ2FyZD5cbiAgKTtcbn1cblxuaW50ZXJmYWNlIEF0dHJTZXRFdmVudERhdGEge1xuICBjaGFuZ2VzOiBBdHRyaWJ1dGVDaGFuZ2VbXTtcbiAgd3JpdGVyPzpcbiAgICB8IHsgdHlwZTogJ3dvcmtmbG93JyB9XG4gICAgfCB7IHR5cGU6ICdzdGVwJzsgc3RlcElkOiBzdHJpbmc7IGF0dGVtcHQ6IG51bWJlciB9O1xufVxuXG5mdW5jdGlvbiBpc0F0dHJTZXRFdmVudERhdGEoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgQXR0clNldEV2ZW50RGF0YSB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCByZWNvcmQgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZXR1cm4gKFxuICAgIEFycmF5LmlzQXJyYXkocmVjb3JkLmNoYW5nZXMpICYmXG4gICAgcmVjb3JkLmNoYW5nZXMuZXZlcnkoXG4gICAgICAoYykgPT5cbiAgICAgICAgYyAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdHlwZW9mIChjIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5rZXkgPT09ICdzdHJpbmcnXG4gICAgKVxuICApO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVdyaXRlcih3cml0ZXI6IEF0dHJTZXRFdmVudERhdGFbJ3dyaXRlciddKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICghd3JpdGVyKSByZXR1cm4gbnVsbDtcbiAgaWYgKHdyaXRlci50eXBlID09PSAnd29ya2Zsb3cnKSByZXR1cm4gJ1NldCBieSB3b3JrZmxvdyc7XG4gIGlmICh3cml0ZXIudHlwZSA9PT0gJ3N0ZXAnKSB7XG4gICAgcmV0dXJuIGBTZXQgYnkgc3RlcCAke3dyaXRlci5zdGVwSWR9IChhdHRlbXB0ICR7d3JpdGVyLmF0dGVtcHR9KWA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGF5bG9hZCBvZiBhbiBgYXR0cl9zZXRgIGV2ZW50OiB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVcbiAqIGNoYW5nZXMgKHNldHMgYW5kIHJlbW92YWxzKSBwbHVzIHdoaWNoIHdyaXRlciAod29ya2Zsb3cgb3Igc3RlcClcbiAqIG1hZGUgdGhlbS4gRmFsbHMgYmFjayB0byB0aGUgZ2VuZXJpYyBKU09OIGJsb2NrIGZvciB1bmV4cGVjdGVkIHNoYXBlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEF0dHJTZXRFdmVudEJsb2NrKHsgZGF0YSB9OiB7IGRhdGE6IHVua25vd24gfSkge1xuICBpZiAoIWlzQXR0clNldEV2ZW50RGF0YShkYXRhKSkge1xuICAgIHJldHVybiA8Q29weWFibGVEYXRhQmxvY2sgZGF0YT17ZGF0YX0gLz47XG4gIH1cblxuICBjb25zdCB3cml0ZXJMYWJlbCA9IGRlc2NyaWJlV3JpdGVyKGRhdGEud3JpdGVyKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBweC0zIHB5LTFcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICB7ZGF0YS5jaGFuZ2VzLm1hcCgoY2hhbmdlLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxBdHRyaWJ1dGVSb3dcbiAgICAgICAgICAgIGF0dHJpYnV0ZUtleT17Y2hhbmdlLmtleX1cbiAgICAgICAgICAgIGtleT17YCR7Y2hhbmdlLmtleX06JHtpbmRleH1gfVxuICAgICAgICAgICAgcmVtb3ZlZD17Y2hhbmdlLnZhbHVlID09PSBudWxsfVxuICAgICAgICAgICAgdmFsdWU9e2NoYW5nZS52YWx1ZSA/PyB1bmRlZmluZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHt3cml0ZXJMYWJlbCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXItdCBweS0xLjUgdGV4dC1sYWJlbC0xMlwiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS1hbHBoYS00MDApJyxcbiAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3dyaXRlckxhYmVsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
@@ -1314,10 +1314,10 @@
1314
1314
  .segQueued {
1315
1315
  background: repeating-linear-gradient(
1316
1316
  45deg,
1317
- var(--ds-gray-alpha-200),
1318
- var(--ds-gray-alpha-200) 6px,
1319
- var(--ds-gray-alpha-100) 6px,
1320
- var(--ds-gray-alpha-100) 12px
1317
+ var(--ds-gray-200),
1318
+ var(--ds-gray-200) 6px,
1319
+ var(--ds-gray-100) 6px,
1320
+ var(--ds-gray-100) 12px
1321
1321
  );
1322
1322
  }
1323
1323
 
@@ -1 +1 @@
1
- {"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../src/lib/hydration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAOL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,YAAY,EACZ,KAAK,MAAM,EACX,eAAe,EACf,KAAK,SAAS,EACd,uBAAuB,EACvB,UAAU,GACX,MAAM,qCAAqC,CAAC;AAgE7C;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA+MzC;AAmBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAMnD;AAMD,eAAO,MAAM,sBAAsB,cAAc,CAAC;AA0BlD,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMzD;AAMD,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAiBnD,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMvD;AAsCD;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAC9C,QAAQ,EAAE,CAAC,EACX,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,CAAC,CAAC,CAwDZ;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAkB7D"}
1
+ {"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../src/lib/hydration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAOL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,YAAY,EACZ,KAAK,MAAM,EACX,eAAe,EACf,KAAK,SAAS,EACd,uBAAuB,EACvB,UAAU,GACX,MAAM,qCAAqC,CAAC;AAgE7C;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA+MzC;AAmBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAMnD;AAMD,eAAO,MAAM,sBAAsB,cAAc,CAAC;AA0BlD,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMzD;AAMD,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAiBnD,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMvD;AAsCD;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAC9C,QAAQ,EAAE,CAAC,EACX,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,CAAC,CAAC,CA+DZ;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAkB7D"}