From 0657b50c07aeb4501ce4b635ef3235d98747f2ad Mon Sep 17 00:00:00 2001 From: caty21 Date: Wed, 8 Jul 2026 16:46:05 +0200 Subject: [PATCH] feat: banques centrales (vote+dot plot+previsions), calendrier elargi, fix InvestingLive, M3 auto Central bank governance (nouvel onglet Banques centrales) : - lib/centralBankGovernance.ts + app/api/central-bank-sources : scraping live du vote de la derniere reunion, dot plot Fed (SEP), et desormais les previsions macro (PIB + inflation) publiees par chaque BC elle-meme (Fed SEP, Eurosystem staff projections, BoJ Outlook Report PDF, SNB conditional forecast, BoC MPR, RBA SMP). GBP/NZD laisses honnetement vides quand aucune source chiffree fiable n'est accessible (RBNZ bloque par Cloudflare). - components/CentralBankSourcesTab.tsx : nouvel onglet avec cards par banque. Taux directeurs + Money Supply M3 : - data/rate_decisions.json corrige (JPY, EUR, NZD etc. etaient perimes d'1-2 decisions) et desormais auto-maintenu : .github/workflows/update-rate-decisions.yml (horaire) detecte les changements de taux via Trading Economics et fait glisser current -> prev sans perte de donnee. - data/money-supply-m3.json (nouveau) + .github/workflows/fetch-money-supply.yml (hebdo) : M3 par devise (proxy M2 pour l'USD, la Fed ne publiant plus M3 depuis 2006), affiche dans CurrencyCard. Calendrier economique elargi : - lib/calendar-countries.ts, lib/calendar-taxonomy.ts, lib/fxstreetCalendar.ts : couverture pays elargie + classification des evenements + source FXStreet. Fix InvestingLive : - lib/investinglive.ts : l'ancienne API WordPress (wp-json) renvoyait 404 depuis leur migration Nuxt.js -> reecrit vers api.investinglive.com/api/homepage/articles, + fix crash silencieux (Tldr pas toujours un tableau). Divers : - .vercel/ ajoute au .gitignore (ne doit jamais etre commite, cf. son propre README). - scripts/ (lancement PWA, push env Vercel), captures d'ecran, cache InvestingLive. Co-Authored-By: Claude Sonnet 5 --- .github/scripts/fetch-money-supply.mjs | 99 +++ .github/scripts/fetch-rate-data.mjs | 330 ++++---- .github/scripts/update-rate-decisions.mjs | 122 +++ .github/workflows/fetch-money-supply.yml | 33 + .github/workflows/update-rate-decisions.yml | 33 + .gitignore | 1 + app/api/calendar/route.ts | 104 ++- app/api/central-bank-sources/route.ts | 20 + app/api/macro/route.ts | 122 ++- app/page.tsx | 28 +- check-console.js | 35 + components/CalendarTab.tsx | 73 +- components/CentralBankSourcesTab.tsx | 321 ++++++++ components/CurrencyCard.tsx | 65 +- components/IdeesTab.tsx | 60 +- data/il-enrichment-cache.json | 1 + data/money-supply-m3.json | 65 ++ data/rate-probabilities.json | 232 +++++- data/rate_decisions.json | 44 +- lib/calendar-countries.ts | 50 ++ lib/calendar-taxonomy.ts | 79 ++ lib/centralBankGovernance.ts | 865 ++++++++++++++++++++ lib/fxstreetCalendar.ts | 176 ++++ lib/investinglive.ts | 40 +- lib/newsfeed.ts | 42 +- lib/rateprobability.ts | 189 ++--- lib/tradingeconomics.ts | 97 ++- next.config.mjs | 2 +- package-lock.json | 232 ++++++ package.json | 3 +- public/screenshot-desktop.png | Bin 0 -> 103655 bytes public/screenshot-mobile.png | Bin 0 -> 53656 bytes public/screenshot-ois.png | Bin 0 -> 115916 bytes scripts/launch-dashboard-pwa.vbs | 46 ++ scripts/push-env-vercel.mjs | 57 ++ scripts/start-dashboard-hidden.vbs | 13 + scroll-shot.js | 19 + tsconfig.tsbuildinfo | 2 +- 38 files changed, 3257 insertions(+), 443 deletions(-) create mode 100644 .github/scripts/fetch-money-supply.mjs create mode 100644 .github/scripts/update-rate-decisions.mjs create mode 100644 .github/workflows/fetch-money-supply.yml create mode 100644 .github/workflows/update-rate-decisions.yml create mode 100644 app/api/central-bank-sources/route.ts create mode 100644 check-console.js create mode 100644 components/CentralBankSourcesTab.tsx create mode 100644 data/il-enrichment-cache.json create mode 100644 data/money-supply-m3.json create mode 100644 lib/calendar-countries.ts create mode 100644 lib/calendar-taxonomy.ts create mode 100644 lib/centralBankGovernance.ts create mode 100644 lib/fxstreetCalendar.ts create mode 100644 public/screenshot-desktop.png create mode 100644 public/screenshot-mobile.png create mode 100644 public/screenshot-ois.png create mode 100644 scripts/launch-dashboard-pwa.vbs create mode 100644 scripts/push-env-vercel.mjs create mode 100644 scripts/start-dashboard-hidden.vbs create mode 100644 scroll-shot.js diff --git a/.github/scripts/fetch-money-supply.mjs b/.github/scripts/fetch-money-supply.mjs new file mode 100644 index 0000000..91e213a --- /dev/null +++ b/.github/scripts/fetch-money-supply.mjs @@ -0,0 +1,99 @@ +// Scrape Trading Economics pour la masse monétaire M3 (niveau, devise locale) +// de chaque zone monétaire suivie par le dashboard. +// +// Source : meta description de https://tradingeconomics.com/{slug}/money-supply-m3 +// Format observé : "Money Supply M3 in/In the {Country} increased/decreased to +// {value} {CCY} {Million|Billion} in {Month} from {value} {CCY} {Million|Billion} +// in {Month} of {Year}." +// +// USD : la Fed a arrêté de publier M3 en 2006 → proxy M2 +// (https://tradingeconomics.com/united-states/money-supply-m2, même format de meta desc). +// +// Cadence : ces données sont mensuelles avec ~4-6 semaines de retard (le mois le +// plus récent apparaît des semaines après sa clôture) → un scraping hebdomadaire +// suffit largement, pas besoin d'une fréquence horaire comme pour les taux/OIS. + +import { writeFileSync, readFileSync, mkdirSync } from "fs"; + +const CHROME_HEADERS = { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "Accept-Language": "en-US,en;q=0.9", + "Cache-Control": "no-cache", + "Pragma": "no-cache", +}; + +const MONTHS = { January:"01",February:"02",March:"03",April:"04",May:"05",June:"06", + July:"07",August:"08",September:"09",October:"10",November:"11",December:"12" }; + +// slug TE + éventuel slug d'indicateur différent (USD → money-supply-m2, proxy) +const SERIES = { + USD: { slug: "united-states", indicator: "money-supply-m2", isProxy: true, proxyLabel: "M2 (M3 non publié par la Fed depuis 2006)" }, + EUR: { slug: "euro-area", indicator: "money-supply-m3", isProxy: false }, + GBP: { slug: "united-kingdom", indicator: "money-supply-m3", isProxy: false }, + JPY: { slug: "japan", indicator: "money-supply-m3", isProxy: false }, + CHF: { slug: "switzerland", indicator: "money-supply-m3", isProxy: false }, + CAD: { slug: "canada", indicator: "money-supply-m3", isProxy: false }, + AUD: { slug: "australia", indicator: "money-supply-m3", isProxy: false }, + NZD: { slug: "new-zealand", indicator: "money-supply-m3", isProxy: false }, +}; + +const DESC_RE = /Money Supply M[23][^.]*?\bto\s+([\d.]+)\s+([A-Z]{3})\s+(Million|Billion)\s+in\s+(\w+)\s+from\s+[\d.]+\s+[A-Z]{3}\s+(?:Million|Billion)\s+in\s+\w+\s+of\s+(\d{4})/i; + +async function fetchMoneySupply(ccy, { slug, indicator }) { + try { + const res = await fetch(`https://tradingeconomics.com/${slug}/${indicator}`, { headers: CHROME_HEADERS }); + if (!res.ok) return null; + const html = await res.text(); + const meta = html.match(/]*name=["']description["'][^>]*content=["']([^"']+)["']/i) + ?? html.match(/]*content=["']([^"']+)["'][^>]*name=["']description["']/i); + if (!meta) return null; + + const m = meta[1].match(DESC_RE); + if (!m) return null; + const [, value, ccyCode, unitWord, month, year] = m; + const monthNum = MONTHS[month]; + if (!monthNum) return null; + + return { + value: parseFloat(value), + unit: `${ccyCode} ${unitWord === "Billion" ? "Bn" : "Mn"}`, + period: `${year}-${monthNum}`, + source: `https://tradingeconomics.com/${slug}/${indicator}`, + }; + } catch { return null; } +} + +// ── Fusionne avec le fichier existant : garde l'ancienne valeur si le scrape échoue ── + +let existing = {}; +try { + existing = JSON.parse(readFileSync("data/money-supply-m3.json", "utf8"))[0]?.series ?? {}; +} catch {} + +const series = {}; +for (const [ccy, cfg] of Object.entries(SERIES)) { + const fetched = await fetchMoneySupply(ccy, cfg); + if (fetched) { + series[ccy] = { ...fetched, isProxy: cfg.isProxy, ...(cfg.proxyLabel ? { proxyLabel: cfg.proxyLabel } : {}) }; + console.log(`[TE] ${ccy} ✓ ${fetched.value} ${fetched.unit} (${fetched.period})`); + } else if (existing[ccy]) { + series[ccy] = existing[ccy]; + console.log(`[TE] ${ccy} ✗ scrape échoué → conservé (${existing[ccy].period})`); + } else { + console.log(`[TE] ${ccy} ✗ scrape échoué, pas de fallback disponible`); + } + await new Promise(r => setTimeout(r, 800)); // évite le rate-limiting TE +} + +mkdirSync("data", { recursive: true }); +writeFileSync("data/money-supply-m3.json", JSON.stringify([{ + updated_at: new Date().toISOString().slice(0, 10), + note: "Masse monétaire M3 (niveau, devise locale) par zone — scrapé automatiquement depuis tradingeconomics.com (meta description des pages /money-supply-m3). USD : proxy M2 (Fed n'a plus publié M3 depuis 2006). Mis à jour par .github/workflows/fetch-money-supply.yml (hebdomadaire).", + series, +}], null, 2) + "\n"); + +const ok = Object.keys(SERIES).filter(c => series[c]); +const failed = Object.keys(SERIES).filter(c => !series[c]); +console.log(`\n✓ Saved : ${ok.join(", ")}`); +if (failed.length) console.log(`✗ Failed : ${failed.join(", ")}`); diff --git a/.github/scripts/fetch-rate-data.mjs b/.github/scripts/fetch-rate-data.mjs index 5602130..7c38786 100644 --- a/.github/scripts/fetch-rate-data.mjs +++ b/.github/scripts/fetch-rate-data.mjs @@ -1,7 +1,10 @@ // Sources (in priority order): -// 1. CME FedWatch API — USD seul, JSON officieux, fiable -// 2. Investing.com monitors — toutes CBs, HTML scraped (Cloudflare possible) -// 3. InvestingLive fallback — articles Giuseppe Dellamotta, hebdo, toutes CBs +// 1. Investing.com Fed Rate Monitor — USD seul (seule CB pour laquelle Investing.com +// publie cet outil ; les autres slugs *-rate-monitor n'existent pas → 404 attendus) +// 2. InvestingLive fallback — articles Giuseppe Dellamotta, hebdo, toutes CBs +// +// (CME FedWatch retiré : endpoint derrière le WAF Akamai de cmegroup.com, 403/404 +// systématique, et de toute façon redondant avec la source 1 pour l'USD.) import { writeFileSync, mkdirSync, readFileSync } from "fs"; @@ -33,97 +36,7 @@ const CHROME_HEADERS = { "Upgrade-Insecure-Requests": "1", }; -// ── 1. CME FedWatch (USD) ───────────────────────────────────────────────────── - -async function fetchCMEFedWatch() { - const year = new Date().getFullYear(); - const candidates = [ - // API officieuse FedWatch — essai sur SR3 (SOFR) et ZQ (30-day FF) - `https://www.cmegroup.com/CmeWS/mvc/MeetingCalendar/V1/getMeetingCalendarByYear.json?marketCode=SR3&year=${year}`, - `https://www.cmegroup.com/CmeWS/mvc/MeetingCalendar/V1/getMeetingCalendarByYear.json?marketCode=FF&year=${year}`, - `https://www.cmegroup.com/CmeWS/mvc/MeetingCalendar/V1/getMeetingCalendarByYear.json?marketCode=ZQ&year=${year}`, - ]; - - for (const url of candidates) { - try { - const res = await fetch(url, { - headers: { - ...CHROME_HEADERS, - "Accept": "application/json, text/plain, */*", - "Referer": "https://www.cmegroup.com/markets/interest-rates/cme-fedwatch-tool.html", - "Origin": "https://www.cmegroup.com", - "Sec-Fetch-Dest": "empty", - "Sec-Fetch-Mode": "cors", - "Sec-Fetch-Site": "same-origin", - } - }); - console.log(`[CME] ${url.split('?')[1]} → ${res.status}`); - if (!res.ok) continue; - - const body = await res.json(); - console.log(`[CME] keys: ${Object.keys(body).join(", ")}`); - console.log(`[CME] preview: ${JSON.stringify(body).slice(0, 600)}`); - - const parsed = parseCMEBody(body); - if (parsed) { console.log(`[CME] ✓ ${parsed.today.rows.length} meetings`); return parsed; } - } catch (e) { - console.error(`[CME] error: ${e.message}`); - } - } - return null; -} - -function parseCMEBody(body) { - // Format A : { meetings: [{ date|meetingDate, currentProbs:{minus25,unch,plus25,...}, impliedRate }] } - const arr = body.meetings ?? body.data ?? (Array.isArray(body) ? body : null); - if (!arr?.length) return null; - - const nowIso = new Date().toISOString().slice(0,10); - let currentRate = null; - const rows = []; - - for (const m of arr) { - const dateIso = normalizeDate( - m.date ?? m.meetingDate ?? m.meetDate ?? m.meeting_date ?? "" - ); - if (!dateIso || dateIso < nowIso) continue; - - const probs = m.currentProbs ?? m.probs ?? m.probabilities ?? m.probability ?? {}; - const probCut = parseFloat(probs.minus25 ?? probs.cut25 ?? probs["-25"] ?? probs.minus50 ?? 0) - + parseFloat(probs.minus50 ?? probs.cut50 ?? probs["-50"] ?? 0); - const probHike = parseFloat(probs.plus25 ?? probs.hike25 ?? probs["+25"] ?? probs.plus50 ?? 0) - + parseFloat(probs.plus50 ?? probs.hike50 ?? probs["+50"] ?? 0); - const probHold = parseFloat(probs.unch ?? probs.hold ?? probs.unchanged ?? 0); - - const probIsCut = probCut >= probHike; - const probMovePct = probIsCut ? probCut : probHike; - - const impliedRate = parseFloat( - m.impliedRate ?? m.implied_rate ?? m.rate ?? m.impliedFedFunds ?? 0 - ); - if (currentRate === null) - currentRate = parseFloat(m.priorRate ?? m.currentRate ?? m.prior_rate ?? impliedRate ?? 0); - - const changeBps = (impliedRate - (currentRate ?? 0)) * 100; - const dateLabel = new Date(dateIso + "T12:00:00Z") - .toLocaleDateString("en-US", { month:"short", day:"numeric" }); - - rows.push({ - meeting: dateLabel, - meeting_iso: dateIso, - implied_rate_post_meeting: impliedRate, - prob_move_pct: probMovePct, - prob_is_cut: probIsCut, - change_bps: changeBps, - num_moves: changeBps / 25, - }); - } - - if (!rows.length) return null; - return { today: { midpoint: currentRate ?? 0, rows } }; -} - -// ── 2. Investing.com Rate Monitors (all CBs) ────────────────────────────────── +// ── 1. Investing.com Rate Monitors (Fed only — voir note en tête de fichier) ── const IC_SLUGS = { USD: "fed-rate-monitor", @@ -136,12 +49,83 @@ const IC_SLUGS = { CHF: "snb-rate-monitor", }; -// Taux directeurs actuels — fallback si non trouvés dans le HTML -// NZD : RBNZ a coupé à 2.25% (juin 2026) ; CHF : SNB à 0.00% -const FALLBACK_RATES = { - USD: 4.33, EUR: 2.40, GBP: 3.75, JPY: 0.50, - CAD: 2.25, AUD: 4.10, NZD: 2.25, CHF: 0.00, -}; +// Taux directeurs actuels — lus depuis data/rate_decisions.json (source unique, +// maintenue manuellement "après chaque décision") pour éviter qu'une copie +// codée en dur ici ne dérive silencieusement de la réalité au fil des mois. +const rateDecisions = JSON.parse(readFileSync("data/rate_decisions.json", "utf8"))[0]?.decisions ?? {}; +const FALLBACK_RATES = Object.fromEntries( + Object.entries(rateDecisions).map(([ccy, d]) => [ccy, d.current]) +); + +// ── SNB officiel (CHF) ───────────────────────────────────────────────────────── +// snb.ch publie ses décisions sous /press-releases-restricted/pre_YYYYMMDD. +// On découvre la plus récente depuis la page listing (1er lien du pattern), +// puis on lit le taux dans le titre : "leaves ... unchanged at X%" / "lowers/raises ... to X%". +async function fetchSnbRate() { + try { + const listRes = await fetch("https://www.snb.ch/en/the-snb/mandates-goals/monetary-policy/decisions", { headers: CHROME_HEADERS }); + if (!listRes.ok) return null; + const listHtml = await listRes.text(); + const linkMatch = listHtml.match(/href="(\/en\/publications\/communication\/press-releases-restricted\/pre_(\d{8})[^"]*)"/); + if (!linkMatch) return null; + const dateIso = `${linkMatch[2].slice(0,4)}-${linkMatch[2].slice(4,6)}-${linkMatch[2].slice(6,8)}`; + + const prRes = await fetch(`https://www.snb.ch${linkMatch[1]}`, { headers: CHROME_HEADERS }); + if (!prRes.ok) return null; + const prHtml = await prRes.text(); + const rateMatch = prHtml.match(/SNB policy rate\s+(?:unchanged at|to)\s+(-?[\d.]+)%/i); + if (!rateMatch) return null; + + console.log(`[SNB] official: ${rateMatch[1]}% (decision ${dateIso})`); + return parseFloat(rateMatch[1]); + } catch (e) { + console.error(`[SNB] error: ${e.message}`); + return null; + } +} + +// ── Fed officiel (USD) ────────────────────────────────────────────────────────── +// federalreserve.gov/monetarypolicy/fomccalendars.htm liste, pour chaque réunion, +// un lien de statement /newsevents/pressreleases/monetary(YYYYMMDD)a.htm. On prend +// la réunion passée la plus récente, puis on lit la fourchette officielle dans le +// texte : "target range for the federal funds rate at/to X to Y percent" (X/Y en +// fractions type "3-1/2"). On retourne le haut de fourchette (convention "upper +// bound" déjà utilisée ailleurs dans ce repo pour l'USD). +function parseFedFraction(s) { + const m = s.match(/^(\d+)(?:-(\d+)\/(\d+))?$/); + if (!m) return NaN; + const whole = parseFloat(m[1]); + return m[2] ? whole + parseFloat(m[2]) / parseFloat(m[3]) : whole; +} + +async function fetchFedRate() { + try { + const calRes = await fetch("https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm", { headers: CHROME_HEADERS }); + if (!calRes.ok) return null; + const calHtml = await calRes.text(); + + const todayCompact = new Date().toISOString().slice(0,10).replace(/-/g,""); + const dates = new Set(); + for (const m of calHtml.matchAll(/\/newsevents\/pressreleases\/monetary(\d{8})a\.htm/g)) dates.add(m[1]); + const latestPast = [...dates].filter(d => d <= todayCompact).sort().reverse()[0]; + if (!latestPast) return null; + const dateIso = `${latestPast.slice(0,4)}-${latestPast.slice(4,6)}-${latestPast.slice(6,8)}`; + + const stRes = await fetch(`https://www.federalreserve.gov/newsevents/pressreleases/monetary${latestPast}a.htm`, { headers: CHROME_HEADERS }); + if (!stRes.ok) return null; + const stHtml = await stRes.text(); + const rateMatch = stHtml.match(/target range for the federal funds rate[\s\S]{0,60}?(\d+(?:-\d\/\d)?)\s*to\s*(\d+(?:-\d\/\d)?)\s*percent/i); + if (!rateMatch) return null; + + const upper = parseFedFraction(rateMatch[2]); + if (isNaN(upper)) return null; + console.log(`[FED] official: ${rateMatch[1]}-${rateMatch[2]}% → upper=${upper}% (decision ${dateIso})`); + return upper; + } catch (e) { + console.error(`[FED] error: ${e.message}`); + return null; + } +} async function fetchInvestingCom(ccy) { const slug = IC_SLUGS[ccy]; @@ -261,69 +245,65 @@ function parseJsonData(ccy, json) { return { today: { midpoint: currentRate, rows } }; } +// Structure réelle de la page (vérifiée juillet 2026) : chaque réunion FOMC est un +// bloc "Meeting Time: Jul 29, 2026 02:00PM ET" suivi d'un +// dont les lignes sont des fourchettes de taux ("3.50 - 3.75") + probabilité courante. +// Il n'y a AUCUNE colonne date dans la table elle-même (elle vit dans le bloc parent) — +// c'est pourquoi l'ancienne heuristique par en-têtes de colonnes ne trouvait jamais rien. function parseRateMonitorTable(ccy, html) { - // Find all
blocks - const tables = [...html.matchAll(//gi)]; - console.log(`[IC/${ccy}] ${tables.length} tables found`); + const currentRate = FALLBACK_RATES[ccy] ?? 0; + const nowIso = new Date().toISOString().slice(0,10); + const blockRe = /Meeting Time:<\/span>\s*([^<]+)<\/i>[\s\S]*?
([\s\S]*?)<\/table>/g; + const rowRe = /([\s\S]*?)<\/thead>/); + const years = headerM + ? Array.from(headerM[1].matchAll(/]*>([^<]+)<\/th>/g), m => m[1].trim()).filter(y => !/midpoint/i.test(y)) + : ["2026", "2027", "2028", "Longer run"]; + + const rowRe = /\s* + ) +// couvrant les 45 pays de CALENDAR_COUNTRIES (bien au-delà des 8 devises majeures). + +import type { EventCategory } from "@/app/api/calendar/route"; +import { FXSTREET_COUNTRYCODES, FX_NAME_TO_CURRENCY, FX_NAME_TO_CODE } from "./calendar-countries"; +import { classifyOtherTitle } from "./calendar-taxonomy"; + +export interface WideCalendarEvent { + id: string; + date: string; // ISO UTC + currency: string; // ISO 4217 (univers élargi, pas seulement les 8 majeures) + countryCode: string; // code pays (ex. "US", "EMU", "CN") + category: EventCategory; + title: string; + impact: "high" | "medium" | "low"; + actual: string | null; + forecast: string | null; + previous: string | null; + isPublished: boolean; +} + +// ── Catégorie (mêmes heuristiques que teCategory/invCategory) ──────────────── + +function fxCategory(title: string): EventCategory { + const t = title.toLowerCase(); + if (/\bspeech\b|speaks?\b|testimony|\bpress\s+conf/.test(t)) return "cb_speech"; + if (/\bpmi\b|purchasing\s+managers/.test(t)) return "pmi"; + if (/interest\s+rate|monetary\s+policy|rate\s+decision|bank\s+rate/.test(t)) return "policy_rate"; + if (/inflation|\bcpi\b|\bhicp\b|consumer\s+price|\bppi\b|producer\s+price/.test(t)) return "inflation"; + if (/\bgdp\b|gross\s+domestic|growth\s+rate/.test(t)) return "gdp"; + if (/retail\s+sales|core\s+retail|household\s+spending/.test(t)) return "retail_sales"; + if (/trade\s+balance|current\s+account|balance\s+of\s+trade/.test(t)) return "trade_balance"; + if (/employment|payrolls|nonfarm|jobless|unemployment|job\s+creation|\badp\b|jolts|job\s+openings|job\s+quits|ism\s+\w+\s+employ/.test(t)) return "employment"; + return classifyOtherTitle(title); +} + +function impactFromVolatility(n: number): "high" | "medium" | "low" { + if (n >= 3) return "high"; + if (n >= 2) return "medium"; + return "low"; +} + +function decodeHTMLEntities(s: string): string { + return s + .replace(/&/g, "&") + .replace(/</g, "<") + .replace(/>/g, ">") + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(/ /g, " ") + .trim(); +} + +function stripTags(s: string): string { + return decodeHTMLEntities(s.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ")); +} + +const MONTHS: Record = { + jan: 0, feb: 1, mar: 2, apr: 3, may: 4, jun: 5, + jul: 6, aug: 7, sep: 8, oct: 9, nov: 10, dec: 11, +}; + +// ── Parsing ──────────────────────────────────────────────────────────────── + +function parseFXStreetHTML(html: string, fromDate: string): WideCalendarEvent[] { + const events: WideCalendarEvent[] = []; + const now = new Date(); + + let currentYear = parseInt(fromDate.slice(0, 4), 10); + let lastMonth = -1; + let currentDateStr: string | null = null; // YYYY-MM-DD + + const rowRe = + /\s*([\s\S]*?)<\/tr>/g; + + let m: RegExpExecArray | null; + while ((m = rowRe.exec(html)) !== null) { + if (m[1] !== undefined) { + // ── Ligne séparateur de date : "Wednesday, Jul 01" ────────────────── + const dm = m[1].match(/([A-Za-z]+)\s+(\d{1,2})/); + if (!dm) continue; + const monIdx = MONTHS[dm[1].slice(0, 3).toLowerCase()]; + if (monIdx === undefined) continue; + const day = parseInt(dm[2], 10); + if (lastMonth !== -1 && monIdx < lastMonth) currentYear += 1; // rollover déc → jan + lastMonth = monIdx; + currentDateStr = `${currentYear}-${String(monIdx + 1).padStart(2, "0")}-${String(day).padStart(2, "0")}`; + continue; + } + + // ── Ligne événement ──────────────────────────────────────────────────── + const [, , eventDateId, , , , , , countryName, body] = m; + if (!currentDateStr) continue; + + const ccy = FX_NAME_TO_CURRENCY[countryName]; + const code = FX_NAME_TO_CODE[countryName]; + if (!ccy || !code) continue; + + const cells = Array.from(body.matchAll(/]*>([\s\S]*?)<\/td>/g), c => c[1]); + if (cells.length < 7) continue; + + const timeM = cells[0].match(/(\d{1,2}):(\d{2})/); + const time24 = timeM ? `${timeM[1].padStart(2, "0")}:${timeM[2]}` : "00:00"; + const isoDate = `${currentDateStr}T${time24}:00Z`; + const evDate = new Date(isoDate); + + const title = stripTags(cells[2]); + if (!title) continue; + + const volM = stripTags(cells[3]).match(/\d+/); + const impact = impactFromVolatility(volM ? parseInt(volM[0], 10) : 0); + + const actual = stripTags(cells[4]) || null; + const forecast = stripTags(cells[5]) || null; + const previous = stripTags(cells[6]) || null; + + events.push({ + id: `il_${eventDateId}`, + date: isoDate, + currency: ccy, + countryCode: code, + category: fxCategory(title), + title, + impact, + actual, + forecast, + previous, + isPublished: actual !== null || evDate < now, + }); + } + + events.sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()); + return events; +} + +// ── Fetch ────────────────────────────────────────────────────────────────── +// fromDate / toDate au format YYYY-MM-DD + +export async function fetchFXStreetCalendar(fromDate: string, toDate: string): Promise { + const start = fromDate.replace(/-/g, ""); + const end = toDate.replace(/-/g, ""); + + const url = + `https://calendar.fxstreet.com/EventDateWidget/GetMain` + + `?culture=en-US&timezone=UTC&start=${start}&end=${end}&view=range&rows=5000` + + `&countrycode=${FXSTREET_COUNTRYCODES}`; + + try { + const res = await fetch(url, { + next: { revalidate: 1800 }, + headers: { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36", + "Accept-Language": "en-US,en;q=0.9", + "Referer": "https://investinglive.com/EconomicCalendar", + }, + }); + if (!res.ok) { console.warn("[fxstreet] HTTP", res.status); return []; } + const html = await res.text(); + return parseFXStreetHTML(html, fromDate); + } catch (err) { + console.error("[fxstreet] error:", err); + return []; + } +} diff --git a/lib/investinglive.ts b/lib/investinglive.ts index 04c3add..2beda23 100644 --- a/lib/investinglive.ts +++ b/lib/investinglive.ts @@ -46,50 +46,58 @@ export interface ILExpectationsWithHistory { interface ArticleRef { url: string; dateStr: string; daysAgo: number; } +// Teste les 4 variantes d'URL (/centralbank/ ou /news/, events pluriel ou singulier) +// en parallèle pour un jour donné — un seul aller-retour réseau au lieu de 4 séquentiels. async function tryUrl(daysAgo: number): Promise { const d = new Date(Date.now() - daysAgo * 86_400_000); const yyyymmdd = d.toISOString().slice(0, 10).replace(/-/g, ""); const dateStr = `${yyyymmdd.slice(0,4)}-${yyyymmdd.slice(4,6)}-${yyyymmdd.slice(6,8)}`; - // Tester les 4 variantes : /centralbank/ ou /news/, events (pluriel) ou event (singulier) const candidates = [ `https://investinglive.com/centralbank/how-have-interest-rate-expectations-changed-after-this-weeks-events-${yyyymmdd}/`, `https://investinglive.com/centralbank/how-have-interest-rate-expectations-changed-after-this-weeks-event-${yyyymmdd}/`, `https://investinglive.com/news/how-have-interest-rate-expectations-changed-after-this-weeks-events-${yyyymmdd}/`, `https://investinglive.com/news/how-have-interest-rate-expectations-changed-after-this-weeks-event-${yyyymmdd}/`, ]; - for (const url of candidates) { + const hits = await Promise.all(candidates.map(async (url) => { try { const res = await fetch(url, { method: "GET", headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36" }, cache: "no-store", }); - if (!res.ok) { res.body?.cancel().catch(() => {}); continue; } res.body?.cancel().catch(() => {}); - return { url, dateStr, daysAgo }; - } catch { continue; } + return res.ok ? url : null; + } catch { return null; } + })); + const found = hits.find((u): u is string => u !== null); + return found ? { url: found, dateStr, daysAgo } : null; +} + +// Cherche le jour le plus récent (daysAgo le plus petit) avec un article dans [start, end], +// par lots concurrents plutôt que séquentiellement — évite jusqu'à ~150 aller-retours +// réseau en série (risque de timeout sur les fonctions serverless Vercel). +async function findDayInRange(start: number, end: number, batchSize = 6): Promise { + for (let batchStart = start; batchStart <= end; batchStart += batchSize) { + const batchEnd = Math.min(batchStart + batchSize - 1, end); + const days = Array.from({ length: batchEnd - batchStart + 1 }, (_, i) => batchStart + i); + const results = await Promise.all(days.map(tryUrl)); + const found = results + .filter((r): r is ArticleRef => r !== null) + .sort((a, b) => a.daysAgo - b.daysAgo)[0]; + if (found) return found; } return null; } async function findArticleRefs(): Promise<{ current: ArticleRef | null; previous: ArticleRef | null }> { - let current: ArticleRef | null = null; - - for (let d = 0; d <= 14; d++) { - const found = await tryUrl(d); - if (found) { current = found; break; } - } + const current = await findDayInRange(0, 14); console.log(`[IL] article courant : ${current ? `day=${current.daysAgo} url=${current.url}` : "introuvable (0–14 jours)"}`); if (!current) return { current: null, previous: null }; - let previous: ArticleRef | null = null; const searchFrom = current.daysAgo + 1; const searchTo = current.daysAgo + 28; - for (let d = searchFrom; d <= searchTo; d++) { - const found = await tryUrl(d); - if (found) { previous = found; break; } - } + const previous = await findDayInRange(searchFrom, searchTo); console.log(`[IL] article précédent : ${previous ? `day=${previous.daysAgo} url=${previous.url}` : `introuvable (day ${searchFrom}–${searchTo})`}`); return { current, previous }; diff --git a/lib/newsfeed.ts b/lib/newsfeed.ts index eda91e4..99454fd 100644 --- a/lib/newsfeed.ts +++ b/lib/newsfeed.ts @@ -620,42 +620,48 @@ async function fetchRssFeed(url: string, source: string): Promise { } catch { return []; } } -// ── Source 1 : InvestingLive via WordPress REST API ─────────────────────────── -// Beaucoup plus fiable que le scraping HTML — retourne du JSON structuré +// ── Source 1 : InvestingLive via leur API interne (Nuxt/api.investinglive.com) ─ +// L'ancien endpoint WordPress (wp-json) renvoie 404 depuis la migration du site +// vers Nuxt.js (rebrand ForexLive → investingLive) — remplacé par l'API JSON +// qui alimente leur propre page d'accueil (aucune clé requise, publique). async function fetchInvestingLiveNews(): Promise { try { - // WordPress REST API : liste des posts récents, filtrée sur catégorie forex si dispo const res = await fetch( - "https://investinglive.com/wp-json/wp/v2/posts?per_page=20&orderby=date&order=desc&_fields=id,title,link,date,excerpt,categories", + "https://api.investinglive.com/api/homepage/articles", { - next: { revalidate: 1800 }, + next: { revalidate: 900 }, headers: { ...TE_HEADERS, "Accept": "application/json" }, } ); if (!res.ok) return []; - const posts = await res.json() as Array<{ - id: number; - title: { rendered: string }; - link: string; - date: string; - excerpt: { rendered: string }; - }>; - + const data = await res.json() as { + LatestArticles?: Array<{ + Id: string; + Title: string; + Slug: string; + Tldr?: string[] | string | null; // schéma incohérent selon le type d'article + PublishedOn: string; + Category?: { Name: string; Slug: string }; + }>; + }; + const posts = data.LatestArticles; if (!Array.isArray(posts)) return []; return posts.slice(0, 20).map(post => { - const title = post.title?.rendered?.replace(/<[^>]+>/g, "").replace(/’/g, "'").replace(/“/g, '"').replace(/”/g, '"').trim() ?? ""; - const summary = post.excerpt?.rendered?.replace(/<[^>]+>/g, "").trim().slice(0, 250); + const title = post.Title?.trim() ?? ""; + const summary = (Array.isArray(post.Tldr) ? post.Tldr.join(" ") : post.Tldr ?? "").slice(0, 250); + const catSlug = post.Category?.Slug ?? "news"; + const url = `https://investinglive.com/${catSlug}/${post.Slug}/`; const combined = `${title} ${summary ?? ""}`; const { impacts, categories } = applyRules(combined); return { - id: `il-${post.id}`, + id: `il-${post.Id}`, title, - url: post.link, + url, source: "InvestingLive", - publishedAt: parseDate(post.date), + publishedAt: parseDate(post.PublishedOn), summary, impacts, categories, diff --git a/lib/rateprobability.ts b/lib/rateprobability.ts index fd7c163..3e43607 100644 --- a/lib/rateprobability.ts +++ b/lib/rateprobability.ts @@ -99,15 +99,21 @@ const MEETING_TITLES: Partial> = { // ── Extraction des champs (nommage hétérogène selon les CB) ─────────────────── +// .github/scripts/fetch-rate-data.mjs écrit toujours "midpoint", quelle que soit +// la devise (CME/Investing.com/InvestingLive écrivent tous le même schéma). Les +// noms par devise ci-dessous ("current_target", "cash_rate_target"…) datent de +// l'ancienne source rateprobability.com (remplacée par le commit 2673686) et ne +// sont plus jamais écrits par le pipeline actuel — d'où le "0.00%" affiché pour +// toute devise autre que USD/NZD (les deux seules à retomber sur "midpoint"). function getCurrentRate(ccy: Currency, today: Record): number { + if (typeof today["midpoint"] === "number") return today["midpoint"] as number; switch (ccy) { - case "USD": return (today["midpoint"] as number) ?? 0; case "EUR": return (today["ecb_main_refinancing"] as number) ?? (today["ecb_deposit_facility"] as number) ?? 0; case "GBP": return (today["current_target"] as number) ?? 0; case "JPY": return (today["current_target"] as number) ?? 0; case "CAD": return (today["Overnight Rate Target"] as number) ?? 0; case "AUD": return (today["cash_rate_target"] as number) ?? 0; - case "NZD": return (today["Official Cash Rate (OCR)"] as number) ?? (today["current_target"] as number) ?? (today["midpoint"] as number) ?? 0; + case "NZD": return (today["Official Cash Rate (OCR)"] as number) ?? (today["current_target"] as number) ?? 0; default: return 0; } } @@ -118,56 +124,79 @@ function getAsOf(today: Record): string { } -// ── SNB meeting dates (published par la SNB, trimestrielles) ───────────────── -// Mise à jour annuelle : mars, juin, septembre, décembre +// ── Calendriers officiels par banque centrale ───────────────────────────────── +// Utilisés pour les CB sans page Investing.com dédiée (ou dont le fallback IL +// n'a qu'un seul point "year-end") : on construit une vraie courbe multi-réunions +// à partir des dates réelles + de l'estimation InvestingLive (proba/direction). +// Sources officielles, à mettre à jour quand chaque banque publie son calendrier +// suivant (généralement 1x/an) : +// SNB : snb.ch/en/the-snb/mandates-goals/monetary-policy/decisions +// RBNZ : rbnz.govt.nz +// ECB : ecb.europa.eu/press/calendars/mgcgc (jour 2 = décision + conf. presse) +// BoE : bankofengland.co.uk/monetary-policy/upcoming-mpc-dates +// BoJ : boj.or.jp/en/mopo/mpmsche_minu (2027 pas encore publié à l'écriture de ceci) +// BoC : bankofcanada.ca (annonce annuelle du calendrier, pas encore publié pour 2027) +// RBA : rba.gov.au/schedules-events/board-meeting-schedules.html (jour 2 = décision) const SNB_MEETINGS: string[] = [ - // 2026 - "2026-06-19", - "2026-09-25", - "2026-12-11", - // 2027 - "2027-03-18", - "2027-06-17", - "2027-09-23", - "2027-12-09", + "2026-06-19", "2026-09-25", "2026-12-11", + "2027-03-18", "2027-06-17", "2027-09-23", "2027-12-09", ]; -// ── RBNZ meeting dates (7 par an) ───────────────────────────────────────────── -// Source officielle : rbnz.govt.nz — mise à jour annuelle - const RBNZ_MEETINGS: string[] = [ - // 2026 - "2026-07-09", - "2026-08-19", - "2026-10-14", - "2026-11-25", - // 2027 - "2027-02-24", - "2027-04-09", - "2027-05-26", - "2027-07-14", - "2027-08-18", - "2027-10-13", - "2027-11-24", + "2026-07-09", "2026-08-19", "2026-10-14", "2026-11-25", + "2027-02-24", "2027-04-09", "2027-05-26", "2027-07-14", + "2027-08-18", "2027-10-13", "2027-11-24", ]; -// Construit un CBRatePath NZD depuis InvestingLive + calendrier RBNZ officiel -function buildRBNZPath(il: ILExpectationsMap, currentRate: number): CBRatePath | null { - const nzdData = il["NZD"]; - if (!nzdData) return null; +const ECB_MEETINGS: string[] = [ + "2026-07-23", "2026-09-10", "2026-10-29", "2026-12-17", + "2027-02-04", "2027-03-18", "2027-04-29", "2027-06-10", + "2027-07-22", "2027-09-09", "2027-10-28", "2027-12-16", +]; + +const BOE_MEETINGS: string[] = [ + "2026-07-30", "2026-09-17", "2026-11-05", "2026-12-17", + "2027-02-04", "2027-03-18", "2027-04-29", "2027-06-17", + "2027-07-29", "2027-09-16", "2027-11-04", "2027-12-16", +]; + +const BOJ_MEETINGS: string[] = [ + "2026-07-31", "2026-09-18", "2026-10-30", "2026-12-18", +]; + +const BOC_MEETINGS: string[] = [ + "2026-07-15", "2026-09-02", "2026-10-28", "2026-12-09", +]; + +const RBA_MEETINGS: string[] = [ + "2026-08-11", "2026-09-29", "2026-11-03", "2026-12-08", + "2027-02-09", "2027-03-23", "2027-05-04", "2027-06-22", + "2027-08-10", "2027-09-28", "2027-11-02", "2027-12-14", +]; + +// Construit un CBRatePath depuis un calendrier officiel + l'estimation InvestingLive +// (proba/direction de la prochaine réunion, biais year-end pour les suivantes). +function buildOfficialCalendarPath( + currency: Currency, + officialMeetings: string[], + il: ILExpectationsMap, + currentRate: number, +): CBRatePath | null { + const ilData = il[currency]; + if (!ilData) return null; const nowIso = new Date().toISOString().slice(0, 10); - const upcomingMeetings = RBNZ_MEETINGS.filter(d => d >= nowIso); + const upcomingMeetings = officialMeetings.filter(d => d >= nowIso); if (upcomingMeetings.length === 0) return null; - const yearEndIsCut = nzdData.bpsYearEnd < 0; + const yearEndIsCut = ilData.bpsYearEnd < 0; const meetings: RateProbMeeting[] = upcomingMeetings.map((dateIso, i) => { const isNext = i === 0; - const probMovePct = isNext ? nzdData.nextMeetingProbPct : 0; + const probMovePct = isNext ? ilData.nextMeetingProbPct : 0; const probIsCut = isNext - ? (nzdData.nextMeetingIsNoChange ? yearEndIsCut : !nzdData.nextMeetingIsHike) + ? (ilData.nextMeetingIsNoChange ? yearEndIsCut : !ilData.nextMeetingIsHike) : yearEndIsCut; const changeBps = isNext ? (probMovePct > 50 ? (probIsCut ? -25 : 25) : 0) : 0; const impliedRate = isNext && probMovePct > 50 @@ -182,56 +211,8 @@ function buildRBNZPath(il: ILExpectationsMap, currentRate: number): CBRatePath | ); return { - currency: "NZD", - asOf: nzdData.publishedDate, - currentRate, - meetings, - peakMeeting: peakMeeting.probMovePct > 0 ? peakMeeting : null, - yearEndImplied: meetings.at(-1)?.impliedRate ?? null, - }; -} - -// Construit un CBRatePath CHF depuis les données InvestingLive (probabilités OIS-équivalent) -function buildSNBPath(il: ILExpectationsMap, currentRate: number): CBRatePath | null { - const chfData = il["CHF"]; - if (!chfData) return null; - - const nowIso = new Date().toISOString().slice(0, 10); - const upcomingMeetings = SNB_MEETINGS.filter(d => d >= nowIso); - if (upcomingMeetings.length === 0) return null; - - // Direction par défaut : bpsYearEnd > 0 = hausse, < 0 = baisse - const yearEndIsHike = chfData.bpsYearEnd >= 0; - - const meetings: RateProbMeeting[] = upcomingMeetings.map((dateIso, i) => { - const isNext = i === 0; - const probMovePct = isNext ? chfData.nextMeetingProbPct : 0; - // Si "no change" à la prochaine réunion, la direction vient du biais year-end - const probIsCut = isNext - ? (chfData.nextMeetingIsNoChange ? !yearEndIsHike : !chfData.nextMeetingIsHike) - : !yearEndIsHike; - const changeBps = isNext ? (probIsCut ? -chfData.bpsYearEnd : chfData.bpsYearEnd) : 0; - const impliedRate = isNext && probMovePct > 50 - ? currentRate + (probIsCut ? -0.25 : 0.25) - : currentRate; - - return { - label: dateIso.slice(0, 7), // "2026-06" - dateIso, - impliedRate, - probMovePct, - probIsCut, - changeBps, - }; - }); - - const peakMeeting = meetings.reduce((best, m) => - m.probMovePct > best.probMovePct ? m : best, meetings[0] - ); - - return { - currency: "CHF", - asOf: chfData.publishedDate, + currency, + asOf: ilData.publishedDate, currentRate, meetings, peakMeeting: peakMeeting.probMovePct > 0 ? peakMeeting : null, @@ -362,18 +343,28 @@ export async function fetchAllCBPaths(): Promise { } } - // CHF/SNB : Investing.com n'a pas de page SNB → InvestingLive seule source. - if (!data["CHF"] && ilData["CHF"]) { - const snbPath = buildSNBPath(ilData, 0.00); - if (snbPath) data["CHF"] = snbPath; - } - - // NZD/RBNZ : Investing.com n'a pas de page RBNZ → InvestingLive + calendrier RBNZ. - // Si les données JSON ont ≤ 1 réunion (buildILFallback n'en met qu'une) → reconstruire. - if ((!data["NZD"] || data["NZD"].meetings.length <= 1) && ilData["NZD"]) { - const rate = data["NZD"]?.currentRate || 2.25; // RBNZ OCR juin 2026 - const rbnzPath = buildRBNZPath(ilData, rate); - if (rbnzPath) data["NZD"] = rbnzPath; + // Investing.com n'a de Rate Monitor que pour la Fed (USD) — toutes les autres + // devises retombent sur le fallback InvestingLive, qui n'a qu'un seul point + // "year-end" (buildILFallback dans fetch-rate-data.mjs). On reconstruit ici une + // vraie courbe multi-réunions à partir du calendrier officiel de chaque CB + + // de l'estimation InvestingLive (proba/direction), comme déjà fait pour NZD/CHF. + const OFFICIAL_CALENDARS: Partial> = { + CHF: { meetings: SNB_MEETINGS, fallbackRate: 0.00 }, + NZD: { meetings: RBNZ_MEETINGS, fallbackRate: 2.25 }, + EUR: { meetings: ECB_MEETINGS, fallbackRate: 2.15 }, + GBP: { meetings: BOE_MEETINGS, fallbackRate: 3.75 }, + JPY: { meetings: BOJ_MEETINGS, fallbackRate: 0.75 }, + CAD: { meetings: BOC_MEETINGS, fallbackRate: 2.25 }, + AUD: { meetings: RBA_MEETINGS, fallbackRate: 4.35 }, + }; + for (const [ccyStr, cal] of Object.entries(OFFICIAL_CALENDARS)) { + const ccy = ccyStr as Currency; + if (!cal) continue; + // Reconstruit si aucune donnée, ou si le fallback IL n'a mis qu'un seul point. + if ((data[ccy] && data[ccy]!.meetings.length > 1) || !ilData[ccy]) continue; + const rate = data[ccy]?.currentRate || cal.fallbackRate; + const path = buildOfficialCalendarPath(ccy, cal.meetings, ilData, rate); + if (path) data[ccy] = path; } // Enrichissement IL : fusion proba première réunion + deltas hebdo diff --git a/lib/tradingeconomics.ts b/lib/tradingeconomics.ts index d169e46..2810517 100644 --- a/lib/tradingeconomics.ts +++ b/lib/tradingeconomics.ts @@ -17,6 +17,9 @@ import type { Currency } from "./types"; import type { EventCategory } from "@/app/api/calendar/route"; +import { CALENDAR_COUNTRIES, TE_NAME_TO_CURRENCY, TE_NAME_TO_CODE } from "./calendar-countries"; +import type { WideCalendarEvent } from "./fxstreetCalendar"; +import { classifyOtherTitle } from "./calendar-taxonomy"; // ── Country → Currency ──────────────────────────────────────────────────────── @@ -47,7 +50,7 @@ function teCategory(cat: string, eventName?: string): EventCategory { if (/retail\s+sales|core\s+retail|household\s+spending/.test(c)) return "retail_sales"; if (/trade\s+balance|current\s+account|balance\s+of\s+trade/.test(c)) return "trade_balance"; if (/employment|payrolls|nonfarm|jobless|unemployment|job\s+creation|\badp\b|jolts|job\s+openings|job\s+quits|ism\s+\w+\s+employ/.test(c)) return "employment"; - return "other"; + return classifyOtherTitle(eventName ?? ""); } // ── Importance (1/2/3) → impact ─────────────────────────────────────────────── @@ -267,6 +270,98 @@ export async function fetchTEInflationForecasts( return result; } +// ── Fetch élargi (45 pays) ───────────────────────────────────────────────── +// Contrairement à fetchTECalendarHTML (limité aux 8 devises majeures pour +// les besoins de macro/route.ts), cette variante couvre tout CALENDAR_COUNTRIES +// en fetchant chaque page /{slug}/calendar en parallèle (même pattern que le +// cas spécial Suisse ci-dessus, généralisé). Utilisée par le calendrier économique +// pour se rapprocher de la couverture de tradingeconomics.com/calendar. + +function parseCalendarHTMLWide(html: string): WideCalendarEvent[] { + const events: WideCalendarEvent[] = []; + const now = new Date(); + + const rowPattern = /]*>([\s\S]*?)(?=)/g; + + let match: RegExpExecArray | null; + while ((match = rowPattern.exec(html)) !== null) { + const [, id, country, category, eventAttr, body] = match; + + const ccy = TE_NAME_TO_CURRENCY[country.toLowerCase()]; + const code = TE_NAME_TO_CODE[country.toLowerCase()]; + if (!ccy || !code) continue; // pays hors CALENDAR_COUNTRIES + + const dateMatch = body.match(/class=' (\d{4}-\d{2}-\d{2})'/); + if (!dateMatch) continue; + const dateStr = dateMatch[1]; + + const timeMatch = body.match(/calendar-date-(\d)[^"]*"[^>]*>\s*([\d:]+\s*[AP]M)\s*/i); + const importance = timeMatch ? parseInt(timeMatch[1]) : 1; + const timeStr = timeMatch ? timeMatch[2].trim() : "00:00 AM"; + const time24 = to24h(timeStr); + const isoDate = `${dateStr}T${time24}:00Z`; + const evDate = new Date(isoDate); + + const titleMatch = body.match(/]*>([^<]+)<\/a>/); + const title = titleMatch ? decodeHTMLEntities(titleMatch[1]) : decodeHTMLEntities(eventAttr); + + const refMatch = body.match(/class="calendar-reference"\s*>([^<]*) { + const qs = fromDate && toDate ? `?startDate=${fromDate}&endDate=${toDate}` : ""; + const html = await fetchOneTEPage(`https://tradingeconomics.com/${teSlug}/calendar${qs}`); + if (!html) return []; + return parseCalendarHTMLWide(html); +} + +export async function fetchTECalendarWide(fromDate?: string, toDate?: string): Promise { + const qs = fromDate && toDate ? `?startDate=${fromDate}&endDate=${toDate}` : ""; + const pages = await Promise.all( + CALENDAR_COUNTRIES.map(c => fetchOneTEPage(`https://tradingeconomics.com/${c.teSlug}/calendar${qs}`)) + ); + + const allEvents: WideCalendarEvent[] = []; + const seen = new Set(); + for (const html of pages) { + if (!html) continue; + for (const ev of parseCalendarHTMLWide(html)) { + if (seen.has(ev.id)) continue; + seen.add(ev.id); + allEvents.push(ev); + } + } + + allEvents.sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()); + return allEvents; +} + // ── Paid API (when TRADING_ECONOMICS_API_KEY is set) ───────────────────────── export async function fetchTECalendar( diff --git a/next.config.mjs b/next.config.mjs index 5934c34..768b746 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,7 +1,7 @@ /** @type {import('next').NextConfig} */ const nextConfig = { experimental: { - serverComponentsExternalPackages: ["papaparse"], + serverComponentsExternalPackages: ["papaparse", "pdf-parse", "pdfjs-dist"], }, }; diff --git a/package-lock.json b/package-lock.json index f6c2f11..e51dd02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "next": "14.2.5", "openai": "^4.52.7", "papaparse": "^5.4.1", + "pdf-parse": "^2.4.5", "react": "^18", "react-dom": "^18", "recharts": "^2.12.7", @@ -276,6 +277,205 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@napi-rs/canvas": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.80.tgz", + "integrity": "sha512-DxuT1ClnIPts1kQx8FBmkk4BQDTfI5kIzywAaMjQSXfNnra5UFU9PwurXrl+Je3bJ6BGsp/zmshVVFbCmyI+ww==", + "license": "MIT", + "workspaces": [ + "e2e/*" + ], + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@napi-rs/canvas-android-arm64": "0.1.80", + "@napi-rs/canvas-darwin-arm64": "0.1.80", + "@napi-rs/canvas-darwin-x64": "0.1.80", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.80", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.80", + "@napi-rs/canvas-linux-arm64-musl": "0.1.80", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.80", + "@napi-rs/canvas-linux-x64-gnu": "0.1.80", + "@napi-rs/canvas-linux-x64-musl": "0.1.80", + "@napi-rs/canvas-win32-x64-msvc": "0.1.80" + } + }, + "node_modules/@napi-rs/canvas-android-arm64": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.80.tgz", + "integrity": "sha512-sk7xhN/MoXeuExlggf91pNziBxLPVUqF2CAVnB57KLG/pz7+U5TKG8eXdc3pm0d7Od0WreB6ZKLj37sX9muGOQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-darwin-arm64": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.80.tgz", + "integrity": "sha512-O64APRTXRUiAz0P8gErkfEr3lipLJgM6pjATwavZ22ebhjYl/SUbpgM0xcWPQBNMP1n29afAC/Us5PX1vg+JNQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-darwin-x64": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.80.tgz", + "integrity": "sha512-FqqSU7qFce0Cp3pwnTjVkKjjOtxMqRe6lmINxpIZYaZNnVI0H5FtsaraZJ36SiTHNjZlUB69/HhxNDT1Aaa9vA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.80.tgz", + "integrity": "sha512-eyWz0ddBDQc7/JbAtY4OtZ5SpK8tR4JsCYEZjCE3dI8pqoWUC8oMwYSBGCYfsx2w47cQgQCgMVRVTFiiO38hHQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-gnu": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.80.tgz", + "integrity": "sha512-qwA63t8A86bnxhuA/GwOkK3jvb+XTQaTiVML0vAWoHyoZYTjNs7BzoOONDgTnNtr8/yHrq64XXzUoLqDzU+Uuw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-musl": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.80.tgz", + "integrity": "sha512-1XbCOz/ymhj24lFaIXtWnwv/6eFHXDrjP0jYkc6iHQ9q8oXKzUX1Lc6bu+wuGiLhGh2GS/2JlfORC5ZcXimRcg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.80.tgz", + "integrity": "sha512-XTzR125w5ZMs0lJcxRlS1K3P5RaZ9RmUsPtd1uGt+EfDyYMu4c6SEROYsxyatbbu/2+lPe7MPHOO/0a0x7L/gw==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-gnu": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.80.tgz", + "integrity": "sha512-BeXAmhKg1kX3UCrJsYbdQd3hIMDH/K6HnP/pG2LuITaXhXBiNdh//TVVVVCBbJzVQaV5gK/4ZOCMrQW9mvuTqA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-musl": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.80.tgz", + "integrity": "sha512-x0XvZWdHbkgdgucJsRxprX/4o4sEed7qo9rCQA9ugiS9qE2QvP0RIiEugtZhfLH3cyI+jIRFJHV4Fuz+1BHHMg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-win32-x64-msvc": { + "version": "0.1.80", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.80.tgz", + "integrity": "sha512-Z8jPsM6df5V8B1HrCHB05+bDiCxjE9QA//3YrkKIdVDEwn5RKaqOxCJDRJkl48cJbylcrJbW4HxZbTte8juuPg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", @@ -4975,6 +5175,38 @@ "node": ">=8" } }, + "node_modules/pdf-parse": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/pdf-parse/-/pdf-parse-2.4.5.tgz", + "integrity": "sha512-mHU89HGh7v+4u2ubfnevJ03lmPgQ5WU4CxAVmTSh/sxVTEDYd1er/dKS/A6vg77NX47KTEoihq8jZBLr8Cxuwg==", + "license": "Apache-2.0", + "dependencies": { + "@napi-rs/canvas": "0.1.80", + "pdfjs-dist": "5.4.296" + }, + "bin": { + "pdf-parse": "bin/cli.mjs" + }, + "engines": { + "node": ">=20.16.0 <21 || >=22.3.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/mehmet-kozan" + } + }, + "node_modules/pdfjs-dist": { + "version": "5.4.296", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.4.296.tgz", + "integrity": "sha512-DlOzet0HO7OEnmUmB6wWGJrrdvbyJKftI1bhMitK7O2N8W2gc757yyYBbINy9IDafXAV9wmKr9t7xsTaNKRG5Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=20.16.0 || >=22.3.0" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^0.1.80" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", diff --git a/package.json b/package.json index 495f178..4d7f3bf 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev -p 3000", "build": "next build", "start": "next start", "lint": "next lint" @@ -16,6 +16,7 @@ "next": "14.2.5", "openai": "^4.52.7", "papaparse": "^5.4.1", + "pdf-parse": "^2.4.5", "react": "^18", "react-dom": "^18", "recharts": "^2.12.7", diff --git a/public/screenshot-desktop.png b/public/screenshot-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..2fe627a0bbad76e5bab0a9038e382edba079849e GIT binary patch literal 103655 zcmd3OWmFwawcXtjR+}$NWaCi3r=iu%V+}&YF-n`%3wdTjH z`7w9h{#C1cch#=iyQ_BX=cx{nlM#i7!GeK+fPfbl6HWD~cN$IqHueVQ}#|FtsP8S$7GAoB8IiM}fE=koNG{7>Y2hON+7+{Ajz{MH{Id6@6~0hd`X8f% zJ_^4%qD+t&FP+^F7a>}f`#tc#FTpS01~#FEYSrmtg!}hvkB){Cd4jOn-b}DfXl!(@ zt&Q0lIm8v`zwdhgkG#)%I0`B4G-a}~>dINyq?N6hjMm;W%I3$x01094n|nYE(GUqQ5T z09GWs^?dU*wA~MtH_rEOZBb)GJZ0yTp}b|!C?{71!v4g>tab0& zD2--MpPn{z1jYtIpy;r16h8Qd6sciE6#`hM;81<&{Ic3Vz6LZ;Es351h=67|*^mvoy;z8v`n#IL4w;R~(cI_6yKsuw_;L)BqtfzENA8p?fL% zlFewlTMTTqq?32>-GUU-A{!E(TVxidA`JjsxnALyeTWWEx7Fgi_8hFn z`_vx&$2)JuG=q!e_nhMOj6d@d2X`V(%?*XX3ZI1Nh0r1G)v0e-IA%D44Rzs1Hffe` z_qi_kLNj(ER(0_4by3*1WW4X0mbdcWI2>E>w#NLa@KQ~wvPoJrob==^Jnu{7ZdagR z#KRSE_1A;Mr^}eGpJubEdvuaS2)%Ttx2^9bkAH%2@zArr>S#C|Nv!);bRfeBBR;K( z+B_Y}_D0#V^_JLS_Dd(<_C^8C-O9{tUZxpkIWi*3;~3Wlx}#y44yknC!i$z;)j<)S zZ_RMmH9YreraZ-4oO}R1@azQwHO+za{^STx`iC2=;vEu^DBjl(zw!oBakcHu9=5`G zE!Fy&bCj`vt9~nDiUiN(s@m##%`*;?YF8P(+o=3tkiYyz?%L<*S}$x{R(Ah+Q@>yJ z8DC3!LFA>s^4|K)-1mBZ6vW({1s?gt#XECZ;nXkKd$Vwfb3c47o2@rtB`a%lZ@Ao) z2Ev{{Bs)$qFVd%=T_AOa>9Cr1=^kmTYXY4+gZ4!ei6?-{CcG>5t%>UoXI42=w#}YN~;E6IsqS4_u_QBhw0lvaM%_a2m@MmIpP!mE&{R#OLiRkICTk z+k?>#4Sr4RmtQtngOr||DKtsV-hi7IFSfJpo|gqHUaP*SndO-^OXJmIYAUaT6QB%k zhWo?0htzh?w2raqd#ovS``q5f9n}pFoylKX476CQ6;FiyTno=Mdq$;tK95f=IVhqZ zg3Q7RGtW2?Bfal28je6SYV*EiFbjWtlW$e5Z##{Wt~gJ2l?s#r0y>mjlih?!9E5X^ z@M;Kb!ZyFO=C(<#Vt`G=M~z33WIkaOdKcVu@bzd7_tBLR>+t5@p%Ew+1Q$pFK*w2p z{wlKF#F;9b!cn8^Ti++q`&;#ofRW89aqv{+=0it?>|u0s;h6~nsP&&dn2zZ|4|*J& z81=$(@tmCDJ^ecGgXQFXDcw{7o+Whe)mS[%hJw;W$f7ivE}HHQUAeZAVh;8ky4 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

R+>_E!uWhc*&j^-Z-%MFyBGmbNyv&tV0 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�=iSD>U6l|{!RDYR6fIres!{JT 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 literal 0 HcmV?d00001 diff --git a/public/screenshot-ois.png b/public/screenshot-ois.png new file mode 100644 index 0000000000000000000000000000000000000000..be618ba7187c2d7c467abcbefdfc467287523a6f GIT binary patch literal 115916 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 FS&dx0Mo&B}=cuMa9(kxioF?`kz_q>EZ-* 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 r|1CF!@&lfr(Mw{JhQJTZo6U0= 200 And http.Status < 500 Then + IsServerUp = True + End If + Err.Clear + On Error Goto 0 +End Function + +If Not IsServerUp(serverUrl) Then + WshShell.CurrentDirectory = projectDir + cmd = "cmd /c npm run dev >> """ & logDir & "\dashboard.log"" 2>&1" + WshShell.Run cmd, 0, False + + waited = 0 + Do While waited < maxWaitSec + WScript.Sleep 1000 + waited = waited + 1 + If IsServerUp(serverUrl) Then Exit Do + Loop +End If + +WshShell.Run """" & chromeExe & """" & chromeArgs, 1, False diff --git a/scripts/push-env-vercel.mjs b/scripts/push-env-vercel.mjs new file mode 100644 index 0000000..eb468a6 --- /dev/null +++ b/scripts/push-env-vercel.mjs @@ -0,0 +1,57 @@ +import { readFileSync } from "fs"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const envFile = join(__dirname, "../.env.local"); +const TOKEN = process.env.VERCEL_TOKEN; +const PROJECT_ID = process.env.VERCEL_PROJECT_ID; +const TEAM_ID = process.env.VERCEL_TEAM_ID; + +if (!TOKEN || !PROJECT_ID || !TEAM_ID) { + console.error("Missing VERCEL_TOKEN, VERCEL_PROJECT_ID or VERCEL_TEAM_ID"); + process.exit(1); +} + +const lines = readFileSync(envFile, "utf8").split("\n"); +const envVars = []; +for (const line of lines) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith("#")) continue; + const idx = trimmed.indexOf("="); + if (idx < 0) continue; + const key = trimmed.slice(0, idx).trim(); + const value = trimmed.slice(idx + 1).trim(); + if (key) envVars.push({ key, value }); +} + +console.log(`Found ${envVars.length} variables to push...`); + +for (const { key, value } of envVars) { + const res = await fetch( + `https://api.vercel.com/v10/projects/${PROJECT_ID}/env?teamId=${TEAM_ID}`, + { + method: "POST", + headers: { + Authorization: `Bearer ${TOKEN}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + key, + value, + type: "encrypted", + target: ["production", "preview"], + }), + } + ); + const data = await res.json(); + if (data.key) { + console.log(` ✓ ${key}`); + } else if (data.error?.code === "ENV_ALREADY_EXISTS") { + console.log(` ~ ${key} (already exists, skipping)`); + } else { + console.log(` ✗ ${key}: ${data.error?.message ?? JSON.stringify(data)}`); + } +} + +console.log("\nDone. Now deploying to production..."); diff --git a/scripts/start-dashboard-hidden.vbs b/scripts/start-dashboard-hidden.vbs new file mode 100644 index 0000000..47b9b27 --- /dev/null +++ b/scripts/start-dashboard-hidden.vbs @@ -0,0 +1,13 @@ +' Lance le dashboard Forex (npm run dev) en arriere-plan, sans fenetre visible. +' Copie de ce fichier dans le dossier Demarrage de Windows (shell:startup) +' pour un lancement automatique a chaque connexion. +projectDir = "C:\Users\capug\Documents\Private\Investissements\Trading\Code\forex-dashboard" +logDir = projectDir & "\logs" + +Set fso = CreateObject("Scripting.FileSystemObject") +If Not fso.FolderExists(logDir) Then fso.CreateFolder(logDir) + +Set WshShell = CreateObject("WScript.Shell") +WshShell.CurrentDirectory = projectDir +cmd = "cmd /c npm run dev >> """ & logDir & "\dashboard.log"" 2>&1" +WshShell.Run cmd, 0, False diff --git a/scroll-shot.js b/scroll-shot.js new file mode 100644 index 0000000..dc7e702 --- /dev/null +++ b/scroll-shot.js @@ -0,0 +1,19 @@ +const { chromium } = require('playwright'); +(async () => { + const b = await chromium.launch(); + const p = await b.newPage(); + await p.setViewportSize({width: 589, height: 900}); + await p.goto('http://localhost:3099/'); + await p.waitForTimeout(9000); + await p.evaluate(() => window.scrollTo(0, 2200)); + await p.waitForTimeout(400); + await p.screenshot({path: 'C:/Users/capug/AppData/Local/Temp/scroll2200.png'}); + await p.evaluate(() => window.scrollTo(0, 4200)); + await p.waitForTimeout(400); + await p.screenshot({path: 'C:/Users/capug/AppData/Local/Temp/scroll4200.png'}); + await p.evaluate(() => window.scrollTo(0, 6500)); + await p.waitForTimeout(400); + await p.screenshot({path: 'C:/Users/capug/AppData/Local/Temp/scroll6500.png'}); + await b.close(); + console.log('done'); +})(); diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo index f323523..9b4f1d6 100644 --- a/tsconfig.tsbuildinfo +++ b/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.iterator.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/next/amp.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/future/route-kind.d.ts","./node_modules/next/dist/server/future/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/server/lib/revalidate.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/future/helpers/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/font-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/client/components/static-generation-async-storage-instance.d.ts","./node_modules/next/dist/client/components/static-generation-async-storage.external.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/client/components/request-async-storage-instance.d.ts","./node_modules/next/dist/client/components/request-async-storage.external.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.d.ts","./node_modules/next/dist/client/components/app-router.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/action-async-storage-instance.d.ts","./node_modules/next/dist/client/components/action-async-storage.external.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/search-params.d.ts","./node_modules/next/dist/client/components/not-found-boundary.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/future/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/future/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/future/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/future/normalizers/normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/future/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/future/normalizers/request/prefix.d.ts","./node_modules/next/dist/server/future/normalizers/request/postponed.d.ts","./node_modules/next/dist/server/future/normalizers/request/action.d.ts","./node_modules/next/dist/server/future/normalizers/request/prefetch-rsc.d.ts","./node_modules/next/dist/server/future/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/webpack/plugins/define-env-plugin.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/types/index.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/shared/lib/runtime-config.external.d.ts","./node_modules/next/config.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/client/components/draft-mode.d.ts","./node_modules/next/dist/client/components/headers.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./next-env.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/tailwindcss/types/generated/corepluginlist.d.ts","./node_modules/tailwindcss/types/generated/colors.d.ts","./node_modules/tailwindcss/types/config.d.ts","./node_modules/tailwindcss/types/index.d.ts","./tailwind.config.ts","./data/rate_decisions.json","./lib/forexfactory.ts","./lib/types.ts","./lib/investinglive.ts","./lib/rateprobability.ts","./lib/tradingeconomics.ts","./lib/investing.ts","./app/api/calendar/route.ts","./lib/constants.ts","./app/api/cot/route.ts","./app/api/cot-history/route.ts","./lib/tebonds.ts","./app/api/drivers/route.ts","./app/api/expectations/route.ts","./app/api/fx/route.ts","./app/api/fx-weekly/route.ts","./data/cpi_overrides.json","./lib/tecpi.ts","./app/api/macro/route.ts","./node_modules/openai/_shims/manual-types.d.ts","./node_modules/openai/_shims/auto/types.d.ts","./node_modules/openai/streaming.d.ts","./node_modules/openai/error.d.ts","./node_modules/openai/_shims/multipartbody.d.ts","./node_modules/openai/uploads.d.ts","./node_modules/openai/core.d.ts","./node_modules/openai/_shims/index.d.ts","./node_modules/openai/pagination.d.ts","./node_modules/openai/resources/shared.d.ts","./node_modules/openai/resources/batches.d.ts","./node_modules/openai/resources/chat/completions/messages.d.ts","./node_modules/openai/resources/chat/completions/completions.d.ts","./node_modules/openai/resources/completions.d.ts","./node_modules/openai/resources/embeddings.d.ts","./node_modules/openai/resources/files.d.ts","./node_modules/openai/resources/images.d.ts","./node_modules/openai/resources/models.d.ts","./node_modules/openai/resources/moderations.d.ts","./node_modules/openai/resources/audio/speech.d.ts","./node_modules/openai/resources/audio/transcriptions.d.ts","./node_modules/openai/resources/audio/translations.d.ts","./node_modules/openai/resources/audio/audio.d.ts","./node_modules/openai/resources/beta/threads/messages.d.ts","./node_modules/openai/resources/beta/threads/runs/steps.d.ts","./node_modules/openai/resources/beta/threads/runs/runs.d.ts","./node_modules/openai/lib/eventstream.d.ts","./node_modules/openai/lib/assistantstream.d.ts","./node_modules/openai/resources/beta/threads/threads.d.ts","./node_modules/openai/resources/beta/assistants.d.ts","./node_modules/openai/resources/chat/completions.d.ts","./node_modules/openai/lib/abstractchatcompletionrunner.d.ts","./node_modules/openai/lib/chatcompletionstream.d.ts","./node_modules/openai/lib/responsesparser.d.ts","./node_modules/openai/resources/responses/input-items.d.ts","./node_modules/openai/lib/responses/eventtypes.d.ts","./node_modules/openai/lib/responses/responsestream.d.ts","./node_modules/openai/resources/responses/responses.d.ts","./node_modules/openai/lib/parser.d.ts","./node_modules/openai/lib/chatcompletionstreamingrunner.d.ts","./node_modules/openai/lib/jsonschema.d.ts","./node_modules/openai/lib/runnablefunction.d.ts","./node_modules/openai/lib/chatcompletionrunner.d.ts","./node_modules/openai/resources/beta/chat/completions.d.ts","./node_modules/openai/resources/beta/chat/chat.d.ts","./node_modules/openai/resources/beta/realtime/sessions.d.ts","./node_modules/openai/resources/beta/realtime/transcription-sessions.d.ts","./node_modules/openai/resources/beta/realtime/realtime.d.ts","./node_modules/openai/resources/beta/beta.d.ts","./node_modules/openai/resources/containers/files/content.d.ts","./node_modules/openai/resources/containers/files/files.d.ts","./node_modules/openai/resources/containers/containers.d.ts","./node_modules/openai/resources/graders/grader-models.d.ts","./node_modules/openai/resources/evals/runs/output-items.d.ts","./node_modules/openai/resources/evals/runs/runs.d.ts","./node_modules/openai/resources/evals/evals.d.ts","./node_modules/openai/resources/fine-tuning/methods.d.ts","./node_modules/openai/resources/fine-tuning/alpha/graders.d.ts","./node_modules/openai/resources/fine-tuning/alpha/alpha.d.ts","./node_modules/openai/resources/fine-tuning/checkpoints/permissions.d.ts","./node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.d.ts","./node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts","./node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts","./node_modules/openai/resources/fine-tuning/fine-tuning.d.ts","./node_modules/openai/resources/graders/graders.d.ts","./node_modules/openai/resources/uploads/parts.d.ts","./node_modules/openai/resources/uploads/uploads.d.ts","./node_modules/openai/resources/vector-stores/files.d.ts","./node_modules/openai/resources/vector-stores/file-batches.d.ts","./node_modules/openai/resources/vector-stores/vector-stores.d.ts","./node_modules/openai/index.d.ts","./node_modules/openai/resource.d.ts","./node_modules/openai/resources/chat/chat.d.ts","./node_modules/openai/resources/chat/completions/index.d.ts","./node_modules/openai/resources/chat/index.d.ts","./node_modules/openai/resources/index.d.ts","./node_modules/openai/index.d.mts","./app/api/narrative/route.ts","./lib/financialjuice.ts","./lib/newsfeed.ts","./app/api/news/route.ts","./app/api/rate-probabilities/route.ts","./app/api/sentiment/route.ts","./app/api/yields/route.ts","./lib/localcache.ts","./lib/scoring.ts","./app/layout.tsx","./node_modules/lucide-react/dist/lucide-react.d.ts","./node_modules/motion-utils/dist/index.d.ts","./node_modules/motion-dom/dist/index.d.ts","./node_modules/framer-motion/dist/index.d.ts","./node_modules/recharts/types/container/surface.d.ts","./node_modules/recharts/types/container/layer.d.ts","./node_modules/@types/d3-time/index.d.ts","./node_modules/@types/d3-scale/index.d.ts","./node_modules/victory-vendor/d3-scale.d.ts","./node_modules/recharts/types/cartesian/xaxis.d.ts","./node_modules/recharts/types/cartesian/yaxis.d.ts","./node_modules/recharts/types/util/types.d.ts","./node_modules/recharts/types/component/defaultlegendcontent.d.ts","./node_modules/recharts/types/util/payload/getuniqpayload.d.ts","./node_modules/recharts/types/component/legend.d.ts","./node_modules/recharts/types/component/defaulttooltipcontent.d.ts","./node_modules/recharts/types/component/tooltip.d.ts","./node_modules/recharts/types/component/responsivecontainer.d.ts","./node_modules/recharts/types/component/cell.d.ts","./node_modules/recharts/types/component/text.d.ts","./node_modules/recharts/types/component/label.d.ts","./node_modules/recharts/types/component/labellist.d.ts","./node_modules/recharts/types/component/customized.d.ts","./node_modules/recharts/types/shape/sector.d.ts","./node_modules/@types/d3-path/index.d.ts","./node_modules/@types/d3-shape/index.d.ts","./node_modules/victory-vendor/d3-shape.d.ts","./node_modules/recharts/types/shape/curve.d.ts","./node_modules/recharts/types/shape/rectangle.d.ts","./node_modules/recharts/types/shape/polygon.d.ts","./node_modules/recharts/types/shape/dot.d.ts","./node_modules/recharts/types/shape/cross.d.ts","./node_modules/recharts/types/shape/symbols.d.ts","./node_modules/recharts/types/polar/polargrid.d.ts","./node_modules/recharts/types/polar/polarradiusaxis.d.ts","./node_modules/recharts/types/polar/polarangleaxis.d.ts","./node_modules/recharts/types/polar/pie.d.ts","./node_modules/recharts/types/polar/radar.d.ts","./node_modules/recharts/types/polar/radialbar.d.ts","./node_modules/recharts/types/cartesian/brush.d.ts","./node_modules/recharts/types/util/ifoverflowmatches.d.ts","./node_modules/recharts/types/cartesian/referenceline.d.ts","./node_modules/recharts/types/cartesian/referencedot.d.ts","./node_modules/recharts/types/cartesian/referencearea.d.ts","./node_modules/recharts/types/cartesian/cartesianaxis.d.ts","./node_modules/recharts/types/cartesian/cartesiangrid.d.ts","./node_modules/recharts/types/cartesian/line.d.ts","./node_modules/recharts/types/cartesian/area.d.ts","./node_modules/recharts/types/util/barutils.d.ts","./node_modules/recharts/types/cartesian/bar.d.ts","./node_modules/recharts/types/cartesian/zaxis.d.ts","./node_modules/recharts/types/cartesian/errorbar.d.ts","./node_modules/recharts/types/cartesian/scatter.d.ts","./node_modules/recharts/types/util/getlegendprops.d.ts","./node_modules/recharts/types/util/chartutils.d.ts","./node_modules/recharts/types/chart/accessibilitymanager.d.ts","./node_modules/recharts/types/chart/types.d.ts","./node_modules/recharts/types/chart/generatecategoricalchart.d.ts","./node_modules/recharts/types/chart/linechart.d.ts","./node_modules/recharts/types/chart/barchart.d.ts","./node_modules/recharts/types/chart/piechart.d.ts","./node_modules/recharts/types/chart/treemap.d.ts","./node_modules/recharts/types/chart/sankey.d.ts","./node_modules/recharts/types/chart/radarchart.d.ts","./node_modules/recharts/types/chart/scatterchart.d.ts","./node_modules/recharts/types/chart/areachart.d.ts","./node_modules/recharts/types/chart/radialbarchart.d.ts","./node_modules/recharts/types/chart/composedchart.d.ts","./node_modules/recharts/types/chart/sunburstchart.d.ts","./node_modules/recharts/types/shape/trapezoid.d.ts","./node_modules/recharts/types/numberaxis/funnel.d.ts","./node_modules/recharts/types/chart/funnelchart.d.ts","./node_modules/recharts/types/util/global.d.ts","./node_modules/recharts/types/index.d.ts","./components/narrativebutton.tsx","./components/currencycard.tsx","./components/driversbar.tsx","./components/calendartab.tsx","./components/sentimentpairstab.tsx","./components/yieldstab.tsx","./components/newstab.tsx","./components/cottab.tsx","./components/tvchart.tsx","./components/reporttab.tsx","./app/page.tsx","./.next/types/app/layout.ts","./.next/types/app/page.ts","./.next/types/app/api/calendar/route.ts","./.next/types/app/api/cot/route.ts","./.next/types/app/api/drivers/route.ts","./.next/types/app/api/expectations/route.ts","./.next/types/app/api/fx/route.ts","./.next/types/app/api/macro/route.ts","./.next/types/app/api/news/route.ts","./.next/types/app/api/rate-probabilities/route.ts","./.next/types/app/api/sentiment/route.ts","./.next/types/app/api/yields/route.ts","./node_modules/@types/d3-array/index.d.ts","./node_modules/@types/d3-color/index.d.ts","./node_modules/@types/d3-ease/index.d.ts","./node_modules/@types/d3-interpolate/index.d.ts","./node_modules/@types/d3-timer/index.d.ts","./node_modules/@types/json5/index.d.ts","./node_modules/form-data/index.d.ts","./node_modules/@types/node-fetch/externals.d.ts","./node_modules/@types/node-fetch/index.d.ts","./node_modules/@types/papaparse/index.d.ts"],"fileIdsList":[[99,145,403,441],[99,145,403,443],[99,145,403,446],[99,145,403,447],[99,145,403,448],[99,145,403,452],[99,145,403,533],[99,145,403,534],[99,145,403,535],[99,145,403,536],[99,145,358,539],[99,145,358,624],[99,145,403,434,435,436,438,439,440],[99,145,403,436,442],[99,145,403,445],[99,145,157,166,403],[99,145,403],[99,145,403,434,435,436,439,440,442,450,451],[99,145,403,529],[99,145,403,532],[99,145,403,438],[99,145,406],[87,99,145,436,438,441,442,444,533,537,540,615,616,617,618,619,620,621,623],[87,99,145,436,441,442,540],[87,99,145,436,442,444,540,613],[87,99,145,436,438,442,537,538,540,543,613,614],[87,99,145,197,198,199,436,540],[87,99,145,436,540],[87,99,145,436,533,540],[87,99,145,436,441,442,444,449,540,622],[87,99,145,436,442],[87,99,145],[87,99,145,540],[99,145],[99,145,436],[99,145,532],[99,145,436,439,441],[99,145,436,531],[99,145,436,437,438],[99,145,436,442],[99,145,436,441],[99,145,406,407],[99,145,638],[99,145,546],[99,145,564],[99,145,159,186,193,643,644],[99,142,145],[99,144,145],[145],[99,145,150,178],[99,145,146,151,156,164,175,186],[99,145,146,147,156,164],[94,95,96,99,145],[99,145,148,187],[99,145,149,150,157,165],[99,145,150,175,183],[99,145,151,153,156,164],[99,144,145,152],[99,145,153,154],[99,145,155,156],[99,144,145,156],[99,145,156,157,158,175,186],[99,145,156,157,158,171,175,178],[99,145,153,156,159,164,175,186],[99,145,156,157,159,160,164,175,183,186],[99,145,159,161,175,183,186],[97,98,99,100,101,102,103,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192],[99,145,156,162],[99,145,163,186,191],[99,145,153,156,164,175],[99,145,165],[99,145,166],[99,144,145,167],[99,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192],[99,145,169],[99,145,170],[99,145,156,171,172],[99,145,171,173,187,189],[99,145,156,175,176,178],[99,145,177,178],[99,145,175,176],[99,145,178],[99,145,179],[99,142,145,175,180],[99,145,156,181,182],[99,145,181,182],[99,145,150,164,175,183],[99,145,184],[99,145,164,185],[99,145,159,170,186],[99,145,150,187],[99,145,175,188],[99,145,163,189],[99,145,190],[99,140,145],[99,140,145,156,158,167,175,178,186,189,191],[99,145,175,192],[99,145,175,193],[87,99,145,197,198,199],[87,99,145,197,198],[87,91,99,145,196,359,402],[87,91,99,145,195,359,402],[84,85,86,99,145],[99,145,159,175,193],[87,99,145,285,541,542],[99,145,541],[92,99,145],[99,145,363],[99,145,365,366,367],[99,145,369],[99,145,202,212,218,220,359],[99,145,202,209,211,214,232],[99,145,212],[99,145,212,337],[99,145,266,284,299,405],[99,145,307],[99,145,202,212,219,252,262,334,335,405],[99,145,219,405],[99,145,212,262,263,264,405],[99,145,212,219,252,405],[99,145,405],[99,145,202,219,220,405],[99,145,292],[99,144,145,193,291],[87,99,145,285,286,287,304,305],[87,99,145,285],[99,145,275],[99,145,274,276,379],[87,99,145,285,286,302],[99,145,281,305,391],[99,145,389,390],[99,145,226,388],[99,145,278],[99,144,145,193,226,274,275,276,277],[87,99,145,302,304,305],[99,145,302,304],[99,145,302,303,305],[99,145,170,193],[99,145,273],[99,144,145,193,211,213,269,270,271,272],[87,99,145,203,382],[87,99,145,186,193],[87,99,145,219,250],[87,99,145,219],[99,145,248,253],[87,99,145,249,362],[87,91,99,145,159,193,195,196,359,400,401],[99,145,359],[99,145,201],[99,145,352,353,354,355,356,357],[99,145,354],[87,99,145,249,285,362],[87,99,145,285,360,362],[87,99,145,285,362],[99,145,159,193,213,362],[99,145,159,193,210,211,222,240,273,278,279,301,302],[99,145,270,273,278,286,288,289,290,292,293,294,295,296,297,298,405],[99,145,271],[87,99,145,170,193,211,212,240,242,244,269,301,305,359,405],[99,145,159,193,213,214,226,227,274],[99,145,159,193,212,214],[99,145,159,175,193,210,213,214],[99,145,159,170,186,193,210,211,212,213,214,219,222,223,233,234,236,239,240,242,243,244,268,269,302,310,312,315,317,320,322,323,324,325],[99,145,202,203,204,210,211,359,362,405],[99,145,159,175,186,193,207,336,338,339,405],[99,145,170,186,193,207,210,213,230,234,236,237,238,242,269,315,326,328,334,348,349],[99,145,212,216,269],[99,145,210,212],[99,145,223,316],[99,145,318,319],[99,145,318],[99,145,316],[99,145,318,321],[99,145,206,207],[99,145,206,245],[99,145,206],[99,145,208,223,314],[99,145,313],[99,145,207,208],[99,145,208,311],[99,145,207],[99,145,301],[99,145,159,193,210,222,241,260,266,280,283,300,302],[99,145,254,255,256,257,258,259,281,282,305,360],[99,145,309],[99,145,159,193,210,222,241,246,306,308,310,359,362],[99,145,159,186,193,203,210,212,268],[99,145,265],[99,145,159,193,342,347],[99,145,233,268,362],[99,145,330,334,348,351],[99,145,159,216,334,342,343,351],[99,145,202,212,233,243,345],[99,145,159,193,212,219,243,329,330,340,341,344,346],[99,145,194,240,241,359,362],[99,145,159,170,186,193,208,210,211,213,216,221,222,230,233,234,236,237,238,239,242,244,268,269,312,326,327,362],[99,145,159,193,210,212,216,328,350],[99,145,159,193,211,213],[87,99,145,159,170,193,201,203,210,211,214,222,239,240,242,244,309,359,362],[99,145,159,170,186,193,205,208,209,213],[99,145,206,267],[99,145,159,193,206,211,222],[99,145,159,193,212,223],[99,145,159,193],[99,145,226],[99,145,225],[99,145,227],[99,145,212,224,226,230],[99,145,212,224,226],[99,145,159,193,205,212,213,219,227,228,229],[87,99,145,302,303,304],[99,145,261],[87,99,145,203],[87,99,145,236],[87,99,145,194,239,244,359,362],[99,145,203,382,383],[87,99,145,253],[87,99,145,170,186,193,201,247,249,251,252,362],[99,145,213,219,236],[99,145,235],[87,99,145,157,159,170,193,201,253,262,359,360,361],[83,87,88,89,90,99,145,195,196,359,402],[99,145,150],[99,145,331,332,333],[99,145,331],[99,145,371],[99,145,373],[99,145,375],[99,145,377],[99,145,380],[99,145,384],[91,93,99,145,359,364,368,370,372,374,376,378,381,385,387,393,394,396,403,404,405],[99,145,386],[99,145,392],[99,145,249],[99,145,395],[99,144,145,227,228,229,230,397,398,399,402],[99,145,193],[87,91,99,145,159,161,170,193,195,196,197,199,201,214,351,358,362,402],[99,145,453,454,459],[99,145,455,456,458,460],[99,145,459],[99,145,456,458,459,460,461,463,465,466,467,468,469,470,471,475,490,501,504,508,516,517,519,522,525,528],[99,145,459,466,479,483,492,494,495,496,523],[99,145,459,460,476,477,478,479,481,482],[99,145,483,484,491,494,523],[99,145,459,460,465,484,496,523],[99,145,460,483,484,485,491,494,523],[99,145,456],[99,145,462,483,490,496],[99,145,490],[99,145,459,479,486,488,490,523],[99,145,483,490,491],[99,145,492,493,495],[99,145,523],[99,145,472,473,474,524],[99,145,459,460,524],[99,145,455,459,473,475,524],[99,145,459,473,475,524],[99,145,459,461,462,463,524],[99,145,459,461,462,476,477,478,480,481,524],[99,145,481,482,497,500,524],[99,145,496,524],[99,145,459,483,484,485,491,492,494,495,524],[99,145,462,498,499,500,524],[99,145,459,524],[99,145,459,461,462,482,524],[99,145,455,459,461,462,476,477,478,480,481,482,524],[99,145,459,461,462,477,524],[99,145,455,459,462,476,478,480,481,482,524],[99,145,462,465,524],[99,145,465],[99,145,455,459,461,462,464,465,466,524],[99,145,464,465],[99,145,459,461,465,524],[99,145,525,526],[99,145,455,459,465,466,524],[99,145,459,461,503,524],[99,145,459,461,502,524],[99,145,459,461,462,490,505,507,524],[99,145,459,461,507,524],[99,145,459,461,462,490,506,524],[99,145,459,460,461,524],[99,145,510,524],[99,145,459,505,524],[99,145,512,524],[99,145,459,461,524],[99,145,509,511,513,515,524],[99,145,459,461,509,514,524],[99,145,505,524],[99,145,490,524],[99,145,462,463,466,467,468,469,470,471,475,490,501,504,508,516,517,519,522,527],[99,145,459,461,490,524],[99,145,455,459,461,462,486,487,489,490,524],[99,145,459,468,518,524],[99,145,459,461,520,522,524],[99,145,459,461,522,524],[99,145,459,461,462,520,521,524],[99,145,460],[99,145,457,459,460],[99,145,424],[99,145,422,424],[99,145,413,421,422,423,425,427],[99,145,411],[99,145,414,419,424,427],[99,145,410,427],[99,145,414,415,418,419,420,427],[99,145,414,415,416,418,419,427],[99,145,411,412,413,414,415,419,420,421,423,424,425,427],[99,145,427],[99,145,409,411,412,413,414,415,416,418,419,420,421,422,423,424,425,426],[99,145,409,427],[99,145,414,416,417,419,420,427],[99,145,418,427],[99,145,419,420,424,427],[99,145,412,422],[87,99,145,549,550,551,567,570],[87,99,145,549,550,551,560,568,588],[87,99,145,548,551],[87,99,145,551],[87,99,145,549,550,551],[87,99,145,549,550,551,586,589,592],[87,99,145,549,550,551,560,567,570],[87,99,145,549,550,551,560,568,580],[87,99,145,549,550,551,560,570,580],[87,99,145,549,550,551,560,580],[87,99,145,549,550,551,555,561,567,572,590,591],[99,145,551],[87,99,145,551,595,596,597],[87,99,145,551,594,595,596],[87,99,145,551,568],[87,99,145,551,594],[87,99,145,551,560],[87,99,145,551,552,553],[87,99,145,551,553,555],[99,145,544,545,549,550,551,552,554,555,556,557,558,559,560,561,562,563,567,568,569,570,571,572,573,574,575,576,577,578,579,581,582,583,584,585,586,587,589,590,591,592,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612],[87,99,145,551,609],[87,99,145,551,563],[87,99,145,551,570,574,575],[87,99,145,551,561,563],[87,99,145,551,566],[87,99,145,551,589],[87,99,145,551,566,593],[87,99,145,554,594],[87,99,145,548,549,550],[99,145,429,430],[99,145,428,431],[99,112,116,145,186],[99,112,145,175,186],[99,107,145],[99,109,112,145,183,186],[99,145,164,183],[99,107,145,193],[99,109,112,145,164,186],[99,104,105,108,111,145,156,175,186],[99,112,119,145],[99,104,110,145],[99,112,133,134,145],[99,108,112,145,178,186,193],[99,133,145,193],[99,106,107,145,193],[99,112,145],[99,106,107,108,109,110,111,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,136,137,138,139,145],[99,112,127,145],[99,112,119,120,145],[99,110,112,120,121,145],[99,111,145],[99,104,107,112,145],[99,112,116,120,121,145],[99,116,145],[99,110,112,115,145,186],[99,104,109,112,119,145],[99,145,175],[99,107,112,133,145,191,193],[99,145,547],[99,145,565],[99,145,432]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0990a7576222f248f0a3b888adcb7389f957928ce2afb1cd5128169086ff4d29","impliedFormat":1},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"f5977813ad5baf0c16eb027f2474cd8c8adea5d94fb595141ce3478efd8ac7c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc69795d9954ee4ad57545b10c7bf1a7260d990231b1685c147ea71a6faa265c","impliedFormat":1},{"version":"8bc6c94ff4f2af1f4023b7bb2379b08d3d7dd80c698c9f0b07431ea16101f05f","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"57194e1f007f3f2cbef26fa299d4c6b21f4623a2eddc63dfeef79e38e187a36e","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"2de7636e6fbb9e54a61a38bcb7505b94ec5be61197fe9e840cff629ca920c4bc","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"8caa5c86be1b793cd5f599e27ecb34252c41e011980f7d61ae4989a149ff6ccc","impliedFormat":1},{"version":"f9fd93190acb1ffe0bc0fb395df979452f8d625071e9ffc8636e4dfb86ab2508","impliedFormat":1},{"version":"5f41fd8732a89e940c58ce22206e3df85745feb8983e2b4c6257fb8cbb118493","impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"1cfa8647d7d71cb03847d616bd79320abfc01ddea082a49569fda71ac5ece66b","impliedFormat":1},{"version":"bb7a61dd55dc4b9422d13da3a6bb9cc5e89be888ef23bbcf6558aa9726b89a1c","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"cfe4ef4710c3786b6e23dae7c086c70b4f4835a2e4d77b75d39f9046106e83d3","impliedFormat":1},{"version":"cbea99888785d49bb630dcbb1613c73727f2b5a2cf02e1abcaab7bcf8d6bf3c5","impliedFormat":1},{"version":"98817124fd6c4f60e0b935978c207309459fb71ab112cf514f26f333bf30830e","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"2dad084c67e649f0f354739ec7df7c7df0779a28a4f55c97c6b6883ae850d1ce","impliedFormat":1},{"version":"fa5bbc7ab4130dd8cdc55ea294ec39f76f2bc507a0f75f4f873e38631a836ca7","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"cf86de1054b843e484a3c9300d62fbc8c97e77f168bbffb131d560ca0474d4a8","impliedFormat":1},{"version":"196c960b12253fde69b204aa4fbf69470b26daf7a430855d7f94107a16495ab0","impliedFormat":1},{"version":"fb760b3dded1fadb56c3dde1992b6068bb64d65c4d60d65dc93659f5f44ccddf","impliedFormat":1},{"version":"bf24f6d35f7318e246010ffe9924395893c4e96d34324cde77151a73f078b9ad","impliedFormat":1},{"version":"596ccf4070268c4f5a8c459d762d8a934fa9b9317c7bf7a953e921bc9d78ce3c","impliedFormat":1},{"version":"10595c7ff5094dd5b6a959ccb1c00e6a06441b4e10a87bc09c15f23755d34439","impliedFormat":1},{"version":"9620c1ff645afb4a9ab4044c85c26676f0a93e8c0e4b593aea03a89ccb47b6d0","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"a9af0e608929aaf9ce96bd7a7b99c9360636c31d73670e4af09a09950df97841","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"08ed0b3f0166787f84a6606f80aa3b1388c7518d78912571b203817406e471da","impliedFormat":1},{"version":"47e5af2a841356a961f815e7c55d72554db0c11b4cba4d0caab91f8717846a94","impliedFormat":1},{"version":"9a1a0dc84fecc111e83281743f003e1ae9048e0f83c2ae2028d17bc58fd93cc7","impliedFormat":1},{"version":"f5f541902bf7ae0512a177295de9b6bcd6809ea38307a2c0a18bfca72212f368","impliedFormat":1},{"version":"e8da637cbd6ed1cf6c36e9424f6bcee4515ca2c677534d4006cbd9a05f930f0c","impliedFormat":1},{"version":"ca1b882a105a1972f82cc58e3be491e7d750a1eb074ffd13b198269f57ed9e1b","impliedFormat":1},{"version":"fc3e1c87b39e5ba1142f27ec089d1966da168c04a859a4f6aab64dceae162c2b","impliedFormat":1},{"version":"3867ca0e9757cc41e04248574f4f07b8f9e3c0c2a796a5eb091c65bfd2fc8bdb","impliedFormat":1},{"version":"61888522cec948102eba94d831c873200aa97d00d8989fdfd2a3e0ee75ec65a2","impliedFormat":1},{"version":"4e10622f89fea7b05dd9b52fb65e1e2b5cbd96d4cca3d9e1a60bb7f8a9cb86a1","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"59bf32919de37809e101acffc120596a9e45fdbab1a99de5087f31fdc36e2f11","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"3df3abb3e7c1a74ab419f95500a998b55dd9bc985e295de96ff315dd94c7446f","impliedFormat":1},{"version":"c40c848daad198266370c1c72a7a8c3d18d2f50727c7859fcfefd3ff69a7f288","impliedFormat":1},{"version":"ac60bbee0d4235643cc52b57768b22de8c257c12bd8c2039860540cab1fa1d82","impliedFormat":1},{"version":"973b59a17aaa817eb205baf6c132b83475a5c0a44e8294a472af7793b1817e89","impliedFormat":1},{"version":"ada39cbb2748ab2873b7835c90c8d4620723aedf323550e8489f08220e477c7f","impliedFormat":1},{"version":"6e5f5cee603d67ee1ba6120815497909b73399842254fc1e77a0d5cdc51d8c9c","impliedFormat":1},{"version":"8dba67056cbb27628e9b9a1cba8e57036d359dceded0725c72a3abe4b6c79cd4","impliedFormat":1},{"version":"70f3814c457f54a7efe2d9ce9d2686de9250bb42eb7f4c539bd2280a42e52d33","impliedFormat":1},{"version":"5cbd32af037805215112472e35773bad9d4e03f0e72b1129a0d0c12d9cd63cc7","impliedFormat":1},{"version":"ef61792acbfa8c27c9bd113f02731e66229f7d3a169e3c1993b508134f1a58e0","impliedFormat":1},{"version":"afcb759e8e3ad6549d5798820697002bc07bdd039899fad0bf522e7e8a9f5866","impliedFormat":1},{"version":"f6404e7837b96da3ea4d38c4f1a3812c96c9dcdf264e93d5bdb199f983a3ef4b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"566e5fb812082f8cf929c6727d40924843246cf19ee4e8b9437a6315c4792b03","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"903e299a28282fa7b714586e28409ed73c3b63f5365519776bf78e8cf173db36","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"dd3900b24a6a8745efeb7ad27629c0f8a626470ac229c1d73f1fe29d67e44dca","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"ec29be0737d39268696edcec4f5e97ce26f449fa9b7afc2f0f99a86def34a418","impliedFormat":1},{"version":"68a06fb972b2c7e671bf090dc5a5328d22ba07d771376c3d9acd9e7ed786a9db","impliedFormat":1},{"version":"ec6cba1c02c675e4dd173251b156792e8d3b0c816af6d6ad93f1a55d674591aa","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"d729408dfde75b451530bcae944cf89ee8277e2a9df04d1f62f2abfd8b03c1e1","impliedFormat":1},{"version":"e15d3c84d5077bb4a3adee4c791022967b764dc41cb8fa3cfa44d4379b2c95f5","impliedFormat":1},{"version":"78244a2a8ab1080e0dd8fc3633c204c9a4be61611d19912f4b157f7ef7367049","impliedFormat":1},{"version":"e1fc1a1045db5aa09366be2b330e4ce391550041fc3e925f60998ca0b647aa97","impliedFormat":1},{"version":"73636e5e138db738b0e1e00c17bcd688c45eead3798d0d585e0bd9ff98262ebe","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"31fb49ef3aa3d76f0beb644984e01eab0ea222372ea9b49bb6533be5722d756c","impliedFormat":1},{"version":"33cd131e1461157e3e06b06916b5176e7a8ec3fce15a5cfe145e56de744e07d2","impliedFormat":1},{"version":"889ef863f90f4917221703781d9723278db4122d75596b01c429f7c363562b86","impliedFormat":1},{"version":"3556cfbab7b43da96d15a442ddbb970e1f2fc97876d055b6555d86d7ac57dae5","impliedFormat":1},{"version":"437751e0352c6e924ddf30e90849f1d9eb00ca78c94d58d6a37202ec84eb8393","impliedFormat":1},{"version":"48e8af7fdb2677a44522fd185d8c87deff4d36ee701ea003c6c780b1407a1397","impliedFormat":1},{"version":"d11308de5a36c7015bb73adb5ad1c1bdaac2baede4cc831a05cf85efa3cc7f2f","impliedFormat":1},{"version":"8c9f19c480c747b6d8067c53fcc3cef641619029afb0a903672daed3f5acaed2","impliedFormat":1},{"version":"f9812cfc220ecf7557183379531fa409acd249b9e5b9a145d0d52b76c20862de","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b068371563d0396a065ed64b049cffeb4eed89ad433ae7730fc31fb1e00ebf3","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"680793958f6a70a44c8d9ae7d46b7a385361c69ac29dcab3ed761edce1c14ab8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"913ddbba170240070bd5921b8f33ea780021bdf42fbdfcd4fcb2691b1884ddde","impliedFormat":1},{"version":"74c105214ddd747037d2a75da6588ec8aa1882f914e1f8a312c528f86feca2b9","impliedFormat":1},{"version":"5fe23bd829e6be57d41929ac374ee9551ccc3c44cee893167b7b5b77be708014","impliedFormat":1},{"version":"4d85f80132e24d9a5b5c5e0734e4ecd6878d8c657cc990ecc70845ef384ca96f","impliedFormat":1},{"version":"438c7513b1df91dcef49b13cd7a1c4720f91a36e88c1df731661608b7c055f10","impliedFormat":1},{"version":"cf185cc4a9a6d397f416dd28cca95c227b29f0f27b160060a95c0e5e36cda865","impliedFormat":1},{"version":"0086f3e4ad898fd7ca56bb223098acfacf3fa065595182aaf0f6c4a6a95e6fbd","impliedFormat":1},{"version":"efaa078e392f9abda3ee8ade3f3762ab77f9c50b184e6883063a911742a4c96a","impliedFormat":1},{"version":"54a8bb487e1dc04591a280e7a673cdfb272c83f61e28d8a64cf1ac2e63c35c51","impliedFormat":1},{"version":"021a9498000497497fd693dd315325484c58a71b5929e2bbb91f419b04b24cea","impliedFormat":1},{"version":"9385cdc09850950bc9b59cca445a3ceb6fcca32b54e7b626e746912e489e535e","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"84124384abae2f6f66b7fbfc03862d0c2c0b71b826f7dbf42c8085d31f1d3f95","impliedFormat":1},{"version":"63a8e96f65a22604eae82737e409d1536e69a467bb738bec505f4f97cce9d878","impliedFormat":1},{"version":"3fd78152a7031315478f159c6a5872c712ece6f01212c78ea82aef21cb0726e2","impliedFormat":1},{"version":"3a6ed8e1d630cfa1f7edf0dc46a6e20ca6c714dbe754409699008571dfe473a6","impliedFormat":1},{"version":"512fc15cca3a35b8dbbf6e23fe9d07e6f87ad03c895acffd3087ce09f352aad0","impliedFormat":1},{"version":"9a0946d15a005832e432ea0cd4da71b57797efb25b755cc07f32274296d62355","impliedFormat":1},{"version":"a52ff6c0a149e9f370372fc3c715d7f2beee1f3bab7980e271a7ab7d313ec677","impliedFormat":1},{"version":"fd933f824347f9edd919618a76cdb6a0c0085c538115d9a287fa0c7f59957ab3","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"6a1aa3e55bdc50503956c5cd09ae4cd72e3072692d742816f65c66ca14f4dfdd","impliedFormat":1},{"version":"ab75cfd9c4f93ffd601f7ca1753d6a9d953bbedfbd7a5b3f0436ac8a1de60dfa","impliedFormat":1},{"version":"59c68235df3905989afa0399381c1198313aaaf1ed387f57937eb616625dff15","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"1364f64d2fb03bbb514edc42224abd576c064f89be6a990136774ecdd881a1da","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"950fb67a59be4c2dbe69a5786292e60a5cb0e8612e0e223537784c731af55db1","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"07ca44e8d8288e69afdec7a31fa408ce6ab90d4f3d620006701d5544646da6aa","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"4e4475fba4ed93a72f167b061cd94a2e171b82695c56de9899275e880e06ba41","impliedFormat":1},{"version":"97c5f5d580ab2e4decd0a3135204050f9b97cd7908c5a8fbc041eadede79b2fa","impliedFormat":1},{"version":"c99a3a5f2215d5b9d735aa04cec6e61ed079d8c0263248e298ffe4604d4d0624","impliedFormat":1},{"version":"49b2375c586882c3ac7f57eba86680ff9742a8d8cb2fe25fe54d1b9673690d41","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b98ce74c2bc49a9b79408f049c49909190c747b0462e78f91c09618da86bae53","impliedFormat":1},{"version":"3ecfccf916fea7c6c34394413b55eb70e817a73e39b4417d6573e523784e3f8e","impliedFormat":1},{"version":"c05bc82af01e673afc99bdffd4ebafde22ab027d63e45be9e1f1db3bc39e2fc0","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"f416c9c3eee9d47ff49132c34f96b9180e50485d435d5748f0e8b72521d28d2e","impliedFormat":1},{"version":"05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","impliedFormat":1},{"version":"14e5cdec6f8ae82dfd0694e64903a0a54abdfe37e1d966de3d4128362acbf35f","impliedFormat":1},{"version":"bbc183d2d69f4b59fd4dd8799ffdf4eb91173d1c4ad71cce91a3811c021bf80c","impliedFormat":1},{"version":"7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","impliedFormat":1},{"version":"8dbc4134a4b3623fc476be5f36de35c40f2768e2e3d9ed437e0d5f1c4cd850f6","impliedFormat":1},{"version":"4e06330a84dec7287f7ebdd64978f41a9f70a668d3b5edc69d5d4a50b9b376bb","impliedFormat":1},{"version":"65bfa72967fbe9fc33353e1ac03f0480aa2e2ea346d61ff3ea997dfd850f641a","impliedFormat":1},{"version":"8f88c6be9803fe5aaa80b00b27f230c824d4b8a33856b865bea5793cb52bb797","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"872caaa31423f4345983d643e4649fb30f548e9883a334d6d1c5fff68ede22d4","impliedFormat":1},{"version":"94404c4a878fe291e7578a2a80264c6f18e9f1933fbb57e48f0eb368672e389c","impliedFormat":1},{"version":"5c1b7f03aa88be854bc15810bfd5bd5a1943c5a7620e1c53eddd2a013996343e","impliedFormat":1},{"version":"09dfc64fcd6a2785867f2368419859a6cc5a8d4e73cbe2538f205b1642eb0f51","impliedFormat":1},{"version":"bcf6f0a323653e72199105a9316d91463ad4744c546d1271310818b8cef7c608","impliedFormat":1},{"version":"01aa917531e116485beca44a14970834687b857757159769c16b228eb1e49c5f","impliedFormat":1},{"version":"351475f9c874c62f9b45b1f0dc7e2704e80dfd5f1af83a3a9f841f9dfe5b2912","impliedFormat":1},{"version":"ac457ad39e531b7649e7b40ee5847606eac64e236efd76c5d12db95bf4eacd17","impliedFormat":1},{"version":"187a6fdbdecb972510b7555f3caacb44b58415da8d5825d03a583c4b73fde4cf","impliedFormat":1},{"version":"d4c3250105a612202289b3a266bb7e323db144f6b9414f9dea85c531c098b811","impliedFormat":1},{"version":"95b444b8c311f2084f0fb51c616163f950fb2e35f4eaa07878f313a2d36c98a4","impliedFormat":1},{"version":"741067675daa6d4334a2dc80a4452ca3850e89d5852e330db7cb2b5f867173b1","impliedFormat":1},{"version":"f8acecec1114f11690956e007d920044799aefeb3cece9e7f4b1f8a1d542b2c9","impliedFormat":1},{"version":"131b1475d2045f20fb9f43b7aa6b7cb51f25250b5e4c6a1d4aa3cf4dd1a68793","impliedFormat":1},{"version":"3a17f09634c50cce884721f54fd9e7b98e03ac505889c560876291fcf8a09e90","impliedFormat":1},{"version":"32531dfbb0cdc4525296648f53b2b5c39b64282791e2a8c765712e49e6461046","impliedFormat":1},{"version":"0ce1b2237c1c3df49748d61568160d780d7b26693bd9feb3acb0744a152cd86d","impliedFormat":1},{"version":"e489985388e2c71d3542612685b4a7db326922b57ac880f299da7026a4e8a117","impliedFormat":1},{"version":"e1437c5f191edb7a494f7bbbc033b97d72d42e054d521402ee194ac5b6b7bf49","impliedFormat":1},{"version":"04d3aad777b6af5bd000bfc409907a159fe77e190b9d368da4ba649cdc28d39e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fd1b9d883b9446f1e1da1e1033a6a98995c25fbf3c10818a78960e2f2917d10c","impliedFormat":1},{"version":"19252079538942a69be1645e153f7dbbc1ef56b4f983c633bf31fe26aeac32cd","impliedFormat":1},{"version":"bc11f3ac00ac060462597add171220aed628c393f2782ac75dd29ff1e0db871c","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"3b0b1d352b8d2e47f1c4df4fb0678702aee071155b12ef0185fce9eb4fa4af1e","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"a344403e7a7384e0e7093942533d309194ad0a53eca2a3100c0b0ab4d3932773","impliedFormat":1},{"version":"b7fff2d004c5879cae335db8f954eb1d61242d9f2d28515e67902032723caeab","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"bb18bf4a61a17b4a6199eb3938ecfa4a59eb7c40843ad4a82b975ab6f7e3d925","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"e9b6fc05f536dfddcdc65dbcf04e09391b1c968ab967382e48924f5cb90d88e1","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"2b664c3cc544d0e35276e1fb2d4989f7d4b4027ffc64da34ec83a6ccf2e5c528","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"3cd8f0464e0939b47bfccbb9bb474a6d87d57210e304029cd8eb59c63a81935d","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"3026abd48e5e312f2328629ede6e0f770d21c3cd32cee705c450e589d015ee09","impliedFormat":1},{"version":"8b140b398a6afbd17cc97c38aea5274b2f7f39b1ae5b62952cfe65bf493e3e75","impliedFormat":1},{"version":"7663d2c19ce5ef8288c790edba3d45af54e58c84f1b37b1249f6d49d962f3d91","impliedFormat":1},{"version":"30112425b2cf042fca1c79c19e35f88f44bfb2e97454527528cd639dd1a460ca","impliedFormat":1},{"version":"00bd6ebe607246b45296aa2b805bd6a58c859acecda154bfa91f5334d7c175c6","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"504f37ba38bfea8394ec4f397c9a2ade7c78055e41ef5a600073b515c4fd0fc9","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"87ac2fb61e629e777f4d161dff534c2023ee15afd9cb3b1589b9b1f014e75c58","impliedFormat":1},{"version":"13c8b4348db91e2f7d694adc17e7438e6776bc506d5c8f5de9ad9989707fa3fe","impliedFormat":1},{"version":"3c1051617aa50b38e9efaabce25e10a5dd9b1f42e372ef0e8a674076a68742ed","impliedFormat":1},{"version":"07a3e20cdcb0f1182f452c0410606711fbea922ca76929a41aacb01104bc0d27","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"4cd4b6b1279e9d744a3825cbd7757bbefe7f0708f3f1069179ad535f19e8ed2c","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"c0eeaaa67c85c3bb6c52b629ebbfd3b2292dc67e8c0ffda2fc6cd2f78dc471e6","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"b95a6f019095dd1d48fd04965b50dfd63e5743a6e75478343c46d2582a5132bf","impliedFormat":99},{"version":"c2008605e78208cfa9cd70bd29856b72dda7ad89df5dc895920f8e10bcb9cd0a","impliedFormat":99},{"version":"b97cb5616d2ab82a98ec9ada7b9e9cabb1f5da880ec50ea2b8dc5baa4cbf3c16","impliedFormat":99},{"version":"d23df9ff06ae8bf1dcb7cc933e97ae7da418ac77749fecee758bb43a8d69f840","affectsGlobalScope":true,"impliedFormat":1},{"version":"040c71dde2c406f869ad2f41e8d4ce579cc60c8dbe5aa0dd8962ac943b846572","affectsGlobalScope":true,"impliedFormat":1},{"version":"3586f5ea3cc27083a17bd5c9059ede9421d587286d5a47f4341a4c2d00e4fa91","impliedFormat":1},{"version":"a6df929821e62f4719551f7955b9f42c0cd53c1370aec2dd322e24196a7dfe33","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"8964d295a9047c3a222af813b7d37deb57b835fd0942d89222e7def0aed136cc",{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"52dcc257df5119fb66d864625112ce5033ac51a4c2afe376a0b299d2f7f76e4a","impliedFormat":1},{"version":"e5bab5f871ef708d52d47b3e5d0aa72a08ee7a152f33931d9a60809711a2a9a3","impliedFormat":1},{"version":"e16dc2a81595736024a206c7d5c8a39bfe2e6039208ef29981d0d95434ba8fcf","impliedFormat":1},{"version":"cc4a4903fb698ca1d961d4c10dce658aa3a479faf40509d526f122b044eaf6a4","impliedFormat":1},{"version":"19ee8416e6473ed6c7adb868fa796b5653cf0fa2a337658e677eaa0d134388c3","impliedFormat":1},{"version":"1328ab4e442614b28cdb3d4b414cf68325c0da0dca07287a338d0654b7a00261","impliedFormat":1},{"version":"a039dc21f045919f3cbee2ec13812cc6cc3eebc99dae4be00973230f468d19a6","impliedFormat":1},{"version":"3fbe57af01460e49dcd29df55d6931e1672bc6f1be0fb073d11410bc16f9037d","impliedFormat":1},{"version":"f760be449e8562ec5c09bb5187e8e1eabf3c113c0c58cddda53ef8c69f3e2131","impliedFormat":1},{"version":"44325ed13294fce6ab825b82947bbeed2611db7dad9d9135260192f375e5a189","impliedFormat":1},{"version":"e392e8fb5b514eafc585601c1d781485aa6dd6a320e75daf1064a4c6918a1b45","impliedFormat":1},{"version":"46e4a36e8ddbdfb4e7330e11c81c970dc8b218611df9183d39c41c5f8c653b55","impliedFormat":1},{"version":"370bde134aa8c2abc926d0e99d3a4d5d5dba65c6ee65459137e4f02670cbf841","impliedFormat":1},{"version":"6332f565867cf4a740a70e30f31cefba37ef7cebcf74f22eab8d744fde6d193e","impliedFormat":1},{"version":"2977b7884aedc895a1d0c9c210c7cf3272c29d6959a08a6fa3ff71e0aff08175","impliedFormat":1},{"version":"17f2922d41ddd032830a91371c948cd9ce903b35c95adca72271a54584f19b0b","impliedFormat":1},{"version":"3eed76ede2a1a14d7c9bb0a642041282dcc264811139d3dd275c9fe14efc9840","impliedFormat":1},{"version":"e3cf0611709328b449ec13f8c436712d62003620ce480139fae46ce001c2ee9f","impliedFormat":1},{"version":"8d369483f0c2b9ee388129cfdb6a43bc8112b377e86a41884bd06e19ce04f4c1","impliedFormat":99},{"version":"b558c9a18ea4e6e4157124465c3ef1063e64640da139e67be5edb22f534f2f08","impliedFormat":1},{"version":"01374379f82be05d25c08d2f30779fa4a4c41895a18b93b33f14aeef51768692","impliedFormat":1},{"version":"b0dee183d4e65cf938242efaf3d833c6b645afb35039d058496965014f158141","impliedFormat":1},{"version":"c0bbbf84d3fbd85dd60d040c81e8964cc00e38124a52e9c5dcdedf45fea3f213","impliedFormat":1},{"version":"e623b43abceda24c4ee63a29080fd47c862d4830f41f5a50a6b062ddeb1d8d42","signature":"f65ce75c9085571e6321abf2bf9833709f4897e381f89e9925521833dbb7ab16"},{"version":"b261eb3eecbe0414e02822b609ad543b6ebb0c82412eb7d2707b5e6f19a0a3c0","signature":"da9e92a89a5ca60d3ae6d05eaf45a83a23040e349c2171c668e7c1f919039978"},{"version":"403fe1e59f4c60eb16b5d970588097df26b5e41356508266894c63dc85251204","signature":"193b239dd35106db13bb40d9f86a2d390ca4e0cec0fee8dd591a59557afdc338"},{"version":"56c9b7da9359c1dab70707209a40a2d8dafe9be62a4cdf5ac8eb65e3999de707","signature":"a792941215673983142bf8bd95c22dafafe6ecdb755566335a0551191d3b1025"},{"version":"0fc85ae25d61584e1340056c215184afd0780b78c27671a40c8212d6a8ad25b6","signature":"7aa0c189ca18eec1ced783b350a5a4802d05f1d023405f036b7475c70618346f"},{"version":"9777217e077954925bc0e4379ba0c4d824d46024dac78c8c8cc554a5da586c39","signature":"2516aa7b763018b697cf42771a864786e01622320b612deaf68ddff733eef8ed"},"d750378359a7f71b228572958634ecd758e60d9ca956f864e21cd040d83cf8d9","88872e82eb6bd46200b456efe92d796dde854c688817cdf3cd1861435859e92b","f2943f29b052699f6169402549169adff6757fed08802b0ade4c5ee02818c252",{"version":"806561e16cb7fccc95042c1c835c53b4e784dc64203db9014eb53a00b7a134a0","signature":"9b6de114734e63db4528e47a8597ddeba1008424b82df920967788a2565899b7"},{"version":"5bb3cff6c57b6d9b2250a0aaf254221d202053d092d700cf5581fd26f5baa14f","signature":"b7258175ca83cd6942cd487d13eca74cd6de23eda867d102c80fafec7010afa3"},{"version":"c162719a65504ff4c3af049f897bc6f43388e8a02458897964ea2884036c894e","signature":"d2dafd17c88b9511ea1ad8e359a968026494982dd5f117c4df471e1a2847bfdd"},{"version":"8716f62bcab916ef8290f1877a664dbf7172d56b76c81f19a82e904ecf9c426e","signature":"52321558b591350ec800284bfc32a458ed743d422fc58c4422a519f8cdbe596c"},{"version":"cb7e4621c7b9b7a7a7a7e1d2d75cf8e65de654da1a921648b557c99da0a598a7","signature":"c91eca3706f02afeac801c34d3e19510b67d2ba66932903528ea0f2669e49719"},{"version":"8be34e3674d778984771080228bd6f7839925cc2e2a0b2378d67ec9bf50dfdba","signature":"38aeb9a07d663e283c7d5381dc5cb3dff468295383a0a8b25b0ee417ee558cd3"},{"version":"dcf7b712edb02f92cbbc3fa83cf3a58a1af8f4ac7ff8e95aed30a53871d1f3d1","signature":"d7d84c4cf486c3a8be3ca38543e3d46f1a5cafc65bb19b80f82a356e29db29c7"},{"version":"59f082754ca1a7712966b721caaa08bb3a13d5006635649b43f3f3f445e99b16","signature":"dfcc2f5191f2c82ce37fdc316cfb1d6019ba4271bbe7233f6c44df7e8569cdef"},{"version":"5a808942d5bf9cdc9da86376d7f06e58621544dac8154b3660e06b7c03e728df","signature":"f1da3aa266bf0272bec6d180416d7ddb4c167a659b7b59ef12b4ac65ce8701e7"},{"version":"bd7b7644c0221ddc838abdb416aacc9e8d91fd00fddb2fa3e4cd5d92f97a59e2","signature":"8e5497760fa21453409188ab52e48622f25f377505964b114da784bcbe86f874"},"3eb9352b2a5ed1c5bd1e6b2d5874e942ed1eac8f00ed3549565fa97d3ae58abd",{"version":"b1535397a73ca6046ca08957788a4c9a745730c7b2b887e9b9bc784214f3abac","impliedFormat":1},{"version":"1dab12d45a7ab2b167b489150cc7d10043d97eadc4255bfee8d9e07697073c61","impliedFormat":1},{"version":"611c4448eee5289fb486356d96a8049ce8e10e58885608b1d218ab6000c489b3","impliedFormat":1},{"version":"5de017dece7444a2041f5f729fe5035c3e8a94065910fbd235949a25c0c5b035","impliedFormat":1},{"version":"d47961927fe421b16a444286485165f10f18c2ef7b2b32a599c6f22106cd223b","impliedFormat":1},{"version":"341672ca9475e1625c105a6a99f46e8b4f14dff977e53a828deef7b5e932638f","impliedFormat":1},{"version":"d3b5d359e0523d0b9f85016266c9a50ce9cda399aeac1b9eeecb63ba577e4d27","impliedFormat":1},{"version":"5b9f65234e953177fcc9088e69d363706ccd0696a15d254ac5787b28bdfb7cb0","impliedFormat":1},{"version":"510a5373df4110d355b3fb5c72dfd3906782aeacbb44de71ceee0f0dece36352","impliedFormat":1},{"version":"eb76f85d8a8893360da026a53b39152237aaa7f033a267009b8e590139afd7de","impliedFormat":1},{"version":"1c19f268e0f1ed1a6485ca80e0cfd4e21bdc71cb974e2ac7b04b5fce0a91482b","impliedFormat":1},{"version":"84a28d684e49bae482c89c996e8aeaabf44c0355237a3a1303749da2161a90c1","impliedFormat":1},{"version":"89c36d61bae1591a26b3c08db2af6fdd43ffaab0f96646dead5af39ff0cf44d3","impliedFormat":1},{"version":"fcd615891bdf6421c708b42a6006ed8b0cf50ca0ac2b37d66a5777d8222893ce","impliedFormat":1},{"version":"1c87dfe5efcac5c2cd5fc454fe5df66116d7dc284b6e7b70bd30c07375176b36","impliedFormat":1},{"version":"6362fcd24c5b52eb88e9cf33876abd9b066d520fc9d4c24173e58dcddcfe12d5","impliedFormat":1},{"version":"aa064f60b7e64c04a759f5806a0d82a954452300ee27566232b0cf5dad5b6ba6","impliedFormat":1},{"version":"7ffb4e58ca1b9ed5f26bed3dc0287c4abd7a2ba301ca55e2546d01a7f7f73de7","impliedFormat":1},{"version":"65a6307cc74644b8813e553b468ea7cc7a1e5c4b241db255098b35f308bfc4b5","impliedFormat":1},{"version":"bd8e8f02d1b0ebfa518f7d8b5f0db06ae260c192e211a1ef86397f4b49ee198f","impliedFormat":1},{"version":"71b32ccf8c508c2f7445b1b2c144dd7eef9434f7bfa6a92a9ebd0253a75cb54a","impliedFormat":1},{"version":"4fd8e7e446c8379cfb1f165961b1d2f984b40d73f5ad343d93e33962292ec2e0","impliedFormat":1},{"version":"45079ac211d6cfda93dd7d0e7fc1cf2e510dad5610048ef71e47328b765515be","impliedFormat":1},{"version":"7ae8f8b4f56ba486dc9561d873aae5b3ad263ffb9683c8f9ffc18d25a7fd09a4","impliedFormat":1},{"version":"e0ab56e00ef473df66b345c9d64e42823c03e84d9a679020746d23710c2f9fce","impliedFormat":1},{"version":"d99deead63d250c60b647620d1ddaf497779aef1084f85d3d0a353cbc4ea8a60","impliedFormat":1},{"version":"ba64b14db9d08613474dc7c06d8ffbcb22a00a4f9d2641b2dcf97bc91da14275","impliedFormat":1},{"version":"530197974beb0a02c5a9eb7223f03e27651422345c8c35e1a13ddc67e6365af5","impliedFormat":1},{"version":"512c43b21074254148f89bd80ae00f7126db68b4d0bd1583b77b9c8af91cc0d3","impliedFormat":1},{"version":"0bfacd36c923f059779049c6c74c00823c56386397a541fefc8d8672d26e0c42","impliedFormat":1},{"version":"19d04b82ed0dc5ba742521b6da97f22362fe40d6efa5ca5650f08381e5c939b2","impliedFormat":1},{"version":"f02ac71075b54b5c0a384dddbd773c9852dba14b4bf61ca9f1c8ba6b09101d3e","impliedFormat":1},{"version":"bbf0ae18efd0b886897a23141532d9695435c279921c24bcb86090f2466d0727","impliedFormat":1},{"version":"067670de65606b4aa07964b0269b788a7fe48026864326cd3ab5db9fc5e93120","impliedFormat":1},{"version":"7a094146e95764e687120cdb840d7e92fe9960c2168d697639ad51af7230ef5e","impliedFormat":1},{"version":"21290aaea56895f836a0f1da5e1ef89285f8c0e85dc85fd59e2b887255484a6f","impliedFormat":1},{"version":"a07254fded28555a750750f3016aa44ec8b41fbf3664b380829ed8948124bafe","impliedFormat":1},{"version":"f14fbd9ec19692009e5f2727a662f841bbe65ac098e3371eb9a4d9e6ac05bca7","impliedFormat":1},{"version":"46f640a5efe8e5d464ced887797e7855c60581c27575971493998f253931b9a3","impliedFormat":1},{"version":"cdf62cebf884c6fde74f733d7993b7e255e513d6bc1d0e76c5c745ac8df98453","impliedFormat":1},{"version":"e6dd8526d318cce4cb3e83bef3cb4bf3aa08186ddc984c4663cf7dee221d430e","impliedFormat":1},{"version":"bc79e5e54981d32d02e32014b0279f1577055b2ebee12f4d2dc6451efd823a19","impliedFormat":1},{"version":"ce9f76eceb4f35c5ecd9bf7a1a22774c8b4962c2c52e5d56a8d3581a07b392f9","impliedFormat":1},{"version":"7d390f34038ca66aef27575cffb5a25a1034df470a8f7789a9079397a359bf8b","impliedFormat":1},{"version":"18084f07f6e85e59ce11b7118163dff2e452694fffb167d9973617699405fbd1","impliedFormat":1},{"version":"6af607dd78a033679e46c1c69c126313a1485069bdec46036f0fbfe64e393979","impliedFormat":1},{"version":"44c556b0d0ede234f633da4fb95df7d6e9780007003e108e88b4969541373db1","impliedFormat":1},{"version":"ef1491fb98f7a8837af94bfff14351b28485d8b8f490987820695cedac76dc99","impliedFormat":1},{"version":"0d4ba4ad7632e46bab669c1261452a1b35b58c3b1f6a64fb456440488f9008cf","impliedFormat":1},{"version":"74a0fa488591d372a544454d6cd93bbadd09c26474595ea8afed7125692e0859","impliedFormat":1},{"version":"0a9ae72be840cc5be5b0af985997029c74e3f5bcd4237b0055096bb01241d723","impliedFormat":1},{"version":"920004608418d82d0aad39134e275a427255aaf1dafe44dca10cc432ef5ca72a","impliedFormat":1},{"version":"3ac2bd86af2bab352d126ccdde1381cd4db82e3d09a887391c5c1254790727a1","impliedFormat":1},{"version":"2efc9ad74a84d3af0e00c12769a1032b2c349430d49aadebdf710f57857c9647","impliedFormat":1},{"version":"f18cc4e4728203a0282b94fc542523dfd78967a8f160fabc920faa120688151f","impliedFormat":1},{"version":"cc609a30a3dd07d6074290dadfb49b9f0f2c09d0ae7f2fa6b41e2dae2432417b","impliedFormat":1},{"version":"c473f6bd005279b9f3a08c38986f1f0eaf1b0f9d094fec6bc66309e7504b6460","impliedFormat":1},{"version":"0043ff78e9f07cbbbb934dd80d0f5fe190437715446ec9550d1f97b74ec951ac","impliedFormat":1},{"version":"bdc013746db3189a2525e87e2da9a6681f78352ef25ae513aa5f9a75f541e0ae","impliedFormat":1},{"version":"4f567b8360c2be77e609f98efc15de3ffcdbe2a806f34a3eba1ee607c04abab6","impliedFormat":1},{"version":"615bf0ac5606a0e79312d70d4b978ac4a39b3add886b555b1b1a35472327034e","impliedFormat":1},{"version":"818e96d8e24d98dfd8fd6d9d1bbabcac082bcf5fbbe64ca2a32d006209a8ee54","impliedFormat":1},{"version":"18b0b9a38fe92aa95a40431676b2102139c5257e5635fe6a48b197e9dcb660f1","impliedFormat":1},{"version":"86b382f98cb678ff23a74fe1d940cbbf67bcd3162259e8924590ecf8ee24701e","impliedFormat":1},{"version":"aeea2c497f27ce34df29448cbe66adb0f07d3a5d210c24943d38b8026ffa6d3c","impliedFormat":1},{"version":"0fbe1a754e3da007cc2726f61bc8f89b34b466fe205b20c1e316eb240bebe9e8","impliedFormat":1},{"version":"aa2f3c289c7a3403633e411985025b79af473c0bf0fdd980b9712bd6a1705d59","impliedFormat":1},{"version":"e140d9fa025dadc4b098c54278271a032d170d09f85f16f372e4879765277af8","impliedFormat":1},{"version":"70d9e5189fd4dabc81b82cf7691d80e0abf55df5030cc7f12d57df62c72b5076","impliedFormat":1},{"version":"a96be3ed573c2a6d4c7d4e7540f1738a6e90c92f05f684f5ee2533929dd8c6b2","impliedFormat":1},{"version":"2a545aa0bc738bd0080a931ccf8d1d9486c75cbc93e154597d93f46d2f3be3b4","impliedFormat":1},{"version":"137272a656222e83280287c3b6b6d949d38e6c125b48aff9e987cf584ff8eb42","impliedFormat":1},{"version":"5277b2beeb856b348af1c23ffdaccde1ec447abede6f017a0ab0362613309587","impliedFormat":1},{"version":"d4b6804b4c4cb3d65efd5dc8a672825cea7b39db98363d2d9c2608078adce5f8","impliedFormat":1},{"version":"929f67e0e7f3b3a3bcd4e17074e2e60c94b1e27a8135472a7d002a36cd640629","impliedFormat":1},{"version":"0c73536b65135298d43d1ef51dd81a6eba3b69ef0ce005db3de11365fda30a55","impliedFormat":1},{"version":"2a545aa0bc738bd0080a931ccf8d1d9486c75cbc93e154597d93f46d2f3be3b4","impliedFormat":99},{"version":"a3e6d76ebd7f6f7216b02b59f06d073cef8ffd7f56b219ac87a3386758a95921","signature":"d1f772df85a81888c17ab1d672d3b24ae2473cb9daa2c69d16c6b362e12492fd"},{"version":"83c87c43e66154e84f751abebcdd465d6e9dec14f9e80cd25a3c236211f64590","signature":"84e81c7a24a316fba147afc3d7460a1377602b05b05feaabdec7c05823283539"},{"version":"0cb1a36f34f54df8c79785095bccb81dca837cb0e89e7ae2f354a8d7ded0223f","signature":"fc722f8cfc3dac3f5da07b149362dc2d61bca8d50596ddcf0e08ceda1534c702"},{"version":"1eff01d5229741ab466d03195d98224121825766387125be86fc099e6f9adef5","signature":"5a27eb657dcc3b2475a289bc8facfa0b37a54857e911b020e29d28dd1beb8dbf"},"91779005845517b6feaddf5bee42c04b0a7f4521417c87f800648717a0f90f8e",{"version":"8e28d5a1a94045dd0b22a7e7d9e4d7ad031c6c13bbe541ee546d131e47cf4d09","signature":"b27eae6ddcf440d25ec41ed55797dd21395eb76e1e847e73da14b7d07b4cdc2a"},{"version":"4c2d749c93691c3eae2b7adaccce148f46fe30078283b0a75b86fb3dc2425b78","signature":"559732f9fa5e021eea97bd1718505118f1e029f2f4e4dfdb58f0f278e8c96d0b"},{"version":"60048d6852a4c624b225e172fcef53ba2a66aa16667a7aa0ab998d5f5990fbfd","signature":"808984c7b2d3726b9af8396e147b8e5affcbefc1e63135fc2b7f30699aac28dc"},{"version":"f0c2ada646d66d0bf4190031be1b18a6ac7f29c77282af728120ce2578b05c9c","signature":"874005a70d4bdeb276de1c7cd15e80f52ad176bc6d01bc57060b34d1bdb90229"},{"version":"4e4361195495fdbfea5bd5cad08b07e6e721a0d2a985e54d28482d6da3caabee","signature":"d50234446709c93924529c0508fb514f3a19916424febb911dd43644b268c3ce"},{"version":"b51fb3ae19c62cea8c1aad18a569b939b1203cf0f0beede96a95c9ef00dc821d","impliedFormat":1},{"version":"ffeb91f2c925ded5147acdeaef2b5060a8e48f5c5e528e646ea872f4440bd2be","impliedFormat":1},{"version":"06b9fcb4e529bfa1e604002324923329ba760aabfe975baf72ea7bf5749079a7","affectsGlobalScope":true,"impliedFormat":1},{"version":"5e8ef26ea90fb5636ac95a08903ffec4f20b585575dcffa56c32da0df53830b9","impliedFormat":1},{"version":"7e3373dde2bba74076250204bd2af3aa44225717435e46396ef076b1954d2729","impliedFormat":1},{"version":"1c3dfad66ff0ba98b41c98c6f41af096fc56e959150bc3f44b2141fb278082fd","impliedFormat":1},{"version":"56208c500dcb5f42be7e18e8cb578f257a1a89b94b3280c506818fed06391805","impliedFormat":1},{"version":"0c94c2e497e1b9bcfda66aea239d5d36cd980d12a6d9d59e66f4be1fa3da5d5a","impliedFormat":1},{"version":"eb9271b3c585ea9dc7b19b906a921bf93f30f22330408ffec6df6a22057f3296","impliedFormat":1},{"version":"0205ee059bd2c4e12dcadc8e2cbd0132e27aeba84082a632681bd6c6c61db710","impliedFormat":1},{"version":"a694d38afadc2f7c20a8b1d150c68ac44d1d6c0229195c4d52947a89980126bc","impliedFormat":1},{"version":"9f1e00eab512de990ba27afa8634ca07362192063315be1f8166bc3dcc7f0e0f","impliedFormat":1},{"version":"9674788d4c5fcbd55c938e6719177ac932c304c94e0906551cc57a7942d2b53b","impliedFormat":1},{"version":"86dac6ce3fcd0a069b67a1ac9abdbce28588ea547fd2b42d73c1a2b7841cf182","impliedFormat":1},{"version":"4d34fbeadba0009ed3a1a5e77c99a1feedec65d88c4d9640910ff905e4e679f7","impliedFormat":1},{"version":"9d90361f495ed7057462bcaa9ae8d8dbad441147c27716d53b3dfeaea5bb7fc8","impliedFormat":1},{"version":"8fcc5571404796a8fe56e5c4d05049acdeac9c7a72205ac15b35cb463916d614","impliedFormat":1},{"version":"a3b3a1712610260c7ab96e270aad82bd7b28a53e5776f25a9a538831057ff44c","impliedFormat":1},{"version":"33a2af54111b3888415e1d81a7a803d37fada1ed2f419c427413742de3948ff5","impliedFormat":1},{"version":"d5a4fca3b69f2f740e447efb9565eecdbbe4e13f170b74dd4a829c5c9a5b8ebf","impliedFormat":1},{"version":"56f1e1a0c56efce87b94501a354729d0a0898508197cb50ab3e18322eb822199","impliedFormat":1},{"version":"8960e8c1730aa7efb87fcf1c02886865229fdbf3a8120dd08bb2305d2241bd7e","impliedFormat":1},{"version":"27bf82d1d38ea76a590cbe56873846103958cae2b6f4023dc59dd8282b66a38a","impliedFormat":1},{"version":"0daaab2afb95d5e1b75f87f59ee26f85a5f8d3005a799ac48b38976b9b521e69","impliedFormat":1},{"version":"2c378d9368abcd2eba8c29b294d40909845f68557bc0b38117e4f04fc56e5f9c","impliedFormat":1},{"version":"9b048390bcffe88c023a4cd742a720b41d4cd7df83bc9270e6f2339bf38de278","affectsGlobalScope":true,"impliedFormat":1},{"version":"c60b14c297cc569c648ddaea70bc1540903b7f4da416edd46687e88a543515a1","impliedFormat":1},{"version":"94a802503ca276212549e04e4c6b11c4c14f4fa78722f90f7f0682e8847af434","impliedFormat":1},{"version":"9c0217750253e3bf9c7e3821e51cff04551c00e63258d5e190cf8bd3181d5d4a","impliedFormat":1},{"version":"5c2e7f800b757863f3ddf1a98d7521b8da892a95c1b2eafb48d652a782891677","impliedFormat":1},{"version":"21317aac25f94069dbcaa54492c014574c7e4d680b3b99423510b51c4e36035f","impliedFormat":1},{"version":"c61d8275c35a76cb12c271b5fa8707bb46b1e5778a370fd6037c244c4df6a725","impliedFormat":1},{"version":"c7793cb5cd2bef461059ca340fbcd19d7ddac7ab3dcc6cd1c90432fca260a6ae","impliedFormat":1},{"version":"fd3bf6d545e796ebd31acc33c3b20255a5bc61d963787fc8473035ea1c09d870","impliedFormat":1},{"version":"c7af51101b509721c540c86bb5fc952094404d22e8a18ced30c38a79619916fa","impliedFormat":1},{"version":"59c8f7d68f79c6e3015f8aee218282d47d3f15b85e5defc2d9d1961b6ffed7a0","impliedFormat":1},{"version":"93a2049cbc80c66aa33582ec2648e1df2df59d2b353d6b4a97c9afcbb111ccab","impliedFormat":1},{"version":"d04d359e40db3ae8a8c23d0f096ad3f9f73a9ef980f7cb252a1fdc1e7b3a2fb9","impliedFormat":1},{"version":"84aa4f0c33c729557185805aae6e0df3bd084e311da67a10972bbcf400321ff0","impliedFormat":1},{"version":"cf6cbe50e3f87b2f4fd1f39c0dc746b452d7ce41b48aadfdb724f44da5b6f6ed","impliedFormat":1},{"version":"3cf494506a50b60bf506175dead23f43716a088c031d3aa00f7220b3fbcd56c9","impliedFormat":1},{"version":"f2d47126f1544c40f2b16fc82a66f97a97beac2085053cf89b49730a0e34d231","impliedFormat":1},{"version":"724ac138ba41e752ae562072920ddee03ba69fe4de5dafb812e0a35ef7fb2c7e","impliedFormat":1},{"version":"e4eb3f8a4e2728c3f2c3cb8e6b60cadeb9a189605ee53184d02d265e2820865c","impliedFormat":1},{"version":"f16cb1b503f1a64b371d80a0018949135fbe06fb4c5f78d4f637b17921a49ee8","impliedFormat":1},{"version":"f4808c828723e236a4b35a1415f8f550ff5dec621f81deea79bf3a051a84ffd0","impliedFormat":1},{"version":"3b810aa3410a680b1850ab478d479c2f03ed4318d1e5bf7972b49c4d82bacd8d","impliedFormat":1},{"version":"0ce7166bff5669fcb826bc6b54b246b1cf559837ea9cc87c3414cc70858e6097","impliedFormat":1},{"version":"6ea095c807bc7cc36bc1774bc2a0ef7174bf1c6f7a4f6b499170b802ce214bfe","impliedFormat":1},{"version":"3549400d56ee2625bb5cc51074d3237702f1f9ffa984d61d9a2db2a116786c22","impliedFormat":1},{"version":"5327f9a620d003b202eff5db6be0b44e22079793c9a926e0a7a251b1dbbdd33f","impliedFormat":1},{"version":"b60f6734309d20efb9b0e0c7e6e68282ee451592b9c079dd1a988bb7a5eeb5e7","impliedFormat":1},{"version":"f4187a4e2973251fd9655598aa7e6e8bba879939a73188ee3290bb090cc46b15","impliedFormat":1},{"version":"44c1a26f578277f8ccef3215a4bd642a0a4fbbaf187cf9ae3053591c891fdc9c","impliedFormat":1},{"version":"a5989cd5e1e4ca9b327d2f93f43e7c981f25ee12a81c2ebde85ec7eb30f34213","impliedFormat":1},{"version":"f65b8fa1532dfe0ef2c261d63e72c46fe5f089b28edcd35b3526328d42b412b8","impliedFormat":1},{"version":"1060083aacfc46e7b7b766557bff5dafb99de3128e7bab772240877e5bfe849d","impliedFormat":1},{"version":"d61a3fa4243c8795139e7352694102315f7a6d815ad0aeb29074cfea1eb67e93","impliedFormat":1},{"version":"1f66b80bad5fa29d9597276821375ddf482c84cfb12e8adb718dc893ffce79e0","impliedFormat":1},{"version":"1ed8606c7b3612e15ff2b6541e5a926985cbb4d028813e969c1976b7f4133d73","impliedFormat":1},{"version":"c086ab778e9ba4b8dbb2829f42ef78e2b28204fc1a483e42f54e45d7a96e5737","impliedFormat":1},{"version":"dd0b9b00a39436c1d9f7358be8b1f32571b327c05b5ed0e88cc91f9d6b6bc3c9","impliedFormat":1},{"version":"a951a7b2224a4e48963762f155f5ad44ca1145f23655dde623ae312d8faeb2f2","impliedFormat":1},{"version":"cd960c347c006ace9a821d0a3cffb1d3fbc2518a4630fb3d77fe95f7fd0758b8","impliedFormat":1},{"version":"fe1f3b21a6cc1a6bc37276453bd2ac85910a8bdc16842dc49b711588e89b1b77","impliedFormat":1},{"version":"1a6a21ff41d509ab631dbe1ea14397c518b8551f040e78819f9718ef80f13975","impliedFormat":1},{"version":"0a55c554e9e858e243f714ce25caebb089e5cc7468d5fd022c1e8fa3d8e8173d","impliedFormat":1},{"version":"3a5e0fe9dcd4b1a9af657c487519a3c39b92a67b1b21073ff20e37f7d7852e32","impliedFormat":1},{"version":"977aeb024f773799d20985c6817a4c0db8fed3f601982a52d4093e0c60aba85f","impliedFormat":1},{"version":"d59cf5116848e162c7d3d954694f215b276ad10047c2854ed2ee6d14a481411f","impliedFormat":1},{"version":"50098be78e7cbfc324dfc04983571c80539e55e11a0428f83a090c13c41824a2","impliedFormat":1},{"version":"08e767d9d3a7e704a9ea5f057b0f020fd5880bc63fbb4aa6ffee73be36690014","impliedFormat":1},{"version":"dd6051c7b02af0d521857069c49897adb8595d1f0e94487d53ebc157294ef864","impliedFormat":1},{"version":"79c6a11f75a62151848da39f6098549af0dd13b22206244961048326f451b2a8","impliedFormat":1},{"version":"6047aabc6201f1add6e30673ede6d9fb1fd31c7f8028d44022fe09595286ad5b","signature":"a69523b0d4ef279543d3c74f9b3d7933ee3ea813e138e4b82278fa5874fdc0e2"},{"version":"5ba02af04f752cda86e2746e6e2e4686eb24db9f483ec4b7fe119947e74b36b0","signature":"aaf2e07fe2a6f53137c79c3001b8fcba652bf9129fba8822a727ff86ba627540"},{"version":"e49dc70d37d0ef5cf0498d897c529f032a01b6376c624ed2ebb75f9f33d90fcc","signature":"c369a0f02f4ff50f607380e38126effe2e150ad1651224d35678f4926e62fca6"},"d279b57268026526d14a30f9ca29e5730339ebd8a45099813c24ca35bb2220a1",{"version":"62985961eafa8725262b36107c8c30f31deb39b51b387792f0f075a1b0e3416d","signature":"2dbe9fb16798f645b4ed4ad5716c869daa5e1707d50fc342985bab78a0770c70"},{"version":"62b15261f6fc7999d9ec77bf00ec31c2e5cb34f156c05599f6f9dc5ebd0c8fd4","signature":"04157e4bcaeacd5dbfec117e5bec8350b87bdd0c784590f3e9e4910107601a04"},{"version":"38ed6318f67b218be3211478f046fc4cb60cf54e4ed9977a1e4692d1dc8d1043","signature":"3559ab051f0e108436543736d18ada584a65abc82bf196fbf2aa2d1cd0cabcca"},{"version":"8e043e86d9a5d914ba02478e4ec77160c89f3829327d517d9e10897162a58317","signature":"3df554313b3d4e438e3e8c075736b719aaf899a27fa3f8c633354641a6d6741a"},{"version":"003c002e351fe7c5e061db0004c777ca3b1d18c134c726988bb31fdb02c3e8c7","signature":"0d1087dca7874629675d3525d8ededdfdf52e3612980d093f52058ceeedad8cb","affectsGlobalScope":true},"5e500a7850c71b7b6b3da41f05a3f8078dc7cc7e5cb4318730c6fc7599e53632","d69abd9c352d97ad05ef941598d5ce8f0c68acede1eda79b411e9aa5f826dcaa",{"version":"780f57048e986f06acd52efc0316c0def1f5370149c4077c565decb00064fca1","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},"1ec90aeccb134b916aa20eef1b1f8a61d1497f985c0e98087aad174ab7c93b4e","00c61a2bc6a3f8385556dbb12395e425ea878e99c7ab51c8e6140ab1b1ce4354",{"version":"25f4bb978adaaae6b9b9bc065e832bd8c0a71b89eeb50fc0dbdb427be4642e33","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"9ec6d9ee46725f5e36e1cc222bd130557c87c548d38b4259af9f73eaf91437d0","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"cf584a5165573e4a15a4c6c9e7efb2e1e6317ba5aac49f1e5cc6c977684a14eb","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"088caec35c02c427c0c5d29f3175de97a1f16d3345616e350407fa8eb61b58c8","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},"9e355fbb7a8d01da886c1cec475aa4355bd6ae66c4f3ec02f3e414ff37bd8086",{"version":"e01642924c935e9886f324aa81a779b569f56a658df38f1b02e148d6b7bda79a","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},"5737689acb4910e328648a59aa462648e2392f3b0cb6b84f82be4f6a760b1fb4",{"version":"cc07c57a427b53efdd3e5d729ffd1fa262e5913fd5a58a4bf80b96bf3e6e7e84","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"bfd78bca978d50d5de81d5e2d8b3c26946afb4a54bb774f7cc70aadfa841cedf","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"b1538a92b9bae8d230267210c5db38c2eb6bdb352128a3ce3aa8c6acf9fc9622","impliedFormat":1},{"version":"6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","impliedFormat":1},{"version":"ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","impliedFormat":1},{"version":"d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","impliedFormat":1},{"version":"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"736097ddbb2903bef918bb3b5811ef1c9c5656f2a73bd39b22a91b9cc2525e50","impliedFormat":1},{"version":"4340936f4e937c452ae783514e7c7bbb7fc06d0c97993ff4865370d0962bb9cf","impliedFormat":1},{"version":"b70c7ea83a7d0de17a791d9b5283f664033a96362c42cc4d2b2e0bdaa65ef7d1","impliedFormat":1},{"version":"fa8dbed00530fb4114906cd93f7fb55512c8eb9551d2f2e9796c69a4da4b594f","impliedFormat":1}],"root":[408,433,[435,449],451,452,[530,539],[614,636]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true},"referencedMap":[[627,1],[628,2],[629,3],[630,4],[631,5],[632,6],[633,7],[634,8],[635,9],[636,10],[625,11],[626,12],[441,13],[444,14],[443,14],[446,15],[447,16],[449,17],[448,17],[452,18],[530,19],[533,20],[534,21],[535,17],[536,15],[539,22],[624,23],[617,24],[621,25],[615,26],[616,27],[614,28],[620,29],[623,30],[618,31],[622,32],[619,33],[450,34],[434,34],[442,35],[531,36],[435,34],[440,37],[437,35],[537,34],[532,38],[438,39],[538,40],[445,35],[451,35],[439,41],[436,34],[408,42],[361,34],[637,34],[638,34],[639,34],[640,43],[564,34],[547,44],[565,45],[546,34],[641,34],[642,34],[644,34],[645,46],[142,47],[143,47],[144,48],[99,49],[145,50],[146,51],[147,52],[94,34],[97,53],[95,34],[96,34],[148,54],[149,55],[150,56],[151,57],[152,58],[153,59],[154,59],[155,60],[156,61],[157,62],[158,63],[100,34],[98,34],[159,64],[160,65],[161,66],[193,67],[162,68],[163,69],[164,70],[165,71],[166,72],[167,73],[168,74],[169,75],[170,76],[171,77],[172,77],[173,78],[174,34],[175,79],[177,80],[176,81],[178,82],[179,83],[180,84],[181,85],[182,86],[183,87],[184,88],[185,89],[186,90],[187,91],[188,92],[189,93],[190,94],[101,34],[102,34],[103,34],[141,95],[191,96],[192,97],[646,98],[86,34],[198,99],[199,100],[197,32],[195,101],[196,102],[84,34],[87,103],[285,32],[85,34],[643,104],[543,105],[540,32],[542,106],[541,34],[93,107],[364,108],[368,109],[370,110],[219,111],[233,112],[335,113],[264,34],[338,114],[300,115],[308,116],[336,117],[220,118],[263,34],[265,119],[337,120],[240,121],[221,122],[244,121],[234,121],[204,121],[291,123],[292,124],[209,34],[288,125],[293,126],[379,127],[286,126],[380,128],[270,34],[289,129],[392,130],[391,131],[295,126],[390,34],[388,34],[389,132],[290,32],[277,133],[278,134],[287,135],[303,136],[304,137],[294,138],[272,139],[273,140],[383,141],[386,142],[251,143],[250,144],[249,145],[395,32],[248,146],[225,34],[398,34],[401,34],[400,32],[402,147],[200,34],[329,34],[232,148],[202,149],[352,34],[353,34],[355,34],[358,150],[354,34],[356,151],[357,151],[218,34],[231,34],[363,152],[371,153],[375,154],[214,155],[280,156],[279,34],[271,139],[299,157],[297,158],[296,34],[298,34],[302,159],[275,160],[213,161],[238,162],[326,163],[205,104],[212,164],[201,113],[340,165],[350,166],[339,34],[349,167],[239,34],[223,168],[317,169],[316,34],[323,170],[325,171],[318,172],[322,173],[324,170],[321,172],[320,170],[319,172],[260,174],[245,174],[311,175],[246,175],[207,176],[206,34],[315,177],[314,178],[313,179],[312,180],[208,181],[284,182],[301,183],[283,184],[307,185],[309,186],[306,184],[241,181],[194,34],[327,187],[266,188],[348,189],[269,190],[343,191],[211,34],[344,192],[346,193],[347,194],[330,34],[342,104],[242,195],[328,196],[351,197],[215,34],[217,34],[222,198],[310,199],[210,200],[216,34],[268,201],[267,202],[224,203],[276,204],[274,205],[226,206],[228,207],[399,34],[227,208],[229,209],[366,34],[365,34],[367,34],[397,34],[230,210],[282,32],[92,34],[305,211],[252,34],[262,212],[373,32],[382,213],[259,32],[377,126],[258,214],[360,215],[257,213],[203,34],[384,216],[255,32],[256,32],[247,34],[261,34],[254,217],[253,218],[243,219],[237,138],[345,34],[236,220],[235,34],[369,34],[281,32],[362,221],[83,34],[91,222],[88,32],[89,34],[90,34],[341,223],[334,224],[333,34],[332,225],[331,34],[372,226],[374,227],[376,228],[378,229],[381,230],[407,231],[385,231],[406,232],[387,233],[393,234],[394,235],[396,236],[403,237],[405,34],[404,238],[359,239],[454,34],[460,240],[453,34],[457,34],[459,241],[456,242],[529,243],[523,243],[484,244],[480,245],[495,246],[485,247],[492,248],[479,249],[493,34],[491,250],[488,251],[489,252],[486,253],[494,254],[461,242],[524,255],[475,256],[472,257],[473,258],[474,259],[463,260],[482,261],[501,262],[497,263],[496,264],[500,265],[498,266],[499,266],[476,267],[478,268],[477,269],[481,270],[525,271],[483,272],[465,273],[526,274],[464,275],[527,276],[466,277],[504,278],[502,257],[503,279],[467,266],[508,280],[506,281],[507,282],[468,283],[511,284],[510,285],[513,286],[512,287],[516,288],[514,287],[515,289],[509,290],[505,291],[517,290],[469,266],[528,292],[470,287],[471,266],[487,293],[490,294],[462,34],[518,266],[519,295],[521,296],[520,297],[522,298],[455,299],[458,300],[425,301],[423,302],[424,303],[412,304],[413,302],[420,305],[411,306],[416,307],[426,34],[417,308],[422,309],[428,310],[427,311],[410,312],[418,313],[419,314],[414,315],[421,301],[415,316],[587,317],[589,318],[579,319],[584,320],[585,321],[591,322],[586,323],[583,324],[582,325],[581,326],[592,327],[549,320],[550,320],[590,320],[595,328],[605,329],[599,329],[607,329],[611,329],[597,330],[598,329],[600,329],[603,329],[606,329],[602,331],[604,329],[608,32],[601,320],[596,332],[558,32],[562,32],[552,320],[555,32],[560,320],[561,333],[554,334],[557,32],[559,32],[556,335],[545,32],[544,32],[613,336],[610,337],[576,338],[575,320],[573,32],[574,320],[577,339],[578,340],[571,32],[567,341],[570,320],[569,320],[568,320],[563,320],[572,341],[609,320],[588,342],[594,343],[593,344],[612,34],[580,34],[553,34],[551,345],[409,34],[431,346],[430,34],[429,34],[432,347],[81,34],[82,34],[13,34],[14,34],[16,34],[15,34],[2,34],[17,34],[18,34],[19,34],[20,34],[21,34],[22,34],[23,34],[24,34],[3,34],[25,34],[26,34],[4,34],[27,34],[31,34],[28,34],[29,34],[30,34],[32,34],[33,34],[34,34],[5,34],[35,34],[36,34],[37,34],[38,34],[6,34],[42,34],[39,34],[40,34],[41,34],[43,34],[7,34],[44,34],[49,34],[50,34],[45,34],[46,34],[47,34],[48,34],[8,34],[54,34],[51,34],[52,34],[53,34],[55,34],[9,34],[56,34],[57,34],[58,34],[60,34],[59,34],[61,34],[62,34],[10,34],[63,34],[64,34],[65,34],[11,34],[66,34],[67,34],[68,34],[69,34],[70,34],[1,34],[71,34],[72,34],[12,34],[76,34],[74,34],[79,34],[78,34],[73,34],[77,34],[75,34],[80,34],[119,348],[129,349],[118,348],[139,350],[110,351],[109,352],[138,238],[132,353],[137,354],[112,355],[126,356],[111,357],[135,358],[107,359],[106,238],[136,360],[108,361],[113,362],[114,34],[117,362],[104,34],[140,363],[130,364],[121,365],[122,366],[124,367],[120,368],[123,369],[133,238],[115,370],[116,371],[125,372],[105,373],[128,364],[127,362],[131,34],[134,374],[548,375],[566,376],[433,377]],"affectedFilesPendingEmit":[627,628,629,630,631,632,633,634,635,636,625,626,441,444,443,446,447,449,448,452,530,533,534,535,536,539,624,617,621,615,616,614,620,623,618,622,619,442,531,435,440,437,537,532,438,538,445,451,439,436,433],"version":"5.9.3"} \ No newline at end of file +{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.iterator.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/next/amp.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/future/route-kind.d.ts","./node_modules/next/dist/server/future/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/server/lib/revalidate.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/future/helpers/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/font-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/client/components/static-generation-async-storage-instance.d.ts","./node_modules/next/dist/client/components/static-generation-async-storage.external.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/client/components/request-async-storage-instance.d.ts","./node_modules/next/dist/client/components/request-async-storage.external.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.d.ts","./node_modules/next/dist/client/components/app-router.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/action-async-storage-instance.d.ts","./node_modules/next/dist/client/components/action-async-storage.external.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/search-params.d.ts","./node_modules/next/dist/client/components/not-found-boundary.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/future/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/future/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/future/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/future/normalizers/normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/future/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/future/normalizers/request/prefix.d.ts","./node_modules/next/dist/server/future/normalizers/request/postponed.d.ts","./node_modules/next/dist/server/future/normalizers/request/action.d.ts","./node_modules/next/dist/server/future/normalizers/request/prefetch-rsc.d.ts","./node_modules/next/dist/server/future/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/webpack/plugins/define-env-plugin.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/types/index.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/shared/lib/runtime-config.external.d.ts","./node_modules/next/config.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/client/components/draft-mode.d.ts","./node_modules/next/dist/client/components/headers.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./next-env.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/tailwindcss/types/generated/corepluginlist.d.ts","./node_modules/tailwindcss/types/generated/colors.d.ts","./node_modules/tailwindcss/types/config.d.ts","./node_modules/tailwindcss/types/index.d.ts","./tailwind.config.ts","./data/rate_decisions.json","./lib/forexfactory.ts","./lib/types.ts","./lib/investinglive.ts","./lib/rateprobability.ts","./lib/calendar-countries.ts","./lib/calendar-taxonomy.ts","./lib/fxstreetcalendar.ts","./lib/tradingeconomics.ts","./app/api/calendar/route.ts","./node_modules/pdfjs-dist/types/src/shared/util.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/tools.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/toolbar.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/comment.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/editor.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/freetext.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/highlight.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/draw.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/drawers/outline.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/drawers/inkdraw.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/ink.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/signature.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/stamp.d.ts","./node_modules/pdfjs-dist/types/src/display/display_utils.d.ts","./node_modules/pdfjs-dist/types/web/text_accessibility.d.ts","./node_modules/pdfjs-dist/types/src/display/optional_content_config.d.ts","./node_modules/pdfjs-dist/types/src/display/annotation_storage.d.ts","./node_modules/pdfjs-dist/types/src/display/metadata.d.ts","./node_modules/pdfjs-dist/types/src/display/pdf_objects.d.ts","./node_modules/pdfjs-dist/types/src/shared/message_handler.d.ts","./node_modules/pdfjs-dist/types/src/display/api.d.ts","./node_modules/pdfjs-dist/types/web/interfaces.d.ts","./node_modules/pdfjs-dist/types/web/struct_tree_layer_builder.d.ts","./node_modules/pdfjs-dist/types/web/comment_manager.d.ts","./node_modules/pdfjs-dist/types/src/display/annotation_layer.d.ts","./node_modules/pdfjs-dist/types/src/display/draw_layer.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/annotation_editor_layer.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/color_picker.d.ts","./node_modules/pdfjs-dist/types/src/display/svg_factory.d.ts","./node_modules/pdfjs-dist/types/src/display/worker_options.d.ts","./node_modules/pdfjs-dist/types/src/display/api_utils.d.ts","./node_modules/pdfjs-dist/types/src/display/editor/drawers/signaturedraw.d.ts","./node_modules/pdfjs-dist/types/src/display/text_layer.d.ts","./node_modules/pdfjs-dist/types/src/display/touch_manager.d.ts","./node_modules/pdfjs-dist/types/src/display/xfa_layer.d.ts","./node_modules/pdfjs-dist/types/src/pdf.d.ts","./node_modules/pdfjs-dist/legacy/build/pdf.d.mts","./node_modules/pdf-parse/dist/pdf-parse/esm/imageresult.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/inforesult.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/loadparameters.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/parseparameters.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/screenshotresult.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/tableresult.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/textresult.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/pdfparse.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/exception.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/geometry/shape.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/geometry/point.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/geometry/line.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/geometry/rectangle.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/geometry/tabledata.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/geometry/table.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/geometry/linestore.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/geometry/index.d.ts","./node_modules/pdf-parse/dist/pdf-parse/esm/index.d.ts","./lib/centralbankgovernance.ts","./app/api/central-bank-sources/route.ts","./lib/constants.ts","./app/api/cot/route.ts","./app/api/cot-history/route.ts","./lib/tebonds.ts","./app/api/drivers/route.ts","./app/api/expectations/route.ts","./app/api/fx/route.ts","./app/api/fx-weekly/route.ts","./data/cpi_overrides.json","./data/money-supply-m3.json","./lib/tecpi.ts","./app/api/macro/route.ts","./node_modules/openai/_shims/manual-types.d.ts","./node_modules/openai/_shims/auto/types.d.ts","./node_modules/openai/streaming.d.ts","./node_modules/openai/error.d.ts","./node_modules/openai/_shims/multipartbody.d.ts","./node_modules/openai/uploads.d.ts","./node_modules/openai/core.d.ts","./node_modules/openai/_shims/index.d.ts","./node_modules/openai/pagination.d.ts","./node_modules/openai/resources/shared.d.ts","./node_modules/openai/resources/batches.d.ts","./node_modules/openai/resources/chat/completions/messages.d.ts","./node_modules/openai/resources/chat/completions/completions.d.ts","./node_modules/openai/resources/completions.d.ts","./node_modules/openai/resources/embeddings.d.ts","./node_modules/openai/resources/files.d.ts","./node_modules/openai/resources/images.d.ts","./node_modules/openai/resources/models.d.ts","./node_modules/openai/resources/moderations.d.ts","./node_modules/openai/resources/audio/speech.d.ts","./node_modules/openai/resources/audio/transcriptions.d.ts","./node_modules/openai/resources/audio/translations.d.ts","./node_modules/openai/resources/audio/audio.d.ts","./node_modules/openai/resources/beta/threads/messages.d.ts","./node_modules/openai/resources/beta/threads/runs/steps.d.ts","./node_modules/openai/resources/beta/threads/runs/runs.d.ts","./node_modules/openai/lib/eventstream.d.ts","./node_modules/openai/lib/assistantstream.d.ts","./node_modules/openai/resources/beta/threads/threads.d.ts","./node_modules/openai/resources/beta/assistants.d.ts","./node_modules/openai/resources/chat/completions.d.ts","./node_modules/openai/lib/abstractchatcompletionrunner.d.ts","./node_modules/openai/lib/chatcompletionstream.d.ts","./node_modules/openai/lib/responsesparser.d.ts","./node_modules/openai/resources/responses/input-items.d.ts","./node_modules/openai/lib/responses/eventtypes.d.ts","./node_modules/openai/lib/responses/responsestream.d.ts","./node_modules/openai/resources/responses/responses.d.ts","./node_modules/openai/lib/parser.d.ts","./node_modules/openai/lib/chatcompletionstreamingrunner.d.ts","./node_modules/openai/lib/jsonschema.d.ts","./node_modules/openai/lib/runnablefunction.d.ts","./node_modules/openai/lib/chatcompletionrunner.d.ts","./node_modules/openai/resources/beta/chat/completions.d.ts","./node_modules/openai/resources/beta/chat/chat.d.ts","./node_modules/openai/resources/beta/realtime/sessions.d.ts","./node_modules/openai/resources/beta/realtime/transcription-sessions.d.ts","./node_modules/openai/resources/beta/realtime/realtime.d.ts","./node_modules/openai/resources/beta/beta.d.ts","./node_modules/openai/resources/containers/files/content.d.ts","./node_modules/openai/resources/containers/files/files.d.ts","./node_modules/openai/resources/containers/containers.d.ts","./node_modules/openai/resources/graders/grader-models.d.ts","./node_modules/openai/resources/evals/runs/output-items.d.ts","./node_modules/openai/resources/evals/runs/runs.d.ts","./node_modules/openai/resources/evals/evals.d.ts","./node_modules/openai/resources/fine-tuning/methods.d.ts","./node_modules/openai/resources/fine-tuning/alpha/graders.d.ts","./node_modules/openai/resources/fine-tuning/alpha/alpha.d.ts","./node_modules/openai/resources/fine-tuning/checkpoints/permissions.d.ts","./node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.d.ts","./node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts","./node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts","./node_modules/openai/resources/fine-tuning/fine-tuning.d.ts","./node_modules/openai/resources/graders/graders.d.ts","./node_modules/openai/resources/uploads/parts.d.ts","./node_modules/openai/resources/uploads/uploads.d.ts","./node_modules/openai/resources/vector-stores/files.d.ts","./node_modules/openai/resources/vector-stores/file-batches.d.ts","./node_modules/openai/resources/vector-stores/vector-stores.d.ts","./node_modules/openai/index.d.ts","./node_modules/openai/resource.d.ts","./node_modules/openai/resources/chat/chat.d.ts","./node_modules/openai/resources/chat/completions/index.d.ts","./node_modules/openai/resources/chat/index.d.ts","./node_modules/openai/resources/index.d.ts","./node_modules/openai/index.d.mts","./app/api/narrative/route.ts","./lib/financialjuice.ts","./lib/newsfeed.ts","./app/api/news/route.ts","./app/api/rate-probabilities/route.ts","./app/api/sentiment/route.ts","./app/api/yields/route.ts","./lib/investing.ts","./lib/localcache.ts","./lib/scoring.ts","./app/layout.tsx","./node_modules/lucide-react/dist/lucide-react.d.ts","./node_modules/motion-utils/dist/index.d.ts","./node_modules/motion-dom/dist/index.d.ts","./node_modules/framer-motion/dist/index.d.ts","./node_modules/recharts/types/container/surface.d.ts","./node_modules/recharts/types/container/layer.d.ts","./node_modules/@types/d3-time/index.d.ts","./node_modules/@types/d3-scale/index.d.ts","./node_modules/victory-vendor/d3-scale.d.ts","./node_modules/recharts/types/cartesian/xaxis.d.ts","./node_modules/recharts/types/cartesian/yaxis.d.ts","./node_modules/recharts/types/util/types.d.ts","./node_modules/recharts/types/component/defaultlegendcontent.d.ts","./node_modules/recharts/types/util/payload/getuniqpayload.d.ts","./node_modules/recharts/types/component/legend.d.ts","./node_modules/recharts/types/component/defaulttooltipcontent.d.ts","./node_modules/recharts/types/component/tooltip.d.ts","./node_modules/recharts/types/component/responsivecontainer.d.ts","./node_modules/recharts/types/component/cell.d.ts","./node_modules/recharts/types/component/text.d.ts","./node_modules/recharts/types/component/label.d.ts","./node_modules/recharts/types/component/labellist.d.ts","./node_modules/recharts/types/component/customized.d.ts","./node_modules/recharts/types/shape/sector.d.ts","./node_modules/@types/d3-path/index.d.ts","./node_modules/@types/d3-shape/index.d.ts","./node_modules/victory-vendor/d3-shape.d.ts","./node_modules/recharts/types/shape/curve.d.ts","./node_modules/recharts/types/shape/rectangle.d.ts","./node_modules/recharts/types/shape/polygon.d.ts","./node_modules/recharts/types/shape/dot.d.ts","./node_modules/recharts/types/shape/cross.d.ts","./node_modules/recharts/types/shape/symbols.d.ts","./node_modules/recharts/types/polar/polargrid.d.ts","./node_modules/recharts/types/polar/polarradiusaxis.d.ts","./node_modules/recharts/types/polar/polarangleaxis.d.ts","./node_modules/recharts/types/polar/pie.d.ts","./node_modules/recharts/types/polar/radar.d.ts","./node_modules/recharts/types/polar/radialbar.d.ts","./node_modules/recharts/types/cartesian/brush.d.ts","./node_modules/recharts/types/util/ifoverflowmatches.d.ts","./node_modules/recharts/types/cartesian/referenceline.d.ts","./node_modules/recharts/types/cartesian/referencedot.d.ts","./node_modules/recharts/types/cartesian/referencearea.d.ts","./node_modules/recharts/types/cartesian/cartesianaxis.d.ts","./node_modules/recharts/types/cartesian/cartesiangrid.d.ts","./node_modules/recharts/types/cartesian/line.d.ts","./node_modules/recharts/types/cartesian/area.d.ts","./node_modules/recharts/types/util/barutils.d.ts","./node_modules/recharts/types/cartesian/bar.d.ts","./node_modules/recharts/types/cartesian/zaxis.d.ts","./node_modules/recharts/types/cartesian/errorbar.d.ts","./node_modules/recharts/types/cartesian/scatter.d.ts","./node_modules/recharts/types/util/getlegendprops.d.ts","./node_modules/recharts/types/util/chartutils.d.ts","./node_modules/recharts/types/chart/accessibilitymanager.d.ts","./node_modules/recharts/types/chart/types.d.ts","./node_modules/recharts/types/chart/generatecategoricalchart.d.ts","./node_modules/recharts/types/chart/linechart.d.ts","./node_modules/recharts/types/chart/barchart.d.ts","./node_modules/recharts/types/chart/piechart.d.ts","./node_modules/recharts/types/chart/treemap.d.ts","./node_modules/recharts/types/chart/sankey.d.ts","./node_modules/recharts/types/chart/radarchart.d.ts","./node_modules/recharts/types/chart/scatterchart.d.ts","./node_modules/recharts/types/chart/areachart.d.ts","./node_modules/recharts/types/chart/radialbarchart.d.ts","./node_modules/recharts/types/chart/composedchart.d.ts","./node_modules/recharts/types/chart/sunburstchart.d.ts","./node_modules/recharts/types/shape/trapezoid.d.ts","./node_modules/recharts/types/numberaxis/funnel.d.ts","./node_modules/recharts/types/chart/funnelchart.d.ts","./node_modules/recharts/types/util/global.d.ts","./node_modules/recharts/types/index.d.ts","./components/narrativebutton.tsx","./components/currencycard.tsx","./components/driversbar.tsx","./components/calendartab.tsx","./components/newstab.tsx","./components/cottab.tsx","./components/tvchart.tsx","./components/ideestab.tsx","./components/centralbanksourcestab.tsx","./app/page.tsx","./components/reporttab.tsx","./components/sentimentpairstab.tsx","./components/yieldstab.tsx","./.next/types/app/layout.ts","./.next/types/app/page.ts","./.next/types/app/api/calendar/route.ts","./.next/types/app/api/central-bank-sources/route.ts","./.next/types/app/api/cot/route.ts","./.next/types/app/api/drivers/route.ts","./.next/types/app/api/expectations/route.ts","./.next/types/app/api/fx/route.ts","./.next/types/app/api/rate-probabilities/route.ts","./.next/types/app/api/sentiment/route.ts","./.next/types/app/api/yields/route.ts","./node_modules/@types/d3-array/index.d.ts","./node_modules/@types/d3-color/index.d.ts","./node_modules/@types/d3-ease/index.d.ts","./node_modules/@types/d3-interpolate/index.d.ts","./node_modules/@types/d3-timer/index.d.ts","./node_modules/@types/json5/index.d.ts","./node_modules/form-data/index.d.ts","./node_modules/@types/node-fetch/externals.d.ts","./node_modules/@types/node-fetch/index.d.ts","./node_modules/@types/papaparse/index.d.ts"],"fileIdsList":[[99,145,403,443],[99,145,403,500],[99,145,403,502],[99,145,403,505],[99,145,403,506],[99,145,403,507],[99,145,403,594],[99,145,403,595],[99,145,403,596],[99,145,358,600],[99,145,358,684],[99,145,403,434,435,436,438,440,441,442],[99,145,403,499],[99,145,403,436,501],[99,145,192,403,436,501],[99,145,403,504],[99,145,157,166,403],[99,145,403],[99,145,403,434,435,436,442,501,509,510,511],[99,145,403,589],[99,145,403,592],[99,145,403,438],[99,145,396,406],[87,99,145,436,438,443,501,503,593,598,601,676,677,678,679,680,681,682,683],[87,99,145,443,501,601],[87,99,145,500,601,674],[87,99,145,436,501,503,601,674],[87,99,145,436,438,443,501,598,599,601,604,674,675],[87,99,145,197,198,199,436,601],[87,99,145,681],[87,99,145,436,601],[87,99,145,436,593,601],[87,99,145,436,443,501,503,508,601,681],[87,99,145,436,501],[87,99,145],[87,99,145,601],[99,145],[99,145,443],[99,145,434,436,442,498],[99,145,436],[99,145,592],[99,145,439,440,443],[99,145,436,442,443],[99,145,436,591],[99,145,157,166,436,437],[99,145,436,501],[99,145,436,439,440,441,443],[99,145,406,407],[99,145,700],[99,145,607],[99,145,625],[99,145,159,186,193,705,706],[99,142,145],[99,144,145],[145],[99,145,150,178],[99,145,146,151,156,164,175,186],[99,145,146,147,156,164],[94,95,96,99,145],[99,145,148,187],[99,145,149,150,157,165],[99,145,150,175,183],[99,145,151,153,156,164],[99,144,145,152],[99,145,153,154],[99,145,155,156],[99,144,145,156],[99,145,156,157,158,175,186],[99,145,156,157,158,171,175,178],[99,145,153,156,159,164,175,186],[99,145,156,157,159,160,164,175,183,186],[99,145,159,161,175,183,186],[97,98,99,100,101,102,103,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192],[99,145,156,162],[99,145,163,186,191],[99,145,153,156,164,175],[99,145,165],[99,145,166],[99,144,145,167],[99,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192],[99,145,169],[99,145,170],[99,145,156,171,172],[99,145,171,173,187,189],[99,145,156,175,176,178],[99,145,177,178],[99,145,175,176],[99,145,178],[99,145,179],[99,142,145,175,180],[99,145,156,181,182],[99,145,181,182],[99,145,150,164,175,183],[99,145,184],[99,145,164,185],[99,145,159,170,186],[99,145,150,187],[99,145,175,188],[99,145,163,189],[99,145,190],[99,140,145],[99,140,145,156,158,167,175,178,186,189,191],[99,145,175,192],[99,145,175,193],[87,99,145,197,198,199],[87,99,145,197,198],[87,91,99,145,196,359,402],[87,91,99,145,195,359,402],[84,85,86,99,145],[99,145,159,175,193],[87,99,145,285,602,603],[99,145,602],[92,99,145],[99,145,363],[99,145,365,366,367],[99,145,369],[99,145,202,212,218,220,359],[99,145,202,209,211,214,232],[99,145,212],[99,145,212,337],[99,145,266,284,299,405],[99,145,307],[99,145,202,212,219,252,262,334,335,405],[99,145,219,405],[99,145,212,262,263,264,405],[99,145,212,219,252,405],[99,145,405],[99,145,202,219,220,405],[99,145,292],[99,144,145,193,291],[87,99,145,285,286,287,304,305],[87,99,145,285],[99,145,275],[99,145,274,276,379],[87,99,145,285,286,302],[99,145,281,305,391],[99,145,389,390],[99,145,226,388],[99,145,278],[99,144,145,193,226,274,275,276,277],[87,99,145,302,304,305],[99,145,302,304],[99,145,302,303,305],[99,145,170,193],[99,145,273],[99,144,145,193,211,213,269,270,271,272],[87,99,145,203,382],[87,99,145,186,193],[87,99,145,219,250],[87,99,145,219],[99,145,248,253],[87,99,145,249,362],[87,91,99,145,159,193,195,196,359,400,401],[99,145,359],[99,145,201],[99,145,352,353,354,355,356,357],[99,145,354],[87,99,145,249,285,362],[87,99,145,285,360,362],[87,99,145,285,362],[99,145,159,193,213,362],[99,145,159,193,210,211,222,240,273,278,279,301,302],[99,145,270,273,278,286,288,289,290,292,293,294,295,296,297,298,405],[99,145,271],[87,99,145,170,193,211,212,240,242,244,269,301,305,359,405],[99,145,159,193,213,214,226,227,274],[99,145,159,193,212,214],[99,145,159,175,193,210,213,214],[99,145,159,170,186,193,210,211,212,213,214,219,222,223,233,234,236,239,240,242,243,244,268,269,302,310,312,315,317,320,322,323,324,325],[99,145,202,203,204,210,211,359,362,405],[99,145,159,175,186,193,207,336,338,339,405],[99,145,170,186,193,207,210,213,230,234,236,237,238,242,269,315,326,328,334,348,349],[99,145,212,216,269],[99,145,210,212],[99,145,223,316],[99,145,318,319],[99,145,318],[99,145,316],[99,145,318,321],[99,145,206,207],[99,145,206,245],[99,145,206],[99,145,208,223,314],[99,145,313],[99,145,207,208],[99,145,208,311],[99,145,207],[99,145,301],[99,145,159,193,210,222,241,260,266,280,283,300,302],[99,145,254,255,256,257,258,259,281,282,305,360],[99,145,309],[99,145,159,193,210,222,241,246,306,308,310,359,362],[99,145,159,186,193,203,210,212,268],[99,145,265],[99,145,159,193,342,347],[99,145,233,268,362],[99,145,330,334,348,351],[99,145,159,216,334,342,343,351],[99,145,202,212,233,243,345],[99,145,159,193,212,219,243,329,330,340,341,344,346],[99,145,194,240,241,359,362],[99,145,159,170,186,193,208,210,211,213,216,221,222,230,233,234,236,237,238,239,242,244,268,269,312,326,327,362],[99,145,159,193,210,212,216,328,350],[99,145,159,193,211,213],[87,99,145,159,170,193,201,203,210,211,214,222,239,240,242,244,309,359,362],[99,145,159,170,186,193,205,208,209,213],[99,145,206,267],[99,145,159,193,206,211,222],[99,145,159,193,212,223],[99,145,159,193],[99,145,226],[99,145,225],[99,145,227],[99,145,212,224,226,230],[99,145,212,224,226],[99,145,159,193,205,212,213,219,227,228,229],[87,99,145,302,303,304],[99,145,261],[87,99,145,203],[87,99,145,236],[87,99,145,194,239,244,359,362],[99,145,203,382,383],[87,99,145,253],[87,99,145,170,186,193,201,247,249,251,252,362],[99,145,213,219,236],[99,145,235],[87,99,145,157,159,170,193,201,253,262,359,360,361],[83,87,88,89,90,99,145,195,196,359,402],[99,145,150],[99,145,331,332,333],[99,145,331],[99,145,371],[99,145,373],[99,145,375],[99,145,377],[99,145,380],[99,145,384],[91,93,99,145,359,364,368,370,372,374,376,378,381,385,387,393,394,396,403,404,405],[99,145,386],[99,145,392],[99,145,249],[99,145,395],[99,144,145,227,228,229,230,397,398,399,402],[99,145,193],[87,91,99,145,159,161,170,193,195,196,197,199,201,214,351,358,362,402],[99,145,513,514,519],[99,145,515,516,518,520],[99,145,519],[99,145,516,518,519,520,521,523,525,526,527,528,529,530,531,535,550,561,564,568,576,577,579,582,585,588],[99,145,519,526,539,543,552,554,555,556,583],[99,145,519,520,536,537,538,539,541,542],[99,145,543,544,551,554,583],[99,145,519,520,525,544,556,583],[99,145,520,543,544,545,551,554,583],[99,145,516],[99,145,522,543,550,556],[99,145,550],[99,145,519,539,546,548,550,583],[99,145,543,550,551],[99,145,552,553,555],[99,145,583],[99,145,532,533,534,584],[99,145,519,520,584],[99,145,515,519,533,535,584],[99,145,519,533,535,584],[99,145,519,521,522,523,584],[99,145,519,521,522,536,537,538,540,541,584],[99,145,541,542,557,560,584],[99,145,556,584],[99,145,519,543,544,545,551,552,554,555,584],[99,145,522,558,559,560,584],[99,145,519,584],[99,145,519,521,522,542,584],[99,145,515,519,521,522,536,537,538,540,541,542,584],[99,145,519,521,522,537,584],[99,145,515,519,522,536,538,540,541,542,584],[99,145,522,525,584],[99,145,525],[99,145,515,519,521,522,524,525,526,584],[99,145,524,525],[99,145,519,521,525,584],[99,145,585,586],[99,145,515,519,525,526,584],[99,145,519,521,563,584],[99,145,519,521,562,584],[99,145,519,521,522,550,565,567,584],[99,145,519,521,567,584],[99,145,519,521,522,550,566,584],[99,145,519,520,521,584],[99,145,570,584],[99,145,519,565,584],[99,145,572,584],[99,145,519,521,584],[99,145,569,571,573,575,584],[99,145,519,521,569,574,584],[99,145,565,584],[99,145,550,584],[99,145,522,523,526,527,528,529,530,531,535,550,561,564,568,576,577,579,582,587],[99,145,519,521,550,584],[99,145,515,519,521,522,546,547,549,550,584],[99,145,519,528,578,584],[99,145,519,521,580,582,584],[99,145,519,521,582,584],[99,145,519,521,522,580,581,584],[99,145,520],[99,145,517,519,520],[99,145,490,491,492,493,495,496],[99,145,490,491],[99,145,492,493,494,495],[99,145,490],[99,145,490,491,492],[99,145,492,494],[99,145,491],[99,145,480],[99,145,480,481,482,483,484,485,486,487,488,489,497],[99,145,461],[99,145,464],[99,145,481,482,483,484,485,486,487],[99,145,479],[99,145,457,458,460,464,465,466,467],[99,145,457,459,460,461,462,463],[99,145,445,448,449,450,454,455,456,457,458,465,468,469],[99,145,448],[99,145,452],[99,145,453],[99,145,445,446,447,470],[99,145,448,470],[99,145,451,453],[99,145,457,464],[99,145,457,460,465],[99,145,444,445,457,464,468,469,470,471,472,473,474,475,476,477,478],[99,145,444],[99,145,424],[99,145,422,424],[99,145,413,421,422,423,425,427],[99,145,411],[99,145,414,419,424,427],[99,145,410,427],[99,145,414,415,418,419,420,427],[99,145,414,415,416,418,419,427],[99,145,411,412,413,414,415,419,420,421,423,424,425,427],[99,145,427],[99,145,409,411,412,413,414,415,416,418,419,420,421,422,423,424,425,426],[99,145,409,427],[99,145,414,416,417,419,420,427],[99,145,418,427],[99,145,419,420,424,427],[99,145,412,422],[87,99,145,610,611,612,628,631],[87,99,145,610,611,612,621,629,649],[87,99,145,609,612],[87,99,145,612],[87,99,145,610,611,612],[87,99,145,610,611,612,647,650,653],[87,99,145,610,611,612,621,628,631],[87,99,145,610,611,612,621,629,641],[87,99,145,610,611,612,621,631,641],[87,99,145,610,611,612,621,641],[87,99,145,610,611,612,616,622,628,633,651,652],[99,145,612],[87,99,145,612,656,657,658],[87,99,145,612,655,656,657],[87,99,145,612,629],[87,99,145,612,655],[87,99,145,612,621],[87,99,145,612,613,614],[87,99,145,612,614,616],[99,145,605,606,610,611,612,613,615,616,617,618,619,620,621,622,623,624,628,629,630,631,632,633,634,635,636,637,638,639,640,642,643,644,645,646,647,648,650,651,652,653,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673],[87,99,145,612,670],[87,99,145,612,624],[87,99,145,612,631,635,636],[87,99,145,612,622,624],[87,99,145,612,627],[87,99,145,612,650],[87,99,145,612,627,654],[87,99,145,615,655],[87,99,145,609,610,611],[99,145,429,430],[99,145,428,431],[99,112,116,145,186],[99,112,145,175,186],[99,107,145],[99,109,112,145,183,186],[99,145,164,183],[99,107,145,193],[99,109,112,145,164,186],[99,104,105,108,111,145,156,175,186],[99,112,119,145],[99,104,110,145],[99,112,133,134,145],[99,108,112,145,178,186,193],[99,133,145,193],[99,106,107,145,193],[99,112,145],[99,106,107,108,109,110,111,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,136,137,138,139,145],[99,112,127,145],[99,112,119,120,145],[99,110,112,120,121,145],[99,111,145],[99,104,107,112,145],[99,112,116,120,121,145],[99,116,145],[99,110,112,115,145,186],[99,104,109,112,119,145],[99,145,175],[99,107,112,133,145,191,193],[99,145,608],[99,145,626],[99,145,432]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0990a7576222f248f0a3b888adcb7389f957928ce2afb1cd5128169086ff4d29","impliedFormat":1},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"f5977813ad5baf0c16eb027f2474cd8c8adea5d94fb595141ce3478efd8ac7c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc69795d9954ee4ad57545b10c7bf1a7260d990231b1685c147ea71a6faa265c","impliedFormat":1},{"version":"8bc6c94ff4f2af1f4023b7bb2379b08d3d7dd80c698c9f0b07431ea16101f05f","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"57194e1f007f3f2cbef26fa299d4c6b21f4623a2eddc63dfeef79e38e187a36e","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"2de7636e6fbb9e54a61a38bcb7505b94ec5be61197fe9e840cff629ca920c4bc","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"8caa5c86be1b793cd5f599e27ecb34252c41e011980f7d61ae4989a149ff6ccc","impliedFormat":1},{"version":"f9fd93190acb1ffe0bc0fb395df979452f8d625071e9ffc8636e4dfb86ab2508","impliedFormat":1},{"version":"5f41fd8732a89e940c58ce22206e3df85745feb8983e2b4c6257fb8cbb118493","impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"1cfa8647d7d71cb03847d616bd79320abfc01ddea082a49569fda71ac5ece66b","impliedFormat":1},{"version":"bb7a61dd55dc4b9422d13da3a6bb9cc5e89be888ef23bbcf6558aa9726b89a1c","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"cfe4ef4710c3786b6e23dae7c086c70b4f4835a2e4d77b75d39f9046106e83d3","impliedFormat":1},{"version":"cbea99888785d49bb630dcbb1613c73727f2b5a2cf02e1abcaab7bcf8d6bf3c5","impliedFormat":1},{"version":"98817124fd6c4f60e0b935978c207309459fb71ab112cf514f26f333bf30830e","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"2dad084c67e649f0f354739ec7df7c7df0779a28a4f55c97c6b6883ae850d1ce","impliedFormat":1},{"version":"fa5bbc7ab4130dd8cdc55ea294ec39f76f2bc507a0f75f4f873e38631a836ca7","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"cf86de1054b843e484a3c9300d62fbc8c97e77f168bbffb131d560ca0474d4a8","impliedFormat":1},{"version":"196c960b12253fde69b204aa4fbf69470b26daf7a430855d7f94107a16495ab0","impliedFormat":1},{"version":"fb760b3dded1fadb56c3dde1992b6068bb64d65c4d60d65dc93659f5f44ccddf","impliedFormat":1},{"version":"bf24f6d35f7318e246010ffe9924395893c4e96d34324cde77151a73f078b9ad","impliedFormat":1},{"version":"596ccf4070268c4f5a8c459d762d8a934fa9b9317c7bf7a953e921bc9d78ce3c","impliedFormat":1},{"version":"10595c7ff5094dd5b6a959ccb1c00e6a06441b4e10a87bc09c15f23755d34439","impliedFormat":1},{"version":"9620c1ff645afb4a9ab4044c85c26676f0a93e8c0e4b593aea03a89ccb47b6d0","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"a9af0e608929aaf9ce96bd7a7b99c9360636c31d73670e4af09a09950df97841","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"08ed0b3f0166787f84a6606f80aa3b1388c7518d78912571b203817406e471da","impliedFormat":1},{"version":"47e5af2a841356a961f815e7c55d72554db0c11b4cba4d0caab91f8717846a94","impliedFormat":1},{"version":"9a1a0dc84fecc111e83281743f003e1ae9048e0f83c2ae2028d17bc58fd93cc7","impliedFormat":1},{"version":"f5f541902bf7ae0512a177295de9b6bcd6809ea38307a2c0a18bfca72212f368","impliedFormat":1},{"version":"e8da637cbd6ed1cf6c36e9424f6bcee4515ca2c677534d4006cbd9a05f930f0c","impliedFormat":1},{"version":"ca1b882a105a1972f82cc58e3be491e7d750a1eb074ffd13b198269f57ed9e1b","impliedFormat":1},{"version":"fc3e1c87b39e5ba1142f27ec089d1966da168c04a859a4f6aab64dceae162c2b","impliedFormat":1},{"version":"3867ca0e9757cc41e04248574f4f07b8f9e3c0c2a796a5eb091c65bfd2fc8bdb","impliedFormat":1},{"version":"61888522cec948102eba94d831c873200aa97d00d8989fdfd2a3e0ee75ec65a2","impliedFormat":1},{"version":"4e10622f89fea7b05dd9b52fb65e1e2b5cbd96d4cca3d9e1a60bb7f8a9cb86a1","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"59bf32919de37809e101acffc120596a9e45fdbab1a99de5087f31fdc36e2f11","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"3df3abb3e7c1a74ab419f95500a998b55dd9bc985e295de96ff315dd94c7446f","impliedFormat":1},{"version":"c40c848daad198266370c1c72a7a8c3d18d2f50727c7859fcfefd3ff69a7f288","impliedFormat":1},{"version":"ac60bbee0d4235643cc52b57768b22de8c257c12bd8c2039860540cab1fa1d82","impliedFormat":1},{"version":"973b59a17aaa817eb205baf6c132b83475a5c0a44e8294a472af7793b1817e89","impliedFormat":1},{"version":"ada39cbb2748ab2873b7835c90c8d4620723aedf323550e8489f08220e477c7f","impliedFormat":1},{"version":"6e5f5cee603d67ee1ba6120815497909b73399842254fc1e77a0d5cdc51d8c9c","impliedFormat":1},{"version":"8dba67056cbb27628e9b9a1cba8e57036d359dceded0725c72a3abe4b6c79cd4","impliedFormat":1},{"version":"70f3814c457f54a7efe2d9ce9d2686de9250bb42eb7f4c539bd2280a42e52d33","impliedFormat":1},{"version":"5cbd32af037805215112472e35773bad9d4e03f0e72b1129a0d0c12d9cd63cc7","impliedFormat":1},{"version":"ef61792acbfa8c27c9bd113f02731e66229f7d3a169e3c1993b508134f1a58e0","impliedFormat":1},{"version":"afcb759e8e3ad6549d5798820697002bc07bdd039899fad0bf522e7e8a9f5866","impliedFormat":1},{"version":"f6404e7837b96da3ea4d38c4f1a3812c96c9dcdf264e93d5bdb199f983a3ef4b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"566e5fb812082f8cf929c6727d40924843246cf19ee4e8b9437a6315c4792b03","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"903e299a28282fa7b714586e28409ed73c3b63f5365519776bf78e8cf173db36","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"dd3900b24a6a8745efeb7ad27629c0f8a626470ac229c1d73f1fe29d67e44dca","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"ec29be0737d39268696edcec4f5e97ce26f449fa9b7afc2f0f99a86def34a418","impliedFormat":1},{"version":"68a06fb972b2c7e671bf090dc5a5328d22ba07d771376c3d9acd9e7ed786a9db","impliedFormat":1},{"version":"ec6cba1c02c675e4dd173251b156792e8d3b0c816af6d6ad93f1a55d674591aa","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"d729408dfde75b451530bcae944cf89ee8277e2a9df04d1f62f2abfd8b03c1e1","impliedFormat":1},{"version":"e15d3c84d5077bb4a3adee4c791022967b764dc41cb8fa3cfa44d4379b2c95f5","impliedFormat":1},{"version":"78244a2a8ab1080e0dd8fc3633c204c9a4be61611d19912f4b157f7ef7367049","impliedFormat":1},{"version":"e1fc1a1045db5aa09366be2b330e4ce391550041fc3e925f60998ca0b647aa97","impliedFormat":1},{"version":"73636e5e138db738b0e1e00c17bcd688c45eead3798d0d585e0bd9ff98262ebe","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"31fb49ef3aa3d76f0beb644984e01eab0ea222372ea9b49bb6533be5722d756c","impliedFormat":1},{"version":"33cd131e1461157e3e06b06916b5176e7a8ec3fce15a5cfe145e56de744e07d2","impliedFormat":1},{"version":"889ef863f90f4917221703781d9723278db4122d75596b01c429f7c363562b86","impliedFormat":1},{"version":"3556cfbab7b43da96d15a442ddbb970e1f2fc97876d055b6555d86d7ac57dae5","impliedFormat":1},{"version":"437751e0352c6e924ddf30e90849f1d9eb00ca78c94d58d6a37202ec84eb8393","impliedFormat":1},{"version":"48e8af7fdb2677a44522fd185d8c87deff4d36ee701ea003c6c780b1407a1397","impliedFormat":1},{"version":"d11308de5a36c7015bb73adb5ad1c1bdaac2baede4cc831a05cf85efa3cc7f2f","impliedFormat":1},{"version":"8c9f19c480c747b6d8067c53fcc3cef641619029afb0a903672daed3f5acaed2","impliedFormat":1},{"version":"f9812cfc220ecf7557183379531fa409acd249b9e5b9a145d0d52b76c20862de","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b068371563d0396a065ed64b049cffeb4eed89ad433ae7730fc31fb1e00ebf3","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"680793958f6a70a44c8d9ae7d46b7a385361c69ac29dcab3ed761edce1c14ab8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"913ddbba170240070bd5921b8f33ea780021bdf42fbdfcd4fcb2691b1884ddde","impliedFormat":1},{"version":"74c105214ddd747037d2a75da6588ec8aa1882f914e1f8a312c528f86feca2b9","impliedFormat":1},{"version":"5fe23bd829e6be57d41929ac374ee9551ccc3c44cee893167b7b5b77be708014","impliedFormat":1},{"version":"4d85f80132e24d9a5b5c5e0734e4ecd6878d8c657cc990ecc70845ef384ca96f","impliedFormat":1},{"version":"438c7513b1df91dcef49b13cd7a1c4720f91a36e88c1df731661608b7c055f10","impliedFormat":1},{"version":"cf185cc4a9a6d397f416dd28cca95c227b29f0f27b160060a95c0e5e36cda865","impliedFormat":1},{"version":"0086f3e4ad898fd7ca56bb223098acfacf3fa065595182aaf0f6c4a6a95e6fbd","impliedFormat":1},{"version":"efaa078e392f9abda3ee8ade3f3762ab77f9c50b184e6883063a911742a4c96a","impliedFormat":1},{"version":"54a8bb487e1dc04591a280e7a673cdfb272c83f61e28d8a64cf1ac2e63c35c51","impliedFormat":1},{"version":"021a9498000497497fd693dd315325484c58a71b5929e2bbb91f419b04b24cea","impliedFormat":1},{"version":"9385cdc09850950bc9b59cca445a3ceb6fcca32b54e7b626e746912e489e535e","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"84124384abae2f6f66b7fbfc03862d0c2c0b71b826f7dbf42c8085d31f1d3f95","impliedFormat":1},{"version":"63a8e96f65a22604eae82737e409d1536e69a467bb738bec505f4f97cce9d878","impliedFormat":1},{"version":"3fd78152a7031315478f159c6a5872c712ece6f01212c78ea82aef21cb0726e2","impliedFormat":1},{"version":"3a6ed8e1d630cfa1f7edf0dc46a6e20ca6c714dbe754409699008571dfe473a6","impliedFormat":1},{"version":"512fc15cca3a35b8dbbf6e23fe9d07e6f87ad03c895acffd3087ce09f352aad0","impliedFormat":1},{"version":"9a0946d15a005832e432ea0cd4da71b57797efb25b755cc07f32274296d62355","impliedFormat":1},{"version":"a52ff6c0a149e9f370372fc3c715d7f2beee1f3bab7980e271a7ab7d313ec677","impliedFormat":1},{"version":"fd933f824347f9edd919618a76cdb6a0c0085c538115d9a287fa0c7f59957ab3","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"6a1aa3e55bdc50503956c5cd09ae4cd72e3072692d742816f65c66ca14f4dfdd","impliedFormat":1},{"version":"ab75cfd9c4f93ffd601f7ca1753d6a9d953bbedfbd7a5b3f0436ac8a1de60dfa","impliedFormat":1},{"version":"59c68235df3905989afa0399381c1198313aaaf1ed387f57937eb616625dff15","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"1364f64d2fb03bbb514edc42224abd576c064f89be6a990136774ecdd881a1da","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"950fb67a59be4c2dbe69a5786292e60a5cb0e8612e0e223537784c731af55db1","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"07ca44e8d8288e69afdec7a31fa408ce6ab90d4f3d620006701d5544646da6aa","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"4e4475fba4ed93a72f167b061cd94a2e171b82695c56de9899275e880e06ba41","impliedFormat":1},{"version":"97c5f5d580ab2e4decd0a3135204050f9b97cd7908c5a8fbc041eadede79b2fa","impliedFormat":1},{"version":"c99a3a5f2215d5b9d735aa04cec6e61ed079d8c0263248e298ffe4604d4d0624","impliedFormat":1},{"version":"49b2375c586882c3ac7f57eba86680ff9742a8d8cb2fe25fe54d1b9673690d41","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b98ce74c2bc49a9b79408f049c49909190c747b0462e78f91c09618da86bae53","impliedFormat":1},{"version":"3ecfccf916fea7c6c34394413b55eb70e817a73e39b4417d6573e523784e3f8e","impliedFormat":1},{"version":"c05bc82af01e673afc99bdffd4ebafde22ab027d63e45be9e1f1db3bc39e2fc0","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"f416c9c3eee9d47ff49132c34f96b9180e50485d435d5748f0e8b72521d28d2e","impliedFormat":1},{"version":"05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","impliedFormat":1},{"version":"14e5cdec6f8ae82dfd0694e64903a0a54abdfe37e1d966de3d4128362acbf35f","impliedFormat":1},{"version":"bbc183d2d69f4b59fd4dd8799ffdf4eb91173d1c4ad71cce91a3811c021bf80c","impliedFormat":1},{"version":"7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","impliedFormat":1},{"version":"8dbc4134a4b3623fc476be5f36de35c40f2768e2e3d9ed437e0d5f1c4cd850f6","impliedFormat":1},{"version":"4e06330a84dec7287f7ebdd64978f41a9f70a668d3b5edc69d5d4a50b9b376bb","impliedFormat":1},{"version":"65bfa72967fbe9fc33353e1ac03f0480aa2e2ea346d61ff3ea997dfd850f641a","impliedFormat":1},{"version":"8f88c6be9803fe5aaa80b00b27f230c824d4b8a33856b865bea5793cb52bb797","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"872caaa31423f4345983d643e4649fb30f548e9883a334d6d1c5fff68ede22d4","impliedFormat":1},{"version":"94404c4a878fe291e7578a2a80264c6f18e9f1933fbb57e48f0eb368672e389c","impliedFormat":1},{"version":"5c1b7f03aa88be854bc15810bfd5bd5a1943c5a7620e1c53eddd2a013996343e","impliedFormat":1},{"version":"09dfc64fcd6a2785867f2368419859a6cc5a8d4e73cbe2538f205b1642eb0f51","impliedFormat":1},{"version":"bcf6f0a323653e72199105a9316d91463ad4744c546d1271310818b8cef7c608","impliedFormat":1},{"version":"01aa917531e116485beca44a14970834687b857757159769c16b228eb1e49c5f","impliedFormat":1},{"version":"351475f9c874c62f9b45b1f0dc7e2704e80dfd5f1af83a3a9f841f9dfe5b2912","impliedFormat":1},{"version":"ac457ad39e531b7649e7b40ee5847606eac64e236efd76c5d12db95bf4eacd17","impliedFormat":1},{"version":"187a6fdbdecb972510b7555f3caacb44b58415da8d5825d03a583c4b73fde4cf","impliedFormat":1},{"version":"d4c3250105a612202289b3a266bb7e323db144f6b9414f9dea85c531c098b811","impliedFormat":1},{"version":"95b444b8c311f2084f0fb51c616163f950fb2e35f4eaa07878f313a2d36c98a4","impliedFormat":1},{"version":"741067675daa6d4334a2dc80a4452ca3850e89d5852e330db7cb2b5f867173b1","impliedFormat":1},{"version":"f8acecec1114f11690956e007d920044799aefeb3cece9e7f4b1f8a1d542b2c9","impliedFormat":1},{"version":"131b1475d2045f20fb9f43b7aa6b7cb51f25250b5e4c6a1d4aa3cf4dd1a68793","impliedFormat":1},{"version":"3a17f09634c50cce884721f54fd9e7b98e03ac505889c560876291fcf8a09e90","impliedFormat":1},{"version":"32531dfbb0cdc4525296648f53b2b5c39b64282791e2a8c765712e49e6461046","impliedFormat":1},{"version":"0ce1b2237c1c3df49748d61568160d780d7b26693bd9feb3acb0744a152cd86d","impliedFormat":1},{"version":"e489985388e2c71d3542612685b4a7db326922b57ac880f299da7026a4e8a117","impliedFormat":1},{"version":"e1437c5f191edb7a494f7bbbc033b97d72d42e054d521402ee194ac5b6b7bf49","impliedFormat":1},{"version":"04d3aad777b6af5bd000bfc409907a159fe77e190b9d368da4ba649cdc28d39e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fd1b9d883b9446f1e1da1e1033a6a98995c25fbf3c10818a78960e2f2917d10c","impliedFormat":1},{"version":"19252079538942a69be1645e153f7dbbc1ef56b4f983c633bf31fe26aeac32cd","impliedFormat":1},{"version":"bc11f3ac00ac060462597add171220aed628c393f2782ac75dd29ff1e0db871c","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"3b0b1d352b8d2e47f1c4df4fb0678702aee071155b12ef0185fce9eb4fa4af1e","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"a344403e7a7384e0e7093942533d309194ad0a53eca2a3100c0b0ab4d3932773","impliedFormat":1},{"version":"b7fff2d004c5879cae335db8f954eb1d61242d9f2d28515e67902032723caeab","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"bb18bf4a61a17b4a6199eb3938ecfa4a59eb7c40843ad4a82b975ab6f7e3d925","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"e9b6fc05f536dfddcdc65dbcf04e09391b1c968ab967382e48924f5cb90d88e1","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"2b664c3cc544d0e35276e1fb2d4989f7d4b4027ffc64da34ec83a6ccf2e5c528","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"3cd8f0464e0939b47bfccbb9bb474a6d87d57210e304029cd8eb59c63a81935d","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"3026abd48e5e312f2328629ede6e0f770d21c3cd32cee705c450e589d015ee09","impliedFormat":1},{"version":"8b140b398a6afbd17cc97c38aea5274b2f7f39b1ae5b62952cfe65bf493e3e75","impliedFormat":1},{"version":"7663d2c19ce5ef8288c790edba3d45af54e58c84f1b37b1249f6d49d962f3d91","impliedFormat":1},{"version":"30112425b2cf042fca1c79c19e35f88f44bfb2e97454527528cd639dd1a460ca","impliedFormat":1},{"version":"00bd6ebe607246b45296aa2b805bd6a58c859acecda154bfa91f5334d7c175c6","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"504f37ba38bfea8394ec4f397c9a2ade7c78055e41ef5a600073b515c4fd0fc9","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"87ac2fb61e629e777f4d161dff534c2023ee15afd9cb3b1589b9b1f014e75c58","impliedFormat":1},{"version":"13c8b4348db91e2f7d694adc17e7438e6776bc506d5c8f5de9ad9989707fa3fe","impliedFormat":1},{"version":"3c1051617aa50b38e9efaabce25e10a5dd9b1f42e372ef0e8a674076a68742ed","impliedFormat":1},{"version":"07a3e20cdcb0f1182f452c0410606711fbea922ca76929a41aacb01104bc0d27","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"4cd4b6b1279e9d744a3825cbd7757bbefe7f0708f3f1069179ad535f19e8ed2c","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"c0eeaaa67c85c3bb6c52b629ebbfd3b2292dc67e8c0ffda2fc6cd2f78dc471e6","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"b95a6f019095dd1d48fd04965b50dfd63e5743a6e75478343c46d2582a5132bf","impliedFormat":99},{"version":"c2008605e78208cfa9cd70bd29856b72dda7ad89df5dc895920f8e10bcb9cd0a","impliedFormat":99},{"version":"b97cb5616d2ab82a98ec9ada7b9e9cabb1f5da880ec50ea2b8dc5baa4cbf3c16","impliedFormat":99},{"version":"d23df9ff06ae8bf1dcb7cc933e97ae7da418ac77749fecee758bb43a8d69f840","affectsGlobalScope":true,"impliedFormat":1},{"version":"040c71dde2c406f869ad2f41e8d4ce579cc60c8dbe5aa0dd8962ac943b846572","affectsGlobalScope":true,"impliedFormat":1},{"version":"3586f5ea3cc27083a17bd5c9059ede9421d587286d5a47f4341a4c2d00e4fa91","impliedFormat":1},{"version":"a6df929821e62f4719551f7955b9f42c0cd53c1370aec2dd322e24196a7dfe33","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"8964d295a9047c3a222af813b7d37deb57b835fd0942d89222e7def0aed136cc",{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"52dcc257df5119fb66d864625112ce5033ac51a4c2afe376a0b299d2f7f76e4a","impliedFormat":1},{"version":"e5bab5f871ef708d52d47b3e5d0aa72a08ee7a152f33931d9a60809711a2a9a3","impliedFormat":1},{"version":"e16dc2a81595736024a206c7d5c8a39bfe2e6039208ef29981d0d95434ba8fcf","impliedFormat":1},{"version":"cc4a4903fb698ca1d961d4c10dce658aa3a479faf40509d526f122b044eaf6a4","impliedFormat":1},{"version":"19ee8416e6473ed6c7adb868fa796b5653cf0fa2a337658e677eaa0d134388c3","impliedFormat":1},{"version":"1328ab4e442614b28cdb3d4b414cf68325c0da0dca07287a338d0654b7a00261","impliedFormat":1},{"version":"a039dc21f045919f3cbee2ec13812cc6cc3eebc99dae4be00973230f468d19a6","impliedFormat":1},{"version":"3fbe57af01460e49dcd29df55d6931e1672bc6f1be0fb073d11410bc16f9037d","impliedFormat":1},{"version":"f760be449e8562ec5c09bb5187e8e1eabf3c113c0c58cddda53ef8c69f3e2131","impliedFormat":1},{"version":"44325ed13294fce6ab825b82947bbeed2611db7dad9d9135260192f375e5a189","impliedFormat":1},{"version":"e392e8fb5b514eafc585601c1d781485aa6dd6a320e75daf1064a4c6918a1b45","impliedFormat":1},{"version":"46e4a36e8ddbdfb4e7330e11c81c970dc8b218611df9183d39c41c5f8c653b55","impliedFormat":1},{"version":"370bde134aa8c2abc926d0e99d3a4d5d5dba65c6ee65459137e4f02670cbf841","impliedFormat":1},{"version":"6332f565867cf4a740a70e30f31cefba37ef7cebcf74f22eab8d744fde6d193e","impliedFormat":1},{"version":"2977b7884aedc895a1d0c9c210c7cf3272c29d6959a08a6fa3ff71e0aff08175","impliedFormat":1},{"version":"17f2922d41ddd032830a91371c948cd9ce903b35c95adca72271a54584f19b0b","impliedFormat":1},{"version":"3eed76ede2a1a14d7c9bb0a642041282dcc264811139d3dd275c9fe14efc9840","impliedFormat":1},{"version":"e3cf0611709328b449ec13f8c436712d62003620ce480139fae46ce001c2ee9f","impliedFormat":1},{"version":"8d369483f0c2b9ee388129cfdb6a43bc8112b377e86a41884bd06e19ce04f4c1","impliedFormat":99},{"version":"b558c9a18ea4e6e4157124465c3ef1063e64640da139e67be5edb22f534f2f08","impliedFormat":1},{"version":"01374379f82be05d25c08d2f30779fa4a4c41895a18b93b33f14aeef51768692","impliedFormat":1},{"version":"b0dee183d4e65cf938242efaf3d833c6b645afb35039d058496965014f158141","impliedFormat":1},{"version":"c0bbbf84d3fbd85dd60d040c81e8964cc00e38124a52e9c5dcdedf45fea3f213","impliedFormat":1},{"version":"e623b43abceda24c4ee63a29080fd47c862d4830f41f5a50a6b062ddeb1d8d42","signature":"f65ce75c9085571e6321abf2bf9833709f4897e381f89e9925521833dbb7ab16"},{"version":"2e9dcbcfb0bc8bd3e03494d953693407cecd617a19988baa29f829a72bf5a59a","signature":"da9e92a89a5ca60d3ae6d05eaf45a83a23040e349c2171c668e7c1f919039978"},{"version":"403fe1e59f4c60eb16b5d970588097df26b5e41356508266894c63dc85251204","signature":"193b239dd35106db13bb40d9f86a2d390ca4e0cec0fee8dd591a59557afdc338"},{"version":"0d950e23c64c8f62c9c457f1246ae9014b9b91ae256c6123bdba86ca0d005950","signature":"0eb111c155b510d10e38765be0332cedd36e1e6d9088b1027658723ba2598642"},{"version":"3a27c1ed977d0217664588af5b8cdd88b1288466731587dc6049dd7c67e1d3fa","signature":"7aa0c189ca18eec1ced783b350a5a4802d05f1d023405f036b7475c70618346f"},"88f9597afde538f64e2d4d75807b556259034438871639181c21cc5df7ca9f65",{"version":"4dfa6f79caf5057665b5ec9e4328faf7fa832b09e1caf7b6286e6f86696878cf","signature":"06ba54a1e6f9b795bb2ba2c97610ede548cb59322128e669e614195b27089fc3"},"0b29ed1b07b650d14b2def5e31e56b8f18097dceb68af25b08cf7e23af50c38b","8e3194cdb0031bf6beccfb3b3ccfd0399df3958857b769fd777c8eb1f9eee4af",{"version":"883c01416871e7314a7716ad7cb0734bf22110944966cc8ee5c3527104ac33ae","signature":"51499a5071e7dc089fe788eafd90eada66475515b7ff4101c23274316739f1a9"},"0550839ff47658c61636938116b42902a3cb64001ac2aef5ad0a2e89028c9f2e",{"version":"2cc32cef1ae0e118f95d4bd7f0c2e8234401c53e483db1cdcdba8ef9459a378e","impliedFormat":1},{"version":"57e998fc9e7271711aa981892e2eefda24b79a0d60517bd193d8096fe605067b","impliedFormat":1},{"version":"60217ee6f9bdcfd23ef32ffeee3fc08951b3c4d1ffbcf9ad4955b662a67335c5","impliedFormat":1},{"version":"bc9e11b8e0cfd5abdd9c05ce17a42a6952a9f34a696bb51a05fff083dd9da000","impliedFormat":1},{"version":"6a242c69d6d07436856151059357739a2fba91ac954a7181e4e0027b7c603559","impliedFormat":1},{"version":"0c00a6db081a75e25a2ca207652e9e9e7b073ebb36a1e146d13fc198fb24de76","impliedFormat":1},{"version":"63fa9909c820305c84b4afa63017b3ba17eb5cd0f57633d2609a15e4bb7a7f72","impliedFormat":1},{"version":"54d979669cb741b26157c916692459ce998afa7969aef138296156bad2fe8272","impliedFormat":1},{"version":"32b789a883704fb6be047f8a8f600685933eeda17f1ca9898ec42af0951bc5b1","impliedFormat":1},{"version":"b0f25d7f2e82edf76b2c8a4423defa26747483d6e1e772ac8476d5b78f69fe4d","impliedFormat":1},{"version":"12ff67dcd2078121daf0dfec7f427c6bb39851bf0d6203200674d610e46b0069","impliedFormat":1},{"version":"d713078712400f84d8a7d4a2d1a1fd7eeb4879603ef87ee06580220ef12d1bc9","impliedFormat":1},{"version":"6fd12b67e326558a9a6a4ccbc40fc2e1f52d989adfec3657e7a49ca3e5c76dec","impliedFormat":1},{"version":"2e6a72672cf704485aadbc714b9f0dc3838dc925f1825bd65d7c60bf7bcc9a71","impliedFormat":1},{"version":"ebc2c560c659e98d96a491619b6d34834c4048189b1c3f148ae402670d03be9c","impliedFormat":1},{"version":"e82a51d5498c34f37bf96981223d5aa0b5051ced754d34b9747b1aa8a4f2174f","impliedFormat":1},{"version":"969d5abb573bcd263b2194b6eb4ab3d6d4e9a766ea995bdda680b2f1db79c07c","impliedFormat":1},{"version":"83e01ec16b5a8424ba35047471fe772e4fdeba7dfa7884d9ced04dd84c01a26c","impliedFormat":1},{"version":"2873f7d3fc801d897c9177e8bcc417d348e96c76490f55cd7237e87859af8f12","impliedFormat":1},{"version":"ede088b09b00760b9ce0997bc1669e25bd155241f369faacf09f3d810dc0ede3","impliedFormat":1},{"version":"f40a505310cfc1683e47db877484d1bbb7d2eafa5fca806dff499c5f86682a4f","impliedFormat":1},{"version":"8b2fe301f5a09a7d7e0362db4bee65edb64bfe73a714565784cf7ec80c66e69f","impliedFormat":1},{"version":"42a1a75a5b70388825e244af4ab7c268f052a021310385fe191e8ee12ed6d696","impliedFormat":1},{"version":"87dbcf55eaefffafe92e65ae0e1229d3ce578a76ffdad5f35fe69ebbe7203320","impliedFormat":1},{"version":"4d05c4b0471d8d97731c54dbe80541cde91c4e27fba189089cbce139bebdc884","impliedFormat":1},{"version":"ae30f8de1064dc9de7fb0e0b897b8435776422a12fe8064cfcb710ead17da508","impliedFormat":1},{"version":"6f2767614aba77fd6b0ca8c9b40d551640681c9fc8ef4bf486db9841f33aa36a","impliedFormat":1},{"version":"e43b4cdcc001801cad76c0d00b2e43c6233aeaa6b791ef1adc5c4e34b1874e70","impliedFormat":1},{"version":"22759dfadc7f47badde31230a0a34ba6810f88b29ff314fb5e0ffd5fe91ba379","impliedFormat":1},{"version":"adf4e3e90b25ce9064c485877e92e56a73119094530cfb3af5a5395a786aa42f","impliedFormat":1},{"version":"c81a187472459f2e3dd935a2eebd77cca096f5159c6b877c2eadfcebe946d795","impliedFormat":1},{"version":"2244d3a7dcb203968127e13d4d83d507fbe91529c434fc20426ae6c814e6e351","impliedFormat":1},{"version":"18e62091c64d5e780f4e652194630efe17d9f62de0af5a7f0bf1fb2b41236754","impliedFormat":1},{"version":"4764e86784bb88b8f3573279db3856c50a03e2b8bc184c06a40f897bff9d7e83","impliedFormat":1},{"version":"027a4481143e6e6e28440b7f79e34ec1fd7bb0ddfced3d701694a1940c19672e","impliedFormat":1},{"version":"8c748c9b4aa5a1e97d5d7e8d2ac6f22a2d1f43b4d5434b69b22bdfa1cb108ec1","impliedFormat":1},{"version":"dc11ac5030092409dd3183dbb24174beaf35739b9b5c90f268b3cf82b9453708","impliedFormat":99},{"version":"9be3f76dee2ab250c599d4da37cf666647b7a087b16d7236732fb8fe1eb83186","impliedFormat":99},{"version":"53a0a8b804bbcbfb9386d6dd1b6002bc4f6f2bb83c6e2e5930d6a740ffef851c","impliedFormat":99},{"version":"65a7b81a1c716122e6e2c992ba7a373f35d2eb0042b0410deb7c33595e21d7d5","impliedFormat":99},{"version":"369a2a17f4d4cbead57047d9d436bfa9e1f2367974fa918995ee64f4f2dd2cfc","impliedFormat":99},{"version":"288356452cc9594258a5090f7ff5cf14acd2dd37922f6df404d3c39b0524ff1e","impliedFormat":99},{"version":"d75c857606a057d0f93c84f7dda61e9093c3a51344740b8ef447a858706e4166","impliedFormat":99},{"version":"8b8299a10f33e46b8ccb4fabd79e07055abc8967ad392b9417773b4fa8972258","impliedFormat":99},{"version":"2274065b890147e47a8e9e7852d158dfed9ab595620bcb015f2b8650f62e58a1","impliedFormat":99},{"version":"8237fd00f121c7d77b507f26d9473b7ec2733cbee7f5712be3755ce62bf424f1","impliedFormat":99},{"version":"7c348160476621debe9dd7e29d2a937b74deaaad4a7adeb76be15d5d4ff5fc0f","impliedFormat":99},{"version":"273b6ae3de2d960eeb9876a8cf9e51d3a15da49766c1948402a18ea9ef116bd3","impliedFormat":99},{"version":"7322929350fdc57d8e9183fa6a37f2751bcc7a2238f220a8089b5c5e9aa043af","impliedFormat":99},{"version":"cc3103f7365eba37aada0d66f9be0153354b535d7479330cf598efbfcc1d3205","impliedFormat":99},{"version":"39adf431380a38beb62b2ffe9a7d569a7122d4d95917509d914ac1d03cc426ce","impliedFormat":99},{"version":"f4b6fe3f611d45962e4ba6995e2bcff511f9b3ade62f16e6644ec20a03bb3ea3","impliedFormat":99},{"version":"5c3b449aeced9e1aa790f996cd8f27f640fdd01897625fb95a8d0d53b220e1d9","impliedFormat":99},{"version":"97df6f53040698a3ce134103080dc557914c6f2d0656ed2c7255c9e213169a1f","impliedFormat":99},{"version":"5dc094621be6c0178661cf27f39743083d23669528fab5582c2aaa42e06987f9","impliedFormat":99},{"version":"70d70fe6aed1da59ef12ff47c8d93bbc21e648d51fbbeb350b8d1d88bd1322c1","signature":"8b098a2238df3e1733cd010bf28ea400696a1c79695f5b7203b774528707350c"},"5cab30b04b5f7733316c2eace303e9d017a60360e04e3f6c1f6bf80e6f15b8c6","806561e16cb7fccc95042c1c835c53b4e784dc64203db9014eb53a00b7a134a0","140700673f21b9970c28a7b1a891b5666270cd746996c856be73761b09ff8f07","c162719a65504ff4c3af049f897bc6f43388e8a02458897964ea2884036c894e","8716f62bcab916ef8290f1877a664dbf7172d56b76c81f19a82e904ecf9c426e","af1ea1213a810b1c0339fc345a58175e3eb8b56e60fd1f5b474a712c050e9f24",{"version":"1ed9e56c3be39e7018cdb26bbfeca5acb52a4efee2c3139ed216382529311338","signature":"259ac5e137776aad41c9a27002aab6a24b9f6f38dc99ca3ae2814b551995b72c"},{"version":"bc3a649116691c359a6088ac7f85d2a18f55c258a7f8466e8595409f7e405f3d","signature":"0e826a475d6f55f911819106e65a5296bfd34dc6155a7c97008ffe9074c3054b"},{"version":"59f082754ca1a7712966b721caaa08bb3a13d5006635649b43f3f3f445e99b16","signature":"dfcc2f5191f2c82ce37fdc316cfb1d6019ba4271bbe7233f6c44df7e8569cdef"},{"version":"5a808942d5bf9cdc9da86376d7f06e58621544dac8154b3660e06b7c03e728df","signature":"f1da3aa266bf0272bec6d180416d7ddb4c167a659b7b59ef12b4ac65ce8701e7"},{"version":"305d12ba8d9bf6df656f29d701746f3d32e3b7f48291157e1ce51ca7cd815d5a","signature":"c0baf6217ffedb9ccfb05c052a22f6b6b48229bf37132c04dcdb063ac457c2d3"},"65783d5a885c57fd8b097f2613c67ed2d30790d19d5013108d5df128b52554bc","d642ab82e48294408a714ce00c155a6da3a896b9d16cd058db6d574d7441d3be",{"version":"b1535397a73ca6046ca08957788a4c9a745730c7b2b887e9b9bc784214f3abac","impliedFormat":1},{"version":"1dab12d45a7ab2b167b489150cc7d10043d97eadc4255bfee8d9e07697073c61","impliedFormat":1},{"version":"611c4448eee5289fb486356d96a8049ce8e10e58885608b1d218ab6000c489b3","impliedFormat":1},{"version":"5de017dece7444a2041f5f729fe5035c3e8a94065910fbd235949a25c0c5b035","impliedFormat":1},{"version":"d47961927fe421b16a444286485165f10f18c2ef7b2b32a599c6f22106cd223b","impliedFormat":1},{"version":"341672ca9475e1625c105a6a99f46e8b4f14dff977e53a828deef7b5e932638f","impliedFormat":1},{"version":"d3b5d359e0523d0b9f85016266c9a50ce9cda399aeac1b9eeecb63ba577e4d27","impliedFormat":1},{"version":"5b9f65234e953177fcc9088e69d363706ccd0696a15d254ac5787b28bdfb7cb0","impliedFormat":1},{"version":"510a5373df4110d355b3fb5c72dfd3906782aeacbb44de71ceee0f0dece36352","impliedFormat":1},{"version":"eb76f85d8a8893360da026a53b39152237aaa7f033a267009b8e590139afd7de","impliedFormat":1},{"version":"1c19f268e0f1ed1a6485ca80e0cfd4e21bdc71cb974e2ac7b04b5fce0a91482b","impliedFormat":1},{"version":"84a28d684e49bae482c89c996e8aeaabf44c0355237a3a1303749da2161a90c1","impliedFormat":1},{"version":"89c36d61bae1591a26b3c08db2af6fdd43ffaab0f96646dead5af39ff0cf44d3","impliedFormat":1},{"version":"fcd615891bdf6421c708b42a6006ed8b0cf50ca0ac2b37d66a5777d8222893ce","impliedFormat":1},{"version":"1c87dfe5efcac5c2cd5fc454fe5df66116d7dc284b6e7b70bd30c07375176b36","impliedFormat":1},{"version":"6362fcd24c5b52eb88e9cf33876abd9b066d520fc9d4c24173e58dcddcfe12d5","impliedFormat":1},{"version":"aa064f60b7e64c04a759f5806a0d82a954452300ee27566232b0cf5dad5b6ba6","impliedFormat":1},{"version":"7ffb4e58ca1b9ed5f26bed3dc0287c4abd7a2ba301ca55e2546d01a7f7f73de7","impliedFormat":1},{"version":"65a6307cc74644b8813e553b468ea7cc7a1e5c4b241db255098b35f308bfc4b5","impliedFormat":1},{"version":"bd8e8f02d1b0ebfa518f7d8b5f0db06ae260c192e211a1ef86397f4b49ee198f","impliedFormat":1},{"version":"71b32ccf8c508c2f7445b1b2c144dd7eef9434f7bfa6a92a9ebd0253a75cb54a","impliedFormat":1},{"version":"4fd8e7e446c8379cfb1f165961b1d2f984b40d73f5ad343d93e33962292ec2e0","impliedFormat":1},{"version":"45079ac211d6cfda93dd7d0e7fc1cf2e510dad5610048ef71e47328b765515be","impliedFormat":1},{"version":"7ae8f8b4f56ba486dc9561d873aae5b3ad263ffb9683c8f9ffc18d25a7fd09a4","impliedFormat":1},{"version":"e0ab56e00ef473df66b345c9d64e42823c03e84d9a679020746d23710c2f9fce","impliedFormat":1},{"version":"d99deead63d250c60b647620d1ddaf497779aef1084f85d3d0a353cbc4ea8a60","impliedFormat":1},{"version":"ba64b14db9d08613474dc7c06d8ffbcb22a00a4f9d2641b2dcf97bc91da14275","impliedFormat":1},{"version":"530197974beb0a02c5a9eb7223f03e27651422345c8c35e1a13ddc67e6365af5","impliedFormat":1},{"version":"512c43b21074254148f89bd80ae00f7126db68b4d0bd1583b77b9c8af91cc0d3","impliedFormat":1},{"version":"0bfacd36c923f059779049c6c74c00823c56386397a541fefc8d8672d26e0c42","impliedFormat":1},{"version":"19d04b82ed0dc5ba742521b6da97f22362fe40d6efa5ca5650f08381e5c939b2","impliedFormat":1},{"version":"f02ac71075b54b5c0a384dddbd773c9852dba14b4bf61ca9f1c8ba6b09101d3e","impliedFormat":1},{"version":"bbf0ae18efd0b886897a23141532d9695435c279921c24bcb86090f2466d0727","impliedFormat":1},{"version":"067670de65606b4aa07964b0269b788a7fe48026864326cd3ab5db9fc5e93120","impliedFormat":1},{"version":"7a094146e95764e687120cdb840d7e92fe9960c2168d697639ad51af7230ef5e","impliedFormat":1},{"version":"21290aaea56895f836a0f1da5e1ef89285f8c0e85dc85fd59e2b887255484a6f","impliedFormat":1},{"version":"a07254fded28555a750750f3016aa44ec8b41fbf3664b380829ed8948124bafe","impliedFormat":1},{"version":"f14fbd9ec19692009e5f2727a662f841bbe65ac098e3371eb9a4d9e6ac05bca7","impliedFormat":1},{"version":"46f640a5efe8e5d464ced887797e7855c60581c27575971493998f253931b9a3","impliedFormat":1},{"version":"cdf62cebf884c6fde74f733d7993b7e255e513d6bc1d0e76c5c745ac8df98453","impliedFormat":1},{"version":"e6dd8526d318cce4cb3e83bef3cb4bf3aa08186ddc984c4663cf7dee221d430e","impliedFormat":1},{"version":"bc79e5e54981d32d02e32014b0279f1577055b2ebee12f4d2dc6451efd823a19","impliedFormat":1},{"version":"ce9f76eceb4f35c5ecd9bf7a1a22774c8b4962c2c52e5d56a8d3581a07b392f9","impliedFormat":1},{"version":"7d390f34038ca66aef27575cffb5a25a1034df470a8f7789a9079397a359bf8b","impliedFormat":1},{"version":"18084f07f6e85e59ce11b7118163dff2e452694fffb167d9973617699405fbd1","impliedFormat":1},{"version":"6af607dd78a033679e46c1c69c126313a1485069bdec46036f0fbfe64e393979","impliedFormat":1},{"version":"44c556b0d0ede234f633da4fb95df7d6e9780007003e108e88b4969541373db1","impliedFormat":1},{"version":"ef1491fb98f7a8837af94bfff14351b28485d8b8f490987820695cedac76dc99","impliedFormat":1},{"version":"0d4ba4ad7632e46bab669c1261452a1b35b58c3b1f6a64fb456440488f9008cf","impliedFormat":1},{"version":"74a0fa488591d372a544454d6cd93bbadd09c26474595ea8afed7125692e0859","impliedFormat":1},{"version":"0a9ae72be840cc5be5b0af985997029c74e3f5bcd4237b0055096bb01241d723","impliedFormat":1},{"version":"920004608418d82d0aad39134e275a427255aaf1dafe44dca10cc432ef5ca72a","impliedFormat":1},{"version":"3ac2bd86af2bab352d126ccdde1381cd4db82e3d09a887391c5c1254790727a1","impliedFormat":1},{"version":"2efc9ad74a84d3af0e00c12769a1032b2c349430d49aadebdf710f57857c9647","impliedFormat":1},{"version":"f18cc4e4728203a0282b94fc542523dfd78967a8f160fabc920faa120688151f","impliedFormat":1},{"version":"cc609a30a3dd07d6074290dadfb49b9f0f2c09d0ae7f2fa6b41e2dae2432417b","impliedFormat":1},{"version":"c473f6bd005279b9f3a08c38986f1f0eaf1b0f9d094fec6bc66309e7504b6460","impliedFormat":1},{"version":"0043ff78e9f07cbbbb934dd80d0f5fe190437715446ec9550d1f97b74ec951ac","impliedFormat":1},{"version":"bdc013746db3189a2525e87e2da9a6681f78352ef25ae513aa5f9a75f541e0ae","impliedFormat":1},{"version":"4f567b8360c2be77e609f98efc15de3ffcdbe2a806f34a3eba1ee607c04abab6","impliedFormat":1},{"version":"615bf0ac5606a0e79312d70d4b978ac4a39b3add886b555b1b1a35472327034e","impliedFormat":1},{"version":"818e96d8e24d98dfd8fd6d9d1bbabcac082bcf5fbbe64ca2a32d006209a8ee54","impliedFormat":1},{"version":"18b0b9a38fe92aa95a40431676b2102139c5257e5635fe6a48b197e9dcb660f1","impliedFormat":1},{"version":"86b382f98cb678ff23a74fe1d940cbbf67bcd3162259e8924590ecf8ee24701e","impliedFormat":1},{"version":"aeea2c497f27ce34df29448cbe66adb0f07d3a5d210c24943d38b8026ffa6d3c","impliedFormat":1},{"version":"0fbe1a754e3da007cc2726f61bc8f89b34b466fe205b20c1e316eb240bebe9e8","impliedFormat":1},{"version":"aa2f3c289c7a3403633e411985025b79af473c0bf0fdd980b9712bd6a1705d59","impliedFormat":1},{"version":"e140d9fa025dadc4b098c54278271a032d170d09f85f16f372e4879765277af8","impliedFormat":1},{"version":"70d9e5189fd4dabc81b82cf7691d80e0abf55df5030cc7f12d57df62c72b5076","impliedFormat":1},{"version":"a96be3ed573c2a6d4c7d4e7540f1738a6e90c92f05f684f5ee2533929dd8c6b2","impliedFormat":1},{"version":"2a545aa0bc738bd0080a931ccf8d1d9486c75cbc93e154597d93f46d2f3be3b4","impliedFormat":1},{"version":"137272a656222e83280287c3b6b6d949d38e6c125b48aff9e987cf584ff8eb42","impliedFormat":1},{"version":"5277b2beeb856b348af1c23ffdaccde1ec447abede6f017a0ab0362613309587","impliedFormat":1},{"version":"d4b6804b4c4cb3d65efd5dc8a672825cea7b39db98363d2d9c2608078adce5f8","impliedFormat":1},{"version":"929f67e0e7f3b3a3bcd4e17074e2e60c94b1e27a8135472a7d002a36cd640629","impliedFormat":1},{"version":"0c73536b65135298d43d1ef51dd81a6eba3b69ef0ce005db3de11365fda30a55","impliedFormat":1},{"version":"2a545aa0bc738bd0080a931ccf8d1d9486c75cbc93e154597d93f46d2f3be3b4","impliedFormat":99},{"version":"e54bca4a1b1b34b5b7b701f04c68afd3b360d6c3082e5a7724edb43f934ce47a","signature":"cf43277ca6faec9f406a936adda49632aca5b313ae1437f780ae222cabf0e49a"},"83c87c43e66154e84f751abebcdd465d6e9dec14f9e80cd25a3c236211f64590",{"version":"d8ced14f714989f65e72c232acfaeeed771c7520f2f7480448acc7e9d41314da","signature":"fc722f8cfc3dac3f5da07b149362dc2d61bca8d50596ddcf0e08ceda1534c702"},"4201665853aa4f7d7b8d3a44f6692840b2072abc3b07d8677e9285d9569ac91e","ba3a3af0cb56c1bca63a33edba80dacca8452ecc761e6d4bb482787b193e9d74",{"version":"1d534dbe9cbd9eb4548b926da41054d9cabc4b90dbd89c96e6909910f4fc98d1","signature":"76d0ad4218048e802c8b562dcbff0d58e67af5b18e0be7bd772090c77642fd08"},"0dd32166a4656c72d16fa8cb7fbd3bf4bb8cbf4f8cb87bd8e8fd149713e761e7","88872e82eb6bd46200b456efe92d796dde854c688817cdf3cd1861435859e92b",{"version":"60048d6852a4c624b225e172fcef53ba2a66aa16667a7aa0ab998d5f5990fbfd","signature":"808984c7b2d3726b9af8396e147b8e5affcbefc1e63135fc2b7f30699aac28dc"},"f0c2ada646d66d0bf4190031be1b18a6ac7f29c77282af728120ce2578b05c9c",{"version":"502d960fe52bc99f72ec0582e6cda83e6ca84c58e60bfaab613f54f9870b2aab","signature":"5fae83fdfe1c2fd7f017a6feb47a50e99ce7a179676a5a43f9200ae557b99510"},{"version":"b51fb3ae19c62cea8c1aad18a569b939b1203cf0f0beede96a95c9ef00dc821d","impliedFormat":1},{"version":"ffeb91f2c925ded5147acdeaef2b5060a8e48f5c5e528e646ea872f4440bd2be","impliedFormat":1},{"version":"06b9fcb4e529bfa1e604002324923329ba760aabfe975baf72ea7bf5749079a7","affectsGlobalScope":true,"impliedFormat":1},{"version":"5e8ef26ea90fb5636ac95a08903ffec4f20b585575dcffa56c32da0df53830b9","impliedFormat":1},{"version":"7e3373dde2bba74076250204bd2af3aa44225717435e46396ef076b1954d2729","impliedFormat":1},{"version":"1c3dfad66ff0ba98b41c98c6f41af096fc56e959150bc3f44b2141fb278082fd","impliedFormat":1},{"version":"56208c500dcb5f42be7e18e8cb578f257a1a89b94b3280c506818fed06391805","impliedFormat":1},{"version":"0c94c2e497e1b9bcfda66aea239d5d36cd980d12a6d9d59e66f4be1fa3da5d5a","impliedFormat":1},{"version":"eb9271b3c585ea9dc7b19b906a921bf93f30f22330408ffec6df6a22057f3296","impliedFormat":1},{"version":"0205ee059bd2c4e12dcadc8e2cbd0132e27aeba84082a632681bd6c6c61db710","impliedFormat":1},{"version":"a694d38afadc2f7c20a8b1d150c68ac44d1d6c0229195c4d52947a89980126bc","impliedFormat":1},{"version":"9f1e00eab512de990ba27afa8634ca07362192063315be1f8166bc3dcc7f0e0f","impliedFormat":1},{"version":"9674788d4c5fcbd55c938e6719177ac932c304c94e0906551cc57a7942d2b53b","impliedFormat":1},{"version":"86dac6ce3fcd0a069b67a1ac9abdbce28588ea547fd2b42d73c1a2b7841cf182","impliedFormat":1},{"version":"4d34fbeadba0009ed3a1a5e77c99a1feedec65d88c4d9640910ff905e4e679f7","impliedFormat":1},{"version":"9d90361f495ed7057462bcaa9ae8d8dbad441147c27716d53b3dfeaea5bb7fc8","impliedFormat":1},{"version":"8fcc5571404796a8fe56e5c4d05049acdeac9c7a72205ac15b35cb463916d614","impliedFormat":1},{"version":"a3b3a1712610260c7ab96e270aad82bd7b28a53e5776f25a9a538831057ff44c","impliedFormat":1},{"version":"33a2af54111b3888415e1d81a7a803d37fada1ed2f419c427413742de3948ff5","impliedFormat":1},{"version":"d5a4fca3b69f2f740e447efb9565eecdbbe4e13f170b74dd4a829c5c9a5b8ebf","impliedFormat":1},{"version":"56f1e1a0c56efce87b94501a354729d0a0898508197cb50ab3e18322eb822199","impliedFormat":1},{"version":"8960e8c1730aa7efb87fcf1c02886865229fdbf3a8120dd08bb2305d2241bd7e","impliedFormat":1},{"version":"27bf82d1d38ea76a590cbe56873846103958cae2b6f4023dc59dd8282b66a38a","impliedFormat":1},{"version":"0daaab2afb95d5e1b75f87f59ee26f85a5f8d3005a799ac48b38976b9b521e69","impliedFormat":1},{"version":"2c378d9368abcd2eba8c29b294d40909845f68557bc0b38117e4f04fc56e5f9c","impliedFormat":1},{"version":"9b048390bcffe88c023a4cd742a720b41d4cd7df83bc9270e6f2339bf38de278","affectsGlobalScope":true,"impliedFormat":1},{"version":"c60b14c297cc569c648ddaea70bc1540903b7f4da416edd46687e88a543515a1","impliedFormat":1},{"version":"94a802503ca276212549e04e4c6b11c4c14f4fa78722f90f7f0682e8847af434","impliedFormat":1},{"version":"9c0217750253e3bf9c7e3821e51cff04551c00e63258d5e190cf8bd3181d5d4a","impliedFormat":1},{"version":"5c2e7f800b757863f3ddf1a98d7521b8da892a95c1b2eafb48d652a782891677","impliedFormat":1},{"version":"21317aac25f94069dbcaa54492c014574c7e4d680b3b99423510b51c4e36035f","impliedFormat":1},{"version":"c61d8275c35a76cb12c271b5fa8707bb46b1e5778a370fd6037c244c4df6a725","impliedFormat":1},{"version":"c7793cb5cd2bef461059ca340fbcd19d7ddac7ab3dcc6cd1c90432fca260a6ae","impliedFormat":1},{"version":"fd3bf6d545e796ebd31acc33c3b20255a5bc61d963787fc8473035ea1c09d870","impliedFormat":1},{"version":"c7af51101b509721c540c86bb5fc952094404d22e8a18ced30c38a79619916fa","impliedFormat":1},{"version":"59c8f7d68f79c6e3015f8aee218282d47d3f15b85e5defc2d9d1961b6ffed7a0","impliedFormat":1},{"version":"93a2049cbc80c66aa33582ec2648e1df2df59d2b353d6b4a97c9afcbb111ccab","impliedFormat":1},{"version":"d04d359e40db3ae8a8c23d0f096ad3f9f73a9ef980f7cb252a1fdc1e7b3a2fb9","impliedFormat":1},{"version":"84aa4f0c33c729557185805aae6e0df3bd084e311da67a10972bbcf400321ff0","impliedFormat":1},{"version":"cf6cbe50e3f87b2f4fd1f39c0dc746b452d7ce41b48aadfdb724f44da5b6f6ed","impliedFormat":1},{"version":"3cf494506a50b60bf506175dead23f43716a088c031d3aa00f7220b3fbcd56c9","impliedFormat":1},{"version":"f2d47126f1544c40f2b16fc82a66f97a97beac2085053cf89b49730a0e34d231","impliedFormat":1},{"version":"724ac138ba41e752ae562072920ddee03ba69fe4de5dafb812e0a35ef7fb2c7e","impliedFormat":1},{"version":"e4eb3f8a4e2728c3f2c3cb8e6b60cadeb9a189605ee53184d02d265e2820865c","impliedFormat":1},{"version":"f16cb1b503f1a64b371d80a0018949135fbe06fb4c5f78d4f637b17921a49ee8","impliedFormat":1},{"version":"f4808c828723e236a4b35a1415f8f550ff5dec621f81deea79bf3a051a84ffd0","impliedFormat":1},{"version":"3b810aa3410a680b1850ab478d479c2f03ed4318d1e5bf7972b49c4d82bacd8d","impliedFormat":1},{"version":"0ce7166bff5669fcb826bc6b54b246b1cf559837ea9cc87c3414cc70858e6097","impliedFormat":1},{"version":"6ea095c807bc7cc36bc1774bc2a0ef7174bf1c6f7a4f6b499170b802ce214bfe","impliedFormat":1},{"version":"3549400d56ee2625bb5cc51074d3237702f1f9ffa984d61d9a2db2a116786c22","impliedFormat":1},{"version":"5327f9a620d003b202eff5db6be0b44e22079793c9a926e0a7a251b1dbbdd33f","impliedFormat":1},{"version":"b60f6734309d20efb9b0e0c7e6e68282ee451592b9c079dd1a988bb7a5eeb5e7","impliedFormat":1},{"version":"f4187a4e2973251fd9655598aa7e6e8bba879939a73188ee3290bb090cc46b15","impliedFormat":1},{"version":"44c1a26f578277f8ccef3215a4bd642a0a4fbbaf187cf9ae3053591c891fdc9c","impliedFormat":1},{"version":"a5989cd5e1e4ca9b327d2f93f43e7c981f25ee12a81c2ebde85ec7eb30f34213","impliedFormat":1},{"version":"f65b8fa1532dfe0ef2c261d63e72c46fe5f089b28edcd35b3526328d42b412b8","impliedFormat":1},{"version":"1060083aacfc46e7b7b766557bff5dafb99de3128e7bab772240877e5bfe849d","impliedFormat":1},{"version":"d61a3fa4243c8795139e7352694102315f7a6d815ad0aeb29074cfea1eb67e93","impliedFormat":1},{"version":"1f66b80bad5fa29d9597276821375ddf482c84cfb12e8adb718dc893ffce79e0","impliedFormat":1},{"version":"1ed8606c7b3612e15ff2b6541e5a926985cbb4d028813e969c1976b7f4133d73","impliedFormat":1},{"version":"c086ab778e9ba4b8dbb2829f42ef78e2b28204fc1a483e42f54e45d7a96e5737","impliedFormat":1},{"version":"dd0b9b00a39436c1d9f7358be8b1f32571b327c05b5ed0e88cc91f9d6b6bc3c9","impliedFormat":1},{"version":"a951a7b2224a4e48963762f155f5ad44ca1145f23655dde623ae312d8faeb2f2","impliedFormat":1},{"version":"cd960c347c006ace9a821d0a3cffb1d3fbc2518a4630fb3d77fe95f7fd0758b8","impliedFormat":1},{"version":"fe1f3b21a6cc1a6bc37276453bd2ac85910a8bdc16842dc49b711588e89b1b77","impliedFormat":1},{"version":"1a6a21ff41d509ab631dbe1ea14397c518b8551f040e78819f9718ef80f13975","impliedFormat":1},{"version":"0a55c554e9e858e243f714ce25caebb089e5cc7468d5fd022c1e8fa3d8e8173d","impliedFormat":1},{"version":"3a5e0fe9dcd4b1a9af657c487519a3c39b92a67b1b21073ff20e37f7d7852e32","impliedFormat":1},{"version":"977aeb024f773799d20985c6817a4c0db8fed3f601982a52d4093e0c60aba85f","impliedFormat":1},{"version":"d59cf5116848e162c7d3d954694f215b276ad10047c2854ed2ee6d14a481411f","impliedFormat":1},{"version":"50098be78e7cbfc324dfc04983571c80539e55e11a0428f83a090c13c41824a2","impliedFormat":1},{"version":"08e767d9d3a7e704a9ea5f057b0f020fd5880bc63fbb4aa6ffee73be36690014","impliedFormat":1},{"version":"dd6051c7b02af0d521857069c49897adb8595d1f0e94487d53ebc157294ef864","impliedFormat":1},{"version":"79c6a11f75a62151848da39f6098549af0dd13b22206244961048326f451b2a8","impliedFormat":1},"084a67ae469c3587041857c5418a2d9d08a6e0b3329dd218d7f9ac1bb5532eb4","c949b0d1155f641135d954ec0f27e1a5968f991a04f22a65803cdad04d963fbf","92e5eb562601690f78d7e857705ea7496bdf33bcbd00fe223cb9c69a49da545f","7d385eb4cf9b8280edfddbc4c07ce55d6b2c97399a9abc46adfd811f516c4f7e","431bb02c83c3590979968f23c737c1b35ecc9b00dd87affb11586fe962154faf","8e043e86d9a5d914ba02478e4ec77160c89f3829327d517d9e10897162a58317",{"version":"4953b5d027c4ce76d1b1137fb034a05ddf343bf25d485e1c94625a2845e1e011","signature":"ae8c6c88171f3cfe5d525043d41c413e478c8c51b9e68ad593aea747148041f8"},{"version":"fb3a75181b06a7cde17a99c4f27956f62206fdc9ea3c992f13b99656c6654852","signature":"c911d6d8f41e39c7337937ba27f116cb7e599d781427a75f5c3a4579d45c3af5"},{"version":"b5abd119819b2da5469fec167f26350e8d14216eb7282ac3de7f2f0b4150ed34","signature":"6fc57620680a42c8464dad08eb64a568021ba0378c1365a782ce3d8de6f2f3c5"},"25077f09ab0daf21a166f215156c144198a58012ceff45fa6493768222e67de2","d4858f6ac08fd504e8e26bef7ed8de060b4a73101db0cf650224718a4ea2253f","64eac1ef03f6a258789180c841781805b92373de98610d9d1692fa98c945bc3f",{"version":"2d40b8080812677edb4d7ec6684fc693cdf9f1c659eb053fbfb4ffbe955c0689","signature":"1a54ae4a877b475276aaf4a3474a4ee026ab83815931c49162d4202978e7db67"},{"version":"780f57048e986f06acd52efc0316c0def1f5370149c4077c565decb00064fca1","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},"1ec90aeccb134b916aa20eef1b1f8a61d1497f985c0e98087aad174ab7c93b4e",{"version":"00c61a2bc6a3f8385556dbb12395e425ea878e99c7ab51c8e6140ab1b1ce4354","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},"630305ff88d00d4af02aa431ef5534376792ec01fc9f5ed70341679990b5ded8",{"version":"25f4bb978adaaae6b9b9bc065e832bd8c0a71b89eeb50fc0dbdb427be4642e33","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"9ec6d9ee46725f5e36e1cc222bd130557c87c548d38b4259af9f73eaf91437d0","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"cf584a5165573e4a15a4c6c9e7efb2e1e6317ba5aac49f1e5cc6c977684a14eb","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"088caec35c02c427c0c5d29f3175de97a1f16d3345616e350407fa8eb61b58c8","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"5737689acb4910e328648a59aa462648e2392f3b0cb6b84f82be4f6a760b1fb4","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"cc07c57a427b53efdd3e5d729ffd1fa262e5913fd5a58a4bf80b96bf3e6e7e84","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"bfd78bca978d50d5de81d5e2d8b3c26946afb4a54bb774f7cc70aadfa841cedf","signature":"2cc743b624d6891f9275f11f76fedfe235af04641c806e7dc65e55740db4dd29"},{"version":"b1538a92b9bae8d230267210c5db38c2eb6bdb352128a3ce3aa8c6acf9fc9622","impliedFormat":1},{"version":"6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","impliedFormat":1},{"version":"ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","impliedFormat":1},{"version":"d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","impliedFormat":1},{"version":"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"736097ddbb2903bef918bb3b5811ef1c9c5656f2a73bd39b22a91b9cc2525e50","impliedFormat":1},{"version":"4340936f4e937c452ae783514e7c7bbb7fc06d0c97993ff4865370d0962bb9cf","impliedFormat":1},{"version":"b70c7ea83a7d0de17a791d9b5283f664033a96362c42cc4d2b2e0bdaa65ef7d1","impliedFormat":1},{"version":"fa8dbed00530fb4114906cd93f7fb55512c8eb9551d2f2e9796c69a4da4b594f","impliedFormat":1}],"root":[408,433,[435,443],[499,508],511,512,[590,600],[675,698]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true},"referencedMap":[[690,1],[691,2],[692,3],[693,4],[694,5],[695,6],[696,7],[697,8],[698,9],[688,10],[689,11],[443,12],[500,13],[503,14],[502,15],[505,16],[506,17],[508,18],[507,18],[512,19],[590,20],[593,21],[594,22],[595,18],[596,16],[600,23],[684,24],[678,25],[683,26],[680,27],[676,28],[677,29],[682,30],[675,31],[679,32],[685,33],[686,34],[681,35],[687,36],[509,37],[510,37],[434,37],[439,37],[440,38],[499,39],[501,40],[591,41],[435,37],[441,42],[597,43],[437,40],[598,37],[592,44],[438,45],[599,46],[504,40],[511,40],[442,47],[436,37],[408,48],[361,37],[699,37],[700,37],[701,37],[702,49],[625,37],[608,50],[626,51],[607,37],[703,37],[704,37],[706,37],[707,52],[142,53],[143,53],[144,54],[99,55],[145,56],[146,57],[147,58],[94,37],[97,59],[95,37],[96,37],[148,60],[149,61],[150,62],[151,63],[152,64],[153,65],[154,65],[155,66],[156,67],[157,68],[158,69],[100,37],[98,37],[159,70],[160,71],[161,72],[193,73],[162,74],[163,75],[164,76],[165,77],[166,78],[167,79],[168,80],[169,81],[170,82],[171,83],[172,83],[173,84],[174,37],[175,85],[177,86],[176,87],[178,88],[179,89],[180,90],[181,91],[182,92],[183,93],[184,94],[185,95],[186,96],[187,97],[188,98],[189,99],[190,100],[101,37],[102,37],[103,37],[141,101],[191,102],[192,103],[708,104],[86,37],[198,105],[199,106],[197,35],[195,107],[196,108],[84,37],[87,109],[285,35],[85,37],[705,110],[604,111],[601,35],[603,112],[602,37],[93,113],[364,114],[368,115],[370,116],[219,117],[233,118],[335,119],[264,37],[338,120],[300,121],[308,122],[336,123],[220,124],[263,37],[265,125],[337,126],[240,127],[221,128],[244,127],[234,127],[204,127],[291,129],[292,130],[209,37],[288,131],[293,132],[379,133],[286,132],[380,134],[270,37],[289,135],[392,136],[391,137],[295,132],[390,37],[388,37],[389,138],[290,35],[277,139],[278,140],[287,141],[303,142],[304,143],[294,144],[272,145],[273,146],[383,147],[386,148],[251,149],[250,150],[249,151],[395,35],[248,152],[225,37],[398,37],[401,37],[400,35],[402,153],[200,37],[329,37],[232,154],[202,155],[352,37],[353,37],[355,37],[358,156],[354,37],[356,157],[357,157],[218,37],[231,37],[363,158],[371,159],[375,160],[214,161],[280,162],[279,37],[271,145],[299,163],[297,164],[296,37],[298,37],[302,165],[275,166],[213,167],[238,168],[326,169],[205,110],[212,170],[201,119],[340,171],[350,172],[339,37],[349,173],[239,37],[223,174],[317,175],[316,37],[323,176],[325,177],[318,178],[322,179],[324,176],[321,178],[320,176],[319,178],[260,180],[245,180],[311,181],[246,181],[207,182],[206,37],[315,183],[314,184],[313,185],[312,186],[208,187],[284,188],[301,189],[283,190],[307,191],[309,192],[306,190],[241,187],[194,37],[327,193],[266,194],[348,195],[269,196],[343,197],[211,37],[344,198],[346,199],[347,200],[330,37],[342,110],[242,201],[328,202],[351,203],[215,37],[217,37],[222,204],[310,205],[210,206],[216,37],[268,207],[267,208],[224,209],[276,210],[274,211],[226,212],[228,213],[399,37],[227,214],[229,215],[366,37],[365,37],[367,37],[397,37],[230,216],[282,35],[92,37],[305,217],[252,37],[262,218],[373,35],[382,219],[259,35],[377,132],[258,220],[360,221],[257,219],[203,37],[384,222],[255,35],[256,35],[247,37],[261,37],[254,223],[253,224],[243,225],[237,144],[345,37],[236,226],[235,37],[369,37],[281,35],[362,227],[83,37],[91,228],[88,35],[89,37],[90,37],[341,229],[334,230],[333,37],[332,231],[331,37],[372,232],[374,233],[376,234],[378,235],[381,236],[407,237],[385,237],[406,238],[387,239],[393,240],[394,241],[396,242],[403,243],[405,37],[404,244],[359,245],[514,37],[520,246],[513,37],[517,37],[519,247],[516,248],[589,249],[583,249],[544,250],[540,251],[555,252],[545,253],[552,254],[539,255],[553,37],[551,256],[548,257],[549,258],[546,259],[554,260],[521,248],[584,261],[535,262],[532,263],[533,264],[534,265],[523,266],[542,267],[561,268],[557,269],[556,270],[560,271],[558,272],[559,272],[536,273],[538,274],[537,275],[541,276],[585,277],[543,278],[525,279],[586,280],[524,281],[587,282],[526,283],[564,284],[562,263],[563,285],[527,272],[568,286],[566,287],[567,288],[528,289],[571,290],[570,291],[573,292],[572,293],[576,294],[574,293],[575,295],[569,296],[565,297],[577,296],[529,272],[588,298],[530,293],[531,272],[547,299],[550,300],[522,37],[578,272],[579,301],[581,302],[580,303],[582,304],[515,305],[518,306],[489,37],[497,307],[492,308],[496,309],[491,310],[493,311],[490,37],[495,312],[494,313],[481,314],[498,315],[482,316],[483,317],[484,37],[488,318],[485,37],[486,37],[487,37],[480,319],[468,320],[460,37],[464,321],[474,37],[457,37],[469,37],[470,322],[471,37],[447,37],[451,323],[453,324],[452,37],[475,325],[448,326],[449,327],[450,323],[454,328],[455,328],[456,323],[446,37],[445,327],[461,37],[459,37],[462,37],[472,37],[476,329],[477,37],[473,37],[478,330],[479,331],[463,332],[444,37],[467,37],[465,329],[466,317],[458,37],[425,333],[423,334],[424,335],[412,336],[413,334],[420,337],[411,338],[416,339],[426,37],[417,340],[422,341],[428,342],[427,343],[410,344],[418,345],[419,346],[414,347],[421,333],[415,348],[648,349],[650,350],[640,351],[645,352],[646,353],[652,354],[647,355],[644,356],[643,357],[642,358],[653,359],[610,352],[611,352],[651,352],[656,360],[666,361],[660,361],[668,361],[672,361],[658,362],[659,361],[661,361],[664,361],[667,361],[663,363],[665,361],[669,35],[662,352],[657,364],[619,35],[623,35],[613,352],[616,35],[621,352],[622,365],[615,366],[618,35],[620,35],[617,367],[606,35],[605,35],[674,368],[671,369],[637,370],[636,352],[634,35],[635,352],[638,371],[639,372],[632,35],[628,373],[631,352],[630,352],[629,352],[624,352],[633,373],[670,352],[649,374],[655,375],[654,376],[673,37],[641,37],[614,37],[612,377],[409,37],[431,378],[430,37],[429,37],[432,379],[81,37],[82,37],[13,37],[14,37],[16,37],[15,37],[2,37],[17,37],[18,37],[19,37],[20,37],[21,37],[22,37],[23,37],[24,37],[3,37],[25,37],[26,37],[4,37],[27,37],[31,37],[28,37],[29,37],[30,37],[32,37],[33,37],[34,37],[5,37],[35,37],[36,37],[37,37],[38,37],[6,37],[42,37],[39,37],[40,37],[41,37],[43,37],[7,37],[44,37],[49,37],[50,37],[45,37],[46,37],[47,37],[48,37],[8,37],[54,37],[51,37],[52,37],[53,37],[55,37],[9,37],[56,37],[57,37],[58,37],[60,37],[59,37],[61,37],[62,37],[10,37],[63,37],[64,37],[65,37],[11,37],[66,37],[67,37],[68,37],[69,37],[70,37],[1,37],[71,37],[72,37],[12,37],[76,37],[74,37],[79,37],[78,37],[73,37],[77,37],[75,37],[80,37],[119,380],[129,381],[118,380],[139,382],[110,383],[109,384],[138,244],[132,385],[137,386],[112,387],[126,388],[111,389],[135,390],[107,391],[106,244],[136,392],[108,393],[113,394],[114,37],[117,394],[104,37],[140,395],[130,396],[121,397],[122,398],[124,399],[120,400],[123,401],[133,244],[115,402],[116,403],[125,404],[105,405],[128,396],[127,394],[131,37],[134,406],[609,407],[627,408],[433,409]],"affectedFilesPendingEmit":[690,691,692,693,694,695,696,697,698,688,689,443,500,503,502,505,506,508,507,512,590,593,594,595,596,600,684,678,683,680,676,677,682,675,679,685,686,681,687,439,440,499,501,591,435,441,597,437,598,592,438,599,504,511,442,436,433],"version":"5.9.3"} \ No newline at end of file

\s*([\d.]+\s*-\s*[\d.]+)[\s\S]*?<\/td>\s*\s*([\d.]+)%<\/td>/g; - for (const [table] of tables) { - // Extract header row to detect probability columns - const headers = [...table.matchAll(/]*>([\s\S]*?)<\/th>/gi)] - .map(m => m[1].replace(/<[^>]+>/g,"").trim().toLowerCase()); + const rows = []; + let bm; + while ((bm = blockRe.exec(html)) !== null) { + const dateIso = normalizeDate(bm[1].trim()); + if (!dateIso || dateIso < nowIso) continue; - const hasProbCols = headers.some(h => /cut|hike|unch|hold|basis|bps|prob|\-\d|\+\d/.test(h)); - const hasDate = headers.some(h => /meeting|date|month/.test(h)); - if (!hasProbCols || !hasDate) continue; - - console.log(`[IC/${ccy}] table headers: ${headers.join(" | ")}`); - - const dateIdx = headers.findIndex(h => /meeting|date|month/.test(h)); - const cutCols = headers.reduce((acc,h,i) => /cut|\-25|\-50|decr/.test(h) ? [...acc,i] : acc, []); - const hikeCols = headers.reduce((acc,h,i) => /hike|\+25|\+50|incr/.test(h) ? [...acc,i] : acc, []); - const holdCols = headers.reduce((acc,h,i) => /unch|hold|no.?change/.test(h) ? [...acc,i] : acc, []); - const rateIdx = headers.findIndex(h => /implied|rate/.test(h)); - - const rows2 = []; - const nowIso = new Date().toISOString().slice(0,10); - const trs = [...table.matchAll(//gi)].slice(1); // skip header - - for (const [tr] of trs) { - const cells = [...tr.matchAll(/]*>([\s\S]*?)<\/td>/gi)] - .map(m => m[1].replace(/<[^>]+>/g,"").trim()); - if (cells.length < 2) continue; - - const dateIso = normalizeDate(cells[dateIdx] ?? ""); - if (!dateIso || dateIso < nowIso) continue; - - const pct = s => parseFloat((s ?? "0").replace(/[^0-9.]/g,"")) || 0; - const probCut = cutCols.reduce((s,i) => s + pct(cells[i]), 0); - const probHike = hikeCols.reduce((s,i) => s + pct(cells[i]), 0); - const probIsCut = probCut >= probHike; - const probMovePct = Math.max(probCut, probHike); - const impliedRate = rateIdx >= 0 ? pct(cells[rateIdx]) : FALLBACK_RATES[ccy] ?? 0; - const changeBps = (impliedRate - (FALLBACK_RATES[ccy] ?? 0)) * 100; - const dateLabel = new Date(dateIso + "T12:00:00Z") - .toLocaleDateString("en-US", { month:"short", day:"numeric" }); - - rows2.push({ - meeting: dateLabel, meeting_iso: dateIso, - implied_rate_post_meeting: impliedRate, - prob_move_pct: probMovePct, prob_is_cut: probIsCut, - change_bps: changeBps, num_moves: changeBps / 25, - }); + let rm, totalProb = 0, weightedRate = 0, probBelow = 0, probAbove = 0; + rowRe.lastIndex = 0; + while ((rm = rowRe.exec(bm[2])) !== null) { + const parts = rm[1].match(/([\d.]+)\s*-\s*([\d.]+)/); + if (!parts) continue; + const hi = parseFloat(parts[2]); + const prob = parseFloat(rm[2]); + totalProb += prob; + // currentRate suit la convention "upper bound" (ex: 3.75 pour la fourchette + // 3.50-3.75, cf. data/rate_decisions.json / app/api/macro) : chaque fourchette + // doit donc être représentée par SON haut (hi), pas son milieu — sinon la + // fourchette actuelle (mid=3.625) ne matche jamais currentRate (3.75), ce qui + // introduit un biais fantôme de ~-12.5bps même à 100% de probabilité de statu quo. + weightedRate += hi * prob; + // La fourchette dont le haut == currentRate EST la fourchette actuelle → ni cut ni hike. + if (Math.abs(hi - currentRate) < 0.01) continue; + if (hi < currentRate) probBelow += prob; + else probAbove += prob; } + if (!totalProb) continue; - if (rows2.length) { - console.log(`[IC/${ccy}] ✓ table parsed: ${rows2.length} rows`); - return { today: { midpoint: FALLBACK_RATES[ccy] ?? 0, rows: rows2 } }; - } + const impliedRate = parseFloat((weightedRate / totalProb).toFixed(4)); + const probIsCut = probBelow > probAbove; // strict : à 0/0 (aucun biais), ne pas défaulter sur "cut" + const probMovePct = Math.round(Math.max(probBelow, probAbove)); + const changeBps = (impliedRate - currentRate) * 100; + const dateLabel = new Date(dateIso + "T12:00:00Z") + .toLocaleDateString("en-US", { month:"short", day:"numeric" }); + + rows.push({ + meeting: dateLabel, meeting_iso: dateIso, + implied_rate_post_meeting: impliedRate, + prob_move_pct: probMovePct, prob_is_cut: probIsCut, + change_bps: changeBps, num_moves: changeBps / 25, + }); } - console.warn(`[IC/${ccy}] no parseable table found`); - return null; + if (!rows.length) { console.warn(`[IC/${ccy}] no parseable meeting block found`); return null; } + console.log(`[IC/${ccy}] ✓ table parsed: ${rows.length} meetings`); + return { today: { midpoint: currentRate, rows } }; } -// ── 3. InvestingLive fallback (Giuseppe Dellamotta, hebdomadaire) ───────────── +// ── 2. InvestingLive fallback (Giuseppe Dellamotta, hebdomadaire) ───────────── const IL_CB_MAP = { fed: "USD", fomc: "USD", @@ -373,11 +353,22 @@ function parseILArticle(html) { for (const m of text.matchAll(re)) { const ccy = IL_CB_MAP[m[1].toLowerCase()]; if (!ccy || results[ccy]) continue; - const bps = parseInt(m[2]); - const probPct = parseInt(m[3]); - const isHike = /hike/i.test(m[5]); - const isNoChg = /no.?change/i.test(m[5]); - results[ccy] = { bpsYearEnd: isHike ? bps : -bps, probMovePct: isNoChg ? 0 : probPct, isCut: !isHike && !isNoChg }; + const bps = parseInt(m[2]); + const probPct = parseInt(m[3]); + const isNoChg = /no.?change/i.test(m[5]); + const isCutDirection = !isNoChg && /cut/i.test(m[5]); + + // "XX bps" est une magnitude signée du biais year-end : on ne la force négative + // que si la direction annoncée est explicitement "cut". Pour "no change", le bps + // reste positif par défaut (biais hausse), comme pour "hike" — le bug précédent + // négativait TOUT ce qui n'était pas explicitement "hike", cassant EUR/GBP/JPY/ + // CAD/AUD/CHF (tous en "no change" la plupart des semaines). + const bpsYearEnd = isCutDirection && bps > 0 ? -bps : bps; + // "no change" à la prochaine réunion : la probabilité de mouvement est le complément + // de la probabilité de statu quo (ex: "72% no change" → 28% de mouvement), pas 0. + const probMovePct = isNoChg ? 100 - probPct : probPct; + + results[ccy] = { bpsYearEnd, probMovePct, isCut: bpsYearEnd < 0 }; } console.log(`[IL] parsed: ${Object.keys(results).join(", ")}`); @@ -409,23 +400,26 @@ function buildILFallback(ccy, il) { const CCYS = ["USD","EUR","GBP","JPY","CAD","AUD","NZD","CHF"]; const results = {}; -// 1 — CME FedWatch → USD -console.log("\n=== CME FedWatch ==="); -const cmeData = await fetchCMEFedWatch(); -if (cmeData) { results["USD"] = cmeData; console.log("[CME] USD ✓"); } +// 0 — Sources officielles → écrasent les ancres si data/rate_decisions.json a dérivé +console.log("\n=== Fed (official) ==="); +const fedRate = await fetchFedRate(); +if (fedRate !== null) FALLBACK_RATES.USD = fedRate; -// 2 — Investing.com → CBs qui ont une page rate-monitor (pas CHF ni NZD → 404) -// CHF (snb-rate-monitor) et NZD (rbnz-rate-monitor) n'existent pas sur Investing.com -const IC_SUPPORTED = CCYS.filter(c => c !== "CHF" && c !== "NZD"); +console.log("\n=== SNB (official) ==="); +const snbRate = await fetchSnbRate(); +if (snbRate !== null) FALLBACK_RATES.CHF = snbRate; + +// 1 — Investing.com Fed Rate Monitor → USD uniquement (seule CB avec cet outil ; +// les autres slugs *-rate-monitor n'existent pas sur investing.com → 404 attendus) +const IC_SUPPORTED = ["USD"]; console.log("\n=== Investing.com Rate Monitors ==="); for (const ccy of IC_SUPPORTED) { - if (results[ccy]) { console.log(`[IC/${ccy}] skipped (CME)`); continue; } const data = await fetchInvestingCom(ccy); if (data) results[ccy] = data; await new Promise(r => setTimeout(r, 600)); } -// 3 — InvestingLive → fallback for any missing CB +// 2 — InvestingLive → fallback for any missing CB const missing = CCYS.filter(c => !results[c]); if (missing.length) { console.log(`\n=== InvestingLive fallback (missing: ${missing.join(", ")}) ===`); diff --git a/.github/scripts/update-rate-decisions.mjs b/.github/scripts/update-rate-decisions.mjs new file mode 100644 index 0000000..d6306c0 --- /dev/null +++ b/.github/scripts/update-rate-decisions.mjs @@ -0,0 +1,122 @@ +// Détecte automatiquement les changements de taux directeur (Trading Economics) +// et fait glisser l'ancien "current" vers "prev" — sans perte de donnée, sans +// intervention manuelle. +// +// Principe (demandé explicitement) : +// - Si le taux scrapé == data/rate_decisions.json[ccy].current → rien ne bouge +// (le "prev" existant reste tel quel, ce n'est pas une nouvelle décision). +// - Si le taux scrapé != .current → c'est une nouvelle décision de la banque +// centrale : l'ancien "current" glisse vers "prev", le nouveau taux devient +// "current". Le "source" de cette devise est réécrit pour tracer le switch. +// - Si le scrape échoue (page indisponible / format changé) → on garde les +// valeurs existantes telles quelles, aucune perte de données. +// +// Source : meta description de https://tradingeconomics.com/{slug}/interest-rate +// Format observé : "The benchmark interest rate in/In {Country} was last +// recorded at {value} percent." +// Note EUR : TE reporte directement le taux MRO sur cette page (2.40% le +// 2026-07-08), cohérent avec la convention MRO déjà utilisée dans ce fichier. + +import { writeFileSync, readFileSync, mkdirSync } from "fs"; + +const CHROME_HEADERS = { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "Accept-Language": "en-US,en;q=0.9", + "Cache-Control": "no-cache", + "Pragma": "no-cache", +}; + +const TE_SLUGS = { + USD: "united-states", + EUR: "euro-area", + GBP: "united-kingdom", + JPY: "japan", + CHF: "switzerland", + CAD: "canada", + AUD: "australia", + NZD: "new-zealand", +}; + +const CB_NAME = { + USD: "Fed (FOMC)", EUR: "BCE", GBP: "BoE MPC", JPY: "BoJ", + CHF: "SNB", CAD: "BoC", AUD: "RBA", NZD: "RBNZ", +}; + +async function fetchTERate(slug) { + try { + const res = await fetch(`https://tradingeconomics.com/${slug}/interest-rate`, { headers: CHROME_HEADERS }); + if (!res.ok) return null; + const html = await res.text(); + const meta = html.match(/]*name=["']description["'][^>]*content=["']([^"']+)["']/i) + ?? html.match(/]*content=["']([^"']+)["'][^>]*name=["']description["']/i); + if (!meta) return null; + const m = meta[1].match(/at\s+([\d.]+)\s*percent/i); + return m ? parseFloat(m[1]) : null; + } catch { return null; } +} + +const today = new Date().toISOString().slice(0, 10); + +let existing; +try { + existing = JSON.parse(readFileSync("data/rate_decisions.json", "utf8"))[0]; +} catch { + console.error("✗ Impossible de lire data/rate_decisions.json existant, abandon."); + process.exit(1); +} + +const decisions = { ...existing.decisions }; +let changed = false; +const changeLog = []; + +for (const [ccy, slug] of Object.entries(TE_SLUGS)) { + const scraped = await fetchTERate(slug); + const prevEntry = decisions[ccy]; + + if (scraped === null) { + console.log(`[TE] ${ccy} ✗ scrape échoué → conservé (${prevEntry?.current ?? "?"}%)`); + await new Promise(r => setTimeout(r, 800)); + continue; + } + + if (!prevEntry) { + // Devise jamais vue — initialisation sans historique de "prev" + decisions[ccy] = { + current: scraped, + prev: scraped, + source: `${CB_NAME[ccy] ?? ccy} — initialisation automatique via Trading Economics (${slug}/interest-rate), pas d'historique disponible pour "prev".`, + }; + changed = true; + changeLog.push(`${ccy}: init @ ${scraped}%`); + console.log(`[TE] ${ccy} ⊕ init ${scraped}%`); + } else if (Math.abs(scraped - prevEntry.current) > 0.001) { + // Changement détecté : l'ancien "current" glisse vers "prev" + decisions[ccy] = { + current: scraped, + prev: prevEntry.current, + source: `${CB_NAME[ccy] ?? ccy} — changement détecté automatiquement le ${today} via Trading Economics (${slug}/interest-rate) : ${prevEntry.current}% → ${scraped}%.`, + }; + changed = true; + changeLog.push(`${ccy}: ${prevEntry.current}% → ${scraped}% (prev glisse)`); + console.log(`[TE] ${ccy} ⚡ CHANGEMENT ${prevEntry.current}% → ${scraped}%`); + } else { + console.log(`[TE] ${ccy} = ${scraped}% (inchangé)`); + } + + await new Promise(r => setTimeout(r, 800)); // évite le rate-limiting TE +} + +if (!changed) { + console.log("\nAucun changement de taux directeur détecté — fichier inchangé."); + process.exit(0); +} + +mkdirSync("data", { recursive: true }); +writeFileSync("data/rate_decisions.json", JSON.stringify([{ + updated_at: today, + note: existing.note, + decisions, +}], null, 2) + "\n"); + +console.log(`\n✓ Mis à jour : ${changeLog.join(" | ")}`); diff --git a/.github/workflows/fetch-money-supply.yml b/.github/workflows/fetch-money-supply.yml new file mode 100644 index 0000000..d0fcc3a --- /dev/null +++ b/.github/workflows/fetch-money-supply.yml @@ -0,0 +1,33 @@ +name: Fetch Money Supply M3 + +on: + schedule: + - cron: '0 6 * * 1' # tous les lundis 6h UTC (données mensuelles, pas besoin de plus fréquent) + workflow_dispatch: # déclenchement manuel + +permissions: + contents: write + +jobs: + fetch: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + persist-credentials: true + + - uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Fetch Money Supply M3 (Trading Economics) + run: node .github/scripts/fetch-money-supply.mjs + + - name: Commit updated data (if changed) + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add data/money-supply-m3.json + git diff --staged --quiet || git commit -m "chore: update money supply M3 data [skip ci]" + git push diff --git a/.github/workflows/update-rate-decisions.yml b/.github/workflows/update-rate-decisions.yml new file mode 100644 index 0000000..8149121 --- /dev/null +++ b/.github/workflows/update-rate-decisions.yml @@ -0,0 +1,33 @@ +name: Update Rate Decisions (CB current/prev) + +on: + schedule: + - cron: '20 * * * *' # toutes les heures (décalé de 20min vs fetch-rate-data.yml) + workflow_dispatch: # déclenchement manuel + +permissions: + contents: write + +jobs: + update: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + persist-credentials: true + + - uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Detect CB rate changes (Trading Economics) — shift current → prev + run: node .github/scripts/update-rate-decisions.mjs + + - name: Commit updated data (if changed) + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add data/rate_decisions.json + git diff --staged --quiet || git commit -m "chore: update CB rate decision (current/prev) [skip ci]" + git push diff --git a/.gitignore b/.gitignore index a2f9708..6d7fd31 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .next/ node_modules/ *.log +.vercel diff --git a/app/api/calendar/route.ts b/app/api/calendar/route.ts index 59bab85..84d2af3 100644 --- a/app/api/calendar/route.ts +++ b/app/api/calendar/route.ts @@ -6,8 +6,9 @@ export const dynamic = "force-dynamic"; import type { FFEvent } from "@/lib/forexfactory"; import type { Currency } from "@/lib/types"; import { fetchAllCBPaths, extractMeetingEvents } from "@/lib/rateprobability"; -import { fetchTECalendarHTML } from "@/lib/tradingeconomics"; -import { fetchInvestingCalendar } from "@/lib/investing"; +import { fetchTECalendarWide } from "@/lib/tradingeconomics"; +import { fetchFXStreetCalendar } from "@/lib/fxstreetCalendar"; +import { isExcludedEventTitle, applyImpactFloor } from "@/lib/calendar-taxonomy"; // ── Types ───────────────────────────────────────────────────────────────────── @@ -20,12 +21,21 @@ export type EventCategory = | "gdp" | "retail_sales" | "trade_balance" + | "sentiment" + | "housing" + | "money_supply" + | "trade_detail" + | "regional_fed" + | "portfolio_flows" + | "public_finance" + | "holiday" | "other"; export interface CalendarEvent { id: string; date: string; // ISO string from FF - currency: Currency; + currency: string; // ISO 4217 — univers élargi (45 pays), pas seulement les 8 majeures + countryCode: string; // code pays (plusieurs pays peuvent partager une devise, ex. EUR) category: EventCategory; title: string; // display-friendly rawTitle: string; // original FF title @@ -52,6 +62,12 @@ export interface CalendarResponse { const CURRENCIES = new Set(["USD", "EUR", "GBP", "JPY", "CHF", "CAD", "AUD", "NZD"]); +// Devise majeure → code pays CALENDAR_COUNTRIES (pour aligner les réunions BC, +// qui sont par nature au niveau devise, avec le dédupe par pays de TE/investingLive). +const MAJOR_CCY_TO_COUNTRY: Record = { + USD: "US", EUR: "EMU", GBP: "UK", JPY: "JP", CHF: "CH", CAD: "CA", AUD: "AU", NZD: "NZ", +}; + // ── Category detection ───────────────────────────────────────────────────────── function detectCategory(title: string): EventCategory { @@ -199,6 +215,7 @@ function mapEvent(ff: FFEvent): CalendarEvent | null { id: `${ff.country}_${ff.title}_${ff.date}`.replace(/\s+/g, "_"), date: ff.date, currency: ff.country as Currency, + countryCode: ff.country, category, title: displayTitle(ff.title, ff.country), rawTitle: ff.title, @@ -285,6 +302,7 @@ async function fetchFREDCalendar( id: `fred_${rd.release_id}_${rd.date}`, date: isoDate, currency: def.currency, + countryCode: def.currency, category: def.category, title: def.title, rawTitle: def.title, @@ -305,16 +323,18 @@ async function fetchFREDCalendar( } // ── Dedup key ───────────────────────────────────────────────────────────────── -// Clé déterministe pour identifier un doublon entre TE et Investing. +// Clé déterministe pour identifier un doublon entre TE et investingLive. +// Clé par PAYS (pas devise) : plusieurs pays partagent l'EUR (France, Allemagne, +// Italie...) et publient chacun leurs propres indicateurs le même jour — dédupliquer +// par devise fusionnerait à tort des events distincts (ex. CPI FR ≠ CPI DE). // PMI et discours BC peuvent avoir plusieurs events dans la même journée → // on affine à l'heure UTC pour les distinguer. -// Toutes les autres catégories sont uniques par (devise, catégorie, jour). -function dedupeKey(currency: string, category: EventCategory, isoDate: string): string { +function dedupeKey(countryCode: string, category: EventCategory, isoDate: string): string { if (category === "pmi" || category === "cb_speech") { - return `${currency}_${category}_${isoDate.slice(0, 13)}`; // YYYY-MM-DDTHH + return `${countryCode}_${category}_${isoDate.slice(0, 13)}`; // YYYY-MM-DDTHH } - return `${currency}_${category}_${isoDate.slice(0, 10)}`; // YYYY-MM-DD + return `${countryCode}_${category}_${isoDate.slice(0, 10)}`; // YYYY-MM-DD } // ── GET ──────────────────────────────────────────────────────────────────────── @@ -351,15 +371,15 @@ export async function GET() { toDateObj.setDate(toDateObj.getDate() + 14); const toDate = toDateObj.toISOString().slice(0, 10); - // Fetch TE HTML + Investing + CB paths toujours en parallèle + // Fetch TE (45 pays) + investingLive (widget FXStreet, 45 pays) + CB paths en parallèle // FF+FRED uniquement si les deux scraping tombent à vide - const [teEvents, invEvents, cbPaths] = await Promise.all([ - fetchTECalendarHTML(fromDate, toDate), - fetchInvestingCalendar(fromDate, toDate), + const [teEvents, ilEvents, cbPaths] = await Promise.all([ + fetchTECalendarWide(fromDate, toDate), + fetchFXStreetCalendar(fromDate, toDate), fetchAllCBPaths(), ]); - const useScraping = teEvents.length > 0 || invEvents.length > 0; + const useScraping = teEvents.length > 0 || ilEvents.length > 0; // Fetch FF+FRED en secours seulement si les deux scrapers ont échoué const [ffEvents, fredEvents] = useScraping @@ -377,23 +397,24 @@ export async function GET() { date >= thisMonday ? "current" : "prev"; if (useScraping) { - // ── BASE : TE HTML ──────────────────────────────────────────────────────── + // ── BASE : Trading Economics (45 pays) ───────────────────────────────────── // Index de dédupe : clé → index dans events[] const dedupeIndex = new Map(); for (const te of teEvents) { - if (te.category === "other") continue; // filtre les events sans catégorie pertinente + if (isExcludedEventTitle(te.title)) continue; // adjudications, prod. industrielle, énergie/hypothécaire hebdo US, CPI infranational, réunions institutionnelles const evDate = new Date(te.date); - const key = dedupeKey(te.currency, te.category, te.date); + const key = dedupeKey(te.countryCode, te.category, te.date); dedupeIndex.set(key, events.length); events.push({ id: te.id, date: te.date, currency: te.currency, + countryCode: te.countryCode, category: te.category, title: te.title, rawTitle: te.title, - impact: te.impact, + impact: applyImpactFloor(te.title, te.impact), actual: te.actual, forecast: te.forecast, previous: te.previous, @@ -406,35 +427,37 @@ export async function GET() { }); } - // ── COMPLÉMENT : Investing.com ──────────────────────────────────────────── + // ── COMPLÉMENT : investingLive (widget FXStreet) ─────────────────────────── // Dédupe immédiat via dedupeIndex : même clé = doublon, on enrichit seulement. - // Absent de TE = on ajoute l'event Investing directement. - for (const inv of invEvents) { - if (inv.category === "other") continue; - const key = dedupeKey(inv.currency, inv.category, inv.date); + // Absent de TE = on ajoute l'event investingLive directement — c'est ce qui + // permet aux deux sources de se compléter l'une l'autre. + for (const il of ilEvents) { + if (isExcludedEventTitle(il.title)) continue; + const key = dedupeKey(il.countryCode, il.category, il.date); const existingIdx = dedupeIndex.get(key); if (existingIdx !== undefined) { - // Doublon — enrichir avec les valeurs manquantes d'Investing + // Doublon — enrichir avec les valeurs manquantes d'investingLive const ev = events[existingIdx]; - if (!ev.actual && inv.actual) ev.actual = inv.actual; - if (!ev.forecast && inv.forecast) ev.forecast = inv.forecast; - if (!ev.previous && inv.previous) ev.previous = inv.previous; + if (!ev.actual && il.actual) ev.actual = il.actual; + if (!ev.forecast && il.forecast) ev.forecast = il.forecast; + if (!ev.previous && il.previous) ev.previous = il.previous; } else { - // Présent sur Investing mais absent de TE — on l'ajoute - const evDate = new Date(inv.date); + // Présent sur investingLive mais absent de TE — on l'ajoute + const evDate = new Date(il.date); dedupeIndex.set(key, events.length); events.push({ - id: inv.id, - date: inv.date, - currency: inv.currency, - category: inv.category, - title: inv.title, - rawTitle: inv.title, - impact: inv.impact, - actual: inv.actual, - forecast: inv.forecast, - previous: inv.previous, - isPublished: inv.isPublished, + id: il.id, + date: il.date, + currency: il.currency, + countryCode: il.countryCode, + category: il.category, + title: il.title, + rawTitle: il.title, + impact: applyImpactFloor(il.title, il.impact), + actual: il.actual, + forecast: il.forecast, + previous: il.previous, + isPublished: il.isPublished, week: weekOf(evDate), source: "fred", groupKey: null, @@ -508,6 +531,7 @@ export async function GET() { id: `cb_${meeting.currency}_${meeting.dateIso}`, date: isoDate, currency: meeting.currency, + countryCode: MAJOR_CCY_TO_COUNTRY[meeting.currency] ?? meeting.currency, category: "policy_rate", title: meeting.title + probLabel, rawTitle: meeting.title, @@ -545,7 +569,7 @@ export async function GET() { events.sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()); const sourceLabel = useScraping - ? `tradingeconomics-html(${teEvents.length})+investing(${invEvents.length})+rateprobability` + ? `tradingeconomics-html(${teEvents.length})+investinglive(${ilEvents.length})+rateprobability` : (fredKey ? "forexfactory+fred+rateprobability" : "forexfactory+rateprobability"); const result: CalendarResponse = { diff --git a/app/api/central-bank-sources/route.ts b/app/api/central-bank-sources/route.ts new file mode 100644 index 0000000..3881579 --- /dev/null +++ b/app/api/central-bank-sources/route.ts @@ -0,0 +1,20 @@ +import { NextResponse } from "next/server"; +import { fetchAllCBGovernance } from "@/lib/centralBankGovernance"; +import type { CBGovernance } from "@/lib/centralBankGovernance"; + +export const dynamic = "force-dynamic"; + +export type { CBGovernance, FedDotPlot, FedDot, FedSepHistoryPoint } from "@/lib/centralBankGovernance"; + +export interface CentralBankSourcesResponse { + data: Record; + fetchedAt: string; +} + +export async function GET() { + const data = await fetchAllCBGovernance(); + return NextResponse.json( + { data, fetchedAt: new Date().toISOString() } satisfies CentralBankSourcesResponse, + { headers: { "Cache-Control": "s-maxage=3600, stale-while-revalidate=21600" } } + ); +} diff --git a/app/api/macro/route.ts b/app/api/macro/route.ts index 6cad209..40ec134 100644 --- a/app/api/macro/route.ts +++ b/app/api/macro/route.ts @@ -5,6 +5,7 @@ import type { Currency } from "@/lib/types"; export const dynamic = "force-dynamic"; import cpiOverridesRaw from "@/data/cpi_overrides.json"; import rateDecisionsRaw from "@/data/rate_decisions.json"; +import moneySupplyM3Raw from "@/data/money-supply-m3.json"; import { fetchFFThisWeek, fetchFFEvents } from "@/lib/forexfactory"; import type { FFEvent } from "@/lib/forexfactory"; import { fetchTECoreInflation, fetchTEMoMInflation, fetchTEInflationYoY, fetchTECoreCPIMoM, fetchTECoreConsumerPricesIndex, fetchTEPPIMoM, fetchTECoreInflationPages, fetchTEInflationYoYPages, fetchTEAUDCommodityYoY, fetchTEGDPGrowthRate, fetchTEUnemploymentRate, fetchTESTIRRate, fetchTEEmploymentChange } from "@/lib/tecpi"; @@ -129,6 +130,78 @@ async function boeRate(): Promise { } catch { return []; } } +// ── SNB officiel (CHF policy rate) ───────────────────────────────────────────── +// snb.ch publie ses décisions sous /press-releases-restricted/pre_YYYYMMDD. +// On découvre la plus récente depuis la page listing (1er lien du pattern), +// puis on lit le taux dans le titre : "leaves ... unchanged at X%" / "lowers/raises ... to X%". +async function scrapeSnbRate(): Promise { + const headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", + "Accept": "text/html,application/xhtml+xml,*/*;q=0.8", + }; + try { + const listRes = await fetch("https://www.snb.ch/en/the-snb/mandates-goals/monetary-policy/decisions", { + next: { revalidate: REVALIDATE }, headers, + }); + if (!listRes.ok) return null; + const listHtml = await listRes.text(); + const linkMatch = listHtml.match(/href="(\/en\/publications\/communication\/press-releases-restricted\/pre_\d{8}[^"]*)"/); + if (!linkMatch) return null; + + const prRes = await fetch(`https://www.snb.ch${linkMatch[1]}`, { + next: { revalidate: REVALIDATE }, headers, + }); + if (!prRes.ok) return null; + const prHtml = await prRes.text(); + const rateMatch = prHtml.match(/SNB policy rate\s+(?:unchanged at|to)\s+(-?[\d.]+)%/i); + return rateMatch ? parseFloat(rateMatch[1]) : null; + } catch { return null; } +} + +// ── Fed officiel (USD policy rate) ────────────────────────────────────────────── +// fomccalendars.htm liste, pour chaque réunion, un lien de statement +// /newsevents/pressreleases/monetary(YYYYMMDD)a.htm. On prend la réunion passée +// la plus récente puis on lit la fourchette officielle : "target range for the +// federal funds rate at/to X to Y percent" (X/Y en fractions type "3-1/2"). +// On retourne le haut de fourchette (convention "upper bound" déjà utilisée ici). +function parseFedFraction(s: string): number { + const m = s.match(/^(\d+)(?:-(\d+)\/(\d+))?$/); + if (!m) return NaN; + const whole = parseFloat(m[1]); + return m[2] ? whole + parseFloat(m[2]) / parseFloat(m[3]) : whole; +} + +async function scrapeFedRate(): Promise { + const headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", + "Accept": "text/html,application/xhtml+xml,*/*;q=0.8", + }; + try { + const calRes = await fetch("https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm", { + next: { revalidate: REVALIDATE }, headers, + }); + if (!calRes.ok) return null; + const calHtml = await calRes.text(); + + const todayCompact = new Date().toISOString().slice(0,10).replace(/-/g,""); + const dates = new Set(); + for (const m of Array.from(calHtml.matchAll(/\/newsevents\/pressreleases\/monetary(\d{8})a\.htm/g))) dates.add(m[1]); + const latestPast = Array.from(dates).filter(d => d <= todayCompact).sort().reverse()[0]; + if (!latestPast) return null; + + const stRes = await fetch(`https://www.federalreserve.gov/newsevents/pressreleases/monetary${latestPast}a.htm`, { + next: { revalidate: REVALIDATE }, headers, + }); + if (!stRes.ok) return null; + const stHtml = await stRes.text(); + const rateMatch = stHtml.match(/target range for the federal funds rate[\s\S]{0,60}?\d+(?:-\d\/\d)?\s*to\s*(\d+(?:-\d\/\d)?)\s*percent/i); + if (!rateMatch) return null; + + const upper = parseFedFraction(rateMatch[1]); + return isNaN(upper) ? null : upper; + } catch { return null; } +} + // ── DBnomics API (agrégateur IMF/IFS, BIS, OECD…) ──────────────────────────── // Format : https://api.db.nomics.world/v22/series/{provider}/{dataset}/{code}?observations=1 // Utilisé pour les séries absentes de FRED : JPY CPI, AUD/NZD CPI fallback @@ -530,6 +603,19 @@ function getRateDecision(ccy: string): RateDecision | null { return entry?.decisions?.[ccy] ?? null; } +// ── money-supply-m3.json — masse monétaire M3 (niveau, statique) ───────────── + +type MoneySupplyM3 = { + value: number; unit: string; period: string; isProxy: boolean; + proxyLabel?: string; source: string; +}; + +function getMoneySupplyM3(ccy: string): MoneySupplyM3 | null { + type MsRaw = [{ series: Record }]; + const entry = (moneySupplyM3Raw as unknown as MsRaw)[0]; + return entry?.series?.[ccy] ?? null; +} + /** Construit un IndicatorResult à partir de la valeur TE + prev de l'override */ function buildRateIndicator(current: number, prev: number, today: string): IndicatorResult { const surprise = parseFloat((current - prev).toFixed(4)); @@ -846,11 +932,13 @@ export async function GET(req: NextRequest) { // USD — midpoint de la fourchette cible (DFEDTARU + DFEDTARL) / 2 // Rateprobability.com / marchés quotent le midpoint (3.625%) pas l'upper bound (3.75%) - // USD — TE scraping (taux Fed upper bound officiel = 3.75%) + // USD — Fed officiel en primaire (source directe federalreserve.gov, cf. scrapeFedRate) + // Repli TE scraping puis FRED upper bound si federalreserve.gov indisponible. // Ancien calcul midpoint FRED (DFEDTARU+DFEDTARL)/2 = 3.625% → pas le taux annoncé if (currency === "USD") { - const te = await scrapeTeRate(TE_COUNTRY.USD); + const fed = await scrapeFedRate(); const ovr = getRateDecision("USD"); + const te = fed ?? await scrapeTeRate(TE_COUNTRY.USD); if (te !== null && ovr) { indicators.policyRate = buildRateIndicator(te, ovr.prev, today); } else if (te !== null) { @@ -930,15 +1018,17 @@ export async function GET(req: NextRequest) { } } - // CHF — TE scraping (taux SNB officiel exact = 0.00%) + // CHF — SNB officiel en primaire (source directe snb.ch, cf. scrapeSnbRate) + // Repli TE scraping si snb.ch indisponible. // IR3TIB01CHM156N = SARON 3M (~-0.04%) ≠ taux SNB officiel if (currency === "CHF") { - const te = await scrapeTeRate(TE_COUNTRY.CHF); + const snb = await scrapeSnbRate(); const ovr = getRateDecision("CHF"); - if (te !== null && ovr) { - indicators.policyRate = buildRateIndicator(te, ovr.prev, today); - } else if (te !== null) { - indicators.policyRate = { value: te, prev: null, surprise: null, trend: null, lastUpdated: today }; + const rate = snb ?? await scrapeTeRate(TE_COUNTRY.CHF); + if (rate !== null && ovr) { + indicators.policyRate = buildRateIndicator(rate, ovr.prev, today); + } else if (rate !== null) { + indicators.policyRate = { value: rate, prev: null, surprise: null, trend: null, lastUpdated: today }; } } @@ -1047,18 +1137,16 @@ export async function GET(req: NextRequest) { toDateObj.setDate(toDateObj.getDate() + 21); const toDate = toDateObj.toISOString().slice(0, 10); - const [ffPMI, pmiMfgRaw, pmiSvcRaw, pmiCompositeRaw, ffForecasts, teForecastMap, invForecastMap] = await Promise.all([ + const [ffPMI, pmiMfgRaw, pmiSvcRaw, pmiCompositeRaw, ffForecasts, teForecastMap] = await Promise.all([ fetchFFPMI(currency), scrapePMI(currency, "manufacturing-pmi"), scrapePMI(currency, "services-pmi"), scrapePMI(currency, "composite-pmi"), fetchFFForecasts(currency), fetchTEInflationForecasts(today, toDate), - (await import("@/lib/investing")).fetchInvestingInflationForecasts(today, toDate), ]); const teCpiForecast = teForecastMap[currency]; - const invForecast = invForecastMap[currency]; // FF en priorité (forecast + actual) ; TE en fallback indicators.pmiMfg = ffPMI.mfg ? toPmiIndicator(ffPMI.mfg) : toPmiIndicator(pmiMfgRaw); indicators.pmiServices = ffPMI.svc ? toPmiIndicator(ffPMI.svc) : toPmiIndicator(pmiSvcRaw); @@ -1337,14 +1425,14 @@ export async function GET(req: NextRequest) { const data = { currency, indicators, + moneySupplyM3: getMoneySupplyM3(currency), forecasts: { // CPI — TE calendar forecast (priorité) puis ForexFactory - // Les forecasts TE sont des strings "2.8%" → parseFloat les convertit en number - cpi: parseTeF(teCpiForecast?.cpiYoY) ?? parseTeF(invForecast?.cpiYoY) ?? ffForecasts.cpi ?? null, - cpiCore: parseTeF(teCpiForecast?.cpiCore) ?? parseTeF(invForecast?.cpiCore) ?? null, - cpiMoM: parseTeF(teCpiForecast?.cpiMoM) ?? parseTeF(invForecast?.cpiMoM) ?? null, - cpiCoreMoM: parseTeF(teCpiForecast?.cpiCoreMoM) ?? parseTeF(invForecast?.cpiCoreMoM) ?? null, - ppiMoM: parseTeF(teCpiForecast?.ppiMoM) ?? parseTeF(invForecast?.ppiMoM) ?? null, + cpi: parseTeF(teCpiForecast?.cpiYoY) ?? ffForecasts.cpi ?? null, + cpiCore: parseTeF(teCpiForecast?.cpiCore) ?? null, + cpiMoM: parseTeF(teCpiForecast?.cpiMoM) ?? null, + cpiCoreMoM: parseTeF(teCpiForecast?.cpiCoreMoM) ?? null, + ppiMoM: parseTeF(teCpiForecast?.ppiMoM) ?? null, cpiSurprise: ffForecasts.cpiSurprise, unemployment: ffForecasts.unemployment, unemploymentSurprise: ffForecasts.unemploymentSurprise, diff --git a/app/page.tsx b/app/page.tsx index 51083a8..e67b67b 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -9,12 +9,10 @@ import { saveCache, loadCache, formatCacheDate } from "@/lib/localCache"; import CurrencyCard from "@/components/CurrencyCard"; import DriversBar from "@/components/DriversBar"; import CalendarTab from "@/components/CalendarTab"; -import SentimentPairsTab from "@/components/SentimentPairsTab"; -import YieldsTab from "@/components/YieldsTab"; import NewsTab from "@/components/NewsTab"; import CotTab from "@/components/CotTab"; -import ReportTab from "@/components/ReportTab"; import IdeesTab from "@/components/IdeesTab"; +import CentralBankSourcesTab from "@/components/CentralBankSourcesTab"; import { TvAdvancedChart } from "@/components/TvChart"; import type { CalendarEvent } from "@/app/api/calendar/route"; import type { NewsItem } from "@/app/api/news/route"; @@ -30,12 +28,11 @@ export default function Dashboard() { const [cot, setCot] = useState | null>(null); const [calEvents, setCalEvents] = useState([]); const [nextWeekAvail, setNextWeekAvail] = useState(false); - const [activeTab, setActiveTab] = useState<"dashboard" | "calendar" | "pairs" | "yields" | "news" | "cot" | "report" | "markets" | "idees">("dashboard"); + const [activeTab, setActiveTab] = useState<"dashboard" | "calendar" | "news" | "cot" | "markets" | "idees" | "cbsources">("dashboard"); const [newsItems, setNewsItems] = useState([]); const [newsLoading, setNewsLoading] = useState(false); const [cotHistory, setCotHistory] = useState(null); const [cotLoading, setCotLoading] = useState(false); - const [rawSymbols, setRawSymbols] = useState | null>(null); const [rateProbabilities, setRateProbabilities] = useState(null); const [lastRefresh, setLastRefresh] = useState(new Date()); const [loading, setLoading] = useState(true); @@ -200,7 +197,6 @@ export default function Dashboard() { // ── Sentiment Myfxbook ──────────────────────────────────────────────── if (sentimentRes.status === "fulfilled" && !sentimentRes.value?.error && sentimentRes.value?.symbols) { const syms = sentimentRes.value.symbols as Array<{ name: string; longPercentage: number; shortPercentage: number; longVolume: number; shortVolume: number; longPositions: number; shortPositions: number; totalPositions: number; avgLongPrice?: number; avgShortPrice?: number }>; - setRawSymbols(syms); const mapped = parseSentimentSymbols(syms); setSentiment(mapped); saveCache("sentiment", mapped); @@ -347,7 +343,7 @@ export default function Dashboard() { {/* Tab navigation */}
- {(["dashboard", "markets", "idees", "calendar", "pairs", "yields", "news", "cot", "report"] as const).map((tab) => ( + {(["dashboard", "markets", "idees", "calendar", "cbsources", "news", "cot"] as const).map((tab) => ( ))}
@@ -619,13 +613,7 @@ export default function Dashboard() { )} - {activeTab === "pairs" && ( - - )} - - {activeTab === "yields" && ( - - )} + {activeTab === "cbsources" && } {activeTab === "news" && ( @@ -637,10 +625,6 @@ export default function Dashboard() { {activeTab === "idees" && } - {activeTab === "report" && ( - - )} - {/* Legend */}
Haussier / Sous-évalué
diff --git a/check-console.js b/check-console.js new file mode 100644 index 0000000..51eb177 --- /dev/null +++ b/check-console.js @@ -0,0 +1,35 @@ +const { chromium } = require('playwright'); +(async () => { + const b = await chromium.launch(); + const p = await b.newPage(); + const errors = []; + const warnings = []; + p.on('console', msg => { + if (msg.type() === 'error') errors.push(msg.text()); + if (msg.type() === 'warning') warnings.push(msg.text()); + }); + p.on('pageerror', err => errors.push('PAGE ERROR: ' + err.message)); + await p.setViewportSize({width: 589, height: 900}); + await p.goto('http://localhost:3099/'); + await p.waitForTimeout(10000); + console.log('ERRORS:', JSON.stringify(errors, null, 2)); + console.log('WARNINGS:', JSON.stringify(warnings.slice(0, 5), null, 2)); + + // Also check page height + const height = await p.evaluate(() => document.body.scrollHeight); + console.log('Page height:', height); + + // Check if any element has overflow issues + const overflows = await p.evaluate(() => { + const issues = []; + document.querySelectorAll('*').forEach(el => { + if (el.scrollWidth > el.clientWidth + 5) { + issues.push(el.className.substring(0, 80)); + } + }); + return issues.slice(0, 10); + }); + console.log('Overflow elements:', overflows); + + await b.close(); +})(); diff --git a/components/CalendarTab.tsx b/components/CalendarTab.tsx index 5dbcbac..a0d5067 100644 --- a/components/CalendarTab.tsx +++ b/components/CalendarTab.tsx @@ -1,9 +1,8 @@ "use client"; -import React, { useState, useMemo } from "react"; +import React, { useState, useMemo, useRef } from "react"; import { ChevronDown, ChevronRight, Loader2, Calendar } from "lucide-react"; -import { CURRENCIES, CURRENCY_META } from "@/lib/constants"; -import type { Currency } from "@/lib/types"; +import { CURRENCY_META } from "@/lib/constants"; import type { CalendarEvent } from "@/app/api/calendar/route"; interface Props { @@ -21,9 +20,19 @@ const CATEGORY_LABELS: Record = { gdp: "PIB", retail_sales: "Ventes détail", trade_balance: "Balance comm.", + sentiment: "Confiance", + housing: "Immobilier", + money_supply: "Masse monétaire", + trade_detail: "Commerce (détail)", + regional_fed: "Fed régionale", + portfolio_flows:"Flux portefeuille", + public_finance: "Finances publiques", + holiday: "Jour férié", + other: "Autre", }; // ── Currency → ISO alpha-2 (pour flagcdn.com) ───────────────────────────────── +// Univers élargi (45 pays côté calendrier, au-delà des 8 devises majeures tradées). const CCY_ISO: Record = { USD: "us", EUR: "eu", GBP: "gb", JPY: "jp", @@ -31,8 +40,15 @@ const CCY_ISO: Record = { CNY: "cn", SEK: "se", NOK: "no", DKK: "dk", SGD: "sg", HKD: "hk", MXN: "mx", BRL: "br", ZAR: "za", INR: "in", KRW: "kr", TRY: "tr", + ARS: "ar", CLP: "cl", COP: "co", CZK: "cz", + HUF: "hu", ISK: "is", IDR: "id", ILS: "il", + KWD: "kw", PLN: "pl", RON: "ro", RUB: "ru", VND: "vn", }; +// Ordre d'affichage préféré des chips devise : majeures d'abord, puis le reste +// trié alphabétiquement (calculé dynamiquement depuis les events reçus). +const MAJOR_ORDER = ["USD", "EUR", "GBP", "JPY", "CHF", "CAD", "AUD", "NZD"]; + // ── Helpers ─────────────────────────────────────────────────────────────────── function isoToLocalDate(iso: string): string { @@ -100,7 +116,6 @@ function EventRow({ ev, isChild, expanded, onToggle }: { ev: CalendarEvent; isChild: boolean; expanded: boolean; onToggle: () => void; }) { const { day, time } = fmtDate(ev.date); - const meta = CURRENCY_META[ev.currency]; const borderCls = !ev.isPublished && ev.impact === "high" ? "border-l-2 border-l-red-500" : !ev.isPublished && ev.impact === "medium" ? "border-l-2 border-l-amber-400" @@ -177,11 +192,12 @@ function EventRow({ ev, isChild, expanded, onToggle }: { type WeekTab = "prev" | "current" | "next" | "next2" | "all"; export default function CalendarTab({ events, loading, nextWeekAvail }: Props) { - const [filterCcy, setFilterCcy] = useState("ALL"); + const [filterCcy, setFilterCcy] = useState("ALL"); const [expanded, setExpanded] = useState>(new Set()); const [showLow, setShowLow] = useState(false); const [weekTab, setWeekTab] = useState("all"); const [fromDate, setFromDate] = useState(todayIso()); + const fromDateRef = useRef(null); const { prevWeekLabel, currentWeekLabel, nextWeekLabel, next2StartLabel, nextMondayIso } = useMemo(getWeekBounds, []); void nextMondayIso; @@ -206,6 +222,19 @@ export default function CalendarTab({ events, loading, nextWeekAvail }: Props) { return true; }), [events, filterCcy, showLow, expanded, weekTab, fromDate]); + // Chips devise : toutes les devises présentes dans les events reçus, + // majeures d'abord (ordre trading), puis le reste par ordre alphabétique. + const availableCurrencies = useMemo(() => { + const set = new Set(events.map(ev => ev.currency)); + return Array.from(set).sort((a, b) => { + const ia = MAJOR_ORDER.indexOf(a), ib = MAJOR_ORDER.indexOf(b); + if (ia !== -1 && ib !== -1) return ia - ib; + if (ia !== -1) return -1; + if (ib !== -1) return 1; + return a.localeCompare(b); + }); + }, [events]); + const days: string[] = []; const dayMap: Record = {}; for (const ev of filtered) { @@ -228,7 +257,7 @@ export default function CalendarTab({ events, loading, nextWeekAvail }: Props) {

Calendrier économique

-

Sources : ForexFactory · FRED · Banques centrales

+

Sources : Trading Economics · investingLive · Banques centrales

@@ -348,7 +390,14 @@ export default function CalendarTab({ events, loading, nextWeekAvail }: Props) {

)} {fromDate > todayIso() && ( - )} diff --git a/components/CentralBankSourcesTab.tsx b/components/CentralBankSourcesTab.tsx new file mode 100644 index 0000000..d19c2c0 --- /dev/null +++ b/components/CentralBankSourcesTab.tsx @@ -0,0 +1,321 @@ +"use client"; + +import React, { useEffect, useState } from "react"; +import { Loader2, ExternalLink, FileText, RefreshCw } from "lucide-react"; +import { + ScatterChart, Scatter, ZAxis, LineChart, Line, + ResponsiveContainer, Tooltip, XAxis, YAxis, CartesianGrid, +} from "recharts"; +import type { CBGovernance } from "@/app/api/central-bank-sources/route"; + +const CCY_ISO: Record = { + USD: "us", EUR: "eu", GBP: "gb", JPY: "jp", + CHF: "ch", CAD: "ca", AUD: "au", NZD: "nz", +}; + +const ORDER = ["USD", "EUR", "GBP", "JPY", "CHF", "CAD", "AUD", "NZD"]; + +function Flag({ ccy }: { ccy: string }) { + return ( +
+ {ccy} { (e.target as HTMLImageElement).style.display = "none"; }} + /> +
+ ); +} + +// ── Dot plot Fed : scatter (année × taux, taille = nb de participants) ──────── + +function FedDotPlotChart({ dotPlot }: { dotPlot: NonNullable }) { + const yearIndex = new Map(dotPlot.years.map((y, i) => [y, i])); + const scatterData = dotPlot.dots.map(d => ({ x: yearIndex.get(d.year) ?? 0, y: d.rate, z: d.count, year: d.year })); + const medianData = dotPlot.years.map((y, i) => ({ x: i, y: dotPlot.medianByYear[y] })); + + const allRates = dotPlot.dots.map(d => d.rate); + const minY = Math.min(...allRates, ...Object.values(dotPlot.medianByYear)) - 0.2; + const maxY = Math.max(...allRates, ...Object.values(dotPlot.medianByYear)) + 0.2; + + return ( + + + + i)} + tickFormatter={(i: number) => dotPlot.years[i] ?? ""} + tick={{ fontSize: 8, fill: "#64748b" }} axisLine={false} tickLine={false} + /> + `${v.toFixed(1)}%`} + tick={{ fontSize: 8, fill: "#64748b" }} axisLine={false} tickLine={false} width={34} + /> + + { + const p = payload?.[0]?.payload as { year: string; y: number; z: number } | undefined; + if (!p) return null; + return ( +
+

{p.year} · {p.y.toFixed(3)}%

+

{p.z} participant{p.z > 1 ? "s" : ""}

+
+ ); + }} + /> + + +
+
+ ); +} + +// ── Évolution : médiane "année courante" + "long terme" au fil des SEP ──────── + +function FedEvolutionChart({ dotPlot }: { dotPlot: NonNullable }) { + const data = dotPlot.history.map(h => { + const entries = Object.entries(h.medianByYear); + const nearTerm = entries.find(([y]) => y !== "Longer run")?.[1] ?? null; + const longRun = h.medianByYear["Longer run"] ?? null; + return { date: h.date.slice(2, 7), nearTerm, longRun }; + }); + + return ( + + + + `${v.toFixed(1)}%`} /> + { + if (!payload?.length) return null; + const items = payload as { dataKey: string; value: number }[]; + return ( +
+

{label}

+ {items.map(it => ( +

+ {it.dataKey === "longRun" ? "Long terme" : "Année courante"} : {it.value.toFixed(2)}% +

+ ))} +
+ ); + }} + /> + + +
+
+ ); +} + +// ── Prévisions macro (comment la BC voit sa propre économie) ────────────────── +// PIB + inflation par échéance, publiées par la BC elle-même (SEP Fed, +// Eurosystem staff projections, BoJ Outlook Report, MPR BoC, SMP RBA…). + +function fmtForecastYear(y: string): string { + const m = y.match(/^(\d{4})-(\d{2})$/); + if (!m) return y; + const MONTH: Record = { "06": "Jun", "12": "Dec" }; + return `${MONTH[m[2]] ?? m[2]}’${m[1].slice(2)}`; +} + +function ForecastBlock({ forecast }: { forecast: NonNullable }) { + const years = forecast.years; + const hasGdp = Object.values(forecast.gdp).some(v => v != null); + const hasInfl = Object.values(forecast.inflation).some(v => v != null); + if (!years.length || (!hasGdp && !hasInfl)) return null; + + return ( +
+

Prévisions — comment la BC voit son économie

+
+ + + + + {years.map(y => ( + + ))} + + + + {hasGdp && ( + + + {years.map(y => { + const v = forecast.gdp[y]; + return ( + + ); + })} + + )} + {hasInfl && ( + + + {years.map(y => { + const v = forecast.inflation[y]; + return ( + + ); + })} + + )} + +
{fmtForecastYear(y)}
PIB + {v != null ? `${v > 0 ? "+" : ""}${v}%` : "—"} +
Inflation + {v != null ? `${v > 0 ? "+" : ""}${v}%` : "—"} +
+
+

+ {forecast.label} · publié {forecast.asOf} + {forecast.isProxy && forecast.proxyLabel ? ` · ${forecast.proxyLabel}` : ""} +

+
+ ); +} + +// ── Carte banque centrale ────────────────────────────────────────────────────── + +function CBCard({ g }: { g: CBGovernance }) { + const hasVote = g.voteSummary !== null; + return ( +
+
+ +
+

{g.bankName}

+

{g.countryLabel} · {g.currency}

+
+
+ +
+ {hasVote ? ( + <> +
+
+

Dernière réunion

+

{g.meetingDate ?? "—"}

+
+
+

Taux

+

{g.rateLevel ?? "—"}

+
+
+ +
+

Vote

+

{g.voteSummary}

+ {g.voteDetail && ( +

{g.voteDetail}

+ )} +
+ + {g.dotPlot && ( +
+

Dot plot — projections des membres

+ +

Évolution (dernières publications SEP)

+ +
+ Année courante + Long terme +
+
+ )} + + {g.forecast && } + + ) : ( +
+

+ {g.fetchError === "Scraping non encore implémenté pour cette banque" + ? "Vote / rapport non encore automatisés pour cette banque" + : `Données indisponibles (${g.fetchError ?? "erreur"})`} +

+
+ )} + +
+ {g.reportPdfUrl && ( + + Rapport PDF + + )} + + Site officiel + +
+
+
+ ); +} + +// ── Onglet principal ──────────────────────────────────────────────────────────── + +export default function CentralBankSourcesTab() { + const [data, setData] = useState | null>(null); + const [loading, setLoading] = useState(true); + const [fetchedAt, setFetchedAt] = useState(null); + + const load = React.useCallback(async () => { + setLoading(true); + try { + const res = await fetch("/api/central-bank-sources", { cache: "no-store" }); + const json = await res.json(); + setData(json.data); + setFetchedAt(json.fetchedAt); + } finally { + setLoading(false); + } + }, []); + + useEffect(() => { load(); }, [load]); + + return ( +
+
+
+

Sources banques centrales

+

+ Vote de la dernière réunion · dot plot (Fed) · rapport de politique monétaire · site officiel +

+
+
+ {fetchedAt && MAJ {new Date(fetchedAt).toLocaleTimeString("fr-FR", { hour: "2-digit", minute: "2-digit" })}} + +
+
+ + {loading && !data ? ( +
+ +
+ ) : ( +
+ {ORDER.map(ccy => { + const g = data?.[ccy]; + return g ? : null; + })} +
+ )} +
+ ); +} diff --git a/components/CurrencyCard.tsx b/components/CurrencyCard.tsx index bc6585a..d561ab2 100644 --- a/components/CurrencyCard.tsx +++ b/components/CurrencyCard.tsx @@ -39,10 +39,15 @@ interface MacroForecasts { gdp: number | null; gdpSurprise: number | null; employment: number | null; employmentSurprise: number | null; } +interface MoneySupplyM3 { + value: number; unit: string; period: string; isProxy: boolean; + proxyLabel?: string; source: string; +} interface MacroData { currency: string; indicators: Record; forecasts?: MacroForecasts | null; + moneySupplyM3?: MoneySupplyM3 | null; fetchedAt: string; } @@ -216,6 +221,16 @@ const ENERGY_PROFILE: Record icon: "🏦", sources: [ { label: `Trading Economics — ${country} interest rate`, url: `https://tradingeconomics.com/${country}/interest-rate`, note: `Taux directeur ${cbName} actuel` }, + { label: `Trading Economics — ${country} money supply M3`, url: `https://tradingeconomics.com/${country}/money-supply-m3`, note: currency === "USD" ? "M2 utilisé en proxy (M3 non publié par la Fed depuis 2006)" : "Masse monétaire M3" }, { label: "FRED — Federal Reserve Economic Data", url: "https://fred.stlouisfed.org", note: "Spreads crédit HY/IG (BAMLH0A0HYM2, BAMLC0A0CM)" }, ], }, @@ -523,6 +539,11 @@ function OISEnhancedBlock({ ratePath, syncChartTab, onChartTabChange }: { const altRate = mlIsMove ? currentRate : m0.impliedRate; const altProb = mlIsMove ? 100 - m0.probMovePct : m0.probMovePct; const altIsMove = !mlIsMove; + // moveLabel vaut toujours "Hold" quand le scénario principal est un statu quo (isMoveExpected + // false) — le réutiliser pour l'alternative affichait donc "X% Hold" au lieu de "X% Hike/Cut" + // quand l'alternative EST le mouvement. La direction de l'alternative-mouvement est toujours + // celle de m0.probIsCut, indépendamment du scénario principal. + const altLabel = altIsMove ? (m0.probIsCut ? "Cut" : "Hike") : "Hold"; // Chart data (limit to 10 meetings) const chartMeetings = meetings.slice(0, 10); @@ -588,7 +609,7 @@ function OISEnhancedBlock({ ratePath, syncChartTab, onChartTabChange }: { {altProb >= 15 && altIsMove !== mlIsMove && ( <> · - {Math.round(altProb)}% {altIsMove ? moveLabel : "Hold"} + {Math.round(altProb)}% {altLabel} )} au {ratePath.asOf} @@ -939,6 +960,7 @@ export default function CurrencyCard({ // ── Computed values ────────────────────────────────────────────────────────── const inds = data?.indicators; const fc = data?.forecasts ?? null; + const m3 = data?.moneySupplyM3 ?? null; const forScoring = { policyRate: { value: inds?.policyRate?.value ?? null, prev: inds?.policyRate?.prev ?? null, consensus: null, surprise: inds?.policyRate?.surprise ?? null, trend: inds?.policyRate?.trend ?? null, lastUpdated: "" }, @@ -1638,8 +1660,24 @@ export default function CurrencyCard({ className="absolute inset-0 overflow-hidden" > + {/* Skeleton chargement — affiché quand pas encore de données */} + {loading && !data && ( +
+
+ {[68, 82, 55, 76, 60].map((w, i) => ( +
+
+
+
+
+
+
+ ))} +
+ )} + {/* MON. — Politique Monétaire */} - {macroSlide === "mon" && ( + {!loading && macroSlide === "mon" && ( {(() => { @@ -1666,11 +1704,28 @@ export default function CurrencyCard({ {yield10Y.toFixed(2)}%
)} + {m3 && ( +
+
+ + Money Supply M3{m3.isProxy ? " (M2)" : ""} + {m3.isProxy && ( + + i + + {m3.proxyLabel} + + + )} +
+ {formatM3(m3)} +
+ )} )} {/* INFL. — Inflation */} - {macroSlide === "infl" && ( + {!loading && macroSlide === "infl" && ( @@ -1680,7 +1735,7 @@ export default function CurrencyCard({ )} {/* CRO. — Croissance */} - {macroSlide === "cro" && ( + {!loading && macroSlide === "cro" && ( @@ -1691,7 +1746,7 @@ export default function CurrencyCard({ )} {/* EMPL. — Emploi */} - {macroSlide === "empl" && ( + {!loading && macroSlide === "empl" && ( diff --git a/components/IdeesTab.tsx b/components/IdeesTab.tsx index 6f83a5b..3b1d720 100644 --- a/components/IdeesTab.tsx +++ b/components/IdeesTab.tsx @@ -52,8 +52,8 @@ function loadLS(key: string, fb: T): T { if (typeof window === "undefined") return fb; try { const r = localStorage.getItem(key); return r ? JSON.parse(r) as T : fb; } catch { return fb; } } -function saveLS(key: string, val: unknown) { - try { localStorage.setItem(key, JSON.stringify(val)); } catch {} +function saveLS(key: string, val: unknown): boolean { + try { localStorage.setItem(key, JSON.stringify(val)); return true; } catch { return false; } } const DEFAULT_SLOT = (symbol = "FX:EURUSD"): SlotState => ({ @@ -444,7 +444,9 @@ function ArchiveCard({ a, onDelete, onRestore }: { )} {/* Carte compacte */} -
+ {/* Pas de overflow-hidden ici : le menu déroulant "Restaurer" est en position + absolute et serait rogné par un ancêtre overflow-hidden (cf. bug signalé). */} +
{/* Header */}
{a.slot.symbol} @@ -483,18 +485,24 @@ function ArchiveCard({ a, onDelete, onRestore }: { className="text-[8px] text-slate-600 hover:text-sky-400 transition-colors ml-1 shrink-0" >↗ Voir + onClick={() => { if (window.confirm("Supprimer définitivement cette archive ?")) onDelete(); }} + title="Supprimer définitivement" + className="text-[8px] text-red-400/80 hover:text-red-400 transition-colors ml-1 shrink-0" + >✕ Supprimer
{/* Corps : texte + images */} {a.slot.notes && (
- {/* Texte brut (sans tags HTML) */} + {/* Texte brut (sans tags HTML) — les tags de bloc sont convertis en + retours à la ligne avant extraction, sinon .textContent colle tous + les paragraphes/lignes de liste bout à bout sans séparation. */} {(() => { - const doc = new DOMParser().parseFromString(a.slot.notes, "text/html"); - const text = doc.body.textContent?.trim() ?? ""; + const withBreaks = a.slot.notes + .replace(/<\/(p|div|li|h[1-6])>/gi, "\n") + .replace(//gi, "\n"); + const doc = new DOMParser().parseFromString(withBreaks, "text/html"); + const text = (doc.body.textContent ?? "").replace(/\n{3,}/g, "\n\n").trim(); const imgs = Array.from(doc.images); return ( <> @@ -564,6 +572,14 @@ export default function IdeesTab() { DEFAULT_SLOT("FX:GBPUSD"), ]); const [archives, setArchives] = useState([]); + // Passe à true si une écriture localStorage échoue (ex: quota dépassé à cause + // des images en base64 dans les notes archivées) — sans ça l'échec est silencieux + // et une suppression/modification peut sembler ne "pas marcher" après rechargement. + const [saveError, setSaveError] = useState(false); + + const persist = useCallback((key: string, val: unknown) => { + setSaveError(!saveLS(key, val)); + }, []); useEffect(() => { setSlots(loadLS<[SlotState, SlotState]>(LS_SLOTS, [DEFAULT_SLOT("FX:EURUSD"), DEFAULT_SLOT("FX:GBPUSD")])); @@ -574,30 +590,30 @@ export default function IdeesTab() { setSlots(prev => { const next: [SlotState, SlotState] = [prev[0], prev[1]]; next[idx] = s; - saveLS(LS_SLOTS, next); + persist(LS_SLOTS, next); return next; }); - }, []); + }, [persist]); const archiveSlot = useCallback((idx: 0 | 1) => { const entry: Archive = { id: Date.now().toString(), savedAt: new Date().toISOString(), slot: slots[idx] }; const next = [entry, ...archives]; setArchives(next); - saveLS(LS_ARCHIVES, next); + persist(LS_ARCHIVES, next); const reset = DEFAULT_SLOT(idx === 0 ? "FX:EURUSD" : "FX:GBPUSD"); setSlots(prev => { const n: [SlotState, SlotState] = [prev[0], prev[1]]; n[idx] = reset; - saveLS(LS_SLOTS, n); + persist(LS_SLOTS, n); return n; }); - }, [slots, archives]); + }, [slots, archives, persist]); const deleteArchive = useCallback((id: string) => { const next = archives.filter(a => a.id !== id); setArchives(next); - saveLS(LS_ARCHIVES, next); - }, [archives]); + persist(LS_ARCHIVES, next); + }, [archives, persist]); const restoreArchive = useCallback((id: string, slotIdx: 0 | 1) => { const entry = archives.find(a => a.id === id); @@ -605,10 +621,10 @@ export default function IdeesTab() { setSlots(prev => { const next = [...prev] as [SlotState, SlotState]; next[slotIdx] = { ...entry.slot }; - saveLS(LS_SLOTS, next); + persist(LS_SLOTS, next); return next; }); - }, [archives]); + }, [archives, persist]); return (
@@ -619,6 +635,14 @@ export default function IdeesTab() {
+ {saveError && ( +
+ ⚠ Échec de sauvegarde locale — le quota de stockage du navigateur est probablement dépassé + (les archives avec images occupent beaucoup de place). Supprime quelques archives pour libérer + de la place, sinon tes changements ne seront pas conservés au rechargement. +
+ )} + updateSlot(0, s)} onArchive={() => archiveSlot(0)} /> updateSlot(1, s)} onArchive={() => archiveSlot(1)} /> diff --git a/data/il-enrichment-cache.json b/data/il-enrichment-cache.json new file mode 100644 index 0000000..8fe4732 --- /dev/null +++ b/data/il-enrichment-cache.json @@ -0,0 +1 @@ +{"ts":1783520638250,"data":{"current":{},"prev":{},"prevDate":null}} \ No newline at end of file diff --git a/data/money-supply-m3.json b/data/money-supply-m3.json new file mode 100644 index 0000000..f4d38c3 --- /dev/null +++ b/data/money-supply-m3.json @@ -0,0 +1,65 @@ +[ + { + "updated_at": "2026-07-08", + "note": "Masse monétaire M3 (niveau, devise locale) par zone — scrapé automatiquement depuis tradingeconomics.com (meta description des pages /money-supply-m3). USD : proxy M2 (Fed n'a plus publié M3 depuis 2006). Mis à jour par .github/workflows/fetch-money-supply.yml (hebdomadaire).", + "series": { + "USD": { + "value": 22804.5, + "unit": "USD Bn", + "period": "2026-04", + "source": "https://tradingeconomics.com/united-states/money-supply-m2", + "isProxy": true, + "proxyLabel": "M2 (M3 non publié par la Fed depuis 2006)" + }, + "EUR": { + "value": 17552244, + "unit": "EUR Mn", + "period": "2026-05", + "source": "https://tradingeconomics.com/euro-area/money-supply-m3", + "isProxy": false + }, + "GBP": { + "value": 3811591, + "unit": "GBP Mn", + "period": "2026-05", + "source": "https://tradingeconomics.com/united-kingdom/money-supply-m3", + "isProxy": false + }, + "JPY": { + "value": 1642404.5, + "unit": "JPY Bn", + "period": "2026-05", + "source": "https://tradingeconomics.com/japan/money-supply-m3", + "isProxy": false + }, + "CHF": { + "value": 1228273, + "unit": "CHF Mn", + "period": "2026-05", + "source": "https://tradingeconomics.com/switzerland/money-supply-m3", + "isProxy": false + }, + "CAD": { + "value": 4020356, + "unit": "CAD Mn", + "period": "2026-04", + "source": "https://tradingeconomics.com/canada/money-supply-m3", + "isProxy": false + }, + "AUD": { + "value": 3447.08, + "unit": "AUD Bn", + "period": "2026-05", + "source": "https://tradingeconomics.com/australia/money-supply-m3", + "isProxy": false + }, + "NZD": { + "value": 451046, + "unit": "NZD Mn", + "period": "2026-05", + "source": "https://tradingeconomics.com/new-zealand/money-supply-m3", + "isProxy": false + } + } + } +] diff --git a/data/rate-probabilities.json b/data/rate-probabilities.json index 970cf7c..1d1e363 100644 --- a/data/rate-probabilities.json +++ b/data/rate-probabilities.json @@ -1,5 +1,233 @@ { - "data": {}, - "fetchedAt": "2026-07-08T12:14:53.611Z", + "data": { + "USD": { + "today": { + "midpoint": 3.75, + "rows": [ + { + "meeting": "Jul 29", + "meeting_iso": "2026-07-29", + "implied_rate_post_meeting": 3.7998, + "prob_move_pct": 20, + "prob_is_cut": false, + "change_bps": 4.979999999999984, + "num_moves": 0.19919999999999938 + }, + { + "meeting": "Sep 16", + "meeting_iso": "2026-09-16", + "implied_rate_post_meeting": 3.908, + "prob_move_pct": 55, + "prob_is_cut": false, + "change_bps": 15.799999999999992, + "num_moves": 0.6319999999999997 + }, + { + "meeting": "Oct 28", + "meeting_iso": "2026-10-28", + "implied_rate_post_meeting": 3.96, + "prob_move_pct": 64, + "prob_is_cut": false, + "change_bps": 20.999999999999996, + "num_moves": 0.8399999999999999 + }, + { + "meeting": "Dec 9", + "meeting_iso": "2026-12-09", + "implied_rate_post_meeting": 4.055, + "prob_move_pct": 78, + "prob_is_cut": false, + "change_bps": 30.49999999999997, + "num_moves": 1.2199999999999989 + }, + { + "meeting": "Jan 27", + "meeting_iso": "2027-01-27", + "implied_rate_post_meeting": 4.0851, + "prob_move_pct": 80, + "prob_is_cut": false, + "change_bps": 33.50999999999998, + "num_moves": 1.3403999999999991 + }, + { + "meeting": "Mar 17", + "meeting_iso": "2027-03-17", + "implied_rate_post_meeting": 4.1286, + "prob_move_pct": 84, + "prob_is_cut": false, + "change_bps": 37.85999999999996, + "num_moves": 1.5143999999999982 + }, + { + "meeting": "Apr 28", + "meeting_iso": "2027-04-28", + "implied_rate_post_meeting": 4.1322, + "prob_move_pct": 84, + "prob_is_cut": false, + "change_bps": 38.22000000000001, + "num_moves": 1.5288000000000006 + }, + { + "meeting": "Jun 9", + "meeting_iso": "2027-06-09", + "implied_rate_post_meeting": 4.1065, + "prob_move_pct": 80, + "prob_is_cut": false, + "change_bps": 35.64999999999996, + "num_moves": 1.4259999999999986 + }, + { + "meeting": "Jul 28", + "meeting_iso": "2027-07-28", + "implied_rate_post_meeting": 4.0895, + "prob_move_pct": 78, + "prob_is_cut": false, + "change_bps": 33.95000000000002, + "num_moves": 1.3580000000000008 + }, + { + "meeting": "Sep 15", + "meeting_iso": "2027-09-15", + "implied_rate_post_meeting": 4.0654, + "prob_move_pct": 75, + "prob_is_cut": false, + "change_bps": 31.540000000000035, + "num_moves": 1.2616000000000014 + }, + { + "meeting": "Oct 27", + "meeting_iso": "2027-10-27", + "implied_rate_post_meeting": 4.0297, + "prob_move_pct": 70, + "prob_is_cut": false, + "change_bps": 27.970000000000006, + "num_moves": 1.1188000000000002 + }, + { + "meeting": "Dec 8", + "meeting_iso": "2027-12-08", + "implied_rate_post_meeting": 4.0103, + "prob_move_pct": 67, + "prob_is_cut": false, + "change_bps": 26.029999999999998, + "num_moves": 1.0412 + } + ] + } + }, + "EUR": { + "today": { + "midpoint": 2.15, + "rows": [ + { + "meeting": "Dec", + "meeting_iso": "2026-12-31", + "implied_rate_post_meeting": 2.3899999999999997, + "prob_move_pct": 28, + "prob_is_cut": false, + "change_bps": 24, + "num_moves": 0.96 + } + ] + } + }, + "GBP": { + "today": { + "midpoint": 3.75, + "rows": [ + { + "meeting": "Dec", + "meeting_iso": "2026-12-31", + "implied_rate_post_meeting": 3.93, + "prob_move_pct": 7, + "prob_is_cut": false, + "change_bps": 18, + "num_moves": 0.72 + } + ] + } + }, + "JPY": { + "today": { + "midpoint": 0.75, + "rows": [ + { + "meeting": "Dec", + "meeting_iso": "2026-12-31", + "implied_rate_post_meeting": 0.95, + "prob_move_pct": 1, + "prob_is_cut": false, + "change_bps": 20, + "num_moves": 0.8 + } + ] + } + }, + "CAD": { + "today": { + "midpoint": 2.25, + "rows": [ + { + "meeting": "Dec", + "meeting_iso": "2026-12-31", + "implied_rate_post_meeting": 2.33, + "prob_move_pct": 9, + "prob_is_cut": false, + "change_bps": 8, + "num_moves": 0.32 + } + ] + } + }, + "AUD": { + "today": { + "midpoint": 4.35, + "rows": [ + { + "meeting": "Dec", + "meeting_iso": "2026-12-31", + "implied_rate_post_meeting": 4.449999999999999, + "prob_move_pct": 15, + "prob_is_cut": false, + "change_bps": 10, + "num_moves": 0.4 + } + ] + } + }, + "NZD": { + "today": { + "midpoint": 2.25, + "rows": [ + { + "meeting": "Dec", + "meeting_iso": "2026-12-31", + "implied_rate_post_meeting": 2.87, + "prob_move_pct": 82, + "prob_is_cut": false, + "change_bps": 62, + "num_moves": 2.48 + } + ] + } + }, + "CHF": { + "today": { + "midpoint": 0, + "rows": [ + { + "meeting": "Dec", + "meeting_iso": "2026-12-31", + "implied_rate_post_meeting": 0.05, + "prob_move_pct": 4, + "prob_is_cut": false, + "change_bps": 5, + "num_moves": 0.2 + } + ] + } + } + }, + "fetchedAt": "2026-07-03T12:51:24.776Z", "snapshots": [] } \ No newline at end of file diff --git a/data/rate_decisions.json b/data/rate_decisions.json index ba94549..30b4ffa 100644 --- a/data/rate_decisions.json +++ b/data/rate_decisions.json @@ -1,47 +1,47 @@ [ { - "updated_at": "2026-05-30", - "note": "Taux directeurs officiels CB. current/prev = taux annoncés (pas interbancaires). EUR = MRO (DFR+15bps) pour cohérence avec investing.com/TE. Mettre à jour après chaque décision.", + "updated_at": "2026-07-08", + "note": "Taux directeurs officiels CB. current/prev = taux annoncés (pas interbancaires). EUR = MRO (DFR+15bps) pour cohérence avec investing.com/TE. prev = taux avant la DERNIÈRE décision (= current si dernière réunion = statu quo). Fichier maintenu automatiquement par .github/workflows/update-rate-decisions.yml (hourly) : quand le taux scrapé sur Trading Economics diffère de 'current', l'ancien 'current' glisse vers 'prev' sans perte de donnée, et 'source' est réécrit pour tracer le changement. Ne plus éditer 'current'/'prev' à la main sauf correction ponctuelle.", "decisions": { "USD": { "current": 3.75, - "prev": 3.75, - "source": "Fed funds target upper bound — Trading Economics / TE mai 2026 (fourchette 3.50-3.75%, upper=3.75%)" + "prev": 3.75, + "source": "Fed funds target upper bound — inchangé 3.50-3.75% (upper=3.75%), 4e réunion consécutive de statu quo, dernière décision 17 juin 2026 (Trading Economics)" }, "EUR": { - "current": 2.15, - "prev": 2.40, - "source": "ECBDFR (FRED) + 0.15bps → MRO. DFR=2.00, MRO=DFR+15bps (corridor sep 2024)" + "current": 2.4, + "prev": 2.15, + "source": "ECB — hausse de 25bps de tous les taux directeurs (DFR 2.00%→2.25%, MRO 2.15%→2.40%, MLF 2.40%→2.65%) effective 17 juin 2026, en réponse au choc d'inflation lié au conflit Moyen-Orient (communiqué officiel : https://www.ecb.europa.eu/press/pr/date/2026/html/ecb.mp260611~4d41bd5e83.en.html, publié 11 juin 2026). MRO retenu ici pour cohérence avec investing.com/TE." }, "GBP": { "current": 3.75, - "prev": 4.00, - "source": "BoE Official Bank Rate — Trading Economics mai 2026" + "prev": 3.75, + "source": "BoE Official Bank Rate — statu quo confirmé 18 juin 2026 (vote MPC 7-2, 2 membres pour +25bps à 4.00%). Trading Economics" }, "JPY": { - "current": 0.75, - "prev": 0.50, - "source": "BoJ — annonce jan 2026 (hausse 0.50% → 0.75%)" + "current": 1, + "prev": 0.75, + "source": "BoJ — changement détecté automatiquement le 2026-07-08 via Trading Economics (japan/interest-rate) : 0.75% → 1%." }, "CHF": { - "current": 0.00, - "prev": 0.25, - "source": "SNB — annonce déc 2025 (baisse 0.25% → 0.00%)" + "current": 0, + "prev": 0, + "source": "SNB officiel — inchangé à 0% ; confirmé statu quo le 18 juin 2026. Trading Economics" }, "CAD": { "current": 2.25, - "prev": 2.50, - "source": "BoC — annonce avr 2026 (baisse 2.50% → 2.25%)" + "prev": 2.25, + "source": "BoC — statu quo confirmé 10 juin 2026, 5e réunion consécutive à 2.25%. Trading Economics" }, "AUD": { "current": 4.35, - "prev": 4.10, - "source": "RBA — Trading Economics mai 2026 (Last=4.35, Previous=4.10)" + "prev": 4.35, + "source": "RBA — statu quo confirmé 16 juin 2026, décision unanime à 4.35%. Trading Economics" }, "NZD": { - "current": 2.25, - "prev": 2.50, - "source": "RBNZ — annonce avr 2026 (baisse 2.50% → 2.25%)" + "current": 2.5, + "prev": 2.25, + "source": "RBNZ — hausse de 25bps (2.25%→2.50%) le 8 juillet 2026, première hausse en 3 ans après 3 statu quo consécutifs à 2.25%. Trading Economics" } } } diff --git a/lib/calendar-countries.ts b/lib/calendar-countries.ts new file mode 100644 index 0000000..06a612f --- /dev/null +++ b/lib/calendar-countries.ts @@ -0,0 +1,50 @@ +// lib/calendar-countries.ts +// Univers de pays pour le calendrier économique — restreint le 2026-07-08 à la +// demande explicite de l'utilisateur : les 8 devises majeures tradées par le +// dashboard + la France en complément (grosse économie de la zone euro, dont +// les publications (Ifo-like, PMI, CPI...) précèdent souvent l'agrégat EMU). +// +// Sert de table de correspondance commune entre : +// - Trading Economics : slug URL (/xxx/calendar) + nom affiché en data-country +// - investingLive (widget FXStreet calendar.fxstreet.com) : code pays + data-countryname +// +// currency = devise ISO 4217 associée (EMU et FR partagent EUR). + +export interface CalendarCountry { + code: string; // code FXStreet (aussi utilisé comme identifiant canonique) + teSlug: string; // slug Trading Economics : https://tradingeconomics.com/{slug}/calendar + teName: string; // valeur data-country de TE (lowercase) + fxName: string; // valeur data-countryname du widget FXStreet + currency: string; // ISO 4217 + displayName: string; +} + +export const CALENDAR_COUNTRIES: CalendarCountry[] = [ + { code: "EMU", teSlug: "euro-area", teName: "euro area", fxName: "Eurozone", currency: "EUR", displayName: "Zone Euro" }, + { code: "FR", teSlug: "france", teName: "france", fxName: "France", currency: "EUR", displayName: "France" }, + { code: "US", teSlug: "united-states", teName: "united states", fxName: "United States", currency: "USD", displayName: "États-Unis" }, + { code: "CA", teSlug: "canada", teName: "canada", fxName: "Canada", currency: "CAD", displayName: "Canada" }, + { code: "UK", teSlug: "united-kingdom", teName: "united kingdom", fxName: "United Kingdom", currency: "GBP", displayName: "Royaume-Uni" }, + { code: "CH", teSlug: "switzerland", teName: "switzerland", fxName: "Switzerland", currency: "CHF", displayName: "Suisse" }, + { code: "JP", teSlug: "japan", teName: "japan", fxName: "Japan", currency: "JPY", displayName: "Japon" }, + { code: "AU", teSlug: "australia", teName: "australia", fxName: "Australia", currency: "AUD", displayName: "Australie" }, + { code: "NZ", teSlug: "new-zealand", teName: "new zealand", fxName: "New Zealand", currency: "NZD", displayName: "Nouvelle-Zélande" }, +]; + +export const TE_NAME_TO_CURRENCY: Record = Object.fromEntries( + CALENDAR_COUNTRIES.map(c => [c.teName, c.currency]) +); + +export const FX_NAME_TO_CURRENCY: Record = Object.fromEntries( + CALENDAR_COUNTRIES.map(c => [c.fxName, c.currency]) +); + +export const TE_NAME_TO_CODE: Record = Object.fromEntries( + CALENDAR_COUNTRIES.map(c => [c.teName, c.code]) +); + +export const FX_NAME_TO_CODE: Record = Object.fromEntries( + CALENDAR_COUNTRIES.map(c => [c.fxName, c.code]) +); + +export const FXSTREET_COUNTRYCODES = CALENDAR_COUNTRIES.map(c => c.code).join(","); diff --git a/lib/calendar-taxonomy.ts b/lib/calendar-taxonomy.ts new file mode 100644 index 0000000..5ef9263 --- /dev/null +++ b/lib/calendar-taxonomy.ts @@ -0,0 +1,79 @@ +// lib/calendar-taxonomy.ts +// Règles de tri du fourre-tout "other" du calendrier économique, décidées avec +// l'utilisateur devise par devise (session du 2026-07-08) : +// - Confiance/sentiment, immobilier (prix uniquement), M3 (EUR uniquement), +// commerce extérieur détaillé, Fed régionale (Philly uniquement), flux de +// portefeuille étrangers, finances publiques, jours fériés → catégories +// dédiées (visibles, triables séparément). +// - Adjudications obligataires, production industrielle, énergie hebdo US, +// hypothécaires hebdo US, CPI infranational, réunions institutionnelles +// sans chiffre → exclus du calendrier (bruit, cf. décisions utilisateur). +// Tout le reste (non couvert par une règle ci-dessous) continue d'apparaître +// sous "other" / "Autre". + +import type { EventCategory } from "@/app/api/calendar/route"; + +const SENTIMENT_RE = /\bifo\b|\bzew\b|\bgfk\b|consumer confidence|business confidence|business climate|economic sentiment|\bsentix\b|westpac consumer confidence|anz.*consumer confidence|anz business confidence|anz activity outlook|nab business confidence|cbi business optimism|cbi distributive trades|cbi industrial trends|eco watchers survey|reuters tankan/i; + +const HOUSING_PRICE_RE = /house price|housing price|nationwide housing|case-shiller|rightmove|rics house price|cotality dwelling|residential property price/i; + +const MONEY_SUPPLY_RE = /m3 money supply/i; + +const TRADE_DETAIL_RE = /^exports?\b|^imports?\b|export price|import price/i; + +const REGIONAL_FED_RE = /philly fed|philadelphia fed/i; + +const PORTFOLIO_FLOWS_RE = /tic flows|net capital flows|foreign bond investment|stock investment by foreigners|cftc \w+ nc net positions/i; + +const PUBLIC_FINANCE_RE = /budget balance|monthly budget statement|public sector net borrowing/i; + +const HOLIDAY_RE = /\bholiday\b|\b(independence|canada|marine|labor|labour|thanksgiving|christmas|boxing|memorial|veterans|presidents?|columbus|mlk|good friday|easter monday)\s+day\b/i; + +// ── Exclusions (bruit écarté du calendrier, décision utilisateur) ──────────── + +const AUCTION_RE = /\bauction\b|\btender\b|conventional gilt|index-linked gilt/i; +const INDUSTRIAL_PROD_RE = /industrial production|industrial output|manufacturing production|capacity utilization|tertiary industry index/i; +const US_ENERGY_WEEKLY_RE = /\beia\b|\bapi\b crude|baker hughes|crude oil stock|natural gas stock|gasoline stock|distillate|heating oil stock|refinery crude/i; +const US_MORTGAGE_WEEKLY_RE = /\bmba\b|mortgage application|mortgage market index|mortgage refinance index|mba purchase index/i; +const SUBNATIONAL_CPI_RE = /baden wuerttemberg cpi|bavaria cpi|brandenburg cpi|hesse cpi|north rhine westphalia cpi|saxony cpi|tokyo cpi|tokyo core cpi/i; +const INSTITUTIONAL_MEETING_RE = /ecofin meeting|eurogroup meeting|iea oil market report|wasde report|nopa crush report/i; + +export function classifyOtherTitle(title: string): EventCategory { + if (SENTIMENT_RE.test(title)) return "sentiment"; + if (HOUSING_PRICE_RE.test(title)) return "housing"; + if (MONEY_SUPPLY_RE.test(title)) return "money_supply"; + if (TRADE_DETAIL_RE.test(title)) return "trade_detail"; + if (REGIONAL_FED_RE.test(title)) return "regional_fed"; + if (PORTFOLIO_FLOWS_RE.test(title)) return "portfolio_flows"; + if (PUBLIC_FINANCE_RE.test(title)) return "public_finance"; + if (HOLIDAY_RE.test(title)) return "holiday"; + return "other"; +} + +export function isExcludedEventTitle(title: string): boolean { + return ( + AUCTION_RE.test(title) || + INDUSTRIAL_PROD_RE.test(title) || + US_ENERGY_WEEKLY_RE.test(title) || + US_MORTGAGE_WEEKLY_RE.test(title) || + SUBNATIONAL_CPI_RE.test(title) || + INSTITUTIONAL_MEETING_RE.test(title) + ); +} + +// ── Plancher d'impact (demande explicite : PPI, Trade Balance, Construction PMI +// ne doivent jamais rester masqués par le filtre "Impact faible" par défaut) ── +// TE/investingLive taggent souvent ces indicateurs "low" par pays (surtout hors +// USD), ce qui les cache dans le calendrier tant que la case "Impact faible" +// n'est pas cochée. On relève le plancher à "medium" sans jamais rétrograder +// un impact déjà "high" décidé par la source (ex. PPI MoM US, Balance of Trade JP). + +const IMPACT_FLOOR_RE = /construction pmi|\bppi\b|producer price|balance of trade|trade balance|goods trade balance|foreign trade balance/i; + +export function applyImpactFloor( + title: string, + impact: "high" | "medium" | "low" +): "high" | "medium" | "low" { + if (impact === "low" && IMPACT_FLOOR_RE.test(title)) return "medium"; + return impact; +} diff --git a/lib/centralBankGovernance.ts b/lib/centralBankGovernance.ts new file mode 100644 index 0000000..46be11d --- /dev/null +++ b/lib/centralBankGovernance.ts @@ -0,0 +1,865 @@ +// lib/centralBankGovernance.ts +// Données de gouvernance des banques centrales : vote de la dernière réunion, +// lien vers le dernier rapport de politique monétaire (PDF), lien vers le site +// officiel, et pour la Fed le dot plot (Summary of Economic Projections). +// +// Sources (HTML public, sans clé API) : +// Fed : federalreserve.gov — statement (vote) + SEP "accessible version" (dot plot) +// BoE : bankofengland.co.uk — Monetary Policy Summary and Minutes (vote) +// Les autres banques (ECB, BoJ, SNB, BoC, RBA, RBNZ) exposent au minimum les +// liens statiques (site officiel + dernier rapport connu) ; scraping vote/PDF +// ajouté au fur et à mesure de ce qui est effectivement accessible sans +// contournement de WAF (RBA/RBNZ bloquent tout fetch() non-navigateur). + +import type { Currency } from "./types"; +import rateDecisionsData from "@/data/rate_decisions.json"; +import { fetchTECalendarForCountry } from "./tradingeconomics"; + +const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"; + +async function fetchText(url: string): Promise { + try { + const res = await fetch(url, { + headers: { "User-Agent": UA, "Accept-Language": "en-US,en;q=0.9" }, + next: { revalidate: 6 * 3600 }, + }); + if (!res.ok) return null; + return await res.text(); + } catch { return null; } +} + +function htmlToText(html: string): string { + return html + .replace(//g, "") + .replace(//g, "") + .replace(/<[^>]+>/g, " ") + .replace(/ /g, " ") + .replace(/–|–/g, "–") + .replace(/−|−/g, "-") + .replace(/‑/g, "-") + .replace(/&/g, "&") + .replace(/\s+/g, " ") + .trim(); +} + +// ── Types publics ───────────────────────────────────────────────────────────── + +export interface FedDotYear { + year: string; // "2026" | "2027" | "2028" | "Longer run" + median: number | null; +} + +export interface FedDot { + year: string; + rate: number; + count: number; +} + +export interface FedSepHistoryPoint { + date: string; // ISO de la réunion SEP + medianByYear: Record; +} + +export interface FedDotPlot { + asOfDate: string; + years: string[]; + medianByYear: Record; + prevMedianByYear: Record | null; + prevLabel: string | null; // ex. "March projection" + dots: FedDot[]; + history: FedSepHistoryPoint[]; // dernières réunions SEP, la plus récente en dernier + gdpMedian: Record | null; + pceMedian: Record | null; + sepHtmlUrl: string; + sepPdfUrl: string; +} + +// Prévisions macro publiées par la BC elle-même (comment elle perçoit sa propre +// économie) : croissance PIB + inflation, par année. gdp/inflation sont indexés +// par année ("2026", "2027"…) → valeur en %, null si non disponible pour cette +// année précise. isProxy = valeur de substitution (ex. consensus Trading +// Economics) quand la BC elle-même n'est pas accessible en scraping (RBNZ). +export interface CBForecast { + asOf: string; // date de publication de la prévision + years: string[]; // ordre d'affichage + gdp: Record; + inflation: Record; + label: string; // ex. "Eurosystem staff projections — juin 2026" + sourceUrl: string | null; + isProxy?: boolean; + proxyLabel?: string; +} + +export interface CBGovernance { + currency: Currency; + bankName: string; + countryLabel: string; + officialSiteUrl: string; + policyPageUrl: string; + meetingDate: string | null; + rateLevel: string | null; + voteSummary: string | null; // "12 – 0", "7 – 2", ou "Consensus (pas de vote publié)" + voteDetail: string | null; + statementUrl: string | null; + reportPdfUrl: string | null; + reportLabel: string | null; + dotPlot?: FedDotPlot; + forecast?: CBForecast | null; + fetchError?: string; +} + +// ── Métadonnées statiques (toujours disponibles, même si le scraping échoue) ── + +export const CB_STATIC_INFO: Record = { + USD: { bankName: "Federal Reserve (Fed)", countryLabel: "États-Unis", officialSiteUrl: "https://www.federalreserve.gov", policyPageUrl: "https://www.federalreserve.gov/monetarypolicy.htm" }, + EUR: { bankName: "Banque Centrale Européenne", countryLabel: "Zone Euro", officialSiteUrl: "https://www.ecb.europa.eu", policyPageUrl: "https://www.ecb.europa.eu/press/govcdec/mopo/html/index.en.html" }, + GBP: { bankName: "Bank of England (BoE)", countryLabel: "Royaume-Uni", officialSiteUrl: "https://www.bankofengland.co.uk", policyPageUrl: "https://www.bankofengland.co.uk/monetary-policy" }, + JPY: { bankName: "Bank of Japan (BoJ)", countryLabel: "Japon", officialSiteUrl: "https://www.boj.or.jp/en", policyPageUrl: "https://www.boj.or.jp/en/mopo/index.htm" }, + CHF: { bankName: "Swiss National Bank (SNB)", countryLabel: "Suisse", officialSiteUrl: "https://www.snb.ch", policyPageUrl: "https://www.snb.ch/en/the-snb/mandates-goals/monetary-policy" }, + CAD: { bankName: "Bank of Canada (BoC)", countryLabel: "Canada", officialSiteUrl: "https://www.bankofcanada.ca", policyPageUrl: "https://www.bankofcanada.ca/core-functions/monetary-policy/" }, + AUD: { bankName: "Reserve Bank of Australia (RBA)", countryLabel: "Australie", officialSiteUrl: "https://www.rba.gov.au", policyPageUrl: "https://www.rba.gov.au/monetary-policy/" }, + NZD: { bankName: "Reserve Bank of New Zealand (RBNZ)", countryLabel: "Nouvelle-Zélande", officialSiteUrl: "https://www.rbnz.govt.nz", policyPageUrl: "https://www.rbnz.govt.nz/monetary-policy" }, +}; + +function staticFallback(ccy: Currency, error: string): CBGovernance { + const info = CB_STATIC_INFO[ccy]; + return { + currency: ccy, ...info, + meetingDate: null, rateLevel: null, voteSummary: null, voteDetail: null, + statementUrl: null, reportPdfUrl: null, reportLabel: null, + fetchError: error, + }; +} + +// ── Fed (USD) ───────────────────────────────────────────────────────────────── + +function parseFedFraction(s: string): number { + const m = s.match(/^(\d+)(?:-(\d+)\/(\d+))?$/); + if (!m) return NaN; + const whole = parseFloat(m[1]); + return m[2] ? whole + parseFloat(m[2]) / parseFloat(m[3]) : whole; +} + +async function findLatestFedDates(): Promise<{ statementDates: string[]; sepDates: string[] } | null> { + const html = await fetchText("https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm"); + if (!html) return null; + const todayCompact = new Date().toISOString().slice(0, 10).replace(/-/g, ""); + const statementDates = Array.from(new Set(Array.from(html.matchAll(/\/newsevents\/pressreleases\/monetary(\d{8})a\.htm/g), m => m[1]))) + .filter(d => d <= todayCompact).sort(); + const sepDates = Array.from(new Set(Array.from(html.matchAll(/\/monetarypolicy\/fomcprojtabl[e]?(\d{8})\.htm/g), m => m[1]))) + .filter(d => d <= todayCompact).sort(); + return { statementDates, sepDates }; +} + +async function fetchFedStatement(dateCompact: string): Promise<{ rateLevel: string; voteSummary: string; voteDetail: string | null; statementUrl: string } | null> { + const url = `https://www.federalreserve.gov/newsevents/pressreleases/monetary${dateCompact}a.htm`; + const html = await fetchText(url); + if (!html) return null; + const text = htmlToText(html); + + const rateMatch = text.match(/target range for the federal funds rate[\s\S]{0,60}?(\d+(?:-\d\/\d)?)\s*to\s*(\d+(?:-\d\/\d)?)\s*percent/i); + const lower = rateMatch ? parseFedFraction(rateMatch[1]) : NaN; + const upper = rateMatch ? parseFedFraction(rateMatch[2]) : NaN; + const rateLevel = !isNaN(lower) && !isNaN(upper) ? `${lower}–${upper}%` : null; + + const voteMatch = text.match(/by a\s+(\d+)\s*[–—-]\s*(\d+)\s+vote/i); + const voteSummary = voteMatch ? `${voteMatch[1]} – ${voteMatch[2]}` : null; + + const dissentMatch = text.match(/Voting against[^:]*:\s*([^.]+)\./i); + const voteDetail = dissentMatch ? dissentMatch[1].trim() : null; + + if (!rateLevel || !voteSummary) return null; + return { rateLevel, voteSummary, voteDetail, statementUrl: url }; +} + +// Table 1 : médiane Fed funds rate (trimestre courant + trimestre précédent, si présent) +// + médianes GDP/PCE inflation (même table, mêmes 4 colonnes années) pour le bloc +// "prévisions" générique (comment le FOMC voit sa propre économie). +function parseSepTable1(text: string): { + years: string[]; median: Record; prevMedian: Record | null; prevLabel: string | null; + gdpMedian: Record | null; pceMedian: Record | null; +} | null { + // Les 3 années couvertes glissent d'une publication SEP à l'autre (ex. déc. 2025 + // couvre 2025-2028, juin 2026 couvre 2026-2028+LR) — on les lit depuis l'en-tête + // de Table 1 plutôt que de les figer, sinon l'historique se retrouve mal étiqueté. + const headerM = text.match(/(\d{4})\s+(\d{4})\s+(\d{4})\s+Longer run/); + if (!headerM) return null; + const years = [headerM[1], headerM[2], headerM[3], "Longer run"]; + + const start = text.indexOf("Federal funds rate"); + if (start === -1) return null; + const noteIdx = text.indexOf("Note:", start); + const block = noteIdx === -1 ? text.slice(start) : text.slice(start, noteIdx); + + const medM = block.match(/^Federal funds rate\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)/); + if (!medM) return null; + + const prevM = block.match(/(January|March|April|June|July|September|December)\s+projection\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)/i); + + // "Change in real GDP X X X X ..." / "PCE inflation X X X X ..." — même format + // de ligne que "Federal funds rate", ailleurs dans Table 1 (pas dans `block`, + // qui commence après ces lignes, donc on cherche dans `text` en entier). + const toYearRecord = (vals: [string, string, string, string] | null) => + vals ? { [years[0]]: parseFloat(vals[0]), [years[1]]: parseFloat(vals[1]), [years[2]]: parseFloat(vals[2]), [years[3]]: parseFloat(vals[3]) } : null; + const gdpM = text.match(/Change in real GDP\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)/); + const pceM = text.match(/(?", tableStart); + if (tableStart === -1 || tableEnd === -1) return dots; + const tableHtml = html.slice(tableStart, tableEnd); + + const headerM = tableHtml.match(/
]*>([\d.]+)<\/th>([\s\S]*?)<\/tr>/g; + let rm: RegExpExecArray | null; + while ((rm = rowRe.exec(tableHtml)) !== null) { + const rate = parseFloat(rm[1]); + const cells = Array.from(rm[2].matchAll(/]*>([^<]*)<\/td>/g)); + cells.forEach((c, i) => { + if (c[1] === "data") { + const count = parseInt(c[2].trim(), 10); + if (!isNaN(count) && count > 0 && years[i]) dots.push({ year: years[i], rate, count }); + } + }); + } + return dots; +} + +async function fetchFedDotPlot(sepDates: string[]): Promise { + if (!sepDates.length) return null; + const latest = sepDates.at(-1)!; + const htmlUrl = `https://www.federalreserve.gov/monetarypolicy/fomcprojtabl${latest}.htm`; + const html = await fetchText(htmlUrl); + if (!html) return null; + const text = htmlToText(html); + + const table1 = parseSepTable1(text); + if (!table1) return null; + const dots = parseSepFigure2(html); + + // Historique : jusqu'à 6 dernières publications SEP (trimestrielles) pour montrer l'évolution + const histDates = sepDates.slice(-6); + const history: FedSepHistoryPoint[] = []; + const histResults = await Promise.all(histDates.map(async d => { + if (d === latest) return { date: d, medianByYear: table1.median }; + const h = await fetchText(`https://www.federalreserve.gov/monetarypolicy/fomcprojtabl${d}.htm`); + if (!h) return null; + const t1 = parseSepTable1(htmlToText(h)); + return t1 ? { date: d, medianByYear: t1.median } : null; + })); + for (const h of histResults) if (h) history.push({ date: `${h.date.slice(0,4)}-${h.date.slice(4,6)}-${h.date.slice(6,8)}`, medianByYear: h.medianByYear }); + + return { + asOfDate: `${latest.slice(0,4)}-${latest.slice(4,6)}-${latest.slice(6,8)}`, + years: table1.years, + medianByYear: table1.median, + prevMedianByYear: table1.prevMedian, + prevLabel: table1.prevLabel, + dots, + history, + gdpMedian: table1.gdpMedian, + pceMedian: table1.pceMedian, + sepHtmlUrl: htmlUrl, + sepPdfUrl: `https://www.federalreserve.gov/monetarypolicy/files/fomcprojtabl${latest}.pdf`, + }; +} + +export async function fetchFedGovernance(): Promise { + const info = CB_STATIC_INFO.USD; + const dates = await findLatestFedDates(); + if (!dates || !dates.statementDates.length) return staticFallback("USD", "Impossible de lire le calendrier FOMC"); + + const latestStatementDate = dates.statementDates.at(-1)!; + const [statement, dotPlot] = await Promise.all([ + fetchFedStatement(latestStatementDate), + fetchFedDotPlot(dates.sepDates), + ]); + + if (!statement) return staticFallback("USD", "Communiqué FOMC illisible"); + + const forecast: CBForecast | null = dotPlot && (dotPlot.gdpMedian || dotPlot.pceMedian) + ? { + asOf: dotPlot.asOfDate, + years: dotPlot.years.filter(y => y !== "Longer run"), + gdp: dotPlot.gdpMedian ?? {}, + inflation: dotPlot.pceMedian ?? {}, + label: `Fed — Summary of Economic Projections (médianes) — ${dotPlot.asOfDate}`, + sourceUrl: dotPlot.sepHtmlUrl, + } + : null; + + return { + currency: "USD", ...info, + meetingDate: `${latestStatementDate.slice(0,4)}-${latestStatementDate.slice(4,6)}-${latestStatementDate.slice(6,8)}`, + rateLevel: statement.rateLevel, + voteSummary: statement.voteSummary, + voteDetail: statement.voteDetail, + statementUrl: statement.statementUrl, + reportPdfUrl: dotPlot?.sepPdfUrl ?? null, + reportLabel: dotPlot ? `Summary of Economic Projections — ${dotPlot.asOfDate}` : null, + ...(dotPlot ? { dotPlot } : {}), + forecast, + }; +} + +// ── BoE (GBP) ───────────────────────────────────────────────────────────────── + +const BOE_MONTHS = ["january","february","march","april","may","june","july","august","september","october","november","december"]; + +interface BoeParsed { rateLevel: string; voteSummary: string; meetingDate: string | null; voteDetail: string | null; } + +// "voted by a majority of X–Y to maintain/raise/lower Bank Rate at Z%" ou, si +// unanime, "voted unanimously to maintain/raise/lower Bank Rate at Z%". +function parseBoeVote(text: string): BoeParsed | null { + const majM = text.match(/voted by a majority of\s+(\d+)\s*[–—-]\s*(\d+)\s+to\s+(?:maintain|reduce|increase|raise|cut)[^.]*?Bank Rate at\s+([\d.]+)%/i); + const unanM = !majM && text.match(/voted unanimously to\s+(?:maintain|reduce|increase|raise|cut)[^.]*?Bank Rate at\s+([\d.]+)%/i); + if (!majM && !unanM) return null; + + const dateM = text.match(/At its meeting ending on\s+([^,]+),/i); + // Périodes tolérées à l'intérieur (ex. "0.25 percentage points") : on ne coupe + // que sur un point réellement suivi d'un espace (fin de phrase), pas un point décimal. + const dissentM = text.match(/(\w+\s+members?\s+voted to(?:(?!\.\s)[\s\S])+)\.\s/i); + + return majM + ? { rateLevel: `${majM[3]}%`, voteSummary: `${majM[1]} – ${majM[2]}`, meetingDate: dateM?.[1]?.trim() ?? null, voteDetail: dissentM?.[1]?.trim() ?? null } + : { rateLevel: `${(unanM as RegExpMatchArray)[1]}%`, voteSummary: "Unanime", meetingDate: dateM?.[1]?.trim() ?? null, voteDetail: null }; +} + +export async function fetchBoeGovernance(): Promise { + const info = CB_STATIC_INFO.GBP; + const now = new Date(); + + // Certaines pages du mois courant existent déjà en placeholder avant la réunion + // ("to be published at Xpm") — on ne valide donc pas sur la simple présence de + // la page, mais sur un vote réellement trouvé, et on recule au besoin. + for (let back = 0; back < 5; back++) { + const d = new Date(now.getFullYear(), now.getMonth() - back, 1); + const monthName = BOE_MONTHS[d.getMonth()]; + const url = `https://www.bankofengland.co.uk/monetary-policy-summary-and-minutes/${d.getFullYear()}/${monthName}-${d.getFullYear()}`; + const html = await fetchText(url); + if (!html) continue; + const parsed = parseBoeVote(htmlToText(html)); + if (!parsed) continue; + + return { + currency: "GBP", ...info, + meetingDate: parsed.meetingDate, + rateLevel: parsed.rateLevel, + voteSummary: parsed.voteSummary, + voteDetail: parsed.voteDetail, + statementUrl: url, + reportPdfUrl: `${url}.pdf`, + reportLabel: "Monetary Policy Summary and Minutes", + }; + } + return staticFallback("GBP", "Vote MPC introuvable sur les 5 derniers mois"); +} + +// ── RBA (AUD) ───────────────────────────────────────────────────────────────── +// IMPORTANT : rba.gov.au renvoie 403 (Akamai) dès qu'un User-Agent de navigateur +// est envoyé — la demande "brute" (aucun header custom) passe en revanche très +// bien. Ne PAS utiliser fetchText() ici (il pose un User-Agent Chrome). + +async function fetchPlain(url: string): Promise { + try { + const res = await fetch(url, { next: { revalidate: 6 * 3600 } }); + if (!res.ok) return null; + return await res.text(); + } catch { return null; } +} + +// Prévisions semestrielles (Table 3.2 "Detailed Baseline Forecast Table") de la +// dernière Statement on Monetary Policy — colonnes Dec/Jun (pas des années +// calendaires pleines, la RBA prévoit par semestre). +async function fetchRbaForecast(): Promise { + const indexHtml = await fetchPlain("https://www.rba.gov.au/publications/smp/"); + if (!indexHtml) return null; + const linkM = indexHtml.match(/href="(\/publications\/smp\/\d{4}\/[a-z]+\/)"/); + if (!linkM) return null; + const pageUrl = `https://www.rba.gov.au${linkM[1]}outlook.html`; + + const html = await fetchPlain(pageUrl); + if (!html) return null; + const text = htmlToText(html); + + const tblIdx = text.indexOf("Table 3.2"); + if (tblIdx === -1) return null; + const endIdx = text.indexOf("Forecasts finalised", tblIdx); + const win = text.slice(tblIdx, endIdx === -1 ? tblIdx + 6000 : endIdx); + + const headerM = win.match(/(Dec|Jun)\s+(\d{4})\s+(Dec|Jun)\s+(\d{4})\s+(Dec|Jun)\s+(\d{4})\s+(Dec|Jun)\s+(\d{4})\s+(Dec|Jun)\s+(\d{4})\s+(Dec|Jun)\s+(\d{4})/); + if (!headerM) return null; + const years = [0, 2, 4, 6, 8, 10].map(i => `${headerM[i + 2]}-${headerM[i + 1] === "Dec" ? "12" : "06"}`); + + const numRe = "(-?[\\d.]+)"; + const seriesRe = `${numRe}\\s+${numRe}\\s+${numRe}\\s+${numRe}\\s+${numRe}\\s+${numRe}`; + const gdpM = win.match(new RegExp(`Gross domestic product\\s+${seriesRe}`)); + const cpiM = win.match(new RegExp(`Consumer Price Index\\s+${seriesRe}`)); + if (!gdpM && !cpiM) return null; + + const toRecord = (m: RegExpMatchArray | null) => + m ? Object.fromEntries(years.map((y, i) => [y, parseFloat(m[i + 1])])) : {}; + + return { + asOf: new Date().toISOString().slice(0, 10), + years, + gdp: toRecord(gdpM), + inflation: toRecord(cpiM), + label: "RBA — Statement on Monetary Policy, prévisions semestrielles", + sourceUrl: pageUrl, + }; +} + +export async function fetchRbaGovernance(): Promise { + const info = CB_STATIC_INFO.AUD; + const [indexHtml, forecast] = await Promise.all([ + fetchPlain("https://www.rba.gov.au/monetary-policy/int-rate-decisions/"), + fetchRbaForecast().catch(() => null), + ]); + if (!indexHtml) return staticFallback("AUD", "Index des décisions introuvable"); + + const links = Array.from(new Set(Array.from(indexHtml.matchAll(/\/media-releases\/(\d{4})\/mr-(\d{2})-(\d{2})\.html/g), m => m[0]))); + if (!links.length) return staticFallback("AUD", "Aucune décision trouvée sur l'index"); + // Le numéro de séquence (mr-YY-NN) croît avec le temps mais n'est pas daté — on + // trie par (année, numéro) pour prendre la plus récente. + links.sort((a, b) => { + const pa = a.match(/mr-(\d{2})-(\d{2})/)!, pb = b.match(/mr-(\d{2})-(\d{2})/)!; + return pa[1] !== pb[1] ? +pa[1] - +pb[1] : +pa[2] - +pb[2]; + }); + const url = `https://www.rba.gov.au${links.at(-1)}`; + + const html = await fetchPlain(url); + if (!html) return staticFallback("AUD", "Communiqué RBA illisible"); + const text = htmlToText(html); + + const dateM = text.match(/\bDate\s+(\d{1,2}\s+\w+\s+\d{4})/); + const majM = text.match(/made by majority:\s*([a-z]+)\s+members? voted to\s+(increase|decrease|lower|leave)[^;]*?(?:to\s+([\d.]+)\s+per cent)?;\s*([a-z]+)\s+members? voted to\s+(increase|decrease|lower|leave)[^.]*?(?:at\s+([\d.]+)\s+per cent)?/i); + const unanRateM = text.match(/Board decided to\s+(?:leave the cash rate target unchanged at|increase the cash rate target(?:\s+by[^t]*)?\s*to|lower the cash rate target(?:\s+by[^t]*)?\s*to)\s+([\d.]+)\s+per cent/i); + + const WORDNUM: Record = { one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9 }; + + let voteSummary: string, rateLevel: string | null, voteDetail: string | null; + if (majM) { + const n1 = WORDNUM[majM[1].toLowerCase()] ?? NaN; + const n2 = WORDNUM[majM[4].toLowerCase()] ?? NaN; + voteSummary = !isNaN(n1) && !isNaN(n2) ? `${Math.max(n1,n2)} – ${Math.min(n1,n2)}` : "Majorité (détail ci-dessous)"; + rateLevel = (majM[3] ?? majM[6]) ? `${majM[3] ?? majM[6]}%` : null; + voteDetail = majM[0]; + } else { + voteSummary = "Unanime"; + rateLevel = unanRateM ? `${unanRateM[1]}%` : null; + voteDetail = null; + } + + return { + currency: "AUD", ...info, + meetingDate: dateM ? dateM[1] : null, + rateLevel, + voteSummary, + voteDetail, + statementUrl: url, + reportPdfUrl: null, // Statement on Monetary Policy = trimestriel, pas à chaque réunion + reportLabel: "Statement by the Monetary Policy Board", + forecast, + }; +} + +// ── SNB (CHF) ───────────────────────────────────────────────────────────────── +// Décision collégiale (Direction générale à 3 membres) — aucun vote publié. + +export async function fetchSnbGovernance(): Promise { + const info = CB_STATIC_INFO.CHF; + const listHtml = await fetchText("https://www.snb.ch/en/the-snb/mandates-goals/monetary-policy/decisions"); + const linkM = listHtml?.match(/href="(\/en\/publications\/communication\/press-releases-restricted\/pre_(\d{8})[^"]*)"/); + if (!linkM) return staticFallback("CHF", "Décision SNB introuvable"); + const dateCompact = linkM[2]; + const dateIso = `${dateCompact.slice(0,4)}-${dateCompact.slice(4,6)}-${dateCompact.slice(6,8)}`; + + const prHtml = await fetchText(`https://www.snb.ch${linkM[1]}`); + if (!prHtml) return staticFallback("CHF", "Communiqué SNB illisible"); + const prText = htmlToText(prHtml); + const rateM = prText.match(/SNB policy rate\s+(?:unchanged at|to)\s+(-?[\d.]+)%/i); + + // "Conditional inflation forecast" — pas de prévision de croissance chiffrée + // publiée par la SNB dans ce même communiqué, seulement l'inflation. + const inflM = prText.match(/average annual inflation at\s+(-?[\d.]+)%\s+for\s+(\d{4}),\s+(-?[\d.]+)%\s+for\s+(\d{4})\s+and\s+(-?[\d.]+)%\s+for\s+(\d{4})/i); + const forecast: CBForecast | null = inflM ? { + asOf: dateIso, + years: [inflM[2], inflM[4], inflM[6]], + gdp: {}, + inflation: { [inflM[2]]: parseFloat(inflM[1]), [inflM[4]]: parseFloat(inflM[3]), [inflM[6]]: parseFloat(inflM[5]) }, + label: "SNB — prévision conditionnelle d'inflation", + sourceUrl: `https://www.snb.ch${linkM[1]}`, + } : null; + + return { + currency: "CHF", ...info, + meetingDate: dateIso, + rateLevel: rateM ? `${rateM[1]}%` : null, + voteSummary: "Décision collégiale (3 membres)", + voteDetail: null, + statementUrl: `https://www.snb.ch${linkM[1]}`, + reportPdfUrl: `https://www.snb.ch/public/asset/en/www-snb-ch/publications/communication/press-releases-restricted/pre_${dateCompact}/publications0_en/pre_${dateCompact}.en.pdf`, + reportLabel: "Monetary Policy Assessment", + forecast, + }; +} + +// Projections du dernier Monetary Policy Report — Table 2 ("Contributions to +// average annual real GDP growth") donne les lignes annuelles GDP et CPI +// inflation ; Table 3 (juste après) redonne un CPI trimestriel qu'on veut +// éviter de capter par erreur, d'où la fenêtre de recherche bornée à +// [Table 2: … Table 3:]. +async function fetchBocForecast(): Promise { + const indexHtml = await fetchText("https://www.bankofcanada.ca/publications/mpr/"); + if (!indexHtml) return null; + const mprM = indexHtml.match(/href="(https:\/\/www\.bankofcanada\.ca\/publications\/mpr\/mpr-\d{4}-\d{2}-\d{2}\/)"/); + if (!mprM) return null; + const projUrl = `${mprM[1]}projections/`; + + const html = await fetchText(projUrl); + if (!html) return null; + const text = htmlToText(html); + + const t2Start = text.indexOf("Table 2:"); + const t3Start = text.indexOf("Table 3:", t2Start); + if (t2Start === -1 || t3Start === -1) return null; + const window = text.slice(t2Start, t3Start); + + const yearsM = window.match(/(\d{4})\s+(\d{4})\s+(\d{4})\s+(\d{4})/); + const numRe = "(-?[\\d.]+)(?:\\s*\\([^)]*\\))?"; + const gdpM = window.match(new RegExp(`\\bGDP\\s+${numRe}\\s+${numRe}\\s+${numRe}\\s+${numRe}`)); + const cpiM = window.match(new RegExp(`\\bCPI inflation\\s+${numRe}\\s+${numRe}\\s+${numRe}\\s+${numRe}`)); + if (!yearsM || (!gdpM && !cpiM)) return null; + + const years = [yearsM[1], yearsM[2], yearsM[3], yearsM[4]]; + const toRecord = (m: RegExpMatchArray | null) => + m ? { [years[0]]: parseFloat(m[1]), [years[1]]: parseFloat(m[2]), [years[2]]: parseFloat(m[3]), [years[3]]: parseFloat(m[4]) } : {}; + + return { + asOf: new Date().toISOString().slice(0, 10), + years, + gdp: toRecord(gdpM), + inflation: toRecord(cpiM), + label: "BoC — Monetary Policy Report, projections", + sourceUrl: projUrl, + }; +} + +// ── BoC (CAD) ───────────────────────────────────────────────────────────────── +// Décision par consensus — aucun vote publié. + +export async function fetchBocGovernance(): Promise { + const info = CB_STATIC_INFO.CAD; + const [html, forecast] = await Promise.all([ + fetchText("https://www.bankofcanada.ca/core-functions/monetary-policy/key-interest-rate/"), + fetchBocForecast().catch(() => null), + ]); + if (!html) return staticFallback("CAD", "Page taux directeur introuvable"); + const text = htmlToText(html); + + // Tableau "Date* Target (%) Change (%) ..." — + // la première ligne du tableau est toujours la décision la plus récente. + const rowM = text.match(/Target \(%\)\s+Change \(%\)\s+([A-Z][a-z]+ \d{1,2},\s*\d{4})\s+([\d.]+)/); + + return { + currency: "CAD", ...info, + meetingDate: rowM ? rowM[1] : null, + rateLevel: rowM ? `${rowM[2]}%` : null, + voteSummary: "Décision par consensus", + voteDetail: null, + statementUrl: "https://www.bankofcanada.ca/core-functions/monetary-policy/key-interest-rate/", + reportPdfUrl: null, + reportLabel: "Monetary Policy Report", + forecast, + }; +} + +// Extrait les projections macroéconomiques (staff projections) du même +// communiqué de décision déjà fetché — phrasé quasi-identique à chaque +// publication trimestrielle : "headline inflation is expected to average X% +// in Y1, Y% in Y2 and Z% in Y3" / "economic growth at an average of X% in Y1…". +function parseEcbForecast(text: string, sourceUrl: string): CBForecast | null { + const inflM = text.match(/(?:headline )?inflation is expected to average\s+([\d.]+)%\s+in\s+(\d{4}),\s+([\d.]+)%\s+in\s+(\d{4})\s+and\s+([\d.]+)%\s+in\s+(\d{4})/i); + const gdpM = text.match(/(?:economic growth|GDP growth) at an average of\s+([\d.]+)%\s+in\s+(\d{4}),\s+([\d.]+)%\s+in\s+(\d{4})\s+and\s+([\d.]+)%\s+in\s+(\d{4})/i); + if (!inflM && !gdpM) return null; + + const years = Array.from(new Set([inflM?.[2], inflM?.[4], inflM?.[6], gdpM?.[2], gdpM?.[4], gdpM?.[6]].filter((y): y is string => !!y))).sort(); + + return { + asOf: new Date().toISOString().slice(0, 10), + years, + gdp: gdpM ? { [gdpM[2]]: parseFloat(gdpM[1]), [gdpM[4]]: parseFloat(gdpM[3]), [gdpM[6]]: parseFloat(gdpM[5]) } : {}, + inflation: inflM ? { [inflM[2]]: parseFloat(inflM[1]), [inflM[4]]: parseFloat(inflM[3]), [inflM[6]]: parseFloat(inflM[5]) } : {}, + label: "Eurosystem staff macroeconomic projections", + sourceUrl, + }; +} + +// ── ECB (EUR) ───────────────────────────────────────────────────────────────── +// Décision par consensus — aucun vote publié. Découverte du dernier communiqué +// via le flux RSS (les URLs de communiqués contiennent un hash non prévisible). + +export async function fetchEcbGovernance(): Promise { + const info = CB_STATIC_INFO.EUR; + // Le site ECB charge sa liste de décisions côté client (pas de lien statique + // fiable vers le dernier communiqué — hash d'URL non prévisible depuis la date). + // Le flux RSS général capte la décision si elle est encore dans sa fenêtre + // glissante ; sinon on retombe sur data/rate_decisions.json (déjà tenu à jour + // manuellement ailleurs dans l'app) pour au moins afficher le taux courant. + const rss = await fetchText("https://www.ecb.europa.eu/rss/press.html"); + const itemM = rss ? Array.from(rss.matchAll(/([\s\S]*?)<\/item>/g)).map(m => m[1]).find(item => /ecb\.mp\d{6}~/.test(item)) : undefined; + + if (itemM) { + const urlM = itemM.match(/([^<]+)<\/link>/); + const dateM = itemM.match(/([^<]+)<\/pubDate>/); + if (urlM) { + const html = await fetchText(urlM[1]); + const text = html ? htmlToText(html) : ""; + const rateM = text.match(/deposit facility rate[^.]*?to\s+([\d.]+)%/i); + if (rateM || text) { + return { + currency: "EUR", ...info, + meetingDate: dateM ? new Date(dateM[1]).toISOString().slice(0, 10) : null, + rateLevel: rateM?.[1] ? `${rateM[1]}%` : null, + voteSummary: "Décision par consensus", + voteDetail: null, + statementUrl: urlM[1], + reportPdfUrl: null, + reportLabel: "Monetary Policy Decision", + forecast: parseEcbForecast(text, urlM[1]), + }; + } + } + } + + // Repli : taux courant connu (data/rate_decisions.json), pas de date/URL de communiqué. + const rateDecEntry = (rateDecisionsData as Array<{ decisions: Record }>)[0]; + const eurDecision = rateDecEntry?.decisions?.EUR; + if (eurDecision === undefined) return staticFallback("EUR", "Communiqué introuvable et rate_decisions.json indisponible"); + + // Le champ "source" de rate_decisions.json contient parfois l'URL du + // communiqué (écrite manuellement lors de la dernière correction) — on la + // réutilise pour tenter d'en tirer les projections, à défaut de RSS. + const fallbackUrlM = eurDecision.source?.match(/https:\/\/www\.ecb\.europa\.eu\/press\/pr\/\S+?\.html/); + const fallbackHtml = fallbackUrlM ? await fetchText(fallbackUrlM[0]) : null; + const fallbackForecast = fallbackHtml ? parseEcbForecast(htmlToText(fallbackHtml), fallbackUrlM![0]) : null; + + return { + currency: "EUR", ...info, + meetingDate: null, + rateLevel: `${eurDecision.current}%`, + voteSummary: "Décision par consensus", + voteDetail: null, + statementUrl: fallbackUrlM?.[0] ?? null, + reportPdfUrl: null, + reportLabel: null, + forecast: fallbackForecast, + fetchError: "Dernier communiqué hors de la fenêtre RSS — taux affiché depuis rate_decisions.json", + }; +} + +// ── BoJ (JPY) ───────────────────────────────────────────────────────────────── +// Vote numérique publié (ex. "7-1 majority vote"). Statement PDF-only en 2026 ; +// date de réunion découverte par recherche en arrière (par lots concurrents, +// même technique que lib/investinglive.ts) faute de calendrier discret exploitable. + +async function tryBojDate(dateCompact: string): Promise<{ text: string; url: string } | null> { + const url = `https://www.boj.or.jp/en/mopo/mpmdeci/mpr_2026/k${dateCompact}a.pdf`; + try { + // Pas de next:{revalidate} ici : le cache fetch de Next.js sur une réponse + // binaire (PDF) interfère avec la lecture arrayBuffer() qui suit (échec + // silencieux observé en pratique — un fetch "nu" comme pour RBA fonctionne). + const res = await fetch(url); + if (!res.ok) return null; + const buf = await res.arrayBuffer(); + const { PDFParse } = await import("pdf-parse"); + const parser = new PDFParse({ data: Buffer.from(buf) }); + const result = await parser.getText(); + await parser.destroy(); + return { text: result.text, url }; + } catch { return null; } +} + +// Outlook for Economic Activity and Prices ("Outlook Report") — publié 4x/an +// (env. jan/avr/jul/oct), pas à chaque réunion. Table "Forecasts of the +// Majority of the Policy Board Members" : pour chaque exercice fiscal, la +// médiane est entre crochets ; on ignore les lignes "Forecasts made in [mois]" +// qui sont l'ancienne prévision de comparaison, pas la prévision actuelle. +async function fetchBojOutlookPdfText(year: number, month: number): Promise { + const yy = String(year % 100).padStart(2, "0"); + const mm = String(month).padStart(2, "0"); + const url = `https://www.boj.or.jp/en/mopo/outlook/gor${yy}${mm}a.pdf`; + try { + const res = await fetch(url); + if (!res.ok) return null; + const buf = await res.arrayBuffer(); + const { PDFParse } = await import("pdf-parse"); + const parser = new PDFParse({ data: Buffer.from(buf) }); + const result = await parser.getText(); + await parser.destroy(); + return result.text; + } catch { return null; } +} + +async function fetchBojForecast(): Promise { + let y = new Date().getFullYear(); + let m = new Date().getMonth() + 1; + const quarterMonths = [1, 4, 7, 10]; + + for (let tries = 0; tries < 8; tries++) { + if (quarterMonths.includes(m)) { + const text = await fetchBojOutlookPdfText(y, m); + if (text) { + const flat = text.replace(/\s+/g, " "); + const rows = Array.from(flat.matchAll( + /Fiscal (20\d{2})\s+[+-][\d.]+\s+to\s+[+-][\d.]+\s+\[([+-][\d.]+)\]\s+([+-][\d.]+)(?:\s+to\s+[+-][\d.]+\s+\[([+-][\d.]+)\])?/g + )); + if (rows.length) { + const years: string[] = []; + const gdp: Record = {}; + const inflation: Record = {}; + for (const r of rows) { + const [, fy, gdpMedian, cpiValue, cpiMedian] = r; + years.push(fy); + gdp[fy] = parseFloat(gdpMedian); + inflation[fy] = parseFloat(cpiMedian ?? cpiValue); + } + return { + asOf: `${y}-${String(m).padStart(2, "0")}`, + years, + gdp, + inflation, + label: "BoJ — Outlook for Economic Activity and Prices (médianes)", + sourceUrl: `https://www.boj.or.jp/en/mopo/outlook/gor${String(y % 100).padStart(2, "0")}${String(m).padStart(2, "0")}a.pdf`, + }; + } + } + } + m--; if (m === 0) { m = 12; y--; } + } + return null; +} + +export async function fetchBojGovernance(): Promise { + const info = CB_STATIC_INFO.JPY; + const now = new Date(); + const forecast = await fetchBojForecast().catch(() => null); + + for (let batchStart = 0; batchStart <= 56; batchStart += 7) { + const days = Array.from({ length: 7 }, (_, i) => batchStart + i); + const results = await Promise.all(days.map(async d => { + const dt = new Date(now); dt.setDate(now.getDate() - d); + const compact = dt.toISOString().slice(0, 10).replace(/-/g, "").slice(2); // YYMMDD + const r = await tryBojDate(compact); + return r ? { ...r, daysAgo: d, dateIso: dt.toISOString().slice(0, 10) } : null; + })); + const found = results.filter((r): r is NonNullable => r !== null).sort((a, b) => a.daysAgo - b.daysAgo)[0]; + if (found) { + const voteM = found.text.match(/by an?\s+(\d+)-(\d+)\s+majority vote/i); + // Ex. "encourage the uncollateralized overnight call rate to remain at around 1.0 percent" + const rateM = found.text.match(/(?:overnight call rate|policy rate)[^.]*?around\s+(-?[\d.]+)\s*percent/i); + const namesM = found.text.match(/Voting against[^:]*:\s*([^.]+)\./i); + return { + currency: "JPY", ...info, + meetingDate: found.dateIso, + rateLevel: rateM ? `${rateM[1]}%` : null, + voteSummary: voteM ? `${voteM[1]} – ${voteM[2]}` : "Unanime", + voteDetail: namesM ? namesM[1].trim() : null, + statementUrl: found.url, + reportPdfUrl: found.url, + reportLabel: "Statement on Monetary Policy", + forecast, + }; + } + } + return staticFallback("JPY", "Communiqué BoJ introuvable sur les 8 dernières semaines"); +} + +// ── RBNZ (NZD) ──────────────────────────────────────────────────────────────── +// rbnz.govt.nz bloque toute requête automatisée derrière un challenge Cloudflare +// interactif ("Verify you are human") — vérifié avec un vrai navigateur headless, +// pas seulement fetch(). Ce n'est pas contournable proprement (et on ne cherche +// pas à résoudre un captcha anti-bot / évader une protection délibérée). +// +// Repli légitime (aucune requête vers rbnz.govt.nz) : +// - Taux OCR courant : data/rate_decisions.json (auto-maintenu par +// update-rate-decisions.yml). +// - Date de la dernière réunion : calendrier économique Trading Economics +// (lib/tradingeconomics.ts, déjà utilisé ailleurs dans l'app pour le +// calendrier), qui couvre la Nouvelle-Zélande — pas de scraping du site +// RBNZ lui-même. +// - Vote : la RBNZ ne publie de toute façon pas de décompte individuel des +// votes (confirmé via TE/interest.co.nz — décision par consensus du +// comité, contrairement à la Fed/BoE), donc "non publié" est correct sur +// le fond, pas seulement une conséquence du blocage. + +export async function fetchRbnzGovernance(): Promise { + const info = CB_STATIC_INFO.NZD; + const rateDecEntry = (rateDecisionsData as Array<{ decisions: Record }>)[0]; + const nzdRate = rateDecEntry?.decisions?.NZD?.current; + if (nzdRate === undefined) return staticFallback("NZD", "rbnz.govt.nz bloque les requêtes non-navigateur (Cloudflare) et rate_decisions.json indisponible"); + + let meetingDate: string | null = null; + try { + const to = new Date(); + const from = new Date(to); from.setDate(from.getDate() - 70); + const iso = (d: Date) => d.toISOString().slice(0, 10); + // "new-zealand" n'est pas dans le G20 → absent de fetchTECalendarHTML (page + // /calendar générique), d'où l'usage du fetcher mono-pays dédié. + const events = await fetchTECalendarForCountry("new-zealand", iso(from), iso(to)); + const decisions = events + .filter(e => e.category === "policy_rate" && e.isPublished) + .sort((a, b) => b.date.localeCompare(a.date)); + if (decisions[0]) meetingDate = decisions[0].date.slice(0, 10); + } catch { /* meetingDate reste null, pas bloquant */ } + + return { + currency: "NZD", ...info, + meetingDate, + rateLevel: `${nzdRate}%`, + voteSummary: "Non publié", + voteDetail: "La RBNZ ne publie pas de décompte de vote (décision par consensus du comité) ; communiqué détaillé indisponible — rbnz.govt.nz bloque le scraping automatisé (challenge Cloudflare).", + statementUrl: null, + reportPdfUrl: null, + reportLabel: null, + fetchError: "rbnz.govt.nz bloque les requêtes non-navigateur (Cloudflare) — taux (rate_decisions.json) et date de réunion (Trading Economics) affichés en repli.", + }; +} + +// ── Agrégateur ──────────────────────────────────────────────────────────────── + +export async function fetchAllCBGovernance(): Promise> { + const [usd, gbp, eur, jpy, chf, cad, aud, nzd] = await Promise.all([ + fetchFedGovernance().catch(() => staticFallback("USD", "Erreur de scraping")), + fetchBoeGovernance().catch(() => staticFallback("GBP", "Erreur de scraping")), + fetchEcbGovernance().catch(() => staticFallback("EUR", "Erreur de scraping")), + fetchBojGovernance().catch(() => staticFallback("JPY", "Erreur de scraping")), + fetchSnbGovernance().catch(() => staticFallback("CHF", "Erreur de scraping")), + fetchBocGovernance().catch(() => staticFallback("CAD", "Erreur de scraping")), + fetchRbaGovernance().catch(() => staticFallback("AUD", "Erreur de scraping")), + fetchRbnzGovernance().catch(() => staticFallback("NZD", "Erreur de scraping")), + ]); + return { USD: usd, GBP: gbp, EUR: eur, JPY: jpy, CHF: chf, CAD: cad, AUD: aud, NZD: nzd }; +} diff --git a/lib/fxstreetCalendar.ts b/lib/fxstreetCalendar.ts new file mode 100644 index 0000000..8ec9f13 --- /dev/null +++ b/lib/fxstreetCalendar.ts @@ -0,0 +1,176 @@ +// lib/fxstreetCalendar.ts +// Calendrier économique investingLive (investinglive.com/EconomicCalendar). +// +// investingLive n'a pas d'API JSON publique : la page embarque le widget +// FXStreet (calendar.fxstreet.com), chargé via /fxstreet-calendar.js sur +// investinglive.com. On appelle directement l'endpoint HTML de ce widget — +// c'est le même appel que fait le navigateur quand on visite +// investinglive.com/EconomicCalendar (Referer investingLive requis). +// +// Endpoint : GET https://calendar.fxstreet.com/EventDateWidget/GetMain +// ?culture=en-US&timezone=UTC&start=YYYYMMDD&end=YYYYMMDD&view=range +// &rows=5000&countrycode=US,UK,EMU,JP,... +// → retourne un fragment HTML (table
([^<]+)<\/td>\s*<\/tr>|