{
  "version": 3,
  "sources": ["rally-organizer.jsx"],
  "sourcesContent": ["/* FACT Rallye: Organisator-Bereich (Spec 06_Planung/specs/2026-10-17-rallye-organizer-design.md §6.1)\n *\n * Root: window.RallyOrganizer({ theme, lang, userId, user, userPosition, currentCity, initialCode, onExit, onSignup })\n * Bildschirme: Übersicht, Assistent (neue Tour), Editor (+ Stations-Sheet, Fakt-Sheet),\n * Event anlegen, Event (Lobby / Live / Finale / Ergebnis je nach event.status).\n *\n * Globaler Babel-Scope: alle Top-Level-Namen beginnen mit RallyOrg / rallyOrg / RAL_ORG_.\n * Alle sichtbaren Texte über t('rally.org.*', lang) (rally-strings-org.jsx).\n *\n * Layout: Der Container aus screen-challenge.jsx scrollt selbst. Damit Sheets und Dialoge\n * (position:absolute) nicht mitscrollen, legt sich RallyOrganizer als absolute Fläche darüber\n * und scrollt in einem eigenen inneren Container.\n */\n\nconst RAL_ORG_LAST_KEY = 'fact_rally_org_last';\nconst RAL_ORG_DURATIONS = [60, 90, 120, 180];\nconst RAL_ORG_AUDIENCES = [\n  { key: 'kids', emoji: '🧒' },\n  { key: 'school', emoji: '🎒' },\n  { key: 'adults', emoji: '🧑' },\n  { key: 'jga', emoji: '🥂' },\n];\n// Vorschlagspunkte München (Namen sind Eigennamen, EN nur wo üblich übersetzt)\nconst RAL_ORG_PLACES = [\n  { key: 'marienplatz', lat: 48.13737, lng: 11.57549, name: { de: 'Marienplatz', en: 'Marienplatz' } },\n  { key: 'odeonsplatz', lat: 48.14232, lng: 11.57727, name: { de: 'Odeonsplatz', en: 'Odeonsplatz' } },\n  { key: 'hbf', lat: 48.14025, lng: 11.55999, name: { de: 'Hauptbahnhof', en: 'Central Station' } },\n  { key: 'sendlinger', lat: 48.13398, lng: 11.56718, name: { de: 'Sendlinger Tor', en: 'Sendlinger Tor' } },\n  { key: 'viktualien', lat: 48.1351, lng: 11.5763, name: { de: 'Viktualienmarkt', en: 'Viktualienmarkt' } },\n  { key: 'maxjoseph', lat: 48.13963, lng: 11.57867, name: { de: 'Max-Joseph-Platz', en: 'Max-Joseph-Platz' } },\n  { key: 'stachus', lat: 48.13905, lng: 11.56595, name: { de: 'Stachus (Karlsplatz)', en: 'Stachus (Karlsplatz)' } },\n  { key: 'chinturm', lat: 48.15265, lng: 11.59209, name: { de: 'Chinesischer Turm', en: 'Chinese Tower' } },\n];\n// Nominatim: Suche im Raum München (viewbox = links, oben, rechts, unten)\nconst RAL_ORG_NOMINATIM = 'https://nominatim.openstreetmap.org';\nconst RAL_ORG_MUC_VIEWBOX = '11.36,48.25,11.72,48.06';\nconst RAL_ORG_GEO_CACHE = {};\n// Zielgruppe → passendes Vorlagen-Paket der Bibliothek\nconst RAL_ORG_AUD_PACK = { kids: 'kids', school: 'school', jga: 'jga', adults: null };\n// Themen: Teilstrings, die RallyEngine.suggestTour gegen fact.kategorie prüft (DE und EN)\nconst RAL_ORG_THEMES = [\n  { key: 'hist', emoji: '🏛️', match: ['hist'] },\n  { key: 'arch', emoji: '🏰', match: ['archit'] },\n  { key: 'church', emoji: '⛪', match: ['kirche', 'church', 'faith'] },\n  { key: 'culture', emoji: '🎭', match: ['kultur', 'culture'] },\n  { key: 'people', emoji: '👤', match: ['persön', 'people', 'person'] },\n  { key: 'myth', emoji: '🐉', match: ['myth'] },\n  { key: 'fun', emoji: '😄', match: ['fun'] },\n  { key: 'food', emoji: '🍺', match: ['kulinar', 'culinar', 'food'] },\n  { key: 'dark', emoji: '🕯️', match: ['dunkel', 'dark', 'crime'] },\n];\nconst RAL_ORG_FOOD_KEYWORDS = 'bier|beer|brau|bräu|brew|wirtshaus|tavern|biergarten|beer garden|oktoberfest|wiesn|weißwurst|brezn|markt|market|küche|kitchen';\nconst RAL_ORG_KIND = {\n  fact: { emoji: '📚', color: '#E8380D' },\n  custom: { emoji: '📍', color: '#0F9F8C' },\n  info: { emoji: 'ℹ️', color: '#3B82F6' },\n};\nconst RAL_ORG_QTYPES = ['mcq', 'text', 'number', 'estimate', 'none'];\n// Zeitlimit: Schnellwahl plus Feineinstellung in 15-Minuten-Schritten bis 6 h (Spec §11 P4)\nconst RAL_ORG_TIME_QUICK = [null, 60, 90, 120, 150, 180];\nconst RAL_ORG_TIME_MAX = 360;\nconst RAL_ORG_SIGNAL_MS = 10 * 60000;   // Live: ohne Positionsmeldung länger als 10 min = Alarm\n\n// ── Helfer ──────────────────────────────────────────────────────────────────\nfunction rallyOrgT(key, lang, vars) {\n  let s = t(key, lang);\n  if (vars) Object.keys(vars).forEach(k => { s = s.split('{' + k + '}').join(String(vars[k])); });\n  return s;\n}\n// Einzahl/Mehrzahl: bei n === 1 gilt der Schlüssel mit '.one'\nfunction rallyOrgTn(key, n, lang, vars) {\n  return rallyOrgT(Number(n) === 1 ? key + '.one' : key, lang, Object.assign({ n }, vars || {}));\n}\n// „5, 7 und 8“ / „5, 7 and 8“\nfunction rallyOrgList(arr, lang) {\n  const a = (arr || []).map(String);\n  if (a.length <= 1) return a.join('');\n  return a.slice(0, -1).join(', ') + ' ' + t('rally.org.list.and', lang) + ' ' + a[a.length - 1];\n}\n// Text einer Prüfmeldung aus validateTour (Editor, Stations-Sheet, Event anlegen)\nfunction rallyOrgIssueText(i, lang, stationNo, teamCount) {\n  const fmtMin = (m) => rallyOrgNb(rallyFmtMin(m || 0, lang));\n  const vars = {\n    n: i.stationId && stationNo ? stationNo(i.stationId) : '', teams: i.teams || teamCount || '',\n    list: rallyOrgList(i.unfairCounts, lang), fair: rallyOrgList(i.fairCounts, lang),\n    est: fmtMin(i.estimateMin), limit: fmtMin(i.limitMin),\n  };\n  let txt = rallyOrgT('rally.org.issue.' + i.code, lang, vars);\n  if (i.code === 'unfair_rotation' && (i.fairCounts || []).length) txt += ' ' + rallyOrgT('rally.org.issue.unfair_rotation.better', lang, vars);\n  return txt;\n}\nfunction rallyOrgLoadLast() {\n  try { return JSON.parse(localStorage.getItem(RAL_ORG_LAST_KEY) || 'null'); } catch (e) { return null; }\n}\nfunction rallyOrgSaveLast(v) {\n  try {\n    if (v) localStorage.setItem(RAL_ORG_LAST_KEY, JSON.stringify(v));\n    else localStorage.removeItem(RAL_ORG_LAST_KEY);\n  } catch (e) {}\n}\nfunction rallyOrgUid(prefix) {\n  return prefix + Math.random().toString(36).slice(2, 8) + Date.now().toString(36).slice(-3);\n}\n// Fakten aus Supabase haben teils keine id, nur nr (z. B. 'MUC_138'). Schlüssel = id, sonst nr.\nfunction rallyOrgFactKey(f) {\n  return f ? (f.id != null ? f.id : f.nr) : null;\n}\nfunction rallyOrgFact(id) {\n  const F = window.FACTS;\n  if (!Array.isArray(F) || id == null) return null;\n  return F.find(f => f && rallyOrgFactKey(f) != null && String(rallyOrgFactKey(f)) === String(id)) || null;\n}\nfunction rallyOrgPick(f, lang) {\n  if (!f) return null;\n  try { return window.pickFact ? window.pickFact(f, lang) : f; } catch (e) { return f; }\n}\nfunction rallyOrgFactTitle(f, lang) {\n  const p = rallyOrgPick(f, lang);\n  return p ? String(p.titel || p.title || '') : '';\n}\nfunction rallyOrgNum(v, lang) {\n  return window.RallyEngine ? window.RallyEngine.parseNumber(v, lang) : parseFloat(v);\n}\n// Zahl als Feldtext in der UI-Sprache (de: Dezimalkomma), damit parseNumber sie zurückliest\nfunction rallyOrgNumText(v, lang) {\n  if (v == null) return '';\n  if (typeof v !== 'number') return String(v);\n  const s = String(v);\n  return lang === 'en' ? s : s.replace('.', ',');\n}\n// Zahl und Einheit nicht umbrechen (9,7 km, 3 h 49 min)\nfunction rallyOrgNb(str) {\n  return String(str || '').replace(/ /g, '\\u00a0');\n}\nfunction rallyOrgPlaceName(p, lang) {\n  return rallyPickText(p.name, lang);\n}\nfunction rallyOrgFmtDate(iso, lang) {\n  if (!iso) return '';\n  const d = new Date(String(iso).length <= 10 ? iso + 'T12:00:00' : iso);\n  if (isNaN(d.getTime())) return '';\n  return d.toLocaleDateString(lang === 'en' ? 'en-GB' : 'de-DE', { weekday: 'short', day: 'numeric', month: 'short' });\n}\nfunction rallyOrgFmtTime(iso, lang) {\n  if (!iso) return '';\n  const d = new Date(iso);\n  if (isNaN(d.getTime())) return '';\n  return d.toLocaleTimeString(lang === 'en' ? 'en-GB' : 'de-DE', { hour: '2-digit', minute: '2-digit' });\n}\n// Datum mit optionaler Uhrzeit: „Sa., 24. Okt., 14:00“. event.date ist 'YYYY-MM-DD' (ohne Uhrzeit)\n// oder ein ISO-Zeitpunkt. Mitternacht UTC kommt aus Supabase für reine Datumsangaben zurück: ohne Uhrzeit zeigen.\nfunction rallyOrgDateOnly(iso) {\n  const s = String(iso || '');\n  return s.length <= 10 || /T00:00(:00(\\.0+)?)?(Z|[+-]00:?00)?$/.test(s);\n}\nfunction rallyOrgFmtWhen(iso, lang) {\n  if (!iso) return '';\n  if (rallyOrgDateOnly(iso)) return rallyOrgFmtDate(String(iso).slice(0, 10), lang);\n  const d = rallyOrgFmtDate(iso, lang);\n  return d ? d + ', ' + rallyOrgFmtTime(iso, lang) : '';\n}\n// Selektierte Chips nicht über Farbe überblenden (kurzes Aufblitzen mit schwachem Kontrast)\nfunction rallyOrgStyles() {\n  if (typeof document === 'undefined' || document.getElementById('rally-org-styles')) return;\n  const s = document.createElement('style');\n  s.id = 'rally-org-styles';\n  s.textContent = '.rally-org .rally-tap { transition: transform 0.08s ease-out; }';\n  document.head.appendChild(s);\n}\n\n// ── Orte: Adresse zu Koordinaten und Ortssuche (Nominatim, sparsam und gecacht) ──\nfunction rallyOrgGeoLabel(r) {\n  if (!r) return '';\n  const a = r.address || {};\n  const road = a.road || a.pedestrian || a.footway || a.square || '';\n  if (r.name && r.name !== road) return String(r.name);\n  if (road) return road + (a.house_number ? ' ' + a.house_number : '');\n  return String(a.suburb || a.neighbourhood || a.city_district || (r.display_name || '').split(',')[0] || '');\n}\nfunction rallyOrgReverse(lat, lng, lang) {\n  const key = lat.toFixed(5) + ',' + lng.toFixed(5) + ',' + (lang || 'de');\n  if (RAL_ORG_GEO_CACHE[key]) return RAL_ORG_GEO_CACHE[key];\n  const url = RAL_ORG_NOMINATIM + '/reverse?format=jsonv2&zoom=17&lat=' + lat + '&lon=' + lng + '&accept-language=' + (lang === 'en' ? 'en' : 'de');\n  const p = fetch(url).then(r => r.ok ? r.json() : null).then(j => (j && rallyOrgGeoLabel(j)) || null).catch(() => null);\n  RAL_ORG_GEO_CACHE[key] = p;\n  p.then(v => { if (!v) delete RAL_ORG_GEO_CACHE[key]; });\n  return p;\n}\nfunction rallyOrgSearchPlaces(q, lang) {\n  const url = RAL_ORG_NOMINATIM + '/search?format=jsonv2&addressdetails=1&limit=5&bounded=1&viewbox=' + RAL_ORG_MUC_VIEWBOX\n    + '&accept-language=' + (lang === 'en' ? 'en' : 'de') + '&q=' + encodeURIComponent(q);\n  return fetch(url).then(r => r.ok ? r.json() : []).then(list => (Array.isArray(list) ? list : []).map(r => ({\n    lat: parseFloat(r.lat), lng: parseFloat(r.lon), label: rallyOrgGeoLabel(r) || String(r.display_name || '').split(',')[0],\n    detail: String(r.display_name || '').split(',').slice(1, 3).join(',').trim(),\n  })).filter(p => isFinite(p.lat) && isFinite(p.lng)))\n    // Gleicher Name an fast gleicher Stelle (Platz, Straße, Haltestelle) nur einmal zeigen\n    .then(list => list.filter((p, i) => !list.slice(0, i).some(o => o.label === p.label\n      && Math.abs(o.lat - p.lat) < 0.0015 && Math.abs(o.lng - p.lng) < 0.002)));\n}\n// Adresse zu einem Punkt als Hook (für eigene Stationen)\nfunction useRallyOrgAddress(lat, lng, lang) {\n  const [addr, setAddr] = React.useState(null);\n  React.useEffect(() => {\n    setAddr(null);\n    if (!isFinite(lat) || !isFinite(lng)) return;\n    let alive = true;\n    const tm = setTimeout(() => { rallyOrgReverse(lat, lng, lang).then(v => { if (alive) setAddr(v); }); }, 250);\n    return () => { alive = false; clearTimeout(tm); };\n  }, [lat, lng, lang]);\n  return addr;\n}\n\n// ── Prüfhilfen für Fragen (nur Hinweise, keine Fehler): Logik liegt in der Engine ──\nfunction rallyOrgQuestionHints(st, lang) {\n  const E = window.RallyEngine;\n  try { return E && typeof E.questionHints === 'function' ? E.questionHints(st, lang) : []; } catch (e) { return []; }\n}\n\n// Nächstes anstehendes Event dieses Besitzers (für den Challenge-Startbildschirm).\n// ownerId: Supabase-Nutzer-ID. Ohne Angabe (oder im Local-Modus) gilt die Geräte-ID.\nasync function rallyOrgNextEvent(ownerId) {\n  const S = window.RallyStore;\n  if (!S) return null;\n  try {\n    if (S.init) await S.init();\n    if (S.mode !== 'supabase' || ownerId == null) {\n      const o = await rallyOrgOwner(S.mode === 'supabase' ? ownerId : null);\n      ownerId = o.owner;\n    }\n    if (ownerId == null) return null;\n    const list = (await S.listEvents(ownerId)) || [];\n    const today = new Date().toISOString().slice(0, 10);\n    const open = list.filter(e => e && e.status !== 'ended' && (!e.ownerId || e.ownerId === ownerId));\n    // Laufende zuerst, dann nach Datum (ohne Datum zuletzt); vergangene Lobby-Termine fallen weg\n    const rank = (e) => e.status === 'active' || e.status === 'finale' ? 0 : 1;\n    const upcoming = open.filter(e => rank(e) === 0 || !e.date || String(e.date).slice(0, 10) >= today);\n    upcoming.sort((a, b) => (rank(a) - rank(b)) || String(a.date || '9999').localeCompare(String(b.date || '9999')));\n    return upcoming[0] || null;\n  } catch (e) {\n    console.warn('[RallyOrg] nextEvent', e);\n    return null;\n  }\n}\nwindow.rallyOrgNextEvent = rallyOrgNextEvent;\nwindow.rallyOrgFmtWhen = rallyOrgFmtWhen;   // „Sa., 24. Okt., 14:00“ für event.date\nfunction rallyOrgRouteLine(tour) {\n  if (!tour || !tour.start) return null;\n  const pts = [[tour.start.lng, tour.start.lat]];\n  (tour.stations || []).forEach(s => pts.push([s.lng, s.lat]));\n  const end = tour.finish || tour.start;\n  pts.push([end.lng, end.lat]);\n  return pts.length >= 2 ? pts : null;\n}\nfunction rallyOrgTourMarkers(tour, lang, opts) {\n  opts = opts || {};\n  const out = [];\n  if (!tour) return out;\n  if (tour.start) out.push({ id: '__start', kind: 'start', lat: tour.start.lat, lng: tour.start.lng, label: tour.finish ? tour.start.label : rallyOrgT('rally.org.map.startFinish', lang) });\n  if (tour.finish) out.push({ id: '__finish', kind: 'finish', lat: tour.finish.lat, lng: tour.finish.lng, label: tour.finish.label });\n  (tour.stations || []).forEach((s, i) => {\n    out.push({\n      id: s.id, kind: 'station', lat: s.lat, lng: s.lng, label: String(i + 1),\n      color: (RAL_ORG_KIND[s.kind] || RAL_ORG_KIND.fact).color, title: s.title,\n      active: opts.activeId === s.id, done: opts.doneIds ? !!opts.doneIds[s.id] : false,\n    });\n  });\n  return out;\n}\nfunction rallyOrgQType(station) {\n  if (!station) return 'none';\n  if (station.kind === 'info') return 'info';\n  return station.puzzle ? station.puzzle.type : 'none';\n}\nfunction rallyOrgEstimate(tour) {\n  try { return window.RallyEngine.estimateTour(tour); } catch (e) { return { stations: 0, distanceM: 0, totalMin: 0 }; }\n}\n// Station-IDs → Probleme aus validateTour\nfunction rallyOrgIssueMap(issues) {\n  const m = {};\n  (issues || []).forEach(i => {\n    if (!i.stationId) return;\n    if (!m[i.stationId] || i.level === 'error') m[i.stationId] = i.level;\n  });\n  return m;\n}\n// Ownerkennung: Local-Modus = Geräte-ID, Supabase = angemeldeter Nutzer\nasync function rallyOrgOwner(userId) {\n  const S = window.RallyStore;\n  if (!S) return { owner: null, mode: null };\n  await S.init();\n  if (S.mode === 'supabase') return { owner: userId || null, mode: 'supabase' };\n  const me = S.me();\n  return { owner: me && me.deviceId, mode: 'local' };\n}\n// Teamzuteilung, wie sie der Store beim Start rechnen würde (für die Start-Prüfung)\nfunction rallyOrgPredictTeams(event, players) {\n  const E = window.RallyEngine;\n  const hasAny = players.some(p => p.team != null);\n  const mode = hasAny ? 'self' : (event.assignMode || 'random');\n  const res = E.assignTeams(players.map(p => ({ id: p.id, name: p.name, team: p.team })), event.teamCount, { mode, roster: event.roster || [], seed: 1 });\n  const size = {};\n  for (let k = 1; k <= event.teamCount; k++) size[k] = 0;\n  players.forEach(p => { const tm = p.team != null ? p.team : res[p.id]; if (size[tm] != null) size[tm]++; });\n  return size;\n}\nfunction rallyOrgFactsVersion() {\n  const [v, setV] = React.useState(0);\n  React.useEffect(() => {\n    const fn = () => setV(x => x + 1);\n    window.addEventListener('facts-updated', fn);\n    return () => window.removeEventListener('facts-updated', fn);\n  }, []);\n  return v;\n}\nfunction rallyOrgCopy(text) {\n  if (navigator.clipboard && navigator.clipboard.writeText) {\n    return navigator.clipboard.writeText(text).then(() => true).catch(() => rallyOrgCopyFallback(text));\n  }\n  return Promise.resolve(rallyOrgCopyFallback(text));\n}\nfunction rallyOrgCopyFallback(text) {\n  try {\n    const ta = document.createElement('textarea');\n    ta.value = text;\n    ta.setAttribute('readonly', '');\n    ta.style.cssText = 'position:fixed;top:-1000px;opacity:0;';\n    document.body.appendChild(ta);\n    ta.select();\n    const ok = document.execCommand('copy');\n    document.body.removeChild(ta);\n    return ok;\n  } catch (e) { return false; }\n}\n\n// ── Kleine Bausteine ────────────────────────────────────────────────────────\n\n// Kopf im Stil der Challenge-Bubble (Brand-Verlauf), mit Zurück-Knopf\nfunction RallyOrgHeader({ kicker, title, onBack, lang, right }) {\n  return (\n    <div style={{\n      margin: '8px 16px 0', borderRadius: 22, position: 'relative', overflow: 'hidden',\n      background: 'linear-gradient(135deg, var(--stamp-deep) 0%, var(--stamp) 60%, var(--primary-lt) 110%)',\n      padding: '12px 14px 14px', color: '#FFFFFF',\n      boxShadow: '0 12px 28px rgba(168,37,8,0.28), inset 0 1px 0 rgba(255,255,255,0.12)',\n    }}>\n      <div aria-hidden=\"true\" style={{\n        position: 'absolute', top: -40, right: -30, width: 140, height: 140, borderRadius: '50%',\n        background: 'radial-gradient(circle, rgba(255,224,102,0.28), transparent 70%)', pointerEvents: 'none',\n      }} />\n      <div style={{ position: 'relative', display: 'flex', alignItems: 'center', gap: 10 }}>\n        {onBack && (\n          <button type=\"button\" className=\"rally-tap\" onClick={onBack} aria-label={t('rally.app.back', lang)} style={{\n            width: 44, height: 44, borderRadius: 12, flexShrink: 0, padding: 0, cursor: 'pointer',\n            background: 'rgba(0,0,0,0.22)', border: '1px solid rgba(255,255,255,0.22)',\n            display: 'flex', alignItems: 'center', justifyContent: 'center',\n          }}>\n            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" strokeWidth=\"2.4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"><path d=\"M14 6l-6 6 6 6\" /></svg>\n          </button>\n        )}\n        <div style={{ flex: 1, minWidth: 0 }}>\n          {kicker && (\n            <div style={{\n              fontFamily: RAL_FONT_M, fontSize: 12, fontWeight: 600, letterSpacing: '0.18em',\n              textTransform: 'uppercase', color: 'rgba(255,255,255,0.78)',\n            }}>{kicker}</div>\n          )}\n          <div style={{\n            fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 21, lineHeight: 1.15, marginTop: 2,\n            overflow: 'hidden', textOverflow: 'ellipsis', display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical',\n            overflowWrap: 'anywhere',\n          }}>{title}</div>\n        </div>\n        {right}\n      </div>\n    </div>\n  );\n}\n\nfunction RallyOrgSection({ title, hint, children, style, right }) {\n  return (\n    <section style={{ display: 'flex', flexDirection: 'column', gap: 10, ...style }}>\n      {(title || right) && (\n        <div style={{ display: 'flex', alignItems: 'flex-end', gap: 8 }}>\n          <div style={{ flex: 1, minWidth: 0 }}>\n            {title && <h2 style={{ margin: 0, fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 18, lineHeight: 1.2, color: 'var(--ink)' }}>{title}</h2>}\n            {hint && <div style={{ marginTop: 3, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.45, color: 'var(--ink-2)' }}>{hint}</div>}\n          </div>\n          {right}\n        </div>\n      )}\n      {children}\n    </section>\n  );\n}\n\nfunction RallyOrgSwitch({ checked, onChange, label, hint }) {\n  return (\n    <button type=\"button\" role=\"switch\" aria-checked={!!checked} className=\"rally-tap\" onClick={() => onChange(!checked)} style={{\n      display: 'flex', alignItems: 'center', gap: 12, width: '100%', minHeight: 56, padding: '10px 12px',\n      borderRadius: 14, border: '1px solid var(--border-2)', background: 'var(--surface-2)', cursor: 'pointer', textAlign: 'left',\n    }}>\n      <span style={{ flex: 1, minWidth: 0 }}>\n        <span style={{ display: 'block', fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15, color: 'var(--ink)' }}>{label}</span>\n        {hint && <span style={{ display: 'block', marginTop: 2, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-2)' }}>{hint}</span>}\n      </span>\n      <span aria-hidden=\"true\" style={{\n        width: 48, height: 28, borderRadius: 999, flexShrink: 0, position: 'relative',\n        background: checked ? 'var(--stamp)' : 'var(--border-2)', transition: 'background 0.15s',\n      }}>\n        <span style={{\n          position: 'absolute', top: 3, left: checked ? 23 : 3, width: 22, height: 22, borderRadius: '50%',\n          background: '#FFFFFF', boxShadow: '0 1px 3px rgba(0,0,0,0.3)', transition: 'left 0.15s',\n        }} />\n      </span>\n    </button>\n  );\n}\n\n// Auswahlkarte mit Kurzerklärung (Radio)\nfunction RallyOrgOption({ active, onClick, icon, title, body }) {\n  return (\n    <button type=\"button\" role=\"radio\" aria-checked={!!active} className=\"rally-tap\" onClick={onClick} style={{\n      display: 'flex', alignItems: 'flex-start', gap: 12, width: '100%', padding: '12px 14px', textAlign: 'left',\n      borderRadius: 14, cursor: 'pointer', minHeight: 56,\n      background: active ? 'var(--stamp-soft)' : 'var(--surface)',\n      border: active ? '1.5px solid var(--stamp)' : '1.5px solid var(--border-2)',\n    }}>\n      <span aria-hidden=\"true\" style={{\n        width: 22, height: 22, borderRadius: '50%', flexShrink: 0, marginTop: 1,\n        border: active ? '7px solid var(--stamp)' : '2px solid var(--border-2)', background: 'var(--surface)', boxSizing: 'border-box',\n      }} />\n      <span style={{ flex: 1, minWidth: 0 }}>\n        <span style={{ display: 'block', fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15, color: 'var(--ink)' }}>\n          {icon && <span aria-hidden=\"true\" style={{ marginRight: 6 }}>{icon}</span>}{title}\n        </span>\n        {body && <span style={{ display: 'block', marginTop: 3, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.45, color: 'var(--ink-2)' }}>{body}</span>}\n      </span>\n    </button>\n  );\n}\n\nfunction RallyOrgNote({ tone = 'info', icon, title, children, style, action }) {\n  const map = {\n    info: { bg: 'var(--surface-2)', bd: 'var(--border)', c: 'var(--ink-2)', tc: 'var(--ink)' },\n    warn: { bg: 'var(--coin-soft)', bd: 'rgba(245,197,24,0.35)', c: 'var(--ink-2)', tc: 'var(--ink)' },\n    error: { bg: 'var(--stamp-soft)', bd: 'rgba(232,56,13,0.35)', c: 'var(--ink-2)', tc: 'var(--stamp)' },\n    ok: { bg: 'rgba(34,197,94,0.12)', bd: 'rgba(34,197,94,0.30)', c: 'var(--ink-2)', tc: 'var(--ink)' },\n  }[tone] || {};\n  return (\n    <div role={tone === 'error' ? 'alert' : undefined} style={{\n      display: 'flex', gap: 10, alignItems: 'flex-start', padding: '11px 13px', borderRadius: 14,\n      background: map.bg, border: '1px solid ' + map.bd, ...style,\n    }}>\n      {icon && <span aria-hidden=\"true\" style={{ fontSize: 17, lineHeight: '22px' }}>{icon}</span>}\n      <div style={{ flex: 1, minWidth: 0 }}>\n        {title && <div style={{ fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 14.5, lineHeight: 1.35, color: map.tc }}>{title}</div>}\n        {children && <div style={{ marginTop: title ? 2 : 0, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.5, color: map.c }}>{children}</div>}\n        {action && <div style={{ marginTop: 8 }}>{action}</div>}\n      </div>\n    </div>\n  );\n}\n\nfunction RallyOrgIconBtn({ onClick, label, children, disabled, tone }) {\n  return (\n    <button type=\"button\" className=\"rally-tap\" onClick={disabled ? undefined : onClick} disabled={!!disabled}\n      aria-label={label} title={label} style={{\n        width: 44, height: 44, flexShrink: 0, borderRadius: 12, padding: 0,\n        border: '1px solid var(--border-2)', background: 'var(--surface-2)',\n        color: tone === 'danger' ? 'var(--stamp)' : 'var(--ink-2)',\n        display: 'flex', alignItems: 'center', justifyContent: 'center',\n        cursor: disabled ? 'not-allowed' : 'pointer', opacity: disabled ? 0.35 : 1,\n      }}>{children}</button>\n  );\n}\nconst RAL_ORG_ICON = {\n  up: <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 15l6-6 6 6\" /></svg>,\n  down: <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 9l6 6 6-6\" /></svg>,\n  trash: <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.1\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 7h16M10 11v6M14 11v6M6 7l1 12a2 2 0 002 2h6a2 2 0 002-2l1-12M9 7V4h6v3\" /></svg>,\n  edit: <svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.1\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 20h4L19 9l-4-4L4 16v4zM13.5 6.5l4 4\" /></svg>,\n};\n\n// Zahlfeld, das beim Tippen den Text behält und nach außen eine Zahl liefert\nfunction RallyOrgNumInput({ value, onChange, placeholder, invalid, ariaLabel, id, lang }) {\n  const [txt, setTxt] = React.useState(rallyOrgNumText(value, lang));\n  React.useEffect(() => {\n    const cur = rallyOrgNum(txt, lang);\n    const nv = value == null ? NaN : rallyOrgNum(value, lang);\n    if (value == null ? (txt !== '' && !isNaN(cur)) : cur !== nv) setTxt(rallyOrgNumText(value, lang));\n  }, [value, lang]); // eslint-disable-line react-hooks/exhaustive-deps\n  return (\n    <RallyInput id={id} mono inputMode=\"decimal\" value={txt} placeholder={placeholder} invalid={invalid} aria-label={ariaLabel}\n      onChange={e => {\n        const v = e.target.value;\n        setTxt(v);\n        const n = rallyOrgNum(v, lang);\n        onChange(isNaN(n) ? (v.trim() === '' ? null : v) : n);\n      }} />\n  );\n}\n\nconst RAL_ORG_SELECT_STYLE = {\n  minHeight: 44, padding: '8px 10px', borderRadius: 12, background: 'var(--surface-2)', color: 'var(--ink)',\n  border: '1.5px solid var(--border-2)', fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15, maxWidth: '100%',\n};\n\n// Zeitlimit: Schnellwahl und Stepper (15-Minuten-Schritte, 0 = ohne Limit)\nfunction RallyOrgTimeLimit({ value, onChange, lang }) {\n  const cur = +value > 0 ? +value : null;\n  return (\n    <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n      <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n        {RAL_ORG_TIME_QUICK.map(v => (\n          <RallyChip key={String(v)} active={cur === v} onClick={() => onChange(v)}>\n            {v == null ? t('rally.org.set.noLimit', lang) : rallyOrgNb(rallyFmtMin(v, lang))}\n          </RallyChip>\n        ))}\n      </div>\n      <RallyStepper value={cur || 0} min={0} max={RAL_ORG_TIME_MAX} step={15} lang={lang}\n        ariaLabel={t('rally.org.set.timeLimitStep', lang)}\n        format={(x) => (x > 0 ? rallyOrgNb(rallyFmtMin(x, lang)) : t('rally.org.set.noLimit', lang))}\n        onChange={(x) => onChange(x > 0 ? x : null)} />\n    </div>\n  );\n}\n\n// Bei Fokus oder Rückkehr in den Tab etwas neu laden (z. B. Nutzungszahlen einer Vorlage)\nfunction useRallyOrgOnFocus(fn) {\n  const ref = React.useRef(fn);\n  ref.current = fn;\n  React.useEffect(() => {\n    const run = () => { if (document.visibilityState !== 'hidden') { try { ref.current(); } catch (e) {} } };\n    window.addEventListener('focus', run);\n    document.addEventListener('visibilitychange', run);\n    return () => { window.removeEventListener('focus', run); document.removeEventListener('visibilitychange', run); };\n  }, []);\n}\n\n// ═════════════════════════════════════════════════════════════════════════════\n// 1. Übersicht\n// ═════════════════════════════════════════════════════════════════════════════\nfunction RallyOrgOverview({ lang, theme, owner, mode, user, userId, tab = 'mine', onTab, libRequest, onLibRequestHandled, onViewTemplate,\n  onNew, onEditTour, onStartEvent, onOpenEvent, onExit, showToast }) {\n  const [tours, setTours] = React.useState(null);\n  const [events, setEvents] = React.useState(null);\n  const [confirmDel, setConfirmDel] = React.useState(null);\n  const [menuFor, setMenuFor] = React.useState(null);\n  const [myTpls, setMyTpls] = React.useState({});      // templateId -> Vorlage (Nutzung, Code)\n  const [pubTour, setPubTour] = React.useState(null);  // Tour im Veröffentlichen-Sheet\n  const [libDetail, setLibDetail] = React.useState(false);\n  const [nudgeOffV, setNudgeOffV] = React.useState(0);\n\n  const loadTpls = React.useCallback(() => {\n    const S = window.RallyStore;\n    if (typeof S.listMyTemplates !== 'function') return;\n    Promise.resolve().then(() => S.listMyTemplates(owner)).then(list => {\n      const m = {};\n      (list || []).forEach(tp => { if (tp && tp.id != null) m[tp.id] = tp; });\n      setMyTpls(m);\n    }).catch(e => console.warn('[RallyOrg] listMyTemplates', e));\n  }, [owner]);\n  // „Noch von keiner Gruppe übernommen“ aktuell halten, wenn man zurück in die App kommt\n  useRallyOrgOnFocus(loadTpls);\n  const load = React.useCallback(async () => {\n    loadTpls();\n    try {\n      const [ts, es] = await Promise.all([window.RallyStore.listTours(owner), window.RallyStore.listEvents(owner)]);\n      setTours(ts || []); setEvents(es || []);\n    } catch (e) {\n      console.warn('[RallyOrg] load', e);\n      setTours([]); setEvents([]);\n      showToast(t('rally.ui.event.loadError', lang));\n    }\n  }, [owner]); // eslint-disable-line react-hooks/exhaustive-deps\n  React.useEffect(() => { load(); }, [load]);\n\n  const dup = async (tour) => {\n    setMenuFor(null);\n    try {\n      await window.RallyStore.duplicateTour(tour.id, { title: rallyOrgT('rally.org.tour.copyTitle', lang, { title: tour.title || '' }) });\n      showToast(t('rally.org.tour.duplicated', lang));\n      load();\n    } catch (e) { showToast(t('rally.org.error.generic', lang)); }\n  };\n  const del = async () => {\n    const tour = confirmDel;\n    setConfirmDel(null);\n    try { await window.RallyStore.deleteTour(tour.id); showToast(t('rally.org.tour.deleted', lang)); load(); }\n    catch (e) { showToast(t('rally.org.error.generic', lang)); }\n  };\n\n  const loading = tours == null || events == null;\n  const empty = !loading && !tours.length && !events.length;\n  const openEvents = (events || []).filter(e => e.status !== 'ended');\n  const pastEvents = (events || []).filter(e => e.status === 'ended');\n  // §9.1 C7 b / §11 P10: gespielte, nicht geteilte Tour (Regel in RallyEngine.shouldNudgePublish).\n  // Übernommene Touren (origin) dürfen auch geteilt werden. Gespielt = mindestens eine Antwort.\n  const [nudgeTour, setNudgeTour] = React.useState(null);\n  React.useEffect(() => {\n    if (!tours || !events) return;\n    let alive = true;\n    const E = window.RallyEngine, S = window.RallyStore;\n    const latest = {};\n    events.filter(e => e.status === 'ended' && e.tourId).forEach(e => {\n      const cur = latest[e.tourId];\n      if (!cur || String(e.createdAt || '') > String(cur.createdAt || '')) latest[e.tourId] = e;\n    });\n    const cands = tours.filter(tr => latest[tr.id] && !(window.rallyLibNudgeOff && window.rallyLibNudgeOff(tr.id)));\n    (async () => {\n      for (const tr of cands) {\n        let ans = [];\n        try { ans = (await S.listAnswers(latest[tr.id].id)) || []; } catch (e) { ans = []; }\n        const ok = typeof E.shouldNudgePublish === 'function' ? E.shouldNudgePublish(tr, latest[tr.id], ans)\n          : !(tr.published && tr.published.templateId) && ans.length > 0;\n        if (ok) { if (alive) setNudgeTour(tr); return; }\n      }\n      if (alive) setNudgeTour(null);\n    })();\n    return () => { alive = false; };\n  }, [tours, events, nudgeOffV]);\n  const hasLib = typeof window.RallyLibraryView === 'function';\n  // Ohne eigene Touren: fertige FACT-Vorlagen zuerst zeigen (Kinder, Schulklasse, Geschichte)\n  const factsV = rallyOrgFactsVersion();\n  const readyTpls = React.useMemo(() => {\n    if (!hasLib || typeof rallyLibOfficialList !== 'function') return [];\n    const all = rallyLibOfficialList(lang);\n    const pick = [];\n    // Die Einstiegskarte verspricht „Geburtstag, Klasse oder JGA“: genau diese drei zuerst zeigen\n    ['kids', 'school', 'jga'].forEach(k => {\n      const tp = all.find(x => (x.packs || []).indexOf(k) >= 0 && pick.indexOf(x) < 0);\n      if (tp) pick.push(tp);\n    });\n    return pick;\n  }, [factsV, lang, hasLib]); // eslint-disable-line react-hooks/exhaustive-deps\n  const tabs = hasLib && !libDetail ? (\n    <div style={{ padding: '14px 16px 0' }}>\n      <RallySegmented ariaLabel={t('rally.lib.tabs', lang)} value={tab} onChange={v => onTab && onTab(v)}\n        options={[{ value: 'mine', label: t('rally.lib.tab.mine', lang) }, { value: 'discover', label: t('rally.lib.tab.discover', lang) }]} />\n    </div>\n  ) : null;\n  const pubSheet = typeof window.RallyPublishSheet === 'function' ? (\n    <RallyPublishSheet open={!!pubTour} tour={pubTour} lang={lang} theme={theme} user={user} ownerId={owner}\n      onClose={() => setPubTour(null)} showToast={showToast}\n      onPublished={() => load()} onUnpublished={() => load()}\n      onViewInLibrary={(tp) => { setPubTour(null); if (onViewTemplate) onViewTemplate(tp); }} />\n  ) : null;\n\n  if (hasLib && tab === 'discover') {\n    return (\n      <div>\n        {!libDetail && <RallyOrgHeader kicker={t('rally.org.overview.kicker', lang)} title={t('rally.org.overview.title', lang)} onBack={onExit} lang={lang} />}\n        {tabs}\n        <div style={{ padding: libDetail ? 0 : '16px 16px 0' }}>\n          <RallyLibraryView theme={theme} lang={lang} userId={userId} user={user} ownerId={owner} showToast={showToast}\n            openRequest={libRequest} onRequestHandled={onLibRequestHandled} onDetailChange={setLibDetail}\n            onOpenTour={(id) => onEditTour(id)} onCreateEvent={(id) => onStartEvent(id)} />\n        </div>\n      </div>\n    );\n  }\n\n  const statusChip = (ev) => {\n    const c = { lobby: 'var(--teal, #00C2A8)', active: 'var(--stamp)', finale: 'var(--coin-dk)', ended: null }[ev.status];\n    return <RallyChip active={!!c} color={c || undefined}>{t('rally.org.status.' + ev.status, lang)}</RallyChip>;\n  };\n\n  const eventCard = (ev) => (\n    <RallyCard key={ev.id} theme={theme} onClick={() => onOpenEvent(ev.id)} accent={ev.status === 'active' || ev.status === 'finale'}\n      ariaLabel={ev.title} padding={14}>\n      <div style={{ display: 'flex', alignItems: 'center', gap: 8, flexWrap: 'wrap' }}>\n        {statusChip(ev)}\n        {ev.date && <span style={{ fontFamily: RAL_FONT_M, fontSize: 12.5, color: 'var(--ink-2)' }}>{rallyOrgFmtWhen(ev.date, lang)}</span>}\n        <span style={{ marginLeft: 'auto', fontFamily: RAL_FONT_M, fontWeight: 600, fontSize: 14, letterSpacing: '0.12em', color: 'var(--ink)' }}>{ev.code}</span>\n      </div>\n      <div style={{ marginTop: 8, fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 17, lineHeight: 1.25, overflowWrap: 'anywhere' }}>{ev.title || t('rally.org.event.untitled', lang)}</div>\n      <div style={{ marginTop: 3, fontFamily: RAL_FONT_M, fontSize: 12, color: 'var(--ink-3)', letterSpacing: '0.04em' }}>\n        {rallyOrgTn('rally.org.event.meta', ((ev.tour && ev.tour.stations) || []).length, lang, { teams: ev.teamCount, stations: ((ev.tour && ev.tour.stations) || []).length })}\n      </div>\n    </RallyCard>\n  );\n\n  return (\n    <div>\n      <RallyOrgHeader kicker={t('rally.org.overview.kicker', lang)} title={t('rally.org.overview.title', lang)} onBack={onExit} lang={lang} />\n      {tabs}\n      <div style={{ padding: '18px 16px 0', display: 'flex', flexDirection: 'column', gap: 22 }}>\n        {!loading && !tours.length && readyTpls.length > 0 && (\n          <RallyOrgSection title={t('rally.org.overview.readyTitle', lang)} hint={t('rally.org.overview.readyHint', lang)}>\n            {readyTpls.map(tp => (\n              <RallyLibCard key={tp.id} tpl={tp} lang={lang} theme={theme} onOpen={() => onViewTemplate && onViewTemplate(tp)} />\n            ))}\n            {hasLib && (\n              <RallyButton variant=\"ghost\" size=\"sm\" onClick={() => onTab && onTab('discover')}>{t('rally.org.overview.readyAll', lang)}</RallyButton>\n            )}\n          </RallyOrgSection>\n        )}\n        <RallyButton size=\"lg\" full icon=\"＋\" variant={!loading && !tours.length && readyTpls.length > 0 ? 'secondary' : 'primary'} onClick={onNew}>{t('rally.org.overview.newTour', lang)}</RallyButton>\n\n        {!loading && nudgeTour && typeof window.RallyLibNudge === 'function' && (\n          <RallyLibNudge tour={nudgeTour} lang={lang} onPublish={() => setPubTour(nudgeTour)}\n            onDismiss={() => { if (window.rallyLibSetNudgeOff) window.rallyLibSetNudgeOff(nudgeTour.id); setNudgeOffV(v => v + 1); }} />\n        )}\n\n        {loading && <div style={{ fontFamily: RAL_FONT_B, color: 'var(--ink-3)', textAlign: 'center' }}>{t('rally.ui.loading', lang)}</div>}\n\n        {empty && (\n          <RallyCard theme={theme} padding={18}>\n            <div style={{ fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 18 }}>{t('rally.org.empty.title', lang)}</div>\n            <div style={{ marginTop: 4, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 14.5, lineHeight: 1.55, color: 'var(--ink-2)' }}>{t('rally.org.empty.body', lang)}</div>\n            <ol style={{ listStyle: 'none', margin: '14px 0 0', padding: 0, display: 'flex', flexDirection: 'column', gap: 12 }}>\n              {[1, 2, 3].map(n => (\n                <li key={n} style={{ display: 'flex', gap: 12, alignItems: 'flex-start' }}>\n                  <span aria-hidden=\"true\" style={{\n                    width: 30, height: 30, borderRadius: '50%', flexShrink: 0, background: 'var(--stamp)', color: '#FFFFFF',\n                    display: 'flex', alignItems: 'center', justifyContent: 'center', fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 15,\n                    boxShadow: '0 2px 0 var(--stamp-deep)',\n                  }}>{n}</span>\n                  <span style={{ flex: 1, minWidth: 0 }}>\n                    <span style={{ display: 'block', fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15 }}>{t('rally.org.empty.step' + n + '.title', lang)}</span>\n                    <span style={{ display: 'block', marginTop: 2, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.5, color: 'var(--ink-2)' }}>{t('rally.org.empty.step' + n + '.body', lang)}</span>\n                  </span>\n                </li>\n              ))}\n            </ol>\n          </RallyCard>\n        )}\n\n        {!loading && openEvents.length > 0 && (\n          <RallyOrgSection title={t('rally.org.overview.events', lang)}>\n            {openEvents.map(eventCard)}\n          </RallyOrgSection>\n        )}\n\n        {!loading && tours.length > 0 && (\n          <RallyOrgSection title={t('rally.org.overview.tours', lang)}>\n            {tours.map(tour => {\n              const est = rallyOrgEstimate(tour);\n              const pubId = tour.published && tour.published.templateId;\n              const tpl = pubId ? myTpls[pubId] : null;\n              return (\n                <RallyCard key={tour.id} theme={theme} padding={14}>\n                  <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n                    <div style={{ flex: 1, minWidth: 0 }}>\n                      <div style={{ fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 17, lineHeight: 1.25, overflowWrap: 'anywhere' }}>{tour.title || t('rally.org.tour.untitled', lang)}</div>\n                      <div style={{ marginTop: 4, fontFamily: RAL_FONT_M, fontSize: 12, letterSpacing: '0.04em', color: 'var(--ink-2)' }}>\n                        {rallyOrgTn('rally.org.tour.meta', est.stations, lang, { km: rallyOrgNb(rallyFmtDist(est.distanceM, lang)), min: rallyOrgNb(rallyFmtMin(est.totalMin, lang)) })}\n                      </div>\n                      {tour.start && tour.start.label && (\n                        <div style={{ marginTop: 2, fontFamily: RAL_FONT_B, fontSize: 13, color: 'var(--ink-3)' }}>\n                          🚩 {tour.start.label}{tour.finish && tour.finish.label ? ' → 🏁 ' + tour.finish.label : ''}\n                        </div>\n                      )}\n                      {(pubId || tour.origin) && (\n                        <div style={{ marginTop: 8, display: 'flex', alignItems: 'center', gap: 8, flexWrap: 'wrap' }}>\n                          {pubId && <RallyChip active color=\"var(--cat-nat, #22C55E)\" icon=\"✓\">{t('rally.lib.shared', lang)}</RallyChip>}\n                          {pubId && tpl && (tpl.uses || 0) > 0 && (\n                            <span style={{ fontFamily: RAL_FONT_M, fontSize: 12, color: 'var(--ink-2)' }}>{rallyOrgT('rally.lib.uses', lang, { n: tpl.uses })}</span>\n                          )}\n                          {tour.origin && !pubId && (\n                            <span style={{ fontFamily: RAL_FONT_B, fontSize: 12.5, color: 'var(--ink-3)', overflowWrap: 'anywhere' }}>\n                              {rallyOrgT('rally.lib.tour.basedOn', lang, { title: tour.origin.title || '' })}\n                            </span>\n                          )}\n                        </div>\n                      )}\n                    </div>\n                    <RallyOrgIconBtn label={t('rally.org.tour.more', lang)} onClick={() => setMenuFor(tour)}>\n                      <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><circle cx=\"5\" cy=\"12\" r=\"2\" /><circle cx=\"12\" cy=\"12\" r=\"2\" /><circle cx=\"19\" cy=\"12\" r=\"2\" /></svg>\n                    </RallyOrgIconBtn>\n                  </div>\n                  <div style={{ display: 'flex', gap: 8, marginTop: 12 }}>\n                    <RallyButton size=\"sm\" variant=\"ghost\" onClick={() => onEditTour(tour.id)} style={{ flex: 1 }}>{t('rally.org.tour.edit', lang)}</RallyButton>\n                    <RallyButton size=\"sm\" onClick={() => onStartEvent(tour.id)} style={{ flex: 1 }}>{t('rally.org.tour.createEvent', lang)}</RallyButton>\n                  </div>\n                </RallyCard>\n              );\n            })}\n          </RallyOrgSection>\n        )}\n\n        {!loading && pastEvents.length > 0 && (\n          <RallyOrgSection title={t('rally.org.overview.past', lang)}>\n            {pastEvents.map(eventCard)}\n          </RallyOrgSection>\n        )}\n\n        {!loading && mode === 'local' && (\n          <div style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 12.5, lineHeight: 1.5, color: 'var(--ink-3)', textAlign: 'center' }}>\n            {t('rally.org.overview.localNote', lang)}\n          </div>\n        )}\n      </div>\n\n      <RallySheet open={!!menuFor} onClose={() => setMenuFor(null)} lang={lang}\n        title={menuFor ? (menuFor.title || t('rally.org.tour.untitled', lang)) : ''} kicker={t('rally.org.tour.kicker', lang)}>\n        {menuFor && (\n          <div style={{ display: 'flex', flexDirection: 'column', gap: 10, paddingBottom: 8 }}>\n            <RallyButton variant=\"ghost\" full onClick={() => { const id = menuFor.id; setMenuFor(null); onEditTour(id); }}>{t('rally.org.tour.edit', lang)}</RallyButton>\n            <RallyButton variant=\"ghost\" full onClick={() => dup(menuFor)}>{t('rally.org.tour.duplicate', lang)}</RallyButton>\n            {pubSheet && (\n              <RallyButton variant=\"ghost\" full icon=\"📤\" onClick={() => { const tr = menuFor; setMenuFor(null); setPubTour(tr); }}>\n                {t(menuFor.published && menuFor.published.templateId ? 'rally.lib.tour.manage' : 'rally.lib.tour.publish', lang)}\n              </RallyButton>\n            )}\n            <RallyButton variant=\"secondary\" full onClick={() => { const tr = menuFor; setMenuFor(null); setConfirmDel(tr); }}>{t('rally.org.tour.delete', lang)}</RallyButton>\n          </div>\n        )}\n      </RallySheet>\n\n      <RallyConfirm open={!!confirmDel} lang={lang} danger\n        title={t('rally.org.tour.deleteTitle', lang)}\n        body={t('rally.org.tour.deleteBody', lang)}\n        confirmLabel={t('rally.org.tour.delete', lang)}\n        onCancel={() => setConfirmDel(null)} onConfirm={del} />\n      {pubSheet}\n    </div>\n  );\n}\n\n// ═════════════════════════════════════════════════════════════════════════════\n// 2. Neue Tour: Assistent\n// ═════════════════════════════════════════════════════════════════════════════\n// Ortssuche (Nominatim, Raum München): Tippen, kurz warten, Treffer antippen\nfunction RallyOrgPlaceSearch({ lang, onPick, id }) {\n  const [q, setQ] = React.useState('');\n  const [res, setRes] = React.useState(null); // null = nichts gesucht\n  const [busy, setBusy] = React.useState(false);\n  React.useEffect(() => {\n    const term = q.trim();\n    if (term.length < 3) { setRes(null); setBusy(false); return; }\n    let alive = true;\n    setBusy(true);\n    const tm = setTimeout(() => {\n      rallyOrgSearchPlaces(term, lang).then(list => { if (alive) { setRes(list); setBusy(false); } })\n        .catch(() => { if (alive) { setRes([]); setBusy(false); } });\n    }, 500);\n    return () => { alive = false; clearTimeout(tm); };\n  }, [q, lang]);\n  return (\n    <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>\n      <RallyInput id={id} type=\"search\" value={q} onChange={e => setQ(e.target.value)} autoComplete=\"off\"\n        placeholder={t('rally.org.place.searchPlaceholder', lang)} aria-label={t('rally.org.place.search', lang)} />\n      {busy && <div style={{ fontFamily: RAL_FONT_B, fontSize: 13, color: 'var(--ink-2)' }}>{t('rally.org.place.searching', lang)}</div>}\n      {!busy && res && res.length === 0 && <div style={{ fontFamily: RAL_FONT_B, fontSize: 13, color: 'var(--ink-2)' }}>{t('rally.org.place.noHits', lang)}</div>}\n      {!busy && res && res.length > 0 && (\n        <div role=\"list\" style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n          {res.map((r, i) => (\n            <button key={i} type=\"button\" role=\"listitem\" className=\"rally-tap\" onClick={() => { onPick({ lat: r.lat, lng: r.lng, label: r.label, found: true }); setQ(''); setRes(null); }} style={{\n              display: 'block', width: '100%', minHeight: 48, padding: '8px 12px', textAlign: 'left', cursor: 'pointer',\n              borderRadius: 12, border: '1px solid var(--border-2)', background: 'var(--surface)', color: 'var(--ink)',\n            }}>\n              <span style={{ display: 'block', fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15, lineHeight: 1.3, overflowWrap: 'anywhere' }}>📍 {r.label}</span>\n              {r.detail && <span style={{ display: 'block', marginTop: 1, fontFamily: RAL_FONT_B, fontSize: 13, color: 'var(--ink-2)', overflowWrap: 'anywhere' }}>{r.detail}</span>}\n            </button>\n          ))}\n        </div>\n      )}\n    </div>\n  );\n}\n\nfunction RallyOrgPlacePicker({ lang, value, onChange, userPos, picking, onPickMap, allowSame, sameActive, onSame, searchId, labelId }) {\n  const isPlace = (p) => value && Math.abs(value.lat - p.lat) < 1e-6 && Math.abs(value.lng - p.lng) < 1e-6;\n  // onChange(v, { recenter }): erneutes Antippen eines Ortes zentriert die Karte wieder\n  return (\n    <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n      <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n        {allowSame && (\n          <RallyChip active={sameActive} onClick={onSame} icon=\"🔁\">{t('rally.org.wizard.finishSame', lang)}</RallyChip>\n        )}\n        {RAL_ORG_PLACES.map(p => (\n          <RallyChip key={p.key} active={!sameActive && isPlace(p)} onClick={() => onChange({ lat: p.lat, lng: p.lng, label: rallyOrgPlaceName(p, lang) })}>\n            {rallyOrgPlaceName(p, lang)}\n          </RallyChip>\n        ))}\n        {userPos && (\n          <RallyChip active={!sameActive && value && value.mine} icon=\"📍\"\n            onClick={() => onChange({ lat: userPos.lat, lng: userPos.lng, label: t('rally.org.place.myPos', lang), mine: true })}>\n            {t('rally.org.place.myPos', lang)}\n          </RallyChip>\n        )}\n        <RallyChip active={picking || (!sameActive && value && value.picked)} icon=\"👆\" onClick={onPickMap}>{t('rally.org.place.onMap', lang)}</RallyChip>\n      </div>\n      <RallyOrgPlaceSearch lang={lang} id={searchId} onPick={(v) => onChange(v)} />\n      {value && !sameActive && (\n        <RallyField label={t('rally.org.place.label', lang)} htmlFor={labelId} hint={t('rally.org.place.labelHint', lang)}>\n          <RallyInput id={labelId} value={value.label || ''} maxLength={60}\n            onChange={e => onChange({ ...value, label: e.target.value, labelEdited: true }, { keepView: true })} />\n        </RallyField>\n      )}\n    </div>\n  );\n}\n// Nach dem Tippen auf die Karte einmal die Adresse holen und als Bezeichnung nehmen\nfunction rallyOrgLabelFromMap(pt, lang, apply) {\n  rallyOrgReverse(pt.lat, pt.lng, lang).then(label => { if (label) apply(label); });\n}\n\nfunction RallyOrgWizard({ lang, theme, owner, userPosition, currentCity, onBack, onCreated, onOpenLibrary, showToast }) {\n  const geo = useRallyGeo({ enabled: true });\n  const myPos = (geo && geo.pos) || userPosition || null;\n  const first = RAL_ORG_PLACES[0];\n  const [title, setTitle] = React.useState('');\n  const [audience, setAudience] = React.useState('adults');\n  const [duration, setDuration] = React.useState(90);\n  const [start, setStart] = React.useState({ lat: first.lat, lng: first.lng, label: rallyOrgPlaceName(first, lang) });\n  const [finishSame, setFinishSame] = React.useState(true);\n  const [finish, setFinish] = React.useState(null);\n  const [themes, setThemes] = React.useState([]);\n  const [picking, setPicking] = React.useState(null); // 'start' | 'finish' | null\n  const [busy, setBusy] = React.useState(false);\n  const [noResult, setNoResult] = React.useState(false);\n  // Kartenausschnitt folgt dem zuletzt gewählten Ort; nonce erzwingt erneutes Zentrieren beim zweiten Antippen\n  const [focus, setFocus] = React.useState({ lat: first.lat, lng: first.lng, n: 0 });\n  rallyOrgFactsVersion();\n\n  const markers = [];\n  if (start) markers.push({ id: 's', kind: 'start', lat: start.lat, lng: start.lng, label: start.label });\n  if (!finishSame && finish) markers.push({ id: 'f', kind: 'finish', lat: finish.lat, lng: finish.lng, label: finish.label });\n\n  const refocus = (v) => setFocus(f => ({ lat: v.lat, lng: v.lng, n: f.n + 1 }));\n  const same = (a, b) => a && b && Math.abs(a.lat - b.lat) < 1e-9 && Math.abs(a.lng - b.lng) < 1e-9;\n  const pickStart = (v, opts) => { setStart(v); setPicking(null); if (!(opts && opts.keepView)) refocus(v); };\n  const pickFinish = (v, opts) => { setFinish(v); setFinishSame(false); setPicking(null); if (!(opts && opts.keepView)) refocus(v); };\n\n  const onMapTap = picking ? (p) => {\n    const which = picking;\n    const v = { lat: p.lat, lng: p.lng, label: t(which === 'start' ? 'rally.org.place.picked' : 'rally.org.place.pickedFinish', lang), picked: true };\n    if (which === 'start') setStart(v); else { setFinish(v); setFinishSame(false); }\n    setPicking(null);\n    // Adresse nachladen, solange niemand die Bezeichnung selbst geändert hat\n    rallyOrgLabelFromMap(p, lang, (label) => {\n      const upd = (cur) => (same(cur, p) && !cur.labelEdited ? { ...cur, label } : cur);\n      if (which === 'start') setStart(upd); else setFinish(upd);\n    });\n  } : undefined;\n\n  const toggleTheme = (k) => setThemes(th => th.indexOf(k) >= 0 ? th.filter(x => x !== k) : th.concat([k]));\n\n  const suggest = async () => {\n    if (!start) return;\n    setBusy(true); setNoResult(false);\n    try {\n      const tokens = [];\n      RAL_ORG_THEMES.forEach(th => { if (themes.indexOf(th.key) >= 0) th.match.forEach(m => tokens.push(m)); });\n      const strip = (p) => p ? { lat: p.lat, lng: p.lng, label: p.label } : null;\n      const tour = window.RallyEngine.suggestTour(window.FACTS || [], {\n        start: strip(start), finish: finishSame ? null : strip(finish), durationMin: duration, audience,\n        themes: tokens, city: '', seed: Date.now(), lang,\n        // Essen & Trinken: „Kulinarisch“ ist selten vergeben, darum auch Bier- und Wirtshaus-Titel bevorzugen\n        titleKeywords: themes.indexOf('food') >= 0 ? RAL_ORG_FOOD_KEYWORDS : null,\n      });\n      if (!tour.stations.length) { setNoResult(true); setBusy(false); return; }\n      tour.title = title.trim() || rallyOrgT('rally.org.wizard.defaultTitle', lang, { place: start.label });\n      tour.city = currentCity || 'M\\u00fcnchen';\n      tour.themeKeys = themes.slice();\n      tour.ownerId = owner;\n      // Kinder und Schulklassen: kein Wettrennen ans Ziel (im Editor wieder einschaltbar)\n      if (audience === 'kids' || audience === 'school') tour.settings = Object.assign({}, tour.settings, { speedWeight: 'off' });\n      const saved = await window.RallyStore.saveTour(tour);\n      onCreated(saved.id);\n    } catch (e) {\n      console.warn('[RallyOrg] suggest', e);\n      showToast(t('rally.org.error.generic', lang));\n      setBusy(false);\n    }\n  };\n\n  return (\n    <div>\n      <RallyOrgHeader kicker={t('rally.org.wizard.kicker', lang)} title={t('rally.org.wizard.title', lang)} onBack={onBack} lang={lang} />\n      <div style={{ padding: '18px 16px 0', display: 'flex', flexDirection: 'column', gap: 22 }}>\n        <RallyField label={t('rally.org.wizard.name', lang)} htmlFor=\"ral-org-title\" hint={t('rally.org.wizard.nameHint', lang)}>\n          <RallyInput id=\"ral-org-title\" value={title} maxLength={80} onChange={e => setTitle(e.target.value)}\n            placeholder={t('rally.org.wizard.namePlaceholder', lang)} />\n        </RallyField>\n\n        <RallyOrgSection title={t('rally.org.wizard.audience', lang)}>\n          <div role=\"radiogroup\" style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\n            {RAL_ORG_AUDIENCES.map(a => (\n              <RallyChip key={a.key} active={audience === a.key} onClick={() => setAudience(a.key)} icon={a.emoji} style={{ width: '100%' }}>\n                {t('rally.org.audience.' + a.key, lang)}\n              </RallyChip>\n            ))}\n          </div>\n          <div style={{ fontFamily: RAL_FONT_B, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-2)' }}>{t('rally.org.audience.' + audience + '.hint', lang)}</div>\n          {onOpenLibrary && (\n            <button type=\"button\" className=\"rally-tap\" onClick={() => onOpenLibrary(RAL_ORG_AUD_PACK[audience] || null, audience)} style={{\n              alignSelf: 'flex-start', minHeight: 44, padding: '0 2px', border: 'none', background: 'transparent', cursor: 'pointer',\n              fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 14.5, color: 'var(--stamp)', textAlign: 'left',\n            }}>📚 {t('rally.org.wizard.readyLink.' + audience, lang)} ›</button>\n          )}\n        </RallyOrgSection>\n\n        <RallyOrgSection title={t('rally.org.wizard.duration', lang)}>\n          <RallySegmented ariaLabel={t('rally.org.wizard.duration', lang)} value={duration} onChange={setDuration}\n            options={RAL_ORG_DURATIONS.map(d => ({ value: d, label: d < 120 ? d + ' min' : (d / 60) + ' h' }))} />\n        </RallyOrgSection>\n\n        <RallyOrgSection title={t('rally.org.wizard.start', lang)} hint={t('rally.org.wizard.startHint', lang)}>\n          <RallyOrgPlacePicker lang={lang} value={start} onChange={pickStart} userPos={myPos} searchId=\"ral-org-start-search\" labelId=\"ral-org-start-label\"\n            picking={picking === 'start'} onPickMap={() => setPicking(picking === 'start' ? null : 'start')} />\n        </RallyOrgSection>\n\n        <RallyOrgSection title={t('rally.org.wizard.finish', lang)} hint={t('rally.org.wizard.finishHint', lang)}>\n          <RallyOrgPlacePicker lang={lang} value={finish} allowSame sameActive={finishSame} searchId=\"ral-org-finish-search\" labelId=\"ral-org-finish-label\"\n            onSame={() => { setFinishSame(true); setPicking(null); if (start) refocus(start); }}\n            onChange={pickFinish} userPos={myPos}\n            picking={picking === 'finish'} onPickMap={() => setPicking(picking === 'finish' ? null : 'finish')} />\n        </RallyOrgSection>\n\n        <div>\n          {picking && (\n            <RallyOrgNote tone=\"warn\" icon=\"👆\" style={{ marginBottom: 8 }}\n              title={t(picking === 'start' ? 'rally.org.wizard.tapStart' : 'rally.org.wizard.tapFinish', lang)} />\n          )}\n          {/* Winzige Zoom-Änderung je Antippen, damit die Karte auch beim gleichen Ort neu zentriert */}\n          <RallyMap theme={theme} lang={lang} height={210} center={{ lat: focus.lat, lng: focus.lng }} zoom={14.5 + (focus.n % 2) * 0.001}\n            markers={markers} onMapTap={onMapTap} />\n        </div>\n\n        <RallyOrgSection title={t('rally.org.wizard.themes', lang)} hint={t('rally.org.wizard.themesHint', lang)}>\n          <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n            {RAL_ORG_THEMES.map(th => (\n              <RallyChip key={th.key} active={themes.indexOf(th.key) >= 0} onClick={() => toggleTheme(th.key)} icon={th.emoji}>\n                {t('rally.org.theme.' + th.key, lang)}\n              </RallyChip>\n            ))}\n          </div>\n        </RallyOrgSection>\n\n        {noResult && (\n          <RallyOrgNote tone=\"error\" icon=\"🧭\" title={t('rally.org.wizard.noResult', lang)}>{t('rally.org.wizard.noResultBody', lang)}</RallyOrgNote>\n        )}\n\n        <RallyButton size=\"lg\" full icon=\"✨\" disabled={busy || !start} onClick={suggest}>\n          {busy ? t('rally.org.wizard.working', lang) : t('rally.org.wizard.suggest', lang)}\n        </RallyButton>\n        <div style={{ marginTop: -10, fontFamily: RAL_FONT_B, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-3)', textAlign: 'center' }}>\n          {t('rally.org.wizard.suggestHint', lang)}\n        </div>\n      </div>\n    </div>\n  );\n}\n\n// ═════════════════════════════════════════════════════════════════════════════\n// 3. Editor\n// ═════════════════════════════════════════════════════════════════════════════\nfunction RallyOrgEditor({ tourId, lang, theme, owner, user, onBack, onCreateEvent, onViewTemplate, showToast }) {\n  const [tour, setTour] = React.useState(null);\n  const [pubOpen, setPubOpen] = React.useState(false);\n  const [pubTpl, setPubTpl] = React.useState(null); // veröffentlichte Vorlage (Code, Nutzung)\n  const [missing, setMissing] = React.useState(false);\n  const [saveState, setSaveState] = React.useState('saved'); // saved | dirty | saving\n  const [openStation, setOpenStation] = React.useState(null);   // station id\n  const [placing, setPlacing] = React.useState(null);           // { kind: 'custom'|'info'|'move'|'start'|'finish', stationId? }\n  const [addOpen, setAddOpen] = React.useState(false);\n  const [confirmDel, setConfirmDel] = React.useState(null);\n  const [savedAt, setSavedAt] = React.useState(null);   // Zeit der letzten Speicherung (ISO)\n  // Neu gesetzte eigene Stationen: Prüffehler erst zeigen, wenn das Sheet einmal geschlossen wurde\n  const [freshIds, setFreshIds] = React.useState({});\n  const tourRef = React.useRef(null);\n  const dirtyRef = React.useRef(false);\n  const timerRef = React.useRef(null);\n  const mapBoxRef = React.useRef(null);\n  const checkRef = React.useRef(null);\n  rallyOrgFactsVersion();\n\n  React.useEffect(() => {\n    let alive = true;\n    window.RallyStore.getTour(tourId).then(tr => {\n      if (!alive) return;\n      if (!tr) { setMissing(true); return; }\n      tr.settings = Object.assign({}, window.RallyEngine.DEFAULT_SETTINGS, tr.settings || {});\n      tourRef.current = tr; setTour(tr);\n      setSavedAt(tr.updatedAt || null);\n    }).catch(() => alive && setMissing(true));\n    return () => { alive = false; };\n  }, [tourId]);\n\n  const saveNow = React.useCallback(async () => {\n    clearTimeout(timerRef.current);\n    const tr = tourRef.current;\n    if (!tr || !dirtyRef.current) return tr;\n    dirtyRef.current = false;\n    setSaveState('saving');\n    try {\n      const saved = await window.RallyStore.saveTour(tr);\n      if (!dirtyRef.current) { setSaveState('saved'); setSavedAt(new Date().toISOString()); }\n      return saved;\n    } catch (e) {\n      dirtyRef.current = true;\n      setSaveState('dirty');\n      showToast(t('rally.org.editor.saveFailed', lang));\n      return null;\n    }\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n  // Beim Verlassen speichern\n  React.useEffect(() => () => {\n    clearTimeout(timerRef.current);\n    if (dirtyRef.current && tourRef.current) { window.RallyStore.saveTour(tourRef.current).catch(() => {}); }\n  }, []);\n\n  const update = (fn) => {\n    const next = fn(tourRef.current);\n    next.updatedAt = new Date().toISOString();\n    tourRef.current = next;\n    setTour(next);\n    dirtyRef.current = true;\n    setSaveState('dirty');\n    clearTimeout(timerRef.current);\n    timerRef.current = setTimeout(() => { saveNow(); }, 1200);\n  };\n  // Veröffentlichungsstand: der Store setzt tour.published selbst. Nur dieses Feld übernehmen,\n  // damit ungespeicherte Änderungen im Editor erhalten bleiben und kein alter Stand es überschreibt.\n  const pubTemplateId = tour && tour.published ? tour.published.templateId : null;\n  React.useEffect(() => {\n    setPubTpl(null);\n    const S = window.RallyStore;\n    if (!pubTemplateId || typeof S.getTemplate !== 'function') return;\n    let alive = true;\n    Promise.resolve().then(() => S.getTemplate(pubTemplateId)).then(tp => { if (alive) setPubTpl(tp || null); }).catch(() => {});\n    return () => { alive = false; };\n  }, [pubTemplateId]);\n  // Nutzungszahl („Noch von keiner Gruppe übernommen“) beim Zurückkehren frisch holen\n  useRallyOrgOnFocus(() => {\n    const S = window.RallyStore;\n    if (!pubTemplateId || typeof S.myTemplateStats !== 'function') return;\n    Promise.resolve().then(() => S.myTemplateStats(pubTemplateId)).then(st => {\n      if (st) setPubTpl(cur => (cur ? { ...cur, uses: st.uses, ratingCount: st.ratingCount } : cur));\n    }).catch(() => {});\n  });\n  const syncPublished = async (tpl) => {\n    let published = null;\n    try {\n      const fresh = await window.RallyStore.getTour(tourId);\n      published = fresh && fresh.published ? fresh.published : null;\n    } catch (e) {}\n    if (tpl && tpl.id && !published) published = { templateId: tpl.id, version: tpl.version || 1 };\n    const next = { ...tourRef.current };\n    if (published) next.published = published; else delete next.published;\n    tourRef.current = next;\n    setTour(next);\n    if (tpl) setPubTpl(tpl);\n  };\n  const setSettings = (patch) => update(tr => ({ ...tr, settings: { ...tr.settings, ...patch } }));\n  // fnOrStation: neue Station oder Updater (Station → Station), damit schnelle Eingaben sich nicht überschreiben\n  const setStation = (id, fnOrStation) => update(tr => ({\n    ...tr, stations: tr.stations.map(s => s.id === id ? (typeof fnOrStation === 'function' ? fnOrStation(s) : fnOrStation) : s),\n  }));\n  const moveStation = (idx, dir) => update(tr => {\n    const arr = tr.stations.slice();\n    const j = idx + dir;\n    if (j < 0 || j >= arr.length) return tr;\n    const tmp = arr[idx]; arr[idx] = arr[j]; arr[j] = tmp;\n    return { ...tr, stations: arr };\n  });\n  const removeStation = (id) => update(tr => ({ ...tr, stations: tr.stations.filter(s => s.id !== id) }));\n\n  if (missing) {\n    return (\n      <div>\n        <RallyOrgHeader kicker={t('rally.org.editor.kicker', lang)} title={t('rally.org.tour.untitled', lang)} onBack={onBack} lang={lang} />\n        <RallyEmpty icon=\"🗺️\" title={t('rally.org.editor.missing', lang)} action={<RallyButton onClick={onBack}>{t('rally.org.backToOverview', lang)}</RallyButton>} />\n      </div>\n    );\n  }\n  if (!tour) return <RallyLoading lang={lang} where={'org.editor'} onBack={onBack} style={{ paddingTop: 60 }} />;\n\n  const E = window.RallyEngine;\n  const est = rallyOrgEstimate(tour);\n  const s = tour.settings;\n  const limit = s.timeLimitMin;\n  // Gleiche Rechnung wie die Wege-Tabelle: Teamanzahl und Zeitlimit der Tour\n  const allIssues = E.validateTour(tour, { teamCount: s.defaultTeamCount, timeLimitMin: limit || null });\n  // Frisch gesetzte Stationen noch nicht anmeckern (R5). 'info' ist nur ein Hinweis, keine Warnung.\n  const issues = allIssues.filter(i => (!i.stationId || !freshIds[i.stationId]) && i.level !== 'info');\n  const infos = allIssues.filter(i => i.level === 'info');\n  const issueMap = rallyOrgIssueMap(issues);\n  const errors = allIssues.filter(i => i.level === 'error');\n  const unfairCounts = typeof E.fairnessWarnings === 'function' ? E.fairnessWarnings(tour) : null;\n  const stationNo = (id) => tour.stations.findIndex(x => x.id === id) + 1;\n  const center = tour.stations.length\n    ? { lat: tour.stations.reduce((a, x) => a + x.lat, 0) / tour.stations.length, lng: tour.stations.reduce((a, x) => a + x.lng, 0) / tour.stations.length }\n    : (tour.start || RAL_MUC);\n\n  const fairRows = [];\n  for (let n = 2; n <= 8; n++) {\n    const f = tour.stations.length && tour.start ? E.fairness(tour, n) : null;\n    // ok aus fairnessWarnings, damit Tabelle und „Prüfung“ dieselbe Aussage machen\n    fairRows.push({ n, f, ok: unfairCounts ? unfairCounts.indexOf(n) < 0 : (f ? f.fair : true) });\n  }\n  const curFair = fairRows.find(r => r.n === s.defaultTeamCount);\n  const curDist = curFair && curFair.f ? curFair.f.distances : null;\n  const distVals = curDist ? Object.keys(curDist).map(k => curDist[k]) : [];\n  const maxDist = distVals.length ? Math.max.apply(null, distVals) : 0;\n  const minDist = distVals.length ? Math.min.apply(null, distVals) : 0;\n  // Strecke je nach Startstation: als Spanne zeigen, wenn die Teams merklich unterschiedlich weit laufen\n  const distRange = distVals.length && rallyFmtDist(minDist, lang) !== rallyFmtDist(maxDist, lang);\n  const distValue = distRange\n    ? (maxDist >= 1000 && minDist >= 1000 ? rallyFmtNum(minDist / 1000, lang, 1) + '–' + rallyFmtDist(maxDist, lang) : rallyFmtDist(minDist, lang) + '–' + rallyFmtDist(maxDist, lang))\n    : rallyFmtDist(distVals.length ? maxDist : est.distanceM, lang);\n  const teamsPreview = E.defaultTeams(s.defaultTeamCount, lang);\n\n  const stats = [\n    { label: t('rally.org.stat.duration', lang), value: rallyFmtMin(est.totalMin, lang), tone: limit && est.totalMin > limit ? 'warn' : undefined,\n      title: limit && est.totalMin > limit ? rallyOrgT('rally.org.stat.overLimit', lang, { min: limit }) : undefined },\n    { label: t('rally.org.stat.distance', lang), value: distValue },\n    { label: t('rally.org.stat.stations', lang), value: String(est.stations), tone: est.stations < 3 ? 'warn' : undefined },\n    { label: t('rally.org.stat.start', lang), value: tour.start ? tour.start.label : '', mono: false },\n    { label: t('rally.org.stat.finish', lang), value: tour.finish ? tour.finish.label : t('rally.org.stat.loop', lang), mono: false },\n    { label: t('rally.org.stat.audience', lang), value: t('rally.org.audience.' + (tour.audience || 'adults'), lang), mono: false },\n  ];\n\n  const startPlacing = (p) => {\n    setPlacing(p);\n    setOpenStation(null);\n    setTimeout(() => { try { mapBoxRef.current && mapBoxRef.current.scrollIntoView({ behavior: 'smooth', block: 'center' }); } catch (e) {} }, 60);\n  };\n\n  // Punkt setzen: per Kartentipp, Tipp auf einen Marker (der sonst den Klick schluckt) oder Ortssuche (label)\n  const placeAt = (p, pt, label) => {\n    setPlacing(null);\n    if (p.kind === 'custom' || p.kind === 'info') {\n      const n = tourRef.current.stations.length + 1;\n      const title = label || rallyOrgT(p.kind === 'custom' ? 'rally.org.station.newCustom' : 'rally.org.station.newInfo', lang, { n });\n      const st = p.kind === 'custom'\n        ? { id: rallyOrgUid('st_'), kind: 'custom', lat: pt.lat, lng: pt.lng, title, text: '', note: '',\n            puzzle: { type: 'text', question: '', answer: '', accepted: [], points: 100, source: 'custom' } }\n        : { id: rallyOrgUid('st_'), kind: 'info', lat: pt.lat, lng: pt.lng, title, text: '', note: '', puzzle: null };\n      update(tr => ({ ...tr, stations: tr.stations.concat([st]) }));\n      setFreshIds(m => ({ ...m, [st.id]: true }));\n      setOpenStation(st.id);\n    } else if (p.kind === 'move') {\n      update(tr => ({ ...tr, stations: tr.stations.map(x => x.id === p.stationId ? { ...x, lat: pt.lat, lng: pt.lng } : x) }));\n      setOpenStation(p.stationId);\n      showToast(t('rally.org.station.moved', lang));\n    } else if (p.kind === 'start' || p.kind === 'finish') {\n      const key = p.kind;\n      update(tr => ({ ...tr, [key]: { lat: pt.lat, lng: pt.lng, label: label || t(key === 'start' ? 'rally.org.place.picked' : 'rally.org.place.pickedFinish', lang) } }));\n      if (label) return;\n      // Adresse statt „Gewählter Treffpunkt“, solange der Punkt noch derselbe ist\n      rallyOrgLabelFromMap(pt, lang, (label) => {\n        const cur = tourRef.current && tourRef.current[key];\n        if (cur && Math.abs(cur.lat - pt.lat) < 1e-9 && Math.abs(cur.lng - pt.lng) < 1e-9 && !cur.labelEdited) {\n          update(tr => ({ ...tr, [key]: { ...tr[key], label } }));\n        }\n      });\n    }\n  };\n  const mapMarkers = rallyOrgTourMarkers(tour, lang);\n  const onMapTap = placing ? (pt) => placeAt(placing, pt) : undefined;\n  const onMarkerTap = (id) => {\n    if (placing) {\n      const m = mapMarkers.find(x => x.id === id);\n      if (m) placeAt(placing, { lat: m.lat, lng: m.lng });\n      return;\n    }\n    if (id && id.indexOf('__') !== 0) setOpenStation(id);\n  };\n\n  const placingText = placing ? t({\n    custom: 'rally.org.placing.custom', info: 'rally.org.placing.info', move: 'rally.org.placing.move',\n    start: 'rally.org.placing.start', finish: 'rally.org.placing.finish',\n  }[placing.kind], lang) : '';\n\n  const addFact = (fact) => {\n    const fid = rallyOrgFactKey(fact);\n    const exists = tourRef.current.stations.some(x => x.id === 'st_' + fid);\n    const st = {\n      id: exists ? rallyOrgUid('st_') : 'st_' + fid, kind: 'fact', factId: fid, lat: fact.lat, lng: fact.lng,\n      title: rallyOrgFactTitle(fact, lang), text: '', note: '',\n      puzzle: E.puzzleFromFact(fact, tourRef.current.audience, lang) || null,\n    };\n    // An der günstigsten Stelle der Route einfügen, nicht ans Ende (Spec §11)\n    const cur = tourRef.current;\n    let pos = typeof E.insertPositionFor === 'function' ? E.insertPositionFor(cur, { lat: fact.lat, lng: fact.lng }) : cur.stations.length;\n    if (!(pos >= 0 && pos <= cur.stations.length)) pos = cur.stations.length;\n    update(tr => { const arr = tr.stations.slice(); arr.splice(pos, 0, st); return { ...tr, stations: arr }; });\n    showToast(rallyOrgT('rally.org.add.added', lang, { n: pos + 1 }));\n  };\n\n  const issueText = (i) => rallyOrgIssueText(i, lang, stationNo, s.defaultTeamCount);\n\n  const openSt = openStation ? tour.stations.find(x => x.id === openStation) : null;\n  const closeStation = () => {\n    // Ab jetzt gelten für diese Station die normalen Prüfhinweise\n    if (openStation && freshIds[openStation]) setFreshIds(m => { const n = { ...m }; delete n[openStation]; return n; });\n    setOpenStation(null);\n  };\n  const tryCreateEvent = async () => {\n    if (errors.length > 0 || !tour.stations.length) {\n      setFreshIds({});\n      showToast(t('rally.org.editor.fixFirst', lang));\n      setTimeout(() => { try { checkRef.current && checkRef.current.scrollIntoView({ behavior: 'smooth', block: 'start' }); } catch (e) {} }, 60);\n      return;\n    }\n    await saveNow();\n    onCreateEvent(tour.id);\n  };\n\n  // Ruhige Speicheranzeige statt Knopf (R4)\n  const saveLine = saveState === 'saving' ? t('rally.org.editor.saving', lang)\n    : saveState === 'dirty' ? t('rally.org.editor.unsaved', lang)\n    : savedAt ? rallyOrgT('rally.org.editor.autoSavedAt', lang, { time: rallyOrgFmtTime(savedAt, lang) }) : t('rally.org.editor.autoSaved', lang);\n\n  return (\n    <div>\n      <RallyOrgHeader kicker={t('rally.org.editor.kicker', lang)} title={tour.title || t('rally.org.tour.untitled', lang)}\n        onBack={async () => { await saveNow(); onBack(); }} lang={lang} />\n      <div style={{ padding: '14px 16px 0', display: 'flex', flexDirection: 'column', gap: 22 }}>\n        <RallyStatsBar items={stats} />\n        {distRange && (\n          <div style={{ marginTop: -14, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-2)' }}>\n            {rallyOrgT('rally.org.stat.distRange', lang, { min: rallyOrgNb(rallyFmtDist(minDist, lang)), max: rallyOrgNb(rallyFmtDist(maxDist, lang)) })}\n          </div>\n        )}\n        {tour.origin && (\n          <div style={{ marginTop: -12, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-3)', overflowWrap: 'anywhere' }}>\n            {rallyOrgT('rally.lib.tour.basedOn', lang, { title: tour.origin.title || '' })}\n          </div>\n        )}\n\n        <div ref={mapBoxRef} style={{ scrollMarginTop: 12 }}>\n          {placing && (\n            <RallyOrgNote tone=\"warn\" icon=\"👆\" style={{ marginBottom: 8 }} title={placingText}\n              action={\n                <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n                  <div style={{ fontFamily: RAL_FONT_B, fontWeight: 600, fontSize: 13, color: 'var(--ink-2)' }}>{t('rally.org.placing.searchHint', lang)}</div>\n                  <RallyOrgPlaceSearch lang={lang} id=\"ral-org-placing-search\" onPick={(v) => { const p = placing; if (p) placeAt(p, { lat: v.lat, lng: v.lng }, v.label); }} />\n                  <div>\n                    <RallyButton size=\"sm\" variant=\"ghost\" onClick={() => {\n                      const p = placing; setPlacing(null);\n                      if (p.kind === 'move') setOpenStation(p.stationId);\n                    }}>{t('rally.ui.cancel', lang)}</RallyButton>\n                  </div>\n                </div>\n              } />\n          )}\n          <RallyMap theme={theme} lang={lang} height={placing ? 320 : 260} center={center} zoom={14.5}\n            markers={mapMarkers} line={rallyOrgRouteLine(tour)} fitToMarkers={!placing}\n            recenter onMapTap={onMapTap} onMarkerTap={onMarkerTap} />\n        </div>\n\n        <RallyOrgSection title={rallyOrgT('rally.org.editor.stations', lang, { n: tour.stations.length })} hint={t('rally.org.editor.stationsHint', lang)}>\n          {tour.stations.length === 0 && (\n            <RallyOrgNote icon=\"🧩\" title={t('rally.org.editor.noStations', lang)}>{t('rally.org.editor.noStationsBody', lang)}</RallyOrgNote>\n          )}\n          <ol style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexDirection: 'column', gap: 8 }}>\n            {tour.stations.map((st, i) => {\n              const kind = RAL_ORG_KIND[st.kind] || RAL_ORG_KIND.fact;\n              const q = rallyOrgQType(st);\n              const lvl = issueMap[st.id];\n              const qHints = freshIds[st.id] ? [] : rallyOrgQuestionHints(st, lang);\n              return (\n                <li key={st.id} style={{\n                  padding: '10px 10px 8px 12px', borderRadius: 16,\n                  background: 'var(--surface)', border: '1px solid ' + (lvl === 'error' ? 'var(--stamp)' : 'var(--border)'),\n                }}>\n                  <button type=\"button\" className=\"rally-tap\" onClick={() => setOpenStation(st.id)}\n                    aria-label={rallyOrgT('rally.org.station.openAria', lang, { n: i + 1, title: st.title })}\n                    style={{ width: '100%', display: 'flex', alignItems: 'flex-start', gap: 10, minHeight: 44, padding: 0, border: 'none', background: 'transparent', cursor: 'pointer', textAlign: 'left', color: 'var(--ink)' }}>\n                    <span aria-hidden=\"true\" style={{\n                      width: 32, height: 32, borderRadius: '50%', flexShrink: 0, background: kind.color, color: '#FFFFFF',\n                      display: 'flex', alignItems: 'center', justifyContent: 'center', fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 15,\n                      border: '2px solid #FFFFFF', boxShadow: '0 1px 4px rgba(0,0,0,0.25)',\n                    }}>{i + 1}</span>\n                    <span style={{\n                      flex: 1, minWidth: 0, paddingTop: 5, display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden',\n                      fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15, lineHeight: 1.3, overflowWrap: 'anywhere',\n                    }}>{st.title || t('rally.org.station.untitled', lang)}</span>\n                    <span aria-hidden=\"true\" style={{ paddingTop: 6, color: 'var(--ink-3)', fontSize: 16 }}>›</span>\n                  </button>\n                  <div style={{ display: 'flex', alignItems: 'center', gap: 6, marginTop: 6, paddingLeft: 42 }}>\n                    <span style={{ display: 'flex', flexWrap: 'wrap', gap: 4, minWidth: 0 }}>\n                      {st.kind === 'custom' && <RallyChip style={{ fontSize: 12, padding: '1px 9px' }}>{t('rally.org.kind.customShort', lang)}</RallyChip>}\n                      <RallyChip active={q === 'estimate'} color={q === 'estimate' ? 'var(--coin-dk)' : undefined} style={{ fontSize: 12, padding: '1px 9px' }}>\n                        {t('rally.org.qtype.' + q, lang)}\n                      </RallyChip>\n                    </span>\n                    {lvl && <span role=\"img\" style={{ fontSize: 14 }} aria-label={t(lvl === 'error' ? 'rally.org.issue.errorAria' : 'rally.org.issue.warnAria', lang)}>{lvl === 'error' ? '⛔' : '⚠️'}</span>}\n                    <span style={{ flex: 1 }} />\n                    <RallyOrgIconBtn label={t('rally.org.station.up', lang)} disabled={i === 0} onClick={() => moveStation(i, -1)}>{RAL_ORG_ICON.up}</RallyOrgIconBtn>\n                    <RallyOrgIconBtn label={t('rally.org.station.down', lang)} disabled={i === tour.stations.length - 1} onClick={() => moveStation(i, 1)}>{RAL_ORG_ICON.down}</RallyOrgIconBtn>\n                    <RallyOrgIconBtn label={t('rally.org.station.delete', lang)} tone=\"danger\" onClick={() => setConfirmDel(st)}>{RAL_ORG_ICON.trash}</RallyOrgIconBtn>\n                  </div>\n                  {qHints.length > 0 && (\n                    <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6, marginTop: 6, paddingLeft: 42 }}>\n                      {qHints.map(h => (\n                        <button key={h} type=\"button\" className=\"rally-tap\" onClick={() => setOpenStation(st.id)} title={t('rally.org.qhint.' + h + '.body', lang)} style={{\n                          minHeight: 32, padding: '2px 10px', borderRadius: 999, cursor: 'pointer',\n                          border: '1px dashed rgba(201,160,15,0.7)', background: 'var(--coin-soft)', color: 'var(--ink)',\n                          fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 12.5,\n                        }}>{t('rally.org.qhint.' + h, lang)}</button>\n                      ))}\n                    </div>\n                  )}\n                </li>\n              );\n            })}\n          </ol>\n          <div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, minmax(0, 1fr))', gap: 8 }}>\n            {[\n              { key: 'fact', icon: '📚', onClick: () => setAddOpen(true) },\n              { key: 'custom', icon: '📍', onClick: () => startPlacing({ kind: 'custom' }) },\n              { key: 'info', icon: 'ℹ️', onClick: () => startPlacing({ kind: 'info' }) },\n            ].map(a => (\n              <button key={a.key} type=\"button\" className=\"rally-tap\" onClick={a.onClick} style={{\n                minHeight: 64, padding: '8px 4px', borderRadius: 14, cursor: 'pointer',\n                border: '1.5px dashed var(--border-2)', background: 'var(--surface-2)', color: 'var(--ink)',\n                display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: 4,\n              }}>\n                <span aria-hidden=\"true\" style={{ fontSize: 18 }}>{a.icon}</span>\n                <span style={{ fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 13, lineHeight: 1.2, textAlign: 'center' }}>{t('rally.org.add.' + a.key, lang)}</span>\n              </button>\n            ))}\n          </div>\n        </RallyOrgSection>\n\n        <RallyOrgSection title={t('rally.org.editor.check', lang)} style={{ scrollMarginTop: 12 }}>\n          <span ref={checkRef} aria-hidden=\"true\" style={{ display: 'block', height: 0, scrollMarginTop: 60 }} />\n          {issues.length === 0 ? (\n            <RallyOrgNote tone=\"ok\" icon=\"✅\" title={t('rally.org.editor.allGood', lang)}>\n              {rallyOrgT(unfairCounts && unfairCounts.indexOf(s.defaultTeamCount) < 0 && tour.stations.length && tour.start ? 'rally.org.editor.allGoodBodyTeams' : 'rally.org.editor.allGoodBody', lang, { teams: s.defaultTeamCount })}\n            </RallyOrgNote>\n          ) : (\n            <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n              {issues.map((i, k) => (\n                <div key={k} onClick={i.stationId ? () => setOpenStation(i.stationId) : undefined}\n                  className={i.stationId ? 'rally-tap' : undefined}\n                  role={i.stationId ? 'button' : undefined} tabIndex={i.stationId ? 0 : undefined}\n                  onKeyDown={i.stationId ? (e) => { if (e.key === 'Enter') setOpenStation(i.stationId); } : undefined}\n                  style={{ cursor: i.stationId ? 'pointer' : 'default' }}>\n                  <RallyOrgNote tone={i.level === 'error' ? 'error' : 'warn'} icon={i.level === 'error' ? '⛔' : '⚠️'} title={issueText(i)} />\n                </div>\n              ))}\n            </div>\n          )}\n          {/* Hinweise (level 'info'): gedämpft, keine Warnung */}\n          {infos.map((i, k) => (\n            <div key={'i' + k} role=\"note\" aria-label={t('rally.org.issue.infoAria', lang)} style={{\n              display: 'flex', gap: 8, alignItems: 'flex-start', padding: '2px 4px',\n              fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13, lineHeight: 1.5, color: 'var(--ink-2)',\n            }}>\n              <span aria-hidden=\"true\">ℹ️</span><span style={{ flex: 1, minWidth: 0 }}>{issueText(i)}</span>\n            </div>\n          ))}\n        </RallyOrgSection>\n\n        {typeof window.RallyPublishSheet === 'function' && (\n          <RallyOrgSection title={t('rally.lib.editor.title', lang)}>\n            <RallyCard theme={theme} padding={14} accent={pubTemplateId ? 'var(--cat-nat, #22C55E)' : 'var(--coin)'}>\n              {pubTemplateId ? (\n                <div style={{ display: 'flex', alignItems: 'center', gap: 10, flexWrap: 'wrap' }}>\n                  <RallyChip active color=\"var(--cat-nat, #22C55E)\" icon=\"✓\">{t('rally.lib.shared', lang)}</RallyChip>\n                  <span style={{ flex: 1, minWidth: 140, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.45, color: 'var(--ink-2)' }}>\n                    {pubTpl ? rallyOrgT(!pubTpl.uses ? 'rally.lib.editor.sharedBody0' : pubTpl.uses === 1 ? 'rally.lib.editor.sharedBody1' : 'rally.lib.editor.sharedBody', lang, { code: pubTpl.shareCode || '', n: pubTpl.uses || 0 }) : ''}\n                  </span>\n                  <RallyButton size=\"sm\" variant=\"ghost\" onClick={() => setPubOpen(true)}>{t('rally.lib.editor.manage', lang)}</RallyButton>\n                </div>\n              ) : (\n                <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n                  <div style={{ fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.5, color: 'var(--ink-2)' }}>{t('rally.lib.editor.body', lang)}</div>\n                  <RallyButton size=\"sm\" variant=\"secondary\" icon=\"📤\" onClick={async () => { await saveNow(); setPubOpen(true); }}>{t('rally.lib.editor.publish', lang)}</RallyButton>\n                </div>\n              )}\n            </RallyCard>\n          </RallyOrgSection>\n        )}\n\n        <RallyOrgSection title={t('rally.org.editor.settings', lang)}>\n          <RallyField label={t('rally.org.wizard.name', lang)} htmlFor=\"ral-org-ed-title\">\n            <RallyInput id=\"ral-org-ed-title\" value={tour.title || ''} maxLength={80} onChange={e => { const v = e.target.value; update(tr => ({ ...tr, title: v })); }} />\n          </RallyField>\n\n          <RallyField label={t('rally.org.wizard.audience', lang)} hint={t('rally.org.audience.' + (tour.audience || 'adults') + '.hint', lang)}>\n            <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\n              {RAL_ORG_AUDIENCES.map(a => (\n                <RallyChip key={a.key} active={tour.audience === a.key} icon={a.emoji} style={{ width: '100%' }}\n                  onClick={() => update(tr => {\n                    // R9: Kinder und Schulklassen ohne Wettrennen, zurück zu „Etwas“, wenn vorher deshalb aus\n                    const kidsLike = (x) => x === 'kids' || x === 'school';\n                    const sw = tr.settings && tr.settings.speedWeight;\n                    let speedWeight = sw;\n                    if (kidsLike(a.key)) speedWeight = 'off';\n                    else if (kidsLike(tr.audience) && sw === 'off') speedWeight = 'low';\n                    return { ...tr, audience: a.key, settings: { ...tr.settings, speedWeight } };\n                  })}>{t('rally.org.audience.' + a.key, lang)}</RallyChip>\n              ))}\n            </div>\n          </RallyField>\n\n          <RallyField label={t('rally.org.set.start', lang)}>\n            <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n              <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n                <span aria-hidden=\"true\" style={{ fontSize: 16 }}>🚩</span>\n                <RallyInput value={tour.start ? (tour.start.label || '') : ''} maxLength={60} aria-label={t('rally.org.place.label', lang)} style={{ flex: 1, minWidth: 0 }}\n                  onChange={e => { const v = e.target.value; update(tr => ({ ...tr, start: { ...tr.start, label: v, labelEdited: true } })); }} />\n              </div>\n              <div style={{ display: 'flex', justifyContent: 'flex-end' }}>\n                <RallyButton size=\"sm\" variant=\"ghost\" onClick={() => startPlacing({ kind: 'start' })}>{t('rally.org.set.moveOnMap', lang)}</RallyButton>\n              </div>\n              {tour.finish ? (\n                <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n                  <span aria-hidden=\"true\" style={{ fontSize: 16 }}>🏁</span>\n                  <RallyInput value={tour.finish.label || ''} maxLength={60} aria-label={t('rally.org.place.labelFinish', lang)} style={{ flex: 1, minWidth: 0 }}\n                    onChange={e => { const v = e.target.value; update(tr => ({ ...tr, finish: { ...tr.finish, label: v, labelEdited: true } })); }} />\n                </div>\n              ) : (\n                <span style={{ fontFamily: RAL_FONT_B, fontSize: 15, overflowWrap: 'anywhere' }}>🏁 {t('rally.org.set.loop', lang)}</span>\n              )}\n              <div style={{ display: 'flex', alignItems: 'center', gap: 8, flexWrap: 'wrap', justifyContent: 'flex-end' }}>\n                {tour.finish && <RallyButton size=\"sm\" variant=\"ghost\" onClick={() => update(tr => ({ ...tr, finish: null }))}>{t('rally.org.set.makeLoop', lang)}</RallyButton>}\n                <RallyButton size=\"sm\" variant=\"ghost\" onClick={() => startPlacing({ kind: 'finish' })}>{t(tour.finish ? 'rally.org.set.moveOnMap' : 'rally.org.set.ownFinish', lang)}</RallyButton>\n              </div>\n            </div>\n          </RallyField>\n\n          <RallyField label={t('rally.org.set.timeLimit', lang)} hint={t('rally.org.set.timeLimitHint', lang)}>\n            <RallyOrgTimeLimit value={limit} lang={lang} onChange={v => setSettings({ timeLimitMin: v })} />\n          </RallyField>\n\n          <RallyField label={t('rally.org.set.speed', lang)} hint={t('rally.org.set.speed.' + (s.speedWeight || 'low') + '.hint', lang)}>\n            <RallySegmented ariaLabel={t('rally.org.set.speed', lang)} value={s.speedWeight || 'low'} onChange={v => setSettings({ speedWeight: v })}\n              options={['off', 'low', 'high'].map(v => ({ value: v, label: t('rally.org.set.speed.' + v, lang) }))} />\n          </RallyField>\n\n          <RallyOrgSwitch checked={s.gpsGate !== false} onChange={v => setSettings({ gpsGate: v })}\n            label={t('rally.org.set.gps', lang)}\n            hint={rallyOrgT(s.gpsGate !== false ? 'rally.org.set.gpsOn' : 'rally.org.set.gpsOff', lang, { m: s.gpsRadiusM || 60 })} />\n\n          <RallyField label={t('rally.org.set.teams', lang)} hint={t('rally.org.set.teamsHint', lang)}>\n            <div style={{ display: 'flex', alignItems: 'center', gap: 12, flexWrap: 'wrap' }}>\n              <RallyStepper value={s.defaultTeamCount} min={2} max={8} lang={lang} ariaLabel={t('rally.org.set.teams', lang)}\n                onChange={v => setSettings({ defaultTeamCount: v })} />\n              <span style={{ fontSize: 20, letterSpacing: 2 }} aria-hidden=\"true\">{teamsPreview.map(tm => tm.emoji).join('')}</span>\n            </div>\n          </RallyField>\n\n          {tour.stations.length > 0 && (\n            <RallyCard theme={theme} padding={14}>\n              <RallyKicker style={{ fontSize: 12 }}>{t('rally.org.fair.kicker', lang)}</RallyKicker>\n              <div style={{ marginTop: 4, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.5, color: 'var(--ink-2)' }}>{t('rally.org.fair.body', lang)}</div>\n              {curDist && (\n                <div style={{ marginTop: 12, display: 'flex', flexDirection: 'column', gap: 6 }}>\n                  {teamsPreview.map(tm => {\n                    const d = curDist[tm.no] || 0;\n                    return (\n                      <div key={tm.no} style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n                        <span aria-hidden=\"true\" style={{ width: 24, textAlign: 'center' }}>{tm.emoji}</span>\n                        <span style={{ flex: 1, height: 10, borderRadius: 999, background: 'var(--surface-2)', overflow: 'hidden' }}>\n                          <span style={{ display: 'block', height: '100%', width: (maxDist ? Math.max(4, d / maxDist * 100) : 0) + '%', background: tm.color, borderRadius: 999 }} />\n                        </span>\n                        <span style={{ width: 62, textAlign: 'right', fontFamily: RAL_FONT_M, fontSize: 12, color: 'var(--ink-2)' }}>{rallyFmtDist(d, lang)}</span>\n                      </div>\n                    );\n                  })}\n                </div>\n              )}\n              <div role=\"list\" style={{ marginTop: 12, display: 'grid', gridTemplateColumns: 'repeat(7, minmax(0, 1fr))', gap: 4 }}>\n                {fairRows.map(r => {\n                  const ok = r.ok;\n                  const on = r.n === s.defaultTeamCount;\n                  return (\n                    <button key={r.n} type=\"button\" role=\"listitem\" className=\"rally-tap\" onClick={() => setSettings({ defaultTeamCount: r.n })}\n                      aria-label={rallyOrgT(ok ? 'rally.org.fair.okAria' : 'rally.org.fair.badAria', lang, { n: r.n })}\n                      style={{\n                        minHeight: 48, borderRadius: 10, cursor: 'pointer', padding: '4px 0',\n                        border: on ? '2px solid var(--stamp)' : '1px solid var(--border-2)',\n                        background: ok ? 'rgba(34,197,94,0.12)' : 'var(--coin-soft)', color: 'var(--ink)',\n                        display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: 1,\n                      }}>\n                      <span style={{ fontFamily: RAL_FONT_M, fontWeight: 600, fontSize: 14 }}>{r.n}</span>\n                      <span aria-hidden=\"true\" style={{ fontSize: 12 }}>{ok ? '✓' : '⚠️'}</span>\n                    </button>\n                  );\n                })}\n              </div>\n              <div style={{ marginTop: 6, fontFamily: RAL_FONT_B, fontSize: 12, color: 'var(--ink-3)' }}>{t('rally.org.fair.legend', lang)}</div>\n            </RallyCard>\n          )}\n        </RallyOrgSection>\n      </div>\n\n      {/* Fester Aktionsbalken über der TabBar (beim Setzen auf der Karte ausgeblendet) */}\n      <div style={{ display: placing ? 'none' : 'flex', flexDirection: 'column',\n        position: 'sticky', bottom: 96, zIndex: 5, margin: '22px 16px 0', padding: '6px 8px 8px', borderRadius: 18,\n        background: 'var(--surface)', border: '1px solid var(--border-2)', boxShadow: '0 8px 24px rgba(0,0,0,0.16)',\n        gap: 6,\n      }}>\n        <div role=\"status\" aria-live=\"polite\" style={{ textAlign: 'center', fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 12.5, color: 'var(--ink-2)' }}>\n          {saveState === 'saved' && <span aria-hidden=\"true\" style={{ color: 'var(--cat-nat, #22C55E)', marginRight: 4 }}>✓</span>}{saveLine}\n        </div>\n        <div style={{ display: 'flex', gap: 8 }}>\n          <RallyButton variant=\"ghost\" onClick={async () => { await saveNow(); onBack(); }} style={{ flex: 1 }}>{t('rally.org.editor.done', lang)}</RallyButton>\n          <RallyButton onClick={tryCreateEvent} style={{ flex: 1.3, opacity: errors.length > 0 || !tour.stations.length ? 0.6 : 1 }}>\n            {t('rally.org.tour.createEvent', lang)}\n          </RallyButton>\n        </div>\n      </div>\n\n      <RallyOrgStationSheet open={!!openSt} station={openSt} index={openSt ? stationNo(openSt.id) : 0} tour={tour} lang={lang}\n        issues={openSt ? issues.filter(i => i.stationId === openSt.id) : []} fresh={!!(openSt && freshIds[openSt.id])}\n        onChange={(fn) => openSt && setStation(openSt.id, fn)} onClose={closeStation}\n        onMove={() => startPlacing({ kind: 'move', stationId: openSt.id })}\n        onDelete={() => setConfirmDel(openSt)} issueText={issueText} />\n\n      {typeof window.RallyPublishSheet === 'function' && (\n        <RallyPublishSheet open={pubOpen} tour={tour} lang={lang} theme={theme} user={user} ownerId={owner}\n          onClose={() => setPubOpen(false)} showToast={showToast}\n          onPublished={(tpl) => syncPublished(tpl)} onUnpublished={() => syncPublished(null)}\n          onViewInLibrary={(tpl) => { setPubOpen(false); if (onViewTemplate) saveNow().then(() => onViewTemplate(tpl)); }} />\n      )}\n\n      <RallyOrgAddFactSheet open={addOpen} onClose={() => setAddOpen(false)} lang={lang} tour={tour} center={center} onAdd={addFact} />\n\n      <RallyConfirm open={!!confirmDel} lang={lang} danger zIndex={320}\n        title={rallyOrgT('rally.org.station.deleteTitle', lang, { title: confirmDel ? (confirmDel.title || '') : '' })}\n        body={t('rally.org.station.deleteBody', lang)} confirmLabel={t('rally.org.station.delete', lang)}\n        onCancel={() => setConfirmDel(null)}\n        onConfirm={() => { const id = confirmDel.id; setConfirmDel(null); if (openStation === id) setOpenStation(null); removeStation(id); }} />\n    </div>\n  );\n}\n\n// ── Fakt hinzufügen ─────────────────────────────────────────────────────────\nfunction RallyOrgAddFactSheet({ open, onClose, lang, tour, center, onAdd }) {\n  const [q, setQ] = React.useState('');\n  const [onlyPuzzle, setOnlyPuzzle] = React.useState(true);\n  const [limit, setLimit] = React.useState(30);\n  const ver = rallyOrgFactsVersion();\n  React.useEffect(() => { if (open) { setQ(''); setLimit(30); } }, [open]);\n\n  // Doppelte Fakten (gleicher Titel, < 60 m) nur einmal anbieten (Spec §11 P9)\n  const pool = React.useMemo(() => {\n    if (!open) return [];\n    const E = window.RallyEngine;\n    const F = window.FACTS || [];\n    try { return typeof E.dedupeFacts === 'function' ? E.dedupeFacts(F) : F; } catch (e) { return F; }\n  }, [open, ver]);\n  const list = React.useMemo(() => {\n    if (!open) return [];\n    const E = window.RallyEngine;\n    // Wortweise suchen, mit grobem Stamm und auch im Ort: „Altes Rathaus“ findet „Das Alte Rathaus am Marienplatz“\n    const words = String(q || '').split(/\\s+/).map(w => E.normalizeText(w)).filter(Boolean)\n      .map(w => w.length > 4 ? w.replace(/(es|en|er|e|s|n)$/, '') : w);\n    const nq = words.length > 0;\n    const out = [];\n    pool.forEach(f => {\n      if (!f || typeof f.lat !== 'number' || typeof f.lng !== 'number') return;\n      const d = E.haversineM(center, f);\n      if (d > 4000) return;\n      if (tour.audience === 'kids' && E.isDarkFact && E.isDarkFact(f)) return;\n      const title = rallyOrgFactTitle(f, lang);\n      if (nq) {\n        const hay = E.normalizeText(title + ' ' + (f.ort || '') + ' ' + (f.caption || ''));\n        if (!words.every(w => hay.indexOf(w) >= 0)) return;\n      }\n      out.push({ f, d, title });\n    });\n    out.sort((a, b) => a.d - b.d);\n    let rows = out;\n    if (onlyPuzzle) rows = rows.filter(r => !!E.puzzleFromFact(r.f, tour.audience, lang));\n    return rows;\n  }, [open, q, onlyPuzzle, pool, center.lat, center.lng, tour.audience, lang]); // eslint-disable-line react-hooks/exhaustive-deps\n\n  const inTour = {};\n  (tour.stations || []).forEach(s => { if (s.kind === 'fact') inTour[String(s.factId)] = true; });\n\n  return (\n    <RallySheet open={open} onClose={onClose} lang={lang} title={t('rally.org.add.title', lang)} kicker={t('rally.org.add.kicker', lang)} maxHeight=\"92%\">\n      <div style={{ display: 'flex', flexDirection: 'column', gap: 10, paddingBottom: 8 }}>\n        <RallyInput type=\"search\" value={q} onChange={e => { setQ(e.target.value); setLimit(30); }}\n          placeholder={t('rally.org.add.search', lang)} aria-label={t('rally.org.add.search', lang)} />\n        <RallyOrgSwitch checked={onlyPuzzle} onChange={setOnlyPuzzle} label={t('rally.org.add.onlyPuzzle', lang)} hint={t('rally.org.add.onlyPuzzleHint', lang)} />\n        <div style={{ fontFamily: RAL_FONT_M, fontSize: 12, letterSpacing: '0.06em', color: 'var(--ink-3)' }}>\n          {rallyOrgTn('rally.org.add.count', list.length, lang)}\n        </div>\n        {list.length === 0 && <RallyOrgNote icon=\"🔎\" title={t('rally.org.add.none', lang)} />}\n        {list.slice(0, limit).map(({ f, d, title }) => {\n          const has = !!window.RallyEngine.puzzleFromFact(f, tour.audience, lang);\n          const added = inTour[String(rallyOrgFactKey(f))];\n          return (\n            <button key={String(rallyOrgFactKey(f))} type=\"button\" className=\"rally-tap\" onClick={() => onAdd(f)}\n              aria-label={rallyOrgT('rally.org.add.addAria', lang, { title, dist: rallyFmtDist(d, lang) })} style={{\n              display: 'flex', alignItems: 'center', gap: 10, width: '100%', minHeight: 56, padding: '10px 12px', textAlign: 'left',\n              borderRadius: 14, border: '1px solid var(--border)', background: 'var(--surface-2)', cursor: 'pointer', color: 'var(--ink)',\n            }}>\n              <span style={{ flex: 1, minWidth: 0 }}>\n                <span style={{ fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15, lineHeight: 1.25, overflowWrap: 'anywhere',\n                  display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden' }}>{title}</span>\n                <span style={{ display: 'flex', gap: 6, alignItems: 'center', marginTop: 4, flexWrap: 'wrap' }}>\n                  <span style={{ fontFamily: RAL_FONT_M, fontSize: 12, color: 'var(--ink-2)' }}>{rallyFmtDist(d, lang)}</span>\n                  {has ? <RallyChip style={{ fontSize: 12, padding: '0 8px' }}>{t('rally.org.add.hasPuzzle', lang)}</RallyChip>\n                    : <span style={{ fontFamily: RAL_FONT_B, fontSize: 12, color: 'var(--ink-3)' }}>{t('rally.org.add.noPuzzle', lang)}</span>}\n                  {added && <RallyChip active color=\"var(--teal, #00C2A8)\" style={{ fontSize: 12, padding: '0 8px' }}>{t('rally.org.add.inTour', lang)}</RallyChip>}\n                </span>\n              </span>\n              <span aria-hidden=\"true\" style={{\n                width: 36, height: 36, borderRadius: '50%', flexShrink: 0, background: 'var(--stamp)', color: '#FFFFFF',\n                display: 'flex', alignItems: 'center', justifyContent: 'center', fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 20,\n                boxShadow: '0 2px 0 var(--stamp-deep)',\n              }}>+</span>\n            </button>\n          );\n        })}\n        {list.length > limit && (\n          <RallyButton variant=\"ghost\" full onClick={() => setLimit(l => l + 30)}>{t('rally.org.add.more', lang)}</RallyButton>\n        )}\n      </div>\n    </RallySheet>\n  );\n}\n\n// ═════════════════════════════════════════════════════════════════════════════\n// 4. Stations-Sheet\n// ═════════════════════════════════════════════════════════════════════════════\nfunction rallyOrgConvertPuzzle(p, type, src, lang) {\n  if (type === 'none') return null;\n  const q = { type, question: p ? (p.question || '') : '', source: src };\n  if (p && p.hint) q.hint = p.hint;\n  if (p && p.explanation) q.explanation = p.explanation;\n  q.points = p && typeof p.points === 'number' ? p.points : 100;\n  const oldAnswer = p ? (p.type === 'mcq' ? (p.choices || [])[p.correctIndex] : p.answer) : null;\n  if (type === 'mcq') {\n    if (p && p.type === 'mcq') { q.choices = (p.choices || []).slice(); q.correctIndex = p.correctIndex; }\n    else if (oldAnswer != null && String(oldAnswer) !== '') { q.choices = [String(oldAnswer), '', '']; q.correctIndex = 0; }\n    else { q.choices = ['', '', '']; }\n  } else if (type === 'text') {\n    q.answer = oldAnswer != null ? String(oldAnswer) : '';\n    q.accepted = p && p.type === 'text' ? (p.accepted || []).slice() : [];\n  } else {\n    const n = rallyOrgNum(oldAnswer, lang);\n    q.answer = isNaN(n) ? null : n;\n    if (p && p.unit) q.unit = p.unit;\n    if (type === 'number') q.tolerance = p && p.type === 'number' ? (p.tolerance || 0) : 0;\n  }\n  return q;\n}\n\nfunction RallyOrgStationSheet({ open, station, index, tour, lang, issues, fresh, onChange, onClose, onMove, onDelete, issueText }) {\n  const [showFull, setShowFull] = React.useState(false);\n  React.useEffect(() => { setShowFull(false); }, [station && station.id]);\n  const E = window.RallyEngine;\n  const st = station;\n  // Adresse nur für eigene Stationen und Stationen ohne Frage (Fakten haben ihren Ort im Titel)\n  const address = useRallyOrgAddress(open && st && st.kind !== 'fact' ? st.lat : NaN, open && st && st.kind !== 'fact' ? st.lng : NaN, lang);\n  const qHints = st && !fresh ? rallyOrgQuestionHints(st, lang) : [];\n  const fact = st && st.kind === 'fact' ? rallyOrgFact(st.factId) : null;\n  const factView = rallyOrgPick(fact, lang);\n  const p = st ? st.puzzle : null;\n  const q = rallyOrgQType(st);\n  const src = st && st.kind === 'fact' ? 'edited' : 'custom';\n  const original = fact ? E.puzzleFromFact(fact, tour.audience, lang) : null;\n  const canRestore = st && st.kind === 'fact' && original && (!p || p.source !== 'fact');\n\n  // onChange bekommt Updater-Funktionen (arbeiten immer auf dem neuesten Stand der Station)\n  const set = (patch) => onChange(cur => ({ ...cur, ...patch }));\n  const setP = (patch) => onChange(cur => ({\n    ...cur, noPuzzle: false, puzzle: { ...(cur.puzzle || { type: 'text', question: '', answer: '', points: 100 }), ...patch, source: src },\n  }));\n  const hasIssue = (codes) => (issues || []).some(i => codes.indexOf(i.code) >= 0);\n\n  // Quellenmarken wie „[1]“ raus, wie in der Teilnehmer-Ansicht\n  const factText = factView ? [factView.text, factView.text2].filter(Boolean).join('\\n\\n').replace(/\\s*\\[\\d+\\]/g, '') : '';\n\n  const kindLabel = st ? t('rally.org.kind.' + st.kind, lang) : '';\n  return (\n    <RallySheet open={open} onClose={onClose} lang={lang} maxHeight=\"94%\" zIndex={220}\n      kicker={st ? rallyOrgT('rally.org.station.kicker', lang, { n: index, kind: kindLabel }) : ''}\n      title={st ? (st.title || t('rally.org.station.untitled', lang)) : ''}\n      footer={st && (\n        <div style={{ display: 'flex', gap: 8 }}>\n          <RallyButton variant=\"ghost\" onClick={onDelete} icon={RAL_ORG_ICON.trash} ariaLabel={t('rally.org.station.delete', lang)} style={{ color: 'var(--stamp)' }} />\n          <RallyButton full onClick={onClose} style={{ flex: 1 }}>{t('rally.org.station.done', lang)}</RallyButton>\n        </div>\n      )}>\n      {st && (\n        <div style={{ display: 'flex', flexDirection: 'column', gap: 18, paddingBottom: 6 }}>\n          {(issues || []).map((i, k) => (\n            <RallyOrgNote key={k} tone={i.level === 'error' ? 'error' : 'warn'} icon={i.level === 'error' ? '⛔' : '⚠️'} title={issueText(i)} />\n          ))}\n\n          <RallyField label={t('rally.org.station.title', lang)} htmlFor=\"ral-org-st-title\">\n            <RallyInput id=\"ral-org-st-title\" value={st.title || ''} maxLength={90} onChange={e => set({ title: e.target.value })} />\n          </RallyField>\n\n          {st.kind === 'fact' && (\n            <div style={{ padding: '12px 14px', borderRadius: 14, background: 'var(--surface-2)', border: '1px solid var(--border)' }}>\n              <RallyKicker color=\"var(--ink-2)\" style={{ fontSize: 12 }}>{t('rally.org.station.factPreview', lang)}</RallyKicker>\n              {factView ? (\n                <>\n                  <div style={{ marginTop: 4, fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15 }}>{factView.titel}</div>\n                  <div style={{\n                    marginTop: 6, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 14, lineHeight: 1.55, color: 'var(--ink-2)',\n                    textAlign: 'justify', hyphens: 'auto', whiteSpace: 'pre-line',\n                    ...(showFull ? null : { display: '-webkit-box', WebkitLineClamp: 4, WebkitBoxOrient: 'vertical', overflow: 'hidden' }),\n                  }}>{factText}</div>\n                  {factText.length > 220 && (\n                    <button type=\"button\" className=\"rally-tap\" onClick={() => setShowFull(v => !v)} style={{\n                      marginTop: 4, minHeight: 44, padding: '0 2px', border: 'none', background: 'transparent', cursor: 'pointer',\n                      fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 14, color: 'var(--stamp)',\n                    }}>{t(showFull ? 'rally.org.station.less' : 'rally.org.station.more', lang)}</button>\n                  )}\n                  <div style={{ marginTop: 4, fontFamily: RAL_FONT_B, fontSize: 12.5, color: 'var(--ink-3)' }}>{t('rally.org.station.factShown', lang)}</div>\n                </>\n              ) : (\n                <div style={{ marginTop: 4, fontFamily: RAL_FONT_B, fontSize: 14, color: 'var(--ink-3)' }}>{t('rally.org.station.factMissing', lang)}</div>\n              )}\n            </div>\n          )}\n\n          {st.kind !== 'fact' && (\n            <RallyField label={t(st.kind === 'info' ? 'rally.org.station.infoText' : 'rally.org.station.text', lang)}\n              hint={t(st.kind === 'info' ? 'rally.org.station.infoTextHint' : 'rally.org.station.textHint', lang)} htmlFor=\"ral-org-st-text\">\n              <RallyTextarea id=\"ral-org-st-text\" rows={4} value={st.text || ''} onChange={e => set({ text: e.target.value })} />\n            </RallyField>\n          )}\n\n          <RallyField label={t('rally.org.station.note', lang)} hint={t('rally.org.station.noteHint', lang)} htmlFor=\"ral-org-st-note\">\n            <RallyTextarea id=\"ral-org-st-note\" rows={2} value={st.note || ''} onChange={e => set({ note: e.target.value })}\n              placeholder={t('rally.org.station.notePlaceholder', lang)} />\n          </RallyField>\n\n          <RallyField label={t('rally.org.station.place', lang)}>\n            <div style={{ display: 'flex', alignItems: 'center', gap: 10, flexWrap: 'wrap' }}>\n              <span style={{ flex: 1, minWidth: 120 }}>\n                {address && <span style={{ display: 'block', fontFamily: RAL_FONT_B, fontWeight: 600, fontSize: 15, lineHeight: 1.35, color: 'var(--ink)', overflowWrap: 'anywhere' }}>{address}</span>}\n                <span style={{ display: 'block', fontFamily: RAL_FONT_M, fontSize: 12, letterSpacing: '0.04em', color: 'var(--ink-2)' }}>\n                  {st.lat.toFixed(5)}, {st.lng.toFixed(5)}\n                </span>\n              </span>\n              <RallyButton size=\"sm\" variant=\"ghost\" icon=\"👆\" onClick={onMove}>{t('rally.org.station.move', lang)}</RallyButton>\n            </div>\n          </RallyField>\n\n          {st.kind === 'info' ? (\n            <RallyOrgNote icon=\"ℹ️\">{t('rally.org.station.infoNoQuestion', lang)}</RallyOrgNote>\n          ) : (\n            <div style={{ display: 'flex', flexDirection: 'column', gap: 14, paddingTop: 14, borderTop: '1px solid var(--border)' }}>\n              <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n                <div style={{ flex: 1, fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 17 }}>{t('rally.org.q.title', lang)}</div>\n                {p && p.source === 'fact' && <RallyChip>{t('rally.org.q.fromFact', lang)}</RallyChip>}\n                {p && p.source === 'edited' && <RallyChip active color=\"var(--coin-dk)\">{t('rally.org.q.edited', lang)}</RallyChip>}\n              </div>\n              <div role=\"radiogroup\" aria-label={t('rally.org.q.type', lang)} style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n                {RAL_ORG_QTYPES.map(k => (\n                  <RallyChip key={k} active={q === k} onClick={() => { if (q !== k) onChange(cur => ({ ...cur, puzzle: rallyOrgConvertPuzzle(cur.puzzle, k, src, lang), noPuzzle: k === 'none' })); }}>\n                    {t('rally.org.qtype.' + k, lang)}\n                  </RallyChip>\n                ))}\n              </div>\n              <div style={{ fontFamily: RAL_FONT_B, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-2)', marginTop: -6 }}>{t('rally.org.qtype.' + q + '.hint', lang)}</div>\n              {q === 'estimate' && (\n                <RallyOrgNote icon=\"💡\" title={t('rally.org.q.estimateGoodTitle', lang)}>{t('rally.org.q.estimateGood', lang)}</RallyOrgNote>\n              )}\n              {qHints.filter(h => h !== 'smallEstimate').map(h => (\n                <RallyOrgNote key={h} tone=\"warn\" icon=\"🔎\" title={t('rally.org.qhint.' + h, lang)}>{t('rally.org.qhint.' + h + '.body', lang)}</RallyOrgNote>\n              ))}\n\n              {canRestore && (\n                <RallyButton variant=\"secondary\" size=\"sm\" icon=\"↺\" onClick={() => onChange(cur => ({ ...cur, puzzle: original, noPuzzle: false }))}>{t('rally.org.q.restore', lang)}</RallyButton>\n              )}\n\n              {p && (\n                <>\n                  <RallyField label={t('rally.org.q.question', lang)} htmlFor=\"ral-org-q\">\n                    <RallyTextarea id=\"ral-org-q\" rows={3} value={p.question || ''} invalid={!fresh && !String(p.question || '').trim()}\n                      onChange={e => setP({ question: e.target.value })} placeholder={t('rally.org.q.questionPlaceholder.' + p.type, lang)} />\n                  </RallyField>\n\n                  {p.type === 'mcq' && (\n                    <RallyField label={t('rally.org.q.choices', lang)} hint={t('rally.org.q.choicesHint', lang)}\n                      error={hasIssue(['mcq_no_correct']) ? t('rally.org.q.pickCorrect', lang) : null}>\n                      <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n                        {(p.choices || []).map((c, ci) => {\n                          const correct = p.correctIndex === ci;\n                          return (\n                            <div key={ci} style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n                              <button type=\"button\" role=\"radio\" aria-checked={correct} className=\"rally-tap\"\n                                aria-label={rallyOrgT('rally.org.q.markCorrect', lang, { n: ci + 1 })}\n                                onClick={() => setP({ correctIndex: ci })} style={{\n                                  width: 44, height: 44, flexShrink: 0, borderRadius: 12, cursor: 'pointer', padding: 0,\n                                  border: correct ? 'none' : '1.5px solid var(--border-2)',\n                                  background: correct ? 'var(--cat-nat, #22C55E)' : 'var(--surface-2)', color: correct ? '#FFFFFF' : 'var(--ink-3)',\n                                  fontFamily: RAL_FONT_D, fontWeight: 900, fontSize: 18,\n                                }}>✓</button>\n                              <RallyInput value={c} onChange={e => {\n                                const arr = (p.choices || []).slice(); arr[ci] = e.target.value; setP({ choices: arr });\n                              }} placeholder={rallyOrgT('rally.org.q.choicePlaceholder', lang, { n: ci + 1 })} />\n                              {(p.choices || []).length > 2 && (\n                                <RallyOrgIconBtn label={t('rally.org.q.removeChoice', lang)} onClick={() => {\n                                  const arr = (p.choices || []).filter((_, k) => k !== ci);\n                                  let idx = p.correctIndex;\n                                  if (idx === ci) idx = undefined; else if (typeof idx === 'number' && idx > ci) idx -= 1;\n                                  setP({ choices: arr, correctIndex: idx });\n                                }}>\n                                  <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M3.5 3.5l9 9M12.5 3.5l-9 9\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" /></svg>\n                                </RallyOrgIconBtn>\n                              )}\n                            </div>\n                          );\n                        })}\n                        {(p.choices || []).length < 6 && (\n                          <RallyButton size=\"sm\" variant=\"ghost\" icon=\"＋\" onClick={() => setP({ choices: (p.choices || []).concat(['']) })}>{t('rally.org.q.addChoice', lang)}</RallyButton>\n                        )}\n                      </div>\n                    </RallyField>\n                  )}\n\n                  {p.type === 'text' && (\n                    <>\n                      <RallyField label={t('rally.org.q.answer', lang)} htmlFor=\"ral-org-a\"\n                        error={hasIssue(['missing_answer']) ? t('rally.org.q.answerMissing', lang) : null}>\n                        <RallyInput id=\"ral-org-a\" value={p.answer == null ? '' : String(p.answer)} onChange={e => setP({ answer: e.target.value })} />\n                      </RallyField>\n                      <RallyField label={t('rally.org.q.accepted', lang)} hint={t('rally.org.q.acceptedHint', lang)} htmlFor=\"ral-org-acc\">\n                        <RallyInput id=\"ral-org-acc\" value={(p.accepted || []).join(', ')}\n                          onChange={e => setP({ accepted: e.target.value.split(',').map(x => x.trim()).filter(Boolean) })} />\n                      </RallyField>\n                    </>\n                  )}\n\n                  {(p.type === 'number' || p.type === 'estimate') && (\n                    <>\n                      <div style={{ display: 'grid', gridTemplateColumns: '1.4fr 1fr', gap: 10 }}>\n                        <RallyField label={t(p.type === 'estimate' ? 'rally.org.q.trueValue' : 'rally.org.q.answerNumber', lang)} htmlFor=\"ral-org-num\"\n                          error={hasIssue(['missing_number']) ? t('rally.org.q.numberMissing', lang) : null}>\n                          <RallyOrgNumInput id=\"ral-org-num\" lang={lang} value={p.answer} onChange={v => setP({ answer: v })} invalid={hasIssue(['missing_number'])} />\n                        </RallyField>\n                        <RallyField label={t('rally.org.q.unit', lang)} htmlFor=\"ral-org-unit\">\n                          <RallyInput id=\"ral-org-unit\" value={p.unit || ''} maxLength={14} placeholder={t('rally.org.q.unitPlaceholder', lang)}\n                            onChange={e => setP({ unit: e.target.value })} />\n                        </RallyField>\n                      </div>\n                      {p.type === 'number' && (\n                        <RallyField label={t('rally.org.q.tolerance', lang)} hint={t('rally.org.q.toleranceHint', lang)} htmlFor=\"ral-org-tol\">\n                          <RallyOrgNumInput id=\"ral-org-tol\" lang={lang} value={p.tolerance || 0} onChange={v => setP({ tolerance: typeof v === 'number' ? Math.abs(v) : 0 })} />\n                        </RallyField>\n                      )}\n                      {p.type === 'estimate' && qHints.indexOf('smallEstimate') >= 0 && (\n                        <RallyOrgNote tone=\"warn\" icon=\"🔢\" title={t('rally.org.qhint.smallEstimate', lang)}\n                          action={<RallyButton size=\"sm\" variant=\"secondary\" onClick={() => onChange(cur => ({ ...cur, puzzle: rallyOrgConvertPuzzle(cur.puzzle, 'number', src, lang), noPuzzle: false }))}>{t('rally.org.q.makeNumber', lang)}</RallyButton>}>\n                          {t('rally.org.qhint.smallEstimate.body', lang)}\n                        </RallyOrgNote>\n                      )}\n                      {p.type === 'estimate' && (\n                        <RallyOrgNote tone=\"warn\" icon=\"🎯\" title={t('rally.org.q.estimateTitle', lang)}>{t('rally.org.q.estimateBody', lang)}</RallyOrgNote>\n                      )}\n                    </>\n                  )}\n\n                  <RallyField label={t('rally.org.q.hint', lang)} hint={t('rally.org.q.hintHint', lang)} htmlFor=\"ral-org-hint\">\n                    <RallyInput id=\"ral-org-hint\" value={p.hint || ''} onChange={e => setP({ hint: e.target.value })} />\n                  </RallyField>\n\n                  <RallyField label={t('rally.org.q.explanation', lang)} hint={t('rally.org.q.explanationHint', lang)} htmlFor=\"ral-org-expl\">\n                    <RallyTextarea id=\"ral-org-expl\" rows={2} value={p.explanation || ''} onChange={e => setP({ explanation: e.target.value })} />\n                  </RallyField>\n\n                  {p.type !== 'estimate' && (\n                    <RallyField label={t('rally.org.q.points', lang)} hint={t('rally.org.q.pointsHint', lang)}>\n                      <RallyStepper value={typeof p.points === 'number' ? p.points : 100} min={25} max={300} step={25} lang={lang}\n                        ariaLabel={t('rally.org.q.points', lang)} onChange={v => setP({ points: v })} />\n                    </RallyField>\n                  )}\n                </>\n              )}\n            </div>\n          )}\n        </div>\n      )}\n    </RallySheet>\n  );\n}\n\n// ═════════════════════════════════════════════════════════════════════════════\n// 5. Event anlegen\n// ═════════════════════════════════════════════════════════════════════════════\nfunction rallyOrgFairInfo(tour, n, lang) {\n  const E = window.RallyEngine;\n  if (!tour || !tour.stations || !tour.stations.length || !tour.start) return null;\n  const f = E.fairness(tour, n);\n  const vals = Object.keys(f.distances).map(k => f.distances[k]);\n  const min = Math.min.apply(null, vals), max = Math.max.apply(null, vals);\n  const better = [];\n  for (let k = 2; k <= 8; k++) if (k !== n && E.fairness(tour, k).fair) better.push(k);\n  const nb = (x) => rallyOrgNb(rallyFmtDist(x, lang));\n  return { fair: f.fair, min: nb(min), max: nb(max), better };\n}\n\nfunction RallyOrgEventSetup({ tourId, lang, theme, owner, user, onBack, onEditTour, onCreated, showToast }) {\n  const [tour, setTour] = React.useState(null);\n  const [title, setTitle] = React.useState('');\n  const [date, setDate] = React.useState(() => {\n    const d = new Date();\n    return d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0');\n  });\n  const [time, setTime] = React.useState('');   // optional, 'HH:MM'\n  const [teamCount, setTeamCount] = React.useState(3);\n  const [assignMode, setAssignMode] = React.useState('random');\n  const [orgMode, setOrgMode] = React.useState('lead');\n  const [companionTeam, setCompanionTeam] = React.useState(1);\n  const [rosterText, setRosterText] = React.useState('');\n  const [rosterTeams, setRosterTeams] = React.useState({});\n  const [timeLimit, setTimeLimit] = React.useState(null);\n  const [speedWeight, setSpeedWeight] = React.useState('low');\n  const [lateJoin, setLateJoin] = React.useState(true);\n  const [rosterOnly, setRosterOnly] = React.useState(false);\n  const [teamNames, setTeamNames] = React.useState({});   // no -> eigener Name\n  const [copied, setCopied] = React.useState(false);\n  const [busy, setBusy] = React.useState(false);\n  const [missing, setMissing] = React.useState(false);\n\n  React.useEffect(() => {\n    let alive = true;\n    (async () => {\n      const S = window.RallyStore;\n      // Gelöschte Tour oder Netzfehler: sonst stand hier für immer „Lädt …“\n      let tr = null;\n      try { tr = await S.getTour(tourId); } catch (e) { tr = null; }\n      if (!alive) return;\n      if (!tr) { setMissing(true); return; }\n      const ts = tr.settings || {};\n      setTour(tr);\n      setTitle(tr.title || '');\n      setTeamCount(ts.defaultTeamCount || 3);\n      setTimeLimit(+ts.timeLimitMin > 0 ? +ts.timeLimitMin : null);\n      setSpeedWeight(ts.speedWeight || 'low');\n      // Spec §11: neues Event übernimmt die Einstellungen des letzten Events dieser Tour (ohne Namensliste)\n      try {\n        const evs = ((await S.listEvents(owner)) || []).filter(e => e && e.tourId === tourId);\n        evs.sort((a, b) => String(b.createdAt || '').localeCompare(String(a.createdAt || '')));\n        const last = evs[0];\n        if (!alive || !last) return;\n        const lts = (last.tour && last.tour.settings) || {};\n        if (last.teamCount) setTeamCount(last.teamCount);\n        if (last.assignMode) setAssignMode(last.assignMode);\n        setTimeLimit(+lts.timeLimitMin > 0 ? +lts.timeLimitMin : null);\n        if (lts.speedWeight) setSpeedWeight(lts.speedWeight);\n        const les = last.settings || {};\n        setLateJoin(les.lateJoin !== false);\n        setRosterOnly(les.rosterOnly === true);\n        setCopied(true);\n      } catch (e) { /* ohne Vorlage weiter */ }\n    })();\n    return () => { alive = false; };\n  }, [tourId, owner]);\n\n  if (missing) {\n    return (\n      <div>\n        <RallyOrgHeader kicker={t('rally.org.setup.kicker', lang)} title={t('rally.org.tour.untitled', lang)} onBack={onBack} lang={lang} />\n        <RallyEmpty icon=\"🗺️\" title={t('rally.org.editor.missing', lang)} action={<RallyButton onClick={onBack}>{t('rally.org.backToOverview', lang)}</RallyButton>} />\n      </div>\n    );\n  }\n  if (!tour) return <RallyLoading lang={lang} where={'org.eventSetup'} onBack={onBack} style={{ paddingTop: 60 }} />;\n\n  const E = window.RallyEngine;\n  const nameMax = E.TEAM_NAME_MAX || 30;\n  const customName = (no) => String(teamNames[no] || '').trim();\n  const baseTeams = E.defaultTeams(teamCount, lang);\n  const teams = baseTeams.map(tm => (customName(tm.no) ? { ...tm, name: customName(tm.no) } : tm));\n  const names = rosterText.split('\\n').map(x => x.trim()).filter(Boolean);\n  const seen = {};\n  const uniqueNames = names.filter(n => { const k = n.toLowerCase(); if (seen[k]) return false; seen[k] = true; return true; });\n  const fair = rallyOrgFairInfo(tour, teamCount, lang);\n  // Tour so, wie sie im Event läuft: Zeitlimit und Bonus aus diesem Formular\n  const evTour = { ...tour, settings: { ...(tour.settings || {}), timeLimitMin: timeLimit || null, speedWeight } };\n  const allChecks = E.validateTour(evTour, { teamCount, timeLimitMin: timeLimit || null });\n  const issues = allChecks.filter(i => i.level === 'error');\n  const overLimit = allChecks.find(i => i.code === 'over_time_limit');\n  const longTour = allChecks.find(i => i.code === 'long_tour');\n\n  const teamOf = (name) => {\n    const v = rosterTeams[name.toLowerCase()];\n    return v && v <= teamCount ? v : null;\n  };\n  const autoFillRoster = () => {\n    const next = {};\n    uniqueNames.forEach((n, i) => { next[n.toLowerCase()] = (i % teamCount) + 1; });\n    setRosterTeams(next);\n  };\n\n  const create = async () => {\n    setBusy(true);\n    try {\n      const roster = uniqueNames.map(n => ({ name: n, team: assignMode === 'preset' ? teamOf(n) : null }));\n      // Name der Spielleitung reist im Tour-Schnappschuss mit (für „Notiz von …“ bei den Teams)\n      const orgName = user && user.name ? String(user.name).trim() : '';\n      const tourForEvent = orgName ? { ...evTour, organizerName: orgName } : evTour;\n      // Mit Uhrzeit als echter Zeitpunkt (UTC, Spalte ist timestamptz), ohne Uhrzeit nur das Datum\n      let when = date || null;\n      if (date && time && /^\\d{2}:\\d{2}$/.test(time)) {\n        const d = new Date(date + 'T' + time);\n        if (!isNaN(d.getTime())) when = d.toISOString();\n      }\n      const tn = {};\n      let anyName = false;\n      baseTeams.forEach(tm => { if (customName(tm.no)) { tn[tm.no] = customName(tm.no); anyName = true; } });\n      const ev = await window.RallyStore.createEvent(tourForEvent, {\n        title: title.trim() || tour.title, date: when, teamCount, assignMode,\n        organizerMode: orgMode, companionTeam: orgMode === 'companion' ? companionTeam : null,\n        roster, lang, ownerId: owner,\n        settings: { lateJoin, rosterOnly: rosterOnly && uniqueNames.length > 0 },\n        teamNames: anyName ? tn : undefined,\n      });\n      onCreated(ev.id);\n    } catch (e) {\n      console.warn('[RallyOrg] createEvent', e);\n      showToast(t('rally.org.error.generic', lang));\n      setBusy(false);\n    }\n  };\n\n  return (\n    <div>\n      <RallyOrgHeader kicker={t('rally.org.setup.kicker', lang)} title={tour.title || t('rally.org.tour.untitled', lang)} onBack={onBack} lang={lang} />\n      <div style={{ padding: '18px 16px 0', display: 'flex', flexDirection: 'column', gap: 22 }}>\n        {issues.length > 0 && (\n          <RallyOrgNote tone=\"error\" icon=\"⛔\" title={t('rally.org.setup.tourErrors', lang)}\n            action={<RallyButton size=\"sm\" variant=\"secondary\" onClick={() => onEditTour(tour.id)}>{t('rally.org.setup.fixTour', lang)}</RallyButton>}>\n            {t('rally.org.setup.tourErrorsBody', lang)}\n          </RallyOrgNote>\n        )}\n        {copied && <RallyOrgNote icon=\"↺\">{t('rally.org.setup.copied', lang)}</RallyOrgNote>}\n\n        <RallyField label={t('rally.org.setup.name', lang)} htmlFor=\"ral-org-ev-title\" hint={t('rally.org.setup.nameHint', lang)}>\n          <RallyInput id=\"ral-org-ev-title\" value={title} maxLength={80} onChange={e => setTitle(e.target.value)} />\n        </RallyField>\n\n        <div style={{ display: 'grid', gridTemplateColumns: '1.4fr 1fr', gap: 10 }}>\n          <RallyField label={t('rally.org.setup.date', lang)} htmlFor=\"ral-org-ev-date\">\n            <RallyInput id=\"ral-org-ev-date\" type=\"date\" value={date} onChange={e => setDate(e.target.value)} />\n          </RallyField>\n          <RallyField label={t('rally.org.setup.time', lang)} htmlFor=\"ral-org-ev-time\">\n            <RallyInput id=\"ral-org-ev-time\" type=\"time\" value={time} step={300} onChange={e => setTime(e.target.value)} />\n          </RallyField>\n        </div>\n        {date && (\n          <div style={{ marginTop: -14, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-2)' }}>\n            {rallyOrgT(time ? 'rally.org.setup.whenTime' : 'rally.org.setup.whenNoTime', lang, { when: time ? rallyOrgFmtDate(date, lang) + ', ' + time : rallyOrgFmtDate(date, lang) })}\n          </div>\n        )}\n\n        <RallyOrgSection title={t('rally.org.set.timeLimit', lang)} hint={t('rally.org.set.timeLimitHint', lang)}>\n          <RallyOrgTimeLimit value={timeLimit} lang={lang} onChange={setTimeLimit} />\n          {overLimit && <RallyOrgNote tone=\"warn\" icon=\"⏱️\">{rallyOrgIssueText(overLimit, lang, null, teamCount)}</RallyOrgNote>}\n          {longTour && <RallyOrgNote icon=\"ℹ️\">{rallyOrgIssueText(longTour, lang, null, teamCount)}</RallyOrgNote>}\n        </RallyOrgSection>\n\n        <RallyField label={t('rally.org.set.speed', lang)} hint={t('rally.org.set.speed.' + speedWeight + '.hint', lang)}>\n          <RallySegmented ariaLabel={t('rally.org.set.speed', lang)} value={speedWeight} onChange={setSpeedWeight}\n            options={['off', 'low', 'high'].map(v => ({ value: v, label: t('rally.org.set.speed.' + v, lang) }))} />\n        </RallyField>\n\n        <RallyOrgSection title={t('rally.org.setup.teams', lang)} hint={t('rally.org.setup.teamsHint', lang)}>\n          <div style={{ display: 'flex', alignItems: 'center', gap: 12, flexWrap: 'wrap' }}>\n            <RallyStepper value={teamCount} min={2} max={8} lang={lang} ariaLabel={t('rally.org.setup.teams', lang)} onChange={setTeamCount} />\n            <span aria-hidden=\"true\" style={{ fontSize: 20, letterSpacing: 2 }}>{teams.map(tm => tm.emoji).join('')}</span>\n          </div>\n          {fair && (\n            fair.fair\n              ? <RallyOrgNote tone=\"ok\" icon=\"⚖️\">{rallyOrgT('rally.org.setup.fairOk', lang, { min: fair.min, max: fair.max, teams: teamCount })}</RallyOrgNote>\n              : <RallyOrgNote tone=\"warn\" icon=\"⚖️\">\n                  {rallyOrgT('rally.org.setup.fairBad', lang, { min: fair.min, max: fair.max, teams: teamCount })}\n                  {fair.better.length > 0 && ' ' + rallyOrgT('rally.org.setup.fairBetter', lang, { list: fair.better.join(', ') })}\n                </RallyOrgNote>\n          )}\n          <RallyField label={t('rally.org.setup.teamNames', lang)} hint={t('rally.org.setup.teamNamesHint', lang)}>\n            <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>\n              {baseTeams.map(tm => (\n                <div key={tm.no} style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n                  <span aria-hidden=\"true\" style={{ width: 26, textAlign: 'center', fontSize: 18 }}>{tm.emoji}</span>\n                  <RallyInput value={teamNames[tm.no] || ''} maxLength={nameMax} placeholder={tm.name} style={{ flex: 1, minWidth: 0 }}\n                    aria-label={rallyOrgT('rally.org.setup.teamNameAria', lang, { n: tm.no, name: tm.name })}\n                    onChange={e => { const v = e.target.value; setTeamNames(m => ({ ...m, [tm.no]: v })); }} />\n                </div>\n              ))}\n            </div>\n          </RallyField>\n        </RallyOrgSection>\n\n        <RallyOrgSection title={t('rally.org.setup.assign', lang)}>\n          <div role=\"radiogroup\" aria-label={t('rally.org.setup.assign', lang)} style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n            {[['random', '🎲'], ['self', '🙋'], ['preset', '📋']].map(([m, ic]) => (\n              <RallyOrgOption key={m} active={assignMode === m} onClick={() => setAssignMode(m)} icon={ic}\n                title={t('rally.org.assign.' + m, lang)} body={t('rally.org.assign.' + m + '.body', lang)} />\n            ))}\n          </div>\n        </RallyOrgSection>\n\n        <RallyOrgSection title={t('rally.org.setup.role', lang)}>\n          <div role=\"radiogroup\" aria-label={t('rally.org.setup.role', lang)} style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n            <RallyOrgOption active={orgMode === 'lead'} onClick={() => setOrgMode('lead')} icon=\"🎬\"\n              title={t('rally.org.role.lead', lang)} body={t('rally.org.role.lead.body', lang)} />\n            <RallyOrgOption active={orgMode === 'companion'} onClick={() => setOrgMode('companion')} icon=\"🚶\"\n              title={t('rally.org.role.companion', lang)} body={t('rally.org.role.companion.body', lang)} />\n            <RallyOrgOption active={orgMode === 'player'} onClick={() => setOrgMode('player')} icon=\"🏃\"\n              title={t('rally.org.role.player', lang)} body={t('rally.org.role.player.body', lang)} />\n          </div>\n          {orgMode === 'companion' && (\n            <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n              {teams.map(tm => (\n                <RallyChip key={tm.no} active={companionTeam === tm.no} color={tm.color} icon={tm.emoji}\n                  onClick={() => setCompanionTeam(tm.no)}>{tm.name}</RallyChip>\n              ))}\n            </div>\n          )}\n        </RallyOrgSection>\n\n        <RallyOrgSection title={t('rally.org.setup.roster', lang)} hint={t('rally.org.setup.rosterHint', lang)}>\n          <RallyTextarea rows={5} value={rosterText} onChange={e => setRosterText(e.target.value)}\n            placeholder={t('rally.org.setup.rosterPlaceholder', lang)} aria-label={t('rally.org.setup.roster', lang)} />\n          {uniqueNames.length > 0 && (\n            <div style={{ fontFamily: RAL_FONT_M, fontSize: 12, color: 'var(--ink-2)' }}>{rallyOrgTn('rally.org.setup.rosterCount', uniqueNames.length, lang)}</div>\n          )}\n          {assignMode === 'preset' && uniqueNames.length > 0 && (\n            <RallyCard theme={theme} padding={12}>\n              <div style={{ display: 'flex', alignItems: 'center', gap: 8, marginBottom: 8 }}>\n                <div style={{ flex: 1, fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15 }}>{t('rally.org.setup.rosterTeams', lang)}</div>\n                <RallyButton size=\"sm\" variant=\"ghost\" onClick={autoFillRoster}>{t('rally.org.setup.rosterAuto', lang)}</RallyButton>\n              </div>\n              <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>\n                {uniqueNames.map((n, ni) => {\n                  const selId = 'ral-org-roster-team-' + ni;\n                  return (\n                    <div key={n} style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n                      <label htmlFor={selId} style={{ flex: 1, minWidth: 0, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 15, overflowWrap: 'anywhere' }}>{n}</label>\n                      <select id={selId} value={teamOf(n) || ''} style={RAL_ORG_SELECT_STYLE} aria-label={rallyOrgT('rally.org.setup.teamFor', lang, { name: n })}\n                        onChange={e => { const v = e.target.value ? Number(e.target.value) : null; setRosterTeams(m => ({ ...m, [n.toLowerCase()]: v })); }}>\n                        <option value=\"\">{t('rally.org.setup.noTeam', lang)}</option>\n                        {teams.map(tm => <option key={tm.no} value={tm.no}>{tm.emoji} {tm.name}</option>)}\n                      </select>\n                    </div>\n                  );\n                })}\n              </div>\n              <div style={{ marginTop: 8, fontFamily: RAL_FONT_B, fontSize: 12.5, lineHeight: 1.45, color: 'var(--ink-3)' }}>{t('rally.org.setup.rosterTeamsHint', lang)}</div>\n            </RallyCard>\n          )}\n        </RallyOrgSection>\n\n        <RallyOrgSection title={t('rally.org.setup.joinTitle', lang)}>\n          <RallyOrgSwitch checked={lateJoin} onChange={setLateJoin} label={t('rally.org.setup.lateJoin', lang)}\n            hint={t(lateJoin ? 'rally.org.setup.lateJoin.on' : 'rally.org.setup.lateJoin.off', lang)} />\n          {uniqueNames.length > 0 && (\n            <RallyOrgSwitch checked={rosterOnly} onChange={setRosterOnly} label={t('rally.org.setup.rosterOnly', lang)}\n              hint={t(rosterOnly ? 'rally.org.setup.rosterOnly.on' : 'rally.org.setup.rosterOnly.off', lang)} />\n          )}\n        </RallyOrgSection>\n\n        {/* Kein Preis-Hinweis: Rallyes sind vorerst ohne Einschränkung kostenlos (Janek, 25.10.). plan bleibt in den Daten. */}\n\n        <RallyButton size=\"lg\" full disabled={busy || issues.length > 0} onClick={create} icon=\"🎟️\">\n          {busy ? t('rally.org.wizard.working', lang) : t('rally.org.setup.create', lang)}\n        </RallyButton>\n      </div>\n    </div>\n  );\n}\n\n// ═════════════════════════════════════════════════════════════════════════════\n// 6. bis 8. Event: Lobby, Live, Finale, Ergebnis\n// ═════════════════════════════════════════════════════════════════════════════\nfunction RallyOrgEvent({ eventId, lang, theme, owner, user, onBack, onViewTemplate, showToast }) {\n  const data = useRallyEvent(eventId);\n  const ev = data.event;\n  const [confirm, setConfirm] = React.useState(null); // 'start' | 'finale' | 'delete' | 'end'\n  const [busy, setBusy] = React.useState(false);\n  // Nach dem Event (§9.1 C7 a, C8): Quelltour laden für Ermunterung zum Teilen und Bewertung\n  const [srcTour, setSrcTour] = React.useState(null);\n  const [pubOpen, setPubOpen] = React.useState(false);\n  const [nudgeOff, setNudgeOff] = React.useState(false);\n  const srcId = ev && ev.status === 'ended' ? ev.tourId : null;\n  const loadSrc = React.useCallback(() => {\n    if (!srcId) { setSrcTour(null); return; }\n    Promise.resolve().then(() => window.RallyStore.getTour(srcId)).then(tr => setSrcTour(tr || null)).catch(() => setSrcTour(null));\n  }, [srcId]);\n  React.useEffect(() => { loadSrc(); }, [loadSrc]);\n  // Statuswechsel (Lobby → Live → Finale) beginnt oben\n  const status = ev && ev.status;\n  const step = ev && ev.revealStep;\n  React.useEffect(() => {\n    try { const sc = document.querySelector('.rally-org .rally-scroll'); if (sc) sc.scrollTop = 0; } catch (e) {}\n  }, [status, step]);\n\n  if (data.loading && !ev) return <RallyLoading lang={lang} where=\"org.event\" onRetry={data.reload} onBack={onBack} style={{ paddingTop: 60 }} />;\n  if (!ev) {\n    return (\n      <div>\n        <RallyOrgHeader kicker={t('rally.org.event.kicker', lang)} title={t('rally.org.event.untitled', lang)} onBack={onBack} lang={lang} />\n        <RallyEmpty icon=\"🗂️\" title={t('rally.ui.event.notFound', lang)} action={<RallyButton onClick={onBack}>{t('rally.org.backToOverview', lang)}</RallyButton>} />\n      </div>\n    );\n  }\n\n  // Liefert true bei Erfolg, damit Folgeschritte (z. B. Zurück nach dem Löschen) nur dann laufen\n  const run = async (fn, okMsg) => {\n    setBusy(true);\n    let ok = false;\n    try { await fn(); ok = true; if (okMsg) showToast(okMsg); }\n    catch (e) {\n      console.warn('[RallyOrg]', e);\n      const code = e && e.code;\n      if (code === 'team_empty') {\n        // Spielerliste hat sich geändert oder ein Team bliebe leer: frisch laden, damit die Lobby es zeigt\n        showToast(t('rally.org.err.teamEmpty', lang));\n        if (data.reload) data.reload();\n      } else {\n        showToast(t('rally.org.error.' + (code === 'event_not_lobby' ? 'notLobby' : 'generic'), lang));\n      }\n    }\n    setBusy(false);\n    return ok;\n  };\n\n  const S = window.RallyStore;\n  const doConfirm = async () => {\n    const c = confirm;\n    setConfirm(null);\n    if (c === 'start') await run(() => S.startEvent(ev.id), t('rally.org.lobby.started', lang));\n    if (c === 'finale') await run(() => S.startFinale(ev.id));\n    if (c === 'end') await run(() => S.endEvent(ev.id));\n    if (c === 'delete') { if (await run(() => S.deleteEvent(ev.id), t('rally.org.event.deleted', lang))) onBack(); }\n  };\n\n  // R3: Wer von der Namensliste fehlt noch? Steht im Start-Dialog. Dazu Teams mit nur einer Person.\n  const missing = ev.status === 'lobby' ? rallyOrgMissingRoster(ev, data.players) : [];\n  const predicted = ev.status === 'lobby' ? rallyOrgPredictTeams(ev, data.players || []) : {};\n  const soloTeams = (ev.teams || []).filter(tm => predicted[tm.no] === 1);\n  const lateOk = !(ev.settings && ev.settings.lateJoin === false);\n  const startPlain = t(lateOk ? 'rally.org.lobby.startBody' : 'rally.org.lobby.startBodyNoLate', lang);\n  const startWarn = missing.length > 0 || soloTeams.length > 0;\n  const startBody = startWarn ? (\n    <React.Fragment>\n      {missing.length > 0 && (\n        <span style={{ display: 'block', fontWeight: 700, color: 'var(--ink)' }}>\n          {rallyOrgT('rally.org.lobby.startMissing', lang, { names: missing.map(r => r.name).join(', ') })}\n        </span>\n      )}\n      {soloTeams.length > 0 && (\n        <span style={{ display: 'block', marginTop: missing.length ? 6 : 0, fontWeight: 700, color: 'var(--ink)' }}>\n          {rallyOrgT('rally.org.lobby.startSolo', lang, { teams: soloTeams.map(tm => tm.emoji + ' ' + window.RallyEngine.teamName(ev, tm.no, lang)).join(', ') })}\n        </span>\n      )}\n      <span style={{ display: 'block', marginTop: 8 }}>{startPlain}</span>\n    </React.Fragment>\n  ) : startPlain;\n  const confirmProps = {\n    start: { title: t('rally.org.lobby.startTitle', lang), body: startBody, confirmLabel: t(startWarn ? 'rally.org.lobby.startAnyway' : 'rally.org.lobby.startConfirm', lang) },\n    finale: { title: t('rally.org.live.finaleTitle', lang), body: t('rally.org.live.finaleBody', lang), confirmLabel: t('rally.org.live.finaleConfirm', lang) },\n    end: { title: t('rally.org.live.endTitle', lang), body: t('rally.org.live.endBody', lang), confirmLabel: t('rally.org.live.end', lang), danger: true },\n    delete: { title: t('rally.org.event.deleteTitle', lang), body: t('rally.org.event.deleteBody', lang), confirmLabel: t('rally.org.event.delete', lang), danger: true },\n  }[confirm] || {};\n\n  let body;\n  if (ev.status === 'lobby') body = <RallyOrgLobby data={data} lang={lang} theme={theme} busy={busy} onAsk={setConfirm} showToast={showToast} />;\n  else if (ev.status === 'active') body = <RallyOrgLive data={data} lang={lang} theme={theme} busy={busy} onAsk={setConfirm} showToast={showToast} />;\n  else {\n    const Eng = window.RallyEngine;\n    const estN = ((ev.tour && ev.tour.stations) || []).filter(s => s.puzzle && s.puzzle.type === 'estimate').length;\n    const atCeremony = ev.status === 'ended' || estN === 0 || (ev.revealStep || 0) > estN;\n    const finStandings = Eng.standings(ev, data.answers || [], data.finishes || [], { revealEstimates: true, lang });\n    // §11 P10: Anstöße nach Regeln der Engine (gespielt = mindestens eine Antwort; origin blockiert Teilen nicht)\n    const ans = data.answers || [];\n    const showRate = srcTour && typeof window.RallyLibRate === 'function'\n      && (typeof Eng.shouldNudgeRate === 'function' ? Eng.shouldNudgeRate(srcTour, ev, ans) : !!srcTour.origin);\n    const showPub = srcTour && !nudgeOff && !(window.rallyLibNudgeOff && window.rallyLibNudgeOff(srcTour.id))\n      && (typeof Eng.shouldNudgePublish === 'function' ? Eng.shouldNudgePublish(srcTour, ev, ans) : !(srcTour.published && srcTour.published.templateId));\n    body = (\n      <div style={{ padding: '14px 16px 0', display: 'flex', flexDirection: 'column', gap: 16 }}>\n        <RallyFinaleView event={ev} players={data.players} answers={data.answers} finishes={data.finishes} flags\n          lang={lang} theme={theme} isHost={ev.status === 'finale'} myTeam={ev.organizerMode === 'companion' ? ev.companionTeam : null}\n          onNext={() => S.revealNext(ev.id)} onEnd={() => setConfirm('end')} />\n        {ev.status === 'finale' && (\n          <RallyOrgSection title={t('rally.org.finale.adjustTitle', lang)} hint={t('rally.org.finale.adjustHint', lang)}>\n            <RallyOrgAdjustList ev={ev} standings={finStandings} lang={lang} theme={theme} showToast={showToast} />\n          </RallyOrgSection>\n        )}\n        {atCeremony && (\n          <RallyOrgSection title={t('rally.org.review.title', lang)} hint={t('rally.org.review.hint', lang)}>\n            <RallyOrgReview ev={ev} answers={data.answers || []} lang={lang} theme={theme} standings={finStandings} showToast={showToast} />\n          </RallyOrgSection>\n        )}\n        {ev.status === 'ended' && showRate && (\n          <RallyLibRate tour={srcTour} lang={lang} showToast={showToast} />\n        )}\n        {ev.status === 'ended' && showPub\n          && typeof window.RallyLibNudge === 'function' && typeof window.RallyPublishSheet === 'function' && (\n          <RallyLibNudge tour={srcTour} lang={lang} onPublish={() => setPubOpen(true)}\n            onDismiss={() => { if (window.rallyLibSetNudgeOff) window.rallyLibSetNudgeOff(srcTour.id); setNudgeOff(true); }} />\n        )}\n        {ev.status === 'ended' && (\n          <div style={{ display: 'flex', flexDirection: 'column', gap: 10, marginTop: 6 }}>\n            <RallyButton full onClick={onBack}>{t('rally.org.backToOverview', lang)}</RallyButton>\n            <RallyButton full variant=\"ghost\" onClick={() => setConfirm('delete')}>{t('rally.org.event.delete', lang)}</RallyButton>\n          </div>\n        )}\n      </div>\n    );\n  }\n\n  const kicker = rallyOrgT('rally.org.event.kickerStatus', lang, { status: t('rally.org.status.' + ev.status, lang) });\n  return (\n    <div>\n      <RallyOrgHeader kicker={kicker} title={ev.title || t('rally.org.event.untitled', lang)} onBack={onBack} lang={lang} />\n      {body}\n      <RallyConfirm open={!!confirm} lang={lang} onCancel={() => setConfirm(null)} onConfirm={doConfirm} {...confirmProps} />\n      {srcTour && typeof window.RallyPublishSheet === 'function' && (\n        <RallyPublishSheet open={pubOpen} tour={srcTour} lang={lang} theme={theme} user={user} ownerId={owner}\n          onClose={() => setPubOpen(false)} showToast={showToast}\n          onPublished={() => loadSrc()} onUnpublished={() => loadSrc()}\n          onViewInLibrary={(tpl) => { setPubOpen(false); if (onViewTemplate) onViewTemplate(tpl); }} />\n      )}\n    </div>\n  );\n}\n\n// Namen von der Liste, die noch nicht beigetreten sind (Vergleich ohne Groß-/Kleinschreibung)\nfunction rallyOrgMissingRoster(ev, players) {\n  const joined = {};\n  (players || []).forEach(p => { if (p && p.name) joined[String(p.name).trim().toLowerCase()] = true; });\n  return (ev.roster || []).filter(r => r && r.name && !joined[String(r.name).trim().toLowerCase()]);\n}\n\n// ── Antworten je Team zum Nachprüfen (Live und Ergebnis) ────────────────────\nfunction rallyOrgAnswerText(st, a, lang, which) {\n  const v = which === 'first' ? a.firstValue : a.value;\n  if (v == null || v === '') return '';\n  const p = st && st.puzzle;\n  if (p && p.type === 'mcq') {\n    const i = typeof v === 'number' ? v : parseInt(v, 10);\n    const c = (p.choices || [])[i];\n    return c != null ? String(c) : String(v);\n  }\n  if (p && (p.type === 'number' || p.type === 'estimate')) {\n    const n = rallyOrgNum(v, lang);\n    return (isFinite(n) ? rallyFmtNum(n, lang, Number.isInteger(n) ? 0 : 2, p.unit) : String(v)) + (p.unit ? ' ' + p.unit : '');\n  }\n  return String(v);\n}\n\n// Antworten eines Teams in Besuchsreihenfolge: [{ st, i, a, at }] (at = erste Antwort an der Station)\nfunction rallyOrgVisits(ev, answers, teamNo) {\n  const stations = (ev.tour && ev.tour.stations) || [];\n  const last = rallyFinLastByStation(answers, teamNo);\n  const firstAt = {};\n  (answers || []).forEach(a => {\n    if (!a || +a.team !== +teamNo) return;\n    const ms = Date.parse(a.at);\n    if (!isFinite(ms)) return;\n    if (firstAt[a.stationId] == null || ms < firstAt[a.stationId]) firstAt[a.stationId] = ms;\n  });\n  const out = [];\n  stations.forEach((st, i) => {\n    const a = last[st.id];\n    if (!a) return;\n    const ms = firstAt[st.id] != null ? firstAt[st.id] : Date.parse(a.at);\n    out.push({ st, i, a, at: isFinite(ms) ? ms : null });\n  });\n  out.sort((x, y) => (x.at == null ? 1 : 0) - (y.at == null ? 1 : 0) || (x.at || 0) - (y.at || 0) || x.i - y.i);\n  return out;\n}\n// Ergebnis einer Antwort: 'visited' | 'estimate' | 'right' | 'wrong'\nfunction rallyOrgAnswerResult(st, a, lang) {\n  const p = st && st.puzzle;\n  if (!p) return 'visited';\n  if (p.type === 'estimate') return 'estimate';\n  let ok = null;\n  try { ok = window.RallyEngine.checkAnswer(p, a.value, lang); } catch (e) { ok = null; }\n  return ok === true ? 'right' : 'wrong';\n}\n// Punkte-Korrektur als Text: „−50 Punkte: Station 4 ausgelassen“\nfunction rallyOrgAdjustText(row, lang) {\n  if (!row || !row.adjust) return '';\n  const n = row.adjust > 0 ? '+' + row.adjust : '−' + Math.abs(row.adjust);\n  const reasons = (row.adjustReasons || []).filter(Boolean);\n  return rallyOrgT('rally.org.adjust.delta', lang, { n }) + (reasons.length ? ': ' + reasons.join('; ') : '');\n}\n// Rangliste und Antworten als Klartext (zum Kopieren in Chat oder Mail)\nfunction rallyOrgResultsText(ev, answers, standings, lang) {\n  const E = window.RallyEngine;\n  const lines = [];\n  lines.push(ev.title || t('rally.org.event.untitled', lang));\n  if (ev.date) lines.push(rallyOrgFmtWhen(ev.date, lang));\n  lines.push('');\n  lines.push(t('rally.org.copy.standings', lang));\n  (standings || []).forEach(r => {\n    const name = E.teamName(ev, r.team, lang);\n    const head = (r.rank != null ? r.rank + '. ' : '') + (r.emoji ? r.emoji + ' ' : '') + name + ': '\n      + rallyOrgT('rally.org.adjust.delta', lang, { n: r.total });\n    const extra = [];\n    if (r.disqualified) extra.push(t('rally.org.copy.excluded', lang));\n    if (r.adjust) extra.push(rallyOrgAdjustText(r, lang));\n    lines.push(head + (extra.length ? ' (' + extra.join(', ') + ')' : ''));\n  });\n  lines.push('');\n  lines.push(t('rally.org.copy.answers', lang));\n  (ev.teams || []).forEach(tm => {\n    lines.push('');\n    lines.push((tm.emoji ? tm.emoji + ' ' : '') + E.teamName(ev, tm.no, lang));\n    const visits = rallyOrgVisits(ev, answers, tm.no);\n    if (!visits.length) lines.push('  ' + t('rally.org.review.none', lang));\n    visits.forEach(v => {\n      const time = v.at != null ? rallyOrgFmtTime(new Date(v.at).toISOString(), lang) : '';\n      const val = v.st.puzzle ? rallyOrgAnswerText(v.st, v.a, lang) : '';\n      const res = rallyOrgAnswerResult(v.st, v.a, lang);\n      const resTxt = t('rally.org.review.' + res, lang);\n      lines.push('  ' + (time ? time + '  ' : '') + (v.i + 1) + '. ' + (v.st.title || t('rally.org.station.untitled', lang))\n        + (val ? ': ' + (lang === 'en' ? '“' + val + '”' : '„' + val + '“') : '') + ' (' + resTxt + ')');\n    });\n  });\n  return lines.join('\\n');\n}\n\nfunction RallyOrgReview({ ev, answers, standings, lang, theme, showToast }) {\n  const [open, setOpen] = React.useState({});\n  const stations = (ev.tour && ev.tour.stations) || [];\n  const teams = ev.teams || [];\n  const rowByTeam = {};\n  (standings || []).forEach(r => { rowByTeam[r.team] = r; });\n  if (!teams.length) return null;\n  void stations;\n  const copyAll = async () => {\n    const ok = await rallyOrgCopy(rallyOrgResultsText(ev, answers, standings, lang));\n    if (showToast) showToast(t(ok ? 'rally.org.review.copied' : 'rally.org.lobby.copyFailed', lang));\n  };\n  const mark = (txt, tone) => (\n    <span style={{\n      display: 'inline-flex', alignItems: 'center', padding: '1px 8px', borderRadius: 999, whiteSpace: 'nowrap',\n      fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 12, lineHeight: 1.6,\n      background: tone === 'ok' ? 'rgba(34,197,94,0.14)' : tone === 'bad' ? 'var(--stamp-soft)' : tone === 'warn' ? 'var(--coin-soft)' : 'var(--surface-2)',\n      color: tone === 'ok' ? 'var(--ink)' : tone === 'bad' ? 'var(--stamp)' : 'var(--ink)',\n      border: '1px solid ' + (tone === 'ok' ? 'rgba(34,197,94,0.35)' : tone === 'bad' ? 'rgba(232,56,13,0.3)' : tone === 'warn' ? 'rgba(201,160,15,0.5)' : 'var(--border-2)'),\n    }}>{txt}</span>\n  );\n  return (\n    <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n      <RallyButton size=\"sm\" variant=\"ghost\" icon=\"📋\" onClick={copyAll} style={{ alignSelf: 'flex-start' }}>{t('rally.org.review.copy', lang)}</RallyButton>\n      {teams.map(tm => {\n        const visits = rallyOrgVisits(ev, answers, tm.no);\n        const count = visits.length;\n        const fl = rallyFinTeamFlags(rowByTeam[tm.no] || { team: tm.no }, answers);\n        const isOpen = !!open[tm.no];\n        return (\n          <RallyCard key={tm.no} theme={theme} padding={12} accent={tm.color}>\n            <button type=\"button\" className=\"rally-tap\" aria-expanded={isOpen} onClick={() => setOpen(o => ({ ...o, [tm.no]: !o[tm.no] }))} style={{\n              width: '100%', display: 'flex', alignItems: 'center', gap: 8, minHeight: 44, padding: 0, border: 'none',\n              background: 'transparent', cursor: 'pointer', color: 'var(--ink)', textAlign: 'left',\n            }}>\n              <RallyTeamBadge team={tm} size=\"sm\" lang={lang} style={{ flexShrink: 1, minWidth: 0 }} />\n              <span style={{ flex: 1 }} />\n              <span style={{ fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 13.5, color: 'var(--stamp)', whiteSpace: 'nowrap' }}>\n                {rallyOrgT(isOpen ? 'rally.org.review.hide' : 'rally.org.review.show', lang, { n: count })}\n              </span>\n              <span aria-hidden=\"true\" style={{ color: 'var(--ink-2)', transform: isOpen ? 'rotate(90deg)' : 'none' }}>›</span>\n            </button>\n            <RallyFinFlagChips flags={fl} lang={lang} explain={false} noSpeed={rallyFinNoSpeed(ev)} />\n            {isOpen && (\n              <ol style={{ listStyle: 'none', margin: '10px 0 0', padding: 0, display: 'flex', flexDirection: 'column', gap: 8 }}>\n                {count === 0 && <li style={{ fontFamily: RAL_FONT_B, fontSize: 13.5, color: 'var(--ink-2)' }}>{t('rally.org.review.none', lang)}</li>}\n                {visits.map(({ st, i, a, at }) => {\n                  const p = st.puzzle;\n                  const r = rallyOrgAnswerResult(st, a, lang);\n                  const res = r === 'visited' ? mark(t('rally.org.review.visited', lang))\n                    : r === 'estimate' ? mark('🎯 ' + t('rally.org.review.estimate', lang), 'warn')\n                    : r === 'right' ? mark('✓ ' + t('rally.org.review.right', lang), 'ok') : mark('✗ ' + t('rally.org.review.wrong', lang), 'bad');\n                  const val = p ? rallyOrgAnswerText(st, a, lang) : '';\n                  const firstVal = +a.attempt === 2 ? rallyOrgAnswerText(st, a, lang, 'first') : '';\n                  const time = at != null ? rallyOrgFmtTime(new Date(at).toISOString(), lang) : '';\n                  return (\n                    <li key={st.id} style={{ padding: '8px 10px', borderRadius: 12, background: 'var(--surface-2)', border: '1px solid var(--border)' }}>\n                      <div style={{ display: 'flex', alignItems: 'baseline', gap: 8 }}>\n                        <span style={{\n                          flex: 1, minWidth: 0, fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 14, lineHeight: 1.3, overflowWrap: 'anywhere',\n                          display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden',\n                        }}>{i + 1}. {st.title || t('rally.org.station.untitled', lang)}</span>\n                        {time && <span style={{ flexShrink: 0, fontFamily: RAL_FONT_M, fontSize: 12, color: 'var(--ink-2)' }}>{rallyOrgT('rally.org.review.at', lang, { time })}</span>}\n                      </div>\n                      {val && (\n                        <div style={{ marginTop: 3, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 14, lineHeight: 1.4, color: 'var(--ink)', overflowWrap: 'anywhere' }}>\n                          {lang === 'en' ? '“' + val + '”' : '„' + val + '“'}\n                          {firstVal && <span style={{ color: 'var(--ink-2)', fontSize: 13 }}> {rallyOrgT('rally.org.review.firstTry', lang, { v: firstVal })}</span>}\n                        </div>\n                      )}\n                      <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4, marginTop: 5 }}>\n                        {res}\n                        {+a.attempt === 2 && mark(t('rally.org.review.second', lang))}\n                        {a.hintsUsed ? mark(t('rally.org.review.usedHint', lang)) : null}\n                        {a.honest && mark('📍 ' + t('rally.org.review.noGps', lang), 'warn')}\n                      </div>\n                    </li>\n                  );\n                })}\n              </ol>\n            )}\n          </RallyCard>\n        );\n      })}\n    </div>\n  );\n}\n\n// ── Korrekturen der Spielleitung (Spec §11 P6): Punkte abziehen, Team ausschließen ──\nfunction RallyOrgAdjustSheet({ ev, teamNo, row, lang, onClose, showToast }) {\n  const [delta, setDelta] = React.useState(50);\n  const [plus, setPlus] = React.useState(false); // Gutschreiben, z. B. Antwort doch richtig (Funktionstest 25.10.)\n  const [reason, setReason] = React.useState('');\n  const [busy, setBusy] = React.useState(false);\n  const [confirmEx, setConfirmEx] = React.useState(false);\n  React.useEffect(() => { setDelta(50); setPlus(false); setReason(''); setConfirmEx(false); }, [teamNo]);\n  const E = window.RallyEngine;\n  const open = teamNo != null;\n  const name = open ? E.teamName(ev, teamNo, lang) : '';\n  const disq = !!(row && row.disqualified);\n  const send = async (o, okKey) => {\n    setBusy(true);\n    try {\n      await window.RallyStore.adjustTeam(ev.id, teamNo, o);\n      showToast(t(okKey, lang));\n      onClose();\n    } catch (e) {\n      console.warn('[RallyOrg] adjustTeam', e);\n      showToast(t('rally.org.error.generic', lang));\n    }\n    setBusy(false);\n  };\n  return (\n    <React.Fragment>\n      <RallySheet open={open} onClose={onClose} lang={lang} kicker={t('rally.org.adjust.kicker', lang)} title={name}>\n        {open && (\n          <div style={{ display: 'flex', flexDirection: 'column', gap: 14, paddingBottom: 8 }}>\n            {row && (row.adjust || disq) ? (\n              <RallyOrgNote icon=\"📝\">\n                {[disq ? t('rally.org.adjust.badge', lang) : '', rallyOrgAdjustText(row, lang)].filter(Boolean).join(' · ')}\n              </RallyOrgNote>\n            ) : null}\n            <RallySegmented ariaLabel={t('rally.org.adjust.dir', lang)} value={plus ? 'plus' : 'minus'} onChange={v => setPlus(v === 'plus')}\n              options={[{ value: 'minus', label: '− ' + t('rally.org.adjust.dirMinus', lang) }, { value: 'plus', label: '+ ' + t('rally.org.adjust.dirPlus', lang) }]} />\n            <RallyField label={t(plus ? 'rally.org.adjust.pointsPlus' : 'rally.org.adjust.points', lang)} hint={t(plus ? 'rally.org.adjust.pointsPlusHint' : 'rally.org.adjust.pointsHint', lang)}>\n              <RallyStepper value={delta} min={10} max={500} step={10} lang={lang} ariaLabel={t(plus ? 'rally.org.adjust.pointsPlus' : 'rally.org.adjust.points', lang)}\n                format={(x) => (plus ? '+' : '−') + x} onChange={setDelta} />\n            </RallyField>\n            <RallyField label={t('rally.org.adjust.reason', lang)} hint={t('rally.org.adjust.reasonHint', lang)} htmlFor=\"ral-org-adj-reason\">\n              <RallyInput id=\"ral-org-adj-reason\" value={reason} maxLength={120} placeholder={t(plus ? 'rally.org.adjust.reasonPlaceholderPlus' : 'rally.org.adjust.reasonPlaceholder', lang)}\n                onChange={e => setReason(e.target.value)} />\n            </RallyField>\n            <RallyButton full disabled={busy} onClick={() => send({ delta: plus ? Math.abs(delta) : -Math.abs(delta), reason: reason.trim() }, plus ? 'rally.org.adjust.appliedPlus' : 'rally.org.adjust.applied')}>\n              {rallyOrgT(plus ? 'rally.org.adjust.applyPlus' : 'rally.org.adjust.apply', lang, { n: delta })}\n            </RallyButton>\n            <div style={{ height: 1, background: 'var(--border)' }} />\n            {disq ? (\n              <RallyButton full variant=\"ghost\" disabled={busy} onClick={() => send({ disqualified: false, reason: reason.trim() }, 'rally.org.adjust.included')}>\n                {t('rally.org.adjust.include', lang)}\n              </RallyButton>\n            ) : (\n              <RallyButton full variant=\"secondary\" disabled={busy} onClick={() => setConfirmEx(true)}>{t('rally.org.adjust.exclude', lang)}</RallyButton>\n            )}\n          </div>\n        )}\n      </RallySheet>\n      <RallyConfirm open={confirmEx} lang={lang} danger zIndex={320}\n        title={rallyOrgT('rally.org.adjust.excludeTitle', lang, { team: name })}\n        body={t('rally.org.adjust.excludeBody', lang)} confirmLabel={t('rally.org.adjust.exclude', lang)}\n        onCancel={() => setConfirmEx(false)}\n        onConfirm={() => { setConfirmEx(false); send({ disqualified: true, reason: reason.trim() }, 'rally.org.adjust.excluded'); }} />\n    </React.Fragment>\n  );\n}\n// Kurzer Stand einer Korrektur in einer Teamzeile\nfunction RallyOrgAdjustBadges({ row, lang }) {\n  if (!row || (!row.adjust && !row.disqualified)) return null;\n  return (\n    <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6, marginTop: 6 }}>\n      {row.disqualified && <RallyChip active color=\"var(--stamp)\" style={{ fontSize: 12, padding: '1px 9px' }}>⛔ {t('rally.org.adjust.badge', lang)}</RallyChip>}\n      {row.adjust ? <span style={{ fontFamily: RAL_FONT_B, fontWeight: 600, fontSize: 13, color: 'var(--ink-2)', overflowWrap: 'anywhere' }}>📝 {rallyOrgAdjustText(row, lang)}</span> : null}\n    </div>\n  );\n}\n// Liste aller Teams mit „Korrigieren“ (Finale, vor der Siegerehrung)\nfunction RallyOrgAdjustList({ ev, standings, lang, theme, showToast }) {\n  const [team, setTeam] = React.useState(null);\n  const E = window.RallyEngine;\n  const rowBy = {};\n  (standings || []).forEach(r => { rowBy[r.team] = r; });\n  return (\n    <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n      {(ev.teams || []).map(tm => {\n        const row = rowBy[tm.no];\n        return (\n          <RallyCard key={tm.no} theme={theme} padding={12}>\n            <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n              <RallyTeamBadge team={tm} size=\"sm\" lang={lang} style={{ flexShrink: 1, minWidth: 0 }} />\n              <span style={{ flex: 1 }} />\n              <RallyButton size=\"sm\" variant=\"ghost\" onClick={() => setTeam(tm.no)}\n                ariaLabel={rallyOrgT('rally.org.adjust.openAria', lang, { team: E.teamName(ev, tm.no, lang) })}>{t('rally.org.adjust.open', lang)}</RallyButton>\n            </div>\n            <RallyOrgAdjustBadges row={row} lang={lang} />\n          </RallyCard>\n        );\n      })}\n      <RallyOrgAdjustSheet ev={ev} teamNo={team} row={team != null ? rowBy[team] : null} lang={lang}\n        onClose={() => setTeam(null)} showToast={showToast} />\n    </div>\n  );\n}\n\n// ── Lobby ───────────────────────────────────────────────────────────────────\nfunction RallyOrgLobby({ data, lang, theme, busy, onAsk, showToast }) {\n  const ev = data.event;\n  const players = data.players || [];\n  const S = window.RallyStore;\n  const E = window.RallyEngine;\n  const [playerSheet, setPlayerSheet] = React.useState(null); // playerId\n  const [renameTeam, setRenameTeam] = React.useState(null);   // team no\n  const [renameVal, setRenameVal] = React.useState('');\n  const [confirmRemove, setConfirmRemove] = React.useState(null);\n  const [confirmShuffle, setConfirmShuffle] = React.useState(false);\n\n  const teams = ev.teams || [];\n  const tName = (no) => E.teamName(ev, no, lang);\n  const evSettings = ev.settings || {};\n  const lateJoin = evSettings.lateJoin !== false;\n  const rosterOnly = evSettings.rosterOnly === true;\n  const hasRoster = (ev.roster || []).length > 0;\n  const setEvSetting = async (patch) => {\n    try { await S.updateEvent(ev.id, { settings: { lateJoin, rosterOnly, ...patch } }); }\n    catch (e) { showToast(t('rally.org.error.generic', lang)); }\n  };\n  const byTeam = {};\n  teams.forEach(tm => { byTeam[tm.no] = []; });\n  const unassigned = [];\n  players.forEach(p => { if (p.team != null && byTeam[p.team]) byTeam[p.team].push(p); else unassigned.push(p); });\n\n  const size = rallyOrgPredictTeams(ev, players);\n  const emptyTeams = teams.filter(tm => !size[tm.no]);\n  const canStart = players.length >= ev.teamCount && emptyTeams.length === 0;\n  let startHint = null;\n  if (!players.length) startHint = t('rally.org.lobby.hintNobody', lang);\n  else if (players.length < ev.teamCount) startHint = rallyOrgTn('rally.org.lobby.hintFew', players.length, lang, { teams: ev.teamCount });\n  else if (emptyTeams.length) startHint = rallyOrgT('rally.org.lobby.hintEmpty', lang, { team: emptyTeams.map(tm => tm.emoji + ' ' + tName(tm.no)).join(', ') });\n\n  const url = rallyJoinUrl(ev.code);\n  const share = async () => {\n    const text = rallyOrgT('rally.org.lobby.shareText', lang, { title: ev.title || '', code: ev.code });\n    if (navigator.share) {\n      try { await navigator.share({ title: ev.title || 'FACT', text, url }); return; }\n      catch (e) { if (e && e.name === 'AbortError') return; }\n    }\n    const ok = await rallyOrgCopy(text + '\\n' + url);\n    showToast(t(ok ? 'rally.org.lobby.copied' : 'rally.org.lobby.copyFailed', lang));\n  };\n  const copyCode = async () => {\n    const ok = await rallyOrgCopy(ev.code);\n    showToast(t(ok ? 'rally.org.lobby.codeCopied' : 'rally.org.lobby.copyFailed', lang));\n  };\n\n  // Feste oder selbst gewählte Einteilung nur mit Rückfrage überschreiben\n  const askRandomize = () => {\n    if (!players.length) return;\n    if (ev.assignMode === 'random') randomize(); else setConfirmShuffle(true);\n  };\n  const randomize = async () => {\n    if (!players.length) return;\n    const map = E.assignTeams(players.map(p => ({ id: p.id, name: p.name })), ev.teamCount, { mode: 'random', seed: Date.now() });\n    try { await S.applyAssignment(ev.id, map); showToast(t('rally.org.lobby.randomized', lang)); }\n    catch (e) { showToast(t('rally.org.error.generic', lang)); }\n  };\n  const balance = async () => {\n    if (!players.length) return;\n    const base = E.assignTeams(players.map(p => ({ id: p.id, name: p.name, team: p.team })), ev.teamCount, { mode: 'self', seed: 1 });\n    // Danach von groß nach klein umsetzen, zuletzt Beigetretene zuerst\n    const groups = {};\n    for (let k = 1; k <= ev.teamCount; k++) groups[k] = [];\n    players.forEach(p => { const tm = base[p.id]; if (groups[tm]) groups[tm].push(p.id); });\n    for (let guard = 0; guard < 100; guard++) {\n      let big = 1, small = 1;\n      for (let k = 1; k <= ev.teamCount; k++) {\n        if (groups[k].length > groups[big].length) big = k;\n        if (groups[k].length < groups[small].length) small = k;\n      }\n      if (groups[big].length - groups[small].length <= 1) break;\n      groups[small].push(groups[big].pop());\n    }\n    const map = {};\n    Object.keys(groups).forEach(k => groups[k].forEach(id => { map[id] = Number(k); }));\n    try { await S.applyAssignment(ev.id, map); showToast(t('rally.org.lobby.balanced', lang)); }\n    catch (e) { showToast(t('rally.org.error.generic', lang)); }\n  };\n  const setTeamCount = async (n) => {\n    try { await S.updateEvent(ev.id, { teamCount: n }); } catch (e) { showToast(t('rally.org.error.generic', lang)); }\n  };\n  const doRename = async () => {\n    const name = renameVal.trim();\n    const no = renameTeam;\n    setRenameTeam(null);\n    if (!name) return;\n    try {\n      if (typeof S.renameTeam === 'function') await S.renameTeam(ev.id, no, { name });\n      else await S.updateEvent(ev.id, { teams: teams.map(tm => tm.no === no ? { ...tm, name } : tm) });\n    } catch (e) { showToast(t('rally.org.error.generic', lang)); }\n  };\n  const movePlayer = async (pid, team) => {\n    setPlayerSheet(null);\n    try { await S.setPlayerTeam(ev.id, pid, team); } catch (e) { showToast(t('rally.org.error.generic', lang)); }\n  };\n  const remove = async () => {\n    const p = confirmRemove;\n    setConfirmRemove(null); setPlayerSheet(null);\n    try { await S.removePlayer(ev.id, p.id); showToast(rallyOrgT('rally.org.lobby.removed', lang, { name: p.name })); }\n    catch (e) { showToast(t('rally.org.error.generic', lang)); }\n  };\n\n  const sheetPlayer = playerSheet ? players.find(p => p.id === playerSheet) : null;\n\n  const playerChip = (p) => (\n    <button key={p.id} type=\"button\" className=\"rally-tap\" onClick={() => setPlayerSheet(p.id)} style={{\n      minHeight: 40, padding: '6px 12px', borderRadius: 999, cursor: 'pointer', maxWidth: '100%',\n      border: '1px solid var(--border-2)', background: 'var(--surface-2)', color: 'var(--ink)',\n      fontFamily: RAL_FONT_B, fontWeight: 600, fontSize: 14, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap',\n    }}>{p.name}</button>\n  );\n  // R3: erwartete Leute von der Namensliste, ausgegraut, bis sie beitreten\n  const missing = rallyOrgMissingRoster(ev, players);\n  const missingByTeam = {};\n  const missingLoose = [];\n  missing.forEach(r => {\n    if (ev.assignMode === 'preset' && r.team != null && byTeam[r.team]) (missingByTeam[r.team] = missingByTeam[r.team] || []).push(r);\n    else missingLoose.push(r);\n  });\n  const ghostChip = (r, i) => (\n    <span key={'g' + i + r.name} title={t('rally.org.lobby.notHere', lang)} style={{\n      display: 'inline-flex', alignItems: 'center', minHeight: 36, padding: '4px 12px', borderRadius: 999, maxWidth: '100%',\n      border: '1.5px dashed var(--border-2)', background: 'transparent', color: 'var(--ink-2)',\n      fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 14, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap',\n    }}>{r.name}</span>\n  );\n  const ghostRow = (list) => list.length > 0 && (\n    <div style={{ marginTop: 8 }}>\n      <div style={{ fontFamily: RAL_FONT_B, fontWeight: 600, fontSize: 13, color: 'var(--ink-2)' }}>{t('rally.org.lobby.notHere', lang)}</div>\n      <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6, marginTop: 4 }}>{list.map(ghostChip)}</div>\n    </div>\n  );\n\n  return (\n    <div style={{ padding: '14px 16px 0', display: 'flex', flexDirection: 'column', gap: 20 }}>\n      <RallyCard theme={theme} padding={18} style={{ textAlign: 'center' }}>\n        <RallyKicker style={{ fontSize: 12 }}>{t('rally.org.lobby.codeKicker', lang)}</RallyKicker>\n        <button type=\"button\" className=\"rally-tap\" onClick={copyCode} aria-label={rallyOrgT('rally.org.lobby.copyCodeAria', lang, { code: ev.code })} style={{\n          display: 'block', margin: '6px auto 0', padding: '4px 10px', minHeight: 44, border: 'none', background: 'transparent', cursor: 'pointer',\n          fontFamily: RAL_FONT_M, fontWeight: 600, fontSize: 44, letterSpacing: '0.18em', color: 'var(--ink)', lineHeight: 1.1,\n        }}>{ev.code}</button>\n        <div style={{ marginTop: 12 }}><RallyQr code={ev.code} size={176} lang={lang} /></div>\n        <div style={{ marginTop: 12, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 14, lineHeight: 1.5, color: 'var(--ink-2)' }}>{t('rally.org.lobby.howToJoin', lang)}</div>\n        <div style={{ display: 'flex', gap: 8, marginTop: 14 }}>\n          <RallyButton variant=\"ghost\" onClick={copyCode} style={{ flex: 1 }}>{t('rally.org.lobby.copyCode', lang)}</RallyButton>\n          <RallyButton onClick={share} style={{ flex: 1 }} icon=\"↗\">{t('rally.org.lobby.share', lang)}</RallyButton>\n        </div>\n      </RallyCard>\n\n      <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8, alignItems: 'center' }}>\n        {ev.date && <RallyChip icon=\"📅\">{rallyOrgFmtWhen(ev.date, lang)}</RallyChip>}\n        <RallyChip icon={{ random: '🎲', self: '🙋', preset: '📋' }[ev.assignMode]}>{t('rally.org.assign.' + ev.assignMode, lang)}</RallyChip>\n        <RallyChip icon=\"👥\">{rallyOrgT('rally.org.lobby.players', lang, { n: players.length })}</RallyChip>\n        {ev.organizerMode === 'companion' && ev.companionTeam && (\n          <RallyChip icon=\"🚶\">{rallyOrgT('rally.org.lobby.companion', lang, { team: tName(ev.companionTeam) })}</RallyChip>\n        )}\n        {ev.organizerMode === 'player' && <RallyChip icon=\"🏃\">{t('rally.org.lobby.youPlay', lang)}</RallyChip>}\n      </div>\n      {ev.organizerMode === 'player' && (\n        <RallyOrgNote icon=\"🏃\">{rallyOrgT('rally.org.lobby.playerNote', lang, { code: ev.code })}</RallyOrgNote>\n      )}\n\n      <RallyOrgSection title={t('rally.org.lobby.teams', lang)} hint={t('rally.org.lobby.teamsHint', lang)}>\n        <div style={{ display: 'flex', alignItems: 'center', gap: 10 }}>\n          <span style={{ flex: 1, fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15 }}>{t('rally.org.setup.teams', lang)}</span>\n          <RallyStepper value={ev.teamCount} min={2} max={8} lang={lang} ariaLabel={t('rally.org.setup.teams', lang)} onChange={setTeamCount} />\n        </div>\n        <div style={{ display: 'flex', gap: 8 }}>\n          <RallyButton size=\"sm\" variant=\"ghost\" icon=\"🎲\" disabled={!players.length} onClick={askRandomize} style={{ flex: 1 }}>{t('rally.org.lobby.randomize', lang)}</RallyButton>\n          <RallyButton size=\"sm\" variant=\"ghost\" icon=\"⚖️\" disabled={!players.length} onClick={balance} style={{ flex: 1 }}>{t('rally.org.lobby.balance', lang)}</RallyButton>\n        </div>\n        {unassigned.length > 0 && (\n          <RallyCard theme={theme} padding={12} style={{ borderStyle: 'dashed' }}>\n            <div style={{ fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15 }}>{rallyOrgT('rally.org.lobby.unassigned', lang, { n: unassigned.length })}</div>\n            <div style={{ marginTop: 2, fontFamily: RAL_FONT_B, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-3)' }}>{t('rally.org.lobby.unassignedHint.' + ev.assignMode, lang)}</div>\n            <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6, marginTop: 10 }}>{unassigned.map(playerChip)}</div>\n          </RallyCard>\n        )}\n        {teams.map(tm => {\n          const list = byTeam[tm.no] || [];\n          return (\n            <RallyCard key={tm.no} theme={theme} padding={12} accent={tm.color}>\n              <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n                <RallyTeamBadge team={tm} lang={lang} size=\"sm\" style={{ minWidth: 0, flexShrink: 1 }} />\n                <span style={{ fontFamily: RAL_FONT_M, fontSize: 12, color: 'var(--ink-2)' }}>{list.length}</span>\n                <span style={{ flex: 1 }} />\n                <RallyOrgIconBtn label={rallyOrgT('rally.org.lobby.renameAria', lang, { team: tName(tm.no) })} onClick={() => { setRenameTeam(tm.no); setRenameVal(tName(tm.no)); }}>{RAL_ORG_ICON.edit}</RallyOrgIconBtn>\n              </div>\n              <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6, marginTop: 10 }}>\n                {list.length ? list.map(playerChip) : (\n                  <span style={{ fontFamily: RAL_FONT_B, fontSize: 13.5, color: 'var(--ink-2)' }}>{t('rally.org.lobby.teamEmpty', lang)}</span>\n                )}\n              </div>\n              {ghostRow(missingByTeam[tm.no] || [])}\n            </RallyCard>\n          );\n        })}\n        {missingLoose.length > 0 && (\n          <RallyCard theme={theme} padding={12} style={{ borderStyle: 'dashed' }}>\n            <div style={{ fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15 }}>{rallyOrgT('rally.org.lobby.expected', lang, { n: missingLoose.length })}</div>\n            <div style={{ marginTop: 2, fontFamily: RAL_FONT_B, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-2)' }}>{t('rally.org.lobby.expectedHint', lang)}</div>\n            <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6, marginTop: 10 }}>{missingLoose.map(ghostChip)}</div>\n          </RallyCard>\n        )}\n      </RallyOrgSection>\n\n      <RallyOrgSection title={t('rally.org.setup.joinTitle', lang)}>\n        <RallyOrgSwitch checked={lateJoin} onChange={v => setEvSetting({ lateJoin: v })} label={t('rally.org.setup.lateJoin', lang)}\n          hint={t(lateJoin ? 'rally.org.setup.lateJoin.on' : 'rally.org.setup.lateJoin.off', lang)} />\n        {hasRoster && (\n          <RallyOrgSwitch checked={rosterOnly} onChange={v => setEvSetting({ rosterOnly: v })} label={t('rally.org.setup.rosterOnly', lang)}\n            hint={t(rosterOnly ? 'rally.org.setup.rosterOnly.on' : 'rally.org.setup.rosterOnly.off', lang)} />\n        )}\n      </RallyOrgSection>\n\n\n      <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n        {startHint && <RallyOrgNote icon=\"⏳\">{startHint}</RallyOrgNote>}\n        <RallyButton size=\"lg\" full icon=\"🚀\" disabled={!canStart || busy} onClick={() => onAsk('start')}>{t('rally.org.lobby.start', lang)}</RallyButton>\n        <RallyButton full variant=\"ghost\" onClick={() => onAsk('delete')}>{t('rally.org.event.delete', lang)}</RallyButton>\n      </div>\n\n      <RallySheet open={!!sheetPlayer} onClose={() => setPlayerSheet(null)} lang={lang}\n        kicker={t('rally.org.player.kicker', lang)} title={sheetPlayer ? sheetPlayer.name : ''}>\n        {sheetPlayer && (\n          <div style={{ display: 'flex', flexDirection: 'column', gap: 14, paddingBottom: 8 }}>\n            <div style={{ fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 15 }}>{t('rally.org.player.moveTo', lang)}</div>\n            <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n              {teams.map(tm => (\n                <RallyChip key={tm.no} active={sheetPlayer.team === tm.no} color={tm.color} icon={tm.emoji}\n                  onClick={() => movePlayer(sheetPlayer.id, tm.no)}>{tm.name}</RallyChip>\n              ))}\n              <RallyChip active={sheetPlayer.team == null} onClick={() => movePlayer(sheetPlayer.id, null)}>{t('rally.org.setup.noTeam', lang)}</RallyChip>\n            </div>\n            <RallyButton variant=\"secondary\" full onClick={() => setConfirmRemove(sheetPlayer)}>{t('rally.org.player.remove', lang)}</RallyButton>\n          </div>\n        )}\n      </RallySheet>\n\n      <RallySheet open={renameTeam != null} onClose={() => setRenameTeam(null)} lang={lang}\n        kicker={t('rally.org.rename.kicker', lang)} title={t('rally.org.rename.title', lang)}\n        footer={<RallyButton full onClick={doRename} disabled={!renameVal.trim()}>{t('rally.org.rename.save', lang)}</RallyButton>}>\n        <div style={{ paddingBottom: 8 }}>\n          <RallyInput value={renameVal} maxLength={E.TEAM_NAME_MAX || 30} autoFocus onChange={e => setRenameVal(e.target.value)}\n            onKeyDown={e => { if (e.key === 'Enter') doRename(); }} aria-label={t('rally.org.rename.title', lang)} />\n        </div>\n      </RallySheet>\n\n      <RallyConfirm open={confirmShuffle} lang={lang} zIndex={320}\n        title={t('rally.org.lobby.shuffleTitle', lang)}\n        body={t(ev.assignMode === 'preset' ? 'rally.org.lobby.shuffleBody.preset' : 'rally.org.lobby.shuffleBody.self', lang)}\n        confirmLabel={t('rally.org.lobby.randomize', lang)}\n        onCancel={() => setConfirmShuffle(false)} onConfirm={() => { setConfirmShuffle(false); randomize(); }} />\n\n      <RallyConfirm open={!!confirmRemove} lang={lang} danger zIndex={320}\n        title={rallyOrgT('rally.org.player.removeTitle', lang, { name: confirmRemove ? confirmRemove.name : '' })}\n        body={t('rally.org.player.removeBody', lang)} confirmLabel={t('rally.org.player.remove', lang)}\n        onCancel={() => setConfirmRemove(null)} onConfirm={remove} />\n    </div>\n  );\n}\n\n// ── Live ────────────────────────────────────────────────────────────────────\nfunction RallyOrgLive({ data, lang, theme, busy, onAsk, showToast }) {\n  const ev = data.event;\n  const now = useRallyNow(1000);\n  const E = window.RallyEngine;\n  const answers = data.answers || [];\n  const finishes = data.finishes || [];\n  const teams = ev.teams || [];\n  const [adjustTeamNo, setAdjustTeamNo] = React.useState(null);\n\n  const standings = E.standings(ev, answers, finishes, { revealEstimates: false, lang });\n  const rowBy = {};\n  standings.forEach(r => { rowBy[r.team] = r; });\n  const finByTeam = {};\n  finishes.forEach(f => { if (!finByTeam[f.team] || f.at < finByTeam[f.team]) finByTeam[f.team] = f.at; });\n\n  // Letzte Position je Team\n  const posByTeam = {};\n  (data.positions || []).forEach(p => {\n    if (p.team == null) return;\n    if (!posByTeam[p.team] || String(p.at) > String(posByTeam[p.team].at)) posByTeam[p.team] = p;\n  });\n\n  const markers = rallyOrgTourMarkers(ev.tour, lang);\n  teams.forEach(tm => {\n    const p = posByTeam[tm.no];\n    if (p) markers.push({ id: 'team_' + tm.no, kind: 'team', lat: p.lat, lng: p.lng, emoji: tm.emoji, color: tm.color, label: tm.name });\n  });\n\n  const endsMs = ev.endsAt ? Date.parse(ev.endsAt) : null;\n  const startMs = ev.startedAt ? Date.parse(ev.startedAt) : null;\n  const remaining = endsMs ? endsMs - now : null;\n  const elapsed = startMs ? now - startMs : null;\n  const finishedCount = teams.filter(tm => finByTeam[tm.no]).length;\n\n  // Signal-Alarm: Teams unterwegs ohne Position (nach 2 min Spielzeit) oder letzte Position älter als 10 min\n  const signalOf = (no) => {\n    if (finByTeam[no]) return null;\n    const p = posByTeam[no];\n    if (!p) return elapsed != null && elapsed > 2 * 60000 ? { kind: 'none' } : null;\n    const age = now - Date.parse(p.at);\n    return isFinite(age) && age > RAL_ORG_SIGNAL_MS ? { kind: 'stale', min: Math.floor(age / 60000) } : null;\n  };\n  const signalText = (sig) => sig.kind === 'none' ? t('rally.org.live.noPosition', lang) : rallyOrgT('rally.org.live.noSignalSince', lang, { n: sig.min });\n  const lostTeams = teams.filter(tm => signalOf(tm.no));\n\n  const ago = (iso) => {\n    const ms = now - Date.parse(iso);\n    if (!isFinite(ms)) return '';\n    const m = Math.floor(ms / 60000);\n    return m < 1 ? t('rally.org.live.justNow', lang) : rallyOrgT('rally.org.live.minAgo', lang, { n: m });\n  };\n\n  const comp = ev.organizerMode === 'companion' && ev.companionTeam ? teams.find(tm => tm.no === ev.companionTeam) : null;\n  const compNext = comp ? E.nextStationFor(ev, comp.no, answers, now) : null;\n  const compProg = comp ? E.teamProgress(ev, comp.no, answers) : null;\n\n  return (\n    <div style={{ padding: '14px 16px 0', display: 'flex', flexDirection: 'column', gap: 20 }}>\n      <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\n        <div style={{ background: remaining != null && remaining < 10 * 60000 ? 'var(--stamp-soft)' : 'var(--surface-2)', borderRadius: 14, padding: '12px 8px', textAlign: 'center', border: '1px solid var(--border)' }}>\n          <div style={{ fontFamily: RAL_FONT_M, fontWeight: 600, fontSize: 24, color: remaining != null && remaining < 10 * 60000 ? 'var(--stamp)' : 'var(--ink)' }}>\n            {remaining != null ? rallyFmtClock(remaining) : rallyFmtClock(elapsed)}\n          </div>\n          <div style={{ fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 12, letterSpacing: 1, textTransform: 'uppercase', color: 'var(--ink-2)' }}>\n            {t(remaining != null ? (remaining > 0 ? 'rally.org.live.remaining' : 'rally.org.live.timeUp') : 'rally.org.live.elapsed', lang)}\n          </div>\n          {ev.endsAt && (\n            <div style={{ marginTop: 2, fontFamily: RAL_FONT_M, fontSize: 12.5, color: 'var(--ink-2)' }}>\n              {rallyOrgT('rally.org.live.endsAt', lang, { time: rallyOrgFmtTime(ev.endsAt, lang) })}\n            </div>\n          )}\n        </div>\n        <div style={{ background: 'var(--surface-2)', borderRadius: 14, padding: '12px 8px', textAlign: 'center', border: '1px solid var(--border)' }}>\n          <div style={{ fontFamily: RAL_FONT_M, fontWeight: 600, fontSize: 24 }}>{finishedCount}/{teams.length}</div>\n          <div style={{ fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 12, letterSpacing: 1, textTransform: 'uppercase', color: 'var(--ink-2)' }}>{t('rally.org.live.atFinish', lang)}</div>\n        </div>\n      </div>\n\n      {lostTeams.length > 0 && (\n        <RallyOrgNote tone=\"warn\" icon=\"📡\"\n          title={rallyOrgT('rally.org.live.signalAlarm', lang, { teams: lostTeams.map(tm => tm.emoji + ' ' + E.teamName(ev, tm.no, lang)).join(', ') })}>\n          {t('rally.org.live.signalAlarmBody', lang)}\n        </RallyOrgNote>\n      )}\n\n      {comp && compNext && (\n        <RallyCard theme={theme} padding={14} accent={comp.color}>\n          <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n            <RallyKicker style={{ flex: 1, fontSize: 12 }}>{t('rally.org.live.yourTeam', lang)}</RallyKicker>\n            <RallyTeamBadge team={comp} size=\"sm\" lang={lang} />\n          </div>\n          {compNext.kind === 'station' ? (\n            <>\n              <div style={{ marginTop: 8, fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 17, lineHeight: 1.25, overflowWrap: 'anywhere',\n                display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden' }}>\n                {rallyOrgT('rally.org.live.nextStation', lang, { n: compNext.index + 1, title: compNext.station.title })}\n              </div>\n              <div style={{ marginTop: 4, fontFamily: RAL_FONT_M, fontSize: 12, color: 'var(--ink-2)' }}>\n                {rallyOrgT('rally.org.live.progress', lang, { done: compProg.done, total: compProg.total })} · {t('rally.org.qtype.' + rallyOrgQType(compNext.station), lang)}\n              </div>\n            </>\n          ) : (\n            <div style={{ marginTop: 8, fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 16 }}>{t('rally.org.live.toFinish', lang)}</div>\n          )}\n        </RallyCard>\n      )}\n\n      <RallyMap theme={theme} lang={lang} height={260} markers={markers} line={rallyOrgRouteLine(ev.tour)} fitToMarkers recenter />\n      {Object.keys(posByTeam).length === 0 && (\n        <div style={{ marginTop: -12, fontFamily: RAL_FONT_B, fontSize: 13, color: 'var(--ink-3)' }}>{t('rally.org.live.noPositions', lang)}</div>\n      )}\n\n      <RallyOrgSection title={t('rally.org.live.standings', lang)} hint={rallyFinHasEstimates(ev) ? t('rally.org.live.standingsHint', lang) : undefined}>\n        <RallyStandingsList event={ev} standings={standings} lang={lang} theme={theme} hideEstimates highlightTeam={comp ? comp.no : null} flags answers={answers} noSpeed={rallyFinNoSpeed(ev)} />\n      </RallyOrgSection>\n\n      <RallyOrgSection title={t('rally.org.review.title', lang)} hint={t('rally.org.review.hint', lang)}>\n        <RallyOrgReview ev={ev} answers={answers} standings={standings} lang={lang} theme={theme} showToast={showToast} />\n      </RallyOrgSection>\n\n      <RallyOrgSection title={t('rally.org.live.teams', lang)}>\n        {teams.map(tm => {\n          const prog = E.teamProgress(ev, tm.no, answers);\n          const next = E.nextStationFor(ev, tm.no, answers, now);\n          const fin = finByTeam[tm.no];\n          const pos = posByTeam[tm.no];\n          const sig = signalOf(tm.no);\n          const row = rowBy[tm.no];\n          return (\n            <RallyCard key={tm.no} theme={theme} padding={12}>\n              <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n                <RallyTeamBadge team={tm} size=\"sm\" lang={lang} style={{ flexShrink: 1, minWidth: 0 }} />\n                <span style={{ flex: 1 }} />\n                <span style={{ fontFamily: RAL_FONT_M, fontWeight: 600, fontSize: 14 }}>{prog.done}/{prog.total}</span>\n                <RallyButton size=\"sm\" variant=\"ghost\" onClick={() => setAdjustTeamNo(tm.no)}\n                  ariaLabel={rallyOrgT('rally.org.adjust.openAria', lang, { team: E.teamName(ev, tm.no, lang) })}>{t('rally.org.adjust.open', lang)}</RallyButton>\n              </div>\n              <div style={{ marginTop: 8, height: 8, borderRadius: 999, background: 'var(--surface-2)', overflow: 'hidden' }}>\n                <div style={{ height: '100%', width: (prog.total ? prog.done / prog.total * 100 : 0) + '%', background: tm.color, borderRadius: 999, transition: 'width 0.4s' }} />\n              </div>\n              <div style={{ marginTop: 8, fontFamily: RAL_FONT_B, fontWeight: 500, fontSize: 13.5, lineHeight: 1.45, color: 'var(--ink-2)', overflowWrap: 'anywhere',\n                display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden' }}>\n                {fin ? rallyOrgT('rally.org.live.finishedAt', lang, { time: rallyOrgFmtTime(fin, lang) })\n                  : next.kind === 'station' ? rallyOrgT('rally.org.live.nextStation', lang, { n: next.index + 1, title: next.station.title })\n                  : t('rally.org.live.toFinish', lang)}\n              </div>\n              {pos && !fin && !sig && (\n                <div style={{ marginTop: 2, fontFamily: RAL_FONT_M, fontSize: 12, color: 'var(--ink-3)' }}>{rallyOrgT('rally.org.live.lastSeen', lang, { ago: ago(pos.at) })}</div>\n              )}\n              {sig && (\n                <div role=\"status\" style={{ marginTop: 6, display: 'inline-flex', alignItems: 'center', gap: 6, padding: '2px 10px', borderRadius: 999,\n                  background: 'var(--coin-soft)', border: '1px solid rgba(201,160,15,0.5)', fontFamily: RAL_FONT_D, fontWeight: 800, fontSize: 12.5, color: 'var(--ink)' }}>\n                  📡 {signalText(sig)}\n                </div>\n              )}\n              {row && row.suspicious && (\n                <div style={{ marginTop: 6, fontFamily: RAL_FONT_B, fontWeight: 600, fontSize: 13, lineHeight: 1.45, color: 'var(--ink-2)' }}>\n                  ⚠️ {t(row.paceKmh != null && row.paceKmh > 8 ? 'rally.org.live.suspiciousFast' : 'rally.org.live.suspiciousGps', lang)}\n                </div>\n              )}\n              <RallyOrgAdjustBadges row={row} lang={lang} />\n            </RallyCard>\n          );\n        })}\n      </RallyOrgSection>\n\n      <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n        {finishedCount < teams.length && <RallyOrgNote icon=\"🏁\">{rallyOrgTn('rally.org.live.notAll', finishedCount, lang, { total: teams.length })}</RallyOrgNote>}\n        <RallyButton size=\"lg\" variant=\"gold\" full icon=\"🏆\" disabled={busy} onClick={() => onAsk('finale')}>{t('rally.org.live.finale', lang)}</RallyButton>\n      </div>\n\n      <RallyOrgAdjustSheet ev={ev} teamNo={adjustTeamNo} row={adjustTeamNo != null ? rowBy[adjustTeamNo] : null} lang={lang}\n        onClose={() => setAdjustTeamNo(null)} showToast={showToast || (() => {})} />\n    </div>\n  );\n}\n\n// ═════════════════════════════════════════════════════════════════════════════\n// Root\n// ═════════════════════════════════════════════════════════════════════════════\nfunction RallyOrganizer({ theme = 'light', lang = 'de', userId, user, userPosition, currentCity, initialCode, onExit, onSignup }) {\n  rallyEnsureStyles();\n  rallyOrgStyles();\n  const [screen, setScreenState] = React.useState(() => {\n    // Deep Link ?rallytpl=CODE: nur lesen (gelöscht wird im Effect unten, Initializer laufen im Dev-Modus doppelt)\n    if (window._pendingRallyTpl) return { name: 'overview', tab: 'discover' };\n    const last = rallyOrgLoadLast();\n    if (last && (last.name === 'editor' || last.name === 'event' || last.name === 'eventSetup') && (last.tourId || last.eventId)) return { ...last, restored: true };\n    if (last && last.name === 'overview') return { name: 'overview', tab: last.tab === 'discover' ? 'discover' : 'mine' };\n    return { name: 'overview', tab: 'mine' };\n  });\n  const [ownerInfo, setOwnerInfo] = React.useState(null);\n  const [loadTry, setLoadTry] = React.useState(0);   // „Nochmal versuchen“ im Ladezustand\n  // R10: zuletzt geöffnete Tour/Event nur öffnen, wenn sie diesem Besitzer gehört\n  React.useEffect(() => {\n    if (!ownerInfo || !screen.restored) return;\n    let alive = true;\n    const S = window.RallyStore;\n    const fail = () => { if (alive) go({ name: 'overview', tab: 'mine' }); };\n    const ok = () => { if (alive) setScreenState(sc => { const n = { ...sc }; delete n.restored; return n; }); };\n    const owns = (x) => !!x && x.ownerId === ownerInfo.owner;\n    const p = screen.name === 'event' ? S.getEvent(screen.eventId) : S.getTour(screen.tourId);\n    Promise.resolve(p).then(x => (owns(x) ? ok() : fail())).catch(fail);\n    return () => { alive = false; };\n  }, [ownerInfo, screen.restored, loadTry]); // eslint-disable-line react-hooks/exhaustive-deps\n  const [toast, showToast] = useRallyToast();\n  const [libRequest, setLibRequest] = React.useState(null); // { code?, id?, nonce } für die Bibliothek\n  const scrollRef = React.useRef(null);\n\n  React.useEffect(() => {\n    const code = window._pendingRallyTpl;\n    if (!code) return;\n    try { delete window._pendingRallyTpl; } catch (e) { window._pendingRallyTpl = null; }\n    go({ name: 'overview', tab: 'discover' });\n    setLibRequest({ code: String(code), nonce: Date.now() });\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n  React.useEffect(() => {\n    let alive = true;\n    rallyOrgOwner(userId).then(o => { if (alive) setOwnerInfo(o); }).catch(() => alive && setOwnerInfo({ owner: null, mode: null }));\n    return () => { alive = false; };\n  }, [userId, loadTry]);\n\n  const go = (next) => {\n    setScreenState(next);\n    rallyOrgSaveLast(next.name === 'wizard' ? null : next);\n    if (scrollRef.current) scrollRef.current.scrollTop = 0;\n  };\n  const toOverview = () => go({ name: 'overview', tab: 'mine' });\n  // „In der Bibliothek ansehen“: Reiter Entdecken, Detail der Vorlage öffnen\n  const viewTemplate = (tpl) => {\n    if (!tpl) return;\n    go({ name: 'overview', tab: 'discover' });\n    setLibRequest(tpl.shareCode ? { code: tpl.shareCode, nonce: Date.now() } : { id: tpl.id, nonce: Date.now() });\n  };\n\n  let content;\n  if (!window.RallyStore || !window.RallyEngine) {\n    content = <RallyEmpty icon=\"⚠️\" title={t('rally.org.error.generic', lang)} />;\n  } else if (!ownerInfo || (screen.restored && ownerInfo.owner)) {\n    // Kein Kopf mit Zurück hier, darum bietet der Ladezustand selbst den Ausweg\n    content = <RallyLoading lang={lang} where={ownerInfo ? 'org.restore.' + screen.name : 'org.owner'}\n      onRetry={() => setLoadTry(n => n + 1)} onBack={onExit} style={{ paddingTop: 60 }} />;\n  } else if (!ownerInfo.owner) {\n    content = (\n      <div>\n        <RallyOrgHeader kicker={t('rally.org.overview.kicker', lang)} title={t('rally.org.overview.title', lang)} onBack={onExit} lang={lang} />\n        <RallyEmpty icon=\"🔐\" title={t('rally.org.login.title', lang)} body={t('rally.org.login.body', lang)}\n          action={<RallyButton onClick={onSignup}>{t('rally.org.login.cta', lang)}</RallyButton>} />\n        {/* Funktionstest 25.10.: Gäste sahen nur die Anmeldewand. Die fertigen Touren dürfen sie ansehen. */}\n        {typeof window.RallyLibraryView === 'function' && (\n          <div style={{ padding: '0 16px' }}>\n            <RallyLibraryView theme={theme} lang={lang} userId={null} user={user} ownerId={null} showToast={showToast}\n              openRequest={libRequest} onRequestHandled={() => setLibRequest(null)} onNeedAccount={onSignup} />\n          </div>\n        )}\n      </div>\n    );\n  } else {\n    const common = { lang, theme, owner: ownerInfo.owner, user, showToast };\n    switch (screen.name) {\n      case 'wizard':\n        content = <RallyOrgWizard {...common} userPosition={userPosition} currentCity={currentCity}\n          onBack={toOverview} onCreated={(id) => { showToast(t('rally.org.wizard.created', lang)); go({ name: 'editor', tourId: id }); }}\n          onOpenLibrary={typeof window.RallyLibraryView === 'function' ? (pack) => {\n            // R2: fertige Touren für diese Gruppe in der Bibliothek zeigen\n            go({ name: 'overview', tab: 'discover' });\n            setLibRequest({ pack: pack || null, filterOnly: true, nonce: Date.now() });\n          } : null} />;\n        break;\n      case 'editor':\n        content = <RallyOrgEditor key={screen.tourId} {...common} tourId={screen.tourId} onBack={toOverview}\n          onCreateEvent={(id) => go({ name: 'eventSetup', tourId: id })} onViewTemplate={viewTemplate} />;\n        break;\n      case 'eventSetup':\n        content = <RallyOrgEventSetup key={screen.tourId} {...common} tourId={screen.tourId}\n          onBack={() => go({ name: 'editor', tourId: screen.tourId })}\n          onEditTour={(id) => go({ name: 'editor', tourId: id })}\n          onCreated={(id) => go({ name: 'event', eventId: id })} />;\n        break;\n      case 'event':\n        content = <RallyOrgEvent key={screen.eventId} lang={lang} theme={theme} owner={ownerInfo.owner} user={user}\n          eventId={screen.eventId} onBack={toOverview} onViewTemplate={viewTemplate} showToast={showToast} />;\n        break;\n      default:\n        content = <RallyOrgOverview {...common} mode={ownerInfo.mode} onExit={onExit} userId={userId}\n          tab={screen.tab === 'discover' ? 'discover' : 'mine'}\n          onTab={(tb) => go({ name: 'overview', tab: tb })}\n          libRequest={libRequest} onLibRequestHandled={() => setLibRequest(null)} onViewTemplate={viewTemplate}\n          onNew={() => go({ name: 'wizard' })}\n          onEditTour={(id) => go({ name: 'editor', tourId: id })}\n          onStartEvent={(id) => go({ name: 'eventSetup', tourId: id })}\n          onOpenEvent={(id) => go({ name: 'event', eventId: id })} />;\n    }\n  }\n\n  return (\n    <div className=\"rally-org\" style={{ position: 'absolute', top: 44, left: 0, right: 0, bottom: 0, overflow: 'hidden', color: 'var(--ink)' }}>\n      {/* Bewusst ohne position: Sheets/Dialoge beziehen sich auf .rally-org und scrollen nicht mit */}\n      <div ref={scrollRef} className=\"rally-scroll no-scroll\" style={{ height: '100%', overflowY: 'auto', overflowX: 'hidden' }}>\n        {/* Abstand für die TabBar im Inhalt, nicht am Scroll-Container (sonst rechnet sticky falsch) */}\n        <div style={{ paddingBottom: 120 }}>{content}</div>\n      </div>\n      <RallyToast message={toast} bottom={204} />\n    </div>\n  );\n}\n\nwindow.RallyOrganizer = RallyOrganizer;\n"],
  "mappings": "AAcA,MAAM,iBAAmB,sBACnB,kBAAoB,CAAC,GAAI,GAAI,IAAK,GAAG,EACrC,kBAAoB,CACxB,CAAE,IAAK,OAAQ,MAAO,IAAK,EAC3B,CAAE,IAAK,SAAU,MAAO,IAAK,EAC7B,CAAE,IAAK,SAAU,MAAO,IAAK,EAC7B,CAAE,IAAK,MAAO,MAAO,IAAK,CAC5B,EAEM,eAAiB,CACrB,CAAE,IAAK,cAAe,IAAK,SAAU,IAAK,SAAU,KAAM,CAAE,GAAI,cAAe,GAAI,aAAc,CAAE,EACnG,CAAE,IAAK,cAAe,IAAK,SAAU,IAAK,SAAU,KAAM,CAAE,GAAI,cAAe,GAAI,aAAc,CAAE,EACnG,CAAE,IAAK,MAAO,IAAK,SAAU,IAAK,SAAU,KAAM,CAAE,GAAI,eAAgB,GAAI,iBAAkB,CAAE,EAChG,CAAE,IAAK,aAAc,IAAK,SAAU,IAAK,SAAU,KAAM,CAAE,GAAI,iBAAkB,GAAI,gBAAiB,CAAE,EACxG,CAAE,IAAK,aAAc,IAAK,QAAS,IAAK,QAAS,KAAM,CAAE,GAAI,kBAAmB,GAAI,iBAAkB,CAAE,EACxG,CAAE,IAAK,YAAa,IAAK,SAAU,IAAK,SAAU,KAAM,CAAE,GAAI,mBAAoB,GAAI,kBAAmB,CAAE,EAC3G,CAAE,IAAK,UAAW,IAAK,SAAU,IAAK,SAAU,KAAM,CAAE,GAAI,uBAAwB,GAAI,sBAAuB,CAAE,EACjH,CAAE,IAAK,WAAY,IAAK,SAAU,IAAK,SAAU,KAAM,CAAE,GAAI,oBAAqB,GAAI,eAAgB,CAAE,CAC1G,EAEM,kBAAoB,sCACpB,oBAAsB,0BACtB,kBAAoB,CAAC,EAErB,iBAAmB,CAAE,KAAM,OAAQ,OAAQ,SAAU,IAAK,MAAO,OAAQ,IAAK,EAE9E,eAAiB,CACrB,CAAE,IAAK,OAAQ,MAAO,MAAO,MAAO,CAAC,MAAM,CAAE,EAC7C,CAAE,IAAK,OAAQ,MAAO,KAAM,MAAO,CAAC,QAAQ,CAAE,EAC9C,CAAE,IAAK,SAAU,MAAO,IAAK,MAAO,CAAC,SAAU,SAAU,OAAO,CAAE,EAClE,CAAE,IAAK,UAAW,MAAO,KAAM,MAAO,CAAC,SAAU,SAAS,CAAE,EAC5D,CAAE,IAAK,SAAU,MAAO,KAAM,MAAO,CAAC,SAAU,SAAU,QAAQ,CAAE,EACpE,CAAE,IAAK,OAAQ,MAAO,KAAM,MAAO,CAAC,MAAM,CAAE,EAC5C,CAAE,IAAK,MAAO,MAAO,KAAM,MAAO,CAAC,KAAK,CAAE,EAC1C,CAAE,IAAK,OAAQ,MAAO,KAAM,MAAO,CAAC,UAAW,UAAW,MAAM,CAAE,EAClE,CAAE,IAAK,OAAQ,MAAO,MAAO,MAAO,CAAC,SAAU,OAAQ,OAAO,CAAE,CAClE,EACM,sBAAwB,gIACxB,aAAe,CACnB,KAAM,CAAE,MAAO,KAAM,MAAO,SAAU,EACtC,OAAQ,CAAE,MAAO,KAAM,MAAO,SAAU,EACxC,KAAM,CAAE,MAAO,KAAM,MAAO,SAAU,CACxC,EACM,eAAiB,CAAC,MAAO,OAAQ,SAAU,WAAY,MAAM,EAE7D,mBAAqB,CAAC,KAAM,GAAI,GAAI,IAAK,IAAK,GAAG,EACjD,iBAAmB,IACnB,kBAAoB,GAAK,IAG/B,SAAS,UAAUA,EAAKC,EAAMC,EAAM,CAClC,IAAIC,EAAI,EAAEH,EAAKC,CAAI,EACnB,OAAIC,GAAM,OAAO,KAAKA,CAAI,EAAE,QAAQE,GAAK,CAAED,EAAIA,EAAE,MAAM,IAAMC,EAAI,GAAG,EAAE,KAAK,OAAOF,EAAKE,CAAC,CAAC,CAAC,CAAG,CAAC,EACvFD,CACT,CAEA,SAAS,WAAWH,EAAKK,EAAGJ,EAAMC,EAAM,CACtC,OAAO,UAAU,OAAOG,CAAC,IAAM,EAAIL,EAAM,OAASA,EAAKC,EAAM,OAAO,OAAO,CAAE,EAAAI,CAAE,EAAGH,GAAQ,CAAC,CAAC,CAAC,CAC/F,CAEA,SAAS,aAAaI,EAAKL,EAAM,CAC/B,MAAMM,GAAKD,GAAO,CAAC,GAAG,IAAI,MAAM,EAChC,OAAIC,EAAE,QAAU,EAAUA,EAAE,KAAK,EAAE,EAC5BA,EAAE,MAAM,EAAG,EAAE,EAAE,KAAK,IAAI,EAAI,IAAM,EAAE,qBAAsBN,CAAI,EAAI,IAAMM,EAAEA,EAAE,OAAS,CAAC,CAC/F,CAEA,SAAS,kBAAkBC,EAAGP,EAAMQ,EAAWC,EAAW,CACxD,MAAMC,EAAUC,GAAM,WAAW,YAAYA,GAAK,EAAGX,CAAI,CAAC,EACpDC,EAAO,CACX,EAAGM,EAAE,WAAaC,EAAYA,EAAUD,EAAE,SAAS,EAAI,GAAI,MAAOA,EAAE,OAASE,GAAa,GAC1F,KAAM,aAAaF,EAAE,aAAcP,CAAI,EAAG,KAAM,aAAaO,EAAE,WAAYP,CAAI,EAC/E,IAAKU,EAAOH,EAAE,WAAW,EAAG,MAAOG,EAAOH,EAAE,QAAQ,CACtD,EACA,IAAIK,EAAM,UAAU,mBAAqBL,EAAE,KAAMP,EAAMC,CAAI,EAC3D,OAAIM,EAAE,OAAS,oBAAsBA,EAAE,YAAc,CAAC,GAAG,SAAQK,GAAO,IAAM,UAAU,yCAA0CZ,EAAMC,CAAI,GACrIW,CACT,CACA,SAAS,kBAAmB,CAC1B,GAAI,CAAE,OAAO,KAAK,MAAM,aAAa,QAAQ,gBAAgB,GAAK,MAAM,CAAG,MAAY,CAAE,OAAO,IAAM,CACxG,CACA,SAAS,iBAAiBC,EAAG,CAC3B,GAAI,CACEA,EAAG,aAAa,QAAQ,iBAAkB,KAAK,UAAUA,CAAC,CAAC,EAC1D,aAAa,WAAW,gBAAgB,CAC/C,MAAY,CAAC,CACf,CACA,SAAS,YAAYC,EAAQ,CAC3B,OAAOA,EAAS,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,EAAG,CAAC,EAAI,KAAK,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAC3F,CAEA,SAAS,gBAAgBC,EAAG,CAC1B,OAAOA,EAAKA,EAAE,IAAM,KAAOA,EAAE,GAAKA,EAAE,GAAM,IAC5C,CACA,SAAS,aAAaC,EAAI,CACxB,MAAMC,EAAI,OAAO,MACjB,MAAI,CAAC,MAAM,QAAQA,CAAC,GAAKD,GAAM,KAAa,KACrCC,EAAE,KAAKF,GAAKA,GAAK,gBAAgBA,CAAC,GAAK,MAAQ,OAAO,gBAAgBA,CAAC,CAAC,IAAM,OAAOC,CAAE,CAAC,GAAK,IACtG,CACA,SAAS,aAAaD,EAAGf,EAAM,CAC7B,GAAI,CAACe,EAAG,OAAO,KACf,GAAI,CAAE,OAAO,OAAO,SAAW,OAAO,SAASA,EAAGf,CAAI,EAAIe,CAAG,MAAY,CAAE,OAAOA,CAAG,CACvF,CACA,SAAS,kBAAkBA,EAAGf,EAAM,CAClC,MAAMkB,EAAI,aAAaH,EAAGf,CAAI,EAC9B,OAAOkB,EAAI,OAAOA,EAAE,OAASA,EAAE,OAAS,EAAE,EAAI,EAChD,CACA,SAAS,YAAYL,EAAGb,EAAM,CAC5B,OAAO,OAAO,YAAc,OAAO,YAAY,YAAYa,EAAGb,CAAI,EAAI,WAAWa,CAAC,CACpF,CAEA,SAAS,gBAAgBA,EAAGb,EAAM,CAChC,GAAIa,GAAK,KAAM,MAAO,GACtB,GAAI,OAAOA,GAAM,SAAU,OAAO,OAAOA,CAAC,EAC1C,MAAMX,EAAI,OAAOW,CAAC,EAClB,OAAOb,IAAS,KAAOE,EAAIA,EAAE,QAAQ,IAAK,GAAG,CAC/C,CAEA,SAAS,WAAWiB,EAAK,CACvB,OAAO,OAAOA,GAAO,EAAE,EAAE,QAAQ,KAAM,GAAQ,CACjD,CACA,SAAS,kBAAkBD,EAAGlB,EAAM,CAClC,OAAO,cAAckB,EAAE,KAAMlB,CAAI,CACnC,CACA,SAAS,gBAAgBoB,EAAKpB,EAAM,CAClC,GAAI,CAACoB,EAAK,MAAO,GACjB,MAAMC,EAAI,IAAI,KAAK,OAAOD,CAAG,EAAE,QAAU,GAAKA,EAAM,YAAcA,CAAG,EACrE,OAAI,MAAMC,EAAE,QAAQ,CAAC,EAAU,GACxBA,EAAE,mBAAmBrB,IAAS,KAAO,QAAU,QAAS,CAAE,QAAS,QAAS,IAAK,UAAW,MAAO,OAAQ,CAAC,CACrH,CACA,SAAS,gBAAgBoB,EAAKpB,EAAM,CAClC,GAAI,CAACoB,EAAK,MAAO,GACjB,MAAMC,EAAI,IAAI,KAAKD,CAAG,EACtB,OAAI,MAAMC,EAAE,QAAQ,CAAC,EAAU,GACxBA,EAAE,mBAAmBrB,IAAS,KAAO,QAAU,QAAS,CAAE,KAAM,UAAW,OAAQ,SAAU,CAAC,CACvG,CAGA,SAAS,iBAAiBoB,EAAK,CAC7B,MAAMlB,EAAI,OAAOkB,GAAO,EAAE,EAC1B,OAAOlB,EAAE,QAAU,IAAM,sCAAsC,KAAKA,CAAC,CACvE,CACA,SAAS,gBAAgBkB,EAAKpB,EAAM,CAClC,GAAI,CAACoB,EAAK,MAAO,GACjB,GAAI,iBAAiBA,CAAG,EAAG,OAAO,gBAAgB,OAAOA,CAAG,EAAE,MAAM,EAAG,EAAE,EAAGpB,CAAI,EAChF,MAAMqB,EAAI,gBAAgBD,EAAKpB,CAAI,EACnC,OAAOqB,EAAIA,EAAI,KAAO,gBAAgBD,EAAKpB,CAAI,EAAI,EACrD,CAEA,SAAS,gBAAiB,CACxB,GAAI,OAAO,SAAa,KAAe,SAAS,eAAe,kBAAkB,EAAG,OACpF,MAAME,EAAI,SAAS,cAAc,OAAO,EACxCA,EAAE,GAAK,mBACPA,EAAE,YAAc,kEAChB,SAAS,KAAK,YAAYA,CAAC,CAC7B,CAGA,SAAS,iBAAiBoB,EAAG,CAC3B,GAAI,CAACA,EAAG,MAAO,GACf,MAAMhB,EAAIgB,EAAE,SAAW,CAAC,EAClBC,EAAOjB,EAAE,MAAQA,EAAE,YAAcA,EAAE,SAAWA,EAAE,QAAU,GAChE,OAAIgB,EAAE,MAAQA,EAAE,OAASC,EAAa,OAAOD,EAAE,IAAI,EAC/CC,EAAaA,GAAQjB,EAAE,aAAe,IAAMA,EAAE,aAAe,IAC1D,OAAOA,EAAE,QAAUA,EAAE,eAAiBA,EAAE,gBAAkBgB,EAAE,cAAgB,IAAI,MAAM,GAAG,EAAE,CAAC,GAAK,EAAE,CAC5G,CACA,SAAS,gBAAgBE,EAAKC,EAAKzB,EAAM,CACvC,MAAMD,EAAMyB,EAAI,QAAQ,CAAC,EAAI,IAAMC,EAAI,QAAQ,CAAC,EAAI,KAAOzB,GAAQ,MACnE,GAAI,kBAAkBD,CAAG,EAAG,OAAO,kBAAkBA,CAAG,EACxD,MAAM2B,EAAM,kBAAoB,sCAAwCF,EAAM,QAAUC,EAAM,qBAAuBzB,IAAS,KAAO,KAAO,MACtIkB,EAAI,MAAMQ,CAAG,EAAE,KAAKJ,GAAKA,EAAE,GAAKA,EAAE,KAAK,EAAI,IAAI,EAAE,KAAKK,GAAMA,GAAK,iBAAiBA,CAAC,GAAM,IAAI,EAAE,MAAM,IAAM,IAAI,EACrH,yBAAkB5B,CAAG,EAAImB,EACzBA,EAAE,KAAKL,GAAK,CAAOA,GAAG,OAAO,kBAAkBd,CAAG,CAAG,CAAC,EAC/CmB,CACT,CACA,SAAS,qBAAqBU,EAAG5B,EAAM,CACrC,MAAM0B,EAAM,kBAAoB,oEAAsE,oBAClG,qBAAuB1B,IAAS,KAAO,KAAO,MAAQ,MAAQ,mBAAmB4B,CAAC,EACtF,OAAO,MAAMF,CAAG,EAAE,KAAKJ,GAAKA,EAAE,GAAKA,EAAE,KAAK,EAAI,CAAC,CAAC,EAAE,KAAKO,IAAS,MAAM,QAAQA,CAAI,EAAIA,EAAO,CAAC,GAAG,IAAIP,IAAM,CACzG,IAAK,WAAWA,EAAE,GAAG,EAAG,IAAK,WAAWA,EAAE,GAAG,EAAG,MAAO,iBAAiBA,CAAC,GAAK,OAAOA,EAAE,cAAgB,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC,EACvH,OAAQ,OAAOA,EAAE,cAAgB,EAAE,EAAE,MAAM,GAAG,EAAE,MAAM,EAAG,CAAC,EAAE,KAAK,GAAG,EAAE,KAAK,CAC7E,EAAE,EAAE,OAAOJ,GAAK,SAASA,EAAE,GAAG,GAAK,SAASA,EAAE,GAAG,CAAC,CAAC,EAEhD,KAAKW,GAAQA,EAAK,OAAO,CAACX,EAAGX,IAAM,CAACsB,EAAK,MAAM,EAAGtB,CAAC,EAAE,KAAKuB,GAAKA,EAAE,QAAUZ,EAAE,OACzE,KAAK,IAAIY,EAAE,IAAMZ,EAAE,GAAG,EAAI,OAAU,KAAK,IAAIY,EAAE,IAAMZ,EAAE,GAAG,EAAI,IAAK,CAAC,CAAC,CAC9E,CAEA,SAAS,mBAAmBM,EAAKC,EAAKzB,EAAM,CAC1C,KAAM,CAAC+B,EAAMC,CAAO,EAAI,MAAM,SAAS,IAAI,EAC3C,aAAM,UAAU,IAAM,CAEpB,GADAA,EAAQ,IAAI,EACR,CAAC,SAASR,CAAG,GAAK,CAAC,SAASC,CAAG,EAAG,OACtC,IAAIQ,EAAQ,GACZ,MAAMC,EAAK,WAAW,IAAM,CAAE,gBAAgBV,EAAKC,EAAKzB,CAAI,EAAE,KAAKa,GAAK,CAAMoB,GAAOD,EAAQnB,CAAC,CAAG,CAAC,CAAG,EAAG,GAAG,EAC3G,MAAO,IAAM,CAAEoB,EAAQ,GAAO,aAAaC,CAAE,CAAG,CAClD,EAAG,CAACV,EAAKC,EAAKzB,CAAI,CAAC,EACZ+B,CACT,CAGA,SAAS,sBAAsBI,EAAInC,EAAM,CACvC,MAAMoC,EAAI,OAAO,YACjB,GAAI,CAAE,OAAOA,GAAK,OAAOA,EAAE,eAAkB,WAAaA,EAAE,cAAcD,EAAInC,CAAI,EAAI,CAAC,CAAG,MAAY,CAAE,MAAO,CAAC,CAAG,CACrH,CAIA,eAAe,kBAAkBqC,EAAS,CACxC,MAAMC,EAAI,OAAO,WACjB,GAAI,CAACA,EAAG,OAAO,KACf,GAAI,CAMF,GALIA,EAAE,MAAM,MAAMA,EAAE,KAAK,GACrBA,EAAE,OAAS,YAAcD,GAAW,QAEtCA,GADU,MAAM,cAAcC,EAAE,OAAS,WAAaD,EAAU,IAAI,GACxD,OAEVA,GAAW,KAAM,OAAO,KAC5B,MAAMR,EAAQ,MAAMS,EAAE,WAAWD,CAAO,GAAM,CAAC,EACzCE,EAAQ,IAAI,KAAK,EAAE,YAAY,EAAE,MAAM,EAAG,EAAE,EAC5CC,EAAOX,EAAK,OAAOY,GAAKA,GAAKA,EAAE,SAAW,UAAY,CAACA,EAAE,SAAWA,EAAE,UAAYJ,EAAQ,EAE1FK,EAAQD,GAAMA,EAAE,SAAW,UAAYA,EAAE,SAAW,SAAW,EAAI,EACnEE,EAAWH,EAAK,OAAOC,GAAKC,EAAKD,CAAC,IAAM,GAAK,CAACA,EAAE,MAAQ,OAAOA,EAAE,IAAI,EAAE,MAAM,EAAG,EAAE,GAAKF,CAAK,EAClG,OAAAI,EAAS,KAAK,CAACrC,EAAGsC,IAAOF,EAAKpC,CAAC,EAAIoC,EAAKE,CAAC,GAAM,OAAOtC,EAAE,MAAQ,MAAM,EAAE,cAAc,OAAOsC,EAAE,MAAQ,MAAM,CAAC,CAAC,EACxGD,EAAS,CAAC,GAAK,IACxB,OAASF,EAAG,CACV,eAAQ,KAAK,uBAAwBA,CAAC,EAC/B,IACT,CACF,CACA,OAAO,kBAAoB,kBAC3B,OAAO,gBAAkB,gBACzB,SAAS,kBAAkBI,EAAM,CAC/B,GAAI,CAACA,GAAQ,CAACA,EAAK,MAAO,OAAO,KACjC,MAAMC,EAAM,CAAC,CAACD,EAAK,MAAM,IAAKA,EAAK,MAAM,GAAG,CAAC,GAC5CA,EAAK,UAAY,CAAC,GAAG,QAAQ3C,GAAK4C,EAAI,KAAK,CAAC5C,EAAE,IAAKA,EAAE,GAAG,CAAC,CAAC,EAC3D,MAAM6C,EAAMF,EAAK,QAAUA,EAAK,MAChC,OAAAC,EAAI,KAAK,CAACC,EAAI,IAAKA,EAAI,GAAG,CAAC,EACpBD,EAAI,QAAU,EAAIA,EAAM,IACjC,CACA,SAAS,oBAAoBD,EAAM7C,EAAMgD,EAAM,CAC7CA,EAAOA,GAAQ,CAAC,EAChB,MAAMC,EAAM,CAAC,EACb,OAAKJ,IACDA,EAAK,OAAOI,EAAI,KAAK,CAAE,GAAI,UAAW,KAAM,QAAS,IAAKJ,EAAK,MAAM,IAAK,IAAKA,EAAK,MAAM,IAAK,MAAOA,EAAK,OAASA,EAAK,MAAM,MAAQ,UAAU,4BAA6B7C,CAAI,CAAE,CAAC,EACrL6C,EAAK,QAAQI,EAAI,KAAK,CAAE,GAAI,WAAY,KAAM,SAAU,IAAKJ,EAAK,OAAO,IAAK,IAAKA,EAAK,OAAO,IAAK,MAAOA,EAAK,OAAO,KAAM,CAAC,GACjIA,EAAK,UAAY,CAAC,GAAG,QAAQ,CAAC3C,EAAGK,IAAM,CACtC0C,EAAI,KAAK,CACP,GAAI/C,EAAE,GAAI,KAAM,UAAW,IAAKA,EAAE,IAAK,IAAKA,EAAE,IAAK,MAAO,OAAOK,EAAI,CAAC,EACtE,OAAQ,aAAaL,EAAE,IAAI,GAAK,aAAa,MAAM,MAAO,MAAOA,EAAE,MACnE,OAAQ8C,EAAK,WAAa9C,EAAE,GAAI,KAAM8C,EAAK,QAAU,CAAC,CAACA,EAAK,QAAQ9C,EAAE,EAAE,EAAI,EAC9E,CAAC,CACH,CAAC,GACM+C,CACT,CACA,SAAS,cAAcC,EAAS,CAC9B,OAAKA,EACDA,EAAQ,OAAS,OAAe,OAC7BA,EAAQ,OAASA,EAAQ,OAAO,KAAO,OAFzB,MAGvB,CACA,SAAS,iBAAiBL,EAAM,CAC9B,GAAI,CAAE,OAAO,OAAO,YAAY,aAAaA,CAAI,CAAG,MAAY,CAAE,MAAO,CAAE,SAAU,EAAG,UAAW,EAAG,SAAU,CAAE,CAAG,CACvH,CAEA,SAAS,iBAAiBM,EAAQ,CAChC,MAAMxC,EAAI,CAAC,EACX,OAACwC,GAAU,CAAC,GAAG,QAAQ,GAAK,CACrB,EAAE,YACH,CAACxC,EAAE,EAAE,SAAS,GAAK,EAAE,QAAU,WAASA,EAAE,EAAE,SAAS,EAAI,EAAE,MACjE,CAAC,EACMA,CACT,CAEA,eAAe,cAAcyC,EAAQ,CACnC,MAAMd,EAAI,OAAO,WACjB,GAAI,CAACA,EAAG,MAAO,CAAE,MAAO,KAAM,KAAM,IAAK,EAEzC,GADA,MAAMA,EAAE,KAAK,EACTA,EAAE,OAAS,WAAY,MAAO,CAAE,MAAOc,GAAU,KAAM,KAAM,UAAW,EAC5E,MAAMC,EAAKf,EAAE,GAAG,EAChB,MAAO,CAAE,MAAOe,GAAMA,EAAG,SAAU,KAAM,OAAQ,CACnD,CAEA,SAAS,qBAAqBC,EAAOC,EAAS,CAC5C,MAAMnB,EAAI,OAAO,YAEXoB,EADSD,EAAQ,KAAKrC,GAAKA,EAAE,MAAQ,IAAI,EACzB,OAAUoC,EAAM,YAAc,SAC9CG,EAAMrB,EAAE,YAAYmB,EAAQ,IAAIrC,IAAM,CAAE,GAAIA,EAAE,GAAI,KAAMA,EAAE,KAAM,KAAMA,EAAE,IAAK,EAAE,EAAGoC,EAAM,UAAW,CAAE,KAAAE,EAAM,OAAQF,EAAM,QAAU,CAAC,EAAG,KAAM,CAAE,CAAC,EAChJI,EAAO,CAAC,EACd,QAASvD,EAAI,EAAGA,GAAKmD,EAAM,UAAWnD,IAAKuD,EAAKvD,CAAC,EAAI,EACrD,OAAAoD,EAAQ,QAAQrC,GAAK,CAAE,MAAMgB,EAAKhB,EAAE,MAAQ,KAAOA,EAAE,KAAOuC,EAAIvC,EAAE,EAAE,EAAOwC,EAAKxB,CAAE,GAAK,MAAMwB,EAAKxB,CAAE,GAAK,CAAC,EACnGwB,CACT,CACA,SAAS,sBAAuB,CAC9B,KAAM,CAAC7C,EAAG8C,CAAI,EAAI,MAAM,SAAS,CAAC,EAClC,aAAM,UAAU,IAAM,CACpB,MAAMC,EAAK,IAAMD,EAAKE,GAAKA,EAAI,CAAC,EAChC,cAAO,iBAAiB,gBAAiBD,CAAE,EACpC,IAAM,OAAO,oBAAoB,gBAAiBA,CAAE,CAC7D,EAAG,CAAC,CAAC,EACE/C,CACT,CACA,SAAS,aAAaiD,EAAM,CAC1B,OAAI,UAAU,WAAa,UAAU,UAAU,UACtC,UAAU,UAAU,UAAUA,CAAI,EAAE,KAAK,IAAM,EAAI,EAAE,MAAM,IAAM,qBAAqBA,CAAI,CAAC,EAE7F,QAAQ,QAAQ,qBAAqBA,CAAI,CAAC,CACnD,CACA,SAAS,qBAAqBA,EAAM,CAClC,GAAI,CACF,MAAMC,EAAK,SAAS,cAAc,UAAU,EAC5CA,EAAG,MAAQD,EACXC,EAAG,aAAa,WAAY,EAAE,EAC9BA,EAAG,MAAM,QAAU,wCACnB,SAAS,KAAK,YAAYA,CAAE,EAC5BA,EAAG,OAAO,EACV,MAAMC,EAAK,SAAS,YAAY,MAAM,EACtC,gBAAS,KAAK,YAAYD,CAAE,EACrBC,CACT,MAAY,CAAE,MAAO,EAAO,CAC9B,CAKA,SAAS,eAAe,CAAE,OAAAC,EAAQ,MAAAC,EAAO,OAAAC,EAAQ,KAAAnE,EAAM,MAAAoE,CAAM,EAAG,CAC9D,OACE,oBAAC,OAAI,MAAO,CACV,OAAQ,aAAc,aAAc,GAAI,SAAU,WAAY,SAAU,SACxE,WAAY,0FACZ,QAAS,iBAAkB,MAAO,UAClC,UAAW,uEACb,GACE,oBAAC,OAAI,cAAY,OAAO,MAAO,CAC7B,SAAU,WAAY,IAAK,IAAK,MAAO,IAAK,MAAO,IAAK,OAAQ,IAAK,aAAc,MACnF,WAAY,mEAAoE,cAAe,MACjG,EAAG,EACH,oBAAC,OAAI,MAAO,CAAE,SAAU,WAAY,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,GAChFD,GACC,oBAAC,UAAO,KAAK,SAAS,UAAU,YAAY,QAASA,EAAQ,aAAY,EAAE,iBAAkBnE,CAAI,EAAG,MAAO,CACzG,MAAO,GAAI,OAAQ,GAAI,aAAc,GAAI,WAAY,EAAG,QAAS,EAAG,OAAQ,UAC5E,WAAY,mBAAoB,OAAQ,mCACxC,QAAS,OAAQ,WAAY,SAAU,eAAgB,QACzD,GACE,oBAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,OAAO,OAAO,YAAY,MAAM,cAAc,QAAQ,eAAe,QAAQ,cAAY,QAAO,oBAAC,QAAK,EAAE,iBAAiB,CAAE,CACzL,EAEF,oBAAC,OAAI,MAAO,CAAE,KAAM,EAAG,SAAU,CAAE,GAChCiE,GACC,oBAAC,OAAI,MAAO,CACV,WAAY,WAAY,SAAU,GAAI,WAAY,IAAK,cAAe,SACtE,cAAe,YAAa,MAAO,wBACrC,GAAIA,CAAO,EAEb,oBAAC,OAAI,MAAO,CACV,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,KAAM,UAAW,EACpF,SAAU,SAAU,aAAc,WAAY,QAAS,cAAe,gBAAiB,EAAG,gBAAiB,WAC3G,aAAc,UAChB,GAAIC,CAAM,CACZ,EACCE,CACH,CACF,CAEJ,CAEA,SAAS,gBAAgB,CAAE,MAAAF,EAAO,KAAAG,EAAM,SAAAC,EAAU,MAAAC,EAAO,MAAAH,CAAM,EAAG,CAChE,OACE,oBAAC,WAAQ,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,GAAI,GAAGG,CAAM,IAC1EL,GAASE,IACT,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,WAAY,IAAK,CAAE,GAC5D,oBAAC,OAAI,MAAO,CAAE,KAAM,EAAG,SAAU,CAAE,GAChCF,GAAS,oBAAC,MAAG,MAAO,CAAE,OAAQ,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,IAAK,MAAO,YAAa,GAAIA,CAAM,EACvIG,GAAQ,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,WAAY,KAAM,MAAO,cAAe,GAAIA,CAAK,CACjJ,EACCD,CACH,EAEDE,CACH,CAEJ,CAEA,SAAS,eAAe,CAAE,QAAAE,EAAS,SAAAC,EAAU,MAAAC,EAAO,KAAAL,CAAK,EAAG,CAC1D,OACE,oBAAC,UAAO,KAAK,SAAS,KAAK,SAAS,eAAc,CAAC,CAACG,EAAS,UAAU,YAAY,QAAS,IAAMC,EAAS,CAACD,CAAO,EAAG,MAAO,CAC3H,QAAS,OAAQ,WAAY,SAAU,IAAK,GAAI,MAAO,OAAQ,UAAW,GAAI,QAAS,YACvF,aAAc,GAAI,OAAQ,4BAA6B,WAAY,mBAAoB,OAAQ,UAAW,UAAW,MACvH,GACE,oBAAC,QAAK,MAAO,CAAE,KAAM,EAAG,SAAU,CAAE,GAClC,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,MAAO,YAAa,GAAIE,CAAM,EACrHL,GAAQ,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,KAAM,MAAO,cAAe,GAAIA,CAAK,CAClK,EACA,oBAAC,QAAK,cAAY,OAAO,MAAO,CAC9B,MAAO,GAAI,OAAQ,GAAI,aAAc,IAAK,WAAY,EAAG,SAAU,WACnE,WAAYG,EAAU,eAAiB,kBAAmB,WAAY,kBACxE,GACE,oBAAC,QAAK,MAAO,CACX,SAAU,WAAY,IAAK,EAAG,KAAMA,EAAU,GAAK,EAAG,MAAO,GAAI,OAAQ,GAAI,aAAc,MAC3F,WAAY,UAAW,UAAW,4BAA6B,WAAY,YAC7E,EAAG,CACL,CACF,CAEJ,CAGA,SAAS,eAAe,CAAE,OAAAG,EAAQ,QAAAC,EAAS,KAAAC,EAAM,MAAAX,EAAO,KAAAY,CAAK,EAAG,CAC9D,OACE,oBAAC,UAAO,KAAK,SAAS,KAAK,QAAQ,eAAc,CAAC,CAACH,EAAQ,UAAU,YAAY,QAASC,EAAS,MAAO,CACxG,QAAS,OAAQ,WAAY,aAAc,IAAK,GAAI,MAAO,OAAQ,QAAS,YAAa,UAAW,OACpG,aAAc,GAAI,OAAQ,UAAW,UAAW,GAChD,WAAYD,EAAS,oBAAsB,iBAC3C,OAAQA,EAAS,2BAA6B,6BAChD,GACE,oBAAC,QAAK,cAAY,OAAO,MAAO,CAC9B,MAAO,GAAI,OAAQ,GAAI,aAAc,MAAO,WAAY,EAAG,UAAW,EACtE,OAAQA,EAAS,yBAA2B,4BAA6B,WAAY,iBAAkB,UAAW,YACpH,EAAG,EACH,oBAAC,QAAK,MAAO,CAAE,KAAM,EAAG,SAAU,CAAE,GAClC,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,MAAO,YAAa,GACzGE,GAAQ,oBAAC,QAAK,cAAY,OAAO,MAAO,CAAE,YAAa,CAAE,GAAIA,CAAK,EAASX,CAC9E,EACCY,GAAQ,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,WAAY,KAAM,MAAO,cAAe,GAAIA,CAAK,CACpK,CACF,CAEJ,CAEA,SAAS,aAAa,CAAE,KAAAC,EAAO,OAAQ,KAAAF,EAAM,MAAAX,EAAO,SAAAI,EAAU,MAAAC,EAAO,OAAAS,CAAO,EAAG,CAC7E,MAAMC,EAAM,CACV,KAAM,CAAE,GAAI,mBAAoB,GAAI,gBAAiB,EAAG,eAAgB,GAAI,YAAa,EACzF,KAAM,CAAE,GAAI,mBAAoB,GAAI,wBAAyB,EAAG,eAAgB,GAAI,YAAa,EACjG,MAAO,CAAE,GAAI,oBAAqB,GAAI,uBAAwB,EAAG,eAAgB,GAAI,cAAe,EACpG,GAAI,CAAE,GAAI,uBAAwB,GAAI,uBAAwB,EAAG,eAAgB,GAAI,YAAa,CACpG,EAAEF,CAAI,GAAK,CAAC,EACZ,OACE,oBAAC,OAAI,KAAMA,IAAS,QAAU,QAAU,OAAW,MAAO,CACxD,QAAS,OAAQ,IAAK,GAAI,WAAY,aAAc,QAAS,YAAa,aAAc,GACxF,WAAYE,EAAI,GAAI,OAAQ,aAAeA,EAAI,GAAI,GAAGV,CACxD,GACGM,GAAQ,oBAAC,QAAK,cAAY,OAAO,MAAO,CAAE,SAAU,GAAI,WAAY,MAAO,GAAIA,CAAK,EACrF,oBAAC,OAAI,MAAO,CAAE,KAAM,EAAG,SAAU,CAAE,GAChCX,GAAS,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,WAAY,KAAM,MAAOe,EAAI,EAAG,GAAIf,CAAM,EAC1HI,GAAY,oBAAC,OAAI,MAAO,CAAE,UAAWJ,EAAQ,EAAI,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,WAAY,IAAK,MAAOe,EAAI,CAAE,GAAIX,CAAS,EACxJU,GAAU,oBAAC,OAAI,MAAO,CAAE,UAAW,CAAE,GAAIA,CAAO,CACnD,CACF,CAEJ,CAEA,SAAS,gBAAgB,CAAE,QAAAJ,EAAS,MAAAF,EAAO,SAAAJ,EAAU,SAAAY,EAAU,KAAAH,CAAK,EAAG,CACrE,OACE,oBAAC,UAAO,KAAK,SAAS,UAAU,YAAY,QAASG,EAAW,OAAYN,EAAS,SAAU,CAAC,CAACM,EAC/F,aAAYR,EAAO,MAAOA,EAAO,MAAO,CACtC,MAAO,GAAI,OAAQ,GAAI,WAAY,EAAG,aAAc,GAAI,QAAS,EACjE,OAAQ,4BAA6B,WAAY,mBACjD,MAAOK,IAAS,SAAW,eAAiB,eAC5C,QAAS,OAAQ,WAAY,SAAU,eAAgB,SACvD,OAAQG,EAAW,cAAgB,UAAW,QAASA,EAAW,IAAO,CAC3E,GAAIZ,CAAS,CAEnB,CACA,MAAM,aAAe,CACnB,GAAI,oBAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,OAAO,eAAe,YAAY,MAAM,cAAc,QAAQ,eAAe,QAAQ,cAAY,QAAO,oBAAC,QAAK,EAAE,gBAAgB,CAAE,EAClM,KAAM,oBAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,OAAO,eAAe,YAAY,MAAM,cAAc,QAAQ,eAAe,QAAQ,cAAY,QAAO,oBAAC,QAAK,EAAE,eAAe,CAAE,EACnM,MAAO,oBAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,OAAO,eAAe,YAAY,MAAM,cAAc,QAAQ,eAAe,QAAQ,cAAY,QAAO,oBAAC,QAAK,EAAE,4EAA4E,CAAE,EACjQ,KAAM,oBAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,OAAO,eAAe,YAAY,MAAM,cAAc,QAAQ,eAAe,QAAQ,cAAY,QAAO,oBAAC,QAAK,EAAE,yCAAyC,CAAE,CAC/N,EAGA,SAAS,iBAAiB,CAAE,MAAAa,EAAO,SAAAV,EAAU,YAAAW,EAAa,QAAAC,EAAS,UAAAC,EAAW,GAAAtE,EAAI,KAAAhB,CAAK,EAAG,CACxF,KAAM,CAACY,EAAK2E,CAAM,EAAI,MAAM,SAAS,gBAAgBJ,EAAOnF,CAAI,CAAC,EACjE,aAAM,UAAU,IAAM,CACpB,MAAMwF,EAAM,YAAY5E,EAAKZ,CAAI,EAC3ByF,EAAKN,GAAS,KAAO,IAAM,YAAYA,EAAOnF,CAAI,GACpDmF,GAAS,KAAQvE,IAAQ,IAAM,CAAC,MAAM4E,CAAG,EAAKA,IAAQC,IAAIF,EAAO,gBAAgBJ,EAAOnF,CAAI,CAAC,CACnG,EAAG,CAACmF,EAAOnF,CAAI,CAAC,EAEd,oBAAC,YAAW,GAAIgB,EAAI,KAAI,GAAC,UAAU,UAAU,MAAOJ,EAAK,YAAawE,EAAa,QAASC,EAAS,aAAYC,EAC/G,SAAU7C,GAAK,CACb,MAAM5B,EAAI4B,EAAE,OAAO,MACnB8C,EAAO1E,CAAC,EACR,MAAMT,EAAI,YAAYS,EAAGb,CAAI,EAC7ByE,EAAS,MAAMrE,CAAC,EAAKS,EAAE,KAAK,IAAM,GAAK,KAAOA,EAAKT,CAAC,CACtD,EAAG,CAET,CAEA,MAAM,qBAAuB,CAC3B,UAAW,GAAI,QAAS,WAAY,aAAc,GAAI,WAAY,mBAAoB,MAAO,aAC7F,OAAQ,8BAA+B,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,SAAU,MAC1G,EAGA,SAAS,kBAAkB,CAAE,MAAA+E,EAAO,SAAAV,EAAU,KAAAzE,CAAK,EAAG,CACpD,MAAMwF,EAAM,CAACL,EAAQ,EAAI,CAACA,EAAQ,KAClC,OACE,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,GAC9D,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,CAAE,GACrD,mBAAmB,IAAItE,GACtB,oBAAC,WAAU,IAAK,OAAOA,CAAC,EAAG,OAAQ2E,IAAQ3E,EAAG,QAAS,IAAM4D,EAAS5D,CAAC,GACpEA,GAAK,KAAO,EAAE,wBAAyBb,CAAI,EAAI,WAAW,YAAYa,EAAGb,CAAI,CAAC,CACjF,CACD,CACH,EACA,oBAAC,cAAa,MAAOwF,GAAO,EAAG,IAAK,EAAG,IAAK,iBAAkB,KAAM,GAAI,KAAMxF,EAC5E,UAAW,EAAE,8BAA+BA,CAAI,EAChD,OAAS6D,GAAOA,EAAI,EAAI,WAAW,YAAYA,EAAG7D,CAAI,CAAC,EAAI,EAAE,wBAAyBA,CAAI,EAC1F,SAAW6D,GAAMY,EAASZ,EAAI,EAAIA,EAAI,IAAI,EAAG,CACjD,CAEJ,CAGA,SAAS,mBAAmBD,EAAI,CAC9B,MAAM8B,EAAM,MAAM,OAAO9B,CAAE,EAC3B8B,EAAI,QAAU9B,EACd,MAAM,UAAU,IAAM,CACpB,MAAM+B,EAAM,IAAM,CAAE,GAAI,SAAS,kBAAoB,SAAY,GAAI,CAAED,EAAI,QAAQ,CAAG,MAAY,CAAC,CAAI,EACvG,cAAO,iBAAiB,QAASC,CAAG,EACpC,SAAS,iBAAiB,mBAAoBA,CAAG,EAC1C,IAAM,CAAE,OAAO,oBAAoB,QAASA,CAAG,EAAG,SAAS,oBAAoB,mBAAoBA,CAAG,CAAG,CAClH,EAAG,CAAC,CAAC,CACP,CAKA,SAAS,iBAAiB,CAAE,KAAA3F,EAAM,MAAA4F,EAAO,MAAAC,EAAO,KAAArC,EAAM,KAAAsC,EAAM,OAAA1C,EAAQ,IAAA2C,EAAM,OAAQ,MAAAC,EAAO,WAAAC,EAAY,oBAAAC,EAAqB,eAAAC,EACxH,MAAAC,EAAO,WAAAC,EAAY,aAAAC,EAAc,YAAAC,EAAa,OAAAC,EAAQ,UAAAC,CAAU,EAAG,CACnE,KAAM,CAACC,EAAOC,CAAQ,EAAI,MAAM,SAAS,IAAI,EACvC,CAACC,EAAQC,CAAS,EAAI,MAAM,SAAS,IAAI,EACzC,CAACC,EAAYC,CAAa,EAAI,MAAM,SAAS,IAAI,EACjD,CAACC,EAASC,CAAU,EAAI,MAAM,SAAS,IAAI,EAC3C,CAACC,EAAQC,CAAS,EAAI,MAAM,SAAS,CAAC,CAAC,EACvC,CAACC,EAASC,CAAU,EAAI,MAAM,SAAS,IAAI,EAC3C,CAACC,EAAWC,CAAY,EAAI,MAAM,SAAS,EAAK,EAChD,CAACC,EAAWC,CAAY,EAAI,MAAM,SAAS,CAAC,EAE5CC,EAAW,MAAM,YAAY,IAAM,CACvC,MAAMpF,EAAI,OAAO,WACb,OAAOA,EAAE,iBAAoB,YACjC,QAAQ,QAAQ,EAAE,KAAK,IAAMA,EAAE,gBAAgBuD,CAAK,CAAC,EAAE,KAAKhE,GAAQ,CAClE,MAAMlB,EAAI,CAAC,GACVkB,GAAQ,CAAC,GAAG,QAAQ8F,GAAM,CAAMA,GAAMA,EAAG,IAAM,OAAMhH,EAAEgH,EAAG,EAAE,EAAIA,EAAI,CAAC,EACtER,EAAUxG,CAAC,CACb,CAAC,EAAE,MAAM8B,GAAK,QAAQ,KAAK,6BAA8BA,CAAC,CAAC,CAC7D,EAAG,CAACoD,CAAK,CAAC,EAEV,mBAAmB6B,CAAQ,EAC3B,MAAME,EAAO,MAAM,YAAY,SAAY,CACzCF,EAAS,EACT,GAAI,CACF,KAAM,CAACG,EAAIC,CAAE,EAAI,MAAM,QAAQ,IAAI,CAAC,OAAO,WAAW,UAAUjC,CAAK,EAAG,OAAO,WAAW,WAAWA,CAAK,CAAC,CAAC,EAC5Gc,EAASkB,GAAM,CAAC,CAAC,EAAGhB,EAAUiB,GAAM,CAAC,CAAC,CACxC,OAASrF,EAAG,CACV,QAAQ,KAAK,kBAAmBA,CAAC,EACjCkE,EAAS,CAAC,CAAC,EAAGE,EAAU,CAAC,CAAC,EAC1BJ,EAAU,EAAE,2BAA4BzG,CAAI,CAAC,CAC/C,CACF,EAAG,CAAC6F,CAAK,CAAC,EACV,MAAM,UAAU,IAAM,CAAE+B,EAAK,CAAG,EAAG,CAACA,CAAI,CAAC,EAEzC,MAAMG,EAAM,MAAOlF,GAAS,CAC1BoE,EAAW,IAAI,EACf,GAAI,CACF,MAAM,OAAO,WAAW,cAAcpE,EAAK,GAAI,CAAE,MAAO,UAAU,2BAA4B7C,EAAM,CAAE,MAAO6C,EAAK,OAAS,EAAG,CAAC,CAAE,CAAC,EAClI4D,EAAU,EAAE,4BAA6BzG,CAAI,CAAC,EAC9C4H,EAAK,CACP,MAAY,CAAEnB,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,CAAG,CAC/D,EACMgI,GAAM,SAAY,CACtB,MAAMnF,EAAOiE,EACbC,EAAc,IAAI,EAClB,GAAI,CAAE,MAAM,OAAO,WAAW,WAAWlE,EAAK,EAAE,EAAG4D,EAAU,EAAE,yBAA0BzG,CAAI,CAAC,EAAG4H,EAAK,CAAG,MAC/F,CAAEnB,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,CAAG,CAC7D,EAEMiI,EAAUvB,GAAS,MAAQE,GAAU,KACrCsB,GAAQ,CAACD,GAAW,CAACvB,EAAM,QAAU,CAACE,EAAO,OAC7CuB,IAAcvB,GAAU,CAAC,GAAG,OAAOnE,GAAKA,EAAE,SAAW,OAAO,EAC5D2F,IAAcxB,GAAU,CAAC,GAAG,OAAOnE,GAAKA,EAAE,SAAW,OAAO,EAG5D,CAAC4F,GAAWC,CAAY,EAAI,MAAM,SAAS,IAAI,EACrD,MAAM,UAAU,IAAM,CACpB,GAAI,CAAC5B,GAAS,CAACE,EAAQ,OACvB,IAAI3E,EAAQ,GACZ,MAAMG,EAAI,OAAO,YAAaE,EAAI,OAAO,WACnCiG,EAAS,CAAC,EAChB3B,EAAO,OAAOnE,GAAKA,EAAE,SAAW,SAAWA,EAAE,MAAM,EAAE,QAAQA,GAAK,CAChE,MAAM+C,GAAM+C,EAAO9F,EAAE,MAAM,GACvB,CAAC+C,IAAO,OAAO/C,EAAE,WAAa,EAAE,EAAI,OAAO+C,GAAI,WAAa,EAAE,KAAG+C,EAAO9F,EAAE,MAAM,EAAIA,EAC1F,CAAC,EACD,MAAM+F,GAAQ9B,EAAM,OAAO+B,GAAMF,EAAOE,EAAG,EAAE,GAAK,EAAE,OAAO,kBAAoB,OAAO,iBAAiBA,EAAG,EAAE,EAAE,EAC9G,OAAC,SAAY,CACX,UAAWA,KAAMD,GAAO,CACtB,IAAIE,GAAM,CAAC,EACX,GAAI,CAAEA,GAAO,MAAMpG,EAAE,YAAYiG,EAAOE,EAAG,EAAE,EAAE,EAAE,GAAM,CAAC,CAAG,MAAY,CAAEC,GAAM,CAAC,CAAG,CAGnF,GAFW,OAAOtG,EAAE,oBAAuB,WAAaA,EAAE,mBAAmBqG,EAAIF,EAAOE,EAAG,EAAE,EAAGC,EAAG,EAC/F,EAAED,EAAG,WAAaA,EAAG,UAAU,aAAeC,GAAI,OAAS,EACvD,CAAMzG,GAAOqG,EAAaG,CAAE,EAAG,MAAQ,CACjD,CACIxG,GAAOqG,EAAa,IAAI,CAC9B,GAAG,EACI,IAAM,CAAErG,EAAQ,EAAO,CAChC,EAAG,CAACyE,EAAOE,EAAQY,CAAS,CAAC,EAC7B,MAAMmB,EAAS,OAAO,OAAO,kBAAqB,WAE5CC,EAAS,qBAAqB,EAC9BC,GAAY,MAAM,QAAQ,IAAM,CACpC,GAAI,CAACF,GAAU,OAAO,sBAAyB,WAAY,MAAO,CAAC,EACnE,MAAMG,EAAM,qBAAqB9I,CAAI,EAC/B+I,EAAO,CAAC,EAEd,OAAC,OAAQ,SAAU,KAAK,EAAE,QAAQ5I,GAAK,CACrC,MAAMwH,EAAKmB,EAAI,KAAKjF,KAAMA,GAAE,OAAS,CAAC,GAAG,QAAQ1D,CAAC,GAAK,GAAK4I,EAAK,QAAQlF,EAAC,EAAI,CAAC,EAC3E8D,GAAIoB,EAAK,KAAKpB,CAAE,CACtB,CAAC,EACMoB,CACT,EAAG,CAACH,EAAQ5I,EAAM2I,CAAM,CAAC,EACnBK,EAAOL,GAAU,CAACrB,EACtB,oBAAC,OAAI,MAAO,CAAE,QAAS,aAAc,GACnC,oBAAC,gBAAe,UAAW,EAAE,iBAAkBtH,CAAI,EAAG,MAAO+F,EAAK,SAAUlF,GAAKmF,GAASA,EAAMnF,CAAC,EAC/F,QAAS,CAAC,CAAE,MAAO,OAAQ,MAAO,EAAE,qBAAsBb,CAAI,CAAE,EAAG,CAAE,MAAO,WAAY,MAAO,EAAE,yBAA0BA,CAAI,CAAE,CAAC,EAAG,CACzI,EACE,KACEiJ,EAAW,OAAO,OAAO,mBAAsB,WACnD,oBAAC,mBAAkB,KAAM,CAAC,CAAC7B,EAAS,KAAMA,EAAS,KAAMpH,EAAM,MAAO4F,EAAO,KAAME,EAAM,QAASD,EAChG,QAAS,IAAMwB,EAAW,IAAI,EAAG,UAAWZ,EAC5C,YAAa,IAAMmB,EAAK,EAAG,cAAe,IAAMA,EAAK,EACrD,gBAAkBD,GAAO,CAAEN,EAAW,IAAI,EAAOlB,GAAgBA,EAAewB,CAAE,CAAG,EAAG,EACxF,KAEJ,GAAIgB,GAAU5C,IAAQ,WACpB,OACE,oBAAC,WACE,CAACuB,GAAa,oBAAC,gBAAe,OAAQ,EAAE,4BAA6BtH,CAAI,EAAG,MAAO,EAAE,2BAA4BA,CAAI,EAAG,OAAQwG,EAAQ,KAAMxG,EAAM,EACpJgJ,EACD,oBAAC,OAAI,MAAO,CAAE,QAAS1B,EAAY,EAAI,aAAc,GACnD,oBAAC,kBAAiB,MAAO1B,EAAO,KAAM5F,EAAM,OAAQoD,EAAQ,KAAM0C,EAAM,QAASD,EAAO,UAAWY,EACjG,YAAaR,EAAY,iBAAkBC,EAAqB,eAAgBqB,EAChF,WAAavG,GAAOqF,EAAWrF,CAAE,EAAG,cAAgBA,GAAOsF,EAAatF,CAAE,EAAG,CACjF,CACF,EAIJ,MAAMkI,GAAcC,GAAO,CACzB,MAAMC,EAAI,CAAE,MAAO,uBAAwB,OAAQ,eAAgB,OAAQ,iBAAkB,MAAO,IAAK,EAAED,EAAG,MAAM,EACpH,OAAO,oBAAC,WAAU,OAAQ,CAAC,CAACC,EAAG,MAAOA,GAAK,QAAY,EAAE,oBAAsBD,EAAG,OAAQnJ,CAAI,CAAE,CAClG,EAEMqJ,GAAaF,GACjB,oBAAC,WAAU,IAAKA,EAAG,GAAI,MAAOvD,EAAO,QAAS,IAAMW,EAAY4C,EAAG,EAAE,EAAG,OAAQA,EAAG,SAAW,UAAYA,EAAG,SAAW,SACtH,UAAWA,EAAG,MAAO,QAAS,IAC9B,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,SAAU,MAAO,GAC3ED,GAAWC,CAAE,EACbA,EAAG,MAAQ,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,SAAU,KAAM,MAAO,cAAe,GAAI,gBAAgBA,EAAG,KAAMnJ,CAAI,CAAE,EAC5H,oBAAC,QAAK,MAAO,CAAE,WAAY,OAAQ,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,cAAe,SAAU,MAAO,YAAa,GAAImJ,EAAG,IAAK,CACrJ,EACA,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,KAAM,aAAc,UAAW,GAAIA,EAAG,OAAS,EAAE,2BAA4BnJ,CAAI,CAAE,EAClL,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,SAAU,GAAI,MAAO,eAAgB,cAAe,QAAS,GAC9G,WAAW,wBAA0BmJ,EAAG,MAAQA,EAAG,KAAK,UAAa,CAAC,GAAG,OAAQnJ,EAAM,CAAE,MAAOmJ,EAAG,UAAW,UAAYA,EAAG,MAAQA,EAAG,KAAK,UAAa,CAAC,GAAG,MAAO,CAAC,CACzK,CACF,EAGF,OACE,oBAAC,WACC,oBAAC,gBAAe,OAAQ,EAAE,4BAA6BnJ,CAAI,EAAG,MAAO,EAAE,2BAA4BA,CAAI,EAAG,OAAQwG,EAAQ,KAAMxG,EAAM,EACrIgJ,EACD,oBAAC,OAAI,MAAO,CAAE,QAAS,cAAe,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,GACrF,CAACf,GAAW,CAACvB,EAAM,QAAUmC,GAAU,OAAS,GAC/C,oBAAC,iBAAgB,MAAO,EAAE,gCAAiC7I,CAAI,EAAG,KAAM,EAAE,+BAAgCA,CAAI,GAC3G6I,GAAU,IAAIlB,GACb,oBAAC,cAAa,IAAKA,EAAG,GAAI,IAAKA,EAAI,KAAM3H,EAAM,MAAO4F,EAAO,OAAQ,IAAMO,GAAkBA,EAAewB,CAAE,EAAG,CAClH,EACAgB,GACC,oBAAC,aAAY,QAAQ,QAAQ,KAAK,KAAK,QAAS,IAAM3C,GAASA,EAAM,UAAU,GAAI,EAAE,8BAA+BhG,CAAI,CAAE,CAE9H,EAEF,oBAAC,aAAY,KAAK,KAAK,KAAI,GAAC,KAAK,IAAI,QAAS,CAACiI,GAAW,CAACvB,EAAM,QAAUmC,GAAU,OAAS,EAAI,YAAc,UAAW,QAASzC,GAAQ,EAAE,6BAA8BpG,CAAI,CAAE,EAEjL,CAACiI,GAAWI,IAAa,OAAO,OAAO,eAAkB,YACxD,oBAAC,eAAc,KAAMA,GAAW,KAAMrI,EAAM,UAAW,IAAMqH,EAAWgB,EAAS,EAC/E,UAAW,IAAM,CAAM,OAAO,qBAAqB,OAAO,oBAAoBA,GAAU,EAAE,EAAGZ,EAAa5G,GAAKA,EAAI,CAAC,CAAG,EAAG,EAG7HoH,GAAW,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,MAAO,eAAgB,UAAW,QAAS,GAAI,EAAE,mBAAoBjI,CAAI,CAAE,EAE5HkI,IACC,oBAAC,WAAU,MAAOtC,EAAO,QAAS,IAChC,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,EAAG,GAAI,EAAE,wBAAyB5F,CAAI,CAAE,EACzG,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,WAAY,KAAM,MAAO,cAAe,GAAI,EAAE,uBAAwBA,CAAI,CAAE,EACjK,oBAAC,MAAG,MAAO,CAAE,UAAW,OAAQ,OAAQ,WAAY,QAAS,EAAG,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,GAC/G,CAAC,EAAG,EAAG,CAAC,EAAE,IAAII,GACb,oBAAC,MAAG,IAAKA,EAAG,MAAO,CAAE,QAAS,OAAQ,IAAK,GAAI,WAAY,YAAa,GACtE,oBAAC,QAAK,cAAY,OAAO,MAAO,CAC9B,MAAO,GAAI,OAAQ,GAAI,aAAc,MAAO,WAAY,EAAG,WAAY,eAAgB,MAAO,UAC9F,QAAS,OAAQ,WAAY,SAAU,eAAgB,SAAU,WAAY,WAAY,WAAY,IAAK,SAAU,GACpH,UAAW,2BACb,GAAIA,CAAE,EACN,oBAAC,QAAK,MAAO,CAAE,KAAM,EAAG,SAAU,CAAE,GAClC,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,WAAY,WAAY,WAAY,IAAK,SAAU,EAAG,GAAI,EAAE,uBAAyBA,EAAI,SAAUJ,CAAI,CAAE,EAC1I,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,WAAY,IAAK,MAAO,cAAe,GAAI,EAAE,uBAAyBI,EAAI,QAASJ,CAAI,CAAE,CACnM,CACF,CACD,CACH,CACF,EAGD,CAACiI,GAAWE,GAAW,OAAS,GAC/B,oBAAC,iBAAgB,MAAO,EAAE,4BAA6BnI,CAAI,GACxDmI,GAAW,IAAIkB,EAAS,CAC3B,EAGD,CAACpB,GAAWvB,EAAM,OAAS,GAC1B,oBAAC,iBAAgB,MAAO,EAAE,2BAA4B1G,CAAI,GACvD0G,EAAM,IAAI7D,GAAQ,CACjB,MAAMyG,EAAM,iBAAiBzG,CAAI,EAC3B0G,EAAQ1G,EAAK,WAAaA,EAAK,UAAU,WACzC2G,EAAMD,EAAQrC,EAAOqC,CAAK,EAAI,KACpC,OACE,oBAAC,WAAU,IAAK1G,EAAK,GAAI,MAAO+C,EAAO,QAAS,IAC9C,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,aAAc,IAAK,CAAE,GAC9D,oBAAC,OAAI,MAAO,CAAE,KAAM,EAAG,SAAU,CAAE,GACjC,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,KAAM,aAAc,UAAW,GAAI/C,EAAK,OAAS,EAAE,0BAA2B7C,CAAI,CAAE,EACrK,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,SAAU,GAAI,cAAe,SAAU,MAAO,cAAe,GAC9G,WAAW,sBAAuBsJ,EAAI,SAAUtJ,EAAM,CAAE,GAAI,WAAW,aAAasJ,EAAI,UAAWtJ,CAAI,CAAC,EAAG,IAAK,WAAW,YAAYsJ,EAAI,SAAUtJ,CAAI,CAAC,CAAE,CAAC,CAChK,EACC6C,EAAK,OAASA,EAAK,MAAM,OACxB,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAG,MACrFA,EAAK,MAAM,MAAOA,EAAK,QAAUA,EAAK,OAAO,MAAQ,SAAWA,EAAK,OAAO,MAAQ,EAC1F,GAEA0G,GAAS1G,EAAK,SACd,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,SAAU,MAAO,GACzF0G,GAAS,oBAAC,WAAU,OAAM,GAAC,MAAM,0BAA0B,KAAK,KAAK,EAAE,mBAAoBvJ,CAAI,CAAE,EACjGuJ,GAASC,IAAQA,EAAI,MAAQ,GAAK,GACjC,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAI,UAAU,iBAAkBxJ,EAAM,CAAE,EAAGwJ,EAAI,IAAK,CAAC,CAAE,EAEnI3G,EAAK,QAAU,CAAC0G,GACf,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,SAAU,KAAM,MAAO,eAAgB,aAAc,UAAW,GACpG,UAAU,yBAA0BvJ,EAAM,CAAE,MAAO6C,EAAK,OAAO,OAAS,EAAG,CAAC,CAC/E,CAEJ,CAEJ,EACA,oBAAC,iBAAgB,MAAO,EAAE,sBAAuB7C,CAAI,EAAG,QAAS,IAAMiH,EAAWpE,CAAI,GACpF,oBAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,eAAe,cAAY,QAAO,oBAAC,UAAO,GAAG,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,oBAAC,UAAO,GAAG,KAAK,GAAG,KAAK,EAAE,IAAI,EAAE,oBAAC,UAAO,GAAG,KAAK,GAAG,KAAK,EAAE,IAAI,CAAE,CACxL,CACF,EACA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,EAAG,UAAW,EAAG,GACnD,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,QAAS,IAAMwD,EAAWxD,EAAK,EAAE,EAAG,MAAO,CAAE,KAAM,CAAE,GAAI,EAAE,sBAAuB7C,CAAI,CAAE,EAC/H,oBAAC,aAAY,KAAK,KAAK,QAAS,IAAMsG,EAAazD,EAAK,EAAE,EAAG,MAAO,CAAE,KAAM,CAAE,GAAI,EAAE,6BAA8B7C,CAAI,CAAE,CAC1H,CACF,CAEJ,CAAC,CACH,EAGD,CAACiI,GAAWG,GAAW,OAAS,GAC/B,oBAAC,iBAAgB,MAAO,EAAE,0BAA2BpI,CAAI,GACtDoI,GAAW,IAAIiB,EAAS,CAC3B,EAGD,CAACpB,GAAWzE,IAAS,SACpB,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,WAAY,IAAK,MAAO,eAAgB,UAAW,QAAS,GAChI,EAAE,+BAAgCxD,CAAI,CACzC,CAEJ,EAEA,oBAAC,YAAW,KAAM,CAAC,CAACgH,EAAS,QAAS,IAAMC,EAAW,IAAI,EAAG,KAAMjH,EAClE,MAAOgH,EAAWA,EAAQ,OAAS,EAAE,0BAA2BhH,CAAI,EAAK,GAAI,OAAQ,EAAE,wBAAyBA,CAAI,GACnHgH,GACC,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,GAAI,cAAe,CAAE,GAChF,oBAAC,aAAY,QAAQ,QAAQ,KAAI,GAAC,QAAS,IAAM,CAAE,MAAMhG,EAAKgG,EAAQ,GAAIC,EAAW,IAAI,EAAGZ,EAAWrF,CAAE,CAAG,GAAI,EAAE,sBAAuBhB,CAAI,CAAE,EAC/I,oBAAC,aAAY,QAAQ,QAAQ,KAAI,GAAC,QAAS,IAAM+H,EAAIf,CAAO,GAAI,EAAE,2BAA4BhH,CAAI,CAAE,EACnGiJ,GACC,oBAAC,aAAY,QAAQ,QAAQ,KAAI,GAAC,KAAK,KAAK,QAAS,IAAM,CAAE,MAAMR,EAAKzB,EAASC,EAAW,IAAI,EAAGI,EAAWoB,CAAE,CAAG,GAChH,EAAEzB,EAAQ,WAAaA,EAAQ,UAAU,WAAa,wBAA0B,yBAA0BhH,CAAI,CACjH,EAEF,oBAAC,aAAY,QAAQ,YAAY,KAAI,GAAC,QAAS,IAAM,CAAE,MAAMyI,EAAKzB,EAASC,EAAW,IAAI,EAAGF,EAAc0B,CAAE,CAAG,GAAI,EAAE,wBAAyBzI,CAAI,CAAE,CACvJ,CAEJ,EAEA,oBAAC,cAAa,KAAM,CAAC,CAAC8G,EAAY,KAAM9G,EAAM,OAAM,GAClD,MAAO,EAAE,6BAA8BA,CAAI,EAC3C,KAAM,EAAE,4BAA6BA,CAAI,EACzC,aAAc,EAAE,wBAAyBA,CAAI,EAC7C,SAAU,IAAM+G,EAAc,IAAI,EAAG,UAAWiB,GAAK,EACtDiB,CACH,CAEJ,CAMA,SAAS,oBAAoB,CAAE,KAAAjJ,EAAM,OAAAyJ,EAAQ,GAAAzI,CAAG,EAAG,CACjD,KAAM,CAACY,EAAG8H,CAAI,EAAI,MAAM,SAAS,EAAE,EAC7B,CAACjG,EAAKkG,CAAM,EAAI,MAAM,SAAS,IAAI,EACnC,CAACC,EAAMC,CAAO,EAAI,MAAM,SAAS,EAAK,EAC5C,aAAM,UAAU,IAAM,CACpB,MAAMC,EAAOlI,EAAE,KAAK,EACpB,GAAIkI,EAAK,OAAS,EAAG,CAAEH,EAAO,IAAI,EAAGE,EAAQ,EAAK,EAAG,MAAQ,CAC7D,IAAI5H,EAAQ,GACZ4H,EAAQ,EAAI,EACZ,MAAM3H,EAAK,WAAW,IAAM,CAC1B,qBAAqB4H,EAAM9J,CAAI,EAAE,KAAK6B,GAAQ,CAAMI,IAAS0H,EAAO9H,CAAI,EAAGgI,EAAQ,EAAK,EAAK,CAAC,EAC3F,MAAM,IAAM,CAAM5H,IAAS0H,EAAO,CAAC,CAAC,EAAGE,EAAQ,EAAK,EAAK,CAAC,CAC/D,EAAG,GAAG,EACN,MAAO,IAAM,CAAE5H,EAAQ,GAAO,aAAaC,CAAE,CAAG,CAClD,EAAG,CAACN,EAAG5B,CAAI,CAAC,EAEV,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GAC7D,oBAAC,YAAW,GAAIgB,EAAI,KAAK,SAAS,MAAOY,EAAG,SAAUa,GAAKiH,EAAKjH,EAAE,OAAO,KAAK,EAAG,aAAa,MAC5F,YAAa,EAAE,oCAAqCzC,CAAI,EAAG,aAAY,EAAE,yBAA0BA,CAAI,EAAG,EAC3G4J,GAAQ,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAI,EAAE,4BAA6B5J,CAAI,CAAE,EAC3H,CAAC4J,GAAQnG,GAAOA,EAAI,SAAW,GAAK,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAI,EAAE,yBAA0BzD,CAAI,CAAE,EACpJ,CAAC4J,GAAQnG,GAAOA,EAAI,OAAS,GAC5B,oBAAC,OAAI,KAAK,OAAO,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GACxEA,EAAI,IAAI,CAACnC,EAAGf,IACX,oBAAC,UAAO,IAAKA,EAAG,KAAK,SAAS,KAAK,WAAW,UAAU,YAAY,QAAS,IAAM,CAAEkJ,EAAO,CAAE,IAAKnI,EAAE,IAAK,IAAKA,EAAE,IAAK,MAAOA,EAAE,MAAO,MAAO,EAAK,CAAC,EAAGoI,EAAK,EAAE,EAAGC,EAAO,IAAI,CAAG,EAAG,MAAO,CACtL,QAAS,QAAS,MAAO,OAAQ,UAAW,GAAI,QAAS,WAAY,UAAW,OAAQ,OAAQ,UAChG,aAAc,GAAI,OAAQ,4BAA6B,WAAY,iBAAkB,MAAO,YAC9F,GACE,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,IAAK,aAAc,UAAW,GAAG,MAAIrI,EAAE,KAAM,EAChJA,EAAE,QAAU,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,UAAW,EAAG,WAAY,WAAY,SAAU,GAAI,MAAO,eAAgB,aAAc,UAAW,GAAIA,EAAE,MAAO,CACjK,CACD,CACH,CAEJ,CAEJ,CAEA,SAAS,oBAAoB,CAAE,KAAAtB,EAAM,MAAAmF,EAAO,SAAAV,EAAU,QAAAsF,EAAS,QAAAC,EAAS,UAAAC,EAAW,UAAAC,EAAW,WAAAC,EAAY,OAAAC,EAAQ,SAAAC,EAAU,QAAAC,CAAQ,EAAG,CACrI,MAAMC,EAAWrJ,GAAMiE,GAAS,KAAK,IAAIA,EAAM,IAAMjE,EAAE,GAAG,EAAI,MAAQ,KAAK,IAAIiE,EAAM,IAAMjE,EAAE,GAAG,EAAI,KAEpG,OACE,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,GAC9D,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,CAAE,GACrDgJ,GACC,oBAAC,WAAU,OAAQC,EAAY,QAASC,EAAQ,KAAK,MAAM,EAAE,8BAA+BpK,CAAI,CAAE,EAEnG,eAAe,IAAIkB,GAClB,oBAAC,WAAU,IAAKA,EAAE,IAAK,OAAQ,CAACiJ,GAAcI,EAAQrJ,CAAC,EAAG,QAAS,IAAMuD,EAAS,CAAE,IAAKvD,EAAE,IAAK,IAAKA,EAAE,IAAK,MAAO,kBAAkBA,EAAGlB,CAAI,CAAE,CAAC,GAC5I,kBAAkBkB,EAAGlB,CAAI,CAC5B,CACD,EACA+J,GACC,oBAAC,WAAU,OAAQ,CAACI,GAAchF,GAASA,EAAM,KAAM,KAAK,KAC1D,QAAS,IAAMV,EAAS,CAAE,IAAKsF,EAAQ,IAAK,IAAKA,EAAQ,IAAK,MAAO,EAAE,wBAAyB/J,CAAI,EAAG,KAAM,EAAK,CAAC,GAClH,EAAE,wBAAyBA,CAAI,CAClC,EAEF,oBAAC,WAAU,OAAQgK,GAAY,CAACG,GAAchF,GAASA,EAAM,OAAS,KAAK,KAAK,QAAS8E,GAAY,EAAE,wBAAyBjK,CAAI,CAAE,CACxI,EACA,oBAAC,qBAAoB,KAAMA,EAAM,GAAIqK,EAAU,OAASxJ,GAAM4D,EAAS5D,CAAC,EAAG,EAC1EsE,GAAS,CAACgF,GACT,oBAAC,YAAW,MAAO,EAAE,wBAAyBnK,CAAI,EAAG,QAASsK,EAAS,KAAM,EAAE,4BAA6BtK,CAAI,GAC9G,oBAAC,YAAW,GAAIsK,EAAS,MAAOnF,EAAM,OAAS,GAAI,UAAW,GAC5D,SAAU1C,GAAKgC,EAAS,CAAE,GAAGU,EAAO,MAAO1C,EAAE,OAAO,MAAO,YAAa,EAAK,EAAG,CAAE,SAAU,EAAK,CAAC,EAAG,CACzG,CAEJ,CAEJ,CAEA,SAAS,qBAAqB+H,EAAIxK,EAAMyK,EAAO,CAC7C,gBAAgBD,EAAG,IAAKA,EAAG,IAAKxK,CAAI,EAAE,KAAK0E,GAAS,CAAMA,GAAO+F,EAAM/F,CAAK,CAAG,CAAC,CAClF,CAEA,SAAS,eAAe,CAAE,KAAA1E,EAAM,MAAA4F,EAAO,MAAAC,EAAO,aAAA6E,EAAc,YAAAC,EAAa,OAAAxG,EAAQ,UAAAyG,EAAW,cAAAC,EAAe,UAAApE,CAAU,EAAG,CACtH,MAAMqE,EAAM,YAAY,CAAE,QAAS,EAAK,CAAC,EACnCC,EAASD,GAAOA,EAAI,KAAQJ,GAAgB,KAC5CM,EAAQ,eAAe,CAAC,EACxB,CAAC9G,EAAO+G,CAAQ,EAAI,MAAM,SAAS,EAAE,EACrC,CAACC,EAAUC,CAAW,EAAI,MAAM,SAAS,QAAQ,EACjD,CAACC,EAAUC,CAAW,EAAI,MAAM,SAAS,EAAE,EAC3C,CAACC,EAAOC,CAAQ,EAAI,MAAM,SAAS,CAAE,IAAKP,EAAM,IAAK,IAAKA,EAAM,IAAK,MAAO,kBAAkBA,EAAOhL,CAAI,CAAE,CAAC,EAC5G,CAACwL,EAAYC,CAAa,EAAI,MAAM,SAAS,EAAI,EACjD,CAACC,EAAQC,CAAS,EAAI,MAAM,SAAS,IAAI,EACzC,CAACC,EAAQC,CAAS,EAAI,MAAM,SAAS,CAAC,CAAC,EACvC,CAAC7B,EAAS8B,CAAU,EAAI,MAAM,SAAS,IAAI,EAC3C,CAAClC,EAAMC,CAAO,EAAI,MAAM,SAAS,EAAK,EACtC,CAACkC,EAAUC,CAAW,EAAI,MAAM,SAAS,EAAK,EAE9C,CAACC,EAAOC,CAAQ,EAAI,MAAM,SAAS,CAAE,IAAKlB,EAAM,IAAK,IAAKA,EAAM,IAAK,EAAG,CAAE,CAAC,EACjF,qBAAqB,EAErB,MAAMmB,EAAU,CAAC,EACbb,GAAOa,EAAQ,KAAK,CAAE,GAAI,IAAK,KAAM,QAAS,IAAKb,EAAM,IAAK,IAAKA,EAAM,IAAK,MAAOA,EAAM,KAAM,CAAC,EAClG,CAACE,GAAcE,GAAQS,EAAQ,KAAK,CAAE,GAAI,IAAK,KAAM,SAAU,IAAKT,EAAO,IAAK,IAAKA,EAAO,IAAK,MAAOA,EAAO,KAAM,CAAC,EAE1H,MAAMU,EAAWvL,GAAMqL,EAASnL,IAAM,CAAE,IAAKF,EAAE,IAAK,IAAKA,EAAE,IAAK,EAAGE,EAAE,EAAI,CAAE,EAAE,EACvEsL,GAAO,CAAC/L,EAAGsC,IAAMtC,GAAKsC,GAAK,KAAK,IAAItC,EAAE,IAAMsC,EAAE,GAAG,EAAI,MAAQ,KAAK,IAAItC,EAAE,IAAMsC,EAAE,GAAG,EAAI,KACvF0J,EAAY,CAACzL,EAAGmC,IAAS,CAAEuI,EAAS1K,CAAC,EAAGiL,EAAW,IAAI,EAAS9I,GAAQA,EAAK,UAAWoJ,EAAQvL,CAAC,CAAG,EACpG0L,GAAa,CAAC1L,EAAGmC,IAAS,CAAE2I,EAAU9K,CAAC,EAAG4K,EAAc,EAAK,EAAGK,EAAW,IAAI,EAAS9I,GAAQA,EAAK,UAAWoJ,EAAQvL,CAAC,CAAG,EAE5H2L,GAAWxC,EAAW9I,GAAM,CAChC,MAAMuL,EAAQzC,EACRnJ,EAAI,CAAE,IAAKK,EAAE,IAAK,IAAKA,EAAE,IAAK,MAAO,EAAEuL,IAAU,QAAU,yBAA2B,+BAAgCzM,CAAI,EAAG,OAAQ,EAAK,EAC5IyM,IAAU,QAASlB,EAAS1K,CAAC,GAAU8K,EAAU9K,CAAC,EAAG4K,EAAc,EAAK,GAC5EK,EAAW,IAAI,EAEf,qBAAqB5K,EAAGlB,EAAO0E,IAAU,CACvC,MAAMgI,EAAOlH,GAAS6G,GAAK7G,EAAKtE,CAAC,GAAK,CAACsE,EAAI,YAAc,CAAE,GAAGA,EAAK,MAAAd,EAAM,EAAIc,EACzEiH,IAAU,QAASlB,EAASmB,CAAG,EAAQf,EAAUe,CAAG,CAC1D,CAAC,CACH,EAAI,OAEEC,GAAexM,GAAM0L,EAAUe,GAAMA,EAAG,QAAQzM,CAAC,GAAK,EAAIyM,EAAG,OAAO/I,GAAKA,IAAM1D,CAAC,EAAIyM,EAAG,OAAO,CAACzM,CAAC,CAAC,CAAC,EAElG0M,GAAU,SAAY,CAC1B,GAAKvB,EACL,CAAAzB,EAAQ,EAAI,EAAGmC,EAAY,EAAK,EAChC,GAAI,CACF,MAAMc,EAAS,CAAC,EAChB,eAAe,QAAQF,GAAM,CAAMhB,EAAO,QAAQgB,EAAG,GAAG,GAAK,GAAGA,EAAG,MAAM,QAAQjM,GAAKmM,EAAO,KAAKnM,CAAC,CAAC,CAAG,CAAC,EACxG,MAAMoM,EAAS7L,GAAMA,EAAI,CAAE,IAAKA,EAAE,IAAK,IAAKA,EAAE,IAAK,MAAOA,EAAE,KAAM,EAAI,KAChE2B,EAAO,OAAO,YAAY,YAAY,OAAO,OAAS,CAAC,EAAG,CAC9D,MAAOkK,EAAMzB,CAAK,EAAG,OAAQE,EAAa,KAAOuB,EAAMrB,CAAM,EAAG,YAAaN,EAAU,SAAAF,EACvF,OAAQ4B,EAAQ,KAAM,GAAI,KAAM,KAAK,IAAI,EAAG,KAAA9M,EAE5C,cAAe4L,EAAO,QAAQ,MAAM,GAAK,EAAI,sBAAwB,IACvE,CAAC,EACD,GAAI,CAAC/I,EAAK,SAAS,OAAQ,CAAEmJ,EAAY,EAAI,EAAGnC,EAAQ,EAAK,EAAG,MAAQ,CACxEhH,EAAK,MAAQqB,EAAM,KAAK,GAAK,UAAU,gCAAiClE,EAAM,CAAE,MAAOsL,EAAM,KAAM,CAAC,EACpGzI,EAAK,KAAO8H,GAAe,UAC3B9H,EAAK,UAAY+I,EAAO,MAAM,EAC9B/I,EAAK,QAAUgD,GAEXqF,IAAa,QAAUA,IAAa,YAAUrI,EAAK,SAAW,OAAO,OAAO,CAAC,EAAGA,EAAK,SAAU,CAAE,YAAa,KAAM,CAAC,GACzH,MAAMmK,GAAQ,MAAM,OAAO,WAAW,SAASnK,CAAI,EACnD+H,EAAUoC,GAAM,EAAE,CACpB,OAASvK,EAAG,CACV,QAAQ,KAAK,qBAAsBA,CAAC,EACpCgE,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,EAC5C6J,EAAQ,EAAK,CACf,EACF,EAEA,OACE,oBAAC,WACC,oBAAC,gBAAe,OAAQ,EAAE,0BAA2B7J,CAAI,EAAG,MAAO,EAAE,yBAA0BA,CAAI,EAAG,OAAQmE,EAAQ,KAAMnE,EAAM,EAClI,oBAAC,OAAI,MAAO,CAAE,QAAS,cAAe,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,GACtF,oBAAC,YAAW,MAAO,EAAE,wBAAyBA,CAAI,EAAG,QAAQ,gBAAgB,KAAM,EAAE,4BAA6BA,CAAI,GACpH,oBAAC,YAAW,GAAG,gBAAgB,MAAOkE,EAAO,UAAW,GAAI,SAAUzB,GAAKwI,EAASxI,EAAE,OAAO,KAAK,EAChG,YAAa,EAAE,mCAAoCzC,CAAI,EAAG,CAC9D,EAEA,oBAAC,iBAAgB,MAAO,EAAE,4BAA6BA,CAAI,GACzD,oBAAC,OAAI,KAAK,aAAa,MAAO,CAAE,QAAS,OAAQ,oBAAqB,UAAW,IAAK,CAAE,GACrF,kBAAkB,IAAIM,GACrB,oBAAC,WAAU,IAAKA,EAAE,IAAK,OAAQ4K,IAAa5K,EAAE,IAAK,QAAS,IAAM6K,EAAY7K,EAAE,GAAG,EAAG,KAAMA,EAAE,MAAO,MAAO,CAAE,MAAO,MAAO,GACzH,EAAE,sBAAwBA,EAAE,IAAKN,CAAI,CACxC,CACD,CACH,EACA,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,SAAU,GAAI,WAAY,KAAM,MAAO,cAAe,GAAI,EAAE,sBAAwBkL,EAAW,QAASlL,CAAI,CAAE,EACnJ6K,GACC,oBAAC,UAAO,KAAK,SAAS,UAAU,YAAY,QAAS,IAAMA,EAAc,iBAAiBK,CAAQ,GAAK,KAAMA,CAAQ,EAAG,MAAO,CAC7H,UAAW,aAAc,UAAW,GAAI,QAAS,QAAS,OAAQ,OAAQ,WAAY,cAAe,OAAQ,UAC7G,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,MAAO,eAAgB,UAAW,MAC7F,GAAG,MAAI,EAAE,8BAAgCA,EAAUlL,CAAI,EAAE,IAAE,CAE/D,EAEA,oBAAC,iBAAgB,MAAO,EAAE,4BAA6BA,CAAI,GACzD,oBAAC,gBAAe,UAAW,EAAE,4BAA6BA,CAAI,EAAG,MAAOoL,EAAU,SAAUC,EAC1F,QAAS,kBAAkB,IAAIhK,IAAM,CAAE,MAAOA,EAAG,MAAOA,EAAI,IAAMA,EAAI,OAAUA,EAAI,GAAM,IAAK,EAAE,EAAG,CACxG,EAEA,oBAAC,iBAAgB,MAAO,EAAE,yBAA0BrB,CAAI,EAAG,KAAM,EAAE,6BAA8BA,CAAI,GACnG,oBAAC,qBAAoB,KAAMA,EAAM,MAAOsL,EAAO,SAAUgB,EAAW,QAASvB,EAAO,SAAS,uBAAuB,QAAQ,sBAC1H,QAASf,IAAY,QAAS,UAAW,IAAM8B,EAAW9B,IAAY,QAAU,KAAO,OAAO,EAAG,CACrG,EAEA,oBAAC,iBAAgB,MAAO,EAAE,0BAA2BhK,CAAI,EAAG,KAAM,EAAE,8BAA+BA,CAAI,GACrG,oBAAC,qBAAoB,KAAMA,EAAM,MAAO0L,EAAQ,UAAS,GAAC,WAAYF,EAAY,SAAS,wBAAwB,QAAQ,uBACzH,OAAQ,IAAM,CAAEC,EAAc,EAAI,EAAGK,EAAW,IAAI,EAAOR,GAAOc,EAAQd,CAAK,CAAG,EAClF,SAAUiB,GAAY,QAASxB,EAC/B,QAASf,IAAY,SAAU,UAAW,IAAM8B,EAAW9B,IAAY,SAAW,KAAO,QAAQ,EAAG,CACxG,EAEA,oBAAC,WACEA,GACC,oBAAC,cAAa,KAAK,OAAO,KAAK,KAAK,MAAO,CAAE,aAAc,CAAE,EAC3D,MAAO,EAAEA,IAAY,QAAU,4BAA8B,6BAA8BhK,CAAI,EAAG,EAGtG,oBAAC,UAAS,MAAO4F,EAAO,KAAM5F,EAAM,OAAQ,IAAK,OAAQ,CAAE,IAAKiM,EAAM,IAAK,IAAKA,EAAM,GAAI,EAAG,KAAM,KAAQA,EAAM,EAAI,EAAK,KACxH,QAASE,EAAS,SAAUK,GAAU,CAC1C,EAEA,oBAAC,iBAAgB,MAAO,EAAE,0BAA2BxM,CAAI,EAAG,KAAM,EAAE,8BAA+BA,CAAI,GACrG,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,CAAE,GACrD,eAAe,IAAI4M,GAClB,oBAAC,WAAU,IAAKA,EAAG,IAAK,OAAQhB,EAAO,QAAQgB,EAAG,GAAG,GAAK,EAAG,QAAS,IAAMD,GAAYC,EAAG,GAAG,EAAG,KAAMA,EAAG,OACvG,EAAE,mBAAqBA,EAAG,IAAK5M,CAAI,CACtC,CACD,CACH,CACF,EAEC+L,GACC,oBAAC,cAAa,KAAK,QAAQ,KAAK,KAAK,MAAO,EAAE,4BAA6B/L,CAAI,GAAI,EAAE,gCAAiCA,CAAI,CAAE,EAG9H,oBAAC,aAAY,KAAK,KAAK,KAAI,GAAC,KAAK,IAAI,SAAU4J,GAAQ,CAAC0B,EAAO,QAASuB,IACrEjD,EAAO,EAAE,2BAA4B5J,CAAI,EAAI,EAAE,2BAA4BA,CAAI,CAClF,EACA,oBAAC,OAAI,MAAO,CAAE,UAAW,IAAK,WAAY,WAAY,SAAU,GAAI,WAAY,KAAM,MAAO,eAAgB,UAAW,QAAS,GAC9H,EAAE,+BAAgCA,CAAI,CACzC,CACF,CACF,CAEJ,CAKA,SAAS,eAAe,CAAE,OAAAiN,EAAQ,KAAAjN,EAAM,MAAA4F,EAAO,MAAAC,EAAO,KAAAC,EAAM,OAAA3B,EAAQ,cAAA+I,EAAe,eAAA/G,EAAgB,UAAAM,CAAU,EAAG,CAC9G,KAAM,CAAC5D,EAAMsK,CAAO,EAAI,MAAM,SAAS,IAAI,EACrC,CAACC,EAASC,CAAU,EAAI,MAAM,SAAS,EAAK,EAC5C,CAACC,EAAQC,CAAS,EAAI,MAAM,SAAS,IAAI,EACzC,CAACC,EAASC,CAAU,EAAI,MAAM,SAAS,EAAK,EAC5C,CAACC,EAAWC,CAAY,EAAI,MAAM,SAAS,OAAO,EAClD,CAACC,EAAaC,CAAc,EAAI,MAAM,SAAS,IAAI,EACnD,CAACC,EAASC,CAAU,EAAI,MAAM,SAAS,IAAI,EAC3C,CAACC,EAASC,CAAU,EAAI,MAAM,SAAS,EAAK,EAC5C,CAACnH,EAAYC,CAAa,EAAI,MAAM,SAAS,IAAI,EACjD,CAACmH,EAASC,CAAU,EAAI,MAAM,SAAS,IAAI,EAE3C,CAACC,EAAUC,CAAW,EAAI,MAAM,SAAS,CAAC,CAAC,EAC3CC,EAAU,MAAM,OAAO,IAAI,EAC3BC,EAAW,MAAM,OAAO,EAAK,EAC7BC,EAAW,MAAM,OAAO,IAAI,EAC5BC,EAAY,MAAM,OAAO,IAAI,EAC7BC,EAAW,MAAM,OAAO,IAAI,EAClC,qBAAqB,EAErB,MAAM,UAAU,IAAM,CACpB,IAAIzM,EAAQ,GACZ,cAAO,WAAW,QAAQgL,CAAM,EAAE,KAAKxE,GAAM,CAC3C,GAAKxG,EACL,IAAI,CAACwG,EAAI,CAAEgF,EAAW,EAAI,EAAG,MAAQ,CACrChF,EAAG,SAAW,OAAO,OAAO,CAAC,EAAG,OAAO,YAAY,iBAAkBA,EAAG,UAAY,CAAC,CAAC,EACtF6F,EAAQ,QAAU7F,EAAI0E,EAAQ1E,CAAE,EAChC0F,EAAW1F,EAAG,WAAa,IAAI,EACjC,CAAC,EAAE,MAAM,IAAMxG,GAASwL,EAAW,EAAI,CAAC,EACjC,IAAM,CAAExL,EAAQ,EAAO,CAChC,EAAG,CAACgL,CAAM,CAAC,EAEX,MAAM0B,GAAU,MAAM,YAAY,SAAY,CAC5C,aAAaH,EAAS,OAAO,EAC7B,MAAM/F,EAAK6F,EAAQ,QACnB,GAAI,CAAC7F,GAAM,CAAC8F,EAAS,QAAS,OAAO9F,EACrC8F,EAAS,QAAU,GACnBZ,EAAa,QAAQ,EACrB,GAAI,CACF,MAAMX,EAAQ,MAAM,OAAO,WAAW,SAASvE,CAAE,EACjD,OAAK8F,EAAS,UAAWZ,EAAa,OAAO,EAAGQ,EAAW,IAAI,KAAK,EAAE,YAAY,CAAC,GAC5EnB,CACT,MAAY,CACV,OAAAuB,EAAS,QAAU,GACnBZ,EAAa,OAAO,EACpBlH,EAAU,EAAE,8BAA+BzG,CAAI,CAAC,EACzC,IACT,CACF,EAAG,CAAC,CAAC,EAGL,MAAM,UAAU,IAAM,IAAM,CAC1B,aAAawO,EAAS,OAAO,EACzBD,EAAS,SAAWD,EAAQ,SAAW,OAAO,WAAW,SAASA,EAAQ,OAAO,EAAE,MAAM,IAAM,CAAC,CAAC,CACvG,EAAG,CAAC,CAAC,EAEL,MAAMM,EAAUhL,GAAO,CACrB,MAAMiL,EAAOjL,EAAG0K,EAAQ,OAAO,EAC/BO,EAAK,UAAY,IAAI,KAAK,EAAE,YAAY,EACxCP,EAAQ,QAAUO,EAClB1B,EAAQ0B,CAAI,EACZN,EAAS,QAAU,GACnBZ,EAAa,OAAO,EACpB,aAAaa,EAAS,OAAO,EAC7BA,EAAS,QAAU,WAAW,IAAM,CAAEG,GAAQ,CAAG,EAAG,IAAI,CAC1D,EAGMG,GAAgBjM,GAAQA,EAAK,UAAYA,EAAK,UAAU,WAAa,KAC3E,MAAM,UAAU,IAAM,CACpB0K,EAAU,IAAI,EACd,MAAMjL,EAAI,OAAO,WACjB,GAAI,CAACwM,IAAiB,OAAOxM,EAAE,aAAgB,WAAY,OAC3D,IAAIL,EAAQ,GACZ,eAAQ,QAAQ,EAAE,KAAK,IAAMK,EAAE,YAAYwM,EAAa,CAAC,EAAE,KAAKnH,GAAM,CAAM1F,GAAOsL,EAAU5F,GAAM,IAAI,CAAG,CAAC,EAAE,MAAM,IAAM,CAAC,CAAC,EACpH,IAAM,CAAE1F,EAAQ,EAAO,CAChC,EAAG,CAAC6M,EAAa,CAAC,EAElB,mBAAmB,IAAM,CACvB,MAAMxM,EAAI,OAAO,WACb,CAACwM,IAAiB,OAAOxM,EAAE,iBAAoB,YACnD,QAAQ,QAAQ,EAAE,KAAK,IAAMA,EAAE,gBAAgBwM,EAAa,CAAC,EAAE,KAAK3M,GAAM,CACpEA,GAAIoL,EAAU/H,GAAQA,GAAM,CAAE,GAAGA,EAAK,KAAMrD,EAAG,KAAM,YAAaA,EAAG,WAAY,CAAQ,CAC/F,CAAC,EAAE,MAAM,IAAM,CAAC,CAAC,CACnB,CAAC,EACD,MAAM4M,GAAgB,MAAOvF,GAAQ,CACnC,IAAIwF,EAAY,KAChB,GAAI,CACF,MAAMC,EAAQ,MAAM,OAAO,WAAW,QAAQhC,CAAM,EACpD+B,EAAYC,GAASA,EAAM,UAAYA,EAAM,UAAY,IAC3D,MAAY,CAAC,CACTzF,GAAOA,EAAI,IAAM,CAACwF,IAAWA,EAAY,CAAE,WAAYxF,EAAI,GAAI,QAASA,EAAI,SAAW,CAAE,GAC7F,MAAMqF,EAAO,CAAE,GAAGP,EAAQ,OAAQ,EAC9BU,EAAWH,EAAK,UAAYG,EAAgB,OAAOH,EAAK,UAC5DP,EAAQ,QAAUO,EAClB1B,EAAQ0B,CAAI,EACRrF,GAAK+D,EAAU/D,CAAG,CACxB,EACM0F,GAAeC,GAAUP,EAAOnG,IAAO,CAAE,GAAGA,EAAI,SAAU,CAAE,GAAGA,EAAG,SAAU,GAAG0G,CAAM,CAAE,EAAE,EAEzFC,GAAa,CAACpO,EAAIqO,IAAgBT,EAAOnG,IAAO,CACpD,GAAGA,EAAI,SAAUA,EAAG,SAAS,IAAIvI,GAAKA,EAAE,KAAOc,EAAM,OAAOqO,GAAgB,WAAaA,EAAYnP,CAAC,EAAImP,EAAenP,CAAC,CAC5H,EAAE,EACIoP,EAAc,CAACC,EAAKC,IAAQZ,EAAOnG,GAAM,CAC7C,MAAMpI,EAAMoI,EAAG,SAAS,MAAM,EACxB9G,EAAI4N,EAAMC,EAChB,GAAI7N,EAAI,GAAKA,GAAKtB,EAAI,OAAQ,OAAOoI,EACrC,MAAMgH,GAAMpP,EAAIkP,CAAG,EAAG,OAAAlP,EAAIkP,CAAG,EAAIlP,EAAIsB,CAAC,EAAGtB,EAAIsB,CAAC,EAAI8N,GAC3C,CAAE,GAAGhH,EAAI,SAAUpI,CAAI,CAChC,CAAC,EACKqP,EAAiB1O,GAAO4N,EAAOnG,IAAO,CAAE,GAAGA,EAAI,SAAUA,EAAG,SAAS,OAAOvI,GAAKA,EAAE,KAAOc,CAAE,CAAE,EAAE,EAEtG,GAAIwM,EACF,OACE,oBAAC,WACC,oBAAC,gBAAe,OAAQ,EAAE,0BAA2BxN,CAAI,EAAG,MAAO,EAAE,0BAA2BA,CAAI,EAAG,OAAQmE,EAAQ,KAAMnE,EAAM,EACnI,oBAAC,YAAW,KAAK,MAAM,MAAO,EAAE,2BAA4BA,CAAI,EAAG,OAAQ,oBAAC,aAAY,QAASmE,GAAS,EAAE,2BAA4BnE,CAAI,CAAE,EAAgB,CAChK,EAGJ,GAAI,CAAC6C,EAAM,OAAO,oBAAC,cAAa,KAAM7C,EAAM,MAAO,aAAc,OAAQmE,EAAQ,MAAO,CAAE,WAAY,EAAG,EAAG,EAE5G,MAAM/B,EAAI,OAAO,YACXkH,GAAM,iBAAiBzG,CAAI,EAC3B3C,EAAI2C,EAAK,SACT8M,EAAQzP,EAAE,aAEV0P,GAAYxN,EAAE,aAAaS,EAAM,CAAE,UAAW3C,EAAE,iBAAkB,aAAcyP,GAAS,IAAK,CAAC,EAE/FxM,GAASyM,GAAU,OAAOrP,IAAM,CAACA,EAAE,WAAa,CAAC6N,EAAS7N,EAAE,SAAS,IAAMA,EAAE,QAAU,MAAM,EAC7FsP,EAAQD,GAAU,OAAOrP,GAAKA,EAAE,QAAU,MAAM,EAChDuP,EAAW,iBAAiB3M,EAAM,EAClC4M,EAASH,GAAU,OAAOrP,GAAKA,EAAE,QAAU,OAAO,EAClDyP,EAAe,OAAO5N,EAAE,kBAAqB,WAAaA,EAAE,iBAAiBS,CAAI,EAAI,KACrFrC,GAAaQ,GAAO6B,EAAK,SAAS,UAAUgB,GAAKA,EAAE,KAAO7C,CAAE,EAAI,EAChEiP,EAASpN,EAAK,SAAS,OACzB,CAAE,IAAKA,EAAK,SAAS,OAAO,CAACvC,EAAGuD,IAAMvD,EAAIuD,EAAE,IAAK,CAAC,EAAIhB,EAAK,SAAS,OAAQ,IAAKA,EAAK,SAAS,OAAO,CAACvC,EAAGuD,IAAMvD,EAAIuD,EAAE,IAAK,CAAC,EAAIhB,EAAK,SAAS,MAAO,EACpJA,EAAK,OAAS,QAEbqN,GAAW,CAAC,EAClB,QAAS9P,EAAI,EAAGA,GAAK,EAAGA,IAAK,CAC3B,MAAMW,EAAI8B,EAAK,SAAS,QAAUA,EAAK,MAAQT,EAAE,SAASS,EAAMzC,CAAC,EAAI,KAErE8P,GAAS,KAAK,CAAE,EAAA9P,EAAG,EAAAW,EAAG,GAAIiP,EAAeA,EAAa,QAAQ5P,CAAC,EAAI,EAAKW,EAAIA,EAAE,KAAO,EAAM,CAAC,CAC9F,CACA,MAAMoP,GAAUD,GAAS,KAAK,GAAK,EAAE,IAAMhQ,EAAE,gBAAgB,EACvDkQ,GAAUD,IAAWA,GAAQ,EAAIA,GAAQ,EAAE,UAAY,KACvDE,GAAWD,GAAU,OAAO,KAAKA,EAAO,EAAE,IAAIjQ,GAAKiQ,GAAQjQ,CAAC,CAAC,EAAI,CAAC,EAClEmQ,GAAUD,GAAS,OAAS,KAAK,IAAI,MAAM,KAAMA,EAAQ,EAAI,EAC7DE,GAAUF,GAAS,OAAS,KAAK,IAAI,MAAM,KAAMA,EAAQ,EAAI,EAE7DG,EAAYH,GAAS,QAAU,aAAaE,GAASvQ,CAAI,IAAM,aAAasQ,GAAStQ,CAAI,EACzFyQ,GAAYD,EACbF,IAAW,KAAQC,IAAW,IAAO,YAAYA,GAAU,IAAMvQ,EAAM,CAAC,EAAI,IAAM,aAAasQ,GAAStQ,CAAI,EAAI,aAAauQ,GAASvQ,CAAI,EAAI,IAAM,aAAasQ,GAAStQ,CAAI,EAC/K,aAAaqQ,GAAS,OAASC,GAAUhH,GAAI,UAAWtJ,CAAI,EAC1D0Q,GAAetO,EAAE,aAAalC,EAAE,iBAAkBF,CAAI,EAEtD2Q,GAAQ,CACZ,CAAE,MAAO,EAAE,0BAA2B3Q,CAAI,EAAG,MAAO,YAAYsJ,GAAI,SAAUtJ,CAAI,EAAG,KAAM2P,GAASrG,GAAI,SAAWqG,EAAQ,OAAS,OAClI,MAAOA,GAASrG,GAAI,SAAWqG,EAAQ,UAAU,2BAA4B3P,EAAM,CAAE,IAAK2P,CAAM,CAAC,EAAI,MAAU,EACjH,CAAE,MAAO,EAAE,0BAA2B3P,CAAI,EAAG,MAAOyQ,EAAU,EAC9D,CAAE,MAAO,EAAE,0BAA2BzQ,CAAI,EAAG,MAAO,OAAOsJ,GAAI,QAAQ,EAAG,KAAMA,GAAI,SAAW,EAAI,OAAS,MAAU,EACtH,CAAE,MAAO,EAAE,uBAAwBtJ,CAAI,EAAG,MAAO6C,EAAK,MAAQA,EAAK,MAAM,MAAQ,GAAI,KAAM,EAAM,EACjG,CAAE,MAAO,EAAE,wBAAyB7C,CAAI,EAAG,MAAO6C,EAAK,OAASA,EAAK,OAAO,MAAQ,EAAE,sBAAuB7C,CAAI,EAAG,KAAM,EAAM,EAChI,CAAE,MAAO,EAAE,0BAA2BA,CAAI,EAAG,MAAO,EAAE,uBAAyB6C,EAAK,UAAY,UAAW7C,CAAI,EAAG,KAAM,EAAM,CAChI,EAEM4Q,GAAgB1P,GAAM,CAC1B6M,EAAW7M,CAAC,EACZ2M,EAAe,IAAI,EACnB,WAAW,IAAM,CAAE,GAAI,CAAEY,EAAU,SAAWA,EAAU,QAAQ,eAAe,CAAE,SAAU,SAAU,MAAO,QAAS,CAAC,CAAG,MAAY,CAAC,CAAE,EAAG,EAAE,CAC/I,EAGMoC,GAAU,CAAC3P,EAAGsJ,EAAI9F,IAAU,CAEhC,GADAqJ,EAAW,IAAI,EACX7M,EAAE,OAAS,UAAYA,EAAE,OAAS,OAAQ,CAC5C,MAAMd,EAAIkO,EAAQ,QAAQ,SAAS,OAAS,EACtCpK,EAAQQ,GAAS,UAAUxD,EAAE,OAAS,SAAW,8BAAgC,4BAA6BlB,EAAM,CAAE,EAAAI,CAAE,CAAC,EACzH+B,GAAKjB,EAAE,OAAS,SAClB,CAAE,GAAI,YAAY,KAAK,EAAG,KAAM,SAAU,IAAKsJ,EAAG,IAAK,IAAKA,EAAG,IAAK,MAAAtG,EAAO,KAAM,GAAI,KAAM,GACzF,OAAQ,CAAE,KAAM,OAAQ,SAAU,GAAI,OAAQ,GAAI,SAAU,CAAC,EAAG,OAAQ,IAAK,OAAQ,QAAS,CAAE,EAClG,CAAE,GAAI,YAAY,KAAK,EAAG,KAAM,OAAQ,IAAKsG,EAAG,IAAK,IAAKA,EAAG,IAAK,MAAAtG,EAAO,KAAM,GAAI,KAAM,GAAI,OAAQ,IAAK,EAC9G0K,EAAOnG,KAAO,CAAE,GAAGA,GAAI,SAAUA,GAAG,SAAS,OAAO,CAACtG,EAAE,CAAC,CAAE,EAAE,EAC5DkM,EAAY1N,KAAM,CAAE,GAAGA,GAAG,CAACwB,GAAG,EAAE,EAAG,EAAK,EAAE,EAC1C0L,EAAe1L,GAAG,EAAE,CACtB,SAAWjB,EAAE,OAAS,OACpB0N,EAAOnG,IAAO,CAAE,GAAGA,EAAI,SAAUA,EAAG,SAAS,IAAI5E,GAAKA,EAAE,KAAO3C,EAAE,UAAY,CAAE,GAAG2C,EAAG,IAAK2G,EAAG,IAAK,IAAKA,EAAG,GAAI,EAAI3G,CAAC,CAAE,EAAE,EACvHgK,EAAe3M,EAAE,SAAS,EAC1BuF,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,UACnCkB,EAAE,OAAS,SAAWA,EAAE,OAAS,SAAU,CACpD,MAAMnB,EAAMmB,EAAE,KAEd,GADA0N,EAAOnG,IAAO,CAAE,GAAGA,EAAI,CAAC1I,CAAG,EAAG,CAAE,IAAKyK,EAAG,IAAK,IAAKA,EAAG,IAAK,MAAO9F,GAAS,EAAE3E,IAAQ,QAAU,yBAA2B,+BAAgCC,CAAI,CAAE,CAAE,EAAE,EAC/J0E,EAAO,OAEX,qBAAqB8F,EAAIxK,EAAO0E,GAAU,CACxC,MAAMc,GAAM8I,EAAQ,SAAWA,EAAQ,QAAQvO,CAAG,EAC9CyF,IAAO,KAAK,IAAIA,GAAI,IAAMgF,EAAG,GAAG,EAAI,MAAQ,KAAK,IAAIhF,GAAI,IAAMgF,EAAG,GAAG,EAAI,MAAQ,CAAChF,GAAI,aACxFoJ,EAAOnG,KAAO,CAAE,GAAGA,GAAI,CAAC1I,CAAG,EAAG,CAAE,GAAG0I,GAAG1I,CAAG,EAAG,MAAA2E,CAAM,CAAE,EAAE,CAE1D,CAAC,CACH,CACF,EACMoM,GAAa,oBAAoBjO,EAAM7C,CAAI,EAC3CwM,GAAWsB,EAAWtD,GAAOqG,GAAQ/C,EAAStD,CAAE,EAAI,OACpDuG,GAAe/P,GAAO,CAC1B,GAAI8M,EAAS,CACX,MAAMnN,EAAImQ,GAAW,KAAKjN,GAAKA,EAAE,KAAO7C,CAAE,EACtCL,GAAGkQ,GAAQ/C,EAAS,CAAE,IAAKnN,EAAE,IAAK,IAAKA,EAAE,GAAI,CAAC,EAClD,MACF,CACIK,GAAMA,EAAG,QAAQ,IAAI,IAAM,GAAG6M,EAAe7M,CAAE,CACrD,EAEMgQ,GAAclD,EAAU,EAAE,CAC9B,OAAQ,2BAA4B,KAAM,yBAA0B,KAAM,yBAC1E,MAAO,0BAA2B,OAAQ,0BAC5C,EAAEA,EAAQ,IAAI,EAAG9N,CAAI,EAAI,GAEnBiR,GAAWC,GAAS,CACxB,MAAMC,EAAM,gBAAgBD,CAAI,EAE1B/O,EAAK,CACT,GAFamM,EAAQ,QAAQ,SAAS,KAAKzK,IAAKA,GAAE,KAAO,MAAQsN,CAAG,EAEvD,YAAY,KAAK,EAAI,MAAQA,EAAK,KAAM,OAAQ,OAAQA,EAAK,IAAKD,EAAK,IAAK,IAAKA,EAAK,IACnG,MAAO,kBAAkBA,EAAMlR,CAAI,EAAG,KAAM,GAAI,KAAM,GACtD,OAAQoC,EAAE,eAAe8O,EAAM5C,EAAQ,QAAQ,SAAUtO,CAAI,GAAK,IACpE,EAEMwF,EAAM8I,EAAQ,QACpB,IAAI8C,GAAM,OAAOhP,EAAE,mBAAsB,WAAaA,EAAE,kBAAkBoD,EAAK,CAAE,IAAK0L,EAAK,IAAK,IAAKA,EAAK,GAAI,CAAC,EAAI1L,EAAI,SAAS,OAC1H4L,IAAO,GAAKA,IAAO5L,EAAI,SAAS,SAAS4L,GAAM5L,EAAI,SAAS,QAClEoJ,EAAOnG,IAAM,CAAE,MAAMpI,GAAMoI,GAAG,SAAS,MAAM,EAAG,OAAApI,GAAI,OAAO+Q,GAAK,EAAGjP,CAAE,EAAU,CAAE,GAAGsG,GAAI,SAAUpI,EAAI,CAAG,CAAC,EAC1GoG,EAAU,UAAU,sBAAuBzG,EAAM,CAAE,EAAGoR,GAAM,CAAE,CAAC,CAAC,CAClE,EAEMC,GAAa9Q,GAAM,kBAAkBA,EAAGP,EAAMQ,GAAWN,EAAE,gBAAgB,EAE3EoR,GAAS1D,EAAc/K,EAAK,SAAS,KAAKgB,GAAKA,EAAE,KAAO+J,CAAW,EAAI,KACvE2D,GAAe,IAAM,CAErB3D,GAAeQ,EAASR,CAAW,GAAGS,EAAY1N,GAAK,CAAE,MAAMP,EAAI,CAAE,GAAGO,CAAE,EAAG,cAAOP,EAAEwN,CAAW,EAAUxN,CAAG,CAAC,EACnHyN,EAAe,IAAI,CACrB,EACM2D,GAAiB,SAAY,CACjC,GAAIzB,EAAO,OAAS,GAAK,CAAClN,EAAK,SAAS,OAAQ,CAC9CwL,EAAY,CAAC,CAAC,EACd5H,EAAU,EAAE,4BAA6BzG,CAAI,CAAC,EAC9C,WAAW,IAAM,CAAE,GAAI,CAAE0O,EAAS,SAAWA,EAAS,QAAQ,eAAe,CAAE,SAAU,SAAU,MAAO,OAAQ,CAAC,CAAG,MAAY,CAAC,CAAE,EAAG,EAAE,EAC1I,MACF,CACA,MAAMC,GAAQ,EACdzB,EAAcrK,EAAK,EAAE,CACvB,EAGM4O,GAAW/D,IAAc,SAAW,EAAE,0BAA2B1N,CAAI,EACvE0N,IAAc,QAAU,EAAE,2BAA4B1N,CAAI,EAC1DkO,EAAU,UAAU,+BAAgClO,EAAM,CAAE,KAAM,gBAAgBkO,EAASlO,CAAI,CAAE,CAAC,EAAI,EAAE,6BAA8BA,CAAI,EAE9I,OACE,oBAAC,WACC,oBAAC,gBAAe,OAAQ,EAAE,0BAA2BA,CAAI,EAAG,MAAO6C,EAAK,OAAS,EAAE,0BAA2B7C,CAAI,EAChH,OAAQ,SAAY,CAAE,MAAM2O,GAAQ,EAAGxK,EAAO,CAAG,EAAG,KAAMnE,EAAM,EAClE,oBAAC,OAAI,MAAO,CAAE,QAAS,cAAe,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,GACtF,oBAAC,eAAc,MAAO2Q,GAAO,EAC5BH,GACC,oBAAC,OAAI,MAAO,CAAE,UAAW,IAAK,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,KAAM,MAAO,cAAe,GAC1H,UAAU,2BAA4BxQ,EAAM,CAAE,IAAK,WAAW,aAAauQ,GAASvQ,CAAI,CAAC,EAAG,IAAK,WAAW,aAAasQ,GAAStQ,CAAI,CAAC,CAAE,CAAC,CAC7I,EAED6C,EAAK,QACJ,oBAAC,OAAI,MAAO,CAAE,UAAW,IAAK,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,KAAM,MAAO,eAAgB,aAAc,UAAW,GACpJ,UAAU,yBAA0B7C,EAAM,CAAE,MAAO6C,EAAK,OAAO,OAAS,EAAG,CAAC,CAC/E,EAGF,oBAAC,OAAI,IAAK4L,EAAW,MAAO,CAAE,gBAAiB,EAAG,GAC/CX,GACC,oBAAC,cAAa,KAAK,OAAO,KAAK,KAAK,MAAO,CAAE,aAAc,CAAE,EAAG,MAAOkD,GACrE,OACE,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GAC7D,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,MAAO,cAAe,GAAI,EAAE,+BAAgChR,CAAI,CAAE,EACvI,oBAAC,qBAAoB,KAAMA,EAAM,GAAG,yBAAyB,OAASa,GAAM,CAAE,MAAMK,EAAI4M,EAAa5M,GAAG2P,GAAQ3P,EAAG,CAAE,IAAKL,EAAE,IAAK,IAAKA,EAAE,GAAI,EAAGA,EAAE,KAAK,CAAG,EAAG,EAC5J,oBAAC,WACC,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,QAAS,IAAM,CACpD,MAAMK,EAAI4M,EAASC,EAAW,IAAI,EAC9B7M,EAAE,OAAS,QAAQ2M,EAAe3M,EAAE,SAAS,CACnD,GAAI,EAAE,kBAAmBlB,CAAI,CAAE,CACjC,CACF,EACA,EAEN,oBAAC,UAAS,MAAO4F,EAAO,KAAM5F,EAAM,OAAQ8N,EAAU,IAAM,IAAK,OAAQmC,EAAQ,KAAM,KACrF,QAASa,GAAY,KAAM,kBAAkBjO,CAAI,EAAG,aAAc,CAACiL,EACnE,SAAQ,GAAC,SAAUtB,GAAU,YAAauE,GAAa,CAC3D,EAEA,oBAAC,iBAAgB,MAAO,UAAU,4BAA6B/Q,EAAM,CAAE,EAAG6C,EAAK,SAAS,MAAO,CAAC,EAAG,KAAM,EAAE,gCAAiC7C,CAAI,GAC7I6C,EAAK,SAAS,SAAW,GACxB,oBAAC,cAAa,KAAK,KAAK,MAAO,EAAE,8BAA+B7C,CAAI,GAAI,EAAE,kCAAmCA,CAAI,CAAE,EAErH,oBAAC,MAAG,MAAO,CAAE,UAAW,OAAQ,OAAQ,EAAG,QAAS,EAAG,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GACrG6C,EAAK,SAAS,IAAI,CAACV,EAAI5B,IAAM,CAC5B,MAAMmR,EAAO,aAAavP,EAAG,IAAI,GAAK,aAAa,KAC7CP,EAAI,cAAcO,CAAE,EACpBwP,EAAM7B,EAAS3N,EAAG,EAAE,EACpByP,GAASxD,EAASjM,EAAG,EAAE,EAAI,CAAC,EAAI,sBAAsBA,EAAInC,CAAI,EACpE,OACE,oBAAC,MAAG,IAAKmC,EAAG,GAAI,MAAO,CACrB,QAAS,qBAAsB,aAAc,GAC7C,WAAY,iBAAkB,OAAQ,cAAgBwP,IAAQ,QAAU,eAAiB,gBAC3F,GACE,oBAAC,UAAO,KAAK,SAAS,UAAU,YAAY,QAAS,IAAM9D,EAAe1L,EAAG,EAAE,EAC7E,aAAY,UAAU,6BAA8BnC,EAAM,CAAE,EAAGO,EAAI,EAAG,MAAO4B,EAAG,KAAM,CAAC,EACvF,MAAO,CAAE,MAAO,OAAQ,QAAS,OAAQ,WAAY,aAAc,IAAK,GAAI,UAAW,GAAI,QAAS,EAAG,OAAQ,OAAQ,WAAY,cAAe,OAAQ,UAAW,UAAW,OAAQ,MAAO,YAAa,GAC5M,oBAAC,QAAK,cAAY,OAAO,MAAO,CAC9B,MAAO,GAAI,OAAQ,GAAI,aAAc,MAAO,WAAY,EAAG,WAAYuP,EAAK,MAAO,MAAO,UAC1F,QAAS,OAAQ,WAAY,SAAU,eAAgB,SAAU,WAAY,WAAY,WAAY,IAAK,SAAU,GACpH,OAAQ,oBAAqB,UAAW,4BAC1C,GAAInR,EAAI,CAAE,EACV,oBAAC,QAAK,MAAO,CACX,KAAM,EAAG,SAAU,EAAG,WAAY,EAAG,QAAS,cAAe,gBAAiB,EAAG,gBAAiB,WAAY,SAAU,SACxH,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,IAAK,aAAc,UACxF,GAAI4B,EAAG,OAAS,EAAE,6BAA8BnC,CAAI,CAAE,EACtD,oBAAC,QAAK,cAAY,OAAO,MAAO,CAAE,WAAY,EAAG,MAAO,eAAgB,SAAU,EAAG,GAAG,GAAC,CAC3F,EACA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,UAAW,EAAG,YAAa,EAAG,GACzF,oBAAC,QAAK,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,EAAG,SAAU,CAAE,GACnEmC,EAAG,OAAS,UAAY,oBAAC,WAAU,MAAO,CAAE,SAAU,GAAI,QAAS,SAAU,GAAI,EAAE,6BAA8BnC,CAAI,CAAE,EACxH,oBAAC,WAAU,OAAQ4B,IAAM,WAAY,MAAOA,IAAM,WAAa,iBAAmB,OAAW,MAAO,CAAE,SAAU,GAAI,QAAS,SAAU,GACpI,EAAE,mBAAqBA,EAAG5B,CAAI,CACjC,CACF,EACC2R,GAAO,oBAAC,QAAK,KAAK,MAAM,MAAO,CAAE,SAAU,EAAG,EAAG,aAAY,EAAEA,IAAQ,QAAU,4BAA8B,2BAA4B3R,CAAI,GAAI2R,IAAQ,QAAU,IAAM,IAAK,EACjL,oBAAC,QAAK,MAAO,CAAE,KAAM,CAAE,EAAG,EAC1B,oBAAC,iBAAgB,MAAO,EAAE,uBAAwB3R,CAAI,EAAG,SAAUO,IAAM,EAAG,QAAS,IAAM+O,EAAY/O,EAAG,EAAE,GAAI,aAAa,EAAG,EAChI,oBAAC,iBAAgB,MAAO,EAAE,yBAA0BP,CAAI,EAAG,SAAUO,IAAMsC,EAAK,SAAS,OAAS,EAAG,QAAS,IAAMyM,EAAY/O,EAAG,CAAC,GAAI,aAAa,IAAK,EAC1J,oBAAC,iBAAgB,MAAO,EAAE,2BAA4BP,CAAI,EAAG,KAAK,SAAS,QAAS,IAAM+G,EAAc5E,CAAE,GAAI,aAAa,KAAM,CACnI,EACCyP,GAAO,OAAS,GACf,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,EAAG,UAAW,EAAG,YAAa,EAAG,GACpFA,GAAO,IAAIC,IACV,oBAAC,UAAO,IAAKA,GAAG,KAAK,SAAS,UAAU,YAAY,QAAS,IAAMhE,EAAe1L,EAAG,EAAE,EAAG,MAAO,EAAE,mBAAqB0P,GAAI,QAAS7R,CAAI,EAAG,MAAO,CACjJ,UAAW,GAAI,QAAS,WAAY,aAAc,IAAK,OAAQ,UAC/D,OAAQ,kCAAmC,WAAY,mBAAoB,MAAO,aAClF,WAAY,WAAY,WAAY,IAAK,SAAU,IACrD,GAAI,EAAE,mBAAqB6R,GAAG7R,CAAI,CAAE,CACrC,CACH,CAEJ,CAEJ,CAAC,CACH,EACA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,oBAAqB,4BAA6B,IAAK,CAAE,GACrF,CACC,CAAE,IAAK,OAAQ,KAAM,KAAM,QAAS,IAAMiO,EAAW,EAAI,CAAE,EAC3D,CAAE,IAAK,SAAU,KAAM,KAAM,QAAS,IAAM2C,GAAa,CAAE,KAAM,QAAS,CAAC,CAAE,EAC7E,CAAE,IAAK,OAAQ,KAAM,KAAM,QAAS,IAAMA,GAAa,CAAE,KAAM,MAAO,CAAC,CAAE,CAC3E,EAAE,IAAItQ,GACJ,oBAAC,UAAO,IAAKA,EAAE,IAAK,KAAK,SAAS,UAAU,YAAY,QAASA,EAAE,QAAS,MAAO,CACjF,UAAW,GAAI,QAAS,UAAW,aAAc,GAAI,OAAQ,UAC7D,OAAQ,+BAAgC,WAAY,mBAAoB,MAAO,aAC/E,QAAS,OAAQ,cAAe,SAAU,WAAY,SAAU,eAAgB,SAAU,IAAK,CACjG,GACE,oBAAC,QAAK,cAAY,OAAO,MAAO,CAAE,SAAU,EAAG,GAAIA,EAAE,IAAK,EAC1D,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,IAAK,UAAW,QAAS,GAAI,EAAE,iBAAmBA,EAAE,IAAKN,CAAI,CAAE,CACnJ,CACD,CACH,CACF,EAEA,oBAAC,iBAAgB,MAAO,EAAE,yBAA0BA,CAAI,EAAG,MAAO,CAAE,gBAAiB,EAAG,GACtF,oBAAC,QAAK,IAAK0O,EAAU,cAAY,OAAO,MAAO,CAAE,QAAS,QAAS,OAAQ,EAAG,gBAAiB,EAAG,EAAG,EACpGvL,GAAO,SAAW,EACjB,oBAAC,cAAa,KAAK,KAAK,KAAK,IAAI,MAAO,EAAE,2BAA4BnD,CAAI,GACvE,UAAUgQ,GAAgBA,EAAa,QAAQ9P,EAAE,gBAAgB,EAAI,GAAK2C,EAAK,SAAS,QAAUA,EAAK,MAAQ,oCAAsC,+BAAgC7C,EAAM,CAAE,MAAOE,EAAE,gBAAiB,CAAC,CAC3N,EAEA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GAC5DiD,GAAO,IAAI,CAAC5C,EAAGJ,IACd,oBAAC,OAAI,IAAKA,EAAG,QAASI,EAAE,UAAY,IAAMsN,EAAetN,EAAE,SAAS,EAAI,OACtE,UAAWA,EAAE,UAAY,YAAc,OACvC,KAAMA,EAAE,UAAY,SAAW,OAAW,SAAUA,EAAE,UAAY,EAAI,OACtE,UAAWA,EAAE,UAAakC,GAAM,CAAMA,EAAE,MAAQ,SAASoL,EAAetN,EAAE,SAAS,CAAG,EAAI,OAC1F,MAAO,CAAE,OAAQA,EAAE,UAAY,UAAY,SAAU,GACrD,oBAAC,cAAa,KAAMA,EAAE,QAAU,QAAU,QAAU,OAAQ,KAAMA,EAAE,QAAU,QAAU,IAAM,KAAM,MAAO8Q,GAAU9Q,CAAC,EAAG,CAC3H,CACD,CACH,EAGDsP,EAAM,IAAI,CAACtP,EAAGJ,IACb,oBAAC,OAAI,IAAK,IAAMA,EAAG,KAAK,OAAO,aAAY,EAAE,2BAA4BH,CAAI,EAAG,MAAO,CACrF,QAAS,OAAQ,IAAK,EAAG,WAAY,aAAc,QAAS,UAC5D,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,IAAK,MAAO,cACjF,GACE,oBAAC,QAAK,cAAY,QAAO,IAAE,EAAO,oBAAC,QAAK,MAAO,CAAE,KAAM,EAAG,SAAU,CAAE,GAAIqR,GAAU9Q,CAAC,CAAE,CACzF,CACD,CACH,EAEC,OAAO,OAAO,mBAAsB,YACnC,oBAAC,iBAAgB,MAAO,EAAE,yBAA0BP,CAAI,GACtD,oBAAC,WAAU,MAAO4F,EAAO,QAAS,GAAI,OAAQkJ,GAAgB,0BAA4B,eACvFA,GACC,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,GAAI,SAAU,MAAO,GAC7E,oBAAC,WAAU,OAAM,GAAC,MAAM,0BAA0B,KAAK,KAAK,EAAE,mBAAoB9O,CAAI,CAAE,EACxF,oBAAC,QAAK,MAAO,CAAE,KAAM,EAAG,SAAU,IAAK,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,WAAY,KAAM,MAAO,cAAe,GACrIsN,EAAS,UAAWA,EAAO,KAAwCA,EAAO,OAAS,EAAI,+BAAiC,8BAAtF,+BAAqHtN,EAAM,CAAE,KAAMsN,EAAO,WAAa,GAAI,EAAGA,EAAO,MAAQ,CAAE,CAAC,EAAI,EACzN,EACA,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,QAAS,IAAMD,EAAW,EAAI,GAAI,EAAE,0BAA2BrN,CAAI,CAAE,CAC9G,EAEA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,GAC9D,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,WAAY,IAAK,MAAO,cAAe,GAAI,EAAE,wBAAyBA,CAAI,CAAE,EACnJ,oBAAC,aAAY,KAAK,KAAK,QAAQ,YAAY,KAAK,KAAK,QAAS,SAAY,CAAE,MAAM2O,GAAQ,EAAGtB,EAAW,EAAI,CAAG,GAAI,EAAE,2BAA4BrN,CAAI,CAAE,CACzJ,CAEJ,CACF,EAGF,oBAAC,iBAAgB,MAAO,EAAE,4BAA6BA,CAAI,GACzD,oBAAC,YAAW,MAAO,EAAE,wBAAyBA,CAAI,EAAG,QAAQ,oBAC3D,oBAAC,YAAW,GAAG,mBAAmB,MAAO6C,EAAK,OAAS,GAAI,UAAW,GAAI,SAAUJ,GAAK,CAAE,MAAM5B,EAAI4B,EAAE,OAAO,MAAOmM,EAAOnG,IAAO,CAAE,GAAGA,EAAI,MAAO5H,CAAE,EAAE,CAAG,EAAG,CAC/J,EAEA,oBAAC,YAAW,MAAO,EAAE,4BAA6Bb,CAAI,EAAG,KAAM,EAAE,uBAAyB6C,EAAK,UAAY,UAAY,QAAS7C,CAAI,GAClI,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,oBAAqB,UAAW,IAAK,CAAE,GACnE,kBAAkB,IAAIM,GACrB,oBAAC,WAAU,IAAKA,EAAE,IAAK,OAAQuC,EAAK,WAAavC,EAAE,IAAK,KAAMA,EAAE,MAAO,MAAO,CAAE,MAAO,MAAO,EAC5F,QAAS,IAAMsO,EAAOnG,GAAM,CAE1B,MAAMqJ,EAAYjO,IAAMA,KAAM,QAAUA,KAAM,SACxCkO,EAAKtJ,EAAG,UAAYA,EAAG,SAAS,YACtC,IAAIuJ,EAAcD,EAClB,OAAID,EAASxR,EAAE,GAAG,EAAG0R,EAAc,MAC1BF,EAASrJ,EAAG,QAAQ,GAAKsJ,IAAO,QAAOC,EAAc,OACvD,CAAE,GAAGvJ,EAAI,SAAUnI,EAAE,IAAK,SAAU,CAAE,GAAGmI,EAAG,SAAU,YAAAuJ,CAAY,CAAE,CAC7E,CAAC,GAAI,EAAE,sBAAwB1R,EAAE,IAAKN,CAAI,CAAE,CAC/C,CACH,CACF,EAEA,oBAAC,YAAW,MAAO,EAAE,sBAAuBA,CAAI,GAC9C,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GAC7D,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAE,GAC1D,oBAAC,QAAK,cAAY,OAAO,MAAO,CAAE,SAAU,EAAG,GAAG,IAAE,EACpD,oBAAC,YAAW,MAAO6C,EAAK,OAASA,EAAK,MAAM,OAAS,GAAU,UAAW,GAAI,aAAY,EAAE,wBAAyB7C,CAAI,EAAG,MAAO,CAAE,KAAM,EAAG,SAAU,CAAE,EACxJ,SAAUyC,GAAK,CAAE,MAAM5B,EAAI4B,EAAE,OAAO,MAAOmM,EAAOnG,IAAO,CAAE,GAAGA,EAAI,MAAO,CAAE,GAAGA,EAAG,MAAO,MAAO5H,EAAG,YAAa,EAAK,CAAE,EAAE,CAAG,EAAG,CAClI,EACA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,eAAgB,UAAW,GACxD,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,QAAS,IAAM+P,GAAa,CAAE,KAAM,OAAQ,CAAC,GAAI,EAAE,0BAA2B5Q,CAAI,CAAE,CAC7H,EACC6C,EAAK,OACJ,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAE,GAC1D,oBAAC,QAAK,cAAY,OAAO,MAAO,CAAE,SAAU,EAAG,GAAG,IAAE,EACpD,oBAAC,YAAW,MAAOA,EAAK,OAAO,OAAS,GAAI,UAAW,GAAI,aAAY,EAAE,8BAA+B7C,CAAI,EAAG,MAAO,CAAE,KAAM,EAAG,SAAU,CAAE,EAC3I,SAAUyC,GAAK,CAAE,MAAM5B,EAAI4B,EAAE,OAAO,MAAOmM,EAAOnG,IAAO,CAAE,GAAGA,EAAI,OAAQ,CAAE,GAAGA,EAAG,OAAQ,MAAO5H,EAAG,YAAa,EAAK,CAAE,EAAE,CAAG,EAAG,CACpI,EAEA,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,SAAU,GAAI,aAAc,UAAW,GAAG,MAAI,EAAE,qBAAsBb,CAAI,CAAE,EAErH,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,SAAU,OAAQ,eAAgB,UAAW,GACvG6C,EAAK,QAAU,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,QAAS,IAAM+L,EAAOnG,IAAO,CAAE,GAAGA,EAAI,OAAQ,IAAK,EAAE,GAAI,EAAE,yBAA0BzI,CAAI,CAAE,EAClJ,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,QAAS,IAAM4Q,GAAa,CAAE,KAAM,QAAS,CAAC,GAAI,EAAE/N,EAAK,OAAS,0BAA4B,0BAA2B7C,CAAI,CAAE,CACxK,CACF,CACF,EAEA,oBAAC,YAAW,MAAO,EAAE,0BAA2BA,CAAI,EAAG,KAAM,EAAE,8BAA+BA,CAAI,GAChG,oBAAC,mBAAkB,MAAO2P,EAAO,KAAM3P,EAAM,SAAUa,GAAKqO,GAAY,CAAE,aAAcrO,CAAE,CAAC,EAAG,CAChG,EAEA,oBAAC,YAAW,MAAO,EAAE,sBAAuBb,CAAI,EAAG,KAAM,EAAE,wBAA0BE,EAAE,aAAe,OAAS,QAASF,CAAI,GAC1H,oBAAC,gBAAe,UAAW,EAAE,sBAAuBA,CAAI,EAAG,MAAOE,EAAE,aAAe,MAAO,SAAUW,GAAKqO,GAAY,CAAE,YAAarO,CAAE,CAAC,EACrI,QAAS,CAAC,MAAO,MAAO,MAAM,EAAE,IAAIA,IAAM,CAAE,MAAOA,EAAG,MAAO,EAAE,uBAAyBA,EAAGb,CAAI,CAAE,EAAE,EAAG,CAC1G,EAEA,oBAAC,gBAAe,QAASE,EAAE,UAAY,GAAO,SAAUW,GAAKqO,GAAY,CAAE,QAASrO,CAAE,CAAC,EACrF,MAAO,EAAE,oBAAqBb,CAAI,EAClC,KAAM,UAAUE,EAAE,UAAY,GAAQ,sBAAwB,uBAAwBF,EAAM,CAAE,EAAGE,EAAE,YAAc,EAAG,CAAC,EAAG,EAE1H,oBAAC,YAAW,MAAO,EAAE,sBAAuBF,CAAI,EAAG,KAAM,EAAE,0BAA2BA,CAAI,GACxF,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,GAAI,SAAU,MAAO,GAC7E,oBAAC,cAAa,MAAOE,EAAE,iBAAkB,IAAK,EAAG,IAAK,EAAG,KAAMF,EAAM,UAAW,EAAE,sBAAuBA,CAAI,EAC3G,SAAUa,GAAKqO,GAAY,CAAE,iBAAkBrO,CAAE,CAAC,EAAG,EACvD,oBAAC,QAAK,MAAO,CAAE,SAAU,GAAI,cAAe,CAAE,EAAG,cAAY,QAAQ6P,GAAa,IAAIxO,GAAMA,EAAG,KAAK,EAAE,KAAK,EAAE,CAAE,CACjH,CACF,EAECW,EAAK,SAAS,OAAS,GACtB,oBAAC,WAAU,MAAO+C,EAAO,QAAS,IAChC,oBAAC,aAAY,MAAO,CAAE,SAAU,EAAG,GAAI,EAAE,wBAAyB5F,CAAI,CAAE,EACxE,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,WAAY,IAAK,MAAO,cAAe,GAAI,EAAE,sBAAuBA,CAAI,CAAE,EAC9JoQ,IACC,oBAAC,OAAI,MAAO,CAAE,UAAW,GAAI,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GAC3EM,GAAa,IAAIxO,GAAM,CACtB,MAAMb,EAAI+O,GAAQlO,EAAG,EAAE,GAAK,EAC5B,OACE,oBAAC,OAAI,IAAKA,EAAG,GAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAE,GACtE,oBAAC,QAAK,cAAY,OAAO,MAAO,CAAE,MAAO,GAAI,UAAW,QAAS,GAAIA,EAAG,KAAM,EAC9E,oBAAC,QAAK,MAAO,CAAE,KAAM,EAAG,OAAQ,GAAI,aAAc,IAAK,WAAY,mBAAoB,SAAU,QAAS,GACxG,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,OAAQ,OAAQ,OAAQoO,GAAU,KAAK,IAAI,EAAGjP,EAAIiP,GAAU,GAAG,EAAI,GAAK,IAAK,WAAYpO,EAAG,MAAO,aAAc,GAAI,EAAG,CAC3J,EACA,oBAAC,QAAK,MAAO,CAAE,MAAO,GAAI,UAAW,QAAS,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAI,aAAab,EAAGrB,CAAI,CAAE,CACtI,CAEJ,CAAC,CACH,EAEF,oBAAC,OAAI,KAAK,OAAO,MAAO,CAAE,UAAW,GAAI,QAAS,OAAQ,oBAAqB,4BAA6B,IAAK,CAAE,GAChHkQ,GAAS,IAAI,GAAK,CACjB,MAAMlM,EAAK,EAAE,GACPiO,EAAK,EAAE,IAAM/R,EAAE,iBACrB,OACE,oBAAC,UAAO,IAAK,EAAE,EAAG,KAAK,SAAS,KAAK,WAAW,UAAU,YAAY,QAAS,IAAMgP,GAAY,CAAE,iBAAkB,EAAE,CAAE,CAAC,EACxH,aAAY,UAAUlL,EAAK,wBAA0B,yBAA0BhE,EAAM,CAAE,EAAG,EAAE,CAAE,CAAC,EAC/F,MAAO,CACL,UAAW,GAAI,aAAc,GAAI,OAAQ,UAAW,QAAS,QAC7D,OAAQiS,EAAK,yBAA2B,4BACxC,WAAYjO,EAAK,uBAAyB,mBAAoB,MAAO,aACrE,QAAS,OAAQ,cAAe,SAAU,WAAY,SAAU,eAAgB,SAAU,IAAK,CACjG,GACA,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,EAAG,GAAI,EAAE,CAAE,EAC7E,oBAAC,QAAK,cAAY,OAAO,MAAO,CAAE,SAAU,EAAG,GAAIA,EAAK,IAAM,IAAK,CACrE,CAEJ,CAAC,CACH,EACA,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAI,EAAE,wBAAyBhE,CAAI,CAAE,CAC/H,CAEJ,CACF,EAGA,oBAAC,OAAI,MAAO,CAAE,QAAS8N,EAAU,OAAS,OAAQ,cAAe,SAC/D,SAAU,SAAU,OAAQ,GAAI,OAAQ,EAAG,OAAQ,cAAe,QAAS,cAAe,aAAc,GACxG,WAAY,iBAAkB,OAAQ,4BAA6B,UAAW,8BAC9E,IAAK,CACP,GACE,oBAAC,OAAI,KAAK,SAAS,YAAU,SAAS,MAAO,CAAE,UAAW,SAAU,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,MAAO,cAAe,GAChJJ,IAAc,SAAW,oBAAC,QAAK,cAAY,OAAO,MAAO,CAAE,MAAO,0BAA2B,YAAa,CAAE,GAAG,GAAC,EAAS+D,EAC5H,EACA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,CAAE,GACpC,oBAAC,aAAY,QAAQ,QAAQ,QAAS,SAAY,CAAE,MAAM9C,GAAQ,EAAGxK,EAAO,CAAG,EAAG,MAAO,CAAE,KAAM,CAAE,GAAI,EAAE,wBAAyBnE,CAAI,CAAE,EACxI,oBAAC,aAAY,QAASwR,GAAgB,MAAO,CAAE,KAAM,IAAK,QAASzB,EAAO,OAAS,GAAK,CAAClN,EAAK,SAAS,OAAS,GAAM,CAAE,GACrH,EAAE,6BAA8B7C,CAAI,CACvC,CACF,CACF,EAEA,oBAAC,sBAAqB,KAAM,CAAC,CAACsR,GAAQ,QAASA,GAAQ,MAAOA,GAAS9Q,GAAU8Q,GAAO,EAAE,EAAI,EAAG,KAAMzO,EAAM,KAAM7C,EACjH,OAAQsR,GAASnO,GAAO,OAAO5C,GAAKA,EAAE,YAAc+Q,GAAO,EAAE,EAAI,CAAC,EAAG,MAAO,CAAC,EAAEA,IAAUlD,EAASkD,GAAO,EAAE,GAC3G,SAAW1N,GAAO0N,IAAUlC,GAAWkC,GAAO,GAAI1N,CAAE,EAAG,QAAS2N,GAChE,OAAQ,IAAMX,GAAa,CAAE,KAAM,OAAQ,UAAWU,GAAO,EAAG,CAAC,EACjE,SAAU,IAAMvK,EAAcuK,EAAM,EAAG,UAAWD,GAAW,EAE9D,OAAO,OAAO,mBAAsB,YACnC,oBAAC,mBAAkB,KAAMjE,EAAS,KAAMvK,EAAM,KAAM7C,EAAM,MAAO4F,EAAO,KAAME,EAAM,QAASD,EAC3F,QAAS,IAAMwH,EAAW,EAAK,EAAG,UAAW5G,EAC7C,YAAc+C,GAAQuF,GAAcvF,CAAG,EAAG,cAAe,IAAMuF,GAAc,IAAI,EACjF,gBAAkBvF,GAAQ,CAAE6D,EAAW,EAAK,EAAOlH,GAAgBwI,GAAQ,EAAE,KAAK,IAAMxI,EAAeqD,CAAG,CAAC,CAAG,EAAG,EAGrH,oBAAC,sBAAqB,KAAMwE,EAAS,QAAS,IAAMC,EAAW,EAAK,EAAG,KAAMjO,EAAM,KAAM6C,EAAM,OAAQoN,EAAQ,MAAOgB,GAAS,EAE/H,oBAAC,cAAa,KAAM,CAAC,CAACnK,EAAY,KAAM9G,EAAM,OAAM,GAAC,OAAQ,IAC3D,MAAO,UAAU,gCAAiCA,EAAM,CAAE,MAAO8G,GAAcA,EAAW,OAAS,EAAS,CAAC,EAC7G,KAAM,EAAE,+BAAgC9G,CAAI,EAAG,aAAc,EAAE,2BAA4BA,CAAI,EAC/F,SAAU,IAAM+G,EAAc,IAAI,EAClC,UAAW,IAAM,CAAE,MAAM/F,EAAK8F,EAAW,GAAIC,EAAc,IAAI,EAAO6G,IAAgB5M,GAAI6M,EAAe,IAAI,EAAG6B,EAAc1O,CAAE,CAAG,EAAG,CAC1I,CAEJ,CAGA,SAAS,qBAAqB,CAAE,KAAAwB,EAAM,QAAA0P,EAAS,KAAAlS,EAAM,KAAA6C,EAAM,OAAAoN,EAAQ,MAAAkC,CAAM,EAAG,CAC1E,KAAM,CAACvQ,EAAG8H,CAAI,EAAI,MAAM,SAAS,EAAE,EAC7B,CAAC0I,EAAYC,CAAa,EAAI,MAAM,SAAS,EAAI,EACjD,CAAC1C,EAAO2C,CAAQ,EAAI,MAAM,SAAS,EAAE,EACrCC,EAAM,qBAAqB,EACjC,MAAM,UAAU,IAAM,CAAM/P,IAAQkH,EAAK,EAAE,EAAG4I,EAAS,EAAE,EAAK,EAAG,CAAC9P,CAAI,CAAC,EAGvE,MAAMgQ,EAAO,MAAM,QAAQ,IAAM,CAC/B,GAAI,CAAChQ,EAAM,MAAO,CAAC,EACnB,MAAMJ,EAAI,OAAO,YACXnB,EAAI,OAAO,OAAS,CAAC,EAC3B,GAAI,CAAE,OAAO,OAAOmB,EAAE,aAAgB,WAAaA,EAAE,YAAYnB,CAAC,EAAIA,CAAG,MAAY,CAAE,OAAOA,CAAG,CACnG,EAAG,CAACuB,EAAM+P,CAAG,CAAC,EACR1Q,EAAO,MAAM,QAAQ,IAAM,CAC/B,GAAI,CAACW,EAAM,MAAO,CAAC,EACnB,MAAMJ,EAAI,OAAO,YAEXqQ,EAAQ,OAAO7Q,GAAK,EAAE,EAAE,MAAM,KAAK,EAAE,IAAI8Q,GAAKtQ,EAAE,cAAcsQ,CAAC,CAAC,EAAE,OAAO,OAAO,EACnF,IAAIA,GAAKA,EAAE,OAAS,EAAIA,EAAE,QAAQ,oBAAqB,EAAE,EAAIA,CAAC,EAC3DC,EAAKF,EAAM,OAAS,EACpBxP,EAAM,CAAC,EACbuP,EAAK,QAAQzR,GAAK,CAChB,GAAI,CAACA,GAAK,OAAOA,EAAE,KAAQ,UAAY,OAAOA,EAAE,KAAQ,SAAU,OAClE,MAAMM,EAAIe,EAAE,WAAW6N,EAAQlP,CAAC,EAEhC,GADIM,EAAI,KACJwB,EAAK,WAAa,QAAUT,EAAE,YAAcA,EAAE,WAAWrB,CAAC,EAAG,OACjE,MAAMmD,EAAQ,kBAAkBnD,EAAGf,CAAI,EACvC,GAAI2S,EAAI,CACN,MAAMC,EAAMxQ,EAAE,cAAc8B,EAAQ,KAAOnD,EAAE,KAAO,IAAM,KAAOA,EAAE,SAAW,GAAG,EACjF,GAAI,CAAC0R,EAAM,MAAMC,GAAKE,EAAI,QAAQF,CAAC,GAAK,CAAC,EAAG,MAC9C,CACAzP,EAAI,KAAK,CAAE,EAAAlC,EAAG,EAAAM,EAAG,MAAA6C,CAAM,CAAC,CAC1B,CAAC,EACDjB,EAAI,KAAK,CAAC3C,EAAGsC,IAAMtC,EAAE,EAAIsC,EAAE,CAAC,EAC5B,IAAIiQ,EAAO5P,EACX,OAAImP,IAAYS,EAAOA,EAAK,OAAOvR,GAAK,CAAC,CAACc,EAAE,eAAed,EAAE,EAAGuB,EAAK,SAAU7C,CAAI,CAAC,GAC7E6S,CACT,EAAG,CAACrQ,EAAMZ,EAAGwQ,EAAYI,EAAMvC,EAAO,IAAKA,EAAO,IAAKpN,EAAK,SAAU7C,CAAI,CAAC,EAErE8S,EAAS,CAAC,EAChB,OAACjQ,EAAK,UAAY,CAAC,GAAG,QAAQ3C,GAAK,CAAMA,EAAE,OAAS,SAAQ4S,EAAO,OAAO5S,EAAE,MAAM,CAAC,EAAI,GAAM,CAAC,EAG5F,oBAAC,YAAW,KAAMsC,EAAM,QAAS0P,EAAS,KAAMlS,EAAM,MAAO,EAAE,sBAAuBA,CAAI,EAAG,OAAQ,EAAE,uBAAwBA,CAAI,EAAG,UAAU,OAC9I,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,GAAI,cAAe,CAAE,GAChF,oBAAC,YAAW,KAAK,SAAS,MAAO4B,EAAG,SAAUa,GAAK,CAAEiH,EAAKjH,EAAE,OAAO,KAAK,EAAG6P,EAAS,EAAE,CAAG,EACvF,YAAa,EAAE,uBAAwBtS,CAAI,EAAG,aAAY,EAAE,uBAAwBA,CAAI,EAAG,EAC7F,oBAAC,gBAAe,QAASoS,EAAY,SAAUC,EAAe,MAAO,EAAE,2BAA4BrS,CAAI,EAAG,KAAM,EAAE,+BAAgCA,CAAI,EAAG,EACzJ,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,SAAU,GAAI,cAAe,SAAU,MAAO,cAAe,GAChG,WAAW,sBAAuB6B,EAAK,OAAQ7B,CAAI,CACtD,EACC6B,EAAK,SAAW,GAAK,oBAAC,cAAa,KAAK,KAAK,MAAO,EAAE,qBAAsB7B,CAAI,EAAG,EACnF6B,EAAK,MAAM,EAAG8N,CAAK,EAAE,IAAI,CAAC,CAAE,EAAA5O,EAAG,EAAAM,EAAG,MAAA6C,CAAM,IAAM,CAC7C,MAAM6O,EAAM,CAAC,CAAC,OAAO,YAAY,eAAehS,EAAG8B,EAAK,SAAU7C,CAAI,EAChEgT,EAAQF,EAAO,OAAO,gBAAgB/R,CAAC,CAAC,CAAC,EAC/C,OACE,oBAAC,UAAO,IAAK,OAAO,gBAAgBA,CAAC,CAAC,EAAG,KAAK,SAAS,UAAU,YAAY,QAAS,IAAMoR,EAAMpR,CAAC,EACjG,aAAY,UAAU,wBAAyBf,EAAM,CAAE,MAAAkE,EAAO,KAAM,aAAa7C,EAAGrB,CAAI,CAAE,CAAC,EAAG,MAAO,CACrG,QAAS,OAAQ,WAAY,SAAU,IAAK,GAAI,MAAO,OAAQ,UAAW,GAAI,QAAS,YAAa,UAAW,OAC/G,aAAc,GAAI,OAAQ,0BAA2B,WAAY,mBAAoB,OAAQ,UAAW,MAAO,YACjH,GACE,oBAAC,QAAK,MAAO,CAAE,KAAM,EAAG,SAAU,CAAE,GAClC,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,KAAM,aAAc,WACpG,QAAS,cAAe,gBAAiB,EAAG,gBAAiB,WAAY,SAAU,QAAS,GAAIkE,CAAM,EACxG,oBAAC,QAAK,MAAO,CAAE,QAAS,OAAQ,IAAK,EAAG,WAAY,SAAU,UAAW,EAAG,SAAU,MAAO,GAC3F,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAI,aAAa7C,EAAGrB,CAAI,CAAE,EACpG+S,EAAM,oBAAC,WAAU,MAAO,CAAE,SAAU,GAAI,QAAS,OAAQ,GAAI,EAAE,0BAA2B/S,CAAI,CAAE,EAC7F,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAI,EAAE,yBAA0BA,CAAI,CAAE,EACpHgT,GAAS,oBAAC,WAAU,OAAM,GAAC,MAAM,uBAAuB,MAAO,CAAE,SAAU,GAAI,QAAS,OAAQ,GAAI,EAAE,uBAAwBhT,CAAI,CAAE,CACvI,CACF,EACA,oBAAC,QAAK,cAAY,OAAO,MAAO,CAC9B,MAAO,GAAI,OAAQ,GAAI,aAAc,MAAO,WAAY,EAAG,WAAY,eAAgB,MAAO,UAC9F,QAAS,OAAQ,WAAY,SAAU,eAAgB,SAAU,WAAY,WAAY,WAAY,IAAK,SAAU,GACpH,UAAW,2BACb,GAAG,GAAC,CACN,CAEJ,CAAC,EACA6B,EAAK,OAAS8N,GACb,oBAAC,aAAY,QAAQ,QAAQ,KAAI,GAAC,QAAS,IAAM2C,EAASW,GAAKA,EAAI,EAAE,GAAI,EAAE,qBAAsBjT,CAAI,CAAE,CAE3G,CACF,CAEJ,CAKA,SAAS,sBAAsBkB,EAAGgS,EAAMC,EAAKnT,EAAM,CACjD,GAAIkT,IAAS,OAAQ,OAAO,KAC5B,MAAMtR,EAAI,CAAE,KAAAsR,EAAM,SAAUhS,GAAKA,EAAE,UAAY,GAAU,OAAQiS,CAAI,EACjEjS,GAAKA,EAAE,OAAMU,EAAE,KAAOV,EAAE,MACxBA,GAAKA,EAAE,cAAaU,EAAE,YAAcV,EAAE,aAC1CU,EAAE,OAASV,GAAK,OAAOA,EAAE,QAAW,SAAWA,EAAE,OAAS,IAC1D,MAAMkS,EAAYlS,EAAKA,EAAE,OAAS,OAASA,EAAE,SAAW,CAAC,GAAGA,EAAE,YAAY,EAAIA,EAAE,OAAU,KAC1F,GAAIgS,IAAS,MACPhS,GAAKA,EAAE,OAAS,OAASU,EAAE,SAAWV,EAAE,SAAW,CAAC,GAAG,MAAM,EAAGU,EAAE,aAAeV,EAAE,cAC9EkS,GAAa,MAAQ,OAAOA,CAAS,IAAM,IAAMxR,EAAE,QAAU,CAAC,OAAOwR,CAAS,EAAG,GAAI,EAAE,EAAGxR,EAAE,aAAe,GAC7GA,EAAE,QAAU,CAAC,GAAI,GAAI,EAAE,UACrBsR,IAAS,OAClBtR,EAAE,OAASwR,GAAa,KAAO,OAAOA,CAAS,EAAI,GACnDxR,EAAE,SAAWV,GAAKA,EAAE,OAAS,QAAUA,EAAE,UAAY,CAAC,GAAG,MAAM,EAAI,CAAC,MAC/D,CACL,MAAMd,EAAI,YAAYgT,EAAWpT,CAAI,EACrC4B,EAAE,OAAS,MAAMxB,CAAC,EAAI,KAAOA,EACzBc,GAAKA,EAAE,OAAMU,EAAE,KAAOV,EAAE,MACxBgS,IAAS,WAAUtR,EAAE,UAAYV,GAAKA,EAAE,OAAS,UAAYA,EAAE,WAAa,EAClF,CACA,OAAOU,CACT,CAEA,SAAS,qBAAqB,CAAE,KAAAY,EAAM,QAAAU,EAAS,MAAAmQ,EAAO,KAAAxQ,EAAM,KAAA7C,EAAM,OAAAmD,EAAQ,MAAA8L,EAAO,SAAAxK,EAAU,QAAAyN,EAAS,OAAAoB,EAAQ,SAAAC,EAAU,UAAAlC,CAAU,EAAG,CACjI,KAAM,CAACmC,EAAUC,CAAW,EAAI,MAAM,SAAS,EAAK,EACpD,MAAM,UAAU,IAAM,CAAEA,EAAY,EAAK,CAAG,EAAG,CAACvQ,GAAWA,EAAQ,EAAE,CAAC,EACtE,MAAMd,EAAI,OAAO,YACXD,EAAKe,EAELwQ,EAAU,mBAAmBlR,GAAQL,GAAMA,EAAG,OAAS,OAASA,EAAG,IAAM,IAAKK,GAAQL,GAAMA,EAAG,OAAS,OAASA,EAAG,IAAM,IAAKnC,CAAI,EACnI4R,EAASzP,GAAM,CAAC8M,EAAQ,sBAAsB9M,EAAInC,CAAI,EAAI,CAAC,EAC3DkR,EAAO/O,GAAMA,EAAG,OAAS,OAAS,aAAaA,EAAG,MAAM,EAAI,KAC5DwR,EAAW,aAAazC,EAAMlR,CAAI,EAClC,EAAImC,EAAKA,EAAG,OAAS,KACrBP,EAAI,cAAcO,CAAE,EACpBgR,EAAMhR,GAAMA,EAAG,OAAS,OAAS,SAAW,SAC5CyR,EAAW1C,EAAO9O,EAAE,eAAe8O,EAAMrO,EAAK,SAAU7C,CAAI,EAAI,KAChE6T,EAAa1R,GAAMA,EAAG,OAAS,QAAUyR,IAAa,CAAC,GAAK,EAAE,SAAW,QAGzEE,EAAO3E,GAAU1K,EAASe,IAAQ,CAAE,GAAGA,EAAK,GAAG2J,CAAM,EAAE,EACvD4E,EAAQ5E,GAAU1K,EAASe,IAAQ,CACvC,GAAGA,EAAK,SAAU,GAAO,OAAQ,CAAE,GAAIA,EAAI,QAAU,CAAE,KAAM,OAAQ,SAAU,GAAI,OAAQ,GAAI,OAAQ,GAAI,EAAI,GAAG2J,EAAO,OAAQgE,CAAI,CACvI,EAAE,EACIa,EAAYC,IAAW9Q,GAAU,CAAC,GAAG,KAAK5C,GAAK0T,EAAM,QAAQ1T,EAAE,IAAI,GAAK,CAAC,EAGzE2T,EAAWP,EAAW,CAACA,EAAS,KAAMA,EAAS,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK;AAAA;AAAA,CAAM,EAAE,QAAQ,cAAe,EAAE,EAAI,GAEhHQ,EAAYhS,EAAK,EAAE,kBAAoBA,EAAG,KAAMnC,CAAI,EAAI,GAC9D,OACE,oBAAC,YAAW,KAAMwC,EAAM,QAAS0P,EAAS,KAAMlS,EAAM,UAAU,MAAM,OAAQ,IAC5E,OAAQmC,EAAK,UAAU,2BAA4BnC,EAAM,CAAE,EAAGqT,EAAO,KAAMc,CAAU,CAAC,EAAI,GAC1F,MAAOhS,EAAMA,EAAG,OAAS,EAAE,6BAA8BnC,CAAI,EAAK,GAClE,OAAQmC,GACN,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,CAAE,GACpC,oBAAC,aAAY,QAAQ,QAAQ,QAASoR,EAAU,KAAM,aAAa,MAAO,UAAW,EAAE,2BAA4BvT,CAAI,EAAG,MAAO,CAAE,MAAO,cAAe,EAAG,EAC5J,oBAAC,aAAY,KAAI,GAAC,QAASkS,EAAS,MAAO,CAAE,KAAM,CAAE,GAAI,EAAE,yBAA0BlS,CAAI,CAAE,CAC7F,GAEDmC,GACC,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,GAAI,cAAe,CAAE,IAC9EgB,GAAU,CAAC,GAAG,IAAI,CAAC5C,EAAGJ,IACtB,oBAAC,cAAa,IAAKA,EAAG,KAAMI,EAAE,QAAU,QAAU,QAAU,OAAQ,KAAMA,EAAE,QAAU,QAAU,IAAM,KAAM,MAAO8Q,EAAU9Q,CAAC,EAAG,CAClI,EAED,oBAAC,YAAW,MAAO,EAAE,0BAA2BP,CAAI,EAAG,QAAQ,oBAC7D,oBAAC,YAAW,GAAG,mBAAmB,MAAOmC,EAAG,OAAS,GAAI,UAAW,GAAI,SAAUM,GAAKqR,EAAI,CAAE,MAAOrR,EAAE,OAAO,KAAM,CAAC,EAAG,CACzH,EAECN,EAAG,OAAS,QACX,oBAAC,OAAI,MAAO,CAAE,QAAS,YAAa,aAAc,GAAI,WAAY,mBAAoB,OAAQ,yBAA0B,GACtH,oBAAC,aAAY,MAAM,eAAe,MAAO,CAAE,SAAU,EAAG,GAAI,EAAE,gCAAiCnC,CAAI,CAAE,EACpG2T,EACC,wCACE,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,EAAG,GAAIA,EAAS,KAAM,EACrG,oBAAC,OAAI,MAAO,CACV,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,KAAM,MAAO,eAC9F,UAAW,UAAW,QAAS,OAAQ,WAAY,WACnD,GAAIH,EAAW,KAAO,CAAE,QAAS,cAAe,gBAAiB,EAAG,gBAAiB,WAAY,SAAU,QAAS,CACtH,GAAIU,CAAS,EACZA,EAAS,OAAS,KACjB,oBAAC,UAAO,KAAK,SAAS,UAAU,YAAY,QAAS,IAAMT,EAAY5S,GAAK,CAACA,CAAC,EAAG,MAAO,CACtF,UAAW,EAAG,UAAW,GAAI,QAAS,QAAS,OAAQ,OAAQ,WAAY,cAAe,OAAQ,UAClG,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,MAAO,cAChE,GAAI,EAAE2S,EAAW,yBAA2B,yBAA0BxT,CAAI,CAAE,EAE9E,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,SAAU,KAAM,MAAO,cAAe,GAAI,EAAE,8BAA+BA,CAAI,CAAE,CACvI,EAEA,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAI,EAAE,gCAAiCA,CAAI,CAAE,CAEzI,EAGDmC,EAAG,OAAS,QACX,oBAAC,YAAW,MAAO,EAAEA,EAAG,OAAS,OAAS,6BAA+B,yBAA0BnC,CAAI,EACrG,KAAM,EAAEmC,EAAG,OAAS,OAAS,iCAAmC,6BAA8BnC,CAAI,EAAG,QAAQ,mBAC7G,oBAAC,eAAc,GAAG,kBAAkB,KAAM,EAAG,MAAOmC,EAAG,MAAQ,GAAI,SAAUM,GAAKqR,EAAI,CAAE,KAAMrR,EAAE,OAAO,KAAM,CAAC,EAAG,CACnH,EAGF,oBAAC,YAAW,MAAO,EAAE,yBAA0BzC,CAAI,EAAG,KAAM,EAAE,6BAA8BA,CAAI,EAAG,QAAQ,mBACzG,oBAAC,eAAc,GAAG,kBAAkB,KAAM,EAAG,MAAOmC,EAAG,MAAQ,GAAI,SAAUM,GAAKqR,EAAI,CAAE,KAAMrR,EAAE,OAAO,KAAM,CAAC,EAC5G,YAAa,EAAE,oCAAqCzC,CAAI,EAAG,CAC/D,EAEA,oBAAC,YAAW,MAAO,EAAE,0BAA2BA,CAAI,GAClD,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,GAAI,SAAU,MAAO,GAC7E,oBAAC,QAAK,MAAO,CAAE,KAAM,EAAG,SAAU,GAAI,GACnC0T,GAAW,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,KAAM,MAAO,aAAc,aAAc,UAAW,GAAIA,CAAQ,EAChL,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,WAAY,WAAY,SAAU,GAAI,cAAe,SAAU,MAAO,cAAe,GACnHvR,EAAG,IAAI,QAAQ,CAAC,EAAE,KAAGA,EAAG,IAAI,QAAQ,CAAC,CACxC,CACF,EACA,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,KAAK,KAAK,QAASmR,GAAS,EAAE,yBAA0BtT,CAAI,CAAE,CACvG,CACF,EAECmC,EAAG,OAAS,OACX,oBAAC,cAAa,KAAK,MAAM,EAAE,mCAAoCnC,CAAI,CAAE,EAErE,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,GAAI,WAAY,GAAI,UAAW,yBAA0B,GACpH,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAE,GAC1D,oBAAC,OAAI,MAAO,CAAE,KAAM,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,EAAG,GAAI,EAAE,oBAAqBA,CAAI,CAAE,EAC7G,GAAK,EAAE,SAAW,QAAU,oBAAC,eAAW,EAAE,uBAAwBA,CAAI,CAAE,EACxE,GAAK,EAAE,SAAW,UAAY,oBAAC,WAAU,OAAM,GAAC,MAAM,kBAAkB,EAAE,qBAAsBA,CAAI,CAAE,CACzG,EACA,oBAAC,OAAI,KAAK,aAAa,aAAY,EAAE,mBAAoBA,CAAI,EAAG,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,CAAE,GAChH,eAAe,IAAIG,GAClB,oBAAC,WAAU,IAAKA,EAAG,OAAQyB,IAAMzB,EAAG,QAAS,IAAM,CAAMyB,IAAMzB,GAAGsE,EAASe,IAAQ,CAAE,GAAGA,EAAK,OAAQ,sBAAsBA,EAAI,OAAQrF,EAAGgT,EAAKnT,CAAI,EAAG,SAAUG,IAAM,MAAO,EAAE,CAAG,GAC/K,EAAE,mBAAqBA,EAAGH,CAAI,CACjC,CACD,CACH,EACA,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,SAAU,GAAI,WAAY,KAAM,MAAO,eAAgB,UAAW,EAAG,GAAI,EAAE,mBAAqB4B,EAAI,QAAS5B,CAAI,CAAE,EACxJ4B,IAAM,YACL,oBAAC,cAAa,KAAK,KAAK,MAAO,EAAE,gCAAiC5B,CAAI,GAAI,EAAE,2BAA4BA,CAAI,CAAE,EAE/G4R,EAAO,OAAO,GAAK,IAAM,eAAe,EAAE,IAAI,GAC7C,oBAAC,cAAa,IAAK,EAAG,KAAK,OAAO,KAAK,KAAK,MAAO,EAAE,mBAAqB,EAAG5R,CAAI,GAAI,EAAE,mBAAqB,EAAI,QAASA,CAAI,CAAE,CAChI,EAEA6T,GACC,oBAAC,aAAY,QAAQ,YAAY,KAAK,KAAK,KAAK,IAAI,QAAS,IAAMpP,EAASe,IAAQ,CAAE,GAAGA,EAAK,OAAQoO,EAAU,SAAU,EAAM,EAAE,GAAI,EAAE,sBAAuB5T,CAAI,CAAE,EAGtK,GACC,wCACE,oBAAC,YAAW,MAAO,EAAE,uBAAwBA,CAAI,EAAG,QAAQ,aAC1D,oBAAC,eAAc,GAAG,YAAY,KAAM,EAAG,MAAO,EAAE,UAAY,GAAI,QAAS,CAACiP,GAAS,CAAC,OAAO,EAAE,UAAY,EAAE,EAAE,KAAK,EAChH,SAAUxM,GAAKsR,EAAK,CAAE,SAAUtR,EAAE,OAAO,KAAM,CAAC,EAAG,YAAa,EAAE,mCAAqC,EAAE,KAAMzC,CAAI,EAAG,CAC1H,EAEC,EAAE,OAAS,OACV,oBAAC,YAAW,MAAO,EAAE,sBAAuBA,CAAI,EAAG,KAAM,EAAE,0BAA2BA,CAAI,EACxF,MAAOgU,EAAS,CAAC,gBAAgB,CAAC,EAAI,EAAE,0BAA2BhU,CAAI,EAAI,MAC3E,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,IAC3D,EAAE,SAAW,CAAC,GAAG,IAAI,CAACoJ,EAAGgL,IAAO,CAChC,MAAMC,EAAU,EAAE,eAAiBD,EACnC,OACE,oBAAC,OAAI,IAAKA,EAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAE,GACnE,oBAAC,UAAO,KAAK,SAAS,KAAK,QAAQ,eAAcC,EAAS,UAAU,YAClE,aAAY,UAAU,0BAA2BrU,EAAM,CAAE,EAAGoU,EAAK,CAAE,CAAC,EACpE,QAAS,IAAML,EAAK,CAAE,aAAcK,CAAG,CAAC,EAAG,MAAO,CAChD,MAAO,GAAI,OAAQ,GAAI,WAAY,EAAG,aAAc,GAAI,OAAQ,UAAW,QAAS,EACpF,OAAQC,EAAU,OAAS,8BAC3B,WAAYA,EAAU,0BAA4B,mBAAoB,MAAOA,EAAU,UAAY,eACnG,WAAY,WAAY,WAAY,IAAK,SAAU,EACrD,GAAG,GAAC,EACN,oBAAC,YAAW,MAAOjL,EAAG,SAAU3G,GAAK,CACnC,MAAMpC,GAAO,EAAE,SAAW,CAAC,GAAG,MAAM,EAAGA,EAAI+T,CAAE,EAAI3R,EAAE,OAAO,MAAOsR,EAAK,CAAE,QAAS1T,CAAI,CAAC,CACxF,EAAG,YAAa,UAAU,gCAAiCL,EAAM,CAAE,EAAGoU,EAAK,CAAE,CAAC,EAAG,GAC/E,EAAE,SAAW,CAAC,GAAG,OAAS,GAC1B,oBAAC,iBAAgB,MAAO,EAAE,2BAA4BpU,CAAI,EAAG,QAAS,IAAM,CAC1E,MAAMK,GAAO,EAAE,SAAW,CAAC,GAAG,OAAO,CAACiU,EAAGnU,KAAMA,KAAMiU,CAAE,EACvD,IAAI7E,EAAM,EAAE,aACRA,IAAQ6E,EAAI7E,EAAM,OAAoB,OAAOA,GAAQ,UAAYA,EAAM6E,IAAI7E,GAAO,GACtFwE,EAAK,CAAE,QAAS1T,EAAK,aAAckP,CAAI,CAAC,CAC1C,GACE,oBAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,cAAY,QAAO,oBAAC,QAAK,EAAE,6BAA6B,OAAO,eAAe,YAAY,MAAM,cAAc,QAAQ,CAAE,CAC1K,CAEJ,CAEJ,CAAC,GACC,EAAE,SAAW,CAAC,GAAG,OAAS,GAC1B,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,KAAK,IAAI,QAAS,IAAMwE,EAAK,CAAE,SAAU,EAAE,SAAW,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAE,CAAC,GAAI,EAAE,wBAAyB/T,CAAI,CAAE,CAExJ,CACF,EAGD,EAAE,OAAS,QACV,wCACE,oBAAC,YAAW,MAAO,EAAE,qBAAsBA,CAAI,EAAG,QAAQ,YACxD,MAAOgU,EAAS,CAAC,gBAAgB,CAAC,EAAI,EAAE,4BAA6BhU,CAAI,EAAI,MAC7E,oBAAC,YAAW,GAAG,YAAY,MAAO,EAAE,QAAU,KAAO,GAAK,OAAO,EAAE,MAAM,EAAG,SAAUyC,GAAKsR,EAAK,CAAE,OAAQtR,EAAE,OAAO,KAAM,CAAC,EAAG,CAC/H,EACA,oBAAC,YAAW,MAAO,EAAE,uBAAwBzC,CAAI,EAAG,KAAM,EAAE,2BAA4BA,CAAI,EAAG,QAAQ,eACrG,oBAAC,YAAW,GAAG,cAAc,OAAQ,EAAE,UAAY,CAAC,GAAG,KAAK,IAAI,EAC9D,SAAUyC,GAAKsR,EAAK,CAAE,SAAUtR,EAAE,OAAO,MAAM,MAAM,GAAG,EAAE,IAAIoB,GAAKA,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,CAAE,CAAC,EAAG,CACrG,CACF,GAGA,EAAE,OAAS,UAAY,EAAE,OAAS,aAClC,wCACE,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,oBAAqB,YAAa,IAAK,EAAG,GACvE,oBAAC,YAAW,MAAO,EAAE,EAAE,OAAS,WAAa,wBAA0B,2BAA4B7D,CAAI,EAAG,QAAQ,cAChH,MAAOgU,EAAS,CAAC,gBAAgB,CAAC,EAAI,EAAE,4BAA6BhU,CAAI,EAAI,MAC7E,oBAAC,kBAAiB,GAAG,cAAc,KAAMA,EAAM,MAAO,EAAE,OAAQ,SAAUa,GAAKkT,EAAK,CAAE,OAAQlT,CAAE,CAAC,EAAG,QAASmT,EAAS,CAAC,gBAAgB,CAAC,EAAG,CAC7I,EACA,oBAAC,YAAW,MAAO,EAAE,mBAAoBhU,CAAI,EAAG,QAAQ,gBACtD,oBAAC,YAAW,GAAG,eAAe,MAAO,EAAE,MAAQ,GAAI,UAAW,GAAI,YAAa,EAAE,8BAA+BA,CAAI,EAClH,SAAUyC,GAAKsR,EAAK,CAAE,KAAMtR,EAAE,OAAO,KAAM,CAAC,EAAG,CACnD,CACF,EACC,EAAE,OAAS,UACV,oBAAC,YAAW,MAAO,EAAE,wBAAyBzC,CAAI,EAAG,KAAM,EAAE,4BAA6BA,CAAI,EAAG,QAAQ,eACvG,oBAAC,kBAAiB,GAAG,cAAc,KAAMA,EAAM,MAAO,EAAE,WAAa,EAAG,SAAUa,GAAKkT,EAAK,CAAE,UAAW,OAAOlT,GAAM,SAAW,KAAK,IAAIA,CAAC,EAAI,CAAE,CAAC,EAAG,CACvJ,EAED,EAAE,OAAS,YAAc+Q,EAAO,QAAQ,eAAe,GAAK,GAC3D,oBAAC,cAAa,KAAK,OAAO,KAAK,KAAK,MAAO,EAAE,gCAAiC5R,CAAI,EAChF,OAAQ,oBAAC,aAAY,KAAK,KAAK,QAAQ,YAAY,QAAS,IAAMyE,EAASe,IAAQ,CAAE,GAAGA,EAAK,OAAQ,sBAAsBA,EAAI,OAAQ,SAAU2N,EAAKnT,CAAI,EAAG,SAAU,EAAM,EAAE,GAAI,EAAE,yBAA0BA,CAAI,CAAE,GACpN,EAAE,qCAAsCA,CAAI,CAC/C,EAED,EAAE,OAAS,YACV,oBAAC,cAAa,KAAK,OAAO,KAAK,KAAK,MAAO,EAAE,4BAA6BA,CAAI,GAAI,EAAE,2BAA4BA,CAAI,CAAE,CAE1H,EAGF,oBAAC,YAAW,MAAO,EAAE,mBAAoBA,CAAI,EAAG,KAAM,EAAE,uBAAwBA,CAAI,EAAG,QAAQ,gBAC7F,oBAAC,YAAW,GAAG,eAAe,MAAO,EAAE,MAAQ,GAAI,SAAUyC,GAAKsR,EAAK,CAAE,KAAMtR,EAAE,OAAO,KAAM,CAAC,EAAG,CACpG,EAEA,oBAAC,YAAW,MAAO,EAAE,0BAA2BzC,CAAI,EAAG,KAAM,EAAE,8BAA+BA,CAAI,EAAG,QAAQ,gBAC3G,oBAAC,eAAc,GAAG,eAAe,KAAM,EAAG,MAAO,EAAE,aAAe,GAAI,SAAUyC,GAAKsR,EAAK,CAAE,YAAatR,EAAE,OAAO,KAAM,CAAC,EAAG,CAC9H,EAEC,EAAE,OAAS,YACV,oBAAC,YAAW,MAAO,EAAE,qBAAsBzC,CAAI,EAAG,KAAM,EAAE,yBAA0BA,CAAI,GACtF,oBAAC,cAAa,MAAO,OAAO,EAAE,QAAW,SAAW,EAAE,OAAS,IAAK,IAAK,GAAI,IAAK,IAAK,KAAM,GAAI,KAAMA,EACrG,UAAW,EAAE,qBAAsBA,CAAI,EAAG,SAAUa,GAAKkT,EAAK,CAAE,OAAQlT,CAAE,CAAC,EAAG,CAClF,CAEJ,CAEJ,CAEJ,CAEJ,CAEJ,CAKA,SAAS,iBAAiBgC,EAAMzC,EAAGJ,EAAM,CACvC,MAAMoC,EAAI,OAAO,YACjB,GAAI,CAACS,GAAQ,CAACA,EAAK,UAAY,CAACA,EAAK,SAAS,QAAU,CAACA,EAAK,MAAO,OAAO,KAC5E,MAAM9B,EAAIqB,EAAE,SAASS,EAAMzC,CAAC,EACtBmU,EAAO,OAAO,KAAKxT,EAAE,SAAS,EAAE,IAAIZ,GAAKY,EAAE,UAAUZ,CAAC,CAAC,EACvDqU,EAAM,KAAK,IAAI,MAAM,KAAMD,CAAI,EAAGE,EAAM,KAAK,IAAI,MAAM,KAAMF,CAAI,EACjEG,EAAS,CAAC,EAChB,QAASvU,EAAI,EAAGA,GAAK,EAAGA,IAASA,IAAMC,GAAKgC,EAAE,SAASS,EAAM1C,CAAC,EAAE,MAAMuU,EAAO,KAAKvU,CAAC,EACnF,MAAMwU,EAAM9Q,GAAM,WAAW,aAAaA,EAAG7D,CAAI,CAAC,EAClD,MAAO,CAAE,KAAMe,EAAE,KAAM,IAAK4T,EAAGH,CAAG,EAAG,IAAKG,EAAGF,CAAG,EAAG,OAAAC,CAAO,CAC5D,CAEA,SAAS,mBAAmB,CAAE,OAAAzH,EAAQ,KAAAjN,EAAM,MAAA4F,EAAO,MAAAC,EAAO,KAAAC,EAAM,OAAA3B,EAAQ,WAAAkC,EAAY,UAAAuE,EAAW,UAAAnE,CAAU,EAAG,CAC1G,KAAM,CAAC5D,EAAMsK,CAAO,EAAI,MAAM,SAAS,IAAI,EACrC,CAACjJ,EAAO+G,CAAQ,EAAI,MAAM,SAAS,EAAE,EACrC,CAAC2J,EAAMC,CAAO,EAAI,MAAM,SAAS,IAAM,CAC3C,MAAMxT,EAAI,IAAI,KACd,OAAOA,EAAE,YAAY,EAAI,IAAM,OAAOA,EAAE,SAAS,EAAI,CAAC,EAAE,SAAS,EAAG,GAAG,EAAI,IAAM,OAAOA,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAG,GAAG,CACtH,CAAC,EACK,CAACyT,EAAMC,CAAO,EAAI,MAAM,SAAS,EAAE,EACnC,CAACtU,EAAWuU,CAAY,EAAI,MAAM,SAAS,CAAC,EAC5C,CAACC,EAAYC,CAAa,EAAI,MAAM,SAAS,QAAQ,EACrD,CAACC,EAASC,CAAU,EAAI,MAAM,SAAS,MAAM,EAC7C,CAACC,EAAeC,CAAgB,EAAI,MAAM,SAAS,CAAC,EACpD,CAACC,EAAYC,CAAa,EAAI,MAAM,SAAS,EAAE,EAC/C,CAACC,EAAaC,CAAc,EAAI,MAAM,SAAS,CAAC,CAAC,EACjD,CAACC,EAAWC,CAAY,EAAI,MAAM,SAAS,IAAI,EAC/C,CAAC5D,EAAa6D,CAAc,EAAI,MAAM,SAAS,KAAK,EACpD,CAACC,EAAUC,CAAW,EAAI,MAAM,SAAS,EAAI,EAC7C,CAACC,EAAYC,EAAa,EAAI,MAAM,SAAS,EAAK,EAClD,CAACC,EAAWC,EAAY,EAAI,MAAM,SAAS,CAAC,CAAC,EAC7C,CAACC,GAAQC,EAAS,EAAI,MAAM,SAAS,EAAK,EAC1C,CAACzM,GAAMC,CAAO,EAAI,MAAM,SAAS,EAAK,EACtC,CAAC2D,EAASC,CAAU,EAAI,MAAM,SAAS,EAAK,EAqClD,GAnCA,MAAM,UAAU,IAAM,CACpB,IAAIxL,EAAQ,GACZ,OAAC,SAAY,CACX,MAAMK,GAAI,OAAO,WAEjB,IAAImG,GAAK,KACT,GAAI,CAAEA,GAAK,MAAMnG,GAAE,QAAQ2K,CAAM,CAAG,MAAY,CAAExE,GAAK,IAAM,CAC7D,GAAI,CAACxG,EAAO,OACZ,GAAI,CAACwG,GAAI,CAAEgF,EAAW,EAAI,EAAG,MAAQ,CACrC,MAAM5F,GAAKY,GAAG,UAAY,CAAC,EAC3B0E,EAAQ1E,EAAE,EACVwC,EAASxC,GAAG,OAAS,EAAE,EACvBuM,EAAanN,GAAG,kBAAoB,CAAC,EACrC+N,EAAa,CAAC/N,GAAG,aAAe,EAAI,CAACA,GAAG,aAAe,IAAI,EAC3DgO,EAAehO,GAAG,aAAe,KAAK,EAEtC,GAAI,CACF,MAAMyO,IAAQ,MAAMhU,GAAE,WAAWuD,CAAK,GAAM,CAAC,GAAG,OAAOpD,IAAKA,IAAKA,GAAE,SAAWwK,CAAM,EACpFqJ,GAAI,KAAK,CAAChW,GAAGsC,KAAM,OAAOA,GAAE,WAAa,EAAE,EAAE,cAAc,OAAOtC,GAAE,WAAa,EAAE,CAAC,CAAC,EACrF,MAAMiW,GAAOD,GAAI,CAAC,EAClB,GAAI,CAACrU,GAAS,CAACsU,GAAM,OACrB,MAAMC,GAAOD,GAAK,MAAQA,GAAK,KAAK,UAAa,CAAC,EAC9CA,GAAK,WAAWvB,EAAauB,GAAK,SAAS,EAC3CA,GAAK,YAAYrB,EAAcqB,GAAK,UAAU,EAClDX,EAAa,CAACY,GAAI,aAAe,EAAI,CAACA,GAAI,aAAe,IAAI,EACzDA,GAAI,aAAaX,EAAeW,GAAI,WAAW,EACnD,MAAMC,GAAMF,GAAK,UAAY,CAAC,EAC9BR,EAAYU,GAAI,WAAa,EAAK,EAClCR,GAAcQ,GAAI,aAAe,EAAI,EACrCJ,GAAU,EAAI,CAChB,MAAY,CAA4B,CAC1C,GAAG,EACI,IAAM,CAAEpU,EAAQ,EAAO,CAChC,EAAG,CAACgL,EAAQpH,CAAK,CAAC,EAEd2H,EACF,OACE,oBAAC,WACC,oBAAC,gBAAe,OAAQ,EAAE,yBAA0BxN,CAAI,EAAG,MAAO,EAAE,0BAA2BA,CAAI,EAAG,OAAQmE,EAAQ,KAAMnE,EAAM,EAClI,oBAAC,YAAW,KAAK,MAAM,MAAO,EAAE,2BAA4BA,CAAI,EAAG,OAAQ,oBAAC,aAAY,QAASmE,GAAS,EAAE,2BAA4BnE,CAAI,CAAE,EAAgB,CAChK,EAGJ,GAAI,CAAC6C,EAAM,OAAO,oBAAC,cAAa,KAAM7C,EAAM,MAAO,iBAAkB,OAAQmE,EAAQ,MAAO,CAAE,WAAY,EAAG,EAAG,EAEhH,MAAM/B,GAAI,OAAO,YACXsU,EAAUtU,GAAE,eAAiB,GAC7BuU,EAAcC,GAAO,OAAOV,EAAUU,CAAE,GAAK,EAAE,EAAE,KAAK,EACtDC,GAAYzU,GAAE,aAAa3B,EAAWT,CAAI,EAC1C8W,GAAQD,GAAU,IAAI3U,GAAOyU,EAAWzU,EAAG,EAAE,EAAI,CAAE,GAAGA,EAAI,KAAMyU,EAAWzU,EAAG,EAAE,CAAE,EAAIA,CAAG,EACzF6U,EAAQxB,EAAW,MAAM;AAAA,CAAI,EAAE,IAAI1R,GAAKA,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,EAChEmT,EAAO,CAAC,EACRC,EAAcF,EAAM,OAAO3W,GAAK,CAAE,MAAMD,GAAIC,EAAE,YAAY,EAAG,OAAI4W,EAAK7W,EAAC,EAAU,IAAO6W,EAAK7W,EAAC,EAAI,GAAa,GAAM,CAAC,EACtH+W,EAAO,iBAAiBrU,EAAMpC,EAAWT,CAAI,EAE7CmX,GAAS,CAAE,GAAGtU,EAAM,SAAU,CAAE,GAAIA,EAAK,UAAY,CAAC,EAAI,aAAc8S,GAAa,KAAM,YAAA3D,CAAY,CAAE,EACzGoF,EAAYhV,GAAE,aAAa+U,GAAQ,CAAE,UAAA1W,EAAW,aAAckV,GAAa,IAAK,CAAC,EACjFxS,GAASiU,EAAU,OAAO7W,GAAKA,EAAE,QAAU,OAAO,EAClD8W,GAAYD,EAAU,KAAK7W,GAAKA,EAAE,OAAS,iBAAiB,EAC5D+W,GAAWF,EAAU,KAAK7W,GAAKA,EAAE,OAAS,WAAW,EAErDgX,GAAUC,GAAS,CACvB,MAAM3W,GAAI4U,EAAY+B,EAAK,YAAY,CAAC,EACxC,OAAO3W,IAAKA,IAAKJ,EAAYI,GAAI,IACnC,EACM4W,GAAiB,IAAM,CAC3B,MAAM5I,EAAO,CAAC,EACdoI,EAAY,QAAQ,CAAC7W,GAAGG,KAAM,CAAEsO,EAAKzO,GAAE,YAAY,CAAC,EAAKG,GAAIE,EAAa,CAAG,CAAC,EAC9EiV,EAAe7G,CAAI,CACrB,EAEM6I,GAAS,SAAY,CACzB7N,EAAQ,EAAI,EACZ,GAAI,CACF,MAAM8N,EAASV,EAAY,IAAI7W,KAAM,CAAE,KAAMA,GAAG,KAAM6U,IAAe,SAAWsC,GAAOnX,EAAC,EAAI,IAAK,EAAE,EAE7FwX,GAAU9R,GAAQA,EAAK,KAAO,OAAOA,EAAK,IAAI,EAAE,KAAK,EAAI,GACzD+R,GAAeD,GAAU,CAAE,GAAGT,GAAQ,cAAeS,EAAQ,EAAIT,GAEvE,IAAIW,GAAOlD,GAAQ,KACnB,GAAIA,GAAQE,GAAQ,gBAAgB,KAAKA,CAAI,EAAG,CAC9C,MAAMzT,GAAI,IAAI,KAAKuT,EAAO,IAAME,CAAI,EAC/B,MAAMzT,GAAE,QAAQ,CAAC,IAAGyW,GAAOzW,GAAE,YAAY,EAChD,CACA,MAAM0W,GAAK,CAAC,EACZ,IAAIC,GAAU,GACdnB,GAAU,QAAQ3U,IAAM,CAAMyU,EAAWzU,GAAG,EAAE,IAAK6V,GAAG7V,GAAG,EAAE,EAAIyU,EAAWzU,GAAG,EAAE,EAAG8V,GAAU,GAAQ,CAAC,EACrG,MAAM7O,GAAK,MAAM,OAAO,WAAW,YAAY0O,GAAc,CAC3D,MAAO3T,EAAM,KAAK,GAAKrB,EAAK,MAAO,KAAMiV,GAAM,UAAArX,EAAW,WAAAwU,EAC1D,cAAeE,EAAS,cAAeA,IAAY,YAAcE,EAAgB,KACjF,OAAAsC,EAAQ,KAAA3X,EAAM,QAAS6F,EACvB,SAAU,CAAE,SAAAiQ,EAAU,WAAYE,GAAciB,EAAY,OAAS,CAAE,EACvE,UAAWe,GAAUD,GAAK,MAC5B,CAAC,EACDnN,EAAUzB,GAAG,EAAE,CACjB,OAAS1G,EAAG,CACV,QAAQ,KAAK,yBAA0BA,CAAC,EACxCgE,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,EAC5C6J,EAAQ,EAAK,CACf,CACF,EAEA,OACE,oBAAC,WACC,oBAAC,gBAAe,OAAQ,EAAE,yBAA0B7J,CAAI,EAAG,MAAO6C,EAAK,OAAS,EAAE,0BAA2B7C,CAAI,EAAG,OAAQmE,EAAQ,KAAMnE,EAAM,EAChJ,oBAAC,OAAI,MAAO,CAAE,QAAS,cAAe,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,GACrFmD,GAAO,OAAS,GACf,oBAAC,cAAa,KAAK,QAAQ,KAAK,IAAI,MAAO,EAAE,6BAA8BnD,CAAI,EAC7E,OAAQ,oBAAC,aAAY,KAAK,KAAK,QAAQ,YAAY,QAAS,IAAMqG,EAAWxD,EAAK,EAAE,GAAI,EAAE,0BAA2B7C,CAAI,CAAE,GAC1H,EAAE,iCAAkCA,CAAI,CAC3C,EAEDoW,IAAU,oBAAC,cAAa,KAAK,KAAK,EAAE,yBAA0BpW,CAAI,CAAE,EAErE,oBAAC,YAAW,MAAO,EAAE,uBAAwBA,CAAI,EAAG,QAAQ,mBAAmB,KAAM,EAAE,2BAA4BA,CAAI,GACrH,oBAAC,YAAW,GAAG,mBAAmB,MAAOkE,EAAO,UAAW,GAAI,SAAUzB,GAAKwI,EAASxI,EAAE,OAAO,KAAK,EAAG,CAC1G,EAEA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,oBAAqB,YAAa,IAAK,EAAG,GACvE,oBAAC,YAAW,MAAO,EAAE,uBAAwBzC,CAAI,EAAG,QAAQ,mBAC1D,oBAAC,YAAW,GAAG,kBAAkB,KAAK,OAAO,MAAO4U,EAAM,SAAUnS,GAAKoS,EAAQpS,EAAE,OAAO,KAAK,EAAG,CACpG,EACA,oBAAC,YAAW,MAAO,EAAE,uBAAwBzC,CAAI,EAAG,QAAQ,mBAC1D,oBAAC,YAAW,GAAG,kBAAkB,KAAK,OAAO,MAAO8U,EAAM,KAAM,IAAK,SAAUrS,GAAKsS,EAAQtS,EAAE,OAAO,KAAK,EAAG,CAC/G,CACF,EACCmS,GACC,oBAAC,OAAI,MAAO,CAAE,UAAW,IAAK,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,KAAM,MAAO,cAAe,GAC1H,UAAUE,EAAO,2BAA6B,6BAA8B9U,EAAM,CAAE,KAAM8U,EAAO,gBAAgBF,EAAM5U,CAAI,EAAI,KAAO8U,EAAO,gBAAgBF,EAAM5U,CAAI,CAAE,CAAC,CAC7K,EAGF,oBAAC,iBAAgB,MAAO,EAAE,0BAA2BA,CAAI,EAAG,KAAM,EAAE,8BAA+BA,CAAI,GACrG,oBAAC,mBAAkB,MAAO2V,EAAW,KAAM3V,EAAM,SAAU4V,EAAc,EACxEyB,IAAa,oBAAC,cAAa,KAAK,OAAO,KAAK,MAAM,kBAAkBA,GAAWrX,EAAM,KAAMS,CAAS,CAAE,EACtG6W,IAAY,oBAAC,cAAa,KAAK,MAAM,kBAAkBA,GAAUtX,EAAM,KAAMS,CAAS,CAAE,CAC3F,EAEA,oBAAC,YAAW,MAAO,EAAE,sBAAuBT,CAAI,EAAG,KAAM,EAAE,uBAAyBgS,EAAc,QAAShS,CAAI,GAC7G,oBAAC,gBAAe,UAAW,EAAE,sBAAuBA,CAAI,EAAG,MAAOgS,EAAa,SAAU6D,EACvF,QAAS,CAAC,MAAO,MAAO,MAAM,EAAE,IAAI,IAAM,CAAE,MAAO,EAAG,MAAO,EAAE,uBAAyB,EAAG7V,CAAI,CAAE,EAAE,EAAG,CAC1G,EAEA,oBAAC,iBAAgB,MAAO,EAAE,wBAAyBA,CAAI,EAAG,KAAM,EAAE,4BAA6BA,CAAI,GACjG,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,GAAI,SAAU,MAAO,GAC7E,oBAAC,cAAa,MAAOS,EAAW,IAAK,EAAG,IAAK,EAAG,KAAMT,EAAM,UAAW,EAAE,wBAAyBA,CAAI,EAAG,SAAUgV,EAAc,EACjI,oBAAC,QAAK,cAAY,OAAO,MAAO,CAAE,SAAU,GAAI,cAAe,CAAE,GAAI8B,GAAM,IAAI5U,GAAMA,EAAG,KAAK,EAAE,KAAK,EAAE,CAAE,CAC1G,EACCgV,IACCA,EAAK,KACD,oBAAC,cAAa,KAAK,KAAK,KAAK,MAAM,UAAU,yBAA0BlX,EAAM,CAAE,IAAKkX,EAAK,IAAK,IAAKA,EAAK,IAAK,MAAOzW,CAAU,CAAC,CAAE,EACjI,oBAAC,cAAa,KAAK,OAAO,KAAK,MAC5B,UAAU,0BAA2BT,EAAM,CAAE,IAAKkX,EAAK,IAAK,IAAKA,EAAK,IAAK,MAAOzW,CAAU,CAAC,EAC7FyW,EAAK,OAAO,OAAS,GAAK,IAAM,UAAU,6BAA8BlX,EAAM,CAAE,KAAMkX,EAAK,OAAO,KAAK,IAAI,CAAE,CAAC,CACjH,GAEN,oBAAC,YAAW,MAAO,EAAE,4BAA6BlX,CAAI,EAAG,KAAM,EAAE,gCAAiCA,CAAI,GACpG,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GAC5D6W,GAAU,IAAI3U,GACb,oBAAC,OAAI,IAAKA,EAAG,GAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAE,GACtE,oBAAC,QAAK,cAAY,OAAO,MAAO,CAAE,MAAO,GAAI,UAAW,SAAU,SAAU,EAAG,GAAIA,EAAG,KAAM,EAC5F,oBAAC,YAAW,MAAOgU,EAAUhU,EAAG,EAAE,GAAK,GAAI,UAAWwU,EAAS,YAAaxU,EAAG,KAAM,MAAO,CAAE,KAAM,EAAG,SAAU,CAAE,EACjH,aAAY,UAAU,+BAAgClC,EAAM,CAAE,EAAGkC,EAAG,GAAI,KAAMA,EAAG,IAAK,CAAC,EACvF,SAAUO,IAAK,CAAE,MAAM5B,GAAI4B,GAAE,OAAO,MAAO0T,GAAaxV,KAAM,CAAE,GAAGA,GAAG,CAACuB,EAAG,EAAE,EAAGrB,EAAE,EAAE,CAAG,EAAG,CAC7F,CACD,CACH,CACF,CACF,EAEA,oBAAC,iBAAgB,MAAO,EAAE,yBAA0Bb,CAAI,GACtD,oBAAC,OAAI,KAAK,aAAa,aAAY,EAAE,yBAA0BA,CAAI,EAAG,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GAC7H,CAAC,CAAC,SAAU,IAAI,EAAG,CAAC,OAAQ,IAAI,EAAG,CAAC,SAAU,IAAI,CAAC,EAAE,IAAI,CAAC,CAACW,EAAGsX,EAAE,IAC/D,oBAAC,gBAAe,IAAKtX,EAAG,OAAQsU,IAAetU,EAAG,QAAS,IAAMuU,EAAcvU,CAAC,EAAG,KAAMsX,GACvF,MAAO,EAAE,oBAAsBtX,EAAGX,CAAI,EAAG,KAAM,EAAE,oBAAsBW,EAAI,QAASX,CAAI,EAAG,CAC9F,CACH,CACF,EAEA,oBAAC,iBAAgB,MAAO,EAAE,uBAAwBA,CAAI,GACpD,oBAAC,OAAI,KAAK,aAAa,aAAY,EAAE,uBAAwBA,CAAI,EAAG,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GAC5H,oBAAC,gBAAe,OAAQmV,IAAY,OAAQ,QAAS,IAAMC,EAAW,MAAM,EAAG,KAAK,KAClF,MAAO,EAAE,sBAAuBpV,CAAI,EAAG,KAAM,EAAE,2BAA4BA,CAAI,EAAG,EACpF,oBAAC,gBAAe,OAAQmV,IAAY,YAAa,QAAS,IAAMC,EAAW,WAAW,EAAG,KAAK,KAC5F,MAAO,EAAE,2BAA4BpV,CAAI,EAAG,KAAM,EAAE,gCAAiCA,CAAI,EAAG,EAC9F,oBAAC,gBAAe,OAAQmV,IAAY,SAAU,QAAS,IAAMC,EAAW,QAAQ,EAAG,KAAK,KACtF,MAAO,EAAE,wBAAyBpV,CAAI,EAAG,KAAM,EAAE,6BAA8BA,CAAI,EAAG,CAC1F,EACCmV,IAAY,aACX,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,CAAE,GACrD2B,GAAM,IAAI5U,GACT,oBAAC,WAAU,IAAKA,EAAG,GAAI,OAAQmT,IAAkBnT,EAAG,GAAI,MAAOA,EAAG,MAAO,KAAMA,EAAG,MAChF,QAAS,IAAMoT,EAAiBpT,EAAG,EAAE,GAAIA,EAAG,IAAK,CACpD,CACH,CAEJ,EAEA,oBAAC,iBAAgB,MAAO,EAAE,yBAA0BlC,CAAI,EAAG,KAAM,EAAE,6BAA8BA,CAAI,GACnG,oBAAC,eAAc,KAAM,EAAG,MAAOuV,EAAY,SAAU9S,GAAK+S,EAAc/S,EAAE,OAAO,KAAK,EACpF,YAAa,EAAE,oCAAqCzC,CAAI,EAAG,aAAY,EAAE,yBAA0BA,CAAI,EAAG,EAC3GiX,EAAY,OAAS,GACpB,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAI,WAAW,8BAA+BA,EAAY,OAAQjX,CAAI,CAAE,EAEnJiV,IAAe,UAAYgC,EAAY,OAAS,GAC/C,oBAAC,WAAU,MAAOrR,EAAO,QAAS,IAChC,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,aAAc,CAAE,GAC3E,oBAAC,OAAI,MAAO,CAAE,KAAM,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,EAAG,GAAI,EAAE,8BAA+B5F,CAAI,CAAE,EACxH,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,QAASyX,IAAiB,EAAE,6BAA8BzX,CAAI,CAAE,CACzG,EACA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GAC5DiX,EAAY,IAAI,CAAC7W,EAAG8X,KAAO,CAC1B,MAAMC,GAAQ,uBAAyBD,GACvC,OACE,oBAAC,OAAI,IAAK9X,EAAG,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAE,GAClE,oBAAC,SAAM,QAAS+X,GAAO,MAAO,CAAE,KAAM,EAAG,SAAU,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,aAAc,UAAW,GAAI/X,CAAE,EAC5I,oBAAC,UAAO,GAAI+X,GAAO,MAAOZ,GAAOnX,CAAC,GAAK,GAAI,MAAO,qBAAsB,aAAY,UAAU,0BAA2BJ,EAAM,CAAE,KAAMI,CAAE,CAAC,EACxI,SAAUqC,IAAK,CAAE,MAAM5B,GAAI4B,GAAE,OAAO,MAAQ,OAAOA,GAAE,OAAO,KAAK,EAAI,KAAMiT,EAAe/U,KAAM,CAAE,GAAGA,GAAG,CAACP,EAAE,YAAY,CAAC,EAAGS,EAAE,EAAE,CAAG,GAClI,oBAAC,UAAO,MAAM,IAAI,EAAE,yBAA0Bb,CAAI,CAAE,EACnD8W,GAAM,IAAI5U,IAAM,oBAAC,UAAO,IAAKA,GAAG,GAAI,MAAOA,GAAG,IAAKA,GAAG,MAAM,IAAEA,GAAG,IAAK,CAAS,CAClF,CACF,CAEJ,CAAC,CACH,EACA,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,SAAU,KAAM,WAAY,KAAM,MAAO,cAAe,GAAI,EAAE,kCAAmClC,CAAI,CAAE,CAC7J,CAEJ,EAEA,oBAAC,iBAAgB,MAAO,EAAE,4BAA6BA,CAAI,GACzD,oBAAC,gBAAe,QAAS8V,EAAU,SAAUC,EAAa,MAAO,EAAE,2BAA4B/V,CAAI,EACjG,KAAM,EAAE8V,EAAW,8BAAgC,+BAAgC9V,CAAI,EAAG,EAC3FiX,EAAY,OAAS,GACpB,oBAAC,gBAAe,QAASjB,EAAY,SAAUC,GAAe,MAAO,EAAE,6BAA8BjW,CAAI,EACvG,KAAM,EAAEgW,EAAa,gCAAkC,iCAAkChW,CAAI,EAAG,CAEtG,EAIA,oBAAC,aAAY,KAAK,KAAK,KAAI,GAAC,SAAU4J,IAAQzG,GAAO,OAAS,EAAG,QAASuU,GAAQ,KAAK,OACpF9N,GAAO,EAAE,2BAA4B5J,CAAI,EAAI,EAAE,yBAA0BA,CAAI,CAChF,CACF,CACF,CAEJ,CAKA,SAAS,cAAc,CAAE,QAAAoY,EAAS,KAAApY,EAAM,MAAA4F,EAAO,MAAAC,EAAO,KAAAC,EAAM,OAAA3B,EAAQ,eAAAgC,EAAgB,UAAAM,CAAU,EAAG,CAC/F,MAAM4R,EAAO,cAAcD,CAAO,EAC5BjP,EAAKkP,EAAK,MACV,CAACC,EAASC,CAAU,EAAI,MAAM,SAAS,IAAI,EAC3C,CAAC3O,EAAMC,CAAO,EAAI,MAAM,SAAS,EAAK,EAEtC,CAAC2O,EAASC,CAAU,EAAI,MAAM,SAAS,IAAI,EAC3C,CAACrL,EAASC,CAAU,EAAI,MAAM,SAAS,EAAK,EAC5C,CAACqL,EAAUC,CAAW,EAAI,MAAM,SAAS,EAAK,EAC9CC,EAAQzP,GAAMA,EAAG,SAAW,QAAUA,EAAG,OAAS,KAClD0P,EAAU,MAAM,YAAY,IAAM,CACtC,GAAI,CAACD,EAAO,CAAEH,EAAW,IAAI,EAAG,MAAQ,CACxC,QAAQ,QAAQ,EAAE,KAAK,IAAM,OAAO,WAAW,QAAQG,CAAK,CAAC,EAAE,KAAKnQ,GAAMgQ,EAAWhQ,GAAM,IAAI,CAAC,EAAE,MAAM,IAAMgQ,EAAW,IAAI,CAAC,CAChI,EAAG,CAACG,CAAK,CAAC,EACV,MAAM,UAAU,IAAM,CAAEC,EAAQ,CAAG,EAAG,CAACA,CAAO,CAAC,EAE/C,MAAMC,EAAS3P,GAAMA,EAAG,OAClB4P,EAAO5P,GAAMA,EAAG,WAKtB,GAJA,MAAM,UAAU,IAAM,CACpB,GAAI,CAAE,MAAM6P,EAAK,SAAS,cAAc,0BAA0B,EAAOA,IAAIA,EAAG,UAAY,EAAG,MAAY,CAAC,CAC9G,EAAG,CAACF,EAAQC,CAAI,CAAC,EAEbV,EAAK,SAAW,CAAClP,EAAI,OAAO,oBAAC,cAAa,KAAMnJ,EAAM,MAAM,YAAY,QAASqY,EAAK,OAAQ,OAAQlU,EAAQ,MAAO,CAAE,WAAY,EAAG,EAAG,EAC7I,GAAI,CAACgF,EACH,OACE,oBAAC,WACC,oBAAC,gBAAe,OAAQ,EAAE,yBAA0BnJ,CAAI,EAAG,MAAO,EAAE,2BAA4BA,CAAI,EAAG,OAAQmE,EAAQ,KAAMnE,EAAM,EACnI,oBAAC,YAAW,KAAK,MAAM,MAAO,EAAE,0BAA2BA,CAAI,EAAG,OAAQ,oBAAC,aAAY,QAASmE,GAAS,EAAE,2BAA4BnE,CAAI,CAAE,EAAgB,CAC/J,EAKJ,MAAM2F,EAAM,MAAO/B,EAAIqV,KAAU,CAC/BpP,EAAQ,EAAI,EACZ,IAAI7F,GAAK,GACT,GAAI,CAAE,MAAMJ,EAAG,EAAGI,GAAK,GAAUiV,IAAOxS,EAAUwS,EAAK,CAAG,OACnDxW,GAAG,CACR,QAAQ,KAAK,aAAcA,EAAC,EAC5B,MAAMyW,GAAOzW,IAAKA,GAAE,KAChByW,KAAS,cAEXzS,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,EACxCqY,EAAK,QAAQA,EAAK,OAAO,GAE7B5R,EAAU,EAAE,oBAAsByS,KAAS,kBAAoB,WAAa,WAAYlZ,CAAI,CAAC,CAEjG,CACA,OAAA6J,EAAQ,EAAK,EACN7F,EACT,EAEM1B,EAAI,OAAO,WACX6W,EAAY,SAAY,CAC5B,MAAM/P,EAAIkP,EACVC,EAAW,IAAI,EACXnP,IAAM,SAAS,MAAMzD,EAAI,IAAMrD,EAAE,WAAW6G,EAAG,EAAE,EAAG,EAAE,0BAA2BnJ,CAAI,CAAC,EACtFoJ,IAAM,UAAU,MAAMzD,EAAI,IAAMrD,EAAE,YAAY6G,EAAG,EAAE,CAAC,EACpDC,IAAM,OAAO,MAAMzD,EAAI,IAAMrD,EAAE,SAAS6G,EAAG,EAAE,CAAC,EAC9CC,IAAM,UAAgB,MAAMzD,EAAI,IAAMrD,EAAE,YAAY6G,EAAG,EAAE,EAAG,EAAE,0BAA2BnJ,CAAI,CAAC,GAAGmE,EAAO,CAC9G,EAGMqJ,EAAUrE,EAAG,SAAW,QAAU,sBAAsBA,EAAIkP,EAAK,OAAO,EAAI,CAAC,EAC7Ee,EAAYjQ,EAAG,SAAW,QAAU,qBAAqBA,EAAIkP,EAAK,SAAW,CAAC,CAAC,EAAI,CAAC,EACpFgB,GAAalQ,EAAG,OAAS,CAAC,GAAG,OAAOjH,GAAMkX,EAAUlX,EAAG,EAAE,IAAM,CAAC,EAChEoX,EAAS,EAAEnQ,EAAG,UAAYA,EAAG,SAAS,WAAa,IACnDoQ,EAAa,EAAED,EAAS,4BAA8B,kCAAmCtZ,CAAI,EAC7FwZ,EAAYhM,EAAQ,OAAS,GAAK6L,EAAU,OAAS,EACrDI,EAAYD,EAChB,oBAAC,MAAM,SAAN,KACEhM,EAAQ,OAAS,GAChB,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,WAAY,IAAK,MAAO,YAAa,GACnE,UAAU,+BAAgCxN,EAAM,CAAE,MAAOwN,EAAQ,IAAIlM,GAAKA,EAAE,IAAI,EAAE,KAAK,IAAI,CAAE,CAAC,CACjG,EAED+X,EAAU,OAAS,GAClB,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,UAAW7L,EAAQ,OAAS,EAAI,EAAG,WAAY,IAAK,MAAO,YAAa,GACtG,UAAU,4BAA6BxN,EAAM,CAAE,MAAOqZ,EAAU,IAAInX,GAAMA,EAAG,MAAQ,IAAM,OAAO,YAAY,SAASiH,EAAIjH,EAAG,GAAIlC,CAAI,CAAC,EAAE,KAAK,IAAI,CAAE,CAAC,CACxJ,EAEF,oBAAC,QAAK,MAAO,CAAE,QAAS,QAAS,UAAW,CAAE,GAAIuZ,CAAW,CAC/D,EACEA,EACEG,EAAe,CACnB,MAAO,CAAE,MAAO,EAAE,6BAA8B1Z,CAAI,EAAG,KAAMyZ,EAAW,aAAc,EAAED,EAAY,8BAAgC,+BAAgCxZ,CAAI,CAAE,EAC1K,OAAQ,CAAE,MAAO,EAAE,6BAA8BA,CAAI,EAAG,KAAM,EAAE,4BAA6BA,CAAI,EAAG,aAAc,EAAE,+BAAgCA,CAAI,CAAE,EAC1J,IAAK,CAAE,MAAO,EAAE,0BAA2BA,CAAI,EAAG,KAAM,EAAE,yBAA0BA,CAAI,EAAG,aAAc,EAAE,qBAAsBA,CAAI,EAAG,OAAQ,EAAK,EACrJ,OAAQ,CAAE,MAAO,EAAE,8BAA+BA,CAAI,EAAG,KAAM,EAAE,6BAA8BA,CAAI,EAAG,aAAc,EAAE,yBAA0BA,CAAI,EAAG,OAAQ,EAAK,CACtK,EAAEsY,CAAO,GAAK,CAAC,EAEf,IAAIxT,EACJ,GAAIqE,EAAG,SAAW,QAASrE,EAAO,oBAAC,eAAc,KAAMuT,EAAM,KAAMrY,EAAM,MAAO4F,EAAO,KAAMgE,EAAM,MAAO2O,EAAY,UAAW9R,EAAW,UACnI0C,EAAG,SAAW,SAAUrE,EAAO,oBAAC,cAAa,KAAMuT,EAAM,KAAMrY,EAAM,MAAO4F,EAAO,KAAMgE,EAAM,MAAO2O,EAAY,UAAW9R,EAAW,MAC5I,CACH,MAAMkT,EAAM,OAAO,YACbC,IAASzQ,EAAG,MAAQA,EAAG,KAAK,UAAa,CAAC,GAAG,OAAOjJ,GAAKA,EAAE,QAAUA,EAAE,OAAO,OAAS,UAAU,EAAE,OACnG2Z,GAAa1Q,EAAG,SAAW,SAAWyQ,KAAS,IAAMzQ,EAAG,YAAc,GAAKyQ,GAC3EE,GAAeH,EAAI,UAAUxQ,EAAIkP,EAAK,SAAW,CAAC,EAAGA,EAAK,UAAY,CAAC,EAAG,CAAE,gBAAiB,GAAM,KAAArY,CAAK,CAAC,EAEzG0I,GAAM2P,EAAK,SAAW,CAAC,EACvB0B,EAAWvB,GAAW,OAAO,OAAO,cAAiB,aACrD,OAAOmB,EAAI,iBAAoB,WAAaA,EAAI,gBAAgBnB,EAASrP,EAAIT,EAAG,EAAI,CAAC,CAAC8P,EAAQ,QAC9FwB,EAAUxB,GAAW,CAACE,GAAY,EAAE,OAAO,kBAAoB,OAAO,iBAAiBF,EAAQ,EAAE,KACjG,OAAOmB,EAAI,oBAAuB,WAAaA,EAAI,mBAAmBnB,EAASrP,EAAIT,EAAG,EAAI,EAAE8P,EAAQ,WAAaA,EAAQ,UAAU,aACzI1T,EACE,oBAAC,OAAI,MAAO,CAAE,QAAS,cAAe,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,GACtF,oBAAC,iBAAgB,MAAOqE,EAAI,QAASkP,EAAK,QAAS,QAASA,EAAK,QAAS,SAAUA,EAAK,SAAU,MAAK,GACtG,KAAMrY,EAAM,MAAO4F,EAAO,OAAQuD,EAAG,SAAW,SAAU,OAAQA,EAAG,gBAAkB,YAAcA,EAAG,cAAgB,KACxH,OAAQ,IAAM7G,EAAE,WAAW6G,EAAG,EAAE,EAAG,MAAO,IAAMoP,EAAW,KAAK,EAAG,EACpEpP,EAAG,SAAW,UACb,oBAAC,iBAAgB,MAAO,EAAE,+BAAgCnJ,CAAI,EAAG,KAAM,EAAE,8BAA+BA,CAAI,GAC1G,oBAAC,oBAAmB,GAAImJ,EAAI,UAAW2Q,GAAc,KAAM9Z,EAAM,MAAO4F,EAAO,UAAWa,EAAW,CACvG,EAEDoT,IACC,oBAAC,iBAAgB,MAAO,EAAE,yBAA0B7Z,CAAI,EAAG,KAAM,EAAE,wBAAyBA,CAAI,GAC9F,oBAAC,gBAAe,GAAImJ,EAAI,QAASkP,EAAK,SAAW,CAAC,EAAG,KAAMrY,EAAM,MAAO4F,EAAO,UAAWkU,GAAc,UAAWrT,EAAW,CAChI,EAED0C,EAAG,SAAW,SAAW4Q,GACxB,oBAAC,cAAa,KAAMvB,EAAS,KAAMxY,EAAM,UAAWyG,EAAW,EAEhE0C,EAAG,SAAW,SAAW6Q,GACrB,OAAO,OAAO,eAAkB,YAAc,OAAO,OAAO,mBAAsB,YACrF,oBAAC,eAAc,KAAMxB,EAAS,KAAMxY,EAAM,UAAW,IAAMqN,EAAW,EAAI,EACxE,UAAW,IAAM,CAAM,OAAO,qBAAqB,OAAO,oBAAoBmL,EAAQ,EAAE,EAAGG,EAAY,EAAI,CAAG,EAAG,EAEpHxP,EAAG,SAAW,SACb,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,GAAI,UAAW,CAAE,GAC5E,oBAAC,aAAY,KAAI,GAAC,QAAShF,GAAS,EAAE,2BAA4BnE,CAAI,CAAE,EACxE,oBAAC,aAAY,KAAI,GAAC,QAAQ,QAAQ,QAAS,IAAMuY,EAAW,QAAQ,GAAI,EAAE,yBAA0BvY,CAAI,CAAE,CAC5G,CAEJ,CAEJ,CAEA,MAAMiE,GAAS,UAAU,+BAAgCjE,EAAM,CAAE,OAAQ,EAAE,oBAAsBmJ,EAAG,OAAQnJ,CAAI,CAAE,CAAC,EACnH,OACE,oBAAC,WACC,oBAAC,gBAAe,OAAQiE,GAAQ,MAAOkF,EAAG,OAAS,EAAE,2BAA4BnJ,CAAI,EAAG,OAAQmE,EAAQ,KAAMnE,EAAM,EACnH8E,EACD,oBAAC,cAAa,KAAM,CAAC,CAACwT,EAAS,KAAMtY,EAAM,SAAU,IAAMuY,EAAW,IAAI,EAAG,UAAWY,EAAY,GAAGO,EAAc,EACpHlB,GAAW,OAAO,OAAO,mBAAsB,YAC9C,oBAAC,mBAAkB,KAAMpL,EAAS,KAAMoL,EAAS,KAAMxY,EAAM,MAAO4F,EAAO,KAAME,EAAM,QAASD,EAC9F,QAAS,IAAMwH,EAAW,EAAK,EAAG,UAAW5G,EAC7C,YAAa,IAAMoS,EAAQ,EAAG,cAAe,IAAMA,EAAQ,EAC3D,gBAAkBrP,GAAQ,CAAE6D,EAAW,EAAK,EAAOlH,GAAgBA,EAAeqD,CAAG,CAAG,EAAG,CAEjG,CAEJ,CAGA,SAAS,sBAAsBL,EAAI5F,EAAS,CAC1C,MAAM0W,EAAS,CAAC,EAChB,OAAC1W,GAAW,CAAC,GAAG,QAAQrC,GAAK,CAAMA,GAAKA,EAAE,OAAM+Y,EAAO,OAAO/Y,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,EAAI,GAAM,CAAC,GAC7FiI,EAAG,QAAU,CAAC,GAAG,OAAO7H,GAAKA,GAAKA,EAAE,MAAQ,CAAC2Y,EAAO,OAAO3Y,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAClG,CAGA,SAAS,mBAAmBa,EAAI7B,EAAGN,EAAMyM,EAAO,CAC9C,MAAM5L,EAAI4L,IAAU,QAAUnM,EAAE,WAAaA,EAAE,MAC/C,GAAIO,GAAK,MAAQA,IAAM,GAAI,MAAO,GAClC,MAAMK,EAAIiB,GAAMA,EAAG,OACnB,GAAIjB,GAAKA,EAAE,OAAS,MAAO,CACzB,MAAMX,EAAI,OAAOM,GAAM,SAAWA,EAAI,SAASA,EAAG,EAAE,EAC9C,GAAKK,EAAE,SAAW,CAAC,GAAGX,CAAC,EAC7B,OAAO,GAAK,KAAO,OAAO,CAAC,EAAI,OAAOM,CAAC,CACzC,CACA,GAAIK,IAAMA,EAAE,OAAS,UAAYA,EAAE,OAAS,YAAa,CACvD,MAAMd,EAAI,YAAYS,EAAGb,CAAI,EAC7B,OAAQ,SAASI,CAAC,EAAI,YAAYA,EAAGJ,EAAM,OAAO,UAAUI,CAAC,EAAI,EAAI,EAAGc,EAAE,IAAI,EAAI,OAAOL,CAAC,IAAMK,EAAE,KAAO,IAAMA,EAAE,KAAO,GAC1H,CACA,OAAO,OAAOL,CAAC,CACjB,CAGA,SAAS,eAAesI,EAAI+Q,EAASC,EAAQ,CAC3C,MAAMC,EAAYjR,EAAG,MAAQA,EAAG,KAAK,UAAa,CAAC,EAC7CoN,EAAO,sBAAsB2D,EAASC,CAAM,EAC5CE,EAAU,CAAC,GAChBH,GAAW,CAAC,GAAG,QAAQ5Z,GAAK,CAC3B,GAAI,CAACA,GAAK,CAACA,EAAE,MAAS,CAAC6Z,EAAQ,OAC/B,MAAMG,EAAK,KAAK,MAAMha,EAAE,EAAE,EACrB,SAASga,CAAE,IACZD,EAAQ/Z,EAAE,SAAS,GAAK,MAAQga,EAAKD,EAAQ/Z,EAAE,SAAS,KAAG+Z,EAAQ/Z,EAAE,SAAS,EAAIga,EACxF,CAAC,EACD,MAAMrX,EAAM,CAAC,EACb,OAAAmX,EAAS,QAAQ,CAACjY,EAAI5B,IAAM,CAC1B,MAAMD,EAAIiW,EAAKpU,EAAG,EAAE,EACpB,GAAI,CAAC7B,EAAG,OACR,MAAMga,EAAKD,EAAQlY,EAAG,EAAE,GAAK,KAAOkY,EAAQlY,EAAG,EAAE,EAAI,KAAK,MAAM7B,EAAE,EAAE,EACpE2C,EAAI,KAAK,CAAE,GAAAd,EAAI,EAAA5B,EAAG,EAAAD,EAAG,GAAI,SAASga,CAAE,EAAIA,EAAK,IAAK,CAAC,CACrD,CAAC,EACDrX,EAAI,KAAK,CAACY,EAAG0W,KAAO1W,EAAE,IAAM,KAAO,EAAI,IAAM0W,EAAE,IAAM,KAAO,EAAI,KAAO1W,EAAE,IAAM,IAAM0W,EAAE,IAAM,IAAM1W,EAAE,EAAI0W,EAAE,CAAC,EACrGtX,CACT,CAEA,SAAS,qBAAqBd,EAAI7B,EAAGN,EAAM,CACzC,MAAMkB,EAAIiB,GAAMA,EAAG,OACnB,GAAI,CAACjB,EAAG,MAAO,UACf,GAAIA,EAAE,OAAS,WAAY,MAAO,WAClC,IAAI8C,EAAK,KACT,GAAI,CAAEA,EAAK,OAAO,YAAY,YAAY9C,EAAGZ,EAAE,MAAON,CAAI,CAAG,MAAY,CAAEgE,EAAK,IAAM,CACtF,OAAOA,IAAO,GAAO,QAAU,OACjC,CAEA,SAAS,mBAAmBwW,EAAKxa,EAAM,CACrC,GAAI,CAACwa,GAAO,CAACA,EAAI,OAAQ,MAAO,GAChC,MAAMpa,EAAIoa,EAAI,OAAS,EAAI,IAAMA,EAAI,OAAS,IAAM,KAAK,IAAIA,EAAI,MAAM,EACjEC,GAAWD,EAAI,eAAiB,CAAC,GAAG,OAAO,OAAO,EACxD,OAAO,UAAU,yBAA0Bxa,EAAM,CAAE,EAAAI,CAAE,CAAC,GAAKqa,EAAQ,OAAS,KAAOA,EAAQ,KAAK,IAAI,EAAI,GAC1G,CAEA,SAAS,oBAAoBtR,EAAI+Q,EAASQ,EAAW1a,EAAM,CACzD,MAAMoC,EAAI,OAAO,YACXuY,EAAQ,CAAC,EACf,OAAAA,EAAM,KAAKxR,EAAG,OAAS,EAAE,2BAA4BnJ,CAAI,CAAC,EACtDmJ,EAAG,MAAMwR,EAAM,KAAK,gBAAgBxR,EAAG,KAAMnJ,CAAI,CAAC,EACtD2a,EAAM,KAAK,EAAE,EACbA,EAAM,KAAK,EAAE,2BAA4B3a,CAAI,CAAC,GAC7C0a,GAAa,CAAC,GAAG,QAAQpZ,GAAK,CAC7B,MAAMkW,EAAOpV,EAAE,SAAS+G,EAAI7H,EAAE,KAAMtB,CAAI,EAClC4a,GAAQtZ,EAAE,MAAQ,KAAOA,EAAE,KAAO,KAAO,KAAOA,EAAE,MAAQA,EAAE,MAAQ,IAAM,IAAMkW,EAAO,KACzF,UAAU,yBAA0BxX,EAAM,CAAE,EAAGsB,EAAE,KAAM,CAAC,EACtDuZ,EAAQ,CAAC,EACXvZ,EAAE,cAAcuZ,EAAM,KAAK,EAAE,0BAA2B7a,CAAI,CAAC,EAC7DsB,EAAE,QAAQuZ,EAAM,KAAK,mBAAmBvZ,EAAGtB,CAAI,CAAC,EACpD2a,EAAM,KAAKC,GAAQC,EAAM,OAAS,KAAOA,EAAM,KAAK,IAAI,EAAI,IAAM,GAAG,CACvE,CAAC,EACDF,EAAM,KAAK,EAAE,EACbA,EAAM,KAAK,EAAE,yBAA0B3a,CAAI,CAAC,GAC3CmJ,EAAG,OAAS,CAAC,GAAG,QAAQjH,GAAM,CAC7ByY,EAAM,KAAK,EAAE,EACbA,EAAM,MAAMzY,EAAG,MAAQA,EAAG,MAAQ,IAAM,IAAME,EAAE,SAAS+G,EAAIjH,EAAG,GAAIlC,CAAI,CAAC,EACzE,MAAM8a,EAAS,eAAe3R,EAAI+Q,EAAShY,EAAG,EAAE,EAC3C4Y,EAAO,QAAQH,EAAM,KAAK,KAAO,EAAE,wBAAyB3a,CAAI,CAAC,EACtE8a,EAAO,QAAQja,GAAK,CAClB,MAAMiU,EAAOjU,EAAE,IAAM,KAAO,gBAAgB,IAAI,KAAKA,EAAE,EAAE,EAAE,YAAY,EAAGb,CAAI,EAAI,GAC5E+a,EAAMla,EAAE,GAAG,OAAS,mBAAmBA,EAAE,GAAIA,EAAE,EAAGb,CAAI,EAAI,GAC1DyD,EAAM,qBAAqB5C,EAAE,GAAIA,EAAE,EAAGb,CAAI,EAC1Cgb,EAAS,EAAE,oBAAsBvX,EAAKzD,CAAI,EAChD2a,EAAM,KAAK,MAAQ7F,EAAOA,EAAO,KAAO,KAAOjU,EAAE,EAAI,GAAK,MAAQA,EAAE,GAAG,OAAS,EAAE,6BAA8Bb,CAAI,IAC/G+a,EAAM,MAAQ/a,IAAS,KAAO,IAAM+a,EAAM,IAAM,IAAMA,EAAM,KAAO,IAAM,KAAOC,EAAS,GAAG,CACnG,CAAC,CACH,CAAC,EACML,EAAM,KAAK;AAAA,CAAI,CACxB,CAEA,SAAS,eAAe,CAAE,GAAAxR,EAAI,QAAA+Q,EAAS,UAAAQ,EAAW,KAAA1a,EAAM,MAAA4F,EAAO,UAAAa,CAAU,EAAG,CAC1E,KAAM,CAACjE,EAAMyY,CAAO,EAAI,MAAM,SAAS,CAAC,CAAC,EACnCb,EAAYjR,EAAG,MAAQA,EAAG,KAAK,UAAa,CAAC,EAC7C2N,EAAQ3N,EAAG,OAAS,CAAC,EACrB+R,EAAY,CAAC,EAEnB,IADCR,GAAa,CAAC,GAAG,QAAQpZ,GAAK,CAAE4Z,EAAU5Z,EAAE,IAAI,EAAIA,CAAG,CAAC,EACrD,CAACwV,EAAM,OAAQ,OAAO,KAE1B,MAAMqE,EAAU,SAAY,CAC1B,MAAMnX,EAAK,MAAM,aAAa,oBAAoBmF,EAAI+Q,EAASQ,EAAW1a,CAAI,CAAC,EAC3EyG,GAAWA,EAAU,EAAEzC,EAAK,0BAA4B,6BAA8BhE,CAAI,CAAC,CACjG,EACMob,EAAO,CAACxa,EAAKmE,IACjB,oBAAC,QAAK,MAAO,CACX,QAAS,cAAe,WAAY,SAAU,QAAS,UAAW,aAAc,IAAK,WAAY,SACjG,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,IACnE,WAAYA,IAAS,KAAO,uBAAyBA,IAAS,MAAQ,oBAAsBA,IAAS,OAAS,mBAAqB,mBACnI,MAAOA,IAAS,KAAO,aAAeA,IAAS,MAAQ,eAAiB,aACxE,OAAQ,cAAgBA,IAAS,KAAO,uBAAyBA,IAAS,MAAQ,sBAAwBA,IAAS,OAAS,uBAAyB,kBACvJ,GAAInE,CAAI,EAEV,OACE,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GAC7D,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,KAAK,KAAK,QAASua,EAAS,MAAO,CAAE,UAAW,YAAa,GAAI,EAAE,wBAAyBnb,CAAI,CAAE,EACxI8W,EAAM,IAAI5U,GAAM,CACf,MAAM4Y,EAAS,eAAe3R,EAAI+Q,EAAShY,EAAG,EAAE,EAC1CmZ,EAAQP,EAAO,OACfQ,EAAK,kBAAkBJ,EAAUhZ,EAAG,EAAE,GAAK,CAAE,KAAMA,EAAG,EAAG,EAAGgY,CAAO,EACnEqB,EAAS,CAAC,CAAC/Y,EAAKN,EAAG,EAAE,EAC3B,OACE,oBAAC,WAAU,IAAKA,EAAG,GAAI,MAAO0D,EAAO,QAAS,GAAI,OAAQ1D,EAAG,OAC3D,oBAAC,UAAO,KAAK,SAAS,UAAU,YAAY,gBAAeqZ,EAAQ,QAAS,IAAMN,EAAQnZ,IAAM,CAAE,GAAGA,EAAG,CAACI,EAAG,EAAE,EAAG,CAACJ,EAAEI,EAAG,EAAE,CAAE,EAAE,EAAG,MAAO,CACrI,MAAO,OAAQ,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,UAAW,GAAI,QAAS,EAAG,OAAQ,OACjG,WAAY,cAAe,OAAQ,UAAW,MAAO,aAAc,UAAW,MAChF,GACE,oBAAC,gBAAe,KAAMA,EAAI,KAAK,KAAK,KAAMlC,EAAM,MAAO,CAAE,WAAY,EAAG,SAAU,CAAE,EAAG,EACvF,oBAAC,QAAK,MAAO,CAAE,KAAM,CAAE,EAAG,EAC1B,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,MAAO,eAAgB,WAAY,QAAS,GACjH,UAAUub,EAAS,wBAA0B,wBAAyBvb,EAAM,CAAE,EAAGqb,CAAM,CAAC,CAC3F,EACA,oBAAC,QAAK,cAAY,OAAO,MAAO,CAAE,MAAO,eAAgB,UAAWE,EAAS,gBAAkB,MAAO,GAAG,GAAC,CAC5G,EACA,oBAAC,mBAAkB,MAAOD,EAAI,KAAMtb,EAAM,QAAS,GAAO,QAAS,gBAAgBmJ,CAAE,EAAG,EACvFoS,GACC,oBAAC,MAAG,MAAO,CAAE,UAAW,OAAQ,OAAQ,WAAY,QAAS,EAAG,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GAC9GF,IAAU,GAAK,oBAAC,MAAG,MAAO,CAAE,WAAY,WAAY,SAAU,KAAM,MAAO,cAAe,GAAI,EAAE,wBAAyBrb,CAAI,CAAE,EAC/H8a,EAAO,IAAI,CAAC,CAAE,GAAA3Y,EAAI,EAAA5B,EAAG,EAAAD,EAAG,GAAAkb,CAAG,IAAM,CAChC,MAAMta,EAAIiB,EAAG,OACPb,EAAI,qBAAqBa,EAAI7B,EAAGN,CAAI,EACpCyD,EAAMnC,IAAM,UAAY8Z,EAAK,EAAE,2BAA4Bpb,CAAI,CAAC,EAClEsB,IAAM,WAAa8Z,EAAK,MAAQ,EAAE,4BAA6Bpb,CAAI,EAAG,MAAM,EAC5EsB,IAAM,QAAU8Z,EAAK,KAAO,EAAE,yBAA0Bpb,CAAI,EAAG,IAAI,EAAIob,EAAK,KAAO,EAAE,yBAA0Bpb,CAAI,EAAG,KAAK,EACzH+a,EAAM7Z,EAAI,mBAAmBiB,EAAI7B,EAAGN,CAAI,EAAI,GAC5Cyb,EAAW,CAACnb,EAAE,SAAY,EAAI,mBAAmB6B,EAAI7B,EAAGN,EAAM,OAAO,EAAI,GACzE8U,EAAO0G,GAAM,KAAO,gBAAgB,IAAI,KAAKA,CAAE,EAAE,YAAY,EAAGxb,CAAI,EAAI,GAC9E,OACE,oBAAC,MAAG,IAAKmC,EAAG,GAAI,MAAO,CAAE,QAAS,WAAY,aAAc,GAAI,WAAY,mBAAoB,OAAQ,yBAA0B,GAChI,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,WAAY,IAAK,CAAE,GAC5D,oBAAC,QAAK,MAAO,CACX,KAAM,EAAG,SAAU,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,IAAK,aAAc,WAC5G,QAAS,cAAe,gBAAiB,EAAG,gBAAiB,WAAY,SAAU,QACrF,GAAI5B,EAAI,EAAE,KAAG4B,EAAG,OAAS,EAAE,6BAA8BnC,CAAI,CAAE,EAC9D8U,GAAQ,oBAAC,QAAK,MAAO,CAAE,WAAY,EAAG,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAI,UAAU,sBAAuB9U,EAAM,CAAE,KAAA8U,CAAK,CAAC,CAAE,CAC1J,EACCiG,GACC,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,IAAK,MAAO,aAAc,aAAc,UAAW,GAC/I/a,IAAS,KAAO,IAAM+a,EAAM,IAAM,IAAMA,EAAM,IAC9CU,GAAY,oBAAC,QAAK,MAAO,CAAE,MAAO,eAAgB,SAAU,EAAG,GAAG,IAAE,UAAU,4BAA6Bzb,EAAM,CAAE,EAAGyb,CAAS,CAAC,CAAE,CACrI,EAEF,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,EAAG,UAAW,CAAE,GACnEhY,EACA,CAACnD,EAAE,SAAY,GAAK8a,EAAK,EAAE,0BAA2Bpb,CAAI,CAAC,EAC3DM,EAAE,UAAY8a,EAAK,EAAE,4BAA6Bpb,CAAI,CAAC,EAAI,KAC3DM,EAAE,QAAU8a,EAAK,MAAQ,EAAE,yBAA0Bpb,CAAI,EAAG,MAAM,CACrE,CACF,CAEJ,CAAC,CACH,CAEJ,CAEJ,CAAC,CACH,CAEJ,CAGA,SAAS,oBAAoB,CAAE,GAAAmJ,EAAI,OAAAgR,EAAQ,IAAAK,EAAK,KAAAxa,EAAM,QAAAkS,EAAS,UAAAzL,CAAU,EAAG,CAC1E,KAAM,CAACiV,EAAOC,CAAQ,EAAI,MAAM,SAAS,EAAE,EACrC,CAACC,EAAMC,CAAO,EAAI,MAAM,SAAS,EAAK,EACtC,CAACC,EAAQC,CAAS,EAAI,MAAM,SAAS,EAAE,EACvC,CAACnS,EAAMC,CAAO,EAAI,MAAM,SAAS,EAAK,EACtC,CAACmS,EAAWC,CAAY,EAAI,MAAM,SAAS,EAAK,EACtD,MAAM,UAAU,IAAM,CAAEN,EAAS,EAAE,EAAGE,EAAQ,EAAK,EAAGE,EAAU,EAAE,EAAGE,EAAa,EAAK,CAAG,EAAG,CAAC9B,CAAM,CAAC,EACrG,MAAM/X,EAAI,OAAO,YACXI,EAAO2X,GAAU,KACjB3C,EAAOhV,EAAOJ,EAAE,SAAS+G,EAAIgR,EAAQna,CAAI,EAAI,GAC7Ckc,EAAO,CAAC,EAAE1B,GAAOA,EAAI,cACrB2B,EAAO,MAAOra,EAAGsa,IAAU,CAC/BvS,EAAQ,EAAI,EACZ,GAAI,CACF,MAAM,OAAO,WAAW,WAAWV,EAAG,GAAIgR,EAAQrY,CAAC,EACnD2E,EAAU,EAAE2V,EAAOpc,CAAI,CAAC,EACxBkS,EAAQ,CACV,OAASzP,EAAG,CACV,QAAQ,KAAK,wBAAyBA,CAAC,EACvCgE,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,CAC9C,CACA6J,EAAQ,EAAK,CACf,EACA,OACE,oBAAC,MAAM,SAAN,KACC,oBAAC,YAAW,KAAMrH,EAAM,QAAS0P,EAAS,KAAMlS,EAAM,OAAQ,EAAE,0BAA2BA,CAAI,EAAG,MAAOwX,GACtGhV,GACC,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,GAAI,cAAe,CAAE,GAC/EgY,IAAQA,EAAI,QAAU0B,GACrB,oBAAC,cAAa,KAAK,MAChB,CAACA,EAAO,EAAE,yBAA0Blc,CAAI,EAAI,GAAI,mBAAmBwa,EAAKxa,CAAI,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,KAAK,CAC5G,EACE,KACJ,oBAAC,gBAAe,UAAW,EAAE,uBAAwBA,CAAI,EAAG,MAAO4b,EAAO,OAAS,QAAS,SAAU/a,GAAKgb,EAAQhb,IAAM,MAAM,EAC7H,QAAS,CAAC,CAAE,MAAO,QAAS,MAAO,KAAO,EAAE,4BAA6Bb,CAAI,CAAE,EAAG,CAAE,MAAO,OAAQ,MAAO,KAAO,EAAE,2BAA4BA,CAAI,CAAE,CAAC,EAAG,EAC3J,oBAAC,YAAW,MAAO,EAAE4b,EAAO,8BAAgC,0BAA2B5b,CAAI,EAAG,KAAM,EAAE4b,EAAO,kCAAoC,8BAA+B5b,CAAI,GAClL,oBAAC,cAAa,MAAO0b,EAAO,IAAK,GAAI,IAAK,IAAK,KAAM,GAAI,KAAM1b,EAAM,UAAW,EAAE4b,EAAO,8BAAgC,0BAA2B5b,CAAI,EACtJ,OAAS6D,IAAO+X,EAAO,IAAM,KAAO/X,EAAG,SAAU8X,EAAU,CAC/D,EACA,oBAAC,YAAW,MAAO,EAAE,0BAA2B3b,CAAI,EAAG,KAAM,EAAE,8BAA+BA,CAAI,EAAG,QAAQ,sBAC3G,oBAAC,YAAW,GAAG,qBAAqB,MAAO8b,EAAQ,UAAW,IAAK,YAAa,EAAEF,EAAO,yCAA2C,qCAAsC5b,CAAI,EAC5K,SAAUyC,GAAKsZ,EAAUtZ,EAAE,OAAO,KAAK,EAAG,CAC9C,EACA,oBAAC,aAAY,KAAI,GAAC,SAAUmH,EAAM,QAAS,IAAMuS,EAAK,CAAE,MAAOP,EAAO,KAAK,IAAIF,CAAK,EAAI,CAAC,KAAK,IAAIA,CAAK,EAAG,OAAQI,EAAO,KAAK,CAAE,EAAGF,EAAO,+BAAiC,0BAA0B,GAClM,UAAUA,EAAO,6BAA+B,yBAA0B5b,EAAM,CAAE,EAAG0b,CAAM,CAAC,CAC/F,EACA,oBAAC,OAAI,MAAO,CAAE,OAAQ,EAAG,WAAY,eAAgB,EAAG,EACvDQ,EACC,oBAAC,aAAY,KAAI,GAAC,QAAQ,QAAQ,SAAUtS,EAAM,QAAS,IAAMuS,EAAK,CAAE,aAAc,GAAO,OAAQL,EAAO,KAAK,CAAE,EAAG,2BAA2B,GAC9I,EAAE,2BAA4B9b,CAAI,CACrC,EAEA,oBAAC,aAAY,KAAI,GAAC,QAAQ,YAAY,SAAU4J,EAAM,QAAS,IAAMqS,EAAa,EAAI,GAAI,EAAE,2BAA4Bjc,CAAI,CAAE,CAElI,CAEJ,EACA,oBAAC,cAAa,KAAMgc,EAAW,KAAMhc,EAAM,OAAM,GAAC,OAAQ,IACxD,MAAO,UAAU,gCAAiCA,EAAM,CAAE,KAAMwX,CAAK,CAAC,EACtE,KAAM,EAAE,+BAAgCxX,CAAI,EAAG,aAAc,EAAE,2BAA4BA,CAAI,EAC/F,SAAU,IAAMic,EAAa,EAAK,EAClC,UAAW,IAAM,CAAEA,EAAa,EAAK,EAAGE,EAAK,CAAE,aAAc,GAAM,OAAQL,EAAO,KAAK,CAAE,EAAG,2BAA2B,CAAG,EAAG,CACjI,CAEJ,CAEA,SAAS,qBAAqB,CAAE,IAAAtB,EAAK,KAAAxa,CAAK,EAAG,CAC3C,MAAI,CAACwa,GAAQ,CAACA,EAAI,QAAU,CAACA,EAAI,aAAsB,KAErD,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,EAAG,UAAW,CAAE,GACnEA,EAAI,cAAgB,oBAAC,WAAU,OAAM,GAAC,MAAM,eAAe,MAAO,CAAE,SAAU,GAAI,QAAS,SAAU,GAAG,KAAG,EAAE,yBAA0Bxa,CAAI,CAAE,EAC7Iwa,EAAI,OAAS,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,MAAO,eAAgB,aAAc,UAAW,GAAG,MAAI,mBAAmBA,EAAKxa,CAAI,CAAE,EAAU,IACrL,CAEJ,CAEA,SAAS,mBAAmB,CAAE,GAAAmJ,EAAI,UAAAuR,EAAW,KAAA1a,EAAM,MAAA4F,EAAO,UAAAa,CAAU,EAAG,CACrE,KAAM,CAAC4V,EAAMC,CAAO,EAAI,MAAM,SAAS,IAAI,EACrCla,EAAI,OAAO,YACXma,EAAQ,CAAC,EACf,OAAC7B,GAAa,CAAC,GAAG,QAAQpZ,GAAK,CAAEib,EAAMjb,EAAE,IAAI,EAAIA,CAAG,CAAC,EAEnD,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,IAC3D6H,EAAG,OAAS,CAAC,GAAG,IAAIjH,GAAM,CAC1B,MAAMsY,EAAM+B,EAAMra,EAAG,EAAE,EACvB,OACE,oBAAC,WAAU,IAAKA,EAAG,GAAI,MAAO0D,EAAO,QAAS,IAC5C,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAE,GAC1D,oBAAC,gBAAe,KAAM1D,EAAI,KAAK,KAAK,KAAMlC,EAAM,MAAO,CAAE,WAAY,EAAG,SAAU,CAAE,EAAG,EACvF,oBAAC,QAAK,MAAO,CAAE,KAAM,CAAE,EAAG,EAC1B,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,QAAS,IAAMsc,EAAQpa,EAAG,EAAE,EACjE,UAAW,UAAU,4BAA6BlC,EAAM,CAAE,KAAMoC,EAAE,SAAS+G,EAAIjH,EAAG,GAAIlC,CAAI,CAAE,CAAC,GAAI,EAAE,wBAAyBA,CAAI,CAAE,CACtI,EACA,oBAAC,sBAAqB,IAAKwa,EAAK,KAAMxa,EAAM,CAC9C,CAEJ,CAAC,EACD,oBAAC,qBAAoB,GAAImJ,EAAI,OAAQkT,EAAM,IAAKA,GAAQ,KAAOE,EAAMF,CAAI,EAAI,KAAM,KAAMrc,EACvF,QAAS,IAAMsc,EAAQ,IAAI,EAAG,UAAW7V,EAAW,CACxD,CAEJ,CAGA,SAAS,cAAc,CAAE,KAAA4R,EAAM,KAAArY,EAAM,MAAA4F,EAAO,KAAAgE,EAAM,MAAA4S,EAAO,UAAA/V,CAAU,EAAG,CACpE,MAAM0C,EAAKkP,EAAK,MACV9U,EAAU8U,EAAK,SAAW,CAAC,EAC3B/V,EAAI,OAAO,WACXF,EAAI,OAAO,YACX,CAACqa,EAAaC,CAAc,EAAI,MAAM,SAAS,IAAI,EACnD,CAACC,EAAYC,CAAa,EAAI,MAAM,SAAS,IAAI,EACjD,CAACC,EAAWC,CAAY,EAAI,MAAM,SAAS,EAAE,EAC7C,CAACC,EAAeC,CAAgB,EAAI,MAAM,SAAS,IAAI,EACvD,CAACC,EAAgBC,CAAiB,EAAI,MAAM,SAAS,EAAK,EAE1DpG,EAAQ3N,EAAG,OAAS,CAAC,EACrBgU,EAASvG,GAAOxU,EAAE,SAAS+G,EAAIyN,EAAI5W,CAAI,EACvCod,EAAajU,EAAG,UAAY,CAAC,EAC7B2M,EAAWsH,EAAW,WAAa,GACnCpH,EAAaoH,EAAW,aAAe,GACvCC,GAAalU,EAAG,QAAU,CAAC,GAAG,OAAS,EACvCmU,EAAe,MAAOnO,GAAU,CACpC,GAAI,CAAE,MAAM7M,EAAE,YAAY6G,EAAG,GAAI,CAAE,SAAU,CAAE,SAAA2M,EAAU,WAAAE,EAAY,GAAG7G,CAAM,CAAE,CAAC,CAAG,MAC1E,CAAE1I,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,CAAG,CAC7D,EACMud,EAAS,CAAC,EAChBzG,EAAM,QAAQ5U,GAAM,CAAEqb,EAAOrb,EAAG,EAAE,EAAI,CAAC,CAAG,CAAC,EAC3C,MAAMsb,EAAa,CAAC,EACpBja,EAAQ,QAAQrC,GAAK,CAAMA,EAAE,MAAQ,MAAQqc,EAAOrc,EAAE,IAAI,EAAGqc,EAAOrc,EAAE,IAAI,EAAE,KAAKA,CAAC,EAAQsc,EAAW,KAAKtc,CAAC,CAAG,CAAC,EAE/G,MAAMwC,EAAO,qBAAqByF,EAAI5F,CAAO,EACvCka,EAAa3G,EAAM,OAAO5U,GAAM,CAACwB,EAAKxB,EAAG,EAAE,CAAC,EAC5Cwb,EAAWna,EAAQ,QAAU4F,EAAG,WAAasU,EAAW,SAAW,EACzE,IAAIE,EAAY,KACXpa,EAAQ,OACJA,EAAQ,OAAS4F,EAAG,UAAWwU,EAAY,WAAW,0BAA2Bpa,EAAQ,OAAQvD,EAAM,CAAE,MAAOmJ,EAAG,SAAU,CAAC,EAC9HsU,EAAW,SAAQE,EAAY,UAAU,4BAA6B3d,EAAM,CAAE,KAAMyd,EAAW,IAAIvb,GAAMA,EAAG,MAAQ,IAAMib,EAAMjb,EAAG,EAAE,CAAC,EAAE,KAAK,IAAI,CAAE,CAAC,GAFxIyb,EAAY,EAAE,6BAA8B3d,CAAI,EAIrE,MAAM0B,EAAM,aAAayH,EAAG,IAAI,EAC1ByU,EAAQ,SAAY,CACxB,MAAM9Z,EAAO,UAAU,4BAA6B9D,EAAM,CAAE,MAAOmJ,EAAG,OAAS,GAAI,KAAMA,EAAG,IAAK,CAAC,EAClG,GAAI,UAAU,MACZ,GAAI,CAAE,MAAM,UAAU,MAAM,CAAE,MAAOA,EAAG,OAAS,OAAQ,KAAArF,EAAM,IAAApC,CAAI,CAAC,EAAG,MAAQ,OACxEe,EAAG,CAAE,GAAIA,GAAKA,EAAE,OAAS,aAAc,MAAQ,CAExD,MAAMuB,EAAK,MAAM,aAAaF,EAAO;AAAA,EAAOpC,CAAG,EAC/C+E,EAAU,EAAEzC,EAAK,yBAA2B,6BAA8BhE,CAAI,CAAC,CACjF,EACM6d,EAAW,SAAY,CAC3B,MAAM7Z,EAAK,MAAM,aAAamF,EAAG,IAAI,EACrC1C,EAAU,EAAEzC,EAAK,6BAA+B,6BAA8BhE,CAAI,CAAC,CACrF,EAGM8d,GAAe,IAAM,CACpBva,EAAQ,SACT4F,EAAG,aAAe,SAAU4U,EAAU,EAAQb,EAAkB,EAAI,EAC1E,EACMa,EAAY,SAAY,CAC5B,GAAI,CAACxa,EAAQ,OAAQ,OACrB,MAAM0B,EAAM7C,EAAE,YAAYmB,EAAQ,IAAIrC,IAAM,CAAE,GAAIA,EAAE,GAAI,KAAMA,EAAE,IAAK,EAAE,EAAGiI,EAAG,UAAW,CAAE,KAAM,SAAU,KAAM,KAAK,IAAI,CAAE,CAAC,EAC5H,GAAI,CAAE,MAAM7G,EAAE,gBAAgB6G,EAAG,GAAIlE,CAAG,EAAGwB,EAAU,EAAE,6BAA8BzG,CAAI,CAAC,CAAG,MACnF,CAAEyG,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,CAAG,CAC7D,EACMge,GAAU,SAAY,CAC1B,GAAI,CAACza,EAAQ,OAAQ,OACrB,MAAM0a,EAAO7b,EAAE,YAAYmB,EAAQ,IAAIrC,IAAM,CAAE,GAAIA,EAAE,GAAI,KAAMA,EAAE,KAAM,KAAMA,EAAE,IAAK,EAAE,EAAGiI,EAAG,UAAW,CAAE,KAAM,OAAQ,KAAM,CAAE,CAAC,EAE1H+U,EAAS,CAAC,EAChB,QAAS/d,EAAI,EAAGA,GAAKgJ,EAAG,UAAWhJ,IAAK+d,EAAO/d,CAAC,EAAI,CAAC,EACrDoD,EAAQ,QAAQrC,GAAK,CAAE,MAAMgB,GAAK+b,EAAK/c,EAAE,EAAE,EAAOgd,EAAOhc,EAAE,GAAGgc,EAAOhc,EAAE,EAAE,KAAKhB,EAAE,EAAE,CAAG,CAAC,EACtF,QAASid,EAAQ,EAAGA,EAAQ,IAAKA,IAAS,CACxC,IAAIC,GAAM,EAAGC,EAAQ,EACrB,QAASle,GAAI,EAAGA,IAAKgJ,EAAG,UAAWhJ,KAC7B+d,EAAO/d,EAAC,EAAE,OAAS+d,EAAOE,EAAG,EAAE,SAAQA,GAAMje,IAC7C+d,EAAO/d,EAAC,EAAE,OAAS+d,EAAOG,CAAK,EAAE,SAAQA,EAAQle,IAEvD,GAAI+d,EAAOE,EAAG,EAAE,OAASF,EAAOG,CAAK,EAAE,QAAU,EAAG,MACpDH,EAAOG,CAAK,EAAE,KAAKH,EAAOE,EAAG,EAAE,IAAI,CAAC,CACtC,CACA,MAAMnZ,EAAM,CAAC,EACb,OAAO,KAAKiZ,CAAM,EAAE,QAAQ/d,GAAK+d,EAAO/d,CAAC,EAAE,QAAQa,IAAM,CAAEiE,EAAIjE,EAAE,EAAI,OAAOb,CAAC,CAAG,CAAC,CAAC,EAClF,GAAI,CAAE,MAAMmC,EAAE,gBAAgB6G,EAAG,GAAIlE,CAAG,EAAGwB,EAAU,EAAE,2BAA4BzG,CAAI,CAAC,CAAG,MACjF,CAAEyG,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,CAAG,CAC7D,EACMgV,GAAe,MAAO5U,GAAM,CAChC,GAAI,CAAE,MAAMkC,EAAE,YAAY6G,EAAG,GAAI,CAAE,UAAW/I,CAAE,CAAC,CAAG,MAAY,CAAEqG,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,CAAG,CACnH,EACMse,GAAW,SAAY,CAC3B,MAAM9G,EAAOqF,EAAU,KAAK,EACtBjG,EAAK+F,EAEX,GADAC,EAAc,IAAI,EACd,EAACpF,EACL,GAAI,CACE,OAAOlV,EAAE,YAAe,WAAY,MAAMA,EAAE,WAAW6G,EAAG,GAAIyN,EAAI,CAAE,KAAAY,CAAK,CAAC,EACzE,MAAMlV,EAAE,YAAY6G,EAAG,GAAI,CAAE,MAAO2N,EAAM,IAAI5U,GAAMA,EAAG,KAAO0U,EAAK,CAAE,GAAG1U,EAAI,KAAAsV,CAAK,EAAItV,CAAE,CAAE,CAAC,CACjG,MAAY,CAAEuE,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,CAAG,CAC/D,EACMue,GAAa,MAAOC,EAAKnC,IAAS,CACtCK,EAAe,IAAI,EACnB,GAAI,CAAE,MAAMpa,EAAE,cAAc6G,EAAG,GAAIqV,EAAKnC,CAAI,CAAG,MAAY,CAAE5V,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,CAAG,CAC9G,EACMye,EAAS,SAAY,CACzB,MAAMvd,EAAI6b,EACVC,EAAiB,IAAI,EAAGN,EAAe,IAAI,EAC3C,GAAI,CAAE,MAAMpa,EAAE,aAAa6G,EAAG,GAAIjI,EAAE,EAAE,EAAGuF,EAAU,UAAU,0BAA2BzG,EAAM,CAAE,KAAMkB,EAAE,IAAK,CAAC,CAAC,CAAG,MACxG,CAAEuF,EAAU,EAAE,0BAA2BzG,CAAI,CAAC,CAAG,CAC7D,EAEM0e,EAAcjC,EAAclZ,EAAQ,KAAKrC,GAAKA,EAAE,KAAOub,CAAW,EAAI,KAEtEkC,EAAczd,GAClB,oBAAC,UAAO,IAAKA,EAAE,GAAI,KAAK,SAAS,UAAU,YAAY,QAAS,IAAMwb,EAAexb,EAAE,EAAE,EAAG,MAAO,CACjG,UAAW,GAAI,QAAS,WAAY,aAAc,IAAK,OAAQ,UAAW,SAAU,OACpF,OAAQ,4BAA6B,WAAY,mBAAoB,MAAO,aAC5E,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,SAAU,SAAU,aAAc,WAAY,WAAY,QACnH,GAAIA,EAAE,IAAK,EAGPsM,GAAU,sBAAsBrE,EAAI5F,CAAO,EAC3Cqb,EAAgB,CAAC,EACjBC,EAAe,CAAC,EACtBrR,GAAQ,QAAQlM,GAAK,CACf6H,EAAG,aAAe,UAAY7H,EAAE,MAAQ,MAAQic,EAAOjc,EAAE,IAAI,GAAIsd,EAActd,EAAE,IAAI,EAAIsd,EAActd,EAAE,IAAI,GAAK,CAAC,GAAG,KAAKA,CAAC,EAC3Hud,EAAa,KAAKvd,CAAC,CAC1B,CAAC,EACD,MAAMwd,GAAY,CAACxd,EAAGf,IACpB,oBAAC,QAAK,IAAK,IAAMA,EAAIe,EAAE,KAAM,MAAO,EAAE,0BAA2BtB,CAAI,EAAG,MAAO,CAC7E,QAAS,cAAe,WAAY,SAAU,UAAW,GAAI,QAAS,WAAY,aAAc,IAAK,SAAU,OAC/G,OAAQ,+BAAgC,WAAY,cAAe,MAAO,eAC1E,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,SAAU,SAAU,aAAc,WAAY,WAAY,QACnH,GAAIsB,EAAE,IAAK,EAEPyd,GAAYld,GAASA,EAAK,OAAS,GACvC,oBAAC,OAAI,MAAO,CAAE,UAAW,CAAE,GACzB,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,MAAO,cAAe,GAAI,EAAE,0BAA2B7B,CAAI,CAAE,EAClI,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,EAAG,UAAW,CAAE,GAAI6B,EAAK,IAAIid,EAAS,CAAE,CAChG,EAGF,OACE,oBAAC,OAAI,MAAO,CAAE,QAAS,cAAe,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,GACtF,oBAAC,WAAU,MAAOlZ,EAAO,QAAS,GAAI,MAAO,CAAE,UAAW,QAAS,GACjE,oBAAC,aAAY,MAAO,CAAE,SAAU,EAAG,GAAI,EAAE,6BAA8B5F,CAAI,CAAE,EAC7E,oBAAC,UAAO,KAAK,SAAS,UAAU,YAAY,QAAS6d,EAAU,aAAY,UAAU,+BAAgC7d,EAAM,CAAE,KAAMmJ,EAAG,IAAK,CAAC,EAAG,MAAO,CACpJ,QAAS,QAAS,OAAQ,aAAc,QAAS,WAAY,UAAW,GAAI,OAAQ,OAAQ,WAAY,cAAe,OAAQ,UAC/H,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,cAAe,SAAU,MAAO,aAAc,WAAY,GACnH,GAAIA,EAAG,IAAK,EACZ,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,GAAG,oBAAC,SAAQ,KAAMA,EAAG,KAAM,KAAM,IAAK,KAAMnJ,EAAM,CAAE,EAChF,oBAAC,OAAI,MAAO,CAAE,UAAW,GAAI,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,IAAK,MAAO,cAAe,GAAI,EAAE,4BAA6BA,CAAI,CAAE,EACpK,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,EAAG,UAAW,EAAG,GACnD,oBAAC,aAAY,QAAQ,QAAQ,QAAS6d,EAAU,MAAO,CAAE,KAAM,CAAE,GAAI,EAAE,2BAA4B7d,CAAI,CAAE,EACzG,oBAAC,aAAY,QAAS4d,EAAO,MAAO,CAAE,KAAM,CAAE,EAAG,KAAK,KAAK,EAAE,wBAAyB5d,CAAI,CAAE,CAC9F,CACF,EAEA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,EAAG,WAAY,QAAS,GAC3EmJ,EAAG,MAAQ,oBAAC,WAAU,KAAK,MAAM,gBAAgBA,EAAG,KAAMnJ,CAAI,CAAE,EACjE,oBAAC,WAAU,KAAM,CAAE,OAAQ,KAAM,KAAM,KAAM,OAAQ,IAAK,EAAEmJ,EAAG,UAAU,GAAI,EAAE,oBAAsBA,EAAG,WAAYnJ,CAAI,CAAE,EAC1H,oBAAC,WAAU,KAAK,MAAM,UAAU,0BAA2BA,EAAM,CAAE,EAAGuD,EAAQ,MAAO,CAAC,CAAE,EACvF4F,EAAG,gBAAkB,aAAeA,EAAG,eACtC,oBAAC,WAAU,KAAK,MAAM,UAAU,4BAA6BnJ,EAAM,CAAE,KAAMmd,EAAMhU,EAAG,aAAa,CAAE,CAAC,CAAE,EAEvGA,EAAG,gBAAkB,UAAY,oBAAC,WAAU,KAAK,MAAM,EAAE,0BAA2BnJ,CAAI,CAAE,CAC7F,EACCmJ,EAAG,gBAAkB,UACpB,oBAAC,cAAa,KAAK,MAAM,UAAU,6BAA8BnJ,EAAM,CAAE,KAAMmJ,EAAG,IAAK,CAAC,CAAE,EAG5F,oBAAC,iBAAgB,MAAO,EAAE,wBAAyBnJ,CAAI,EAAG,KAAM,EAAE,4BAA6BA,CAAI,GACjG,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,GAC3D,oBAAC,QAAK,MAAO,CAAE,KAAM,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,EAAG,GAAI,EAAE,wBAAyBA,CAAI,CAAE,EACnH,oBAAC,cAAa,MAAOmJ,EAAG,UAAW,IAAK,EAAG,IAAK,EAAG,KAAMnJ,EAAM,UAAW,EAAE,wBAAyBA,CAAI,EAAG,SAAUgV,GAAc,CACtI,EACA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,CAAE,GACpC,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,KAAK,KAAK,SAAU,CAACzR,EAAQ,OAAQ,QAASua,GAAc,MAAO,CAAE,KAAM,CAAE,GAAI,EAAE,4BAA6B9d,CAAI,CAAE,EAC7J,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,KAAK,KAAK,SAAU,CAACuD,EAAQ,OAAQ,QAASya,GAAS,MAAO,CAAE,KAAM,CAAE,GAAI,EAAE,0BAA2Bhe,CAAI,CAAE,CACxJ,EACCwd,EAAW,OAAS,GACnB,oBAAC,WAAU,MAAO5X,EAAO,QAAS,GAAI,MAAO,CAAE,YAAa,QAAS,GACnE,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,EAAG,GAAI,UAAU,6BAA8B5F,EAAM,CAAE,EAAGwd,EAAW,MAAO,CAAC,CAAE,EAChJ,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,SAAU,GAAI,WAAY,KAAM,MAAO,cAAe,GAAI,EAAE,kCAAoCrU,EAAG,WAAYnJ,CAAI,CAAE,EACzK,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,EAAG,UAAW,EAAG,GAAIwd,EAAW,IAAImB,CAAU,CAAE,CACxG,EAED7H,EAAM,IAAI5U,GAAM,CACf,MAAML,EAAO0b,EAAOrb,EAAG,EAAE,GAAK,CAAC,EAC/B,OACE,oBAAC,WAAU,IAAKA,EAAG,GAAI,MAAO0D,EAAO,QAAS,GAAI,OAAQ1D,EAAG,OAC3D,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAE,GAC1D,oBAAC,gBAAe,KAAMA,EAAI,KAAMlC,EAAM,KAAK,KAAK,MAAO,CAAE,SAAU,EAAG,WAAY,CAAE,EAAG,EACvF,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAI6B,EAAK,MAAO,EAC3F,oBAAC,QAAK,MAAO,CAAE,KAAM,CAAE,EAAG,EAC1B,oBAAC,iBAAgB,MAAO,UAAU,6BAA8B7B,EAAM,CAAE,KAAMmd,EAAMjb,EAAG,EAAE,CAAE,CAAC,EAAG,QAAS,IAAM,CAAE0a,EAAc1a,EAAG,EAAE,EAAG4a,EAAaK,EAAMjb,EAAG,EAAE,CAAC,CAAG,GAAI,aAAa,IAAK,CAC1L,EACA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,EAAG,UAAW,EAAG,GACpEL,EAAK,OAASA,EAAK,IAAI8c,CAAU,EAChC,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,SAAU,KAAM,MAAO,cAAe,GAAI,EAAE,4BAA6B3e,CAAI,CAAE,CAE1H,EACC+e,GAASH,EAAc1c,EAAG,EAAE,GAAK,CAAC,CAAC,CACtC,CAEJ,CAAC,EACA2c,EAAa,OAAS,GACrB,oBAAC,WAAU,MAAOjZ,EAAO,QAAS,GAAI,MAAO,CAAE,YAAa,QAAS,GACnE,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,EAAG,GAAI,UAAU,2BAA4B5F,EAAM,CAAE,EAAG6e,EAAa,MAAO,CAAC,CAAE,EAChJ,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,SAAU,GAAI,WAAY,KAAM,MAAO,cAAe,GAAI,EAAE,+BAAgC7e,CAAI,CAAE,EACtJ,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,EAAG,UAAW,EAAG,GAAI6e,EAAa,IAAIC,EAAS,CAAE,CACzG,CAEJ,EAEA,oBAAC,iBAAgB,MAAO,EAAE,4BAA6B9e,CAAI,GACzD,oBAAC,gBAAe,QAAS8V,EAAU,SAAUjV,GAAKyc,EAAa,CAAE,SAAUzc,CAAE,CAAC,EAAG,MAAO,EAAE,2BAA4Bb,CAAI,EACxH,KAAM,EAAE8V,EAAW,8BAAgC,+BAAgC9V,CAAI,EAAG,EAC3Fqd,GACC,oBAAC,gBAAe,QAASrH,EAAY,SAAUnV,GAAKyc,EAAa,CAAE,WAAYzc,CAAE,CAAC,EAAG,MAAO,EAAE,6BAA8Bb,CAAI,EAC9H,KAAM,EAAEgW,EAAa,gCAAkC,iCAAkChW,CAAI,EAAG,CAEtG,EAGA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GAC5D2d,GAAa,oBAAC,cAAa,KAAK,KAAKA,CAAU,EAChD,oBAAC,aAAY,KAAK,KAAK,KAAI,GAAC,KAAK,KAAK,SAAU,CAACD,GAAY9T,EAAM,QAAS,IAAM4S,EAAM,OAAO,GAAI,EAAE,wBAAyBxc,CAAI,CAAE,EACpI,oBAAC,aAAY,KAAI,GAAC,QAAQ,QAAQ,QAAS,IAAMwc,EAAM,QAAQ,GAAI,EAAE,yBAA0Bxc,CAAI,CAAE,CACvG,EAEA,oBAAC,YAAW,KAAM,CAAC,CAAC0e,EAAa,QAAS,IAAMhC,EAAe,IAAI,EAAG,KAAM1c,EAC1E,OAAQ,EAAE,0BAA2BA,CAAI,EAAG,MAAO0e,EAAcA,EAAY,KAAO,IACnFA,GACC,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,GAAI,cAAe,CAAE,GAChF,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,EAAG,GAAI,EAAE,0BAA2B1e,CAAI,CAAE,EAC3G,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,CAAE,GACrD8W,EAAM,IAAI5U,GACT,oBAAC,WAAU,IAAKA,EAAG,GAAI,OAAQwc,EAAY,OAASxc,EAAG,GAAI,MAAOA,EAAG,MAAO,KAAMA,EAAG,MACnF,QAAS,IAAMqc,GAAWG,EAAY,GAAIxc,EAAG,EAAE,GAAIA,EAAG,IAAK,CAC9D,EACD,oBAAC,WAAU,OAAQwc,EAAY,MAAQ,KAAM,QAAS,IAAMH,GAAWG,EAAY,GAAI,IAAI,GAAI,EAAE,yBAA0B1e,CAAI,CAAE,CACnI,EACA,oBAAC,aAAY,QAAQ,YAAY,KAAI,GAAC,QAAS,IAAMgd,EAAiB0B,CAAW,GAAI,EAAE,0BAA2B1e,CAAI,CAAE,CAC1H,CAEJ,EAEA,oBAAC,YAAW,KAAM2c,GAAc,KAAM,QAAS,IAAMC,EAAc,IAAI,EAAG,KAAM5c,EAC9E,OAAQ,EAAE,0BAA2BA,CAAI,EAAG,MAAO,EAAE,yBAA0BA,CAAI,EACnF,OAAQ,oBAAC,aAAY,KAAI,GAAC,QAASse,GAAU,SAAU,CAACzB,EAAU,KAAK,GAAI,EAAE,wBAAyB7c,CAAI,CAAE,GAC5G,oBAAC,OAAI,MAAO,CAAE,cAAe,CAAE,GAC7B,oBAAC,YAAW,MAAO6c,EAAW,UAAWza,EAAE,eAAiB,GAAI,UAAS,GAAC,SAAUK,GAAKqa,EAAara,EAAE,OAAO,KAAK,EAClH,UAAWA,GAAK,CAAMA,EAAE,MAAQ,SAAS6b,GAAS,CAAG,EAAG,aAAY,EAAE,yBAA0Bte,CAAI,EAAG,CAC3G,CACF,EAEA,oBAAC,cAAa,KAAMid,EAAgB,KAAMjd,EAAM,OAAQ,IACtD,MAAO,EAAE,+BAAgCA,CAAI,EAC7C,KAAM,EAAEmJ,EAAG,aAAe,SAAW,qCAAuC,mCAAoCnJ,CAAI,EACpH,aAAc,EAAE,4BAA6BA,CAAI,EACjD,SAAU,IAAMkd,EAAkB,EAAK,EAAG,UAAW,IAAM,CAAEA,EAAkB,EAAK,EAAGa,EAAU,CAAG,EAAG,EAEzG,oBAAC,cAAa,KAAM,CAAC,CAAChB,EAAe,KAAM/c,EAAM,OAAM,GAAC,OAAQ,IAC9D,MAAO,UAAU,+BAAgCA,EAAM,CAAE,KAAM+c,EAAgBA,EAAc,KAAO,EAAG,CAAC,EACxG,KAAM,EAAE,8BAA+B/c,CAAI,EAAG,aAAc,EAAE,0BAA2BA,CAAI,EAC7F,SAAU,IAAMgd,EAAiB,IAAI,EAAG,UAAWyB,EAAQ,CAC/D,CAEJ,CAGA,SAAS,aAAa,CAAE,KAAApG,EAAM,KAAArY,EAAM,MAAA4F,EAAO,KAAAgE,EAAM,MAAA4S,EAAO,UAAA/V,CAAU,EAAG,CACnE,MAAM0C,EAAKkP,EAAK,MACV2G,EAAM,YAAY,GAAI,EACtB5c,EAAI,OAAO,YACX8X,EAAU7B,EAAK,SAAW,CAAC,EAC3B4G,EAAW5G,EAAK,UAAY,CAAC,EAC7BvB,EAAQ3N,EAAG,OAAS,CAAC,EACrB,CAAC+V,EAAcC,CAAe,EAAI,MAAM,SAAS,IAAI,EAErDzE,EAAYtY,EAAE,UAAU+G,EAAI+Q,EAAS+E,EAAU,CAAE,gBAAiB,GAAO,KAAAjf,CAAK,CAAC,EAC/Euc,EAAQ,CAAC,EACf7B,EAAU,QAAQpZ,GAAK,CAAEib,EAAMjb,EAAE,IAAI,EAAIA,CAAG,CAAC,EAC7C,MAAM8d,EAAY,CAAC,EACnBH,EAAS,QAAQ,GAAK,EAAM,CAACG,EAAU,EAAE,IAAI,GAAK,EAAE,GAAKA,EAAU,EAAE,IAAI,KAAGA,EAAU,EAAE,IAAI,EAAI,EAAE,GAAI,CAAC,EAGvG,MAAMC,EAAY,CAAC,GAClBhH,EAAK,WAAa,CAAC,GAAG,QAAQnX,GAAK,CAC9BA,EAAE,MAAQ,OACV,CAACme,EAAUne,EAAE,IAAI,GAAK,OAAOA,EAAE,EAAE,EAAI,OAAOme,EAAUne,EAAE,IAAI,EAAE,EAAE,KAAGme,EAAUne,EAAE,IAAI,EAAIA,EAC7F,CAAC,EAED,MAAMiL,EAAU,oBAAoBhD,EAAG,KAAMnJ,CAAI,EACjD8W,EAAM,QAAQ5U,GAAM,CAClB,MAAMhB,EAAIme,EAAUnd,EAAG,EAAE,EACrBhB,GAAGiL,EAAQ,KAAK,CAAE,GAAI,QAAUjK,EAAG,GAAI,KAAM,OAAQ,IAAKhB,EAAE,IAAK,IAAKA,EAAE,IAAK,MAAOgB,EAAG,MAAO,MAAOA,EAAG,MAAO,MAAOA,EAAG,IAAK,CAAC,CACrI,CAAC,EAED,MAAMod,EAASnW,EAAG,OAAS,KAAK,MAAMA,EAAG,MAAM,EAAI,KAC7CoW,EAAUpW,EAAG,UAAY,KAAK,MAAMA,EAAG,SAAS,EAAI,KACpDqW,EAAYF,EAASA,EAASN,EAAM,KACpCS,EAAUF,EAAUP,EAAMO,EAAU,KACpCG,EAAgB5I,EAAM,OAAO5U,GAAMkd,EAAUld,EAAG,EAAE,CAAC,EAAE,OAGrDyd,EAAY/I,GAAO,CACvB,GAAIwI,EAAUxI,CAAE,EAAG,OAAO,KAC1B,MAAM1V,EAAIme,EAAUzI,CAAE,EACtB,GAAI,CAAC1V,EAAG,OAAOue,GAAW,MAAQA,EAAU,EAAI,IAAQ,CAAE,KAAM,MAAO,EAAI,KAC3E,MAAMG,EAAMZ,EAAM,KAAK,MAAM9d,EAAE,EAAE,EACjC,OAAO,SAAS0e,CAAG,GAAKA,EAAM,kBAAoB,CAAE,KAAM,QAAS,IAAK,KAAK,MAAMA,EAAM,GAAK,CAAE,EAAI,IACtG,EACMC,EAAcC,GAAQA,EAAI,OAAS,OAAS,EAAE,4BAA6B9f,CAAI,EAAI,UAAU,+BAAgCA,EAAM,CAAE,EAAG8f,EAAI,GAAI,CAAC,EACjJC,EAAYjJ,EAAM,OAAO5U,GAAMyd,EAASzd,EAAG,EAAE,CAAC,EAE9C8d,EAAO5e,GAAQ,CACnB,MAAMkZ,EAAK0E,EAAM,KAAK,MAAM5d,CAAG,EAC/B,GAAI,CAAC,SAASkZ,CAAE,EAAG,MAAO,GAC1B,MAAM3Z,EAAI,KAAK,MAAM2Z,EAAK,GAAK,EAC/B,OAAO3Z,EAAI,EAAI,EAAE,yBAA0BX,CAAI,EAAI,UAAU,wBAAyBA,EAAM,CAAE,EAAGW,CAAE,CAAC,CACtG,EAEMsf,EAAO9W,EAAG,gBAAkB,aAAeA,EAAG,cAAgB2N,EAAM,KAAK5U,GAAMA,EAAG,KAAOiH,EAAG,aAAa,EAAI,KAC7G+W,EAAWD,EAAO7d,EAAE,eAAe+G,EAAI8W,EAAK,GAAI/F,EAAS8E,CAAG,EAAI,KAChEmB,EAAWF,EAAO7d,EAAE,aAAa+G,EAAI8W,EAAK,GAAI/F,CAAO,EAAI,KAE/D,OACE,oBAAC,OAAI,MAAO,CAAE,QAAS,cAAe,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,GACtF,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,oBAAqB,UAAW,IAAK,CAAE,GACpE,oBAAC,OAAI,MAAO,CAAE,WAAYsF,GAAa,MAAQA,EAAY,GAAK,IAAQ,oBAAsB,mBAAoB,aAAc,GAAI,QAAS,WAAY,UAAW,SAAU,OAAQ,yBAA0B,GAC9M,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,MAAOA,GAAa,MAAQA,EAAY,GAAK,IAAQ,eAAiB,YAAa,GACrJA,GAAa,KAAO,cAAcA,CAAS,EAAI,cAAcC,CAAO,CACvE,EACA,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,cAAe,EAAG,cAAe,YAAa,MAAO,cAAe,GACtI,EAAED,GAAa,KAAQA,EAAY,EAAI,2BAA6B,wBAA2B,yBAA0Bxf,CAAI,CAChI,EACCmJ,EAAG,QACF,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,SAAU,KAAM,MAAO,cAAe,GACvF,UAAU,wBAAyBnJ,EAAM,CAAE,KAAM,gBAAgBmJ,EAAG,OAAQnJ,CAAI,CAAE,CAAC,CACtF,CAEJ,EACA,oBAAC,OAAI,MAAO,CAAE,WAAY,mBAAoB,aAAc,GAAI,QAAS,WAAY,UAAW,SAAU,OAAQ,yBAA0B,GAC1I,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,EAAG,GAAI0f,EAAc,IAAE5I,EAAM,MAAO,EACrG,oBAAC,OAAI,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,cAAe,EAAG,cAAe,YAAa,MAAO,cAAe,GAAI,EAAE,0BAA2B9W,CAAI,CAAE,CAClL,CACF,EAEC+f,EAAU,OAAS,GAClB,oBAAC,cAAa,KAAK,OAAO,KAAK,KAC7B,MAAO,UAAU,6BAA8B/f,EAAM,CAAE,MAAO+f,EAAU,IAAI7d,GAAMA,EAAG,MAAQ,IAAME,EAAE,SAAS+G,EAAIjH,EAAG,GAAIlC,CAAI,CAAC,EAAE,KAAK,IAAI,CAAE,CAAC,GAC3I,EAAE,iCAAkCA,CAAI,CAC3C,EAGDigB,GAAQC,GACP,oBAAC,WAAU,MAAOta,EAAO,QAAS,GAAI,OAAQqa,EAAK,OACjD,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAE,GAC1D,oBAAC,aAAY,MAAO,CAAE,KAAM,EAAG,SAAU,EAAG,GAAI,EAAE,0BAA2BjgB,CAAI,CAAE,EACnF,oBAAC,gBAAe,KAAMigB,EAAM,KAAK,KAAK,KAAMjgB,EAAM,CACpD,EACCkgB,EAAS,OAAS,UACjB,wCACE,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,KAAM,aAAc,WACjH,QAAS,cAAe,gBAAiB,EAAG,gBAAiB,WAAY,SAAU,QAAS,GAC3F,UAAU,6BAA8BlgB,EAAM,CAAE,EAAGkgB,EAAS,MAAQ,EAAG,MAAOA,EAAS,QAAQ,KAAM,CAAC,CACzG,EACA,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GACrF,UAAU,0BAA2BlgB,EAAM,CAAE,KAAMmgB,EAAS,KAAM,MAAOA,EAAS,KAAM,CAAC,EAAE,MAAI,EAAE,mBAAqB,cAAcD,EAAS,OAAO,EAAGlgB,CAAI,CAC9J,CACF,EAEA,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,EAAG,GAAI,EAAE,0BAA2BA,CAAI,CAAE,CAE7H,EAGF,oBAAC,UAAS,MAAO4F,EAAO,KAAM5F,EAAM,OAAQ,IAAK,QAASmM,EAAS,KAAM,kBAAkBhD,EAAG,IAAI,EAAG,aAAY,GAAC,SAAQ,GAAC,EAC1H,OAAO,KAAKkW,CAAS,EAAE,SAAW,GACjC,oBAAC,OAAI,MAAO,CAAE,UAAW,IAAK,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAI,EAAE,6BAA8Brf,CAAI,CAAE,EAGtI,oBAAC,iBAAgB,MAAO,EAAE,2BAA4BA,CAAI,EAAG,KAAM,qBAAqBmJ,CAAE,EAAI,EAAE,+BAAgCnJ,CAAI,EAAI,QACtI,oBAAC,oBAAmB,MAAOmJ,EAAI,UAAWuR,EAAW,KAAM1a,EAAM,MAAO4F,EAAO,cAAa,GAAC,cAAeqa,EAAOA,EAAK,GAAK,KAAM,MAAK,GAAC,QAAS/F,EAAS,QAAS,gBAAgB/Q,CAAE,EAAG,CAC3L,EAEA,oBAAC,iBAAgB,MAAO,EAAE,yBAA0BnJ,CAAI,EAAG,KAAM,EAAE,wBAAyBA,CAAI,GAC9F,oBAAC,gBAAe,GAAImJ,EAAI,QAAS+Q,EAAS,UAAWQ,EAAW,KAAM1a,EAAM,MAAO4F,EAAO,UAAWa,EAAW,CAClH,EAEA,oBAAC,iBAAgB,MAAO,EAAE,uBAAwBzG,CAAI,GACnD8W,EAAM,IAAI5U,GAAM,CACf,MAAMke,EAAOhe,EAAE,aAAa+G,EAAIjH,EAAG,GAAIgY,CAAO,EACxCrL,EAAOzM,EAAE,eAAe+G,EAAIjH,EAAG,GAAIgY,EAAS8E,CAAG,EAC/CqB,EAAMjB,EAAUld,EAAG,EAAE,EACrBkP,EAAMiO,EAAUnd,EAAG,EAAE,EACrB4d,GAAMH,EAASzd,EAAG,EAAE,EACpBsY,EAAM+B,EAAMra,EAAG,EAAE,EACvB,OACE,oBAAC,WAAU,IAAKA,EAAG,GAAI,MAAO0D,EAAO,QAAS,IAC5C,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAE,GAC1D,oBAAC,gBAAe,KAAM1D,EAAI,KAAK,KAAK,KAAMlC,EAAM,MAAO,CAAE,WAAY,EAAG,SAAU,CAAE,EAAG,EACvF,oBAAC,QAAK,MAAO,CAAE,KAAM,CAAE,EAAG,EAC1B,oBAAC,QAAK,MAAO,CAAE,WAAY,WAAY,WAAY,IAAK,SAAU,EAAG,GAAIogB,EAAK,KAAK,IAAEA,EAAK,KAAM,EAChG,oBAAC,aAAY,KAAK,KAAK,QAAQ,QAAQ,QAAS,IAAMjB,EAAgBjd,EAAG,EAAE,EACzE,UAAW,UAAU,4BAA6BlC,EAAM,CAAE,KAAMoC,EAAE,SAAS+G,EAAIjH,EAAG,GAAIlC,CAAI,CAAE,CAAC,GAAI,EAAE,wBAAyBA,CAAI,CAAE,CACtI,EACA,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,OAAQ,EAAG,aAAc,IAAK,WAAY,mBAAoB,SAAU,QAAS,GAC3G,oBAAC,OAAI,MAAO,CAAE,OAAQ,OAAQ,OAAQogB,EAAK,MAAQA,EAAK,KAAOA,EAAK,MAAQ,IAAM,GAAK,IAAK,WAAYle,EAAG,MAAO,aAAc,IAAK,WAAY,YAAa,EAAG,CACnK,EACA,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,WAAY,KAAM,MAAO,eAAgB,aAAc,WAC1I,QAAS,cAAe,gBAAiB,EAAG,gBAAiB,WAAY,SAAU,QAAS,GAC3Fme,EAAM,UAAU,4BAA6BrgB,EAAM,CAAE,KAAM,gBAAgBqgB,EAAKrgB,CAAI,CAAE,CAAC,EACpF6O,EAAK,OAAS,UAAY,UAAU,6BAA8B7O,EAAM,CAAE,EAAG6O,EAAK,MAAQ,EAAG,MAAOA,EAAK,QAAQ,KAAM,CAAC,EACxH,EAAE,0BAA2B7O,CAAI,CACvC,EACCoR,GAAO,CAACiP,GAAO,CAACP,IACf,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,SAAU,GAAI,MAAO,cAAe,GAAI,UAAU,0BAA2B9f,EAAM,CAAE,IAAKggB,EAAI5O,EAAI,EAAE,CAAE,CAAC,CAAE,EAE9J0O,IACC,oBAAC,OAAI,KAAK,SAAS,MAAO,CAAE,UAAW,EAAG,QAAS,cAAe,WAAY,SAAU,IAAK,EAAG,QAAS,WAAY,aAAc,IACjI,WAAY,mBAAoB,OAAQ,iCAAkC,WAAY,WAAY,WAAY,IAAK,SAAU,KAAM,MAAO,YAAa,GAAG,MACtJD,EAAWC,EAAG,CACpB,EAEDtF,GAAOA,EAAI,YACV,oBAAC,OAAI,MAAO,CAAE,UAAW,EAAG,WAAY,WAAY,WAAY,IAAK,SAAU,GAAI,WAAY,KAAM,MAAO,cAAe,GAAG,MACxH,EAAEA,EAAI,SAAW,MAAQA,EAAI,QAAU,EAAI,gCAAkC,+BAAgCxa,CAAI,CACvH,EAEF,oBAAC,sBAAqB,IAAKwa,EAAK,KAAMxa,EAAM,CAC9C,CAEJ,CAAC,CACH,EAEA,oBAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,GAC5D0f,EAAgB5I,EAAM,QAAU,oBAAC,cAAa,KAAK,MAAM,WAAW,wBAAyB4I,EAAe1f,EAAM,CAAE,MAAO8W,EAAM,MAAO,CAAC,CAAE,EAC5I,oBAAC,aAAY,KAAK,KAAK,QAAQ,OAAO,KAAI,GAAC,KAAK,KAAK,SAAUlN,EAAM,QAAS,IAAM4S,EAAM,QAAQ,GAAI,EAAE,wBAAyBxc,CAAI,CAAE,CACzI,EAEA,oBAAC,qBAAoB,GAAImJ,EAAI,OAAQ+V,EAAc,IAAKA,GAAgB,KAAO3C,EAAM2C,CAAY,EAAI,KAAM,KAAMlf,EAC/G,QAAS,IAAMmf,EAAgB,IAAI,EAAG,UAAW1Y,IAAc,IAAM,CAAC,GAAI,CAC9E,CAEJ,CAKA,SAAS,eAAe,CAAE,MAAAb,EAAQ,QAAS,KAAA5F,EAAO,KAAM,OAAAoD,EAAQ,KAAA0C,EAAM,aAAA4E,EAAc,YAAAC,EAAa,YAAA2V,EAAa,OAAA9Z,EAAQ,SAAA+Z,CAAS,EAAG,CAChI,kBAAkB,EAClB,eAAe,EACf,KAAM,CAACC,EAAQC,CAAc,EAAI,MAAM,SAAS,IAAM,CAEpD,GAAI,OAAO,iBAAkB,MAAO,CAAE,KAAM,WAAY,IAAK,UAAW,EACxE,MAAMlK,EAAO,iBAAiB,EAC9B,OAAIA,IAASA,EAAK,OAAS,UAAYA,EAAK,OAAS,SAAWA,EAAK,OAAS,gBAAkBA,EAAK,QAAUA,EAAK,SAAiB,CAAE,GAAGA,EAAM,SAAU,EAAK,EAC3JA,GAAQA,EAAK,OAAS,WAAmB,CAAE,KAAM,WAAY,IAAKA,EAAK,MAAQ,WAAa,WAAa,MAAO,EAC7G,CAAE,KAAM,WAAY,IAAK,MAAO,CACzC,CAAC,EACK,CAACmK,EAAWC,CAAY,EAAI,MAAM,SAAS,IAAI,EAC/C,CAACC,EAASC,CAAU,EAAI,MAAM,SAAS,CAAC,EAE9C,MAAM,UAAU,IAAM,CACpB,GAAI,CAACH,GAAa,CAACF,EAAO,SAAU,OACpC,IAAIve,EAAQ,GACZ,MAAMK,EAAI,OAAO,WACXwe,EAAO,IAAM,CAAM7e,GAAO8e,EAAG,CAAE,KAAM,WAAY,IAAK,MAAO,CAAC,CAAG,EACjE/c,EAAK,IAAM,CAAM/B,GAAOwe,EAAezH,GAAM,CAAE,MAAM5Y,EAAI,CAAE,GAAG4Y,CAAG,EAAG,cAAO5Y,EAAE,SAAiBA,CAAG,CAAC,CAAG,EACrG4gB,EAAQnd,GAAM,CAAC,CAACA,GAAKA,EAAE,UAAY6c,EAAU,MAC7Cxf,EAAIsf,EAAO,OAAS,QAAUle,EAAE,SAASke,EAAO,OAAO,EAAIle,EAAE,QAAQke,EAAO,MAAM,EACxF,eAAQ,QAAQtf,CAAC,EAAE,KAAK2C,GAAMmd,EAAKnd,CAAC,EAAIG,EAAG,EAAI8c,EAAK,CAAE,EAAE,MAAMA,CAAI,EAC3D,IAAM,CAAE7e,EAAQ,EAAO,CAChC,EAAG,CAACye,EAAWF,EAAO,SAAUI,CAAO,CAAC,EACxC,KAAM,CAACK,EAAOxa,CAAS,EAAI,cAAc,EACnC,CAACR,EAAYib,CAAa,EAAI,MAAM,SAAS,IAAI,EACjDC,EAAY,MAAM,OAAO,IAAI,EAEnC,MAAM,UAAU,IAAM,CACpB,MAAMjI,EAAO,OAAO,iBACpB,GAAKA,EACL,IAAI,CAAE,OAAO,OAAO,gBAAkB,MAAY,CAAE,OAAO,iBAAmB,IAAM,CACpF6H,EAAG,CAAE,KAAM,WAAY,IAAK,UAAW,CAAC,EACxCG,EAAc,CAAE,KAAM,OAAOhI,CAAI,EAAG,MAAO,KAAK,IAAI,CAAE,CAAC,EACzD,EAAG,CAAC,CAAC,EAEL,MAAM,UAAU,IAAM,CACpB,IAAIjX,EAAQ,GACZ,qBAAcmB,CAAM,EAAE,KAAKtB,GAAK,CAAMG,GAAO0e,EAAa7e,CAAC,CAAG,CAAC,EAAE,MAAM,IAAMG,GAAS0e,EAAa,CAAE,MAAO,KAAM,KAAM,IAAK,CAAC,CAAC,EACxH,IAAM,CAAE1e,EAAQ,EAAO,CAChC,EAAG,CAACmB,EAAQwd,CAAO,CAAC,EAEpB,MAAMG,EAAMlS,GAAS,CACnB4R,EAAe5R,CAAI,EACnB,iBAAiBA,EAAK,OAAS,SAAW,KAAOA,CAAI,EACjDsS,EAAU,UAASA,EAAU,QAAQ,UAAY,EACvD,EACMC,EAAa,IAAML,EAAG,CAAE,KAAM,WAAY,IAAK,MAAO,CAAC,EAEvDM,EAAgB7X,GAAQ,CACvBA,IACLuX,EAAG,CAAE,KAAM,WAAY,IAAK,UAAW,CAAC,EACxCG,EAAc1X,EAAI,UAAY,CAAE,KAAMA,EAAI,UAAW,MAAO,KAAK,IAAI,CAAE,EAAI,CAAE,GAAIA,EAAI,GAAI,MAAO,KAAK,IAAI,CAAE,CAAC,EAC9G,EAEA,IAAI8X,EACJ,GAAI,CAAC,OAAO,YAAc,CAAC,OAAO,YAChCA,EAAU,oBAAC,YAAW,KAAK,KAAK,MAAO,EAAE,0BAA2BthB,CAAI,EAAG,UAClE,CAAC0gB,GAAcF,EAAO,UAAYE,EAAU,MAErDY,EAAU,oBAAC,cAAa,KAAMthB,EAAM,MAAO0gB,EAAY,eAAiBF,EAAO,KAAO,YACpF,QAAS,IAAMK,EAAWzgB,GAAKA,EAAI,CAAC,EAAG,OAAQoG,EAAQ,MAAO,CAAE,WAAY,EAAG,EAAG,UAC3E,CAACka,EAAU,MACpBY,EACE,oBAAC,WACC,oBAAC,gBAAe,OAAQ,EAAE,4BAA6BthB,CAAI,EAAG,MAAO,EAAE,2BAA4BA,CAAI,EAAG,OAAQwG,EAAQ,KAAMxG,EAAM,EACtI,oBAAC,YAAW,KAAK,KAAK,MAAO,EAAE,wBAAyBA,CAAI,EAAG,KAAM,EAAE,uBAAwBA,CAAI,EACjG,OAAQ,oBAAC,aAAY,QAASugB,GAAW,EAAE,sBAAuBvgB,CAAI,CAAE,EAAgB,EAEzF,OAAO,OAAO,kBAAqB,YAClC,oBAAC,OAAI,MAAO,CAAE,QAAS,QAAS,GAC9B,oBAAC,kBAAiB,MAAO4F,EAAO,KAAM5F,EAAM,OAAQ,KAAM,KAAM8F,EAAM,QAAS,KAAM,UAAWW,EAC9F,YAAaR,EAAY,iBAAkB,IAAMib,EAAc,IAAI,EAAG,cAAeX,EAAU,CACnG,CAEJ,MAEG,CACL,MAAMgB,EAAS,CAAE,KAAAvhB,EAAM,MAAA4F,EAAO,MAAO8a,EAAU,MAAO,KAAA5a,EAAM,UAAAW,CAAU,EACtE,OAAQ+Z,EAAO,KAAM,CACnB,IAAK,SACHc,EAAU,oBAAC,gBAAgB,GAAGC,EAAQ,aAAc7W,EAAc,YAAaC,EAC7E,OAAQyW,EAAY,UAAYpgB,GAAO,CAAEyF,EAAU,EAAE,2BAA4BzG,CAAI,CAAC,EAAG+gB,EAAG,CAAE,KAAM,SAAU,OAAQ/f,CAAG,CAAC,CAAG,EAC7H,cAAe,OAAO,OAAO,kBAAqB,WAAcwgB,GAAS,CAEvET,EAAG,CAAE,KAAM,WAAY,IAAK,UAAW,CAAC,EACxCG,EAAc,CAAE,KAAMM,GAAQ,KAAM,WAAY,GAAM,MAAO,KAAK,IAAI,CAAE,CAAC,CAC3E,EAAI,KAAM,EACZ,MACF,IAAK,SACHF,EAAU,oBAAC,gBAAe,IAAKd,EAAO,OAAS,GAAGe,EAAQ,OAAQf,EAAO,OAAQ,OAAQY,EACvF,cAAgBpgB,GAAO+f,EAAG,CAAE,KAAM,aAAc,OAAQ/f,CAAG,CAAC,EAAG,eAAgBqgB,EAAc,EAC/F,MACF,IAAK,aACHC,EAAU,oBAAC,oBAAmB,IAAKd,EAAO,OAAS,GAAGe,EAAQ,OAAQf,EAAO,OAC3E,OAAQ,IAAMO,EAAG,CAAE,KAAM,SAAU,OAAQP,EAAO,MAAO,CAAC,EAC1D,WAAaxf,GAAO+f,EAAG,CAAE,KAAM,SAAU,OAAQ/f,CAAG,CAAC,EACrD,UAAYA,GAAO+f,EAAG,CAAE,KAAM,QAAS,QAAS/f,CAAG,CAAC,EAAG,EACzD,MACF,IAAK,QACHsgB,EAAU,oBAAC,eAAc,IAAKd,EAAO,QAAS,KAAMxgB,EAAM,MAAO4F,EAAO,MAAO8a,EAAU,MAAO,KAAM5a,EACpG,QAAS0a,EAAO,QAAS,OAAQY,EAAY,eAAgBC,EAAc,UAAW5a,EAAW,EACnG,MACF,QACE6a,EAAU,oBAAC,kBAAkB,GAAGC,EAAQ,KAAMb,EAAU,KAAM,OAAQla,EAAQ,OAAQpD,EACpF,IAAKod,EAAO,MAAQ,WAAa,WAAa,OAC9C,MAAQiB,GAAOV,EAAG,CAAE,KAAM,WAAY,IAAKU,CAAG,CAAC,EAC/C,WAAYxb,EAAY,oBAAqB,IAAMib,EAAc,IAAI,EAAG,eAAgBG,EACxF,MAAO,IAAMN,EAAG,CAAE,KAAM,QAAS,CAAC,EAClC,WAAa/f,GAAO+f,EAAG,CAAE,KAAM,SAAU,OAAQ/f,CAAG,CAAC,EACrD,aAAeA,GAAO+f,EAAG,CAAE,KAAM,aAAc,OAAQ/f,CAAG,CAAC,EAC3D,YAAcA,GAAO+f,EAAG,CAAE,KAAM,QAAS,QAAS/f,CAAG,CAAC,EAAG,CAC/D,CACF,CAEA,OACE,oBAAC,OAAI,UAAU,YAAY,MAAO,CAAE,SAAU,WAAY,IAAK,GAAI,KAAM,EAAG,MAAO,EAAG,OAAQ,EAAG,SAAU,SAAU,MAAO,YAAa,GAEvI,oBAAC,OAAI,IAAKmgB,EAAW,UAAU,yBAAyB,MAAO,CAAE,OAAQ,OAAQ,UAAW,OAAQ,UAAW,QAAS,GAEtH,oBAAC,OAAI,MAAO,CAAE,cAAe,GAAI,GAAIG,CAAQ,CAC/C,EACA,oBAAC,YAAW,QAASL,EAAO,OAAQ,IAAK,CAC3C,CAEJ,CAEA,OAAO,eAAiB",
  "names": ["key", "lang", "vars", "s", "k", "n", "arr", "a", "i", "stationNo", "teamCount", "fmtMin", "m", "txt", "v", "prefix", "f", "id", "F", "p", "str", "iso", "d", "r", "road", "lat", "lng", "url", "j", "q", "list", "o", "addr", "setAddr", "alive", "tm", "st", "E", "ownerId", "S", "today", "open", "e", "rank", "upcoming", "b", "tour", "pts", "end", "opts", "out", "station", "issues", "userId", "me", "event", "players", "mode", "res", "size", "setV", "fn", "x", "text", "ta", "ok", "kicker", "title", "onBack", "right", "hint", "children", "style", "checked", "onChange", "label", "active", "onClick", "icon", "body", "tone", "action", "map", "disabled", "value", "placeholder", "invalid", "ariaLabel", "setTxt", "cur", "nv", "ref", "run", "theme", "owner", "user", "tab", "onTab", "libRequest", "onLibRequestHandled", "onViewTemplate", "onNew", "onEditTour", "onStartEvent", "onOpenEvent", "onExit", "showToast", "tours", "setTours", "events", "setEvents", "confirmDel", "setConfirmDel", "menuFor", "setMenuFor", "myTpls", "setMyTpls", "pubTour", "setPubTour", "libDetail", "setLibDetail", "nudgeOffV", "setNudgeOffV", "loadTpls", "tp", "load", "ts", "es", "dup", "del", "loading", "empty", "openEvents", "pastEvents", "nudgeTour", "setNudgeTour", "latest", "cands", "tr", "ans", "hasLib", "factsV", "readyTpls", "all", "pick", "tabs", "pubSheet", "statusChip", "ev", "c", "eventCard", "est", "pubId", "tpl", "onPick", "setQ", "setRes", "busy", "setBusy", "term", "userPos", "picking", "onPickMap", "allowSame", "sameActive", "onSame", "searchId", "labelId", "isPlace", "pt", "apply", "userPosition", "currentCity", "onCreated", "onOpenLibrary", "geo", "myPos", "first", "setTitle", "audience", "setAudience", "duration", "setDuration", "start", "setStart", "finishSame", "setFinishSame", "finish", "setFinish", "themes", "setThemes", "setPicking", "noResult", "setNoResult", "focus", "setFocus", "markers", "refocus", "same", "pickStart", "pickFinish", "onMapTap", "which", "upd", "toggleTheme", "th", "suggest", "tokens", "strip", "saved", "tourId", "onCreateEvent", "setTour", "pubOpen", "setPubOpen", "pubTpl", "setPubTpl", "missing", "setMissing", "saveState", "setSaveState", "openStation", "setOpenStation", "placing", "setPlacing", "addOpen", "setAddOpen", "savedAt", "setSavedAt", "freshIds", "setFreshIds", "tourRef", "dirtyRef", "timerRef", "mapBoxRef", "checkRef", "saveNow", "update", "next", "pubTemplateId", "syncPublished", "published", "fresh", "setSettings", "patch", "setStation", "fnOrStation", "moveStation", "idx", "dir", "tmp", "removeStation", "limit", "allIssues", "infos", "issueMap", "errors", "unfairCounts", "center", "fairRows", "curFair", "curDist", "distVals", "maxDist", "minDist", "distRange", "distValue", "teamsPreview", "stats", "startPlacing", "placeAt", "mapMarkers", "onMarkerTap", "placingText", "addFact", "fact", "fid", "pos", "issueText", "openSt", "closeStation", "tryCreateEvent", "saveLine", "kind", "lvl", "qHints", "h", "kidsLike", "sw", "speedWeight", "on", "onClose", "onAdd", "onlyPuzzle", "setOnlyPuzzle", "setLimit", "ver", "pool", "words", "w", "nq", "hay", "rows", "inTour", "has", "added", "l", "type", "src", "oldAnswer", "index", "onMove", "onDelete", "showFull", "setShowFull", "address", "factView", "original", "canRestore", "set", "setP", "hasIssue", "codes", "factText", "kindLabel", "ci", "correct", "_", "vals", "min", "max", "better", "nb", "date", "setDate", "time", "setTime", "setTeamCount", "assignMode", "setAssignMode", "orgMode", "setOrgMode", "companionTeam", "setCompanionTeam", "rosterText", "setRosterText", "rosterTeams", "setRosterTeams", "timeLimit", "setTimeLimit", "setSpeedWeight", "lateJoin", "setLateJoin", "rosterOnly", "setRosterOnly", "teamNames", "setTeamNames", "copied", "setCopied", "evs", "last", "lts", "les", "nameMax", "customName", "no", "baseTeams", "teams", "names", "seen", "uniqueNames", "fair", "evTour", "allChecks", "overLimit", "longTour", "teamOf", "name", "autoFillRoster", "create", "roster", "orgName", "tourForEvent", "when", "tn", "anyName", "ic", "ni", "selId", "eventId", "data", "confirm", "setConfirm", "srcTour", "setSrcTour", "nudgeOff", "setNudgeOff", "srcId", "loadSrc", "status", "step", "sc", "okMsg", "code", "doConfirm", "predicted", "soloTeams", "lateOk", "startPlain", "startWarn", "startBody", "confirmProps", "Eng", "estN", "atCeremony", "finStandings", "showRate", "showPub", "joined", "answers", "teamNo", "stations", "firstAt", "ms", "y", "row", "reasons", "standings", "lines", "head", "extra", "visits", "val", "resTxt", "setOpen", "rowByTeam", "copyAll", "mark", "count", "fl", "isOpen", "at", "firstVal", "delta", "setDelta", "plus", "setPlus", "reason", "setReason", "confirmEx", "setConfirmEx", "disq", "send", "okKey", "team", "setTeam", "rowBy", "onAsk", "playerSheet", "setPlayerSheet", "renameTeam", "setRenameTeam", "renameVal", "setRenameVal", "confirmRemove", "setConfirmRemove", "confirmShuffle", "setConfirmShuffle", "tName", "evSettings", "hasRoster", "setEvSetting", "byTeam", "unassigned", "emptyTeams", "canStart", "startHint", "share", "copyCode", "askRandomize", "randomize", "balance", "base", "groups", "guard", "big", "small", "doRename", "movePlayer", "pid", "remove", "sheetPlayer", "playerChip", "missingByTeam", "missingLoose", "ghostChip", "ghostRow", "now", "finishes", "adjustTeamNo", "setAdjustTeamNo", "finByTeam", "posByTeam", "endsMs", "startMs", "remaining", "elapsed", "finishedCount", "signalOf", "age", "signalText", "sig", "lostTeams", "ago", "comp", "compNext", "compProg", "prog", "fin", "initialCode", "onSignup", "screen", "setScreenState", "ownerInfo", "setOwnerInfo", "loadTry", "setLoadTry", "fail", "go", "owns", "toast", "setLibRequest", "scrollRef", "toOverview", "viewTemplate", "content", "common", "pack", "tb"]
}
