Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
22 kB · 180 lines
TSX
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180import { c as _c } from "react/compiler-runtime";import * as React from 'react';import { useCallback } from 'react';import { Select } from '../../../components/CustomSelect/select.js';import { Box, Text } from '../../../ink.js';import type { ToolPermissionContext } from '../../../Tool.js';import type { PermissionBehavior, PermissionRule, PermissionRuleValue } from '../../../utils/permissions/PermissionRule.js';import { applyPermissionUpdate, persistPermissionUpdate } from '../../../utils/permissions/PermissionUpdate.js';import { permissionRuleValueToString } from '../../../utils/permissions/permissionRuleParser.js';import { detectUnreachableRules, type UnreachableRule } from '../../../utils/permissions/shadowedRuleDetection.js';import { SandboxManager } from '../../../utils/sandbox/sandbox-adapter.js';import { type EditableSettingSource, SOURCES } from '../../../utils/settings/constants.js';import { getRelativeSettingsFilePathForSource } from '../../../utils/settings/settings.js';import { plural } from '../../../utils/stringUtils.js';import type { OptionWithDescription } from '../../CustomSelect/select.js';import { Dialog } from '../../design-system/Dialog.js';import { PermissionRuleDescription } from './PermissionRuleDescription.js';export function optionForPermissionSaveDestination(saveDestination: EditableSettingSource): OptionWithDescription { switch (saveDestination) { case 'localSettings': return { label: 'Project settings (local)', description: `Saved in ${getRelativeSettingsFilePathForSource('localSettings')}`, value: saveDestination }; case 'projectSettings': return { label: 'Project settings', description: `Checked in at ${getRelativeSettingsFilePathForSource('projectSettings')}`, value: saveDestination }; case 'userSettings': return { label: 'User settings', description: `Saved in at ~/.claude/settings.json`, value: saveDestination }; }}type Props = { onAddRules: (rules: PermissionRule[], unreachable?: UnreachableRule[]) => void; onCancel: () => void; ruleValues: PermissionRuleValue[]; ruleBehavior: PermissionBehavior; initialContext: ToolPermissionContext; setToolPermissionContext: (newContext: ToolPermissionContext) => void;};export function AddPermissionRules(t0) { const $ = _c(26); const { onAddRules, onCancel, ruleValues, ruleBehavior, initialContext, setToolPermissionContext } = t0; let t1; if ($[0] === Symbol.for("react.memo_cache_sentinel")) { t1 = SOURCES.map(optionForPermissionSaveDestination); $[0] = t1; } else { t1 = $[0]; } const allOptions = t1; let t2; if ($[1] !== initialContext || $[2] !== onAddRules || $[3] !== onCancel || $[4] !== ruleBehavior || $[5] !== ruleValues || $[6] !== setToolPermissionContext) { t2 = selectedValue => { if (selectedValue === "cancel") { onCancel(); return; } else { if ((SOURCES as readonly string[]).includes(selectedValue)) { const destination = selectedValue as EditableSettingSource; const updatedContext = applyPermissionUpdate(initialContext, { type: "addRules", rules: ruleValues, behavior: ruleBehavior, destination }); persistPermissionUpdate({ type: "addRules", rules: ruleValues, behavior: ruleBehavior, destination }); setToolPermissionContext(updatedContext); const rules = ruleValues.map(ruleValue => ({ ruleValue, ruleBehavior, source: destination })); const sandboxAutoAllowEnabled = SandboxManager.isSandboxingEnabled() && SandboxManager.isAutoAllowBashIfSandboxedEnabled(); const allUnreachable = detectUnreachableRules(updatedContext, { sandboxAutoAllowEnabled }); const newUnreachable = allUnreachable.filter(u => ruleValues.some(rv => rv.toolName === u.rule.ruleValue.toolName && rv.ruleContent === u.rule.ruleValue.ruleContent)); onAddRules(rules, newUnreachable.length > 0 ? newUnreachable : undefined); } } }; $[1] = initialContext; $[2] = onAddRules; $[3] = onCancel; $[4] = ruleBehavior; $[5] = ruleValues; $[6] = setToolPermissionContext; $[7] = t2; } else { t2 = $[7]; } const onSelect = t2; let t3; if ($[8] !== ruleValues.length) { t3 = plural(ruleValues.length, "rule"); $[8] = ruleValues.length; $[9] = t3; } else { t3 = $[9]; } const title = `Add ${ruleBehavior} permission ${t3}`; let t4; if ($[10] !== ruleValues) { t4 = ruleValues.map(_temp); $[10] = ruleValues; $[11] = t4; } else { t4 = $[11]; } let t5; if ($[12] !== t4) { t5 = <Box flexDirection="column" paddingX={2}>{t4}</Box>; $[12] = t4; $[13] = t5; } else { t5 = $[13]; } const t6 = ruleValues.length === 1 ? "Where should this rule be saved?" : "Where should these rules be saved?"; let t7; if ($[14] !== t6) { t7 = <Text>{t6}</Text>; $[14] = t6; $[15] = t7; } else { t7 = $[15]; } let t8; if ($[16] !== onSelect) { t8 = <Select options={allOptions} onChange={onSelect} />; $[16] = onSelect; $[17] = t8; } else { t8 = $[17]; } let t9; if ($[18] !== t7 || $[19] !== t8) { t9 = <Box flexDirection="column" marginY={1}>{t7}{t8}</Box>; $[18] = t7; $[19] = t8; $[20] = t9; } else { t9 = $[20]; } let t10; if ($[21] !== onCancel || $[22] !== t5 || $[23] !== t9 || $[24] !== title) { t10 = <Dialog title={title} onCancel={onCancel} color="permission">{t5}{t9}</Dialog>; $[21] = onCancel; $[22] = t5; $[23] = t9; $[24] = title; $[25] = t10; } else { t10 = $[25]; } return t10;}function _temp(ruleValue_0) { return <Box flexDirection="column" key={permissionRuleValueToString(ruleValue_0)}><Text bold={true}>{permissionRuleValueToString(ruleValue_0)}</Text><PermissionRuleDescription ruleValue={ruleValue_0} /></Box>;}//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwiU2VsZWN0IiwiQm94IiwiVGV4dCIsIlRvb2xQZXJtaXNzaW9uQ29udGV4dCIsIlBlcm1pc3Npb25CZWhhdmlvciIsIlBlcm1pc3Npb25SdWxlIiwiUGVybWlzc2lvblJ1bGVWYWx1ZSIsImFwcGx5UGVybWlzc2lvblVwZGF0ZSIsInBlcnNpc3RQZXJtaXNzaW9uVXBkYXRlIiwicGVybWlzc2lvblJ1bGVWYWx1ZVRvU3RyaW5nIiwiZGV0ZWN0VW5yZWFjaGFibGVSdWxlcyIsIlVucmVhY2hhYmxlUnVsZSIsIlNhbmRib3hNYW5hZ2VyIiwiRWRpdGFibGVTZXR0aW5nU291cmNlIiwiU09VUkNFUyIsImdldFJlbGF0aXZlU2V0dGluZ3NGaWxlUGF0aEZvclNvdXJjZSIsInBsdXJhbCIsIk9wdGlvbldpdGhEZXNjcmlwdGlvbiIsIkRpYWxvZyIsIlBlcm1pc3Npb25SdWxlRGVzY3JpcHRpb24iLCJvcHRpb25Gb3JQZXJtaXNzaW9uU2F2ZURlc3RpbmF0aW9uIiwic2F2ZURlc3RpbmF0aW9uIiwibGFiZWwiLCJkZXNjcmlwdGlvbiIsInZhbHVlIiwiUHJvcHMiLCJvbkFkZFJ1bGVzIiwicnVsZXMiLCJ1bnJlYWNoYWJsZSIsIm9uQ2FuY2VsIiwicnVsZVZhbHVlcyIsInJ1bGVCZWhhdmlvciIsImluaXRpYWxDb250ZXh0Iiwic2V0VG9vbFBlcm1pc3Npb25Db250ZXh0IiwibmV3Q29udGV4dCIsIkFkZFBlcm1pc3Npb25SdWxlcyIsInQwIiwiJCIsIl9jIiwidDEiLCJTeW1ib2wiLCJmb3IiLCJtYXAiLCJhbGxPcHRpb25zIiwidDIiLCJzZWxlY3RlZFZhbHVlIiwiaW5jbHVkZXMiLCJkZXN0aW5hdGlvbiIsInVwZGF0ZWRDb250ZXh0IiwidHlwZSIsImJlaGF2aW9yIiwicnVsZVZhbHVlIiwic291cmNlIiwic2FuZGJveEF1dG9BbGxvd0VuYWJsZWQiLCJpc1NhbmRib3hpbmdFbmFibGVkIiwiaXNBdXRvQWxsb3dCYXNoSWZTYW5kYm94ZWRFbmFibGVkIiwiYWxsVW5yZWFjaGFibGUiLCJuZXdVbnJlYWNoYWJsZSIsImZpbHRlciIsInUiLCJzb21lIiwicnYiLCJ0b29sTmFtZSIsInJ1bGUiLCJydWxlQ29udGVudCIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm9uU2VsZWN0IiwidDMiLCJ0aXRsZSIsInQ0IiwiX3RlbXAiLCJ0NSIsInQ2IiwidDciLCJ0OCIsInQ5IiwidDEwIiwicnVsZVZhbHVlXzAiXSwic291cmNlcyI6WyJBZGRQZXJtaXNzaW9uUnVsZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvQ3VzdG9tU2VsZWN0L3NlbGVjdC5qcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJy4uLy4uLy4uL2luay5qcydcbmltcG9ydCB0eXBlIHsgVG9vbFBlcm1pc3Npb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vVG9vbC5qcydcbmltcG9ydCB0eXBlIHtcbiAgUGVybWlzc2lvbkJlaGF2aW9yLFxuICBQZXJtaXNzaW9uUnVsZSxcbiAgUGVybWlzc2lvblJ1bGVWYWx1ZSxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcGVybWlzc2lvbnMvUGVybWlzc2lvblJ1bGUuanMnXG5pbXBvcnQge1xuICBhcHBseVBlcm1pc3Npb25VcGRhdGUsXG4gIHBlcnNpc3RQZXJtaXNzaW9uVXBkYXRlLFxufSBmcm9tICcuLi8uLi8uLi91dGlscy9wZXJtaXNzaW9ucy9QZXJtaXNzaW9uVXBkYXRlLmpzJ1xuaW1wb3J0IHsgcGVybWlzc2lvblJ1bGVWYWx1ZVRvU3RyaW5nIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcGVybWlzc2lvbnMvcGVybWlzc2lvblJ1bGVQYXJzZXIuanMnXG5pbXBvcnQge1xuICBkZXRlY3RVbnJlYWNoYWJsZVJ1bGVzLFxuICB0eXBlIFVucmVhY2hhYmxlUnVsZSxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcGVybWlzc2lvbnMvc2hhZG93ZWRSdWxlRGV0ZWN0aW9uLmpzJ1xuaW1wb3J0IHsgU2FuZGJveE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zYW5kYm94L3NhbmRib3gtYWRhcHRlci5qcydcbmltcG9ydCB7XG4gIHR5cGUgRWRpdGFibGVTZXR0aW5nU291cmNlLFxuICBTT1VSQ0VTLFxufSBmcm9tICcuLi8uLi8uLi91dGlscy9zZXR0aW5ncy9jb25zdGFudHMuanMnXG5pbXBvcnQgeyBnZXRSZWxhdGl2ZVNldHRpbmdzRmlsZVBhdGhGb3JTb3VyY2UgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zZXR0aW5ncy9zZXR0aW5ncy5qcydcbmltcG9ydCB7IHBsdXJhbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N0cmluZ1V0aWxzLmpzJ1xuaW1wb3J0IHR5cGUgeyBPcHRpb25XaXRoRGVzY3JpcHRpb24gfSBmcm9tICcuLi8uLi9DdXN0b21TZWxlY3Qvc2VsZWN0LmpzJ1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSAnLi4vLi4vZGVzaWduLXN5c3RlbS9EaWFsb2cuanMnXG5pbXBvcnQgeyBQZXJtaXNzaW9uUnVsZURlc2NyaXB0aW9uIH0gZnJvbSAnLi9QZXJtaXNzaW9uUnVsZURlc2NyaXB0aW9uLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gb3B0aW9uRm9yUGVybWlzc2lvblNhdmVEZXN0aW5hdGlvbihcbiAgc2F2ZURlc3RpbmF0aW9uOiBFZGl0YWJsZVNldHRpbmdTb3VyY2UsXG4pOiBPcHRpb25XaXRoRGVzY3JpcHRpb24ge1xuICBzd2l0Y2ggKHNhdmVEZXN0aW5hdGlvbikge1xuICAgIGNhc2UgJ2xvY2FsU2V0dGluZ3MnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6ICdQcm9qZWN0IHNldHRpbmdzIChsb2NhbCknLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFNhdmVkIGluICR7Z2V0UmVsYXRpdmVTZXR0aW5nc0ZpbGVQYXRoRm9yU291cmNlKCdsb2NhbFNldHRpbmdzJyl9YCxcbiAgICAgICAgdmFsdWU6IHNhdmVEZXN0aW5hdGlvbixcbiAgICAgIH1cbiAgICBjYXNlICdwcm9qZWN0U2V0dGluZ3MnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6ICdQcm9qZWN0IHNldHRpbmdzJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBDaGVja2VkIGluIGF0ICR7Z2V0UmVsYXRpdmVTZXR0aW5nc0ZpbGVQYXRoRm9yU291cmNlKCdwcm9qZWN0U2V0dGluZ3MnKX1gLFxuICAgICAgICB2YWx1ZTogc2F2ZURlc3RpbmF0aW9uLFxuICAgICAgfVxuICAgIGNhc2UgJ3VzZXJTZXR0aW5ncyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogJ1VzZXIgc2V0dGluZ3MnLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFNhdmVkIGluIGF0IH4vLmNsYXVkZS9zZXR0aW5ncy5qc29uYCxcbiAgICAgICAgdmFsdWU6IHNhdmVEZXN0aW5hdGlvbixcbiAgICAgIH1cbiAgfVxufVxuXG50eXBlIFByb3BzID0ge1xuICBvbkFkZFJ1bGVzOiAocnVsZXM6IFBlcm1pc3Npb25SdWxlW10sIHVucmVhY2hhYmxlPzogVW5yZWFjaGFibGVSdWxlW10pID0+IHZvaWRcbiAgb25DYW5jZWw6ICgpID0+IHZvaWRcbiAgcnVsZVZhbHVlczogUGVybWlzc2lvblJ1bGVWYWx1ZVtdXG4gIHJ1bGVCZWhhdmlvcjogUGVybWlzc2lvbkJlaGF2aW9yXG4gIGluaXRpYWxDb250ZXh0OiBUb29sUGVybWlzc2lvbkNvbnRleHRcbiAgc2V0VG9vbFBlcm1pc3Npb25Db250ZXh0OiAobmV3Q29udGV4dDogVG9vbFBlcm1pc3Npb25Db250ZXh0KSA9PiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBZGRQZXJtaXNzaW9uUnVsZXMoe1xuICBvbkFkZFJ1bGVzLFxuICBvbkNhbmNlbCxcbiAgcnVsZVZhbHVlcyxcbiAgcnVsZUJlaGF2aW9yLFxuICBpbml0aWFsQ29udGV4dCxcbiAgc2V0VG9vbFBlcm1pc3Npb25Db250ZXh0LFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBhbGxPcHRpb25zID0gU09VUkNFUy5tYXAob3B0aW9uRm9yUGVybWlzc2lvblNhdmVEZXN0aW5hdGlvbilcblxuICBjb25zdCBvblNlbGVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChzZWxlY3RlZFZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChzZWxlY3RlZFZhbHVlID09PSAnY2FuY2VsJykge1xuICAgICAgICBvbkNhbmNlbCgpXG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIGlmICgoU09VUkNFUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMoc2VsZWN0ZWRWYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBzZWxlY3RlZFZhbHVlIGFzIEVkaXRhYmxlU2V0dGluZ1NvdXJjZVxuXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDb250ZXh0ID0gYXBwbHlQZXJtaXNzaW9uVXBkYXRlKGluaXRpYWxDb250ZXh0LCB7XG4gICAgICAgICAgdHlwZTogJ2FkZFJ1bGVzJyxcbiAgICAgICAgICBydWxlczogcnVsZVZhbHVlcyxcbiAgICAgICAgICBiZWhhdmlvcjogcnVsZUJlaGF2aW9yLFxuICAgICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFBlcnNpc3QgdG8gc2V0dGluZ3NcbiAgICAgICAgcGVyc2lzdFBlcm1pc3Npb25VcGRhdGUoe1xuICAgICAgICAgIHR5cGU6ICdhZGRSdWxlcycsXG4gICAgICAgICAgcnVsZXM6IHJ1bGVWYWx1ZXMsXG4gICAgICAgICAgYmVoYXZpb3I6IHJ1bGVCZWhhdmlvcixcbiAgICAgICAgICBkZXN0aW5hdGlvbixcbiAgICAgICAgfSlcblxuICAgICAgICBzZXRUb29sUGVybWlzc2lvbkNvbnRleHQodXBkYXRlZENvbnRleHQpXG5cbiAgICAgICAgY29uc3QgcnVsZXM6IFBlcm1pc3Npb25SdWxlW10gPSBydWxlVmFsdWVzLm1hcChydWxlVmFsdWUgPT4gKHtcbiAgICAgICAgICBydWxlVmFsdWUsXG4gICAgICAgICAgcnVsZUJlaGF2aW9yLFxuICAgICAgICAgIHNvdXJjZTogZGVzdGluYXRpb24sXG4gICAgICAgIH0pKVxuXG4gICAgICAgIC8vIENoZWNrIGZvciB1bnJlYWNoYWJsZSBydWxlcyBhbW9uZyB0aGUgb25lcyB3ZSBqdXN0IGFkZGVkXG4gICAgICAgIGNvbnN0IHNhbmRib3hBdXRvQWxsb3dFbmFibGVkID1cbiAgICAgICAgICBTYW5kYm94TWFuYWdlci5pc1NhbmRib3hpbmdFbmFibGVkKCkgJiZcbiAgICAgICAgICBTYW5kYm94TWFuYWdlci5pc0F1dG9BbGxvd0Jhc2hJZlNhbmRib3hlZEVuYWJsZWQoKVxuICAgICAgICBjb25zdCBhbGxVbnJlYWNoYWJsZSA9IGRldGVjdFVucmVhY2hhYmxlUnVsZXModXBkYXRlZENvbnRleHQsIHtcbiAgICAgICAgICBzYW5kYm94QXV0b0FsbG93RW5hYmxlZCxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBydWxlcyB3ZSBqdXN0IGFkZGVkXG4gICAgICAgIGNvbnN0IG5ld1VucmVhY2hhYmxlID0gYWxsVW5yZWFjaGFibGUuZmlsdGVyKHUgPT5cbiAgICAgICAgICBydWxlVmFsdWVzLnNvbWUoXG4gICAgICAgICAgICBydiA9PlxuICAgICAgICAgICAgICBydi50b29sTmFtZSA9PT0gdS5ydWxlLnJ1bGVWYWx1ZS50b29sTmFtZSAmJlxuICAgICAgICAgICAgICBydi5ydWxlQ29udGVudCA9PT0gdS5ydWxlLnJ1bGVWYWx1ZS5ydWxlQ29udGVudCxcbiAgICAgICAgICApLFxuICAgICAgICApXG5cbiAgICAgICAgb25BZGRSdWxlcyhcbiAgICAgICAgICBydWxlcyxcbiAgICAgICAgICBuZXdVbnJlYWNoYWJsZS5sZW5ndGggPiAwID8gbmV3VW5yZWFjaGFibGUgOiB1bmRlZmluZWQsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIG9uQWRkUnVsZXMsXG4gICAgICBvbkNhbmNlbCxcbiAgICAgIHJ1bGVWYWx1ZXMsXG4gICAgICBydWxlQmVoYXZpb3IsXG4gICAgICBpbml0aWFsQ29udGV4dCxcbiAgICAgIHNldFRvb2xQZXJtaXNzaW9uQ29udGV4dCxcbiAgICBdLFxuICApXG5cbiAgY29uc3QgdGl0bGUgPSBgQWRkICR7cnVsZUJlaGF2aW9yfSBwZXJtaXNzaW9uICR7cGx1cmFsKHJ1bGVWYWx1ZXMubGVuZ3RoLCAncnVsZScpfWBcblxuICByZXR1cm4gKFxuICAgIDxEaWFsb2cgdGl0bGU9e3RpdGxlfSBvbkNhbmNlbD17b25DYW5jZWx9IGNvbG9yPVwicGVybWlzc2lvblwiPlxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgcGFkZGluZ1g9ezJ9PlxuICAgICAgICB7cnVsZVZhbHVlcy5tYXAocnVsZVZhbHVlID0+IChcbiAgICAgICAgICA8Qm94XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgICAgIGtleT17cGVybWlzc2lvblJ1bGVWYWx1ZVRvU3RyaW5nKHJ1bGVWYWx1ZSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHQgYm9sZD57cGVybWlzc2lvblJ1bGVWYWx1ZVRvU3RyaW5nKHJ1bGVWYWx1ZSl9PC9UZXh0PlxuICAgICAgICAgICAgPFBlcm1pc3Npb25SdWxlRGVzY3JpcHRpb24gcnVsZVZhbHVlPXtydWxlVmFsdWV9IC8+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgICkpfVxuICAgICAgPC9Cb3g+XG5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIG1hcmdpblk9ezF9PlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICB7cnVsZVZhbHVlcy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgID8gJ1doZXJlIHNob3VsZCB0aGlzIHJ1bGUgYmUgc2F2ZWQ/J1xuICAgICAgICAgICAgOiAnV2hlcmUgc2hvdWxkIHRoZXNlIHJ1bGVzIGJlIHNhdmVkPyd9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFNlbGVjdCBvcHRpb25zPXthbGxPcHRpb25zfSBvbkNoYW5nZT17b25TZWxlY3R9IC8+XG4gICAgICA8L0JveD5cbiAgICA8L0RpYWxvZz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLQSxLQUFLLE1BQU0sT0FBTztBQUM5QixTQUFTQyxXQUFXLFFBQVEsT0FBTztBQUNuQyxTQUFTQyxNQUFNLFFBQVEsNENBQTRDO0FBQ25FLFNBQVNDLEdBQUcsRUFBRUMsSUFBSSxRQUFRLGlCQUFpQjtBQUMzQyxjQUFjQyxxQkFBcUIsUUFBUSxrQkFBa0I7QUFDN0QsY0FDRUMsa0JBQWtCLEVBQ2xCQyxjQUFjLEVBQ2RDLG1CQUFtQixRQUNkLDhDQUE4QztBQUNyRCxTQUNFQyxxQkFBcUIsRUFDckJDLHVCQUF1QixRQUNsQixnREFBZ0Q7QUFDdkQsU0FBU0MsMkJBQTJCLFFBQVEsb0RBQW9EO0FBQ2hHLFNBQ0VDLHNCQUFzQixFQUN0QixLQUFLQyxlQUFlLFFBQ2YscURBQXFEO0FBQzVELFNBQVNDLGNBQWMsUUFBUSwyQ0FBMkM7QUFDMUUsU0FDRSxLQUFLQyxxQkFBcUIsRUFDMUJDLE9BQU8sUUFDRixzQ0FBc0M7QUFDN0MsU0FBU0Msb0NBQW9DLFFBQVEscUNBQXFDO0FBQzFGLFNBQVNDLE1BQU0sUUFBUSwrQkFBK0I7QUFDdEQsY0FBY0MscUJBQXFCLFFBQVEsOEJBQThCO0FBQ3pFLFNBQVNDLE1BQU0sUUFBUSwrQkFBK0I7QUFDdEQsU0FBU0MseUJBQXlCLFFBQVEsZ0NBQWdDO0FBRTFFLE9BQU8sU0FBU0Msa0NBQWtDQSxDQUNoREMsZUFBZSxFQUFFUixxQkFBcUIsQ0FDdkMsRUFBRUkscUJBQXFCLENBQUM7RUFDdkIsUUFBUUksZUFBZTtJQUNyQixLQUFLLGVBQWU7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