source dump of claude code
at main 285 lines 32 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import React, { useState } from 'react'; 3import { type OptionWithDescription, Select } from '../../components/CustomSelect/select.js'; 4import { Dialog } from '../../components/design-system/Dialog.js'; 5import { Box, Text } from '../../ink.js'; 6import { useAppState } from '../../state/AppState.js'; 7import { isClaudeAISubscriber } from '../../utils/auth.js'; 8import { openBrowser } from '../../utils/browser.js'; 9import { CLAUDE_IN_CHROME_MCP_SERVER_NAME, openInChrome } from '../../utils/claudeInChrome/common.js'; 10import { isChromeExtensionInstalled } from '../../utils/claudeInChrome/setup.js'; 11import { getGlobalConfig, saveGlobalConfig } from '../../utils/config.js'; 12import { env } from '../../utils/env.js'; 13import { isRunningOnHomespace } from '../../utils/envUtils.js'; 14const CHROME_EXTENSION_URL = 'https://claude.ai/chrome'; 15const CHROME_PERMISSIONS_URL = 'https://clau.de/chrome/permissions'; 16const CHROME_RECONNECT_URL = 'https://clau.de/chrome/reconnect'; 17type MenuAction = 'install-extension' | 'reconnect' | 'manage-permissions' | 'toggle-default'; 18type Props = { 19 onDone: (result?: string) => void; 20 isExtensionInstalled: boolean; 21 configEnabled: boolean | undefined; 22 isClaudeAISubscriber: boolean; 23 isWSL: boolean; 24}; 25function ClaudeInChromeMenu(t0) { 26 const $ = _c(41); 27 const { 28 onDone, 29 isExtensionInstalled: installed, 30 configEnabled, 31 isClaudeAISubscriber, 32 isWSL 33 } = t0; 34 const mcpClients = useAppState(_temp); 35 const [selectKey, setSelectKey] = useState(0); 36 const [enabledByDefault, setEnabledByDefault] = useState(configEnabled ?? false); 37 const [showInstallHint, setShowInstallHint] = useState(false); 38 const [isExtensionInstalled, setIsExtensionInstalled] = useState(installed); 39 let t1; 40 if ($[0] === Symbol.for("react.memo_cache_sentinel")) { 41 t1 = false && isRunningOnHomespace(); 42 $[0] = t1; 43 } else { 44 t1 = $[0]; 45 } 46 const isHomespace = t1; 47 let t2; 48 if ($[1] !== mcpClients) { 49 t2 = mcpClients.find(_temp2); 50 $[1] = mcpClients; 51 $[2] = t2; 52 } else { 53 t2 = $[2]; 54 } 55 const chromeClient = t2; 56 const isConnected = chromeClient?.type === "connected"; 57 let t3; 58 if ($[3] === Symbol.for("react.memo_cache_sentinel")) { 59 t3 = function openUrl(url) { 60 if (isHomespace) { 61 openBrowser(url); 62 } else { 63 openInChrome(url); 64 } 65 }; 66 $[3] = t3; 67 } else { 68 t3 = $[3]; 69 } 70 const openUrl = t3; 71 let t4; 72 if ($[4] !== enabledByDefault) { 73 t4 = function handleAction(action) { 74 bb22: switch (action) { 75 case "install-extension": 76 { 77 setSelectKey(_temp3); 78 setShowInstallHint(true); 79 openUrl(CHROME_EXTENSION_URL); 80 break bb22; 81 } 82 case "reconnect": 83 { 84 setSelectKey(_temp4); 85 isChromeExtensionInstalled().then(installed_0 => { 86 setIsExtensionInstalled(installed_0); 87 if (installed_0) { 88 setShowInstallHint(false); 89 } 90 }); 91 openUrl(CHROME_RECONNECT_URL); 92 break bb22; 93 } 94 case "manage-permissions": 95 { 96 setSelectKey(_temp5); 97 openUrl(CHROME_PERMISSIONS_URL); 98 break bb22; 99 } 100 case "toggle-default": 101 { 102 const newValue = !enabledByDefault; 103 saveGlobalConfig(current => ({ 104 ...current, 105 claudeInChromeDefaultEnabled: newValue 106 })); 107 setEnabledByDefault(newValue); 108 } 109 } 110 }; 111 $[4] = enabledByDefault; 112 $[5] = t4; 113 } else { 114 t4 = $[5]; 115 } 116 const handleAction = t4; 117 let options; 118 if ($[6] !== enabledByDefault || $[7] !== isExtensionInstalled) { 119 options = []; 120 const requiresExtensionSuffix = isExtensionInstalled ? "" : " (requires extension)"; 121 if (!isExtensionInstalled && !isHomespace) { 122 let t5; 123 if ($[9] === Symbol.for("react.memo_cache_sentinel")) { 124 t5 = { 125 label: "Install Chrome extension", 126 value: "install-extension" 127 }; 128 $[9] = t5; 129 } else { 130 t5 = $[9]; 131 } 132 options.push(t5); 133 } 134 let t5; 135 if ($[10] === Symbol.for("react.memo_cache_sentinel")) { 136 t5 = <Text>Manage permissions</Text>; 137 $[10] = t5; 138 } else { 139 t5 = $[10]; 140 } 141 let t6; 142 if ($[11] !== requiresExtensionSuffix) { 143 t6 = { 144 label: <>{t5}<Text dimColor={true}>{requiresExtensionSuffix}</Text></>, 145 value: "manage-permissions" 146 }; 147 $[11] = requiresExtensionSuffix; 148 $[12] = t6; 149 } else { 150 t6 = $[12]; 151 } 152 let t7; 153 if ($[13] === Symbol.for("react.memo_cache_sentinel")) { 154 t7 = <Text>Reconnect extension</Text>; 155 $[13] = t7; 156 } else { 157 t7 = $[13]; 158 } 159 let t8; 160 if ($[14] !== requiresExtensionSuffix) { 161 t8 = { 162 label: <>{t7}<Text dimColor={true}>{requiresExtensionSuffix}</Text></>, 163 value: "reconnect" 164 }; 165 $[14] = requiresExtensionSuffix; 166 $[15] = t8; 167 } else { 168 t8 = $[15]; 169 } 170 const t9 = `Enabled by default: ${enabledByDefault ? "Yes" : "No"}`; 171 let t10; 172 if ($[16] !== t9) { 173 t10 = { 174 label: t9, 175 value: "toggle-default" 176 }; 177 $[16] = t9; 178 $[17] = t10; 179 } else { 180 t10 = $[17]; 181 } 182 options.push(t6, t8, t10); 183 $[6] = enabledByDefault; 184 $[7] = isExtensionInstalled; 185 $[8] = options; 186 } else { 187 options = $[8]; 188 } 189 const isDisabled = isWSL || true && !isClaudeAISubscriber; 190 let t5; 191 if ($[18] !== onDone) { 192 t5 = () => onDone(); 193 $[18] = onDone; 194 $[19] = t5; 195 } else { 196 t5 = $[19]; 197 } 198 let t6; 199 if ($[20] === Symbol.for("react.memo_cache_sentinel")) { 200 t6 = <Text>Claude in Chrome works with the Chrome extension to let you control your browser directly from Claude Code. Navigate websites, fill forms, capture screenshots, record GIFs, and debug with console logs and network requests.</Text>; 201 $[20] = t6; 202 } else { 203 t6 = $[20]; 204 } 205 let t7; 206 if ($[21] !== isWSL) { 207 t7 = isWSL && <Text color="error">Claude in Chrome is not supported in WSL at this time.</Text>; 208 $[21] = isWSL; 209 $[22] = t7; 210 } else { 211 t7 = $[22]; 212 } 213 let t8; 214 if ($[23] !== isClaudeAISubscriber) { 215 t8 = true && !isClaudeAISubscriber && <Text color="error">Claude in Chrome requires a claude.ai subscription.</Text>; 216 $[23] = isClaudeAISubscriber; 217 $[24] = t8; 218 } else { 219 t8 = $[24]; 220 } 221 let t9; 222 if ($[25] !== handleAction || $[26] !== isConnected || $[27] !== isDisabled || $[28] !== isExtensionInstalled || $[29] !== options || $[30] !== selectKey || $[31] !== showInstallHint) { 223 t9 = !isDisabled && <>{!isHomespace && <Box flexDirection="column"><Text>Status:{" "}{isConnected ? <Text color="success">Enabled</Text> : <Text color="inactive">Disabled</Text>}</Text><Text>Extension:{" "}{isExtensionInstalled ? <Text color="success">Installed</Text> : <Text color="warning">Not detected</Text>}</Text></Box>}<Select key={selectKey} options={options} onChange={handleAction} hideIndexes={true} />{showInstallHint && <Text color="warning">Once installed, select {"\"Reconnect extension\""} to connect.</Text>}<Text><Text dimColor={true}>Usage: </Text><Text>claude --chrome</Text><Text dimColor={true}> or </Text><Text>claude --no-chrome</Text></Text><Text dimColor={true}>Site-level permissions are inherited from the Chrome extension. Manage permissions in the Chrome extension settings to control which sites Claude can browse, click, and type on.</Text></>; 224 $[25] = handleAction; 225 $[26] = isConnected; 226 $[27] = isDisabled; 227 $[28] = isExtensionInstalled; 228 $[29] = options; 229 $[30] = selectKey; 230 $[31] = showInstallHint; 231 $[32] = t9; 232 } else { 233 t9 = $[32]; 234 } 235 let t10; 236 if ($[33] === Symbol.for("react.memo_cache_sentinel")) { 237 t10 = <Text dimColor={true}>Learn more: https://code.claude.com/docs/en/chrome</Text>; 238 $[33] = t10; 239 } else { 240 t10 = $[33]; 241 } 242 let t11; 243 if ($[34] !== t7 || $[35] !== t8 || $[36] !== t9) { 244 t11 = <Box flexDirection="column" gap={1}>{t6}{t7}{t8}{t9}{t10}</Box>; 245 $[34] = t7; 246 $[35] = t8; 247 $[36] = t9; 248 $[37] = t11; 249 } else { 250 t11 = $[37]; 251 } 252 let t12; 253 if ($[38] !== t11 || $[39] !== t5) { 254 t12 = <Dialog title="Claude in Chrome (Beta)" onCancel={t5} color="chromeYellow">{t11}</Dialog>; 255 $[38] = t11; 256 $[39] = t5; 257 $[40] = t12; 258 } else { 259 t12 = $[40]; 260 } 261 return t12; 262} 263function _temp5(k) { 264 return k + 1; 265} 266function _temp4(k_0) { 267 return k_0 + 1; 268} 269function _temp3(k_1) { 270 return k_1 + 1; 271} 272function _temp2(c) { 273 return c.name === CLAUDE_IN_CHROME_MCP_SERVER_NAME; 274} 275function _temp(s) { 276 return s.mcp.clients; 277} 278export const call = async function (onDone: (result?: string) => void): Promise<React.ReactNode> { 279 const isExtensionInstalled = await isChromeExtensionInstalled(); 280 const config = getGlobalConfig(); 281 const isSubscriber = isClaudeAISubscriber(); 282 const isWSL = env.isWslEnvironment(); 283 return <ClaudeInChromeMenu onDone={onDone} isExtensionInstalled={isExtensionInstalled} configEnabled={config.claudeInChromeDefaultEnabled} isClaudeAISubscriber={isSubscriber} isWSL={isWSL} />; 284}; 285//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwiT3B0aW9uV2l0aERlc2NyaXB0aW9uIiwiU2VsZWN0IiwiRGlhbG9nIiwiQm94IiwiVGV4dCIsInVzZUFwcFN0YXRlIiwiaXNDbGF1ZGVBSVN1YnNjcmliZXIiLCJvcGVuQnJvd3NlciIsIkNMQVVERV9JTl9DSFJPTUVfTUNQX1NFUlZFUl9OQU1FIiwib3BlbkluQ2hyb21lIiwiaXNDaHJvbWVFeHRlbnNpb25JbnN0YWxsZWQiLCJnZXRHbG9iYWxDb25maWciLCJzYXZlR2xvYmFsQ29uZmlnIiwiZW52IiwiaXNSdW5uaW5nT25Ib21lc3BhY2UiLCJDSFJPTUVfRVhURU5TSU9OX1VSTCIsIkNIUk9NRV9QRVJNSVNTSU9OU19VUkwiLCJDSFJPTUVfUkVDT05ORUNUX1VSTCIsIk1lbnVBY3Rpb24iLCJQcm9wcyIsIm9uRG9uZSIsInJlc3VsdCIsImlzRXh0ZW5zaW9uSW5zdGFsbGVkIiwiY29uZmlnRW5hYmxlZCIsImlzV1NMIiwiQ2xhdWRlSW5DaHJvbWVNZW51IiwidDAiLCIkIiwiX2MiLCJpbnN0YWxsZWQiLCJtY3BDbGllbnRzIiwiX3RlbXAiLCJzZWxlY3RLZXkiLCJzZXRTZWxlY3RLZXkiLCJlbmFibGVkQnlEZWZhdWx0Iiwic2V0RW5hYmxlZEJ5RGVmYXVsdCIsInNob3dJbnN0YWxsSGludCIsInNldFNob3dJbnN0YWxsSGludCIsInNldElzRXh0ZW5zaW9uSW5zdGFsbGVkIiwidDEiLCJTeW1ib2wiLCJmb3IiLCJpc0hvbWVzcGFjZSIsInQyIiwiZmluZCIsIl90ZW1wMiIsImNocm9tZUNsaWVudCIsImlzQ29ubmVjdGVkIiwidHlwZSIsInQzIiwib3BlblVybCIsInVybCIsInQ0IiwiaGFuZGxlQWN0aW9uIiwiYWN0aW9uIiwiYmIyMiIsIl90ZW1wMyIsIl90ZW1wNCIsInRoZW4iLCJpbnN0YWxsZWRfMCIsIl90ZW1wNSIsIm5ld1ZhbHVlIiwiY3VycmVudCIsImNsYXVkZUluQ2hyb21lRGVmYXVsdEVuYWJsZWQiLCJvcHRpb25zIiwicmVxdWlyZXNFeHRlbnNpb25TdWZmaXgiLCJ0NSIsImxhYmVsIiwidmFsdWUiLCJwdXNoIiwidDYiLCJ0NyIsInQ4IiwidDkiLCJ0MTAiLCJpc0Rpc2FibGVkIiwidDExIiwidDEyIiwiayIsImtfMCIsImtfMSIsImMiLCJuYW1lIiwicyIsIm1jcCIsImNsaWVudHMiLCJjYWxsIiwiUHJvbWlzZSIsIlJlYWN0Tm9kZSIsImNvbmZpZyIsImlzU3Vic2NyaWJlciIsImlzV3NsRW52aXJvbm1lbnQiXSwic291cmNlcyI6WyJjaHJvbWUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHtcbiAgdHlwZSBPcHRpb25XaXRoRGVzY3JpcHRpb24sXG4gIFNlbGVjdCxcbn0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9DdXN0b21TZWxlY3Qvc2VsZWN0LmpzJ1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9kZXNpZ24tc3lzdGVtL0RpYWxvZy5qcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJy4uLy4uL2luay5qcydcbmltcG9ydCB7IHVzZUFwcFN0YXRlIH0gZnJvbSAnLi4vLi4vc3RhdGUvQXBwU3RhdGUuanMnXG5pbXBvcnQgeyBpc0NsYXVkZUFJU3Vic2NyaWJlciB9IGZyb20gJy4uLy4uL3V0aWxzL2F1dGguanMnXG5pbXBvcnQgeyBvcGVuQnJvd3NlciB9IGZyb20gJy4uLy4uL3V0aWxzL2Jyb3dzZXIuanMnXG5pbXBvcnQge1xuICBDTEFVREVfSU5fQ0hST01FX01DUF9TRVJWRVJfTkFNRSxcbiAgb3BlbkluQ2hyb21lLFxufSBmcm9tICcuLi8uLi91dGlscy9jbGF1ZGVJbkNocm9tZS9jb21tb24uanMnXG5pbXBvcnQgeyBpc0Nocm9tZUV4dGVuc2lvbkluc3RhbGxlZCB9IGZyb20gJy4uLy4uL3V0aWxzL2NsYXVkZUluQ2hyb21lL3NldHVwLmpzJ1xuaW1wb3J0IHsgZ2V0R2xvYmFsQ29uZmlnLCBzYXZlR2xvYmFsQ29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29uZmlnLmpzJ1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW52LmpzJ1xuaW1wb3J0IHsgaXNSdW5uaW5nT25Ib21lc3BhY2UgfSBmcm9tICcuLi8uLi91dGlscy9lbnZVdGlscy5qcydcblxuY29uc3QgQ0hST01FX0VYVEVOU0lPTl9VUkwgPSAnaHR0cHM6Ly9jbGF1ZGUuYWkvY2hyb21lJ1xuY29uc3QgQ0hST01FX1BFUk1JU1NJT05TX1VSTCA9ICdodHRwczovL2NsYXUuZGUvY2hyb21lL3Blcm1pc3Npb25zJ1xuY29uc3QgQ0hST01FX1JFQ09OTkVDVF9VUkwgPSAnaHR0cHM6Ly9jbGF1LmRlL2Nocm9tZS9yZWNvbm5lY3QnXG5cbnR5cGUgTWVudUFjdGlvbiA9XG4gIHwgJ2luc3RhbGwtZXh0ZW5zaW9uJ1xuICB8ICdyZWNvbm5lY3QnXG4gIHwgJ21hbmFnZS1wZXJtaXNzaW9ucydcbiAgfCAndG9nZ2xlLWRlZmF1bHQnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9uRG9uZTogKHJlc3VsdD86IHN0cmluZykgPT4gdm9pZFxuICBpc0V4dGVuc2lvbkluc3RhbGxlZDogYm9vbGVhblxuICBjb25maWdFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIGlzQ2xhdWRlQUlTdWJzY3JpYmVyOiBib29sZWFuXG4gIGlzV1NMOiBib29sZWFuXG59XG5cbmZ1bmN0aW9uIENsYXVkZUluQ2hyb21lTWVudSh7XG4gIG9uRG9uZSxcbiAgaXNFeHRlbnNpb25JbnN0YWxsZWQ6IGluc3RhbGxlZCxcbiAgY29uZmlnRW5hYmxlZCxcbiAgaXNDbGF1ZGVBSVN1YnNjcmliZXIsXG4gIGlzV1NMLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBtY3BDbGllbnRzID0gdXNlQXBwU3RhdGUocyA9PiBzLm1jcC5jbGllbnRzKVxuICBjb25zdCBbc2VsZWN0S2V5LCBzZXRTZWxlY3RLZXldID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW2VuYWJsZWRCeURlZmF1bHQsIHNldEVuYWJsZWRCeURlZmF1bHRdID0gdXNlU3RhdGUoXG4gICAgY29uZmlnRW5hYmxlZCA/PyBmYWxzZSxcbiAgKVxuICBjb25zdCBbc2hvd0luc3RhbGxIaW50LCBzZXRTaG93SW5zdGFsbEhpbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc0V4dGVuc2lvbkluc3RhbGxlZCwgc2V0SXNFeHRlbnNpb25JbnN0YWxsZWRdID0gdXNlU3RhdGUoaW5zdGFsbGVkKVxuXG4gIGNvbnN0IGlzSG9tZXNwYWNlID0gXCJleHRlcm5hbFwiID09PSAnYW50JyAmJiBpc1J1bm5pbmdPbkhvbWVzcGFjZSgpXG5cbiAgY29uc3QgY2hyb21lQ2xpZW50ID0gbWNwQ2xpZW50cy5maW5kKFxuICAgIGMgPT4gYy5uYW1lID09PSBDTEFVREVfSU5fQ0hST01FX01DUF9TRVJWRVJfTkFNRSxcbiAgKVxuICBjb25zdCBpc0Nvbm5lY3RlZCA9IGNocm9tZUNsaWVudD8udHlwZSA9PT0gJ2Nvbm5lY3RlZCdcblxuICBmdW5jdGlvbiBvcGVuVXJsKHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGlzSG9tZXNwYWNlKSB7XG4gICAgICB2b2lkIG9wZW5Ccm93c2VyKHVybClcbiAgICB9IGVsc2Uge1xuICAgICAgdm9pZCBvcGVuSW5DaHJvbWUodXJsKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUFjdGlvbihhY3Rpb246IE1lbnVBY3Rpb24pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSAnaW5zdGFsbC1leHRlbnNpb24nOlxuICAgICAgICBzZXRTZWxlY3RLZXkoayA9PiBrICsgMSlcbiAgICAgICAgc2V0U2hvd0luc3RhbGxIaW50KHRydWUpXG4gICAgICAgIG9wZW5VcmwoQ0hST01FX0VYVEVOU0lPTl9VUkwpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdyZWNvbm5lY3QnOlxuICAgICAgICBzZXRTZWxlY3RLZXkoayA9PiBrICsgMSlcbiAgICAgICAgdm9pZCBpc0Nocm9tZUV4dGVuc2lvbkluc3RhbGxlZCgpLnRoZW4oaW5zdGFsbGVkID0+IHtcbiAgICAgICAgICBzZXRJc0V4dGVuc2lvbkluc3RhbGxlZChpbnN0YWxsZWQpXG4gICAgICAgICAgaWYgKGluc3RhbGxlZCkge1xuICAgICAgICAgICAgc2V0U2hvd0luc3RhbGxIaW50KGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgb3BlblVybChDSFJPTUVfUkVDT05ORUNUX1VSTClcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ21hbmFnZS1wZXJtaXNzaW9ucyc6XG4gICAgICAgIHNldFNlbGVjdEtleShrID0+IGsgKyAxKVxuICAgICAgICBvcGVuVXJsKENIUk9NRV9QRVJNSVNTSU9OU19VUkwpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd0b2dnbGUtZGVmYXVsdCc6IHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSAhZW5hYmxlZEJ5RGVmYXVsdFxuICAgICAgICBzYXZlR2xvYmFsQ29uZmlnKGN1cnJlbnQgPT4gKHtcbiAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgIGNsYXVkZUluQ2hyb21lRGVmYXVsdEVuYWJsZWQ6IG5ld1ZhbHVlLFxuICAgICAgICB9KSlcbiAgICAgICAgc2V0RW5hYmxlZEJ5RGVmYXVsdChuZXdWYWx1ZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBvcHRpb25zOiBPcHRpb25XaXRoRGVzY3JpcHRpb248TWVudUFjdGlvbj5bXSA9IFtdXG4gIGNvbnN0IHJlcXVpcmVzRXh0ZW5zaW9uU3VmZml4ID0gaXNFeHRlbnNpb25JbnN0YWxsZWRcbiAgICA/ICcnXG4gICAgOiAnIChyZXF1aXJlcyBleHRlbnNpb24pJ1xuXG4gIGlmICghaXNFeHRlbnNpb25JbnN0YWxsZWQgJiYgIWlzSG9tZXNwYWNlKSB7XG4gICAgb3B0aW9ucy5wdXNoKHtcbiAgICAgIGxhYmVsOiAnSW5zdGFsbCBDaHJvbWUgZXh0ZW5zaW9uJyxcbiAgICAgIHZhbHVlOiAnaW5zdGFsbC1leHRlbnNpb24nLFxuICAgIH0pXG4gIH1cblxuICBvcHRpb25zLnB1c2goXG4gICAge1xuICAgICAgbGFiZWw6IChcbiAgICAgICAgPD5cbiAgICAgICAgICA8VGV4dD5NYW5hZ2UgcGVybWlzc2lvbnM8L1RleHQ+XG4gICAgICAgICAgPFRleHQgZGltQ29sb3I+e3JlcXVpcmVzRXh0ZW5zaW9uU3VmZml4fTwvVGV4dD5cbiAgICAgICAgPC8+XG4gICAgICApLFxuICAgICAgdmFsdWU6ICdtYW5hZ2UtcGVybWlzc2lvbnMnLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IChcbiAgICAgICAgPD5cbiAgICAgICAgICA8VGV4dD5SZWNvbm5lY3QgZXh0ZW5zaW9uPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPntyZXF1aXJlc0V4dGVuc2lvblN1ZmZpeH08L1RleHQ+XG4gICAgICAgIDwvPlxuICAgICAgKSxcbiAgICAgIHZhbHVlOiAncmVjb25uZWN0JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiBgRW5hYmxlZCBieSBkZWZhdWx0OiAke2VuYWJsZWRCeURlZmF1bHQgPyAnWWVzJyA6ICdObyd9YCxcbiAgICAgIHZhbHVlOiAndG9nZ2xlLWRlZmF1bHQnLFxuICAgIH0sXG4gIClcblxuICBjb25zdCBpc0Rpc2FibGVkID1cbiAgICBpc1dTTCB8fCAoXCJleHRlcm5hbFwiICE9PSAnYW50JyAmJiAhaXNDbGF1ZGVBSVN1YnNjcmliZXIpXG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nXG4gICAgICB0aXRsZT1cIkNsYXVkZSBpbiBDaHJvbWUgKEJldGEpXCJcbiAgICAgIG9uQ2FuY2VsPXsoKSA9PiBvbkRvbmUoKX1cbiAgICAgIGNvbG9yPVwiY2hyb21lWWVsbG93XCJcbiAgICA+XG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBnYXA9ezF9PlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICBDbGF1ZGUgaW4gQ2hyb21lIHdvcmtzIHdpdGggdGhlIENocm9tZSBleHRlbnNpb24gdG8gbGV0IHlvdSBjb250cm9sXG4gICAgICAgICAgeW91ciBicm93c2VyIGRpcmVjdGx5IGZyb20gQ2xhdWRlIENvZGUuIE5hdmlnYXRlIHdlYnNpdGVzLCBmaWxsIGZvcm1zLFxuICAgICAgICAgIGNhcHR1cmUgc2NyZWVuc2hvdHMsIHJlY29yZCBHSUZzLCBhbmQgZGVidWcgd2l0aCBjb25zb2xlIGxvZ3MgYW5kXG4gICAgICAgICAgbmV0d29yayByZXF1ZXN0cy5cbiAgICAgICAgPC9UZXh0PlxuXG4gICAgICAgIHtpc1dTTCAmJiAoXG4gICAgICAgICAgPFRleHQgY29sb3I9XCJlcnJvclwiPlxuICAgICAgICAgICAgQ2xhdWRlIGluIENocm9tZSBpcyBub3Qgc3VwcG9ydGVkIGluIFdTTCBhdCB0aGlzIHRpbWUuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICApfVxuXG5cbiAgICAgICAge1wiZXh0ZXJuYWxcIiAhPT0gJ2FudCcgJiYgIWlzQ2xhdWRlQUlTdWJzY3JpYmVyICYmIChcbiAgICAgICAgICA8VGV4dCBjb2xvcj1cImVycm9yXCI+XG4gICAgICAgICAgICBDbGF1ZGUgaW4gQ2hyb21lIHJlcXVpcmVzIGEgY2xhdWRlLmFpIHN1YnNjcmlwdGlvbi5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICl9XG5cbiAgICAgICAgeyFpc0Rpc2FibGVkICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgeyFpc0hvbWVzcGFjZSAmJiAoXG4gICAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgU3RhdHVzOnsnICd9XG4gICAgICAgICAgICAgICAgICB7aXNDb25uZWN0ZWQgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwic3VjY2Vzc1wiPkVuYWJsZWQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImluYWN0aXZlXCI+RGlzYWJsZWQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbjp7JyAnfVxuICAgICAgICAgICAgICAgICAge2lzRXh0ZW5zaW9uSW5zdGFsbGVkID8gKFxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInN1Y2Nlc3NcIj5JbnN0YWxsZWQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cIndhcm5pbmdcIj5Ob3QgZGV0ZWN0ZWQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICBrZXk9e3NlbGVjdEtleX1cbiAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUFjdGlvbn1cbiAgICAgICAgICAgICAgaGlkZUluZGV4ZXNcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIHtzaG93SW5zdGFsbEhpbnQgJiYgKFxuICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cIndhcm5pbmdcIj5cbiAgICAgICAgICAgICAgICBPbmNlIGluc3RhbGxlZCwgc2VsZWN0IHsnXCJSZWNvbm5lY3QgZXh0ZW5zaW9uXCInfSB0byBjb25uZWN0LlxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+VXNhZ2U6IDwvVGV4dD5cbiAgICAgICAgICAgICAgPFRleHQ+Y2xhdWRlIC0tY2hyb21lPC9UZXh0PlxuICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj4gb3IgPC9UZXh0PlxuICAgICAgICAgICAgICA8VGV4dD5jbGF1ZGUgLS1uby1jaHJvbWU8L1RleHQ+XG4gICAgICAgICAgICA8L1RleHQ+XG5cbiAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgICBTaXRlLWxldmVsIHBlcm1pc3Npb25zIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUgQ2hyb21lIGV4dGVuc2lvbi5cbiAgICAgICAgICAgICAgTWFuYWdlIHBlcm1pc3Npb25zIGluIHRoZSBDaHJvbWUgZXh0ZW5zaW9uIHNldHRpbmdzIHRvIGNvbnRyb2xcbiAgICAgICAgICAgICAgd2hpY2ggc2l0ZXMgQ2xhdWRlIGNhbiBicm93c2UsIGNsaWNrLCBhbmQgdHlwZSBvbi5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAgPFRleHQgZGltQ29sb3I+TGVhcm4gbW9yZTogaHR0cHM6Ly9jb2RlLmNsYXVkZS5jb20vZG9jcy9lbi9jaHJvbWU8L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICA8L0RpYWxvZz5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgY2FsbCA9IGFzeW5jIGZ1bmN0aW9uIChcbiAgb25Eb25lOiAocmVzdWx0Pzogc3RyaW5nKSA9PiB2b2lkLFxuKTogUHJvbWlzZTxSZWFjdC5SZWFjdE5vZGU+IHtcbiAgY29uc3QgaXNFeHRlbnNpb25JbnN0YWxsZWQgPSBhd2FpdCBpc0Nocm9tZUV4dGVuc2lvbkluc3RhbGxlZCgpXG4gIGNvbnN0IGNvbmZpZyA9IGdldEdsb2JhbENvbmZpZygpXG4gIGNvbnN0IGlzU3Vic2NyaWJlciA9IGlzQ2xhdWRlQUlTdWJzY3JpYmVyKClcbiAgY29uc3QgaXNXU0wgPSBlbnYuaXNXc2xFbnZpcm9ubWVudCgpXG5cbiAgcmV0dXJuIChcbiAgICA8Q2xhdWRlSW5DaHJvbWVNZW51XG4gICAgICBvbkRvbmU9e29uRG9uZX1cbiAgICAgIGlzRXh0ZW5zaW9uSW5zdGFsbGVkPXtpc0V4dGVuc2lvbkluc3RhbGxlZH1cbiAgICAgIGNvbmZpZ0VuYWJsZWQ9e2NvbmZpZy5jbGF1ZGVJbkNocm9tZURlZmF1bHRFbmFibGVkfVxuICAgICAgaXNDbGF1ZGVBSVN1YnNjcmliZXI9e2lzU3Vic2NyaWJlcn1cbiAgICAgIGlzV1NMPXtpc1dTTH1cbiAgICAvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxLQUFLLElBQUlDLFFBQVEsUUFBUSxPQUFPO0FBQ3ZDLFNBQ0UsS0FBS0MscUJBQXFCLEVBQzFCQyxNQUFNLFFBQ0QseUNBQXlDO0FBQ2hELFNBQVNDLE1BQU0sUUFBUSwwQ0FBMEM7QUFDakUsU0FBU0MsR0FBRyxFQUFFQyxJQUFJLFFBQVEsY0FBYztBQUN4QyxTQUFTQyxXQUFXLFFBQVEseUJBQXlCO0FBQ3JELFNBQVNDLG9CQUFvQixRQUFRLHFCQUFxQjtBQUMxRCxTQUFTQyxXQUFXLFFBQVEsd0JBQXdCO0FBQ3BELFNBQ0VDLGdDQUFnQyxFQUNoQ0MsWUFBWSxRQUNQLHNDQUFzQztBQUM3QyxTQUFTQywwQkFBMEIsUUFBUSxxQ0FBcUM7QUFDaEYsU0FBU0MsZUFBZSxFQUFFQyxnQkFBZ0IsUUFBUSx1QkFBdUI7QUFDekUsU0FBU0MsR0FBRyxRQUFRLG9CQUFvQjtBQUN4QyxTQUFTQyxvQkFBb0IsUUFBUSx5QkFBeUI7QUFFOUQsTUFBTUMsb0JBQW9CLEdBQUcsMEJBQTBCO0FBQ3ZELE1BQU1DLHNCQUFzQixHQUFHLG9DQUFvQztBQUNuRSxNQUFNQyxvQkFBb0IsR0FBRyxrQ0FBa0M7QUFFL0QsS0FBS0MsVUFBVSxHQUNYLG1CQUFtQixHQUNuQixXQUFXLEdBQ1gsb0JBQW9CLEdBQ3BCLGdCQUFnQjtBQUVwQixLQUFLQyxLQUFLLEdBQUc7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