π File detail
components/Spinner/TeammateSpinnerTree.tsx
π§© .tsxπ 272 linesπΎ 28,052 bytesπ text
β Back to All Filesπ― Use case
This file lives under βcomponents/β, which covers shared React UI pieces. On the API surface it exposes TeammateSpinnerTree β mainly types, interfaces, or factory objects. Dependencies touch React UI and figures. It composes internal code from ink, state, tasks, utils, and TeammateSpinnerLine (relative imports).
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
import { c as _c } from "react/compiler-runtime"; import figures from 'figures'; import * as React from 'react'; import { Box, Text, type TextProps } from '../../ink.js'; import { useAppState } from '../../state/AppState.js';
π€ Exports (heuristic)
TeammateSpinnerTree
π External import roots
Package roots from from "β¦" (relative paths omitted).
reactfigures
π₯οΈ Source preview
import { c as _c } from "react/compiler-runtime";
import figures from 'figures';
import * as React from 'react';
import { Box, Text, type TextProps } from '../../ink.js';
import { useAppState } from '../../state/AppState.js';
import { getRunningTeammatesSorted } from '../../tasks/InProcessTeammateTask/InProcessTeammateTask.js';
import { formatNumber } from '../../utils/format.js';
import { TeammateSpinnerLine } from './TeammateSpinnerLine.js';
import { TEAMMATE_SELECT_HINT } from './teammateSelectHint.js';
type Props = {
selectedIndex?: number;
isInSelectionMode?: boolean;
allIdle?: boolean;
/** Leader's active verb (when leader is actively processing) */
leaderVerb?: string;
/** Leader's token count (when leader is actively processing) */
leaderTokenCount?: number;
/** Leader's idle status text (when leader is idle, e.g. "β» Idle for 3s") */
leaderIdleText?: string;
};
export function TeammateSpinnerTree(t0) {
const $ = _c(61);
const {
selectedIndex,
isInSelectionMode,
allIdle,
leaderVerb,
leaderTokenCount,
leaderIdleText
} = t0;
const tasks = useAppState(_temp);
const viewingAgentTaskId = useAppState(_temp2);
const showTeammateMessagePreview = useAppState(_temp3);
let T0;
let isHideSelected;
let t1;
let t2;
let t3;
let t4;
let t5;
if ($[0] !== allIdle || $[1] !== isInSelectionMode || $[2] !== leaderIdleText || $[3] !== leaderTokenCount || $[4] !== leaderVerb || $[5] !== selectedIndex || $[6] !== showTeammateMessagePreview || $[7] !== tasks || $[8] !== viewingAgentTaskId) {
t5 = Symbol.for("react.early_return_sentinel");
bb0: {
const teammateTasks = getRunningTeammatesSorted(tasks);
if (teammateTasks.length === 0) {
t5 = null;
break bb0;
}
const isLeaderForegrounded = viewingAgentTaskId === undefined;
const isLeaderSelected = isInSelectionMode && selectedIndex === -1;
const isLeaderHighlighted = isLeaderForegrounded || isLeaderSelected;
isHideSelected = isInSelectionMode === true && selectedIndex === teammateTasks.length;
T0 = Box;
t1 = "column";
t2 = 1;
const t6 = isLeaderSelected ? "suggestion" : undefined;
const t7 = isLeaderSelected ? figures.pointer : " ";
let t8;
if ($[16] !== isLeaderHighlighted || $[17] !== t6 || $[18] !== t7) {
t8 = <Text color={t6} bold={isLeaderHighlighted}>{t7}</Text>;
$[16] = isLeaderHighlighted;
$[17] = t6;
$[18] = t7;
$[19] = t8;
} else {
t8 = $[19];
}
const t9 = !isLeaderHighlighted;
const t10 = isLeaderHighlighted ? "\u2552\u2550" : "\u250C\u2500";
let t11;
if ($[20] !== isLeaderHighlighted || $[21] !== t10 || $[22] !== t9) {
t11 = <Text dimColor={t9} bold={isLeaderHighlighted}>{t10}{" "}</Text>;
$[20] = isLeaderHighlighted;
$[21] = t10;
$[22] = t9;
$[23] = t11;
} else {
t11 = $[23];
}
const t12 = isLeaderSelected ? "suggestion" : "cyan_FOR_SUBAGENTS_ONLY";
let t13;
if ($[24] !== isLeaderHighlighted || $[25] !== t12) {
t13 = <Text bold={isLeaderHighlighted} color={t12}>team-lead</Text>;
$[24] = isLeaderHighlighted;
$[25] = t12;
$[26] = t13;
} else {
t13 = $[26];
}
let t14;
if ($[27] !== isLeaderForegrounded || $[28] !== leaderVerb) {
t14 = !isLeaderForegrounded && leaderVerb && <Text dimColor={true}>: {leaderVerb}β¦</Text>;
$[27] = isLeaderForegrounded;
$[28] = leaderVerb;
$[29] = t14;
} else {
t14 = $[29];
}
let t15;
if ($[30] !== isLeaderForegrounded || $[31] !== leaderIdleText || $[32] !== leaderVerb) {
t15 = !isLeaderForegrounded && !leaderVerb && leaderIdleText && <Text dimColor={true}>: {leaderIdleText}</Text>;
$[30] = isLeaderForegrounded;
$[31] = leaderIdleText;
$[32] = leaderVerb;
$[33] = t15;
} else {
t15 = $[33];
}
let t16;
if ($[34] !== isLeaderHighlighted || $[35] !== leaderTokenCount) {
t16 = leaderTokenCount !== undefined && leaderTokenCount > 0 && <Text dimColor={!isLeaderHighlighted}>{" "}Β· {formatNumber(leaderTokenCount)} tokens</Text>;
$[34] = isLeaderHighlighted;
$[35] = leaderTokenCount;
$[36] = t16;
} else {
t16 = $[36];
}
let t17;
if ($[37] !== isLeaderHighlighted) {
t17 = isLeaderHighlighted && <Text dimColor={true}> Β· {TEAMMATE_SELECT_HINT}</Text>;
$[37] = isLeaderHighlighted;
$[38] = t17;
} else {
t17 = $[38];
}
let t18;
if ($[39] !== isLeaderForegrounded || $[40] !== isLeaderSelected) {
t18 = isLeaderSelected && !isLeaderForegrounded && <Text dimColor={true}> Β· enter to view</Text>;
$[39] = isLeaderForegrounded;
$[40] = isLeaderSelected;
$[41] = t18;
} else {
t18 = $[41];
}
if ($[42] !== t11 || $[43] !== t13 || $[44] !== t14 || $[45] !== t15 || $[46] !== t16 || $[47] !== t17 || $[48] !== t18 || $[49] !== t8) {
t3 = <Box paddingLeft={3}>{t8}{t11}{t13}{t14}{t15}{t16}{t17}{t18}</Box>;
$[42] = t11;
$[43] = t13;
$[44] = t14;
$[45] = t15;
$[46] = t16;
$[47] = t17;
$[48] = t18;
$[49] = t8;
$[50] = t3;
} else {
t3 = $[50];
}
t4 = teammateTasks.map((teammate, index) => <TeammateSpinnerLine key={teammate.id} teammate={teammate} isLast={!isInSelectionMode && index === teammateTasks.length - 1} isSelected={isInSelectionMode && selectedIndex === index} isForegrounded={viewingAgentTaskId === teammate.id} allIdle={allIdle} showPreview={showTeammateMessagePreview} />);
}
$[0] = allIdle;
$[1] = isInSelectionMode;
$[2] = leaderIdleText;
$[3] = leaderTokenCount;
$[4] = leaderVerb;
$[5] = selectedIndex;
$[6] = showTeammateMessagePreview;
$[7] = tasks;
$[8] = viewingAgentTaskId;
$[9] = T0;
$[10] = isHideSelected;
$[11] = t1;
$[12] = t2;
$[13] = t3;
$[14] = t4;
$[15] = t5;
} else {
T0 = $[9];
isHideSelected = $[10];
t1 = $[11];
t2 = $[12];
t3 = $[13];
t4 = $[14];
t5 = $[15];
}
if (t5 !== Symbol.for("react.early_return_sentinel")) {
return t5;
}
let t6;
if ($[51] !== isHideSelected || $[52] !== isInSelectionMode) {
t6 = isInSelectionMode && <HideRow isSelected={isHideSelected} />;
$[51] = isHideSelected;
$[52] = isInSelectionMode;
$[53] = t6;
} else {
t6 = $[53];
}
let t7;
if ($[54] !== T0 || $[55] !== t1 || $[56] !== t2 || $[57] !== t3 || $[58] !== t4 || $[59] !== t6) {
t7 = <T0 flexDirection={t1} marginTop={t2}>{t3}{t4}{t6}</T0>;
$[54] = T0;
$[55] = t1;
$[56] = t2;
$[57] = t3;
$[58] = t4;
$[59] = t6;
$[60] = t7;
} else {
t7 = $[60];
}
return t7;
}
function _temp3(s_1) {
return s_1.showTeammateMessagePreview;
}
function _temp2(s_0) {
return s_0.viewingAgentTaskId;
}
function _temp(s) {
return s.tasks;
}
function HideRow(t0) {
const $ = _c(18);
const {
isSelected
} = t0;
const t1 = isSelected ? "suggestion" : undefined;
const t2 = isSelected ? figures.pointer : " ";
let t3;
if ($[0] !== isSelected || $[1] !== t1 || $[2] !== t2) {
t3 = <Text color={t1} bold={isSelected}>{t2}</Text>;
$[0] = isSelected;
$[1] = t1;
$[2] = t2;
$[3] = t3;
} else {
t3 = $[3];
}
const t4 = !isSelected;
const t5 = isSelected ? "\u2558\u2550" : "\u2514\u2500";
let t6;
if ($[4] !== isSelected || $[5] !== t4 || $[6] !== t5) {
t6 = <Text dimColor={t4} bold={isSelected}>{t5}{" "}</Text>;
$[4] = isSelected;
$[5] = t4;
$[6] = t5;
$[7] = t6;
} else {
t6 = $[7];
}
const t7 = !isSelected;
let t8;
if ($[8] !== isSelected || $[9] !== t7) {
t8 = <Text dimColor={t7} bold={isSelected}>hide</Text>;
$[8] = isSelected;
$[9] = t7;
$[10] = t8;
} else {
t8 = $[10];
}
let t9;
if ($[11] !== isSelected) {
t9 = isSelected && <Text dimColor={true}> Β· enter to collapse</Text>;
$[11] = isSelected;
$[12] = t9;
} else {
t9 = $[12];
}
let t10;
if ($[13] !== t3 || $[14] !== t6 || $[15] !== t8 || $[16] !== t9) {
t10 = <Box paddingLeft={3}>{t3}{t6}{t8}{t9}</Box>;
$[13] = t3;
$[14] = t6;
$[15] = t8;
$[16] = t9;
$[17] = t10;
} else {
t10 = $[17];
}
return t10;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWd1cmVzIiwiUmVhY3QiLCJCb3giLCJUZXh0IiwiVGV4dFByb3BzIiwidXNlQXBwU3RhdGUiLCJnZXRSdW5uaW5nVGVhbW1hdGVzU29ydGVkIiwiZm9ybWF0TnVtYmVyIiwiVGVhbW1hdGVTcGlubmVyTGluZSIsIlRFQU1NQVRFX1NFTEVDVF9ISU5UIiwiUHJvcHMiLCJzZWxlY3RlZEluZGV4IiwiaXNJblNlbGVjdGlvbk1vZGUiLCJhbGxJZGxlIiwibGVhZGVyVmVyYiIsImxlYWRlclRva2VuQ291bnQiLCJsZWFkZXJJZGxlVGV4dCIsIlRlYW1tYXRlU3Bpbm5lclRyZWUiLCJ0MCIsIiQiLCJfYyIsInRhc2tzIiwiX3RlbXAiLCJ2aWV3aW5nQWdlbnRUYXNrSWQiLCJfdGVtcDIiLCJzaG93VGVhbW1hdGVNZXNzYWdlUHJldmlldyIsIl90ZW1wMyIsIlQwIiwiaXNIaWRlU2VsZWN0ZWQiLCJ0MSIsInQyIiwidDMiLCJ0NCIsInQ1IiwiU3ltYm9sIiwiZm9yIiwiYmIwIiwidGVhbW1hdGVUYXNrcyIsImxlbmd0aCIsImlzTGVhZGVyRm9yZWdyb3VuZGVkIiwidW5kZWZpbmVkIiwiaXNMZWFkZXJTZWxlY3RlZCIsImlzTGVhZGVySGlnaGxpZ2h0ZWQiLCJ0NiIsInQ3IiwicG9pbnRlciIsInQ4IiwidDkiLCJ0MTAiLCJ0MTEiLCJ0MTIiLCJ0MTMiLCJ0MTQiLCJ0MTUiLCJ0MTYiLCJ0MTciLCJ0MTgiLCJtYXAiLCJ0ZWFtbWF0ZSIsImluZGV4IiwiaWQiLCJzXzEiLCJzIiwic18wIiwiSGlkZVJvdyIsImlzU2VsZWN0ZWQiXSwic291cmNlcyI6WyJUZWFtbWF0ZVNwaW5uZXJUcmVlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZmlndXJlcyBmcm9tICdmaWd1cmVzJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIFRleHQsIHR5cGUgVGV4dFByb3BzIH0gZnJvbSAnLi4vLi4vaW5rLmpzJ1xuaW1wb3J0IHsgdXNlQXBwU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZS9BcHBTdGF0ZS5qcydcbmltcG9ydCB7IGdldFJ1bm5pbmdUZWFtbWF0ZXNTb3J0ZWQgfSBmcm9tICcuLi8uLi90YXNrcy9JblByb2Nlc3NUZWFtbWF0ZVRhc2svSW5Qcm9jZXNzVGVhbW1hdGVUYXNrLmpzJ1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvZm9ybWF0LmpzJ1xuaW1wb3J0IHsgVGVhbW1hdGVTcGlubmVyTGluZSB9IGZyb20gJy4vVGVhbW1hdGVTcGlubmVyTGluZS5qcydcbmltcG9ydCB7IFRFQU1NQVRFX1NFTEVDVF9ISU5UIH0gZnJvbSAnLi90ZWFtbWF0ZVNlbGVjdEhpbnQuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIHNlbGVjdGVkSW5kZXg/OiBudW1iZXJcbiAgaXNJblNlbGVjdGlvbk1vZGU/OiBib29sZWFuXG4gIGFsbElkbGU/OiBib29sZWFuXG4gIC8qKiBMZWFkZXIncyBhY3RpdmUgdmVyYiAod2hlbiBsZWFkZXIgaXMgYWN0aXZlbHkgcHJvY2Vzc2luZykgKi9cbiAgbGVhZGVyVmVyYj86IHN0cmluZ1xuICAvKiogTGVhZGVyJ3MgdG9rZW4gY291bnQgKHdoZW4gbGVhZGVyIGlzIGFjdGl2ZWx5IHByb2Nlc3NpbmcpICovXG4gIGxlYWRlclRva2VuQ291bnQ/OiBudW1iZXJcbiAgLyoqIExlYWRlcidzIGlkbGUgc3RhdHVzIHRleHQgKHdoZW4gbGVhZGVyIGlzIGlkbGUsIGUuZy4gXCLinLsgSWRsZSBmb3IgM3NcIikgKi9cbiAgbGVhZGVySWRsZVRleHQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRlYW1tYXRlU3Bpbm5lclRyZWUoe1xuICBzZWxlY3RlZEluZGV4LFxuICBpc0luU2VsZWN0aW9uTW9kZSxcbiAgYWxsSWRsZSxcbiAgbGVhZGVyVmVyYixcbiAgbGVhZGVyVG9rZW5Db3VudCxcbiAgbGVhZGVySWRsZVRleHQsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHRhc2tzID0gdXNlQXBwU3RhdGUocyA9PiBzLnRhc2tzKVxuICBjb25zdCB2aWV3aW5nQWdlbnRUYXNrSWQgPSB1c2VBcHBTdGF0ZShzID0+IHMudmlld2luZ0FnZW50VGFza0lkKVxuICBjb25zdCBzaG93VGVhbW1hdGVNZXNzYWdlUHJldmlldyA9IHVzZUFwcFN0YXRlKFxuICAgIHMgPT4gcy5zaG93VGVhbW1hdGVNZXNzYWdlUHJldmlldyxcbiAgKVxuXG4gIGNvbnN0IHRlYW1tYXRlVGFza3MgPSBnZXRSdW5uaW5nVGVhbW1hdGVzU29ydGVkKHRhc2tzKVxuXG4gIC8vIERvbid0IHJlbmRlciBpZiBubyBydW5uaW5nIHRlYW1tYXRlc1xuICBpZiAodGVhbW1hdGVUYXNrcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gTGVhZGVyIGhpZ2hsaWdodGluZyBmb2xsb3dzIHNhbWUgcGF0dGVybiBhcyB0ZWFtbWF0ZXM6XG4gIC8vIGlzSGlnaGxpZ2h0ZWQgPSBpc0ZvcmVncm91bmRlZCB8fCBpc1NlbGVjdGVkXG4gIGNvbnN0IGlzTGVhZGVyRm9yZWdyb3VuZGVkID0gdmlld2luZ0FnZW50VGFza0lkID09PSB1bmRlZmluZWRcbiAgY29uc3QgaXNMZWFkZXJTZWxlY3RlZCA9IGlzSW5TZWxlY3Rpb25Nb2RlICYmIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gIGNvbnN0IGlzTGVhZGVySGlnaGxpZ2h0ZWQgPSBpc0xlYWRlckZvcmVncm91bmRlZCB8fCBpc0xlYWRlclNlbGVjdGVkXG4gIGNvbnN0IGxlYWRlckNvbG9yOiBUZXh0UHJvcHNbJ2NvbG9yJ10gPSAnY3lhbl9GT1JfU1VCQUdFTlRTX09OTFknXG5cbiAgLy8gSXMgdGhlIFwiaGlkZVwiIHJvdyBzZWxlY3RlZD8gKGluZGV4ID09PSB0ZWFtbWF0ZUNvdW50IGluIHNlbGVjdGlvbiBtb2RlKVxuICBjb25zdCBpc0hpZGVTZWxlY3RlZCA9XG4gICAgaXNJblNlbGVjdGlvbk1vZGUgPT09IHRydWUgJiYgc2VsZWN0ZWRJbmRleCA9PT0gdGVhbW1hdGVUYXNrcy5sZW5ndGhcblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIG1hcmdpblRvcD17MX0+XG4gICAgICB7LyogTGVhZGVyIHJvdyAtIGFsd2F5cyB2aXNpYmxlLCB1c2VzIOKUjOKUgCB0byBlbmNsb3NlIHRoZSB0cmVlICovfVxuICAgICAge1xuICAgICAgICA8Qm94IHBhZGRpbmdMZWZ0PXszfT5cbiAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgY29sb3I9e2lzTGVhZGVyU2VsZWN0ZWQgPyAnc3VnZ2VzdGlvbicgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBib2xkPXtpc0xlYWRlckhpZ2hsaWdodGVkfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtpc0xlYWRlclNlbGVjdGVkID8gZmlndXJlcy5wb2ludGVyIDogJyAnfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj17IWlzTGVhZGVySGlnaGxpZ2h0ZWR9IGJvbGQ9e2lzTGVhZGVySGlnaGxpZ2h0ZWR9PlxuICAgICAgICAgICAge2lzTGVhZGVySGlnaGxpZ2h0ZWQgPyAn4pWS4pWQJyA6ICfilIzilIAnfXsnICd9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICBib2xkPXtpc0xlYWRlckhpZ2hsaWdodGVkfVxuICAgICAgICAgICAgY29sb3I9e2lzTGVhZGVyU2VsZWN0ZWQgPyAnc3VnZ2VzdGlvbicgOiBsZWFkZXJDb2xvcn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB0ZWFtLWxlYWRcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgey8qIFdoZW4gYmFja2dyb3VuZGVkIGFuZCBhY3RpdmU6IHNob3cgc3Bpbm5lciArIHZlcmIgKi99XG4gICAgICAgICAgeyFpc0xlYWRlckZvcmVncm91bmRlZCAmJiBsZWFkZXJWZXJiICYmIChcbiAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPjoge2xlYWRlclZlcmJ94oCmPC9UZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgICAgey8qIFdoZW4gYmFja2dyb3VuZGVkIGFuZCBpZGxlOiBzaG93IGlkbGUgdGV4dCAqL31cbiAgICAgICAgICB7IWlzTGVhZGVyRm9yZWdyb3VuZGVkICYmICFsZWFkZXJWZXJiICYmIGxlYWRlcklkbGVUZXh0ICYmIChcbiAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPjoge2xlYWRlcklkbGVUZXh0fTwvVGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHsvKiBTdGF0cyAodG9rZW5zKSAtIHNhbWUgZGltQ29sb3IgbG9naWMgYXMgdGVhbW1hdGVzICovfVxuICAgICAgICAgIHtsZWFkZXJUb2tlbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgbGVhZGVyVG9rZW5Db3VudCA+IDAgJiYgKFxuICAgICAgICAgICAgPFRleHQgZGltQ29sb3I9eyFpc0xlYWRlckhpZ2hsaWdodGVkfT5cbiAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgwrcge2Zvcm1hdE51bWJlcihsZWFkZXJUb2tlbkNvdW50KX0gdG9rZW5zXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7LyogSGludHMgLSBzZWxlY3QgaGludCB3aGVuIGhpZ2hsaWdodGVkLCB2aWV3IGhpbnQgd2hlbiBzZWxlY3RlZCBidXQgbm90IGZvcmVncm91bmRlZCAqL31cbiAgICAgICAgICB7aXNMZWFkZXJIaWdobGlnaHRlZCAmJiAoXG4gICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj4gwrcge1RFQU1NQVRFX1NFTEVDVF9ISU5UfTwvVGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtpc0xlYWRlclNlbGVjdGVkICYmICFpc0xlYWRlckZvcmVncm91bmRlZCAmJiAoXG4gICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj4gwrcgZW50ZXIgdG8gdmlldzwvVGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L0JveD5cbiAgICAgIH1cbiAgICAgIHt0ZWFtbWF0ZVRhc2tzLm1hcCgodGVhbW1hdGUsIGluZGV4KSA9PiAoXG4gICAgICAgIDxUZWFtbWF0ZVNwaW5uZXJMaW5lXG4gICAgICAgICAga2V5PXt0ZWFtbWF0ZS5pZH1cbiAgICAgICAgICB0ZWFtbWF0ZT17dGVhbW1hdGV9XG4gICAgICAgICAgaXNMYXN0PXshaXNJblNlbGVjdGlvbk1vZGUgJiYgaW5kZXggPT09IHRlYW1tYXRlVGFza3MubGVuZ3RoIC0gMX1cbiAgICAgICAgICBpc1NlbGVjdGVkPXtpc0luU2VsZWN0aW9uTW9kZSAmJiBzZWxlY3RlZEluZGV4ID09PSBpbmRleH1cbiAgICAgICAgICBpc0ZvcmVncm91bmRlZD17dmlld2luZ0FnZW50VGFza0lkID09PSB0ZWFtbWF0ZS5pZH1cbiAgICAgICAgICBhbGxJZGxlPXthbGxJZGxlfVxuICAgICAgICAgIHNob3dQcmV2aWV3PXtzaG93VGVhbW1hdGVNZXNzYWdlUHJldmlld31cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgICAgey8qIEhpZGUgcm93IC0gb25seSB2aXNpYmxlIGR1cmluZyBzZWxlY3Rpb24gbW9kZSAqL31cbiAgICAgIHtpc0luU2VsZWN0aW9uTW9kZSAmJiA8SGlkZVJvdyBpc1NlbGVjdGVkPXtpc0hpZGVTZWxlY3RlZH0gLz59XG4gICAgPC9Cb3g+XG4gIClcbn1cblxuZnVuY3Rpb24gSGlkZVJvdyh7IGlzU2VsZWN0ZWQgfTogeyBpc1NlbGVjdGVkOiBib29sZWFuIH0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxCb3ggcGFkZGluZ0xlZnQ9ezN9PlxuICAgICAgPFRleHQgY29sb3I9e2lzU2VsZWN0ZWQgPyAnc3VnZ2VzdGlvbicgOiB1bmRlZmluZWR9IGJvbGQ9e2lzU2VsZWN0ZWR9PlxuICAgICAgICB7aXNTZWxlY3RlZCA/IGZpZ3VyZXMucG9pbnRlciA6ICcgJ31cbiAgICAgIDwvVGV4dD5cbiAgICAgIDxUZXh0IGRpbUNvbG9yPXshaXNTZWxlY3RlZH0gYm9sZD17aXNTZWxlY3RlZH0+XG4gICAgICAgIHtpc1NlbGVjdGVkID8gJ+KVmOKVkCcgOiAn4pSU4pSAJ317JyAnfVxuICAgICAgPC9UZXh0PlxuICAgICAgPFRleHQgZGltQ29sb3I9eyFpc1NlbGVjdGVkfSBib2xkPXtpc1NlbGVjdGVkfT5cbiAgICAgICAgaGlkZVxuICAgICAgPC9UZXh0PlxuICAgICAge2lzU2VsZWN0ZWQgJiYgPFRleHQgZGltQ29sb3I+IMK3IGVudGVyIHRvIGNvbGxhcHNlPC9UZXh0Pn1cbiAgICA8L0JveD5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsT0FBTyxNQUFNLFNBQVM7QUFDN0IsT0FBTyxLQUFLQyxLQUFLLE1BQU0sT0FBTztBQUM5QixTQUFTQyxHQUFHLEVBQUVDLElBQUksRUFBRSxLQUFLQyxTQUFTLFFBQVEsY0FBYztBQUN4RCxTQUFTQyxXQUFXLFFBQVEseUJBQXlCO0FBQ3JELFNBQVNDLHlCQUF5QixRQUFRLDREQUE0RDtBQUN0RyxTQUFTQyxZQUFZLFFBQVEsdUJBQXVCO0FBQ3BELFNBQVNDLG1CQUFtQixRQUFRLDBCQUEwQjtBQUM5RCxTQUFTQyxvQkFBb0IsUUFBUSx5QkFBeUI7QUFFOUQsS0FBS0MsS0FBSyxHQUFHO0VBQ1hDLGFBQWEsQ0FBQyxFQUFFLE1BQU07RUFDdEJDLGlCQUFpQixDQUFDLEVBQUUsT0FBTztFQUMzQkMsT0FBTyxDQUFDLEVBQUUsT0FBTztFQUNqQjtFQUNBQyxVQUFVLENBQUMsRUFBRSxNQUFNO0VBQ25CO0VBQ0FDLGdCQUFnQixDQUFDLEVBQUUsTUFBTTtFQUN6QjtFQUNBQyxjQUFjLENBQUMsRUFBRSxNQUFNO0FBQ3pCLENBQUM7QUFFRCxPQUFPLFNBQUFDLG9CQUFBQyxFQUFBO0VBQUEsTUFBQUMsQ0FBQSxHQUFBQyxFQUFBO0VBQTZCO0lBQUFULGFBQUE7SUFBQUMsaUJBQUE7SUFBQUMsT0FBQTtJQUFBQyxVQUFBO0lBQUFDLGdC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QSxNQUFBYSxFQUFBO0lBQUFiLENBQUEsTUFBQWMsRUFBQTtJQUFBZCxDQUFBLE1BQUF3QixFQUFBO0VBQUE7SUFBQUEsRUFBQSxHQUFBeEIsQ0FBQTtFQUFBO0VBQ1MsTUFBQXlCLEVBQUEsSUFBQ3FCLFVBQVU7RUFBQSxJQUFBbkIsRUFBQTtFQUFBLElBQUEzQixDQUFBLFFBQUE4QyxVQUFBLElBQUE5QyxDQUFBLFFBQUF5QixFQUFBO0lBQTNCRSxFQUFBLElBQUMsSUFBSSxDQUFXLFFBQVcsQ0FBWCxDQUFBRixFQUFVLENBQUMsQ0FBUXFCLElBQVUsQ0FBVkEsV0FBUyxDQUFDLENBQUUsSUFFL0MsRUFGQyxJQUFJLENBRUU7SUFBQTlDLENBQUEsTUFBQThDLFVBQUE7SUFBQTlDLENBQUEsTUFBQXlCLEVBQUE7SUFBQXpCLENBQUEsT0FBQTJCLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUEzQixDQUFBO0VBQUE7RUFBQSxJQUFBNEIsRUFBQTtFQUFBLElBQUE1QixDQUFBLFNBQUE4QyxVQUFBO0lBQ05sQixFQUFBLEdBQUFrQixVQUF3RCxJQUExQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQVIsS0FBTyxDQUFDLENBQUMsb0JBQW9CLEVBQWxDLElBQUksQ0FBcUM7SUFBQTlDLENBQUEsT0FBQThDLFVBQUE7SUFBQTlDLENBQUEsT0FBQTRCLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUE1QixDQUFBO0VBQUE7RUFBQSxJQUFBNkIsR0FBQTtFQUFBLElBQUE3QixDQUFBLFNBQUFZLEVBQUEsSUFBQVosQ0FBQSxTQUFBd0IsRUFBQSxJQUFBeEIsQ0FBQSxTQUFBMkIsRUFBQSxJQUFBM0IsQ0FBQSxTQUFBNEIsRUFBQTtJQVYzREMsR0FBQSxJQUFDLEdBQUcsQ0FBYyxXQUFDLENBQUQsR0FBQyxDQUNqQixDQUFBakIsRUFFTSxDQUNOLENBQUFZLEVBRU0sQ0FDTixDQUFBRyxFQUVNLENBQ0wsQ0FBQUMsRUFBdUQsQ0FDMUQsRUFYQyxHQUFHLENBV0U7SUFBQTVCLENBQUEsT0FBQVksRUFBQTtJQUFBWixDQUFBLE9BQUF3QixFQUFBO0lBQUF4QixDQUFBLE9BQUEyQixFQUFBO0lBQUEzQixDQUFBLE9BQUE0QixFQUFBO0lBQUE1QixDQUFBLE9BQUE2QixHQUFBO0VBQUE7SUFBQUEsR0FBQSxHQUFBN0IsQ0FBQTtFQUFBO0VBQUEsT0FYTjZCLEdBV007QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==