Wherry/Wherry New Design (standalone).html
2026-07-11 00:01:26 +03:00

181 lines
No EOL
73 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Bundled Page</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { background: #faf9f5; display: flex; align-items: center; justify-content: center; min-height: 100vh; font-family: -apple-system, BlinkMacSystemFont, sans-serif; }
#__bundler_loading { position: fixed; bottom: 20px; right: 20px; font: 13px/1.4 -apple-system, BlinkMacSystemFont, sans-serif; color: #666; background: #fff; padding: 8px 14px; border-radius: 8px; box-shadow: 0 1px 4px rgba(0,0,0,0.12); z-index: 10000; }
#__bundler_thumbnail { position: fixed; inset: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: #faf9f5; z-index: 9999; }
#__bundler_thumbnail svg { width: 100%; height: 100%; object-fit: contain; }
#__bundler_placeholder { color: #999; font-size: 14px; }
</style>
<noscript>
<style>#__bundler_loading { display: none; }</style>
<div style="position:fixed;bottom:12px;left:12px;font:13px/1.4 -apple-system,BlinkMacSystemFont,sans-serif;color:#999;background:rgba(255,255,255,0.9);padding:6px 12px;border-radius:6px;box-shadow:0 1px 4px rgba(0,0,0,0.08);z-index:10000;">
This page requires JavaScript to display.
</div>
</noscript>
</head>
<body>
<div id="__bundler_thumbnail">
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<rect width="100" height="100" fill="#0F1115"></rect>
<rect x="8" y="8" width="20" height="84" rx="8" fill="#1E222A"></rect>
<rect x="30" y="8" width="62" height="84" rx="8" fill="#14161B"></rect>
<text x="61" y="55" font-size="14" fill="#c1673c" text-anchor="middle" font-family="sans-serif" font-weight="700">W</text>
</svg>
</div>
<div id="__bundler_loading">Unpacking...</div>
<script>
document.addEventListener('DOMContentLoaded', async function() {
const loading = document.getElementById('__bundler_loading');
function setStatus(msg) { if (loading) loading.textContent = msg; }
// Error sink persists across replaceWith since it's on window, not the DOM.
window.addEventListener('error', function(e) {
var p = document.body || document.documentElement;
var d = document.getElementById('__bundler_err') || p.appendChild(document.createElement('div'));
d.id = '__bundler_err';
d.style.cssText = 'position:fixed;bottom:12px;left:12px;right:12px;font:12px/1.4 ui-monospace,monospace;background:#2a1215;color:#ff8a80;padding:10px 14px;border-radius:8px;border:1px solid #5c2b2e;z-index:99999;white-space:pre-wrap;max-height:40vh;overflow:auto';
d.textContent = (d.textContent ? d.textContent + String.fromCharCode(10) : '') +
'[bundle] ' + (e.message || e.type) +
(e.filename ? ' (' + e.filename.slice(0, 60) + ':' + e.lineno + ')' : '');
}, true);
try {
const manifestEl = document.querySelector('script[type="__bundler/manifest"]');
const templateEl = document.querySelector('script[type="__bundler/template"]');
if (!manifestEl || !templateEl) {
setStatus('Error: missing bundle data');
console.error('[bundler] Missing script tags — manifestEl:', !!manifestEl, 'templateEl:', !!templateEl);
return;
}
const manifest = JSON.parse(manifestEl.textContent);
let template = JSON.parse(templateEl.textContent);
const uuids = Object.keys(manifest);
setStatus('Unpacking ' + uuids.length + ' assets...');
const blobUrls = {};
await Promise.all(uuids.map(async (uuid) => {
const entry = manifest[uuid];
try {
const binaryStr = atob(entry.data);
const bytes = new Uint8Array(binaryStr.length);
for (let i = 0; i < binaryStr.length; i++) bytes[i] = binaryStr.charCodeAt(i);
let finalBytes = bytes;
if (entry.compressed) {
if (typeof DecompressionStream !== 'undefined') {
const ds = new DecompressionStream('gzip');
const writer = ds.writable.getWriter();
const reader = ds.readable.getReader();
writer.write(bytes);
writer.close();
const chunks = [];
let totalLen = 0;
while (true) {
const { done, value } = await reader.read();
if (done) break;
chunks.push(value);
totalLen += value.length;
}
finalBytes = new Uint8Array(totalLen);
let offset = 0;
for (const chunk of chunks) { finalBytes.set(chunk, offset); offset += chunk.length; }
} else {
console.warn('DecompressionStream not available, asset ' + uuid + ' may not render');
}
}
blobUrls[uuid] = URL.createObjectURL(new Blob([finalBytes], { type: entry.mime }));
} catch (err) {
console.error('Failed to decode asset ' + uuid + ':', err);
blobUrls[uuid] = URL.createObjectURL(new Blob([], { type: entry.mime }));
}
}));
const extResEl = document.querySelector('script[type="__bundler/ext_resources"]');
const extResources = extResEl ? JSON.parse(extResEl.textContent) : [];
const resourceMap = {};
for (const entry of extResources) {
if (blobUrls[entry.uuid]) resourceMap[entry.id] = blobUrls[entry.uuid];
}
setStatus('Rendering...');
for (const uuid of uuids) template = template.split(uuid).join(blobUrls[uuid]);
// Strip integrity + crossorigin — blob URLs from a file:// document inherit
// a null origin, so crossorigin forces a CORS fetch that SRI then rejects.
// The manifest bytes are ours; SRI protects against CDN compromise, not this.
template = template.replace(/\s+integrity="[^"]*"/gi, '').replace(/\s+crossorigin="[^"]*"/gi, '');
const resourceScript = '<script>window.__resources = ' +
JSON.stringify(resourceMap).split('</' + 'script>').join('<\\/' + 'script>') +
';</' + 'script>';
// Inject after <head> so the DOCTYPE stays first; prepending the script
// would push the parser into quirks mode. DOMParser always emits a <head>
// (synthesizing one if the source HTML omitted it) but may carry
// attributes through, so match the full opening tag. slice() rather than
// replace() keeps us clear of $-pattern substitution in resourceScript.
const headOpen = template.match(/<head[^>]*>/i);
if (headOpen) {
const i = headOpen.index + headOpen[0].length;
template = template.slice(0, i) + resourceScript + template.slice(i);
}
// Parse the template and swap the root element. Scripts inserted via
// DOMParser/replaceWith are inert per spec — re-create each with
// createElement so they execute, awaiting onload for src scripts to
// preserve ordering (React before ReactDOM before Babel before text/babel).
const doc = new DOMParser().parseFromString(template, 'text/html');
document.documentElement.replaceWith(doc.documentElement);
const dead = Array.from(document.scripts);
for (const old of dead) {
const s = document.createElement('script');
for (const a of old.attributes) s.setAttribute(a.name, a.value);
s.textContent = old.textContent;
// text/babel scripts with a src: fetch and inline. transformScriptTags
// does XHR against the src, but blob:null/ from a file:// origin is
// silently dropped. Inlining makes it a plain inline babel script,
// which transformScriptTags handles unconditionally.
if ((s.type === 'text/babel' || s.type === 'text/jsx') && s.src) {
const r = await fetch(s.src);
s.textContent = await r.text();
s.removeAttribute('src');
}
const p = s.src ? new Promise(function(r) { s.onload = s.onerror = r; }) : null;
old.replaceWith(s);
if (p) await p;
}
// Babel standalone auto-transforms type=text/babel on DOMContentLoaded,
// which fired before we swapped the document. Trigger manually if present.
if (window.Babel && typeof window.Babel.transformScriptTags === 'function') {
window.Babel.transformScriptTags();
}
} catch (err) {
setStatus('Error unpacking: ' + err.message);
console.error('Bundle unpack error:', err);
}
});
</script>
<script type="__bundler/manifest">
{"cc68a18c-d0b6-49de-bda8-404c6afcc954":{"mime":"text/javascript","compressed":true,"data":"H4sIAAAAAAAAE919a3fcNpLo9/wKiOOxSaubevgRp+W2xpZkR4lkeSQ5mVlZI7FJdDclNkkTbD0i9zn7I/YX7i+5pwpvkK1Hkrl7956cyE0QKAKFQqFQLywtkQ9bH7f23x5ubZJhVUxIEneraV6nE7rEqnjpaVgz8t//+V8kKUhe1IQmaR2SfTqYpllCLtN6TE7jxGhFHj8mg2lOqmlOsNJp+J03ZZSwukrj2lv7zvcD0n9Dbr4j5CKqyMlJQoefqqIkfbI3OKNxHSZ0mOYUymhVX6+ZFT8W1STKRHW/GJx1yDm97pCLKJtShHtOr0mak2JwRtY1cKPqDaH5dEKraJDRHqmrKe2QuMiH6WhqlV1WaW0+4yfILCA9AH50Tq+PSZ+X6i6W00GWxu9TmiXzOuiMg9epr0taDLHzC/0+8dj1ZFBkHlnHokXieaRnAlr77jtClpYIzFFFo7gOa/YdIcNpHtdpkZMRrfeh2A8Q0QRGyGqyT/rkMs2T4jLE12v4Lh0Sf2E/IPW4Ki5JTi/JVlUVle/pae1ZzUjKkBqiiyjNAEfkmtZewKFVtJ5WOdmHp1lbnzb3dt1ubTr92tzbNbu2+YC+be7t3qt7m7J/MHFjmCw/DMOoGjGcJY3AMK5oVNOtjE5oXvsIRNT8jpDAmooyqhh1pgLLNuPNIp4igKSI7dEnMemTpIjDr1NaXR/QjMY1jPCqm8Sy14iHJA5k9/Nplq0ZMFhcpWW9lbVD4m+PkqiOuknc5Y/HEjaHcEPKqihZh5QVvUjpJZmRvuh7VEdAqYyPnaiPrYcjWr+t6yodTGvqewgfoXgBWV/HTmITG/U3AkxNJ2UW1bRHkjhM85xWPx7u7nTE2zPW06NaVz/Dml7VG0Ve07wm377xheF5shUfg3rAkeDTrEGOYl4O6VXts8qZk6Kk+W5Ux0AYS69hJvz13hd29K83x0+D9TdLIb2iMTYz5kc1mjtNcVYwSvpAK2EWsXo7T+jV3tD3Xi/BN96Y0y3q9vukuwIj5c+vddfCFFrP/ZZEr/gcy9KY+k5jsqjBHS0fhxnNR/W4w79lkUdSAJXC+tvc2/0EqKv8IEQcvq+KyUFdpfkIENIhHkzR0rieZDaF/W+m0f/LVKlGU0WXkjCRxPBZ9pHD7eEYFE74I4dMSEZrDjLhz3V1rcbGy0mf/HSw95FPJX6P15yRGOlf1n7AR2e6v+Ib377JHU4U4CZX4Hbvwdu3VRVdhynDf31eKQh+/8fFKh6cSQJJTDqS5NOHGuEj+fj4seylVdw3+7puv+s1ll1FWU365EZ0Z1hUxOdvzkkxlCLOOb1msPMbYwR8nR8tH3PcPPICBHV0fsy7eXR+bA7QxYgJF9oFYi2Tdd4jB2ctlJfEH6MJLuZPUT32y6ge59GEyg4iJSE2eTkn8xaqguVN4yKhn/e3N4pJWeSw65WtZGVO1iBC1liGrMzS2veWvCAsi9IP8Ev7RVF71hKF+mFFyyyKqb/0JUziLyEwnUdLHeJ5gfkKitdFuQ1tZmzeg6IQYhSIBO/eHmydbBwckD455Xs+i7sIcVxkCa1uBlF8PqqKaZ704iIrqu4kvfLTnLBqNOjE06qieb0BL8irv3bqKspZGUGZQAQhg6JKaNVbKa8IK7I0IXeAebF8G5xuFSXplPVWy6u1QXHVZelvaT7qiZeD4mqtuKDVMCsue+M0SWjOcf+3c3o9rKIJZYTFXTZOc3qz/FdjcN2yYCkQSG9lefmv0IkZ/GitId5zyIB0wBkw87qi0STNRy4SO7fXTPOaViX8mqSMpfnoRn2qollUpxdUIeHes/HiVixi455R4f6D6fUGdFhU9KGDku1uYr6B9J48kZ1Sw40GrMimNV1Lc0br3vJaWSCcLr2gec16eZG3oSJLcxpV3RHQBqzCH5YTOupUo0Hkr65831lZ+aHz6vvOckBWX/xVFD//vrO6+qKzurLSCX94EZBn3/+1rcHLZ38Nmh8EqqO950AoQCRrUZ5OIhyAJC6yEj5nhMJaT/Nhmqc1fQCG83rcjcdplvj54g/ATp0Kwe+eg1bIjWoK/o0e2RzUP4wnzNpYTJfCUeemjJIEuvi8vCKvyqu1YZHXvZWV8mppJXxOpml3UuQFK6OYdtQv2SFOznf05XuXsVwWVdIdVDQ67+HfLhToLjaXZZKyMouue2kOFNcdZEV8vnaZJvW4t0ona2OajsZ1b4VOXCYk+3lBqzqNo6wbZeko74E41R0UdV1M1gyccjp88aIj/w+fBWsNNoq1ljvwX/jiwVyywQAkgCmjVZehvIpz3oaPaV5RVmQXNLmBWeoOo0maXffmzBFWwRUTvnpBJw+as7mbwb0pcMWFYGPoWXmluJAgwGXyrLzSwx4XrMZ/IyYp1eXOunJWjNLYraa4Wl2UPSDtjA5r/PFbF88nvdWV598/f/Xs5fPv1ybRVZeT1MvleOz27WV5RVaWYVY1Av4yWF5eXl0WU/qX4XAo1s7qvdaOjY/n5dXa5TitaRcr9cqKdi+rqGzjxHzYS0/JbgoDZuTT/vbHwxMQKXa2P3KxIs1JVJZs6ZIOQF4677I6GtEuvSqLCsQQ8mW6urzynJxTWpJBUY9Fr6Ahu85jAsqPzNS8VXQUpTkjEVe8EVbTMiRPl/g+P6FJGpGySvNayWp/K6MRJTdkElWjNO+R5fBFPFkTUhkhqBKjHYJqMHJDOC9Ic5YmtEeiiyJNdOW/QE+Kou6oX+SNIhNyQwQPING0LnSrpx3yVPFs+BkNa1qpDhLeYb4rd6PkbMrqHqFXoLoi3Us6OE/r7vwqCgoQRVIVZXeYZjWtegRmiSykE0B2lBvA7qypYKodoJtQ4H2k+8MPzIJp1JhWfLMg4fLyCrsDXlpTXr0bF9O87pGVOWCHaZZ1JwXMBlDIHWCBQwOVgcalmuY5bIYmXGQGqdPf5bbOzpTwfipVn+8/7+ycfHr7QcrMHuy9nUGRXN9I7g8CgaC05ZkiF/njjaQVs/4MhXR1RIF6eEgpKlOd1iGZ1qnBOQUkeTjEkD68CduOLHg6NU4N64+W0rCmrPZZNKSbeIDxJZzAOKaZZx1ifgl0I5/3d6BDIZxNPu9v4wfxHCN6oBDoHK41QtXxxjmOqa40zm1Gf5nsptlJCa95JmO3H/WZPm9aH4Su+ILpdIRiKBHTYWvRlIahTQdqzIM478/TZHGdc9/QyVoHbkEUpH8rfSA9SyUP73w4iarz97SOxzTxZVunCqP1vngzr0qUFGWNKjENpSPGLqoO4SO+7EU4rugwCOsxzX04rKPCuaIsLM75cR3VSX6AOiRZr1ZWE2PoEegwarJuKTPrwFJLcBxX0eV6KLVZger7tEyimv5YTzKj61V0qasKIghCpBHDeAOFlobwHmpsXhNWuVID2tp1L0kvZGVeLUyBgDzBJcTqTWJ5vP81rcc+r9mkqFBoOwIHb6z926y+zqinRClmafX6NouTlQDMmEZJGJUlzZMNPEKohWUSMeyIfYX4Ea03N1yK4jVpDstXV63oKGV1dQ1t3BZqUR7UUZ5EWZFT+JDvjvioQxitD9MY1Um4isIpowewG/jLasjqxdZwSOPamm0DfdMB2EvwnYDq+zk+5mSRrAR698GxhGw6YGGUJD6bDoyXYrm7H7FaJTSjNXUazhQf7ZCjY/VC0CEdRtOsZuY4d+mkmDOYxFDWEVdhl+aiL6hl26V1BCz9ZhZY3eW1L0jfrbweHp0fr4eiR2tGEyDSC9T0gRRFlgOScE3fhTFKF1GJOWznUxoLovLY30dp7AaMVRInHXjQLfcuaFWlCWV8VGpBW3QrjWp924CnF5ssE8sJPhuY9GS/kos1rGie0Mof+zbpBgIyzRjV7edV7hBr7Yuxy0XiavjoVVlpDd/25tbHw5P9LTDx/Ovobfc/ou5vJ4+Oxa/l7g8nj46fLkkB5+Pn3Xdb+7J6d/1Lsuh/Cb8ki8H6oyVbSuFHQP8iyliHNExL0AnSJ9piEoR1lU5MjC5AHbUdcgrRb+El6IlRL+17oLbGIhyd0Pp2yYqoEGAFPOOxX6uo/HVcZBRhNPXrds8RHjcbrXRIdyVooQ76lfTJMM2Tw6LcoRc02/o6jbK0vuZfMDr91WVJGSyYuV9c7hD6VVi4nAVe3dpQtiKLAKAoBUY0EHaZgrDj41tzIceglPL6/b7XM1aqQA30tt8nlbE+ef2FufUXWuvfAt6qLZbsPNBGXVN4bNDHgqfoaGH+9AaBTV68Lfg96Obw1FZrGGXMqIaPbfVAIvFaZDy71jTn3h+JN5f+1Urk8rogZVH543QyoFWD+oyl8aZPVmFJWHh64j0BHmih7okX3L62RO3GMmosnBbDjZgLlO31fDSl+9aFaxx1Elri6WPZMDdBeYplJCWvidP3NZIuLtpmJxxIqjhKwKEuLkoKQ17cqBh45urBJt2uJmCoL3rX78MO1ySQ1oOPpDMLDfNZzO/GhYMHYaAnYlrTY1N6jvmIj9BWGd+NJ1Hl2KwfyPoaSaq+gSckTdGkb7ZfMMgxBTHrWFYypwGgpeSNgCMqd43KiszN4gUvCAADdZpPqT2FCzZTTuVu1VZf+k4oJJJFsqq/vE5icGXq98E6zn96DWnwhnDNH0k7AGl2C6VIHjJr2X3dhWVtwSCwiz6GEzzWSFnA3IShVisTApqKpxX3/mLAuNEAvS4qkR6WH0H7o+XjY90ICFGUSiLEd5fjNKMwbxaB3rJGQ2vO+aAmckR8rpBEAnd4cvbbKi3960uyuBQ40z9pRQF+FlGAf5sYiKfV0USPHsGRxT5ZIYtk4o4fVBDtPObIGqi5yFfWrGIw9ONodLHA6pnDAh8/FjDeAFMy5Xj19TPj684Sb7JDWfnYs6G1sMRWtohaVbPOzPh9Zn559l0TyILFWxtTxM8x9Po2iQnR1iFnQfCAuQX3R3Nq++TMxL6Yzxt3ddsdbFnT8bRqSO05aK603L7xdndr5+Tt4SF4M3os7sbRhGZdT0rq2x9RyX649Y/Dk8O3Hw6Ebu6ACuc9LyLRYFCRARkkKRkkBRlUJE5rSuA7JKEZSYY5oROSEtCnnw8S0JCfk6+EERZNSsImUZYRVkY5urWeo3drkY/wZMymJZliRy4HlSe8GcSAPeLhLzgfBbK/+29/Pfl1/+0nOIjiW2FkwrFV0aUwOglvIuGTKt/ho3wF6lbjFTzKV8B2jFfwKF8Ni8L4GD7KV5VRXslCE44CMjaBi8I4KrkSWb4RBYCDmTn6zx/F+IUXC3gib+V1lVLhzyXKqSiTGAPOVfr+0XmHXBzj6f7ookPOjy30bv0CvG/XwG+Rx1kan/eIV+Qb8Ev0t8jjcZSPKH+BP9WbNC+nNb7Yhl+qnE0Hk5S/OMCf6s05vU6Kyxxf/UyvN4vL3Hw3LeWbz6VZXlaUMfnqEzyot5NiyqiCuQtPFlR8L+DiWwMyvqM5mjTk6y14tGtkNLqgusYOPKoawyKe8q69h1+qfJBNOdR32VTDS4rpIKMa05v47OAblGtX9YTmU450/rxL86lFJLDY0RPHX+8d/euN9+T4m3f0L+/4qfftydG/nhw/fRI8VaaI7d1Pe/uHJwdbO+9PNnb2Drb4oR14wD4dbV2Vgg289q+63LTxLYnFr8D3yKL43CLxgqU3oq/eKPVMqtJMSKgE/C8s8I+i7m/Hi6BBMNQIx08D/wt72g+WRpaegPO1jYhRHywQcveA3yAngO+C9GES7KNtZNKt0D/pkLpDIlwG3msYRk0WSQTDePN6ST57bwQHWpv7saXXY5pNaO1/Yd/eBEujtEO812CcwdJHK96tbb8s8Xpf2NM3ou2SavzmtrZiIBZmzdGxskNyVFCDMgF0jyVZNHeDRXyt+4LzsDTqED/mWOkCFuKwLnaKS1oh5oMAFQUmTgwN4FFFo6xDoiyN2LHhvtdgRHrrv2VkxKRBz3+9tB5Ah+AbMDP+ev/oyxf25jjwOkhvQUc19B6tQFXsiChsO1XCVxsS8TkdRIPDYgN2SW0ikkYeja4uJ98AMXbSIRxpgK7PZanQ1QAfM3ZY7A3O/Jgxx4m63Q8yoXEGuIwZk75+a17gnsRS7keYcW0O+Ej3tGqen3Jeg+TjnkKkh2dRSgDNs4usWxxBvZDVUVUztCR43S74BfP2PRt1UBYc21CFAG2CtSakaKKrmJRpRsEl2fTu5d2+hDM+yGrRpRbK2dMvN19u/KMv7MvB8eJ68GX2ZfaFPX20ZBxWsKGLwpIbJvHd0YoS16TaHQRBaXoyJMNSWhlNnRJ0KM3jbJpQ5ns3N835KgGHout8Vpea3V4auWpq3QsEwDd0BnMFZSl5TFa4TcxUqaLnNvpYsyA8K9Lc97w27HONfxVduiKlmAQnUiMuMhC0uOd1XiS0Q87TPOE6ZseyWRXlB1rXtIIxHx2b9puS0WlSbGQRY9R8C8eUcZrXB+lvMMdaA2asjRvB4USwESyTozAMoTNhJL3Y2bF9NETbNp5BWNyFBzzk61LpU1+XoIBzFwx0i58QTAs1eiPTa3NtaE4bBIox8ZbWOsFmuDp0i4YWVsDnHQSsoCOUdYQycKWirBTFWUOYze80N+p1TXol9gyF5ZRxE2JolBujeBnIqKvgnl1Ic+HhnhSThnYGAOul1OVanQXeCLEhpRJU3DfGE1Vp1OVuzO4rnGcvCIzpmTdBaiSNg5o1MTGgwgsEEP4IhhVDbaMOw6rRsKh0E9iR3hfVnAZW94vca+m5Et95xB14VBQ57IXn9Ppo9djenXixmLdngTs5xqrls36EIXUmS+YTfdzGTW7M9h2biDqaWpVnPYiJP+4dHJ4cHP5zZ+vk0/7eJ5Bhl56Sv52cfPq8v3VyQp4uqbPpEZczpXOclDvBJU7+rsAxRj7UhZTuPe4pKZ/QRVg+oMecfOCeNfJJ+NgpeOD+MyyqCQiIHAGKM8Lq+CQ6dgALysdlZfNEOBP3ZQQFvhdMCS1dqP6TooJo3RPVFoSOQQdgGM115AUv7Dm2g4Uoy1oVIEIImc4Jx+CnxhahDuC5uxuuH1hHD5UuTX7nEkM4joDPDKJBEEA/LQuwRXpW1MjUDO6A4fWMYbfJGofClwOPGW27WV1mhg+P6xYhXUHkFru0tEDygtHJqKJljyRpReO6iwF8XfhCN2IsHeXQmOsGykyH96GR3D736N2xLrOPWn/vaxenOpqUuCM7Gx9si/Dn8Lrk1PIRSrZ2tnaBaXzc29wyuS9WZ81wMLE1dqRNFrqxuBg02IdBPDHQDcJDp3H4LAtEP6Vr0ywASKHw6rdcPNBBk8sOl1F2jl4jFc3N+mKezFbcCI6hqlwQiusrJD0JjktPAyk9DbAat+1jZXghh8WBhScnUZ4X4AYCGnFrqmyTOlZvUJjVey4ymeQlGisRRiPrmPeVLx2A4seiaRBy10vfH/BRSPbQPHpgu+ZXbyENVApyuhB9AxjoNoXktTYHwEI7bc1xWKOwnKCtWVhHIyD+LKyjEeyhNqPQH8Z6QpjjW6nR0/dF5dPMog23TTq0m2wPb22hpA2r0T+2sfCub/FTvW6KUpTQHtCsrZHStNjf006JzheNOpIhWTXkRnsZVTlNfiwyFLnn7bH2rgZtPiuPfR8XyOU4cpgjF0Pg7Xp4cqL8SNc9kDa8L8vA9aGVcRjTfREs/loZqIXBx6gBflFaIoNvFhkNoYbvHWn37mMCH2p0QzNn6E2PyN60LxZN6Db/v6oFwSLF/4KHDzxiGdtsfVXPPQKqCvwgjBKtXZ94QctycU5q9VXddDGRB0uAd/fB0jxWCp4HyAXoY6mHMWL731fRCIhKalpucLpn8jEMQ+NYWkrGakvLCz4eU/X4StcA03RYKY2jBPcF6xu+YK5RakHMugpi+lhcusYmNAnJHRw0/+tAey1bHaTwKKouStsODMN5zCknxANzh9dplCPG0FqrTgdc4c+jYogVFeNp1BqQb26QbEtJPYvEI7OZ51Q0MEYcKxlxl7LTFMjAKZrzUZLTC1rJyUpkEAbf/WhCIkbopKyv7c45XWshc7fH7Xhuw/E98CuisBrIlWMzCk0nSosAjTWRsl+iLE0ku70ImgHaFw7pqOG0LS01BPBbvJjbA74E8Bygw8V5oTcoioxGeZv7kPV5gcC7kAaYksLehSHncUy1s05r57W4Z5ay+gMFDmoeJGnmZB6AaiL82HaHjphwX280iZhokNZ04plt4LT5UTrWb+Om6LRFnYoZTIixJALestchK8tWL87TpCGOOnuxHu5BFbf11xzinexY0g8I/tAQgjU4JrlO0Dw5LdjkB/UCV69yN5OEWvgl7XcLO5UqQiHTYYkPZixPuNiGUPveE7KoELZInngqNU1OIhgK8aGGIHbsCFidbuEuJhMRWDsyDPENdY6qxSkGHIPW+WL2sQSl7cyXO0/PhuYcgJpc65attLGZ8q7wrRQIurmb2g7m6LnMCeeIr5HjHuENH0kfITJba2NDFv5u7SMxWKzLP2FJqCPVmThSselAEPJZMI+zynJ5EGxlKKZcbvGTiyi7BztBRVUrP4F53cfIkLuZwkWUNRvzr0swC8oBxOyPeBu0ZMC4Bye5J1u44KrfVpZgSkywimXHHz8mrYzgQgypAUxqjsj67yfsVkoxBqdJxUZYO2W0HIYsAsnnbBeo+ucuXu6rWIK02TMFG+WkuKANKPPfG6Cs422ZbSdtvbKsD2YLVOfNIVQrFKetF1YFAx6nXQW6nXjl6zbqdbS8Wq2LC9IwEMHcGMfZlp3yz1kI2uDElAcL4epxTYAnJ7KjPdVl8y3OTo9PktWqYDUqdHsafevz1L1q6QRK5Sg3CLmYHP3qCPWrBkKbbouwLkf2ihRGCKkw+CSyNblb+YWhL76wdMWBVJhyTaQvskZdWDtp031V763YwAnIsS08CVNemliZq7YqmoOS+G5u4DAfYX9SSwtNekGHg751F2koaixOMcqKQZTB1tncUUQP5rOKLrhhdTmILouLUm03Wkw2glqKqv6dH5rDszQ7a/sidG4O84BXc2CyKp7zRmmlDPbIvzStwMlXflCeF9edAqWbYItLphylYJA+QtKqe3g6MovQH7vnfB3sgntD0EBNkZKWvoT+Gbv6VrOrwP+y/u0v3x4FMnR5Ct3yztgVph87Y97/jwwaki5wVfV2opp/+6ahL/T/IFO/uoWnjyOmI0Jpppa9ii4hy9CZhQWQ2BpZ4WxPEWuXMACvz9ky2qjqXZonmJ5BE6itpNMaPJPUQEFntA4ssQuiZlsY+hR4OQAJsAb0GZhWVkTJ1lVNqzzKfE6t/jTokClPNtYWNHbBeRIQ9Qht66xlx2vZGHT07oXhl4yOIOo073BW5qBD1mcGU33ANqwZKky/GIdvsVkxILvPQmQzmgMPku0t7tnafoP0yYJU+prTzjMYkp4Jmm/goTi0yrn5gBWACjpGZSCqttq8Xq4jjc3g7QNunf19IoMNDlZziUYtXNfr8wQcR48Dn+teGaoyi4s1BB3GRRzdd7CJEZm1iHjC5sY8feRtiaFf2GiKL5jRhrN2Y04UCyGnsCpPSYxWNpQ5ojQnNzeoWVx9CSpHoWOcFMk0o5BCgpGooloHGYlECgTMAGuQh4hEJMMkIRlU9+ZMIU+U25xHJVKO5RI2ToS+KWXhsVjOkBEAYM0M4S5LxnNTACUcT8YJuaG8058Z8ywAHVnUIeUYyKccu6KYLRprCDcwe+KQZro5aUX0j9zPzopFe4jsagioWoxBnxynEBJ48JV3gBKUUUeIKY76Y65Meoe4bFsQGiPV0Zvkf4F87XRfn+nBYeBgjoLvf4qqezqJ7J9I2/+OY8Zt/Rj7G/K8gXuCfpx3/BBM82d6DbZe69wRQ4C+EJDgJ5jOfSDBpot1gq7AUMlOHPI2y3zvqWmjEvFcieEIqZCTNARQsxrEmxks0JRFgHHwrzt+D+ituUr65MWzVytGr52AUmZHk2ILf7xKXr8mL8CoNF4liwSmLao2ioS+rf00IN/kLqiEFCGWLUJoH5h5x6vkzRsIUAvrQog2z15aBu+PW79s7Z9s7H08BHeEn7f+ubXZCHTi6YmF3xQIo1FFI1JgEA6p0zqjItYI9qeLiJEUU4GSizShBYmmSVrcJ4Dp497hiQi6Otja2do43MPIrF5e1BhOAe4fblDWsfDb7XDDdWAnemo191sUBk7zh+hRoQOIjmgWQo4dFGyOxSlPFfyxsxDPbLiXZ9eG3I+eLKbkD2J1y8SgF4DoMQ/izZwsOS0oDJQ9zDot0OuD6XCYXkG8o+7TOvG+ofuZvSbdw+RtLozzNFzgWPg/oNvqiZsP1IBvl/X+iCJKqppvU0Px42xzRxTOjVy/rPwbLxwgEgpX2ptywpjG55js4PFjMt8JAIA7LUABAdKLMcfkQXus7QTthhwTud9IuRsMTU4RZpOxwBxL36133GArvfOJDt1o2JLEuujI3O5hGN5jZ7N3Je3Zj3kmdawolxVAKt+BF8jsI8ZMVlJNcQXyvU6N37rKw6/HKesQT+SNX7utDibYAxO0lgOWnj4l76L4vCtSRZK6gIBMtR0rYbED8aZ1lGUg9WMiRNVDSBsmcznO+TLX5uruQXEo1xb/F10BzU2Q0ZrngOKJwDokHhip7gAAh4qErx/BukJrRGmjuQl+WFQx/Yzv/HvBtRrYu7XA0Waa7IIlW8FrvhftT0D98MmcVqfqr2mWfYa4xwY0mLHDMSXDLMIs8rBFwoypOxW4QwgjEabcrIk/odWIJgTS2wqxSU0Xr/tLlDEDB9Kn3JiNmbUFgnJgM0YUm9dTOM63UKsb5UlXtusaNG1qS3MhHLwX9dSGvrmB31BHac9ZMvoF2sPUI+MW7S/5muTzgjEq6xVkxtHpXB4/Vi+Cb99U+doTLk9YW8Yw951edNyV3DEsdIHLBNQMOwE+bBxlWXGJCUT8qEMUrePpftCWokS4aJzr4GR0wo60l+o5v3aIB3xI8dwWHgZu88E9m0O/onMpYUCVwbli1c3OupcNROcBBwHbALY+Oj9ua3hb6pVPjWOUPhnZZyJlcOWP8sg/syW3o8sOGY/qYxSUpSIWtKOQ8LPzcrm88qQyHaRDq4PKQMtPL+LBOALaWiLjBIhStU4Cvk48zHcvC/h9HUFDY3RDeMphItX8HZXIdjxC7jUeKa9HwyCMwnUPMSX3PfmSa4wsY7M1GjAvzx8HT6FsuXrx+K91rmMUTqA4GohsNdQuUpmuF5w1zzAXh8VumuOsWCuDF8wNsTBmFGrOm7wbMknzX110TtL8x/kYbR46MTZBsZL3ETC6a1/mSOwQmrNpRUVWT+eaqVvziL7NY8rqohIx6Cp9oPwilvoq3SCXIzRXUl0i9KqmecJEc11uCb3tUgeB7BFUFmupbs5+b5rqb6nGpoN71MopTZjcXb0OZw9GM9gTD/KoZOOiBuYC+6FE+xOmFz9smiNG6uic5qC7FFELmKL6v//zv7RU+5ToOIgKMvKkAJcD3sdGG/UVwQ4GIDKVaXxOjKVALpgFjH+omxf1GLtRVIYajEfwMUOGmo8uQ7/Ugod5spejmZqDwV/HgBVNA/xiM9YhFZ1QSF2Gw/eRujoKv+EFqoqQKqwx11Vawim+kKMXmcDjIo9BW5IUlOVPYBK6UQ3SS41YBvGCVtc8u1jtYLErQkPIW/V9MphOSuKDACF6pi5GQnIHdbNQYDvAAPswGxdphEDegosdT7PByOkFrU5JlCc8CQ7DsU/opIABRbkFiuYX3YRCjlVYS8YaAt0FqDGG3TGNsvtM8DBKM5oI6UaHltyjzWdGK64ufVi7XyDPhs4EJ4nhE626KPHnMbWGxPcIuHfxnJaQr6qiEJGCM2euO55w1CYJVhBQvkm4sDSncUwZG04zg+7iCOhinCZgTWDpIEvz0RNGoL/TylRyPiU4Q5HdVjhKX6YlBWdGkENFr0/5WeAndop0WCUgFttzeVqFeE5DC8XpfaYMsIK174l4BG8yPXHIEHY4fpDlj04dPL+h9+HJyUWPLHfIyQmtKvuSKQOimQzX1aBrgCECCcQn5KHrxoZtqc+xZstxiJhaDtWLSXTO5WLfyhZsjDoIhdzsoM/aL60G7okdKBbnoDuA6xWi6pqMi+K8RyLJ4+MqYmMS5deXSLFpjt0jmxtIhIO6ooo9PCXET2tGisvc4CVRTqTl7ElinosjgqIx2dzAS0ch6jGtmQEM4CSUwnFa9i4gWQT7sOgLq2GPARM2P/IBV4K1BHcgGCQI05XGICNs0iq9oAlOFZhxuD2Nmru1kmzEPOplVww5rlDbF04oY3DVwrrxW9msaeBmubOPsxuYCIKCcmBYuAYPiBXCdWf6vNpxQ2Jy+OpMc8JzwxjrAbLC9KywA8vIAZ9d175JB3UUnxteOcR0fjVpZRtRUaewngDRuCaF3OQXfKPLi25R4lVeAecykEudnMLJHfF+ak4xMBygGbg1KI0ywpcqcEnIi8SvQIhqgrOL0DByue6yy6i0lCd6tYg1ob7XtCdBxCrXHX375h5CjWVo3QoglmUmVE6wbe7IpTWVW4gfNNe7tTdZOSJaKqnNaH5FxTYbVWTOf5ueXZqid3fRQcQtfWwiYG6zX9AjYD4ru+ChqLeM1qFvHhjn/8712eyoObUOUdjO581BG69bY2E0fKkj46OxNcqaYlu7ZmxjYRg2ykVIMKhvJZwmD5JKMK46hNUaTetxUT1hYikvan0Yo3whon4ThMGTk25Z0WF6RRNjCV+mgFFMmleWNLEWpYGixiIEBssTo2hH1450a+2Yfqw4KLzxcCapAPvfsMlCHXfEt2g1m3Zm7gLlorbhZCEukRXKMQ5R2P/FmRZU+bwcZxWO6fxxrY0mrImF+nwa8TOuXKAEDZ87WPlCqAGKvIDMRWQWGDpbe+oPLqPS4NtKTr2EE4xz+NsxWDsX7s1ZN/QusItkFEYNpiI4l4D7WBASToNxVEEKBmT1ayQRh1EDVEW7w7SiTKjHoRvA3QHuBLYGPAgNGaFXEGpikpc6E/FF2pzQWzmOO60fuYagCh32J7y1ppVNGoZsby9jDqffxybgN4gFjx9zEP1+w4Dx7RtRbVr48ePHpALu2HwPLPXxY1sF2mROnTnsuzXer4178UhggTlTo2ADcPdLYmOrTUFv8uB5u9ft+9espb8N+Rmw22ksuJaThDk4x8GmTYqzjRYcifO2N3Vfhj5jBPeRNcKWD/6RLd+N/2oxsjRsLE6Pynts/uqodCvJtB2ocMnMx2NdZkGDVufOoOUMdn8ibUP1n0ChzUC+e3enMTX/jqXToIk2axq5m8zFBS+tlP6/i5loyzbeVfIHd5gYgw6krytKr1VoKRkbRgzMvqN1/34VnrFbap8xUdf9NEpYwsW3+U1tJ9DSVajFsqajb5vnsN3UdMvVH1/nMo4u0FLr/OZwi82tPXjHr5m2GKC2tsQZM4++rt+w+Y57ociMez3zxNGspp1VzJ6bniuWVkeQwBh8hftO7D1CEIlzwZ3dfHbid/EqAgCineBNkmu7xSi+jnGCjqyFEIYhh8Mzq0mYPDGnBbLTXIf8lVEufb/A83nlh1XiWQtrTmoE20RG0EwG1CGmtOPMIuZzMC8nbWRHGPuGZbPTyISRI6Q5k0oM26czp21uokS7inpxWsXTLKoIV3Pxgyli3Wowu1fWhqaCsTUrw78dk85YWz7RYtU0roSFhLe4TooJbAc17cbjqsBl5bXkDGk93Lu4sNoE/y/M/a09vHvCRX/cg4yzXVZc6vlddKBI4FZktaDnLoTcY3Qixuie+qIWCVPV07XQsQ+v6Jj3lu/VWxVuzYZRAlOQOFql+RK4+AYuI/WhjqN5sdyAxE71x/RxZuedJWF97U9TfjVo0TSVQoTSQkNG+faNWGJI8yDlGk4RjgOmob2xaLlByXfxM19jbr3B3Lj4ZPEcXR3cE+7BTv8kTqe+ay4eKybB7ovjwhB+qgpw5a7c7qEtvId+2biVd0zyOW70AjiKcL9EY7zZG/Xb0SHxv7ZtrsVZoiNir65qSLPnddwhWB4a0LtkTna33aiU/EH5ivA7NlEucTyOx2kt8h0nKIhbEjiw0XGqHV7GqVIUKtCbKUOVG/hqNAX9e962efd9m3ZClHvduOkcuByFgn2+uuUKzvlgWm/ktKRX+1ZO18TonHbUgm6lDq7l7Aj1L3eoMgylkiHp6QhFUJ9wWTYNvHy6mRhNx2jkxsnoN6YLqjT2ibpIXXKltHT+O4UV+wpKriDXLsop25iyupiIeAcZGMtnd8EQ3fHWp8ePSW6nj7a8RlPGPWegJ7Ci/JHpyCWU0CNH/6xvCEyZ6AXPge0k1bOby7y8jx+TkUqfZDjIj8JHj8RP7il/PRkUmdfw6BIeOptFXdMEr+3i18ib61bfuAXvGs6OjI4wHytk1RTOZ6GbntC4y2jOdUnqzqMjRkfHLTOv7ibiE/fu7butnZPP+zs8z3Vdst7S0jQvz0egdFj62yAa0GyJqQtL//Z9uPpDuLyE5eEkzUMRoa+BHexv46F/HD179bw7WX71c5qkH7/uJOVPX3e+/vDiw9LOVvrq7xdn2dLV539m2bO/b+9cl7vF31+++HtR/fTDzkVdru7/458f3r0/W7lWwD/s7L17u3PyaW9n52T74+HW/i9vd052IRn1i+W2Oofbu1t7nw95lWf0+VrTA08Gme6i0w/zi3xfeFo5kWBRPKZ382y8tR3wslNECcgNzciXisJ5iSa7PNvd3TCFAabIsvnVVVJQ614WYFfvoDe+TUOXaZ4UlyG+UkT0qSomKaMy+ta39hFzTKqFWSgru4OnlxIwXhEOrmBn7Zcx35K5mcd/mcdrFjJM3aZo13wFxrtRldbXqsLB/rZZIa4KxvaqdIRqCS/Ki/warg3yzEpFDiYdtV1V1BLc4b2Mma7omX6hxjD3Nm0ztHIuJq3MoTRP7kUpauqh5z6/8wHjptHK5AoPaFvicMUXcIucVpk19bKamnZZoPgNLA3cj3iMtumXI8V+8L1w0sBKB5ke9hZ8l0VnPQy2w3sEMKLOCdwHF0uYWUmvUZb5Wsujrx/A9CHrziroNclcC4ncFre+3qwjqrhXdJc4+VFyLe62R0IZgnyAWJRX3ldtyVarsDgPuNckTiP3yvF+PDz8hMecCk/YU9YUMSrMx+Eb1CS+g+EVLUsLr4PrN1FjsoFQpc0HMLYqYZhmlIstMD/GC7jji9asR468igdVEA+2SrFej7UkFYTYiR7IDq56UCQMgHMnTyDBes6hUkQf0GFRUSM41IxE4GMxD3kPjjAh4mIjFVoiI0WIx7sIv0QP4WdFv07TCkphbIF5hNGe2Sa6OJRmSSiAmm98YeietZxM7CQe7LaL3/WtABaWmpl5OXJ5mufAkH54Cwy/c2QtW8oWfeFxeqrRXVZLh3XcAEJ6LlbUOGcOBhRjMc/Qt/AYmlgHXIeYPZG/QtKgVddEot09a4Y9PnLZ4/kwRIXWydUiiLXGUa/ig17FXuIOCm3qgpVk9kF2zCmWSl1uLQcndcDXH9S3GKu/OW93+PrpiXv/dntna1N26dYJdPYNa4D3R7T8JfdEhdrS3bVLc6t2zwGrRsYSd+MFZ2cQ0XHq2vbcBe4P3ZYlWDoSTYrEWBl4HUVdXdu1INvOpEhguiZFcpTLcHLZDI48Yt2qd9a659FcOvgNWojFrRroD4TirndzJDKYbt5RbcPuMU9SD1nGVE569zanBUeANlLTm8Zauw6jtUlsTooMRB0nSRjRk7wQXECoajD9rVBJPvGIP45Yj0CZwxZkmHCHyGwA85j3g5aA3H1uIX3O3shgipm9SF5oezYfg9X6p4O9jyGP+E6H1yJJXwsrjC6iNMNUQPdhin+ME1qNQ3TYE4LBZMpqcmpzXdjzPD0p3uyUFBWolMipkGrMt6fhLS6+jTXmrOfLKK3fF5VIO2WvZ/Rg5AczJENhjrRdNWQF0Fu1JKLCq6NQH7gJFpW8uPSdGinbgKs5WxQsbfBqCC9qevKL+FnwKeewtiBXnQmQaQ0Z6TU1ME39Bse04HGO/QY/ZAsJEg9C8eboz9rZMbnTSUsjjXQVLt/05+gB2o0SeEmFJc7MW4qcWh09+V3LiRCPR5nAaTCqMI5EMlh+5gBinaO4WCTehJmJtO+JG1SvTmgxrX2giM485YleD/LHA1u2b39mlra2PfC+NI0cH7ZH5/wE7Zti7Dx61jupFShD2hZ3i1rZcTl3xfBVfS3GvNWx5nTe1W6u6i6OVnXlW7vX0jk7odgfkjMkkjFp1UPQKpAiJZLQljDW1++LqnZEGXgyK6LK1NIw3yI8OUIG7+CfLGzghXxOiJKJ0oX5OP1DHMphTY6cYEsKICVgLwjl3Xg4X0uZsK/wW0XyhLRsv+qyAM0lrPtIQAf12mzwBu4niXIyzc9zCIgS3QvnsME56f31XDosakRrN6fggyV0rLHOZTitGdNypHNUcElEgLSlXDSnu3KICs2CievIxdNTx4yOzXE7anQtQecNs4gYtukH0Goj0S7+WjMAKcYEuLZjwggcGuoCKpvnR6OVGKVwGHC+bzixzhzTU1QXkzRm2vL09nBvd3vjZOMA1Px8lSwtkSy6LqbceuWFw6sbmSVzmNGrWRgXmVWyBn+6/A7AtMh7cZFNJ/ksHFVpoirCwyyM4psoS0d5F+5wYL0Yb6OfhWfxzdmU1enwuiuyV+lXg8YrVkYx7Q5ofUlpPguHKzfQgd7KLMwLNq7S/BwLuvx3b3kWQpYdXga/evBnFg4vX9wMi7zuXvLcAy+Wl6HwpVX4khd+bxV+zwtfWYWvsJCtrPBSuMq2t7JSXmHhqlm4KgqfmYXPROFzs/C5KHxhFr4QhS/Nwpe8cHXZKFxdFoXm11fx61NIOnQDutCuUl72sDCOGJ2Fdcxf4mSpucgLROTlOK1pF2ehx4tm4SgqX92MorL3CsCPonJlGR9XluXzKn9elc8v+fNL8bz6HJ9XcciT5ZtJVI3SHCZvUr8ST926EB+Y1CurZiEHO6lXXlqlCHwyUO35JakCxECDEOUCykBDkS8QUFmwimY38nbWXkWzqE4vKL6JBky/iQasyKY1nYUVyPI3AwiBrrpVlKRT1nux/NdZWEDY9Q0EuQyz4rI3TpMEiHkwKK5uBsUVTFaaj3qi5aDA72No1U08rVhR9cTjLLxcWV6+4TlKIH/KLBwsiy/28iKneItWsGZwAX47n2YCm1sH2x8+nmzubZzs7m1uneyDeLn0ekLr6Mvg6F9vjp9+GQCT/cKe9r+wp0fek+OEQtbPk6SITyZFQqFIVPTXe2KhfuMX6Rqt/C+XiwH8WEqlzXHj7cdf3h6cvPtwsrP94cdDsCn9ZbhMKX3pNatsvt3/GWus0tV49aWdMJAbvn7Ese1GeTSiFdyG1iGp4XpkGSbREXyuO4lhF4zFrUcX9zRjcuxsFvEuNx/ojQmt2JhoEZ2Jt7LG26gsD8cUHQC8DO/qXWtsNCJtprD7hdJuJjaHEJyLGEwwwJG7qQEXGvJLwatzzEQnC/j3yDoU9HBgn/d3DmhUxeNPURVNmI+f46qqX1J6uY65FTEzGcNq/MrAADdpJWR42BEpgQTmx9flj549Wntrc4SQqCyz6w3E4ruRY59dsLDr6hOENQQkbI0PszcOrfVc+tSGO+MrVpL3PjnFO3bh/r2bQRSfj5AH9B7dDEaz2V9A8iyK+k0ovPpb2Mlpq+RVFqzeRLoCogKlEW21TPN8HjgqYbJwcGB7LlqtgJHVu1wf7d+gtNKD1AtJfCIWPHzW64B6iYKPD2RnVQcoRxqZtY2CUTEIsThaxoGwofvWKnJH4S6xibpqlbSiaq3tCx6fRssi07ag2i8MFo07TvyEs7oBnmuTN+9FaFLTQ77mLAXLlt40o9trQ0+cE2fUhoLG5Q5Ov+aNZl209G9BUfMYzv8K2oySZOuC5vUOnJVyWvmeMJl4HeLYdIQaD+/7JRQZITe4wK8Qyl0FO6cDJHHOpZqufLWCZXNUAcRinWAFMDiKfSI1WHC9ZpTfycPdBnNnXetX7NViJv1csJeOsFvwcwjioayKAfWaqlhrUdmLU3As15dC3OfhXNstfBHwUhH7WuiK5sc2q+aiykZWMNyn+f209Ko+4NlqzMs/8B3nY5CUd72tnqX3gPrt96OKYxL3tVsQYgLqLxBD+r05v7Ia6Kqdaq71md6XMdAsTGHcNjzrvb336PPcHayAGuvfPj76J/bN4u5yEPlz4vpKJGU37yL23KHquG/0DceKjx+bMpnv6sDbcmxX0aWdZbslbAmzw/Sh6lFqmc/FMsZU0VhL3r/drDSJrt/RT1GFyUX6Ru+BECxihEHgStddg9t7TJDWrdcHG/vbnw4bxn/cj4yPBi1J84mjfhOwvvHboHFAc644EqNt3EGz1uyDQeRcSdfeD5PK9ZXV9yTvhi8asZ0uZFxJlHe4gzqZgRsGd1KHkeh87seBBQSXgrVxKhgtg22gJWiupEYdG8xdi4rojdUig53tjz/zbUKW7G4dvv1TyAIgLook4K1kMa7o0KSLW4mmmNY8F/6/jVjaRRT8uHNjQBtWm2G6Eg9SFYqISO1vAltB8oTDHJ5Smv3i2v1MJI8XrAL3xzoauRMlVJpZoG/A8h14ZN6CqKNRWBc7xSWtNiJGnWxA2F3opdKJO+Q1F4eNerM/ZcHNGblNRlEe8Lt1cende1XOGjPgLEiA2Vy2TR7wgEXc5lXVZhhqVSkL0abTONE0/f15enQnDzGnhE/46mBMaQ1Ha9PXnWYtDtAPcKXOcfM0Oy3SvXcgR32L1AyWb15DLZ6YqVg5M2hGq/bP7xMxI9aTST/3FoDuK7s4AfMl8sB8cbF5eYauzbAXYsj8jnH05EP2bBajoRl1FWibEQGxvR5eHs/r9Zx3+pX8JqwEmOcwzRmt6v0p3I9F0YxxI3CN3hheR1eNGYN6KjW/1j5Ix7VzCG1rXGQbZ+bdZiYtqoieNmrcFy99W00GphnIyNMkO+GMwlv7hsnOtBc5fh+GvSelhvOUb5eY4fmgT4HYOCO3cpnxjIm6CENh3UIj6rDH7SIdC+r8txe0gsyP6hninnrz9YS64pDHOAmAkkzbDf6QDbU1OK3iKYptszVm9VlclI8GGx/mwLUrDM4KIHV60MazJCFyPMsej6i61Ri6Y/6G+3fMVWt8MYcsggJSIMbhhv81aI9bXLXeeWNv99PeR7giZXMbr4sJ2zS6+7wZ8EcjzsG9CkYkQ+03SNlkn8ZFFaqmy4LN+lzgV1Vt3bJURBWxxJmYSox4aATOWeSGDaxPqRS6/TnRNb4NWM2PBWXIc2ErIPdOkm2Nmiec0xQpYPSMAYoPhUZ8pcSCkZ65R2R26/4bN4acv5CNOKZ7RKgKoDo3UlgqBFnbvG+yR1qiNfpvFELD9oAOCcq5MK9HTMu2CUYGNOjXc0BwY/KdgBpePnPAbXH/4nnQWgzyaiI0tesF2QhysmIyW9hQk5TNfb0KhzLNuq0uUi+cvFgixh/vwrXX/yLxlmAjpDnEBHze39Z3oPO+QUx7EuNCUmoGHTEiA0Yoaw0ZoQyDRubH1VuipO0hIlIj848hF7RcLpbeEO78fbcHCceR41KKUy5CVpz6wteDp9ob0opC9j118Qg6ekBC72tz0c1z9VAbQftdQTon4rwYmboNsXUzu5bMelhxnR3+2IwPAWht9Aeb81r/rnm5e0KEx+/rq24SvyGDrIjPpYMNd7vhsr2+0eQu7LahFl1dcaChYIcV/7FL60hiKHGTVFqt6EVKL3k7/Gm2woLWdio3J2iveD6FQCSW/LGeZCII2qkctII6YwIIylkSyk/MhnFmBuqJsAsFTejq7+nDffeiq8cVvezd5ttthC58Z83YTB2TwBgnA8XVYUuxyAauOAofwiU52uFejHpi658jYXyUXWhaHrihqsU+H9IrGvvYmfXwaAV9A21PS2XnwvR4tvQRyM213Rrnnq1sgyGmgtDXux8KqsHOWHe/zUtoYs+/PemKYAV0GcIy5FnfcQqaHbSEIhP7s7bZVDRrXKl0v6mUx8avmCnmjB3gL1/+/PYN7mxb1DpgG3EirgSPqO7NTva8SYCg82D0a5PDmtEhGeOmmznhZVZGG60bkxtpj7wWN0RK2wd/fMNDB7hXGjnlaV2b95uIm6NOzR2lqZ5z++AkqhY8BQSCjDX5ZzsV3QtP92Q1ZlZyvMXApDqjVSOvm7E9N64Fgxz1Im9ykWfX4d0xVXOm6k9K3fPQxYKJg00TTYdwIbrIHy4m6vhZlN6CRk5BMA4VauaQguzUhXYFdJTJr2+5vhkPqKpT6qTqLkdqdl1pIJz8ebh/+rSZ1ohaaY0cYy92z75zmfBLTlpoXB8mG5ZgpEuwfYd1MRploKmPcaGqi6vg0oRrQwd0vwlOYpEk1Jxc4brV0ZYv2znDKG4547aL/K0EYFx31CQ0XqlDFhZYS9KoxqYsOu06NNjfPWN3fvWMzf0mCqvG4J2t5F49KBuXbEslvLj2Usp2MyU1R3XE8565H7jf0iOuoInsaH29kRvTkitdgXIuQc338eGd5rgBH8cqTczV10I60LU9WZP0dSvDbVqXWdlnRJJQ/XYmbjl76IrAmyc+oSRribWOh5ksbHMtu5sVPvQg8PuOAS2HgAdI/pbcf6es36plVIom8YyKop6tN5LvdL/skp/UcVjyKnXzpCAx+WzMnFFlXwjWpuLKEGQNyd/wBVDB3ZOoOn8vlbmtAO7LABXIKM8LSACWSKm5HfA9l7ZKaVFmPOl7XWbhyYn6iB0SYXRDzvdBMa1iqw9z9JYSUjPVFUpunApcdS/nll2e7LLN3MChHFZRfE4rHy69pbuw9F/S5x2SYxZAGaFoa3tZCmqQeyb/ARPqXm7k03J8xcDLA+DxIVtLoLYuY25GV0g/Ih5AWZM3RAzC2mgQuAzcbM6fBc9xxdFENFtrW2TllI3lYUZdvEmAD0DIzM9w07YtMRuvhJda3IUzX9Zw92ps93wcOnUaDttyVWLUGay1UyjdbXpBHWWjcR5eaCJcTKBL/pasJ2zW/PMYGx0c83tPVWsd1WbLZPOnoUHRmO1Ymy/2t95uHM5P/oVpXf628ip8Fq4sTScJLwDmnojLnJ38Xxyenf9r88P1ztXb67Ovy8MfDj6Vv9CLzZfbo9/qjfdZvvv+ZfHr0j/+/mEypIvb7D9eHX7dSjer+Mfz3Z2ft18O03dL/+EA39zbvaPD3aSYNDoNhXd2HGDbnR8dfrga/7a6kv3y4Z8fd+Pkp73rr8srW8lo+WycL8Wrqzm7Wj6//vpp+fAq+uXFr78k7ODHleHB5ufhi3/+dLZiW4MgYGI/ulQKB4cn3JYDy7QqM8dFwAPVnwpTgoCJBR4PGOX1TJxr70pMZUWKgb3hAA/RPB2QSqklOyx9DJz8XiokDaQai1M56Xj46MRBvSsC/GwVxQMSgsl0YEZ2ITsNmPqtX9+ZBIyFEbvOY/d81pYZjCf8CMwqMjmYrAMI8XWip1M71Qp5dMOqeHaqmdHdecRm7dOGiYc+TxKHti5VXh7eGr3tQ36VLGT14D8393bvSgjnvDXTbxlUo/hKR7MEy/Rl1RNLumOvQq7vPA7M7FqCrzZGDnepOSMWqhFtTtU2WG591X4mhhjlgcDlmZsv3Oq2we69NkV1Z4W+e3uwpT1a7cktK7wP1BctrZ0/LyBs8EduzbRzOjwkXsKQxoQBu6EwkDhQeoP7xlgYmgHn9goj9GJQFHXTZCQ+aZeqw0SPVFwm1McLR4aTDfDYYFTn5wpR2ahrJT3ynrZlBWkPADGnhMsT2vhui4DW7EVlahihARH8CCDE1fkKC0cAsiRr8f3wbsHJEBDErN9XX2JLUA0tP5pRLL/ipoZAU67fFKAAFYbfihbe5eC0hGU1EUcmhT/jXA5cVoxy7uFdwoJ7wXAc4v5nnSwnnlZA4Nm1CqyLmLpeE8eP98NtbpC6KDLz5k6YDqiZVupsItRb/OZOft9YVI0oJl2EeDJSlDRHyJ51x1cSG6c+PjJnpeAdpkkKd+wOqjQZ8VvrACS3PCcdcmpc2HHa1QcqfdcdnpxCYwiQdAcdJygHjYdkxi8/TfO6IO5Np2RzbxfuKkv5XbqTqCSRAY+rkWmCYQ3Eh1vRruV1pQzQb/UxIBBpBjsivsfeGcAQRj2OakInKaSOIGkdkn1kc8wcOkjVE+KfvmZxFyb2zWnHAHMKpdGEZt2npwQ8Q1mwxlvzMScUgIC+mzBapVGW/kadyXl72wlY0mDjmGxT8/wJfFqgTBJlT4nPO5MEjUmzO3Q4/yws3ZWsGs2F9a4o6l4jZ5CxLQL/9gW0juHABPk8RC3NM+5c+tKzqTd3O3JULs0RtTjtLC2RU2nMgZwTgE3ZU0h5ATfmcAMJ6krIqaMCkI00uBRu+YPmEdetZWnE+FXWcHID7XhZFSDZccKMMp6cVLk5MKBRAU70TA/Z+focvcTc+ubGJHwYIwZ2UJVOJSpTgX6xeQPqhUjyM712VDzA6JVcguPgdxmiYU6maA0AaCgpRs4uHptV22ao2+bervjsjkjDKEjNBqakusYpCV7Ysi2XCUHq05kRKzPRatNCe0wcmZsLv7ACgfrBZ7WSKdR5XlZa8UTZwdp3swB68X8A87a8umjuAAA="}}
</script>
<script type="__bundler/ext_resources">
[]
</script>
<script type="__bundler/template">
"<!DOCTYPE html>\n<html><head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<script src=\"cc68a18c-d0b6-49de-bda8-404c6afcc954\"><\u002Fscript>\n<\u002Fhead>\n<body>\n<x-dc>\n\n<helmet>\n <style>\n html, body { margin: 0; padding: 0; height: 100%; background: #0b0c0f; }\n * { box-sizing: border-box; }\n ::-webkit-scrollbar { width: 8px; height: 8px; }\n ::-webkit-scrollbar-thumb { background: #2c313b; border-radius: 5px; }\n ::-webkit-scrollbar-track { background: transparent; }\n <\u002Fstyle>\n \n<\u002Fhelmet>\n\n<div style=\"width:100%;height:100vh;background:#0F1115;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;color:#EDE8E0;font-size:13px;overflow:hidden;\">\n\n <div style=\"flex:1;min-height:0;display:flex;padding:14px;gap:0;\">\n\n <!-- ================= SIDEBAR ================= -->\n <div style=\"width:216px;flex-shrink:0;background:#1E222A;border-radius:14px 0 0 14px;border:1px solid rgba(255,255,255,0.04);border-right:none;padding:16px 0;display:flex;flex-direction:column;overflow-y:auto;\">\n\n <div style=\"display:flex;align-items:center;gap:8px;padding:0 16px;margin-bottom:18px;\">\n <div style=\"width:26px;height:26px;border-radius:8px;background:linear-gradient(145deg,#c1673c,#8b4a2c);display:flex;align-items:center;justify-content:center;color:#1a1611;font-weight:800;font-size:13px;flex-shrink:0;\">W<\u002Fdiv>\n <span style=\"font-weight:700;font-size:14px;color:#EDE8E0;\">Wherry<\u002Fspan>\n <\u002Fdiv>\n\n <div style=\"padding:0 16px;font-size:10.5px;font-weight:700;color:#6e6a63;letter-spacing:0.04em;margin-bottom:4px;\">QUICK ACCESS<\u002Fdiv>\n\n <div onclick=\"{{ qaClick_Home }}\" style=\"display:flex;align-items:center;gap:10px;height:30px;margin:1px 26px 1px 12px;padding:0 10px;border-radius:6px;cursor:pointer;color:#EDE8E0;background:{{ qaBg_Home }};\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:{{ qaColor_Home }};\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M2 12.204c0-2.289 0-3.433.52-4.381c.518-.949 1.467-1.537 3.364-2.715l2-1.241C9.889 2.622 10.892 2 12 2s2.11.622 4.116 1.867l2 1.241c1.897 1.178 2.846 1.766 3.365 2.715S22 9.915 22 12.203v1.522c0 3.9 0 5.851-1.172 7.063S17.771 22 14 22h-4c-3.771 0-5.657 0-6.828-1.212S2 17.626 2 13.725z\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" d=\"M11.25 18a.75.75 0 0 0 1.5 0v-3a.75.75 0 0 0-1.5 0z\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <span style=\"font-size:12.5px;\">Home<\u002Fspan>\n <\u002Fdiv>\n <div onclick=\"{{ qaClick_Desktop }}\" style=\"display:flex;align-items:center;gap:10px;height:30px;margin:1px 26px 1px 12px;padding:0 10px;border-radius:6px;cursor:pointer;color:#EDE8E0;background:{{ qaBg_Desktop }};\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:{{ qaColor_Desktop }};\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M10 2h4c3.771 0 5.657 0 6.828 1.172S22 6.229 22 10v1c0 .552 0 1.55-.006 2H2.007C2 12.55 2 11.552 2 11v-1c0-3.771 0-5.657 1.172-6.828S6.229 2 10 2\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" d=\"M7.985 17.5c-2.84 0-4.26 0-5.141-.879C2.272 16.052 2.07 15.258 2 14v-1h20v1c-.07 1.258-.272 2.052-.844 2.621c-.882.879-2.301.879-5.14.879h-3.263v4h3.262c.416 0 .753.336.753.75s-.337.75-.753.75h-8.03a.75.75 0 0 1-.753-.75c0-.414.337-.75.753-.75h3.262v-4z\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <span style=\"font-size:12.5px;\">Desktop<\u002Fspan>\n <\u002Fdiv>\n <div onclick=\"{{ qaClick_Documents }}\" style=\"display:flex;align-items:center;gap:10px;height:30px;margin:1px 26px 1px 12px;padding:0 10px;border-radius:6px;cursor:pointer;color:#EDE8E0;background:{{ qaBg_Documents }};\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:{{ qaColor_Documents }};\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M3 10c0-3.771 0-5.657 1.172-6.828S7.229 2 11 2h2c3.771 0 5.657 0 6.828 1.172S21 6.229 21 10v4c0 3.771 0 5.657-1.172 6.828S16.771 22 13 22h-2c-3.771 0-5.657 0-6.828-1.172S3 17.771 3 14z\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M7.25 12a.75.75 0 0 1 .75-.75h8a.75.75 0 0 1 0 1.5H8a.75.75 0 0 1-.75-.75m0-4A.75.75 0 0 1 8 7.25h8a.75.75 0 0 1 0 1.5H8A.75.75 0 0 1 7.25 8m0 8a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5H8a.75.75 0 0 1-.75-.75\" clip-rule=\"evenodd\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <span style=\"font-size:12.5px;\">Documents<\u002Fspan>\n <\u002Fdiv>\n <div onclick=\"{{ qaClick_Downloads }}\" style=\"display:flex;align-items:center;gap:10px;height:30px;margin:1px 26px 1px 12px;padding:0 10px;border-radius:6px;cursor:pointer;color:#EDE8E0;background:{{ qaBg_Downloads }};\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:{{ qaColor_Downloads }};\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M2 12c0-4.714 0-7.071 1.464-8.536C4.93 2 7.286 2 12 2s7.071 0 8.535 1.464C22 4.93 22 7.286 22 12s0 7.071-1.465 8.535C19.072 22 16.714 22 12 22s-7.071 0-8.536-1.465C2 19.072 2 16.714 2 12\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" d=\"M12.75 7a.75.75 0 0 0-1.5 0v5.19l-1.72-1.72a.75.75 0 0 0-1.06 1.06l3 3a.75.75 0 0 0 1.06 0l3-3a.75.75 0 1 0-1.06-1.06l-1.72 1.72zM8 16.25a.75.75 0 0 0 0 1.5h8a.75.75 0 0 0 0-1.5z\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <span style=\"font-size:12.5px;\">Downloads<\u002Fspan>\n <\u002Fdiv>\n <div onclick=\"{{ qaClick_Pictures }}\" style=\"display:flex;align-items:center;gap:10px;height:30px;margin:1px 26px 1px 12px;padding:0 10px;border-radius:6px;cursor:pointer;color:#EDE8E0;background:{{ qaBg_Pictures }};\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:{{ qaColor_Pictures }};\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M18 8a2 2 0 1 1-4 0a2 2 0 0 1 4 0\"><\u002Fpath><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M11.943 1.25h.114c2.309 0 4.118 0 5.53.19c1.444.194 2.584.6 3.479 1.494c.895.895 1.3 2.035 1.494 3.48c.19 1.411.19 3.22.19 5.529v.088c0 1.909 0 3.471-.104 4.743c-.104 1.28-.317 2.347-.795 3.235q-.314.586-.785 1.057c-.895.895-2.035 1.3-3.48 1.494c-1.411.19-3.22.19-5.529.19h-.114c-2.309 0-4.118 0-5.53-.19c-1.444-.194-2.584-.6-3.479-1.494c-.793-.793-1.203-1.78-1.42-3.006c-.215-1.203-.254-2.7-.262-4.558Q1.25 12.792 1.25 12v-.058c0-2.309 0-4.118.19-5.53c.194-1.444.6-2.584 1.494-3.479c.895-.895 2.035-1.3 3.48-1.494c1.411-.19 3.22-.19 5.529-.19\" clip-rule=\"evenodd\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" d=\"m20.607 19.146l-2.83-2.547a3 3 0 0 0-3.732-.225l-.299.21a2 2 0 0 1-2.564-.222l-4.29-4.29a2.3 2.3 0 0 0-3.14-.104l-1.002.876l.002.65c.008 1.875.05 3.247.238 4.304c.185 1.035.498 1.7 1.005 2.207c.57.57 1.34.897 2.619 1.069c1.3.174 3.008.176 5.386.176s4.087-.002 5.387-.176c1.278-.172 2.049-.5 2.618-1.069a3 3 0 0 0 .602-.859\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <span style=\"font-size:12.5px;\">Pictures<\u002Fspan>\n <\u002Fdiv>\n <div onclick=\"{{ qaClick_Music }}\" style=\"display:flex;align-items:center;gap:10px;height:30px;margin:1px 26px 1px 12px;padding:0 10px;border-radius:6px;cursor:pointer;color:#EDE8E0;background:{{ qaBg_Music }};\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:{{ qaColor_Music }};\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M14.319 2.505A2.75 2.75 0 0 0 11.414 4.3c-.098.27-.132.563-.148.869A17 17 0 0 0 11.25 6v8.536A4.75 4.75 0 1 0 12.75 18V9.21q.156.083.343.175L15.8 10.74c.418.21.759.38 1.038.5c.281.123.558.223.843.257A2.75 2.75 0 0 0 20.586 9.7c.098-.27.132-.563.148-.87c.016-.303.016-.683.016-1.151v-.083c0-.348 0-.62-.049-.878a2.75 2.75 0 0 0-1.03-1.667c-.21-.16-.453-.281-.764-.436L16.2 3.262a22 22 0 0 0-1.038-.501c-.28-.123-.558-.223-.843-.256\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <span style=\"font-size:12.5px;\">Music<\u002Fspan>\n <\u002Fdiv>\n <div onclick=\"{{ qaClick_Videos }}\" style=\"display:flex;align-items:center;gap:10px;height:30px;margin:1px 26px 1px 12px;padding:0 10px;border-radius:6px;cursor:pointer;color:#EDE8E0;background:{{ qaBg_Videos }};\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:{{ qaColor_Videos }};\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"m17 9.5l.658-.329c1.946-.973 2.92-1.46 3.63-1.02c.712.44.712 1.528.712 3.703v.292c0 2.176 0 3.263-.711 3.703c-.712.44-1.685-.047-3.63-1.02L17 14.5z\"><\u002Fpath><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M2.908 5.462C2 6.57 2 8.212 2 11.5v1c0 3.287 0 4.931.908 6.038a4 4 0 0 0 .554.554C4.57 20 6.212 20 9.5 20c3.287 0 4.931 0 6.038-.908q.304-.25.554-.554C17 17.43 17 15.788 17 12.5v-1c0-3.287 0-4.931-.908-6.038a4 4 0 0 0-.554-.554C14.43 4 12.788 4 9.5 4c-3.287 0-4.931 0-6.038.908a4 4 0 0 0-.554.554\" clip-rule=\"evenodd\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" d=\"M14 8.5a1.5 1.5 0 1 1-3 0a1.5 1.5 0 0 1 3 0\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <span style=\"font-size:12.5px;\">Videos<\u002Fspan>\n <\u002Fdiv>\n\n <div style=\"height:1px;background:#282b32;margin:12px 8px;\"><\u002Fdiv>\n <div style=\"padding:0 16px;font-size:10.5px;font-weight:700;color:#6e6a63;letter-spacing:0.04em;margin-bottom:4px;\">DRIVES<\u002Fdiv>\n <div onclick=\"{{ qaClick_Root }}\" style=\"display:flex;align-items:center;gap:10px;height:30px;margin:1px 26px 1px 12px;padding:0 10px;border-radius:6px;cursor:pointer;color:#EDE8E0;background:{{ qaBg_Root }};\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:{{ qaColor_Root }};\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M16.5 3h-9c-1.105 0-2 .53-2.5 2.118l-2.843 9.808q.067-.219.18-.397c.146-.23.333-.43.552-.584c.504-.357 1.206-.357 2.61-.357h13c1.405 0 2.107 0 2.612.357c.218.155.406.353.552.584q.12.19.188.427L19 5.118C18.5 3.529 17.604 3 16.5 3\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M5.5 13.588h13c1.404 0 2.107 0 2.611.357c.218.154.406.353.552.584q.12.19.189.426c.148.506.148 1.207.148 2.338c0 1.487 0 2.231-.337 2.765a2.1 2.1 0 0 1-.552.585C20.607 21 19.904 21 18.5 21h-13c-1.404 0-2.107 0-2.611-.357a2.1 2.1 0 0 1-.552-.585C2 19.525 2 18.781 2 17.295c0-1.1 0-1.792.136-2.294l.021-.074q.067-.219.18-.397c.146-.231.333-.43.552-.584c.504-.357 1.207-.357 2.611-.357\" clip-rule=\"evenodd\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <span style=\"font-size:12.5px;\">Macintosh HD<\u002Fspan>\n <\u002Fdiv>\n\n <div style=\"height:1px;background:#282b32;margin:12px 8px;\"><\u002Fdiv>\n <div style=\"padding:0 16px;font-size:10.5px;font-weight:700;color:#6e6a63;letter-spacing:0.04em;margin-bottom:4px;\">BOOKMARKS<\u002Fdiv>\n <div onclick=\"{{ qaClick_Bookmark }}\" style=\"display:flex;align-items:center;gap:10px;height:30px;margin:1px 26px 1px 12px;padding:0 10px;border-radius:6px;cursor:pointer;color:#EDE8E0;background:{{ qaBg_Bookmark }};\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:{{ qaColor_Bookmark }};\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M18.483 16.767A8.5 8.5 0 0 1 8.118 7.081a1 1 0 0 1-.113.097c-.28.213-.63.292-1.33.45l-.635.144c-2.46.557-3.69.835-3.983 1.776c-.292.94.546 1.921 2.223 3.882l.434.507c.476.557.715.836.822 1.18c.107.345.071.717-.001 1.46l-.066.677c-.253 2.617-.38 3.925.386 4.506s1.918.052 4.22-1.009l.597-.274c.654-.302.981-.452 1.328-.452s.674.15 1.329.452l.595.274c2.303 1.06 3.455 1.59 4.22 1.01c.767-.582.64-1.89.387-4.507z\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <span style=\"font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\">client-site<\u002Fspan>\n <\u002Fdiv>\n\n <div style=\"flex:1;\"><\u002Fdiv>\n <div style=\"padding:0 16px;font-size:10px;color:#4d5058;\">Wherry v0.4 · new shell concept<\u002Fdiv>\n <\u002Fdiv>\n\n <!-- ================= CONTENT CARD ================= -->\n <div style=\"flex:1;min-width:0;margin-left:-16px;background:#14161B;border-radius:{{ contentRadius }};box-shadow:0 12px 32px rgba(0,0,0,0.45),inset 0 1px 0 rgba(255,255,255,0.06);display:flex;flex-direction:column;overflow:hidden;position:relative;z-index:1;transition:border-radius 0.22s ease;\">\n\n <!-- toolbar -->\n <div style=\"height:52px;flex-shrink:0;display:flex;align-items:center;gap:8px;padding:0 16px;border-bottom:1px solid #24262d;\">\n <button type=\"button\" style=\"display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 14px;border-radius:8px;border:none;background:rgba(193,103,60,0.14);color:#EDE8E0;font-size:12.5px;font-weight:600;cursor:pointer;\">\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12S6.477 2 12 2s10 4.477 10 10\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" d=\"M12.75 9a.75.75 0 0 0-1.5 0v2.25H9a.75.75 0 0 0 0 1.5h2.25V15a.75.75 0 0 0 1.5 0v-2.25H15a.75.75 0 0 0 0-1.5h-2.25z\"><\u002Fpath><\u002Fsvg>\n New Connection\n <\u002Fbutton>\n <div style=\"width:1px;height:22px;background:#282b32;\"><\u002Fdiv>\n <button type=\"button\" style=\"display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:8px;border:none;background:transparent;color:#EDE8E0;font-size:12.5px;cursor:pointer;\">\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M22 16v-1c0-2.829 0-4.242-.879-5.121S18.828 9 16 9H8c-2.83 0-4.243 0-5.122.88C2 10.757 2 12.17 2 14.998V16c0 2.828 0 4.242.879 5.121C3.757 22 5.172 22 8 22h8c2.828 0 4.243 0 5.121-.879S22 18.828 22 16\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M12 15.75a.75.75 0 0 0 .75-.75V4.027l1.68 1.961a.75.75 0 1 0 1.14-.976l-3-3.5a.75.75 0 0 0-1.14 0l-3 3.5a.75.75 0 1 0 1.14.976l1.68-1.96V15c0 .414.336.75.75.75\" clip-rule=\"evenodd\"><\u002Fpath><\u002Fsvg>\n Upload\n <\u002Fbutton>\n <button type=\"button\" style=\"display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:8px;border:none;background:transparent;color:#EDE8E0;font-size:12.5px;cursor:pointer;\">\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M22 16v-1c0-2.828 0-4.242-.879-5.12C20.242 9 18.828 9 16 9H8c-2.829 0-4.243 0-5.122.88C2 10.757 2 12.17 2 14.997V16c0 2.829 0 4.243.879 5.122C3.757 22 5.172 22 8 22h8c2.828 0 4.243 0 5.121-.878C22 20.242 22 18.829 22 16\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M12 1.25a.75.75 0 0 0-.75.75v10.973l-1.68-1.961a.75.75 0 1 0-1.14.976l3 3.5a.75.75 0 0 0 1.14 0l3-3.5a.75.75 0 1 0-1.14-.976l-1.68 1.96V2a.75.75 0 0 0-.75-.75\" clip-rule=\"evenodd\"><\u002Fpath><\u002Fsvg>\n Download\n <\u002Fbutton>\n <div style=\"width:1px;height:22px;background:#282b32;\"><\u002Fdiv>\n <button type=\"button\" onclick=\"{{ toggleQueue }}\" style=\"display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:8px;border:none;color:{{ queueBtnColor }};background:{{ queueBtnBg }};font-size:12.5px;cursor:pointer;\">\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2S2 6.477 2 12s4.477 10 10 10\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M12 7.25a.75.75 0 0 1 .75.75v3.69l2.28 2.28a.75.75 0 1 1-1.06 1.06l-2.5-2.5a.75.75 0 0 1-.22-.53V8a.75.75 0 0 1 .75-.75\" clip-rule=\"evenodd\"><\u002Fpath><\u002Fsvg>\n <span>Queue {{ queueCountLabel }}<\u002Fspan>\n <\u002Fbutton>\n <div style=\"width:1px;height:22px;background:#282b32;\"><\u002Fdiv>\n <button type=\"button\" title=\"Refresh\" style=\"width:32px;height:32px;border-radius:8px;border:none;background:transparent;color:#a7adb5;cursor:pointer;display:flex;align-items:center;justify-content:center;\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M12.079 2.25c-4.794 0-8.734 3.663-9.118 8.333H2a.75.75 0 0 0-.528 1.283l1.68 1.666a.75.75 0 0 0 1.056 0l1.68-1.666a.75.75 0 0 0-.528-1.283h-.893c.38-3.831 3.638-6.833 7.612-6.833a7.66 7.66 0 0 1 6.537 3.643a.75.75 0 1 0 1.277-.786A9.16 9.16 0 0 0 12.08 2.25\"><\u002Fpath><path fill=\"currentColor\" d=\"M20.841 10.467a.75.75 0 0 0-1.054 0L18.1 12.133a.75.75 0 0 0 .527 1.284h.899c-.381 3.83-3.651 6.833-7.644 6.833a7.7 7.7 0 0 1-6.565-3.644a.75.75 0 1 0-1.276.788a9.2 9.2 0 0 0 7.84 4.356c4.809 0 8.766-3.66 9.151-8.333H22a.75.75 0 0 0 .527-1.284z\" opacity=\".5\"><\u002Fpath><\u002Fsvg>\n <\u002Fbutton>\n <button type=\"button\" title=\"Delete\" disabled=\"{{ noSelection }}\" style=\"width:32px;height:32px;border-radius:8px;border:none;background:transparent;color:{{ deleteBtnColor }};cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:{{ deleteBtnOpacity }};\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M3 6.524c0-.395.327-.714.73-.714h4.788c.006-.842.098-1.995.932-2.793A3.68 3.68 0 0 1 12 2a3.68 3.68 0 0 1 2.55 1.017c.834.798.926 1.951.932 2.793h4.788c.403 0 .73.32.73.714a.72.72 0 0 1-.73.714H3.73A.72.72 0 0 1 3 6.524\"><\u002Fpath><path fill=\"currentColor\" d=\"M11.596 22h.808c2.783 0 4.174 0 5.08-.886c.904-.886.996-2.339 1.181-5.245l.267-4.188c.1-1.577.15-2.366-.303-2.865c-.454-.5-1.22-.5-2.753-.5H8.124c-1.533 0-2.3 0-2.753.5s-.404 1.288-.303 2.865l.267 4.188c.185 2.906.277 4.36 1.182 5.245c.905.886 2.296.886 5.079.886\" opacity=\".5\"><\u002Fpath><\u002Fsvg>\n <\u002Fbutton>\n <div style=\"flex:1;\"><\u002Fdiv>\n <button type=\"button\" title=\"Settings\" style=\"width:32px;height:32px;border-radius:8px;border:none;background:transparent;color:#a7adb5;cursor:pointer;display:flex;align-items:center;justify-content:center;\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M14.279 2.152C13.909 2 13.439 2 12.5 2s-1.408 0-1.779.152a2 2 0 0 0-1.09 1.083c-.094.223-.13.484-.145.863a1.62 1.62 0 0 1-.796 1.353a1.64 1.64 0 0 1-1.579.008c-.338-.178-.583-.276-.825-.308a2.03 2.03 0 0 0-1.49.396c-.318.242-.553.646-1.022 1.453c-.47.807-.704 1.21-.757 1.605c-.07.526.074 1.058.4 1.479c.148.192.357.353.68.555c.477.297.783.803.783 1.361s-.306 1.064-.782 1.36c-.324.203-.533.364-.682.556a2 2 0 0 0-.399 1.479c.053.394.287.798.757 1.605s.704 1.21 1.022 1.453c.424.323.96.465 1.49.396c.242-.032.487-.13.825-.308a1.64 1.64 0 0 1 1.58.008c.486.28.774.795.795 1.353c.015.38.051.64.145.863c.204.49.596.88 1.09 1.083c.37.152.84.152 1.779.152s1.409 0 1.779-.152a2 2 0 0 0 1.09-1.083c.094-.223.13-.483.145-.863c.02-.558.309-1.074.796-1.353a1.64 1.64 0 0 1 1.579-.008c.338.178.583.276.825.308c.53.07 1.066-.073 1.49-.396c.318-.242.553-.646 1.022-1.453c.47-.807.704-1.21.757-1.605a2 2 0 0 0-.4-1.479c-.148-.192-.357-.353-.68-.555c-.477-.297-.783-.803-.783-1.361s.306-1.064.782-1.36c.324-.203.533-.364.682-.556a2 2 0 0 0 .399-1.479c-.053-.394-.287-.798-.757-1.605s-.704-1.21-1.022-1.453a2.03 2.03 0 0 0-1.49-.396c-.242.032-.487.13-.825.308a1.64 1.64 0 0 1-1.58-.008a1.62 1.62 0 0 1-.795-1.353c-.015-.38-.051-.64-.145-.863a2 2 0 0 0-1.09-1.083\" clip-rule=\"evenodd\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" d=\"M15.523 12c0 1.657-1.354 3-3.023 3s-3.023-1.343-3.023-3S10.83 9 12.5 9s3.023 1.343 3.023 3\"><\u002Fpath><\u002Fsvg>\n <\u002Fbutton>\n <\u002Fdiv>\n\n <!-- tab bar -->\n <div style=\"height:36px;flex-shrink:0;display:flex;align-items:stretch;background:#191b21;border-bottom:1px solid #24262d;overflow-x:auto;\">\n <button type=\"button\" onclick=\"{{ tabClick_local }}\" style=\"display:flex;align-items:center;gap:6px;padding:0 16px;border:none;border-right:1px solid #24262d;background:{{ tabBg_local }};color:{{ tabColor_local }};font-size:12px;cursor:pointer;white-space:nowrap;\">Local<\u002Fbutton>\n <button type=\"button\" onclick=\"{{ tabClick_t1 }}\" style=\"display:flex;align-items:center;gap:7px;padding:0 16px;border:none;border-right:1px solid #24262d;background:{{ tabBg_t1 }};color:{{ tabColor_t1 }};font-size:12px;cursor:pointer;white-space:nowrap;\">\n <span style=\"color:#7a9471;font-size:9px;\">●<\u002Fspan>prod-server\n <\u002Fbutton>\n <button type=\"button\" onclick=\"{{ tabClick_t2 }}\" style=\"display:flex;align-items:center;gap:7px;padding:0 16px;border:none;border-right:1px solid #24262d;background:{{ tabBg_t2 }};color:{{ tabColor_t2 }};font-size:12px;cursor:pointer;white-space:nowrap;\">\n <span style=\"color:#d9a441;font-size:9px;\">◐<\u002Fspan>staging\n <\u002Fbutton>\n <button type=\"button\" onclick=\"{{ tabClick_t3 }}\" style=\"display:flex;align-items:center;gap:7px;padding:0 16px;border:none;border-right:1px solid #24262d;background:{{ tabBg_t3 }};color:{{ tabColor_t3 }};font-size:12px;cursor:pointer;white-space:nowrap;\">\n <span style=\"color:#b3523e;font-size:9px;\">×<\u002Fspan>backup-host\n <\u002Fbutton>\n <\u002Fdiv>\n\n <!-- path bar -->\n <div style=\"height:32px;flex-shrink:0;display:flex;align-items:center;gap:8px;padding:0 16px;background:#0F1115;border-bottom:1px solid #24262d;\">\n <span style=\"font-size:10.5px;font-weight:700;color:#8b9099;flex-shrink:0;\">{{ paneLabel }}<\u002Fspan>\n <div style=\"display:flex;align-items:center;gap:2px;overflow:hidden;flex:1;min-width:0;color:#8b9099;font-size:12px;\">{{ pathDisplay }}<\u002Fdiv>\n <span style=\"font-size:10.5px;color:#6e6a63;flex-shrink:0;\">{{ entryCountLabel }}<\u002Fspan>\n <\u002Fdiv>\n\n <!-- file table -->\n <sc-if value=\"{{ showEmptyState }}\" hint-placeholder-val=\"{{ false }}\">\n <div style=\"flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:#6e6a63;font-size:12.5px;\">\n <div class=\"spinner\" style=\"width:16px;height:16px;border-radius:50%;border:2px solid rgba(237,232,224,0.14);border-top-color:#d9a441;animation:spin 0.7s linear infinite;\"><\u002Fdiv>\n <span>{{ emptyStateMessage }}<\u002Fspan>\n <\u002Fdiv>\n <\u002Fsc-if>\n <sc-if value=\"{{ showTable }}\" hint-placeholder-val=\"{{ true }}\">\n <div style=\"flex:1;min-height:0;display:flex;flex-direction:column;\">\n <div style=\"display:grid;grid-template-columns:1fr 140px 70px 90px;align-items:center;height:26px;padding:0 16px;background:#121318;border-bottom:1px solid #24262d;flex-shrink:0;\">\n <button type=\"button\" onclick=\"{{ sortClick_name }}\" style=\"border:none;background:transparent;color:{{ sortColor_name }};font-size:10.5px;font-weight:700;text-align:left;cursor:pointer;justify-self:start;padding:0;\">Name{{ sortArrow_name }}<\u002Fbutton>\n <button type=\"button\" onclick=\"{{ sortClick_modified }}\" style=\"border:none;background:transparent;color:{{ sortColor_modified }};font-size:10.5px;font-weight:700;text-align:right;cursor:pointer;justify-self:end;padding:0;\">Modified{{ sortArrow_modified }}<\u002Fbutton>\n <button type=\"button\" onclick=\"{{ sortClick_kind }}\" style=\"border:none;background:transparent;color:{{ sortColor_kind }};font-size:10.5px;font-weight:700;text-align:right;cursor:pointer;justify-self:end;padding:0;\">Type{{ sortArrow_kind }}<\u002Fbutton>\n <button type=\"button\" onclick=\"{{ sortClick_size }}\" style=\"border:none;background:transparent;color:{{ sortColor_size }};font-size:10.5px;font-weight:700;text-align:right;cursor:pointer;justify-self:end;padding:0;\">Size{{ sortArrow_size }}<\u002Fbutton>\n <\u002Fdiv>\n <div style=\"flex:1;min-height:0;overflow-y:auto;padding:4px 0;\">\n <sc-for list=\"{{ rows }}\" as=\"row\" hint-placeholder-count=\"6\">\n <div onclick=\"{{ row.onSelect }}\" ondoubleclick=\"{{ row.onOpen }}\" style=\"display:grid;grid-template-columns:1fr 140px 70px 90px;align-items:center;height:32px;padding:0 16px;margin:0 8px;border-radius:7px;cursor:default;background:{{ row.rowBg }};\">\n <div style=\"display:flex;align-items:center;gap:8px;min-width:0;\">\n <sc-if value=\"{{ row.isDir }}\" hint-placeholder-val=\"{{ false }}\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:#d9a441;\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M22 14v-2.202c0-2.632 0-3.949-.77-4.804a3 3 0 0 0-.224-.225C20.151 6 18.834 6 16.202 6h-.374c-1.153 0-1.73 0-2.268-.153a4 4 0 0 1-.848-.352C12.224 5.224 11.816 4.815 11 4l-.55-.55c-.274-.274-.41-.41-.554-.53a4 4 0 0 0-2.18-.903C7.53 2 7.336 2 6.95 2c-.883 0-1.324 0-1.692.07A4 4 0 0 0 2.07 5.257C2 5.626 2 6.068 2 6.95V14c0 3.771 0 5.657 1.172 6.828S6.229 22 10 22h4c3.771 0 5.657 0 6.828-1.172S22 17.771 22 14\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" d=\"M12.25 10a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <\u002Fsc-if>\n <sc-if value=\"{{ row.isCode }}\" hint-placeholder-val=\"{{ false }}\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:#8b9099;\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M16.443 7.328a.75.75 0 0 1 1.059-.056l1.737 1.564c.737.663 1.347 1.212 1.767 1.71c.44.525.754 1.088.754 1.784c0 .695-.313 1.258-.754 1.782c-.42.499-1.03 1.049-1.767 1.711l-1.737 1.564a.75.75 0 1 1-1.004-1.115l1.697-1.527c.788-.709 1.319-1.19 1.663-1.598c.33-.393.402-.622.402-.817c0-.196-.072-.425-.402-.818c-.344-.409-.875-.889-1.663-1.598l-1.697-1.527a.75.75 0 0 1-.056-1.06m-8.94 1.06a.75.75 0 0 0-1.004-1.115L4.761 8.836c-.737.663-1.347 1.212-1.767 1.71c-.44.525-.754 1.088-.754 1.784c0 .695.313 1.258.754 1.782c.42.499 1.03 1.049 1.767 1.711l1.737 1.564a.75.75 0 1 0 1.004-1.115l-1.697-1.527c-.788-.709-1.319-1.19-1.663-1.598c-.33-.393-.402-.622-.402-.817c0-.196.072-.425.402-.818c.344-.409.875-.889 1.663-1.598z\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <\u002Fsc-if>\n <sc-if value=\"{{ row.isDoc }}\" hint-placeholder-val=\"{{ false }}\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:#8b9099;\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M3 10c0-3.771 0-5.657 1.172-6.828S7.229 2 11 2h2c3.771 0 5.657 0 6.828 1.172S21 6.229 21 10v4c0 3.771 0 5.657-1.172 6.828S16.771 22 13 22h-2c-3.771 0-5.657 0-6.828-1.172S3 17.771 3 14z\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M7.25 12a.75.75 0 0 1 .75-.75h8a.75.75 0 0 1 0 1.5H8a.75.75 0 0 1-.75-.75m0-4A.75.75 0 0 1 8 7.25h8a.75.75 0 0 1 0 1.5H8A.75.75 0 0 1 7.25 8m0 8a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5H8a.75.75 0 0 1-.75-.75\" clip-rule=\"evenodd\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <\u002Fsc-if>\n <span style=\"font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#EDE8E0;\">{{ row.name }}<\u002Fspan>\n <\u002Fdiv>\n <div style=\"font-size:10.5px;color:#6e6a63;text-align:right;font-family:ui-monospace,Menlo,monospace;\">{{ row.modifiedStr }}<\u002Fdiv>\n <div style=\"font-size:11px;color:#8b9099;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\">{{ row.typeLabel }}<\u002Fdiv>\n <div style=\"font-size:11px;color:#8b9099;text-align:right;font-family:ui-monospace,Menlo,monospace;\">{{ row.sizeStr }}<\u002Fdiv>\n <\u002Fdiv>\n <\u002Fsc-for>\n <\u002Fdiv>\n <\u002Fdiv>\n <\u002Fsc-if>\n\n <!-- footer -->\n <div style=\"height:28px;flex-shrink:0;display:flex;align-items:center;gap:8px;padding:0 8px 0 16px;background:#191b21;border-top:1px solid #24262d;color:#8b9099;font-size:11px;\">\n <span>{{ footerSelectionLabel }}<\u002Fspan>\n <\u002Fdiv>\n\n <!-- queue panel -->\n <div style=\"flex-shrink:0;background:#101116;border-top:1px solid #24262d;overflow:hidden;height:{{ queueHeight }};transition:height 0.18s cubic-bezier(0.16,1,0.3,1);\">\n <div onclick=\"{{ toggleQueue }}\" style=\"height:34px;flex-shrink:0;display:flex;align-items:center;gap:8px;padding:0 16px;cursor:pointer;\">\n <span style=\"width:13px;height:13px;color:#8b9099;\">{{ queueChevron }}<\u002Fspan>\n <span style=\"font-size:11.5px;font-weight:600;color:#EDE8E0;\">Transfer Queue · {{ queueTaskCount }}<\u002Fspan>\n <div style=\"margin-left:auto;font-size:11px;color:#8b9099;\">{{ queueAggLabel }}<\u002Fdiv>\n <\u002Fdiv>\n <div style=\"overflow-y:auto;height:calc({{ queueHeight }} - 34px);padding:2px 0;\">\n <sc-for list=\"{{ queueRows }}\" as=\"task\" hint-placeholder-count=\"2\">\n <div style=\"display:flex;align-items:center;gap:10px;height:36px;padding:0 16px;\">\n <sc-if value=\"{{ task.isUpload }}\" hint-placeholder-val=\"{{ true }}\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:#c1673c;\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M22 16v-1c0-2.829 0-4.242-.879-5.121S18.828 9 16 9H8c-2.83 0-4.243 0-5.122.88C2 10.757 2 12.17 2 14.998V16c0 2.828 0 4.242.879 5.121C3.757 22 5.172 22 8 22h8c2.828 0 4.243 0 5.121-.879S22 18.828 22 16\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M12 15.75a.75.75 0 0 0 .75-.75V4.027l1.68 1.961a.75.75 0 1 0 1.14-.976l-3-3.5a.75.75 0 0 0-1.14 0l-3 3.5a.75.75 0 1 0 1.14.976l1.68-1.96V15c0 .414.336.75.75.75\" clip-rule=\"evenodd\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <\u002Fsc-if>\n <sc-if value=\"{{ task.isDownload }}\" hint-placeholder-val=\"{{ false }}\">\n <span style=\"width:15px;height:15px;flex-shrink:0;color:#7a9471;\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M22 16v-1c0-2.828 0-4.242-.879-5.12C20.242 9 18.828 9 16 9H8c-2.829 0-4.243 0-5.122.88C2 10.757 2 12.17 2 14.997V16c0 2.829 0 4.243.879 5.122C3.757 22 5.172 22 8 22h8c2.828 0 4.243 0 5.121-.878C22 20.242 22 18.829 22 16\" opacity=\".5\"><\u002Fpath><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M12 1.25a.75.75 0 0 0-.75.75v10.973l-1.68-1.961a.75.75 0 1 0-1.14.976l3 3.5a.75.75 0 0 0 1.14 0l3-3.5a.75.75 0 1 0-1.14-.976l-1.68 1.96V2a.75.75 0 0 0-.75-.75\" clip-rule=\"evenodd\"><\u002Fpath><\u002Fsvg><\u002Fspan>\n <\u002Fsc-if>\n <span style=\"width:150px;flex-shrink:0;font-size:12px;color:#EDE8E0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\">{{ task.fileName }}<\u002Fspan>\n <div style=\"flex:1;height:6px;border-radius:3px;background:rgba(255,255,255,0.06);overflow:hidden;\">\n <div style=\"height:100%;border-radius:3px;background:{{ task.barColor }};width:{{ task.pctWidth }};\"><\u002Fdiv>\n <\u002Fdiv>\n <span style=\"width:38px;flex-shrink:0;text-align:right;font-size:11px;color:#8b9099;font-family:ui-monospace,Menlo,monospace;\">{{ task.pctStr }}<\u002Fspan>\n <span style=\"flex-shrink:0;min-width:90px;text-align:right;font-size:10.5px;color:{{ task.stateColor }};\">{{ task.stateText }}<\u002Fspan>\n <\u002Fdiv>\n <\u002Fsc-for>\n <\u002Fdiv>\n <\u002Fdiv>\n\n <!-- status bar -->\n <div style=\"height:28px;flex-shrink:0;display:flex;align-items:center;gap:10px;padding:0 16px;background:#0F1115;border-top:1px solid #24262d;font-size:11px;color:#8b9099;\">\n <span>{{ statusMessage }}<\u002Fspan>\n <div style=\"margin-left:auto;display:flex;align-items:center;gap:10px;\">\n <span style=\"color:#7a9471;font-family:ui-monospace,Menlo,monospace;\">{{ statusSpeed }}<\u002Fspan>\n <span style=\"color:{{ statusConnColor }};\">{{ statusConnLabel }}<\u002Fspan>\n <\u002Fdiv>\n <\u002Fdiv>\n <\u002Fdiv>\n <\u002Fdiv>\n\n\n<\u002Fdiv>\n\n<\u002Fx-dc>\n<script type=\"text/x-dc\" data-dc-script=\"\">\nconst QUICK_PATHS = {\n Home: \"/Users/dev\",\n Desktop: \"/Users/dev/Desktop\",\n Documents: \"/Users/dev/Documents\",\n Downloads: \"/Users/dev/Downloads\",\n Pictures: \"/Users/dev/Pictures\",\n Music: \"/Users/dev/Music\",\n Videos: \"/Users/dev/Videos\",\n Root: \"/\",\n Bookmark: \"/var/www/client-site\",\n};\n\nconst LOCAL_ENTRIES = [\n { name: \"src\", kind: \"dir\", modified: \"Jul 6, 14:02\", size: null },\n { name: \"docs\", kind: \"dir\", modified: \"Jul 3, 09:41\", size: null },\n { name: \"target\", kind: \"dir\", modified: \"Jul 6, 13:55\", size: null },\n { name: \"Cargo.toml\", kind: \"code\", modified: \"Jul 5, 18:20\", size: 2148 },\n { name: \"Cargo.lock\", kind: \"code\", modified: \"Jul 5, 18:20\", size: 34816 },\n { name: \"README.md\", kind: \"doc\", modified: \"Jul 1, 11:03\", size: 1331 },\n { name: \".gitignore\", kind: \"code\", modified: \"Jun 20, 08:12\", size: 120 },\n];\n\nconst REMOTE_ENTRIES = {\n t1: [\n { name: \"wp-content\", kind: \"dir\", modified: \"Jul 6, 09:12\", size: null },\n { name: \"wp-admin\", kind: \"dir\", modified: \"Jun 30, 16:44\", size: null },\n { name: \"wp-includes\", kind: \"dir\", modified: \"Jun 30, 16:44\", size: null },\n { name: \"index.php\", kind: \"code\", modified: \"Jun 30, 16:44\", size: 418 },\n { name: \"wp-config.php\", kind: \"code\", modified: \"Jul 2, 10:05\", size: 3221 },\n { name: \".htaccess\", kind: \"code\", modified: \"Jun 30, 16:44\", size: 402 },\n ],\n t2: [],\n t3: [],\n};\n\nconst TABS_META = {\n local: { label: \"Local\", path: null, status: \"connected\" },\n t1: { label: \"prod-server\", path: \"/var/www/html\", status: \"connected\" },\n t2: { label: \"staging\", path: \"/var/www/html\", status: \"connecting\" },\n t3: { label: \"backup-host\", path: \"/backups\", status: \"error\" },\n};\n\nconst QUEUE_TASKS = [\n { id: 1, fileName: \"wp-config.php\", kind: \"upload\", pct: 62, state: \"running\", speed: \"1.4 MB/s\" },\n { id: 2, fileName: \"theme-assets.zip\", kind: \"download\", pct: 0, state: \"queued\" },\n { id: 3, fileName: \"logo.png\", kind: \"upload\", pct: 100, state: \"completed\" },\n { id: 4, fileName: \"old-backup.tar\", kind: \"download\", pct: 34, state: \"failed\" },\n];\n\nfunction fmtSize(bytes) {\n if (bytes === null || bytes === undefined) return \"\\u2014\";\n if (bytes < 1024) return bytes + \" B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \" KB\";\n return (bytes / (1024 * 1024)).toFixed(1) + \" MB\";\n}\n\nclass Component extends DCLogic {\n state = {\n activeQuickAccess: \"Home\",\n activeTabId: \"local\",\n sort: { col: \"name\", dir: \"asc\" },\n selectedName: null,\n showQueue: true,\n localPath: QUICK_PATHS.Home,\n now: Date.now(),\n };\n\n componentDidMount() {\n this._clockTimer = setInterval(() => this.setState({ now: Date.now() }), 1000);\n }\n\n componentWillUnmount() {\n clearInterval(this._clockTimer);\n }\n\n selectQuickAccess(name) {\n this.setState({ activeQuickAccess: name, activeTabId: \"local\", localPath: QUICK_PATHS[name], selectedName: null });\n }\n\n selectTab(id) {\n this.setState({ activeTabId: id, selectedName: null });\n }\n\n setSort(col) {\n this.setState((s) => {\n const dir = s.sort.col === col ? (s.sort.dir === \"asc\" ? \"desc\" : \"asc\") : \"asc\";\n return { sort: { col, dir } };\n });\n }\n\n selectRow(name) {\n this.setState((s) => ({ selectedName: s.selectedName === name ? null : name }));\n }\n\n toggleQueue() {\n this.setState((s) => ({ showQueue: !s.showQueue }));\n }\n\n sortEntries(entries, sort) {\n const arr = entries.slice();\n arr.sort((a, b) => {\n const aDir = a.kind === \"dir\";\n const bDir = b.kind === \"dir\";\n if (aDir !== bDir) return aDir ? -1 : 1;\n let cmp = 0;\n if (sort.col === \"size\") cmp = (a.size ?? 0) - (b.size ?? 0);\n else if (sort.col === \"kind\") cmp = a.kind.localeCompare(b.kind);\n else if (sort.col === \"modified\") cmp = a.modified.localeCompare(b.modified);\n else cmp = a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n return sort.dir === \"desc\" ? -cmp : cmp;\n });\n return arr;\n }\n\n renderVals() {\n const s = this.state;\n const activeMeta = TABS_META[s.activeTabId];\n const isLocal = s.activeTabId === \"local\";\n const connecting = activeMeta.status === \"connecting\";\n const errored = activeMeta.status === \"error\";\n const rawEntries = isLocal ? LOCAL_ENTRIES : REMOTE_ENTRIES[s.activeTabId] ?? [];\n const showEmptyState = connecting || errored || (!isLocal && rawEntries.length === 0 && !errored && !connecting ? false : (connecting || errored));\n const sorted = this.sortEntries(rawEntries, s.sort);\n\n const typeLabelFor = (k) => (k === \"dir\" ? \"Folder\" : \"File\");\n const rows = sorted.map((e) => ({\n name: e.name,\n isDir: e.kind === \"dir\",\n isCode: e.kind === \"code\",\n isDoc: e.kind === \"doc\",\n modifiedStr: e.modified,\n typeLabel: typeLabelFor(e.kind),\n sizeStr: e.kind === \"dir\" ? \"\\u2014\" : fmtSize(e.size),\n rowBg: s.selectedName === e.name ? \"rgba(193,103,60,0.16)\" : \"transparent\",\n onSelect: () => this.selectRow(e.name),\n onOpen: () => {},\n }));\n\n const sortArrow = (col) => (s.sort.col === col ? (s.sort.dir === \"asc\" ? \" \\u2191\" : \" \\u2193\") : \"\");\n const sortColor = (col) => (s.sort.col === col ? \"#c1673c\" : \"#8b9099\");\n\n const qaVals = {};\n for (const name of [\"Home\", \"Desktop\", \"Documents\", \"Downloads\", \"Pictures\", \"Music\", \"Videos\"]) {\n const active = isLocal && s.activeQuickAccess === name;\n qaVals[\"qaClick_\" + name] = () => this.selectQuickAccess(name);\n qaVals[\"qaBg_\" + name] = active ? \"rgba(193,103,60,0.14)\" : \"transparent\";\n qaVals[\"qaColor_\" + name] = active ? \"#c1673c\" : \"#a7adb5\";\n }\n const rootActive = isLocal && s.activeQuickAccess === \"Root\";\n qaVals[\"qaClick_Root\"] = () => this.selectQuickAccess(\"Root\");\n qaVals[\"qaBg_Root\"] = rootActive ? \"rgba(193,103,60,0.14)\" : \"transparent\";\n qaVals[\"qaColor_Root\"] = rootActive ? \"#c1673c\" : \"#a7adb5\";\n const bmActive = isLocal && s.activeQuickAccess === \"Bookmark\";\n qaVals[\"qaClick_Bookmark\"] = () => this.selectQuickAccess(\"Bookmark\");\n qaVals[\"qaBg_Bookmark\"] = bmActive ? \"rgba(193,103,60,0.14)\" : \"transparent\";\n qaVals[\"qaColor_Bookmark\"] = bmActive ? \"#c1673c\" : \"#a7adb5\";\n\n const tabVals = {};\n for (const id of [\"local\", \"t1\", \"t2\", \"t3\"]) {\n const active = s.activeTabId === id;\n tabVals[\"tabClick_\" + id] = () => this.selectTab(id);\n tabVals[\"tabBg_\" + id] = active ? \"#14161B\" : \"#191b21\";\n tabVals[\"tabColor_\" + id] = active ? \"#EDE8E0\" : \"#8b9099\";\n }\n\n const pendingQueue = QUEUE_TASKS.filter((t) => t.state === \"running\" || t.state === \"queued\");\n const runningSpeedTotal = QUEUE_TASKS.filter((t) => t.state === \"running\").length > 0 ? \"1.4 MB/s\" : \"\";\n\n const stateColorMap = { running: \"#c1673c\", queued: \"#8b9099\", completed: \"#7a9471\", failed: \"#b3523e\" };\n const stateTextMap = (t) => {\n if (t.state === \"running\") return t.kind === \"upload\" ? \"Uploading\" : \"Downloading\";\n if (t.state === \"queued\") return \"Queued\";\n if (t.state === \"completed\") return \"Completed\";\n if (t.state === \"failed\") return \"Failed\";\n return \"\";\n };\n const barColorMap = { running: \"#c1673c\", queued: \"rgba(255,255,255,0.12)\", completed: \"#7a9471\", failed: \"#b3523e\" };\n\n const queueRows = QUEUE_TASKS.map((t) => ({\n fileName: t.fileName,\n isUpload: t.kind === \"upload\",\n isDownload: t.kind === \"download\",\n pctWidth: t.pct + \"%\",\n pctStr: t.pct + \"%\",\n barColor: barColorMap[t.state],\n stateColor: stateColorMap[t.state],\n stateText: stateTextMap(t),\n }));\n\n const path = isLocal ? s.localPath : activeMeta.path;\n const pathDisplay = connecting ? \"Connecting\\u2026\" : errored ? \"Connection failed\" : path;\n\n let emptyStateMessage = \"\";\n if (connecting) emptyStateMessage = \"Connecting to \" + activeMeta.label + \"\\u2026\";\n if (errored) emptyStateMessage = \"Could not reach \" + activeMeta.label;\n\n const footerSelectionLabel = s.selectedName\n ? \"Selected: \" + s.selectedName\n : rows.length + \" item\" + (rows.length === 1 ? \"\" : \"s\");\n\n const clockLabel = new Date(s.now).toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" }) +\n \" \" + new Date(s.now).toLocaleDateString([], { weekday: \"short\", month: \"short\", day: \"numeric\" });\n\n return {\n clockLabel,\n ...qaVals,\n ...tabVals,\n paneLabel: isLocal ? \"LOCAL\" : \"REMOTE\",\n pathDisplay,\n entryCountLabel: showEmptyState ? \"\" : rows.length + \" items\",\n showEmptyState,\n showTable: !showEmptyState,\n emptyStateMessage,\n rows,\n noSelection: !s.selectedName,\n deleteBtnColor: s.selectedName ? \"#a7adb5\" : \"#565a62\",\n deleteBtnOpacity: s.selectedName ? \"1\" : \"0.5\",\n sortClick_name: () => this.setSort(\"name\"),\n sortClick_modified: () => this.setSort(\"modified\"),\n sortClick_kind: () => this.setSort(\"kind\"),\n sortClick_size: () => this.setSort(\"size\"),\n sortColor_name: sortColor(\"name\"),\n sortColor_modified: sortColor(\"modified\"),\n sortColor_kind: sortColor(\"kind\"),\n sortColor_size: sortColor(\"size\"),\n sortArrow_name: sortArrow(\"name\"),\n sortArrow_modified: sortArrow(\"modified\"),\n sortArrow_kind: sortArrow(\"kind\"),\n sortArrow_size: sortArrow(\"size\"),\n footerSelectionLabel,\n toggleQueue: () => this.toggleQueue(),\n queueBtnBg: s.showQueue ? \"rgba(193,103,60,0.14)\" : \"transparent\",\n queueBtnColor: s.showQueue ? \"#c1673c\" : \"#EDE8E0\",\n queueCountLabel: pendingQueue.length > 0 ? \"\\u00b7 \" + pendingQueue.length : \"\",\n queueHeight: s.showQueue ? \"192px\" : \"34px\",\n queueChevron: s.showQueue ? \"\\u25be\" : \"\\u25b4\",\n queueTaskCount: QUEUE_TASKS.length,\n queueAggLabel: runningSpeedTotal ? runningSpeedTotal : QUEUE_TASKS.filter((t) => t.state === \"completed\").length + \"/\" + QUEUE_TASKS.length + \" done\",\n queueRows,\n statusMessage: isLocal ? \"Ready\" : connecting ? \"Connecting to \" + activeMeta.label + \"\\u2026\" : errored ? \"Failed to connect to \" + activeMeta.label : \"Connected to \" + activeMeta.label,\n statusSpeed: pendingQueue.length > 0 ? \"1.4 MB/s\" : \"\",\n statusConnColor: \"#7a9471\",\n statusConnLabel: \"2/3\",\n };\n }\n}\n\n<\u002Fscript>\n\n\n<\u002Fbody><\u002Fhtml>"
</script>
</body>
</html>