@workflow/web-shared 5.0.0-beta.46 → 5.0.0-beta.48
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.
- package/dist/components/event-list-view.js +3 -3
- package/dist/components/trace-viewer/components/use-alt-held.d.ts +11 -0
- package/dist/components/trace-viewer/components/use-alt-held.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/use-alt-held.js +48 -0
- package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
- package/dist/components/trace-viewer/trace-viewer.js +4 -17
- package/dist/components/trace-viewer.d.ts +4 -1
- package/dist/components/trace-viewer.d.ts.map +1 -1
- package/dist/components/trace-viewer.js +4 -3
- package/dist/components/ui/data-inspector.d.ts +3 -2
- package/dist/components/ui/data-inspector.d.ts.map +1 -1
- package/dist/components/ui/data-inspector.js +85 -8
- package/dist/components/workflow-traces/trace-span-construction.d.ts +2 -1
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +7 -3
- package/dist/lib/duplicate-events.d.ts.map +1 -1
- package/dist/lib/duplicate-events.js +14 -25
- package/dist/lib/hydration.d.ts.map +1 -1
- package/dist/lib/hydration.js +13 -1
- package/dist/lib/trace-builder.d.ts +3 -1
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +5 -5
- package/package.json +8 -8
- package/src/components/event-list-view.tsx +2 -2
- package/src/components/trace-viewer/components/use-alt-held.ts +54 -0
- package/src/components/trace-viewer/trace-viewer.tsx +3 -15
- package/src/components/trace-viewer.tsx +6 -1
- package/src/components/ui/data-inspector.tsx +105 -9
- package/src/components/workflow-traces/trace-span-construction.ts +14 -2
- package/src/lib/duplicate-events.ts +14 -26
- package/src/lib/hydration.ts +12 -0
- package/src/lib/trace-builder.test.ts +42 -1
- package/src/lib/trace-builder.ts +13 -4
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether Alt/Option is held, for the timeline delta overlay.
|
|
3
|
+
*
|
|
4
|
+
* preventDefault stops Chrome from taking the menu bar (which kills hover).
|
|
5
|
+
* Capture-phase keys; pointermove recovers if keydown was missed; blur
|
|
6
|
+
* clears after Alt+Tab.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useAltHeld(): {
|
|
9
|
+
altHeld: boolean;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=use-alt-held.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-alt-held.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/use-alt-held.ts"],"names":[],"mappings":"AAgBA;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CA8BjD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
function isAltModifierKey(key) {
|
|
4
|
+
return key === 'Alt' || key === 'AltGraph';
|
|
5
|
+
}
|
|
6
|
+
function isTypingTarget(target) {
|
|
7
|
+
return (target instanceof HTMLInputElement ||
|
|
8
|
+
target instanceof HTMLTextAreaElement ||
|
|
9
|
+
(target instanceof HTMLElement && target.isContentEditable));
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Whether Alt/Option is held, for the timeline delta overlay.
|
|
13
|
+
*
|
|
14
|
+
* preventDefault stops Chrome from taking the menu bar (which kills hover).
|
|
15
|
+
* Capture-phase keys; pointermove recovers if keydown was missed; blur
|
|
16
|
+
* clears after Alt+Tab.
|
|
17
|
+
*/
|
|
18
|
+
export function useAltHeld() {
|
|
19
|
+
const [altHeld, setAltHeld] = useState(false);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
const onKeyDown = (e) => {
|
|
22
|
+
if (!isAltModifierKey(e.key))
|
|
23
|
+
return;
|
|
24
|
+
if (!isTypingTarget(e.target)) {
|
|
25
|
+
e.preventDefault();
|
|
26
|
+
}
|
|
27
|
+
setAltHeld(true);
|
|
28
|
+
};
|
|
29
|
+
const onKeyUp = (e) => {
|
|
30
|
+
if (isAltModifierKey(e.key))
|
|
31
|
+
setAltHeld(false);
|
|
32
|
+
};
|
|
33
|
+
const onBlur = () => setAltHeld(false);
|
|
34
|
+
const onPointerMove = (e) => setAltHeld(e.altKey);
|
|
35
|
+
window.addEventListener('keydown', onKeyDown, true);
|
|
36
|
+
window.addEventListener('keyup', onKeyUp, true);
|
|
37
|
+
window.addEventListener('blur', onBlur);
|
|
38
|
+
window.addEventListener('pointermove', onPointerMove, true);
|
|
39
|
+
return () => {
|
|
40
|
+
window.removeEventListener('keydown', onKeyDown, true);
|
|
41
|
+
window.removeEventListener('keyup', onKeyUp, true);
|
|
42
|
+
window.removeEventListener('blur', onBlur);
|
|
43
|
+
window.removeEventListener('pointermove', onPointerMove, true);
|
|
44
|
+
};
|
|
45
|
+
}, []);
|
|
46
|
+
return { altHeld };
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWFsdC1oZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvdXNlLWFsdC1oZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQztBQUViLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTVDLFNBQVMsZ0JBQWdCLENBQUMsR0FBVztJQUNuQyxPQUFPLEdBQUcsS0FBSyxLQUFLLElBQUksR0FBRyxLQUFLLFVBQVUsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsTUFBMEI7SUFDaEQsT0FBTyxDQUNMLE1BQU0sWUFBWSxnQkFBZ0I7UUFDbEMsTUFBTSxZQUFZLG1CQUFtQjtRQUNyQyxDQUFDLE1BQU0sWUFBWSxXQUFXLElBQUksTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQzVELENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFVBQVU7SUFDeEIsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBZ0IsRUFBUSxFQUFFO1lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUFFLE9BQU87WUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3JCLENBQUM7WUFDRCxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFnQixFQUFRLEVBQUU7WUFDekMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxHQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFlLEVBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxPQUFPLEdBQUcsRUFBRTtZQUNWLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDM0MsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIGlzQWx0TW9kaWZpZXJLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGtleSA9PT0gJ0FsdCcgfHwga2V5ID09PSAnQWx0R3JhcGgnO1xufVxuXG5mdW5jdGlvbiBpc1R5cGluZ1RhcmdldCh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHxcbiAgICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8XG4gICAgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSlcbiAgKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIEFsdC9PcHRpb24gaXMgaGVsZCwgZm9yIHRoZSB0aW1lbGluZSBkZWx0YSBvdmVybGF5LlxuICpcbiAqIHByZXZlbnREZWZhdWx0IHN0b3BzIENocm9tZSBmcm9tIHRha2luZyB0aGUgbWVudSBiYXIgKHdoaWNoIGtpbGxzIGhvdmVyKS5cbiAqIENhcHR1cmUtcGhhc2Uga2V5czsgcG9pbnRlcm1vdmUgcmVjb3ZlcnMgaWYga2V5ZG93biB3YXMgbWlzc2VkOyBibHVyXG4gKiBjbGVhcnMgYWZ0ZXIgQWx0K1RhYi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFsdEhlbGQoKTogeyBhbHRIZWxkOiBib29sZWFuIH0ge1xuICBjb25zdCBbYWx0SGVsZCwgc2V0QWx0SGVsZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvbktleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFpc0FsdE1vZGlmaWVyS2V5KGUua2V5KSkgcmV0dXJuO1xuICAgICAgaWYgKCFpc1R5cGluZ1RhcmdldChlLnRhcmdldCkpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgc2V0QWx0SGVsZCh0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uS2V5VXAgPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGlzQWx0TW9kaWZpZXJLZXkoZS5rZXkpKSBzZXRBbHRIZWxkKGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQmx1ciA9ICgpOiB2b2lkID0+IHNldEFsdEhlbGQoZmFsc2UpO1xuICAgIGNvbnN0IG9uUG9pbnRlck1vdmUgPSAoZTogUG9pbnRlckV2ZW50KTogdm9pZCA9PiBzZXRBbHRIZWxkKGUuYWx0S2V5KTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duLCB0cnVlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBvbktleVVwLCB0cnVlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uQmx1cik7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgb25Qb2ludGVyTW92ZSwgdHJ1ZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIG9uS2V5VXAsIHRydWUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbkJsdXIpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgb25Qb2ludGVyTW92ZSwgdHJ1ZSk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiB7IGFsdEhlbGQgfTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-viewer.d.ts","sourceRoot":"","sources":["../../../src/components/trace-viewer/trace-viewer.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"trace-viewer.d.ts","sourceRoot":"","sources":["../../../src/components/trace-viewer/trace-viewer.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AAsBf,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAW7C,UAAU,gBAAgB;IACxB,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAiFD,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,UAAU,EACV,OAAO,EACP,aAAa,GACd,EAAE,gBAAgB,GAAG,SAAS,CAa9B"}
|
|
@@ -14,6 +14,7 @@ import { Minimap } from './components/minimap';
|
|
|
14
14
|
import { SplitPane } from './components/split-pane';
|
|
15
15
|
import { TIMELINE_PADDING_PX, Timeline, TimelineHeader, } from './components/timeline';
|
|
16
16
|
import { TraceShortcutHelper } from './components/trace-shortcut-helper';
|
|
17
|
+
import { useAltHeld } from './components/use-alt-held';
|
|
17
18
|
import { ROW_HEIGHT_PX, scrollRowIntoView } from './components/use-row-window';
|
|
18
19
|
import { ActiveSpanProvider, useActiveSpan } from './context';
|
|
19
20
|
import { searchSpans } from './search';
|
|
@@ -232,29 +233,15 @@ function TraceViewerContent({ trace, onLoadMore, hasMore, isLoadingMore, }) {
|
|
|
232
233
|
focusViewportOnSpan(spanId);
|
|
233
234
|
}, ZOOM_DEBOUNCE_MS);
|
|
234
235
|
}, [setActiveSpan, scrollSpanIntoView, cancelPendingZoom, focusViewportOnSpan]);
|
|
235
|
-
const
|
|
236
|
+
const { altHeld } = useAltHeld();
|
|
236
237
|
useEffect(() => {
|
|
237
238
|
const onKeyDown = (e) => {
|
|
238
239
|
if (e.key === 'Escape') {
|
|
239
240
|
handleClearActiveSpan();
|
|
240
241
|
}
|
|
241
|
-
else if (e.key === 'Alt') {
|
|
242
|
-
setAltHeld(true);
|
|
243
|
-
}
|
|
244
|
-
};
|
|
245
|
-
const onKeyUp = (e) => {
|
|
246
|
-
if (e.key === 'Alt')
|
|
247
|
-
setAltHeld(false);
|
|
248
242
|
};
|
|
249
|
-
const onBlur = () => setAltHeld(false);
|
|
250
243
|
window.addEventListener('keydown', onKeyDown);
|
|
251
|
-
window.
|
|
252
|
-
window.addEventListener('blur', onBlur);
|
|
253
|
-
return () => {
|
|
254
|
-
window.removeEventListener('keydown', onKeyDown);
|
|
255
|
-
window.removeEventListener('keyup', onKeyUp);
|
|
256
|
-
window.removeEventListener('blur', onBlur);
|
|
257
|
-
};
|
|
244
|
+
return () => window.removeEventListener('keydown', onKeyDown);
|
|
258
245
|
}, [handleClearActiveSpan]);
|
|
259
246
|
const timelineRef = useRef(null);
|
|
260
247
|
const [hover, setHover] = useState(null);
|
|
@@ -333,4 +320,4 @@ function TraceViewerContent({ trace, onLoadMore, hasMore, isLoadingMore, }) {
|
|
|
333
320
|
}
|
|
334
321
|
}, placeholder: "Search spans...", "aria-label": "Search spans", className: "flex-1 min-w-0 bg-transparent text-label-14 text-gray-1000 placeholder:text-gray-800 outline-none" }), searchQuery && (_jsx("button", { type: "button", "aria-label": "Clear search", onClick: () => setSearchQuery(''), className: "-mr-2 hidden h-full max-w-full shrink-0 cursor-pointer items-center rounded-r-md border-0 bg-transparent px-2.5 font-inherit text-label-16 text-gray-900 no-underline transition-colors duration-150 ease-in hover:text-gray-1000 focus-visible:-outline-offset-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--ds-focus-color)] min-[961px]:flex", children: _jsx(Kbd, { variant: "outline", size: "search", children: "Esc" }) }))] }), endHeader: _jsx(TimelineHeader, { markers: timeMarkers, hoverInfo: hoverInfo }), children: [_jsxs("div", { className: "block overflow-visible", children: [_jsx(EventList, { spans: trace.spans, activeSpanId: activeSpanId, searchResult: searchResult, onSelectSpan: handleSelectSpan }), _jsx("div", { ref: loadMoreSentinelRef, className: "flex justify-center", children: isLoadingMore ? (_jsxs("div", { className: "flex items-center justify-center gap-2 py-3 text-label-14 text-gray-800", children: [_jsx(Spinner, { size: 14 }), _jsx("span", { children: "Loading spans\u2026" })] })) : null })] }), _jsx("div", { ref: timelineRef, id: "trace-timeline", className: "@container block min-h-0 overflow-visible relative", onDoubleClick: resetZoom, onMouseMove: handleTimelineMouseMove, onMouseLeave: handleTimelineMouseLeave, children: _jsx(Timeline, { spans: trace.spans, viewStart: viewport.start, viewEnd: viewport.end, markers: timeMarkers, selectedId: activeSpanId, searchResult: searchResult, onSelect: handleSelectSpan, onRevealTime: handleRevealTime, hover: hover, altHeld: altHeld }) }), _jsxs(_Fragment, { children: [_jsx(TraceShortcutHelper, { hasMultipleSpans: trace.spans.length > 1, reducedMotion: reducedMotion }), _jsxs("div", { className: "pointer-events-auto flex items-center border border-gray-alpha-400 rounded-md bg-background-100 shadow-sm overflow-hidden divide-x divide-gray-alpha-400", children: [_jsx(IconButton, { variant: "muted", size: "small", onClick: zoomOut, disabled: isAtMinZoom, "aria-label": "Zoom out", children: _jsx(ZoomOut, { className: "w-4 h-4" }) }), _jsx(IconButton, { variant: "muted", size: "small", onClick: resetZoom, "aria-label": "Reset zoom", children: _jsx(RotateCcw, { className: "w-3.5 h-3.5" }) }), _jsx(IconButton, { variant: "muted", size: "small", onClick: zoomIn, disabled: isAtMaxZoom, "aria-label": "Zoom in", children: _jsx(ZoomIn, { className: "w-4 h-4" }) })] })] })] })] }), _jsx(TraceDetailPanel, { containerRef: paneRootRef, onNavigateToSpan: navigateToSpan, onClose: handleClearActiveSpan })] }));
|
|
335
322
|
}
|
|
336
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL3RyYWNlLXZpZXdlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUVMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULE9BQU8sRUFDUCxNQUFNLEVBQ04sUUFBUSxHQUNULE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sU0FBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsY0FBYyxHQUVmLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZC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RSxnQkFBZ0IsRUFDOUIsS0FBSyxFQUFFLEtBQUssRUFDWixPQUFPLEVBQUUsT0FBTyxHQUNoQixHQUNFLEVBQ04sOEJBQ0UsS0FBQyxtQkFBbUIsSUFDbEIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN4QyxhQUFhLEVBQUUsYUFBYSxHQUM1QixFQUNGLGVBQUssU0FBUyxFQUFDLDBKQUEwSixhQUN2SyxLQUFDLFVBQVUsSUFDVCxPQUFPLEVBQUMsT0FBTyxFQUNmLElBQUksRUFBQyxPQUFPLEVBQ1osT0FBTyxFQUFFLE9BQU8sRUFDaEIsUUFBUSxFQUFFLFdBQVcsZ0JBQ1YsVUFBVSxZQUVyQixLQUFDLE9BQU8sSUFBQyxTQUFTLEVBQUMsU0FBUyxHQUFHLEdBQ3BCLEVBQ2IsS0FBQyxVQUFVLElBQ1QsT0FBTyxFQUFDLE9BQU8sRUFDZixJQUFJLEVBQUMsT0FBTyxFQUNaLE9BQU8sRUFBRSxTQUFTLGdCQUNQLFlBQVksWUFFdkIsS0FBQyxTQUFTLElBQUMsU0FBUyxFQUFDLGFBQWEsR0FBRyxHQUMxQixFQUNiLEtBQUMsVUFBVSxJQUNULE9BQU8sRUFBQyxPQUFPLEVBQ2YsSUFBSSxFQUFDLE9BQU8sRUFDWixPQUFPLEVBQUUsTUFBTSxFQUNmLFFBQVEsRUFBRSxXQUFXLGdCQUNWLFNBQVMsWUFFcEIsS0FBQyxNQUFNLElBQUMsU0FBUyxFQUFDLFNBQVMsR0FBRyxHQUNuQixJQUNULElBQ0wsSUFDTyxJQUNSLEVBRU4sS0FBQyxnQkFBZ0IsSUFDZixZQUFZLEVBQUUsV0FBVyxFQUN6QixnQkFBZ0IsRUFBRSxjQUFjLEVBQ2hDLE9BQU8sRUFBRSxxQkFBcUIsR0FDOUIsSUFDRSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBSb3RhdGVDY3csIFNlYXJjaCwgWm9vbUluLCBab29tT3V0IH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7XG4gIHR5cGUgUmVhY3ROb2RlLFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRGVmZXJyZWRWYWx1ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VMb2FkTW9yZU9uU2Nyb2xsIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlLWxvYWQtbW9yZS1vbi1zY3JvbGwnO1xuaW1wb3J0IHsgdXNlUmVkdWNlZE1vdGlvbiB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZS1yZWR1Y2VkLW1vdGlvbic7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnLi4vdWkvaWNvbi1idXR0b24nO1xuaW1wb3J0IHsgS2JkIH0gZnJvbSAnLi4vdWkva2JkJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuLi91aS9zcGlubmVyJztcbmltcG9ydCB7IFRvb2x0aXBQcm92aWRlciB9IGZyb20gJy4uL3VpL3Rvb2x0aXAnO1xuaW1wb3J0IHsgVHJhY2VEZXRhaWxQYW5lbCB9IGZyb20gJy4vY29tcG9uZW50cy9kZXRhaWwtcGFuZWwnO1xuaW1wb3J0IEV2ZW50TGlzdCBmcm9tICcuL2NvbXBvbmVudHMvZXZlbnQtbGlzdCc7XG5pbXBvcnQgeyBNaW5pbWFwIH0gZnJvbSAnLi9jb21wb25lbnRzL21pbmltYXAnO1xuaW1wb3J0IHsgU3BsaXRQYW5lIH0gZnJvbSAnLi9jb21wb25lbnRzL3NwbGl0LXBhbmUnO1xuaW1wb3J0IHtcbiAgVElNRUxJTkVfUEFERElOR19QWCxcbiAgVGltZWxpbmUsXG4gIFRpbWVsaW5lSGVhZGVyLFxuICB0eXBlIFRpbWVsaW5lSG92ZXIsXG59IGZyb20gJy4vY29tcG9uZW50cy90aW1lbGluZSc7XG5pbXBvcnQgeyBUcmFjZVNob3J0Y3V0SGVscGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL3RyYWNlLXNob3J0Y3V0LWhlbHBlcic7XG5pbXBvcnQgeyBST1dfSEVJR0hUX1BYLCBzY3JvbGxSb3dJbnRvVmlldyB9IGZyb20gJy4vY29tcG9uZW50cy91c2Utcm93LXdpbmRvdyc7XG5pbXBvcnQgeyBBY3RpdmVTcGFuUHJvdmlkZXIsIHVzZUFjdGl2ZVNwYW4gfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgc2VhcmNoU3BhbnMgfSBmcm9tICcuL3NlYXJjaCc7XG5pbXBvcnQgdHlwZSB7IFRyYWNlV2l0aE1ldGEgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uUHJlY2lzZSwgZ2V0SGlnaFJlc0luTXMgfSBmcm9tICcuL3V0aWwvdGltaW5nJztcbmltcG9ydCB7XG4gIGNsYW1wVmlld3BvcnRUb1Jvb3QsXG4gIGNvbXB1dGVSb290Qm91bmRzLFxuICBjb21wdXRlVGltZU1hcmtlcnMsXG4gIHR5cGUgVmlld3BvcnRSYW5nZSxcbiAgd2hlZWxEZWx0YVRvUGl4ZWxzLFxuICB3aGVlbFpvb21TY2FsZUZhY3Rvcixcbn0gZnJvbSAnLi91dGlscyc7XG5cbmludGVyZmFjZSBUcmFjZVZpZXdlclByb3BzIHtcbiAgdHJhY2U6IFRyYWNlV2l0aE1ldGE7XG4gIG9uTG9hZE1vcmU/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgaGFzTW9yZT86IGJvb2xlYW47XG4gIGlzTG9hZGluZ01vcmU/OiBib29sZWFuO1xufVxuXG5jb25zdCBNSU5fVklFV1BPUlRfTVMgPSAwLjAwMTtcblxuY29uc3QgWk9PTV9ERUJPVU5DRV9NUyA9IDE1MDtcblxuZnVuY3Rpb24gdXNlQW5pbWF0ZWRWaWV3cG9ydChpbml0aWFsOiBWaWV3cG9ydFJhbmdlKSB7XG4gIGNvbnN0IFt2aWV3cG9ydCwgc2V0Vmlld3BvcnRTdGF0ZV0gPSB1c2VTdGF0ZTxWaWV3cG9ydFJhbmdlPihpbml0aWFsKTtcbiAgY29uc3QgYW5pbVJlZiA9IHVzZVJlZjx7XG4gICAgcmFmOiBudW1iZXI7XG4gICAgZnJvbTogVmlld3BvcnRSYW5nZTtcbiAgICB0bzogVmlld3BvcnRSYW5nZTtcbiAgICBzdGFydDogbnVtYmVyO1xuICB9IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGN1cnJlbnRSZWYgPSB1c2VSZWYoaW5pdGlhbCk7XG4gIGN1cnJlbnRSZWYuY3VycmVudCA9IHZpZXdwb3J0O1xuICBjb25zdCByZWR1Y2VkTW90aW9uID0gdXNlUmVkdWNlZE1vdGlvbigpO1xuXG4gIGNvbnN0IGNhbmNlbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoYW5pbVJlZi5jdXJyZW50KSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltUmVmLmN1cnJlbnQucmFmKTtcbiAgICAgIGFuaW1SZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgY29uc3QgYW5pbWF0ZVRvID0gdXNlQ2FsbGJhY2soXG4gICAgKHRhcmdldDogVmlld3BvcnRSYW5nZSkgPT4ge1xuICAgICAgY2FuY2VsKCk7XG5cbiAgICAgIGlmIChyZWR1Y2VkTW90aW9uKSB7XG4gICAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IHRhcmdldDtcbiAgICAgICAgc2V0Vmlld3BvcnRTdGF0ZSh0YXJnZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyb20gPSBjdXJyZW50UmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBhbmltID0geyByYWY6IDAsIGZyb20sIHRvOiB0YXJnZXQsIHN0YXJ0OiBwZXJmb3JtYW5jZS5ub3coKSB9O1xuXG4gICAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oKHBlcmZvcm1hbmNlLm5vdygpIC0gYW5pbS5zdGFydCkgLyAyNDAsIDEpO1xuICAgICAgICBjb25zdCBlID0gdCA8IDAuNSA/IDggKiB0ICogdCAqIHQgKiB0IDogMSAtICgtMiAqIHQgKyAyKSAqKiA0IC8gMjtcbiAgICAgICAgc2V0Vmlld3BvcnRTdGF0ZSh7XG4gICAgICAgICAgc3RhcnQ6IGFuaW0uZnJvbS5zdGFydCArIChhbmltLnRvLnN0YXJ0IC0gYW5pbS5mcm9tLnN0YXJ0KSAqIGUsXG4gICAgICAgICAgZW5kOiBhbmltLmZyb20uZW5kICsgKGFuaW0udG8uZW5kIC0gYW5pbS5mcm9tLmVuZCkgKiBlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHQgPCAxKSBhbmltLnJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICAgICAgZWxzZSBhbmltUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgYW5pbVJlZi5jdXJyZW50ID0gYW5pbTtcbiAgICAgIGFuaW0ucmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgIH0sXG4gICAgW2NhbmNlbCwgcmVkdWNlZE1vdGlvbl1cbiAgKTtcblxuICBjb25zdCBzZXRWaWV3cG9ydCA9IHVzZUNhbGxiYWNrKFxuICAgICh1cGRhdGU6IFZpZXdwb3J0UmFuZ2UgfCAoKHByZXY6IFZpZXdwb3J0UmFuZ2UpID0+IFZpZXdwb3J0UmFuZ2UpKSA9PiB7XG4gICAgICBjYW5jZWwoKTtcbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHNldFZpZXdwb3J0U3RhdGUoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gdXBkYXRlKHByZXYpO1xuICAgICAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IG5leHQ7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudFJlZi5jdXJyZW50ID0gdXBkYXRlO1xuICAgICAgICBzZXRWaWV3cG9ydFN0YXRlKHVwZGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbY2FuY2VsXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiBjYW5jZWwsIFtjYW5jZWxdKTtcblxuICByZXR1cm4geyB2aWV3cG9ydCwgc2V0Vmlld3BvcnQsIGFuaW1hdGVUbyB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJvb3QgY29tcG9uZW50XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGZ1bmN0aW9uIFRyYWNlVmlld2VyKHtcbiAgdHJhY2UsXG4gIG9uTG9hZE1vcmUsXG4gIGhhc01vcmUsXG4gIGlzTG9hZGluZ01vcmUsXG59OiBUcmFjZVZpZXdlclByb3BzKTogUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8VG9vbHRpcFByb3ZpZGVyIGRlbGF5RHVyYXRpb249ezMwMH0+XG4gICAgICA8QWN0aXZlU3BhblByb3ZpZGVyIHNwYW5zPXt0cmFjZS5zcGFuc30+XG4gICAgICAgIDxUcmFjZVZpZXdlckNvbnRlbnRcbiAgICAgICAgICB0cmFjZT17dHJhY2V9XG4gICAgICAgICAgb25Mb2FkTW9yZT17b25Mb2FkTW9yZX1cbiAgICAgICAgICBoYXNNb3JlPXtoYXNNb3JlfVxuICAgICAgICAgIGlzTG9hZGluZ01vcmU9e2lzTG9hZGluZ01vcmV9XG4gICAgICAgIC8+XG4gICAgICA8L0FjdGl2ZVNwYW5Qcm92aWRlcj5cbiAgICA8L1Rvb2x0aXBQcm92aWRlcj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gVHJhY2VWaWV3ZXJDb250ZW50KHtcbiAgdHJhY2UsXG4gIG9uTG9hZE1vcmUsXG4gIGhhc01vcmUsXG4gIGlzTG9hZGluZ01vcmUsXG59OiBUcmFjZVZpZXdlclByb3BzKTogUmVhY3ROb2RlIHtcbiAgY29uc3QgeyBhY3RpdmVTcGFuSWQsIHNldEFjdGl2ZVNwYW4sIGNsZWFyQWN0aXZlU3BhbiB9ID0gdXNlQWN0aXZlU3BhbigpO1xuXG4gIGNvbnN0IHJlZHVjZWRNb3Rpb24gPSB1c2VSZWR1Y2VkTW90aW9uKCk7XG5cbiAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IGRlZmVycmVkU2VhcmNoUXVlcnkgPSB1c2VEZWZlcnJlZFZhbHVlKHNlYXJjaFF1ZXJ5KTtcblxuICBjb25zdCBwYW5lUm9vdFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWFyY2hTcGFucyh0cmFjZS5zcGFucywgZGVmZXJyZWRTZWFyY2hRdWVyeSksXG4gICAgW3RyYWNlLnNwYW5zLCBkZWZlcnJlZFNlYXJjaFF1ZXJ5XVxuICApO1xuXG4gIGNvbnN0IHJvb3QgPSB1c2VNZW1vKCgpID0+IGNvbXB1dGVSb290Qm91bmRzKHRyYWNlLnNwYW5zKSwgW3RyYWNlLnNwYW5zXSk7XG5cbiAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgbG9hZE1vcmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdm9pZCBvbkxvYWRNb3JlPy4oKTtcbiAgfSwgW29uTG9hZE1vcmVdKTtcbiAgY29uc3QgbG9hZE1vcmVTZW50aW5lbFJlZiA9IHVzZUxvYWRNb3JlT25TY3JvbGwobG9hZE1vcmUsIHtcbiAgICBoYXNNb3JlOiBCb29sZWFuKG9uTG9hZE1vcmUgJiYgaGFzTW9yZSksXG4gICAgaXNMb2FkaW5nTW9yZTogQm9vbGVhbihpc0xvYWRpbmdNb3JlKSxcbiAgICByb290UmVmOiBzY3JvbGxDb250YWluZXJSZWYsXG4gIH0pO1xuXG4gIGNvbnN0IHsgdmlld3BvcnQsIHNldFZpZXdwb3J0LCBhbmltYXRlVG8gfSA9IHVzZUFuaW1hdGVkVmlld3BvcnQoe1xuICAgIHN0YXJ0OiByb290LnN0YXJ0VGltZSxcbiAgICBlbmQ6IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbixcbiAgfSk7XG5cbiAgY29uc3QgcHJldlJvb3RSZWYgPSB1c2VSZWY8Vmlld3BvcnRSYW5nZT4oe1xuICAgIHN0YXJ0OiByb290LnN0YXJ0VGltZSxcbiAgICBlbmQ6IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbixcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwcmV2Um9vdCA9IHByZXZSb290UmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgbmV3U3RhcnQgPSByb290LnN0YXJ0VGltZTtcbiAgICBjb25zdCBuZXdFbmQgPSByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb247XG5cbiAgICBzZXRWaWV3cG9ydCgocHJldikgPT4ge1xuICAgICAgY29uc3Qgd2FzQXRGdWxsRXh0ZW50ID1cbiAgICAgICAgTWF0aC5hYnMocHJldi5zdGFydCAtIHByZXZSb290LnN0YXJ0KSA8IDAuMDEgJiZcbiAgICAgICAgTWF0aC5hYnMocHJldi5lbmQgLSBwcmV2Um9vdC5lbmQpIDwgMC4wMTtcblxuICAgICAgaWYgKHdhc0F0RnVsbEV4dGVudCkge1xuICAgICAgICByZXR1cm4geyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9KTtcblxuICAgIHByZXZSb290UmVmLmN1cnJlbnQgPSB7IHN0YXJ0OiBuZXdTdGFydCwgZW5kOiBuZXdFbmQgfTtcbiAgfSwgW3Jvb3Quc3RhcnRUaW1lLCByb290LmR1cmF0aW9uLCBzZXRWaWV3cG9ydF0pO1xuXG4gIGNvbnN0IHZpZXdEdXJhdGlvbiA9IHZpZXdwb3J0LmVuZCAtIHZpZXdwb3J0LnN0YXJ0O1xuXG4gIC8vIEtlZXAgYSByZWYgdG8gdGhlIGxpdmUgdmlld3BvcnQgc28gem9vbSBjYWxsYmFja3MgY2FuIHJlYWQgdGhlIGN1cnJlbnRcbiAgLy8gcmFuZ2Ugd2l0aG91dCBiZWluZyByZWNyZWF0ZWQgb24gZXZlcnkgcGFuICh3aGljaCB3b3VsZCBidXN0IFRpbWVsaW5lQmFyJ3NcbiAgLy8gbWVtbyBhbmQgcmUtcmVuZGVyIGV2ZXJ5IHJvdyBlYWNoIGFuaW1hdGlvbiBmcmFtZSkuXG4gIGNvbnN0IHZpZXdwb3J0UmVmID0gdXNlUmVmKHZpZXdwb3J0KTtcbiAgdmlld3BvcnRSZWYuY3VycmVudCA9IHZpZXdwb3J0O1xuXG4gIGNvbnN0IHRpbWVNYXJrZXJzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBjb21wdXRlVGltZU1hcmtlcnModmlld0R1cmF0aW9uLCB2aWV3cG9ydC5zdGFydCAtIHJvb3Quc3RhcnRUaW1lKSxcbiAgICBbdmlld0R1cmF0aW9uLCB2aWV3cG9ydC5zdGFydCwgcm9vdC5zdGFydFRpbWVdXG4gICk7XG5cbiAgY29uc3QgcmVzZXRab29tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFuaW1hdGVUbyh7IHN0YXJ0OiByb290LnN0YXJ0VGltZSwgZW5kOiByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb24gfSk7XG4gIH0sIFthbmltYXRlVG8sIHJvb3Quc3RhcnRUaW1lLCByb290LmR1cmF0aW9uXSk7XG5cbiAgY29uc3QgY2xhbXBUb1Jvb3QgPSB1c2VDYWxsYmFjayhcbiAgICAobmV4dDogVmlld3BvcnRSYW5nZSk6IFZpZXdwb3J0UmFuZ2UgPT5cbiAgICAgIGNsYW1wVmlld3BvcnRUb1Jvb3QobmV4dCwgcm9vdC5zdGFydFRpbWUsIHJvb3QuZW5kVGltZSwgTUlOX1ZJRVdQT1JUX01TKSxcbiAgICBbcm9vdC5zdGFydFRpbWUsIHJvb3QuZW5kVGltZV1cbiAgKTtcblxuICAvLyBQYW4gKGtlZXBpbmcgdGhlIGN1cnJlbnQgem9vbSkgc28gYHRpbWVNc2AgaXMgY2VudGVyZWQgaW4gdmlldzsgdXNlZCBieSB0aGVcbiAgLy8gb2ZmLXNjcmVlbiBtYXJrZXIgaW5kaWNhdG9ycyB0byBzY3JvbGwgdGhlaXIgbWFya2VyIGludG8gdmlldy5cbiAgY29uc3QgaGFuZGxlUmV2ZWFsVGltZSA9IHVzZUNhbGxiYWNrKFxuICAgICh0aW1lTXM6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB2aWV3cG9ydFJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBlbmQgLSBzdGFydDtcbiAgICAgIGFuaW1hdGVUbyhcbiAgICAgICAgY2xhbXBUb1Jvb3Qoe1xuICAgICAgICAgIHN0YXJ0OiB0aW1lTXMgLSBkdXJhdGlvbiAvIDIsXG4gICAgICAgICAgZW5kOiB0aW1lTXMgKyBkdXJhdGlvbiAvIDIsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW2FuaW1hdGVUbywgY2xhbXBUb1Jvb3RdXG4gICk7XG5cbiAgY29uc3QgWk9PTV9GQUNUT1IgPSAwLjU7XG5cbiAgY29uc3Qgem9vbUJ5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGZhY3RvcjogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHZpZXdwb3J0UmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBjZW50ZXIgPSAoc3RhcnQgKyBlbmQpIC8gMjtcbiAgICAgIGNvbnN0IG5ld0R1cmF0aW9uID0gTWF0aC5tYXgoTUlOX1ZJRVdQT1JUX01TLCAoZW5kIC0gc3RhcnQpICogZmFjdG9yKTtcbiAgICAgIGFuaW1hdGVUbyhcbiAgICAgICAgY2xhbXBUb1Jvb3Qoe1xuICAgICAgICAgIHN0YXJ0OiBjZW50ZXIgLSBuZXdEdXJhdGlvbiAvIDIsXG4gICAgICAgICAgZW5kOiBjZW50ZXIgKyBuZXdEdXJhdGlvbiAvIDIsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW2FuaW1hdGVUbywgY2xhbXBUb1Jvb3RdXG4gICk7XG5cbiAgY29uc3Qgem9vbUluID0gdXNlQ2FsbGJhY2soKCkgPT4gem9vbUJ5KFpPT01fRkFDVE9SKSwgW3pvb21CeV0pO1xuICBjb25zdCB6b29tT3V0ID0gdXNlQ2FsbGJhY2soKCkgPT4gem9vbUJ5KDEgLyBaT09NX0ZBQ1RPUiksIFt6b29tQnldKTtcbiAgY29uc3QgaXNBdE1pblpvb20gPSB2aWV3RHVyYXRpb24gPj0gcm9vdC5kdXJhdGlvbjtcbiAgY29uc3QgaXNBdE1heFpvb20gPSB2aWV3RHVyYXRpb24gPD0gTUlOX1ZJRVdQT1JUX01TO1xuXG4gIGNvbnN0IGZvY3VzVmlld3BvcnRPblNwYW4gPSB1c2VDYWxsYmFjayhcbiAgICAoc3BhbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZS5zcGFucy5maW5kKChzKSA9PiBzLnNwYW5JZCA9PT0gc3BhbklkKTtcbiAgICAgIGlmICghc3BhbikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBzcGFuU3RhcnQgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLnN0YXJ0VGltZSk7XG4gICAgICBjb25zdCBzcGFuRW5kID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5lbmRUaW1lKTtcbiAgICAgIGNvbnN0IHNwYW5EdXJhdGlvbiA9IHNwYW5FbmQgLSBzcGFuU3RhcnQ7XG5cbiAgICAgIGlmIChzcGFuRHVyYXRpb24gPiByb290LmR1cmF0aW9uICogMC44KSB7XG4gICAgICAgIGFuaW1hdGVUbyh7IHN0YXJ0OiByb290LnN0YXJ0VGltZSwgZW5kOiByb290LmVuZFRpbWUgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFkZGluZyA9IE1hdGgubWF4KHNwYW5EdXJhdGlvbiAqIDAuMiwgTUlOX1ZJRVdQT1JUX01TIC8gMik7XG4gICAgICBsZXQgbmV3U3RhcnQgPSBzcGFuU3RhcnQgLSBwYWRkaW5nO1xuICAgICAgbGV0IG5ld0VuZCA9IHNwYW5FbmQgKyBwYWRkaW5nO1xuXG4gICAgICBpZiAobmV3RW5kIC0gbmV3U3RhcnQgPCBNSU5fVklFV1BPUlRfTVMpIHtcbiAgICAgICAgY29uc3QgY2VudGVyID0gKHNwYW5TdGFydCArIHNwYW5FbmQpIC8gMjtcbiAgICAgICAgbmV3U3RhcnQgPSBjZW50ZXIgLSBNSU5fVklFV1BPUlRfTVMgLyAyO1xuICAgICAgICBuZXdFbmQgPSBjZW50ZXIgKyBNSU5fVklFV1BPUlRfTVMgLyAyO1xuICAgICAgfVxuXG4gICAgICBhbmltYXRlVG8oY2xhbXBUb1Jvb3QoeyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH0pKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGFuaW1hdGVUbyxcbiAgICAgIHRyYWNlLnNwYW5zLFxuICAgICAgcm9vdC5zdGFydFRpbWUsXG4gICAgICByb290LmVuZFRpbWUsXG4gICAgICByb290LmR1cmF0aW9uLFxuICAgICAgY2xhbXBUb1Jvb3QsXG4gICAgXVxuICApO1xuXG4gIC8vIEJyaW5nIGEgcm93IGludG8gdmlldyB3aGVuIGtleWJvYXJkL2J1dHRvbiBuYXZpZ2F0aW9uIGxhbmRzIG9uIGEgc3BhbiB0aGF0XG4gIC8vIHNpdHMgb3V0c2lkZSB0aGUgc2hhcmVkIHNjcm9sbCBjb250YWluZXIncyB2aXNpYmxlIGFyZWEuIFRoZSBsaXN0IGlzXG4gIC8vIHdpbmRvd2VkLCBzbyBhbiBvZmYtc2NyZWVuIHJvdyBoYXMgbm8gRE9NIG5vZGUgdG8gYHNjcm9sbEludG9WaWV3YDtcbiAgLy8gYHNjcm9sbFJvd0ludG9WaWV3YCBjb21wdXRlcyB0aGUgdGFyZ2V0IG9mZnNldCBmcm9tIHRoZSBzcGFuJ3MgaW5kZXguXG4gIGNvbnN0IHNjcm9sbFNwYW5JbnRvVmlldyA9IHVzZUNhbGxiYWNrKFxuICAgIChzcGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0cmFjZS5zcGFucy5maW5kSW5kZXgoKHMpID0+IHMuc3BhbklkID09PSBzcGFuSWQpO1xuICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBsaXN0ID1cbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyUmVmLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcjZXZlbnQtbGlzdCcpID8/XG4gICAgICAgIG51bGw7XG4gICAgICBzY3JvbGxSb3dJbnRvVmlldyhsaXN0LCBpbmRleCwgUk9XX0hFSUdIVF9QWCwge1xuICAgICAgICBiZWhhdmlvcjogcmVkdWNlZE1vdGlvbiA/ICdhdXRvJyA6ICdzbW9vdGgnLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbdHJhY2Uuc3BhbnMsIHJlZHVjZWRNb3Rpb25dXG4gICk7XG5cbiAgY29uc3Qgem9vbVRpbWVyUmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNhbmNlbFBlbmRpbmdab29tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh6b29tVGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHpvb21UaW1lclJlZi5jdXJyZW50KTtcbiAgICAgIHpvb21UaW1lclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IGNhbmNlbFBlbmRpbmdab29tLCBbY2FuY2VsUGVuZGluZ1pvb21dKTtcblxuICBjb25zdCBoYW5kbGVDbGVhckFjdGl2ZVNwYW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsUGVuZGluZ1pvb20oKTtcbiAgICBjbGVhckFjdGl2ZVNwYW4oKTtcbiAgfSwgW2NhbmNlbFBlbmRpbmdab29tLCBjbGVhckFjdGl2ZVNwYW5dKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RTcGFuID0gdXNlQ2FsbGJhY2soXG4gICAgKHNwYW5JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSgpO1xuICAgICAgaWYgKHNwYW5JZCA9PT0gYWN0aXZlU3BhbklkKSB7XG4gICAgICAgIGNsZWFyQWN0aXZlU3BhbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRBY3RpdmVTcGFuKHNwYW5JZCk7XG4gICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuKHNwYW5JZCk7XG4gICAgfSxcbiAgICBbXG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSxcbiAgICAgIGFjdGl2ZVNwYW5JZCxcbiAgICAgIGNsZWFyQWN0aXZlU3BhbixcbiAgICAgIHNldEFjdGl2ZVNwYW4sXG4gICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuLFxuICAgIF1cbiAgKTtcblxuICBjb25zdCBuYXZpZ2F0ZVRvU3BhbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzcGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgc2V0QWN0aXZlU3BhbihzcGFuSWQpO1xuICAgICAgc2Nyb2xsU3BhbkludG9WaWV3KHNwYW5JZCk7XG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSgpO1xuICAgICAgem9vbVRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgem9vbVRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuKHNwYW5JZCk7XG4gICAgICB9LCBaT09NX0RFQk9VTkNFX01TKTtcbiAgICB9LFxuICAgIFtzZXRBY3RpdmVTcGFuLCBzY3JvbGxTcGFuSW50b1ZpZXcsIGNhbmNlbFBlbmRpbmdab29tLCBmb2N1c1ZpZXdwb3J0T25TcGFuXVxuICApO1xuXG4gIGNvbnN0IFthbHRIZWxkLCBzZXRBbHRIZWxkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGhhbmRsZUNsZWFyQWN0aXZlU3BhbigpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0FsdCcpIHtcbiAgICAgICAgc2V0QWx0SGVsZCh0cnVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uS2V5VXAgPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnQWx0Jykgc2V0QWx0SGVsZChmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkJsdXIgPSAoKTogdm9pZCA9PiBzZXRBbHRIZWxkKGZhbHNlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBvbktleVVwKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uQmx1cik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIG9uS2V5VXApO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbkJsdXIpO1xuICAgIH07XG4gIH0sIFtoYW5kbGVDbGVhckFjdGl2ZVNwYW5dKTtcblxuICBjb25zdCB0aW1lbGluZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IFtob3Zlciwgc2V0SG92ZXJdID0gdXNlU3RhdGU8VGltZWxpbmVIb3ZlciB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGhvdmVySW5mbyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChob3ZlciA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBhYnNUaW1lID0gdmlld3BvcnQuc3RhcnQgKyBob3Zlci5mcmFjdGlvbiAqIHZpZXdEdXJhdGlvbjtcbiAgICBjb25zdCBvZmZzZXQgPSBhYnNUaW1lIC0gcm9vdC5zdGFydFRpbWU7XG4gICAgcmV0dXJuIHsgZnJhY3Rpb246IGhvdmVyLmZyYWN0aW9uLCBsYWJlbDogZm9ybWF0RHVyYXRpb25QcmVjaXNlKG9mZnNldCkgfTtcbiAgfSwgW2hvdmVyLCB2aWV3cG9ydC5zdGFydCwgdmlld0R1cmF0aW9uLCByb290LnN0YXJ0VGltZV0pO1xuXG4gIGNvbnN0IGhhbmRsZVRpbWVsaW5lTW91c2VNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBlbCA9IHRpbWVsaW5lUmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSByZWN0LndpZHRoIC0gVElNRUxJTkVfUEFERElOR19QWCAqIDI7XG4gICAgICBpZiAoY29udGVudFdpZHRoIDw9IDApIHJldHVybjtcbiAgICAgIGNvbnN0IGZyYWN0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIE1hdGgubWluKFxuICAgICAgICAgIDEsXG4gICAgICAgICAgKGUuY2xpZW50WCAtIHJlY3QubGVmdCAtIFRJTUVMSU5FX1BBRERJTkdfUFgpIC8gY29udGVudFdpZHRoXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBzZXRIb3Zlcih7XG4gICAgICAgIGZyYWN0aW9uLFxuICAgICAgICByb3dJbmRleDogTWF0aC5mbG9vcigoZS5jbGllbnRZIC0gcmVjdC50b3ApIC8gUk9XX0hFSUdIVF9QWCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVGltZWxpbmVNb3VzZUxlYXZlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEhvdmVyKG51bGwpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbCA9IHRpbWVsaW5lUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCB8fCByb290LmR1cmF0aW9uIDw9IDApIHJldHVybjtcblxuICAgIGNvbnN0IG9uV2hlZWwgPSAoZTogV2hlZWxFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNab29tR2VzdHVyZSA9IGUuY3RybEtleSB8fCBlLm1ldGFLZXk7XG4gICAgICBjb25zdCBoYXNEZWx0YVggPSBNYXRoLmFicyhlLmRlbHRhWCkgPiBNYXRoLmFicyhlLmRlbHRhWSk7XG5cbiAgICAgIGlmICghaXNab29tR2VzdHVyZSAmJiAhaGFzRGVsdGFYKSByZXR1cm47XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IHJlY3Qud2lkdGggLSBUSU1FTElORV9QQURESU5HX1BYICogMjtcbiAgICAgIGlmIChjb250ZW50V2lkdGggPD0gMCkgcmV0dXJuO1xuXG4gICAgICBpZiAoaXNab29tR2VzdHVyZSkge1xuICAgICAgICBjb25zdCBjdXJzb3JGcmFjdGlvbiA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgKGUuY2xpZW50WCAtIHJlY3QubGVmdCAtIFRJTUVMSU5FX1BBRERJTkdfUFgpIC8gY29udGVudFdpZHRoXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzY2FsZUZhY3RvciA9IHdoZWVsWm9vbVNjYWxlRmFjdG9yKGUpO1xuXG4gICAgICAgIHNldFZpZXdwb3J0KChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJldkR1cmF0aW9uID0gcHJldi5lbmQgLSBwcmV2LnN0YXJ0O1xuICAgICAgICAgIGNvbnN0IGN1cnNvclRpbWUgPSBwcmV2LnN0YXJ0ICsgY3Vyc29yRnJhY3Rpb24gKiBwcmV2RHVyYXRpb247XG4gICAgICAgICAgLy8gQ2xhbXAgdGhlIGR1cmF0aW9uIGJlZm9yZSBhbmNob3Jpbmcgc28gdGhlIGN1cnNvciBrZWVwcyBpdHNcbiAgICAgICAgICAvLyBmcmFjdGlvbiBldmVuIHdoZW4gdGhlIHpvb20gaGl0cyB0aGUgbWluL21heCBib3VuZHMuXG4gICAgICAgICAgY29uc3QgbmV3RHVyYXRpb24gPSBNYXRoLm1heChcbiAgICAgICAgICAgIE1JTl9WSUVXUE9SVF9NUyxcbiAgICAgICAgICAgIE1hdGgubWluKHJvb3QuZHVyYXRpb24sIHByZXZEdXJhdGlvbiAqIHNjYWxlRmFjdG9yKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGNsYW1wVG9Sb290KHtcbiAgICAgICAgICAgIHN0YXJ0OiBjdXJzb3JUaW1lIC0gY3Vyc29yRnJhY3Rpb24gKiBuZXdEdXJhdGlvbixcbiAgICAgICAgICAgIGVuZDogY3Vyc29yVGltZSArICgxIC0gY3Vyc29yRnJhY3Rpb24pICogbmV3RHVyYXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZHggPSB3aGVlbERlbHRhVG9QaXhlbHMoZS5kZWx0YVgsIGUuZGVsdGFNb2RlKTtcbiAgICAgICAgc2V0Vmlld3BvcnQoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCBwYW5BbW91bnQgPSAoZHggLyBjb250ZW50V2lkdGgpICogKHByZXYuZW5kIC0gcHJldi5zdGFydCk7XG4gICAgICAgICAgcmV0dXJuIGNsYW1wVG9Sb290KHtcbiAgICAgICAgICAgIHN0YXJ0OiBwcmV2LnN0YXJ0ICsgcGFuQW1vdW50LFxuICAgICAgICAgICAgZW5kOiBwcmV2LmVuZCArIHBhbkFtb3VudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICByZXR1cm4gKCkgPT4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvbldoZWVsKTtcbiAgfSwgW3Jvb3QuZHVyYXRpb24sIHNldFZpZXdwb3J0LCBjbGFtcFRvUm9vdF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtwYW5lUm9vdFJlZn1cbiAgICAgIGRhdGEtcGFuZT1cInBhbmUtcm9vdFwiXG4gICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IHctZnVsbCBoLWZ1bGwgbWF4LWgtZnVsbFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBpZD1cInRyYWNlLXBhcmVudFwiXG4gICAgICAgIGNsYXNzTmFtZT1cIkBjb250YWluZXIgZmxleC0xIG1pbi13LTAgZ3JpZCBncmlkLXJvd3MtW2F1dG9fMWZyXSBoLWZ1bGwgbWluLWgtMCBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmUgYmctYmFja2dyb3VuZC0xMDBcIlxuICAgICAgPlxuICAgICAgICA8TWluaW1hcFxuICAgICAgICAgIHNwYW5zPXt0cmFjZS5zcGFuc31cbiAgICAgICAgICByb290PXtyb290fVxuICAgICAgICAgIHZpZXdwb3J0PXt2aWV3cG9ydH1cbiAgICAgICAgICBtaW5WaWV3cG9ydE1zPXtNSU5fVklFV1BPUlRfTVN9XG4gICAgICAgICAgb25WaWV3cG9ydENoYW5nZT17c2V0Vmlld3BvcnR9XG4gICAgICAgICAgb25BbmltYXRlVG89e2FuaW1hdGVUb31cbiAgICAgICAgLz5cbiAgICAgICAgPFNwbGl0UGFuZVxuICAgICAgICAgIHNjcm9sbENvbnRhaW5lclJlZj17c2Nyb2xsQ29udGFpbmVyUmVmfVxuICAgICAgICAgIHN0YXJ0SGVhZGVyPXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctYmFja2dyb3VuZC0xMDAgYm9yZGVyLWIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGgtMTAgbWluLWgtMTAgZmxleCBpdGVtcy1jZW50ZXIgcGwtNCBwci0yIGdhcC0xLjVcIj5cbiAgICAgICAgICAgICAgPFNlYXJjaCBjbGFzc05hbWU9XCJ3LTMuNSBoLTMuNSBzaHJpbmstMCB0ZXh0LWdyYXktODAwXCIgLz5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWQ9XCJ0cmFjZS12aWV3ZXItc2VhcmNoXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwidHJhY2Utdmlld2VyLXNlYXJjaFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaFF1ZXJ5KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnICYmIHNlYXJjaFF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VhcmNoUXVlcnkoJycpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3BhbnMuLi5cIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2ggc3BhbnNcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4tdy0wIGJnLXRyYW5zcGFyZW50IHRleHQtbGFiZWwtMTQgdGV4dC1ncmF5LTEwMDAgcGxhY2Vob2xkZXI6dGV4dC1ncmF5LTgwMCBvdXRsaW5lLW5vbmVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7c2VhcmNoUXVlcnkgJiYgKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIHNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWFyY2hRdWVyeSgnJyl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCItbXItMiBoaWRkZW4gaC1mdWxsIG1heC13LWZ1bGwgc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIHJvdW5kZWQtci1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yLjUgZm9udC1pbmhlcml0IHRleHQtbGFiZWwtMTYgdGV4dC1ncmF5LTkwMCBuby11bmRlcmxpbmUgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMTUwIGVhc2UtaW4gaG92ZXI6dGV4dC1ncmF5LTEwMDAgZm9jdXMtdmlzaWJsZTotb3V0bGluZS1vZmZzZXQtMSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLVt2YXIoLS1kcy1mb2N1cy1jb2xvcildIG1pbi1bOTYxcHhdOmZsZXhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxLYmQgdmFyaWFudD1cIm91dGxpbmVcIiBzaXplPVwic2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgIEVzY1xuICAgICAgICAgICAgICAgICAgPC9LYmQ+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgZW5kSGVhZGVyPXtcbiAgICAgICAgICAgIDxUaW1lbGluZUhlYWRlciBtYXJrZXJzPXt0aW1lTWFya2Vyc30gaG92ZXJJbmZvPXtob3ZlckluZm99IC8+XG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJibG9jayBvdmVyZmxvdy12aXNpYmxlXCI+XG4gICAgICAgICAgICA8RXZlbnRMaXN0XG4gICAgICAgICAgICAgIHNwYW5zPXt0cmFjZS5zcGFuc31cbiAgICAgICAgICAgICAgYWN0aXZlU3BhbklkPXthY3RpdmVTcGFuSWR9XG4gICAgICAgICAgICAgIHNlYXJjaFJlc3VsdD17c2VhcmNoUmVzdWx0fVxuICAgICAgICAgICAgICBvblNlbGVjdFNwYW49e2hhbmRsZVNlbGVjdFNwYW59XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiByZWY9e2xvYWRNb3JlU2VudGluZWxSZWZ9IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAge2lzTG9hZGluZ01vcmUgPyAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBweS0zIHRleHQtbGFiZWwtMTQgdGV4dC1ncmF5LTgwMFwiPlxuICAgICAgICAgICAgICAgICAgPFNwaW5uZXIgc2l6ZT17MTR9IC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5Mb2FkaW5nIHNwYW5z4oCmPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vU3RhdGljRWxlbWVudEludGVyYWN0aW9uczogdGltZWxpbmUgaG92ZXIgYW5kIHdoZWVsIGdlc3R1cmVzIGFyZSBwb2ludGVyLW9ubHkgYW5ub3RhdGlvbnMgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgcmVmPXt0aW1lbGluZVJlZn1cbiAgICAgICAgICAgIGlkPVwidHJhY2UtdGltZWxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiQGNvbnRhaW5lciBibG9jayBtaW4taC0wIG92ZXJmbG93LXZpc2libGUgcmVsYXRpdmVcIlxuICAgICAgICAgICAgb25Eb3VibGVDbGljaz17cmVzZXRab29tfVxuICAgICAgICAgICAgb25Nb3VzZU1vdmU9e2hhbmRsZVRpbWVsaW5lTW91c2VNb3ZlfVxuICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXtoYW5kbGVUaW1lbGluZU1vdXNlTGVhdmV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRpbWVsaW5lXG4gICAgICAgICAgICAgIHNwYW5zPXt0cmFjZS5zcGFuc31cbiAgICAgICAgICAgICAgdmlld1N0YXJ0PXt2aWV3cG9ydC5zdGFydH1cbiAgICAgICAgICAgICAgdmlld0VuZD17dmlld3BvcnQuZW5kfVxuICAgICAgICAgICAgICBtYXJrZXJzPXt0aW1lTWFya2Vyc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWRJZD17YWN0aXZlU3BhbklkfVxuICAgICAgICAgICAgICBzZWFyY2hSZXN1bHQ9e3NlYXJjaFJlc3VsdH1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdFNwYW59XG4gICAgICAgICAgICAgIG9uUmV2ZWFsVGltZT17aGFuZGxlUmV2ZWFsVGltZX1cbiAgICAgICAgICAgICAgaG92ZXI9e2hvdmVyfVxuICAgICAgICAgICAgICBhbHRIZWxkPXthbHRIZWxkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFRyYWNlU2hvcnRjdXRIZWxwZXJcbiAgICAgICAgICAgICAgaGFzTXVsdGlwbGVTcGFucz17dHJhY2Uuc3BhbnMubGVuZ3RoID4gMX1cbiAgICAgICAgICAgICAgcmVkdWNlZE1vdGlvbj17cmVkdWNlZE1vdGlvbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLWF1dG8gZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyIGJvcmRlci1ncmF5LWFscGhhLTQwMCByb3VuZGVkLW1kIGJnLWJhY2tncm91bmQtMTAwIHNoYWRvdy1zbSBvdmVyZmxvdy1oaWRkZW4gZGl2aWRlLXggZGl2aWRlLWdyYXktYWxwaGEtNDAwXCI+XG4gICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm11dGVkXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3pvb21PdXR9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzQXRNaW5ab29tfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJab29tIG91dFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Wm9vbU91dCBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJtdXRlZFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtyZXNldFpvb219XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlc2V0IHpvb21cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFJvdGF0ZUNjdyBjbGFzc05hbWU9XCJ3LTMuNSBoLTMuNVwiIC8+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwibXV0ZWRcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17em9vbUlufVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0F0TWF4Wm9vbX1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiWm9vbSBpblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Wm9vbUluIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgPC9TcGxpdFBhbmU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFRyYWNlRGV0YWlsUGFuZWxcbiAgICAgICAgY29udGFpbmVyUmVmPXtwYW5lUm9vdFJlZn1cbiAgICAgICAgb25OYXZpZ2F0ZVRvU3Bhbj17bmF2aWdhdGVUb1NwYW59XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsZWFyQWN0aXZlU3Bhbn1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
|
|
323
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL3RyYWNlLXZpZXdlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUVMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULE9BQU8sRUFDUCxNQUFNLEVBQ04sUUFBUSxHQUNULE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sU0FBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsY0FBYyxHQUVmLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FB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LEVBQ2IsS0FBQyxVQUFVLElBQ1QsT0FBTyxFQUFDLE9BQU8sRUFDZixJQUFJLEVBQUMsT0FBTyxFQUNaLE9BQU8sRUFBRSxNQUFNLEVBQ2YsUUFBUSxFQUFFLFdBQVcsZ0JBQ1YsU0FBUyxZQUVwQixLQUFDLE1BQU0sSUFBQyxTQUFTLEVBQUMsU0FBUyxHQUFHLEdBQ25CLElBQ1QsSUFDTCxJQUNPLElBQ1IsRUFFTixLQUFDLGdCQUFnQixJQUNmLFlBQVksRUFBRSxXQUFXLEVBQ3pCLGdCQUFnQixFQUFFLGNBQWMsRUFDaEMsT0FBTyxFQUFFLHFCQUFxQixHQUM5QixJQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IFJvdGF0ZUNjdywgU2VhcmNoLCBab29tSW4sIFpvb21PdXQgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHtcbiAgdHlwZSBSZWFjdE5vZGUsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VEZWZlcnJlZFZhbHVlLFxuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUxvYWRNb3JlT25TY3JvbGwgfSBmcm9tICcuLi8uLi9ob29rcy91c2UtbG9hZC1tb3JlLW9uLXNjcm9sbCc7XG5pbXBvcnQgeyB1c2VSZWR1Y2VkTW90aW9uIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlLXJlZHVjZWQtbW90aW9uJztcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tICcuLi91aS9pY29uLWJ1dHRvbic7XG5pbXBvcnQgeyBLYmQgfSBmcm9tICcuLi91aS9rYmQnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4uL3VpL3NwaW5uZXInO1xuaW1wb3J0IHsgVG9vbHRpcFByb3ZpZGVyIH0gZnJvbSAnLi4vdWkvdG9vbHRpcCc7XG5pbXBvcnQgeyBUcmFjZURldGFpbFBhbmVsIH0gZnJvbSAnLi9jb21wb25lbnRzL2RldGFpbC1wYW5lbCc7XG5pbXBvcnQgRXZlbnRMaXN0IGZyb20gJy4vY29tcG9uZW50cy9ldmVudC1saXN0JztcbmltcG9ydCB7IE1pbmltYXAgfSBmcm9tICcuL2NvbXBvbmVudHMvbWluaW1hcCc7XG5pbXBvcnQgeyBTcGxpdFBhbmUgfSBmcm9tICcuL2NvbXBvbmVudHMvc3BsaXQtcGFuZSc7XG5pbXBvcnQge1xuICBUSU1FTElORV9QQURESU5HX1BYLFxuICBUaW1lbGluZSxcbiAgVGltZWxpbmVIZWFkZXIsXG4gIHR5cGUgVGltZWxpbmVIb3Zlcixcbn0gZnJvbSAnLi9jb21wb25lbnRzL3RpbWVsaW5lJztcbmltcG9ydCB7IFRyYWNlU2hvcnRjdXRIZWxwZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvdHJhY2Utc2hvcnRjdXQtaGVscGVyJztcbmltcG9ydCB7IHVzZUFsdEhlbGQgfSBmcm9tICcuL2NvbXBvbmVudHMvdXNlLWFsdC1oZWxkJztcbmltcG9ydCB7IFJPV19IRUlHSFRfUFgsIHNjcm9sbFJvd0ludG9WaWV3IH0gZnJvbSAnLi9jb21wb25lbnRzL3VzZS1yb3ctd2luZG93JztcbmltcG9ydCB7IEFjdGl2ZVNwYW5Qcm92aWRlciwgdXNlQWN0aXZlU3BhbiB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBzZWFyY2hTcGFucyB9IGZyb20gJy4vc2VhcmNoJztcbmltcG9ydCB0eXBlIHsgVHJhY2VXaXRoTWV0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb25QcmVjaXNlLCBnZXRIaWdoUmVzSW5NcyB9IGZyb20gJy4vdXRpbC90aW1pbmcnO1xuaW1wb3J0IHtcbiAgY2xhbXBWaWV3cG9ydFRvUm9vdCxcbiAgY29tcHV0ZVJvb3RCb3VuZHMsXG4gIGNvbXB1dGVUaW1lTWFya2VycyxcbiAgdHlwZSBWaWV3cG9ydFJhbmdlLFxuICB3aGVlbERlbHRhVG9QaXhlbHMsXG4gIHdoZWVsWm9vbVNjYWxlRmFjdG9yLFxufSBmcm9tICcuL3V0aWxzJztcblxuaW50ZXJmYWNlIFRyYWNlVmlld2VyUHJvcHMge1xuICB0cmFjZTogVHJhY2VXaXRoTWV0YTtcbiAgb25Mb2FkTW9yZT86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbiAgaXNMb2FkaW5nTW9yZT86IGJvb2xlYW47XG59XG5cbmNvbnN0IE1JTl9WSUVXUE9SVF9NUyA9IDAuMDAxO1xuXG5jb25zdCBaT09NX0RFQk9VTkNFX01TID0gMTUwO1xuXG5mdW5jdGlvbiB1c2VBbmltYXRlZFZpZXdwb3J0KGluaXRpYWw6IFZpZXdwb3J0UmFuZ2UpIHtcbiAgY29uc3QgW3ZpZXdwb3J0LCBzZXRWaWV3cG9ydFN0YXRlXSA9IHVzZVN0YXRlPFZpZXdwb3J0UmFuZ2U+KGluaXRpYWwpO1xuICBjb25zdCBhbmltUmVmID0gdXNlUmVmPHtcbiAgICByYWY6IG51bWJlcjtcbiAgICBmcm9tOiBWaWV3cG9ydFJhbmdlO1xuICAgIHRvOiBWaWV3cG9ydFJhbmdlO1xuICAgIHN0YXJ0OiBudW1iZXI7XG4gIH0gfCBudWxsPihudWxsKTtcbiAgY29uc3QgY3VycmVudFJlZiA9IHVzZVJlZihpbml0aWFsKTtcbiAgY3VycmVudFJlZi5jdXJyZW50ID0gdmlld3BvcnQ7XG4gIGNvbnN0IHJlZHVjZWRNb3Rpb24gPSB1c2VSZWR1Y2VkTW90aW9uKCk7XG5cbiAgY29uc3QgY2FuY2VsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhbmltUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1SZWYuY3VycmVudC5yYWYpO1xuICAgICAgYW5pbVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtdKTtcblxuICBjb25zdCBhbmltYXRlVG8gPSB1c2VDYWxsYmFjayhcbiAgICAodGFyZ2V0OiBWaWV3cG9ydFJhbmdlKSA9PiB7XG4gICAgICBjYW5jZWwoKTtcblxuICAgICAgaWYgKHJlZHVjZWRNb3Rpb24pIHtcbiAgICAgICAgY3VycmVudFJlZi5jdXJyZW50ID0gdGFyZ2V0O1xuICAgICAgICBzZXRWaWV3cG9ydFN0YXRlKHRhcmdldCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZnJvbSA9IGN1cnJlbnRSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IGFuaW0gPSB7IHJhZjogMCwgZnJvbSwgdG86IHRhcmdldCwgc3RhcnQ6IHBlcmZvcm1hbmNlLm5vdygpIH07XG5cbiAgICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHQgPSBNYXRoLm1pbigocGVyZm9ybWFuY2Uubm93KCkgLSBhbmltLnN0YXJ0KSAvIDI0MCwgMSk7XG4gICAgICAgIGNvbnN0IGUgPSB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gKC0yICogdCArIDIpICoqIDQgLyAyO1xuICAgICAgICBzZXRWaWV3cG9ydFN0YXRlKHtcbiAgICAgICAgICBzdGFydDogYW5pbS5mcm9tLnN0YXJ0ICsgKGFuaW0udG8uc3RhcnQgLSBhbmltLmZyb20uc3RhcnQpICogZSxcbiAgICAgICAgICBlbmQ6IGFuaW0uZnJvbS5lbmQgKyAoYW5pbS50by5lbmQgLSBhbmltLmZyb20uZW5kKSAqIGUsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodCA8IDEpIGFuaW0ucmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgICAgICBlbHNlIGFuaW1SZWYuY3VycmVudCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBhbmltUmVmLmN1cnJlbnQgPSBhbmltO1xuICAgICAgYW5pbS5yYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfSxcbiAgICBbY2FuY2VsLCByZWR1Y2VkTW90aW9uXVxuICApO1xuXG4gIGNvbnN0IHNldFZpZXdwb3J0ID0gdXNlQ2FsbGJhY2soXG4gICAgKHVwZGF0ZTogVmlld3BvcnRSYW5nZSB8ICgocHJldjogVmlld3BvcnRSYW5nZSkgPT4gVmlld3BvcnRSYW5nZSkpID0+IHtcbiAgICAgIGNhbmNlbCgpO1xuICAgICAgaWYgKHR5cGVvZiB1cGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc2V0Vmlld3BvcnRTdGF0ZSgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSB1cGRhdGUocHJldik7XG4gICAgICAgICAgY3VycmVudFJlZi5jdXJyZW50ID0gbmV4dDtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50UmVmLmN1cnJlbnQgPSB1cGRhdGU7XG4gICAgICAgIHNldFZpZXdwb3J0U3RhdGUodXBkYXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjYW5jZWxdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IGNhbmNlbCwgW2NhbmNlbF0pO1xuXG4gIHJldHVybiB7IHZpZXdwb3J0LCBzZXRWaWV3cG9ydCwgYW5pbWF0ZVRvIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUm9vdCBjb21wb25lbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgZnVuY3Rpb24gVHJhY2VWaWV3ZXIoe1xuICB0cmFjZSxcbiAgb25Mb2FkTW9yZSxcbiAgaGFzTW9yZSxcbiAgaXNMb2FkaW5nTW9yZSxcbn06IFRyYWNlVmlld2VyUHJvcHMpOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJvdmlkZXIgZGVsYXlEdXJhdGlvbj17MzAwfT5cbiAgICAgIDxBY3RpdmVTcGFuUHJvdmlkZXIgc3BhbnM9e3RyYWNlLnNwYW5zfT5cbiAgICAgICAgPFRyYWNlVmlld2VyQ29udGVudFxuICAgICAgICAgIHRyYWNlPXt0cmFjZX1cbiAgICAgICAgICBvbkxvYWRNb3JlPXtvbkxvYWRNb3JlfVxuICAgICAgICAgIGhhc01vcmU9e2hhc01vcmV9XG4gICAgICAgICAgaXNMb2FkaW5nTW9yZT17aXNMb2FkaW5nTW9yZX1cbiAgICAgICAgLz5cbiAgICAgIDwvQWN0aXZlU3BhblByb3ZpZGVyPlxuICAgIDwvVG9vbHRpcFByb3ZpZGVyPlxuICApO1xufVxuXG5mdW5jdGlvbiBUcmFjZVZpZXdlckNvbnRlbnQoe1xuICB0cmFjZSxcbiAgb25Mb2FkTW9yZSxcbiAgaGFzTW9yZSxcbiAgaXNMb2FkaW5nTW9yZSxcbn06IFRyYWNlVmlld2VyUHJvcHMpOiBSZWFjdE5vZGUge1xuICBjb25zdCB7IGFjdGl2ZVNwYW5JZCwgc2V0QWN0aXZlU3BhbiwgY2xlYXJBY3RpdmVTcGFuIH0gPSB1c2VBY3RpdmVTcGFuKCk7XG5cbiAgY29uc3QgcmVkdWNlZE1vdGlvbiA9IHVzZVJlZHVjZWRNb3Rpb24oKTtcblxuICBjb25zdCBbc2VhcmNoUXVlcnksIHNldFNlYXJjaFF1ZXJ5XSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgZGVmZXJyZWRTZWFyY2hRdWVyeSA9IHVzZURlZmVycmVkVmFsdWUoc2VhcmNoUXVlcnkpO1xuXG4gIGNvbnN0IHBhbmVSb290UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZWFyY2hSZXN1bHQgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlYXJjaFNwYW5zKHRyYWNlLnNwYW5zLCBkZWZlcnJlZFNlYXJjaFF1ZXJ5KSxcbiAgICBbdHJhY2Uuc3BhbnMsIGRlZmVycmVkU2VhcmNoUXVlcnldXG4gICk7XG5cbiAgY29uc3Qgcm9vdCA9IHVzZU1lbW8oKCkgPT4gY29tcHV0ZVJvb3RCb3VuZHModHJhY2Uuc3BhbnMpLCBbdHJhY2Uuc3BhbnNdKTtcblxuICBjb25zdCBzY3JvbGxDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBsb2FkTW9yZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB2b2lkIG9uTG9hZE1vcmU/LigpO1xuICB9LCBbb25Mb2FkTW9yZV0pO1xuICBjb25zdCBsb2FkTW9yZVNlbnRpbmVsUmVmID0gdXNlTG9hZE1vcmVPblNjcm9sbChsb2FkTW9yZSwge1xuICAgIGhhc01vcmU6IEJvb2xlYW4ob25Mb2FkTW9yZSAmJiBoYXNNb3JlKSxcbiAgICBpc0xvYWRpbmdNb3JlOiBCb29sZWFuKGlzTG9hZGluZ01vcmUpLFxuICAgIHJvb3RSZWY6IHNjcm9sbENvbnRhaW5lclJlZixcbiAgfSk7XG5cbiAgY29uc3QgeyB2aWV3cG9ydCwgc2V0Vmlld3BvcnQsIGFuaW1hdGVUbyB9ID0gdXNlQW5pbWF0ZWRWaWV3cG9ydCh7XG4gICAgc3RhcnQ6IHJvb3Quc3RhcnRUaW1lLFxuICAgIGVuZDogcm9vdC5zdGFydFRpbWUgKyByb290LmR1cmF0aW9uLFxuICB9KTtcblxuICBjb25zdCBwcmV2Um9vdFJlZiA9IHVzZVJlZjxWaWV3cG9ydFJhbmdlPih7XG4gICAgc3RhcnQ6IHJvb3Quc3RhcnRUaW1lLFxuICAgIGVuZDogcm9vdC5zdGFydFRpbWUgKyByb290LmR1cmF0aW9uLFxuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZSb290ID0gcHJldlJvb3RSZWYuY3VycmVudDtcbiAgICBjb25zdCBuZXdTdGFydCA9IHJvb3Quc3RhcnRUaW1lO1xuICAgIGNvbnN0IG5ld0VuZCA9IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbjtcblxuICAgIHNldFZpZXdwb3J0KChwcmV2KSA9PiB7XG4gICAgICBjb25zdCB3YXNBdEZ1bGxFeHRlbnQgPVxuICAgICAgICBNYXRoLmFicyhwcmV2LnN0YXJ0IC0gcHJldlJvb3Quc3RhcnQpIDwgMC4wMSAmJlxuICAgICAgICBNYXRoLmFicyhwcmV2LmVuZCAtIHByZXZSb290LmVuZCkgPCAwLjAxO1xuXG4gICAgICBpZiAod2FzQXRGdWxsRXh0ZW50KSB7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0OiBuZXdTdGFydCwgZW5kOiBuZXdFbmQgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0pO1xuXG4gICAgcHJldlJvb3RSZWYuY3VycmVudCA9IHsgc3RhcnQ6IG5ld1N0YXJ0LCBlbmQ6IG5ld0VuZCB9O1xuICB9LCBbcm9vdC5zdGFydFRpbWUsIHJvb3QuZHVyYXRpb24sIHNldFZpZXdwb3J0XSk7XG5cbiAgY29uc3Qgdmlld0R1cmF0aW9uID0gdmlld3BvcnQuZW5kIC0gdmlld3BvcnQuc3RhcnQ7XG5cbiAgLy8gS2VlcCBhIHJlZiB0byB0aGUgbGl2ZSB2aWV3cG9ydCBzbyB6b29tIGNhbGxiYWNrcyBjYW4gcmVhZCB0aGUgY3VycmVudFxuICAvLyByYW5nZSB3aXRob3V0IGJlaW5nIHJlY3JlYXRlZCBvbiBldmVyeSBwYW4gKHdoaWNoIHdvdWxkIGJ1c3QgVGltZWxpbmVCYXInc1xuICAvLyBtZW1vIGFuZCByZS1yZW5kZXIgZXZlcnkgcm93IGVhY2ggYW5pbWF0aW9uIGZyYW1lKS5cbiAgY29uc3Qgdmlld3BvcnRSZWYgPSB1c2VSZWYodmlld3BvcnQpO1xuICB2aWV3cG9ydFJlZi5jdXJyZW50ID0gdmlld3BvcnQ7XG5cbiAgY29uc3QgdGltZU1hcmtlcnMgPSB1c2VNZW1vKFxuICAgICgpID0+IGNvbXB1dGVUaW1lTWFya2Vycyh2aWV3RHVyYXRpb24sIHZpZXdwb3J0LnN0YXJ0IC0gcm9vdC5zdGFydFRpbWUpLFxuICAgIFt2aWV3RHVyYXRpb24sIHZpZXdwb3J0LnN0YXJ0LCByb290LnN0YXJ0VGltZV1cbiAgKTtcblxuICBjb25zdCByZXNldFpvb20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYW5pbWF0ZVRvKHsgc3RhcnQ6IHJvb3Quc3RhcnRUaW1lLCBlbmQ6IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbiB9KTtcbiAgfSwgW2FuaW1hdGVUbywgcm9vdC5zdGFydFRpbWUsIHJvb3QuZHVyYXRpb25dKTtcblxuICBjb25zdCBjbGFtcFRvUm9vdCA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0OiBWaWV3cG9ydFJhbmdlKTogVmlld3BvcnRSYW5nZSA9PlxuICAgICAgY2xhbXBWaWV3cG9ydFRvUm9vdChuZXh0LCByb290LnN0YXJ0VGltZSwgcm9vdC5lbmRUaW1lLCBNSU5fVklFV1BPUlRfTVMpLFxuICAgIFtyb290LnN0YXJ0VGltZSwgcm9vdC5lbmRUaW1lXVxuICApO1xuXG4gIC8vIFBhbiAoa2VlcGluZyB0aGUgY3VycmVudCB6b29tKSBzbyBgdGltZU1zYCBpcyBjZW50ZXJlZCBpbiB2aWV3OyB1c2VkIGJ5IHRoZVxuICAvLyBvZmYtc2NyZWVuIG1hcmtlciBpbmRpY2F0b3JzIHRvIHNjcm9sbCB0aGVpciBtYXJrZXIgaW50byB2aWV3LlxuICBjb25zdCBoYW5kbGVSZXZlYWxUaW1lID0gdXNlQ2FsbGJhY2soXG4gICAgKHRpbWVNczogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHZpZXdwb3J0UmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGVuZCAtIHN0YXJ0O1xuICAgICAgYW5pbWF0ZVRvKFxuICAgICAgICBjbGFtcFRvUm9vdCh7XG4gICAgICAgICAgc3RhcnQ6IHRpbWVNcyAtIGR1cmF0aW9uIC8gMixcbiAgICAgICAgICBlbmQ6IHRpbWVNcyArIGR1cmF0aW9uIC8gMixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbYW5pbWF0ZVRvLCBjbGFtcFRvUm9vdF1cbiAgKTtcblxuICBjb25zdCBaT09NX0ZBQ1RPUiA9IDAuNTtcblxuICBjb25zdCB6b29tQnkgPSB1c2VDYWxsYmFjayhcbiAgICAoZmFjdG9yOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdmlld3BvcnRSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IGNlbnRlciA9IChzdGFydCArIGVuZCkgLyAyO1xuICAgICAgY29uc3QgbmV3RHVyYXRpb24gPSBNYXRoLm1heChNSU5fVklFV1BPUlRfTVMsIChlbmQgLSBzdGFydCkgKiBmYWN0b3IpO1xuICAgICAgYW5pbWF0ZVRvKFxuICAgICAgICBjbGFtcFRvUm9vdCh7XG4gICAgICAgICAgc3RhcnQ6IGNlbnRlciAtIG5ld0R1cmF0aW9uIC8gMixcbiAgICAgICAgICBlbmQ6IGNlbnRlciArIG5ld0R1cmF0aW9uIC8gMixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbYW5pbWF0ZVRvLCBjbGFtcFRvUm9vdF1cbiAgKTtcblxuICBjb25zdCB6b29tSW4gPSB1c2VDYWxsYmFjaygoKSA9PiB6b29tQnkoWk9PTV9GQUNUT1IpLCBbem9vbUJ5XSk7XG4gIGNvbnN0IHpvb21PdXQgPSB1c2VDYWxsYmFjaygoKSA9PiB6b29tQnkoMSAvIFpPT01fRkFDVE9SKSwgW3pvb21CeV0pO1xuICBjb25zdCBpc0F0TWluWm9vbSA9IHZpZXdEdXJhdGlvbiA+PSByb290LmR1cmF0aW9uO1xuICBjb25zdCBpc0F0TWF4Wm9vbSA9IHZpZXdEdXJhdGlvbiA8PSBNSU5fVklFV1BPUlRfTVM7XG5cbiAgY29uc3QgZm9jdXNWaWV3cG9ydE9uU3BhbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzcGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc3BhbiA9IHRyYWNlLnNwYW5zLmZpbmQoKHMpID0+IHMuc3BhbklkID09PSBzcGFuSWQpO1xuICAgICAgaWYgKCFzcGFuKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHNwYW5TdGFydCA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uc3RhcnRUaW1lKTtcbiAgICAgIGNvbnN0IHNwYW5FbmQgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLmVuZFRpbWUpO1xuICAgICAgY29uc3Qgc3BhbkR1cmF0aW9uID0gc3BhbkVuZCAtIHNwYW5TdGFydDtcblxuICAgICAgaWYgKHNwYW5EdXJhdGlvbiA+IHJvb3QuZHVyYXRpb24gKiAwLjgpIHtcbiAgICAgICAgYW5pbWF0ZVRvKHsgc3RhcnQ6IHJvb3Quc3RhcnRUaW1lLCBlbmQ6IHJvb3QuZW5kVGltZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWRkaW5nID0gTWF0aC5tYXgoc3BhbkR1cmF0aW9uICogMC4yLCBNSU5fVklFV1BPUlRfTVMgLyAyKTtcbiAgICAgIGxldCBuZXdTdGFydCA9IHNwYW5TdGFydCAtIHBhZGRpbmc7XG4gICAgICBsZXQgbmV3RW5kID0gc3BhbkVuZCArIHBhZGRpbmc7XG5cbiAgICAgIGlmIChuZXdFbmQgLSBuZXdTdGFydCA8IE1JTl9WSUVXUE9SVF9NUykge1xuICAgICAgICBjb25zdCBjZW50ZXIgPSAoc3BhblN0YXJ0ICsgc3BhbkVuZCkgLyAyO1xuICAgICAgICBuZXdTdGFydCA9IGNlbnRlciAtIE1JTl9WSUVXUE9SVF9NUyAvIDI7XG4gICAgICAgIG5ld0VuZCA9IGNlbnRlciArIE1JTl9WSUVXUE9SVF9NUyAvIDI7XG4gICAgICB9XG5cbiAgICAgIGFuaW1hdGVUbyhjbGFtcFRvUm9vdCh7IHN0YXJ0OiBuZXdTdGFydCwgZW5kOiBuZXdFbmQgfSkpO1xuICAgIH0sXG4gICAgW1xuICAgICAgYW5pbWF0ZVRvLFxuICAgICAgdHJhY2Uuc3BhbnMsXG4gICAgICByb290LnN0YXJ0VGltZSxcbiAgICAgIHJvb3QuZW5kVGltZSxcbiAgICAgIHJvb3QuZHVyYXRpb24sXG4gICAgICBjbGFtcFRvUm9vdCxcbiAgICBdXG4gICk7XG5cbiAgLy8gQnJpbmcgYSByb3cgaW50byB2aWV3IHdoZW4ga2V5Ym9hcmQvYnV0dG9uIG5hdmlnYXRpb24gbGFuZHMgb24gYSBzcGFuIHRoYXRcbiAgLy8gc2l0cyBvdXRzaWRlIHRoZSBzaGFyZWQgc2Nyb2xsIGNvbnRhaW5lcidzIHZpc2libGUgYXJlYS4gVGhlIGxpc3QgaXNcbiAgLy8gd2luZG93ZWQsIHNvIGFuIG9mZi1zY3JlZW4gcm93IGhhcyBubyBET00gbm9kZSB0byBgc2Nyb2xsSW50b1ZpZXdgO1xuICAvLyBgc2Nyb2xsUm93SW50b1ZpZXdgIGNvbXB1dGVzIHRoZSB0YXJnZXQgb2Zmc2V0IGZyb20gdGhlIHNwYW4ncyBpbmRleC5cbiAgY29uc3Qgc2Nyb2xsU3BhbkludG9WaWV3ID0gdXNlQ2FsbGJhY2soXG4gICAgKHNwYW5JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRyYWNlLnNwYW5zLmZpbmRJbmRleCgocykgPT4gcy5zcGFuSWQgPT09IHNwYW5JZCk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGxpc3QgPVxuICAgICAgICBzY3JvbGxDb250YWluZXJSZWYuY3VycmVudD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJyNldmVudC1saXN0JykgPz9cbiAgICAgICAgbnVsbDtcbiAgICAgIHNjcm9sbFJvd0ludG9WaWV3KGxpc3QsIGluZGV4LCBST1dfSEVJR0hUX1BYLCB7XG4gICAgICAgIGJlaGF2aW9yOiByZWR1Y2VkTW90aW9uID8gJ2F1dG8nIDogJ3Ntb290aCcsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFt0cmFjZS5zcGFucywgcmVkdWNlZE1vdGlvbl1cbiAgKTtcblxuICBjb25zdCB6b29tVGltZXJSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKTtcbiAgY29uc3QgY2FuY2VsUGVuZGluZ1pvb20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHpvb21UaW1lclJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQoem9vbVRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgem9vbVRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4gY2FuY2VsUGVuZGluZ1pvb20sIFtjYW5jZWxQZW5kaW5nWm9vbV0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsZWFyQWN0aXZlU3BhbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjYW5jZWxQZW5kaW5nWm9vbSgpO1xuICAgIGNsZWFyQWN0aXZlU3BhbigpO1xuICB9LCBbY2FuY2VsUGVuZGluZ1pvb20sIGNsZWFyQWN0aXZlU3Bhbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFNwYW4gPSB1c2VDYWxsYmFjayhcbiAgICAoc3BhbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNhbmNlbFBlbmRpbmdab29tKCk7XG4gICAgICBpZiAoc3BhbklkID09PSBhY3RpdmVTcGFuSWQpIHtcbiAgICAgICAgY2xlYXJBY3RpdmVTcGFuKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNldEFjdGl2ZVNwYW4oc3BhbklkKTtcbiAgICAgIGZvY3VzVmlld3BvcnRPblNwYW4oc3BhbklkKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGNhbmNlbFBlbmRpbmdab29tLFxuICAgICAgYWN0aXZlU3BhbklkLFxuICAgICAgY2xlYXJBY3RpdmVTcGFuLFxuICAgICAgc2V0QWN0aXZlU3BhbixcbiAgICAgIGZvY3VzVmlld3BvcnRPblNwYW4sXG4gICAgXVxuICApO1xuXG4gIGNvbnN0IG5hdmlnYXRlVG9TcGFuID0gdXNlQ2FsbGJhY2soXG4gICAgKHNwYW5JZDogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRBY3RpdmVTcGFuKHNwYW5JZCk7XG4gICAgICBzY3JvbGxTcGFuSW50b1ZpZXcoc3BhbklkKTtcbiAgICAgIGNhbmNlbFBlbmRpbmdab29tKCk7XG4gICAgICB6b29tVGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB6b29tVGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIGZvY3VzVmlld3BvcnRPblNwYW4oc3BhbklkKTtcbiAgICAgIH0sIFpPT01fREVCT1VOQ0VfTVMpO1xuICAgIH0sXG4gICAgW3NldEFjdGl2ZVNwYW4sIHNjcm9sbFNwYW5JbnRvVmlldywgY2FuY2VsUGVuZGluZ1pvb20sIGZvY3VzVmlld3BvcnRPblNwYW5dXG4gICk7XG5cbiAgY29uc3QgeyBhbHRIZWxkIH0gPSB1c2VBbHRIZWxkKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvbktleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBoYW5kbGVDbGVhckFjdGl2ZVNwYW4oKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICB9LCBbaGFuZGxlQ2xlYXJBY3RpdmVTcGFuXSk7XG5cbiAgY29uc3QgdGltZWxpbmVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbaG92ZXIsIHNldEhvdmVyXSA9IHVzZVN0YXRlPFRpbWVsaW5lSG92ZXIgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBob3ZlckluZm8gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaG92ZXIgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgYWJzVGltZSA9IHZpZXdwb3J0LnN0YXJ0ICsgaG92ZXIuZnJhY3Rpb24gKiB2aWV3RHVyYXRpb247XG4gICAgY29uc3Qgb2Zmc2V0ID0gYWJzVGltZSAtIHJvb3Quc3RhcnRUaW1lO1xuICAgIHJldHVybiB7IGZyYWN0aW9uOiBob3Zlci5mcmFjdGlvbiwgbGFiZWw6IGZvcm1hdER1cmF0aW9uUHJlY2lzZShvZmZzZXQpIH07XG4gIH0sIFtob3Zlciwgdmlld3BvcnQuc3RhcnQsIHZpZXdEdXJhdGlvbiwgcm9vdC5zdGFydFRpbWVdKTtcblxuICBjb25zdCBoYW5kbGVUaW1lbGluZU1vdXNlTW92ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgZWwgPSB0aW1lbGluZVJlZi5jdXJyZW50O1xuICAgICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gcmVjdC53aWR0aCAtIFRJTUVMSU5FX1BBRERJTkdfUFggKiAyO1xuICAgICAgaWYgKGNvbnRlbnRXaWR0aCA8PSAwKSByZXR1cm47XG4gICAgICBjb25zdCBmcmFjdGlvbiA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAxLFxuICAgICAgICAgIChlLmNsaWVudFggLSByZWN0LmxlZnQgLSBUSU1FTElORV9QQURESU5HX1BYKSAvIGNvbnRlbnRXaWR0aFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgc2V0SG92ZXIoe1xuICAgICAgICBmcmFjdGlvbixcbiAgICAgICAgcm93SW5kZXg6IE1hdGguZmxvb3IoKGUuY2xpZW50WSAtIHJlY3QudG9wKSAvIFJPV19IRUlHSFRfUFgpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRpbWVsaW5lTW91c2VMZWF2ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRIb3ZlcihudWxsKTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZWwgPSB0aW1lbGluZVJlZi5jdXJyZW50O1xuICAgIGlmICghZWwgfHwgcm9vdC5kdXJhdGlvbiA8PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBvbldoZWVsID0gKGU6IFdoZWVsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzWm9vbUdlc3R1cmUgPSBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5O1xuICAgICAgY29uc3QgaGFzRGVsdGFYID0gTWF0aC5hYnMoZS5kZWx0YVgpID4gTWF0aC5hYnMoZS5kZWx0YVkpO1xuXG4gICAgICBpZiAoIWlzWm9vbUdlc3R1cmUgJiYgIWhhc0RlbHRhWCkgcmV0dXJuO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSByZWN0LndpZHRoIC0gVElNRUxJTkVfUEFERElOR19QWCAqIDI7XG4gICAgICBpZiAoY29udGVudFdpZHRoIDw9IDApIHJldHVybjtcblxuICAgICAgaWYgKGlzWm9vbUdlc3R1cmUpIHtcbiAgICAgICAgY29uc3QgY3Vyc29yRnJhY3Rpb24gPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIChlLmNsaWVudFggLSByZWN0LmxlZnQgLSBUSU1FTElORV9QQURESU5HX1BYKSAvIGNvbnRlbnRXaWR0aFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc2NhbGVGYWN0b3IgPSB3aGVlbFpvb21TY2FsZUZhY3RvcihlKTtcblxuICAgICAgICBzZXRWaWV3cG9ydCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXZEdXJhdGlvbiA9IHByZXYuZW5kIC0gcHJldi5zdGFydDtcbiAgICAgICAgICBjb25zdCBjdXJzb3JUaW1lID0gcHJldi5zdGFydCArIGN1cnNvckZyYWN0aW9uICogcHJldkR1cmF0aW9uO1xuICAgICAgICAgIC8vIENsYW1wIHRoZSBkdXJhdGlvbiBiZWZvcmUgYW5jaG9yaW5nIHNvIHRoZSBjdXJzb3Iga2VlcHMgaXRzXG4gICAgICAgICAgLy8gZnJhY3Rpb24gZXZlbiB3aGVuIHRoZSB6b29tIGhpdHMgdGhlIG1pbi9tYXggYm91bmRzLlxuICAgICAgICAgIGNvbnN0IG5ld0R1cmF0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBNSU5fVklFV1BPUlRfTVMsXG4gICAgICAgICAgICBNYXRoLm1pbihyb290LmR1cmF0aW9uLCBwcmV2RHVyYXRpb24gKiBzY2FsZUZhY3RvcilcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBjbGFtcFRvUm9vdCh7XG4gICAgICAgICAgICBzdGFydDogY3Vyc29yVGltZSAtIGN1cnNvckZyYWN0aW9uICogbmV3RHVyYXRpb24sXG4gICAgICAgICAgICBlbmQ6IGN1cnNvclRpbWUgKyAoMSAtIGN1cnNvckZyYWN0aW9uKSAqIG5ld0R1cmF0aW9uLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGR4ID0gd2hlZWxEZWx0YVRvUGl4ZWxzKGUuZGVsdGFYLCBlLmRlbHRhTW9kZSk7XG4gICAgICAgIHNldFZpZXdwb3J0KChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFuQW1vdW50ID0gKGR4IC8gY29udGVudFdpZHRoKSAqIChwcmV2LmVuZCAtIHByZXYuc3RhcnQpO1xuICAgICAgICAgIHJldHVybiBjbGFtcFRvUm9vdCh7XG4gICAgICAgICAgICBzdGFydDogcHJldi5zdGFydCArIHBhbkFtb3VudCxcbiAgICAgICAgICAgIGVuZDogcHJldi5lbmQgKyBwYW5BbW91bnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uV2hlZWwsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gICAgcmV0dXJuICgpID0+IGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCk7XG4gIH0sIFtyb290LmR1cmF0aW9uLCBzZXRWaWV3cG9ydCwgY2xhbXBUb1Jvb3RdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17cGFuZVJvb3RSZWZ9XG4gICAgICBkYXRhLXBhbmU9XCJwYW5lLXJvb3RcIlxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleCB3LWZ1bGwgaC1mdWxsIG1heC1oLWZ1bGxcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9XCJ0cmFjZS1wYXJlbnRcIlxuICAgICAgICBjbGFzc05hbWU9XCJAY29udGFpbmVyIGZsZXgtMSBtaW4tdy0wIGdyaWQgZ3JpZC1yb3dzLVthdXRvXzFmcl0gaC1mdWxsIG1pbi1oLTAgb3ZlcmZsb3ctaGlkZGVuIHJlbGF0aXZlIGJnLWJhY2tncm91bmQtMTAwXCJcbiAgICAgID5cbiAgICAgICAgPE1pbmltYXBcbiAgICAgICAgICBzcGFucz17dHJhY2Uuc3BhbnN9XG4gICAgICAgICAgcm9vdD17cm9vdH1cbiAgICAgICAgICB2aWV3cG9ydD17dmlld3BvcnR9XG4gICAgICAgICAgbWluVmlld3BvcnRNcz17TUlOX1ZJRVdQT1JUX01TfVxuICAgICAgICAgIG9uVmlld3BvcnRDaGFuZ2U9e3NldFZpZXdwb3J0fVxuICAgICAgICAgIG9uQW5pbWF0ZVRvPXthbmltYXRlVG99XG4gICAgICAgIC8+XG4gICAgICAgIDxTcGxpdFBhbmVcbiAgICAgICAgICBzY3JvbGxDb250YWluZXJSZWY9e3Njcm9sbENvbnRhaW5lclJlZn1cbiAgICAgICAgICBzdGFydEhlYWRlcj17XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLWJhY2tncm91bmQtMTAwIGJvcmRlci1iIGJvcmRlci1ncmF5LWFscGhhLTQwMCBoLTEwIG1pbi1oLTEwIGZsZXggaXRlbXMtY2VudGVyIHBsLTQgcHItMiBnYXAtMS41XCI+XG4gICAgICAgICAgICAgIDxTZWFyY2ggY2xhc3NOYW1lPVwidy0zLjUgaC0zLjUgc2hyaW5rLTAgdGV4dC1ncmF5LTgwMFwiIC8+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlkPVwidHJhY2Utdmlld2VyLXNlYXJjaFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cInRyYWNlLXZpZXdlci1zZWFyY2hcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17c2VhcmNoUXVlcnl9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2hRdWVyeShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJyAmJiBzZWFyY2hRdWVyeSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHNldFNlYXJjaFF1ZXJ5KCcnKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHNwYW5zLi4uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2VhcmNoIHNwYW5zXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgbWluLXctMCBiZy10cmFuc3BhcmVudCB0ZXh0LWxhYmVsLTE0IHRleHQtZ3JheS0xMDAwIHBsYWNlaG9sZGVyOnRleHQtZ3JheS04MDAgb3V0bGluZS1ub25lXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAge3NlYXJjaFF1ZXJ5ICYmIChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhciBzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VhcmNoUXVlcnkoJycpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiLW1yLTIgaGlkZGVuIGgtZnVsbCBtYXgtdy1mdWxsIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciByb3VuZGVkLXItbWQgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgcHgtMi41IGZvbnQtaW5oZXJpdCB0ZXh0LWxhYmVsLTE2IHRleHQtZ3JheS05MDAgbm8tdW5kZXJsaW5lIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTE1MCBlYXNlLWluIGhvdmVyOnRleHQtZ3JheS0xMDAwIGZvY3VzLXZpc2libGU6LW91dGxpbmUtb2Zmc2V0LTEgZm9jdXMtdmlzaWJsZTpvdXRsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1bdmFyKC0tZHMtZm9jdXMtY29sb3IpXSBtaW4tWzk2MXB4XTpmbGV4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8S2JkIHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT1cInNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICBFc2NcbiAgICAgICAgICAgICAgICAgIDwvS2JkPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIGVuZEhlYWRlcj17XG4gICAgICAgICAgICA8VGltZWxpbmVIZWFkZXIgbWFya2Vycz17dGltZU1hcmtlcnN9IGhvdmVySW5mbz17aG92ZXJJbmZvfSAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmxvY2sgb3ZlcmZsb3ctdmlzaWJsZVwiPlxuICAgICAgICAgICAgPEV2ZW50TGlzdFxuICAgICAgICAgICAgICBzcGFucz17dHJhY2Uuc3BhbnN9XG4gICAgICAgICAgICAgIGFjdGl2ZVNwYW5JZD17YWN0aXZlU3BhbklkfVxuICAgICAgICAgICAgICBzZWFyY2hSZXN1bHQ9e3NlYXJjaFJlc3VsdH1cbiAgICAgICAgICAgICAgb25TZWxlY3RTcGFuPXtoYW5kbGVTZWxlY3RTcGFufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgcmVmPXtsb2FkTW9yZVNlbnRpbmVsUmVmfSBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgIHtpc0xvYWRpbmdNb3JlID8gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHktMyB0ZXh0LWxhYmVsLTE0IHRleHQtZ3JheS04MDBcIj5cbiAgICAgICAgICAgICAgICAgIDxTcGlubmVyIHNpemU9ezE0fSAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TG9hZGluZyBzcGFuc+KApjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7LyogYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub1N0YXRpY0VsZW1lbnRJbnRlcmFjdGlvbnM6IHRpbWVsaW5lIGhvdmVyIGFuZCB3aGVlbCBnZXN0dXJlcyBhcmUgcG9pbnRlci1vbmx5IGFubm90YXRpb25zICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHJlZj17dGltZWxpbmVSZWZ9XG4gICAgICAgICAgICBpZD1cInRyYWNlLXRpbWVsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIkBjb250YWluZXIgYmxvY2sgbWluLWgtMCBvdmVyZmxvdy12aXNpYmxlIHJlbGF0aXZlXCJcbiAgICAgICAgICAgIG9uRG91YmxlQ2xpY2s9e3Jlc2V0Wm9vbX1cbiAgICAgICAgICAgIG9uTW91c2VNb3ZlPXtoYW5kbGVUaW1lbGluZU1vdXNlTW92ZX1cbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17aGFuZGxlVGltZWxpbmVNb3VzZUxlYXZlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUaW1lbGluZVxuICAgICAgICAgICAgICBzcGFucz17dHJhY2Uuc3BhbnN9XG4gICAgICAgICAgICAgIHZpZXdTdGFydD17dmlld3BvcnQuc3RhcnR9XG4gICAgICAgICAgICAgIHZpZXdFbmQ9e3ZpZXdwb3J0LmVuZH1cbiAgICAgICAgICAgICAgbWFya2Vycz17dGltZU1hcmtlcnN9XG4gICAgICAgICAgICAgIHNlbGVjdGVkSWQ9e2FjdGl2ZVNwYW5JZH1cbiAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0PXtzZWFyY2hSZXN1bHR9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVTZWxlY3RTcGFufVxuICAgICAgICAgICAgICBvblJldmVhbFRpbWU9e2hhbmRsZVJldmVhbFRpbWV9XG4gICAgICAgICAgICAgIGhvdmVyPXtob3Zlcn1cbiAgICAgICAgICAgICAgYWx0SGVsZD17YWx0SGVsZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxUcmFjZVNob3J0Y3V0SGVscGVyXG4gICAgICAgICAgICAgIGhhc011bHRpcGxlU3BhbnM9e3RyYWNlLnNwYW5zLmxlbmd0aCA+IDF9XG4gICAgICAgICAgICAgIHJlZHVjZWRNb3Rpb249e3JlZHVjZWRNb3Rpb259XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1hdXRvIGZsZXggaXRlbXMtY2VudGVyIGJvcmRlciBib3JkZXItZ3JheS1hbHBoYS00MDAgcm91bmRlZC1tZCBiZy1iYWNrZ3JvdW5kLTEwMCBzaGFkb3ctc20gb3ZlcmZsb3ctaGlkZGVuIGRpdmlkZS14IGRpdmlkZS1ncmF5LWFscGhhLTQwMFwiPlxuICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJtdXRlZFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt6b29tT3V0fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0F0TWluWm9vbX1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiWm9vbSBvdXRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFpvb21PdXQgY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwibXV0ZWRcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17cmVzZXRab29tfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZXNldCB6b29tXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxSb3RhdGVDY3cgY2xhc3NOYW1lPVwidy0zLjUgaC0zLjVcIiAvPlxuICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm11dGVkXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3pvb21Jbn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNBdE1heFpvb219XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlpvb20gaW5cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFpvb21JbiBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgIDwvU3BsaXRQYW5lPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxUcmFjZURldGFpbFBhbmVsXG4gICAgICAgIGNvbnRhaW5lclJlZj17cGFuZVJvb3RSZWZ9XG4gICAgICAgIG9uTmF2aWdhdGVUb1NwYW49e25hdmlnYXRlVG9TcGFufVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbGVhckFjdGl2ZVNwYW59XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { WorkflowRun } from '@workflow/core/runtime';
|
|
2
2
|
import type { Event } from '@workflow/world';
|
|
3
3
|
import { type SidebarDataContextValue } from './sidebar/sidebar-data-context';
|
|
4
|
-
|
|
4
|
+
import type { GetStepAttributes } from './workflow-traces/trace-span-construction';
|
|
5
|
+
declare const TraceViewer: ({ run, events, sidebarData, onLoadMore, hasMore, isLoadingMore, loading, getStepAttributes, }: {
|
|
5
6
|
run: WorkflowRun;
|
|
6
7
|
events: Event[];
|
|
7
8
|
sidebarData: SidebarDataContextValue;
|
|
@@ -9,6 +10,8 @@ declare const TraceViewer: ({ run, events, sidebarData, onLoadMore, hasMore, isL
|
|
|
9
10
|
hasMore?: boolean;
|
|
10
11
|
isLoadingMore?: boolean;
|
|
11
12
|
loading?: boolean;
|
|
13
|
+
/** Adds product-specific attributes to event-derived step span data. */
|
|
14
|
+
getStepAttributes?: GetStepAttributes;
|
|
12
15
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
13
16
|
export { TraceViewer };
|
|
14
17
|
//# sourceMappingURL=trace-viewer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-viewer.d.ts","sourceRoot":"","sources":["../../src/components/trace-viewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"trace-viewer.d.ts","sourceRoot":"","sources":["../../src/components/trace-viewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAEnF,QAAA,MAAM,WAAW,GAAI,+FASlB;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,EAAE,uBAAuB,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,4CAsCA,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { buildTrace } from '../lib/trace-builder';
|
|
|
4
4
|
import { SidebarDataProvider, } from './sidebar/sidebar-data-context';
|
|
5
5
|
import { TraceViewerSkeleton } from './trace-viewer/components/trace-viewer-skeleton';
|
|
6
6
|
import { TraceViewer as TraceViewerComponent } from './trace-viewer/trace-viewer';
|
|
7
|
-
const TraceViewer = ({ run, events, sidebarData, onLoadMore, hasMore, isLoadingMore, loading = false, }) => {
|
|
7
|
+
const TraceViewer = ({ run, events, sidebarData, onLoadMore, hasMore, isLoadingMore, loading = false, getStepAttributes, }) => {
|
|
8
8
|
const trace = useMemo(() => {
|
|
9
9
|
if (!run?.runId) {
|
|
10
10
|
return undefined;
|
|
@@ -14,9 +14,10 @@ const TraceViewer = ({ run, events, sidebarData, onLoadMore, hasMore, isLoadingM
|
|
|
14
14
|
// repeats with the whole log in hand.
|
|
15
15
|
return buildTrace(run, events, new Date(), {
|
|
16
16
|
isCompleteHistory: !hasMore,
|
|
17
|
+
getStepAttributes,
|
|
17
18
|
});
|
|
18
19
|
// eslint-disable-next-line react-hooks/exhaustive-deps -- `new Date()` is intentionally not a dep
|
|
19
|
-
}, [run, events, hasMore]);
|
|
20
|
+
}, [run, events, hasMore, getStepAttributes]);
|
|
20
21
|
// The sidebar shows one entity's slice of the log, so it takes the trace's
|
|
21
22
|
// answer rather than recomputing one from the slice.
|
|
22
23
|
const sidebarValue = useMemo(() => ({ ...sidebarData, duplicateEventIds: trace?.duplicateEventIds }), [sidebarData, trace]);
|
|
@@ -26,4 +27,4 @@ const TraceViewer = ({ run, events, sidebarData, onLoadMore, hasMore, isLoadingM
|
|
|
26
27
|
return (_jsx(SidebarDataProvider, { value: sidebarValue, children: _jsx("div", { className: "relative w-full h-full flex", children: _jsx(TraceViewerComponent, { trace: trace, onLoadMore: onLoadMore, hasMore: hasMore, isLoadingMore: isLoadingMore }) }) }));
|
|
27
28
|
};
|
|
28
29
|
export { TraceViewer };
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFzQixNQUFNLHNCQUFzQixDQUFDO0FBQ3RFLE9BQU8sRUFFTCxtQkFBbUIsR0FDcEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN0RixPQUFPLEVBQUUsV0FBVyxJQUFJLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHbEYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxFQUNuQixHQUFHLEVBQ0gsTUFBTSxFQUNOLFdBQVcsRUFDWCxVQUFVLEVBQ1YsT0FBTyxFQUNQLGFBQWEsRUFDYixPQUFPLEdBQUcsS0FBSyxFQUNmLGlCQUFpQixHQVdsQixFQUFFLEVBQUU7SUFDSCxNQUFNLEtBQUssR0FBOEIsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNwRCxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2hCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCwwRUFBMEU7UUFDMUUsdUVBQXVFO1FBQ3ZFLHNDQUFzQztRQUN0QyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUU7WUFDekMsaUJBQWlCLEVBQUUsQ0FBQyxPQUFPO1lBQzNCLGlCQUFpQjtTQUNsQixDQUFDLENBQUM7UUFDSCxrR0FBa0c7SUFDcEcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBRTlDLDJFQUEyRTtJQUMzRSxxREFBcUQ7SUFDckQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUMxQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFDdkUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQ3JCLENBQUM7SUFFRixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxPQUFPLEtBQUMsbUJBQW1CLEtBQUcsQ0FBQztJQUNqQyxDQUFDO0lBRUQsT0FBTyxDQUNMLEtBQUMsbUJBQW1CLElBQUMsS0FBSyxFQUFFLFlBQVksWUFDdEMsY0FBSyxTQUFTLEVBQUMsNkJBQTZCLFlBQzFDLEtBQUMsb0JBQW9CLElBQ25CLEtBQUssRUFBRSxLQUFLLEVBQ1osVUFBVSxFQUFFLFVBQVUsRUFDdEIsT0FBTyxFQUFFLE9BQU8sRUFDaEIsYUFBYSxFQUFFLGFBQWEsR0FDNUIsR0FDRSxHQUNjLENBQ3ZCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L2NvcmUvcnVudGltZSc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50IH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBidWlsZFRyYWNlLCB0eXBlIFRyYWNlV2l0aE1ldGEgfSBmcm9tICcuLi9saWIvdHJhY2UtYnVpbGRlcic7XG5pbXBvcnQge1xuICB0eXBlIFNpZGViYXJEYXRhQ29udGV4dFZhbHVlLFxuICBTaWRlYmFyRGF0YVByb3ZpZGVyLFxufSBmcm9tICcuL3NpZGViYXIvc2lkZWJhci1kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHsgVHJhY2VWaWV3ZXJTa2VsZXRvbiB9IGZyb20gJy4vdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyLXNrZWxldG9uJztcbmltcG9ydCB7IFRyYWNlVmlld2VyIGFzIFRyYWNlVmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi90cmFjZS12aWV3ZXIvdHJhY2Utdmlld2VyJztcbmltcG9ydCB0eXBlIHsgR2V0U3RlcEF0dHJpYnV0ZXMgfSBmcm9tICcuL3dvcmtmbG93LXRyYWNlcy90cmFjZS1zcGFuLWNvbnN0cnVjdGlvbic7XG5cbmNvbnN0IFRyYWNlVmlld2VyID0gKHtcbiAgcnVuLFxuICBldmVudHMsXG4gIHNpZGViYXJEYXRhLFxuICBvbkxvYWRNb3JlLFxuICBoYXNNb3JlLFxuICBpc0xvYWRpbmdNb3JlLFxuICBsb2FkaW5nID0gZmFsc2UsXG4gIGdldFN0ZXBBdHRyaWJ1dGVzLFxufToge1xuICBydW46IFdvcmtmbG93UnVuO1xuICBldmVudHM6IEV2ZW50W107XG4gIHNpZGViYXJEYXRhOiBTaWRlYmFyRGF0YUNvbnRleHRWYWx1ZTtcbiAgb25Mb2FkTW9yZT86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbiAgaXNMb2FkaW5nTW9yZT86IGJvb2xlYW47XG4gIGxvYWRpbmc/OiBib29sZWFuO1xuICAvKiogQWRkcyBwcm9kdWN0LXNwZWNpZmljIGF0dHJpYnV0ZXMgdG8gZXZlbnQtZGVyaXZlZCBzdGVwIHNwYW4gZGF0YS4gKi9cbiAgZ2V0U3RlcEF0dHJpYnV0ZXM/OiBHZXRTdGVwQXR0cmlidXRlcztcbn0pID0+IHtcbiAgY29uc3QgdHJhY2U6IFRyYWNlV2l0aE1ldGEgfCB1bmRlZmluZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXJ1bj8ucnVuSWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGBoYXNNb3JlYCBpcyB0aGUgb25seSBwbGFjZSB0aGF0IGtub3dzIHdoZXRoZXIgbW9yZSBvZiB0aGUgbG9nIGlzIHN0aWxsXG4gICAgLy8gdG8gYmUgZmV0Y2hlZCwgYW5kIGEgcmVwZWF0IGNhbiBvbmx5IGJlIHRvbGQgYXBhcnQgZnJvbSB0aGUgZXZlbnQgaXRcbiAgICAvLyByZXBlYXRzIHdpdGggdGhlIHdob2xlIGxvZyBpbiBoYW5kLlxuICAgIHJldHVybiBidWlsZFRyYWNlKHJ1biwgZXZlbnRzLCBuZXcgRGF0ZSgpLCB7XG4gICAgICBpc0NvbXBsZXRlSGlzdG9yeTogIWhhc01vcmUsXG4gICAgICBnZXRTdGVwQXR0cmlidXRlcyxcbiAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzIC0tIGBuZXcgRGF0ZSgpYCBpcyBpbnRlbnRpb25hbGx5IG5vdCBhIGRlcFxuICB9LCBbcnVuLCBldmVudHMsIGhhc01vcmUsIGdldFN0ZXBBdHRyaWJ1dGVzXSk7XG5cbiAgLy8gVGhlIHNpZGViYXIgc2hvd3Mgb25lIGVudGl0eSdzIHNsaWNlIG9mIHRoZSBsb2csIHNvIGl0IHRha2VzIHRoZSB0cmFjZSdzXG4gIC8vIGFuc3dlciByYXRoZXIgdGhhbiByZWNvbXB1dGluZyBvbmUgZnJvbSB0aGUgc2xpY2UuXG4gIGNvbnN0IHNpZGViYXJWYWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHsgLi4uc2lkZWJhckRhdGEsIGR1cGxpY2F0ZUV2ZW50SWRzOiB0cmFjZT8uZHVwbGljYXRlRXZlbnRJZHMgfSksXG4gICAgW3NpZGViYXJEYXRhLCB0cmFjZV1cbiAgKTtcblxuICBpZiAoIXRyYWNlIHx8IChsb2FkaW5nICYmIGV2ZW50cy5sZW5ndGggPT09IDApKSB7XG4gICAgcmV0dXJuIDxUcmFjZVZpZXdlclNrZWxldG9uIC8+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U2lkZWJhckRhdGFQcm92aWRlciB2YWx1ZT17c2lkZWJhclZhbHVlfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBmbGV4XCI+XG4gICAgICAgIDxUcmFjZVZpZXdlckNvbXBvbmVudFxuICAgICAgICAgIHRyYWNlPXt0cmFjZX1cbiAgICAgICAgICBvbkxvYWRNb3JlPXtvbkxvYWRNb3JlfVxuICAgICAgICAgIGhhc01vcmU9e2hhc01vcmV9XG4gICAgICAgICAgaXNMb2FkaW5nTW9yZT17aXNMb2FkaW5nTW9yZX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvU2lkZWJhckRhdGFQcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCB7IFRyYWNlVmlld2VyIH07XG4iXX0=
|
|
@@ -29,8 +29,8 @@ export declare const RunClickContext: import("react").Context<((runId: string) =
|
|
|
29
29
|
* non-expandable versions so the renderer doesn't show their internals.
|
|
30
30
|
* Only recurses into plain objects and arrays to avoid stripping class
|
|
31
31
|
* instances (Date, Error, URL, Headers, etc.) that have their own rendering.
|
|
32
|
-
* Map and Set
|
|
33
|
-
*
|
|
32
|
+
* Map and Set contents are prepared here; other iterable contents are prepared
|
|
33
|
+
* when the renderer traverses them.
|
|
34
34
|
*
|
|
35
35
|
* Exported for testing the typed-array detection path used by hydrated
|
|
36
36
|
* AI agent stream chunks (e.g. `{ delta: new Uint8Array(...) }`).
|
|
@@ -57,5 +57,6 @@ export interface DataInspectorProps {
|
|
|
57
57
|
decryptDisabledReason?: string;
|
|
58
58
|
}
|
|
59
59
|
export declare function DataInspector({ data, expandLevel, name, onStreamClick, onRunClick, onDecrypt, isDecrypting, isDecryptDisabled, decryptDisabledReason, }: DataInspectorProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
60
|
+
export declare function isDeepEqual(a: unknown, b: unknown, seen?: WeakMap<object, any>): boolean;
|
|
60
61
|
export {};
|
|
61
62
|
//# sourceMappingURL=data-inspector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-inspector.d.ts","sourceRoot":"","sources":["../../../src/components/ui/data-inspector.tsx"],"names":[],"mappings":"AA6BA,OAAO,EACL,KAAK,wBAAwB,EAG9B,MAAM,0BAA0B,CAAC;AAalC,QAAA,MAAM,kBAAkB,+BAA+B,CAAC;AAYxD,UAAU,YAAY;IACpB,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC;AA0CD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAIpE;AAwBD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,sCACjB,MAAM,KAAK,IAAI,cACjB,CAAC;AAEb;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,mBAAmB,+DAEpB,CAAC;AAEb,eAAO,MAAM,eAAe,mCACjB,MAAM,KAAK,IAAI,cACd,CAAC;
|
|
1
|
+
{"version":3,"file":"data-inspector.d.ts","sourceRoot":"","sources":["../../../src/components/ui/data-inspector.tsx"],"names":[],"mappings":"AA6BA,OAAO,EACL,KAAK,wBAAwB,EAG9B,MAAM,0BAA0B,CAAC;AAalC,QAAA,MAAM,kBAAkB,+BAA+B,CAAC;AAYxD,UAAU,YAAY;IACpB,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC;AA0CD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAIpE;AAwBD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,sCACjB,MAAM,KAAK,IAAI,cACjB,CAAC;AAEb;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,mBAAmB,+DAEpB,CAAC;AAEb,eAAO,MAAM,eAAe,mCACjB,MAAM,KAAK,IAAI,cACd,CAAC;AA+sBb;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CA2BnD;AAMD,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,WAAe,EACf,IAAI,EACJ,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAoB,EACpB,iBAAyB,EACzB,qBAAqB,GACtB,EAAE,kBAAkB,8FA6CpB;AA4CD,wBAAgB,WAAW,CACzB,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,OAAO,EACV,IAAI,uBAAgB,GACnB,OAAO,CA2ET"}
|