From 22fd07f9a80c1298a83a8badeec415fde7ee3344 Mon Sep 17 00:00:00 2001 From: SongshGeo Date: Sat, 6 Jun 2026 16:15:24 +0200 Subject: [PATCH] feat(plugins): update community plugins list, modify workspace view settings, and enhance Longform-PaperBell functionality --- PaperBell/.obsidian/community-plugins.json | 3 +- PaperBell/.obsidian/plugins/homepage/main.js | 2 +- .../.obsidian/plugins/homepage/manifest.json | 2 +- .../plugins/longform-paperbell/data.json | 18 +- .../plugins/longform-paperbell/main.js | 488 +- .../plugins/longform-paperbell/manifest.json | 2 +- .../obsidian-enhancing-export/data.json | 20 +- .../.obsidian/plugins/obsidian-git/data.json | 7 + .../.obsidian/plugins/obsidian-git/main.js | 415 + .../plugins/obsidian-git/manifest.json | 10 + .../.obsidian/plugins/obsidian-git/styles.css | 705 + .../.obsidian/plugins/paperbell/data.json | 7 +- PaperBell/.obsidian/plugins/paperbell/main.js | 221 +- .../.obsidian/plugins/paperbell/manifest.json | 12 +- .../.obsidian/plugins/paperbell/styles.css | 2 +- .../.obsidian/plugins/realclaudian/data.json | 12 + .../.obsidian/plugins/realclaudian/main.js | 104023 +++++++++++++++ .../plugins/realclaudian/manifest.json | 10 + .../.obsidian/plugins/realclaudian/styles.css | 6272 + PaperBell/.obsidian/workspaces.json | 37 +- .../pandoc/defaults/response-letter.yaml" | 30 + .../pandoc/filters/responseletter.lua" | 464 + .../pandoc/templates/responseletter.sty" | 314 + .../templates/responseletter.template.tex" | 26 + .../index.md" | 3 +- ...46\346\234\257\346\226\207\346\241\243.md" | 4 + PaperBell/Outputs/demo/DEMO_manuscript.md | 2378 - PaperBell/Outputs/demo/DEMO_manuscript.pdf | Bin 3426538 -> 0 bytes PaperBell/Outputs/demo/Index.md | 169 - PaperBell/Outputs/demo/figs/formatting.png | Bin 248402 -> 0 bytes PaperBell/Outputs/demo/figs/switching.png | Bin 388836 -> 0 bytes PaperBell/Outputs/demo/imgs/organizing.png | Bin 344389 -> 0 bytes .../source/DEMO_\345\274\225\350\250\200.md" | 60 - .../source/DEMO_\346\226\271\346\263\225.md" | 1087 - .../source/DEMO_\347\273\223\346\236\234.md" | 414 - .../source/DEMO_\350\256\250\350\256\272.md" | 781 - ...\347\257\207\350\256\272\346\226\207.docx" | Bin 10820 -> 0 bytes 37 files changed, 112765 insertions(+), 5233 deletions(-) create mode 100644 PaperBell/.obsidian/plugins/obsidian-git/data.json create mode 100644 PaperBell/.obsidian/plugins/obsidian-git/main.js create mode 100644 PaperBell/.obsidian/plugins/obsidian-git/manifest.json create mode 100644 PaperBell/.obsidian/plugins/obsidian-git/styles.css create mode 100644 PaperBell/.obsidian/plugins/realclaudian/data.json create mode 100644 PaperBell/.obsidian/plugins/realclaudian/main.js create mode 100644 PaperBell/.obsidian/plugins/realclaudian/manifest.json create mode 100644 PaperBell/.obsidian/plugins/realclaudian/styles.css create mode 100644 "PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/defaults/response-letter.yaml" create mode 100644 "PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/filters/responseletter.lua" create mode 100644 "PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/templates/responseletter.sty" create mode 100644 "PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/templates/responseletter.template.tex" delete mode 100644 PaperBell/Outputs/demo/DEMO_manuscript.md delete mode 100644 PaperBell/Outputs/demo/DEMO_manuscript.pdf delete mode 100644 PaperBell/Outputs/demo/Index.md delete mode 100644 PaperBell/Outputs/demo/figs/formatting.png delete mode 100644 PaperBell/Outputs/demo/figs/switching.png delete mode 100644 PaperBell/Outputs/demo/imgs/organizing.png delete mode 100644 "PaperBell/Outputs/demo/source/DEMO_\345\274\225\350\250\200.md" delete mode 100644 "PaperBell/Outputs/demo/source/DEMO_\346\226\271\346\263\225.md" delete mode 100644 "PaperBell/Outputs/demo/source/DEMO_\347\273\223\346\236\234.md" delete mode 100644 "PaperBell/Outputs/demo/source/DEMO_\350\256\250\350\256\272.md" delete mode 100644 "PaperBell/Outputs/demo/\344\270\200\347\257\207\350\256\272\346\226\207.docx" diff --git a/PaperBell/.obsidian/community-plugins.json b/PaperBell/.obsidian/community-plugins.json index f4f377b6..cf9166e7 100644 --- a/PaperBell/.obsidian/community-plugins.json +++ b/PaperBell/.obsidian/community-plugins.json @@ -27,5 +27,6 @@ "paperbell", "obsidian-map-view", "obsidian42-brat", - "longform-paperbell" + "longform-paperbell", + "realclaudian" ] \ No newline at end of file diff --git a/PaperBell/.obsidian/plugins/homepage/main.js b/PaperBell/.obsidian/plugins/homepage/main.js index c77ad668..b4f167c8 100644 --- a/PaperBell/.obsidian/plugins/homepage/main.js +++ b/PaperBell/.obsidian/plugins/homepage/main.js @@ -1,3 +1,3 @@ -"use strict";var Qe=Object.create;var z=Object.defineProperty;var $e=Object.getOwnPropertyDescriptor;var Xe=Object.getOwnPropertyNames;var Ze=Object.getPrototypeOf,et=Object.prototype.hasOwnProperty;var tt=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),at=(n,t)=>{for(var e in t)z(n,e,{get:t[e],enumerable:!0})},ve=(n,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Xe(t))!et.call(n,i)&&i!==e&&z(n,i,{get:()=>t[i],enumerable:!(a=$e(t,i))||a.enumerable});return n};var nt=(n,t,e)=>(e=n!=null?Qe(Ze(n)):{},ve(t||!n||!n.__esModule?z(e,"default",{value:n,enumerable:!0}):e,n)),it=n=>ve(z({},"__esModule",{value:!0}),n);var Ie=tt(l=>{"use strict";Object.defineProperty(l,"__esModule",{value:!0});var m=require("obsidian"),ie="YYYY-MM-DD",oe="gggg-[W]ww",Te="YYYY-MM",Se="YYYY-[Q]Q",Me="YYYY";function H(n){let t=window.app.plugins.getPlugin("periodic-notes");return t&&t.settings?.[n]?.enabled}function W(){try{let{internalPlugins:n,plugins:t}=window.app;if(H("daily")){let{format:o,folder:s,template:c}=t.getPlugin("periodic-notes")?.settings?.daily||{};return{format:o||ie,folder:s?.trim()||"",template:c?.trim()||""}}let{folder:e,format:a,template:i}=n.getPluginById("daily-notes")?.instance?.options||{};return{format:a||ie,folder:e?.trim()||"",template:i?.trim()||""}}catch(n){console.info("No custom daily note settings found!",n)}}function I(){try{let n=window.app.plugins,t=n.getPlugin("calendar")?.options,e=n.getPlugin("periodic-notes")?.settings?.weekly;if(H("weekly"))return{format:e.format||oe,folder:e.folder?.trim()||"",template:e.template?.trim()||""};let a=t||{};return{format:a.weeklyNoteFormat||oe,folder:a.weeklyNoteFolder?.trim()||"",template:a.weeklyNoteTemplate?.trim()||""}}catch(n){console.info("No custom weekly note settings found!",n)}}function V(){let n=window.app.plugins;try{let t=H("monthly")&&n.getPlugin("periodic-notes")?.settings?.monthly||{};return{format:t.format||Te,folder:t.folder?.trim()||"",template:t.template?.trim()||""}}catch(t){console.info("No custom monthly note settings found!",t)}}function _(){let n=window.app.plugins;try{let t=H("quarterly")&&n.getPlugin("periodic-notes")?.settings?.quarterly||{};return{format:t.format||Se,folder:t.folder?.trim()||"",template:t.template?.trim()||""}}catch(t){console.info("No custom quarterly note settings found!",t)}}function U(){let n=window.app.plugins;try{let t=H("yearly")&&n.getPlugin("periodic-notes")?.settings?.yearly||{};return{format:t.format||Me,folder:t.folder?.trim()||"",template:t.template?.trim()||""}}catch(t){console.info("No custom yearly note settings found!",t)}}function Fe(...n){let t=[];for(let a=0,i=n.length;a{let ee=a(),te=n.clone().set({hour:ee.get("hour"),minute:ee.get("minute"),second:ee.get("second")});return M&&te.add(parseInt(N,10),v),y?te.format(y.substring(1).trim()):te.format(o)}).replace(/{{\s*yesterday\s*}}/gi,n.clone().subtract(1,"day").format(o)).replace(/{{\s*tomorrow\s*}}/gi,n.clone().add(1,"d").format(o)));return t.foldManager.save(f,d),f}catch(f){console.error(`Failed to create file: '${h}'`,f),new m.Notice("Unable to create new file.")}}function pt(n,t){return t[P(n,"day")]??null}function dt(){let{vault:n}=window.app,{folder:t}=W(),e=n.getAbstractFileByPath(m.normalizePath(t));if(!e)throw new se("Failed to find daily notes folder");let a={};return m.Vault.recurseChildren(e,i=>{if(i instanceof m.TFile){let o=L(i,"day");if(o){let s=P(o,"day");a[s]=i}}}),a}var re=class extends Error{};function ut(){let{moment:n}=window,t=n.localeData()._week.dow,e=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"];for(;t;)e.push(e.shift()),t--;return e}function gt(n){return ut().indexOf(n.toLowerCase())}async function Le(n){let{vault:t}=window.app,{template:e,format:a,folder:i}=I(),[o,s]=await A(e),c=n.format(a),d=await Y(i,c);try{let p=await t.create(d,o.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(h,f,g,T,M,N)=>{let v=window.moment(),y=n.clone().set({hour:v.get("hour"),minute:v.get("minute"),second:v.get("second")});return g&&y.add(parseInt(T,10),M),N?y.format(N.substring(1).trim()):y.format(a)}).replace(/{{\s*title\s*}}/gi,c).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*(sunday|monday|tuesday|wednesday|thursday|friday|saturday)\s*:(.*?)}}/gi,(h,f,g)=>{let T=gt(f);return n.weekday(T).format(g.trim())}));return window.app.foldManager.save(p,s),p}catch(p){console.error(`Failed to create file: '${d}'`,p),new m.Notice("Unable to create new file.")}}function mt(n,t){return t[P(n,"week")]??null}function ht(){let n={};if(!Re())return n;let{vault:t}=window.app,{folder:e}=I(),a=t.getAbstractFileByPath(m.normalizePath(e));if(!a)throw new re("Failed to find weekly notes folder");return m.Vault.recurseChildren(a,i=>{if(i instanceof m.TFile){let o=L(i,"week");if(o){let s=P(o,"week");n[s]=i}}}),n}var le=class extends Error{};async function Ce(n){let{vault:t}=window.app,{template:e,format:a,folder:i}=V(),[o,s]=await A(e),c=n.format(a),d=await Y(i,c);try{let p=await t.create(d,o.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(h,f,g,T,M,N)=>{let v=window.moment(),y=n.clone().set({hour:v.get("hour"),minute:v.get("minute"),second:v.get("second")});return g&&y.add(parseInt(T,10),M),N?y.format(N.substring(1).trim()):y.format(a)}).replace(/{{\s*date\s*}}/gi,c).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,c));return window.app.foldManager.save(p,s),p}catch(p){console.error(`Failed to create file: '${d}'`,p),new m.Notice("Unable to create new file.")}}function ft(n,t){return t[P(n,"month")]??null}function wt(){let n={};if(!xe())return n;let{vault:t}=window.app,{folder:e}=V(),a=t.getAbstractFileByPath(m.normalizePath(e));if(!a)throw new le("Failed to find monthly notes folder");return m.Vault.recurseChildren(a,i=>{if(i instanceof m.TFile){let o=L(i,"month");if(o){let s=P(o,"month");n[s]=i}}}),n}var ce=class extends Error{};async function yt(n){let{vault:t}=window.app,{template:e,format:a,folder:i}=_(),[o,s]=await A(e),c=n.format(a),d=await Y(i,c);try{let p=await t.create(d,o.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(h,f,g,T,M,N)=>{let v=window.moment(),y=n.clone().set({hour:v.get("hour"),minute:v.get("minute"),second:v.get("second")});return g&&y.add(parseInt(T,10),M),N?y.format(N.substring(1).trim()):y.format(a)}).replace(/{{\s*date\s*}}/gi,c).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,c));return window.app.foldManager.save(p,s),p}catch(p){console.error(`Failed to create file: '${d}'`,p),new m.Notice("Unable to create new file.")}}function vt(n,t){return t[P(n,"quarter")]??null}function bt(){let n={};if(!He())return n;let{vault:t}=window.app,{folder:e}=_(),a=t.getAbstractFileByPath(m.normalizePath(e));if(!a)throw new ce("Failed to find quarterly notes folder");return m.Vault.recurseChildren(a,i=>{if(i instanceof m.TFile){let o=L(i,"quarter");if(o){let s=P(o,"quarter");n[s]=i}}}),n}var pe=class extends Error{};async function Nt(n){let{vault:t}=window.app,{template:e,format:a,folder:i}=U(),[o,s]=await A(e),c=n.format(a),d=await Y(i,c);try{let p=await t.create(d,o.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(h,f,g,T,M,N)=>{let v=window.moment(),y=n.clone().set({hour:v.get("hour"),minute:v.get("minute"),second:v.get("second")});return g&&y.add(parseInt(T,10),M),N?y.format(N.substring(1).trim()):y.format(a)}).replace(/{{\s*date\s*}}/gi,c).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,c));return window.app.foldManager.save(p,s),p}catch(p){console.error(`Failed to create file: '${d}'`,p),new m.Notice("Unable to create new file.")}}function Dt(n,t){return t[P(n,"year")]??null}function kt(){let n={};if(!We())return n;let{vault:t}=window.app,{folder:e}=U(),a=t.getAbstractFileByPath(m.normalizePath(e));if(!a)throw new pe("Failed to find yearly notes folder");return m.Vault.recurseChildren(a,i=>{if(i instanceof m.TFile){let o=L(i,"year");if(o){let s=P(o,"year");n[s]=i}}}),n}function Pt(){let{app:n}=window,t=n.internalPlugins.plugins["daily-notes"];if(t&&t.enabled)return!0;let e=n.plugins.getPlugin("periodic-notes");return e&&e.settings?.daily?.enabled}function Re(){let{app:n}=window;if(n.plugins.getPlugin("calendar"))return!0;let t=n.plugins.getPlugin("periodic-notes");return t&&t.settings?.weekly?.enabled}function xe(){let{app:n}=window,t=n.plugins.getPlugin("periodic-notes");return t&&t.settings?.monthly?.enabled}function He(){let{app:n}=window,t=n.plugins.getPlugin("periodic-notes");return t&&t.settings?.quarterly?.enabled}function We(){let{app:n}=window,t=n.plugins.getPlugin("periodic-notes");return t&&t.settings?.yearly?.enabled}function Tt(n){let t={day:W,week:I,month:V,quarter:_,year:U}[n];return t()}function St(n,t){return{day:Ae,month:Ce,week:Le}[n](t)}l.DEFAULT_DAILY_NOTE_FORMAT=ie;l.DEFAULT_MONTHLY_NOTE_FORMAT=Te;l.DEFAULT_QUARTERLY_NOTE_FORMAT=Se;l.DEFAULT_WEEKLY_NOTE_FORMAT=oe;l.DEFAULT_YEARLY_NOTE_FORMAT=Me;l.appHasDailyNotesPluginLoaded=Pt;l.appHasMonthlyNotesPluginLoaded=xe;l.appHasQuarterlyNotesPluginLoaded=He;l.appHasWeeklyNotesPluginLoaded=Re;l.appHasYearlyNotesPluginLoaded=We;l.createDailyNote=Ae;l.createMonthlyNote=Ce;l.createPeriodicNote=St;l.createQuarterlyNote=yt;l.createWeeklyNote=Le;l.createYearlyNote=Nt;l.getAllDailyNotes=dt;l.getAllMonthlyNotes=wt;l.getAllQuarterlyNotes=bt;l.getAllWeeklyNotes=ht;l.getAllYearlyNotes=kt;l.getDailyNote=pt;l.getDailyNoteSettings=W;l.getDateFromFile=L;l.getDateFromPath=ct;l.getDateUID=P;l.getMonthlyNote=ft;l.getMonthlyNoteSettings=V;l.getPeriodicNoteSettings=Tt;l.getQuarterlyNote=vt;l.getQuarterlyNoteSettings=_;l.getTemplateInfo=A;l.getWeeklyNote=mt;l.getWeeklyNoteSettings=I;l.getYearlyNote=Dt;l.getYearlyNoteSettings=U});var At={};at(At,{default:()=>Z});module.exports=it(At);var S=require("obsidian");var b=require("obsidian");var F=require("obsidian");function k(n){return n?n.extension=="md"?n.path.slice(0,-3):n.path:""}function be(n){return n.split("/").slice(-1)[0].contains(".")?n:`${n}.md`}function ae(n,t=void 0){let e=n.vault.getFiles();if(t){let a=n.vault.getFolderByPath(t);if(!a)return;e=Ne(a)}if(e.filter(a=>["md","canvas","base"].contains(a.extension)),e.length){let a=Math.floor(Math.random()*e.length);return k(e[a])}}function Ne(n){let t=[];for(let e of n.children)e instanceof F.TFile?t.push(e):e instanceof F.TFolder&&t.push(...Ne(e));return t}function De(n){return n.workspace.getActiveViewOfType(F.View)?.getViewType()=="empty"}function ne(n,t){return n.localeCompare(t,void 0,{sensitivity:"accent"})===0}function q(n){return new Promise(t=>window.setTimeout(t,n))}async function ke(n){let t=n.workspace.getLayout();t.main={id:"5324373015726ba8",type:"split",children:[{id:"4509724f8bf84da7",type:"tabs",children:[{id:"e7a7b303c61786dc",type:"leaf",state:{type:"empty",state:{},icon:"lucide-file",title:"New tab"}}]}],direction:"vertical"},t.active="e7a7b303c61786dc",await n.workspace.changeLayout(t),F.Platform.isMobile&&(n.workspace.rightSplit?.updateInfo(),ot(n))}function ot(n){let t=n.internalPlugins.plugins.sync?.instance;t&&n.workspace.onLayoutReady(()=>{t.statusIconEl=n.workspace.rightSplit.addHeaderButton("sync-small",t.openStatusIconMenu.bind(t)),t.statusIconEl.addEventListener("contextmenu",t.openStatusIconMenu.bind(t)),t.statusIconEl.addClass("sync-status-icon")})}function Pe(n){let t=n.internalPlugins.plugins.sync,e=[new Promise(a=>{let i=async()=>{a(),n.workspace.off("layout-change",i)};n.workspace.on("layout-change",i)})];return t.enabled&&t.instance.syncing&&e.push(new Promise(a=>{let i=async()=>{a(),t.instance.off("status-change",i)};t.instance.on("status-change",i)})),Promise.race([Promise.all(e),new Promise(a=>window.setTimeout(a,1500))])}var u=nt(Ie()),Mt="custom-journal-locale",de={["Daily Note"]:{noun:"day",adjective:"daily",create:u.createDailyNote,get:u.getDailyNote,getAll:u.getAllDailyNotes},["Weekly Note"]:{noun:"week",adjective:"weekly",create:u.createWeeklyNote,get:u.getWeeklyNote,getAll:u.getAllWeeklyNotes},["Monthly Note"]:{noun:"month",adjective:"monthly",create:u.createMonthlyNote,get:u.getMonthlyNote,getAll:u.getAllMonthlyNotes},["Yearly Note"]:{noun:"year",adjective:"yearly",create:u.createYearlyNote,get:u.getYearlyNote,getAll:u.getAllYearlyNotes}},J=["Daily Note","Weekly Note","Monthly Note","Yearly Note"],Ve="Date-dependent file";async function _e(n,t){let e=t.communityPlugins["periodic-notes"],a=de[n],i=window.moment().startOf(a.noun),o;if(Ye(e)){let s=a.getAll();Object.keys(s).length?o=a.get(i,s)||await a.create(i):o=await a.create(i),o||(o=a.get(i,s))}else e.cache.initialize(),o=e.getPeriodicNote(a.noun,i)||await e.createPeriodicNote(a.noun,i);return k(o)}function Ue(n,t){if(n=="Daily Note"&&t.internalPlugins["daily-notes"]?.enabled)return!0;let e=t.communityPlugins["periodic-notes"];if(!e)return!1;if(Ye(e)){let a=de[n].adjective;return e.settings[a]?.enabled}else{let a=de[n].noun;return e?.calendarSetManager?.getActiveSet()[a]?.enabled}}function Ye(n){return(n?.manifest.version||"0").startsWith("0")}function Be(n){return!!n.plugin.communityPlugins.journals.getJournal(n.data.value)}async function Ke(n,t){let e=t.communityPlugins.journals,a=e.getJournal(n),i=a.config.value.autoCreate;e.reprocessNotes(),a.config.value.autoCreate=!0,await a.autoCreate(),a.config.value.autoCreate=i;let o=window.moment().locale(Mt).startOf("day");return a.getNotePath(a?.get(o)).replace(/\.md$/,"")}var ue={["Replace all open notes"]:"Replace all open notes",["Replace last note"]:"Replace last note",["Keep open notes"]:"Keep open notes",["Default view"]:"Default view",["Reading view"]:"Reading view",["Editing view (Source)"]:"Editing view (Source)",["Editing view (Live Preview)"]:"Editing view (Live Preview)",["File"]:"File",["Workspace"]:"Workspace",["Random file"]:"Random file",["Random in folder"]:"Random in folder",["New note"]:"New note",["Graph view"]:"Graph view",["Nothing"]:"Nothing",["Journal"]:"Journal",["Daily Note"]:"Daily Note",["Weekly Note"]:"Weekly Note",["Monthly Note"]:"Monthly Note",["Yearly Note"]:"Yearly Note",["Both"]:"Both",["Startup only"]:"Startup only",["Manual only"]:"Manual only",openHomepage:"Open homepage",setToActiveFile:"Set to active file",copyDebugInfo:"Copy debug info",cliOpenHomepageDesc:"Open the homepage",cliOpenHomepageResult:"Opened the homepage",cliReadHomepageDesc:"Read homepage contents",cliReadHomepageIllegible:"The current homepage cannot be viewed, as it does not match an file",pluginUnavailable:"The active homepage cannot be opened due to plugin unavailablity.",journalUnavailable:'Cannot find the journal "?0" to use as the homepage.',workspaceUnavailable:'Cannot find the workspace "?0" to use as the homepage.',noteUnavailable:'Cannot find the file "?0" to use as the homepage.',homepageChanged:'The homepage has been changed to "?0".',momentUpgradeNotice:"Date-dependent notes in Homepage have been removed. Set your homepage as a Periodic or Daily Note instead.",openOnStartup:"Open on startup",openOnStartupDesc:"When launching Obsidian, open the homepage.",openOnStartupWarn:'This will override the built-in "Default file to open" setting.',openWhenEmpty:"Open when empty",openWhenEmptyDesc:"When there are no tabs open, open the homepage.",alwaysApply:"Use when opening normally",alwaysApplyDesc:"Use homepage settings when opening it normally, such as from a link or the file browser.",separateMobile:"Separate mobile homepage",separateMobileDesc:"For mobile devices, store the homepage and its settings separately.",separateMobileWarnPrefix:"Mobile settings are stored separately.",separateMobileWarnMobile:"Therefore, changes to other settings will not affect desktop devices. To edit desktop settings, use a desktop device.",separateMobileWarnDesktop:"Therefore, changes to other settings will not affect mobile devices. To edit mobile settings, use a mobile device.",commandsGroup:"Commands",commandsDesc:"Select commands that will be executed when opening the homepage.",commandsAddButton:"Add...",commandUnavailable:"This command can't be found, so it won't be executed. It may belong to a disabled plugin.",commandsReally:"Really?",vaultGroup:"Vault environment",openMode:"Opening method",openModeDesc:"Determine how extant tabs and views are affected on startup.",manualOpenMode:"Manual opening method",manualOpenModeDesc:"Determine how extant tabs and views are affected when opening with commands or the ribbon button.",pin:"Pin",pinDesc:"Pin the homepage when opening.",hideReleaseNotes:"Hide release notes",hideReleaseNotesDesc:"Never display release notes when Obsidian updates.",autoCreate:"Auto-create",autoCreateDesc:"When the homepage doesn't exist, create a note with its name.",autoCreateWarn:"If this vault is synced using unofficial services, this may lead to content being overwritten.",openingGroup:"Opened view",view:"Homepage view",viewDesc:"Choose what view to open the homepage in.",revertView:"Revert view on close",revertViewDesc:"When navigating away from the homepage, restore the default view.",autoScroll:"Auto-scroll",autoScrollDesc:"When opening the homepage, scroll to the bottom and focus on the last line",refreshDataview:"Refresh Dataview",refreshDataviewDesc:"Always attempt to reload Dataview views when opening the homepage",refreshDataviewWarn:"Requires Dataview auto-refresh to be enabled.",FileDesc:"Enter a note, base, or canvas to use.",WorkspaceDesc:"Enter an Obsidian workspace to use.","New noteDesc":"Enter a prefix to use. A note using that prefix will be created for each Obsidian session.","Graph viewDesc":"Your graph view will be used.",NothingDesc:"Nothing will occur by default. Any commands added will still take effect.","Random fileDesc":"A random note, base, or canvas from your Obsidian folder will be selected.","Random in folderDesc":"Enter a folder. A random note, base, or canvas from it will be selected.",JournalDesc:"Enter a Journal to use.","Daily noteDesc":"Your Daily Note or Periodic Daily Note will be used.","Weekly noteDesc":"Your Periodic Weekly Note will be used.","Monthly noteDesc":"Your Periodic Monthly Note will be used.","Yearly noteDesc":"Your Periodic Yearly Note will be used.",homepageSettingTitle:"Homepage",pluginUnavailableSettings:"The plugin required for this homepage type isn't available.",copyDebugInfoNotice:"Copied homepage debug information to clipboard"};var je={["Replace all open notes"]:"\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0441\u0435 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0437\u0430\u043C\u0435\u0442\u043A\u0438",["Replace last note"]:"\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443",["Keep open notes"]:"\u041E\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0437\u0430\u043C\u0435\u0442\u043A\u0438",["Default view"]:"\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E",["Reading view"]:"\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440",["Editing view (Source)"]:"\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438\u0441\u0445\u043E\u0434\u043D\u043E\u0433\u043E \u043A\u043E\u0434\u0430",["Editing view (Live Preview)"]:"\u0414\u0438\u043D\u0430\u043C\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440",["File"]:"\u0424\u0430\u0439\u043B",["Workspace"]:"\u0420\u0430\u0431\u043E\u0447\u0435\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E",["Random file"]:"\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u0444\u0430\u0439\u043B",["Random in folder"]:"\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u0444\u0430\u0439\u043B \u0438\u0437 \u043F\u0430\u043F\u043A\u0438",["New note"]:"\u041D\u043E\u0432\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430",["Graph view"]:"\u0413\u0440\u0430\u0444",["Nothing"]:"\u041D\u0438\u0447\u0435\u0433\u043E",["Journal"]:"\u0416\u0443\u0440\u043D\u0430\u043B",["Daily Note"]:"\u0415\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430",["Weekly Note"]:"\u0415\u0436\u0435\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430",["Monthly Note"]:"\u0415\u0436\u0435\u043C\u0435\u0441\u044F\u0447\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430",["Yearly Note"]:"\u0415\u0436\u0435\u0433\u043E\u0434\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430",["Both"]:"\u041E\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0430",["Startup only"]:"\u0422\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435",["Manual only"]:"\u0422\u043E\u043B\u044C\u043A\u043E \u0432\u0440\u0443\u0447\u043D\u0443\u044E",openHomepage:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0434\u043E\u043C\u0430\u0448\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443",setToActiveFile:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0430\u043A\u0442\u0438\u0432\u043D\u044B\u0439 \u0444\u0430\u0439\u043B",copyDebugInfo:"\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0442\u043B\u0430\u0434\u043E\u0447\u043D\u0443\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E",pluginUnavailable:"\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0434\u043E\u043C\u0430\u0448\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443: \u043F\u043B\u0430\u0433\u0438\u043D \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D.",journalUnavailable:'\u0416\u0443\u0440\u043D\u0430\u043B "?0" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D.',workspaceUnavailable:'\u0420\u0430\u0431\u043E\u0447\u0435\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E "?0" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E.',noteUnavailable:'\u0424\u0430\u0439\u043B "?0" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D.',homepageChanged:'\u0414\u043E\u043C\u0430\u0448\u043D\u044F\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0430 \u043D\u0430 "?0".',momentUpgradeNotice:"\u0417\u0430\u043C\u0435\u0442\u043A\u0438, \u0437\u0430\u0432\u0438\u0441\u044F\u0449\u0438\u0435 \u043E\u0442 \u0434\u0430\u0442\u044B, \u0443\u0434\u0430\u043B\u0435\u043D\u044B \u0438\u0437 Homepage. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043F\u0435\u0440\u0438\u043E\u0434\u0438\u0447\u0435\u0441\u043A\u0443\u044E \u0438\u043B\u0438 \u0435\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u0443\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443.",openOnStartup:"\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435",openOnStartupDesc:"\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0434\u043E\u043C\u0430\u0448\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435 Obsidian.",openOnStartupWarn:"\u042D\u0442\u043E \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0443 \u0444\u0430\u0439\u043B\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E.",openWhenEmpty:"\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043F\u0440\u0438 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0432\u043A\u043B\u0430\u0434\u043E\u043A",openWhenEmptyDesc:"\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0434\u043E\u043C\u0430\u0448\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0445 \u0432\u043A\u043B\u0430\u0434\u043E\u043A.",alwaysApply:"\u041F\u0440\u0438\u043C\u0435\u043D\u044F\u0442\u044C \u043F\u0440\u0438 \u043E\u0431\u044B\u0447\u043D\u043E\u043C \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438",alwaysApplyDesc:"\u041F\u0440\u0438\u043C\u0435\u043D\u044F\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438 \u0438\u0437 \u0441\u0441\u044B\u043B\u043E\u043A \u0438\u043B\u0438 \u0444\u0430\u0439\u043B\u043E\u0432\u043E\u0433\u043E \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.",separateMobile:"\u041E\u0442\u0434\u0435\u043B\u044C\u043D\u0430\u044F \u0434\u043E\u043C\u0430\u0448\u043D\u044F\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u0434\u043B\u044F \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0445 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432",separateMobileDesc:"\u0425\u0440\u0430\u043D\u0438\u0442\u044C \u0434\u043E\u043C\u0430\u0448\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u0434\u043B\u044F \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0445 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432 \u0438 \u0435\u0451 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E.",separateMobileWarnPrefix:"\u041C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0445\u0440\u0430\u043D\u044F\u0442\u0441\u044F \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E.",separateMobileWarnMobile:"\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043D\u0435 \u043F\u043E\u0432\u043B\u0438\u044F\u044E\u0442 \u043D\u0430 \u043D\u0430\u0441\u0442\u043E\u043B\u044C\u043D\u044B\u0435 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043D\u0430\u0441\u0442\u043E\u043B\u044C\u043D\u043E\u0435 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u043E \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F.",separateMobileWarnDesktop:"\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043D\u0435 \u043F\u043E\u0432\u043B\u0438\u044F\u044E\u0442 \u043D\u0430 \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0435 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u043E\u0435 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u043E \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F.",commandsGroup:"\u041A\u043E\u043C\u0430\u043D\u0434\u044B",commandsDesc:"\u041A\u043E\u043C\u0430\u043D\u0434\u044B, \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u043C\u044B\u0435 \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438 \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B.",commandsAddButton:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C...",commandUnavailable:"\u041A\u043E\u043C\u0430\u043D\u0434\u0430 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430 \u0438 \u043D\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0430. \u0412\u043E\u0437\u043C\u043E\u0436\u043D\u043E, \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0439 \u043F\u043B\u0430\u0433\u0438\u043D \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D.",commandsReally:"\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B?",vaultGroup:"\u0421\u0440\u0435\u0434\u0430 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430",openMode:"\u0421\u043F\u043E\u0441\u043E\u0431 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u044F",openModeDesc:"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043A\u0430\u043A \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0432\u043A\u043B\u0430\u0434\u043A\u0438 \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435.",manualOpenMode:"\u0421\u043F\u043E\u0441\u043E\u0431 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u044F \u0432\u0440\u0443\u0447\u043D\u0443\u044E",manualOpenModeDesc:"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043A\u0430\u043A \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0432\u043A\u043B\u0430\u0434\u043A\u0438 \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u043A\u043E\u043C\u0430\u043D\u0434\u044B \u0438\u043B\u0438 \u043A\u043D\u043E\u043F\u043A\u0443.",pin:"\u0417\u0430\u043A\u0440\u0435\u043F\u0438\u0442\u044C",pinDesc:"\u0417\u0430\u043A\u0440\u0435\u043F\u0438\u0442\u044C \u0434\u043E\u043C\u0430\u0448\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438.",hideReleaseNotes:"\u0421\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u044F \u043A \u0432\u044B\u043F\u0443\u0441\u043A\u0443",hideReleaseNotesDesc:"\u041D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u044F \u043A \u0432\u044B\u043F\u0443\u0441\u043A\u0443 \u043F\u0440\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0438 Obsidian.",autoCreate:"\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435",autoCreateDesc:"\u0415\u0441\u043B\u0438 \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u043D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0441\u043E\u0437\u0434\u0430\u0435\u0442 \u0435\u0451.",autoCreateWarn:"\u041F\u0440\u0438 \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u043D\u0435\u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044B \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u0430 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u044C \u0434\u0430\u043D\u043D\u044B\u0445.",openingGroup:"\u0420\u0435\u0436\u0438\u043C \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438",view:"\u0420\u0435\u0436\u0438\u043C \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B",viewDesc:"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0435\u0436\u0438\u043C \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u044F \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B.",revertView:"\u0412\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044C \u0440\u0435\u0436\u0438\u043C \u043F\u0440\u0438 \u0437\u0430\u043A\u0440\u044B\u0442\u0438\u0438",revertViewDesc:"\u0412\u043E\u0441\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0442\u044C \u0440\u0435\u0436\u0438\u043C \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043F\u0440\u0438 \u0443\u0445\u043E\u0434\u0435 \u0441 \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B.",autoScroll:"\u0410\u0432\u0442\u043E-scroll",autoScrollDesc:"\u041F\u0440\u043E\u043A\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044C \u0432\u043D\u0438\u0437 \u0438 \u0444\u043E\u043A\u0443\u0441\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0435 \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438.",refreshDataview:"\u041E\u0431\u043D\u043E\u0432\u043B\u044F\u0442\u044C Dataview",refreshDataviewDesc:"\u041F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F Dataview \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438 \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B.",refreshDataviewWarn:"\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u043E\u0435 \u0430\u0432\u0442\u043E\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 Dataview.",FileDesc:"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0437\u0430\u043C\u0435\u0442\u043A\u0443, \u0431\u0430\u0437\u0443 \u0438\u043B\u0438 canvas.",WorkspaceDesc:"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0440\u0430\u0431\u043E\u0447\u0435\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E Obsidian.","New noteDesc":"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u043F\u0440\u0435\u0444\u0438\u043A\u0441. \u041F\u0440\u0438 \u043A\u0430\u0436\u0434\u043E\u043C \u0437\u0430\u043F\u0443\u0441\u043A\u0435 Obsidian \u0431\u0443\u0434\u0435\u0442 \u0441\u043E\u0437\u0434\u0430\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u043E\u0432\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430 \u0441 \u044D\u0442\u0438\u043C \u043F\u0440\u0435\u0444\u0438\u043A\u0441\u043E\u043C.","Graph viewDesc":"\u0411\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D \u0433\u0440\u0430\u0444.",NothingDesc:"\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043F\u0440\u043E\u0438\u0437\u043E\u0439\u0434\u0435\u0442. \u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u044B \u0431\u0443\u0434\u0443\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u044B.","Random fileDesc":"\u0411\u0443\u0434\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u043D \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u0444\u0430\u0439\u043B \u0438\u0437 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430 Obsidian.","Random in folderDesc":"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u043F\u0430\u043F\u043A\u0443. \u0411\u0443\u0434\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u043D \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u0444\u0430\u0439\u043B \u0438\u0437 \u043D\u0435\u0451.",JournalDesc:"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0436\u0443\u0440\u043D\u0430\u043B.","Daily noteDesc":"\u0411\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0430 \u0435\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430.","Weekly noteDesc":"\u0411\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0430 \u0435\u0436\u0435\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430.","Monthly noteDesc":"\u0411\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0430 \u0435\u0436\u0435\u043C\u0435\u0441\u044F\u0447\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430.","Yearly noteDesc":"\u0411\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0430 \u0435\u0436\u0435\u0433\u043E\u0434\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430.",homepageSettingTitle:"Homepage",pluginUnavailableSettings:"\u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u044B\u0439 \u043F\u043B\u0430\u0433\u0438\u043D \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D.",copyDebugInfoNotice:"\u041E\u0442\u043B\u0430\u0434\u043E\u0447\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u0430 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0435\u043D\u0430"};var qe=require("obsidian"),Ft={en:ue,ru:je},Ge,ze=!1;function r(n,...t){if(!ze){let a=(0,qe.getLanguage)()?.toLowerCase()?.split("-")[0]||"en";Ge=Ft[a],ze=!0}n=Ge?.[n]||ue[n];let e=0;for(let a of t)n=n.replace("?"+e,a),e++;return n}var D=require("obsidian");var w=require("obsidian");var Q=class extends w.AbstractInputSuggest{getSuggestions(e){let a=this.app.vault.getAllLoadedFiles(),i=[],o=e.toLowerCase();return a.forEach(s=>{s instanceof w.TFile&&["md","canvas","base"].contains(s.extension)&&s.path.toLowerCase().contains(o)&&i.push(s)}),i}renderSuggestion(e,a){if(e.extension=="md")a.setText(k(e));else{a.setText(e.path.split(".").slice(0,-1).join("."));let i=createDiv();i.className="nav-file-tag nv-homepage-file-tag",i.textContent=e.extension,a.append(i)}}selectSuggestion(e){this.textInputEl.value=k(e),this.textInputEl.trigger("input"),this.close()}},ge=class extends w.AbstractInputSuggest{getSuggestions(e){let a=e.toLowerCase();return this.app.vault.getAllFolders().filter(i=>i.path.toLowerCase().contains(a))}renderSuggestion(e,a){a.setText(e.path)}selectSuggestion(e){this.textInputEl.value=e.path,this.textInputEl.trigger("input"),this.close()}},me=class extends w.AbstractInputSuggest{getSuggestions(e){let a=Object.keys(this.app.internalPlugins.plugins.workspaces?.instance.workspaces),i=e.toLowerCase();return a.filter(o=>o.toLowerCase().contains(i))}renderSuggestion(e,a){a.setText(e)}selectSuggestion(e){this.textInputEl.value=e,this.textInputEl.trigger("input"),this.close()}},he=class extends w.AbstractInputSuggest{getSuggestions(e){let i=this.app.plugins.plugins.journals.journals.map(s=>s.name),o=e.toLowerCase();return i.filter(s=>s.toLowerCase().contains(o))}renderSuggestion(e,a){a.setText(e)}selectSuggestion(e){this.textInputEl.value=e,this.textInputEl.trigger("input"),this.close()}},Je={["File"]:Q,["Workspace"]:me,["Random in folder"]:ge,["New note"]:Q,["Journal"]:he},$=class{constructor(t,e){this.app=t.plugin.app,this.homepage=t.plugin.homepage,this.tab=t,e.addSetting(a=>{a.settingEl.addClass("nv-command-setting"),a.descEl.addClass("nv-command-desc"),a.descEl.innerText=r("commandsDesc"),this.container=a.settingEl.createDiv({cls:"nv-command-box"})}),this.dropzone=createDiv(),this.dropzone.className="nv-command-pill nv-dropzone",this.dropzone.addEventListener("dragenter",a=>a.preventDefault()),this.dropzone.addEventListener("dragover",a=>a.preventDefault()),this.dropzone.addEventListener("drop",()=>this.terminateDrag()),this.update()}update(){this.container.innerHTML="",this.activeDrag=null,this.activeCommand=null;for(let t of this.homepage.data.commands){let e=this.app.commands.findCommand(t.id),a=this.container.createDiv({cls:"nv-command-pill",attr:{draggable:!0}});a.addEventListener("dragstart",o=>{o.dataTransfer.effectAllowed="move",this.activeCommand=this.homepage.data.commands.splice(this.indexOf(a),1)[0],this.activeDrag=a,this.dropzone.style.width=`${a.clientWidth}px`,this.dropzone.style.height=`${a.clientHeight}px`}),a.addEventListener("dragover",o=>this.moveDropzone(a,o)),a.addEventListener("drop",o=>o.preventDefault()),a.addEventListener("dragend",()=>this.terminateDrag()),a.createSpan({cls:"nv-command-text",text:e?.name??t.id});let i=new w.ButtonComponent(a).setIcon("route").setClass("clickable-icon").setClass("nv-command-period").onClick(o=>this.showMenu(t,o,i));t.period!="Both"&&(i.setClass("nv-command-selected"),i.setIcon(""),i.buttonEl.createSpan({text:r(t.period)})),new w.ButtonComponent(a).setIcon("trash-2").setClass("clickable-icon").setClass("nv-command-delete").onClick(()=>this.delete(t)),e||(a.classList.add("nv-command-invalid"),a.prepend((0,w.getIcon)("ban")),(0,w.setTooltip)(a,r("commandUnavailable"),{delay:.001}))}new w.ButtonComponent(this.container).setClass("nv-command-add-button").setButtonText(r("commandsAddButton")).onClick(()=>{new fe(this.tab).open()})}delete(t){this.homepage.data.commands.remove(t),this.homepage.save(),this.update()}showMenu(t,e,a){let i=new w.Menu;for(let s of Object.values(R))i.addItem(c=>{c.setTitle(r(s)),c.setChecked(t.period==s),c.onClick(()=>{t.period=s,this.homepage.save(),this.update()})});let o=a.buttonEl.getBoundingClientRect();i.showAtPosition({x:o.x-22,y:o.y+o.height+8})}indexOf(t){return Array.from(this.container.children).indexOf(t)}moveDropzone(t,e){if(!this.activeDrag)return;this.activeDrag.hidden=!0;let a=t.getBoundingClientRect();e.xawait this.copyDebugInfo()})}sanitiseNote(e){return e===null||e.match(/^\s*$/)!==null?null:(0,D.normalizePath)(e)}display(){let e=this.plugin.homepage.data.kind,a=!1,i=Je[e];this.containerEl.empty(),new O(this).addSetting(d=>{d.setName(r("homepageSettingTitle")).addDropdown(async h=>{for(let f of Object.values(E)){if(!this.plugin.hasRequiredPlugin(f))if(f==this.plugin.homepage.data.kind)a=!0;else{h.selectEl.createEl("option",{text:r(f),attr:{disabled:!0}});continue}h.addOption(f,r(f))}h.setValue(this.plugin.homepage.data.kind),h.onChange(async f=>{this.plugin.homepage.data.kind=f,f=="Random file"&&(this.plugin.homepage.data.value=""),await this.plugin.homepage.save(),this.display()})}),d.settingEl.id="nv-main-setting";let p=d.settingEl.createEl("article",{text:r(e+"Desc"),attr:{id:"nv-desc"}});a&&p.createDiv({text:r("pluginUnavailableSettings"),cls:"mod-warning"}),ye.includes(e)?d.addText(h=>{h.setDisabled(!0)}):d.addText(h=>{new i(this.app,h.inputEl),h.setPlaceholder(x.value),h.setValue(x.value==this.plugin.homepage.data.value?"":this.plugin.homepage.data.value),h.onChange(async f=>{this.plugin.homepage.data.value=this.sanitiseNote(f)||x.value,await this.plugin.homepage.save()})})});let o=new O(this).addToggle("openOnStartup",d=>this.display()).addToggle("openWhenEmpty").addToggle("alwaysApply").addSetting(d=>{if(d.setName(r("separateMobile")).setDesc(r("separateMobileDesc")).addToggle(p=>p.setValue(this.plugin.settings.separateMobile).onChange(async h=>{this.plugin.settings.separateMobile=h,this.plugin.homepage=this.plugin.getHomepage(),await this.plugin.saveSettings(),this.display()})),this.plugin.settings.separateMobile){let p=createDiv();d.setClass("nv-mobile-setting"),p.className="mod-warning nv-mobile-info",p.createEl("b",{text:r("separateMobileWarnPrefix")}),p.append(" "+r(D.Platform.isMobile?"separateMobileWarnMobile":"separateMobileWarnDesktop")),d.settingEl.append(p)}});o.elements.openOnStartup.descEl.createDiv({text:r("openOnStartupWarn"),attr:{class:"mod-warning"}}),this.commandBox=new $(this,new O(this,"commandsGroup"));let s=new O(this,"vaultGroup").addDropdown("openMode",C).addDropdown("manualOpenMode",C).addToggle("pin").addToggle("hideReleaseNotes").addToggle("autoCreate");s.elements.autoCreate.descEl.createDiv({text:r("autoCreateWarn"),cls:"mod-warning"});let c=new O(this,"openingGroup").addDropdown("view",B).addToggle("revertView").addToggle("autoScroll");"dataview"in this.plugin.communityPlugins&&(c.addToggle("refreshDataview"),c.elements.refreshDataview.descEl.createDiv({text:r("refreshDataviewWarn"),attr:{class:"mod-warning"}})),D.Platform.isMobile||new D.ButtonComponent(this.containerEl).setButtonText(r("copyDebugInfo")).setClass("nv-debug-button").onClick(async()=>await this.copyDebugInfo()),["Workspace","Nothing"].includes(e)&&(o.disableSettings("openWhenEmpty","alwaysApply"),s.disableSettings("openMode","manualOpenMode","autoCreate","pin")),["Workspace","Nothing","Graph view"].includes(e)&&c.disableAll(),this.plugin.homepage.data.openOnStartup||s.disableSettings("openMode"),(J.includes(e)||e==="Journal")&&s.disableSettings("autoCreate")}async copyDebugInfo(){let e=this.app.vault.config,a={...this.settings,_defaultViewMode:e.defaultViewMode||"default",_livePreview:e.livePreview!==void 0?e.livePreview:"default",_focusNewTab:e.focusNewTab!==void 0?e.focusNewTab:"default",_plugins:Object.keys(this.plugin.communityPlugins),_internalPlugins:Object.values(this.plugin.internalPlugins).flatMap(i=>i.enabled?[i.instance.id]:[]),_obsidianVersion:window.electron?.ipcRenderer.sendSync("version")||"unknown"};await navigator.clipboard.writeText(JSON.stringify(a)),new D.Notice(r("copyDebugInfoNotice"))}},O=class extends D.SettingGroup{constructor(e,a){super(e.containerEl);this.elements={};a&&this.setHeading(r(a)),this.plugin=e.plugin,this.settings=e.settings}addDropdown(e,a,i){return this.addSetting(o=>{o.setName(r(e)).setDesc(r(e+"Desc")).addDropdown(async s=>{for(let c of Object.values(a))s.addOption(c,r(c));s.setValue(this.plugin.homepage.data[e]),s.onChange(async c=>{this.plugin.homepage.data[e]=c,await this.plugin.homepage.save(),i&&i(c)})}),this.elements[e]=o}),this}addToggle(e,a){return this.addSetting(i=>{i.setName(r(e)).setDesc(r(e+"Desc")).addToggle(o=>o.setValue(this.plugin.homepage.data[e]).onChange(async s=>{this.plugin.homepage.data[e]=s,await this.plugin.homepage.save(),a&&a(s)})),this.elements[e]=i}),this}disableAll(){this.disableSettings(...Object.keys(this.elements))}disableSettings(...e){e.forEach(a=>{this.elements[a]?.settingEl.setAttribute("nv-greyed","")})}};var Et=["markdown","canvas","kanban","bases"],j="Main Homepage",G="Mobile Homepage",C=(a=>(a.ReplaceAll="Replace all open notes",a.ReplaceLast="Replace last note",a.Retain="Keep open notes",a))(C||{}),B=(i=>(i.Default="Default view",i.Reading="Reading view",i.Source="Editing view (Source)",i.LivePreview="Editing view (Live Preview)",i))(B||{}),E=(g=>(g.File="File",g.Workspace="Workspace",g.Random="Random file",g.RandomFolder="Random in folder",g.NewNote="New note",g.Graph="Graph view",g.None="Nothing",g.Journal="Journal",g.DailyNote="Daily Note",g.WeeklyNote="Weekly Note",g.MonthlyNote="Monthly Note",g.YearlyNote="Yearly Note",g))(E||{}),R=(a=>(a.Both="Both",a.Startup="Startup only",a.Manual="Manual only",a))(R||{}),ye=["Random file","Graph view","Nothing",...J],Ot=["Nothing","Graph view","Workspace"],K=class{constructor(t,e){this.lastView=void 0;this.openedViews=new WeakMap;this.name=t,this.plugin=e,this.app=e.app;let a=this.plugin.settings.homepages[t];a?this.data=Object.assign({},x,a):(this.plugin.settings.homepages[t]={...x},this.data=this.plugin.settings.homepages[t])}async open(t=!1){if(this.plugin.hasRequiredPlugin(this.data.kind)){if(this.data.kind==="Journal"&&!Be(this)){new b.Notice(r("journalUnavailable",this.data.value));return}}else{new b.Notice(r("pluginUnavailable"));return}if(this.data.kind==="Workspace")await this.launchWorkspace();else if(this.data.kind!=="Nothing"){let a=this.plugin.loaded?this.data.manualOpenMode:this.data.openMode;t&&(a="Keep open notes"),await this.launchLeaf(a)}if(this.data.commands.length<1)return;let e=this.plugin.loaded?"Startup only":"Manual only";await Pe(this.app);for(let{id:a,period:i}of this.data.commands)i!==e&&this.app.commands.executeCommandById(a)}async launchWorkspace(){let t=this.plugin.internalPlugins.workspaces?.instance;if(!(this.data.value in t.workspaces)){new b.Notice(r("workspaceUnavailable",this.data.value));return}t.loadWorkspace(this.data.value),await q(100)}async launchLeaf(t){let e;if(this.computedValue=await this.computeValue(),this.plugin.executing=!0,t!=="Replace all open notes"){let a=this.getOpened();if(a.length>0){this.app.workspace.setActiveLeaf(a[0]),await this.configure(a[0]);return}else t=="Keep open notes"&&De(this.app)&&(t="Replace last note")}t!=="Keep open notes"&&this.app.workspace.getActiveViewOfType(b.View)?.leaf.setPinned(!1),t==="Replace all open notes"&&(this.app.workspace?.floatingSplit?.children&&(await q(0),this.app.workspace.floatingSplit.children.forEach(a=>a.win.close())),await ke(this.app),await q(0));try{this.data.kind==="Graph view"?e=await this.launchGraph(t):e=await this.launchNote(t),await this.configure(e)}catch{return}}async launchGraph(t){if(t==="Keep open notes"){let e=this.app.workspace.getLeaf("tab");this.app.workspace.setActiveLeaf(e)}return this.app.commands.executeCommandById("graph:open"),this.app.workspace.getActiveViewOfType(b.View).leaf}async launchNote(t){let e=this.app.metadataCache.getFirstLinkpathDest(this.computedValue,"/");if(!e){if(!this.data.autoCreate)throw new b.Notice(r("noteUnavailable",this.computedValue)),new Error(r("noteUnavailable",this.computedValue));e=await this.app.vault.create(be(this.computedValue),"")}let a=await this.app.vault.cachedRead(e),i=this.app.workspace.getLeaf(t=="Keep open notes");return await i.openFile(e),this.app.workspace.setActiveLeaf(i),a!==await this.app.vault.read(e)&&await this.app.vault.modify(e,a),i}async configure(t){this.plugin.executing=!1;let e=t.view,a=e.leaf.history;if(!(e instanceof b.MarkdownView)){this.data.pin&&e.leaf.setPinned(!0),this.configurePlugins();return}let i=e.getState();if(this.data.revertView&&(this.lastView=new WeakRef(e)),this.data.autoScroll){let o=e.editor.lineCount();i.mode=="preview"?e.previewMode.applyScroll(o-4):(e.editor.setCursor(o),e.editor.focus())}if(this.data.pin&&e.leaf.setPinned(!0),this.data.view!=="Default view"){switch(this.data.view){case"Editing view (Live Preview)":case"Editing view (Source)":i.mode="source",i.source=this.data.view!="Editing view (Live Preview)";break;case"Reading view":i.mode="preview";break}await e.leaf.setViewState({type:"markdown",state:i}),e.leaf.history=a}this.configurePlugins()}configurePlugins(){this.plugin.loaded&&this.data.refreshDataview&&this.plugin.communityPlugins.dataview?.index.touch(),this.plugin.communityPlugins["obsidian-file-color"]?.generateColorStyles()}getOpened(){return this.data.kind=="Graph view"?this.app.workspace.getLeavesOfType("graph"):Et.flatMap(e=>this.app.workspace.getLeavesOfType(e)).filter(e=>{let a=e.view.getState().file;return ne(a.endsWith("md")?a.slice(0,-3):a,this.computedValue)})}async computeValue(){let t=this.data.value,e;switch(this.data.kind){case"Random file":e=ae(this.app),e&&(t=e);break;case"Random in folder":e=ae(this.app,t),e&&(t=e);break;case"New note":this.cachedNewFile||(this.cachedNewFile=k(await this.app.fileManager.createNewFile("",t))),t=this.cachedNewFile;break;case"Journal":t=await Ke(t,this.plugin);break;case"Daily Note":case"Weekly Note":case"Monthly Note":case"Yearly Note":t=await _e(this.data.kind,this.plugin);break}return t}async save(){this.plugin.settings.homepages[this.name]=this.data,await this.plugin.saveSettings()}async setToActiveFile(){let t=this.app.workspace.getActiveFile();t&&(this.data.value=k(t),await this.save(),new b.Notice(r("homepageChanged",this.data.value)))}canSetToFile(){return this.app.workspace.getActiveFile()!==null&&!ye.includes(this.data.kind)}async revertView(){if(this.lastView==null||this.data.view=="Default view")return;let t=this.lastView.deref();if(!t?.file||ne(k(t.file),this.computedValue))return;let e=t.getState(),a=this.app.vault.config,i=a.defaultViewMode||"source",o=a.livePreview!==void 0?!a.livePreview:!1;t.leaf.getViewState().type=="markdown"&&(i!=e.mode||o!=e.source)&&(e.mode=i,e.source=o,await t.leaf.setViewState({type:"markdown",state:e,active:!0})),this.lastView=void 0}async openWhenEmpty(){if(!this.plugin.loaded||this.plugin.executing)return;let t=this.app.workspace.getActiveViewOfType(b.View)?.leaf;t?.getViewState().type!=="empty"||t?.parentSplit?.children?.length!=1||await this.open(!0)}async apply(){let t=this.app.workspace.getActiveViewOfType(b.FileView);if(!t?.file)return;let e=k(t.file);this.openedViews.get(t)!==e&&(this.openedViews.set(t,e),e===await this.computeValue()&&this.plugin.loaded&&!this.plugin.executing&&await this.configure(t.leaf))}async read(){if(Ot.includes(this.data.kind))return;let t=this.app.metadataCache.getFirstLinkpathDest(await this.computeValue(),"/");if(t)return this.app.vault.cachedRead(t)}};var Z=class extends S.Plugin{constructor(){super(...arguments);this.newRelease=!1;this.loaded=!1;this.executing=!1;this.onLayoutChange=async()=>{this.homepage.data.revertView&&await this.homepage.revertView(),this.homepage.data.openWhenEmpty&&await this.homepage.openWhenEmpty(),this.homepage.data.alwaysApply&&await this.homepage.apply()}}async onload(){this.patchReleaseNotes(),this.patchOpeningBehaviour(),this.settings=await this.loadSettings(),this.internalPlugins=this.app.internalPlugins.plugins,this.communityPlugins=this.app.plugins.plugins,this.homepage=this.getHomepage(),this.addRibbonIcon("house","Open homepage",e=>this.homepage.open(e.button==1||e.button==2||S.Keymap.isModifier(e,"Mod"))).setAttribute("id","nv-homepage-icon"),this.registerEvent(this.app.workspace.on("layout-change",this.onLayoutChange)),this.addSettingTab(new X(this.app,this)),this.addCommand({id:"open-homepage",name:r("openHomepage"),callback:()=>this.homepage.open()}),this.addCommand({id:"set-to-active-file",name:r("setToActiveFile"),checkCallback:e=>{if(e)return this.homepage.canSetToFile();this.homepage.setToActiveFile()}}),this.registerCliHandler("homepage",r("cliOpenHomepageDesc"),null,async()=>(await this.homepage.open(),r("cliOpenHomepageResult"))),this.registerCliHandler("homepage:read",r("cliReadHomepageDesc"),null,async()=>{let e=await this.homepage.read();return e!==void 0?e:r("cliReadHomepageIllegible")})}onunload(){this.app.workspace.off("layout-change",this.onLayoutChange),this.unpatchNewTabPage(),this.unpatchOpeningBehaviour()}getHomepage(){return this.settings.separateMobile&&S.Platform.isMobile?(G in this.settings.homepages||(this.settings.homepages[G]={...this.settings.homepages?.[j]},this.settings.homepages[G].commands=[...this.settings.homepages?.[j]?.commands||[]]),new K(G,this)):new K(j,this)}async loadSettings(){let e=await this.loadData();return e?.version!==4?e?this.upgradeSettings(e):Object.assign({},we):e}async saveSettings(){await this.saveData(this.settings)}async hasUrlParams(){let e,a;if(S.Platform.isMobile){let i=await window.Capacitor.Plugins.App.getLaunchUrl();if(!i)return!1;let o=new URL(i.url);a=Array.from(o.searchParams.keys()),e=o.hostname}else if(window.OBS_ACT)a=Object.keys(window.OBS_ACT),e=window.OBS_ACT.action;else return!1;return["open","advanced-uri"].includes(e)&&["file","filepath","workspace"].some(i=>a.includes(i))}hasRequiredPlugin(e){switch(e){case"Workspace":return this.internalPlugins.workspaces?.enabled;case"Graph view":return this.internalPlugins.graph?.enabled;case"Journal":return"journals"in this.communityPlugins;case"Daily Note":case"Weekly Note":case"Monthly Note":case"Yearly Note":return Ue(e,this);default:return!0}}patchNewTabPage(){let e=this.communityPlugins["new-tab-default-page"];e&&(e.nvOrig_checkForNewTab=e.checkForNewTab,e.checkForNewTab=async a=>{if(!(this&&this.executing))return await e.nvOrig_checkForNewTab(a)})}unpatchNewTabPage(){let e=this.communityPlugins["new-tab-default-page"];e&&(e.checkForNewTab=e.nvOrig_checkForNewTab)}patchReleaseNotes(){this.app.nvOrig_showReleaseNotes=this.app.showReleaseNotes,this.app.showReleaseNotes=()=>this.newRelease=!0}unpatchReleaseNotes(){this.newRelease&&!this.homepage.data.hideReleaseNotes&&this.app.nvOrig_showReleaseNotes(),this.app.showReleaseNotes=this.app.nvOrig_showReleaseNotes}patchOpeningBehaviour(){this.app.nvOrig_runOpeningBehavior=this.app.runOpeningBehavior,this.app.runOpeningBehavior=async e=>{let a=this.homepage.data.openOnStartup&&!await this.hasUrlParams();this.patchNewTabPage(),a?await this.homepage.open():this.app.nvOrig_runOpeningBehavior(e),this.loaded=!0,this.unpatchReleaseNotes()}}unpatchOpeningBehaviour(){this.app.runOpeningBehavior=this.app.nvOrig_runOpeningBehavior}upgradeSettings(e){if(e.version==3){let i=e,o=!1;for(let s of Object.values(i.homepages))s.commands=s.commands.map(c=>({id:c,period:"Both"})),s.kind==Ve&&(o=!0,s.kind="Daily Note");return o&&new S.Notice(r("momentUpgradeNotice")),i.version=4,this.saveData(i),i}let a=Object.assign({},we);return e.workspaceEnabled?(e.value=e.workspace||"",e.kind="Workspace"):e.momentFormat?(e.kind="Daily Note",new S.Notice(r("momentUpgradeNotice"))):(e.value=e.defaultNote||"Home",e.kind="File"),e.commands=[],delete e.workspace,delete e.momentFormat,delete e.defaultNote,delete e.useMoment,delete e.workspaceEnabled,a.homepages[j]=e,this.saveData(a),a}}; +"use strict";var Qe=Object.create;var z=Object.defineProperty;var $e=Object.getOwnPropertyDescriptor;var Xe=Object.getOwnPropertyNames;var Ze=Object.getPrototypeOf,et=Object.prototype.hasOwnProperty;var tt=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),at=(n,e)=>{for(var t in e)z(n,t,{get:e[t],enumerable:!0})},ve=(n,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Xe(e))!et.call(n,i)&&i!==t&&z(n,i,{get:()=>e[i],enumerable:!(a=$e(e,i))||a.enumerable});return n};var nt=(n,e,t)=>(t=n!=null?Qe(Ze(n)):{},ve(e||!n||!n.__esModule?z(t,"default",{value:n,enumerable:!0}):t,n)),it=n=>ve(z({},"__esModule",{value:!0}),n);var Ie=tt(l=>{"use strict";Object.defineProperty(l,"__esModule",{value:!0});var m=require("obsidian"),ie="YYYY-MM-DD",oe="gggg-[W]ww",Te="YYYY-MM",Se="YYYY-[Q]Q",Me="YYYY";function H(n){let e=window.app.plugins.getPlugin("periodic-notes");return e&&e.settings?.[n]?.enabled}function W(){try{let{internalPlugins:n,plugins:e}=window.app;if(H("daily")){let{format:o,folder:s,template:c}=e.getPlugin("periodic-notes")?.settings?.daily||{};return{format:o||ie,folder:s?.trim()||"",template:c?.trim()||""}}let{folder:t,format:a,template:i}=n.getPluginById("daily-notes")?.instance?.options||{};return{format:a||ie,folder:t?.trim()||"",template:i?.trim()||""}}catch(n){console.info("No custom daily note settings found!",n)}}function I(){try{let n=window.app.plugins,e=n.getPlugin("calendar")?.options,t=n.getPlugin("periodic-notes")?.settings?.weekly;if(H("weekly"))return{format:t.format||oe,folder:t.folder?.trim()||"",template:t.template?.trim()||""};let a=e||{};return{format:a.weeklyNoteFormat||oe,folder:a.weeklyNoteFolder?.trim()||"",template:a.weeklyNoteTemplate?.trim()||""}}catch(n){console.info("No custom weekly note settings found!",n)}}function V(){let n=window.app.plugins;try{let e=H("monthly")&&n.getPlugin("periodic-notes")?.settings?.monthly||{};return{format:e.format||Te,folder:e.folder?.trim()||"",template:e.template?.trim()||""}}catch(e){console.info("No custom monthly note settings found!",e)}}function _(){let n=window.app.plugins;try{let e=H("quarterly")&&n.getPlugin("periodic-notes")?.settings?.quarterly||{};return{format:e.format||Se,folder:e.folder?.trim()||"",template:e.template?.trim()||""}}catch(e){console.info("No custom quarterly note settings found!",e)}}function U(){let n=window.app.plugins;try{let e=H("yearly")&&n.getPlugin("periodic-notes")?.settings?.yearly||{};return{format:e.format||Me,folder:e.folder?.trim()||"",template:e.template?.trim()||""}}catch(e){console.info("No custom yearly note settings found!",e)}}function Fe(...n){let e=[];for(let a=0,i=n.length;a{let ee=a(),te=n.clone().set({hour:ee.get("hour"),minute:ee.get("minute"),second:ee.get("second")});return M&&te.add(parseInt(D,10),v),y?te.format(y.substring(1).trim()):te.format(o)}).replace(/{{\s*yesterday\s*}}/gi,n.clone().subtract(1,"day").format(o)).replace(/{{\s*tomorrow\s*}}/gi,n.clone().add(1,"d").format(o)));return e.foldManager.save(f,d),f}catch(f){console.error(`Failed to create file: '${h}'`,f),new m.Notice("Unable to create new file.")}}function pt(n,e){return e[P(n,"day")]??null}function dt(){let{vault:n}=window.app,{folder:e}=W(),t=n.getAbstractFileByPath(m.normalizePath(e));if(!t)throw new se("Failed to find daily notes folder");let a={};return m.Vault.recurseChildren(t,i=>{if(i instanceof m.TFile){let o=L(i,"day");if(o){let s=P(o,"day");a[s]=i}}}),a}var re=class extends Error{};function ut(){let{moment:n}=window,e=n.localeData()._week.dow,t=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"];for(;e;)t.push(t.shift()),e--;return t}function gt(n){return ut().indexOf(n.toLowerCase())}async function Le(n){let{vault:e}=window.app,{template:t,format:a,folder:i}=I(),[o,s]=await A(t),c=n.format(a),d=await Y(i,c);try{let p=await e.create(d,o.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(h,f,g,T,M,D)=>{let v=window.moment(),y=n.clone().set({hour:v.get("hour"),minute:v.get("minute"),second:v.get("second")});return g&&y.add(parseInt(T,10),M),D?y.format(D.substring(1).trim()):y.format(a)}).replace(/{{\s*title\s*}}/gi,c).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*(sunday|monday|tuesday|wednesday|thursday|friday|saturday)\s*:(.*?)}}/gi,(h,f,g)=>{let T=gt(f);return n.weekday(T).format(g.trim())}));return window.app.foldManager.save(p,s),p}catch(p){console.error(`Failed to create file: '${d}'`,p),new m.Notice("Unable to create new file.")}}function mt(n,e){return e[P(n,"week")]??null}function ht(){let n={};if(!Re())return n;let{vault:e}=window.app,{folder:t}=I(),a=e.getAbstractFileByPath(m.normalizePath(t));if(!a)throw new re("Failed to find weekly notes folder");return m.Vault.recurseChildren(a,i=>{if(i instanceof m.TFile){let o=L(i,"week");if(o){let s=P(o,"week");n[s]=i}}}),n}var le=class extends Error{};async function Ce(n){let{vault:e}=window.app,{template:t,format:a,folder:i}=V(),[o,s]=await A(t),c=n.format(a),d=await Y(i,c);try{let p=await e.create(d,o.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(h,f,g,T,M,D)=>{let v=window.moment(),y=n.clone().set({hour:v.get("hour"),minute:v.get("minute"),second:v.get("second")});return g&&y.add(parseInt(T,10),M),D?y.format(D.substring(1).trim()):y.format(a)}).replace(/{{\s*date\s*}}/gi,c).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,c));return window.app.foldManager.save(p,s),p}catch(p){console.error(`Failed to create file: '${d}'`,p),new m.Notice("Unable to create new file.")}}function ft(n,e){return e[P(n,"month")]??null}function wt(){let n={};if(!xe())return n;let{vault:e}=window.app,{folder:t}=V(),a=e.getAbstractFileByPath(m.normalizePath(t));if(!a)throw new le("Failed to find monthly notes folder");return m.Vault.recurseChildren(a,i=>{if(i instanceof m.TFile){let o=L(i,"month");if(o){let s=P(o,"month");n[s]=i}}}),n}var ce=class extends Error{};async function yt(n){let{vault:e}=window.app,{template:t,format:a,folder:i}=_(),[o,s]=await A(t),c=n.format(a),d=await Y(i,c);try{let p=await e.create(d,o.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(h,f,g,T,M,D)=>{let v=window.moment(),y=n.clone().set({hour:v.get("hour"),minute:v.get("minute"),second:v.get("second")});return g&&y.add(parseInt(T,10),M),D?y.format(D.substring(1).trim()):y.format(a)}).replace(/{{\s*date\s*}}/gi,c).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,c));return window.app.foldManager.save(p,s),p}catch(p){console.error(`Failed to create file: '${d}'`,p),new m.Notice("Unable to create new file.")}}function vt(n,e){return e[P(n,"quarter")]??null}function bt(){let n={};if(!He())return n;let{vault:e}=window.app,{folder:t}=_(),a=e.getAbstractFileByPath(m.normalizePath(t));if(!a)throw new ce("Failed to find quarterly notes folder");return m.Vault.recurseChildren(a,i=>{if(i instanceof m.TFile){let o=L(i,"quarter");if(o){let s=P(o,"quarter");n[s]=i}}}),n}var pe=class extends Error{};async function Nt(n){let{vault:e}=window.app,{template:t,format:a,folder:i}=U(),[o,s]=await A(t),c=n.format(a),d=await Y(i,c);try{let p=await e.create(d,o.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(h,f,g,T,M,D)=>{let v=window.moment(),y=n.clone().set({hour:v.get("hour"),minute:v.get("minute"),second:v.get("second")});return g&&y.add(parseInt(T,10),M),D?y.format(D.substring(1).trim()):y.format(a)}).replace(/{{\s*date\s*}}/gi,c).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,c));return window.app.foldManager.save(p,s),p}catch(p){console.error(`Failed to create file: '${d}'`,p),new m.Notice("Unable to create new file.")}}function Dt(n,e){return e[P(n,"year")]??null}function kt(){let n={};if(!We())return n;let{vault:e}=window.app,{folder:t}=U(),a=e.getAbstractFileByPath(m.normalizePath(t));if(!a)throw new pe("Failed to find yearly notes folder");return m.Vault.recurseChildren(a,i=>{if(i instanceof m.TFile){let o=L(i,"year");if(o){let s=P(o,"year");n[s]=i}}}),n}function Pt(){let{app:n}=window,e=n.internalPlugins.plugins["daily-notes"];if(e&&e.enabled)return!0;let t=n.plugins.getPlugin("periodic-notes");return t&&t.settings?.daily?.enabled}function Re(){let{app:n}=window;if(n.plugins.getPlugin("calendar"))return!0;let e=n.plugins.getPlugin("periodic-notes");return e&&e.settings?.weekly?.enabled}function xe(){let{app:n}=window,e=n.plugins.getPlugin("periodic-notes");return e&&e.settings?.monthly?.enabled}function He(){let{app:n}=window,e=n.plugins.getPlugin("periodic-notes");return e&&e.settings?.quarterly?.enabled}function We(){let{app:n}=window,e=n.plugins.getPlugin("periodic-notes");return e&&e.settings?.yearly?.enabled}function Tt(n){let e={day:W,week:I,month:V,quarter:_,year:U}[n];return e()}function St(n,e){return{day:Ae,month:Ce,week:Le}[n](e)}l.DEFAULT_DAILY_NOTE_FORMAT=ie;l.DEFAULT_MONTHLY_NOTE_FORMAT=Te;l.DEFAULT_QUARTERLY_NOTE_FORMAT=Se;l.DEFAULT_WEEKLY_NOTE_FORMAT=oe;l.DEFAULT_YEARLY_NOTE_FORMAT=Me;l.appHasDailyNotesPluginLoaded=Pt;l.appHasMonthlyNotesPluginLoaded=xe;l.appHasQuarterlyNotesPluginLoaded=He;l.appHasWeeklyNotesPluginLoaded=Re;l.appHasYearlyNotesPluginLoaded=We;l.createDailyNote=Ae;l.createMonthlyNote=Ce;l.createPeriodicNote=St;l.createQuarterlyNote=yt;l.createWeeklyNote=Le;l.createYearlyNote=Nt;l.getAllDailyNotes=dt;l.getAllMonthlyNotes=wt;l.getAllQuarterlyNotes=bt;l.getAllWeeklyNotes=ht;l.getAllYearlyNotes=kt;l.getDailyNote=pt;l.getDailyNoteSettings=W;l.getDateFromFile=L;l.getDateFromPath=ct;l.getDateUID=P;l.getMonthlyNote=ft;l.getMonthlyNoteSettings=V;l.getPeriodicNoteSettings=Tt;l.getQuarterlyNote=vt;l.getQuarterlyNoteSettings=_;l.getTemplateInfo=A;l.getWeeklyNote=mt;l.getWeeklyNoteSettings=I;l.getYearlyNote=Dt;l.getYearlyNoteSettings=U});var At={};at(At,{default:()=>Z});module.exports=it(At);var S=require("obsidian");var N=require("obsidian");var F=require("obsidian");function k(n){return n?n.extension=="md"?n.path.slice(0,-3):n.path:""}function be(n){return n.split("/").slice(-1)[0].contains(".")?n:`${n}.md`}function ae(n,e=void 0){let t=n.vault.getFiles();if(e){let a=n.vault.getFolderByPath(e);if(!a)return;t=Ne(a)}if(t.filter(a=>["md","canvas","base"].contains(a.extension)),t.length){let a=Math.floor(Math.random()*t.length);return k(t[a])}}function Ne(n){let e=[];for(let t of n.children)t instanceof F.TFile?e.push(t):t instanceof F.TFolder&&e.push(...Ne(t));return e}function De(n){return n.workspace.getActiveViewOfType(F.View)?.getViewType()=="empty"}function ne(n,e){return n.localeCompare(e,void 0,{sensitivity:"accent"})===0}function q(n){return new Promise(e=>window.setTimeout(e,n))}async function ke(n){let e=n.workspace.getLayout();e.main={id:"5324373015726ba8",type:"split",children:[{id:"4509724f8bf84da7",type:"tabs",children:[{id:"e7a7b303c61786dc",type:"leaf",state:{type:"empty",state:{},icon:"lucide-file",title:"New tab"}}]}],direction:"vertical"},e.active="e7a7b303c61786dc",await n.workspace.changeLayout(e),F.Platform.isMobile&&(n.workspace.rightSplit?.updateInfo(),ot(n))}function ot(n){let e=n.internalPlugins.plugins.sync?.instance;e&&n.workspace.onLayoutReady(()=>{e.statusIconEl=n.workspace.rightSplit.addHeaderButton("sync-small",e.openStatusIconMenu.bind(e)),e.statusIconEl.addEventListener("contextmenu",e.openStatusIconMenu.bind(e)),e.statusIconEl.addClass("sync-status-icon")})}function Pe(n){let e=n.internalPlugins.plugins.sync,t=[new Promise(a=>{let i=async()=>{a(),n.workspace.off("layout-change",i)};n.workspace.on("layout-change",i)})];return e.enabled&&e.instance.syncing&&t.push(new Promise(a=>{let i=async()=>{a(),e.instance.off("status-change",i)};e.instance.on("status-change",i)})),Promise.race([Promise.all(t),new Promise(a=>window.setTimeout(a,1500))])}var u=nt(Ie()),Mt="custom-journal-locale",de={"Daily Note":{noun:"day",adjective:"daily",create:u.createDailyNote,get:u.getDailyNote,getAll:u.getAllDailyNotes},"Weekly Note":{noun:"week",adjective:"weekly",create:u.createWeeklyNote,get:u.getWeeklyNote,getAll:u.getAllWeeklyNotes},"Monthly Note":{noun:"month",adjective:"monthly",create:u.createMonthlyNote,get:u.getMonthlyNote,getAll:u.getAllMonthlyNotes},"Yearly Note":{noun:"year",adjective:"yearly",create:u.createYearlyNote,get:u.getYearlyNote,getAll:u.getAllYearlyNotes}},J=["Daily Note","Weekly Note","Monthly Note","Yearly Note"],Ve="Date-dependent file";async function _e(n,e){let t=e.communityPlugins["periodic-notes"],a=de[n],i=window.moment().startOf(a.noun),o;if(Ye(t)){let s=a.getAll();Object.keys(s).length?o=a.get(i,s)||await a.create(i):o=await a.create(i),o||(o=a.get(i,s))}else t.cache.initialize(),o=t.getPeriodicNote(a.noun,i)||await t.createPeriodicNote(a.noun,i);return k(o)}function Ue(n,e){if(n=="Daily Note"&&e.internalPlugins["daily-notes"]?.enabled)return!0;let t=e.communityPlugins["periodic-notes"];if(!t)return!1;if(Ye(t)){let a=de[n].adjective;return t.settings[a]?.enabled}else{let a=de[n].noun;return t?.calendarSetManager?.getActiveSet()[a]?.enabled}}function Ye(n){return(n?.manifest.version||"0").startsWith("0")}function Be(n){return!!n.plugin.communityPlugins.journals.getJournal(n.data.value)}async function Ke(n,e){let t=e.communityPlugins.journals,a=t.getJournal(n),i=a.config.value.autoCreate;t.reprocessNotes(),a.config.value.autoCreate=!0,await a.autoCreate(),a.config.value.autoCreate=i;let o=window.moment().locale(Mt).startOf("day");return a.getNotePath(a?.get(o)).replace(/\.md$/,"")}var ue={"Replace all open notes":"Replace all open notes","Replace last note":"Replace last note","Keep open notes":"Keep open notes","Default view":"Default view","Reading view":"Reading view","Editing view (Source)":"Editing view (Source)","Editing view (Live Preview)":"Editing view (Live Preview)",File:"File",Workspace:"Workspace","Random file":"Random file","Random in folder":"Random in folder","New note":"New note","Graph view":"Graph view",Nothing:"Nothing",Journal:"Journal","Daily Note":"Daily Note","Weekly Note":"Weekly Note","Monthly Note":"Monthly Note","Yearly Note":"Yearly Note",Both:"Both","Startup only":"Startup only","Manual only":"Manual only",openHomepage:"Open homepage",setToActiveFile:"Set to active file",copyDebugInfo:"Copy debug info",cliOpenHomepageDesc:"Open the homepage",cliOpenHomepageResult:"Opened the homepage",cliReadHomepageDesc:"Read homepage contents",cliReadHomepageIllegible:"The current homepage cannot be viewed, as it does not match an file",pluginUnavailable:"The active homepage cannot be opened due to plugin unavailablity.",journalUnavailable:'Cannot find the journal "?0" to use as the homepage.',workspaceUnavailable:'Cannot find the workspace "?0" to use as the homepage.',noteUnavailable:'Cannot find the file "?0" to use as the homepage.',homepageChanged:'The homepage has been changed to "?0".',momentUpgradeNotice:"Date-dependent notes in Homepage have been removed. Set your homepage as a Periodic or Daily Note instead.",openOnStartup:"Open on startup",openOnStartupDesc:"When launching Obsidian, open the homepage.",openOnStartupWarn:'This will override the built-in "Default file to open" setting.',openWhenEmpty:"Open when empty",openWhenEmptyDesc:"When there are no tabs open, open the homepage.",alwaysApply:"Use when opening normally",alwaysApplyDesc:"Use homepage settings when opening it normally, such as from a link or the file browser.",separateMobile:"Separate mobile homepage",separateMobileDesc:"For mobile devices, store the homepage and its settings separately.",separateMobileWarnPrefix:"Mobile settings are stored separately.",separateMobileWarnMobile:"Therefore, changes to other settings will not affect desktop devices. To edit desktop settings, use a desktop device.",separateMobileWarnDesktop:"Therefore, changes to other settings will not affect mobile devices. To edit mobile settings, use a mobile device.",commandsGroup:"Commands",commandsDesc:"Select commands that will be executed when opening the homepage.",commandsAddButton:"Add...",commandUnavailable:"This command can't be found, so it won't be executed. It may belong to a disabled plugin.",commandsReally:"Really?",vaultGroup:"Vault environment",openMode:"Opening method",openModeDesc:"Determine how extant tabs and views are affected on startup.",manualOpenMode:"Manual opening method",manualOpenModeDesc:"Determine how extant tabs and views are affected when opening with commands or the ribbon button.",pin:"Pin",pinDesc:"Pin the homepage when opening.",hideReleaseNotes:"Hide release notes",hideReleaseNotesDesc:"Never display release notes when Obsidian updates.",autoCreate:"Auto-create",autoCreateDesc:"When the homepage doesn't exist, create a note with its name.",autoCreateWarn:"If this vault is synced using unofficial services, this may lead to content being overwritten.",openingGroup:"Opened view",view:"Homepage view",viewDesc:"Choose what view to open the homepage in.",revertView:"Revert view on close",revertViewDesc:"When navigating away from the homepage, restore the default view.",autoScroll:"Auto-scroll",autoScrollDesc:"When opening the homepage, scroll to the bottom and focus on the last line",refreshDataview:"Refresh Dataview",refreshDataviewDesc:"Always attempt to reload Dataview views when opening the homepage",refreshDataviewWarn:"Requires Dataview auto-refresh to be enabled.",FileDesc:"Enter a note, base, or canvas to use.",WorkspaceDesc:"Enter an Obsidian workspace to use.","New noteDesc":"Enter a prefix to use. A note using that prefix will be created for each Obsidian session.","Graph viewDesc":"Your graph view will be used.",NothingDesc:"Nothing will occur by default. Any commands added will still take effect.","Random fileDesc":"A random note, base, or canvas from your Obsidian folder will be selected.","Random in folderDesc":"Enter a folder. A random note, base, or canvas from it will be selected.",JournalDesc:"Enter a Journal to use.","Daily noteDesc":"Your Daily Note or Periodic Daily Note will be used.","Weekly noteDesc":"Your Periodic Weekly Note will be used.","Monthly noteDesc":"Your Periodic Monthly Note will be used.","Yearly noteDesc":"Your Periodic Yearly Note will be used.",homepageSettingTitle:"Homepage",pluginUnavailableSettings:"The plugin required for this homepage type isn't available.",copyDebugInfoNotice:"Copied homepage debug information to clipboard"};var je={"Replace all open notes":"\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0441\u0435 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0437\u0430\u043C\u0435\u0442\u043A\u0438","Replace last note":"\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443","Keep open notes":"\u041E\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0437\u0430\u043C\u0435\u0442\u043A\u0438","Default view":"\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E","Reading view":"\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440","Editing view (Source)":"\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438\u0441\u0445\u043E\u0434\u043D\u043E\u0433\u043E \u043A\u043E\u0434\u0430","Editing view (Live Preview)":"\u0414\u0438\u043D\u0430\u043C\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440",File:"\u0424\u0430\u0439\u043B",Workspace:"\u0420\u0430\u0431\u043E\u0447\u0435\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E","Random file":"\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u0444\u0430\u0439\u043B","Random in folder":"\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u0444\u0430\u0439\u043B \u0438\u0437 \u043F\u0430\u043F\u043A\u0438","New note":"\u041D\u043E\u0432\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430","Graph view":"\u0413\u0440\u0430\u0444",Nothing:"\u041D\u0438\u0447\u0435\u0433\u043E",Journal:"\u0416\u0443\u0440\u043D\u0430\u043B","Daily Note":"\u0415\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430","Weekly Note":"\u0415\u0436\u0435\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430","Monthly Note":"\u0415\u0436\u0435\u043C\u0435\u0441\u044F\u0447\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430","Yearly Note":"\u0415\u0436\u0435\u0433\u043E\u0434\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430",Both:"\u041E\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0430","Startup only":"\u0422\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435","Manual only":"\u0422\u043E\u043B\u044C\u043A\u043E \u0432\u0440\u0443\u0447\u043D\u0443\u044E",openHomepage:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0434\u043E\u043C\u0430\u0448\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443",setToActiveFile:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0430\u043A\u0442\u0438\u0432\u043D\u044B\u0439 \u0444\u0430\u0439\u043B",copyDebugInfo:"\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0442\u043B\u0430\u0434\u043E\u0447\u043D\u0443\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E",pluginUnavailable:"\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0434\u043E\u043C\u0430\u0448\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443: \u043F\u043B\u0430\u0433\u0438\u043D \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D.",journalUnavailable:'\u0416\u0443\u0440\u043D\u0430\u043B "?0" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D.',workspaceUnavailable:'\u0420\u0430\u0431\u043E\u0447\u0435\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E "?0" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E.',noteUnavailable:'\u0424\u0430\u0439\u043B "?0" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D.',homepageChanged:'\u0414\u043E\u043C\u0430\u0448\u043D\u044F\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0430 \u043D\u0430 "?0".',momentUpgradeNotice:"\u0417\u0430\u043C\u0435\u0442\u043A\u0438, \u0437\u0430\u0432\u0438\u0441\u044F\u0449\u0438\u0435 \u043E\u0442 \u0434\u0430\u0442\u044B, \u0443\u0434\u0430\u043B\u0435\u043D\u044B \u0438\u0437 Homepage. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043F\u0435\u0440\u0438\u043E\u0434\u0438\u0447\u0435\u0441\u043A\u0443\u044E \u0438\u043B\u0438 \u0435\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u0443\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443.",openOnStartup:"\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435",openOnStartupDesc:"\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0434\u043E\u043C\u0430\u0448\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435 Obsidian.",openOnStartupWarn:"\u042D\u0442\u043E \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0443 \u0444\u0430\u0439\u043B\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E.",openWhenEmpty:"\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043F\u0440\u0438 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0432\u043A\u043B\u0430\u0434\u043E\u043A",openWhenEmptyDesc:"\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0434\u043E\u043C\u0430\u0448\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0445 \u0432\u043A\u043B\u0430\u0434\u043E\u043A.",alwaysApply:"\u041F\u0440\u0438\u043C\u0435\u043D\u044F\u0442\u044C \u043F\u0440\u0438 \u043E\u0431\u044B\u0447\u043D\u043E\u043C \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438",alwaysApplyDesc:"\u041F\u0440\u0438\u043C\u0435\u043D\u044F\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438 \u0438\u0437 \u0441\u0441\u044B\u043B\u043E\u043A \u0438\u043B\u0438 \u0444\u0430\u0439\u043B\u043E\u0432\u043E\u0433\u043E \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.",separateMobile:"\u041E\u0442\u0434\u0435\u043B\u044C\u043D\u0430\u044F \u0434\u043E\u043C\u0430\u0448\u043D\u044F\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u0434\u043B\u044F \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0445 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432",separateMobileDesc:"\u0425\u0440\u0430\u043D\u0438\u0442\u044C \u0434\u043E\u043C\u0430\u0448\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u0434\u043B\u044F \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0445 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432 \u0438 \u0435\u0451 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E.",separateMobileWarnPrefix:"\u041C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0445\u0440\u0430\u043D\u044F\u0442\u0441\u044F \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E.",separateMobileWarnMobile:"\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043D\u0435 \u043F\u043E\u0432\u043B\u0438\u044F\u044E\u0442 \u043D\u0430 \u043D\u0430\u0441\u0442\u043E\u043B\u044C\u043D\u044B\u0435 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043D\u0430\u0441\u0442\u043E\u043B\u044C\u043D\u043E\u0435 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u043E \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F.",separateMobileWarnDesktop:"\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043D\u0435 \u043F\u043E\u0432\u043B\u0438\u044F\u044E\u0442 \u043D\u0430 \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0435 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u043E\u0435 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u043E \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F.",commandsGroup:"\u041A\u043E\u043C\u0430\u043D\u0434\u044B",commandsDesc:"\u041A\u043E\u043C\u0430\u043D\u0434\u044B, \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u043C\u044B\u0435 \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438 \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B.",commandsAddButton:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C...",commandUnavailable:"\u041A\u043E\u043C\u0430\u043D\u0434\u0430 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430 \u0438 \u043D\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0430. \u0412\u043E\u0437\u043C\u043E\u0436\u043D\u043E, \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0439 \u043F\u043B\u0430\u0433\u0438\u043D \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D.",commandsReally:"\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B?",vaultGroup:"\u0421\u0440\u0435\u0434\u0430 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430",openMode:"\u0421\u043F\u043E\u0441\u043E\u0431 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u044F",openModeDesc:"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043A\u0430\u043A \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0432\u043A\u043B\u0430\u0434\u043A\u0438 \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435.",manualOpenMode:"\u0421\u043F\u043E\u0441\u043E\u0431 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u044F \u0432\u0440\u0443\u0447\u043D\u0443\u044E",manualOpenModeDesc:"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043A\u0430\u043A \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0432\u043A\u043B\u0430\u0434\u043A\u0438 \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u043A\u043E\u043C\u0430\u043D\u0434\u044B \u0438\u043B\u0438 \u043A\u043D\u043E\u043F\u043A\u0443.",pin:"\u0417\u0430\u043A\u0440\u0435\u043F\u0438\u0442\u044C",pinDesc:"\u0417\u0430\u043A\u0440\u0435\u043F\u0438\u0442\u044C \u0434\u043E\u043C\u0430\u0448\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438.",hideReleaseNotes:"\u0421\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u044F \u043A \u0432\u044B\u043F\u0443\u0441\u043A\u0443",hideReleaseNotesDesc:"\u041D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u044F \u043A \u0432\u044B\u043F\u0443\u0441\u043A\u0443 \u043F\u0440\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0438 Obsidian.",autoCreate:"\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435",autoCreateDesc:"\u0415\u0441\u043B\u0438 \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u043D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0441\u043E\u0437\u0434\u0430\u0435\u0442 \u0435\u0451.",autoCreateWarn:"\u041F\u0440\u0438 \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u043D\u0435\u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044B \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u0430 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u044C \u0434\u0430\u043D\u043D\u044B\u0445.",openingGroup:"\u0420\u0435\u0436\u0438\u043C \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438",view:"\u0420\u0435\u0436\u0438\u043C \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B",viewDesc:"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0435\u0436\u0438\u043C \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u044F \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B.",revertView:"\u0412\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044C \u0440\u0435\u0436\u0438\u043C \u043F\u0440\u0438 \u0437\u0430\u043A\u0440\u044B\u0442\u0438\u0438",revertViewDesc:"\u0412\u043E\u0441\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0442\u044C \u0440\u0435\u0436\u0438\u043C \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043F\u0440\u0438 \u0443\u0445\u043E\u0434\u0435 \u0441 \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B.",autoScroll:"\u0410\u0432\u0442\u043E-scroll",autoScrollDesc:"\u041F\u0440\u043E\u043A\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044C \u0432\u043D\u0438\u0437 \u0438 \u0444\u043E\u043A\u0443\u0441\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0435 \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438.",refreshDataview:"\u041E\u0431\u043D\u043E\u0432\u043B\u044F\u0442\u044C Dataview",refreshDataviewDesc:"\u041F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F Dataview \u043F\u0440\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0438 \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B.",refreshDataviewWarn:"\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u043E\u0435 \u0430\u0432\u0442\u043E\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 Dataview.",FileDesc:"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0437\u0430\u043C\u0435\u0442\u043A\u0443, \u0431\u0430\u0437\u0443 \u0438\u043B\u0438 canvas.",WorkspaceDesc:"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0440\u0430\u0431\u043E\u0447\u0435\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E Obsidian.","New noteDesc":"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u043F\u0440\u0435\u0444\u0438\u043A\u0441. \u041F\u0440\u0438 \u043A\u0430\u0436\u0434\u043E\u043C \u0437\u0430\u043F\u0443\u0441\u043A\u0435 Obsidian \u0431\u0443\u0434\u0435\u0442 \u0441\u043E\u0437\u0434\u0430\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u043E\u0432\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430 \u0441 \u044D\u0442\u0438\u043C \u043F\u0440\u0435\u0444\u0438\u043A\u0441\u043E\u043C.","Graph viewDesc":"\u0411\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D \u0433\u0440\u0430\u0444.",NothingDesc:"\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043F\u0440\u043E\u0438\u0437\u043E\u0439\u0434\u0435\u0442. \u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u044B \u0431\u0443\u0434\u0443\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u044B.","Random fileDesc":"\u0411\u0443\u0434\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u043D \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u0444\u0430\u0439\u043B \u0438\u0437 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430 Obsidian.","Random in folderDesc":"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u043F\u0430\u043F\u043A\u0443. \u0411\u0443\u0434\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u043D \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u0444\u0430\u0439\u043B \u0438\u0437 \u043D\u0435\u0451.",JournalDesc:"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0436\u0443\u0440\u043D\u0430\u043B.","Daily noteDesc":"\u0411\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0430 \u0435\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430.","Weekly noteDesc":"\u0411\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0430 \u0435\u0436\u0435\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430.","Monthly noteDesc":"\u0411\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0430 \u0435\u0436\u0435\u043C\u0435\u0441\u044F\u0447\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430.","Yearly noteDesc":"\u0411\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0430 \u0435\u0436\u0435\u0433\u043E\u0434\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430.",homepageSettingTitle:"Homepage",pluginUnavailableSettings:"\u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u044B\u0439 \u043F\u043B\u0430\u0433\u0438\u043D \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D.",copyDebugInfoNotice:"\u041E\u0442\u043B\u0430\u0434\u043E\u0447\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u0434\u043E\u043C\u0430\u0448\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u0430 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0435\u043D\u0430"};var qe=require("obsidian"),Ft={en:ue,ru:je},Ge,ze=!1;function r(n,...e){if(!ze){let a=(0,qe.getLanguage)()?.toLowerCase()?.split("-")[0]||"en";Ge=Ft[a],ze=!0}n=Ge?.[n]||ue[n];let t=0;for(let a of e)n=n.replace("?"+t,a),t++;return n}var b=require("obsidian");var w=require("obsidian");var Q=class extends w.AbstractInputSuggest{getSuggestions(e){let t=this.app.vault.getAllLoadedFiles(),a=[],i=e.toLowerCase();return t.forEach(o=>{o instanceof w.TFile&&["md","canvas","base"].contains(o.extension)&&o.path.toLowerCase().contains(i)&&a.push(o)}),a}renderSuggestion(e,t){if(e.extension=="md")t.setText(k(e));else{t.setText(e.path.split(".").slice(0,-1).join("."));let a=createDiv();a.className="nav-file-tag nv-homepage-file-tag",a.textContent=e.extension,t.append(a)}}selectSuggestion(e){this.textInputEl.value=k(e),this.textInputEl.trigger("input"),this.close()}},ge=class extends w.AbstractInputSuggest{getSuggestions(e){let t=e.toLowerCase();return this.app.vault.getAllFolders().filter(a=>a.path.toLowerCase().contains(t))}renderSuggestion(e,t){t.setText(e.path)}selectSuggestion(e){this.textInputEl.value=e.path,this.textInputEl.trigger("input"),this.close()}},me=class extends w.AbstractInputSuggest{getSuggestions(e){let t=Object.keys(this.app.internalPlugins.plugins.workspaces?.instance.workspaces),a=e.toLowerCase();return t.filter(i=>i.toLowerCase().contains(a))}renderSuggestion(e,t){t.setText(e)}selectSuggestion(e){this.textInputEl.value=e,this.textInputEl.trigger("input"),this.close()}},he=class extends w.AbstractInputSuggest{getSuggestions(e){let a=this.app.plugins.plugins.journals.journals.map(o=>o.name),i=e.toLowerCase();return a.filter(o=>o.toLowerCase().contains(i))}renderSuggestion(e,t){t.setText(e)}selectSuggestion(e){this.textInputEl.value=e,this.textInputEl.trigger("input"),this.close()}},Je={File:Q,Workspace:me,"Random in folder":ge,"New note":Q,Journal:he},$=class{constructor(e,t){this.app=e.plugin.app,this.homepage=e.plugin.homepage,this.tab=e,t.addSetting(a=>{a.settingEl.addClass("nv-command-setting"),a.descEl.addClass("nv-command-desc"),a.descEl.innerText=r("commandsDesc"),this.container=a.settingEl.createDiv({cls:"nv-command-box"})}),this.dropzone=createDiv(),this.dropzone.className="nv-command-pill nv-dropzone",this.dropzone.addEventListener("dragenter",a=>a.preventDefault()),this.dropzone.addEventListener("dragover",a=>a.preventDefault()),this.dropzone.addEventListener("drop",()=>this.terminateDrag()),this.update()}update(){this.container.innerHTML="",this.activeDrag=null,this.activeCommand=null;for(let e of this.homepage.data.commands){let t=this.app.commands.findCommand(e.id),a=this.container.createDiv({cls:"nv-command-pill",attr:{draggable:!0}});a.addEventListener("dragstart",o=>{o.dataTransfer.effectAllowed="move",this.activeCommand=this.homepage.data.commands.splice(this.indexOf(a),1)[0],this.activeDrag=a,this.dropzone.style.width=`${a.clientWidth}px`,this.dropzone.style.height=`${a.clientHeight}px`}),a.addEventListener("dragover",o=>this.moveDropzone(a,o)),a.addEventListener("drop",o=>o.preventDefault()),a.addEventListener("dragend",()=>this.terminateDrag()),a.createSpan({cls:"nv-command-text",text:t?.name??e.id});let i=new w.ButtonComponent(a).setIcon("route").setClass("clickable-icon").setClass("nv-command-period").onClick(o=>this.showMenu(e,o,i));e.period!="Both"&&(i.setClass("nv-command-selected"),i.setIcon(""),i.buttonEl.createSpan({text:r(e.period)})),new w.ButtonComponent(a).setIcon("trash-2").setClass("clickable-icon").setClass("nv-command-delete").onClick(()=>this.delete(e)),t||(a.classList.add("nv-command-invalid"),a.prepend((0,w.getIcon)("ban")),(0,w.setTooltip)(a,r("commandUnavailable"),{delay:.001}))}new w.ButtonComponent(this.container).setClass("nv-command-add-button").setButtonText(r("commandsAddButton")).onClick(()=>{new fe(this.tab).open()})}delete(e){this.homepage.data.commands.remove(e),this.homepage.save(),this.update()}showMenu(e,t,a){let i=new w.Menu;for(let s of Object.values(R))i.addItem(c=>{c.setTitle(r(s)),c.setChecked(e.period==s),c.onClick(()=>{e.period=s,this.homepage.save(),this.update()})});let o=a.buttonEl.getBoundingClientRect();i.showAtPosition({x:o.x-22,y:o.y+o.height+8})}indexOf(e){return Array.from(this.container.children).indexOf(e)}moveDropzone(e,t){if(!this.activeDrag)return;this.activeDrag.hidden=!0;let a=e.getBoundingClientRect();t.xawait this.copyDebugInfo()})}sanitiseNote(t){return t===null||t.match(/^\s*$/)!==null?null:(0,b.normalizePath)(t)}display(){let t=this.plugin.homepage.data.kind,a=!1,i=Je[t];this.containerEl.empty(),new O(this).addSetting(d=>{d.setName(r("homepageSettingTitle")).addDropdown(async h=>{for(let f of Object.values(E)){if(!this.plugin.hasRequiredPlugin(f))if(f==this.plugin.homepage.data.kind)a=!0;else{h.selectEl.createEl("option",{text:r(f),attr:{disabled:!0}});continue}h.addOption(f,r(f))}h.setValue(this.plugin.homepage.data.kind),h.onChange(async f=>{this.plugin.homepage.data.kind=f,f=="Random file"&&(this.plugin.homepage.data.value=""),await this.plugin.homepage.save(),this.display()})}),d.settingEl.id="nv-main-setting";let p=d.settingEl.createEl("article",{text:r(t+"Desc"),attr:{id:"nv-desc"}});a&&p.createDiv({text:r("pluginUnavailableSettings"),cls:"mod-warning"}),ye.includes(t)?d.addText(h=>{h.setDisabled(!0)}):d.addText(h=>{new i(this.app,h.inputEl),h.setPlaceholder(x.value),h.setValue(x.value==this.plugin.homepage.data.value?"":this.plugin.homepage.data.value),h.onChange(async f=>{this.plugin.homepage.data.value=this.sanitiseNote(f)||x.value,await this.plugin.homepage.save()})})});let o=new O(this).addToggle("openOnStartup",d=>this.display()).addToggle("openWhenEmpty").addToggle("alwaysApply").addSetting(d=>{if(d.setName(r("separateMobile")).setDesc(r("separateMobileDesc")).addToggle(p=>p.setValue(this.plugin.settings.separateMobile).onChange(async h=>{this.plugin.settings.separateMobile=h,this.plugin.homepage=this.plugin.getHomepage(),await this.plugin.saveSettings(),this.display()})),this.plugin.settings.separateMobile){let p=createDiv();d.setClass("nv-mobile-setting"),p.className="mod-warning nv-mobile-info",p.createEl("b",{text:r("separateMobileWarnPrefix")}),p.append(" "+r(b.Platform.isMobile?"separateMobileWarnMobile":"separateMobileWarnDesktop")),d.settingEl.append(p)}});o.elements.openOnStartup.descEl.createDiv({text:r("openOnStartupWarn"),attr:{class:"mod-warning"}}),this.commandBox=new $(this,new O(this,"commandsGroup"));let s=new O(this,"vaultGroup").addDropdown("openMode",C).addDropdown("manualOpenMode",C).addToggle("pin").addToggle("hideReleaseNotes").addToggle("autoCreate");s.elements.autoCreate.descEl.createDiv({text:r("autoCreateWarn"),cls:"mod-warning"});let c=new O(this,"openingGroup").addDropdown("view",B).addToggle("revertView").addToggle("autoScroll");"dataview"in this.plugin.communityPlugins&&(c.addToggle("refreshDataview"),c.elements.refreshDataview.descEl.createDiv({text:r("refreshDataviewWarn"),attr:{class:"mod-warning"}})),b.Platform.isMobile||new b.ButtonComponent(this.containerEl).setButtonText(r("copyDebugInfo")).setClass("nv-debug-button").onClick(async()=>await this.copyDebugInfo()),["Workspace","Nothing"].includes(t)&&(o.disableSettings("openWhenEmpty","alwaysApply"),s.disableSettings("openMode","manualOpenMode","autoCreate","pin")),["Workspace","Nothing","Graph view"].includes(t)&&c.disableAll(),this.plugin.homepage.data.openOnStartup||s.disableSettings("openMode"),(J.includes(t)||t==="Journal")&&s.disableSettings("autoCreate")}async copyDebugInfo(){let t=this.app.vault.config,a={...this.plugin.settings,_defaultViewMode:t.defaultViewMode||"default",_livePreview:t.livePreview!==void 0?t.livePreview:"default",_focusNewTab:t.focusNewTab!==void 0?t.focusNewTab:"default",_plugins:Object.keys(this.plugin.communityPlugins),_internalPlugins:Object.values(this.plugin.internalPlugins).flatMap(i=>i.enabled?[i.instance.id]:[]),_obsidianVersion:b.apiVersion};await navigator.clipboard.writeText(JSON.stringify(a)),new b.Notice(r("copyDebugInfoNotice"))}},O=class extends b.SettingGroup{constructor(t,a){super(t.containerEl);this.elements={};a&&this.setHeading(r(a)),this.plugin=t.plugin}addDropdown(t,a,i){return this.addSetting(o=>{o.setName(r(t)).setDesc(r(t+"Desc")).addDropdown(async s=>{for(let c of Object.values(a))s.addOption(c,r(c));s.setValue(this.plugin.homepage.data[t]),s.onChange(async c=>{this.plugin.homepage.data[t]=c,await this.plugin.homepage.save(),i&&i(c)})}),this.elements[t]=o}),this}addToggle(t,a){return this.addSetting(i=>{i.setName(r(t)).setDesc(r(t+"Desc")).addToggle(o=>o.setValue(this.plugin.homepage.data[t]).onChange(async s=>{this.plugin.homepage.data[t]=s,await this.plugin.homepage.save(),a&&a(s)})),this.elements[t]=i}),this}disableAll(){this.disableSettings(...Object.keys(this.elements))}disableSettings(...t){t.forEach(a=>{this.elements[a]?.settingEl.setAttribute("nv-greyed","")})}};var Et=["markdown","canvas","kanban","bases"],j="Main Homepage",G="Mobile Homepage",C=(a=>(a.ReplaceAll="Replace all open notes",a.ReplaceLast="Replace last note",a.Retain="Keep open notes",a))(C||{}),B=(i=>(i.Default="Default view",i.Reading="Reading view",i.Source="Editing view (Source)",i.LivePreview="Editing view (Live Preview)",i))(B||{}),E=(g=>(g.File="File",g.Workspace="Workspace",g.Random="Random file",g.RandomFolder="Random in folder",g.NewNote="New note",g.Graph="Graph view",g.None="Nothing",g.Journal="Journal",g.DailyNote="Daily Note",g.WeeklyNote="Weekly Note",g.MonthlyNote="Monthly Note",g.YearlyNote="Yearly Note",g))(E||{}),R=(a=>(a.Both="Both",a.Startup="Startup only",a.Manual="Manual only",a))(R||{}),ye=["Random file","Graph view","Nothing",...J],Ot=["Nothing","Graph view","Workspace"],K=class{constructor(e,t){this.lastView=void 0;this.openedViews=new WeakMap;this.name=e,this.plugin=t,this.app=t.app;let a=this.plugin.settings.homepages[e];a?this.data=Object.assign({},x,a):(this.plugin.settings.homepages[e]={...x},this.data=this.plugin.settings.homepages[e])}async open(e=!1){if(this.plugin.hasRequiredPlugin(this.data.kind)){if(this.data.kind==="Journal"&&!Be(this)){new N.Notice(r("journalUnavailable",this.data.value));return}}else{new N.Notice(r("pluginUnavailable"));return}if(this.data.kind==="Workspace")await this.launchWorkspace();else if(this.data.kind!=="Nothing"){let a=this.plugin.loaded?this.data.manualOpenMode:this.data.openMode;e&&(a="Keep open notes"),await this.launchLeaf(a)}if(this.data.commands.length<1)return;let t=this.plugin.loaded?"Startup only":"Manual only";await Pe(this.app);for(let{id:a,period:i}of this.data.commands)i!==t&&this.app.commands.executeCommandById(a)}async launchWorkspace(){let e=this.plugin.internalPlugins.workspaces?.instance;if(!(this.data.value in e.workspaces)){new N.Notice(r("workspaceUnavailable",this.data.value));return}e.loadWorkspace(this.data.value),await q(100)}async launchLeaf(e){let t;if(this.computedValue=await this.computeValue(),this.plugin.executing=!0,e!=="Replace all open notes"){let a=this.getOpened();if(a.length>0){this.app.workspace.setActiveLeaf(a[0]),await this.configure(a[0]);return}else e=="Keep open notes"&&De(this.app)&&(e="Replace last note")}e!=="Keep open notes"&&this.app.workspace.getActiveViewOfType(N.View)?.leaf.setPinned(!1),e==="Replace all open notes"&&(this.app.workspace?.floatingSplit?.children&&(await q(0),this.app.workspace.floatingSplit.children.forEach(a=>a.win.close())),await ke(this.app),await q(0));try{this.data.kind==="Graph view"?t=await this.launchGraph(e):t=await this.launchNote(e),await this.configure(t)}catch{return}}async launchGraph(e){if(e==="Keep open notes"){let t=this.app.workspace.getLeaf("tab");this.app.workspace.setActiveLeaf(t)}return this.app.commands.executeCommandById("graph:open"),this.app.workspace.getActiveViewOfType(N.View).leaf}async launchNote(e){let t=this.app.metadataCache.getFirstLinkpathDest(this.computedValue,"/");if(!t){if(!this.data.autoCreate)throw new N.Notice(r("noteUnavailable",this.computedValue)),new Error(r("noteUnavailable",this.computedValue));t=await this.app.vault.create(be(this.computedValue),"")}let a=await this.app.vault.cachedRead(t),i=this.app.workspace.getLeaf(e=="Keep open notes");return await i.openFile(t),this.app.workspace.setActiveLeaf(i),a!==await this.app.vault.read(t)&&await this.app.vault.modify(t,a),i}async configure(e){this.plugin.executing=!1;let t=e.view,a=t.leaf.history;if(!(t instanceof N.MarkdownView)){this.data.pin&&t.leaf.setPinned(!0),this.configurePlugins();return}let i=t.getState();if(this.data.revertView&&(this.lastView=new WeakRef(t)),this.data.autoScroll){let o=t.editor.lineCount();i.mode=="preview"?t.previewMode.applyScroll(o-4):(t.editor.setCursor(o),t.editor.focus())}if(this.data.pin&&t.leaf.setPinned(!0),this.data.view!=="Default view"){switch(this.data.view){case"Editing view (Live Preview)":case"Editing view (Source)":i.mode="source",i.source=this.data.view!="Editing view (Live Preview)";break;case"Reading view":i.mode="preview";break}await t.leaf.setViewState({type:"markdown",state:i}),t.leaf.history=a}this.configurePlugins()}configurePlugins(){this.plugin.loaded&&this.data.refreshDataview&&this.plugin.communityPlugins.dataview?.index.touch(),this.plugin.communityPlugins["obsidian-file-color"]?.generateColorStyles()}getOpened(){return this.data.kind=="Graph view"?this.app.workspace.getLeavesOfType("graph"):Et.flatMap(t=>this.app.workspace.getLeavesOfType(t)).filter(t=>{let a=t.view.getState().file;return ne(a.endsWith("md")?a.slice(0,-3):a,this.computedValue)})}async computeValue(){let e=this.data.value,t;switch(this.data.kind){case"Random file":t=ae(this.app),t&&(e=t);break;case"Random in folder":t=ae(this.app,e),t&&(e=t);break;case"New note":this.cachedNewFile||(this.cachedNewFile=k(await this.app.fileManager.createNewFile("",e))),e=this.cachedNewFile;break;case"Journal":e=await Ke(e,this.plugin);break;case"Daily Note":case"Weekly Note":case"Monthly Note":case"Yearly Note":e=await _e(this.data.kind,this.plugin);break}return e}async save(){this.plugin.settings.homepages[this.name]=this.data,await this.plugin.saveSettings()}async setToActiveFile(){let e=this.app.workspace.getActiveFile();e&&(this.data.value=k(e),await this.save(),new N.Notice(r("homepageChanged",this.data.value)))}canSetToFile(){return this.app.workspace.getActiveFile()!==null&&!ye.includes(this.data.kind)}async revertView(){if(this.lastView==null||this.data.view=="Default view")return;let e=this.lastView.deref();if(!e?.file||ne(k(e.file),this.computedValue))return;let t=e.getState(),a=this.app.vault.config,i=a.defaultViewMode||"source",o=a.livePreview!==void 0?!a.livePreview:!1;e.leaf.getViewState().type=="markdown"&&(i!=t.mode||o!=t.source)&&(t.mode=i,t.source=o,await e.leaf.setViewState({type:"markdown",state:t,active:!0})),this.lastView=void 0}async openWhenEmpty(){if(!this.plugin.loaded||this.plugin.executing)return;let e=this.app.workspace.getActiveViewOfType(N.View)?.leaf;e?.getViewState().type!=="empty"||e?.parentSplit?.children?.length!=1||await this.open(!0)}async apply(){let e=this.app.workspace.getActiveViewOfType(N.FileView);if(!e?.file)return;let t=k(e.file);this.openedViews.get(e)!==t&&(this.openedViews.set(e,t),t===await this.computeValue()&&this.plugin.loaded&&!this.plugin.executing&&await this.configure(e.leaf))}async read(){if(Ot.includes(this.data.kind))return;let e=this.app.metadataCache.getFirstLinkpathDest(await this.computeValue(),"/");if(e)return this.app.vault.cachedRead(e)}};var Z=class extends S.Plugin{constructor(){super(...arguments);this.newRelease=!1;this.loaded=!1;this.executing=!1;this.onLayoutChange=async()=>{this.homepage.data.revertView&&await this.homepage.revertView(),this.homepage.data.openWhenEmpty&&await this.homepage.openWhenEmpty(),this.homepage.data.alwaysApply&&await this.homepage.apply()}}async onload(){this.patchReleaseNotes(),this.patchOpeningBehaviour(),this.settings=await this.loadSettings(),this.internalPlugins=this.app.internalPlugins.plugins,this.communityPlugins=this.app.plugins.plugins,this.homepage=this.getHomepage(),this.addRibbonIcon("house","Open homepage",t=>this.homepage.open(t.button==1||t.button==2||S.Keymap.isModifier(t,"Mod"))).setAttribute("id","nv-homepage-icon"),this.registerEvent(this.app.workspace.on("layout-change",this.onLayoutChange)),this.addSettingTab(new X(this.app,this)),this.addCommand({id:"open-homepage",name:r("openHomepage"),callback:()=>this.homepage.open()}),this.addCommand({id:"set-to-active-file",name:r("setToActiveFile"),checkCallback:t=>{if(t)return this.homepage.canSetToFile();this.homepage.setToActiveFile()}}),this.registerCliHandler("homepage",r("cliOpenHomepageDesc"),null,async()=>(await this.homepage.open(),r("cliOpenHomepageResult"))),this.registerCliHandler("homepage:read",r("cliReadHomepageDesc"),null,async()=>{let t=await this.homepage.read();return t!==void 0?t:r("cliReadHomepageIllegible")})}onunload(){this.app.workspace.off("layout-change",this.onLayoutChange),this.unpatchNewTabPage(),this.unpatchOpeningBehaviour()}getHomepage(){return this.settings.separateMobile&&S.Platform.isMobile?(G in this.settings.homepages||(this.settings.homepages[G]={...this.settings.homepages?.[j]},this.settings.homepages[G].commands=[...this.settings.homepages?.[j]?.commands||[]]),new K(G,this)):new K(j,this)}async loadSettings(){let t=await this.loadData();return t?.version!==4?t?this.upgradeSettings(t):Object.assign({},we):t}async saveSettings(){await this.saveData(this.settings)}async hasUrlParams(){let t,a;if(S.Platform.isMobile){let i=await window.Capacitor.Plugins.App.getLaunchUrl();if(!i)return!1;let o=new URL(i.url);a=Array.from(o.searchParams.keys()),t=o.hostname}else if(window.OBS_ACT)a=Object.keys(window.OBS_ACT),t=window.OBS_ACT.action;else return!1;return["open","advanced-uri"].includes(t)&&["file","filepath","workspace"].some(i=>a.includes(i))}hasRequiredPlugin(t){switch(t){case"Workspace":return this.internalPlugins.workspaces?.enabled;case"Graph view":return this.internalPlugins.graph?.enabled;case"Journal":return"journals"in this.communityPlugins;case"Daily Note":case"Weekly Note":case"Monthly Note":case"Yearly Note":return Ue(t,this);default:return!0}}patchNewTabPage(){let t=this.communityPlugins["new-tab-default-page"];t&&(t.nvOrig_checkForNewTab=t.checkForNewTab,t.checkForNewTab=async a=>{if(!(this&&this.executing))return await t.nvOrig_checkForNewTab(a)})}unpatchNewTabPage(){let t=this.communityPlugins["new-tab-default-page"];t&&(t.checkForNewTab=t.nvOrig_checkForNewTab)}patchReleaseNotes(){this.app.nvOrig_showReleaseNotes=this.app.showReleaseNotes,this.app.showReleaseNotes=()=>this.newRelease=!0}unpatchReleaseNotes(){this.newRelease&&!this.homepage.data.hideReleaseNotes&&this.app.nvOrig_showReleaseNotes(),this.app.showReleaseNotes=this.app.nvOrig_showReleaseNotes}patchOpeningBehaviour(){this.app.nvOrig_runOpeningBehavior=this.app.runOpeningBehavior,this.app.runOpeningBehavior=async t=>{let a=this.homepage.data.openOnStartup&&!await this.hasUrlParams();this.patchNewTabPage(),a?await this.homepage.open():this.app.nvOrig_runOpeningBehavior(t),this.loaded=!0,this.unpatchReleaseNotes()}}unpatchOpeningBehaviour(){this.app.runOpeningBehavior=this.app.nvOrig_runOpeningBehavior}upgradeSettings(t){if(t.version==3){let i=t,o=!1;for(let s of Object.values(i.homepages))s.commands=s.commands.map(c=>({id:c,period:"Both"})),s.kind==Ve&&(o=!0,s.kind="Daily Note");return o&&new S.Notice(r("momentUpgradeNotice")),i.version=4,this.saveData(i),i}let a=Object.assign({},we);return t.workspaceEnabled?(t.value=t.workspace||"",t.kind="Workspace"):t.momentFormat?(t.kind="Daily Note",new S.Notice(r("momentUpgradeNotice"))):(t.value=t.defaultNote||"Home",t.kind="File"),t.commands=[],delete t.workspace,delete t.momentFormat,delete t.defaultNote,delete t.useMoment,delete t.workspaceEnabled,a.homepages[j]=t,this.saveData(a),a}}; /* nosourcemap */ \ No newline at end of file diff --git a/PaperBell/.obsidian/plugins/homepage/manifest.json b/PaperBell/.obsidian/plugins/homepage/manifest.json index 972fc156..2c05e2ec 100644 --- a/PaperBell/.obsidian/plugins/homepage/manifest.json +++ b/PaperBell/.obsidian/plugins/homepage/manifest.json @@ -1,7 +1,7 @@ { "id": "homepage", "name": "Homepage", - "version": "4.4.2", + "version": "4.4.4", "minAppVersion": "1.12.2", "description": "Open a specified note, canvas, base, or workspace on startup, or set it for quick access later.", "author": "novov", diff --git a/PaperBell/.obsidian/plugins/longform-paperbell/data.json b/PaperBell/.obsidian/plugins/longform-paperbell/data.json index 283920f9..528c2d30 100644 --- a/PaperBell/.obsidian/plugins/longform-paperbell/data.json +++ b/PaperBell/.obsidian/plugins/longform-paperbell/data.json @@ -1,7 +1,7 @@ { "version": 3, "projects": {}, - "selectedDraftVaultPath": "Outputs/demo/Index.md", + "selectedDraftVaultPath": "Outputs/paper-demo/Manuscript/Index.md", "userScriptFolder": "40 - Obsidian/脚本/longform", "sessionStorage": "file", "sessions": [], @@ -78,7 +78,7 @@ }, "PaperBell-Standard": { "name": "PaperBell-Standard", - "description": "", + "description": "Research, to be connected.", "steps": [ { "id": "strip-frontmatter", @@ -119,22 +119,16 @@ "optionValues": {} }, { - "id": "40 - Obsidian/脚本/longform/编译后增加头文件.js", + "id": "add-zenodo-frontmatter", "optionValues": { - "note-name": "Index", - "author-name": "Unknown Author", - "lineno": false, - "csl-style": "", - "target-journal": "", - "acronym": "", - "figures-at-end": false, - "template": "" + "metadata-file": "metadata.json", + "error-on-missing-file": true } }, { "id": "write-to-note", "optionValues": { - "target": "DEMO_manuscript.md", + "target": "$1_$2.md", "open-after": true } } diff --git a/PaperBell/.obsidian/plugins/longform-paperbell/main.js b/PaperBell/.obsidian/plugins/longform-paperbell/main.js index 13f4fcc2..972da73c 100644 --- a/PaperBell/.obsidian/plugins/longform-paperbell/main.js +++ b/PaperBell/.obsidian/plugins/longform-paperbell/main.js @@ -21155,7 +21155,7 @@ function calculateWorkflow(workflow, isMultiScene) { calculatedKinds, ]; } -function compile(app, draft, workflow, kinds, statusCallback) { +function compile(app, draft, workflow, kinds, statusCallback, options) { return __awaiter(this, void 0, void 0, function* () { let currentInput; if (draft.format === "single") { @@ -21213,6 +21213,8 @@ function compile(app, draft, workflow, kinds, statusCallback) { utilities: { normalizePath: obsidian.normalizePath, }, + suppressOpenAfter: options === null || options === void 0 ? void 0 : options.suppressOpenAfter, + projectRoot: options === null || options === void 0 ? void 0 : options.projectRoot, }; console.log(`[Longform] Running compile step ${step.description.name} with context:`, context); statusCallback({ @@ -21618,6 +21620,28 @@ const StripFrontmatterStep = makeBuiltinStep({ }, }); +/** + * The per-draft name used by the `$2` placeholder in the Save-as-Note output path. + * Uses the draft's explicit `draftTitle` when set, otherwise falls back to the + * index file's basename (without the `.md` extension) so the name is always + * distinct across the drafts of a project. + */ +function draftOutputName(draft) { + var _a, _b; + const indexBasename = ((_a = draft.vaultPath.split("/").pop()) !== null && _a !== void 0 ? _a : "").replace(/\.md$/, ""); + return (_b = draft.draftTitle) !== null && _b !== void 0 ? _b : indexBasename; +} +/** + * Substitutes the Save-as-Note output-path placeholders for a given draft: + * - `$1` → the project title (shared across a project's drafts) + * - `$2` → this draft's name (see {@link draftOutputName}) + * All occurrences of each token are replaced. + */ +function applyTargetPlaceholders(target, draft) { + const draftName = draftOutputName(draft); + return target.split("$2").join(draftName).split("$1").join(draft.title); +} + const WriteToNoteStep = makeBuiltinStep({ id: "write-to-note", description: { @@ -21628,7 +21652,7 @@ const WriteToNoteStep = makeBuiltinStep({ { id: "target", name: "Output path", - description: "Path for the created manuscript note. Paths starting with '/' are relative to your vault root; otherwise relative to your project. $1 will be replaced with your project's title.", + description: "Path for the created manuscript note. Paths starting with '/' are relative to your vault root; otherwise relative to your project. $1 is replaced with your project's title; $2 is replaced with this draft's name (e.g. \"compiled/$2.md\" gives each draft its own file).", type: CompileStepOptionType.Text, default: "manuscript.md", }, @@ -21647,15 +21671,14 @@ const WriteToNoteStep = makeBuiltinStep({ throw new Error("Cannot write non-manuscript as note."); } else { - let target = context.optionValues["target"]; - target = target.replace("$1", context.draft.title); + const target = applyTargetPlaceholders(context.optionValues["target"], context.draft); const openAfter = context.optionValues["open-after"]; if (!target || target.length == 0) { throw new Error("Invalid path for Save as Note."); } const filePath = resolvePath(context.projectPath, target); yield writeToFile(context.app, filePath, input.contents); - if (openAfter) { + if (openAfter && !context.suppressOpenAfter) { console.log("[Longform] Attempting to open:", filePath); context.app.workspace.openLinkText(filePath, "/", true).catch((err) => { console.error("[Longform] Could not open", filePath, err); @@ -21883,6 +21906,59 @@ function yamlString(s) { return `"${String(s).replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`; } +/** The folder containing an index note, derived from its vault path. */ +function draftParentFolder(vaultPath) { + return vaultPath.split("/").slice(0, -1).join("/"); +} +/** + * The lowest common ancestor folder shared by a set of folder paths, computed + * segment-wise. Returns "" (the vault root) when there is no shared prefix. + */ +function lowestCommonAncestorFolder(folders) { + if (folders.length === 0) + return ""; + const split = folders.map((f) => f.split("/").filter((s) => s.length > 0)); + let common = split[0]; + for (const segs of split.slice(1)) { + let i = 0; + while (i < common.length && i < segs.length && common[i] === segs[i]) { + i++; + } + common = common.slice(0, i); + } + return common.join("/"); +} +/** + * The "project root" for a set of drafts: the lowest common ancestor of every + * draft's folder. Shared resources (e.g. metadata.json) are searched for between + * a draft's own folder and this root, inclusive. + */ +function projectRootPath(projectDrafts) { + return lowestCommonAncestorFolder(projectDrafts.map((d) => draftParentFolder(d.vaultPath))); +} +/** + * Ordered candidate paths for a named resource, searched from `startDir` upward + * to `rootDir` (inclusive). At each level both `/` and + * `/source/` are produced. When `rootDir` is not an ancestor of + * (or equal to) `startDir`, only `startDir` is searched — so callers that don't + * know a project root degrade to the original single-folder behavior. + */ +function projectResourceCandidatePaths(startDir, rootDir, baseName) { + const startSegs = startDir.split("/").filter((s) => s.length > 0); + const rootSegs = (rootDir !== null && rootDir !== void 0 ? rootDir : "").split("/").filter((s) => s.length > 0); + const rootIsAncestor = rootSegs.length <= startSegs.length && + rootSegs.every((s, i) => s === startSegs[i]); + const minLen = rootIsAncestor ? rootSegs.length : startSegs.length; + const candidates = []; + for (let len = startSegs.length; len >= minLen; len--) { + const dir = startSegs.slice(0, len).join("/"); + const prefix = dir.length > 0 ? `${dir}/` : ""; + candidates.push(`${prefix}${baseName}`); + candidates.push(`${prefix}source/${baseName}`); + } + return candidates; +} + const AddZenodoFrontmatterStep = makeBuiltinStep({ id: "add-zenodo-frontmatter", description: { @@ -21893,7 +21969,7 @@ const AddZenodoFrontmatterStep = makeBuiltinStep({ { id: "metadata-file", name: "Metadata file", - description: "Filename of the Zenodo deposition metadata JSON in your project folder (or its 'source/' subfolder). Trailing '.json' is optional.", + description: "Filename of the Zenodo deposition metadata JSON. Searched for in the draft's folder (or its 'source/' subfolder) and any parent folder up to the project root, so multiple drafts can share one file. Trailing '.json' is optional.", type: CompileStepOptionType.Text, default: "metadata.json", }, @@ -21907,7 +21983,7 @@ const AddZenodoFrontmatterStep = makeBuiltinStep({ ], }, compile(input, context) { - var _a, _b; + var _a, _b, _c; return __awaiter(this, void 0, void 0, function* () { if (context.kind !== CompileStepKind.Manuscript) { throw new Error("Cannot add frontmatter to non-manuscript."); @@ -21917,10 +21993,7 @@ const AddZenodoFrontmatterStep = makeBuiltinStep({ const baseName = metaFileName.endsWith(".json") ? metaFileName : `${metaFileName}.json`; - const candidatePaths = [ - `${context.projectPath}/${baseName}`, - `${context.projectPath}/source/${baseName}`, - ]; + const candidatePaths = projectResourceCandidatePaths(context.projectPath, (_c = context.projectRoot) !== null && _c !== void 0 ? _c : context.projectPath, baseName); let file = null; let foundPath = ""; for (const path of candidatePaths) { @@ -22024,7 +22097,7 @@ const ReplaceJsonPlaceholdersStep = makeBuiltinStep({ { id: "json-file", name: "JSON file", - description: "Filename of the JSON data file in your project folder (or its 'source/' subfolder). Trailing '.json' is optional.", + description: "Filename of the JSON data file. Searched for in the draft's folder (or its 'source/' subfolder) and any parent folder up to the project root. Trailing '.json' is optional.", type: CompileStepOptionType.Text, default: "results.json", }, @@ -22052,7 +22125,7 @@ const ReplaceJsonPlaceholdersStep = makeBuiltinStep({ ], }, compile(input, context) { - var _a, _b, _c; + var _a, _b, _c, _d; return __awaiter(this, void 0, void 0, function* () { if (context.kind !== CompileStepKind.Manuscript) { throw new Error("Cannot replace placeholders on non-manuscript."); @@ -22064,10 +22137,7 @@ const ReplaceJsonPlaceholdersStep = makeBuiltinStep({ const baseName = jsonFileName.endsWith(".json") ? jsonFileName : `${jsonFileName}.json`; - const candidatePaths = [ - `${context.projectPath}/${baseName}`, - `${context.projectPath}/source/${baseName}`, - ]; + const candidatePaths = projectResourceCandidatePaths(context.projectPath, (_d = context.projectRoot) !== null && _d !== void 0 ? _d : context.projectPath, baseName); let file = null; let foundPath = ""; for (const path of candidatePaths) { @@ -28468,16 +28538,16 @@ class AutoTextArea extends SvelteComponent { /* src/view/compile/CompileView.svelte generated by Svelte v3.49.0 */ function add_css$c(target) { - append_styles(target, "svelte-1hf1yah", ".longform-workflow-picker-container.svelte-1hf1yah.svelte-1hf1yah{padding:var(--size-4-2);background:var(--background-primary);display:flex;flex-direction:column}#longform-workflows.svelte-1hf1yah.svelte-1hf1yah{color:var(--color-accent-2)}.longform-workflow-picker.svelte-1hf1yah.svelte-1hf1yah{display:flex;flex-direction:row;justify-content:space-between;align-items:center;flex-wrap:wrap;margin-bottom:var(--size-4-2)}.longform-workflow-picker.svelte-1hf1yah .longform-hint.svelte-1hf1yah{font-size:1em}select.svelte-1hf1yah.svelte-1hf1yah{background-color:transparent;border:none;padding:var(--size-4-1) 0;margin:0;font-family:inherit;font-size:inherit;cursor:inherit;line-height:inherit;outline:none;box-shadow:none}.select.svelte-1hf1yah.svelte-1hf1yah{cursor:pointer}.select.svelte-1hf1yah>select.svelte-1hf1yah{color:var(--text-accent)}.select.svelte-1hf1yah>select.svelte-1hf1yah:hover{text-decoration:underline;color:var(--text-accent-hover)}.longform-compile-container.svelte-1hf1yah .longform-sortable-step-list{list-style-type:none;padding:0;margin:0}.options-button.svelte-1hf1yah.svelte-1hf1yah{background-color:var(--background-secondary-alt);color:var(--text-accent)}.options-button.svelte-1hf1yah.svelte-1hf1yah:hover{background-color:var(--background-primary);color:var(--text-accent-hover)}.add-step-container.svelte-1hf1yah.svelte-1hf1yah{display:flex;flex-direction:row;align-items:center;justify-content:center}.add-step-container.svelte-1hf1yah button.svelte-1hf1yah{font-weight:bold;color:var(--text-accent)}.add-step-container.svelte-1hf1yah button.svelte-1hf1yah:hover{text-decoration:underline;color:var(--text-accent-hover)}.longform-compile-instructions.svelte-1hf1yah.svelte-1hf1yah{font-size:var(--font-smallest);padding:var(--size-4-4) var(--size-4-4) var(--size-4-1) var(--size-4-8);color:var(--text-muted)}.longform-compile-instructions.svelte-1hf1yah li.svelte-1hf1yah{margin-bottom:var(--size-4-1)\n }.longform-compile-instructions.svelte-1hf1yah strong.svelte-1hf1yah{color:var(--color-accent-2)}.compile-button.svelte-1hf1yah.svelte-1hf1yah{font-weight:bold;background-color:var(--interactive-accent);color:var(--text-on-accent)}.compile-button.svelte-1hf1yah.svelte-1hf1yah:hover{background-color:var(--interactive-accent-hover);color:var(--text-on-accent)}.compile-button.svelte-1hf1yah.svelte-1hf1yah:disabled{background-color:var(--text-muted);color:var(--text-faint)}.longform-compile-run-container.svelte-1hf1yah.svelte-1hf1yah{display:flex;flex-direction:row;align-items:center;justify-content:space-between;margin-top:var(--size-4-8)}.longform-compile-run-container.svelte-1hf1yah .compile-status.svelte-1hf1yah{color:var(--text-muted)}.compile-status-error{color:var(--text-error) !important}.compile-status-success{color:var(--interactive-success) !important}.step-ghost{background-color:var(--interactive-accent-hover);color:var(--text-on-accent)}"); + append_styles(target, "svelte-1br8pmp", ".longform-workflow-picker-container.svelte-1br8pmp.svelte-1br8pmp{padding:var(--size-4-2);background:var(--background-primary);display:flex;flex-direction:column}#longform-workflows.svelte-1br8pmp.svelte-1br8pmp{color:var(--color-accent-2)}.longform-workflow-picker.svelte-1br8pmp.svelte-1br8pmp{display:flex;flex-direction:row;justify-content:space-between;align-items:center;flex-wrap:wrap;margin-bottom:var(--size-4-2)}.longform-workflow-picker.svelte-1br8pmp .longform-hint.svelte-1br8pmp{font-size:1em}select.svelte-1br8pmp.svelte-1br8pmp{background-color:transparent;border:none;padding:var(--size-4-1) 0;margin:0;font-family:inherit;font-size:inherit;cursor:inherit;line-height:inherit;outline:none;box-shadow:none}.select.svelte-1br8pmp.svelte-1br8pmp{cursor:pointer}.select.svelte-1br8pmp>select.svelte-1br8pmp{color:var(--text-accent)}.select.svelte-1br8pmp>select.svelte-1br8pmp:hover{text-decoration:underline;color:var(--text-accent-hover)}.longform-compile-container.svelte-1br8pmp .longform-sortable-step-list{list-style-type:none;padding:0;margin:0}.options-button.svelte-1br8pmp.svelte-1br8pmp{background-color:var(--background-secondary-alt);color:var(--text-accent)}.options-button.svelte-1br8pmp.svelte-1br8pmp:hover{background-color:var(--background-primary);color:var(--text-accent-hover)}.add-step-container.svelte-1br8pmp.svelte-1br8pmp{display:flex;flex-direction:row;align-items:center;justify-content:center}.add-step-container.svelte-1br8pmp button.svelte-1br8pmp{font-weight:bold;color:var(--text-accent)}.add-step-container.svelte-1br8pmp button.svelte-1br8pmp:hover{text-decoration:underline;color:var(--text-accent-hover)}.longform-compile-instructions.svelte-1br8pmp.svelte-1br8pmp{font-size:var(--font-smallest);padding:var(--size-4-4) var(--size-4-4) var(--size-4-1) var(--size-4-8);color:var(--text-muted)}.longform-compile-instructions.svelte-1br8pmp li.svelte-1br8pmp{margin-bottom:var(--size-4-1)\n }.longform-compile-instructions.svelte-1br8pmp strong.svelte-1br8pmp{color:var(--color-accent-2)}.compile-button.svelte-1br8pmp.svelte-1br8pmp{font-weight:bold;background-color:var(--interactive-accent);color:var(--text-on-accent)}.compile-button.svelte-1br8pmp.svelte-1br8pmp:hover{background-color:var(--interactive-accent-hover);color:var(--text-on-accent)}.compile-button.svelte-1br8pmp.svelte-1br8pmp:disabled{background-color:var(--text-muted);color:var(--text-faint)}.longform-compile-run-container.svelte-1br8pmp.svelte-1br8pmp{display:flex;flex-direction:row;align-items:center;justify-content:space-between;margin-top:var(--size-4-8)}.longform-compile-buttons.svelte-1br8pmp.svelte-1br8pmp{display:flex;flex-direction:row;align-items:center;gap:var(--size-4-2)}.longform-compile-run-container.svelte-1br8pmp .compile-status.svelte-1br8pmp{color:var(--text-muted)}.compile-status-error{color:var(--text-error) !important}.compile-status-success{color:var(--interactive-success) !important}.step-ghost{background-color:var(--interactive-accent-hover);color:var(--text-on-accent)}"); } function get_each_context$4(ctx, list, i) { const child_ctx = ctx.slice(); - child_ctx[44] = list[i]; + child_ctx[48] = list[i]; return child_ctx; } -// (177:0) {#if $selectedDraft} +// (235:0) {#if $selectedDraft} function create_if_block$b(ctx) { let div3; let div1; @@ -28491,14 +28561,14 @@ function create_if_block$b(ctx) { let current; function select_block_type(ctx, dirty) { - if (/*workflowInputState*/ ctx[6] !== "hidden") return create_if_block_5$2; + if (/*workflowInputState*/ ctx[6] !== "hidden") return create_if_block_6$1; return create_else_block$4; } let current_block_type = select_block_type(ctx); let if_block0 = current_block_type(ctx); - let if_block1 = /*$workflows*/ ctx[4][/*currentWorkflowName*/ ctx[1]] && create_if_block_4$2(ctx); - let if_block2 = /*$workflows*/ ctx[4][/*currentWorkflowName*/ ctx[1]] && create_if_block_2$6(ctx); + let if_block1 = /*$workflows*/ ctx[3][/*currentWorkflowName*/ ctx[1]] && create_if_block_5$2(ctx); + let if_block2 = /*$workflows*/ ctx[3][/*currentWorkflowName*/ ctx[1]] && create_if_block_3$2(ctx); let if_block3 = /*$currentWorkflow*/ ctx[2] && /*$currentWorkflow*/ ctx[2].steps.length > 0 && create_if_block_1$8(ctx); return { @@ -28514,20 +28584,20 @@ function create_if_block$b(ctx) { t2 = space(); ul = element("ul"); - ul.innerHTML = `
  • Compile workflows run their steps in order.
  • -
  • Scene workflows run once per scene.
  • -
  • Join workflows run once and combine the rest of your scene steps into a single manuscript.
  • -
  • Manuscript steps run once on the joined manuscript.
  • -
  • Drag to rearrange. Documentation here.
  • `; + ul.innerHTML = `
  • Compile workflows run their steps in order.
  • +
  • Scene workflows run once per scene.
  • +
  • Join workflows run once and combine the rest of your scene steps into a single manuscript.
  • +
  • Manuscript steps run once on the joined manuscript.
  • +
  • Drag to rearrange. Documentation here.
  • `; t16 = space(); div2 = element("div"); if (if_block3) if_block3.c(); - attr(div0, "class", "longform-workflow-picker svelte-1hf1yah"); - attr(div1, "class", "longform-workflow-picker-container svelte-1hf1yah"); - attr(ul, "class", "longform-compile-instructions svelte-1hf1yah"); - attr(div2, "class", "longform-compile-run-container svelte-1hf1yah"); - attr(div3, "class", "longform-compile-container svelte-1hf1yah"); + attr(div0, "class", "longform-workflow-picker svelte-1br8pmp"); + attr(div1, "class", "longform-workflow-picker-container svelte-1br8pmp"); + attr(ul, "class", "longform-compile-instructions svelte-1br8pmp"); + attr(div2, "class", "longform-compile-run-container svelte-1br8pmp"); + attr(div3, "class", "longform-compile-container svelte-1br8pmp"); }, m(target, anchor) { insert(target, div3, anchor); @@ -28558,15 +28628,15 @@ function create_if_block$b(ctx) { } } - if (/*$workflows*/ ctx[4][/*currentWorkflowName*/ ctx[1]]) { + if (/*$workflows*/ ctx[3][/*currentWorkflowName*/ ctx[1]]) { if (if_block1) { if_block1.p(ctx, dirty); - if (dirty[0] & /*$workflows, currentWorkflowName*/ 18) { + if (dirty[0] & /*$workflows, currentWorkflowName*/ 10) { transition_in(if_block1, 1); } } else { - if_block1 = create_if_block_4$2(ctx); + if_block1 = create_if_block_5$2(ctx); if_block1.c(); transition_in(if_block1, 1); if_block1.m(div1, null); @@ -28581,15 +28651,15 @@ function create_if_block$b(ctx) { check_outros(); } - if (/*$workflows*/ ctx[4][/*currentWorkflowName*/ ctx[1]]) { + if (/*$workflows*/ ctx[3][/*currentWorkflowName*/ ctx[1]]) { if (if_block2) { if_block2.p(ctx, dirty); - if (dirty[0] & /*$workflows, currentWorkflowName*/ 18) { + if (dirty[0] & /*$workflows, currentWorkflowName*/ 10) { transition_in(if_block2, 1); } } else { - if_block2 = create_if_block_2$6(ctx); + if_block2 = create_if_block_3$2(ctx); if_block2.c(); transition_in(if_block2, 1); if_block2.m(div3, t2); @@ -28638,7 +28708,7 @@ function create_if_block$b(ctx) { }; } -// (200:8) {:else} +// (258:8) {:else} function create_else_block$4(ctx) { let t0; let button; @@ -28646,7 +28716,7 @@ function create_else_block$4(ctx) { let dispose; function select_block_type_1(ctx, dirty) { - if (/*allWorkflowNames*/ ctx[0].length == 0) return create_if_block_6$1; + if (/*allWorkflowNames*/ ctx[0].length == 0) return create_if_block_7$1; return create_else_block_1$1; } @@ -28659,17 +28729,17 @@ function create_else_block$4(ctx) { t0 = space(); button = element("button"); button.textContent = "▼"; - attr(button, "class", "options-button svelte-1hf1yah"); + attr(button, "class", "options-button svelte-1br8pmp"); attr(button, "title", "Workflow Actions"); }, m(target, anchor) { if_block.m(target, anchor); insert(target, t0, anchor); insert(target, button, anchor); - /*button_binding*/ ctx[29](button); + /*button_binding*/ ctx[32](button); if (!mounted) { - dispose = listen(button, "click", /*click_handler*/ ctx[30]); + dispose = listen(button, "click", /*click_handler*/ ctx[33]); mounted = true; } }, @@ -28690,15 +28760,15 @@ function create_else_block$4(ctx) { if_block.d(detaching); if (detaching) detach(t0); if (detaching) detach(button); - /*button_binding*/ ctx[29](null); + /*button_binding*/ ctx[32](null); mounted = false; dispose(); } }; } -// (181:8) {#if workflowInputState !== "hidden"} -function create_if_block_5$2(ctx) { +// (239:8) {#if workflowInputState !== "hidden"} +function create_if_block_6$1(ctx) { let input; let input_placeholder_value; let mounted; @@ -28716,12 +28786,12 @@ function create_if_block_5$2(ctx) { m(target, anchor) { insert(target, input, anchor); set_input_value(input, /*workflowInputValue*/ ctx[7]); - /*input_binding*/ ctx[27](input); + /*input_binding*/ ctx[30](input); if (!mounted) { dispose = [ - listen(input, "input", /*input_input_handler*/ ctx[26]), - listen(input, "keydown", /*keydown_handler*/ ctx[28]), + listen(input, "input", /*input_input_handler*/ ctx[29]), + listen(input, "keydown", /*keydown_handler*/ ctx[31]), action_destroyer(focusOnInit.call(null, input)) ]; @@ -28741,14 +28811,14 @@ function create_if_block_5$2(ctx) { }, d(detaching) { if (detaching) detach(input); - /*input_binding*/ ctx[27](null); + /*input_binding*/ ctx[30](null); mounted = false; run_all(dispose); } }; } -// (203:10) {:else} +// (261:10) {:else} function create_else_block_1$1(ctx) { let div; let select; @@ -28772,8 +28842,8 @@ function create_else_block_1$1(ctx) { } attr(select, "id", "longform-workflows"); - attr(select, "class", "svelte-1hf1yah"); - attr(div, "class", "select svelte-1hf1yah"); + attr(select, "class", "svelte-1br8pmp"); + attr(div, "class", "select svelte-1br8pmp"); }, m(target, anchor) { insert(target, div, anchor); @@ -28783,10 +28853,10 @@ function create_else_block_1$1(ctx) { each_blocks[i].m(select, null); } - select_option(select, /*$selectedDraft*/ ctx[3].workflow); + select_option(select, /*$selectedDraft*/ ctx[4].workflow); if (!mounted) { - dispose = listen(select, "change", /*selectedWorkflow*/ ctx[13]); + dispose = listen(select, "change", /*selectedWorkflow*/ ctx[15]); mounted = true; } }, @@ -28814,8 +28884,8 @@ function create_else_block_1$1(ctx) { each_blocks.length = each_value.length; } - if (dirty[0] & /*$selectedDraft, allWorkflowNames*/ 9 && select_value_value !== (select_value_value = /*$selectedDraft*/ ctx[3].workflow)) { - select_option(select, /*$selectedDraft*/ ctx[3].workflow); + if (dirty[0] & /*$selectedDraft, allWorkflowNames*/ 17 && select_value_value !== (select_value_value = /*$selectedDraft*/ ctx[4].workflow)) { + select_option(select, /*$selectedDraft*/ ctx[4].workflow); } }, d(detaching) { @@ -28827,15 +28897,15 @@ function create_else_block_1$1(ctx) { }; } -// (201:10) {#if allWorkflowNames.length == 0} -function create_if_block_6$1(ctx) { +// (259:10) {#if allWorkflowNames.length == 0} +function create_if_block_7$1(ctx) { let span; return { c() { span = element("span"); span.textContent = "Create a new workflow to begin →"; - attr(span, "class", "longform-hint svelte-1hf1yah"); + attr(span, "class", "longform-hint svelte-1br8pmp"); }, m(target, anchor) { insert(target, span, anchor); @@ -28847,10 +28917,10 @@ function create_if_block_6$1(ctx) { }; } -// (210:16) {#each allWorkflowNames as workflowOption} +// (268:16) {#each allWorkflowNames as workflowOption} function create_each_block$4(ctx) { let option; - let t_value = /*workflowOption*/ ctx[44] + ""; + let t_value = /*workflowOption*/ ctx[48] + ""; let t; let option_value_value; @@ -28858,7 +28928,7 @@ function create_each_block$4(ctx) { c() { option = element("option"); t = text(t_value); - option.__value = option_value_value = /*workflowOption*/ ctx[44]; + option.__value = option_value_value = /*workflowOption*/ ctx[48]; option.value = option.__value; }, m(target, anchor) { @@ -28866,9 +28936,9 @@ function create_each_block$4(ctx) { append(option, t); }, p(ctx, dirty) { - if (dirty[0] & /*allWorkflowNames*/ 1 && t_value !== (t_value = /*workflowOption*/ ctx[44] + "")) set_data(t, t_value); + if (dirty[0] & /*allWorkflowNames*/ 1 && t_value !== (t_value = /*workflowOption*/ ctx[48] + "")) set_data(t, t_value); - if (dirty[0] & /*allWorkflowNames*/ 1 && option_value_value !== (option_value_value = /*workflowOption*/ ctx[44])) { + if (dirty[0] & /*allWorkflowNames*/ 1 && option_value_value !== (option_value_value = /*workflowOption*/ ctx[48])) { option.__value = option_value_value; option.value = option.__value; } @@ -28879,14 +28949,14 @@ function create_each_block$4(ctx) { }; } -// (232:6) {#if $workflows[currentWorkflowName]} -function create_if_block_4$2(ctx) { +// (290:6) {#if $workflows[currentWorkflowName]} +function create_if_block_5$2(ctx) { let autotextarea; let updating_value; let current; function autotextarea_value_binding(value) { - /*autotextarea_value_binding*/ ctx[31](value); + /*autotextarea_value_binding*/ ctx[34](value); } let autotextarea_props = { @@ -28895,8 +28965,8 @@ function create_if_block_4$2(ctx) { maxRows: 5 }; - if (/*$workflows*/ ctx[4][/*currentWorkflowName*/ ctx[1]].description !== void 0) { - autotextarea_props.value = /*$workflows*/ ctx[4][/*currentWorkflowName*/ ctx[1]].description; + if (/*$workflows*/ ctx[3][/*currentWorkflowName*/ ctx[1]].description !== void 0) { + autotextarea_props.value = /*$workflows*/ ctx[3][/*currentWorkflowName*/ ctx[1]].description; } autotextarea = new AutoTextArea({ props: autotextarea_props }); @@ -28913,9 +28983,9 @@ function create_if_block_4$2(ctx) { p(ctx, dirty) { const autotextarea_changes = {}; - if (!updating_value && dirty[0] & /*$workflows, currentWorkflowName*/ 18) { + if (!updating_value && dirty[0] & /*$workflows, currentWorkflowName*/ 10) { updating_value = true; - autotextarea_changes.value = /*$workflows*/ ctx[4][/*currentWorkflowName*/ ctx[1]].description; + autotextarea_changes.value = /*$workflows*/ ctx[3][/*currentWorkflowName*/ ctx[1]].description; add_flush_callback(() => updating_value = false); } @@ -28936,27 +29006,27 @@ function create_if_block_4$2(ctx) { }; } -// (241:4) {#if $workflows[currentWorkflowName]} -function create_if_block_2$6(ctx) { +// (299:4) {#if $workflows[currentWorkflowName]} +function create_if_block_3$2(ctx) { let sortablelist; let updating_items; let t; let div; - let show_if = Object.keys(/*$workflows*/ ctx[4]).length > 0; + let show_if = Object.keys(/*$workflows*/ ctx[3]).length > 0; let current; function sortablelist_items_binding(value) { - /*sortablelist_items_binding*/ ctx[33](value); + /*sortablelist_items_binding*/ ctx[36](value); } let sortablelist_props = { - sortableOptions: /*sortableOptions*/ ctx[20], + sortableOptions: /*sortableOptions*/ ctx[22], class: "longform-sortable-step-list", $$slots: { default: [ create_default_slot$1, - ({ item }) => ({ 43: item }), - ({ item }) => [0, item ? 4096 : 0] + ({ item }) => ({ 47: item }), + ({ item }) => [0, item ? 65536 : 0] ] }, $$scope: { ctx } @@ -28968,8 +29038,8 @@ function create_if_block_2$6(ctx) { sortablelist = new SortableList({ props: sortablelist_props }); binding_callbacks.push(() => bind(sortablelist, 'items', sortablelist_items_binding)); - sortablelist.$on("orderChanged", /*itemOrderChanged*/ ctx[21]); - let if_block = show_if && create_if_block_3$2(ctx); + sortablelist.$on("orderChanged", /*itemOrderChanged*/ ctx[23]); + let if_block = show_if && create_if_block_4$2(ctx); return { c() { @@ -28977,7 +29047,7 @@ function create_if_block_2$6(ctx) { t = space(); div = element("div"); if (if_block) if_block.c(); - attr(div, "class", "add-step-container svelte-1hf1yah"); + attr(div, "class", "add-step-container svelte-1br8pmp"); }, m(target, anchor) { mount_component(sortablelist, target, anchor); @@ -28989,7 +29059,7 @@ function create_if_block_2$6(ctx) { p(ctx, dirty) { const sortablelist_changes = {}; - if (dirty[0] & /*$workflows, currentWorkflowName, $currentWorkflow*/ 22 | dirty[1] & /*$$scope, item*/ 69632) { + if (dirty[0] & /*$workflows, currentWorkflowName, $currentWorkflow*/ 14 | dirty[1] & /*$$scope, item*/ 1114112) { sortablelist_changes.$$scope = { dirty, ctx }; } @@ -29000,13 +29070,13 @@ function create_if_block_2$6(ctx) { } sortablelist.$set(sortablelist_changes); - if (dirty[0] & /*$workflows*/ 16) show_if = Object.keys(/*$workflows*/ ctx[4]).length > 0; + if (dirty[0] & /*$workflows*/ 8) show_if = Object.keys(/*$workflows*/ ctx[3]).length > 0; if (show_if) { if (if_block) { if_block.p(ctx, dirty); } else { - if_block = create_if_block_3$2(ctx); + if_block = create_if_block_4$2(ctx); if_block.c(); if_block.m(div, null); } @@ -29033,21 +29103,21 @@ function create_if_block_2$6(ctx) { }; } -// (242:6) +// (300:6) function create_default_slot$1(ctx) { let compilestepview; let current; function removeStep_handler() { - return /*removeStep_handler*/ ctx[32](/*item*/ ctx[43]); + return /*removeStep_handler*/ ctx[35](/*item*/ ctx[47]); } compilestepview = new CompileStepView({ props: { - ordinal: /*item*/ ctx[43].index + 1, - step: /*$workflows*/ ctx[4][/*currentWorkflowName*/ ctx[1]].steps[/*item*/ ctx[43].index], - calculatedKind: /*kindAtIndex*/ ctx[18](/*item*/ ctx[43].index), - error: /*errorAtIndex*/ ctx[19](/*item*/ ctx[43].index) + ordinal: /*item*/ ctx[47].index + 1, + step: /*$workflows*/ ctx[3][/*currentWorkflowName*/ ctx[1]].steps[/*item*/ ctx[47].index], + calculatedKind: /*kindAtIndex*/ ctx[20](/*item*/ ctx[47].index), + error: /*errorAtIndex*/ ctx[21](/*item*/ ctx[47].index) } }); @@ -29064,10 +29134,10 @@ function create_default_slot$1(ctx) { p(new_ctx, dirty) { ctx = new_ctx; const compilestepview_changes = {}; - if (dirty[1] & /*item*/ 4096) compilestepview_changes.ordinal = /*item*/ ctx[43].index + 1; - if (dirty[0] & /*$workflows, currentWorkflowName*/ 18 | dirty[1] & /*item*/ 4096) compilestepview_changes.step = /*$workflows*/ ctx[4][/*currentWorkflowName*/ ctx[1]].steps[/*item*/ ctx[43].index]; - if (dirty[1] & /*item*/ 4096) compilestepview_changes.calculatedKind = /*kindAtIndex*/ ctx[18](/*item*/ ctx[43].index); - if (dirty[1] & /*item*/ 4096) compilestepview_changes.error = /*errorAtIndex*/ ctx[19](/*item*/ ctx[43].index); + if (dirty[1] & /*item*/ 65536) compilestepview_changes.ordinal = /*item*/ ctx[47].index + 1; + if (dirty[0] & /*$workflows, currentWorkflowName*/ 10 | dirty[1] & /*item*/ 65536) compilestepview_changes.step = /*$workflows*/ ctx[3][/*currentWorkflowName*/ ctx[1]].steps[/*item*/ ctx[47].index]; + if (dirty[1] & /*item*/ 65536) compilestepview_changes.calculatedKind = /*kindAtIndex*/ ctx[20](/*item*/ ctx[47].index); + if (dirty[1] & /*item*/ 65536) compilestepview_changes.error = /*errorAtIndex*/ ctx[21](/*item*/ ctx[47].index); compilestepview.$set(compilestepview_changes); }, i(local) { @@ -29085,8 +29155,8 @@ function create_default_slot$1(ctx) { }; } -// (266:8) {#if Object.keys($workflows).length > 0} -function create_if_block_3$2(ctx) { +// (324:8) {#if Object.keys($workflows).length > 0} +function create_if_block_4$2(ctx) { let button; let mounted; let dispose; @@ -29095,13 +29165,13 @@ function create_if_block_3$2(ctx) { c() { button = element("button"); button.textContent = "+ Add Step"; - attr(button, "class", "svelte-1hf1yah"); + attr(button, "class", "svelte-1br8pmp"); }, m(target, anchor) { insert(target, button, anchor); if (!mounted) { - dispose = listen(button, "click", /*addStep*/ ctx[17]); + dispose = listen(button, "click", /*addStep*/ ctx[19]); mounted = true; } }, @@ -29114,50 +29184,60 @@ function create_if_block_3$2(ctx) { }; } -// (292:6) {#if $currentWorkflow && $currentWorkflow.steps.length > 0} +// (350:6) {#if $currentWorkflow && $currentWorkflow.steps.length > 0} function create_if_block_1$8(ctx) { + let div; let button; let t0; let button_disabled_value; let button_aria_label_value; let t1; + let t2; let span; - let t2_value = (/*validation*/ ctx[11].error === WorkflowError.Valid + let t3_value = (/*validation*/ ctx[11].error === WorkflowError.Valid ? /*defaultCompileStatus*/ ctx[10] : /*validation*/ ctx[11].error) + ""; - let t2; + let t3; let mounted; let dispose; + let if_block = /*$selectedProjectHasMultipleDrafts*/ ctx[14] && create_if_block_2$6(ctx); return { c() { + div = element("div"); button = element("button"); t0 = text("Compile"); t1 = space(); + if (if_block) if_block.c(); + t2 = space(); span = element("span"); - t2 = text(t2_value); - attr(button, "class", "compile-button svelte-1hf1yah"); - button.disabled = button_disabled_value = /*validation*/ ctx[11].error !== WorkflowError.Valid; + t3 = text(t3_value); + attr(button, "class", "compile-button svelte-1br8pmp"); + button.disabled = button_disabled_value = /*validation*/ ctx[11].error !== WorkflowError.Valid || /*isCompiling*/ ctx[13]; attr(button, "aria-label", button_aria_label_value = /*validation*/ ctx[11].error); - attr(span, "class", "compile-status svelte-1hf1yah"); + attr(div, "class", "longform-compile-buttons svelte-1br8pmp"); + attr(span, "class", "compile-status svelte-1br8pmp"); }, m(target, anchor) { - insert(target, button, anchor); + insert(target, div, anchor); + append(div, button); append(button, t0); - insert(target, t1, anchor); + append(div, t1); + if (if_block) if_block.m(div, null); + insert(target, t2, anchor); insert(target, span, anchor); - append(span, t2); - /*span_binding*/ ctx[34](span); + append(span, t3); + /*span_binding*/ ctx[37](span); if (!mounted) { - dispose = listen(button, "click", /*doCompile*/ ctx[22]); + dispose = listen(button, "click", /*doCompile*/ ctx[24]); mounted = true; } }, p(ctx, dirty) { - if (dirty[0] & /*validation*/ 2048 && button_disabled_value !== (button_disabled_value = /*validation*/ ctx[11].error !== WorkflowError.Valid)) { + if (dirty[0] & /*validation, isCompiling*/ 10240 && button_disabled_value !== (button_disabled_value = /*validation*/ ctx[11].error !== WorkflowError.Valid || /*isCompiling*/ ctx[13])) { button.disabled = button_disabled_value; } @@ -29165,15 +29245,66 @@ function create_if_block_1$8(ctx) { attr(button, "aria-label", button_aria_label_value); } - if (dirty[0] & /*validation, defaultCompileStatus*/ 3072 && t2_value !== (t2_value = (/*validation*/ ctx[11].error === WorkflowError.Valid + if (/*$selectedProjectHasMultipleDrafts*/ ctx[14]) { + if (if_block) { + if_block.p(ctx, dirty); + } else { + if_block = create_if_block_2$6(ctx); + if_block.c(); + if_block.m(div, null); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + + if (dirty[0] & /*validation, defaultCompileStatus*/ 3072 && t3_value !== (t3_value = (/*validation*/ ctx[11].error === WorkflowError.Valid ? /*defaultCompileStatus*/ ctx[10] - : /*validation*/ ctx[11].error) + "")) set_data(t2, t2_value); + : /*validation*/ ctx[11].error) + "")) set_data(t3, t3_value); }, d(detaching) { - if (detaching) detach(button); - if (detaching) detach(t1); + if (detaching) detach(div); + if (if_block) if_block.d(); + if (detaching) detach(t2); if (detaching) detach(span); - /*span_binding*/ ctx[34](null); + /*span_binding*/ ctx[37](null); + mounted = false; + dispose(); + } + }; +} + +// (358:10) {#if $selectedProjectHasMultipleDrafts} +function create_if_block_2$6(ctx) { + let button; + let t; + let mounted; + let dispose; + + return { + c() { + button = element("button"); + t = text("Compile All Drafts"); + attr(button, "class", "compile-button svelte-1br8pmp"); + button.disabled = /*isCompiling*/ ctx[13]; + attr(button, "title", "Compile every draft in this project, each to its own file."); + }, + m(target, anchor) { + insert(target, button, anchor); + append(button, t); + + if (!mounted) { + dispose = listen(button, "click", /*doCompileAll*/ ctx[25]); + mounted = true; + } + }, + p(ctx, dirty) { + if (dirty[0] & /*isCompiling*/ 8192) { + button.disabled = /*isCompiling*/ ctx[13]; + } + }, + d(detaching) { + if (detaching) detach(button); mounted = false; dispose(); } @@ -29183,7 +29314,7 @@ function create_if_block_1$8(ctx) { function create_fragment$c(ctx) { let if_block_anchor; let current; - let if_block = /*$selectedDraft*/ ctx[3] && create_if_block$b(ctx); + let if_block = /*$selectedDraft*/ ctx[4] && create_if_block$b(ctx); return { c() { @@ -29196,11 +29327,11 @@ function create_fragment$c(ctx) { current = true; }, p(ctx, dirty) { - if (/*$selectedDraft*/ ctx[3]) { + if (/*$selectedDraft*/ ctx[4]) { if (if_block) { if_block.p(ctx, dirty); - if (dirty[0] & /*$selectedDraft*/ 8) { + if (dirty[0] & /*$selectedDraft*/ 16) { transition_in(if_block, 1); } } else { @@ -29241,13 +29372,17 @@ function focusOnInit(el) { function instance$c($$self, $$props, $$invalidate) { let $currentWorkflow; - let $selectedDraft; let $workflows; + let $selectedProject; + let $selectedDraft; let $drafts; + let $selectedProjectHasMultipleDrafts; component_subscribe($$self, currentWorkflow, $$value => $$invalidate(2, $currentWorkflow = $$value)); - component_subscribe($$self, selectedDraft, $$value => $$invalidate(3, $selectedDraft = $$value)); - component_subscribe($$self, workflows, $$value => $$invalidate(4, $workflows = $$value)); - component_subscribe($$self, drafts, $$value => $$invalidate(25, $drafts = $$value)); + component_subscribe($$self, workflows, $$value => $$invalidate(3, $workflows = $$value)); + component_subscribe($$self, selectedProject, $$value => $$invalidate(40, $selectedProject = $$value)); + component_subscribe($$self, selectedDraft, $$value => $$invalidate(4, $selectedDraft = $$value)); + component_subscribe($$self, drafts, $$value => $$invalidate(28, $drafts = $$value)); + component_subscribe($$self, selectedProjectHasMultipleDrafts, $$value => $$invalidate(14, $selectedProjectHasMultipleDrafts = $$value)); var _a; let workflowContextButton; let workflowInputState = "hidden"; @@ -29278,7 +29413,7 @@ function instance$c($$self, $$props, $$invalidate) { $$invalidate(6, workflowInputState = "rename"); } else if (type == "delete") { showConfirmModal(`Delete ${currentWorkflowName}?`, "Really delete this workflow? This can’t be undone.", "Delete", () => { - $$invalidate(24, isDeletingWorkflow = true); + $$invalidate(27, isDeletingWorkflow = true); const toDelete = currentWorkflowName; const remaining = allWorkflowNames.filter(n => n != toDelete); @@ -29289,7 +29424,7 @@ function instance$c($$self, $$props, $$invalidate) { } set_store_value(workflows, $workflows = delete $workflows[toDelete] && $workflows, $workflows); - $$invalidate(24, isDeletingWorkflow = false); + $$invalidate(27, isDeletingWorkflow = false); }); } } @@ -29396,9 +29531,75 @@ function instance$c($$self, $$props, $$invalidate) { } const compile = getContext("compile"); + let isCompiling = false; function doCompile() { - compile($selectedDraft, $currentWorkflow, calculatedKinds, onCompileStatusChange); + const projectRoot = projectRootPath($selectedProject !== null && $selectedProject !== void 0 + ? $selectedProject + : [$selectedDraft]); + + compile($selectedDraft, $currentWorkflow, calculatedKinds, onCompileStatusChange, { projectRoot }); + } + + function doCompileAll() { + return __awaiter(this, void 0, void 0, function* () { + const projectDrafts = $selectedProject !== null && $selectedProject !== void 0 + ? $selectedProject + : []; + + if (projectDrafts.length === 0) { + return; + } + + const projectRoot = projectRootPath(projectDrafts); + $$invalidate(13, isCompiling = true); + let compiledCount = 0; + + for (let i = 0; i < projectDrafts.length; i++) { + const draft = projectDrafts[i]; + const label = `${draftTitle(draft)} (${i + 1}/${projectDrafts.length})`; + + const workflow = draft.workflow + ? $workflows[draft.workflow] + : $currentWorkflow; + + if (!workflow) { + new obsidian.Notice(`Skipped ${label}: no workflow assigned.`); + continue; + } + + const [validationResult, kinds] = calculateWorkflow(workflow, draft.format === "scenes"); + + if (validationResult.error !== WorkflowError.Valid) { + new obsidian.Notice(`Skipped ${label}: ${validationResult.error}`); + continue; + } + + // Prefix per-step status with which draft we're on; swallow the per-draft + // success notice so we only announce once at the end. + const wrappedStatus = status => { + if (status.kind === "CompileStatusStep") { + $$invalidate(9, compileStatus.innerText = `Compiling ${label} — step ${status.stepIndex + 1}/${status.totalSteps}`, compileStatus); + } else if (status.kind === "CompileStatusError") { + onCompileStatusChange(status); + } + }; + + try { + yield compile(draft, workflow, kinds, wrappedStatus, { suppressOpenAfter: true, projectRoot }); + compiledCount++; + } catch(error) { + console.error("[Longform]", error); + new obsidian.Notice(`Failed to compile ${label}. See console for details.`); + } + } + + $$invalidate(13, isCompiling = false); + $$invalidate(9, compileStatus.innerText = `Compiled ${compiledCount} draft${compiledCount === 1 ? "" : "s"}.`, compileStatus); + compileStatus.classList.add("compile-status-success"); + restoreDefaultStatusAfter(); + new obsidian.Notice(`Compiled ${compiledCount} draft${compiledCount === 1 ? "" : "s"}.`); + }); } function input_input_handler() { @@ -29464,14 +29665,14 @@ function instance$c($$self, $$props, $$invalidate) { } $$self.$$.update = () => { - if ($$self.$$.dirty[0] & /*$workflows, _a*/ 8388624) { + if ($$self.$$.dirty[0] & /*$workflows, _a*/ 67108872) { // WORKFLOW MANAGEMENT - $$invalidate(0, allWorkflowNames = $$invalidate(23, _a = Object.keys($workflows).sort()) !== null && _a !== void 0 + $$invalidate(0, allWorkflowNames = $$invalidate(26, _a = Object.keys($workflows).sort()) !== null && _a !== void 0 ? _a : []); } - if ($$self.$$.dirty[0] & /*$selectedDraft, isDeletingWorkflow, currentWorkflowName, allWorkflowNames, $drafts*/ 50331659) { + if ($$self.$$.dirty[0] & /*$selectedDraft, isDeletingWorkflow, currentWorkflowName, allWorkflowNames, $drafts*/ 402653203) { { if ($selectedDraft) { $$invalidate(1, currentWorkflowName = $selectedDraft.workflow); @@ -29486,13 +29687,13 @@ function instance$c($$self, $$props, $$invalidate) { } } - if ($$self.$$.dirty[0] & /*$selectedDraft, $drafts*/ 33554440) { + if ($$self.$$.dirty[0] & /*$selectedDraft, $drafts*/ 268435472) { { currentDraftIndex = $selectedDraft && $drafts.findIndex(d => d.vaultPath === $selectedDraft.vaultPath); } } - if ($$self.$$.dirty[0] & /*$currentWorkflow, $selectedDraft*/ 12) { + if ($$self.$$.dirty[0] & /*$currentWorkflow, $selectedDraft*/ 20) { { if ($currentWorkflow) { $$invalidate(11, [validation, calculatedKinds] = calculateWorkflow($currentWorkflow, $selectedDraft.format === "scenes"), validation); @@ -29521,8 +29722,8 @@ function instance$c($$self, $$props, $$invalidate) { allWorkflowNames, currentWorkflowName, $currentWorkflow, - $selectedDraft, $workflows, + $selectedDraft, workflowContextButton, workflowInputState, workflowInputValue, @@ -29531,6 +29732,8 @@ function instance$c($$self, $$props, $$invalidate) { defaultCompileStatus, validation, items, + isCompiling, + $selectedProjectHasMultipleDrafts, selectedWorkflow, showCompileActionsMenu, workflowAction, @@ -29541,6 +29744,7 @@ function instance$c($$self, $$props, $$invalidate) { sortableOptions, itemOrderChanged, doCompile, + doCompileAll, _a, isDeletingWorkflow, $drafts, @@ -38113,8 +38317,8 @@ class ExplorerPane extends obsidian.ItemView { context.set("renameFolder", (oldPath, newPath) => { this.app.vault.adapter.rename(oldPath, newPath); }); - context.set("compile", (draft, workflow, kinds, statusCallback) => { - compile(this.app, draft, workflow, kinds, statusCallback); + context.set("compile", (draft, workflow, kinds, statusCallback, options) => { + return compile(this.app, draft, workflow, kinds, statusCallback, options); }); context.set("openCompileStepMenu", () => new AddStepModalContainer(this.app).open()); context.set("showCompileActionsMenu", (x, y, currentWorkflowName, action) => { @@ -38145,13 +38349,11 @@ class ExplorerPane extends obsidian.ItemView { new NewDraftModalContainer(this.app).open(); }); context.set("showMetadataModal", () => { + var _a; const draft = get_store_value(selectedDraft); if (!draft) return; - const projectPath = draft.vaultPath - .split("/") - .slice(0, -1) - .join("/"); + const projectPath = projectRootPath((_a = get_store_value(selectedProject)) !== null && _a !== void 0 ? _a : [draft]); new MetadataModal(this.app, projectPath, draft.title).open(); }); this.explorerView = new ExplorerView({ @@ -39197,6 +39399,7 @@ const compileCurrent = (plugin) => ({ id: "longform-compile-current", name: "Compile current project with current workflow", checkCallback: (checking) => { + var _a; const draft = get_store_value(selectedDraft); const workflow = get_store_value(currentWorkflow); if (checking) { @@ -39215,7 +39418,8 @@ const compileCurrent = (plugin) => ({ new obsidian.Notice("Compile complete."); } } - compile(plugin.app, draft, workflow, calculatedKinds, onCompileStatusChange); + const projectRoot = projectRootPath((_a = get_store_value(projects)[draft.title]) !== null && _a !== void 0 ? _a : [draft]); + compile(plugin.app, draft, workflow, calculatedKinds, onCompileStatusChange, { projectRoot }); }, }); const compileSelection = (plugin) => ({ @@ -39297,7 +39501,7 @@ const compileSelection = (plugin) => ({ new obsidian.Notice("Compile complete."); } } - compile(plugin.app, draft, workflow, calculatedKinds, onCompileStatusChange); + compile(plugin.app, draft, workflow, calculatedKinds, onCompileStatusChange, { projectRoot: projectRootPath(project) }); }).open(); }).open(); }).open(); diff --git a/PaperBell/.obsidian/plugins/longform-paperbell/manifest.json b/PaperBell/.obsidian/plugins/longform-paperbell/manifest.json index 7f92d223..948b7b70 100644 --- a/PaperBell/.obsidian/plugins/longform-paperbell/manifest.json +++ b/PaperBell/.obsidian/plugins/longform-paperbell/manifest.json @@ -1 +1 @@ -{"id":"longform-paperbell","name":"Longform (PaperBell)","version":"2.2.0-beta.4","minAppVersion":"1.0","description":"Write novels, screenplays, and other long projects in Obsidian.","author":"Kevin Barrett","authorUrl":"https://kevinbarrett.org","fundingUrl":"https://github.com/sponsors/kevboh","isDesktopOnly":false} \ No newline at end of file +{"id":"longform-paperbell","name":"Longform (PaperBell)","version":"2.2.0-beta.6","minAppVersion":"1.0","description":"Write novels, screenplays, and other long projects in Obsidian.","author":"Kevin Barrett","authorUrl":"https://kevinbarrett.org","fundingUrl":"https://github.com/sponsors/kevboh","isDesktopOnly":false} \ No newline at end of file diff --git a/PaperBell/.obsidian/plugins/obsidian-enhancing-export/data.json b/PaperBell/.obsidian/plugins/obsidian-enhancing-export/data.json index 4a5fab23..69ade1c9 100644 --- a/PaperBell/.obsidian/plugins/obsidian-enhancing-export/data.json +++ b/PaperBell/.obsidian/plugins/obsidian-enhancing-export/data.json @@ -18,6 +18,18 @@ "arguments": "--defaults=\"${vaultDir}/40 - Obsidian/脚本/pandoc/defaults/demo-obsidian.yaml\" --resource-path=\"${currentDir}\" --resource-path=\"${attachmentFolderPath}\" --resource-path=\"${currentDir}/figs\" --resource-path=\"${currentDir}/../figs\" --resource-path=\"${currentDir}/../imgs\" --resource-path=\"${currentDir}/imgs\" --resource-path=\"${currentDir}/images\" --resource-path=\"${currentDir}/../images\" --csl=\"${vaultDir}/40 - Obsidian/脚本/pandoc/csl/${metadata.csl}.csl\" -o \"${outputPath}\"", "extension": ".docx" }, + { + "name": "PaperBell (回复信·草稿)", + "type": "pandoc", + "arguments": "--defaults=\"${vaultDir}/40 - Obsidian/脚本/pandoc/defaults/response-letter.yaml\" --resource-path=\"${currentDir}\" --resource-path=\"${attachmentFolderPath}\" --resource-path=\"${currentDir}/figs\" --resource-path=\"${currentDir}/../figs\" --resource-path=\"${currentDir}/../imgs\" --resource-path=\"${currentDir}/imgs\" --resource-path=\"${currentDir}/images\" --resource-path=\"${currentDir}/../images\" --csl=\"${vaultDir}/40 - Obsidian/脚本/pandoc/csl/${metadata.csl}.csl\" --metadata=draft:true -o \"${outputPath}\"", + "extension": ".pdf" + }, + { + "name": "PaperBell (回复信·终稿)", + "type": "pandoc", + "arguments": "--defaults=\"${vaultDir}/40 - Obsidian/脚本/pandoc/defaults/response-letter.yaml\" --resource-path=\"${currentDir}\" --resource-path=\"${attachmentFolderPath}\" --resource-path=\"${currentDir}/figs\" --resource-path=\"${currentDir}/../figs\" --resource-path=\"${currentDir}/../imgs\" --resource-path=\"${currentDir}/imgs\" --resource-path=\"${currentDir}/images\" --resource-path=\"${currentDir}/../images\" --csl=\"${vaultDir}/40 - Obsidian/脚本/pandoc/csl/${metadata.csl}.csl\" --metadata=draft:false -o \"${outputPath}\"", + "extension": ".pdf" + }, { "name": "Markdown" }, @@ -72,11 +84,13 @@ ], "defaultExportDirectoryMode": "Same", "openExportedFile": true, - "env": {}, + "env": { + "TEXINPUTS": "${vaultDir}/40 - Obsidian/脚本/pandoc/templates/:${pluginDir}/textemplate/:" + }, "showExportProgressBar": true, "lastEditName": "eisvogel", "lastExportDirectory": { - "darwin": "/Users/songshgeo/Documents/Obsidian/PaperBell/Outputs/PaperBell用户文档" + "darwin": "/Users/songshgeo/Documents/Obsidian/PaperBell/40 - Obsidian/模板" }, - "lastExportType": "PaperBell (Word)" + "lastExportType": "PaperBell (回复信·终稿)" } \ No newline at end of file diff --git a/PaperBell/.obsidian/plugins/obsidian-git/data.json b/PaperBell/.obsidian/plugins/obsidian-git/data.json new file mode 100644 index 00000000..22966b9d --- /dev/null +++ b/PaperBell/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,7 @@ +{ + "diffStyle": "split", + "dateInHistoryView": true, + "authorInHistoryView": "hide", + "commitDateFormat": "YYYY-MM-DD HH:mm", + "commitMessage": "vault backup: {{date}}" +} diff --git a/PaperBell/.obsidian/plugins/obsidian-git/main.js b/PaperBell/.obsidian/plugins/obsidian-git/main.js new file mode 100644 index 00000000..199a1d6b --- /dev/null +++ b/PaperBell/.obsidian/plugins/obsidian-git/main.js @@ -0,0 +1,415 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source visit the plugins github repository (https://github.com/denolehov/obsidian-git) +*/ + +var hF=Object.create;var uc=Object.defineProperty;var pF=Object.getOwnPropertyDescriptor;var mF=Object.getOwnPropertyNames;var gF=Object.getPrototypeOf,vF=Object.prototype.hasOwnProperty;var a_=t=>{throw TypeError(t)};var wF=(t,e,r)=>e in t?uc(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var _F=(t,e)=>()=>(t&&(e=t(t=0)),e);var H=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),bF=(t,e)=>{for(var r in e)uc(t,r,{get:e[r],enumerable:!0})},o_=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of mF(e))!vF.call(t,n)&&n!==r&&uc(t,n,{get:()=>e[n],enumerable:!(i=pF(e,n))||i.enumerable});return t};var Ht=(t,e,r)=>(r=t!=null?hF(gF(t)):{},o_(e||!t||!t.__esModule?uc(r,"default",{value:t,enumerable:!0}):r,t)),yF=t=>o_(uc({},"__esModule",{value:!0}),t);var Ve=(t,e,r)=>wF(t,typeof e!="symbol"?e+"":e,r),Bp=(t,e,r)=>e.has(t)||a_("Cannot "+r);var R=(t,e,r)=>(Bp(t,e,"read from private field"),r?r.call(t):e.get(t)),pe=(t,e,r)=>e.has(t)?a_("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),we=(t,e,r,i)=>(Bp(t,e,"write to private field"),i?i.call(t,r):e.set(t,r),r),Me=(t,e,r)=>(Bp(t,e,"access private method"),r);var u_=H(vf=>{"use strict";m();vf.byteLength=EF;vf.toByteArray=kF;vf.fromByteArray=TF;var on=[],mi=[],xF=typeof Uint8Array!="undefined"?Uint8Array:Array,Hp="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(Js=0,l_=Hp.length;Js0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");r===-1&&(r=e);var i=r===e?0:4-r%4;return[r,i]}function EF(t){var e=c_(t),r=e[0],i=e[1];return(r+i)*3/4-i}function SF(t,e,r){return(e+r)*3/4-r}function kF(t){var e,r=c_(t),i=r[0],n=r[1],s=new xF(SF(t,i,n)),a=0,o=n>0?i-4:i,l;for(l=0;l>16&255,s[a++]=e>>8&255,s[a++]=e&255;return n===2&&(e=mi[t.charCodeAt(l)]<<2|mi[t.charCodeAt(l+1)]>>4,s[a++]=e&255),n===1&&(e=mi[t.charCodeAt(l)]<<10|mi[t.charCodeAt(l+1)]<<4|mi[t.charCodeAt(l+2)]>>2,s[a++]=e>>8&255,s[a++]=e&255),s}function AF(t){return on[t>>18&63]+on[t>>12&63]+on[t>>6&63]+on[t&63]}function CF(t,e,r){for(var i,n=[],s=e;so?o:a+s));return i===1?(e=t[r-1],n.push(on[e>>2]+on[e<<4&63]+"==")):i===2&&(e=(t[r-2]<<8)+t[r-1],n.push(on[e>>10]+on[e>>4&63]+on[e<<2&63]+"=")),n.join("")}});var f_=H(Up=>{m();Up.read=function(t,e,r,i,n){var s,a,o=n*8-i-1,l=(1<>1,u=-7,f=r?n-1:0,d=r?-1:1,h=t[e+f];for(f+=d,s=h&(1<<-u)-1,h>>=-u,u+=o;u>0;s=s*256+t[e+f],f+=d,u-=8);for(a=s&(1<<-u)-1,s>>=-u,u+=i;u>0;a=a*256+t[e+f],f+=d,u-=8);if(s===0)s=1-c;else{if(s===l)return a?NaN:(h?-1:1)*(1/0);a=a+Math.pow(2,i),s=s-c}return(h?-1:1)*a*Math.pow(2,s-i)};Up.write=function(t,e,r,i,n,s){var a,o,l,c=s*8-n-1,u=(1<>1,d=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,h=i?0:s-1,p=i?1:-1,g=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(o=isNaN(e)?1:0,a=u):(a=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-a))<1&&(a--,l*=2),a+f>=1?e+=d/l:e+=d*Math.pow(2,1-f),e*l>=2&&(a++,l/=2),a+f>=u?(o=0,a=u):a+f>=1?(o=(e*l-1)*Math.pow(2,n),a=a+f):(o=e*Math.pow(2,f-1)*Math.pow(2,n),a=0));n>=8;t[r+h]=o&255,h+=p,o/=256,n-=8);for(a=a<0;t[r+h]=a&255,h+=p,a/=256,c-=8);t[r+h-p]|=g*128}});var Zp=H(So=>{"use strict";m();var Gp=u_(),xo=f_(),d_=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;So.Buffer=F;So.SlowBuffer=MF;So.INSPECT_MAX_BYTES=50;var wf=2147483647;So.kMaxLength=wf;F.TYPED_ARRAY_SUPPORT=PF();!F.TYPED_ARRAY_SUPPORT&&typeof console!="undefined"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function PF(){try{let t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),t.foo()===42}catch(t){return!1}}Object.defineProperty(F.prototype,"parent",{enumerable:!0,get:function(){if(F.isBuffer(this))return this.buffer}});Object.defineProperty(F.prototype,"offset",{enumerable:!0,get:function(){if(F.isBuffer(this))return this.byteOffset}});function jn(t){if(t>wf)throw new RangeError('The value "'+t+'" is invalid for option "size"');let e=new Uint8Array(t);return Object.setPrototypeOf(e,F.prototype),e}function F(t,e,r){if(typeof t=="number"){if(typeof e=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return Wp(t)}return g_(t,e,r)}F.poolSize=8192;function g_(t,e,r){if(typeof t=="string")return $F(t,e);if(ArrayBuffer.isView(t))return FF(t);if(t==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(ln(t,ArrayBuffer)||t&&ln(t.buffer,ArrayBuffer)||typeof SharedArrayBuffer!="undefined"&&(ln(t,SharedArrayBuffer)||t&&ln(t.buffer,SharedArrayBuffer)))return Vp(t,e,r);if(typeof t=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let i=t.valueOf&&t.valueOf();if(i!=null&&i!==t)return F.from(i,e,r);let n=IF(t);if(n)return n;if(typeof Symbol!="undefined"&&Symbol.toPrimitive!=null&&typeof t[Symbol.toPrimitive]=="function")return F.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}F.from=function(t,e,r){return g_(t,e,r)};Object.setPrototypeOf(F.prototype,Uint8Array.prototype);Object.setPrototypeOf(F,Uint8Array);function v_(t){if(typeof t!="number")throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function RF(t,e,r){return v_(t),t<=0?jn(t):e!==void 0?typeof r=="string"?jn(t).fill(e,r):jn(t).fill(e):jn(t)}F.alloc=function(t,e,r){return RF(t,e,r)};function Wp(t){return v_(t),jn(t<0?0:qp(t)|0)}F.allocUnsafe=function(t){return Wp(t)};F.allocUnsafeSlow=function(t){return Wp(t)};function $F(t,e){if((typeof e!="string"||e==="")&&(e="utf8"),!F.isEncoding(e))throw new TypeError("Unknown encoding: "+e);let r=w_(t,e)|0,i=jn(r),n=i.write(t,e);return n!==r&&(i=i.slice(0,n)),i}function jp(t){let e=t.length<0?0:qp(t.length)|0,r=jn(e);for(let i=0;i=wf)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+wf.toString(16)+" bytes");return t|0}function MF(t){return+t!=t&&(t=0),F.alloc(+t)}F.isBuffer=function(e){return e!=null&&e._isBuffer===!0&&e!==F.prototype};F.compare=function(e,r){if(ln(e,Uint8Array)&&(e=F.from(e,e.offset,e.byteLength)),ln(r,Uint8Array)&&(r=F.from(r,r.offset,r.byteLength)),!F.isBuffer(e)||!F.isBuffer(r))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===r)return 0;let i=e.length,n=r.length;for(let s=0,a=Math.min(i,n);sn.length?(F.isBuffer(a)||(a=F.from(a)),a.copy(n,s)):Uint8Array.prototype.set.call(n,a,s);else if(F.isBuffer(a))a.copy(n,s);else throw new TypeError('"list" argument must be an Array of Buffers');s+=a.length}return n};function w_(t,e){if(F.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||ln(t,ArrayBuffer))return t.byteLength;if(typeof t!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);let r=t.length,i=arguments.length>2&&arguments[2]===!0;if(!i&&r===0)return 0;let n=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return zp(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return r*2;case"hex":return r>>>1;case"base64":return C_(t).length;default:if(n)return i?-1:zp(t).length;e=(""+e).toLowerCase(),n=!0}}F.byteLength=w_;function DF(t,e,r){let i=!1;if((e===void 0||e<0)&&(e=0),e>this.length||((r===void 0||r>this.length)&&(r=this.length),r<=0)||(r>>>=0,e>>>=0,r<=e))return"";for(t||(t="utf8");;)switch(t){case"hex":return zF(this,e,r);case"utf8":case"utf-8":return b_(this,e,r);case"ascii":return jF(this,e,r);case"latin1":case"binary":return VF(this,e,r);case"base64":return UF(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return WF(this,e,r);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}F.prototype._isBuffer=!0;function ea(t,e,r){let i=t[e];t[e]=t[r],t[r]=i}F.prototype.swap16=function(){let e=this.length;if(e%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let r=0;rr&&(e+=" ... "),""};d_&&(F.prototype[d_]=F.prototype.inspect);F.prototype.compare=function(e,r,i,n,s){if(ln(e,Uint8Array)&&(e=F.from(e,e.offset,e.byteLength)),!F.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(r===void 0&&(r=0),i===void 0&&(i=e?e.length:0),n===void 0&&(n=0),s===void 0&&(s=this.length),r<0||i>e.length||n<0||s>this.length)throw new RangeError("out of range index");if(n>=s&&r>=i)return 0;if(n>=s)return-1;if(r>=i)return 1;if(r>>>=0,i>>>=0,n>>>=0,s>>>=0,this===e)return 0;let a=s-n,o=i-r,l=Math.min(a,o),c=this.slice(n,s),u=e.slice(r,i);for(let f=0;f2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,Xp(r)&&(r=n?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(n)return-1;r=t.length-1}else if(r<0)if(n)r=0;else return-1;if(typeof e=="string"&&(e=F.from(e,i)),F.isBuffer(e))return e.length===0?-1:h_(t,e,r,i,n);if(typeof e=="number")return e=e&255,typeof Uint8Array.prototype.indexOf=="function"?n?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):h_(t,[e],r,i,n);throw new TypeError("val must be string, number or Buffer")}function h_(t,e,r,i,n){let s=1,a=t.length,o=e.length;if(i!==void 0&&(i=String(i).toLowerCase(),i==="ucs2"||i==="ucs-2"||i==="utf16le"||i==="utf-16le")){if(t.length<2||e.length<2)return-1;s=2,a/=2,o/=2,r/=2}function l(u,f){return s===1?u[f]:u.readUInt16BE(f*s)}let c;if(n){let u=-1;for(c=r;ca&&(r=a-o),c=r;c>=0;c--){let u=!0;for(let f=0;fn&&(i=n)):i=n;let s=e.length;i>s/2&&(i=s/2);let a;for(a=0;a>>0,isFinite(i)?(i=i>>>0,n===void 0&&(n="utf8")):(n=i,i=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let s=this.length-r;if((i===void 0||i>s)&&(i=s),e.length>0&&(i<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let a=!1;for(;;)switch(n){case"hex":return OF(this,e,r,i);case"utf8":case"utf-8":return LF(this,e,r,i);case"ascii":case"latin1":case"binary":return NF(this,e,r,i);case"base64":return BF(this,e,r,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return HF(this,e,r,i);default:if(a)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),a=!0}};F.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function UF(t,e,r){return e===0&&r===t.length?Gp.fromByteArray(t):Gp.fromByteArray(t.slice(e,r))}function b_(t,e,r){r=Math.min(t.length,r);let i=[],n=e;for(;n239?4:s>223?3:s>191?2:1;if(n+o<=r){let l,c,u,f;switch(o){case 1:s<128&&(a=s);break;case 2:l=t[n+1],(l&192)===128&&(f=(s&31)<<6|l&63,f>127&&(a=f));break;case 3:l=t[n+1],c=t[n+2],(l&192)===128&&(c&192)===128&&(f=(s&15)<<12|(l&63)<<6|c&63,f>2047&&(f<55296||f>57343)&&(a=f));break;case 4:l=t[n+1],c=t[n+2],u=t[n+3],(l&192)===128&&(c&192)===128&&(u&192)===128&&(f=(s&15)<<18|(l&63)<<12|(c&63)<<6|u&63,f>65535&&f<1114112&&(a=f))}}a===null?(a=65533,o=1):a>65535&&(a-=65536,i.push(a>>>10&1023|55296),a=56320|a&1023),i.push(a),n+=o}return GF(i)}var p_=4096;function GF(t){let e=t.length;if(e<=p_)return String.fromCharCode.apply(String,t);let r="",i=0;for(;ii)&&(r=i);let n="";for(let s=e;si&&(e=i),r<0?(r+=i,r<0&&(r=0)):r>i&&(r=i),rr)throw new RangeError("Trying to access beyond buffer length")}F.prototype.readUintLE=F.prototype.readUIntLE=function(e,r,i){e=e>>>0,r=r>>>0,i||Ut(e,r,this.length);let n=this[e],s=1,a=0;for(;++a>>0,r=r>>>0,i||Ut(e,r,this.length);let n=this[e+--r],s=1;for(;r>0&&(s*=256);)n+=this[e+--r]*s;return n};F.prototype.readUint8=F.prototype.readUInt8=function(e,r){return e=e>>>0,r||Ut(e,1,this.length),this[e]};F.prototype.readUint16LE=F.prototype.readUInt16LE=function(e,r){return e=e>>>0,r||Ut(e,2,this.length),this[e]|this[e+1]<<8};F.prototype.readUint16BE=F.prototype.readUInt16BE=function(e,r){return e=e>>>0,r||Ut(e,2,this.length),this[e]<<8|this[e+1]};F.prototype.readUint32LE=F.prototype.readUInt32LE=function(e,r){return e=e>>>0,r||Ut(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216};F.prototype.readUint32BE=F.prototype.readUInt32BE=function(e,r){return e=e>>>0,r||Ut(e,4,this.length),this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])};F.prototype.readBigUInt64LE=vs(function(e){e=e>>>0,Eo(e,"offset");let r=this[e],i=this[e+7];(r===void 0||i===void 0)&&fc(e,this.length-8);let n=r+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24,s=this[++e]+this[++e]*2**8+this[++e]*2**16+i*2**24;return BigInt(n)+(BigInt(s)<>>0,Eo(e,"offset");let r=this[e],i=this[e+7];(r===void 0||i===void 0)&&fc(e,this.length-8);let n=r*2**24+this[++e]*2**16+this[++e]*2**8+this[++e],s=this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+i;return(BigInt(n)<>>0,r=r>>>0,i||Ut(e,r,this.length);let n=this[e],s=1,a=0;for(;++a=s&&(n-=Math.pow(2,8*r)),n};F.prototype.readIntBE=function(e,r,i){e=e>>>0,r=r>>>0,i||Ut(e,r,this.length);let n=r,s=1,a=this[e+--n];for(;n>0&&(s*=256);)a+=this[e+--n]*s;return s*=128,a>=s&&(a-=Math.pow(2,8*r)),a};F.prototype.readInt8=function(e,r){return e=e>>>0,r||Ut(e,1,this.length),this[e]&128?(255-this[e]+1)*-1:this[e]};F.prototype.readInt16LE=function(e,r){e=e>>>0,r||Ut(e,2,this.length);let i=this[e]|this[e+1]<<8;return i&32768?i|4294901760:i};F.prototype.readInt16BE=function(e,r){e=e>>>0,r||Ut(e,2,this.length);let i=this[e+1]|this[e]<<8;return i&32768?i|4294901760:i};F.prototype.readInt32LE=function(e,r){return e=e>>>0,r||Ut(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24};F.prototype.readInt32BE=function(e,r){return e=e>>>0,r||Ut(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]};F.prototype.readBigInt64LE=vs(function(e){e=e>>>0,Eo(e,"offset");let r=this[e],i=this[e+7];(r===void 0||i===void 0)&&fc(e,this.length-8);let n=this[e+4]+this[e+5]*2**8+this[e+6]*2**16+(i<<24);return(BigInt(n)<>>0,Eo(e,"offset");let r=this[e],i=this[e+7];(r===void 0||i===void 0)&&fc(e,this.length-8);let n=(r<<24)+this[++e]*2**16+this[++e]*2**8+this[++e];return(BigInt(n)<>>0,r||Ut(e,4,this.length),xo.read(this,e,!0,23,4)};F.prototype.readFloatBE=function(e,r){return e=e>>>0,r||Ut(e,4,this.length),xo.read(this,e,!1,23,4)};F.prototype.readDoubleLE=function(e,r){return e=e>>>0,r||Ut(e,8,this.length),xo.read(this,e,!0,52,8)};F.prototype.readDoubleBE=function(e,r){return e=e>>>0,r||Ut(e,8,this.length),xo.read(this,e,!1,52,8)};function Rr(t,e,r,i,n,s){if(!F.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>n||et.length)throw new RangeError("Index out of range")}F.prototype.writeUintLE=F.prototype.writeUIntLE=function(e,r,i,n){if(e=+e,r=r>>>0,i=i>>>0,!n){let o=Math.pow(2,8*i)-1;Rr(this,e,r,i,o,0)}let s=1,a=0;for(this[r]=e&255;++a>>0,i=i>>>0,!n){let o=Math.pow(2,8*i)-1;Rr(this,e,r,i,o,0)}let s=i-1,a=1;for(this[r+s]=e&255;--s>=0&&(a*=256);)this[r+s]=e/a&255;return r+i};F.prototype.writeUint8=F.prototype.writeUInt8=function(e,r,i){return e=+e,r=r>>>0,i||Rr(this,e,r,1,255,0),this[r]=e&255,r+1};F.prototype.writeUint16LE=F.prototype.writeUInt16LE=function(e,r,i){return e=+e,r=r>>>0,i||Rr(this,e,r,2,65535,0),this[r]=e&255,this[r+1]=e>>>8,r+2};F.prototype.writeUint16BE=F.prototype.writeUInt16BE=function(e,r,i){return e=+e,r=r>>>0,i||Rr(this,e,r,2,65535,0),this[r]=e>>>8,this[r+1]=e&255,r+2};F.prototype.writeUint32LE=F.prototype.writeUInt32LE=function(e,r,i){return e=+e,r=r>>>0,i||Rr(this,e,r,4,4294967295,0),this[r+3]=e>>>24,this[r+2]=e>>>16,this[r+1]=e>>>8,this[r]=e&255,r+4};F.prototype.writeUint32BE=F.prototype.writeUInt32BE=function(e,r,i){return e=+e,r=r>>>0,i||Rr(this,e,r,4,4294967295,0),this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=e&255,r+4};function y_(t,e,r,i,n){A_(e,i,n,t,r,7);let s=Number(e&BigInt(4294967295));t[r++]=s,s=s>>8,t[r++]=s,s=s>>8,t[r++]=s,s=s>>8,t[r++]=s;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=a,a=a>>8,t[r++]=a,a=a>>8,t[r++]=a,a=a>>8,t[r++]=a,r}function x_(t,e,r,i,n){A_(e,i,n,t,r,7);let s=Number(e&BigInt(4294967295));t[r+7]=s,s=s>>8,t[r+6]=s,s=s>>8,t[r+5]=s,s=s>>8,t[r+4]=s;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=a,a=a>>8,t[r+2]=a,a=a>>8,t[r+1]=a,a=a>>8,t[r]=a,r+8}F.prototype.writeBigUInt64LE=vs(function(e,r=0){return y_(this,e,r,BigInt(0),BigInt("0xffffffffffffffff"))});F.prototype.writeBigUInt64BE=vs(function(e,r=0){return x_(this,e,r,BigInt(0),BigInt("0xffffffffffffffff"))});F.prototype.writeIntLE=function(e,r,i,n){if(e=+e,r=r>>>0,!n){let l=Math.pow(2,8*i-1);Rr(this,e,r,i,l-1,-l)}let s=0,a=1,o=0;for(this[r]=e&255;++s>0)-o&255;return r+i};F.prototype.writeIntBE=function(e,r,i,n){if(e=+e,r=r>>>0,!n){let l=Math.pow(2,8*i-1);Rr(this,e,r,i,l-1,-l)}let s=i-1,a=1,o=0;for(this[r+s]=e&255;--s>=0&&(a*=256);)e<0&&o===0&&this[r+s+1]!==0&&(o=1),this[r+s]=(e/a>>0)-o&255;return r+i};F.prototype.writeInt8=function(e,r,i){return e=+e,r=r>>>0,i||Rr(this,e,r,1,127,-128),e<0&&(e=255+e+1),this[r]=e&255,r+1};F.prototype.writeInt16LE=function(e,r,i){return e=+e,r=r>>>0,i||Rr(this,e,r,2,32767,-32768),this[r]=e&255,this[r+1]=e>>>8,r+2};F.prototype.writeInt16BE=function(e,r,i){return e=+e,r=r>>>0,i||Rr(this,e,r,2,32767,-32768),this[r]=e>>>8,this[r+1]=e&255,r+2};F.prototype.writeInt32LE=function(e,r,i){return e=+e,r=r>>>0,i||Rr(this,e,r,4,2147483647,-2147483648),this[r]=e&255,this[r+1]=e>>>8,this[r+2]=e>>>16,this[r+3]=e>>>24,r+4};F.prototype.writeInt32BE=function(e,r,i){return e=+e,r=r>>>0,i||Rr(this,e,r,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=e&255,r+4};F.prototype.writeBigInt64LE=vs(function(e,r=0){return y_(this,e,r,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});F.prototype.writeBigInt64BE=vs(function(e,r=0){return x_(this,e,r,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function E_(t,e,r,i,n,s){if(r+i>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function S_(t,e,r,i,n){return e=+e,r=r>>>0,n||E_(t,e,r,4,34028234663852886e22,-34028234663852886e22),xo.write(t,e,r,i,23,4),r+4}F.prototype.writeFloatLE=function(e,r,i){return S_(this,e,r,!0,i)};F.prototype.writeFloatBE=function(e,r,i){return S_(this,e,r,!1,i)};function k_(t,e,r,i,n){return e=+e,r=r>>>0,n||E_(t,e,r,8,17976931348623157e292,-17976931348623157e292),xo.write(t,e,r,i,52,8),r+8}F.prototype.writeDoubleLE=function(e,r,i){return k_(this,e,r,!0,i)};F.prototype.writeDoubleBE=function(e,r,i){return k_(this,e,r,!1,i)};F.prototype.copy=function(e,r,i,n){if(!F.isBuffer(e))throw new TypeError("argument should be a Buffer");if(i||(i=0),!n&&n!==0&&(n=this.length),r>=e.length&&(r=e.length),r||(r=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-r>>0,i=i===void 0?this.length:i>>>0,e||(e=0);let s;if(typeof e=="number")for(s=r;s2**32?n=m_(String(r)):typeof r=="bigint"&&(n=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(n=m_(n)),n+="n"),i+=` It must be ${e}. Received ${n}`,i},RangeError);function m_(t){let e="",r=t.length,i=t[0]==="-"?1:0;for(;r>=i+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return`${t.slice(0,r)}${e}`}function qF(t,e,r){Eo(e,"offset"),(t[e]===void 0||t[e+r]===void 0)&&fc(e,t.length-(r+1))}function A_(t,e,r,i,n,s){if(t>r||t3?e===0||e===BigInt(0)?o=`>= 0${a} and < 2${a} ** ${(s+1)*8}${a}`:o=`>= -(2${a} ** ${(s+1)*8-1}${a}) and < 2 ** ${(s+1)*8-1}${a}`:o=`>= ${e}${a} and <= ${r}${a}`,new yo.ERR_OUT_OF_RANGE("value",o,t)}qF(i,n,s)}function Eo(t,e){if(typeof t!="number")throw new yo.ERR_INVALID_ARG_TYPE(e,"number",t)}function fc(t,e,r){throw Math.floor(t)!==t?(Eo(t,r),new yo.ERR_OUT_OF_RANGE(r||"offset","an integer",t)):e<0?new yo.ERR_BUFFER_OUT_OF_BOUNDS:new yo.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${e}`,t)}var YF=/[^+/0-9A-Za-z-_]/g;function XF(t){if(t=t.split("=")[0],t=t.trim().replace(YF,""),t.length<2)return"";for(;t.length%4!==0;)t=t+"=";return t}function zp(t,e){e=e||1/0;let r,i=t.length,n=null,s=[];for(let a=0;a55295&&r<57344){if(!n){if(r>56319){(e-=3)>-1&&s.push(239,191,189);continue}else if(a+1===i){(e-=3)>-1&&s.push(239,191,189);continue}n=r;continue}if(r<56320){(e-=3)>-1&&s.push(239,191,189),n=r;continue}r=(n-55296<<10|r-56320)+65536}else n&&(e-=3)>-1&&s.push(239,191,189);if(n=null,r<128){if((e-=1)<0)break;s.push(r)}else if(r<2048){if((e-=2)<0)break;s.push(r>>6|192,r&63|128)}else if(r<65536){if((e-=3)<0)break;s.push(r>>12|224,r>>6&63|128,r&63|128)}else if(r<1114112){if((e-=4)<0)break;s.push(r>>18|240,r>>12&63|128,r>>6&63|128,r&63|128)}else throw new Error("Invalid code point")}return s}function ZF(t){let e=[];for(let r=0;r>8,n=r%256,s.push(n),s.push(i);return s}function C_(t){return Gp.toByteArray(XF(t))}function _f(t,e,r,i){let n;for(n=0;n=e.length||n>=t.length);++n)e[n+r]=t[n];return n}function ln(t,e){return t instanceof e||t!=null&&t.constructor!=null&&t.constructor.name!=null&&t.constructor.name===e.name}function Xp(t){return t!==t}var QF=function(){let t="0123456789abcdef",e=new Array(256);for(let r=0;r<16;++r){let i=r*16;for(let n=0;n<16;++n)e[i+n]=t[r]+t[n]}return e}();function vs(t){return typeof BigInt=="undefined"?JF:t}function JF(){throw new Error("BigInt not supported")}});var T_,Kp,Buffer,m=_F(()=>{T_=require("obsidian");T_.Platform.isMobileApp?Kp=Zp().Buffer:Kp=global.Buffer;Buffer=Kp});var R_=H((hG,P_)=>{"use strict";m();var Yr=function(t){if(t=t||{},this.Promise=t.Promise||Promise,this.queues=Object.create(null),this.domainReentrant=t.domainReentrant||!1,this.domainReentrant){if(typeof process=="undefined"||typeof process.domain=="undefined")throw new Error("Domain-reentrant locks require `process.domain` to exist. Please flip `opts.domainReentrant = false`, use a NodeJS version that still implements Domain, or install a browser polyfill.");this.domains=Object.create(null)}this.timeout=t.timeout||Yr.DEFAULT_TIMEOUT,this.maxOccupationTime=t.maxOccupationTime||Yr.DEFAULT_MAX_OCCUPATION_TIME,this.maxExecutionTime=t.maxExecutionTime||Yr.DEFAULT_MAX_EXECUTION_TIME,t.maxPending===1/0||Number.isInteger(t.maxPending)&&t.maxPending>=0?this.maxPending=t.maxPending:this.maxPending=Yr.DEFAULT_MAX_PENDING};Yr.DEFAULT_TIMEOUT=0;Yr.DEFAULT_MAX_OCCUPATION_TIME=0;Yr.DEFAULT_MAX_EXECUTION_TIME=0;Yr.DEFAULT_MAX_PENDING=1e3;Yr.prototype.acquire=function(t,e,r,i){if(Array.isArray(t))return this._acquireBatch(t,e,r,i);if(typeof e!="function")throw new Error("You must pass a function to execute");var n=null,s=null,a=null;typeof r!="function"&&(i=r,r=null,a=new this.Promise(function(b,S){n=b,s=S})),i=i||{};var o=!1,l=null,c=null,u=null,f=this,d=function(b,S,k){c&&(clearTimeout(c),c=null),u&&(clearTimeout(u),u=null),b&&(f.queues[t]&&f.queues[t].length===0&&delete f.queues[t],f.domainReentrant&&delete f.domains[t]),o||(a?S?s(S):n(k):typeof r=="function"&&r(S,k),o=!0),b&&f.queues[t]&&f.queues[t].length>0&&f.queues[t].shift()()},h=function(b){if(o)return d(b);l&&(clearTimeout(l),l=null),f.domainReentrant&&b&&(f.domains[t]=process.domain);var S=i.maxExecutionTime||f.maxExecutionTime;if(S&&(u=setTimeout(function(){f.queues[t]&&d(b,new Error("Maximum execution time is exceeded "+t))},S)),e.length===1){var k=!1;try{e(function(E,A){k||(k=!0,d(b,E,A))})}catch(E){k||(k=!0,d(b,E))}}else f._promiseTry(function(){return e()}).then(function(E){d(b,void 0,E)},function(E){d(b,E)})};f.domainReentrant&&process.domain&&(h=process.domain.bind(h));var p=i.maxPending||f.maxPending;if(!f.queues[t])f.queues[t]=[],h(!0);else if(f.domainReentrant&&process.domain&&process.domain===f.domains[t])h(!1);else if(f.queues[t].length>=p)d(!1,new Error("Too many pending tasks in queue "+t));else{var g=function(){h(!0)};i.skipQueue?f.queues[t].unshift(g):f.queues[t].push(g);var v=i.timeout||f.timeout;v&&(l=setTimeout(function(){l=null,d(!1,new Error("async-lock timed out in queue "+t))},v))}var _=i.maxOccupationTime||f.maxOccupationTime;if(_&&(c=setTimeout(function(){f.queues[t]&&d(!1,new Error("Maximum occupation time is exceeded in queue "+t))},_)),a)return a};Yr.prototype._acquireBatch=function(t,e,r,i){typeof r!="function"&&(i=r,r=null);var n=this,s=function(o,l){return function(c){n.acquire(o,l,c,i)}},a=t.reduceRight(function(o,l){return s(l,o)},e);if(typeof r=="function")a(r);else return new this.Promise(function(o,l){a.length===1?a(function(c,u){c?l(c):o(u)}):o(a())})};Yr.prototype.isBusy=function(t){return t?!!this.queues[t]:Object.keys(this.queues).length>0};Yr.prototype._promiseTry=function(t){try{return this.Promise.resolve(t())}catch(e){return this.Promise.reject(e)}};P_.exports=Yr});var F_=H((mG,$_)=>{"use strict";m();$_.exports=R_()});var I_=H((vG,Qp)=>{m();typeof Object.create=="function"?Qp.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:Qp.exports=function(e,r){if(r){e.super_=r;var i=function(){};i.prototype=r.prototype,e.prototype=new i,e.prototype.constructor=e}}});var yf=H((Jp,D_)=>{m();var bf=Zp(),cn=bf.Buffer;function M_(t,e){for(var r in t)e[r]=t[r]}cn.from&&cn.alloc&&cn.allocUnsafe&&cn.allocUnsafeSlow?D_.exports=bf:(M_(bf,Jp),Jp.Buffer=ta);function ta(t,e,r){return cn(t,e,r)}ta.prototype=Object.create(cn.prototype);M_(cn,ta);ta.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return cn(t,e,r)};ta.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var i=cn(t);return e!==void 0?typeof r=="string"?i.fill(e,r):i.fill(e):i.fill(0),i};ta.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return cn(t)};ta.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return bf.SlowBuffer(t)}});var L_=H((bG,O_)=>{m();var eI={}.toString;O_.exports=Array.isArray||function(t){return eI.call(t)=="[object Array]"}});var ko=H((xG,N_)=>{"use strict";m();N_.exports=TypeError});var em=H((SG,B_)=>{"use strict";m();B_.exports=Object});var U_=H((AG,H_)=>{"use strict";m();H_.exports=Error});var j_=H((TG,G_)=>{"use strict";m();G_.exports=EvalError});var z_=H((RG,V_)=>{"use strict";m();V_.exports=RangeError});var q_=H((FG,W_)=>{"use strict";m();W_.exports=ReferenceError});var tm=H((MG,Y_)=>{"use strict";m();Y_.exports=SyntaxError});var Z_=H((OG,X_)=>{"use strict";m();X_.exports=URIError});var Q_=H((NG,K_)=>{"use strict";m();K_.exports=Math.abs});var eb=H((HG,J_)=>{"use strict";m();J_.exports=Math.floor});var rb=H((GG,tb)=>{"use strict";m();tb.exports=Math.max});var nb=H((VG,ib)=>{"use strict";m();ib.exports=Math.min});var ab=H((WG,sb)=>{"use strict";m();sb.exports=Math.pow});var lb=H((YG,ob)=>{"use strict";m();ob.exports=Math.round});var ub=H((ZG,cb)=>{"use strict";m();cb.exports=Number.isNaN||function(e){return e!==e}});var db=H((QG,fb)=>{"use strict";m();var tI=ub();fb.exports=function(e){return tI(e)||e===0?e:e<0?-1:1}});var pb=H((ej,hb)=>{"use strict";m();hb.exports=Object.getOwnPropertyDescriptor});var Ao=H((rj,mb)=>{"use strict";m();var xf=pb();if(xf)try{xf([],"length")}catch(t){xf=null}mb.exports=xf});var dc=H((nj,gb)=>{"use strict";m();var Ef=Object.defineProperty||!1;if(Ef)try{Ef({},"a",{value:1})}catch(t){Ef=!1}gb.exports=Ef});var rm=H((aj,vb)=>{"use strict";m();vb.exports=function(){if(typeof Symbol!="function"||typeof Object.getOwnPropertySymbols!="function")return!1;if(typeof Symbol.iterator=="symbol")return!0;var e={},r=Symbol("test"),i=Object(r);if(typeof r=="string"||Object.prototype.toString.call(r)!=="[object Symbol]"||Object.prototype.toString.call(i)!=="[object Symbol]")return!1;var n=42;e[r]=n;for(var s in e)return!1;if(typeof Object.keys=="function"&&Object.keys(e).length!==0||typeof Object.getOwnPropertyNames=="function"&&Object.getOwnPropertyNames(e).length!==0)return!1;var a=Object.getOwnPropertySymbols(e);if(a.length!==1||a[0]!==r||!Object.prototype.propertyIsEnumerable.call(e,r))return!1;if(typeof Object.getOwnPropertyDescriptor=="function"){var o=Object.getOwnPropertyDescriptor(e,r);if(o.value!==n||o.enumerable!==!0)return!1}return!0}});var bb=H((lj,_b)=>{"use strict";m();var wb=typeof Symbol!="undefined"&&Symbol,rI=rm();_b.exports=function(){return typeof wb!="function"||typeof Symbol!="function"||typeof wb("foo")!="symbol"||typeof Symbol("bar")!="symbol"?!1:rI()}});var im=H((uj,yb)=>{"use strict";m();yb.exports=typeof Reflect!="undefined"&&Reflect.getPrototypeOf||null});var nm=H((dj,xb)=>{"use strict";m();var iI=em();xb.exports=iI.getPrototypeOf||null});var kb=H((pj,Sb)=>{"use strict";m();var nI="Function.prototype.bind called on incompatible ",sI=Object.prototype.toString,aI=Math.max,oI="[object Function]",Eb=function(e,r){for(var i=[],n=0;n{"use strict";m();var uI=kb();Ab.exports=Function.prototype.bind||uI});var Sf=H((wj,Cb)=>{"use strict";m();Cb.exports=Function.prototype.call});var kf=H((bj,Tb)=>{"use strict";m();Tb.exports=Function.prototype.apply});var Rb=H((xj,Pb)=>{"use strict";m();Pb.exports=typeof Reflect!="undefined"&&Reflect&&Reflect.apply});var sm=H((Sj,$b)=>{"use strict";m();var fI=Co(),dI=kf(),hI=Sf(),pI=Rb();$b.exports=pI||fI.call(hI,dI)});var Af=H((Aj,Fb)=>{"use strict";m();var mI=Co(),gI=ko(),vI=Sf(),wI=sm();Fb.exports=function(e){if(e.length<1||typeof e[0]!="function")throw new gI("a function is required");return wI(mI,vI,e)}});var Nb=H((Tj,Lb)=>{"use strict";m();var _I=Af(),Ib=Ao(),Db;try{Db=[].__proto__===Array.prototype}catch(t){if(!t||typeof t!="object"||!("code"in t)||t.code!=="ERR_PROTO_ACCESS")throw t}var am=!!Db&&Ib&&Ib(Object.prototype,"__proto__"),Ob=Object,Mb=Ob.getPrototypeOf;Lb.exports=am&&typeof am.get=="function"?_I([am.get]):typeof Mb=="function"?function(e){return Mb(e==null?e:Ob(e))}:!1});var om=H((Rj,Gb)=>{"use strict";m();var Bb=im(),Hb=nm(),Ub=Nb();Gb.exports=Bb?function(e){return Bb(e)}:Hb?function(e){if(!e||typeof e!="object"&&typeof e!="function")throw new TypeError("getProto: not an object");return Hb(e)}:Ub?function(e){return Ub(e)}:null});var Vb=H((Fj,jb)=>{"use strict";m();var bI=Function.prototype.call,yI=Object.prototype.hasOwnProperty,xI=Co();jb.exports=xI.call(bI,yI)});var um=H((Mj,Zb)=>{"use strict";m();var Ae,EI=em(),SI=U_(),kI=j_(),AI=z_(),CI=q_(),$o=tm(),Ro=ko(),TI=Z_(),PI=Q_(),RI=eb(),$I=rb(),FI=nb(),II=ab(),MI=lb(),DI=db(),Yb=Function,lm=function(t){try{return Yb('"use strict"; return ('+t+").constructor;")()}catch(e){}},hc=Ao(),OI=dc(),cm=function(){throw new Ro},LI=hc?function(){try{return arguments.callee,cm}catch(t){try{return hc(arguments,"callee").get}catch(e){return cm}}}():cm,To=bb()(),Gt=om(),NI=nm(),BI=im(),Xb=kf(),pc=Sf(),Po={},HI=typeof Uint8Array=="undefined"||!Gt?Ae:Gt(Uint8Array),ra={__proto__:null,"%AggregateError%":typeof AggregateError=="undefined"?Ae:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer=="undefined"?Ae:ArrayBuffer,"%ArrayIteratorPrototype%":To&&Gt?Gt([][Symbol.iterator]()):Ae,"%AsyncFromSyncIteratorPrototype%":Ae,"%AsyncFunction%":Po,"%AsyncGenerator%":Po,"%AsyncGeneratorFunction%":Po,"%AsyncIteratorPrototype%":Po,"%Atomics%":typeof Atomics=="undefined"?Ae:Atomics,"%BigInt%":typeof BigInt=="undefined"?Ae:BigInt,"%BigInt64Array%":typeof BigInt64Array=="undefined"?Ae:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array=="undefined"?Ae:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView=="undefined"?Ae:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":SI,"%eval%":eval,"%EvalError%":kI,"%Float16Array%":typeof Float16Array=="undefined"?Ae:Float16Array,"%Float32Array%":typeof Float32Array=="undefined"?Ae:Float32Array,"%Float64Array%":typeof Float64Array=="undefined"?Ae:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry=="undefined"?Ae:FinalizationRegistry,"%Function%":Yb,"%GeneratorFunction%":Po,"%Int8Array%":typeof Int8Array=="undefined"?Ae:Int8Array,"%Int16Array%":typeof Int16Array=="undefined"?Ae:Int16Array,"%Int32Array%":typeof Int32Array=="undefined"?Ae:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":To&&Gt?Gt(Gt([][Symbol.iterator]())):Ae,"%JSON%":typeof JSON=="object"?JSON:Ae,"%Map%":typeof Map=="undefined"?Ae:Map,"%MapIteratorPrototype%":typeof Map=="undefined"||!To||!Gt?Ae:Gt(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":EI,"%Object.getOwnPropertyDescriptor%":hc,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise=="undefined"?Ae:Promise,"%Proxy%":typeof Proxy=="undefined"?Ae:Proxy,"%RangeError%":AI,"%ReferenceError%":CI,"%Reflect%":typeof Reflect=="undefined"?Ae:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set=="undefined"?Ae:Set,"%SetIteratorPrototype%":typeof Set=="undefined"||!To||!Gt?Ae:Gt(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer=="undefined"?Ae:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":To&&Gt?Gt(""[Symbol.iterator]()):Ae,"%Symbol%":To?Symbol:Ae,"%SyntaxError%":$o,"%ThrowTypeError%":LI,"%TypedArray%":HI,"%TypeError%":Ro,"%Uint8Array%":typeof Uint8Array=="undefined"?Ae:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray=="undefined"?Ae:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array=="undefined"?Ae:Uint16Array,"%Uint32Array%":typeof Uint32Array=="undefined"?Ae:Uint32Array,"%URIError%":TI,"%WeakMap%":typeof WeakMap=="undefined"?Ae:WeakMap,"%WeakRef%":typeof WeakRef=="undefined"?Ae:WeakRef,"%WeakSet%":typeof WeakSet=="undefined"?Ae:WeakSet,"%Function.prototype.call%":pc,"%Function.prototype.apply%":Xb,"%Object.defineProperty%":OI,"%Object.getPrototypeOf%":NI,"%Math.abs%":PI,"%Math.floor%":RI,"%Math.max%":$I,"%Math.min%":FI,"%Math.pow%":II,"%Math.round%":MI,"%Math.sign%":DI,"%Reflect.getPrototypeOf%":BI};if(Gt)try{null.error}catch(t){zb=Gt(Gt(t)),ra["%Error.prototype%"]=zb}var zb,UI=function t(e){var r;if(e==="%AsyncFunction%")r=lm("async function () {}");else if(e==="%GeneratorFunction%")r=lm("function* () {}");else if(e==="%AsyncGeneratorFunction%")r=lm("async function* () {}");else if(e==="%AsyncGenerator%"){var i=t("%AsyncGeneratorFunction%");i&&(r=i.prototype)}else if(e==="%AsyncIteratorPrototype%"){var n=t("%AsyncGenerator%");n&&Gt&&(r=Gt(n.prototype))}return ra[e]=r,r},Wb={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},mc=Co(),Cf=Vb(),GI=mc.call(pc,Array.prototype.concat),jI=mc.call(Xb,Array.prototype.splice),qb=mc.call(pc,String.prototype.replace),Tf=mc.call(pc,String.prototype.slice),VI=mc.call(pc,RegExp.prototype.exec),zI=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,WI=/\\(\\)?/g,qI=function(e){var r=Tf(e,0,1),i=Tf(e,-1);if(r==="%"&&i!=="%")throw new $o("invalid intrinsic syntax, expected closing `%`");if(i==="%"&&r!=="%")throw new $o("invalid intrinsic syntax, expected opening `%`");var n=[];return qb(e,zI,function(s,a,o,l){n[n.length]=o?qb(l,WI,"$1"):a||s}),n},YI=function(e,r){var i=e,n;if(Cf(Wb,i)&&(n=Wb[i],i="%"+n[0]+"%"),Cf(ra,i)){var s=ra[i];if(s===Po&&(s=UI(i)),typeof s=="undefined"&&!r)throw new Ro("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:i,value:s}}throw new $o("intrinsic "+e+" does not exist!")};Zb.exports=function(e,r){if(typeof e!="string"||e.length===0)throw new Ro("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof r!="boolean")throw new Ro('"allowMissing" argument must be a boolean');if(VI(/^%?[^%]*%?$/,e)===null)throw new $o("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var i=qI(e),n=i.length>0?i[0]:"",s=YI("%"+n+"%",r),a=s.name,o=s.value,l=!1,c=s.alias;c&&(n=c[0],jI(i,GI([0,1],c)));for(var u=1,f=!0;u=i.length){var g=hc(o,d);f=!!g,f&&"get"in g&&!("originalValue"in g.get)?o=g.get:o=o[d]}else f=Cf(o,d),o=o[d];f&&!l&&(ra[a]=o)}}return o}});var fm=H((Oj,Jb)=>{"use strict";m();var Kb=um(),Qb=Af(),XI=Qb([Kb("%String.prototype.indexOf%")]);Jb.exports=function(e,r){var i=Kb(e,!!r);return typeof i=="function"&&XI(e,".prototype.")>-1?Qb([i]):i}});var iy=H((Nj,ry)=>{"use strict";m();var ty=Function.prototype.toString,Fo=typeof Reflect=="object"&&Reflect!==null&&Reflect.apply,hm,Pf;if(typeof Fo=="function"&&typeof Object.defineProperty=="function")try{hm=Object.defineProperty({},"length",{get:function(){throw Pf}}),Pf={},Fo(function(){throw 42},null,hm)}catch(t){t!==Pf&&(Fo=null)}else Fo=null;var ZI=/^\s*class\b/,pm=function(e){try{var r=ty.call(e);return ZI.test(r)}catch(i){return!1}},dm=function(e){try{return pm(e)?!1:(ty.call(e),!0)}catch(r){return!1}},Rf=Object.prototype.toString,KI="[object Object]",QI="[object Function]",JI="[object GeneratorFunction]",eM="[object HTMLAllCollection]",tM="[object HTML document.all class]",rM="[object HTMLCollection]",iM=typeof Symbol=="function"&&!!Symbol.toStringTag,nM=!(0 in[,]),mm=function(){return!1};typeof document=="object"&&(ey=document.all,Rf.call(ey)===Rf.call(document.all)&&(mm=function(e){if((nM||!e)&&(typeof e=="undefined"||typeof e=="object"))try{var r=Rf.call(e);return(r===eM||r===tM||r===rM||r===KI)&&e("")==null}catch(i){}return!1}));var ey;ry.exports=Fo?function(e){if(mm(e))return!0;if(!e||typeof e!="function"&&typeof e!="object")return!1;try{Fo(e,null,hm)}catch(r){if(r!==Pf)return!1}return!pm(e)&&dm(e)}:function(e){if(mm(e))return!0;if(!e||typeof e!="function"&&typeof e!="object")return!1;if(iM)return dm(e);if(pm(e))return!1;var r=Rf.call(e);return r!==QI&&r!==JI&&!/^\[object HTML/.test(r)?!1:dm(e)}});var ay=H((Hj,sy)=>{"use strict";m();var sM=iy(),aM=Object.prototype.toString,ny=Object.prototype.hasOwnProperty,oM=function(e,r,i){for(var n=0,s=e.length;n=3&&(n=i),uM(e)?oM(e,r,n):typeof e=="string"?lM(e,r,n):cM(e,r,n)}});var ly=H((Gj,oy)=>{"use strict";m();oy.exports=["Float16Array","Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array"]});var uy=H((Vj,cy)=>{"use strict";m();var gm=ly(),fM=typeof globalThis=="undefined"?global:globalThis;cy.exports=function(){for(var e=[],r=0;r{"use strict";m();var fy=dc(),dM=tm(),Io=ko(),dy=Ao();hy.exports=function(e,r,i){if(!e||typeof e!="object"&&typeof e!="function")throw new Io("`obj` must be an object or a function`");if(typeof r!="string"&&typeof r!="symbol")throw new Io("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new Io("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new Io("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new Io("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new Io("`loose`, if provided, must be a boolean");var n=arguments.length>3?arguments[3]:null,s=arguments.length>4?arguments[4]:null,a=arguments.length>5?arguments[5]:null,o=arguments.length>6?arguments[6]:!1,l=!!dy&&dy(e,r);if(fy)fy(e,r,{configurable:a===null&&l?l.configurable:!a,enumerable:n===null&&l?l.enumerable:!n,value:i,writable:s===null&&l?l.writable:!s});else if(o||!n&&!s&&!a)e[r]=i;else throw new dM("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")}});var vy=H((Yj,gy)=>{"use strict";m();var vm=dc(),my=function(){return!!vm};my.hasArrayLengthDefineBug=function(){if(!vm)return null;try{return vm([],"length",{value:1}).length!==1}catch(e){return!0}};gy.exports=my});var xy=H((Zj,yy)=>{"use strict";m();var hM=um(),wy=py(),pM=vy()(),_y=Ao(),by=ko(),mM=hM("%Math.floor%");yy.exports=function(e,r){if(typeof e!="function")throw new by("`fn` is not a function");if(typeof r!="number"||r<0||r>4294967295||mM(r)!==r)throw new by("`length` must be a positive 32-bit integer");var i=arguments.length>2&&!!arguments[2],n=!0,s=!0;if("length"in e&&_y){var a=_y(e,"length");a&&!a.configurable&&(n=!1),a&&!a.writable&&(s=!1)}return(n||s||!i)&&(pM?wy(e,"length",r,!0,!0):wy(e,"length",r)),e}});var Sy=H((Qj,Ey)=>{"use strict";m();var gM=Co(),vM=kf(),wM=sm();Ey.exports=function(){return wM(gM,vM,arguments)}});var Cy=H((eV,$f)=>{"use strict";m();var _M=xy(),ky=dc(),bM=Af(),Ay=Sy();$f.exports=function(e){var r=bM(arguments),i=1+e.length-(arguments.length-1);return _M(r,i>0?i:0,!0)};ky?ky($f.exports,"apply",{value:Ay}):$f.exports.apply=Ay});var Py=H((rV,Ty)=>{"use strict";m();var yM=rm();Ty.exports=function(){return yM()&&!!Symbol.toStringTag}});var My=H((nV,Iy)=>{"use strict";m();var Mf=ay(),xM=uy(),Ry=Cy(),_m=fm(),If=Ao(),Ff=om(),EM=_m("Object.prototype.toString"),Fy=Py()(),$y=typeof globalThis=="undefined"?global:globalThis,wm=xM(),bm=_m("String.prototype.slice"),SM=_m("Array.prototype.indexOf",!0)||function(e,r){for(var i=0;i-1?r:r!=="Object"?!1:AM(e)}return If?kM(e):null}});var Oy=H((aV,Dy)=>{"use strict";m();var CM=My();Dy.exports=function(e){return!!CM(e)}});var Ny=H((lV,Ly)=>{"use strict";m();var TM=ko(),PM=fm(),RM=PM("TypedArray.prototype.buffer",!0),$M=Oy();Ly.exports=RM||function(e){if(!$M(e))throw new TM("Not a Typed Array");return e.buffer}});var Uy=H((uV,Hy)=>{"use strict";m();var Ni=yf().Buffer,FM=L_(),IM=Ny(),MM=ArrayBuffer.isView||function(e){try{return IM(e),!0}catch(r){return!1}},DM=typeof Uint8Array!="undefined",By=typeof ArrayBuffer!="undefined"&&typeof Uint8Array!="undefined",OM=By&&(Ni.prototype instanceof Uint8Array||Ni.TYPED_ARRAY_SUPPORT);Hy.exports=function(e,r){if(Ni.isBuffer(e))return e.constructor&&!("isBuffer"in e)?Ni.from(e):e;if(typeof e=="string")return Ni.from(e,r);if(By&&MM(e)){if(e.byteLength===0)return Ni.alloc(0);if(OM){var i=Ni.from(e.buffer,e.byteOffset,e.byteLength);if(i.byteLength===e.byteLength)return i}var n=e instanceof Uint8Array?e:new Uint8Array(e.buffer,e.byteOffset,e.byteLength),s=Ni.from(n);if(s.length===e.byteLength)return s}if(DM&&e instanceof Uint8Array)return Ni.from(e);var a=FM(e);if(a)for(var o=0;o255||~~l!==l)throw new RangeError("Array items must be numbers in the range 0-255.")}if(a||Ni.isBuffer(e)&&e.constructor&&typeof e.constructor.isBuffer=="function"&&e.constructor.isBuffer(e))return Ni.from(e);throw new TypeError('The "data" argument must be a string, an Array, a Buffer, a Uint8Array, or a DataView.')}});var jy=H((dV,Gy)=>{"use strict";m();var LM=yf().Buffer,NM=Uy();function Of(t,e){this._block=LM.alloc(t),this._finalSize=e,this._blockSize=t,this._len=0}Of.prototype.update=function(t,e){t=NM(t,e||"utf8");for(var r=this._block,i=this._blockSize,n=t.length,s=this._len,a=0;a=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=this._len*8;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var i=(r&4294967295)>>>0,n=(r-i)/4294967296;this._block.writeUInt32BE(n,this._blockSize-8),this._block.writeUInt32BE(i,this._blockSize-4)}this._update(this._block);var s=this._hash();return t?s.toString(t):s};Of.prototype._update=function(){throw new Error("_update must be implemented by subclass")};Gy.exports=Of});var Wy=H((pV,zy)=>{"use strict";m();var BM=I_(),Vy=jy(),HM=yf().Buffer,UM=[1518500249,1859775393,-1894007588,-899497514],GM=new Array(80);function gc(){this.init(),this._w=GM,Vy.call(this,64,56)}BM(gc,Vy);gc.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function jM(t){return t<<1|t>>>31}function VM(t){return t<<5|t>>>27}function zM(t){return t<<30|t>>>2}function WM(t,e,r,i){return t===0?e&r|~e&i:t===2?e&r|e&i|r&i:e^r^i}gc.prototype._update=function(t){for(var e=this._w,r=this._a|0,i=this._b|0,n=this._c|0,s=this._d|0,a=this._e|0,o=0;o<16;++o)e[o]=t.readInt32BE(o*4);for(;o<80;++o)e[o]=jM(e[o-3]^e[o-8]^e[o-14]^e[o-16]);for(var l=0;l<80;++l){var c=~~(l/20),u=VM(r)+WM(c,i,n,s)+a+e[l]+UM[c]|0;a=s,s=n,n=zM(i),i=r,r=u}this._a=r+this._a|0,this._b=i+this._b|0,this._c=n+this._c|0,this._d=s+this._d|0,this._e=a+this._e|0};gc.prototype._hash=function(){var t=HM.allocUnsafe(20);return t.writeInt32BE(this._a|0,0),t.writeInt32BE(this._b|0,4),t.writeInt32BE(this._c|0,8),t.writeInt32BE(this._d|0,12),t.writeInt32BE(this._e|0,16),t};zy.exports=gc});var Yy=H(ym=>{m();var qy;(function(t){typeof DO_NOT_EXPORT_CRC=="undefined"?typeof ym=="object"?t(ym):typeof define=="function"&&define.amd?define(function(){var e={};return t(e),e}):t(qy={}):t(qy={})})(function(t){t.version="1.2.2";function e(){for(var w=0,x=new Array(256),y=0;y!=256;++y)w=y,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,x[y]=w;return typeof Int32Array!="undefined"?new Int32Array(x):x}var r=e();function i(w){var x=0,y=0,C=0,P=typeof Int32Array!="undefined"?new Int32Array(4096):new Array(4096);for(C=0;C!=256;++C)P[C]=w[C];for(C=0;C!=256;++C)for(y=w[C],x=256+C;x<4096;x+=256)y=P[x]=y>>>8^w[y&255];var L=[];for(C=1;C!=16;++C)L[C-1]=typeof Int32Array!="undefined"?P.subarray(C*256,C*256+256):P.slice(C*256,C*256+256);return L}var n=i(r),s=n[0],a=n[1],o=n[2],l=n[3],c=n[4],u=n[5],f=n[6],d=n[7],h=n[8],p=n[9],g=n[10],v=n[11],_=n[12],b=n[13],S=n[14];function k(w,x){for(var y=x^-1,C=0,P=w.length;C>>8^r[(y^w.charCodeAt(C++))&255];return~y}function E(w,x){for(var y=x^-1,C=w.length-15,P=0;P>8&255]^_[w[P++]^y>>16&255]^v[w[P++]^y>>>24]^g[w[P++]]^p[w[P++]]^h[w[P++]]^d[w[P++]]^f[w[P++]]^u[w[P++]]^c[w[P++]]^l[w[P++]]^o[w[P++]]^a[w[P++]]^s[w[P++]]^r[w[P++]];for(C+=15;P>>8^r[(y^w[P++])&255];return~y}function A(w,x){for(var y=x^-1,C=0,P=w.length,L=0,N=0;C>>8^r[(y^L)&255]:L<2048?(y=y>>>8^r[(y^(192|L>>6&31))&255],y=y>>>8^r[(y^(128|L&63))&255]):L>=55296&&L<57344?(L=(L&1023)+64,N=w.charCodeAt(C++)&1023,y=y>>>8^r[(y^(240|L>>8&7))&255],y=y>>>8^r[(y^(128|L>>2&63))&255],y=y>>>8^r[(y^(128|N>>6&15|(L&3)<<4))&255],y=y>>>8^r[(y^(128|N&63))&255]):(y=y>>>8^r[(y^(224|L>>12&15))&255],y=y>>>8^r[(y^(128|L>>6&63))&255],y=y>>>8^r[(y^(128|L&63))&255]);return~y}t.table=r,t.bstr=k,t.buf=E,t.str=A})});var Vn=H(_r=>{"use strict";m();var qM=typeof Uint8Array!="undefined"&&typeof Uint16Array!="undefined"&&typeof Int32Array!="undefined";function YM(t,e){return Object.prototype.hasOwnProperty.call(t,e)}_r.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var r=e.shift();if(r){if(typeof r!="object")throw new TypeError(r+"must be non-object");for(var i in r)YM(r,i)&&(t[i]=r[i])}}return t};_r.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var XM={arraySet:function(t,e,r,i,n){if(e.subarray&&t.subarray){t.set(e.subarray(r,r+i),n);return}for(var s=0;s{"use strict";m();var KM=Vn(),QM=4,Xy=0,Zy=1,JM=2;function Do(t){for(var e=t.length;--e>=0;)t[e]=0}var eD=0,rx=1,tD=2,rD=3,iD=258,Tm=29,xc=256,wc=xc+1+Tm,Mo=30,Pm=19,ix=2*wc+1,ia=15,xm=16,nD=7,Rm=256,nx=16,sx=17,ax=18,Am=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],Lf=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],sD=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],ox=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],aD=512,zn=new Array((wc+2)*2);Do(zn);var vc=new Array(Mo*2);Do(vc);var _c=new Array(aD);Do(_c);var bc=new Array(iD-rD+1);Do(bc);var $m=new Array(Tm);Do($m);var Nf=new Array(Mo);Do(Nf);function Em(t,e,r,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=i,this.max_length=n,this.has_stree=t&&t.length}var lx,cx,ux;function Sm(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function fx(t){return t<256?_c[t]:_c[256+(t>>>7)]}function yc(t,e){t.pending_buf[t.pending++]=e&255,t.pending_buf[t.pending++]=e>>>8&255}function $r(t,e,r){t.bi_valid>xm-r?(t.bi_buf|=e<>xm-t.bi_valid,t.bi_valid+=r-xm):(t.bi_buf|=e<>>=1,r<<=1;while(--e>0);return r>>>1}function oD(t){t.bi_valid===16?(yc(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=t.bi_buf&255,t.bi_buf>>=8,t.bi_valid-=8)}function lD(t,e){var r=e.dyn_tree,i=e.max_code,n=e.stat_desc.static_tree,s=e.stat_desc.has_stree,a=e.stat_desc.extra_bits,o=e.stat_desc.extra_base,l=e.stat_desc.max_length,c,u,f,d,h,p,g=0;for(d=0;d<=ia;d++)t.bl_count[d]=0;for(r[t.heap[t.heap_max]*2+1]=0,c=t.heap_max+1;cl&&(d=l,g++),r[u*2+1]=d,!(u>i)&&(t.bl_count[d]++,h=0,u>=o&&(h=a[u-o]),p=r[u*2],t.opt_len+=p*(d+h),s&&(t.static_len+=p*(n[u*2+1]+h)));if(g!==0){do{for(d=l-1;t.bl_count[d]===0;)d--;t.bl_count[d]--,t.bl_count[d+1]+=2,t.bl_count[l]--,g-=2}while(g>0);for(d=l;d!==0;d--)for(u=t.bl_count[d];u!==0;)f=t.heap[--c],!(f>i)&&(r[f*2+1]!==d&&(t.opt_len+=(d-r[f*2+1])*r[f*2],r[f*2+1]=d),u--)}}function hx(t,e,r){var i=new Array(ia+1),n=0,s,a;for(s=1;s<=ia;s++)i[s]=n=n+r[s-1]<<1;for(a=0;a<=e;a++){var o=t[a*2+1];o!==0&&(t[a*2]=dx(i[o]++,o))}}function cD(){var t,e,r,i,n,s=new Array(ia+1);for(r=0,i=0;i>=7;i8?yc(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function uD(t,e,r,i){mx(t),i&&(yc(t,r),yc(t,~r)),KM.arraySet(t.pending_buf,t.window,e,r,t.pending),t.pending+=r}function Ky(t,e,r,i){var n=e*2,s=r*2;return t[n]>1;a>=1;a--)km(t,r,a);c=s;do a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],km(t,r,1),o=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=o,r[c*2]=r[a*2]+r[o*2],t.depth[c]=(t.depth[a]>=t.depth[o]?t.depth[a]:t.depth[o])+1,r[a*2+1]=r[o*2+1]=c,t.heap[1]=c++,km(t,r,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],lD(t,e),hx(r,l,t.bl_count)}function Jy(t,e,r){var i,n=-1,s,a=e[0*2+1],o=0,l=7,c=4;for(a===0&&(l=138,c=3),e[(r+1)*2+1]=65535,i=0;i<=r;i++)s=a,a=e[(i+1)*2+1],!(++o=3&&t.bl_tree[ox[e]*2+1]===0;e--);return t.opt_len+=3*(e+1)+5+5+4,e}function dD(t,e,r,i){var n;for($r(t,e-257,5),$r(t,r-1,5),$r(t,i-4,4),n=0;n>>=1)if(e&1&&t.dyn_ltree[r*2]!==0)return Xy;if(t.dyn_ltree[9*2]!==0||t.dyn_ltree[10*2]!==0||t.dyn_ltree[13*2]!==0)return Zy;for(r=32;r0?(t.strm.data_type===JM&&(t.strm.data_type=hD(t)),Cm(t,t.l_desc),Cm(t,t.d_desc),a=fD(t),n=t.opt_len+3+7>>>3,s=t.static_len+3+7>>>3,s<=n&&(n=s)):n=s=r+5,r+4<=n&&e!==-1?gx(t,e,r,i):t.strategy===QM||s===n?($r(t,(rx<<1)+(i?1:0),3),Qy(t,zn,vc)):($r(t,(tD<<1)+(i?1:0),3),dD(t,t.l_desc.max_code+1,t.d_desc.max_code+1,a+1),Qy(t,t.dyn_ltree,t.dyn_dtree)),px(t),i&&mx(t)}function vD(t,e,r){return t.pending_buf[t.d_buf+t.last_lit*2]=e>>>8&255,t.pending_buf[t.d_buf+t.last_lit*2+1]=e&255,t.pending_buf[t.l_buf+t.last_lit]=r&255,t.last_lit++,e===0?t.dyn_ltree[r*2]++:(t.matches++,e--,t.dyn_ltree[(bc[r]+xc+1)*2]++,t.dyn_dtree[fx(e)*2]++),t.last_lit===t.lit_bufsize-1}Oo._tr_init=pD;Oo._tr_stored_block=gx;Oo._tr_flush_block=gD;Oo._tr_tally=vD;Oo._tr_align=mD});var Fm=H((xV,wx)=>{"use strict";m();function wD(t,e,r,i){for(var n=t&65535|0,s=t>>>16&65535|0,a=0;r!==0;){a=r>2e3?2e3:r,r-=a;do n=n+e[i++]|0,s=s+n|0;while(--a);n%=65521,s%=65521}return n|s<<16|0}wx.exports=wD});var Im=H((SV,_x)=>{"use strict";m();function _D(){for(var t,e=[],r=0;r<256;r++){t=r;for(var i=0;i<8;i++)t=t&1?3988292384^t>>>1:t>>>1;e[r]=t}return e}var bD=_D();function yD(t,e,r,i){var n=bD,s=i+r;t^=-1;for(var a=i;a>>8^n[(t^e[a])&255];return t^-1}_x.exports=yD});var Bf=H((AV,bx)=>{"use strict";m();bx.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}});var Px=H(hn=>{"use strict";m();var br=Vn(),gi=vx(),Sx=Fm(),ws=Im(),xD=Bf(),oa=0,ED=1,SD=3,Es=4,yx=5,dn=0,xx=1,vi=-2,kD=-3,Mm=-5,AD=-1,CD=1,Hf=2,TD=3,PD=4,RD=0,$D=2,Vf=8,FD=9,ID=15,MD=8,DD=29,OD=256,Om=OD+1+DD,LD=30,ND=19,BD=2*Om+1,HD=15,Pe=3,ys=258,Bi=ys+Pe+1,UD=32,zf=42,Lm=69,Uf=73,Gf=91,jf=103,na=113,Sc=666,$t=1,kc=2,sa=3,Bo=4,GD=3;function xs(t,e){return t.msg=xD[e],e}function Ex(t){return(t<<1)-(t>4?9:0)}function bs(t){for(var e=t.length;--e>=0;)t[e]=0}function _s(t){var e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),r!==0&&(br.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,e.pending===0&&(e.pending_out=0))}function Xt(t,e){gi._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,_s(t.strm)}function Ie(t,e){t.pending_buf[t.pending++]=e}function Ec(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=e&255}function jD(t,e,r,i){var n=t.avail_in;return n>i&&(n=i),n===0?0:(t.avail_in-=n,br.arraySet(e,t.input,t.next_in,n,r),t.state.wrap===1?t.adler=Sx(t.adler,e,n,r):t.state.wrap===2&&(t.adler=ws(t.adler,e,n,r)),t.next_in+=n,t.total_in+=n,n)}function kx(t,e){var r=t.max_chain_length,i=t.strstart,n,s,a=t.prev_length,o=t.nice_match,l=t.strstart>t.w_size-Bi?t.strstart-(t.w_size-Bi):0,c=t.window,u=t.w_mask,f=t.prev,d=t.strstart+ys,h=c[i+a-1],p=c[i+a];t.prev_length>=t.good_match&&(r>>=2),o>t.lookahead&&(o=t.lookahead);do if(n=e,!(c[n+a]!==p||c[n+a-1]!==h||c[n]!==c[i]||c[++n]!==c[i+1])){i+=2,n++;do;while(c[++i]===c[++n]&&c[++i]===c[++n]&&c[++i]===c[++n]&&c[++i]===c[++n]&&c[++i]===c[++n]&&c[++i]===c[++n]&&c[++i]===c[++n]&&c[++i]===c[++n]&&ia){if(t.match_start=e,a=s,s>=o)break;h=c[i+a-1],p=c[i+a]}}while((e=f[e&u])>l&&--r!==0);return a<=t.lookahead?a:t.lookahead}function aa(t){var e=t.w_size,r,i,n,s,a;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Bi)){br.arraySet(t.window,t.window,e,e,0),t.match_start-=e,t.strstart-=e,t.block_start-=e,i=t.hash_size,r=i;do n=t.head[--r],t.head[r]=n>=e?n-e:0;while(--i);i=e,r=i;do n=t.prev[--r],t.prev[r]=n>=e?n-e:0;while(--i);s+=e}if(t.strm.avail_in===0)break;if(i=jD(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=i,t.lookahead+t.insert>=Pe)for(a=t.strstart-t.insert,t.ins_h=t.window[a],t.ins_h=(t.ins_h<t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(aa(t),t.lookahead===0&&e===oa)return $t;if(t.lookahead===0)break}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+r;if((t.strstart===0||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,Xt(t,!1),t.strm.avail_out===0)||t.strstart-t.block_start>=t.w_size-Bi&&(Xt(t,!1),t.strm.avail_out===0))return $t}return t.insert=0,e===Es?(Xt(t,!0),t.strm.avail_out===0?sa:Bo):(t.strstart>t.block_start&&(Xt(t,!1),t.strm.avail_out===0),$t)}function Dm(t,e){for(var r,i;;){if(t.lookahead=Pe&&(t.ins_h=(t.ins_h<=Pe)if(i=gi._tr_tally(t,t.strstart-t.match_start,t.match_length-Pe),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=Pe){t.match_length--;do t.strstart++,t.ins_h=(t.ins_h<=Pe&&(t.ins_h=(t.ins_h<4096)&&(t.match_length=Pe-1)),t.prev_length>=Pe&&t.match_length<=t.prev_length){n=t.strstart+t.lookahead-Pe,i=gi._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-Pe),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=n&&(t.ins_h=(t.ins_h<=Pe&&t.strstart>0&&(n=t.strstart-1,i=a[n],i===a[++n]&&i===a[++n]&&i===a[++n])){s=t.strstart+ys;do;while(i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&nt.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=Pe?(r=gi._tr_tally(t,1,t.match_length-Pe),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=gi._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(Xt(t,!1),t.strm.avail_out===0))return $t}return t.insert=0,e===Es?(Xt(t,!0),t.strm.avail_out===0?sa:Bo):t.last_lit&&(Xt(t,!1),t.strm.avail_out===0)?$t:kc}function WD(t,e){for(var r;;){if(t.lookahead===0&&(aa(t),t.lookahead===0)){if(e===oa)return $t;break}if(t.match_length=0,r=gi._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(Xt(t,!1),t.strm.avail_out===0))return $t}return t.insert=0,e===Es?(Xt(t,!0),t.strm.avail_out===0?sa:Bo):t.last_lit&&(Xt(t,!1),t.strm.avail_out===0)?$t:kc}function fn(t,e,r,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=i,this.func=n}var No;No=[new fn(0,0,0,0,VD),new fn(4,4,8,4,Dm),new fn(4,5,16,8,Dm),new fn(4,6,32,32,Dm),new fn(4,4,16,16,Lo),new fn(8,16,32,32,Lo),new fn(8,16,128,128,Lo),new fn(8,32,128,256,Lo),new fn(32,128,258,1024,Lo),new fn(32,258,258,4096,Lo)];function qD(t){t.window_size=2*t.w_size,bs(t.head),t.max_lazy_match=No[t.level].max_lazy,t.good_match=No[t.level].good_length,t.nice_match=No[t.level].nice_length,t.max_chain_length=No[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=Pe-1,t.match_available=0,t.ins_h=0}function YD(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Vf,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new br.Buf16(BD*2),this.dyn_dtree=new br.Buf16((2*LD+1)*2),this.bl_tree=new br.Buf16((2*ND+1)*2),bs(this.dyn_ltree),bs(this.dyn_dtree),bs(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new br.Buf16(HD+1),this.heap=new br.Buf16(2*Om+1),bs(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new br.Buf16(2*Om+1),bs(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function Ax(t){var e;return!t||!t.state?xs(t,vi):(t.total_in=t.total_out=0,t.data_type=$D,e=t.state,e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?zf:na,t.adler=e.wrap===2?0:1,e.last_flush=oa,gi._tr_init(e),dn)}function Cx(t){var e=Ax(t);return e===dn&&qD(t.state),e}function XD(t,e){return!t||!t.state||t.state.wrap!==2?vi:(t.state.gzhead=e,dn)}function Tx(t,e,r,i,n,s){if(!t)return vi;var a=1;if(e===AD&&(e=6),i<0?(a=0,i=-i):i>15&&(a=2,i-=16),n<1||n>FD||r!==Vf||i<8||i>15||e<0||e>9||s<0||s>PD)return xs(t,vi);i===8&&(i=9);var o=new YD;return t.state=o,o.strm=t,o.wrap=a,o.gzhead=null,o.w_bits=i,o.w_size=1<yx||e<0)return t?xs(t,vi):vi;if(i=t.state,!t.output||!t.input&&t.avail_in!==0||i.status===Sc&&e!==Es)return xs(t,t.avail_out===0?Mm:vi);if(i.strm=t,r=i.last_flush,i.last_flush=e,i.status===zf)if(i.wrap===2)t.adler=0,Ie(i,31),Ie(i,139),Ie(i,8),i.gzhead?(Ie(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),Ie(i,i.gzhead.time&255),Ie(i,i.gzhead.time>>8&255),Ie(i,i.gzhead.time>>16&255),Ie(i,i.gzhead.time>>24&255),Ie(i,i.level===9?2:i.strategy>=Hf||i.level<2?4:0),Ie(i,i.gzhead.os&255),i.gzhead.extra&&i.gzhead.extra.length&&(Ie(i,i.gzhead.extra.length&255),Ie(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=ws(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=Lm):(Ie(i,0),Ie(i,0),Ie(i,0),Ie(i,0),Ie(i,0),Ie(i,i.level===9?2:i.strategy>=Hf||i.level<2?4:0),Ie(i,GD),i.status=na);else{var a=Vf+(i.w_bits-8<<4)<<8,o=-1;i.strategy>=Hf||i.level<2?o=0:i.level<6?o=1:i.level===6?o=2:o=3,a|=o<<6,i.strstart!==0&&(a|=UD),a+=31-a%31,i.status=na,Ec(i,a),i.strstart!==0&&(Ec(i,t.adler>>>16),Ec(i,t.adler&65535)),t.adler=1}if(i.status===Lm)if(i.gzhead.extra){for(n=i.pending;i.gzindex<(i.gzhead.extra.length&65535)&&!(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=ws(t.adler,i.pending_buf,i.pending-n,n)),_s(t),n=i.pending,i.pending===i.pending_buf_size));)Ie(i,i.gzhead.extra[i.gzindex]&255),i.gzindex++;i.gzhead.hcrc&&i.pending>n&&(t.adler=ws(t.adler,i.pending_buf,i.pending-n,n)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=Uf)}else i.status=Uf;if(i.status===Uf)if(i.gzhead.name){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=ws(t.adler,i.pending_buf,i.pending-n,n)),_s(t),n=i.pending,i.pending===i.pending_buf_size)){s=1;break}i.gzindexn&&(t.adler=ws(t.adler,i.pending_buf,i.pending-n,n)),s===0&&(i.gzindex=0,i.status=Gf)}else i.status=Gf;if(i.status===Gf)if(i.gzhead.comment){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=ws(t.adler,i.pending_buf,i.pending-n,n)),_s(t),n=i.pending,i.pending===i.pending_buf_size)){s=1;break}i.gzindexn&&(t.adler=ws(t.adler,i.pending_buf,i.pending-n,n)),s===0&&(i.status=jf)}else i.status=jf;if(i.status===jf&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&_s(t),i.pending+2<=i.pending_buf_size&&(Ie(i,t.adler&255),Ie(i,t.adler>>8&255),t.adler=0,i.status=na)):i.status=na),i.pending!==0){if(_s(t),t.avail_out===0)return i.last_flush=-1,dn}else if(t.avail_in===0&&Ex(e)<=Ex(r)&&e!==Es)return xs(t,Mm);if(i.status===Sc&&t.avail_in!==0)return xs(t,Mm);if(t.avail_in!==0||i.lookahead!==0||e!==oa&&i.status!==Sc){var l=i.strategy===Hf?WD(i,e):i.strategy===TD?zD(i,e):No[i.level].func(i,e);if((l===sa||l===Bo)&&(i.status=Sc),l===$t||l===sa)return t.avail_out===0&&(i.last_flush=-1),dn;if(l===kc&&(e===ED?gi._tr_align(i):e!==yx&&(gi._tr_stored_block(i,0,0,!1),e===SD&&(bs(i.head),i.lookahead===0&&(i.strstart=0,i.block_start=0,i.insert=0))),_s(t),t.avail_out===0))return i.last_flush=-1,dn}return e!==Es?dn:i.wrap<=0?xx:(i.wrap===2?(Ie(i,t.adler&255),Ie(i,t.adler>>8&255),Ie(i,t.adler>>16&255),Ie(i,t.adler>>24&255),Ie(i,t.total_in&255),Ie(i,t.total_in>>8&255),Ie(i,t.total_in>>16&255),Ie(i,t.total_in>>24&255)):(Ec(i,t.adler>>>16),Ec(i,t.adler&65535)),_s(t),i.wrap>0&&(i.wrap=-i.wrap),i.pending!==0?dn:xx)}function QD(t){var e;return!t||!t.state?vi:(e=t.state.status,e!==zf&&e!==Lm&&e!==Uf&&e!==Gf&&e!==jf&&e!==na&&e!==Sc?xs(t,vi):(t.state=null,e===na?xs(t,kD):dn))}function JD(t,e){var r=e.length,i,n,s,a,o,l,c,u;if(!t||!t.state||(i=t.state,a=i.wrap,a===2||a===1&&i.status!==zf||i.lookahead))return vi;for(a===1&&(t.adler=Sx(t.adler,e,r,0)),i.wrap=0,r>=i.w_size&&(a===0&&(bs(i.head),i.strstart=0,i.block_start=0,i.insert=0),u=new br.Buf8(i.w_size),br.arraySet(u,e,r-i.w_size,i.w_size,0),e=u,r=i.w_size),o=t.avail_in,l=t.next_in,c=t.input,t.avail_in=r,t.next_in=0,t.input=e,aa(i);i.lookahead>=Pe;){n=i.strstart,s=i.lookahead-(Pe-1);do i.ins_h=(i.ins_h<{"use strict";m();var Wf=Vn(),Rx=!0,$x=!0;try{String.fromCharCode.apply(null,[0])}catch(t){Rx=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){$x=!1}var Ac=new Wf.Buf8(256);for(Wn=0;Wn<256;Wn++)Ac[Wn]=Wn>=252?6:Wn>=248?5:Wn>=240?4:Wn>=224?3:Wn>=192?2:1;var Wn;Ac[254]=Ac[254]=1;Ho.string2buf=function(t){var e,r,i,n,s,a=t.length,o=0;for(n=0;n>>6,e[s++]=128|r&63):r<65536?(e[s++]=224|r>>>12,e[s++]=128|r>>>6&63,e[s++]=128|r&63):(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63,e[s++]=128|r>>>6&63,e[s++]=128|r&63);return e};function Fx(t,e){if(e<65534&&(t.subarray&&$x||!t.subarray&&Rx))return String.fromCharCode.apply(null,Wf.shrinkBuf(t,e));for(var r="",i=0;i4){o[i++]=65533,r+=s-1;continue}for(n&=s===2?31:s===3?15:7;s>1&&r1){o[i++]=65533;continue}n<65536?o[i++]=n:(n-=65536,o[i++]=55296|n>>10&1023,o[i++]=56320|n&1023)}return Fx(o,i)};Ho.utf8border=function(t,e){var r;for(e=e||t.length,e>t.length&&(e=t.length),r=e-1;r>=0&&(t[r]&192)===128;)r--;return r<0||r===0?e:r+Ac[t[r]]>e?r:e}});var Bm=H((FV,Ix)=>{"use strict";m();function eO(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}Ix.exports=eO});var Lx=H(Pc=>{"use strict";m();var Cc=Px(),Tc=Vn(),Um=Nm(),Gm=Bf(),tO=Bm(),Ox=Object.prototype.toString,rO=0,Hm=4,Uo=0,Mx=1,Dx=2,iO=-1,nO=0,sO=8;function la(t){if(!(this instanceof la))return new la(t);this.options=Tc.assign({level:iO,method:sO,chunkSize:16384,windowBits:15,memLevel:8,strategy:nO,to:""},t||{});var e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new tO,this.strm.avail_out=0;var r=Cc.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(r!==Uo)throw new Error(Gm[r]);if(e.header&&Cc.deflateSetHeader(this.strm,e.header),e.dictionary){var i;if(typeof e.dictionary=="string"?i=Um.string2buf(e.dictionary):Ox.call(e.dictionary)==="[object ArrayBuffer]"?i=new Uint8Array(e.dictionary):i=e.dictionary,r=Cc.deflateSetDictionary(this.strm,i),r!==Uo)throw new Error(Gm[r]);this._dict_set=!0}}la.prototype.push=function(t,e){var r=this.strm,i=this.options.chunkSize,n,s;if(this.ended)return!1;s=e===~~e?e:e===!0?Hm:rO,typeof t=="string"?r.input=Um.string2buf(t):Ox.call(t)==="[object ArrayBuffer]"?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;do{if(r.avail_out===0&&(r.output=new Tc.Buf8(i),r.next_out=0,r.avail_out=i),n=Cc.deflate(r,s),n!==Mx&&n!==Uo)return this.onEnd(n),this.ended=!0,!1;(r.avail_out===0||r.avail_in===0&&(s===Hm||s===Dx))&&(this.options.to==="string"?this.onData(Um.buf2binstring(Tc.shrinkBuf(r.output,r.next_out))):this.onData(Tc.shrinkBuf(r.output,r.next_out)))}while((r.avail_in>0||r.avail_out===0)&&n!==Mx);return s===Hm?(n=Cc.deflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===Uo):(s===Dx&&(this.onEnd(Uo),r.avail_out=0),!0)};la.prototype.onData=function(t){this.chunks.push(t)};la.prototype.onEnd=function(t){t===Uo&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=Tc.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};function jm(t,e){var r=new la(e);if(r.push(t,!0),r.err)throw r.msg||Gm[r.err];return r.result}function aO(t,e){return e=e||{},e.raw=!0,jm(t,e)}function oO(t,e){return e=e||{},e.gzip=!0,jm(t,e)}Pc.Deflate=la;Pc.deflate=jm;Pc.deflateRaw=aO;Pc.gzip=oO});var Bx=H((OV,Nx)=>{"use strict";m();var qf=30,lO=12;Nx.exports=function(e,r){var i,n,s,a,o,l,c,u,f,d,h,p,g,v,_,b,S,k,E,A,w,x,y,C,P;i=e.state,n=e.next_in,C=e.input,s=n+(e.avail_in-5),a=e.next_out,P=e.output,o=a-(r-e.avail_out),l=a+(e.avail_out-257),c=i.dmax,u=i.wsize,f=i.whave,d=i.wnext,h=i.window,p=i.hold,g=i.bits,v=i.lencode,_=i.distcode,b=(1<>>24,p>>>=E,g-=E,E=k>>>16&255,E===0)P[a++]=k&65535;else if(E&16){A=k&65535,E&=15,E&&(g>>=E,g-=E),g<15&&(p+=C[n++]<>>24,p>>>=E,g-=E,E=k>>>16&255,E&16){if(w=k&65535,E&=15,gc){e.msg="invalid distance too far back",i.mode=qf;break e}if(p>>>=E,g-=E,E=a-o,w>E){if(E=w-E,E>f&&i.sane){e.msg="invalid distance too far back",i.mode=qf;break e}if(x=0,y=h,d===0){if(x+=u-E,E2;)P[a++]=y[x++],P[a++]=y[x++],P[a++]=y[x++],A-=3;A&&(P[a++]=y[x++],A>1&&(P[a++]=y[x++]))}else{x=a-w;do P[a++]=P[x++],P[a++]=P[x++],P[a++]=P[x++],A-=3;while(A>2);A&&(P[a++]=P[x++],A>1&&(P[a++]=P[x++]))}}else if(E&64){e.msg="invalid distance code",i.mode=qf;break e}else{k=_[(k&65535)+(p&(1<>3,n-=A,g-=A<<3,p&=(1<{"use strict";m();var Hx=Vn(),Go=15,Ux=852,Gx=592,jx=0,Vm=1,Vx=2,cO=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],uO=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],fO=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],dO=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];zx.exports=function(e,r,i,n,s,a,o,l){var c=l.bits,u=0,f=0,d=0,h=0,p=0,g=0,v=0,_=0,b=0,S=0,k,E,A,w,x,y=null,C=0,P,L=new Hx.Buf16(Go+1),N=new Hx.Buf16(Go+1),B=null,ge=0,Le,ke,ne;for(u=0;u<=Go;u++)L[u]=0;for(f=0;f=1&&L[h]===0;h--);if(p>h&&(p=h),h===0)return s[a++]=1<<24|64<<16|0,s[a++]=1<<24|64<<16|0,l.bits=1,0;for(d=1;d0&&(e===jx||h!==1))return-1;for(N[1]=0,u=1;uUx||e===Vx&&b>Gx)return 1;for(;;){Le=u-v,o[f]P?(ke=B[ge+o[f]],ne=y[C+o[f]]):(ke=96,ne=0),k=1<>v)+E]=Le<<24|ke<<16|ne|0;while(E!==0);for(k=1<>=1;if(k!==0?(S&=k-1,S+=k):S=0,f++,--L[u]===0){if(u===h)break;u=r[i+o[f]]}if(u>p&&(S&w)!==A){for(v===0&&(v=p),x+=d,g=u-v,_=1<Ux||e===Vx&&b>Gx)return 1;A=S&w,s[A]=p<<24|g<<16|x-a|0}}return S!==0&&(s[x+S]=u-v<<24|64<<16|0),l.bits=p,0}});var C1=H(Hi=>{"use strict";m();var Xr=Vn(),Zm=Fm(),pn=Im(),hO=Bx(),Rc=Wx(),pO=0,w1=1,_1=2,qx=4,mO=5,Yf=6,ca=0,gO=1,vO=2,wi=-2,b1=-3,Km=-4,wO=-5,Yx=8,y1=1,Xx=2,Zx=3,Kx=4,Qx=5,Jx=6,e1=7,t1=8,r1=9,i1=10,Kf=11,qn=12,zm=13,n1=14,Wm=15,s1=16,a1=17,o1=18,l1=19,Xf=20,Zf=21,c1=22,u1=23,f1=24,d1=25,h1=26,qm=27,p1=28,m1=29,rt=30,Qm=31,_O=32,bO=852,yO=592,xO=15,EO=xO;function g1(t){return(t>>>24&255)+(t>>>8&65280)+((t&65280)<<8)+((t&255)<<24)}function SO(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Xr.Buf16(320),this.work=new Xr.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function x1(t){var e;return!t||!t.state?wi:(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=e.wrap&1),e.mode=y1,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Xr.Buf32(bO),e.distcode=e.distdyn=new Xr.Buf32(yO),e.sane=1,e.back=-1,ca)}function E1(t){var e;return!t||!t.state?wi:(e=t.state,e.wsize=0,e.whave=0,e.wnext=0,x1(t))}function S1(t,e){var r,i;return!t||!t.state||(i=t.state,e<0?(r=0,e=-e):(r=(e>>4)+1,e<48&&(e&=15)),e&&(e<8||e>15))?wi:(i.window!==null&&i.wbits!==e&&(i.window=null),i.wrap=r,i.wbits=e,E1(t))}function k1(t,e){var r,i;return t?(i=new SO,t.state=i,i.window=null,r=S1(t,e),r!==ca&&(t.state=null),r):wi}function kO(t){return k1(t,EO)}var v1=!0,Ym,Xm;function AO(t){if(v1){var e;for(Ym=new Xr.Buf32(512),Xm=new Xr.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(Rc(w1,t.lens,0,288,Ym,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;Rc(_1,t.lens,0,32,Xm,0,t.work,{bits:5}),v1=!1}t.lencode=Ym,t.lenbits=9,t.distcode=Xm,t.distbits=5}function A1(t,e,r,i){var n,s=t.state;return s.window===null&&(s.wsize=1<=s.wsize?(Xr.arraySet(s.window,e,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n=s.wsize-s.wnext,n>i&&(n=i),Xr.arraySet(s.window,e,r-i,n,s.wnext),i-=n,i?(Xr.arraySet(s.window,e,r-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=n,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=pn(r.check,y,2,0),c=0,u=0,r.mode=Xx;break}if(r.flags=0,r.head&&(r.head.done=!1),!(r.wrap&1)||(((c&255)<<8)+(c>>8))%31){t.msg="incorrect header check",r.mode=rt;break}if((c&15)!==Yx){t.msg="unknown compression method",r.mode=rt;break}if(c>>>=4,u-=4,w=(c&15)+8,r.wbits===0)r.wbits=w;else if(w>r.wbits){t.msg="invalid window size",r.mode=rt;break}r.dmax=1<>8&1),r.flags&512&&(y[0]=c&255,y[1]=c>>>8&255,r.check=pn(r.check,y,2,0)),c=0,u=0,r.mode=Zx;case Zx:for(;u<32;){if(o===0)break e;o--,c+=i[s++]<>>8&255,y[2]=c>>>16&255,y[3]=c>>>24&255,r.check=pn(r.check,y,4,0)),c=0,u=0,r.mode=Kx;case Kx:for(;u<16;){if(o===0)break e;o--,c+=i[s++]<>8),r.flags&512&&(y[0]=c&255,y[1]=c>>>8&255,r.check=pn(r.check,y,2,0)),c=0,u=0,r.mode=Qx;case Qx:if(r.flags&1024){for(;u<16;){if(o===0)break e;o--,c+=i[s++]<>>8&255,r.check=pn(r.check,y,2,0)),c=0,u=0}else r.head&&(r.head.extra=null);r.mode=Jx;case Jx:if(r.flags&1024&&(h=r.length,h>o&&(h=o),h&&(r.head&&(w=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),Xr.arraySet(r.head.extra,i,s,h,w)),r.flags&512&&(r.check=pn(r.check,i,h,s)),o-=h,s+=h,r.length-=h),r.length))break e;r.length=0,r.mode=e1;case e1:if(r.flags&2048){if(o===0)break e;h=0;do w=i[s+h++],r.head&&w&&r.length<65536&&(r.head.name+=String.fromCharCode(w));while(w&&h>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=qn;break;case i1:for(;u<32;){if(o===0)break e;o--,c+=i[s++]<>>=u&7,u-=u&7,r.mode=qm;break}for(;u<3;){if(o===0)break e;o--,c+=i[s++]<>>=1,u-=1,c&3){case 0:r.mode=n1;break;case 1:if(AO(r),r.mode=Xf,e===Yf){c>>>=2,u-=2;break e}break;case 2:r.mode=a1;break;case 3:t.msg="invalid block type",r.mode=rt}c>>>=2,u-=2;break;case n1:for(c>>>=u&7,u-=u&7;u<32;){if(o===0)break e;o--,c+=i[s++]<>>16^65535)){t.msg="invalid stored block lengths",r.mode=rt;break}if(r.length=c&65535,c=0,u=0,r.mode=Wm,e===Yf)break e;case Wm:r.mode=s1;case s1:if(h=r.length,h){if(h>o&&(h=o),h>l&&(h=l),h===0)break e;Xr.arraySet(n,i,s,h,a),o-=h,s+=h,l-=h,a+=h,r.length-=h;break}r.mode=qn;break;case a1:for(;u<14;){if(o===0)break e;o--,c+=i[s++]<>>=5,u-=5,r.ndist=(c&31)+1,c>>>=5,u-=5,r.ncode=(c&15)+4,c>>>=4,u-=4,r.nlen>286||r.ndist>30){t.msg="too many length or distance symbols",r.mode=rt;break}r.have=0,r.mode=o1;case o1:for(;r.have>>=3,u-=3}for(;r.have<19;)r.lens[L[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,C={bits:r.lenbits},x=Rc(pO,r.lens,0,19,r.lencode,0,r.work,C),r.lenbits=C.bits,x){t.msg="invalid code lengths set",r.mode=rt;break}r.have=0,r.mode=l1;case l1:for(;r.have>>24,b=v>>>16&255,S=v&65535,!(_<=u);){if(o===0)break e;o--,c+=i[s++]<>>=_,u-=_,r.lens[r.have++]=S;else{if(S===16){for(P=_+2;u>>=_,u-=_,r.have===0){t.msg="invalid bit length repeat",r.mode=rt;break}w=r.lens[r.have-1],h=3+(c&3),c>>>=2,u-=2}else if(S===17){for(P=_+3;u>>=_,u-=_,w=0,h=3+(c&7),c>>>=3,u-=3}else{for(P=_+7;u>>=_,u-=_,w=0,h=11+(c&127),c>>>=7,u-=7}if(r.have+h>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=rt;break}for(;h--;)r.lens[r.have++]=w}}if(r.mode===rt)break;if(r.lens[256]===0){t.msg="invalid code -- missing end-of-block",r.mode=rt;break}if(r.lenbits=9,C={bits:r.lenbits},x=Rc(w1,r.lens,0,r.nlen,r.lencode,0,r.work,C),r.lenbits=C.bits,x){t.msg="invalid literal/lengths set",r.mode=rt;break}if(r.distbits=6,r.distcode=r.distdyn,C={bits:r.distbits},x=Rc(_1,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,C),r.distbits=C.bits,x){t.msg="invalid distances set",r.mode=rt;break}if(r.mode=Xf,e===Yf)break e;case Xf:r.mode=Zf;case Zf:if(o>=6&&l>=258){t.next_out=a,t.avail_out=l,t.next_in=s,t.avail_in=o,r.hold=c,r.bits=u,hO(t,d),a=t.next_out,n=t.output,l=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,c=r.hold,u=r.bits,r.mode===qn&&(r.back=-1);break}for(r.back=0;v=r.lencode[c&(1<>>24,b=v>>>16&255,S=v&65535,!(_<=u);){if(o===0)break e;o--,c+=i[s++]<>k)],_=v>>>24,b=v>>>16&255,S=v&65535,!(k+_<=u);){if(o===0)break e;o--,c+=i[s++]<>>=k,u-=k,r.back+=k}if(c>>>=_,u-=_,r.back+=_,r.length=S,b===0){r.mode=h1;break}if(b&32){r.back=-1,r.mode=qn;break}if(b&64){t.msg="invalid literal/length code",r.mode=rt;break}r.extra=b&15,r.mode=c1;case c1:if(r.extra){for(P=r.extra;u>>=r.extra,u-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=u1;case u1:for(;v=r.distcode[c&(1<>>24,b=v>>>16&255,S=v&65535,!(_<=u);){if(o===0)break e;o--,c+=i[s++]<>k)],_=v>>>24,b=v>>>16&255,S=v&65535,!(k+_<=u);){if(o===0)break e;o--,c+=i[s++]<>>=k,u-=k,r.back+=k}if(c>>>=_,u-=_,r.back+=_,b&64){t.msg="invalid distance code",r.mode=rt;break}r.offset=S,r.extra=b&15,r.mode=f1;case f1:if(r.extra){for(P=r.extra;u>>=r.extra,u-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=rt;break}r.mode=d1;case d1:if(l===0)break e;if(h=d-l,r.offset>h){if(h=r.offset-h,h>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=rt;break}h>r.wnext?(h-=r.wnext,p=r.wsize-h):p=r.wnext-h,h>r.length&&(h=r.length),g=r.window}else g=n,p=a-r.offset,h=r.length;h>l&&(h=l),l-=h,r.length-=h;do n[a++]=g[p++];while(--h);r.length===0&&(r.mode=Zf);break;case h1:if(l===0)break e;n[a++]=r.length,l--,r.mode=Zf;break;case qm:if(r.wrap){for(;u<32;){if(o===0)break e;o--,c|=i[s++]<{"use strict";m();T1.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}});var R1=H((VV,P1)=>{"use strict";m();function $O(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}P1.exports=$O});var F1=H(Fc=>{"use strict";m();var jo=C1(),$c=Vn(),Qf=Nm(),vt=Jm(),eg=Bf(),FO=Bm(),IO=R1(),$1=Object.prototype.toString;function ua(t){if(!(this instanceof ua))return new ua(t);this.options=$c.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,e.windowBits===0&&(e.windowBits=-15)),e.windowBits>=0&&e.windowBits<16&&!(t&&t.windowBits)&&(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&(e.windowBits&15||(e.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new FO,this.strm.avail_out=0;var r=jo.inflateInit2(this.strm,e.windowBits);if(r!==vt.Z_OK)throw new Error(eg[r]);if(this.header=new IO,jo.inflateGetHeader(this.strm,this.header),e.dictionary&&(typeof e.dictionary=="string"?e.dictionary=Qf.string2buf(e.dictionary):$1.call(e.dictionary)==="[object ArrayBuffer]"&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(r=jo.inflateSetDictionary(this.strm,e.dictionary),r!==vt.Z_OK)))throw new Error(eg[r])}ua.prototype.push=function(t,e){var r=this.strm,i=this.options.chunkSize,n=this.options.dictionary,s,a,o,l,c,u=!1;if(this.ended)return!1;a=e===~~e?e:e===!0?vt.Z_FINISH:vt.Z_NO_FLUSH,typeof t=="string"?r.input=Qf.binstring2buf(t):$1.call(t)==="[object ArrayBuffer]"?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;do{if(r.avail_out===0&&(r.output=new $c.Buf8(i),r.next_out=0,r.avail_out=i),s=jo.inflate(r,vt.Z_NO_FLUSH),s===vt.Z_NEED_DICT&&n&&(s=jo.inflateSetDictionary(this.strm,n)),s===vt.Z_BUF_ERROR&&u===!0&&(s=vt.Z_OK,u=!1),s!==vt.Z_STREAM_END&&s!==vt.Z_OK)return this.onEnd(s),this.ended=!0,!1;r.next_out&&(r.avail_out===0||s===vt.Z_STREAM_END||r.avail_in===0&&(a===vt.Z_FINISH||a===vt.Z_SYNC_FLUSH))&&(this.options.to==="string"?(o=Qf.utf8border(r.output,r.next_out),l=r.next_out-o,c=Qf.buf2string(r.output,o),r.next_out=l,r.avail_out=i-l,l&&$c.arraySet(r.output,r.output,o,l,0),this.onData(c)):this.onData($c.shrinkBuf(r.output,r.next_out))),r.avail_in===0&&r.avail_out===0&&(u=!0)}while((r.avail_in>0||r.avail_out===0)&&s!==vt.Z_STREAM_END);return s===vt.Z_STREAM_END&&(a=vt.Z_FINISH),a===vt.Z_FINISH?(s=jo.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,s===vt.Z_OK):(a===vt.Z_SYNC_FLUSH&&(this.onEnd(vt.Z_OK),r.avail_out=0),!0)};ua.prototype.onData=function(t){this.chunks.push(t)};ua.prototype.onEnd=function(t){t===vt.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=$c.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};function tg(t,e){var r=new ua(e);if(r.push(t,!0),r.err)throw r.msg||eg[r.err];return r.result}function MO(t,e){return e=e||{},e.raw=!0,tg(t,e)}Fc.Inflate=ua;Fc.inflate=tg;Fc.inflateRaw=MO;Fc.ungzip=tg});var D1=H((YV,M1)=>{"use strict";m();var DO=Vn().assign,OO=Lx(),LO=F1(),NO=Jm(),I1={};DO(I1,OO,LO,NO);M1.exports=I1});var N1=H((ZV,L1)=>{"use strict";m();var O1=(t,e)=>function(...r){let i=e.promiseModule;return new i((n,s)=>{e.multiArgs?r.push((...a)=>{e.errorFirst?a[0]?s(a):(a.shift(),n(a)):n(a)}):e.errorFirst?r.push((a,o)=>{a?s(a):n(o)}):r.push(n),t.apply(this,r)})};L1.exports=(t,e)=>{e=Object.assign({exclude:[/.+(Sync|Stream)$/],errorFirst:!0,promiseModule:Promise},e);let r=typeof t;if(!(t!==null&&(r==="object"||r==="function")))throw new TypeError(`Expected \`input\` to be a \`Function\` or \`Object\`, got \`${t===null?"null":r}\``);let i=s=>{let a=o=>typeof o=="string"?s===o:o.test(s);return e.include?e.include.some(a):!e.exclude.some(a)},n;r==="function"?n=function(...s){return e.excludeMain?t(...s):O1(t,e).apply(this,s)}:n=Object.create(Object.getPrototypeOf(t));for(let s in t){let a=t[s];n[s]=typeof a=="function"&&i(s)?O1(a,e):a}return n}});var q1=H((QV,W1)=>{m();function B1(t){return Array.isArray(t)?t:[t]}var ng="",H1=" ",rg="\\",BO=/^\s+$/,HO=/(?:[^\\]|^)\\$/,UO=/^\\!/,GO=/^\\#/,jO=/\r?\n/g,VO=/^\.*\/|^\.+$/,ig="/",j1="node-ignore";typeof Symbol!="undefined"&&(j1=Symbol.for("node-ignore"));var U1=j1,zO=(t,e,r)=>Object.defineProperty(t,e,{value:r}),WO=/([0-z])-([0-z])/g,V1=()=>!1,qO=t=>t.replace(WO,(e,r,i)=>r.charCodeAt(0)<=i.charCodeAt(0)?e:ng),YO=t=>{let{length:e}=t;return t.slice(0,e-e%2)},XO=[[/^\uFEFF/,()=>ng],[/((?:\\\\)*?)(\\?\s+)$/,(t,e,r)=>e+(r.indexOf("\\")===0?H1:ng)],[/(\\+?)\s/g,(t,e)=>{let{length:r}=e;return e.slice(0,r-r%2)+H1}],[/[\\$.|*+(){^]/g,t=>`\\${t}`],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*\\\*\\\*\\\//,()=>"^(?:.*\\/)?"],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?"^":"(?:^|\\/)"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(t,e,r)=>e+6{let i=r.replace(/\\\*/g,"[^\\/]*");return e+i}],[/\\\\\\(?=[$.|*+(){^])/g,()=>rg],[/\\\\/g,()=>rg],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(t,e,r,i,n)=>e===rg?`\\[${r}${YO(i)}${n}`:n==="]"&&i.length%2===0?`[${qO(r)}${i}]`:"[]"],[/(?:[^*])$/,t=>/\/$/.test(t)?`${t}$`:`${t}(?=$|\\/$)`],[/(\^|\\\/)?\\\*$/,(t,e)=>`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`]],G1=Object.create(null),ZO=(t,e)=>{let r=G1[t];return r||(r=XO.reduce((i,[n,s])=>i.replace(n,s.bind(t)),t),G1[t]=r),e?new RegExp(r,"i"):new RegExp(r)},og=t=>typeof t=="string",KO=t=>t&&og(t)&&!BO.test(t)&&!HO.test(t)&&t.indexOf("#")!==0,QO=t=>t.split(jO),sg=class{constructor(e,r,i,n){this.origin=e,this.pattern=r,this.negative=i,this.regex=n}},JO=(t,e)=>{let r=t,i=!1;t.indexOf("!")===0&&(i=!0,t=t.substr(1)),t=t.replace(UO,"!").replace(GO,"#");let n=ZO(t,e);return new sg(r,t,i,n)},eL=(t,e)=>{throw new e(t)},Yn=(t,e,r)=>og(t)?t?Yn.isNotRelative(t)?r(`path should be a \`path.relative()\`d string, but got "${e}"`,RangeError):!0:r("path must not be empty",TypeError):r(`path must be a string, but got \`${e}\``,TypeError),z1=t=>VO.test(t);Yn.isNotRelative=z1;Yn.convert=t=>t;var ag=class{constructor({ignorecase:e=!0,ignoreCase:r=e,allowRelativePaths:i=!1}={}){zO(this,U1,!0),this._rules=[],this._ignoreCase=r,this._allowRelativePaths=i,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[U1]){this._rules=this._rules.concat(e._rules),this._added=!0;return}if(KO(e)){let r=JO(e,this._ignoreCase);this._added=!0,this._rules.push(r)}}add(e){return this._added=!1,B1(og(e)?QO(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,r){let i=!1,n=!1;return this._rules.forEach(s=>{let{negative:a}=s;if(n===a&&i!==n||a&&!i&&!n&&!r)return;s.regex.test(e)&&(i=!a,n=a)}),{ignored:i,unignored:n}}_test(e,r,i,n){let s=e&&Yn.convert(e);return Yn(s,e,this._allowRelativePaths?V1:eL),this._t(s,r,i,n)}_t(e,r,i,n){if(e in r)return r[e];if(n||(n=e.split(ig)),n.pop(),!n.length)return r[e]=this._testOne(e,i);let s=this._t(n.join(ig)+ig,r,i,n);return r[e]=s.ignored?s:this._testOne(e,i)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return B1(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},Jf=t=>new ag(t),tL=t=>Yn(t&&Yn.convert(t),t,V1);Jf.isPathValid=tL;Jf.default=Jf;W1.exports=Jf;if(typeof process!="undefined"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform==="win32")){let t=r=>/^\\\\\?\\/.test(r)||/["<>|\u0000-\u001F]+/u.test(r)?r:r.replace(/\\/g,"/");Yn.convert=t;let e=/^[a-z]:\//i;Yn.isNotRelative=r=>e.test(r)||z1(r)}});var X1=H((ez,Y1)=>{"use strict";m();function rL(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function mn(t,e,r){return e=e instanceof RegExp?e:new RegExp(rL(e),"g"),t.replace(e,r)}var iL={clean:function(e){if(typeof e!="string")throw new Error("Expected a string, received: "+e);return e=mn(e,"./","/"),e=mn(e,"..","."),e=mn(e," ","-"),e=mn(e,/^[~^:?*\\\-]/g,""),e=mn(e,/[~^:?*\\]/g,"-"),e=mn(e,/[~^:?*\\\-]$/g,""),e=mn(e,"@{","-"),e=mn(e,/\.$/g,""),e=mn(e,/\/$/g,""),e=mn(e,/\.lock$/g,""),e}};Y1.exports=iL});var K1=H((rz,Z1)=>{m();Z1.exports=function(t,e){var r=t,i=e,n=r.length,s=i.length,a=!1,o=null,l=n+1,c=[],u=[],f=[],d="",h=-1,p=0,g=1,v,_,b=function(){n>=s&&(v=r,_=n,r=i,i=v,n=s,s=_,a=!0,l=n+1)},S=function(w,x,y){return{x:w,y:x,k:y}},k=function(w,x){return{elem:w,t:x}},E=function(w,x,y){var C,P,L;for(x>y?C=c[w-1+l]:C=c[w+1+l],L=Math.max(x,y),P=L-w;P=0;--L)for(;CP-C?(a?f[f.length]=new k(i[P],h):f[f.length]=new k(i[P],g),++y,++P):w[L].y-w[L].x=w+1;--B)y[B+l]=E(B,y[B-1+l]+1,y[B+1+l]);y[w+l]=E(w,y[w-1+l]+1,y[w+1+l])}while(y[w+l]!==s);for(o=w+2*C,P=c[w+l],L=[];P!==-1;)L[L.length]=new S(u[P].x,u[P].y,null),P=u[P].k;A(L)}}}});var eE=H((nz,J1)=>{m();var nL=K1();function sL(t,e){var r=new nL(t,e);r.compose();for(var i=r.getses(),n,s,a=t.length-1,o=e.length-1,l=i.length-1;l>=0;--l)i[l].t===r.SES_COMMON?(s?(s.chain={file1index:a,file2index:o,chain:null},s=s.chain):(n={file1index:a,file2index:o,chain:null},s=n),a--,o--):i[l].t===r.SES_DELETE?a--:i[l].t===r.SES_ADD&&o--;var c={file1index:-1,file2index:-1,chain:null};return s?(s.chain=c,n):c}function Q1(t,e){for(var r=[],i=t.length,n=e.length,s=sL(t,e);s!==null;s=s.chain){var a=i-s.file1index-1,o=n-s.file2index-1;i=s.file1index,n=s.file2index,(a||o)&&r.push({file1:[i+1,a],file2:[n+1,o]})}return r.reverse(),r}function aL(t,e,r){var i,n=Q1(e,t),s=Q1(e,r),a=[];function o(N,B){a.push([N.file1[0],B,N.file1[1],N.file2[0],N.file2[1]])}for(i=0;ic&&(l.push([1,c,N-c]),c=N)}for(var f=0;fg)break;g=Math.max(g,_+v[2]),f++}if(u(p),d==f)h[4]>0&&l.push([h[1],h[3],h[4]]);else{var b={0:[t.length,-1,e.length,-1],2:[r.length,-1,e.length,-1]};for(i=d;i<=f;i++){h=a[i];var S=h[1],k=b[S],E=h[0],A=E+h[2],w=h[3],x=w+h[4];k[0]=Math.min(w,k[0]),k[1]=Math.max(x,k[1]),k[2]=Math.min(E,k[2]),k[3]=Math.max(A,k[3])}var y=b[0][0]+(p-b[0][2]),C=b[0][1]+(g-b[0][3]),P=b[2][0]+(p-b[2][2]),L=b[2][1]+(g-b[2][3]);l.push([-1,y,C-y,p,g-p,P,L-P])}c=g}return u(e.length),l}function oL(t,e,r){var i=[],n=[t,e,r],s=aL(t,e,r),a=[];function o(){a.length&&i.push({ok:a}),a=[]}function l(h){for(var p=0;p{"use strict";m();Object.defineProperty(Y,"__esModule",{value:!0});function Fs(t){return t&&typeof t=="object"&&"default"in t?t.default:t}var Mc=Fs(F_()),SE=Fs(Wy()),lL=Fs(Yy()),Fg=Fs(D1()),td=Fs(N1()),cL=Fs(q1()),Dc=Fs(X1()),uL=Fs(eE()),Ce=class t extends Error{constructor(e){super(e),this.caller=""}toJSON(){return{code:this.code,data:this.data,caller:this.caller,message:this.message,stack:this.stack}}fromJSON(e){let r=new t(e.message);return r.code=e.code,r.data=e.data,r.caller=e.caller,r.stack=e.stack,r}get isIsomorphicGitError(){return!0}},Oc=class t extends Ce{constructor(e){super(`Modifying the index is not possible because you have unmerged files: ${e.toString}. Fix them up in the work tree, and then use 'git add/rm as appropriate to mark resolution and make a commit.`),this.code=this.name=t.code,this.data={filepaths:e}}};Oc.code="UnmergedPathsError";var ue=class t extends Ce{constructor(e){super(`An internal error caused this command to fail. + +If you're not a developer, report the bug to the developers of the application you're using. If this is a bug in isomorphic-git then you should create a proper bug yourselves. The bug should include a minimal reproduction and details about the version and environment. + +Please file a bug report at https://github.com/isomorphic-git/isomorphic-git/issues with this error message: ${e}`),this.code=this.name=t.code,this.data={message:e}}};ue.code="InternalError";var zo=class t extends Ce{constructor(e){super(`The filepath "${e}" contains unsafe character sequences`),this.code=this.name=t.code,this.data={filepath:e}}};zo.code="UnsafeFilepathError";var _i=class{constructor(e){this.buffer=e,this._start=0}eof(){return this._start>=this.buffer.length}tell(){return this._start}seek(e){this._start=e}slice(e){let r=this.buffer.slice(this._start,this._start+e);return this._start+=e,r}toString(e,r){let i=this.buffer.toString(e,this._start,this._start+r);return this._start+=r,i}write(e,r,i){let n=this.buffer.write(e,this._start,r,i);return this._start+=r,n}copy(e,r,i){let n=e.copy(this.buffer,this._start,r,i);return this._start+=n,n}readUInt8(){let e=this.buffer.readUInt8(this._start);return this._start+=1,e}writeUInt8(e){let r=this.buffer.writeUInt8(e,this._start);return this._start+=1,r}readUInt16BE(){let e=this.buffer.readUInt16BE(this._start);return this._start+=2,e}writeUInt16BE(e){let r=this.buffer.writeUInt16BE(e,this._start);return this._start+=2,r}readUInt32BE(){let e=this.buffer.readUInt32BE(this._start);return this._start+=4,e}writeUInt32BE(e){let r=this.buffer.writeUInt32BE(e,this._start);return this._start+=4,r}};function pd(t,e){return-(te)}function kE(t,e){return pd(t.path,e.path)}function AE(t){let e=t>0?t>>12:0;e!==4&&e!==8&&e!==10&&e!==14&&(e=8);let r=t&511;return r&73?r=493:r=420,e!==8&&(r=0),(e<<12)+r}var gn=2**32;function tE(t,e,r,i){if(t!==void 0&&e!==void 0)return[t,e];r===void 0&&(r=i.valueOf());let n=Math.floor(r/1e3),s=(r-n*1e3)*1e6;return[n,s]}function Wo(t){let[e,r]=tE(t.ctimeSeconds,t.ctimeNanoseconds,t.ctimeMs,t.ctime),[i,n]=tE(t.mtimeSeconds,t.mtimeNanoseconds,t.mtimeMs,t.mtime);return{ctimeSeconds:e%gn,ctimeNanoseconds:r%gn,mtimeSeconds:i%gn,mtimeNanoseconds:n%gn,dev:t.dev%gn,ino:t.ino%gn,mode:AE(t.mode%gn),uid:t.uid%gn,gid:t.gid%gn,size:t.size>-1?t.size%gn:0}}function fL(t){let e="";for(let r of new Uint8Array(t))r<16&&(e+="0"),e+=r.toString(16);return e}var lg=null;async function wn(t){return lg===null&&(lg=await hL()),lg?CE(t):dL(t)}function dL(t){return new SE().update(t).digest("hex")}async function CE(t){let e=await crypto.subtle.digest("SHA-1",t);return fL(e)}async function hL(){try{return await CE(new Uint8Array([]))==="da39a3ee5e6b4b0d3255bfef95601890afd80709"}catch(t){}return!1}function pL(t){return{assumeValid:!!(t&32768),extended:!!(t&16384),stage:(t&12288)>>12,nameLength:t&4095}}function mL(t){let e=t.flags;return e.extended=!1,e.nameLength=Math.min(Buffer.from(t.path).length,4095),(e.assumeValid?32768:0)+(e.extended?16384:0)+((e.stage&3)<<12)+(e.nameLength&4095)}var bg=class t{constructor(e,r){this._dirty=!1,this._unmergedPaths=r||new Set,this._entries=e||new Map}_addEntry(e){if(e.flags.stage===0)e.stages=[e],this._entries.set(e.path,e),this._unmergedPaths.delete(e.path);else{let r=this._entries.get(e.path);r||(this._entries.set(e.path,e),r=e),r.stages[e.flags.stage]=e,this._unmergedPaths.add(e.path)}}static async from(e){if(Buffer.isBuffer(e))return t.fromBuffer(e);if(e===null)return new t(null);throw new ue("invalid type passed to GitIndex.from")}static async fromBuffer(e){if(e.length===0)throw new ue("Index file is empty (.git/index)");let r=new t,i=new _i(e),n=i.toString("utf8",4);if(n!=="DIRC")throw new ue(`Invalid dircache magic file number: ${n}`);let s=await wn(e.slice(0,-20)),a=e.slice(-20).toString("hex");if(a!==s)throw new ue(`Invalid checksum in GitIndex buffer: expected ${a} but saw ${s}`);let o=i.readUInt32BE();if(o!==2)throw new ue(`Unsupported dircache version: ${o}`);let l=i.readUInt32BE(),c=0;for(;!i.eof()&&ce.stages.length>1?e.stages.filter(r=>r):e)}*[Symbol.iterator](){for(let e of this.entries)yield e}insert({filepath:e,stats:r,oid:i,stage:n=0}){r||(r={ctimeSeconds:0,ctimeNanoseconds:0,mtimeSeconds:0,mtimeNanoseconds:0,dev:0,ino:0,mode:0,uid:0,gid:0,size:0}),r=Wo(r);let s=Buffer.from(e),a={ctimeSeconds:r.ctimeSeconds,ctimeNanoseconds:r.ctimeNanoseconds,mtimeSeconds:r.mtimeSeconds,mtimeNanoseconds:r.mtimeNanoseconds,dev:r.dev,ino:r.ino,mode:r.mode||33188,uid:r.uid,gid:r.gid,size:r.size,path:e,oid:i,flags:{assumeValid:!1,extended:!1,stage:n,nameLength:s.length<4095?s.length:4095},stages:[]};this._addEntry(a),this._dirty=!0}delete({filepath:e}){if(this._entries.has(e))this._entries.delete(e);else for(let r of this._entries.keys())r.startsWith(e+"/")&&this._entries.delete(r);this._unmergedPaths.has(e)&&this._unmergedPaths.delete(e),this._dirty=!0}clear(){this._entries.clear(),this._dirty=!0}has({filepath:e}){return this._entries.has(e)}render(){return this.entries.map(e=>`${e.mode.toString(8)} ${e.oid} ${e.path}`).join(` +`)}static async _entryToBuffer(e){let r=Buffer.from(e.path),i=Math.ceil((62+r.length+1)/8)*8,n=Buffer.alloc(i),s=new _i(n),a=Wo(e);return s.writeUInt32BE(a.ctimeSeconds),s.writeUInt32BE(a.ctimeNanoseconds),s.writeUInt32BE(a.mtimeSeconds),s.writeUInt32BE(a.mtimeNanoseconds),s.writeUInt32BE(a.dev),s.writeUInt32BE(a.ino),s.writeUInt32BE(a.mode),s.writeUInt32BE(a.uid),s.writeUInt32BE(a.gid),s.writeUInt32BE(a.size),s.write(e.oid,20,"hex"),s.writeUInt16BE(mL(e)),s.write(e.path,r.length,"utf8"),n}async toObject(){let e=Buffer.alloc(12),r=new _i(e);r.write("DIRC",4,"utf8"),r.writeUInt32BE(2),r.writeUInt32BE(this.entriesFlat.length);let i=[];for(let o of this.entries)if(i.push(t._entryToBuffer(o)),o.stages.length>1)for(let l of o.stages)l&&l!==o&&i.push(t._entryToBuffer(l));i=await Promise.all(i);let n=Buffer.concat(i),s=Buffer.concat([e,n]),a=await wn(s);return Buffer.concat([s,Buffer.from(a,"hex")])}};function nd(t,e,r=!0,i=!0){let n=Wo(t),s=Wo(e);return r&&n.mode!==s.mode||n.mtimeSeconds!==s.mtimeSeconds||n.ctimeSeconds!==s.ctimeSeconds||n.uid!==s.uid||n.gid!==s.gid||i&&n.ino!==s.ino||n.size!==s.size}var cg=null,ug=Symbol("IndexCache");function gL(){return{map:new Map,stats:new Map}}async function vL(t,e,r){let[i,n]=await Promise.all([t.lstat(e),t.read(e)]),s=await bg.from(n);r.map.set(e,s),r.stats.set(e,i)}async function wL(t,e,r){let i=r.stats.get(e);if(i===void 0)return!0;if(i===null)return!1;let n=await t.lstat(e);return n===null?!1:nd(i,n)}var ft=class{static async acquire({fs:e,gitdir:r,cache:i,allowUnmerged:n=!0},s){i[ug]||(i[ug]=gL());let a=`${r}/index`;cg===null&&(cg=new Mc({maxPending:1/0}));let o,l=[];return await cg.acquire(a,async()=>{let c=i[ug];await wL(e,a,c)&&await vL(e,a,c);let u=c.map.get(a);if(l=u.unmergedPaths,l.length&&!n)throw new Oc(l);if(o=await s(u),u._dirty){let f=await u.toObject();await e.write(a,f),c.stats.set(a,await e.lstat(a)),u._dirty=!1}}),o}};function sd(t){let e=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"));return e>-1&&(t=t.slice(e+1)),t}function ha(t){let e=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"));return e===-1?".":e===0?"/":t.slice(0,e)}function TE(t){let e=new Map,r=function(n){if(!e.has(n)){let s={type:"tree",fullpath:n,basename:sd(n),metadata:{},children:[]};e.set(n,s),s.parent=r(ha(n)),s.parent&&s.parent!==s&&s.parent.children.push(s)}return e.get(n)},i=function(n,s){if(!e.has(n)){let a={type:"blob",fullpath:n,basename:sd(n),metadata:s,parent:r(ha(n)),children:[]};a.parent&&a.parent.children.push(a),e.set(n,a)}return e.get(n)};r(".");for(let n of t)i(n.path,n);return e}function _L(t){switch(t){case 16384:return"tree";case 33188:return"blob";case 33261:return"blob";case 40960:return"blob";case 57344:return"commit"}throw new ue(`Unexpected GitTree entry mode: ${t.toString(8)}`)}var yg=class{constructor({fs:e,gitdir:r,cache:i}){this.treePromise=ft.acquire({fs:e,gitdir:r,cache:i},async function(s){return TE(s.entries)});let n=this;this.ConstructEntry=class{constructor(a){this._fullpath=a,this._type=!1,this._mode=!1,this._stat=!1,this._oid=!1}async type(){return n.type(this)}async mode(){return n.mode(this)}async stat(){return n.stat(this)}async content(){return n.content(this)}async oid(){return n.oid(this)}}}async readdir(e){let r=e._fullpath,n=(await this.treePromise).get(r);if(!n||n.type==="blob")return null;if(n.type!=="tree")throw new Error(`ENOTDIR: not a directory, scandir '${r}'`);let s=n.children.map(a=>a.fullpath);return s.sort(pd),s}async type(e){return e._type===!1&&await e.stat(),e._type}async mode(e){return e._mode===!1&&await e.stat(),e._mode}async stat(e){if(e._stat===!1){let i=(await this.treePromise).get(e._fullpath);if(!i)throw new Error(`ENOENT: no such file or directory, lstat '${e._fullpath}'`);let n=i.type==="tree"?{}:Wo(i.metadata);e._type=i.type==="tree"?"tree":_L(n.mode),e._mode=n.mode,i.type==="tree"?e._stat=void 0:e._stat=n}return e._stat}async content(e){}async oid(e){if(e._oid===!1){let i=(await this.treePromise).get(e._fullpath);e._oid=i.metadata.oid}return e._oid}},md=Symbol("GitWalkSymbol");function _a(){let t=Object.create(null);return Object.defineProperty(t,md,{value:function({fs:e,gitdir:r,cache:i}){return new yg({fs:e,gitdir:r,cache:i})}}),Object.freeze(t),t}var He=class t extends Ce{constructor(e){super(`Could not find ${e}.`),this.code=this.name=t.code,this.data={what:e}}};He.code="NotFoundError";var yr=class t extends Ce{constructor(e,r,i,n){super(`Object ${e} ${n?`at ${n}`:""}was anticipated to be a ${i} but it is a ${r}.`),this.code=this.name=t.code,this.data={oid:e,actual:r,expected:i,filepath:n}}};yr.code="ObjectTypeError";var As=class t extends Ce{constructor(e){super(`Expected a 40-char hex object id but saw "${e}".`),this.code=this.name=t.code,this.data={value:e}}};As.code="InvalidOidError";var Lc=class t extends Ce{constructor(e){super(`Could not find a fetch refspec for remote "${e}". Make sure the config file has an entry like the following: +[remote "${e}"] + fetch = +refs/heads/*:refs/remotes/origin/* +`),this.code=this.name=t.code,this.data={remote:e}}};Lc.code="NoRefspecError";var ad=class t{constructor(e){if(this.refs=new Map,this.parsedConfig=[],e){let r=null;this.parsedConfig=e.trim().split(` +`).map(i=>{if(/^\s*#/.test(i))return{line:i,comment:!0};let n=i.indexOf(" ");if(i.startsWith("^")){let s=i.slice(1);return this.refs.set(r+"^{}",s),{line:i,ref:r,peeled:s}}else{let s=i.slice(0,n);return r=i.slice(n+1),this.refs.set(r,s),{line:i,ref:r,oid:s}}})}return this}static from(e){return new t(e)}delete(e){this.parsedConfig=this.parsedConfig.filter(r=>r.ref!==e),this.refs.delete(e)}toString(){return this.parsedConfig.map(({line:e})=>e).join(` +`)+` +`}},od=class t{constructor({remotePath:e,localPath:r,force:i,matchPrefix:n}){Object.assign(this,{remotePath:e,localPath:r,force:i,matchPrefix:n})}static from(e){let[r,i,n,s,a]=e.match(/^(\+?)(.*?)(\*?):(.*?)(\*?)$/).slice(1),o=r==="+",l=n==="*";if(l!==(a==="*"))throw new ue("Invalid refspec");return new t({remotePath:i,localPath:s,force:o,matchPrefix:l})}translate(e){if(this.matchPrefix){if(e.startsWith(this.remotePath))return this.localPath+e.replace(this.remotePath,"")}else if(e===this.remotePath)return this.localPath;return null}reverseTranslate(e){if(this.matchPrefix){if(e.startsWith(this.localPath))return this.remotePath+e.replace(this.localPath,"")}else if(e===this.localPath)return this.remotePath;return null}},xg=class t{constructor(e=[]){this.rules=e}static from(e){let r=[];for(let i of e)r.push(od.from(i));return new t(r)}add(e){let r=od.from(e);this.rules.push(r)}translate(e){let r=[];for(let i of this.rules)for(let n of e){let s=i.translate(n);s&&r.push([n,s])}return r}translateOne(e){let r=null;for(let i of this.rules){let n=i.translate(e);n&&(r=n)}return r}localNamespaces(){return this.rules.filter(e=>e.matchPrefix).map(e=>e.localPath.replace(/\/$/,""))}};function bL(t,e){let r=t.replace(/\^\{\}$/,""),i=e.replace(/\^\{\}$/,""),n=-(ri);return n===0?t.endsWith("^{}")?1:-1:n}function yL(t,e){let r="",i=0,n=-1,s=0,a="\0";for(let o=0;o<=t.length;++o){if(o2){let l=r.lastIndexOf("/");l===-1?(r="",i=0):(r=r.slice(0,l),i=r.length-1-r.lastIndexOf("/")),n=o,s=0;continue}else if(r.length!==0){r="",i=0,n=o,s=0;continue}}e&&(r+=r.length>0?"/..":"..",i=2)}else r.length>0?r+="/"+t.slice(n+1,o):r=t.slice(n+1,o),i=o-n-1;n=o,s=0}else a==="."&&s!==-1?++s:s=-1}return r}function xL(t){if(!t.length)return".";let e=t[0]==="/",r=t.at(-1)==="/";return t=yL(t,!e),t.length?(r&&(t+="/"),e?`/${t}`:t):e?"/":r?"./":"."}function O(...t){if(t.length===0)return".";let e;for(let r=0;r0&&(e===void 0?e=i:e+="/"+i)}return e===void 0?".":xL(e)}var EL=t=>{if(typeof t=="number")return t;t=t.toLowerCase();let e=parseInt(t);return t.endsWith("k")&&(e*=1024),t.endsWith("m")&&(e*=1024*1024),t.endsWith("g")&&(e*=1024*1024*1024),e},Ic=t=>{if(typeof t=="boolean")return t;if(t=t.trim().toLowerCase(),t==="true"||t==="yes"||t==="on")return!0;if(t==="false"||t==="no"||t==="off")return!1;throw Error(`Expected 'true', 'false', 'yes', 'no', 'on', or 'off', but got ${t}`)},rE={core:{filemode:Ic,bare:Ic,logallrefupdates:Ic,symlinks:Ic,ignorecase:Ic,bigFileThreshold:EL}},SL=/^\[([A-Za-z0-9-.]+)(?: "(.*)")?\]$/,kL=/^[A-Za-z0-9-.]+$/,AL=/^([A-Za-z][A-Za-z-]*)(?: *= *(.*))?$/,CL=/^[A-Za-z][A-Za-z-]*$/,TL=/^(.*?)( *[#;].*)$/,PL=t=>{let e=SL.exec(t);if(e!=null){let[r,i]=e.slice(1);return[r,i]}return null},RL=t=>{let e=AL.exec(t);if(e!=null){let[r,i="true"]=e.slice(1),n=$L(i),s=FL(n);return[r,s]}return null},$L=t=>{let e=TL.exec(t);if(e==null)return t;let[r,i]=e.slice(1);return iE(r)&&iE(i)?`${r}${i}`:r},iE=t=>(t.match(/(?:^|[^\\])"/g)||[]).length%2!==0,FL=t=>t.split("").reduce((e,r,i,n)=>{let s=r==='"'&&n[i-1]!=="\\",a=r==="\\"&&n[i+1]==='"';return s||a?e:e+r},""),nE=t=>t!=null?t.toLowerCase():null,Eg=(t,e,r)=>[nE(t),e,nE(r)].filter(i=>i!=null).join("."),sE=t=>{let e=t.split("."),r=e.shift(),i=e.pop(),n=e.length?e.join("."):void 0;return{section:r,subsection:n,name:i,path:Eg(r,n,i),sectionPath:Eg(r,n,null),isSection:!!r}},IL=(t,e)=>t.reduce((r,i,n)=>e(i)?n:r,-1),Sg=class t{constructor(e){let r=null,i=null;this.parsedConfig=e?e.split(` +`).map(n=>{let s=null,a=null,o=n.trim(),l=PL(o),c=l!=null;if(c)[r,i]=l;else{let f=RL(o);f!=null&&([s,a]=f)}let u=Eg(r,i,s);return{line:n,isSection:c,section:r,subsection:i,name:s,value:a,path:u}}):[]}static from(e){return new t(e)}async get(e,r=!1){let i=sE(e).path,n=this.parsedConfig.filter(s=>s.path===i).map(({section:s,name:a,value:o})=>{let l=rE[s]&&rE[s][a];return l?l(o):o});return r?n:n.pop()}async getall(e){return this.get(e,!0)}async getSubsections(e){return this.parsedConfig.filter(r=>r.isSection&&r.section===e).map(r=>r.subsection)}async deleteSection(e,r){this.parsedConfig=this.parsedConfig.filter(i=>!(i.section===e&&i.subsection===r))}async append(e,r){return this.set(e,r,!0)}async set(e,r,i=!1){let{section:n,subsection:s,name:a,path:o,sectionPath:l,isSection:c}=sE(e),u=IL(this.parsedConfig,f=>f.path===o);if(r==null)u!==-1&&this.parsedConfig.splice(u,1);else if(u!==-1){let f=this.parsedConfig[u],d=Object.assign({},f,{name:a,value:r,modified:!0});i?this.parsedConfig.splice(u+1,0,d):this.parsedConfig[u]=d}else{let f=this.parsedConfig.findIndex(h=>h.path===l),d={section:n,subsection:s,name:a,value:r,modified:!0,path:o};if(kL.test(n)&&CL.test(a))if(f>=0)this.parsedConfig.splice(f+1,0,d);else{let h={isSection:c,section:n,subsection:s,modified:!0,path:l};this.parsedConfig.push(h,d)}}}toString(){return this.parsedConfig.map(({line:e,section:r,subsection:i,name:n,value:s,modified:a=!1})=>a?n!=null&&s!=null?typeof s=="string"&&/[#;]/.test(s)?` ${n} = "${s}"`:` ${n} = ${s}`:i!=null?`[${r} "${i}"]`:`[${r}]`:e).join(` +`)}},dt=class{static async get({fs:e,gitdir:r}){let i=await e.read(`${r}/config`,{encoding:"utf8"});return Sg.from(i)}static async save({fs:e,gitdir:r,config:i}){await e.write(`${r}/config`,i.toString(),{encoding:"utf8"})}},rd=t=>[`${t}`,`refs/${t}`,`refs/tags/${t}`,`refs/heads/${t}`,`refs/remotes/${t}`,`refs/remotes/${t}/HEAD`],ML=["config","description","index","shallow","commondir"],fg;async function Ss(t,e){return fg===void 0&&(fg=new Mc),fg.acquire(t,e)}var W=class t{static async updateRemoteRefs({fs:e,gitdir:r,remote:i,refs:n,symrefs:s,tags:a,refspecs:o=void 0,prune:l=!1,pruneTags:c=!1}){for(let v of n.values())if(!v.match(/[0-9a-f]{40}/))throw new As(v);let u=await dt.get({fs:e,gitdir:r});if(!o){if(o=await u.getall(`remote.${i}.fetch`),o.length===0)throw new Lc(i);o.unshift(`+HEAD:refs/remotes/${i}/HEAD`)}let f=xg.from(o),d=new Map;if(c){let v=await t.listRefs({fs:e,gitdir:r,filepath:"refs/tags"});await t.deleteRefs({fs:e,gitdir:r,refs:v.map(_=>`refs/tags/${_}`)})}if(a){for(let v of n.keys())if(v.startsWith("refs/tags")&&!v.endsWith("^{}")&&!await t.exists({fs:e,gitdir:r,ref:v})){let _=n.get(v);d.set(v,_)}}let h=f.translate([...n.keys()]);for(let[v,_]of h){let b=n.get(v);d.set(_,b)}let p=f.translate([...s.keys()]);for(let[v,_]of p){let b=s.get(v),S=f.translateOne(b);S&&d.set(_,`ref: ${S}`)}let g=[];if(l){for(let v of f.localNamespaces()){let _=(await t.listRefs({fs:e,gitdir:r,filepath:v})).map(b=>`${v}/${b}`);for(let b of _)d.has(b)||g.push(b)}g.length>0&&await t.deleteRefs({fs:e,gitdir:r,refs:g})}for(let[v,_]of d)await Ss(v,async()=>e.write(O(r,v),`${_.trim()} +`,"utf8"));return{pruned:g}}static async writeRef({fs:e,gitdir:r,ref:i,value:n}){if(!n.match(/[0-9a-f]{40}/))throw new As(n);await Ss(i,async()=>e.write(O(r,i),`${n.trim()} +`,"utf8"))}static async writeSymbolicRef({fs:e,gitdir:r,ref:i,value:n}){await Ss(i,async()=>e.write(O(r,i),`ref: ${n.trim()} +`,"utf8"))}static async deleteRef({fs:e,gitdir:r,ref:i}){return t.deleteRefs({fs:e,gitdir:r,refs:[i]})}static async deleteRefs({fs:e,gitdir:r,refs:i}){await Promise.all(i.map(o=>e.rm(O(r,o))));let n=await Ss("packed-refs",async()=>e.read(`${r}/packed-refs`,{encoding:"utf8"})),s=ad.from(n),a=s.refs.size;for(let o of i)s.refs.has(o)&&s.delete(o);s.refs.sizee.write(`${r}/packed-refs`,n,{encoding:"utf8"})))}static async resolve({fs:e,gitdir:r,ref:i,depth:n=void 0}){if(n!==void 0&&(n--,n===-1))return i;if(i.startsWith("ref: "))return i=i.slice(5),t.resolve({fs:e,gitdir:r,ref:i,depth:n});if(i.length===40&&/[0-9a-f]{40}/.test(i))return i;let s=await t.packedRefs({fs:e,gitdir:r}),a=rd(i).filter(o=>!ML.includes(o));for(let o of a){let l=await Ss(o,async()=>await e.read(`${r}/${o}`,{encoding:"utf8"})||s.get(o));if(l)return t.resolve({fs:e,gitdir:r,ref:l.trim(),depth:n})}throw new He(i)}static async exists({fs:e,gitdir:r,ref:i}){try{return await t.expand({fs:e,gitdir:r,ref:i}),!0}catch(n){return!1}}static async expand({fs:e,gitdir:r,ref:i}){if(i.length===40&&/[0-9a-f]{40}/.test(i))return i;let n=await t.packedRefs({fs:e,gitdir:r}),s=rd(i);for(let a of s)if(await Ss(a,async()=>e.exists(`${r}/${a}`))||n.has(a))return a;throw new He(i)}static async expandAgainstMap({ref:e,map:r}){let i=rd(e);for(let n of i)if(await r.has(n))return n;throw new He(e)}static resolveAgainstMap({ref:e,fullref:r=e,depth:i=void 0,map:n}){if(i!==void 0&&(i--,i===-1))return{fullref:r,oid:e};if(e.startsWith("ref: "))return e=e.slice(5),t.resolveAgainstMap({ref:e,fullref:r,depth:i,map:n});if(e.length===40&&/[0-9a-f]{40}/.test(e))return{fullref:r,oid:e};let s=rd(e);for(let a of s){let o=n.get(a);if(o)return t.resolveAgainstMap({ref:o.trim(),fullref:a,depth:i,map:n})}throw new He(e)}static async packedRefs({fs:e,gitdir:r}){let i=await Ss("packed-refs",async()=>e.read(`${r}/packed-refs`,{encoding:"utf8"}));return ad.from(i).refs}static async listRefs({fs:e,gitdir:r,filepath:i}){let n=t.packedRefs({fs:e,gitdir:r}),s=null;try{s=await e.readdirDeep(`${r}/${i}`),s=s.map(a=>a.replace(`${r}/${i}/`,""))}catch(a){s=[]}for(let a of(await n).keys())a.startsWith(i)&&(a=a.replace(i+"/",""),s.includes(a)||s.push(a));return s.sort(bL),s}static async listBranches({fs:e,gitdir:r,remote:i}){return i?t.listRefs({fs:e,gitdir:r,filepath:`refs/remotes/${i}`}):t.listRefs({fs:e,gitdir:r,filepath:"refs/heads"})}static async listTags({fs:e,gitdir:r}){return(await t.listRefs({fs:e,gitdir:r,filepath:"refs/tags"})).filter(n=>!n.endsWith("^{}"))}};function DL(t,e){return pd(aE(t),aE(e))}function aE(t){return t.mode==="040000"?t.path+"/":t.path}function PE(t){switch(t){case"040000":return"tree";case"100644":return"blob";case"100755":return"blob";case"120000":return"blob";case"160000":return"commit"}throw new ue(`Unexpected GitTree entry mode: ${t}`)}function OL(t){let e=[],r=0;for(;r`${e.mode} ${e.type} ${e.oid} ${e.path}`).join(` +`)}toObject(){let e=[...this._entries];return e.sort(DL),Buffer.concat(e.map(r=>{let i=Buffer.from(r.mode.replace(/^0/,"")),n=Buffer.from(" "),s=Buffer.from(r.path,"utf8"),a=Buffer.from([0]),o=Buffer.from(r.oid,"hex");return Buffer.concat([i,n,s,a,o])}))}entries(){return this._entries}*[Symbol.iterator](){for(let e of this._entries)yield e}},Cs=class{static wrap({type:e,object:r}){let i=`${e} ${r.length}\0`,n=i.length,s=n+r.length,a=new Uint8Array(s);for(let o=0;o>=1,n+=8;return i}function cE(t,e){let r=t.readUInt8(),i=128,n=15,s=112;if(r&i){let a=lE(t,r&n,4),o=lE(t,(r&s)>>4,3);return o===0&&(o=65536),e.slice(a,a+o)}else return t.slice(r)}function HL(t){let e=[t];return{next(){return Promise.resolve({done:e.length===0,value:e.pop()})},return(){return e=[],{}},[Symbol.asyncIterator](){return this}}}function $E(t){return t[Symbol.asyncIterator]?t[Symbol.asyncIterator]():t[Symbol.iterator]?t[Symbol.iterator]():t.next?t:HL(t)}var ld=class{constructor(e){if(typeof Buffer=="undefined")throw new Error("Missing Buffer dependency");this.stream=$E(e),this.buffer=null,this.cursor=0,this.undoCursor=0,this.started=!1,this._ended=!1,this._discardedBytes=0}eof(){return this._ended&&this.cursor===this.buffer.length}tell(){return this._discardedBytes+this.cursor}async byte(){if(!this.eof()&&(this.started||await this._init(),!(this.cursor===this.buffer.length&&(await this._loadnext(),this._ended))))return this._moveCursor(1),this.buffer[this.undoCursor]}async chunk(){if(!this.eof()&&(this.started||await this._init(),!(this.cursor===this.buffer.length&&(await this._loadnext(),this._ended))))return this._moveCursor(this.buffer.length),this.buffer.slice(this.undoCursor,this.cursor)}async read(e){if(!this.eof())return this.started||await this._init(),this.cursor+e>this.buffer.length&&(this._trim(),await this._accumulate(e)),this._moveCursor(e),this.buffer.slice(this.undoCursor,this.cursor)}async skip(e){this.eof()||(this.started||await this._init(),this.cursor+e>this.buffer.length&&(this._trim(),await this._accumulate(e)),this._moveCursor(e))}async undo(){this.cursor=this.undoCursor}async _next(){this.started=!0;let{done:e,value:r}=await this.stream.next();return e&&(this._ended=!0,!r)?Buffer.alloc(0):(r&&(r=Buffer.from(r)),r)}_trim(){this.buffer=this.buffer.slice(this.undoCursor),this.cursor-=this.undoCursor,this._discardedBytes+=this.undoCursor,this.undoCursor=0}_moveCursor(e){this.undoCursor=this.cursor,this.cursor+=e,this.cursor>this.buffer.length&&(this.cursor=this.buffer.length)}async _accumulate(e){if(this._ended)return;let r=[this.buffer];for(;this.cursor+e>UL(r);){let i=await this._next();if(this._ended)break;r.push(i)}this.buffer=Buffer.concat(r)}async _loadnext(){this._discardedBytes+=this.buffer.length,this.undoCursor=0,this.cursor=0,this.buffer=await this._next()}async _init(){this.buffer=await this._next()}};function UL(t){return t.reduce((e,r)=>e+r.length,0)}async function GL(t,e){let r=new ld(t),i=await r.read(4);if(i=i.toString("utf8"),i!=="PACK")throw new ue(`Invalid PACK header '${i}'`);let n=await r.read(4);if(n=n.readUInt32BE(0),n!==2)throw new ue(`Invalid packfile version: ${n}`);let s=await r.read(4);if(s=s.readUInt32BE(0),!(s<1))for(;!r.eof()&&s--;){let a=r.tell(),{type:o,length:l,ofs:c,reference:u}=await jL(r),f=new Fg.Inflate;for(;!f.result;){let d=await r.chunk();if(!d)break;if(f.push(d,!1),f.err)throw new ue(`Pako error: ${f.msg}`);if(f.result){if(f.result.length!==l)throw new ue("Inflated object size is different from that stated in packfile.");await r.undo(),await r.read(d.length-f.strm.avail_in);let h=r.tell();await e({data:f.result,type:o,num:s,offset:a,end:h,reference:u,ofs:c})}}}}async function jL(t){let e=await t.byte(),r=e>>4&7,i=e&15;if(e&128){let a=4;do e=await t.byte(),i|=(e&127)<n+1<<7|s,-1)}function qL(t,e){let r=e,i=4,n=null;do n=t.readUInt8(),r|=(n&127)<2048*1024*1024)throw new ue("To keep implementation simple, I haven't implemented the layer 5 feature needed to support packfiles > 2GB in size.");i.seek(i.tell()+4*255);let a=i.readUInt32BE(),o=[];for(let u=0;u{u===null&&(u=k);let E=Math.floor((u-k)*100/u);E!==f&&i&&await i({phase:"Receiving objects",loaded:u-k,total:u}),f=E,_=n[_],["commit","tree","blob","tag"].includes(_)?s[S]={type:_,offset:S}:_==="ofs-delta"?s[S]={type:_,offset:S}:_==="ref-delta"&&(s[S]={type:_,offset:S})});let d=Object.keys(s).map(Number);for(let[v,_]of d.entries()){let b=v+1===d.length?e.byteLength-20:d[v+1],S=s[_],k=lL.buf(e.slice(_,b))>>>0;S.end=b,S.crc=k}let h=new t({pack:Promise.resolve(e),packfileSha:a,crcs:l,hashes:o,offsets:c,getExternalRefDelta:r});f=null;let p=0,g=[0,0,0,0,0,0,0,0,0,0,0,0];for(let v in s){v=Number(v);let _=Math.floor(p*100/u);_!==f&&i&&await i({phase:"Resolving deltas",loaded:p,total:u}),p++,f=_;let b=s[v];if(!b.oid)try{h.readDepth=0,h.externalReadDepth=0;let{type:S,object:k}=await h.readSlice({start:v});g[h.readDepth]+=1;let E=await wn(Cs.wrap({type:S,object:k}));b.oid=E,o.push(E),c.set(E,v),l[E]=b.crc}catch(S){continue}}return o.sort(),h}async toBuffer(){let e=[],r=(c,u)=>{e.push(Buffer.from(c,u))};r("ff744f63","hex"),r("00000002","hex");let i=new _i(Buffer.alloc(256*4));for(let c=0;c<256;c++){let u=0;for(let f of this.hashes)parseInt(f.slice(0,2),16)<=c&&u++;i.writeUInt32BE(u)}e.push(i.buffer);for(let c of this.hashes)r(c,"hex");let n=new _i(Buffer.alloc(this.hashes.length*4));for(let c of this.hashes)n.writeUInt32BE(this.crcs[c]);e.push(n.buffer);let s=new _i(Buffer.alloc(this.hashes.length*4));for(let c of this.hashes)s.writeUInt32BE(this.offsets.get(c));e.push(s.buffer),r(this.packfileSha,"hex");let a=Buffer.concat(e),o=await wn(a),l=Buffer.alloc(20);return l.write(o,"hex"),Buffer.concat([a,l])}async load({pack:e}){this.pack=e}async unload(){this.pack=null}async read({oid:e}){if(!this.offsets.get(e)){if(this.getExternalRefDelta)return this.externalReadDepth++,this.getExternalRefDelta(e);throw new ue(`Could not read object ${e} from packfile`)}let r=this.offsets.get(e);return this.readSlice({start:r})}async readSlice({start:e}){if(this.offsetCache[e])return Object.assign({},this.offsetCache[e]);this.readDepth++;let r={16:"commit",32:"tree",48:"blob",64:"tag",96:"ofs_delta",112:"ref_delta"},i=await this.pack;if(!i)throw new ue("Could not read packfile data. The packfile may be missing, corrupted, or too large to read into memory.");let n=i.slice(e),s=new _i(n),a=s.readUInt8(),o=a&112,l=r[o];if(l===void 0)throw new ue("Unrecognized type: 0b"+o.toString(2));let c=a&15,u=c;a&128&&(u=qL(s,c));let d=null,h=null;if(l==="ofs_delta"){let g=WL(s),v=e-g;({object:d,type:l}=await this.readSlice({start:v}))}if(l==="ref_delta"){let g=s.slice(20).toString("hex");({object:d,type:l}=await this.read({oid:g}))}let p=n.slice(s.tell());if(h=Buffer.from(await FE(p)),h.byteLength!==u)throw new ue(`Packfile told us object would have length ${u} but it had length ${h.byteLength}`);return d&&(h=Buffer.from(BL(h,d))),this.readDepth>3&&(this.offsetCache[e]={type:l,object:h}),{type:l,format:"content",object:h}}},id=Symbol("PackfileCache");async function YL({fs:t,filename:e,getExternalRefDelta:r,emitter:i,emitterPrefix:n}){let s=await t.read(e);return Nc.fromIdx({idx:s,getExternalRefDelta:r})}function Ig({fs:t,cache:e,filename:r,getExternalRefDelta:i,emitter:n,emitterPrefix:s}){e[id]||(e[id]=new Map);let a=e[id].get(r);return a||(a=YL({fs:t,filename:r,getExternalRefDelta:i,emitter:n,emitterPrefix:s}),e[id].set(r,a)),a}async function XL({fs:t,cache:e,gitdir:r,oid:i,format:n="content",getExternalRefDelta:s}){let a=await t.readdir(O(r,"objects/pack"));a=a.filter(o=>o.endsWith(".idx"));for(let o of a){let l=`${r}/objects/pack/${o}`,c=await Ig({fs:t,cache:e,filename:l,getExternalRefDelta:s});if(c.error)throw new ue(c.error);if(c.offsets.has(i)){let u=l.replace(/idx$/,"pack");c.pack||(c.pack=t.read(u));let f=await c.pack;if(!f)throw c.pack=null,new ue(`Could not read packfile at ${u}. The file may be missing, corrupted, or too large to read into memory.`);if(!c._checksumVerified){let h=c.packfileSha,p=f.subarray(-20),g=Array.from(p).map(b=>b.toString(16).padStart(2,"0")).join("");if(g!==h)throw new ue(`Packfile trailer mismatch: expected ${h}, got ${g}. The packfile may be corrupted.`);let v=f.subarray(0,-20),_=await wn(v);if(_!==h)throw new ue(`Packfile payload corrupted: calculated ${_} but expected ${h}. The packfile may have been tampered with.`);c._checksumVerified=!0}let d=await c.read({oid:i,getExternalRefDelta:s});return d.format="content",d.source=`objects/pack/${o.replace(/idx$/,"pack")}`,d}}return null}async function Je({fs:t,cache:e,gitdir:r,oid:i,format:n="content"}){let s=u=>Je({fs:t,cache:e,gitdir:r,oid:u}),a;if(i==="4b825dc642cb6eb9a060e54bf8d69288fbee4904"&&(a={format:"wrapped",object:Buffer.from("tree 0\0")}),a||(a=await RE({fs:t,gitdir:r,oid:i})),!a){if(a=await XL({fs:t,cache:e,gitdir:r,oid:i,getExternalRefDelta:s}),!a)throw new He(i);return a}if(n==="deflated"||(a.format==="deflated"&&(a.object=Buffer.from(await FE(a.object)),a.format="wrapped"),n==="wrapped"))return a;let o=await wn(a.object);if(o!==i)throw new ue(`SHA check failed! Expected ${i}, computed ${o}`);let{object:l,type:c}=Cs.unwrap(a.object);if(a.type=c,a.object=l,a.format="content",n==="content")return a;throw new ue(`invalid requested format "${n}"`)}var Ui=class t extends Ce{constructor(e,r,i=!0){super(`Failed to create ${e} at ${r} because it already exists.${i?` (Hint: use 'force: true' parameter to overwrite existing ${e}.)`:""}`),this.code=this.name=t.code,this.data={noun:e,where:r,canForce:i}}};Ui.code="AlreadyExistsError";var Bc=class t extends Ce{constructor(e,r,i){super(`Found multiple ${e} matching "${r}" (${i.join(", ")}). Use a longer abbreviation length to disambiguate them.`),this.code=this.name=t.code,this.data={nouns:e,short:r,matches:i}}};Bc.code="AmbiguousError";var Hc=class t extends Ce{constructor(e){super(`Your local changes to the following files would be overwritten by checkout: ${e.join(", ")}`),this.code=this.name=t.code,this.data={filepaths:e}}};Hc.code="CheckoutConflictError";var Uc=class t extends Ce{constructor(e,r){super(`Cannot cherry-pick merge commit ${e}. Merge commits have ${r} parents and require specifying which parent to use as the base.`),this.code=this.name=t.code,this.data={oid:e,parentCount:r}}};Uc.code="CherryPickMergeCommitError";var Gc=class t extends Ce{constructor(e){super(`Cannot cherry-pick root commit ${e}. Root commits have no parents.`),this.code=this.name=t.code,this.data={oid:e}}};Gc.code="CherryPickRootCommitError";var jc=class t extends Ce{constructor(e,r){super(`Failed to checkout "${e}" because commit ${r} is not available locally. Do a git fetch to make the branch available locally.`),this.code=this.name=t.code,this.data={ref:e,oid:r}}};jc.code="CommitNotFetchedError";var Vc=class t extends Ce{constructor(){super("Empty response from git server."),this.code=this.name=t.code,this.data={}}};Vc.code="EmptyServerResponseError";var zc=class t extends Ce{constructor(){super("A simple fast-forward merge was not possible."),this.code=this.name=t.code,this.data={}}};zc.code="FastForwardError";var Wc=class t extends Ce{constructor(e,r){super(`One or more branches were not updated: ${e}`),this.code=this.name=t.code,this.data={prettyDetails:e,result:r}}};Wc.code="GitPushError";var qo=class t extends Ce{constructor(e,r,i){super(`HTTP Error: ${e} ${r}`),this.code=this.name=t.code,this.data={statusCode:e,statusMessage:r,response:i}}};qo.code="HttpError";var Ts=class t extends Ce{constructor(e){let r="invalid filepath";e==="leading-slash"||e==="trailing-slash"?r='"filepath" parameter should not include leading or trailing directory separators because these can cause problems on some platforms.':e==="directory"&&(r='"filepath" should not be a directory.'),super(r),this.code=this.name=t.code,this.data={reason:e}}};Ts.code="InvalidFilepathError";var Gi=class t extends Ce{constructor(e,r){super(`"${e}" would be an invalid git reference. (Hint: a valid alternative would be "${r}".)`),this.code=this.name=t.code,this.data={ref:e,suggestion:r}}};Gi.code="InvalidRefNameError";var qc=class t extends Ce{constructor(e){super(`Maximum search depth of ${e} exceeded.`),this.code=this.name=t.code,this.data={depth:e}}};qc.code="MaxDepthError";var Yo=class t extends Ce{constructor(){super("Merges with conflicts are not supported yet."),this.code=this.name=t.code,this.data={}}};Yo.code="MergeNotSupportedError";var pa=class t extends Ce{constructor(e,r,i,n){super(`Automatic merge failed with one or more merge conflicts in the following files: ${e.toString()}. Fix conflicts then commit the result.`),this.code=this.name=t.code,this.data={filepaths:e,bothModified:r,deleteByUs:i,deleteByTheirs:n}}};pa.code="MergeConflictError";var Zt=class t extends Ce{constructor(e){super(`No name was provided for ${e} in the argument or in the .git/config file.`),this.code=this.name=t.code,this.data={role:e}}};Zt.code="MissingNameError";var Fr=class t extends Ce{constructor(e){super(`The function requires a "${e}" parameter but none was provided.`),this.code=this.name=t.code,this.data={parameter:e}}};Fr.code="MissingParameterError";var Yc=class t extends Ce{constructor(e){super('There are multiple errors that were thrown by the method. Please refer to the "errors" property to see more'),this.code=this.name=t.code,this.data={errors:e},this.errors=e}};Yc.code="MultipleGitError";var ma=class t extends Ce{constructor(e,r){super(`Expected "${e}" but received "${r}".`),this.code=this.name=t.code,this.data={expected:e,actual:r}}};ma.code="ParseError";var Xo=class t extends Ce{constructor(e){let r="";e==="not-fast-forward"?r=" because it was not a simple fast-forward":e==="tag-exists"&&(r=" because tag already exists"),super(`Push rejected${r}. Use "force: true" to override.`),this.code=this.name=t.code,this.data={reason:e}}};Xo.code="PushRejectedError";var ks=class t extends Ce{constructor(e,r){super(`Remote does not support the "${e}" so the "${r}" parameter cannot be used.`),this.code=this.name=t.code,this.data={capability:e,parameter:r}}};ks.code="RemoteCapabilityError";var Xc=class t extends Ce{constructor(e,r){super(`Remote did not reply using the "smart" HTTP protocol. Expected "001e# service=git-upload-pack" but received: ${e}`),this.code=this.name=t.code,this.data={preview:e,response:r}}};Xc.code="SmartHttpError";var Zc=class t extends Ce{constructor(e,r,i){super(`Git remote "${e}" uses an unrecognized transport protocol: "${r}"`),this.code=this.name=t.code,this.data={url:e,transport:r,suggestion:i}}};Zc.code="UnknownTransportError";var Kc=class t extends Ce{constructor(e){super(`Cannot parse remote URL: "${e}"`),this.code=this.name=t.code,this.data={url:e}}};Kc.code="UrlParseError";var Zo=class t extends Ce{constructor(){super("The operation was canceled."),this.code=this.name=t.code,this.data={}}};Zo.code="UserCanceledError";var Qc=class t extends Ce{constructor(e){super(`Could not merge index: Entry for '${e}' is not up to date. Either reset the index entry to HEAD, or stage your unstaged changes.`),this.code=this.name=t.code,this.data={filepath:e}}};Qc.code="IndexResetError";var Jc=class t extends Ce{constructor(e){super(`"${e}" does not point to any commit. You're maybe working on a repository with no commits yet. `),this.code=this.name=t.code,this.data={ref:e}}};Jc.code="NoCommitError";var IE=Object.freeze({__proto__:null,AlreadyExistsError:Ui,AmbiguousError:Bc,CheckoutConflictError:Hc,CherryPickMergeCommitError:Uc,CherryPickRootCommitError:Gc,CommitNotFetchedError:jc,EmptyServerResponseError:Vc,FastForwardError:zc,GitPushError:Wc,HttpError:qo,InternalError:ue,InvalidFilepathError:Ts,InvalidOidError:As,InvalidRefNameError:Gi,MaxDepthError:qc,MergeNotSupportedError:Yo,MergeConflictError:pa,MissingNameError:Zt,MissingParameterError:Fr,MultipleGitError:Yc,NoRefspecError:Lc,NotFoundError:He,ObjectTypeError:yr,ParseError:ma,PushRejectedError:Xo,RemoteCapabilityError:ks,SmartHttpError:Xc,UnknownTransportError:Zc,UnsafeFilepathError:zo,UrlParseError:Kc,UserCanceledError:Zo,UnmergedPathsError:Oc,IndexResetError:Qc,NoCommitError:Jc});function kg({name:t,email:e,timestamp:r,timezoneOffset:i}){return i=ZL(i),`${t} <${e}> ${r} ${i}`}function ZL(t){let e=KL(QL(t));t=Math.abs(t);let r=Math.floor(t/60);t-=r*60;let i=String(r),n=String(t);return i.length<2&&(i="0"+i),n.length<2&&(n="0"+n),(e===-1?"-":"+")+i+n}function KL(t){return Math.sign(t)||(Object.is(t,-0)?-1:1)}function QL(t){return t===0?t:-t}function Xn(t){return t=t.replace(/\r/g,""),t=t.replace(/^\n+/,""),t=t.replace(/\n+$/,"")+` +`,t}function cd(t){let[,e,r,i,n]=t.match(/^(.*) <(.*)> (.*) (.*)$/);return{name:e,email:r,timestamp:Number(i),timezoneOffset:JL(n)}}function JL(t){let[,e,r,i]=t.match(/(\+|-)(\d\d)(\d\d)/);return i=(e==="+"?1:-1)*(Number(r)*60+Number(i)),eN(i)}function eN(t){return t===0?t:-t}var Kr=class t{constructor(e){if(typeof e=="string")this._tag=e;else if(Buffer.isBuffer(e))this._tag=e.toString("utf8");else if(typeof e=="object")this._tag=t.render(e);else throw new ue("invalid type passed to GitAnnotatedTag constructor")}static from(e){return new t(e)}static render(e){return`object ${e.object} +type ${e.type} +tag ${e.tag} +tagger ${kg(e.tagger)} + +${e.message} +${e.gpgsig?e.gpgsig:""}`}justHeaders(){return this._tag.slice(0,this._tag.indexOf(` + +`))}message(){let e=this.withoutSignature();return e.slice(e.indexOf(` + +`)+2)}parse(){return Object.assign(this.headers(),{message:this.message(),gpgsig:this.gpgsig()})}render(){return this._tag}headers(){let e=this.justHeaders().split(` +`),r=[];for(let n of e)n[0]===" "?r[r.length-1]+=` +`+n.slice(1):r.push(n);let i={};for(let n of r){let s=n.slice(0,n.indexOf(" ")),a=n.slice(n.indexOf(" ")+1);Array.isArray(i[s])?i[s].push(a):i[s]=a}return i.tagger&&(i.tagger=cd(i.tagger)),i.committer&&(i.committer=cd(i.committer)),i}withoutSignature(){let e=Xn(this._tag);return e.indexOf(` +-----BEGIN PGP SIGNATURE-----`)===-1?e:e.slice(0,e.lastIndexOf(` +-----BEGIN PGP SIGNATURE-----`))}gpgsig(){if(this._tag.indexOf(` +-----BEGIN PGP SIGNATURE-----`)===-1)return;let e=this._tag.slice(this._tag.indexOf("-----BEGIN PGP SIGNATURE-----"),this._tag.indexOf("-----END PGP SIGNATURE-----")+27);return Xn(e)}payload(){return this.withoutSignature()+` +`}toObject(){return Buffer.from(this._tag,"utf8")}static async sign(e,r,i){let n=e.payload(),{signature:s}=await r({payload:n,secretKey:i});s=Xn(s);let a=n+s;return t.from(a)}};function hg(t){return t.trim().split(` +`).map(e=>" "+e).join(` +`)+` +`}function tN(t){return t.split(` +`).map(e=>e.replace(/^ /,"")).join(` +`)}var Mr=class t{constructor(e){if(typeof e=="string")this._commit=e;else if(Buffer.isBuffer(e))this._commit=e.toString("utf8");else if(typeof e=="object")this._commit=t.render(e);else throw new ue("invalid type passed to GitCommit constructor")}static fromPayloadSignature({payload:e,signature:r}){let i=t.justHeaders(e),n=t.justMessage(e),s=Xn(i+` +gpgsig`+hg(r)+` +`+n);return new t(s)}static from(e){return new t(e)}toObject(){return Buffer.from(this._commit,"utf8")}headers(){return this.parseHeaders()}message(){return t.justMessage(this._commit)}parse(){return Object.assign({message:this.message()},this.headers())}static justMessage(e){return Xn(e.slice(e.indexOf(` + +`)+2))}static justHeaders(e){return e.slice(0,e.indexOf(` + +`))}parseHeaders(){let e=t.justHeaders(this._commit).split(` +`),r=[];for(let n of e)n[0]===" "?r[r.length-1]+=` +`+n.slice(1):r.push(n);let i={parent:[]};for(let n of r){let s=n.slice(0,n.indexOf(" ")),a=n.slice(n.indexOf(" ")+1);Array.isArray(i[s])?i[s].push(a):i[s]=a}return i.author&&(i.author=cd(i.author)),i.committer&&(i.committer=cd(i.committer)),i}static renderHeaders(e){let r="";if(e.tree?r+=`tree ${e.tree} +`:r+=`tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 +`,e.parent){if(e.parent.length===void 0)throw new ue("commit 'parent' property should be an array");for(let s of e.parent)r+=`parent ${s} +`}let i=e.author;r+=`author ${kg(i)} +`;let n=e.committer||e.author;return r+=`committer ${kg(n)} +`,e.gpgsig&&(r+="gpgsig"+hg(e.gpgsig)),r}static render(e){return t.renderHeaders(e)+` +`+Xn(e.message)}render(){return this._commit}withoutSignature(){let e=Xn(this._commit);if(e.indexOf(` +gpgsig`)===-1)return e;let r=e.slice(0,e.indexOf(` +gpgsig`)),i=e.slice(e.indexOf(`-----END PGP SIGNATURE----- +`)+28);return Xn(r+` +`+i)}isolateSignature(){let e=this._commit.slice(this._commit.indexOf("-----BEGIN PGP SIGNATURE-----"),this._commit.indexOf("-----END PGP SIGNATURE-----")+27);return tN(e)}static async sign(e,r,i){let n=e.withoutSignature(),s=t.justMessage(e._commit),{signature:a}=await r({payload:n,secretKey:i});a=Xn(a);let l=t.justHeaders(e._commit)+` +gpgsig`+hg(a)+` +`+s;return t.from(l)}};async function Ko({fs:t,cache:e,gitdir:r,oid:i}){if(i==="4b825dc642cb6eb9a060e54bf8d69288fbee4904")return{tree:Ir.from([]),oid:i};let{type:n,object:s}=await Je({fs:t,cache:e,gitdir:r,oid:i});if(n==="tag")return i=Kr.from(s).parse().object,Ko({fs:t,cache:e,gitdir:r,oid:i});if(n==="commit")return i=Mr.from(s).parse().tree,Ko({fs:t,cache:e,gitdir:r,oid:i});if(n!=="tree")throw new yr(i,n,"tree");return{tree:Ir.from(s),oid:i}}var Ag=class{constructor({fs:e,gitdir:r,ref:i,cache:n}){this.fs=e,this.cache=n,this.gitdir=r,this.mapPromise=(async()=>{let a=new Map,o;try{o=await W.resolve({fs:e,gitdir:r,ref:i})}catch(c){c instanceof He&&(o="4b825dc642cb6eb9a060e54bf8d69288fbee4904")}let l=await Ko({fs:e,cache:this.cache,gitdir:r,oid:o});return l.type="tree",l.mode="40000",a.set(".",l),a})();let s=this;this.ConstructEntry=class{constructor(o){this._fullpath=o,this._type=!1,this._mode=!1,this._stat=!1,this._content=!1,this._oid=!1}async type(){return s.type(this)}async mode(){return s.mode(this)}async stat(){return s.stat(this)}async content(){return s.content(this)}async oid(){return s.oid(this)}}}async readdir(e){let r=e._fullpath,{fs:i,cache:n,gitdir:s}=this,a=await this.mapPromise,o=a.get(r);if(!o)throw new Error(`No obj for ${r}`);let l=o.oid;if(!l)throw new Error(`No oid for obj ${JSON.stringify(o)}`);if(o.type!=="tree")return null;let{type:c,object:u}=await Je({fs:i,cache:n,gitdir:s,oid:l});if(c!==o.type)throw new yr(l,c,o.type);let f=Ir.from(u);for(let d of f)a.set(O(r,d.path),d);return f.entries().map(d=>O(r,d.path))}async type(e){if(e._type===!1){let r=await this.mapPromise,{type:i}=r.get(e._fullpath);e._type=i}return e._type}async mode(e){if(e._mode===!1){let r=await this.mapPromise,{mode:i}=r.get(e._fullpath);e._mode=AE(parseInt(i,8))}return e._mode}async stat(e){}async content(e){if(e._content===!1){let r=await this.mapPromise,{fs:i,cache:n,gitdir:s}=this,o=r.get(e._fullpath).oid,{type:l,object:c}=await Je({fs:i,cache:n,gitdir:s,oid:o});l!=="blob"?e._content=void 0:e._content=new Uint8Array(c)}return e._content}async oid(e){if(e._oid===!1){let i=(await this.mapPromise).get(e._fullpath);e._oid=i.oid}return e._oid}};function Zr({ref:t="HEAD"}={}){let e=Object.create(null);return Object.defineProperty(e,md,{value:function({fs:r,gitdir:i,cache:n}){return new Ag({fs:r,gitdir:i,ref:t,cache:n})}}),Object.freeze(e),e}var Cg=class{constructor({fs:e,dir:r,gitdir:i,cache:n}){this.fs=e,this.cache=n,this.dir=r,this.gitdir=i,this.config=null;let s=this;this.ConstructEntry=class{constructor(o){this._fullpath=o,this._type=!1,this._mode=!1,this._stat=!1,this._content=!1,this._oid=!1}async type(){return s.type(this)}async mode(){return s.mode(this)}async stat(){return s.stat(this)}async content(){return s.content(this)}async oid(){return s.oid(this)}}}async readdir(e){let r=e._fullpath,{fs:i,dir:n}=this,s=await i.readdir(O(n,r));return s===null?null:s.map(a=>O(r,a))}async type(e){return e._type===!1&&await e.stat(),e._type}async mode(e){return e._mode===!1&&await e.stat(),e._mode}async stat(e){if(e._stat===!1){let{fs:r,dir:i}=this,n=await r.lstat(`${i}/${e._fullpath}`);if(!n)throw new Error(`ENOENT: no such file or directory, lstat '${e._fullpath}'`);let s=n.isDirectory()?"tree":"blob";s==="blob"&&!n.isFile()&&!n.isSymbolicLink()&&(s="special"),e._type=s,n=Wo(n),e._mode=n.mode,n.size===-1&&e._actualSize&&(n.size=e._actualSize),e._stat=n}return e._stat}async content(e){if(e._content===!1){let{fs:r,dir:i,gitdir:n}=this;if(await e.type()==="tree")e._content=void 0;else{let s;if(await e.mode()>>12===10)s=await r.readlink(`${i}/${e._fullpath}`);else{let o=await(await this._getGitConfig(r,n)).get("core.autocrlf");s=await r.read(`${i}/${e._fullpath}`,{autocrlf:o})}e._actualSize=s.length,e._stat&&e._stat.size===-1&&(e._stat.size=e._actualSize),e._content=new Uint8Array(s)}}return e._content}async oid(e){if(e._oid===!1){let r=this,{fs:i,gitdir:n,cache:s}=this,a;await ft.acquire({fs:i,gitdir:n,cache:s},async function(o){let l=o.entriesMap.get(e._fullpath),c=await e.stat(),f=await(await r._getGitConfig(i,n)).get("core.filemode"),d=typeof process!="undefined"?process.platform!=="win32":!0;if(!l||nd(c,l,f,d)){let h=await e.content();h===void 0?a=void 0:(a=await wn(Cs.wrap({type:"blob",object:h})),l&&a===l.oid&&(!f||c.mode===l.mode)&&nd(c,l,f,d)&&o.insert({filepath:e._fullpath,stats:c,oid:a}))}else a=l.oid}),e._oid=a}return e._oid}async _getGitConfig(e,r){return this.config?this.config:(this.config=await dt.get({fs:e,gitdir:r}),this.config)}};function tl(){let t=Object.create(null);return Object.defineProperty(t,md,{value:function({fs:e,dir:r,gitdir:i,cache:n}){return new Cg({fs:e,dir:r,gitdir:i,cache:n})}}),Object.freeze(t),t}function rN(t,e){let r=e-t;return Array.from({length:r},(i,n)=>t+n)}var ME=typeof Array.prototype.flat=="undefined"?t=>t.reduce((e,r)=>e.concat(r),[]):t=>t.flat(),Tg=class{constructor(){this.value=null}consider(e){e!=null&&(this.value===null?this.value=e:ec,reduce:a=async(l,c)=>{let u=ME(c);return l!==void 0&&u.unshift(l),u},iterate:o=(l,c)=>Promise.all([...c].map(l))}){let l=n.map(h=>h[md]({fs:t,dir:r,gitdir:i,cache:e})),c=new Array(l.length).fill("."),u=rN(0,l.length),f=async h=>{u.forEach(v=>{let _=h[v];h[v]=_&&new l[v].ConstructEntry(_)});let g=(await Promise.all(u.map(v=>{let _=h[v];return _?l[v].readdir(_):[]}))).map(v=>(v===null?[]:v)[Symbol.iterator]());return{entries:h,children:iN(g)}},d=async h=>{let{entries:p,children:g}=await f(h),v=p.find(b=>b&&b._fullpath)._fullpath,_=await s(v,p);if(_!==null){let b=await o(d,g);return b=b.filter(S=>S!==void 0),a(_,b)}};return d(c)}async function Pg(t,e){let r=await t.readdir(e);r==null?await t.rm(e):r.length?await Promise.all(r.map(i=>{let n=O(e,i);return t.lstat(n).then(s=>{if(s)return s.isDirectory()?Pg(t,n):t.rm(n)})})).then(()=>t.rmdir(e)):await t.rmdir(e)}function nN(t){return sN(t)&&uE(t.then)&&uE(t.catch)}function sN(t){return t&&typeof t=="object"}function uE(t){return typeof t=="function"}function fE(t){return nN((r=>{try{return r.readFile().catch(i=>i)}catch(i){return i}})(t))}var dE=["readFile","writeFile","mkdir","rmdir","unlink","stat","lstat","readdir","readlink","symlink"];function hE(t,e){if(fE(e))for(let r of dE)t[`_${r}`]=e[r].bind(e);else for(let r of dE)t[`_${r}`]=td(e[r].bind(e));fE(e)?(e.cp&&(t._cp=e.cp.bind(e)),e.rm?t._rm=e.rm.bind(e):e.rmdir.length>1?t._rm=e.rmdir.bind(e):t._rm=Pg.bind(null,t)):(e.cp&&(t._cp=td(e.cp.bind(e))),e.rm?t._rm=td(e.rm.bind(e)):e.rmdir.length>2?t._rm=td(e.rmdir.bind(e)):t._rm=Pg.bind(null,t))}var Q=class{constructor(e){if(typeof e._original_unwrapped_fs!="undefined")return e;let r=Object.getOwnPropertyDescriptor(e,"promises");r&&r.enumerable?hE(this,e.promises):hE(this,e),this._original_unwrapped_fs=e}async exists(e,r={}){try{return await this._stat(e),!0}catch(i){if(i.code==="ENOENT"||i.code==="ENOTDIR"||(i.code||"").includes("ENS"))return!1;throw console.log('Unhandled error in "FileSystem.exists()" function',i),i}}async read(e,r={}){try{let i=await this._readFile(e,r);if(r.autocrlf==="true")try{i=new TextDecoder("utf8",{fatal:!0}).decode(i),i=i.replace(/\r\n/g,` +`),i=new TextEncoder().encode(i)}catch(n){}return typeof i!="string"&&(i=Buffer.from(i)),i}catch(i){return null}}async write(e,r,i={}){try{await this._writeFile(e,r,i)}catch(n){await this.mkdir(ha(e)),await this._writeFile(e,r,i)}}async mkdir(e,r=!1){try{await this._mkdir(e)}catch(i){if(i===null||i.code==="EEXIST")return;if(r)throw i;if(i.code==="ENOENT"){let n=ha(e);if(n==="."||n==="/"||n===e)throw i;await this.mkdir(n),await this.mkdir(e,!0)}}}async rm(e){try{await this._unlink(e)}catch(r){if(r.code!=="ENOENT")throw r}}async rmdir(e,r){try{r&&r.recursive?await this._rm(e,r):await this._rmdir(e)}catch(i){if(i.code!=="ENOENT")throw i}}async readdir(e){try{let r=await this._readdir(e);return r.sort(pd),r}catch(r){return r.code==="ENOTDIR"?null:[]}}async readdirDeep(e){let r=await this._readdir(e);return(await Promise.all(r.map(async n=>{let s=e+"/"+n;return(await this._stat(s)).isDirectory()?this.readdirDeep(s):s}))).reduce((n,s)=>n.concat(s),[])}async lstat(e){try{return await this._lstat(e)}catch(r){if(r.code==="ENOENT"||(r.code||"").includes("ENS"))return null;throw r}}async readlink(e,r={encoding:"buffer"}){try{let i=await this._readlink(e,r);return Buffer.isBuffer(i)?i:Buffer.from(i)}catch(i){if(i.code==="ENOENT"||(i.code||"").includes("ENS"))return null;throw i}}async writelink(e,r){return this._symlink(r.toString("utf8"),e)}};function T(t,e){if(e===void 0)throw new Fr(t)}function aN(t){return t.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(t)}async function ee({fsp:t,dotgit:e}){T("fsp",t),T("dotgit",e);let r=await t._stat(e).catch(()=>({isFile:()=>!1,isDirectory:()=>!1}));return r.isDirectory()?e:r.isFile()?t._readFile(e,"utf8").then(i=>i.trimRight().substr(8)).then(i=>aN(i)?i:O(ha(e),i)):e}async function ud(t,e){return!t&&!e?!1:t&&!e||!t&&e?!0:!(await t.type()==="tree"&&await e.type()==="tree"||await t.type()===await e.type()&&await t.mode()===await e.mode()&&await t.oid()===await e.oid())}async function DE({fs:t,dir:e,gitdir:r=O(e,".git"),commit:i="HEAD",cache:n={}}){try{T("fs",t),T("dir",e),T("gitdir",r);let s=new Q(t),a=[Zr({ref:i}),tl(),_a()],o=[],l=await ee({fsp:s,dotgit:r});await ft.acquire({fs:s,gitdir:l,cache:n},async function(u){o=u.unmergedPaths});let c=await Ps({fs:s,cache:n,dir:e,gitdir:l,trees:a,map:async function(u,[f,d,h]){let p=!await ud(d,h),g=o.includes(u),v=!await ud(h,f);if(p||g)return f?{path:u,mode:await f.mode(),oid:await f.oid(),type:await f.type(),content:await f.content()}:void 0;if(v)return!1;throw new Qc(u)}});await ft.acquire({fs:s,gitdir:l,cache:n},async function(u){for(let f of c)if(f!==!1){if(!f){await s.rmdir(`${e}/${f.path}`,{recursive:!0}),u.delete({filepath:f.path});continue}if(f.type==="blob"){let d=new TextDecoder().decode(f.content);await s.write(`${e}/${f.path}`,d,{mode:f.mode}),u.insert({filepath:f.path,oid:f.oid,stage:0})}}})}catch(s){throw s.caller="git.abortMerge",s}}var Rs=class{static async isIgnored({fs:e,dir:r,gitdir:i=O(r,".git"),filepath:n}){if(sd(n)===".git")return!0;if(n===".")return!1;let s="",a=O(i,"info","exclude");await e.exists(a)&&(s=await e.read(a,"utf8"));let o=[{gitignore:O(r,".gitignore"),filepath:n}],l=n.split("/").filter(Boolean);for(let u=1;u{let f=await(await dt.get({fs:o,gitdir:l})).get("core.autocrlf");return Rg({dir:e,gitdir:l,fs:o,filepath:i,index:c,force:s,parallel:a,autocrlf:f})})}catch(o){throw o.caller="git.add",o}}async function Rg({dir:t,gitdir:e,fs:r,filepath:i,index:n,force:s,parallel:a,autocrlf:o}){i=Array.isArray(i)?i:[i];let l=i.map(async d=>{if(!s&&await Rs.isIgnored({fs:r,dir:t,gitdir:e,filepath:d}))return;let h=await r.lstat(O(t,d));if(!h)throw new He(d);if(h.isDirectory()){let p=await r.readdir(O(t,d));if(a){let g=p.map(v=>Rg({dir:t,gitdir:e,fs:r,filepath:[O(d,v)],index:n,force:s,parallel:a,autocrlf:o}));await Promise.all(g)}else for(let g of p)await Rg({dir:t,gitdir:e,fs:r,filepath:[O(d,g)],index:n,force:s,parallel:a,autocrlf:o})}else{let p=h.isSymbolicLink()?await r.readlink(O(t,d)).then(LE):await r.read(O(t,d),{autocrlf:o});if(p===null)throw new He(d);let g=await Dr({fs:r,gitdir:e,type:"blob",object:p});n.insert({filepath:d,stats:h,oid:g})}}),c=await Promise.allSettled(l),u=c.filter(d=>d.status==="rejected").map(d=>d.reason);if(u.length>1)throw new Yc(u);if(u.length===1)throw u[0];return c.filter(d=>d.status==="fulfilled"&&d.value).map(d=>d.value)}async function eu({fs:t,gitdir:e,path:r}){return(await dt.get({fs:t,gitdir:e})).get(r)}function BE(t,...e){for(let r of e)if(r)for(let i of Object.keys(r)){let n=r[i];n!==void 0&&(t[i]=n)}return t}async function $s({fs:t,gitdir:e,author:r,commit:i}){let n=Math.floor(Date.now()/1e3),s={name:await eu({fs:t,gitdir:e,path:"user.name"}),email:await eu({fs:t,gitdir:e,path:"user.email"})||"",timestamp:n,timezoneOffset:new Date(n*1e3).getTimezoneOffset()},a=BE({},s,i?i.author:void 0,r);if(a.name!==void 0)return a}async function ga({fs:t,gitdir:e,author:r,committer:i,commit:n}){let s=Math.floor(Date.now()/1e3),a={name:await eu({fs:t,gitdir:e,path:"user.name"}),email:await eu({fs:t,gitdir:e,path:"user.email"})||"",timestamp:s,timezoneOffset:new Date(s*1e3).getTimezoneOffset()},o=BE({},a,n?n.committer:void 0,r,i);if(o.name!==void 0)return o}async function HE({fs:t,cache:e,gitdir:r,oid:i}){let{type:n,object:s}=await Je({fs:t,cache:e,gitdir:r,oid:i});if(n==="tag")return i=Kr.from(s).parse().object,HE({fs:t,cache:e,gitdir:r,oid:i});if(n!=="commit")throw new yr(i,n,"commit");return{commit:Mr.from(s),oid:i}}async function vn({fs:t,cache:e,gitdir:r,oid:i}){let{commit:n,oid:s}=await HE({fs:t,cache:e,gitdir:r,oid:i});return{oid:s,commit:n.parse(),payload:n.withoutSignature()}}async function ru({fs:t,cache:e,onSign:r,gitdir:i,message:n,author:s,committer:a,signingKey:o,amend:l=!1,dryRun:c=!1,noUpdateBranch:u=!1,ref:f,parent:d,tree:h}){let p=!1,g=!1;f||(g=!(await t.read(`${i}/HEAD`,{encoding:"utf8"})).startsWith("ref:"),f=await W.resolve({fs:t,gitdir:i,ref:"HEAD",depth:2}));let v,_;try{v=await W.resolve({fs:t,gitdir:i,ref:f}),_=await vn({fs:t,gitdir:i,oid:v,cache:{}})}catch(k){p=!0}if(l&&p)throw new Jc(f);let b=l?await $s({fs:t,gitdir:i,author:s,commit:_.commit}):await $s({fs:t,gitdir:i,author:s});if(!b)throw new Zt("author");let S=l?await ga({fs:t,gitdir:i,author:b,committer:a,commit:_.commit}):await ga({fs:t,gitdir:i,author:b,committer:a});if(!S)throw new Zt("committer");return ft.acquire({fs:t,gitdir:i,cache:e,allowUnmerged:!1},async function(k){let A=TE(k.entries).get(".");if(h||(h=await UE({fs:t,gitdir:i,inode:A,dryRun:c})),d?d=await Promise.all(d.map(y=>W.resolve({fs:t,gitdir:i,ref:y}))):l?d=_.commit.parent:d=v?[v]:[],!n)if(l)n=_.commit.message;else throw new Fr("message");let w=Mr.from({tree:h,parent:d,author:b,committer:S,message:n});o&&(w=await Mr.sign(w,r,o));let x=await Dr({fs:t,gitdir:i,type:"commit",object:w.toObject(),dryRun:c});return!u&&!c&&await W.writeRef({fs:t,gitdir:i,ref:g?"HEAD":f,value:x}),x})}async function UE({fs:t,gitdir:e,inode:r,dryRun:i}){let n=r.children;for(let l of n)l.type==="tree"&&(l.metadata.mode="040000",l.metadata.oid=await UE({fs:t,gitdir:e,inode:l,dryRun:i}));let s=n.map(l=>({mode:l.metadata.mode,path:l.basename,oid:l.metadata.oid,type:l.type})),a=Ir.from(s);return await Dr({fs:t,gitdir:e,type:"tree",object:a.toObject(),dryRun:i})}async function iu({fs:t,cache:e,gitdir:r,oid:i,filepath:n}){if(n.startsWith("/"))throw new Ts("leading-slash");if(n.endsWith("/"))throw new Ts("trailing-slash");let s=i,a=await Ko({fs:t,cache:e,gitdir:r,oid:i}),o=a.tree;if(n==="")i=a.oid;else{let l=n.split("/");i=await GE({fs:t,cache:e,gitdir:r,tree:o,pathArray:l,oid:s,filepath:n})}return i}async function GE({fs:t,cache:e,gitdir:r,tree:i,pathArray:n,oid:s,filepath:a}){let o=n.shift();for(let l of i)if(l.path===o){if(n.length===0)return l.oid;{let{type:c,object:u}=await Je({fs:t,cache:e,gitdir:r,oid:l.oid});if(c!=="tree")throw new yr(s,c,"tree",a);return i=Ir.from(u),GE({fs:t,cache:e,gitdir:r,tree:i,pathArray:n,oid:s,filepath:a})}}throw new He(`file or directory found at "${s}:${a}"`)}async function rl({fs:t,cache:e,gitdir:r,oid:i,filepath:n=void 0}){n!==void 0&&(i=await iu({fs:t,cache:e,gitdir:r,oid:i,filepath:n}));let{tree:s,oid:a}=await Ko({fs:t,cache:e,gitdir:r,oid:i});return{oid:a,tree:s.entries()}}async function nu({fs:t,gitdir:e,tree:r}){let i=Ir.from(r).toObject();return await Dr({fs:t,gitdir:e,type:"tree",object:i,format:"content"})}async function uN({fs:t,cache:e,onSign:r,gitdir:i,ref:n,oid:s,note:a,force:o,author:l,committer:c,signingKey:u}){let f;try{f=await W.resolve({gitdir:i,fs:t,ref:n})}catch(_){if(!(_ instanceof He))throw _}let h=(await rl({fs:t,cache:e,gitdir:i,oid:f||"4b825dc642cb6eb9a060e54bf8d69288fbee4904"})).tree;if(o)h=h.filter(_=>_.path!==s);else for(let _ of h)if(_.path===s)throw new Ui("note",s);typeof a=="string"&&(a=Buffer.from(a,"utf8"));let p=await Dr({fs:t,gitdir:i,type:"blob",object:a,format:"content"});h.push({mode:"100644",path:s,oid:p,type:"blob"});let g=await nu({fs:t,gitdir:i,tree:h});return await ru({fs:t,cache:e,onSign:r,gitdir:i,ref:n,tree:g,parent:f&&[f],message:`Note added by 'isomorphic-git addNote' +`,author:l,committer:c,signingKey:u})}async function jE({fs:t,onSign:e,dir:r,gitdir:i=O(r,".git"),ref:n="refs/notes/commits",oid:s,note:a,force:o,author:l,committer:c,signingKey:u,cache:f={}}){try{T("fs",t),T("gitdir",i),T("oid",s),T("note",a),u&&T("onSign",e);let d=new Q(t),h=await $s({fs:d,gitdir:i,author:l});if(!h)throw new Zt("author");let p=await ga({fs:d,gitdir:i,author:h,committer:c});if(!p)throw new Zt("committer");let g=await ee({fsp:d,dotgit:i});return await uN({fs:d,cache:f,onSign:e,gitdir:g,ref:n,oid:s,note:a,force:o,author:h,committer:p,signingKey:u})}catch(d){throw d.caller="git.addNote",d}}var fN=/(^|[/.])([/.]|$)|^@$|@{|[\x00-\x20\x7f~^:?*[\\]|\.lock(\/|$)/;function tu(t,e){if(typeof t!="string")throw new TypeError("Reference name must be a string");return!fN.test(t)&&(!!e||t.includes("/"))}async function VE({fs:t,gitdir:e,remote:r,url:i,force:n}){if(!tu(r,!0))throw new Gi(r,Dc.clean(r));let s=await dt.get({fs:t,gitdir:e});if(!n&&(await s.getSubsections("remote")).includes(r)&&i!==await s.get(`remote.${r}.url`))throw new Ui("remote",r);await s.set(`remote.${r}.url`,i),await s.set(`remote.${r}.fetch`,`+refs/heads/*:refs/remotes/${r}/*`),await dt.save({fs:t,gitdir:e,config:s})}async function zE({fs:t,dir:e,gitdir:r=O(e,".git"),remote:i,url:n,force:s=!1}){try{T("fs",t),T("gitdir",r),T("remote",i),T("url",n);let a=new Q(t),o=await ee({fsp:a,dotgit:r});return await VE({fs:a,gitdir:o,remote:i,url:n,force:s})}catch(a){throw a.caller="git.addRemote",a}}async function dN({fs:t,cache:e,onSign:r,gitdir:i,ref:n,tagger:s,message:a=n,gpgsig:o,object:l,signingKey:c,force:u=!1}){if(n=n.startsWith("refs/tags/")?n:`refs/tags/${n}`,!u&&await W.exists({fs:t,gitdir:i,ref:n}))throw new Ui("tag",n);let f=await W.resolve({fs:t,gitdir:i,ref:l||"HEAD"}),{type:d}=await Je({fs:t,cache:e,gitdir:i,oid:f}),h=Kr.from({object:f,type:d,tag:n.replace("refs/tags/",""),tagger:s,message:a,gpgsig:o});c&&(h=await Kr.sign(h,r,c));let p=await Dr({fs:t,gitdir:i,type:"tag",object:h.toObject()});await W.writeRef({fs:t,gitdir:i,ref:n,value:p})}async function WE({fs:t,onSign:e,dir:r,gitdir:i=O(r,".git"),ref:n,tagger:s,message:a=n,gpgsig:o,object:l,signingKey:c,force:u=!1,cache:f={}}){try{T("fs",t),T("gitdir",i),T("ref",n),c&&T("onSign",e);let d=new Q(t),h=await ee({fsp:d,dotgit:i}),p=await $s({fs:d,gitdir:h,author:s});if(!p)throw new Zt("tagger");return await dN({fs:d,cache:f,onSign:e,gitdir:h,ref:n,tagger:p,message:a,gpgsig:o,object:l,signingKey:c,force:u})}catch(d){throw d.caller="git.annotatedTag",d}}async function hN({fs:t,gitdir:e,ref:r,object:i,checkout:n=!1,force:s=!1}){if(!tu(r,!0))throw new Gi(r,Dc.clean(r));let a=`refs/heads/${r}`;if(!s&&await W.exists({fs:t,gitdir:e,ref:a}))throw new Ui("branch",r,!1);let o;try{o=await W.resolve({fs:t,gitdir:e,ref:i||"HEAD"})}catch(l){}o&&await W.writeRef({fs:t,gitdir:e,ref:a,value:o}),n&&await W.writeSymbolicRef({fs:t,gitdir:e,ref:"HEAD",value:a})}async function qE({fs:t,dir:e,gitdir:r=O(e,".git"),ref:i,object:n,checkout:s=!1,force:a=!1}){try{T("fs",t),T("gitdir",r),T("ref",i);let o=new Q(t),l=await ee({fsp:o,dotgit:r});return await hN({fs:o,gitdir:l,ref:i,object:n,checkout:s,force:a})}catch(o){throw o.caller="git.branch",o}}var YE=(t,e)=>t==="."||e==null||e.length===0||e==="."?!0:e.length>=t.length?e.startsWith(t):t.startsWith(e);async function Mg({fs:t,cache:e,onProgress:r,onPostCheckout:i,dir:n,gitdir:s,remote:a,ref:o,filepaths:l,noCheckout:c,noUpdateHead:u,dryRun:f,force:d,track:h=!0,nonBlocking:p=!1,batchSize:g=100}){let v;if(i)try{v=await W.resolve({fs:t,gitdir:s,ref:"HEAD"})}catch(b){v="0000000000000000000000000000000000000000"}let _;try{_=await W.resolve({fs:t,gitdir:s,ref:o})}catch(b){if(o==="HEAD")throw b;let S=`${a}/${o}`;if(_=await W.resolve({fs:t,gitdir:s,ref:S}),h){let k=await dt.get({fs:t,gitdir:s});await k.set(`branch.${o}.remote`,a),await k.set(`branch.${o}.merge`,`refs/heads/${o}`),await dt.save({fs:t,gitdir:s,config:k})}await W.writeRef({fs:t,gitdir:s,ref:`refs/heads/${o}`,value:_})}if(!c){let b;try{b=await pN({fs:t,cache:e,onProgress:r,dir:n,gitdir:s,ref:o,force:d,filepaths:l})}catch(w){throw w instanceof He&&w.data.what===_?new jc(o,_):w}let S=b.filter(([w])=>w==="conflict").map(([w,x])=>x);if(S.length>0)throw new Hc(S);let k=b.filter(([w])=>w==="error").map(([w,x])=>x);if(k.length>0)throw new ue(k.join(", "));if(f){i&&await i({previousHead:v,newHead:_,type:l!=null&&l.length>0?"file":"branch"});return}let E=0,A=b.length;if(await ft.acquire({fs:t,gitdir:s,cache:e},async function(w){await Promise.all(b.filter(([x])=>x==="delete"||x==="delete-index").map(async function([x,y]){let C=`${n}/${y}`;x==="delete"&&await t.rm(C),w.delete({filepath:y}),r&&await r({phase:"Updating workdir",loaded:++E,total:A})}))}),await ft.acquire({fs:t,gitdir:s,cache:e},async function(w){for(let[x,y]of b)if(x==="rmdir"||x==="rmdir-index"){let C=`${n}/${y}`;try{x==="rmdir"&&await t.rmdir(C),w.delete({filepath:y}),r&&await r({phase:"Updating workdir",loaded:++E,total:A})}catch(P){if(P.code==="ENOTEMPTY")console.log(`Did not delete ${y} because directory is not empty`);else throw P}}}),await Promise.all(b.filter(([w])=>w==="mkdir"||w==="mkdir-index").map(async function([w,x]){let y=`${n}/${x}`;await t.mkdir(y),r&&await r({phase:"Updating workdir",loaded:++E,total:A})})),p){let w=b.filter(([y])=>y==="create"||y==="create-index"||y==="update"||y==="mkdir-index"),x=await pE("Update Working Dir",w.map(([y,C,P,L,N])=>()=>gN({fs:t,cache:e,gitdir:s,dir:n},[y,C,P,L,N])),r,g);await ft.acquire({fs:t,gitdir:s,cache:e,allowUnmerged:!0},async function(y){await pE("Update Index",x.map(([C,P,L])=>()=>mN({index:y,fullpath:C,oid:P,stats:L})),r,g)})}else await ft.acquire({fs:t,gitdir:s,cache:e,allowUnmerged:!0},async function(w){await Promise.all(b.filter(([x])=>x==="create"||x==="create-index"||x==="update"||x==="mkdir-index").map(async function([x,y,C,P,L]){let N=`${n}/${y}`;try{if(x!=="create-index"&&x!=="mkdir-index"){let{object:ge}=await Je({fs:t,cache:e,gitdir:s,oid:C});if(L&&await t.rm(N),P===33188)await t.write(N,ge);else if(P===33261)await t.write(N,ge,{mode:511});else if(P===40960)await t.writelink(N,ge);else throw new ue(`Invalid mode 0o${P.toString(8)} detected in blob ${C}`)}let B=await t.lstat(N);P===33261&&(B.mode=493),x==="mkdir-index"&&(B.mode=57344),w.insert({filepath:y,stats:B,oid:C}),r&&await r({phase:"Updating workdir",loaded:++E,total:A})}catch(B){console.log(B)}}))});i&&await i({previousHead:v,newHead:_,type:l!=null&&l.length>0?"file":"branch"})}if(!u){let b=await W.expand({fs:t,gitdir:s,ref:o});b.startsWith("refs/heads")?await W.writeSymbolicRef({fs:t,gitdir:s,ref:"HEAD",value:b}):await W.writeRef({fs:t,gitdir:s,ref:"HEAD",value:_})}}async function pN({fs:t,cache:e,onProgress:r,dir:i,gitdir:n,ref:s,force:a,filepaths:o}){let l=0;return Ps({fs:t,cache:e,dir:i,gitdir:n,trees:[Zr({ref:s}),tl(),_a()],map:async function(c,[u,f,d]){if(c===".")return;if(o&&!o.some(p=>YE(c,p)))return null;switch(r&&await r({phase:"Analyzing workdir",loaded:++l}),[!!d,!!u,!!f].map(Number).join("")){case"000":return;case"001":return a&&o&&o.includes(c)?["delete",c]:void 0;case"010":switch(await u.type()){case"tree":return["mkdir",c];case"blob":return["create",c,await u.oid(),await u.mode()];case"commit":return["mkdir-index",c,await u.oid(),await u.mode()];default:return["error",`new entry Unhandled type ${await u.type()}`]}case"011":switch(`${await u.type()}-${await f.type()}`){case"tree-tree":return;case"tree-blob":case"blob-tree":return["conflict",c];case"blob-blob":return await u.oid()!==await f.oid()?a?["update",c,await u.oid(),await u.mode(),await u.mode()!==await f.mode()]:["conflict",c]:await u.mode()!==await f.mode()?a?["update",c,await u.oid(),await u.mode(),!0]:["conflict",c]:["create-index",c,await u.oid(),await u.mode()];case"commit-tree":return;case"commit-blob":return["conflict",c];default:return["error",`new entry Unhandled type ${u.type}`]}case"100":return["delete-index",c];case"101":switch(await d.type()){case"tree":return["rmdir-index",c];case"blob":return await d.oid()!==await f.oid()?a?["delete",c]:["conflict",c]:["delete",c];case"commit":return["rmdir-index",c];default:return["error",`delete entry Unhandled type ${await d.type()}`]}case"110":case"111":switch(`${await d.type()}-${await u.type()}`){case"tree-tree":return;case"blob-blob":{if(await d.oid()===await u.oid()&&await d.mode()===await u.mode()&&!a)return;if(f){if(await f.oid()!==await d.oid()&&await f.oid()!==await u.oid())return a?["update",c,await u.oid(),await u.mode(),await u.mode()!==await f.mode()]:["conflict",c]}else if(a)return["update",c,await u.oid(),await u.mode(),await u.mode()!==await d.mode()];return await u.mode()!==await d.mode()?["update",c,await u.oid(),await u.mode(),!0]:await u.oid()!==await d.oid()?["update",c,await u.oid(),await u.mode(),!1]:void 0}case"tree-blob":return["update-dir-to-blob",c,await u.oid()];case"blob-tree":return["update-blob-to-tree",c];case"commit-commit":return["mkdir-index",c,await u.oid(),await u.mode()];default:return["error",`update entry Unhandled type ${await d.type()}-${await u.type()}`]}}},reduce:async function(c,u){return u=ME(u),c?c&&c[0]==="rmdir"?(u.push(c),u):(u.unshift(c),u):u}})}async function mN({index:t,fullpath:e,stats:r,oid:i}){try{t.insert({filepath:e,stats:r,oid:i})}catch(n){console.warn(`Error inserting ${e} into index:`,n)}}async function gN({fs:t,cache:e,gitdir:r,dir:i},[n,s,a,o,l]){let c=`${i}/${s}`;if(n!=="create-index"&&n!=="mkdir-index"){let{object:f}=await Je({fs:t,cache:e,gitdir:r,oid:a});if(l&&await t.rm(c),o===33188)await t.write(c,f);else if(o===33261)await t.write(c,f,{mode:511});else if(o===40960)await t.writelink(c,f);else throw new ue(`Invalid mode 0o${o.toString(8)} detected in blob ${a}`)}let u=await t.lstat(c);return o===33261&&(u.mode=493),n==="mkdir-index"&&(u.mode=57344),[s,a,u]}async function pE(t,e,r,i){let n=[];try{for(let s=0;sl());(await Promise.allSettled(a)).forEach(l=>{l.status==="fulfilled"&&n.push(l.value)}),r&&await r({phase:"Updating workdir",loaded:s+a.length,total:e.length})}return n}catch(s){console.error(`Error during ${t}: ${s}`)}return n}async function Dg({fs:t,onProgress:e,onPostCheckout:r,dir:i,gitdir:n=O(i,".git"),remote:s="origin",ref:a,filepaths:o,noCheckout:l=!1,noUpdateHead:c=a===void 0,dryRun:u=!1,force:f=!1,track:d=!0,cache:h={},nonBlocking:p=!1,batchSize:g=100}){try{T("fs",t),T("dir",i),T("gitdir",n);let v=a||"HEAD",_=new Q(t),b=await ee({fsp:_,dotgit:n});return await Mg({fs:_,cache:h,onProgress:e,onPostCheckout:r,dir:i,gitdir:b,remote:s,ref:v,filepaths:o,noCheckout:l,noUpdateHead:c,dryRun:u,force:f,track:d,nonBlocking:p,batchSize:g})}catch(v){throw v.caller="git.checkout",v}}var mg=/^.*(\r?\n|$)/gm;function vN({branches:t,contents:e}){let r=t[1],i=t[2],n=e[0],s=e[1],a=e[2],o=s.match(mg),l=n.match(mg),c=a.match(mg),u=uL(o,l,c),f=7,d="",h=!0;for(let p of u)p.ok&&(d+=p.ok.join("")),p.conflict&&(h=!1,d+=`${"<".repeat(f)} ${r} +`,d+=p.conflict.a.join(""),d+=`${"=".repeat(f)} +`,d+=p.conflict.b.join(""),d+=`${">".repeat(f)} ${i} +`);return{cleanMerge:h,mergedText:d}}async function XE({fs:t,cache:e,dir:r,gitdir:i=O(r,".git"),index:n,ourOid:s,baseOid:a,theirOid:o,ourName:l="ours",baseName:c="base",theirName:u="theirs",dryRun:f=!1,abortOnConflict:d=!0,mergeDriver:h}){let p=Zr({ref:s}),g=Zr({ref:a}),v=Zr({ref:o}),_=[],b=[],S=[],k=[],E=await Ps({fs:t,cache:e,dir:r,gitdir:i,trees:[p,g,v],map:async function(A,[w,x,y]){let C=sd(A),P=await ud(w,x),L=await ud(y,x);switch(`${P}-${L}`){case"false-false":return{mode:await x.mode(),path:C,oid:await x.oid(),type:await x.type()};case"false-true":return!y&&await w.type()==="tree"?{mode:await w.mode(),path:C,oid:await w.oid(),type:await w.type()}:y?{mode:await y.mode(),path:C,oid:await y.oid(),type:await y.type()}:void 0;case"true-false":return!w&&await y.type()==="tree"?{mode:await y.mode(),path:C,oid:await y.oid(),type:await y.type()}:w?{mode:await w.mode(),path:C,oid:await w.oid(),type:await w.type()}:void 0;case"true-true":{if(w&&y&&await w.type()==="tree"&&await y.type()==="tree")return{mode:await w.mode(),path:C,oid:await w.oid(),type:"tree"};if(w&&y&&await w.type()==="blob"&&await y.type()==="blob")return wN({fs:t,gitdir:i,path:C,ours:w,base:x,theirs:y,ourName:l,baseName:c,theirName:u,mergeDriver:h}).then(async N=>{if(N.cleanMerge)d||n.insert({filepath:A,oid:N.mergeResult.oid,stage:0});else if(_.push(A),b.push(A),!d){let B="";x&&await x.type()==="blob"&&(B=await x.oid());let ge=await w.oid(),Le=await y.oid();n.delete({filepath:A}),B&&n.insert({filepath:A,oid:B,stage:1}),n.insert({filepath:A,oid:ge,stage:2}),n.insert({filepath:A,oid:Le,stage:3})}return N.mergeResult});if(x&&!w&&y&&await x.type()==="blob"&&await y.type()==="blob"){if(_.push(A),S.push(A),!d){let N=await x.oid(),B=await y.oid();n.delete({filepath:A}),n.insert({filepath:A,oid:N,stage:1}),n.insert({filepath:A,oid:B,stage:3})}return{mode:await y.mode(),oid:await y.oid(),type:"blob",path:C}}if(x&&w&&!y&&await x.type()==="blob"&&await w.type()==="blob"){if(_.push(A),k.push(A),!d){let N=await x.oid(),B=await w.oid();n.delete({filepath:A}),n.insert({filepath:A,oid:N,stage:1}),n.insert({filepath:A,oid:B,stage:2})}return{mode:await w.mode(),oid:await w.oid(),type:"blob",path:C}}if(x&&!w&&!y&&(await x.type()==="blob"||await x.type()==="tree"))return;throw new Yo}}},reduce:_.length!==0&&(!r||d)?void 0:async(A,w)=>{let x=w.filter(Boolean);if(A&&!(A&&A.type==="tree"&&x.length===0&&A.path!==".")){if(x.length>0||A.path==="."&&x.length===0){let C=new Ir(x).toObject(),P=await Dr({fs:t,gitdir:i,type:"tree",object:C,dryRun:f});A.oid=P}return A}}});return _.length!==0?(r&&!d&&await Ps({fs:t,cache:e,dir:r,gitdir:i,trees:[Zr({ref:E.oid})],map:async function(A,[w]){let x=`${r}/${A}`;if(await w.type()==="blob"){let y=await w.mode(),C=new TextDecoder().decode(await w.content());await t.write(x,C,{mode:y})}return!0}}),new pa(_,b,S,k)):E.oid}async function wN({fs:t,gitdir:e,path:r,ours:i,base:n,theirs:s,ourName:a,theirName:o,baseName:l,dryRun:c,mergeDriver:u=vN}){let f="blob",d="100755",h="",p="";n&&await n.type()==="blob"&&(d=await n.mode(),h=await n.oid(),p=Buffer.from(await n.content()).toString("utf8"));let g=d===await i.mode()?await s.mode():await i.mode();if(await i.oid()===await s.oid())return{cleanMerge:!0,mergeResult:{mode:g,path:r,oid:await i.oid(),type:f}};if(await i.oid()===h)return{cleanMerge:!0,mergeResult:{mode:g,path:r,oid:await s.oid(),type:f}};if(await s.oid()===h)return{cleanMerge:!0,mergeResult:{mode:g,path:r,oid:await i.oid(),type:f}};let v=Buffer.from(await i.content()).toString("utf8"),_=Buffer.from(await s.content()).toString("utf8"),{mergedText:b,cleanMerge:S}=await u({branches:[l,a,o],contents:[p,v,_],path:r}),k=await Dr({fs:t,gitdir:e,type:"blob",object:Buffer.from(b,"utf8"),dryRun:c});return{cleanMerge:S,mergeResult:{mode:g,path:r,oid:k,type:f}}}var _N={stage:_a,workdir:tl},gg;async function Qo(t,e){return gg===void 0&&(gg=new Mc),gg.acquire(t,e)}async function bN(t,e,r,i,n=null){let s=O(r,i),a=await t.lstat(s);if(!a)throw new He(s);if(a.isDirectory())throw new ue(`${s}: file expected, but found directory`);let o=n?await RE({fs:t,gitdir:e,oid:n}):void 0,l=o?n:void 0;return o||await Qo({fs:t,gitdir:e,currentFilepath:s},async()=>{let c=a.isSymbolicLink()?await t.readlink(s).then(LE):await t.read(s);if(c===null)throw new He(s);l=await Dr({fs:t,gitdir:e,type:"blob",object:c})}),l}async function yN({fs:t,dir:e,gitdir:r,entries:i}){async function n(s){if(s.type==="tree"){if(!s.oid){let a=await Promise.all(s.children.map(n));s.oid=await nu({fs:t,gitdir:r,tree:a}),s.mode=16384}}else s.type==="blob"&&(s.oid=await bN(t,r,e,s.path,s.oid),s.mode=33188);return s.path=s.path.split("/").pop(),s}return Promise.all(i.map(n))}async function mE({fs:t,dir:e,gitdir:r,treePair:i}){let n=i[1]==="stage",s=i.map(h=>typeof h=="string"?_N[h]():h),a=[],u=await Ps({fs:t,cache:{},dir:e,gitdir:r,trees:s,map:async(h,[p,g])=>{if(!(h==="."||await Rs.isIgnored({fs:t,dir:e,gitdir:r,filepath:h}))&&g)return(!p||await p.oid()!==await g.oid()&&await g.oid()!==void 0)&&a.push([p,g]),{mode:await g.mode(),path:h,oid:await g.oid(),type:await g.type()}},reduce:async(h,p)=>(p=p.filter(Boolean),h?(h.children=p,h):p.length>0?p:void 0),iterate:async(h,p)=>{let g=[];for(let v of p){let[_,b]=v;n?b&&(await t.exists(`${e}/${b.toString()}`)?g.push(v):a.push([null,b])):_&&(b?g.push(v):a.push([_,null]))}return g.length?Promise.all(g.map(h)):[]}});if(a.length===0||u.length===0)return null;let d=(await yN({fs:t,dir:e,gitdir:r,entries:u})).filter(Boolean).map(h=>({mode:h.mode,path:h.path,oid:h.oid,type:h.type}));return nu({fs:t,gitdir:r,tree:d})}async function ZE({fs:t,dir:e,gitdir:r,stashCommit:i,parentCommit:n,wasStaged:s}){let a=[],o=[],l=await Ps({fs:t,cache:{},dir:e,gitdir:r,trees:[Zr({ref:n}),Zr({ref:i})],map:async(c,[u,f])=>{if(c==="."||await Rs.isIgnored({fs:t,dir:e,gitdir:r,filepath:c}))return;let d=f?await f.type():await u.type();if(d!=="tree"&&d!=="blob")return;if(!f&&u){let p=d==="tree"?"rmdir":"rm";return d==="tree"&&a.push(c),d==="blob"&&s&&o.push({filepath:c,oid:await u.oid()}),{method:p,filepath:c}}let h=await f.oid();if(!u||await u.oid()!==h)return d==="tree"?{method:"mkdir",filepath:c}:(s&&o.push({filepath:c,oid:h,stats:await t.lstat(O(e,c))}),{method:"write",filepath:c,oid:h})}});await Qo({fs:t,gitdir:r,dirRemoved:a,ops:l},async()=>{for(let c of l){let u=O(e,c.filepath);switch(c.method){case"rmdir":await t.rmdir(u);break;case"mkdir":await t.mkdir(u);break;case"rm":await t.rm(u);break;case"write":if(!a.some(f=>u.startsWith(f))){let{object:f}=await Je({fs:t,cache:{},gitdir:r,oid:c.oid});await t.exists(u)&&await t.rm(u),await t.write(u,f)}break}}}),await ft.acquire({fs:t,gitdir:r,cache:{}},async c=>{o.forEach(({filepath:u,stats:f,oid:d})=>{c.insert({filepath:u,stats:f,oid:d})})})}async function gE({fs:t,cache:e,dir:r,gitdir:i,oid:n,dryRun:s=!1,noUpdateBranch:a=!1,abortOnConflict:o=!0,committer:l,mergeDriver:c}){let{commit:u,oid:f}=await vn({fs:t,cache:e,gitdir:i,oid:n});if(u.parent.length>1)throw new Uc(f,u.parent.length);if(u.parent.length===0)throw new Gc(f);let d=await W.resolve({fs:t,gitdir:i,ref:"HEAD"}),{commit:h}=await vn({fs:t,cache:e,gitdir:i,oid:d}),p=u.parent[0],{commit:g}=await vn({fs:t,cache:e,gitdir:i,oid:p}),v=await ft.acquire({fs:t,gitdir:i,cache:e,allowUnmerged:!1},async b=>XE({fs:t,cache:e,dir:r,gitdir:i,index:b,ourOid:h.tree,baseOid:g.tree,theirOid:u.tree,ourName:"HEAD",baseName:`parent of ${f.slice(0,7)}`,theirName:f.slice(0,7),dryRun:s,abortOnConflict:o,mergeDriver:c}));if(v instanceof pa)throw v;let _=await ru({fs:t,cache:e,gitdir:i,message:u.message,tree:v,parent:[d],author:u.author,committer:l,dryRun:s,noUpdateBranch:a});return r&&!s&&!a&&await ZE({fs:t,dir:r,gitdir:i,stashCommit:_,parentCommit:d,wasStaged:!0}),_}async function KE({fs:t,dir:e,gitdir:r=O(e,".git"),oid:i,cache:n={},committer:s,dryRun:a=!1,noUpdateBranch:o=!1,abortOnConflict:l=!0,mergeDriver:c}){try{T("fs",t),T("gitdir",r),T("oid",i);let u=new Q(t),f=await ee({fsp:u,dotgit:r}),{commit:d}=await vn({fs:u,cache:n,gitdir:f,oid:i});if(d.parent&&d.parent.length>1)return await gE({fs:u,cache:n,dir:e,gitdir:f,oid:i,dryRun:a,noUpdateBranch:o,abortOnConflict:l,committer:void 0,mergeDriver:c});let h=await ga({fs:u,gitdir:f,committer:s});if(!h)throw new Zt("committer");return await gE({fs:u,cache:n,dir:e,gitdir:f,oid:i,dryRun:a,noUpdateBranch:o,abortOnConflict:l,committer:h,mergeDriver:c})}catch(u){throw u.caller="git.cherryPick",u}}var xN=/^refs\/(heads\/|tags\/|remotes\/)?(.*)/;function da(t){let e=xN.exec(t);return e?e[1]==="remotes/"&&t.endsWith("/HEAD")?e[2].slice(0,-5):e[2]:t}async function Is({fs:t,gitdir:e,fullname:r=!1,test:i=!1}){let n=await W.resolve({fs:t,gitdir:e,ref:"HEAD",depth:2});if(i)try{await W.resolve({fs:t,gitdir:e,ref:n})}catch(s){return}if(n.startsWith("refs/"))return r?n:da(n)}function EN(t){return t=t.replace(/^git@([^:]+):/,"https://$1/"),t=t.replace(/^ssh:\/\//,"https://"),t}function QE({username:t="",password:e=""}){return`Basic ${Buffer.from(`${t}:${e}`).toString("base64")}`}async function su(t,e){let r=$E(t);for(;;){let{value:i,done:n}=await r.next();if(i&&await e(i),n)break}r.return&&r.return()}async function fd(t){let e=0,r=[];await su(t,s=>{r.push(s),e+=s.byteLength});let i=new Uint8Array(e),n=0;for(let s of r)i.set(s,n),n+=s.byteLength;return i}function vE(t){let e=t.match(/^https?:\/\/([^/]+)@/);if(e==null)return{url:t,auth:{}};e=e[1];let[r,i]=e.split(":");return t=t.replace(`${e}@`,""),{url:t,auth:{username:r,password:i}}}function $g(t,e){let r=e.toString(16);return"0".repeat(t-r.length)+r}var ot=class{static flush(){return Buffer.from("0000","utf8")}static delim(){return Buffer.from("0001","utf8")}static encode(e){typeof e=="string"&&(e=Buffer.from(e));let r=e.length+4,i=$g(4,r);return Buffer.concat([Buffer.from(i,"utf8"),e])}static streamReader(e){let r=new ld(e);return async function(){try{let n=await r.read(4);if(n==null)return!0;if(n=parseInt(n.toString("utf8"),16),n===0||n===1)return null;let s=await r.read(n-4);return s==null?!0:s}catch(n){return e.error=n,!0}}}};async function wE(t){let e={},r;for(;r=await t(),r!==!0;){if(r===null)continue;r=r.toString("utf8").replace(/\n$/,"");let i=r.indexOf("=");if(i>-1){let n=r.slice(0,i),s=r.slice(i+1);e[n]=s}else e[r]=!0}return{protocolVersion:2,capabilities2:e}}async function _E(t,{service:e}){let r=new Set,i=new Map,n=new Map,s=ot.streamReader(t),a=await s();for(;a===null;)a=await s();if(a===!0)throw new Vc;if(a.includes("version 2"))return wE(s);if(a.toString("utf8").replace(/\n$/,"")!==`# service=${e}`)throw new ma(`# service=${e}\\n`,a.toString("utf8"));let o=await s();for(;o===null;)o=await s();if(o===!0)return{capabilities:r,refs:i,symrefs:n};if(o=o.toString("utf8"),o.includes("version 2"))return wE(s);let[l,c]=vg(o,"\0","\\x00");if(c.split(" ").map(u=>r.add(u)),l!=="0000000000000000000000000000000000000000 capabilities^{}"){let[u,f]=vg(l," "," ");for(i.set(f,u);;){let d=await s();if(d===!0)break;if(d!==null){let[h,p]=vg(d.toString("utf8")," "," ");i.set(p,h)}}}for(let u of r)if(u.startsWith("symref=")){let f=u.match(/symref=([^:]+):(.*)/);f.length===3&&n.set(f[1],f[2])}return{protocolVersion:1,capabilities:r,refs:i,symrefs:n}}function vg(t,e,r){let i=t.trim().split(e);if(i.length!==2)throw new ma(`Two strings separated by '${r}'`,t.toString("utf8"));return i}var bE=(t,e)=>t.endsWith("?")?`${t}${e}`:`${t}/${e.replace(/^https?:\/\//,"")}`,yE=(t,e)=>{(e.username||e.password)&&(t.Authorization=QE(e)),e.headers&&Object.assign(t,e.headers)},wg=async t=>{try{let e=Buffer.from(await fd(t.body)),r=e.toString("utf8");return{preview:r.length<256?r:r.slice(0,256)+"...",response:r,data:e}}catch(e){return{}}},Jo=class{static async capabilities(){return["discover","connect"]}static async discover({http:e,onProgress:r,onAuth:i,onAuthSuccess:n,onAuthFailure:s,corsProxy:a,service:o,url:l,headers:c,protocolVersion:u}){let{url:f,auth:d}=vE(l),h=a?bE(a,f):f;(d.username||d.password)&&(c.Authorization=QE(d)),u===2&&(c["Git-Protocol"]="version=2");let p,g,v=!1;do if(p=await e.request({onProgress:r,method:"GET",url:`${h}/info/refs?service=${o}`,headers:c}),g=!1,p.statusCode===401||p.statusCode===203){let _=v?s:i;if(_){if(d=await _(f,{...d,headers:{...c}}),d&&d.cancel)throw new Zo;d&&(yE(c,d),v=!0,g=!0)}}else p.statusCode===200&&v&&n&&await n(f,d);while(g);if(p.statusCode!==200){let{response:_}=await wg(p);throw new qo(p.statusCode,p.statusMessage,_)}if(p.headers["content-type"]===`application/x-${o}-advertisement`){let _=await _E(p.body,{service:o});return _.auth=d,_}else{let{preview:_,response:b,data:S}=await wg(p);try{let k=await _E([S],{service:o});return k.auth=d,k}catch(k){throw new Xc(_,b)}}}static async connect({http:e,onProgress:r,corsProxy:i,service:n,url:s,auth:a,body:o,headers:l}){let c=vE(s);c&&(s=c.url),i&&(s=bE(i,s)),l["content-type"]=`application/x-${n}-request`,l.accept=`application/x-${n}-result`,yE(l,a);let u=await e.request({onProgress:r,method:"POST",url:`${s}/${n}`,body:o,headers:l});if(u.statusCode!==200){let{response:f}=wg(u);throw new qo(u.statusCode,u.statusMessage,f)}return u}},el=class{static getRemoteHelperFor({url:e}){let r=new Map;r.set("http",Jo),r.set("https",Jo);let i=SN({url:e});if(!i)throw new Kc(e);if(r.has(i.transport))return r.get(i.transport);throw new Zc(e,i.transport,i.transport==="ssh"?EN(e):void 0)}};function SN({url:t}){if(t.startsWith("git@"))return{transport:"ssh",address:t};let e=t.match(/(\w+)(:\/\/|::)(.*)/);if(e!==null){if(e[2]==="://")return{transport:e[1],address:e[0]};if(e[2]==="::")return{transport:e[1],address:e[3]}}}var fa=null,va=class{static async read({fs:e,gitdir:r}){fa===null&&(fa=new Mc);let i=O(r,"shallow"),n=new Set;return await fa.acquire(i,async function(){let s=await e.read(i,{encoding:"utf8"});if(s===null||s.trim()==="")return n;s.trim().split(` +`).map(a=>n.add(a))}),n}static async write({fs:e,gitdir:r,oids:i}){fa===null&&(fa=new Mc);let n=O(r,"shallow");if(i.size>0){let s=[...i].join(` +`)+` +`;await fa.acquire(n,async function(){await e.write(n,s,{encoding:"utf8"})})}else await fa.acquire(n,async function(){await e.rm(n)})}};async function kN({fs:t,gitdir:e,oid:r}){let i=`objects/${r.slice(0,2)}/${r.slice(2)}`;return t.exists(`${e}/${i}`)}async function AN({fs:t,cache:e,gitdir:r,oid:i,getExternalRefDelta:n}){let s=await t.readdir(O(r,"objects/pack"));s=s.filter(a=>a.endsWith(".idx"));for(let a of s){let o=`${r}/objects/pack/${a}`,l=await Ig({fs:t,cache:e,filename:o,getExternalRefDelta:n});if(l.error)throw new ue(l.error);if(l.offsets.has(i))return!0}return!1}async function xE({fs:t,cache:e,gitdir:r,oid:i,format:n="content"}){let s=o=>Je({fs:t,cache:e,gitdir:r,oid:o}),a=await kN({fs:t,gitdir:r,oid:i});return a||(a=await AN({fs:t,cache:e,gitdir:r,oid:i,getExternalRefDelta:s})),a}function CN(t){let n="5041434b"+"00000002"+"00000000";return t.slice(0,12).toString("hex")===n}function JE(t,e){let r=t.map(i=>i.split("=",1)[0]);return e.filter(i=>{let n=i.split("=",1)[0];return r.includes(n)})}var gd={name:"isomorphic-git",version:"1.37.4",agent:"git/isomorphic-git@1.37.4"},Vo=class{constructor(){this._queue=[]}write(e){if(this._ended)throw Error("You cannot write to a FIFO that has already been ended!");if(this._waiting){let r=this._waiting;this._waiting=null,r({value:e})}else this._queue.push(e)}end(){if(this._ended=!0,this._waiting){let e=this._waiting;this._waiting=null,e({done:!0})}}destroy(e){this.error=e,this.end()}async next(){if(this._queue.length>0)return{value:this._queue.shift()};if(this._ended)return{done:!0};if(this._waiting)throw Error("You cannot call read until the previous call to read has returned!");return new Promise(e=>{this._waiting=e})}};function TN(t){let e=t.indexOf("\r"),r=t.indexOf(` +`);return e===-1&&r===-1?-1:e===-1?r+1:r===-1?e+1:r===e+1?r+1:Math.min(e,r)+1}function eS(t){let e=new Vo,r="";return(async()=>(await su(t,i=>{for(i=i.toString("utf8"),r+=i;;){let n=TN(r);if(n===-1)break;e.write(r.slice(0,n)),r=r.slice(n)}}),r.length>0&&e.write(r),e.end()))(),e}var dd=class{static demux(e){let r=ot.streamReader(e),i=new Vo,n=new Vo,s=new Vo,a=async function(){let o=await r();if(o===null)return a();if(o===!0){i.end(),s.end(),e.error?n.destroy(e.error):n.end();return}switch(o[0]){case 1:{n.write(o.slice(1));break}case 2:{s.write(o.slice(1));break}case 3:{let l=o.slice(1);s.write(l),i.end(),s.end(),n.destroy(new Error(l.toString("utf8")));return}default:i.write(o)}a()};return a(),{packetlines:i,packfile:n,progress:s}}};async function PN(t){let{packetlines:e,packfile:r,progress:i}=dd.demux(t),n=[],s=[],a=[],o=!1,l=!1;return new Promise((c,u)=>{su(e,f=>{let d=f.toString("utf8").trim();if(d.startsWith("shallow")){let h=d.slice(-41).trim();h.length!==40&&u(new As(h)),n.push(h)}else if(d.startsWith("unshallow")){let h=d.slice(-41).trim();h.length!==40&&u(new As(h)),s.push(h)}else if(d.startsWith("ACK")){let[,h,p]=d.split(" ");a.push({oid:h,status:p}),p||(l=!0)}else d.startsWith("NAK")?(o=!0,l=!0):(l=!0,o=!0);l&&(t.error?u(t.error):c({shallows:n,unshallows:s,acks:a,nak:o,packfile:r,progress:i}))}).finally(()=>{l||(t.error?u(t.error):c({shallows:n,unshallows:s,acks:a,nak:o,packfile:r,progress:i}))})})}function RN({capabilities:t=[],wants:e=[],haves:r=[],shallows:i=[],depth:n=null,since:s=null,exclude:a=[]}){let o=[];e=[...new Set(e)];let l=` ${t.join(" ")}`;for(let c of e)o.push(ot.encode(`want ${c}${l} +`)),l="";for(let c of i)o.push(ot.encode(`shallow ${c} +`));n!==null&&o.push(ot.encode(`deepen ${n} +`)),s!==null&&o.push(ot.encode(`deepen-since ${Math.floor(s.valueOf()/1e3)} +`));for(let c of a)o.push(ot.encode(`deepen-not ${c} +`));o.push(ot.flush());for(let c of r)o.push(ot.encode(`have ${c} +`));return o.push(ot.encode(`done +`)),o}async function Og({fs:t,cache:e,http:r,onProgress:i,onMessage:n,onAuth:s,onAuthSuccess:a,onAuthFailure:o,gitdir:l,ref:c,remoteRef:u,remote:f,url:d,corsProxy:h,depth:p=null,since:g=null,exclude:v=[],relative:_=!1,tags:b=!1,singleBranch:S=!1,headers:k={},prune:E=!1,pruneTags:A=!1}){let w=c||await Is({fs:t,gitdir:l,test:!0}),x=await dt.get({fs:t,gitdir:l}),y=f||w&&await x.get(`branch.${w}.remote`)||"origin",C=d||await x.get(`remote.${y}.url`);if(typeof C=="undefined")throw new Fr("remote OR url");let P=u||w&&await x.get(`branch.${w}.merge`)||c||"HEAD";h===void 0&&(h=await x.get("http.corsProxy"));let L=el.getRemoteHelperFor({url:C}),N=await L.discover({http:r,onAuth:s,onAuthSuccess:a,onAuthFailure:o,corsProxy:h,service:"git-upload-pack",url:C,headers:k,protocolVersion:1}),B=N.auth,ge=N.refs;if(ge.size===0)return{defaultBranch:null,fetchHead:null,fetchHeadDescription:null};if(p!==null&&!N.capabilities.has("shallow"))throw new ks("shallow","depth");if(g!==null&&!N.capabilities.has("deepen-since"))throw new ks("deepen-since","since");if(v.length>0&&!N.capabilities.has("deepen-not"))throw new ks("deepen-not","exclude");if(_===!0&&!N.capabilities.has("deepen-relative"))throw new ks("deepen-relative","relative");let{oid:Le,fullref:ke}=W.resolveAgainstMap({ref:P,map:ge});for(let D of ge.keys())D===ke||D==="HEAD"||D.startsWith("refs/heads/")||b&&D.startsWith("refs/tags/")||ge.delete(D);let ne=JE([...N.capabilities],["multi_ack_detailed","no-done","side-band-64k","ofs-delta",`agent=${gd.agent}`]);_&&ne.push("deepen-relative");let Ee=S?[Le]:ge.values(),_e=S?[w]:await W.listRefs({fs:t,gitdir:l,filepath:"refs"}),z=[];for(let D of _e)try{D=await W.expand({fs:t,gitdir:l,ref:D});let M=await W.resolve({fs:t,gitdir:l,ref:D});await xE({fs:t,cache:e,gitdir:l,oid:M})&&z.push(M)}catch(M){}z=[...new Set(z)];let X=await va.read({fs:t,gitdir:l}),V=N.capabilities.has("shallow")?[...X]:[],Ne=RN({capabilities:ne,wants:Ee,haves:z,shallows:V,depth:p,since:g,exclude:v}),gr=Buffer.from(await fd(Ne)),Nt=await L.connect({http:r,onProgress:i,corsProxy:h,service:"git-upload-pack",url:C,auth:B,body:[gr],headers:k}),Fe=await PN(Nt.body);Nt.headers&&(Fe.headers=Nt.headers);for(let D of Fe.shallows)if(!X.has(D))try{let{object:M}=await Je({fs:t,cache:e,gitdir:l,oid:D}),ae=new Mr(M),Te=await Promise.all(ae.headers().parent.map(Tr=>xE({fs:t,cache:e,gitdir:l,oid:Tr})));Te.length===0||Te.every(Tr=>Tr)||X.add(D)}catch(M){X.add(D)}for(let D of Fe.unshallows)X.delete(D);if(await va.write({fs:t,gitdir:l,oids:X}),S){let D=new Map([[ke,Le]]),M=new Map,ae=10,Te=ke;for(;ae--;){let vo=N.symrefs.get(Te);if(vo===void 0)break;M.set(Te,vo),Te=vo}let Bt=ge.get(Te);Bt&&D.set(Te,Bt);let{pruned:Tr}=await W.updateRemoteRefs({fs:t,gitdir:l,remote:y,refs:D,symrefs:M,tags:b,prune:E});E&&(Fe.pruned=Tr)}else{let{pruned:D}=await W.updateRemoteRefs({fs:t,gitdir:l,remote:y,refs:ge,symrefs:N.symrefs,tags:b,prune:E,pruneTags:A});E&&(Fe.pruned=D)}if(Fe.HEAD=N.symrefs.get("HEAD"),Fe.HEAD===void 0){let{oid:D}=W.resolveAgainstMap({ref:"HEAD",map:ge});for(let[M,ae]of ge.entries())if(M!=="HEAD"&&ae===D){Fe.HEAD=M;break}}let Pt=ke.startsWith("refs/tags")?"tag":"branch";if(Fe.FETCH_HEAD={oid:Le,description:`${Pt} '${da(ke)}' of ${C}`},i||n){let D=eS(Fe.progress);su(D,async M=>{if(n&&await n(M),i){let ae=M.match(/([^:]*).*\((\d+?)\/(\d+?)\)/);ae&&await i({phase:ae[1].trim(),loaded:parseInt(ae[2],10),total:parseInt(ae[3],10)})}})}let Rt=Buffer.from(await fd(Fe.packfile));if(Nt.body.error)throw Nt.body.error;let Ye=Rt.slice(-20).toString("hex"),J={defaultBranch:Fe.HEAD,fetchHead:Fe.FETCH_HEAD.oid,fetchHeadDescription:Fe.FETCH_HEAD.description};if(Fe.headers&&(J.headers=Fe.headers),E&&(J.pruned=Fe.pruned),Ye!==""&&!CN(Rt)){J.packfile=`objects/pack/pack-${Ye}.pack`;let D=O(l,J.packfile);await t.write(D,Rt);let M=Te=>Je({fs:t,cache:e,gitdir:l,oid:Te}),ae=await Nc.fromPack({pack:Rt,getExternalRefDelta:M,onProgress:i});await t.write(D.replace(/\.pack$/,".idx"),await ae.toBuffer())}return J}async function tS({fs:t,bare:e=!1,dir:r,gitdir:i=e?r:O(r,".git"),defaultBranch:n="master"}){if(await t.exists(i+"/config"))return;let s=["hooks","info","objects/info","objects/pack","refs/heads","refs/tags"];s=s.map(a=>i+"/"+a);for(let a of s)await t.mkdir(a);await t.write(i+"/config",`[core] + repositoryformatversion = 0 + filemode = false + bare = ${e} +`+(e?"":` logallrefupdates = true +`)+` symlinks = false + ignorecase = true +`),await t.write(i+"/HEAD",`ref: refs/heads/${n} +`)}async function $N({fs:t,cache:e,http:r,onProgress:i,onMessage:n,onAuth:s,onAuthSuccess:a,onAuthFailure:o,onPostCheckout:l,dir:c,gitdir:u,url:f,corsProxy:d,ref:h,remote:p,depth:g,since:v,exclude:_,relative:b,singleBranch:S,noCheckout:k,noTags:E,headers:A,nonBlocking:w,batchSize:x=100}){try{if(await tS({fs:t,gitdir:u}),await VE({fs:t,gitdir:u,remote:p,url:f,force:!1}),d){let P=await dt.get({fs:t,gitdir:u});await P.set("http.corsProxy",d),await dt.save({fs:t,gitdir:u,config:P})}let{defaultBranch:y,fetchHead:C}=await Og({fs:t,cache:e,http:r,onProgress:i,onMessage:n,onAuth:s,onAuthSuccess:a,onAuthFailure:o,gitdir:u,ref:h,remote:p,corsProxy:d,depth:g,since:v,exclude:_,relative:b,singleBranch:S,headers:A,tags:!E});if(C===null)return;h=h||y,h=h.replace("refs/heads/",""),await Mg({fs:t,cache:e,onProgress:i,onPostCheckout:l,dir:c,gitdir:u,ref:h,remote:p,noCheckout:k,nonBlocking:w,batchSize:x})}catch(y){throw await t.rmdir(u,{recursive:!0,maxRetries:10}).catch(()=>{}),y}}async function rS({fs:t,http:e,onProgress:r,onMessage:i,onAuth:n,onAuthSuccess:s,onAuthFailure:a,onPostCheckout:o,dir:l,gitdir:c=O(l,".git"),url:u,corsProxy:f=void 0,ref:d=void 0,remote:h="origin",depth:p=void 0,since:g=void 0,exclude:v=[],relative:_=!1,singleBranch:b=!1,noCheckout:S=!1,noTags:k=!1,headers:E={},cache:A={},nonBlocking:w=!1,batchSize:x=100}){try{T("fs",t),T("http",e),T("gitdir",c),S||T("dir",l),T("url",u);let y=new Q(t),C=await ee({fsp:y,dotgit:c});return await $N({fs:y,cache:A,http:e,onProgress:r,onMessage:i,onAuth:n,onAuthSuccess:s,onAuthFailure:a,onPostCheckout:o,dir:l,gitdir:C,url:u,corsProxy:f,ref:d,remote:h,depth:p,since:g,exclude:v,relative:_,singleBranch:b,noCheckout:S,noTags:k,headers:E,nonBlocking:w,batchSize:x})}catch(y){throw y.caller="git.clone",y}}async function iS({fs:t,onSign:e,dir:r,gitdir:i=O(r,".git"),message:n,author:s,committer:a,signingKey:o,amend:l=!1,dryRun:c=!1,noUpdateBranch:u=!1,ref:f,parent:d,tree:h,cache:p={}}){try{T("fs",t),l||T("message",n),o&&T("onSign",e);let g=new Q(t),v=await ee({fsp:g,dotgit:i});return await ru({fs:g,cache:p,onSign:e,gitdir:v,message:n,author:s,committer:a,signingKey:o,amend:l,dryRun:c,noUpdateBranch:u,ref:f,parent:d,tree:h})}catch(g){throw g.caller="git.commit",g}}async function nS({fs:t,dir:e,gitdir:r=O(e,".git"),fullname:i=!1,test:n=!1}){try{T("fs",t),T("gitdir",r);let s=new Q(t),a=await ee({fsp:s,dotgit:r});return await Is({fs:s,gitdir:a,fullname:i,test:n})}catch(s){throw s.caller="git.currentBranch",s}}async function FN({fs:t,gitdir:e,ref:r}){if(r=r.startsWith("refs/heads/")?r:`refs/heads/${r}`,!await W.exists({fs:t,gitdir:e,ref:r}))throw new He(r);let n=await W.expand({fs:t,gitdir:e,ref:r}),s=await Is({fs:t,gitdir:e,fullname:!0});if(n===s){let l=await W.resolve({fs:t,gitdir:e,ref:n});await W.writeRef({fs:t,gitdir:e,ref:"HEAD",value:l})}await W.deleteRef({fs:t,gitdir:e,ref:n});let a=da(r),o=await dt.get({fs:t,gitdir:e});await o.deleteSection("branch",a),await dt.save({fs:t,gitdir:e,config:o})}async function sS({fs:t,dir:e,gitdir:r=O(e,".git"),ref:i}){try{T("fs",t),T("ref",i);let n=new Q(t),s=await ee({fsp:n,dotgit:r});return await FN({fs:n,gitdir:s,ref:i})}catch(n){throw n.caller="git.deleteBranch",n}}async function aS({fs:t,dir:e,gitdir:r=O(e,".git"),ref:i}){try{T("fs",t),T("ref",i);let n=new Q(t),s=await ee({fsp:n,dotgit:r});await W.deleteRef({fs:n,gitdir:s,ref:i})}catch(n){throw n.caller="git.deleteRef",n}}async function IN({fs:t,gitdir:e,remote:r}){let i=await dt.get({fs:t,gitdir:e});await i.deleteSection("remote",r),await dt.save({fs:t,gitdir:e,config:i})}async function oS({fs:t,dir:e,gitdir:r=O(e,".git"),remote:i}){try{T("fs",t),T("remote",i);let n=new Q(t),s=await ee({fsp:n,dotgit:r});return await IN({fs:n,gitdir:s,remote:i})}catch(n){throw n.caller="git.deleteRemote",n}}async function MN({fs:t,gitdir:e,ref:r}){r=r.startsWith("refs/tags/")?r:`refs/tags/${r}`,await W.deleteRef({fs:t,gitdir:e,ref:r})}async function lS({fs:t,dir:e,gitdir:r=O(e,".git"),ref:i}){try{T("fs",t),T("ref",i);let n=new Q(t),s=await ee({fsp:n,dotgit:r});return await MN({fs:n,gitdir:s,ref:i})}catch(n){throw n.caller="git.deleteTag",n}}async function DN({fs:t,gitdir:e,oid:r}){let i=r.slice(0,2);return(await t.readdir(`${e}/objects/${i}`)).map(s=>`${i}${s}`).filter(s=>s.startsWith(r))}async function ON({fs:t,cache:e,gitdir:r,oid:i,getExternalRefDelta:n}){let s=[],a=await t.readdir(O(r,"objects/pack"));a=a.filter(o=>o.endsWith(".idx"));for(let o of a){let l=`${r}/objects/pack/${o}`,c=await Ig({fs:t,cache:e,filename:l,getExternalRefDelta:n});if(c.error)throw new ue(c.error);for(let u of c.offsets.keys())u.startsWith(i)&&s.push(u)}return s}async function LN({fs:t,cache:e,gitdir:r,oid:i}){let n=o=>Je({fs:t,cache:e,gitdir:r,oid:o}),s=await DN({fs:t,gitdir:r,oid:i}),a=await ON({fs:t,cache:e,gitdir:r,oid:i,getExternalRefDelta:n});for(let o of a)s.indexOf(o)===-1&&s.push(o);if(s.length===1)return s[0];throw s.length>1?new Bc("oids",i,s):new He(`an object matching "${i}"`)}async function cS({fs:t,dir:e,gitdir:r=O(e,".git"),oid:i,cache:n={}}){try{T("fs",t),T("gitdir",r),T("oid",i);let s=new Q(t),a=await ee({fsp:s,dotgit:r});return await LN({fs:s,cache:n,gitdir:a,oid:i})}catch(s){throw s.caller="git.expandOid",s}}async function uS({fs:t,dir:e,gitdir:r=O(e,".git"),ref:i}){try{T("fs",t),T("gitdir",r),T("ref",i);let n=new Q(t),s=await ee({fsp:n,dotgit:r});return await W.expand({fs:n,gitdir:s,ref:i})}catch(n){throw n.caller="git.expandRef",n}}async function Lg({fs:t,cache:e,gitdir:r,oids:i}){let n={},s=i.length,a=i.map((o,l)=>({index:l,oid:o}));for(;a.length;){let o=new Set;for(let{oid:c,index:u}of a)n[c]||(n[c]=new Set),n[c].add(u),n[c].size===s&&o.add(c);if(o.size>0)return[...o];let l=new Map;for(let{oid:c,index:u}of a)try{let{object:f}=await Je({fs:t,cache:e,gitdir:r,oid:c}),d=Mr.from(f),{parent:h}=d.parseHeaders();for(let p of h)(!n[p]||!n[p].has(u))&&l.set(p+":"+u,{oid:p,index:u})}catch(f){}a=Array.from(l.values())}return[]}async function fS({fs:t,cache:e,dir:r,gitdir:i,ours:n,theirs:s,fastForward:a=!0,fastForwardOnly:o=!1,dryRun:l=!1,noUpdateBranch:c=!1,abortOnConflict:u=!0,message:f,author:d,committer:h,signingKey:p,onSign:g,mergeDriver:v,allowUnrelatedHistories:_=!1}){n===void 0&&(n=await Is({fs:t,gitdir:i,fullname:!0})),n=await W.expand({fs:t,gitdir:i,ref:n}),s=await W.expand({fs:t,gitdir:i,ref:s});let b=await W.resolve({fs:t,gitdir:i,ref:n}),S=await W.resolve({fs:t,gitdir:i,ref:s}),k=await Lg({fs:t,cache:e,gitdir:i,oids:[b,S]});if(k.length!==1)if(k.length===0&&_)k.push("4b825dc642cb6eb9a060e54bf8d69288fbee4904");else throw new Yo;let E=k[0];if(E===S)return{oid:b,alreadyMerged:!0};if(a&&E===b)return!l&&!c&&await W.writeRef({fs:t,gitdir:i,ref:n,value:S}),{oid:S,fastForward:!0};{if(o)throw new zc;let A=await ft.acquire({fs:t,gitdir:i,cache:e,allowUnmerged:!1},async x=>XE({fs:t,cache:e,dir:r,gitdir:i,index:x,ourOid:b,theirOid:S,baseOid:E,ourName:da(n),baseName:"base",theirName:da(s),dryRun:l,abortOnConflict:u,mergeDriver:v}));if(A instanceof pa)throw A;return f||(f=`Merge branch '${da(s)}' into ${da(n)}`),{oid:await ru({fs:t,cache:e,gitdir:i,message:f,ref:n,tree:A,parent:[b,S],author:d,committer:h,signingKey:p,onSign:g,dryRun:l,noUpdateBranch:c}),tree:A,mergeCommit:!0}}}async function dS({fs:t,cache:e,http:r,onProgress:i,onMessage:n,onAuth:s,onAuthSuccess:a,onAuthFailure:o,dir:l,gitdir:c,ref:u,url:f,remote:d,remoteRef:h,prune:p,pruneTags:g,fastForward:v,fastForwardOnly:_,corsProxy:b,singleBranch:S,headers:k,author:E,committer:A,signingKey:w}){try{if(!u){let C=await Is({fs:t,gitdir:c});if(!C)throw new Fr("ref");u=C}let{fetchHead:x,fetchHeadDescription:y}=await Og({fs:t,cache:e,http:r,onProgress:i,onMessage:n,onAuth:s,onAuthSuccess:a,onAuthFailure:o,gitdir:c,corsProxy:b,ref:u,url:f,remote:d,remoteRef:h,singleBranch:S,headers:k,prune:p,pruneTags:g});await fS({fs:t,cache:e,gitdir:c,ours:u,theirs:x,fastForward:v,fastForwardOnly:_,message:`Merge ${y}`,author:E,committer:A,signingKey:w,dryRun:!1,noUpdateBranch:!1}),await Mg({fs:t,cache:e,onProgress:i,dir:l,gitdir:c,ref:u,remote:d,noCheckout:!1})}catch(x){throw x.caller="git.pull",x}}async function hS({fs:t,http:e,onProgress:r,onMessage:i,onAuth:n,onAuthSuccess:s,onAuthFailure:a,dir:o,gitdir:l=O(o,".git"),ref:c,url:u,remote:f,remoteRef:d,corsProxy:h,singleBranch:p,headers:g={},cache:v={}}){try{T("fs",t),T("http",e),T("gitdir",l);let _={name:"",email:"",timestamp:Date.now(),timezoneOffset:0},b=new Q(t),S=await ee({fsp:b,dotgit:l});return await dS({fs:b,cache:v,http:e,onProgress:r,onMessage:i,onAuth:n,onAuthSuccess:s,onAuthFailure:a,dir:o,gitdir:S,ref:c,url:u,remote:f,remoteRef:d,fastForwardOnly:!0,corsProxy:h,singleBranch:p,headers:g,author:_,committer:_})}catch(_){throw _.caller="git.fastForward",_}}async function pS({fs:t,http:e,onProgress:r,onMessage:i,onAuth:n,onAuthSuccess:s,onAuthFailure:a,dir:o,gitdir:l=O(o,".git"),ref:c,remote:u,remoteRef:f,url:d,corsProxy:h,depth:p=null,since:g=null,exclude:v=[],relative:_=!1,tags:b=!1,singleBranch:S=!1,headers:k={},prune:E=!1,pruneTags:A=!1,cache:w={}}){try{T("fs",t),T("http",e),T("gitdir",l);let x=new Q(t),y=await ee({fsp:x,dotgit:l});return await Og({fs:x,cache:w,http:e,onProgress:r,onMessage:i,onAuth:n,onAuthSuccess:s,onAuthFailure:a,gitdir:y,ref:c,remote:u,remoteRef:f,url:d,corsProxy:h,depth:p,since:g,exclude:v,relative:_,tags:b,singleBranch:S,headers:k,prune:E,pruneTags:A})}catch(x){throw x.caller="git.fetch",x}}async function mS({fs:t,dir:e,gitdir:r=O(e,".git"),oids:i,cache:n={}}){try{T("fs",t),T("gitdir",r),T("oids",i);let s=new Q(t),a=await ee({fsp:s,dotgit:r});return await Lg({fs:s,cache:n,gitdir:a,oids:i})}catch(s){throw s.caller="git.findMergeBase",s}}async function gS({fs:t,filepath:e}){if(await t.exists(O(e,".git")))return e;{let r=ha(e);if(r===e)throw new He(`git root for ${e}`);return gS({fs:t,filepath:r})}}async function vS({fs:t,filepath:e}){try{return T("fs",t),T("filepath",e),await gS({fs:new Q(t),filepath:e})}catch(r){throw r.caller="git.findRoot",r}}async function wS({fs:t,dir:e,gitdir:r=O(e,".git"),path:i}){try{T("fs",t),T("gitdir",r),T("path",i);let n=new Q(t),s=await ee({fsp:n,dotgit:r});return await eu({fs:n,gitdir:s,path:i})}catch(n){throw n.caller="git.getConfig",n}}async function NN({fs:t,gitdir:e,path:r}){return(await dt.get({fs:t,gitdir:e})).getall(r)}async function _S({fs:t,dir:e,gitdir:r=O(e,".git"),path:i}){try{T("fs",t),T("gitdir",r),T("path",i);let n=new Q(t),s=await ee({fsp:n,dotgit:r});return await NN({fs:n,gitdir:s,path:i})}catch(n){throw n.caller="git.getConfigAll",n}}async function bS({http:t,onAuth:e,onAuthSuccess:r,onAuthFailure:i,corsProxy:n,url:s,headers:a={},forPush:o=!1}){try{T("http",t),T("url",s);let c=await el.getRemoteHelperFor({url:s}).discover({http:t,onAuth:e,onAuthSuccess:r,onAuthFailure:i,corsProxy:n,service:o?"git-receive-pack":"git-upload-pack",url:s,headers:a,protocolVersion:1}),u={capabilities:[...c.capabilities]};for(let[f,d]of c.refs){let h=f.split("/"),p=h.pop(),g=u;for(let v of h)g[v]=g[v]||{},g=g[v];g[p]=d}for(let[f,d]of c.symrefs){let h=f.split("/"),p=h.pop(),g=u;for(let v of h)g[v]=g[v]||{},g=g[v];g[p]=d}return u}catch(l){throw l.caller="git.getRemoteInfo",l}}function yS(t,e,r,i){let n=[];for(let[s,a]of t.refs){if(e&&!s.startsWith(e))continue;if(s.endsWith("^{}")){if(i){let l=s.replace("^{}",""),c=n[n.length-1],u=c.ref===l?c:n.find(f=>f.ref===l);if(u===void 0)throw new Error("I did not expect this to happen");u.peeled=a}continue}let o={ref:s,oid:a};r&&t.symrefs.has(s)&&(o.target=t.symrefs.get(s)),n.push(o)}return n}async function xS({http:t,onAuth:e,onAuthSuccess:r,onAuthFailure:i,corsProxy:n,url:s,headers:a={},forPush:o=!1,protocolVersion:l=2}){try{T("http",t),T("url",s);let u=await el.getRemoteHelperFor({url:s}).discover({http:t,onAuth:e,onAuthSuccess:r,onAuthFailure:i,corsProxy:n,service:o?"git-receive-pack":"git-upload-pack",url:s,headers:a,protocolVersion:l});if(u.protocolVersion===2)return{protocolVersion:u.protocolVersion,capabilities:u.capabilities2};let f={};for(let d of u.capabilities){let[h,p]=d.split("=");p?f[h]=p:f[h]=!0}return{protocolVersion:1,capabilities:f,refs:yS(u,void 0,!0,!0)}}catch(c){throw c.caller="git.getRemoteInfo2",c}}async function BN({type:t,object:e,format:r="content",oid:i=void 0}){return r!=="deflated"&&(r!=="wrapped"&&(e=Cs.wrap({type:t,object:e})),i=await wn(e)),{oid:i,object:e}}async function ES({object:t}){try{T("object",t),typeof t=="string"?t=Buffer.from(t,"utf8"):t instanceof Uint8Array||(t=new Uint8Array(t));let e="blob",{oid:r,object:i}=await BN({type:e,format:"content",object:t});return{oid:r,type:e,object:i,format:"wrapped"}}catch(e){throw e.caller="git.hashBlob",e}}async function HN({fs:t,cache:e,onProgress:r,dir:i,gitdir:n,filepath:s}){try{s=O(i,s);let a=await t.read(s),o=c=>Je({fs:t,cache:e,gitdir:n,oid:c}),l=await Nc.fromPack({pack:a,getExternalRefDelta:o,onProgress:r});return await t.write(s.replace(/\.pack$/,".idx"),await l.toBuffer()),{oids:[...l.hashes]}}catch(a){throw a.caller="git.indexPack",a}}async function SS({fs:t,onProgress:e,dir:r,gitdir:i=O(r,".git"),filepath:n,cache:s={}}){try{T("fs",t),T("dir",r),T("gitdir",r),T("filepath",n);let a=new Q(t),o=await ee({fsp:a,dotgit:i});return await HN({fs:a,cache:s,onProgress:e,dir:r,gitdir:o,filepath:n})}catch(a){throw a.caller="git.indexPack",a}}async function kS({fs:t,bare:e=!1,dir:r,gitdir:i=e?r:O(r,".git"),defaultBranch:n="master"}){try{T("fs",t),T("gitdir",i),e||T("dir",r);let s=new Q(t),a=await ee({fsp:s,dotgit:i});return await tS({fs:s,bare:e,dir:r,gitdir:a,defaultBranch:n})}catch(s){throw s.caller="git.init",s}}async function AS({fs:t,cache:e,gitdir:r,oid:i,ancestor:n,depth:s}){let a=await va.read({fs:t,gitdir:r});if(!i)throw new Fr("oid");if(!n)throw new Fr("ancestor");if(i===n)return!1;let o=[i],l=new Set,c=0;for(;o.length;){if(c++===s)throw new qc(s);let u=o.shift(),{type:f,object:d}=await Je({fs:t,cache:e,gitdir:r,oid:u});if(f!=="commit")throw new yr(u,f,"commit");let h=Mr.from(d).parse();for(let p of h.parent)if(p===n)return!0;if(!a.has(u))for(let p of h.parent)l.has(p)||(o.push(p),l.add(p))}return!1}async function CS({fs:t,dir:e,gitdir:r=O(e,".git"),oid:i,ancestor:n,depth:s=-1,cache:a={}}){try{T("fs",t),T("gitdir",r),T("oid",i),T("ancestor",n);let o=new Q(t),l=await ee({fsp:o,dotgit:r});return await AS({fs:o,cache:a,gitdir:l,oid:i,ancestor:n,depth:s})}catch(o){throw o.caller="git.isDescendent",o}}async function TS({fs:t,dir:e,gitdir:r=O(e,".git"),filepath:i}){try{T("fs",t),T("dir",e),T("gitdir",r),T("filepath",i);let n=new Q(t),s=await ee({fsp:n,dotgit:r});return Rs.isIgnored({fs:n,dir:e,gitdir:s,filepath:i})}catch(n){throw n.caller="git.isIgnored",n}}async function PS({fs:t,dir:e,gitdir:r=O(e,".git"),remote:i}){try{T("fs",t),T("gitdir",r);let n=new Q(t),s=await ee({fsp:n,dotgit:r});return W.listBranches({fs:n,gitdir:s,remote:i})}catch(n){throw n.caller="git.listBranches",n}}async function UN({fs:t,gitdir:e,ref:r,cache:i}){if(r){let n=await W.resolve({gitdir:e,fs:t,ref:r}),s=[];return await RS({fs:t,cache:i,gitdir:e,oid:n,filenames:s,prefix:""}),s}else return ft.acquire({fs:t,gitdir:e,cache:i},async function(n){return n.entries.map(s=>s.path)})}async function RS({fs:t,cache:e,gitdir:r,oid:i,filenames:n,prefix:s}){let{tree:a}=await rl({fs:t,cache:e,gitdir:r,oid:i});for(let o of a)o.type==="tree"?await RS({fs:t,cache:e,gitdir:r,oid:o.oid,filenames:n,prefix:O(s,o.path)}):n.push(O(s,o.path))}async function $S({fs:t,dir:e,gitdir:r=O(e,".git"),ref:i,cache:n={}}){try{T("fs",t),T("gitdir",r);let s=new Q(t),a=await ee({fsp:s,dotgit:r});return await UN({fs:s,cache:n,gitdir:a,ref:i})}catch(s){throw s.caller="git.listFiles",s}}async function GN({fs:t,cache:e,gitdir:r,ref:i}){let n;try{n=await W.resolve({gitdir:r,fs:t,ref:i})}catch(o){if(o instanceof He)return[]}return(await rl({fs:t,cache:e,gitdir:r,oid:n})).tree.map(o=>({target:o.path,note:o.oid}))}async function FS({fs:t,dir:e,gitdir:r=O(e,".git"),ref:i="refs/notes/commits",cache:n={}}){try{T("fs",t),T("gitdir",r),T("ref",i);let s=new Q(t),a=await ee({fsp:s,dotgit:r});return await GN({fs:s,cache:n,gitdir:a,ref:i})}catch(s){throw s.caller="git.listNotes",s}}async function IS({fs:t,dir:e,gitdir:r=O(e,".git"),filepath:i}){try{T("fs",t),T("gitdir",r);let n=new Q(t),s=await ee({fsp:n,dotgit:r});return W.listRefs({fs:n,gitdir:s,filepath:i})}catch(n){throw n.caller="git.listRefs",n}}async function jN({fs:t,gitdir:e}){let r=await dt.get({fs:t,gitdir:e}),i=await r.getSubsections("remote");return Promise.all(i.map(async s=>{let a=await r.get(`remote.${s}.url`);return{remote:s,url:a}}))}async function MS({fs:t,dir:e,gitdir:r=O(e,".git")}){try{T("fs",t),T("gitdir",r);let i=new Q(t),n=await ee({fsp:i,dotgit:r});return await jN({fs:i,gitdir:n})}catch(i){throw i.caller="git.listRemotes",i}}async function VN(t){let e=ot.streamReader(t),r=[],i;for(;i=await e(),i!==!0;){if(i===null)continue;i=i.toString("utf8").replace(/\n$/,"");let[n,s,...a]=i.split(" "),o={ref:s,oid:n};for(let l of a){let[c,u]=l.split(":");c==="symref-target"?o.target=u:c==="peeled"&&(o.peeled=u)}r.push(o)}return r}async function zN({prefix:t,symrefs:e,peelTags:r}){let i=[];return i.push(ot.encode(`command=ls-refs +`)),i.push(ot.encode(`agent=${gd.agent} +`)),(r||e||t)&&i.push(ot.delim()),r&&i.push(ot.encode("peel")),e&&i.push(ot.encode("symrefs")),t&&i.push(ot.encode(`ref-prefix ${t}`)),i.push(ot.flush()),i}async function DS({http:t,onAuth:e,onAuthSuccess:r,onAuthFailure:i,corsProxy:n,url:s,headers:a={},forPush:o=!1,protocolVersion:l=2,prefix:c,symrefs:u,peelTags:f}){try{T("http",t),T("url",s);let d=await Jo.discover({http:t,onAuth:e,onAuthSuccess:r,onAuthFailure:i,corsProxy:n,service:o?"git-receive-pack":"git-upload-pack",url:s,headers:a,protocolVersion:l});if(d.protocolVersion===1)return yS(d,c,u,f);let h=await zN({prefix:c,symrefs:u,peelTags:f}),p=await Jo.connect({http:t,auth:d.auth,headers:a,corsProxy:n,service:o?"git-receive-pack":"git-upload-pack",url:s,body:h});return VN(p.body)}catch(d){throw d.caller="git.listServerRefs",d}}async function OS({fs:t,dir:e,gitdir:r=O(e,".git")}){try{T("fs",t),T("gitdir",r);let i=new Q(t),n=await ee({fsp:i,dotgit:r});return W.listTags({fs:i,gitdir:n})}catch(i){throw i.caller="git.listTags",i}}function WN(t,e){return t.committer.timestamp-e.committer.timestamp}var qN="e69de29bb2d1d6434b8b29ae775ad8c2e48c5391";async function EE({fs:t,cache:e,gitdir:r,oid:i,fileId:n}){if(n===qN)return;let s=i,a,o=await Ko({fs:t,cache:e,gitdir:r,oid:i}),l=o.tree;return n===o.oid?a=o.path:(a=await LS({fs:t,cache:e,gitdir:r,tree:l,fileId:n,oid:s}),Array.isArray(a)&&(a.length===0?a=void 0:a.length===1&&(a=a[0]))),a}async function LS({fs:t,cache:e,gitdir:r,tree:i,fileId:n,oid:s,filepaths:a=[],parentPath:o=""}){let l=i.entries().map(function(c){let u;return c.oid===n?(u=O(o,c.path),a.push(u)):c.type==="tree"&&(u=Je({fs:t,cache:e,gitdir:r,oid:c.oid}).then(function({object:f}){return LS({fs:t,cache:e,gitdir:r,tree:Ir.from(f),fileId:n,oid:s,filepaths:a,parentPath:O(o,c.path)})})),u});return await Promise.all(l),a}async function YN({fs:t,cache:e,gitdir:r,filepath:i,ref:n,depth:s,since:a,force:o,follow:l}){let c=typeof a=="undefined"?void 0:Math.floor(a.valueOf()/1e3),u=[],f=await va.read({fs:t,gitdir:r}),d=await W.resolve({fs:t,gitdir:r,ref:n}),h=[await vn({fs:t,cache:e,gitdir:r,oid:d})],p,g,v;function _(b){v&&i&&u.push(b)}for(;h.length>0;){let b=h.pop();if(c!==void 0&&b.commit.committer.timestamp<=c)break;if(i){let S;try{S=await iu({fs:t,cache:e,gitdir:r,oid:b.commit.tree,filepath:i}),g&&p!==S&&u.push(g),p=S,g=b,v=!0}catch(k){if(k instanceof He){let E=l&&p;if(E&&(E=await EE({fs:t,cache:e,gitdir:r,oid:b.commit.tree,fileId:p}),E))if(Array.isArray(E)){if(g){let A=await EE({fs:t,cache:e,gitdir:r,oid:g.commit.tree,fileId:p});if(Array.isArray(A))if(E=E.filter(w=>A.indexOf(w)===-1),E.length===1)E=E[0],i=E,g&&u.push(g);else{E=!1,g&&u.push(g);break}}}else i=E,g&&u.push(g);if(!E){if(v&&p&&(u.push(g),!o))break;if(!o&&!l)throw k}g=b,v=!1}else throw k}}else u.push(b);if(s!==void 0&&u.length===s){_(b);break}if(!f.has(b.oid))for(let S of b.commit.parent){let k=await vn({fs:t,cache:e,gitdir:r,oid:S});h.map(E=>E.oid).includes(k.oid)||h.push(k)}h.length===0&&_(b),h.sort((S,k)=>WN(S.commit,k.commit))}return u}async function NS({fs:t,dir:e,gitdir:r=O(e,".git"),filepath:i,ref:n="HEAD",depth:s,since:a,force:o,follow:l,cache:c={}}){try{T("fs",t),T("gitdir",r),T("ref",n);let u=new Q(t),f=await ee({fsp:u,dotgit:r});return await YN({fs:u,cache:c,gitdir:f,filepath:i,ref:n,depth:s,since:a,force:o,follow:l})}catch(u){throw u.caller="git.log",u}}async function BS({fs:t,onSign:e,dir:r,gitdir:i=O(r,".git"),ours:n,theirs:s,fastForward:a=!0,fastForwardOnly:o=!1,dryRun:l=!1,noUpdateBranch:c=!1,abortOnConflict:u=!0,message:f,author:d,committer:h,signingKey:p,cache:g={},mergeDriver:v,allowUnrelatedHistories:_=!1}){try{T("fs",t),p&&T("onSign",e);let b=new Q(t),S=await ee({fsp:b,dotgit:i}),k=await $s({fs:b,gitdir:S,author:d});if(!k&&(!o||!a))throw new Zt("author");let E=await ga({fs:b,gitdir:S,author:k,committer:h});if(!E&&(!o||!a))throw new Zt("committer");return await fS({fs:b,cache:g,dir:r,gitdir:S,ours:n,theirs:s,fastForward:a,fastForwardOnly:o,dryRun:l,noUpdateBranch:c,abortOnConflict:u,message:f,author:k,committer:E,signingKey:p,onSign:e,mergeDriver:v,allowUnrelatedHistories:_})}catch(b){throw b.caller="git.merge",b}}var XN={commit:16,tree:32,blob:48,tag:64,ofs_delta:96,ref_delta:112};async function HS({fs:t,cache:e,dir:r,gitdir:i=O(r,".git"),oids:n}){let s=new SE,a=[];function o(u,f){let d=Buffer.from(u,f);a.push(d),s.update(d)}async function l({stype:u,object:f}){let d=XN[u],h=f.length,p=h>15?128:0,g=h&15;h=h>>>4;let v=(p|d|g).toString(16);for(o(v,"hex");p;)p=h>127?128:0,v=p|h&127,o($g(2,v),"hex"),h=h>>>7;o(Buffer.from(await OE(f)))}o("PACK"),o("00000002","hex"),o($g(8,n.length),"hex");for(let u of n){let{type:f,object:d}=await Je({fs:t,cache:e,gitdir:i,oid:u});await l({write:o,object:d,stype:f})}let c=s.digest();return a.push(c),a}async function ZN({fs:t,cache:e,gitdir:r,oids:i,write:n}){let s=await HS({fs:t,cache:e,gitdir:r,oids:i}),a=Buffer.from(await fd(s)),l=`pack-${a.slice(-20).toString("hex")}.pack`;return n?(await t.write(O(r,`objects/pack/${l}`),a),{filename:l}):{filename:l,packfile:new Uint8Array(a)}}async function US({fs:t,dir:e,gitdir:r=O(e,".git"),oids:i,write:n=!1,cache:s={}}){try{T("fs",t),T("gitdir",r),T("oids",i);let a=new Q(t),o=await ee({fsp:a,dotgit:r});return await ZN({fs:a,cache:s,gitdir:o,oids:i,write:n})}catch(a){throw a.caller="git.packObjects",a}}async function GS({fs:t,http:e,onProgress:r,onMessage:i,onAuth:n,onAuthSuccess:s,onAuthFailure:a,dir:o,gitdir:l=O(o,".git"),ref:c,url:u,remote:f,remoteRef:d,prune:h=!1,pruneTags:p=!1,fastForward:g=!0,fastForwardOnly:v=!1,corsProxy:_,singleBranch:b,headers:S={},author:k,committer:E,signingKey:A,cache:w={}}){try{T("fs",t),T("gitdir",l);let x=new Q(t),y=await ee({fsp:x,dotgit:l}),C=await $s({fs:x,gitdir:y,author:k});if(!C)throw new Zt("author");let P=await ga({fs:x,gitdir:y,author:C,committer:E});if(!P)throw new Zt("committer");return await dS({fs:x,cache:w,http:e,onProgress:r,onMessage:i,onAuth:n,onAuthSuccess:s,onAuthFailure:a,dir:o,gitdir:y,ref:c,url:u,remote:f,remoteRef:d,fastForward:g,fastForwardOnly:v,corsProxy:_,singleBranch:b,headers:S,author:C,committer:P,signingKey:A,prune:h,pruneTags:p})}catch(x){throw x.caller="git.pull",x}}async function KN({fs:t,cache:e,dir:r,gitdir:i=O(r,".git"),start:n,finish:s}){let a=await va.read({fs:t,gitdir:i}),o=new Set,l=new Set;for(let f of n)o.add(await W.resolve({fs:t,gitdir:i,ref:f}));for(let f of s)try{let d=await W.resolve({fs:t,gitdir:i,ref:f});l.add(d)}catch(d){}let c=new Set;async function u(f){c.add(f);let{type:d,object:h}=await Je({fs:t,cache:e,gitdir:i,oid:f});if(d==="tag"){let g=Kr.from(h).headers().object;return u(g)}if(d!=="commit")throw new yr(f,d,"commit");if(!a.has(f)){let g=Mr.from(h).headers().parent;for(f of g)!l.has(f)&&!c.has(f)&&await u(f)}}for(let f of o)await u(f);return c}async function _g({fs:t,cache:e,dir:r,gitdir:i=O(r,".git"),oids:n}){let s=new Set;async function a(o){if(s.has(o))return;s.add(o);let{type:l,object:c}=await Je({fs:t,cache:e,gitdir:i,oid:o});if(l==="tag"){let f=Kr.from(c).headers().object;await a(f)}else if(l==="commit"){let f=Mr.from(c).headers().tree;await a(f)}else if(l==="tree"){let u=Ir.from(c);for(let f of u)f.type==="blob"&&s.add(f.oid),f.type==="tree"&&await a(f.oid)}}for(let o of n)await a(o);return s}async function QN(t){let e={},r="",i=ot.streamReader(t),n=await i();for(;n!==!0;)n!==null&&(r+=n.toString("utf8")+` +`),n=await i();let s=r.toString("utf8").split(` +`);if(n=s.shift(),!n.startsWith("unpack "))throw new ma('unpack ok" or "unpack [error message]',n);e.ok=n==="unpack ok",e.ok||(e.error=n.slice(7)),e.refs={};for(let a of s){if(a.trim()==="")continue;let o=a.slice(0,2),l=a.slice(3),c=l.indexOf(" ");c===-1&&(c=l.length);let u=l.slice(0,c),f=l.slice(c+1);e.refs[u]={ok:o==="ok",error:f}}return e}async function JN({capabilities:t=[],triplets:e=[]}){let r=[],i=`\0 ${t.join(" ")}`;for(let n of e)r.push(ot.encode(`${n.oldoid} ${n.oid} ${n.fullRef}${i} +`)),i="";return r.push(ot.flush()),r}async function eB({fs:t,cache:e,http:r,onProgress:i,onMessage:n,onAuth:s,onAuthSuccess:a,onAuthFailure:o,onPrePush:l,gitdir:c,ref:u,remoteRef:f,remote:d,url:h,force:p=!1,delete:g=!1,corsProxy:v,headers:_={}}){let b=u||await Is({fs:t,gitdir:c});if(typeof b=="undefined")throw new Fr("ref");let S=await dt.get({fs:t,gitdir:c});d=d||await S.get(`branch.${b}.pushRemote`)||await S.get("remote.pushDefault")||await S.get(`branch.${b}.remote`)||"origin";let k=h||await S.get(`remote.${d}.pushurl`)||await S.get(`remote.${d}.url`);if(typeof k=="undefined")throw new Fr("remote OR url");let E=f||await S.get(`branch.${b}.merge`);if(typeof k=="undefined")throw new Fr("remoteRef");v===void 0&&(v=await S.get("http.corsProxy"));let A=await W.expand({fs:t,gitdir:c,ref:b}),w=g?"0000000000000000000000000000000000000000":await W.resolve({fs:t,gitdir:c,ref:A}),x=el.getRemoteHelperFor({url:k}),y=await x.discover({http:r,onAuth:s,onAuthSuccess:a,onAuthFailure:o,corsProxy:v,service:"git-receive-pack",url:k,headers:_,protocolVersion:1}),C=y.auth,P;if(!E)P=A;else try{P=await W.expandAgainstMap({ref:E,map:y.refs})}catch(X){if(X instanceof He)P=E.startsWith("refs/")?E:`refs/heads/${E}`;else throw X}let L=y.refs.get(P)||"0000000000000000000000000000000000000000";if(l&&!await l({remote:d,url:k,localRef:{ref:g?"(delete)":A,oid:w},remoteRef:{ref:P,oid:L}}))throw new Zo;let N=!y.capabilities.has("no-thin"),B=new Set;if(!g){let X=[...y.refs.values()],V=new Set;if(L!=="0000000000000000000000000000000000000000"){let Ne=await Lg({fs:t,cache:e,gitdir:c,oids:[w,L]});for(let gr of Ne)X.push(gr);N&&(V=await _g({fs:t,cache:e,gitdir:c,oids:Ne}))}if(!X.includes(w)){let Ne=await KN({fs:t,cache:e,gitdir:c,start:[w],finish:X});B=await _g({fs:t,cache:e,gitdir:c,oids:Ne})}if(N){try{let Ne=await W.resolve({fs:t,gitdir:c,ref:`refs/remotes/${d}/HEAD`,depth:2}),{oid:gr}=await W.resolveAgainstMap({ref:Ne.replace(`refs/remotes/${d}/`,""),fullref:Ne,map:y.refs}),Nt=[gr];for(let Fe of await _g({fs:t,cache:e,gitdir:c,oids:Nt}))V.add(Fe)}catch(Ne){}for(let Ne of V)B.delete(Ne)}if(w===L&&(p=!0),!p){if(A.startsWith("refs/tags")&&L!=="0000000000000000000000000000000000000000")throw new Xo("tag-exists");if(w!=="0000000000000000000000000000000000000000"&&L!=="0000000000000000000000000000000000000000"&&!await AS({fs:t,cache:e,gitdir:c,oid:w,ancestor:L,depth:-1}))throw new Xo("not-fast-forward")}}let ge=JE([...y.capabilities],["report-status","side-band-64k",`agent=${gd.agent}`]),Le=await JN({capabilities:ge,triplets:[{oldoid:L,oid:w,fullRef:P}]}),ke=g?[]:await HS({fs:t,cache:e,gitdir:c,oids:[...B]}),ne=await x.connect({http:r,onProgress:i,corsProxy:v,service:"git-receive-pack",url:k,auth:C,headers:_,body:[...Le,...ke]}),{packfile:Ee,progress:_e}=await dd.demux(ne.body);if(n){let X=eS(_e);su(X,async V=>{await n(V)})}let z=await QN(Ee);if(ne.headers&&(z.headers=ne.headers),d&&z.ok&&z.refs[P].ok&&!A.startsWith("refs/tags")){let X=`refs/remotes/${d}/${P.replace("refs/heads","")}`;g?await W.deleteRef({fs:t,gitdir:c,ref:X}):await W.writeRef({fs:t,gitdir:c,ref:X,value:w})}if(z.ok&&Object.values(z.refs).every(X=>X.ok))return z;{let X=Object.entries(z.refs).filter(([V,Ne])=>!Ne.ok).map(([V,Ne])=>` + - ${V}: ${Ne.error}`).join("");throw new Wc(X,z)}}async function jS({fs:t,http:e,onProgress:r,onMessage:i,onAuth:n,onAuthSuccess:s,onAuthFailure:a,onPrePush:o,dir:l,gitdir:c=O(l,".git"),ref:u,remoteRef:f,remote:d="origin",url:h,force:p=!1,delete:g=!1,corsProxy:v,headers:_={},cache:b={}}){try{T("fs",t),T("http",e),T("gitdir",c);let S=new Q(t),k=await ee({fsp:S,dotgit:c});return await eB({fs:S,cache:b,http:e,onProgress:r,onMessage:i,onAuth:n,onAuthSuccess:s,onAuthFailure:a,onPrePush:o,gitdir:k,ref:u,remoteRef:f,remote:d,url:h,force:p,delete:g,corsProxy:v,headers:_})}catch(S){throw S.caller="git.push",S}}async function VS({fs:t,cache:e,gitdir:r,oid:i}){let{type:n,object:s}=await Je({fs:t,cache:e,gitdir:r,oid:i});if(n==="tag")return i=Kr.from(s).parse().object,VS({fs:t,cache:e,gitdir:r,oid:i});if(n!=="blob")throw new yr(i,n,"blob");return{oid:i,blob:new Uint8Array(s)}}async function zS({fs:t,cache:e,gitdir:r,oid:i,filepath:n=void 0}){return n!==void 0&&(i=await iu({fs:t,cache:e,gitdir:r,oid:i,filepath:n})),await VS({fs:t,cache:e,gitdir:r,oid:i})}async function WS({fs:t,dir:e,gitdir:r=O(e,".git"),oid:i,filepath:n,cache:s={}}){try{T("fs",t),T("gitdir",r),T("oid",i);let a=new Q(t),o=await ee({fsp:a,dotgit:r});return await zS({fs:a,cache:s,gitdir:o,oid:i,filepath:n})}catch(a){throw a.caller="git.readBlob",a}}async function Ng({fs:t,dir:e,gitdir:r=O(e,".git"),oid:i,cache:n={}}){try{T("fs",t),T("gitdir",r),T("oid",i);let s=new Q(t),a=await ee({fsp:s,dotgit:r});return await vn({fs:s,cache:n,gitdir:a,oid:i})}catch(s){throw s.caller="git.readCommit",s}}async function tB({fs:t,cache:e,gitdir:r,ref:i="refs/notes/commits",oid:n}){let s=await W.resolve({gitdir:r,fs:t,ref:i}),{blob:a}=await zS({fs:t,cache:e,gitdir:r,oid:s,filepath:n});return a}async function qS({fs:t,dir:e,gitdir:r=O(e,".git"),ref:i="refs/notes/commits",oid:n,cache:s={}}){try{T("fs",t),T("gitdir",r),T("ref",i),T("oid",n);let a=new Q(t),o=await ee({fsp:a,dotgit:r});return await tB({fs:a,cache:s,gitdir:o,ref:i,oid:n})}catch(a){throw a.caller="git.readNote",a}}async function YS({fs:t,dir:e,gitdir:r=O(e,".git"),oid:i,format:n="parsed",filepath:s=void 0,encoding:a=void 0,cache:o={}}){try{T("fs",t),T("gitdir",r),T("oid",i);let l=new Q(t),c=await ee({fsp:l,dotgit:r});s!==void 0&&(i=await iu({fs:l,cache:o,gitdir:c,oid:i,filepath:s}));let f=await Je({fs:l,cache:o,gitdir:c,oid:i,format:n==="parsed"?"content":n});if(f.oid=i,n==="parsed")switch(f.format="parsed",f.type){case"commit":f.object=Mr.from(f.object).parse();break;case"tree":f.object=Ir.from(f.object).entries();break;case"blob":a?f.object=f.object.toString(a):(f.object=new Uint8Array(f.object),f.format="content");break;case"tag":f.object=Kr.from(f.object).parse();break;default:throw new yr(f.oid,f.type,"blob|commit|tag|tree")}else(f.format==="deflated"||f.format==="wrapped")&&(f.type=f.format);return f}catch(l){throw l.caller="git.readObject",l}}async function rB({fs:t,cache:e,gitdir:r,oid:i}){let{type:n,object:s}=await Je({fs:t,cache:e,gitdir:r,oid:i,format:"content"});if(n!=="tag")throw new yr(i,n,"tag");let a=Kr.from(s);return{oid:i,tag:a.parse(),payload:a.payload()}}async function XS({fs:t,dir:e,gitdir:r=O(e,".git"),oid:i,cache:n={}}){try{T("fs",t),T("gitdir",r),T("oid",i);let s=new Q(t),a=await ee({fsp:s,dotgit:r});return await rB({fs:s,cache:n,gitdir:a,oid:i})}catch(s){throw s.caller="git.readTag",s}}async function ZS({fs:t,dir:e,gitdir:r=O(e,".git"),oid:i,filepath:n=void 0,cache:s={}}){try{T("fs",t),T("gitdir",r),T("oid",i);let a=new Q(t),o=await ee({fsp:a,dotgit:r});return await rl({fs:a,cache:s,gitdir:o,oid:i,filepath:n})}catch(a){throw a.caller="git.readTree",a}}async function KS({fs:t,dir:e,gitdir:r=O(e,".git"),filepath:i,cache:n={}}){try{T("fs",t),T("gitdir",r),T("filepath",i);let s=new Q(t),a=await ee({fsp:s,dotgit:r});await ft.acquire({fs:s,gitdir:a,cache:n},async function(o){o.delete({filepath:i})})}catch(s){throw s.caller="git.remove",s}}async function iB({fs:t,cache:e,onSign:r,gitdir:i,ref:n="refs/notes/commits",oid:s,author:a,committer:o,signingKey:l}){let c;try{c=await W.resolve({gitdir:i,fs:t,ref:n})}catch(p){if(!(p instanceof He))throw p}let f=(await rl({fs:t,cache:e,gitdir:i,oid:c||"4b825dc642cb6eb9a060e54bf8d69288fbee4904"})).tree;f=f.filter(p=>p.path!==s);let d=await nu({fs:t,gitdir:i,tree:f});return await ru({fs:t,cache:e,onSign:r,gitdir:i,ref:n,tree:d,parent:c&&[c],message:`Note removed by 'isomorphic-git removeNote' +`,author:a,committer:o,signingKey:l})}async function QS({fs:t,onSign:e,dir:r,gitdir:i=O(r,".git"),ref:n="refs/notes/commits",oid:s,author:a,committer:o,signingKey:l,cache:c={}}){try{T("fs",t),T("gitdir",i),T("oid",s);let u=new Q(t),f=await ee({fsp:u,dotgit:i}),d=await $s({fs:u,gitdir:f,author:a});if(!d)throw new Zt("author");let h=await ga({fs:u,gitdir:f,author:d,committer:o});if(!h)throw new Zt("committer");return await iB({fs:u,cache:c,onSign:e,gitdir:f,ref:n,oid:s,author:d,committer:h,signingKey:l})}catch(u){throw u.caller="git.removeNote",u}}async function nB({fs:t,gitdir:e,oldref:r,ref:i,checkout:n=!1}){if(!tu(i,!0))throw new Gi(i,Dc.clean(i));if(!tu(r,!0))throw new Gi(r,Dc.clean(r));let s=`refs/heads/${r}`,a=`refs/heads/${i}`;if(await W.exists({fs:t,gitdir:e,ref:a}))throw new Ui("branch",i,!1);let l=await W.resolve({fs:t,gitdir:e,ref:s,depth:1});await W.writeRef({fs:t,gitdir:e,ref:a,value:l}),await W.deleteRef({fs:t,gitdir:e,ref:s});let u=await Is({fs:t,gitdir:e,fullname:!0})===s;(n||u)&&await W.writeSymbolicRef({fs:t,gitdir:e,ref:"HEAD",value:a})}async function JS({fs:t,dir:e,gitdir:r=O(e,".git"),ref:i,oldref:n,checkout:s=!1}){try{T("fs",t),T("gitdir",r),T("ref",i),T("oldref",n);let a=new Q(t),o=await ee({fsp:a,dotgit:r});return await nB({fs:a,gitdir:o,ref:i,oldref:n,checkout:s})}catch(a){throw a.caller="git.renameBranch",a}}async function ek({gitdir:t,type:e,object:r}){return wn(Cs.wrap({type:e,object:r}))}async function tk({fs:t,dir:e,gitdir:r=O(e,".git"),filepath:i,ref:n,cache:s={}}){try{T("fs",t),T("gitdir",r),T("filepath",i);let a=new Q(t),o=await ee({fsp:a,dotgit:r}),l,c;try{l=await W.resolve({fs:a,gitdir:o,ref:n||"HEAD"})}catch(d){if(n)throw d}if(l)try{l=await iu({fs:a,cache:s,gitdir:o,oid:l,filepath:i})}catch(d){l=null}let u={ctime:new Date(0),mtime:new Date(0),dev:0,ino:0,mode:0,uid:0,gid:0,size:0},f=e&&await a.read(O(e,i));f&&(c=await ek({gitdir:o,type:"blob",object:f}),l===c&&(u=await a.lstat(O(e,i)))),await ft.acquire({fs:a,gitdir:o,cache:s},async function(d){d.delete({filepath:i}),l&&d.insert({filepath:i,stats:u,oid:l})})}catch(a){throw a.caller="git.reset",a}}async function rk({fs:t,dir:e,gitdir:r=O(e,".git"),ref:i,depth:n}){try{T("fs",t),T("gitdir",r),T("ref",i);let s=new Q(t),a=await ee({fsp:s,dotgit:r});return await W.resolve({fs:s,gitdir:a,ref:i,depth:n})}catch(s){throw s.caller="git.resolveRef",s}}async function ik({fs:t,dir:e,gitdir:r=O(e,".git"),path:i,value:n,append:s=!1}){try{T("fs",t),T("gitdir",r),T("path",i);let a=new Q(t),o=await ee({fsp:a,dotgit:r}),l=await dt.get({fs:a,gitdir:o});s?await l.append(i,n):await l.set(i,n),await dt.save({fs:a,gitdir:o,config:l})}catch(a){throw a.caller="git.setConfig",a}}async function nk({fs:t,gitdir:e,commit:r}){let i=Mr.from(r).toObject();return await Dr({fs:t,gitdir:e,type:"commit",object:i,format:"content"})}var hd=class t{static get timezoneOffsetForRefLogEntry(){let e=new Date().getTimezoneOffset(),r=Math.abs(Math.floor(e/60)),i=Math.abs(e%60).toString().padStart(2,"0");return`${e>0?"-":"+"}${r.toString().padStart(2,"0")}${i}`}static createStashReflogEntry(e,r,i){let n=e.name.replace(/\s/g,""),s="0000000000000000000000000000000000000000",a=Math.floor(Date.now()/1e3),o=t.timezoneOffsetForRefLogEntry;return`${s} ${r} ${n} ${e.email} ${a} ${o} ${i} +`}static getStashReflogEntry(e,r=!1){return e.split(` +`).filter(s=>s).reverse().map((s,a)=>r?`stash@{${a}}: ${s.split(" ")[1]}`:s)}},wa=class t{constructor({fs:e,dir:r,gitdir:i=O(r,".git")}){Object.assign(this,{fs:e,dir:r,gitdir:i,_author:null})}static get refStash(){return"refs/stash"}static get refLogsStash(){return"logs/refs/stash"}get refStashPath(){return O(this.gitdir,t.refStash)}get refLogsStashPath(){return O(this.gitdir,t.refLogsStash)}async getAuthor(){if(!this._author&&(this._author=await $s({fs:this.fs,gitdir:this.gitdir,author:{}}),!this._author))throw new Zt("author");return this._author}async getStashSHA(e,r){return await this.fs.exists(this.refStashPath)?(r||await this.readStashReflogs({parsed:!1}))[e].split(" ")[1]:null}async writeStashCommit({message:e,tree:r,parent:i}){return nk({fs:this.fs,gitdir:this.gitdir,commit:{message:e,tree:r,parent:i,author:await this.getAuthor(),committer:await this.getAuthor()}})}async readStashCommit(e){let r=await this.readStashReflogs({parsed:!1});if(e!==0&&(e<0||e>r.length-1))throw new Gi(`stash@${e}`,"number that is in range of [0, num of stash pushed]");let i=await this.getStashSHA(e,r);return i?vn({fs:this.fs,cache:{},gitdir:this.gitdir,oid:i}):{}}async writeStashRef(e){return W.writeRef({fs:this.fs,gitdir:this.gitdir,ref:t.refStash,value:e})}async writeStashReflogEntry({stashCommit:e,message:r}){let i=await this.getAuthor(),n=hd.createStashReflogEntry(i,e,r),s=this.refLogsStashPath;await Qo({filepath:s,entry:n},async()=>{let a=await this.fs.exists(s)?await this.fs.read(s,"utf8"):"";await this.fs.write(s,a+n,"utf8")})}async readStashReflogs({parsed:e=!1}){if(!await this.fs.exists(this.refLogsStashPath))return[];let r=await this.fs.read(this.refLogsStashPath,"utf8");return hd.getStashReflogEntry(r,e)}};async function sk({fs:t,dir:e,gitdir:r,message:i=""}){let n=new wa({fs:t,dir:e,gitdir:r});await n.getAuthor();let s=await Is({fs:t,gitdir:r,fullname:!1}),a=await W.resolve({fs:t,gitdir:r,ref:"HEAD"}),l=(await Ng({fs:t,dir:e,gitdir:r,oid:a})).commit.message,c=[a],u=null,f=Zr({ref:"HEAD"}),d=await mE({fs:t,dir:e,gitdir:r,treePair:[Zr({ref:"HEAD"}),"stage"]});if(d){let v=await n.writeStashCommit({message:`stash-Index: WIP on ${s} - ${new Date().toISOString()}`,tree:d,parent:c});c.push(v),u=d,f=_a()}let h=await mE({fs:t,dir:e,gitdir:r,treePair:[f,"workdir"]});if(h){let v=await n.writeStashCommit({message:`stash-WorkDir: WIP on ${s} - ${new Date().toISOString()}`,tree:h,parent:[c[c.length-1]]});c.push(v),u=h}if(!u||!d&&!h)throw new He("changes, nothing to stash");let p=(i.trim()||`WIP on ${s}`)+`: ${a.substring(0,7)} ${l}`;return{stashCommit:await n.writeStashCommit({message:p,tree:u,parent:c}),stashMsg:p,branch:s,stashMgr:n}}async function sB({fs:t,dir:e,gitdir:r,message:i=""}){let{stashCommit:n,stashMsg:s,branch:a,stashMgr:o}=await sk({fs:t,dir:e,gitdir:r,message:i});return await o.writeStashRef(n),await o.writeStashReflogEntry({stashCommit:n,message:s}),await Dg({fs:t,dir:e,gitdir:r,ref:a,track:!1,force:!0}),n}async function aB({fs:t,dir:e,gitdir:r,message:i=""}){let{stashCommit:n}=await sk({fs:t,dir:e,gitdir:r,message:i});return n}async function ak({fs:t,dir:e,gitdir:r,refIdx:i=0}){let s=await new wa({fs:t,dir:e,gitdir:r}).readStashCommit(i),{parent:a=null}=s.commit?s.commit:{};if(!(!a||!Array.isArray(a)))for(let o=0;o{await t.exists(a)&&await t.rm(a)});let o=await n.readStashReflogs({parsed:!1});if(!o.length)return;o.splice(i,1);let l=n.refLogsStashPath;await Qo({reflogEntries:o,stashReflogPath:l,stashMgr:n},async()=>{if(o.length){await t.write(l,o.reverse().join(` +`)+` +`,"utf8");let c=o[o.length-1].split(" ")[1];await n.writeStashRef(c)}else await t.rm(l)})}async function oB({fs:t,dir:e,gitdir:r}){return new wa({fs:t,dir:e,gitdir:r}).readStashReflogs({parsed:!0})}async function lB({fs:t,dir:e,gitdir:r}){let i=new wa({fs:t,dir:e,gitdir:r}),n=[i.refStashPath,i.refLogsStashPath];await Qo(n,async()=>{await Promise.all(n.map(async s=>{if(await t.exists(s))return t.rm(s)}))})}async function cB({fs:t,dir:e,gitdir:r,refIdx:i=0}){await ak({fs:t,dir:e,gitdir:r,refIdx:i}),await ok({fs:t,dir:e,gitdir:r,refIdx:i})}async function lk({fs:t,dir:e,gitdir:r=O(e,".git"),op:i="push",message:n="",refIdx:s=0}){T("fs",t),T("dir",e),T("gitdir",r),T("op",i);let a={push:sB,apply:ak,drop:ok,list:oB,clear:lB,pop:cB,create:aB},o=["apply","drop","pop"];try{let l=new Q(t),c=await ee({fsp:l,dotgit:r});["refs","logs","logs/refs"].map(d=>O(c,d)).forEach(async d=>{await l.exists(d)||await l.mkdir(d)});let f=a[i];if(f){if(o.includes(i)&&s<0)throw new Gi(`stash@${s}`,"number that is in range of [0, num of stash pushed]");return await f({fs:l,dir:e,gitdir:c,message:n,refIdx:s})}throw new Error(`To be implemented: ${i}`)}catch(l){throw l.caller="git.stash",l}}async function ck({fs:t,dir:e,gitdir:r=O(e,".git"),filepath:i,cache:n={}}){try{T("fs",t),T("gitdir",r),T("filepath",i);let s=new Q(t),a=await ee({fsp:s,dotgit:r});if(await Rs.isIgnored({fs:s,gitdir:a,dir:e,filepath:i}))return"ignored";let l=await uB({fs:s,cache:n,gitdir:a}),c=await uk({fs:s,cache:n,gitdir:a,tree:l,path:i}),u=await ft.acquire({fs:s,gitdir:a,cache:n},async function(v){for(let _ of v)if(_.path===i)return _;return null}),f=await s.lstat(O(e,i)),d=c!==null,h=u!==null,p=f!==null,g=async()=>{if(h&&!nd(u,f))return u.oid;{let v=await s.read(O(e,i)),_=await ek({gitdir:a,type:"blob",object:v});return h&&u.oid===_&&f.size!==-1&&ft.acquire({fs:s,gitdir:a,cache:n},async function(b){b.insert({filepath:i,stats:f,oid:_})}),_}};if(!d&&!p&&!h)return"absent";if(!d&&!p&&h)return"*absent";if(!d&&p&&!h)return"*added";if(!d&&p&&h)return await g()===u.oid?"added":"*added";if(d&&!p&&!h)return"deleted";if(d&&!p&&h)return c===u.oid,"*deleted";if(d&&p&&!h)return await g()===c?"*undeleted":"*undeletemodified";if(d&&p&&h){let v=await g();return v===c?v===u.oid?"unmodified":"*unmodified":v===u.oid?"modified":"*modified"}}catch(s){throw s.caller="git.status",s}}async function uk({fs:t,cache:e,gitdir:r,tree:i,path:n}){typeof n=="string"&&(n=n.split("/"));let s=n.shift();for(let a of i)if(a.path===s){if(n.length===0)return a.oid;let{type:o,object:l}=await Je({fs:t,cache:e,gitdir:r,oid:a.oid});if(o==="tree"){let c=Ir.from(l);return uk({fs:t,cache:e,gitdir:r,tree:c,path:n})}if(o==="blob")throw new yr(a.oid,o,"blob",n.join("/"))}return null}async function uB({fs:t,cache:e,gitdir:r}){let i;try{i=await W.resolve({fs:t,gitdir:r,ref:"HEAD"})}catch(s){if(s instanceof He)return[]}let{tree:n}=await rl({fs:t,cache:e,gitdir:r,oid:i});return n}async function fk({fs:t,dir:e,gitdir:r=O(e,".git"),ref:i="HEAD",filepaths:n=["."],filter:s,cache:a={},ignored:o=!1}){try{T("fs",t),T("gitdir",r),T("ref",i);let l=new Q(t),c=await ee({fsp:l,dotgit:r});return await Ps({fs:l,cache:a,dir:e,gitdir:c,trees:[Zr({ref:i}),tl(),_a()],map:async function(u,[f,d,h]){if(!f&&!h&&d&&!o&&await Rs.isIgnored({fs:l,dir:e,filepath:u})||!n.some(w=>YE(u,w)))return null;if(s&&!s(u))return;let[p,g,v]=await Promise.all([f&&f.type(),d&&d.type(),h&&h.type()]),_=[p,g,v].includes("blob");if((p==="tree"||p==="special")&&!_)return;if(p==="commit")return null;if((g==="tree"||g==="special")&&!_)return;if(v==="commit")return null;if((v==="tree"||v==="special")&&!_)return;let b=p==="blob"?await f.oid():void 0,S=v==="blob"?await h.oid():void 0,k;p!=="blob"&&g==="blob"&&v!=="blob"?k="42":g==="blob"&&(k=await d.oid());let E=[void 0,b,k,S],A=E.map(w=>E.indexOf(w));return A.shift(),[u,...A]}})}catch(l){throw l.caller="git.statusMatrix",l}}async function dk({fs:t,dir:e,gitdir:r=O(e,".git"),ref:i,object:n,force:s=!1}){try{T("fs",t),T("gitdir",r),T("ref",i);let a=new Q(t);if(i===void 0)throw new Fr("ref");i=i.startsWith("refs/tags/")?i:`refs/tags/${i}`;let o=await ee({fsp:a,dotgit:r}),l=await W.resolve({fs:a,gitdir:o,ref:n||"HEAD"});if(!s&&await W.exists({fs:a,gitdir:o,ref:i}))throw new Ui("tag",i);await W.writeRef({fs:a,gitdir:o,ref:i,value:l})}catch(a){throw a.caller="git.tag",a}}async function hk({fs:t,dir:e,gitdir:r=O(e,".git"),cache:i={},filepath:n,oid:s,mode:a,add:o,remove:l,force:c}){try{T("fs",t),T("gitdir",r),T("filepath",n);let u=new Q(t),f=await ee({fsp:u,dotgit:r});if(l)return await ft.acquire({fs:u,gitdir:f,cache:i},async function(h){if(!c){let p=await u.lstat(O(e,n));if(p){if(p.isDirectory())throw new Ts("directory");return}}h.has({filepath:n})&&h.delete({filepath:n})});let d;if(!s){if(d=await u.lstat(O(e,n)),!d)throw new He(`file at "${n}" on disk and "remove" not set`);if(d.isDirectory())throw new Ts("directory")}return await ft.acquire({fs:u,gitdir:f,cache:i},async function(h){if(!o&&!h.has({filepath:n}))throw new He(`file at "${n}" in index and "add" not set`);let p;if(s)p={ctime:new Date(0),mtime:new Date(0),dev:0,ino:0,mode:a,uid:0,gid:0,size:0};else{p=d;let g=p.isSymbolicLink()?await u.readlink(O(e,n)):await u.read(O(e,n));s=await Dr({fs:u,gitdir:f,type:"blob",format:"content",object:g})}return h.insert({filepath:n,oid:s,stats:p}),s})}catch(u){throw u.caller="git.updateIndex",u}}function pk(){try{return gd.version}catch(t){throw t.caller="git.version",t}}async function mk({fs:t,dir:e,gitdir:r=O(e,".git"),trees:i,map:n,reduce:s,iterate:a,cache:o={}}){try{T("fs",t),T("gitdir",r),T("trees",i);let l=new Q(t),c=await ee({fsp:l,dotgit:r});return await Ps({fs:l,cache:o,dir:e,gitdir:c,trees:i,map:n,reduce:s,iterate:a})}catch(l){throw l.caller="git.walk",l}}async function gk({fs:t,dir:e,gitdir:r=O(e,".git"),blob:i}){try{T("fs",t),T("gitdir",r),T("blob",i);let n=new Q(t),s=await ee({fsp:n,dotgit:r});return await Dr({fs:n,gitdir:s,type:"blob",object:i,format:"content"})}catch(n){throw n.caller="git.writeBlob",n}}async function vk({fs:t,dir:e,gitdir:r=O(e,".git"),commit:i}){try{T("fs",t),T("gitdir",r),T("commit",i);let n=new Q(t),s=await ee({fsp:n,dotgit:r});return await nk({fs:n,gitdir:s,commit:i})}catch(n){throw n.caller="git.writeCommit",n}}async function wk({fs:t,dir:e,gitdir:r=O(e,".git"),type:i,object:n,format:s="parsed",oid:a,encoding:o=void 0}){try{let l=new Q(t),c=await ee({fsp:l,dotgit:r});if(s==="parsed"){switch(i){case"commit":n=Mr.from(n).toObject();break;case"tree":n=Ir.from(n).toObject();break;case"blob":n=Buffer.from(n,o);break;case"tag":n=Kr.from(n).toObject();break;default:throw new yr(a||"",i,"blob|commit|tag|tree")}s="content"}return a=await Dr({fs:l,gitdir:c,type:i,object:n,oid:a,format:s}),a}catch(l){throw l.caller="git.writeObject",l}}async function _k({fs:t,dir:e,gitdir:r=O(e,".git"),ref:i,value:n,force:s=!1,symbolic:a=!1}){try{T("fs",t),T("gitdir",r),T("ref",i),T("value",n);let o=new Q(t);if(!tu(i,!0))throw new Gi(i,Dc.clean(i));let l=await ee({fsp:o,dotgit:r});if(!s&&await W.exists({fs:o,gitdir:l,ref:i}))throw new Ui("ref",i);a?await W.writeSymbolicRef({fs:o,gitdir:l,ref:i,value:n}):(n=await W.resolve({fs:o,gitdir:l,ref:n}),await W.writeRef({fs:o,gitdir:l,ref:i,value:n}))}catch(o){throw o.caller="git.writeRef",o}}async function fB({fs:t,gitdir:e,tag:r}){let i=Kr.from(r).toObject();return await Dr({fs:t,gitdir:e,type:"tag",object:i,format:"content"})}async function bk({fs:t,dir:e,gitdir:r=O(e,".git"),tag:i}){try{T("fs",t),T("gitdir",r),T("tag",i);let n=new Q(t),s=await ee({fsp:n,dotgit:r});return await fB({fs:n,gitdir:s,tag:i})}catch(n){throw n.caller="git.writeTag",n}}async function yk({fs:t,dir:e,gitdir:r=O(e,".git"),tree:i}){try{T("fs",t),T("gitdir",r),T("tree",i);let n=new Q(t),s=await ee({fsp:n,dotgit:r});return await nu({fs:n,gitdir:s,tree:i})}catch(n){throw n.caller="git.writeTree",n}}var dB={Errors:IE,STAGE:_a,TREE:Zr,WORKDIR:tl,add:NE,abortMerge:DE,addNote:jE,addRemote:zE,annotatedTag:WE,branch:qE,cherryPick:KE,checkout:Dg,clone:rS,commit:iS,getConfig:wS,getConfigAll:_S,setConfig:ik,currentBranch:nS,deleteBranch:sS,deleteRef:aS,deleteRemote:oS,deleteTag:lS,expandOid:cS,expandRef:uS,fastForward:hS,fetch:pS,findMergeBase:mS,findRoot:vS,getRemoteInfo:bS,getRemoteInfo2:xS,hashBlob:ES,indexPack:SS,init:kS,isDescendent:CS,isIgnored:TS,listBranches:PS,listFiles:$S,listNotes:FS,listRefs:IS,listRemotes:MS,listServerRefs:DS,listTags:OS,log:NS,merge:BS,packObjects:US,pull:GS,push:jS,readBlob:WS,readCommit:Ng,readNote:qS,readObject:YS,readTag:XS,readTree:ZS,remove:KS,removeNote:QS,renameBranch:JS,resetIndex:tk,updateIndex:hk,resolveRef:rk,status:ck,statusMatrix:fk,tag:dk,version:pk,walk:mk,writeBlob:gk,writeCommit:vk,writeObject:wk,writeRef:_k,writeTag:bk,writeTree:yk,stash:lk};Y.Errors=IE;Y.STAGE=_a;Y.TREE=Zr;Y.WORKDIR=tl;Y.abortMerge=DE;Y.add=NE;Y.addNote=jE;Y.addRemote=zE;Y.annotatedTag=WE;Y.branch=qE;Y.checkout=Dg;Y.cherryPick=KE;Y.clone=rS;Y.commit=iS;Y.currentBranch=nS;Y.default=dB;Y.deleteBranch=sS;Y.deleteRef=aS;Y.deleteRemote=oS;Y.deleteTag=lS;Y.expandOid=cS;Y.expandRef=uS;Y.fastForward=hS;Y.fetch=pS;Y.findMergeBase=mS;Y.findRoot=vS;Y.getConfig=wS;Y.getConfigAll=_S;Y.getRemoteInfo=bS;Y.getRemoteInfo2=xS;Y.hashBlob=ES;Y.indexPack=SS;Y.init=kS;Y.isDescendent=CS;Y.isIgnored=TS;Y.listBranches=PS;Y.listFiles=$S;Y.listNotes=FS;Y.listRefs=IS;Y.listRemotes=MS;Y.listServerRefs=DS;Y.listTags=OS;Y.log=NS;Y.merge=BS;Y.packObjects=US;Y.pull=GS;Y.push=jS;Y.readBlob=WS;Y.readCommit=Ng;Y.readNote=qS;Y.readObject=YS;Y.readTag=XS;Y.readTree=ZS;Y.remove=KS;Y.removeNote=QS;Y.renameBranch=JS;Y.resetIndex=tk;Y.resolveRef=rk;Y.setConfig=ik;Y.stash=lk;Y.status=ck;Y.statusMatrix=fk;Y.tag=dk;Y.updateIndex=hk;Y.version=pk;Y.walk=mk;Y.writeBlob=gk;Y.writeCommit=vk;Y.writeObject=wk;Y.writeRef=_k;Y.writeTag=bk;Y.writeTree=yk});var Ik=H((zz,Fk)=>{"use strict";m();Fk.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var Dk=H((qz,Mk)=>{m();var ev={px:{px:1,cm:37.79527559055118,mm:3.7795275590551185,in:96,pt:1.3333333333333333,pc:16},cm:{px:.026458333333333334,cm:1,mm:.1,in:2.54,pt:.035277777777777776,pc:.42333333333333334},mm:{px:.26458333333333334,cm:10,mm:1,in:25.4,pt:.35277777777777775,pc:4.233333333333333},in:{px:.010416666666666666,cm:.39370078740157477,mm:.03937007874015748,in:1,pt:.013888888888888888,pc:.16666666666666666},pt:{px:.75,cm:28.346456692913385,mm:2.834645669291339,in:72,pt:1,pc:12},pc:{px:.0625,cm:2.3622047244094486,mm:.2362204724409449,in:6,pt:.08333333333333333,pc:1},deg:{deg:1,grad:.9,rad:180/Math.PI,turn:360},grad:{deg:1.1111111111111112,grad:1,rad:200/Math.PI,turn:400},rad:{deg:Math.PI/180,grad:Math.PI/200,rad:1,turn:Math.PI*2},turn:{deg:.002777777777777778,grad:.0025,rad:.5/Math.PI,turn:1},s:{s:1,ms:.001},ms:{s:1e3,ms:1},Hz:{Hz:1,kHz:1e3},kHz:{Hz:.001,kHz:1},dpi:{dpi:1,dpcm:.39370078740157477,dppx:.010416666666666666},dpcm:{dpi:2.54,dpcm:1,dppx:.026458333333333334},dppx:{dpi:96,dpcm:37.79527559055118,dppx:1}};Mk.exports=function(t,e,r,i){if(!ev.hasOwnProperty(r))throw new Error("Cannot convert to "+r);if(!ev[r].hasOwnProperty(e))throw new Error("Cannot convert from "+e+" to "+r);var n=ev[r][e]*t;return i!==!1?(i=Math.pow(10,parseInt(i)||5),Math.round(n*i)/i):n}});var Xk=H(Zn=>{"use strict";m();Object.defineProperty(Zn,"__esModule",{value:!0});Zn.fromRgba=ol;Zn.fromRgb=tv;Zn.fromHsla=Cd;Zn.fromHsl=qk;Zn.fromString=Yk;Zn.default=void 0;var Ok=Bk(Ik()),yB=Bk(Dk());function Bk(t){return t&&t.__esModule?t:{default:t}}function xB(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Lk(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,i=new Array(e);r-1}function TB(t,e,r){var i=t/255,n=e/255,s=r/255,a=Math.max(i,n,s),o=Math.min(i,n,s),l=a-o,c=(a+o)/2;if(l===0)return[0,0,c*100];var u=l/(1-Math.abs(2*c-1)),f=function(){switch(a){case i:return(n-s)/l%6;case n:return(s-i)/l+2;default:return(i-n)/l+4}}();return[f*60,u*100,c*100]}function PB(t,e,r){var i=t/60,n=e/100,s=r/100,a=(1-Math.abs(2*s-1))*n,o=a*(1-Math.abs(i%2-1)),l=s-a/2,c=function(){return i<1?[a,o,0]:i<2?[o,a,0]:i<3?[0,a,o]:i<4?[0,o,a]:i<5?[o,0,a]:[a,0,o]}(),u=xr(c,3),f=u[0],d=u[1],h=u[2];return[(f+l)*255,(d+l)*255,(h+l)*255]}var RB=function(){function t(e){var r=xr(e,4),i=r[0],n=r[1],s=r[2],a=r[3];xB(this,t),this.values=[Math.max(Math.min(parseInt(i,10),255),0),Math.max(Math.min(parseInt(n,10),255),0),Math.max(Math.min(parseInt(s,10),255),0),a==null?1:Math.max(Math.min(parseFloat(a),255),0)]}return EB(t,[{key:"toRgbString",value:function(){var r=xr(this.values,4),i=r[0],n=r[1],s=r[2],a=r[3];return a===1?"rgb(".concat(i,", ").concat(n,", ").concat(s,")"):"rgba(".concat(i,", ").concat(n,", ").concat(s,", ").concat(a,")")}},{key:"toHslString",value:function(){var r=this.toHslaArray(),i=xr(r,4),n=i[0],s=i[1],a=i[2],o=i[3];return o===1?"hsl(".concat(n,", ").concat(s,"%, ").concat(a,"%)"):"hsla(".concat(n,", ").concat(s,"%, ").concat(a,"%, ").concat(o,")")}},{key:"toHexString",value:function(){var r=xr(this.values,4),i=r[0],n=r[1],s=r[2],a=r[3];return i=Number(i).toString(16).padStart(2,"0"),n=Number(n).toString(16).padStart(2,"0"),s=Number(s).toString(16).padStart(2,"0"),a=a<1?parseInt(a*255,10).toString(16).padStart(2,"0"):"","#".concat(i).concat(n).concat(s).concat(a)}},{key:"toRgbaArray",value:function(){return this.values}},{key:"toHslaArray",value:function(){var r=xr(this.values,4),i=r[0],n=r[1],s=r[2],a=r[3],o=TB(i,n,s),l=xr(o,3),c=l[0],u=l[1],f=l[2];return[c,u,f,a]}}]),t}();function ol(t){var e=xr(t,4),r=e[0],i=e[1],n=e[2],s=e[3];return new RB([r,i,n,s])}function tv(t){var e=xr(t,3),r=e[0],i=e[1],n=e[2];return ol([r,i,n,1])}function Cd(t){var e=xr(t,4),r=e[0],i=e[1],n=e[2],s=e[3],a=PB(r,i,n),o=xr(a,3),l=o[0],c=o[1],u=o[2];return ol([l,c,u,s])}function qk(t){var e=xr(t,3),r=e[0],i=e[1],n=e[2];return Cd([r,i,n,1])}function $B(t){var e=Hk.exec(t)||Uk.exec(t),r=xr(e,5),i=r[1],n=r[2],s=r[3],a=r[4];return i=parseInt(i.length<2?i.repeat(2):i,16),n=parseInt(n.length<2?n.repeat(2):n,16),s=parseInt(s.length<2?s.repeat(2):s,16),a=a&&(parseInt(a.length<2?a.repeat(2):a,16)/255).toPrecision(1)||1,ol([i,n,s,a])}function FB(t){var e=Gk.exec(t)||Vk.exec(t)||jk.exec(t)||zk.exec(t),r=xr(e,5),i=r[1],n=r[2],s=r[3],a=r[4];return i=lu(i,"%")?parseInt(i,10)*255/100:parseInt(i,10),n=lu(n,"%")?parseInt(n,10)*255/100:parseInt(n,10),s=lu(s,"%")>0?parseInt(s,10)*255/100:parseInt(s,10),a=a===void 0?1:parseFloat(a)/(lu(a,"%")?100:1),ol([i,n,s,a])}function IB(t){var e=Wk.exec(t),r=xr(e,6),i=r[1],n=r[2],s=r[3],a=r[4],o=r[5];return n=n||"deg",i=(0,yB.default)(parseFloat(i),n,"deg"),s=parseFloat(s),a=parseFloat(a),o=o===void 0?1:parseFloat(o)/(lu(o,"%")?100:1),Cd([i,s,a,o])}function Yk(t){return Ok.default[t]?tv(Ok.default[t]):Hk.test(t)||Uk.test(t)?$B(t):Gk.test(t)||Vk.test(t)||jk.test(t)||zk.test(t)?FB(t):Wk.test(t)?IB(t):null}var MB={fromString:Yk,fromRgb:tv,fromRgba:ol,fromHsl:qk,fromHsla:Cd};Zn.default=MB});var oA=H((n9,aA)=>{m();aA.exports=function(t,e){var r=t,i=e,n=r.length,s=i.length,a=!1,o=n+1,l=[],c=[],u,f,d=function(){n>=s&&(u=r,f=n,r=i,i=u,n=s,s=f,a=!0,o=n+1)},h=function(g,v,_,b,S){return{startX:g,startY:v,endX:_,endY:b,r:S}},p=function(g,v,_){var b,S,k,E,A;for(v>_?b=l[g-1+o]:b=l[g+1+o],A=k=Math.max(v,_),E=S=k-g;S=g+1;--E)_[E+o]=p(E,_[E-1+o]+1,_[E+1+o]);_[g+o]=p(g,_[g-1+o]+1,_[g+1+o])}while(_[g+o]!==s);for(ed=g+2*b,S=l[g+o],A=n,w=s,x=[];S!==-1;){let y=c[S];(n!=y.endX||s!=y.endY)&&x.push({file1:[a?y.endY:y.endX,a?w-y.endY:A-y.endX],file2:[a?y.endX:y.endY,a?A-y.endX:w-y.endY]}),A=y.startX,w=y.startY,S=c[S].r}return(A!=0||w!=0)&&x.push({file1:[0,a?w:A],file2:[0,a?A:w]}),x.reverse(),x}}}});var uA=H((a9,cA)=>{m();var lA=oA();function OB(t,e,r){var i,n=new lA(e,t).compose(),s=new lA(e,r).compose(),a=[];function o(N,B){a.push([N.file1[0],B,N.file1[1],N.file2[0],N.file2[1]])}for(i=0;ic&&(l.push([1,c,N-c]),c=N)}for(var f=0;fg)break;g=Math.max(g,_+v[2]),f++}if(u(p),d==f)h[4]>0&&l.push([h[1],h[3],h[4]]);else{var b={0:[t.length,-1,e.length,-1],2:[r.length,-1,e.length,-1]};for(i=d;i<=f;i++){h=a[i];var S=h[1],k=b[S],E=h[0],A=E+h[2],w=h[3],x=w+h[4];k[0]=Math.min(w,k[0]),k[1]=Math.max(x,k[1]),k[2]=Math.min(E,k[2]),k[3]=Math.max(A,k[3])}var y=b[0][0]+(p-b[0][2]),C=b[0][1]+(g-b[0][3]),P=b[2][0]+(p-b[2][2]),L=b[2][1]+(g-b[2][3]);l.push([-1,y,C-y,p,g-p,P,L-P])}c=g}return u(e.length),l}function LB(t,e,r){var i=[],n=[t,e,r],s=OB(t,e,r),a=[];function o(){a.length&&i.push({ok:a}),a=[]}function l(h){for(var p=0;p{m();var dl=1e3,hl=dl*60,pl=hl*60,Ea=pl*24,HB=Ea*7,UB=Ea*365.25;dA.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return GB(t);if(r==="number"&&isFinite(t))return e.long?VB(t):jB(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function GB(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),i=(e[2]||"ms").toLowerCase();switch(i){case"years":case"year":case"yrs":case"yr":case"y":return r*UB;case"weeks":case"week":case"w":return r*HB;case"days":case"day":case"d":return r*Ea;case"hours":case"hour":case"hrs":case"hr":case"h":return r*pl;case"minutes":case"minute":case"mins":case"min":case"m":return r*hl;case"seconds":case"second":case"secs":case"sec":case"s":return r*dl;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function jB(t){var e=Math.abs(t);return e>=Ea?Math.round(t/Ea)+"d":e>=pl?Math.round(t/pl)+"h":e>=hl?Math.round(t/hl)+"m":e>=dl?Math.round(t/dl)+"s":t+"ms"}function VB(t){var e=Math.abs(t);return e>=Ea?$d(t,e,Ea,"day"):e>=pl?$d(t,e,pl,"hour"):e>=hl?$d(t,e,hl,"minute"):e>=dl?$d(t,e,dl,"second"):t+" ms"}function $d(t,e,r,i){var n=e>=r*1.5;return Math.round(t/r)+" "+i+(n?"s":"")}});var mA=H((w9,pA)=>{m();function zB(t){r.debug=r,r.default=r,r.coerce=l,r.disable=a,r.enable=n,r.enabled=o,r.humanize=hA(),r.destroy=c,Object.keys(t).forEach(u=>{r[u]=t[u]}),r.names=[],r.skips=[],r.formatters={};function e(u){let f=0;for(let d=0;d{if(A==="%%")return"%";k++;let x=r.formatters[w];if(typeof x=="function"){let y=v[k];A=x.call(_,y),v.splice(k,1),k--}return A}),r.formatArgs.call(_,v),(_.log||r.log).apply(_,v)}return g.namespace=u,g.useColors=r.useColors(),g.color=r.selectColor(u),g.extend=i,g.destroy=r.destroy,Object.defineProperty(g,"enabled",{enumerable:!0,configurable:!1,get:()=>d!==null?d:(h!==r.namespaces&&(h=r.namespaces,p=r.enabled(u)),p),set:v=>{d=v}}),typeof r.init=="function"&&r.init(g),g}function i(u,f){let d=r(this.namespace+(typeof f=="undefined"?":":f)+u);return d.log=this.log,d}function n(u){r.save(u),r.namespaces=u,r.names=[],r.skips=[];let f=(typeof u=="string"?u:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let d of f)d[0]==="-"?r.skips.push(d.slice(1)):r.names.push(d)}function s(u,f){let d=0,h=0,p=-1,g=0;for(;d"-"+f)].join(",");return r.enable(""),u}function o(u){for(let f of r.skips)if(s(u,f))return!1;for(let f of r.names)if(s(u,f))return!0;return!1}function l(u){return u instanceof Error?u.stack||u.message:u}function c(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.enable(r.load()),r}pA.exports=zB});var Id=H((Or,Fd)=>{m();Or.formatArgs=qB;Or.save=YB;Or.load=XB;Or.useColors=WB;Or.storage=ZB();Or.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Or.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function WB(){if(typeof window!="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document!="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!="undefined"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function qB(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+Fd.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,i=0;t[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(r++,n==="%c"&&(i=r))}),t.splice(i,0,e)}Or.log=console.debug||console.log||(()=>{});function YB(t){try{t?Or.storage.setItem("debug",t):Or.storage.removeItem("debug")}catch(e){}}function XB(){let t;try{t=Or.storage.getItem("debug")||Or.storage.getItem("DEBUG")}catch(e){}return!t&&typeof process!="undefined"&&"env"in process&&(t=process.env.DEBUG),t}function ZB(){try{return localStorage}catch(t){}}Fd.exports=mA()(Or);var{formatters:KB}=Fd.exports;KB.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var gA=H(Qr=>{"use strict";m();var QB=Qr&&Qr.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Qr,"__esModule",{value:!0});var JB=require("fs"),eH=QB(Id()),ml=eH.default("@kwsites/file-exists");function tH(t,e,r){ml("checking %s",t);try{let i=JB.statSync(t);return i.isFile()&&e?(ml("[OK] path represents a file"),!0):i.isDirectory()&&r?(ml("[OK] path represents a directory"),!0):(ml("[FAIL] path represents something other than a file or directory"),!1)}catch(i){if(i.code==="ENOENT")return ml("[FAIL] path is not accessible: %o",i),!1;throw ml("[FATAL] %o",i),i}}function rH(t,e=Qr.READABLE){return tH(t,(e&Qr.FILE)>0,(e&Qr.FOLDER)>0)}Qr.exists=rH;Qr.FILE=1;Qr.FOLDER=2;Qr.READABLE=Qr.FILE+Qr.FOLDER});var vA=H(Md=>{"use strict";m();function iH(t){for(var e in t)Md.hasOwnProperty(e)||(Md[e]=t[e])}Object.defineProperty(Md,"__esModule",{value:!0});iH(gA())});var cv=H(Sa=>{"use strict";m();Object.defineProperty(Sa,"__esModule",{value:!0});Sa.createDeferred=Sa.deferred=void 0;function lv(){let t,e,r="pending";return{promise:new Promise((n,s)=>{t=n,e=s}),done(n){r==="pending"&&(r="resolved",t(n))},fail(n){r==="pending"&&(r="rejected",e(n))},get fulfilled(){return r!=="pending"},get status(){return r}}}Sa.deferred=lv;Sa.createDeferred=lv;Sa.default=lv});var tw=H((exports,module)=>{m();(function(){"use strict";var ERROR="input is invalid type",WINDOW=typeof window=="object",root=WINDOW?window:{};root.JS_SHA256_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&typeof self=="object",NODE_JS=!root.JS_SHA256_NO_NODE_JS&&typeof process=="object"&&process.versions&&process.versions.node;NODE_JS?root=global:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_SHA256_NO_COMMON_JS&&typeof module=="object"&&module.exports,AMD=typeof define=="function"&&define.amd,ARRAY_BUFFER=!root.JS_SHA256_NO_ARRAY_BUFFER&&typeof ArrayBuffer!="undefined",HEX_CHARS="0123456789abcdef".split(""),EXTRA=[-2147483648,8388608,32768,128],SHIFT=[24,16,8,0],K=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],OUTPUT_TYPES=["hex","array","digest","arrayBuffer"],blocks=[];(root.JS_SHA256_NO_NODE_JS||!Array.isArray)&&(Array.isArray=function(t){return Object.prototype.toString.call(t)==="[object Array]"}),ARRAY_BUFFER&&(root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW||!ArrayBuffer.isView)&&(ArrayBuffer.isView=function(t){return typeof t=="object"&&t.buffer&&t.buffer.constructor===ArrayBuffer});var createOutputMethod=function(t,e){return function(r){return new Sha256(e,!0).update(r)[t]()}},createMethod=function(t){var e=createOutputMethod("hex",t);NODE_JS&&(e=nodeWrap(e,t)),e.create=function(){return new Sha256(t)},e.update=function(n){return e.create().update(n)};for(var r=0;r>2]|=t[n]<>2]|=i<>2]|=(192|i>>6)<>2]|=(128|i&63)<=57344?(o[s>>2]|=(224|i>>12)<>2]|=(128|i>>6&63)<>2]|=(128|i&63)<>2]|=(240|i>>18)<>2]|=(128|i>>12&63)<>2]|=(128|i>>6&63)<>2]|=(128|i&63)<=64?(this.block=o[16],this.start=s-64,this.hash(),this.hashed=!0):this.start=s}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Sha256.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,e=this.lastByteIndex;t[16]=this.block,t[e>>2]|=EXTRA[e&3],this.block=t[16],e>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.hBytes<<3|this.bytes>>>29,t[15]=this.bytes<<3,this.hash()}},Sha256.prototype.hash=function(){var t=this.h0,e=this.h1,r=this.h2,i=this.h3,n=this.h4,s=this.h5,a=this.h6,o=this.h7,l=this.blocks,c,u,f,d,h,p,g,v,_,b,S;for(c=16;c<64;++c)h=l[c-15],u=(h>>>7|h<<25)^(h>>>18|h<<14)^h>>>3,h=l[c-2],f=(h>>>17|h<<15)^(h>>>19|h<<13)^h>>>10,l[c]=l[c-16]+u+l[c-7]+f<<0;for(S=e&r,c=0;c<64;c+=4)this.first?(this.is224?(v=300032,h=l[0]-1413257819,o=h-150054599<<0,i=h+24177077<<0):(v=704751109,h=l[0]-210244248,o=h-1521486534<<0,i=h+143694565<<0),this.first=!1):(u=(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10),f=(n>>>6|n<<26)^(n>>>11|n<<21)^(n>>>25|n<<7),v=t&e,d=v^t&r^S,g=n&s^~n&a,h=o+f+g+K[c]+l[c],p=u+d,o=i+h<<0,i=h+p<<0),u=(i>>>2|i<<30)^(i>>>13|i<<19)^(i>>>22|i<<10),f=(o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7),_=i&t,d=_^i&e^v,g=o&n^~o&s,h=a+f+g+K[c+1]+l[c+1],p=u+d,a=r+h<<0,r=h+p<<0,u=(r>>>2|r<<30)^(r>>>13|r<<19)^(r>>>22|r<<10),f=(a>>>6|a<<26)^(a>>>11|a<<21)^(a>>>25|a<<7),b=r&i,d=b^r&t^_,g=a&o^~a&n,h=s+f+g+K[c+2]+l[c+2],p=u+d,s=e+h<<0,e=h+p<<0,u=(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10),f=(s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7),S=e&r,d=S^e&i^b,g=s&a^~s&o,h=n+f+g+K[c+3]+l[c+3],p=u+d,n=t+h<<0,t=h+p<<0;this.h0=this.h0+t<<0,this.h1=this.h1+e<<0,this.h2=this.h2+r<<0,this.h3=this.h3+i<<0,this.h4=this.h4+n<<0,this.h5=this.h5+s<<0,this.h6=this.h6+a<<0,this.h7=this.h7+o<<0},Sha256.prototype.hex=function(){this.finalize();var t=this.h0,e=this.h1,r=this.h2,i=this.h3,n=this.h4,s=this.h5,a=this.h6,o=this.h7,l=HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[t&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>4&15]+HEX_CHARS[e&15]+HEX_CHARS[r>>28&15]+HEX_CHARS[r>>24&15]+HEX_CHARS[r>>20&15]+HEX_CHARS[r>>16&15]+HEX_CHARS[r>>12&15]+HEX_CHARS[r>>8&15]+HEX_CHARS[r>>4&15]+HEX_CHARS[r&15]+HEX_CHARS[i>>28&15]+HEX_CHARS[i>>24&15]+HEX_CHARS[i>>20&15]+HEX_CHARS[i>>16&15]+HEX_CHARS[i>>12&15]+HEX_CHARS[i>>8&15]+HEX_CHARS[i>>4&15]+HEX_CHARS[i&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[n&15]+HEX_CHARS[s>>28&15]+HEX_CHARS[s>>24&15]+HEX_CHARS[s>>20&15]+HEX_CHARS[s>>16&15]+HEX_CHARS[s>>12&15]+HEX_CHARS[s>>8&15]+HEX_CHARS[s>>4&15]+HEX_CHARS[s&15]+HEX_CHARS[a>>28&15]+HEX_CHARS[a>>24&15]+HEX_CHARS[a>>20&15]+HEX_CHARS[a>>16&15]+HEX_CHARS[a>>12&15]+HEX_CHARS[a>>8&15]+HEX_CHARS[a>>4&15]+HEX_CHARS[a&15];return this.is224||(l+=HEX_CHARS[o>>28&15]+HEX_CHARS[o>>24&15]+HEX_CHARS[o>>20&15]+HEX_CHARS[o>>16&15]+HEX_CHARS[o>>12&15]+HEX_CHARS[o>>8&15]+HEX_CHARS[o>>4&15]+HEX_CHARS[o&15]),l},Sha256.prototype.toString=Sha256.prototype.hex,Sha256.prototype.digest=function(){this.finalize();var t=this.h0,e=this.h1,r=this.h2,i=this.h3,n=this.h4,s=this.h5,a=this.h6,o=this.h7,l=[t>>24&255,t>>16&255,t>>8&255,t&255,e>>24&255,e>>16&255,e>>8&255,e&255,r>>24&255,r>>16&255,r>>8&255,r&255,i>>24&255,i>>16&255,i>>8&255,i&255,n>>24&255,n>>16&255,n>>8&255,n&255,s>>24&255,s>>16&255,s>>8&255,s&255,a>>24&255,a>>16&255,a>>8&255,a&255];return this.is224||l.push(o>>24&255,o>>16&255,o>>8&255,o&255),l},Sha256.prototype.array=Sha256.prototype.digest,Sha256.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(this.is224?28:32),e=new DataView(t);return e.setUint32(0,this.h0),e.setUint32(4,this.h1),e.setUint32(8,this.h2),e.setUint32(12,this.h3),e.setUint32(16,this.h4),e.setUint32(20,this.h5),e.setUint32(24,this.h6),this.is224||e.setUint32(28,this.h7),t};function HmacSha256(t,e,r){var i,n=typeof t;if(n==="string"){var s=[],a=t.length,o=0,l;for(i=0;i>6,s[o++]=128|l&63):l<55296||l>=57344?(s[o++]=224|l>>12,s[o++]=128|l>>6&63,s[o++]=128|l&63):(l=65536+((l&1023)<<10|t.charCodeAt(++i)&1023),s[o++]=240|l>>18,s[o++]=128|l>>12&63,s[o++]=128|l>>6&63,s[o++]=128|l&63);t=s}else if(n==="object"){if(t===null)throw new Error(ERROR);if(ARRAY_BUFFER&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!Array.isArray(t)&&(!ARRAY_BUFFER||!ArrayBuffer.isView(t)))throw new Error(ERROR)}else throw new Error(ERROR);t.length>64&&(t=new Sha256(e,!0).update(t).array());var c=[],u=[];for(i=0;i<64;++i){var f=t[i]||0;c[i]=92^f,u[i]=54^f}Sha256.call(this,e,r),this.update(u),this.oKeyPad=c,this.inner=!0,this.sharedMemory=r}HmacSha256.prototype=new Sha256,HmacSha256.prototype.finalize=function(){if(Sha256.prototype.finalize.call(this),this.inner){this.inner=!1;var t=this.array();Sha256.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(t),Sha256.prototype.finalize.call(this)}};var exports=createMethod();exports.sha256=exports,exports.sha224=createMethod(!0),exports.sha256.hmac=createHmacMethod(),exports.sha224.hmac=createHmacMethod(!0),COMMON_JS?module.exports=exports:(root.sha256=exports.sha256,root.sha224=exports.sha224,AMD&&define(function(){return exports}))})()});var HP=H(Mw=>{m();(function(t){var e=/\S/,r=/\"/g,i=/\n/g,n=/\r/g,s=/\\/g,a=/\u2028/,o=/\u2029/;t.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},t.scan=function(x,y){var C=x.length,P=0,L=1,N=2,B=P,ge=null,Le=null,ke="",ne=[],Ee=!1,_e=0,z=0,X="{{",V="}}";function Ne(){ke.length>0&&(ne.push({tag:"_t",text:new String(ke)}),ke="")}function gr(){for(var Pt=!0,Rt=z;Rt"&&(J.indent=ne[Ye].text.toString()),ne.splice(Ye,1));else Rt||ne.push({tag:` +`});Ee=!1,z=ne.length}function Fe(Pt,Rt){var Ye="="+V,J=Pt.indexOf(Ye,Rt),D=c(Pt.substring(Pt.indexOf("=",Rt)+1,J)).split(" ");return X=D[0],V=D[D.length-1],J+Ye.length-1}for(y&&(y=y.split(" "),X=y[0],V=y[1]),_e=0;_e0;){if(B=w.shift(),N&&N.tag=="<"&&!(B.tag in f))throw new Error("Illegal content in < super tag.");if(t.tags[B.tag]<=t.tags.$||h(B,C))y.push(B),B.nodes=d(w,B.tag,y,C);else if(B.tag=="/"){if(y.length===0)throw new Error("Closing tag without opener: /"+B.n);if(L=y.pop(),B.n!=L.n&&!p(B.n,L.n,C))throw new Error("Nesting error: "+L.n+" vs. "+B.n);return L.end=B.i,P}else B.tag==` +`&&(B.last=w.length==0||w[0].tag==` +`);P.push(B)}if(y.length>0)throw new Error("missing closing tag: "+y.pop().n);return P}function h(w,x){for(var y=0,C=x.length;y":k,"<":function(w,x){var y={partials:{},code:"",subs:{},inPartial:!0};t.walk(w.nodes,y);var C=x.partials[k(w,x)];C.subs=y.subs,C.partials=y.partials},$:function(w,x){var y={subs:{},code:"",partials:x.partials,prefix:w.n};t.walk(w.nodes,y),x.subs[w.n]=y.code,x.inPartial||(x.code+='t.sub("'+b(w.n)+'",c,p,i);')},"\n":function(w,x){x.code+=A('"\\n"'+(w.last?"":" + i"))},_v:function(w,x){x.code+="t.b(t.v(t."+S(w.n)+'("'+b(w.n)+'",c,p,0)));'},_t:function(w,x){x.code+=A('"'+b(w.text)+'"')},"{":E,"&":E};function E(w,x){x.code+="t.b(t.t(t."+S(w.n)+'("'+b(w.n)+'",c,p,0)));'}function A(w){return"t.b("+w+");"}t.walk=function(w,x){for(var y,C=0,P=w.length;C{m();var z5={};(function(t){t.Template=function(d,h,p,g){d=d||{},this.r=d.code||this.r,this.c=p,this.options=g||{},this.text=h||"",this.partials=d.partials||{},this.subs=d.subs||{},this.buf=""},t.Template.prototype={r:function(d,h,p){return""},v:u,t:c,render:function(h,p,g){return this.ri([h],p||{},g)},ri:function(d,h,p){return this.r(d,h,p)},ep:function(d,h){var p=this.partials[d],g=h[p.name];if(p.instance&&p.base==g)return p.instance;if(typeof g=="string"){if(!this.c)throw new Error("No compiler available.");g=this.c.compile(g,this.options)}if(!g)return null;if(this.partials[d].base=g,p.subs){h.stackText||(h.stackText={});for(key in p.subs)h.stackText[key]||(h.stackText[key]=this.activeSub!==void 0&&h.stackText[this.activeSub]?h.stackText[this.activeSub]:this.text);g=r(g,p.subs,p.partials,this.stackSubs,this.stackPartials,h.stackText)}return this.partials[d].instance=g,g},rp:function(d,h,p,g){var v=this.ep(d,p);return v?v.ri(h,p,g):""},rs:function(d,h,p){var g=d[d.length-1];if(!f(g)){p(d,h,this);return}for(var v=0;v=0;k--)if(_=h[k],v=e(d,_,S),v!==void 0){b=!0;break}return b?(!g&&typeof v=="function"&&(v=this.mv(v,h,p)),v):g?!1:""},ls:function(d,h,p,g,v,_){var b=this.options.delimiters;return this.options.delimiters=_,this.b(this.ct(c(d.call(h,v,p)),h,g)),this.options.delimiters=b,!1},ct:function(d,h,p){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(d,this.options).render(h,p)},b:function(d){this.buf+=d},fl:function(){var d=this.buf;return this.buf="",d},ms:function(d,h,p,g,v,_,b){var S,k=h[h.length-1],E=d.call(k);return typeof E=="function"?g?!0:(S=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(E,k,h,p,S.substring(v,_),b)):E},mv:function(d,h,p){var g=h[h.length-1],v=d.call(g);return typeof v=="function"?this.ct(c(v.call(g)),g,p):v},sub:function(d,h,p,g){var v=this.subs[d];v&&(this.activeSub=d,v(h,p,this,g),this.activeSub=!1)}};function e(d,h,p){var g;return h&&typeof h=="object"&&(h[d]!==void 0?g=h[d]:p&&h.get&&typeof h.get=="function"&&(g=h.get(d))),g}function r(d,h,p,g,v,_){function b(){}b.prototype=d;function S(){}S.prototype=d.subs;var k,E=new b;E.subs=new S,E.subsText={},E.buf="",g=g||{},E.stackSubs=g,E.subsText=_;for(k in h)g[k]||(g[k]=h[k]);for(k in g)E.subs[k]=g[k];v=v||{},E.stackPartials=v;for(k in p)v[k]||(v[k]=p[k]);for(k in v)E.partials[k]=v[k];return E}var i=/&/g,n=//g,a=/\'/g,o=/\"/g,l=/[&<>\"\']/;function c(d){return String(d==null?"":d)}function u(d){return d=c(d),l.test(d)?d.replace(i,"&").replace(n,"<").replace(s,">").replace(a,"'").replace(o,"""):d}var f=Array.isArray||function(d){return Object.prototype.toString.call(d)==="[object Array]"}})(typeof Dw!="undefined"?Dw:z5)});var Ow=H((zq,GP)=>{m();var Th=HP();Th.Template=UP().Template;Th.template=Th.Template;GP.exports=Th});var zP=H(Ai=>{"use strict";m();Object.defineProperty(Ai,"__esModule",{value:!0});Ai.ColorSchemeType=Ai.DiffStyleType=Ai.LineMatchingType=Ai.OutputFormatType=Ai.LineType=void 0;var jP;(function(t){t.INSERT="insert",t.DELETE="delete",t.CONTEXT="context"})(jP||(Ai.LineType=jP={}));Ai.OutputFormatType={LINE_BY_LINE:"line-by-line",SIDE_BY_SIDE:"side-by-side"};Ai.LineMatchingType={LINES:"lines",WORDS:"words",NONE:"none"};Ai.DiffStyleType={WORD:"word",CHAR:"char"};var VP;(function(t){t.AUTO="auto",t.DARK="dark",t.LIGHT="light"})(VP||(Ai.ColorSchemeType=VP={}))});var iG={};bF(iG,{default:()=>Dp});module.exports=yF(iG);m();var Q$=Ht(Bg(),1),be=require("obsidian"),J$=Ht(require("path"),1),Op=Ht(require("fs/promises"),1);m();var jt={};m();var vd=class{constructor(e){this.plugin=e;this.tasks=[]}addTask(e,r){this.tasks.push({task:e,onFinished:r!=null?r:()=>{}}),this.tasks.length===1&&this.handleTask()}handleTask(){if(this.tasks.length>0){let e=this.tasks[0];e.task().then(r=>{e.onFinished(r),this.tasks.shift(),this.handleTask()},r=>{this.plugin.displayError(r),e.onFinished(void 0),this.tasks.shift(),this.handleTask()})}}clear(){this.tasks=[]}};m();var U=require("obsidian");m();var xk=require("obsidian"),wd="YYYY-MM-DD",Hg=`${wd} HH:mm`,Ug=`${wd} HH:mm:ss`,_d=40,il="conflict-files-obsidian-git.md",ht={commitMessage:"vault backup: {{date}}",autoCommitMessage:"vault backup: {{date}}",commitMessageScript:"",commitDateFormat:Ug,autoSaveInterval:0,autoPushInterval:0,autoPullInterval:0,autoPullOnBoot:!1,autoCommitOnlyStaged:!1,disablePush:!1,pullBeforePush:!0,disablePopups:!1,showErrorNotices:!0,disablePopupsForNoChanges:!1,listChangedFilesInMessageBody:!1,showStatusBar:!0,updateSubmodules:!1,syncMethod:"merge",mergeStrategy:"none",customMessageOnAutoBackup:!1,autoBackupAfterFileChange:!1,treeStructure:!1,refreshSourceControl:xk.Platform.isDesktopApp,basePath:"",differentIntervalCommitAndPush:!1,changedFilesInStatusBar:!1,showedMobileNotice:!1,refreshSourceControlTimer:7e3,showBranchStatusBar:!0,setLastSaveToLastCommit:!1,submoduleRecurseCheckout:!1,gitDir:"",showFileMenu:!0,authorInHistoryView:"hide",dateInHistoryView:!1,diffStyle:"split",hunks:{showSigns:!1,hunkCommands:!1,statusBar:"disabled"},lineAuthor:{show:!1,followMovement:"inactive",authorDisplay:"initials",showCommitHash:!1,dateTimeFormatOptions:"date",dateTimeFormatCustomString:Hg,dateTimeTimezone:"viewer-local",coloringMaxAge:"1y",colorNew:{r:255,g:150,b:150},colorOld:{r:120,g:160,b:255},textColorCss:"var(--text-muted)",ignoreWhitespace:!1}},Kt={type:"git-view",name:"Source Control",icon:"git-pull-request"},bi={type:"git-history-view",name:"History",icon:"history"},Ms={type:"split-diff-view",name:"Diff view",icon:"diff"},Ds={type:"diff-view",name:"Diff View",icon:"git-pull-request"},bd="C:\\Program Files\\Git\\cmd\\git.exe",yd=".git_credentials_input",ba="obsidian_askpass.sh",Ek=`#!/bin/sh + +PROMPT="$1" +TEMP_FILE="$OBSIDIAN_GIT_CREDENTIALS_INPUT" + +cleanup() { + rm -f "$TEMP_FILE" "$TEMP_FILE.response" +} +trap cleanup EXIT + +echo "$PROMPT" > "$TEMP_FILE" + +while [ ! -e "$TEMP_FILE.response" ]; do + if [ ! -e "$TEMP_FILE" ]; then + echo "Trigger file got removed: Abort" >&2 + exit 1 + fi + sleep 0.1 +done + +RESPONSE=$(cat "$TEMP_FILE.response") + +echo "$RESPONSE" +`,Sk=["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"];m();m();m();var _n=class{diff(e,r,i={}){let n;typeof i=="function"?(n=i,i={}):"callback"in i&&(n=i.callback);let s=this.castInput(e,i),a=this.castInput(r,i),o=this.removeEmpty(this.tokenize(s,i)),l=this.removeEmpty(this.tokenize(a,i));return this.diffWithOptionsObj(o,l,i,n)}diffWithOptionsObj(e,r,i,n){var s;let a=b=>{if(b=this.postProcess(b,i),n){setTimeout(function(){n(b)},0);return}else return b},o=r.length,l=e.length,c=1,u=o+l;i.maxEditLength!=null&&(u=Math.min(u,i.maxEditLength));let f=(s=i.timeout)!==null&&s!==void 0?s:1/0,d=Date.now()+f,h=[{oldPos:-1,lastComponent:void 0}],p=this.extractCommon(h[0],r,e,0,i);if(h[0].oldPos+1>=l&&p+1>=o)return a(this.buildValues(h[0].lastComponent,r,e));let g=-1/0,v=1/0,_=()=>{for(let b=Math.max(g,-c);b<=Math.min(v,c);b+=2){let S,k=h[b-1],E=h[b+1];k&&(h[b-1]=void 0);let A=!1;if(E){let x=E.oldPos-b;A=E&&0<=x&&x=l&&p+1>=o)return a(this.buildValues(S.lastComponent,r,e))||!0;h[b]=S,S.oldPos+1>=l&&(v=Math.min(v,b-1)),p+1>=o&&(g=Math.max(g,b+1))}c++};if(n)(function b(){setTimeout(function(){if(c>u||Date.now()>d)return n(void 0);_()||b()},0)})();else for(;c<=u&&Date.now()<=d;){let b=_();if(b)return b}}addToPath(e,r,i,n,s){let a=e.lastComponent;return a&&!s.oneChangePerToken&&a.added===r&&a.removed===i?{oldPos:e.oldPos+n,lastComponent:{count:a.count+1,added:r,removed:i,previousComponent:a.previousComponent}}:{oldPos:e.oldPos+n,lastComponent:{count:1,added:r,removed:i,previousComponent:a}}}extractCommon(e,r,i,n,s){let a=r.length,o=i.length,l=e.oldPos,c=l-n,u=0;for(;c+1d.length?p:d}),u.value=this.join(f)}else u.value=this.join(r.slice(l,l+u.count));l+=u.count,u.added||(c+=u.count)}}return n}};m();var Gg=class extends _n{},kk=new Gg;function jg(t,e,r){return kk.diff(t,e,r)}m();m();function Vg(t,e){let r;for(r=0;re.length&&(r=t.length-e.length);let i=e.length;t.length0&&e[a]!=e[s];)s=n[s];e[a]==e[s]&&s++}s=0;for(let a=r;a0&&t[a]!=e[s];)s=n[s];t[a]==e[s]&&s++}return s}function qg(t,e){let r=[];for(let i of Array.from(e.segment(t))){let n=i.segment;r.length&&/\s/.test(r[r.length-1])&&/\s/.test(n)?r[r.length-1]+=n:r.push(n)}return r}function Sd(t,e){if(e)return sl(t,e)[1];let r;for(r=t.length-1;r>=0&&t[r].match(/\s/);r--);return t.substring(r+1)}function ya(t,e){if(e)return sl(t,e)[0];let r=t.match(/^\s*/);return r?r[0]:""}function sl(t,e){if(!e)return[ya(t),Sd(t)];if(e.resolvedOptions().granularity!="word")throw new Error('The segmenter passed must have a granularity of "word"');let r=qg(t,e),i=r[0],n=r[r.length-1],s=/\s/.test(i)?i:"",a=/\s/.test(n)?n:"";return[s,a]}var kd="a-zA-Z0-9_\\u{AD}\\u{C0}-\\u{D6}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}",pB=new RegExp(`[${kd}]+|\\s+|[^${kd}]`,"ug"),Yg=class extends _n{equals(e,r,i){return i.ignoreCase&&(e=e.toLowerCase(),r=r.toLowerCase()),e.trim()===r.trim()}tokenize(e,r={}){let i;if(r.intlSegmenter){let a=r.intlSegmenter;if(a.resolvedOptions().granularity!="word")throw new Error('The segmenter passed must have a granularity of "word"');i=qg(e,a)}else i=e.match(pB)||[];let n=[],s=null;return i.forEach(a=>{/\s/.test(a)?s==null?n.push(a):n.push(n.pop()+a):s!=null&&/\s/.test(s)?n[n.length-1]==s?n.push(n.pop()+a):n.push(s+a):n.push(a),s=a}),n}join(e){return e.map((r,i)=>i==0?r:r.replace(/^\s+/,"")).join("")}postProcess(e,r){if(!e||r.oneChangePerToken)return e;let i=null,n=null,s=null;return e.forEach(a=>{a.added?n=a:a.removed?s=a:((n||s)&&Ak(i,s,n,a,r.intlSegmenter),i=a,n=null,s=null)}),(n||s)&&Ak(i,s,n,null,r.intlSegmenter),e}},mB=new Yg;function Ak(t,e,r,i,n){if(e&&r){let[s,a]=sl(e.value,n),[o,l]=sl(r.value,n);if(t){let c=Vg(s,o);t.value=Ed(t.value,o,c),e.value=nl(e.value,c),r.value=nl(r.value,c)}if(i){let c=zg(a,l);i.value=xd(i.value,l,c),e.value=au(e.value,c),r.value=au(r.value,c)}}else if(r){if(t){let s=ya(r.value,n);r.value=r.value.substring(s.length)}if(i){let s=ya(i.value,n);i.value=i.value.substring(s.length)}}else if(t&&i){let s=ya(i.value,n),[a,o]=sl(e.value,n),l=Vg(s,a);e.value=nl(e.value,l);let c=zg(nl(s,l),o);e.value=au(e.value,c),i.value=xd(i.value,s,c),t.value=Ed(t.value,s,s.slice(0,s.length-c.length))}else if(i){let s=ya(i.value,n),a=Sd(e.value,n),o=Wg(a,s);e.value=au(e.value,o)}else if(t){let s=Sd(t.value,n),a=ya(e.value,n),o=Wg(s,a);e.value=nl(e.value,o)}}var Xg=class extends _n{tokenize(e){let r=new RegExp(`(\\r?\\n)|[${kd}]+|[^\\S\\n\\r]+|[^${kd}]`,"ug");return e.match(r)||[]}},Ck=new Xg;function Zg(t,e,r){return Ck.diff(t,e,r)}m();var Kg=class extends _n{constructor(){super(...arguments),this.tokenize=vB}equals(e,r,i){return i.ignoreWhitespace?((!i.newlineIsToken||!e.includes(` +`))&&(e=e.trim()),(!i.newlineIsToken||!r.includes(` +`))&&(r=r.trim())):i.ignoreNewlineAtEof&&!i.newlineIsToken&&(e.endsWith(` +`)&&(e=e.slice(0,-1)),r.endsWith(` +`)&&(r=r.slice(0,-1))),super.equals(e,r,i)}},gB=new Kg;function Qg(t,e,r){return gB.diff(t,e,r)}function vB(t,e){e.stripTrailingCr&&(t=t.replace(/\r\n/g,` +`));let r=[],i=t.split(/(\n|\r\n)/);i[i.length-1]||i.pop();for(let n=0;n{let d=c(f);u(d)}}))}else return c(Qg(r,i,o));function c(u){if(!u)return;u.push({value:"",lines:[]});function f(b){return b.map(function(S){return" "+S})}let d=[],h=0,p=0,g=[],v=1,_=1;for(let b=0;b0?f(E.lines.slice(-l)):[],h-=g.length,p-=g.length)}for(let E of k)g.push((S.added?"+":"-")+E);S.added?_+=k.length:v+=k.length}else{if(h)if(k.length<=l*2&&b1&&!e.includeFileHeaders)throw new Error("Cannot omit file headers on a multi-file patch. (The result would be unparseable; how would a tool trying to apply the patch know which changes are to which file?)");return t.map(i=>Ad(i,e)).join(` +`)}let r=[];e.includeIndex&&t.oldFileName==t.newFileName&&r.push("Index: "+t.oldFileName),e.includeUnderline&&r.push("==================================================================="),e.includeFileHeaders&&(r.push("--- "+t.oldFileName+(typeof t.oldHeader=="undefined"?"":" "+t.oldHeader)),r.push("+++ "+t.newFileName+(typeof t.newHeader=="undefined"?"":" "+t.newHeader)));for(let i=0;i{o(l?Ad(l,a.headerOptions):void 0)}}))}else{let o=Jg(t,e,r,i,n,s,a);return o?Ad(o,a==null?void 0:a.headerOptions):void 0}}function ou(t,e,r,i,n,s){return Pk(t,t,e,r,i,n,s)}function wB(t){let e=t.endsWith(` +`),r=t.split(` +`).map(i=>i+` +`);return e?r.pop():r.push(r.pop().slice(0,-1)),r}var re=Ht(Bg(),1),xa=require("obsidian");m();function Rk(t,e){let r=Object.assign({},t.lineAuthor,e.lineAuthor);return Object.assign({},t,e,{lineAuthor:r})}var al=class extends Error{constructor(r){super("No network connection available");this.originalError=r}};m();var $k=require("obsidian"),bB={options:[],placeholder:"",allowEmpty:!1,onlySelection:!1,initialValue:void 0,obscure:!1},et=class extends $k.SuggestModal{constructor(e,r){if(super(e.app),this.config={...bB,...r},this.setPlaceholder(this.config.placeholder),this.config.obscure){this.inputEl.type="password";let i=this.containerEl.querySelector(".prompt-input-container");i.addClass("git-obscure-prompt"),i.setAttr("git-is-obscured","true");let n=i==null?void 0:i.createDiv({cls:"search-input-clear-button"});n.style.marginRight="32px",n.id="git-show-password",n.addEventListener("click",()=>{i.getAttr("git-is-obscured")==="true"?(this.inputEl.type="text",i.setAttr("git-is-obscured","false")):(this.inputEl.type="password",i.setAttr("git-is-obscured","true"))})}}openAndGetResult(){return new Promise(e=>{this.resolve=e,this.open(),this.config.initialValue!=null&&(this.inputEl.value=this.config.initialValue,this.inputEl.dispatchEvent(new Event("input")))})}onClose(){new Promise(e=>window.setTimeout(e,10)).then(()=>{this.resolve&&this.resolve(void 0)})}getSuggestions(e){return this.config.onlySelection?this.config.options:this.config.allowEmpty?[e.length>0?e:" ",...this.config.options]:[e.length>0?e:"...",...this.config.options]}renderSuggestion(e,r){this.config.obscure?r.hide():r.setText(e)}onChooseSuggestion(e,r){if(this.resolve){let i;this.config.allowEmpty&&e===" "?i="":e==="..."?i=void 0:i=e,this.resolve(i)}}};m();var Zk=Ht(Xk(),1),Kk=require("child_process"),Kn=require("obsidian");function Td(t){throw new Error(`Unexpected object: ${t}`)}function cu(t,e,r){return t===1?`${t} ${e}`:`${t} ${r!=null?r:e+"s"}`}var rv=(t,e)=>t==="."||e==null||e.length===0||e==="."?!0:e.length>=t.length?e.startsWith(t):t.startsWith(e);function ji(t,e){let r;if(e){if(e.button===0||e.button===1){let i=Kn.Keymap.isModEvent(e);r=t.workspace.getLeaf(i)}}else r=t.workspace.getLeaf(!1);return r}function bn(t,e,r,i,n){if(e.button==2){let s=t.vault.getAbstractFileByPath(r);if(s!=null){let a=new Kn.Menu;t.workspace.trigger("file-menu",a,s,n,i),a.showAtPosition({x:e.pageX,y:e.pageY})}else{let a=new Kn.Menu;t.workspace.trigger("obsidian-git:menu",a,r,n,i),a.showAtPosition({x:e.pageX,y:e.pageY})}}}function Os(t){throw new Error("Impossible branch: "+t)}function iv(t){return`rgb(${t.r},${t.g},${t.b})`}function Qk(t){var s;let e=(s=Zk.fromString(t))==null?void 0:s.toRgbaArray();if(e===void 0)return;let[r,i,n]=e;return{r,g:i,b:n}}function Jk(t){return t.diff(Kn.moment.unix(0),"seconds")}function eA(t){if(t.length!==0)return t.slice().sort()[Math.floor(t.length/2)]}function uu(t,e){return new Proxy(t,{get(r,i){return i==="length"?Math.min(e,r.length):r[i]}})}function tA(t,e,r){return t.length<=e?new Array(e-t.length).fill(r).join("")+t:t.substring(t.length-e)}function rA(t,e){if(e<=0)return t;let r=new Array(e).fill(" ").join(""),i=t.substring(e,t.length);return r+i}function nv(t,e,r){return t<=e&&e<=r}function Qn(t){let[e,...r]=t.split("/");return[e,r.length===0?void 0:r.join("/")]}function yn(t){return t.endsWith("/")?t:t.split("/").last().replace(/\.md$/,"")}function iA(t){return t===1?"1 minute":`${t} minutes`}function DB(t){let e=t.lastIndexOf(".");return t.substring(e+1)}function ll(t){if(t.endsWith(".md"))return!1;let e=DB(t);return Sk.includes(e)}function sv(t){return(t.startsWith("https://github.com/")||t.startsWith("https://gitlab.com/"))&&(t.endsWith(".git")||(t=t+".git")),t}function cl(t,e){let r=e.vault.getAbstractFileByPath(t);if(!(r instanceof Kn.TFile))return!1;try{return!!e.viewRegistry.getTypeByExtension(r.extension)}catch(i){return!0}}function nA({isFolder:t,gitRelativePath:e}){let r="/";return r+=e,t&&(r+="/"),r.replace(/([\\!#*?[\]])/g,String.raw`\$1`).replace(/\s(?=\s*$)/g,String.raw`\ `)}function ul(t,e,r,i){let n=e.target;t.workspace.trigger("hover-link",{event:e,source:r.getViewType(),hoverParent:r,targetEl:n,linktext:i})}function fu(t,e,r={}){return new Promise((i,n)=>{let s=(0,Kk.spawn)(t,e,r),a="",o="";s.stdout.on("data",l=>{a+=l.toString()}),s.stderr.on("data",l=>{o+=l.toString()}),s.on("error",l=>{i({error:new Error(l.message),stdout:a,stderr:a,code:1})}),s.on("close",l=>{i({stdout:a,stderr:o,code:l!=null?l:1,error:void 0})})})}m();var sA=require("os"),Pd=require("obsidian"),fl=class{constructor(e){this.plugin=e,this.app=e.app}getRelativeVaultPath(e){return this.plugin.settings.basePath?this.plugin.settings.basePath+"/"+e:e}getRelativeRepoPath(e,r=!0){return r&&this.plugin.settings.basePath.length>0?e.substring(this.plugin.settings.basePath.length+1):e}unload(){}_getTreeStructure(e,r=0){let i=[];for(e=[...e];e.length>0;){let n=e.first(),s=n.path.substring(r);if(s.contains("/")){let a=s.substring(0,s.indexOf("/")),o=e.filter(c=>c.path.substring(r).startsWith(a+"/"));o.forEach(c=>e.remove(c));let l=n.path.substring(0,s.indexOf("/")+r);i.push({title:a,path:l,vaultPath:this.getRelativeVaultPath(l),children:this._getTreeStructure(o,(r>0?r+a.length:a.length)+1)})}else i.push({title:s,data:n,path:n.path,vaultPath:this.getRelativeVaultPath(n.path)}),e.remove(n)}return i}simplify(e){var r,i,n,s;for(let a of e){for(;;){let o=((r=a.children)==null?void 0:r.length)==1,l=((n=(i=a.children)==null?void 0:i.first())==null?void 0:n.data)==null;if(!(a.children!=null&&o&&l))break;let c=a.children.first();a.title+="/"+c.title,a.data=c.data,a.path=c.path,a.vaultPath=c.vaultPath,a.children=c.children}a.children!=null&&this.simplify(a.children),(s=a.children)==null||s.sort((o,l)=>{let c=(l.data==null?1:0)-(o.data==null?1:0);return c!=0?c:o.title.localeCompare(l.title)})}return e.sort((a,o)=>{let l=(o.data==null?1:0)-(a.data==null?1:0);return l!=0?l:a.title.localeCompare(o.title)})}getTreeStructure(e){let r=this._getTreeStructure(e);return this.simplify(r)}async formatCommitMessage(e){let r;if(e.includes("{{numFiles}}")){r=await this.status();let i=r.staged.length;e=e.replace("{{numFiles}}",String(i))}if(e.includes("{{hostname}}")){let i=this.plugin.localStorage.getHostname()||"";!i&&Pd.Platform.isDesktopApp&&(i=(0,sA.hostname)()),e=e.replace("{{hostname}}",i)}if(e.includes("{{files}}")){r=r!=null?r:await this.status();let i={},n="";if(r.staged.length<100){r.staged.forEach(a=>{a.index in i?i[a.index].push(a.path):i[a.index]=[a.path]});let s=[];for(let[a,o]of Object.entries(i))s.push(a+" "+o.join(" "));n=s.join(", ")}else n="Too many files to list";e=e.replace("{{files}}",n)}if(e=e.replace("{{date}}",(0,Pd.moment)().format(this.plugin.settings.commitDateFormat)),this.plugin.settings.listChangedFilesInMessageBody){let i=r!=null?r:await this.status(),n="";i.staged.length<100?n=i.staged.map(s=>s.path).join(` +`):n="Too many files to list",e=e+` + +Affected files: +`+n}return e}};m();var Ls=require("obsidian"),Rd=class{constructor(e,r){this.plugin=r;this.promises={};this.adapter=e.adapter,this.vault=e,this.lastBasePath=this.plugin.settings.basePath,this.promises.readFile=this.readFile.bind(this),this.promises.writeFile=this.writeFile.bind(this),this.promises.readdir=this.readdir.bind(this),this.promises.mkdir=this.mkdir.bind(this),this.promises.rmdir=this.rmdir.bind(this),this.promises.stat=this.stat.bind(this),this.promises.unlink=this.unlink.bind(this),this.promises.lstat=this.lstat.bind(this),this.promises.readlink=this.readlink.bind(this),this.promises.symlink=this.symlink.bind(this)}async readFile(e,r){var i;if(this.maybeLog("Read: "+e+JSON.stringify(r)),r=="utf8"||r.encoding=="utf8"){let n=this.vault.getAbstractFileByPath(e);return n instanceof Ls.TFile?(this.maybeLog("Reuse"),this.vault.read(n)):this.adapter.read(e)}else{if(e.endsWith(this.gitDir+"/index"))return this.plugin.settings.basePath!=this.lastBasePath?(this.clearIndex(),this.lastBasePath=this.plugin.settings.basePath,this.adapter.readBinary(e)):(i=this.index)!=null?i:this.adapter.readBinary(e);let n=this.vault.getAbstractFileByPath(e);return n instanceof Ls.TFile?(this.maybeLog("Reuse"),this.vault.readBinary(n)):this.adapter.readBinary(e)}}async writeFile(e,r){if(this.maybeLog("Write: "+e),typeof r=="string"){let i=this.vault.getAbstractFileByPath(e);return i instanceof Ls.TFile?this.vault.modify(i,r):this.adapter.write(e,r)}else if(e.endsWith(this.gitDir+"/index"))this.index=r,this.indexmtime=Date.now();else{let i=this.vault.getAbstractFileByPath(e);return i instanceof Ls.TFile?this.vault.modifyBinary(i,r):this.adapter.writeBinary(e,r)}}async readdir(e){e==="."&&(e="/");let r=await this.adapter.list(e),i=[...r.files,...r.folders],n;return e!=="/"?n=i.map(s=>(0,Ls.normalizePath)(s.substring(e.length))):n=i,n}async mkdir(e){return this.adapter.mkdir(e)}async rmdir(e,r){var i,n;return this.adapter.rmdir(e,(n=(i=r==null?void 0:r.options)==null?void 0:i.recursive)!=null?n:!1)}async stat(e){if(e.endsWith(this.gitDir+"/index")){if(this.index!==void 0&&this.indexctime!=null&&this.indexmtime!=null)return{isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1,size:this.index.byteLength,type:"file",ctimeMs:this.indexctime,mtimeMs:this.indexmtime};{let i=await this.adapter.stat(e);if(i==null)throw{code:"ENOENT"};return this.indexctime=i.ctime,this.indexmtime=i.mtime,{ctimeMs:i.ctime,mtimeMs:i.mtime,size:i.size,type:"file",isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1}}}e==="."&&(e="/");let r=this.vault.getAbstractFileByPath(e);if(this.maybeLog("Stat: "+e),r instanceof Ls.TFile)return this.maybeLog("Reuse stat"),{ctimeMs:r.stat.ctime,mtimeMs:r.stat.mtime,size:r.stat.size,type:"file",isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1};{let i=await this.adapter.stat(e);if(i)return{ctimeMs:i.ctime,mtimeMs:i.mtime,size:i.size,type:i.type==="folder"?"directory":i.type,isFile:()=>i.type==="file",isDirectory:()=>i.type==="folder",isSymbolicLink:()=>!1};throw{code:"ENOENT"}}}async unlink(e){return this.adapter.remove(e)}async lstat(e){return this.stat(e)}async readlink(e){throw new Error(`readlink of (${e}) is not implemented.`)}async symlink(e){throw new Error(`symlink of (${e}) is not implemented.`)}async saveAndClear(){this.index!==void 0&&await this.adapter.writeBinary(this.plugin.gitManager.getRelativeVaultPath(this.gitDir+"/index"),this.index,{ctime:this.indexctime,mtime:this.indexmtime}),this.clearIndex()}clearIndex(){this.index=void 0,this.indexctime=void 0,this.indexmtime=void 0}get gitDir(){return this.plugin.settings.gitDir||".git"}maybeLog(e){}};var fA=Ht(uA(),1),Vi=class extends fl{constructor(r){super(r);this.FILE=0;this.HEAD=1;this.WORKDIR=2;this.STAGE=3;this.status_mapping={"000":" ","003":"AD","020":"??","022":"A ","023":"AM",100:"D ",101:" D",103:"MD",110:"DA",111:" ",113:"MM",120:"DA",121:" M",122:"M ",123:"MM"};this.noticeLength=999999;this.fs=new Rd(this.app.vault,this.plugin)}getRepo(){return{fs:this.fs,dir:this.plugin.settings.basePath,gitdir:this.plugin.settings.gitDir||void 0,onAuth:()=>{var r,i;return{username:(r=this.plugin.localStorage.getUsername())!=null?r:void 0,password:(i=this.plugin.localStorage.getPassword())!=null?i:void 0}},onAuthFailure:async()=>{new xa.Notice("Authentication failed. Please try with different credentials");let r=await new et(this.plugin,{placeholder:"Specify your username"}).openAndGetResult();if(r){let i=await new et(this.plugin,{placeholder:"Specify your password/personal access token",obscure:!0}).openAndGetResult();if(i)return this.plugin.localStorage.setUsername(r),this.plugin.localStorage.setPassword(i),{username:r,password:i}}return{cancel:!0}},http:{async request({url:r,method:i,headers:n,body:s}){let a;s&&(a=await BB(s));let o=await(0,xa.requestUrl)({url:r,method:i,headers:n,body:a,throw:!1});return{url:r,method:i,headers:o.headers,body:NB(o.arrayBuffer),statusCode:o.status,statusMessage:o.status.toString()}}}}}async wrapFS(r){try{let i=await r;return await this.fs.saveAndClear(),i}catch(i){throw await this.fs.saveAndClear(),i}}async status(r){let i,n=window.setTimeout(()=>{i=new xa.Notice("This takes longer: Getting status",this.noticeLength)},2e4);try{this.plugin.setPluginState({gitAction:1});let s={...this.getRepo()};(r==null?void 0:r.path)!=null&&(s.filepaths=[`${r.path}/`]);let a=(await this.wrapFS(re.default.statusMatrix(s))).map(f=>this.getFileStatusResult(f)),o=[],l=[],c=[];for(let f of a)f.workingDir!==" "&&o.push(f),f.index!==" "&&f.index!=="U"&&l.push(f),(f.index!=" "||f.workingDir!=" ")&&c.push(f);let u=[];return window.clearTimeout(n),i==null||i.hide(),{all:c,changed:o,staged:l,conflicted:u}}catch(s){throw window.clearTimeout(n),i==null||i.hide(),this.plugin.displayError(s),s}}async commitAll({message:r,status:i,unstagedFiles:n}){try{return await this.checkAuthorInfo(),await this.stageAll({status:i,unstagedFiles:n}),this.commit({message:r})}catch(s){throw this.plugin.displayError(s),s}}async commit({message:r}){try{await this.checkAuthorInfo(),this.plugin.setPluginState({gitAction:4});let i=await this.formatCommitMessage(r),n=this.plugin.localStorage.getConflict(),s;if(n){let a=await this.branchInfo();s=[a.current,a.tracking]}await this.wrapFS(re.default.commit({...this.getRepo(),message:i,parent:s})),this.plugin.localStorage.setConflict(!1);return}catch(i){throw this.plugin.displayError(i),i}}async stage(r,i){let n=this.getRelativeRepoPath(r,i),s;i?s=r:s=this.getRelativeVaultPath(r);try{this.plugin.setPluginState({gitAction:3}),await this.app.vault.adapter.exists(s)?await this.wrapFS(re.default.add({...this.getRepo(),filepath:n})):await this.wrapFS(re.default.remove({...this.getRepo(),filepath:n}))}catch(a){throw this.plugin.displayError(a),a}}async stageAll({dir:r,status:i,unstagedFiles:n}){try{if(i)await Promise.all(i.changed.map(s=>s.workingDir!=="D"?this.wrapFS(re.default.add({...this.getRepo(),filepath:s.path})):re.default.remove({...this.getRepo(),filepath:s.path})));else{let s=n!=null?n:await this.getUnstagedFiles(r!=null?r:".");await Promise.all(s.map(({path:a,type:o})=>o=="D"?re.default.remove({...this.getRepo(),filepath:a}):this.wrapFS(re.default.add({...this.getRepo(),filepath:a}))))}}catch(s){throw this.plugin.displayError(s),s}}async unstage(r,i){try{this.plugin.setPluginState({gitAction:3}),r=this.getRelativeRepoPath(r,i),await this.wrapFS(re.default.resetIndex({...this.getRepo(),filepath:r}))}catch(n){throw this.plugin.displayError(n),n}}async unstageAll({dir:r,status:i}){try{let n;i?n=i.staged.map(s=>s.path):n=(await this.getStagedFiles(r!=null?r:".")).map(({path:a})=>a),await this.wrapFS(Promise.all(n.map(s=>re.default.resetIndex({...this.getRepo(),filepath:s}))))}catch(n){throw this.plugin.displayError(n),n}}async discard(r){try{this.plugin.setPluginState({gitAction:3}),await this.wrapFS(re.default.checkout({...this.getRepo(),filepaths:[r],force:!0}))}catch(i){throw this.plugin.displayError(i),i}}async discardAll({dir:r,status:i}){let n=[];i?r!=null?n=i.changed.filter(s=>s.workingDir!="U"&&s.path.startsWith(r)).map(s=>s.path):n=i.changed.filter(s=>s.workingDir!="U").map(s=>s.path):n=(await this.getUnstagedFiles(r)).filter(s=>s.type!="A").map(({path:s})=>s);try{await this.wrapFS(re.default.checkout({...this.getRepo(),filepaths:n,force:!0}))}catch(s){throw this.plugin.displayError(s),s}}async getUntrackedPaths(r){let i=[];if(r.status)for(let n of r.status.changed)n.index=="U"&&n.workingDir==="U"&&n.path.startsWith(r.path!=null?`${r.path}/`:"")&&i.push(n.path);else{let n=await this.status({path:r==null?void 0:r.path});for(let s of n.changed)s.index==="U"&&s.workingDir==="U"&&i.push(s.path)}return i}getProgressText(r,i){let n=`${r} progress:`;return i.phase&&(n=`${n} ${i.phase}:`),i.loaded&&(n=`${n} ${i.loaded}`,i.total&&(n=`${n} of ${i.total}`)),n}resolveRef(r){return this.wrapFS(re.default.resolveRef({...this.getRepo(),ref:r}))}async pull(){let r=this.showNotice("Initializing pull");try{this.plugin.setPluginState({gitAction:2});let i=await this.resolveRef("HEAD");await this.fetch();let n=await this.branchInfo();await this.checkAuthorInfo(),(await this.wrapFS(re.default.merge({...this.getRepo(),ours:n.current,theirs:n.tracking,abortOnConflict:!1,mergeDriver:this.plugin.settings.mergeStrategy!=="none"?({contents:l})=>{var b,S,k;let c=l[0],u=l[1],f=l[2],d=/^.*(\r?\n|$)/gm,h=(b=u.match(d))!=null?b:[],p=(S=c.match(d))!=null?S:[],g=(k=f.match(d))!=null?k:[],v=(0,fA.default)(h,p,g),_="";for(let E of v)E.ok&&(_+=E.ok.join("")),E.conflict&&(_+=this.plugin.settings.mergeStrategy==="ours"?E.conflict.a.join(""):E.conflict.b.join(""));return{cleanMerge:!0,mergedText:_}}:void 0}))).alreadyMerged||await this.wrapFS(re.default.checkout({...this.getRepo(),ref:n.current,onProgress:l=>{r!==void 0&&r.setMessage(this.getProgressText("Checkout",l))},remote:n.remote})),r==null||r.hide();let a=await this.resolveRef("HEAD"),o=await this.getFileChangesCount(i,a);return this.showNotice("Finished pull",!1),o.map(l=>({path:l.path,workingDir:"P",index:"P",vaultPath:this.getRelativeVaultPath(l.path)}))}catch(i){throw r==null||r.hide(),i instanceof re.Errors.MergeConflictError&&await this.plugin.handleConflict(i.data.filepaths.map(n=>this.getRelativeVaultPath(n))),this.plugin.displayError(i),i}}async push(){if(!await this.canPush())return 0;let r=this.showNotice("Initializing push");try{this.plugin.setPluginState({gitAction:1});let i=await this.branchInfo(),n=i.tracking,s=i.current,a=(await this.getFileChangesCount(s,n)).length;this.plugin.setPluginState({gitAction:5});let o=await this.getCurrentRemote();return await this.wrapFS(re.default.push({...this.getRepo(),remote:o,onProgress:l=>{r!==void 0&&r.setMessage(this.getProgressText("Pushing",l))}})),r==null||r.hide(),a}catch(i){throw r==null||r.hide(),this.plugin.displayError(i),i}}async getUnpushedCommits(){let r=await this.branchInfo(),i=r.tracking,n=r.current;if(i==null||n==null)return 0;let s=await this.resolveRef(n),a=await this.resolveRef(i);return(await this.getFileChangesCount(s,a)).length}async canPush(){let r=await this.branchInfo(),i=r.tracking,n=r.current,s=await this.resolveRef(n),a=await this.resolveRef(i);return s!=a}async checkRequirements(){return await this.plugin.app.vault.adapter.exists(`${this.getRepo().dir}/.git/HEAD`)?"valid":"missing-repo"}async branchInfo(){var r,i;try{let n=await re.default.currentBranch(this.getRepo())||"",s=await re.default.listBranches(this.getRepo()),a=(r=await this.getConfig(`branch.${n}.remote`))!=null?r:"origin",o=(i=await this.getConfig(`branch.${n}.merge`))==null?void 0:i.split("refs/heads")[1],l=o?a+o:void 0;return{current:n,tracking:l,branches:s,remote:a}}catch(n){throw this.plugin.displayError(n),n}}async getCurrentRemote(){var n;let r=await re.default.currentBranch(this.getRepo())||"";return(n=await this.getConfig(`branch.${r}.remote`))!=null?n:"origin"}async checkout(r,i){try{return this.wrapFS(re.default.checkout({...this.getRepo(),ref:r,force:!!i,remote:i}))}catch(n){throw this.plugin.displayError(n),n}}async createBranch(r){try{await this.wrapFS(re.default.branch({...this.getRepo(),ref:r,checkout:!0}))}catch(i){throw this.plugin.displayError(i),i}}async deleteBranch(r){try{await this.wrapFS(re.default.deleteBranch({...this.getRepo(),ref:r}))}catch(i){throw this.plugin.displayError(i),i}}branchIsMerged(r){return Promise.resolve(!0)}async init(){try{await this.wrapFS(re.default.init(this.getRepo()))}catch(r){throw this.plugin.displayError(r),r}}async clone(r,i,n){let s=this.showNotice("Initializing clone");try{await this.wrapFS(re.default.clone({...this.getRepo(),dir:i,url:r,depth:n,onProgress:a=>{s!==void 0&&s.setMessage(this.getProgressText("Cloning",a))}})),s==null||s.hide()}catch(a){throw s==null||s.hide(),this.plugin.displayError(a),a}}async setConfig(r,i){try{return this.wrapFS(re.default.setConfig({...this.getRepo(),path:r,value:i}))}catch(n){throw this.plugin.displayError(n),n}}async getConfig(r){try{return this.wrapFS(re.default.getConfig({...this.getRepo(),path:r}))}catch(i){throw this.plugin.displayError(i),i}}async fetch(r){let i=this.showNotice("Initializing fetch");try{let n={...this.getRepo(),onProgress:s=>{i!==void 0&&i.setMessage(this.getProgressText("Fetching",s))},remote:r!=null?r:await this.getCurrentRemote()};await this.wrapFS(re.default.fetch(n)),i==null||i.hide()}catch(n){throw this.plugin.displayError(n),i==null||i.hide(),n}}async setRemote(r,i){try{await this.wrapFS(re.default.addRemote({...this.getRepo(),remote:r,url:i,force:!0}))}catch(n){throw this.plugin.displayError(n),n}}async getRemoteBranches(r){let i=[];return i.push(...await this.wrapFS(re.default.listBranches({...this.getRepo(),remote:r}))),i.remove("HEAD"),i=i.map(n=>`${r}/${n}`),i}async getRemotes(){return(await this.wrapFS(re.default.listRemotes({...this.getRepo()}))).map(r=>r.remote)}async removeRemote(r){await this.wrapFS(re.default.deleteRemote({...this.getRepo(),remote:r}))}async getRemoteUrl(r){var i;return(i=(await this.wrapFS(re.default.listRemotes({...this.getRepo()}))).filter(n=>n.remote==r)[0])==null?void 0:i.url}async log(r,i=!0,n,s){let a=await this.wrapFS(re.default.log({...this.getRepo(),depth:n,ref:s}));return Promise.all(a.map(async o=>{let l=o.commit.message.split(` + +`);return{message:l[0],author:{name:o.commit.author.name,email:o.commit.author.email},body:l.slice(1).join(` + +`),date:new Date(o.commit.committer.timestamp).toDateString(),diff:{changed:0,files:(await this.getFileChangesCount(o.commit.parent.first(),o.oid)).map(c=>({path:c.path,status:c.type,vaultPath:this.getRelativeVaultPath(c.path),hash:o.oid}))},hash:o.oid,refs:[]}}))}updateBasePath(r){return this.getRepo().dir=r,Promise.resolve()}async updateUpstreamBranch(r){let[i,n]=Qn(r),s=await this.branchInfo();await this.wrapFS(re.default.push({...this.getRepo(),remote:i,remoteRef:n})),await this.setConfig(`branch.${s.current}.merge`,`refs/heads/${n}`)}updateGitPath(r){return Promise.resolve()}async getFileChangesCount(r,i){return this.walkDifference({walkers:[re.default.TREE({ref:r}),re.default.TREE({ref:i})]})}async walkDifference({walkers:r,dir:i}){return await this.wrapFS(re.default.walk({...this.getRepo(),trees:r,map:async function(s,[a,o]){if(!rv(s,i))return null;if(await(a==null?void 0:a.type())==="tree"||await(o==null?void 0:o.type())==="tree")return;let l=await(a==null?void 0:a.oid()),c=await(o==null?void 0:o.oid()),u="equal";if(l!==c&&(u="M"),l===void 0&&(u="A"),c===void 0&&(u="D"),l===void 0&&c===void 0&&(console.log("Something weird happened:"),console.log(a),console.log(o)),u!=="equal")return{path:s,type:u}}}))}async getStagedFiles(r="."){return(await this.walkDifference({walkers:[re.default.TREE({ref:"HEAD"}),re.default.STAGE()],dir:r})).map(n=>({vaultPath:this.getRelativeVaultPath(n.path),path:n.path}))}async getUnstagedFiles(r="."){let i,n=window.setTimeout(()=>{i=new xa.Notice("This takes longer: Getting status",this.noticeLength)},2e4);try{let s=this.getRepo(),a=await this.wrapFS(re.default.walk({...s,trees:[re.default.WORKDIR(),re.default.STAGE()],map:async function(o,[l,c]){if(!c&&l&&await re.default.isIgnored({...s,filepath:o})||!rv(o,r))return null;let[u,f]=await Promise.all([l&&l.type(),c&&c.type()]),d=[u,f].includes("blob");if((u==="tree"||u==="special")&&!d)return;if(f==="commit")return null;if((f==="tree"||f==="special")&&!d)return;let h=f==="blob"?await c.oid():void 0,p;return u==="blob"&&f!=="blob"?p="42":u==="blob"&&(p=await l.oid()),p?h?p!==h?{path:o,type:"M"}:null:{path:o,type:"A"}:{path:o,type:"D"}}}));return window.clearTimeout(n),i==null||i.hide(),a}catch(s){throw window.clearTimeout(n),i==null||i.hide(),this.plugin.displayError(s),s}}async getDiffString(r,i=!1,n){let s=this.getRelativeVaultPath(r),a=async(c,[u])=>{if(r==c){let f=await u.oid();return(await re.default.readBlob({...this.getRepo(),oid:f})).blob}};if(n){let c=await(0,re.readBlob)({...this.getRepo(),filepath:r,oid:n}).then(h=>new TextDecoder().decode(h.blob)).catch(h=>{if(!(h instanceof re.default.Errors.NotFoundError))throw h}),u=await re.default.readCommit({...this.getRepo(),oid:n}),f=await(0,re.readBlob)({...this.getRepo(),filepath:r,oid:u.commit.parent.first()}).then(h=>new TextDecoder().decode(h.blob)).catch(h=>{if(!(h instanceof re.default.Errors.NotFoundError))throw h});return ou(s,f!=null?f:"",c!=null?c:"")}let o=(await re.default.walk({...this.getRepo(),trees:[re.default.STAGE()],map:a})).first(),l=new TextDecoder().decode(o);if(i){let c=await this.resolveRef("HEAD").then(f=>(0,re.readBlob)({...this.getRepo(),filepath:r,oid:f})).then(f=>new TextDecoder().decode(f.blob)).catch(f=>{if(!(f instanceof re.default.Errors.NotFoundError))throw f});return ou(s,c!=null?c:"",l)}else{let c;return await this.app.vault.adapter.exists(s)?c=await this.app.vault.adapter.read(s):c="",ou(s,l,c)}}async getLastCommitTime(){let r=this.getRepo(),i=await this.resolveRef("HEAD"),s=(await re.default.readCommit({...r,oid:i})).commit.committer.timestamp;return new Date(s*1e3)}getFileStatusResult(r){let i=this.status_mapping[`${r[this.HEAD]}${r[this.WORKDIR]}${r[this.STAGE]}`];return{index:i[0]=="?"?"U":i[0],workingDir:i[1]=="?"?"U":i[1],path:r[this.FILE],vaultPath:this.getRelativeVaultPath(r[this.FILE])}}async checkAuthorInfo(){let r=await this.getConfig("user.name"),i=await this.getConfig("user.email");if(!r||!i)throw Error("Git author name and email are not set. Please set both fields in the settings.")}showNotice(r,i=!0){if(!this.plugin.settings.disablePopups)return new xa.Notice(r,i?this.noticeLength:void 0)}};async function*NB(t){yield new Uint8Array(t)}async function BB(t){let e=new ReadableStream({async start(i){for await(let n of t)i.enqueue(n);i.close()}});return await new Response(e).arrayBuffer()}m();var o2=Ht(Id(),1),ei=Ht(require("fs/promises"),1),Jn=require("obsidian"),ze=Ht(require("path"),1),yu=require("path");m();var jd=Ht(vA(),1);m();var ov=new WeakMap;function gl(...t){let e=new String(t);return ov.set(e,t),e}function yi(t){return t instanceof String&&ov.has(t)}function vl(t){var e;return(e=ov.get(t))!=null?e:[]}var Ud=Ht(Id(),1),qC=require("child_process");var $T=Ht(cv(),1),GT=require("node:path");m();function*wA(t,e){let r=e==="global";for(let i of t)i.isGlobal===r&&(yield i)}var nH=new Set(["--add","--edit","--remove-section","--rename-section","--replace-all","--unset","--unset-all","-e"]),sH=new Set(["--get","--get-all","--get-color","--get-colorbool","--get-regexp","--get-urlmatch","--list","-l"]),aH=new Set(["edit","remove-section","rename-section","set","unset"]),oH=new Set(["get","get-color","get-colorbool","list"]);function lH(t,e){var i;for(let{name:n}of wA(t,"task")){if(nH.has(n))return wl(!0,e);if(sH.has(n))return wl(!1,e)}let r=(i=e.at(0))==null?void 0:i.toLowerCase();return r===void 0?null:aH.has(r)?wl(!0,e.slice(1)):oH.has(r)?wl(!1,e.slice(1)):e.length===1?wl(!1,e):wl(!0,e)}function wl(t=!1,e=[]){var i;let r=(i=e.at(0))==null?void 0:i.toLowerCase();return r===void 0?null:{isWrite:t,isRead:!t,key:r,value:e.at(1)}}function cH(t,e){return e.isWrite&&e.value!==void 0?{key:e.key,value:e.value,scope:t}:{key:e.key,scope:t}}function uH(t){let e=(t==null?void 0:t.indexOf("="))||-1;return!t||e<0?null:{key:t.slice(0,e).trim().toLowerCase(),value:t.slice(e+1)}}function fH(t){for(let{name:e}of wA(t,"task"))switch(e){case"--global":return"global";case"--system":return"system";case"--worktree":return"worktree";case"--local":return"local";case"--file":case"-f":return"file"}return"local"}function dH({name:t}){if(t==="-c"||t==="--config")return"inline";if(t==="--config-env")return"env"}function*hH(t){for(let e of t){let r=dH(e),i=r&&uH(e.value);i&&(yield{...i,scope:r})}}function pH(t,e,r){let i={read:[],write:[...hH(e)]};return t==="config"&&mH(i,fH(e),lH(e,r)),i}function mH(t,e,r){if(r===null)return;let i=cH(e,r);r.isWrite?t.write.push(i):t.read.push(i)}var _A={short:new Map([["c",!0]])},gH={short:new Map([["C",!0],["P",!1],["h",!1],["p",!1],["v",!1],..._A.short.entries()]),long:new Set(["attr-source","config-env","exec-path","git-dir","list-cmds","namespace","super-prefix","work-tree"])},vH={clone:{short:new Map([["b",!0],["j",!0],["l",!1],["n",!1],["o",!0],["q",!1],["s",!1],["u",!0]]),long:new Set(["branch","config","jobs","origin","upload-pack","u","template"])},commit:{short:new Map([["C",!0],["F",!0],["c",!0],["m",!0],["t",!0]]),long:new Set(["file","message","reedit-message","reuse-message","template"])},config:{short:new Map([["e",!1],["f",!0],["l",!1]]),long:new Set(["blob","comment","default","file","type","value"])},fetch:{short:new Map,long:new Set(["upload-pack"])},init:{short:new Map,long:new Set(["template"])},pull:{short:new Map,long:new Set(["upload-pack"])},push:{short:new Map,long:new Set(["exec","receive-pack"])}},wH={short:new Map,long:new Set};function _H(t){var r;let e=(r=vH[t!=null?t:""])!=null?r:wH;return{short:new Map([..._A.short.entries(),...e.short.entries()]),long:e.long}}function bA(t,e=gH){if(t.startsWith("--")){let r=t.indexOf("=");if(r>2)return[{name:t.slice(0,r),value:t.slice(r+1),needsNext:!1}];let i=t.slice(2);return[{name:t,needsNext:e.long.has(i)}]}if(t.length===2){let r=t.charAt(1),i=e.short.get(r);return[{name:t,needsNext:i===!0}]}return bH(t,e.short)}function bH(t,e){let r=t.slice(1).split(""),i=[];for(let n=0;ne.has(l)))return i.push({name:`-${s}`,value:o,needsNext:!1}),i}i.push({name:`-${s}`,needsNext:a})}return i}function yH(t,e=[]){let r=0;for(;rfunction(){return t&&(e=(0,t[$v(t)[0]])(t=0)),e},OH=(t,e)=>function(){return e||(0,t[$v(t)[0]])((e={exports:{}}).exports,e),e.exports},xt=(t,e)=>{for(var r in e)Rv(t,r,{get:e[r],enumerable:!0})},LH=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of $v(e))!DH.call(t,n)&&n!==r&&Rv(t,n,{get:()=>e[n],enumerable:!(i=MH(e,n))||i.enumerable});return t},wt=t=>LH(Rv({},"__esModule",{value:!0}),t),Nr,Bs=q({"src/lib/errors/git-error.ts"(){"use strict";Nr=class extends Error{constructor(t,e){super(e),this.task=t,Object.setPrototypeOf(this,new.target.prototype)}}}}),gu,xl=q({"src/lib/errors/git-response-error.ts"(){"use strict";Bs(),gu=class extends Nr{constructor(t,e){super(void 0,e||String(t)),this.git=t}}}}),rC,iC=q({"src/lib/errors/task-configuration-error.ts"(){"use strict";Bs(),rC=class extends Nr{constructor(t){super(void 0,t)}}}});function nC(t){return typeof t!="function"?Ta:t}function sC(t){return typeof t=="function"&&t!==Ta}function aC(t,e){let r=t.indexOf(e);return r<=0?[t,""]:[t.substr(0,r),t.substr(r+1)]}function oC(t,e=0){return lC(t)&&t.length>e?t[e]:void 0}function Ca(t,e=0){if(lC(t)&&t.length>e)return t[t.length-1-e]}function lC(t){return qd(t)}function vu(t="",e=!0,r=` +`){return t.split(r).reduce((i,n)=>{let s=e?n.trim():n;return s&&i.push(s),i},[])}function Fv(t,e){return vu(t,!0).map(r=>e(r))}function Iv(t){return(0,jd.exists)(t,jd.FOLDER)}function Si(t,e){return Array.isArray(t)?t.includes(e)||t.push(e):t.add(e),e}function cC(t,e){return Array.isArray(t)&&!t.includes(e)&&t.push(e),t}function Vd(t,e){if(Array.isArray(t)){let r=t.indexOf(e);r>=0&&t.splice(r,1)}else t.delete(e);return e}function xn(t){return Array.isArray(t)?t:[t]}function uC(t){return t.replace(/[\s-]+(.)/g,(e,r)=>r.toUpperCase())}function El(t){return xn(t).map(e=>e instanceof String?e:String(e))}function Xe(t,e=0){if(t==null)return e;let r=parseInt(t,10);return Number.isNaN(r)?e:r}function pu(t,e){let r=[];for(let i=0,n=t.length;i{t[i]!==void 0&&(r[i]=t[i])}),r}function gv(t=0){return new Promise(e=>setTimeout(e,t))}function vv(t){if(t!==!1)return t}var bl,Ta,wu,zd=q({"src/lib/utils/util.ts"(){"use strict";Mv(),bl="\0",Ta=()=>{},wu=Object.prototype.toString.call.bind(Object.prototype.toString)}});function ar(t,e,r){return e(t)?t:arguments.length>2?r:void 0}function wv(t,e){let r=yi(t)?"string":typeof t;return/number|string|boolean/.test(r)&&(!e||!e.includes(r))}function Wd(t){return!!t&&wu(t)==="[object Object]"}function dC(t){return typeof t=="function"}var _u,hC,pt,Bd,qd,Mv=q({"src/lib/utils/argument-filters.ts"(){"use strict";zd(),_u=t=>Array.isArray(t),hC=t=>typeof t=="number",pt=t=>typeof t=="string"||yi(t),Bd=t=>pt(t)||Array.isArray(t)&&t.every(pt),qd=t=>t==null||"number|boolean|function".includes(typeof t)?!1:typeof t.length=="number"}}),_v,NH=q({"src/lib/utils/exit-codes.ts"(){"use strict";_v=(t=>(t[t.SUCCESS=0]="SUCCESS",t[t.ERROR=1]="ERROR",t[t.NOT_FOUND=-2]="NOT_FOUND",t[t.UNCLEAN=128]="UNCLEAN",t))(_v||{})}}),Hd,BH=q({"src/lib/utils/git-output-streams.ts"(){"use strict";Hd=class pC{constructor(e,r){this.stdOut=e,this.stdErr=r}asStrings(){return new pC(this.stdOut.toString("utf8"),this.stdErr.toString("utf8"))}}}});function HH(){throw new Error("LineParser:useMatches not implemented")}var ve,Ns,UH=q({"src/lib/utils/line-parser.ts"(){"use strict";ve=class{constructor(t,e){this.matches=[],this.useMatches=HH,this.parse=(r,i)=>(this.resetMatches(),this._regExp.every((n,s)=>this.addMatch(n,s,r(s)))?this.useMatches(i,this.prepareMatches())!==!1:!1),this._regExp=Array.isArray(t)?t:[t],e&&(this.useMatches=e)}resetMatches(){this.matches.length=0}prepareMatches(){return this.matches}addMatch(t,e,r){let i=r&&t.exec(r);return i&&this.pushMatch(e,i),!!i}pushMatch(t,e){this.matches.push(...e.slice(1))}},Ns=class extends ve{addMatch(t,e,r){return/^remote:\s/.test(String(r))&&super.addMatch(t,e,r)}pushMatch(t,e){(t>0||e.length>1)&&super.pushMatch(t,e)}}}});function mC(...t){let e=process.cwd(),r=Object.assign({baseDir:e,...gC},...t.filter(i=>typeof i=="object"&&i));return r.baseDir=r.baseDir||e,r.trimmed=r.trimmed===!0,r}var gC,GH=q({"src/lib/utils/simple-git-options.ts"(){"use strict";gC={binary:"git",maxConcurrentProcesses:5,config:[],trimmed:!1}}});function Dv(t,e=[]){return Wd(t)?Object.keys(t).reduce((r,i)=>{let n=t[i];if(yi(n))r.push(n);else if(wv(n,["boolean"]))r.push(i+"="+n);else if(Array.isArray(n))for(let s of n)wv(s,["string","number"])||r.push(i+"="+s);else r.push(i);return r},e):e}function Er(t,e=0,r=!1){let i=[];for(let n=0,s=e<0?t.length:e;n{for(let s=vu(n,i),a=0,o=s.length;a{if(!(a+c>=o))return s[a+c]};e.some(({parse:c})=>c(l,t))}}),t}var zH=q({"src/lib/utils/task-parser.ts"(){"use strict";zd()}}),vC={};xt(vC,{ExitCodes:()=>_v,GitOutputStreams:()=>Hd,LineParser:()=>ve,NOOP:()=>Ta,NULL:()=>bl,RemoteLineParser:()=>Ns,append:()=>Si,appendTaskOptions:()=>Dv,asArray:()=>xn,asCamelCase:()=>uC,asFunction:()=>nC,asNumber:()=>Xe,asStringArray:()=>El,bufferToString:()=>mu,callTaskParser:()=>bv,createInstanceConfig:()=>mC,delay:()=>gv,filterArray:()=>_u,filterFunction:()=>dC,filterHasLength:()=>qd,filterNumber:()=>hC,filterPlainObject:()=>Wd,filterPrimitives:()=>wv,filterString:()=>pt,filterStringOrStringArray:()=>Bd,filterType:()=>ar,first:()=>oC,folderExists:()=>Iv,forEachLineWithContent:()=>Fv,getTrailingOptions:()=>Er,including:()=>cC,isUserFunction:()=>sC,last:()=>Ca,objectToString:()=>wu,orVoid:()=>vv,parseStringResponse:()=>Br,pick:()=>fC,prefixedArray:()=>pu,remove:()=>Vd,splitOn:()=>aC,toLinesWithContent:()=>vu,trailingFunctionArgument:()=>it,trailingOptionsArgument:()=>Ov});var fe=q({"src/lib/utils/index.ts"(){"use strict";Mv(),NH(),BH(),UH(),GH(),VH(),zH(),zd()}}),wC={};xt(wC,{CheckRepoActions:()=>yv,checkIsBareRepoTask:()=>bC,checkIsRepoRootTask:()=>_C,checkIsRepoTask:()=>WH});function WH(t){switch(t){case"bare":return bC();case"root":return _C()}return{commands:["rev-parse","--is-inside-work-tree"],format:"utf-8",onError:Yd,parser:Lv}}function _C(){return{commands:["rev-parse","--git-dir"],format:"utf-8",onError:Yd,parser(e){return/^\.(git)?$/.test(e.trim())}}}function bC(){return{commands:["rev-parse","--is-bare-repository"],format:"utf-8",onError:Yd,parser:Lv}}function qH(t){return/(Not a git repository|Kein Git-Repository)/i.test(String(t))}var yv,Yd,Lv,yC=q({"src/lib/tasks/check-is-repo.ts"(){"use strict";fe(),yv=(t=>(t.BARE="bare",t.IN_TREE="tree",t.IS_REPO_ROOT="root",t))(yv||{}),Yd=({exitCode:t},e,r,i)=>{if(t===128&&qH(e))return r(Buffer.from("false"));i(e)},Lv=t=>t.trim()==="true"}});function YH(t,e){let r=new xC(t),i=t?SC:EC;return vu(e).forEach(n=>{let s=n.replace(i,"");r.paths.push(s),(kC.test(s)?r.folders:r.files).push(s)}),r}var xC,EC,SC,kC,XH=q({"src/lib/responses/CleanSummary.ts"(){"use strict";fe(),xC=class{constructor(t){this.dryRun=t,this.paths=[],this.files=[],this.folders=[]}},EC=/^[a-z]+\s*/i,SC=/^[a-z]+\s+[a-z]+\s*/i,kC=/\/$/}}),xv={};xt(xv,{EMPTY_COMMANDS:()=>Xd,adhocExecTask:()=>AC,configurationErrorTask:()=>Lr,isBufferTask:()=>TC,isEmptyTask:()=>PC,straightThroughBufferTask:()=>CC,straightThroughStringTask:()=>Sr});function AC(t){return{commands:Xd,format:"empty",parser:t}}function Lr(t){return{commands:Xd,format:"empty",parser(){throw typeof t=="string"?new rC(t):t}}}function Sr(t,e=!1){return{commands:t,format:"utf-8",parser(r){return e?String(r).trim():r}}}function CC(t){return{commands:t,format:"buffer",parser(e){return e}}}function TC(t){return t.format==="buffer"}function PC(t){return t.format==="empty"||!t.commands.length}var Xd,_t=q({"src/lib/tasks/task.ts"(){"use strict";iC(),Xd=[]}}),RC={};xt(RC,{CONFIG_ERROR_INTERACTIVE_MODE:()=>Nv,CONFIG_ERROR_MODE_REQUIRED:()=>Bv,CONFIG_ERROR_UNKNOWN_OPTION:()=>Hv,CleanOptions:()=>Aa,cleanTask:()=>$C,cleanWithOptionsTask:()=>ZH,isCleanOptionsArray:()=>KH});function ZH(t,e){let{cleanMode:r,options:i,valid:n}=QH(t);return r?n.options?(i.push(...e),i.some(t3)?Lr(Nv):$C(r,i)):Lr(Hv+JSON.stringify(t)):Lr(Bv)}function $C(t,e){return{commands:["clean",`-${t}`,...e],format:"utf-8",parser(i){return YH(t==="n",i)}}}function KH(t){return Array.isArray(t)&&t.every(e=>Uv.has(e))}function QH(t){let e,r=[],i={cleanMode:!1,options:!0};return t.replace(/[^a-z]i/g,"").split("").forEach(n=>{JH(n)?(e=n,i.cleanMode=!0):i.options=i.options&&e3(r[r.length]=`-${n}`)}),{cleanMode:e,options:r,valid:i}}function JH(t){return t==="f"||t==="n"}function e3(t){return/^-[a-z]$/i.test(t)&&Uv.has(t.charAt(1))}function t3(t){return/^-[^\-]/.test(t)?t.indexOf("i")>0:t==="--interactive"}var Nv,Bv,Hv,Aa,Uv,FC=q({"src/lib/tasks/clean.ts"(){"use strict";XH(),fe(),_t(),Nv="Git clean interactive mode is not supported",Bv='Git clean mode parameter ("n" or "f") is required',Hv="Git clean unknown option found in: ",Aa=(t=>(t.DRY_RUN="n",t.FORCE="f",t.IGNORED_INCLUDED="x",t.IGNORED_ONLY="X",t.EXCLUDING="e",t.QUIET="q",t.RECURSIVE="d",t))(Aa||{}),Uv=new Set(["i",...El(Object.values(Aa))])}});function r3(t){let e=new MC;for(let r of IC(t))e.addValue(r.file,String(r.key),r.value);return e}function i3(t,e){let r=null,i=[],n=new Map;for(let s of IC(t,e))s.key===e&&(i.push(r=s.value),n.has(s.file)||n.set(s.file,[]),n.get(s.file).push(r));return{key:e,paths:Array.from(n.keys()),scopes:n,value:r,values:i}}function n3(t){return t.replace(/^(file):/,"")}function*IC(t,e=null){let r=t.split("\0");for(let i=0,n=r.length-1;iObject.assign(t,this.values[e]),{})),this._all}addFile(t){if(!(t in this.values)){let e=Ca(this.files);this.values[t]=e?Object.create(this.values[e]):{},this.files.push(t)}return this.values[t]}addValue(t,e,r){let i=this.addFile(t);Object.hasOwn(i,e)?Array.isArray(i[e])?i[e].push(r):i[e]=[i[e],r]:i[e]=r,this._all=void 0}}}});function uv(t,e){return typeof t=="string"&&Object.hasOwn(Ev,t)?t:e}function a3(t,e,r,i){let n=["config",`--${i}`];return r&&n.push("--add"),n.push(t,e),{commands:n,format:"utf-8",parser(s){return s}}}function o3(t,e){let r=["config","--null","--show-origin","--get-all",t];return e&&r.splice(1,0,`--${e}`),{commands:r,format:"utf-8",parser(i){return i3(i,t)}}}function l3(t){let e=["config","--list","--show-origin","--null"];return t&&e.push(`--${t}`),{commands:e,format:"utf-8",parser(r){return r3(r)}}}function c3(){return{addConfig(t,e,...r){return this._runTask(a3(t,e,r[0]===!0,uv(r[1],"local")),it(arguments))},getConfig(t,e){return this._runTask(o3(t,uv(e,void 0)),it(arguments))},listConfig(...t){return this._runTask(l3(uv(t[0],void 0)),it(arguments))}}}var Ev,DC=q({"src/lib/tasks/config.ts"(){"use strict";s3(),fe(),Ev=(t=>(t.system="system",t.global="global",t.local="local",t.worktree="worktree",t))(Ev||{})}});function u3(t){return OC.has(t)}var fv,OC,LC=q({"src/lib/tasks/diff-name-status.ts"(){"use strict";fv=(t=>(t.ADDED="A",t.COPIED="C",t.DELETED="D",t.MODIFIED="M",t.RENAMED="R",t.CHANGED="T",t.UNMERGED="U",t.UNKNOWN="X",t.BROKEN="B",t))(fv||{}),OC=new Set(Object.values(fv))}});function f3(...t){return new BC().param(...t)}function d3(t){let e=new Set,r={};return Fv(t,i=>{let[n,s,a]=i.split(bl);e.add(n),(r[n]=r[n]||[]).push({line:Xe(s),path:n,preview:a})}),{paths:e,results:r}}function h3(){return{grep(t){let e=it(arguments),r=Er(arguments);for(let n of NC)if(r.includes(n))return this._runTask(Lr(`git.grep: use of "${n}" is not supported.`),e);typeof t=="string"&&(t=f3().param(t));let i=["grep","--null","-n","--full-name",...r,...t];return this._runTask({commands:i,format:"utf-8",parser(n){return d3(n)}},e)}}}var NC,hu,kA,BC,HC=q({"src/lib/tasks/grep.ts"(){"use strict";fe(),_t(),NC=["-h"],hu=Symbol("grepQuery"),BC=class{constructor(){this[kA]=[]}*[(kA=hu,Symbol.iterator)](){for(let t of this[hu])yield t}and(...t){return t.length&&this[hu].push("--and","(",...pu(t,"-e"),")"),this}param(...t){return this[hu].push(...pu(t,"-e")),this}}}}),UC={};xt(UC,{ResetMode:()=>Od,getResetMode:()=>m3,resetTask:()=>p3});function p3(t,e){let r=["reset"];return GC(t)&&r.push(`--${t}`),r.push(...e),Sr(r)}function m3(t){if(GC(t))return t;switch(typeof t){case"string":case"undefined":return"soft"}}function GC(t){return typeof t=="string"&&jC.includes(t)}var Od,jC,VC=q({"src/lib/tasks/reset.ts"(){"use strict";fe(),_t(),Od=(t=>(t.MIXED="mixed",t.SOFT="soft",t.HARD="hard",t.MERGE="merge",t.KEEP="keep",t))(Od||{}),jC=El(Object.values(Od))}});function g3(){return(0,Ud.default)("simple-git")}function AA(t,e,r){return!e||!String(e).replace(/\s*/,"")?r?(i,...n)=>{t(i,...n),r(i,...n)}:t:(i,...n)=>{t(`%s ${i}`,e,...n),r&&r(i,...n)}}function v3(t,e,{namespace:r}){if(typeof t=="string")return t;let i=e&&e.namespace||"";return i.startsWith(r)?i.substr(r.length+1):i||r}function Gv(t,e,r,i=g3()){let n=t&&`[${t}]`||"",s=[],a=typeof e=="string"?i.extend(e):e,o=v3(ar(e,pt),a,i);return c(r);function l(u,f){return Si(s,Gv(t,o.replace(/^[^:]+/,u),f,i))}function c(u){let f=u&&`[${u}]`||"",d=a&&AA(a,f)||Ta,h=AA(i,`${n} ${f}`,d);return Object.assign(a?d:h,{label:t,sibling:l,info:h,step:c})}}var zC=q({"src/lib/git-logger.ts"(){"use strict";fe(),Ud.default.formatters.L=t=>String(qd(t)?t.length:"-"),Ud.default.formatters.B=t=>Buffer.isBuffer(t)?t.toString("utf8"):wu(t)}}),WC,w3=q({"src/lib/runners/tasks-pending-queue.ts"(){"use strict";var t;Bs(),zC(),WC=(t=class{constructor(r="GitExecutor"){this.logLabel=r,this._queue=new Map}withProgress(r){return this._queue.get(r)}createProgress(r){let i=t.getName(r.commands[0]),n=Gv(this.logLabel,i);return{task:r,logger:n,name:i}}push(r){let i=this.createProgress(r);return i.logger("Adding task to the queue, commands = %o",r.commands),this._queue.set(r,i),i}fatal(r){for(let[i,{logger:n}]of Array.from(this._queue.entries()))i===r.task?(n.info("Failed %o",r),n("Fatal exception, any as-yet un-started tasks run through this executor will not be attempted")):n.info("A fatal exception occurred in a previous task, the queue has been purged: %o",r.message),this.complete(i);if(this._queue.size!==0)throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`)}complete(r){this.withProgress(r)&&this._queue.delete(r)}attempt(r){let i=this.withProgress(r);if(!i)throw new Nr(void 0,"TasksPendingQueue: attempt called for an unknown task");return i.logger("Starting task"),i}static getName(r="empty"){return`task:${r}:${++t.counter}`}},t.counter=0,t)}});function ka(t,e){return{method:oC(t.commands)||"",commands:e}}function _3(t,e){return r=>{e("[ERROR] child process exception %o",r),t.push(Buffer.from(String(r.stack),"ascii"))}}function CA(t,e,r,i){return n=>{r("%s received %L bytes",e,n),i("%B",n),t.push(n)}}var Sv,b3=q({"src/lib/runners/git-executor-chain.ts"(){"use strict";Bs(),_t(),fe(),w3(),Sv=class{constructor(t,e,r){this._executor=t,this._scheduler=e,this._plugins=r,this._chain=Promise.resolve(),this._queue=new WC}get cwd(){return this._cwd||this._executor.cwd}set cwd(t){this._cwd=t}get env(){return this._executor.env}get outputHandler(){return this._executor.outputHandler}chain(){return this}push(t){return this._queue.push(t),this._chain=this._chain.then(()=>this.attemptTask(t))}async attemptTask(t){let e=await this._scheduler.next(),r=()=>this._queue.complete(t);try{let{logger:i}=this._queue.attempt(t);return await(PC(t)?this.attemptEmptyTask(t,i):this.attemptRemoteTask(t,i))}catch(i){throw this.onFatalException(t,i)}finally{r(),e()}}onFatalException(t,e){let r=e instanceof Nr?Object.assign(e,{task:t}):new Nr(t,e&&String(e));return this._chain=Promise.resolve(),this._queue.fatal(r),r}async attemptRemoteTask(t,e){let r=this._plugins.exec("spawn.binary","",ka(t,t.commands)),i=this._plugins.exec("spawn.args",[...t.commands],{...ka(t,t.commands),env:{...this.env}}),n=await this.gitResponse(t,r,i,this.outputHandler,e.step("SPAWN")),s=await this.handleTaskData(t,i,n,e.step("HANDLE"));return e("passing response to task's parser as a %s",t.format),TC(t)?bv(t.parser,s):bv(t.parser,s.asStrings())}async attemptEmptyTask(t,e){return e("empty task bypassing child process to call to task's parser"),t.parser(this)}handleTaskData(t,e,r,i){let{exitCode:n,rejection:s,stdOut:a,stdErr:o}=r;return new Promise((l,c)=>{i("Preparing to handle process response exitCode=%d stdOut=",n);let{error:u}=this._plugins.exec("task.error",{error:s},{...ka(t,e),...r});if(u&&t.onError)return i.info("exitCode=%s handling with custom error handler"),t.onError(r,u,f=>{i.info("custom error handler treated as success"),i("custom error returned a %s",wu(f)),l(new Hd(Array.isArray(f)?Buffer.concat(f):f,Buffer.concat(o)))},c);if(u)return i.info("handling as error: exitCode=%s stdErr=%s rejection=%o",n,o.length,s),c(u);i.info("retrieving task output complete"),l(new Hd(Buffer.concat(a),Buffer.concat(o)))})}async gitResponse(t,e,r,i,n){let s=n.sibling("output"),a=this._plugins.exec("spawn.options",{cwd:this.cwd,env:this.env,windowsHide:!0},ka(t,t.commands));return new Promise(o=>{let l=[],c=[];n.info("%s %o",e,r),n("%O",a);let u=this._beforeSpawn(t,r);if(u)return o({stdOut:l,stdErr:c,exitCode:9901,rejection:u});this._plugins.exec("spawn.before",void 0,{...ka(t,r),kill(d){u=d||u}});let f=(0,qC.spawn)(e,r,a);f.stdout.on("data",CA(l,"stdOut",n,s.step("stdOut"))),f.stderr.on("data",CA(c,"stdErr",n,s.step("stdErr"))),f.on("error",_3(c,n)),i&&(n("Passing child process stdOut/stdErr to custom outputHandler"),i(e,f.stdout,f.stderr,[...r])),this._plugins.exec("spawn.after",void 0,{...ka(t,r),spawned:f,close(d,h){o({stdOut:l,stdErr:c,exitCode:d,rejection:u||h})},kill(d){f.killed||(u=d,f.kill("SIGINT"))}})})}_beforeSpawn(t,e){let r;return this._plugins.exec("spawn.before",void 0,{...ka(t,e),kill(i){r=i||r}}),r}}}}),YC={};xt(YC,{GitExecutor:()=>XC});var XC,y3=q({"src/lib/runners/git-executor.ts"(){"use strict";b3(),XC=class{constructor(t,e,r){this.cwd=t,this._scheduler=e,this._plugins=r,this._chain=new Sv(this,this._scheduler,this._plugins)}chain(){return new Sv(this,this._scheduler,this._plugins)}push(t){return this._chain.push(t)}}}});function x3(t,e,r=Ta){let i=s=>{r(null,s)},n=s=>{(s==null?void 0:s.task)===t&&r(s instanceof gu?E3(s):s,void 0)};e.then(i,n)}function E3(t){let e=i=>{console.warn(`simple-git deprecation notice: accessing GitResponseError.${i} should be GitResponseError.git.${i}, this will no longer be available in version 3`),e=Ta};return Object.create(t,Object.getOwnPropertyNames(t.git).reduce(r,{}));function r(i,n){return n in t||(i[n]={enumerable:!1,configurable:!1,get(){return e(n),t.git[n]}}),i}}var S3=q({"src/lib/task-callback.ts"(){"use strict";xl(),fe()}});function TA(t,e){return AC(r=>{if(!Iv(t))throw new Error(`Git.cwd: cannot change to non-directory "${t}"`);return(e||r).cwd=t})}var k3=q({"src/lib/tasks/change-working-directory.ts"(){"use strict";fe(),_t()}});function dv(t){let e=["checkout",...t];return e[1]==="-b"&&e.includes("-B")&&(e[1]=Vd(e,"-B")),Sr(e)}function A3(){return{checkout(){return this._runTask(dv(Er(arguments,1)),it(arguments))},checkoutBranch(t,e){return this._runTask(dv(["-b",t,e,...Er(arguments)]),it(arguments))},checkoutLocalBranch(t){return this._runTask(dv(["-b",t,...Er(arguments)]),it(arguments))}}}var C3=q({"src/lib/tasks/checkout.ts"(){"use strict";fe(),_t()}});function T3(){return{count:0,garbage:0,inPack:0,packs:0,prunePackable:0,size:0,sizeGarbage:0,sizePack:0}}function P3(){return{countObjects(){return this._runTask({commands:["count-objects","--verbose"],format:"utf-8",parser(t){return Br(T3(),[ZC],t)}})}}}var ZC,R3=q({"src/lib/tasks/count-objects.ts"(){"use strict";fe(),ZC=new ve(/([a-z-]+): (\d+)$/,(t,[e,r])=>{let i=uC(e);Object.hasOwn(t,i)&&(t[i]=Xe(r))})}});function $3(t){return Br({author:null,branch:"",commit:"",root:!1,summary:{changes:0,insertions:0,deletions:0}},KC,t)}var KC,F3=q({"src/lib/parsers/parse-commit.ts"(){"use strict";fe(),KC=[new ve(/^\[([^\s]+)( \([^)]+\))? ([^\]]+)/,(t,[e,r,i])=>{t.branch=e,t.commit=i,t.root=!!r}),new ve(/\s*Author:\s(.+)/i,(t,[e])=>{let r=e.split("<"),i=r.pop();!i||!i.includes("@")||(t.author={email:i.substr(0,i.length-1),name:r.join("<").trim()})}),new ve(/(\d+)[^,]*(?:,\s*(\d+)[^,]*)(?:,\s*(\d+))/g,(t,[e,r,i])=>{t.summary.changes=parseInt(e,10)||0,t.summary.insertions=parseInt(r,10)||0,t.summary.deletions=parseInt(i,10)||0}),new ve(/^(\d+)[^,]*(?:,\s*(\d+)[^(]+\(([+-]))?/,(t,[e,r,i])=>{t.summary.changes=parseInt(e,10)||0;let n=parseInt(r,10)||0;i==="-"?t.summary.deletions=n:i==="+"&&(t.summary.insertions=n)})]}});function I3(t,e,r){return{commands:["-c","core.abbrev=40","commit",...pu(t,"-m"),...e,...r],format:"utf-8",parser:$3}}function M3(){return{commit(e,...r){let i=it(arguments),n=t(e)||I3(xn(e),xn(ar(r[0],Bd,[])),[...El(ar(r[1],_u,[])),...Er(arguments,0,!0)]);return this._runTask(n,i)}};function t(e){return!Bd(e)&&Lr("git.commit: requires the commit message to be supplied as a string/string[]")}}var D3=q({"src/lib/tasks/commit.ts"(){"use strict";F3(),fe(),_t()}});function O3(){return{firstCommit(){return this._runTask(Sr(["rev-list","--max-parents=0","HEAD"],!0),it(arguments))}}}var L3=q({"src/lib/tasks/first-commit.ts"(){"use strict";fe(),_t()}});function N3(t,e){let r=["hash-object",t];return e&&r.push("-w"),Sr(r,!0)}var B3=q({"src/lib/tasks/hash-object.ts"(){"use strict";_t()}});function H3(t,e,r){let i=String(r).trim(),n;if(n=QC.exec(i))return new Ld(t,e,!1,n[1]);if(n=JC.exec(i))return new Ld(t,e,!0,n[1]);let s="",a=i.split(" ");for(;a.length;)if(a.shift()==="in"){s=a.join(" ");break}return new Ld(t,e,/^re/i.test(i),s)}var Ld,QC,JC,U3=q({"src/lib/responses/InitSummary.ts"(){"use strict";Ld=class{constructor(t,e,r,i){this.bare=t,this.path=e,this.existing=r,this.gitDir=i}},QC=/^Init.+ repository in (.+)$/,JC=/^Rein.+ in (.+)$/}});function G3(t){return t.includes(jv)}function j3(t=!1,e,r){let i=["init",...r];return t&&!G3(i)&&i.splice(1,0,jv),{commands:i,format:"utf-8",parser(n){return H3(i.includes("--bare"),e,n)}}}var jv,V3=q({"src/lib/tasks/init.ts"(){"use strict";U3(),jv="--bare"}});function Vv(t){for(let e=0;eBr(new eT,e,r,!1)}var hv,PA,RA,$A,rT,iT=q({"src/lib/parsers/parse-diff-summary.ts"(){"use strict";bu(),W3(),LC(),fe(),hv=[new ve(/^(.+)\s+\|\s+(\d+)(\s+[+\-]+)?$/,(t,[e,r,i=""])=>{t.files.push({file:e.trim(),changes:Xe(r),insertions:i.replace(/[^+]/g,"").length,deletions:i.replace(/[^-]/g,"").length,binary:!1})}),new ve(/^(.+) \|\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,(t,[e,r,i])=>{t.files.push({file:e.trim(),before:Xe(r),after:Xe(i),binary:!0})}),new ve(/(\d+) files? changed\s*((?:, \d+ [^,]+){0,2})/,(t,[e,r])=>{let i=/(\d+) i/.exec(r),n=/(\d+) d/.exec(r);t.changed=Xe(e),t.insertions=Xe(i==null?void 0:i[1]),t.deletions=Xe(n==null?void 0:n[1])})],PA=[new ve(/(\d+)\t(\d+)\t(.+)$/,(t,[e,r,i])=>{let n=Xe(e),s=Xe(r);t.changed++,t.insertions+=n,t.deletions+=s,t.files.push({file:i,changes:n+s,insertions:n,deletions:s,binary:!1})}),new ve(/-\t-\t(.+)$/,(t,[e])=>{t.changed++,t.files.push({file:e,after:0,before:0,binary:!0})})],RA=[new ve(/(.+)$/,(t,[e])=>{t.changed++,t.files.push({file:e,changes:0,insertions:0,deletions:0,binary:!1})})],$A=[new ve(/([ACDMRTUXB])([0-9]{0,3})\t(.[^\t]*)(\t(.[^\t]*))?$/,(t,[e,r,i,n,s])=>{t.changed++,t.files.push({file:s!=null?s:i,changes:0,insertions:0,deletions:0,binary:!1,status:vv(u3(e)&&e),from:vv(!!s&&i!==s&&i),similarity:Xe(r)})})],rT={"":hv,"--stat":hv,"--numstat":PA,"--name-status":$A,"--name-only":RA}}});function q3(t,e){return e.reduce((r,i,n)=>(r[i]=t[n]||"",r),Object.create({diff:null}))}function nT(t=Yv,e=sT,r=""){let i=tT(r);return function(n){let s=vu(n.trim(),!1,Wv).map(function(a){let o=a.split(qv),l=q3(o[0].split(t),e);return o.length>1&&o[1].trim()&&(l.diff=i(o[1])),l});return{all:s,latest:s.length&&s[0]||null,total:s.length}}}var Wv,qv,Yv,sT,aT=q({"src/lib/parsers/parse-list-log-summary.ts"(){"use strict";fe(),iT(),bu(),Wv="\xF2\xF2\xF2\xF2\xF2\xF2 ",qv=" \xF2\xF2",Yv=" \xF2 ",sT=["hash","date","message","refs","author_name","author_email"]}}),oT={};xt(oT,{diffSummaryTask:()=>Y3,validateLogFormatConfig:()=>Zd});function Y3(t){let e=Vv(t),r=["diff"];return e===""&&(e="--stat",r.push("--stat=4096")),r.push(...t),Zd(r)||{commands:r,format:"utf-8",parser:tT(e)}}function Zd(t){let e=t.filter(z3);if(e.length>1)return Lr(`Summary flags are mutually exclusive - pick one of ${e.join(",")}`);if(e.length&&t.includes("-z"))return Lr(`Summary flag ${e} parsing is not compatible with null termination option '-z'`)}var Xv=q({"src/lib/tasks/diff.ts"(){"use strict";bu(),iT(),_t()}});function X3(t,e){let r=[],i=[];return Object.keys(t).forEach(n=>{r.push(n),i.push(String(t[n]))}),[r,i.join(e)]}function Z3(t){return Object.keys(t).reduce((e,r)=>(r in kv||(e[r]=t[r]),e),{})}function lT(t={},e=[]){let r=ar(t.splitter,pt,Yv),i=Wd(t.format)?t.format:{hash:"%H",date:t.strictDate===!1?"%ai":"%aI",message:"%s",refs:"%D",body:t.multiLine?"%B":"%b",author_name:t.mailMap!==!1?"%aN":"%an",author_email:t.mailMap!==!1?"%aE":"%ae"},[n,s]=X3(i,r),a=[],o=[`--pretty=format:${Wv}${s}${qv}`,...e],l=t.n||t["max-count"]||t.maxCount;if(l&&o.push(`--max-count=${l}`),t.from||t.to){let c=t.symmetric!==!1?"...":"..";a.push(`${t.from||""}${c}${t.to||""}`)}return pt(t.file)&&o.push("--follow",gl(t.file)),Dv(Z3(t),o),{fields:n,splitter:r,commands:[...o,...a]}}function K3(t,e,r){let i=nT(t,e,Vv(r));return{commands:["log",...r],format:"utf-8",parser:i}}function Q3(){return{log(...r){let i=it(arguments),n=lT(Ov(arguments),El(ar(arguments[0],_u,[]))),s=e(...r)||Zd(n.commands)||t(n);return this._runTask(s,i)}};function t(r){return K3(r.splitter,r.fields,r.commands)}function e(r,i){return pt(r)&&pt(i)&&Lr("git.log(string, string) should be replaced with git.log({ from: string, to: string })")}}var kv,cT=q({"src/lib/tasks/log.ts"(){"use strict";bu(),aT(),fe(),_t(),Xv(),kv=(t=>(t[t["--pretty"]=0]="--pretty",t[t["max-count"]=1]="max-count",t[t.maxCount=2]="maxCount",t[t.n=3]="n",t[t.file=4]="file",t[t.format=5]="format",t[t.from=6]="from",t[t.to=7]="to",t[t.splitter=8]="splitter",t[t.symmetric=9]="symmetric",t[t.mailMap=10]="mailMap",t[t.multiLine=11]="multiLine",t[t.strictDate=12]="strictDate",t))(kv||{})}}),Nd,uT,J3=q({"src/lib/responses/MergeSummary.ts"(){"use strict";Nd=class{constructor(t,e=null,r){this.reason=t,this.file=e,this.meta=r}toString(){return`${this.file}:${this.reason}`}},uT=class{constructor(){this.conflicts=[],this.merges=[],this.result="success"}get failed(){return this.conflicts.length>0}get reason(){return this.result}toString(){return this.conflicts.length?`CONFLICTS: ${this.conflicts.join(", ")}`:"OK"}}}}),Av,fT,e8=q({"src/lib/responses/PullSummary.ts"(){"use strict";Av=class{constructor(){this.remoteMessages={all:[]},this.created=[],this.deleted=[],this.files=[],this.deletions={},this.insertions={},this.summary={changes:0,deletions:0,insertions:0}}},fT=class{constructor(){this.remote="",this.hash={local:"",remote:""},this.branch={local:"",remote:""},this.message=""}toString(){return this.message}}}});function pv(t){return t.objects=t.objects||{compressing:0,counting:0,enumerating:0,packReused:0,reused:{count:0,delta:0},total:{count:0,delta:0}}}function FA(t){let e=/^\s*(\d+)/.exec(t),r=/delta (\d+)/i.exec(t);return{count:Xe(e&&e[1]||"0"),delta:Xe(r&&r[1]||"0")}}var dT,t8=q({"src/lib/parsers/parse-remote-objects.ts"(){"use strict";fe(),dT=[new Ns(/^remote:\s*(enumerating|counting|compressing) objects: (\d+),/i,(t,[e,r])=>{let i=e.toLowerCase(),n=pv(t.remoteMessages);Object.assign(n,{[i]:Xe(r)})}),new Ns(/^remote:\s*(enumerating|counting|compressing) objects: \d+% \(\d+\/(\d+)\),/i,(t,[e,r])=>{let i=e.toLowerCase(),n=pv(t.remoteMessages);Object.assign(n,{[i]:Xe(r)})}),new Ns(/total ([^,]+), reused ([^,]+), pack-reused (\d+)/i,(t,[e,r,i])=>{let n=pv(t.remoteMessages);n.total=FA(e),n.reused=FA(r),n.packReused=Xe(i)})]}});function hT(t,e){return Br({remoteMessages:new mT},pT,e)}var pT,mT,gT=q({"src/lib/parsers/parse-remote-messages.ts"(){"use strict";fe(),t8(),pT=[new Ns(/^remote:\s*(.+)$/,(t,[e])=>(t.remoteMessages.all.push(e.trim()),!1)),...dT,new Ns([/create a (?:pull|merge) request/i,/\s(https?:\/\/\S+)$/],(t,[e])=>{t.remoteMessages.pullRequestUrl=e}),new Ns([/found (\d+) vulnerabilities.+\(([^)]+)\)/i,/\s(https?:\/\/\S+)$/],(t,[e,r,i])=>{t.remoteMessages.vulnerabilities={count:Xe(e),summary:r,url:i}})],mT=class{constructor(){this.all=[]}}}});function r8(t,e){let r=Br(new fT,vT,[t,e]);return r.message&&r}var IA,MA,DA,OA,vT,LA,Zv,wT=q({"src/lib/parsers/parse-pull.ts"(){"use strict";e8(),fe(),gT(),IA=/^\s*(.+?)\s+\|\s+\d+\s*(\+*)(-*)/,MA=/(\d+)\D+((\d+)\D+\(\+\))?(\D+(\d+)\D+\(-\))?/,DA=/^(create|delete) mode \d+ (.+)/,OA=[new ve(IA,(t,[e,r,i])=>{t.files.push(e),r&&(t.insertions[e]=r.length),i&&(t.deletions[e]=i.length)}),new ve(MA,(t,[e,,r,,i])=>r!==void 0||i!==void 0?(t.summary.changes=+e||0,t.summary.insertions=+r||0,t.summary.deletions=+i||0,!0):!1),new ve(DA,(t,[e,r])=>{Si(t.files,r),Si(e==="create"?t.created:t.deleted,r)})],vT=[new ve(/^from\s(.+)$/i,(t,[e])=>void(t.remote=e)),new ve(/^fatal:\s(.+)$/,(t,[e])=>void(t.message=e)),new ve(/([a-z0-9]+)\.\.([a-z0-9]+)\s+(\S+)\s+->\s+(\S+)$/,(t,[e,r,i,n])=>{t.branch.local=i,t.hash.local=e,t.branch.remote=n,t.hash.remote=r})],LA=(t,e)=>Br(new Av,OA,[t,e]),Zv=(t,e)=>Object.assign(new Av,LA(t,e),hT(t,e))}}),NA,_T,BA,i8=q({"src/lib/parsers/parse-merge.ts"(){"use strict";J3(),fe(),wT(),NA=[new ve(/^Auto-merging\s+(.+)$/,(t,[e])=>{t.merges.push(e)}),new ve(/^CONFLICT\s+\((.+)\): Merge conflict in (.+)$/,(t,[e,r])=>{t.conflicts.push(new Nd(e,r))}),new ve(/^CONFLICT\s+\((.+\/delete)\): (.+) deleted in (.+) and/,(t,[e,r,i])=>{t.conflicts.push(new Nd(e,r,{deleteRef:i}))}),new ve(/^CONFLICT\s+\((.+)\):/,(t,[e])=>{t.conflicts.push(new Nd(e,null))}),new ve(/^Automatic merge failed;\s+(.+)$/,(t,[e])=>{t.result=e})],_T=(t,e)=>Object.assign(BA(t,e),Zv(t,e)),BA=t=>Br(new uT,NA,t)}});function HA(t){return t.length?{commands:["merge",...t],format:"utf-8",parser(e,r){let i=_T(e,r);if(i.failed)throw new gu(i);return i}}:Lr("Git.merge requires at least one option")}var n8=q({"src/lib/tasks/merge.ts"(){"use strict";xl(),i8(),_t()}});function s8(t,e,r){let i=r.includes("deleted"),n=r.includes("tag")||/^refs\/tags/.test(t),s=!r.includes("new");return{deleted:i,tag:n,branch:!n,new:!s,alreadyUpdated:s,local:t,remote:e}}var UA,bT,GA,a8=q({"src/lib/parsers/parse-push.ts"(){"use strict";fe(),gT(),UA=[new ve(/^Pushing to (.+)$/,(t,[e])=>{t.repo=e}),new ve(/^updating local tracking ref '(.+)'/,(t,[e])=>{t.ref={...t.ref||{},local:e}}),new ve(/^[=*-]\s+([^:]+):(\S+)\s+\[(.+)]$/,(t,[e,r,i])=>{t.pushed.push(s8(e,r,i))}),new ve(/^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,(t,[e,r,i])=>{t.branch={...t.branch||{},local:e,remote:r,remoteName:i}}),new ve(/^([^:]+):(\S+)\s+([a-z0-9]+)\.\.([a-z0-9]+)$/,(t,[e,r,i,n])=>{t.update={head:{local:e,remote:r},hash:{from:i,to:n}}})],bT=(t,e)=>{let r=GA(t,e),i=hT(t,e);return{...r,...i}},GA=(t,e)=>Br({pushed:[]},UA,[t,e])}}),yT={};xt(yT,{pushTagsTask:()=>o8,pushTask:()=>Kv});function o8(t={},e){return Si(e,"--tags"),Kv(t,e)}function Kv(t={},e){let r=["push",...e];return t.branch&&r.splice(1,0,t.branch),t.remote&&r.splice(1,0,t.remote),Vd(r,"-v"),Si(r,"--verbose"),Si(r,"--porcelain"),{commands:r,format:"utf-8",parser:bT}}var xT=q({"src/lib/tasks/push.ts"(){"use strict";a8(),fe()}});function l8(){return{showBuffer(){let t=["show",...Er(arguments,1)];return t.includes("--binary")||t.splice(1,0,"--binary"),this._runTask(CC(t),it(arguments))},show(){let t=["show",...Er(arguments,1)];return this._runTask(Sr(t),it(arguments))}}}var c8=q({"src/lib/tasks/show.ts"(){"use strict";fe(),_t()}}),jA,ET,u8=q({"src/lib/responses/FileStatusSummary.ts"(){"use strict";jA=/^(.+)\0(.+)$/,ET=class{constructor(t,e,r){if(this.path=t,this.index=e,this.working_dir=r,e==="R"||r==="R"){let i=jA.exec(t)||[null,t,t];this.from=i[2]||"",this.path=i[1]||""}}}}});function VA(t){let[e,r]=t.split(bl);return{from:r||e,to:e}}function Jr(t,e,r){return[`${t}${e}`,r]}function mv(t,...e){return e.map(r=>Jr(t,r,(i,n)=>i.conflicted.push(n)))}function f8(t,e){let r=e.trim();switch(" "){case r.charAt(2):return i(r.charAt(0),r.charAt(1),r.slice(3));case r.charAt(1):return i(" ",r.charAt(0),r.slice(2));default:return}function i(n,s,a){let o=`${n}${s}`,l=ST.get(o);l&&l(t,a),o!=="##"&&o!=="!!"&&t.files.push(new ET(a,n,s))}}var zA,ST,kT,d8=q({"src/lib/responses/StatusSummary.ts"(){"use strict";fe(),u8(),zA=class{constructor(){this.not_added=[],this.conflicted=[],this.created=[],this.deleted=[],this.ignored=void 0,this.modified=[],this.renamed=[],this.files=[],this.staged=[],this.ahead=0,this.behind=0,this.current=null,this.tracking=null,this.detached=!1,this.isClean=()=>!this.files.length}},ST=new Map([Jr(" ","A",(t,e)=>t.created.push(e)),Jr(" ","D",(t,e)=>t.deleted.push(e)),Jr(" ","M",(t,e)=>t.modified.push(e)),Jr("A"," ",(t,e)=>{t.created.push(e),t.staged.push(e)}),Jr("A","M",(t,e)=>{t.created.push(e),t.staged.push(e),t.modified.push(e)}),Jr("D"," ",(t,e)=>{t.deleted.push(e),t.staged.push(e)}),Jr("M"," ",(t,e)=>{t.modified.push(e),t.staged.push(e)}),Jr("M","M",(t,e)=>{t.modified.push(e),t.staged.push(e)}),Jr("R"," ",(t,e)=>{t.renamed.push(VA(e))}),Jr("R","M",(t,e)=>{let r=VA(e);t.renamed.push(r),t.modified.push(r.to)}),Jr("!","!",(t,e)=>{(t.ignored=t.ignored||[]).push(e)}),Jr("?","?",(t,e)=>t.not_added.push(e)),...mv("A","A","U"),...mv("D","D","U"),...mv("U","A","D","U"),["##",(t,e)=>{let r=/ahead (\d+)/,i=/behind (\d+)/,n=/^(.+?(?=(?:\.{3}|\s|$)))/,s=/\.{3}(\S*)/,a=/\son\s(\S+?)(?=\.{3}|$)/,o=r.exec(e);t.ahead=o&&+o[1]||0,o=i.exec(e),t.behind=o&&+o[1]||0,o=n.exec(e),t.current=ar(o==null?void 0:o[1],pt,null),o=s.exec(e),t.tracking=ar(o==null?void 0:o[1],pt,null),o=a.exec(e),o&&(t.current=ar(o==null?void 0:o[1],pt,t.current)),t.detached=/\(no branch\)/.test(e)}]]),kT=function(t){let e=t.split(bl),r=new zA;for(let i=0,n=e.length;i!AT.includes(r))],parser(r){return kT(r)}}}var AT,p8=q({"src/lib/tasks/status.ts"(){"use strict";d8(),AT=["--null","-z"]}});function Gd(t=0,e=0,r=0,i="",n=!0){return Object.defineProperty({major:t,minor:e,patch:r,agent:i,installed:n},"toString",{value(){return`${this.major}.${this.minor}.${this.patch}`},configurable:!1,enumerable:!1})}function m8(){return Gd(0,0,0,"",!1)}function g8(){return{version(){return this._runTask({commands:["--version"],format:"utf-8",parser:v8,onError(t,e,r,i){if(t.exitCode===-2)return r(Buffer.from(Qv));i(e)}})}}}function v8(t){return t===Qv?m8():Br(Gd(0,0,0,t),CT,t)}var Qv,CT,w8=q({"src/lib/tasks/version.ts"(){"use strict";fe(),Qv="installed=false",CT=[new ve(/version (\d+)\.(\d+)\.(\d+)(?:\s*\((.+)\))?/,(t,[e,r,i,n=""])=>{Object.assign(t,Gd(Xe(e),Xe(r),Xe(i),n))}),new ve(/version (\d+)\.(\d+)\.(\D+)(.+)?$/,(t,[e,r,i,n=""])=>{Object.assign(t,Gd(Xe(e),Xe(r),i,n))})]}});function WA(t,e,r,...i){return pt(r)?e(r,ar(i[0],pt),Er(arguments)):Lr(`git.${t}() requires a string 'repoPath'`)}function _8(){return{clone(t,...e){return this._runTask(WA("clone",Cv,ar(t,pt),...e),it(arguments))},mirror(t,...e){return this._runTask(WA("mirror",TT,ar(t,pt),...e),it(arguments))}}}var Cv,TT,b8=q({"src/lib/tasks/clone.ts"(){"use strict";_t(),fe(),Cv=(t,e,r)=>{let i=["clone",...r];return pt(t)&&i.push(gl(t)),pt(e)&&i.push(gl(e)),Sr(i)},TT=(t,e,r)=>(Si(r,"--mirror"),Cv(t,e,r))}}),PT={};xt(PT,{SimpleGitApi:()=>Tv});var Tv,y8=q({"src/lib/simple-git-api.ts"(){"use strict";S3(),k3(),C3(),R3(),D3(),DC(),L3(),HC(),B3(),V3(),cT(),n8(),xT(),c8(),p8(),_t(),w8(),fe(),b8(),Tv=class{constructor(t){this._executor=t}_runTask(t,e){let r=this._executor.chain(),i=r.push(t);return e&&x3(t,i,e),Object.create(this,{then:{value:i.then.bind(i)},catch:{value:i.catch.bind(i)},_executor:{value:r}})}add(t){return this._runTask(Sr(["add",...xn(t)]),it(arguments))}cwd(t){let e=it(arguments);return typeof t=="string"?this._runTask(TA(t,this._executor),e):typeof(t==null?void 0:t.path)=="string"?this._runTask(TA(t.path,t.root&&this._executor||void 0),e):this._runTask(Lr("Git.cwd: workingDirectory must be supplied as a string"),e)}hashObject(t,e){return this._runTask(N3(t,e===!0),it(arguments))}init(t){return this._runTask(j3(t===!0,this._executor.cwd,Er(arguments)),it(arguments))}merge(){return this._runTask(HA(Er(arguments)),it(arguments))}mergeFromTo(t,e){return pt(t)&&pt(e)?this._runTask(HA([t,e,...Er(arguments)]),it(arguments,!1)):this._runTask(Lr("Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings"))}outputHandler(t){return this._executor.outputHandler=t,this}push(){let t=Kv({remote:ar(arguments[0],pt),branch:ar(arguments[1],pt)},Er(arguments));return this._runTask(t,it(arguments))}stash(){return this._runTask(Sr(["stash",...Er(arguments)]),it(arguments))}status(){return this._runTask(h8(Er(arguments)),it(arguments))}},Object.assign(Tv.prototype,A3(),_8(),M3(),c3(),P3(),O3(),h3(),Q3(),l8(),g8())}}),RT={};xt(RT,{Scheduler:()=>FT});var qA,FT,x8=q({"src/lib/runners/scheduler.ts"(){"use strict";fe(),zC(),qA=(()=>{let t=0;return()=>{t++;let{promise:e,done:r}=(0,$T.createDeferred)();return{promise:e,done:r,id:t}}})(),FT=class{constructor(t=2){this.concurrency=t,this.logger=Gv("","scheduler"),this.pending=[],this.running=[],this.logger("Constructed, concurrency=%s",t)}schedule(){if(!this.pending.length||this.running.length>=this.concurrency){this.logger("Schedule attempt ignored, pending=%s running=%s concurrency=%s",this.pending.length,this.running.length,this.concurrency);return}let t=Si(this.running,this.pending.shift());this.logger("Attempting id=%s",t.id),t.done(()=>{this.logger("Completing id=",t.id),Vd(this.running,t),this.schedule()})}next(){let{promise:t,id:e}=Si(this.pending,qA());return this.logger("Scheduling id=%s",e),this.schedule(),t}}}}),IT={};xt(IT,{applyPatchTask:()=>E8});function E8(t,e){return Sr(["apply",...e,...t])}var S8=q({"src/lib/tasks/apply-patch.ts"(){"use strict";_t()}});function k8(t,e){return{branch:t,hash:e,success:!0}}function A8(t){return{branch:t,hash:null,success:!1}}var MT,C8=q({"src/lib/responses/BranchDeleteSummary.ts"(){"use strict";MT=class{constructor(){this.all=[],this.branches={},this.errors=[]}get success(){return!this.errors.length}}}});function DT(t,e){return e===1&&Pv.test(t)}var YA,Pv,XA,Kd,T8=q({"src/lib/parsers/parse-branch-delete.ts"(){"use strict";C8(),fe(),YA=/(\S+)\s+\(\S+\s([^)]+)\)/,Pv=/^error[^']+'([^']+)'/m,XA=[new ve(YA,(t,[e,r])=>{let i=k8(e,r);t.all.push(i),t.branches[e]=i}),new ve(Pv,(t,[e])=>{let r=A8(e);t.errors.push(r),t.all.push(r),t.branches[e]=r})],Kd=(t,e)=>Br(new MT,XA,[t,e])}}),OT,P8=q({"src/lib/responses/BranchSummary.ts"(){"use strict";OT=class{constructor(){this.all=[],this.branches={},this.current="",this.detached=!1}push(t,e,r,i,n){t==="*"&&(this.detached=e,this.current=r),this.all.push(r),this.branches[r]={current:t==="*",linkedWorkTree:t==="+",name:r,commit:i,label:n}}}}});function ZA(t){return t?t.charAt(0):""}function LT(t,e=!1){return Br(new OT,e?[BT]:NT,t)}var NT,BT,R8=q({"src/lib/parsers/parse-branch.ts"(){"use strict";P8(),fe(),NT=[new ve(/^([*+]\s)?\((?:HEAD )?detached (?:from|at) (\S+)\)\s+([a-z0-9]+)\s(.*)$/,(t,[e,r,i,n])=>{t.push(ZA(e),!0,r,i,n)}),new ve(/^([*+]\s)?(\S+)\s+([a-z0-9]+)\s?(.*)$/s,(t,[e,r,i,n])=>{t.push(ZA(e),!1,r,i,n)})],BT=new ve(/^(\S+)$/s,(t,[e])=>{t.push("*",!1,e,"","")})}}),HT={};xt(HT,{branchLocalTask:()=>F8,branchTask:()=>$8,containsDeleteBranchCommand:()=>UT,deleteBranchTask:()=>M8,deleteBranchesTask:()=>I8});function UT(t){let e=["-d","-D","--delete"];return t.some(r=>e.includes(r))}function $8(t){let e=UT(t),r=t.includes("--show-current"),i=["branch",...t];return i.length===1&&i.push("-a"),i.includes("-v")||i.splice(1,0,"-v"),{format:"utf-8",commands:i,parser(n,s){return e?Kd(n,s).all[0]:LT(n,r)}}}function F8(){return{format:"utf-8",commands:["branch","-v"],parser(t){return LT(t)}}}function I8(t,e=!1){return{format:"utf-8",commands:["branch","-v",e?"-D":"-d",...t],parser(r,i){return Kd(r,i)},onError({exitCode:r,stdOut:i},n,s,a){if(!DT(String(n),r))return a(n);s(i)}}}function M8(t,e=!1){let r={format:"utf-8",commands:["branch","-v",e?"-D":"-d",t],parser(i,n){return Kd(i,n).branches[t]},onError({exitCode:i,stdErr:n,stdOut:s},a,o,l){if(!DT(String(a),i))return l(a);throw new gu(r.parser(mu(s),mu(n)),String(a))}};return r}var D8=q({"src/lib/tasks/branch.ts"(){"use strict";xl(),T8(),R8(),fe()}});function O8(t){let e=t.trim().replace(/^["']|["']$/g,"");return e&&(0,GT.normalize)(e)}var jT,L8=q({"src/lib/responses/CheckIgnore.ts"(){"use strict";jT=t=>t.split(/\n/g).map(O8).filter(Boolean)}}),VT={};xt(VT,{checkIgnoreTask:()=>N8});function N8(t){return{commands:["check-ignore",...t],format:"utf-8",parser:jT}}var B8=q({"src/lib/tasks/check-ignore.ts"(){"use strict";L8()}});function H8(t,e){return Br({raw:t,remote:null,branches:[],tags:[],updated:[],deleted:[]},zT,[t,e])}var zT,U8=q({"src/lib/parsers/parse-fetch.ts"(){"use strict";fe(),zT=[new ve(/From (.+)$/,(t,[e])=>{t.remote=e}),new ve(/\* \[new branch]\s+(\S+)\s*-> (.+)$/,(t,[e,r])=>{t.branches.push({name:e,tracking:r})}),new ve(/\* \[new tag]\s+(\S+)\s*-> (.+)$/,(t,[e,r])=>{t.tags.push({name:e,tracking:r})}),new ve(/- \[deleted]\s+\S+\s*-> (.+)$/,(t,[e])=>{t.deleted.push({tracking:e})}),new ve(/\s*([^.]+)\.\.(\S+)\s+(\S+)\s*-> (.+)$/,(t,[e,r,i,n])=>{t.updated.push({name:i,tracking:n,to:r,from:e})})]}}),WT={};xt(WT,{fetchTask:()=>j8});function G8(t){return/^--upload-pack(=|$)/.test(t)}function j8(t,e,r){let i=["fetch",...r];return t&&e&&i.push(t,e),i.find(G8)?Lr("git.fetch: potential exploit argument blocked."):{commands:i,format:"utf-8",parser:H8}}var V8=q({"src/lib/tasks/fetch.ts"(){"use strict";U8(),_t()}});function z8(t){return Br({moves:[]},qT,t)}var qT,W8=q({"src/lib/parsers/parse-move.ts"(){"use strict";fe(),qT=[new ve(/^Renaming (.+) to (.+)$/,(t,[e,r])=>{t.moves.push({from:e,to:r})})]}}),YT={};xt(YT,{moveTask:()=>q8});function q8(t,e){return{commands:["mv","-v",...xn(t),e],format:"utf-8",parser:z8}}var Y8=q({"src/lib/tasks/move.ts"(){"use strict";W8(),fe()}}),XT={};xt(XT,{pullTask:()=>X8});function X8(t,e,r){let i=["pull",...r];return t&&e&&i.splice(1,0,t,e),{commands:i,format:"utf-8",parser(n,s){return Zv(n,s)},onError(n,s,a,o){let l=r8(mu(n.stdOut),mu(n.stdErr));if(l)return o(new gu(l));o(s)}}}var Z8=q({"src/lib/tasks/pull.ts"(){"use strict";xl(),wT(),fe()}});function K8(t){let e={};return ZT(t,([r])=>e[r]={name:r}),Object.values(e)}function Q8(t){let e={};return ZT(t,([r,i,n])=>{Object.hasOwn(e,r)||(e[r]={name:r,refs:{fetch:"",push:""}}),n&&i&&(e[r].refs[n.replace(/[^a-z]/g,"")]=i)}),Object.values(e)}function ZT(t,e){Fv(t,r=>e(r.split(/\s+/)))}var J8=q({"src/lib/responses/GetRemoteSummary.ts"(){"use strict";fe()}}),KT={};xt(KT,{addRemoteTask:()=>e6,getRemotesTask:()=>t6,listRemotesTask:()=>r6,remoteTask:()=>i6,removeRemoteTask:()=>n6});function e6(t,e,r){return Sr(["remote","add",...r,t,e])}function t6(t){let e=["remote"];return t&&e.push("-v"),{commands:e,format:"utf-8",parser:t?Q8:K8}}function r6(t){let e=[...t];return e[0]!=="ls-remote"&&e.unshift("ls-remote"),Sr(e)}function i6(t){let e=[...t];return e[0]!=="remote"&&e.unshift("remote"),Sr(e)}function n6(t){return Sr(["remote","remove",t])}var s6=q({"src/lib/tasks/remote.ts"(){"use strict";J8(),_t()}}),QT={};xt(QT,{stashListTask:()=>a6});function a6(t={},e){let r=lT(t),i=["stash","list",...r.commands,...e],n=nT(r.splitter,r.fields,Vv(i));return Zd(i)||{commands:i,format:"utf-8",parser:n}}var o6=q({"src/lib/tasks/stash-list.ts"(){"use strict";bu(),aT(),Xv(),cT()}}),JT={};xt(JT,{addSubModuleTask:()=>l6,initSubModuleTask:()=>c6,subModuleTask:()=>Qd,updateSubModuleTask:()=>u6});function l6(t,e){return Qd(["add",t,e])}function c6(t){return Qd(["init",...t])}function Qd(t){let e=[...t];return e[0]!=="submodule"&&e.unshift("submodule"),Sr(e)}function u6(t){return Qd(["update",...t])}var f6=q({"src/lib/tasks/sub-module.ts"(){"use strict";_t()}});function d6(t,e){let r=Number.isNaN(t),i=Number.isNaN(e);return r!==i?r?1:-1:r?e2(t,e):0}function e2(t,e){return t===e?0:t>e?1:-1}function h6(t){return t.trim()}function Dd(t){return typeof t=="string"&&parseInt(t.replace(/^\D+/g,""),10)||0}var KA,t2,p6=q({"src/lib/responses/TagList.ts"(){"use strict";KA=class{constructor(t,e){this.all=t,this.latest=e}},t2=function(t,e=!1){let r=t.split(` +`).map(h6).filter(Boolean);e||r.sort(function(n,s){let a=n.split("."),o=s.split(".");if(a.length===1||o.length===1)return d6(Dd(a[0]),Dd(o[0]));for(let l=0,c=Math.max(a.length,o.length);ln.indexOf(".")>=0);return new KA(r,i)}}}),r2={};xt(r2,{addAnnotatedTagTask:()=>v6,addTagTask:()=>g6,tagListTask:()=>m6});function m6(t=[]){let e=t.some(r=>/^--sort=/.test(r));return{format:"utf-8",commands:["tag","-l",...t],parser(r){return t2(r,e)}}}function g6(t){return{format:"utf-8",commands:["tag",t],parser(){return{name:t}}}}function v6(t,e){return{format:"utf-8",commands:["tag","-a","-m",e,t],parser(){return{name:t}}}}var w6=q({"src/lib/tasks/tag.ts"(){"use strict";p6()}}),_6=OH({"src/git.js"(t,e){"use strict";var{GitExecutor:r}=(y3(),wt(YC)),{SimpleGitApi:i}=(y8(),wt(PT)),{Scheduler:n}=(x8(),wt(RT)),{adhocExecTask:s,configurationErrorTask:a}=(_t(),wt(xv)),{asArray:o,filterArray:l,filterPrimitives:c,filterString:u,filterStringOrStringArray:f,filterType:d,getTrailingOptions:h,trailingFunctionArgument:p,trailingOptionsArgument:g}=(fe(),wt(vC)),{applyPatchTask:v}=(S8(),wt(IT)),{branchTask:_,branchLocalTask:b,deleteBranchesTask:S,deleteBranchTask:k}=(D8(),wt(HT)),{checkIgnoreTask:E}=(B8(),wt(VT)),{checkIsRepoTask:A}=(yC(),wt(wC)),{cleanWithOptionsTask:w,isCleanOptionsArray:x}=(FC(),wt(RC)),{diffSummaryTask:y}=(Xv(),wt(oT)),{fetchTask:C}=(V8(),wt(WT)),{moveTask:P}=(Y8(),wt(YT)),{pullTask:L}=(Z8(),wt(XT)),{pushTagsTask:N}=(xT(),wt(yT)),{addRemoteTask:B,getRemotesTask:ge,listRemotesTask:Le,remoteTask:ke,removeRemoteTask:ne}=(s6(),wt(KT)),{getResetMode:Ee,resetTask:_e}=(VC(),wt(UC)),{stashListTask:z}=(o6(),wt(QT)),{addSubModuleTask:X,initSubModuleTask:V,subModuleTask:Ne,updateSubModuleTask:gr}=(f6(),wt(JT)),{addAnnotatedTagTask:Nt,addTagTask:Fe,tagListTask:Pt}=(w6(),wt(r2)),{straightThroughBufferTask:Rt,straightThroughStringTask:Ye}=(_t(),wt(xv));function J(D,M){this._plugins=M,this._executor=new r(D.baseDir,new n(D.maxConcurrentProcesses),M),this._trimmed=D.trimmed}(J.prototype=Object.create(i.prototype)).constructor=J,J.prototype.customBinary=function(D){return this._plugins.reconfigure("binary",D),this},J.prototype.env=function(D,M){return arguments.length===1&&typeof D=="object"?this._executor.env=D:(this._executor.env=this._executor.env||{})[D]=M,this},J.prototype.stashList=function(D){return this._runTask(z(g(arguments)||{},l(D)&&D||[]),p(arguments))},J.prototype.mv=function(D,M){return this._runTask(P(D,M),p(arguments))},J.prototype.checkoutLatestTag=function(D){var M=this;return this.pull(function(){M.tags(function(ae,Te){M.checkout(Te.latest,D)})})},J.prototype.pull=function(D,M,ae,Te){return this._runTask(L(d(D,u),d(M,u),h(arguments)),p(arguments))},J.prototype.fetch=function(D,M){return this._runTask(C(d(D,u),d(M,u),h(arguments)),p(arguments))},J.prototype.silent=function(D){return this._runTask(s(()=>console.warn("simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this method will be removed.")))},J.prototype.tags=function(D,M){return this._runTask(Pt(h(arguments)),p(arguments))},J.prototype.rebase=function(){return this._runTask(Ye(["rebase",...h(arguments)]),p(arguments))},J.prototype.reset=function(D){return this._runTask(_e(Ee(D),h(arguments)),p(arguments))},J.prototype.revert=function(D){let M=p(arguments);return typeof D!="string"?this._runTask(a("Commit must be a string"),M):this._runTask(Ye(["revert",...h(arguments,0,!0),D]),M)},J.prototype.addTag=function(D){let M=typeof D=="string"?Fe(D):a("Git.addTag requires a tag name");return this._runTask(M,p(arguments))},J.prototype.addAnnotatedTag=function(D,M){return this._runTask(Nt(D,M),p(arguments))},J.prototype.deleteLocalBranch=function(D,M,ae){return this._runTask(k(D,typeof M=="boolean"?M:!1),p(arguments))},J.prototype.deleteLocalBranches=function(D,M,ae){return this._runTask(S(D,typeof M=="boolean"?M:!1),p(arguments))},J.prototype.branch=function(D,M){return this._runTask(_(h(arguments)),p(arguments))},J.prototype.branchLocal=function(D){return this._runTask(b(),p(arguments))},J.prototype.raw=function(D){let M=!Array.isArray(D),ae=[].slice.call(M?arguments:D,0);for(let Bt=0;Btconsole.warn("simple-git deprecation notice: clearQueue() is deprecated and will be removed, switch to using the abortPlugin instead.")))},J.prototype.checkIgnore=function(D,M){return this._runTask(E(o(d(D,f,[]))),p(arguments))},J.prototype.checkIsRepo=function(D,M){return this._runTask(A(d(D,u)),p(arguments))},e.exports=J}});Bs();var b6=class extends Nr{constructor(t,e){super(void 0,e),this.config=t}};Bs();Bs();var yl=class extends Nr{constructor(t,e,r){super(t,r),this.task=t,this.plugin=e,Object.setPrototypeOf(this,new.target.prototype)}};xl();iC();yC();FC();DC();LC();HC();VC();function y6(t){return t?[{type:"spawn.before",action(i,n){t.aborted&&n.kill(new yl(void 0,"abort","Abort already signaled"))}},{type:"spawn.after",action(i,n){function s(){n.kill(new yl(void 0,"abort","Abort signal received"))}t.addEventListener("abort",s),n.spawned.on("close",()=>t.removeEventListener("abort",s))}}]:void 0}function x6(t={}){return{type:"spawn.args",action(e,{env:r}){for(let i of SA(e,r))if(t[i.category]!==!0)throw new yl(void 0,"unsafe",i.message);return e}}}fe();function E6(t){let e=pu(t,"-c");return{type:"spawn.args",action(r){return[...e,...r]}}}fe();var QA=(0,_l.deferred)().promise;function S6({onClose:t=!0,onExit:e=50}={}){function r(){let n=-1,s={close:(0,_l.deferred)(),closeTimeout:(0,_l.deferred)(),exit:(0,_l.deferred)(),exitTimeout:(0,_l.deferred)()},a=Promise.race([t===!1?QA:s.closeTimeout.promise,e===!1?QA:s.exitTimeout.promise]);return i(t,s.close,s.closeTimeout),i(e,s.exit,s.exitTimeout),{close(o){n=o,s.close.done()},exit(o){n=o,s.exit.done()},get exitCode(){return n},result:a}}function i(n,s,a){n!==!1&&(n===!0?s.promise:s.promise.then(()=>gv(n))).then(a.done)}return{type:"spawn.after",async action(n,{spawned:s,close:a}){var u,f;let o=r(),l=!0,c=()=>void(l=!1);(u=s.stdout)==null||u.on("data",c),(f=s.stderr)==null||f.on("data",c),s.on("error",c),s.on("close",d=>o.close(d)),s.on("exit",d=>o.exit(d));try{await o.result,l&&await gv(50),a(o.exitCode)}catch(d){a(o.exitCode,d)}}}}fe();var k6="Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings",JA="Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option";function A6(t){return!t||!/^([a-z]:)?([a-z0-9/.\\_~-]+)$/i.test(t)}function eC(t,e){if(t.length<1||t.length>2)throw new yl(void 0,"binary",k6);if(t.some(A6))if(e)console.warn(JA);else throw new yl(void 0,"binary",JA);let[i,n]=t;return{binary:i,prefix:n}}function C6(t,e=["git"],r=!1){let i=eC(xn(e),r);t.on("binary",n=>{i=eC(xn(n),r)}),t.append("spawn.binary",()=>i.binary),t.append("spawn.args",n=>i.prefix?[i.prefix,...n]:n)}Bs();function T6(t){return!!(t.exitCode&&t.stdErr.length)}function P6(t){return Buffer.concat([...t.stdOut,...t.stdErr])}function R6(t=!1,e=T6,r=P6){return(i,n)=>!t&&i||!e(n)?i:r(n)}function tC(t){return{type:"task.error",action(e,r){let i=t(e.error,{stdErr:r.stdErr,stdOut:r.stdOut,exitCode:r.exitCode});return Buffer.isBuffer(i)?{error:new Nr(void 0,i.toString("utf-8"))}:{error:i}}}}fe();var $6=class{constructor(){this.plugins=new Set,this.events=new i2.EventEmitter}on(t,e){this.events.on(t,e)}reconfigure(t,e){this.events.emit(t,e)}append(t,e){let r=Si(this.plugins,{type:t,action:e});return()=>this.plugins.delete(r)}add(t){let e=[];return xn(t).forEach(r=>r&&this.plugins.add(Si(e,r))),()=>{e.forEach(r=>this.plugins.delete(r))}}exec(t,e,r){let i=e,n=Object.freeze(Object.create(r));for(let s of this.plugins)s.type===t&&(i=s.action(i,n));return i}};fe();function F6(t){let e="--progress",r=["checkout","clone","fetch","pull","push"];return[{type:"spawn.args",action(s,a){return r.includes(a.method)?cC(s,e):s}},{type:"spawn.after",action(s,a){var o;a.commands.includes(e)&&((o=a.spawned.stderr)==null||o.on("data",l=>{let c=/^([\s\S]+?):\s*(\d+)% \((\d+)\/(\d+)\)/.exec(l.toString("utf8"));c&&t({method:a.method,stage:I6(c[1]),progress:Xe(c[2]),processed:Xe(c[3]),total:Xe(c[4])})}))}}]}function I6(t){return String(t.toLowerCase().split(" ",1))||"unknown"}fe();function M6(t){let e=fC(t,["uid","gid"]);return{type:"spawn.options",action(r){return{...e,...r}}}}function D6({block:t,stdErr:e=!0,stdOut:r=!0}){if(t>0)return{type:"spawn.after",action(i,n){var c,u;let s;function a(){s&&clearTimeout(s),s=setTimeout(l,t)}function o(){var f,d;(f=n.spawned.stdout)==null||f.off("data",a),(d=n.spawned.stderr)==null||d.off("data",a),n.spawned.off("exit",o),n.spawned.off("close",o),s&&clearTimeout(s)}function l(){o(),n.kill(new yl(void 0,"timeout","block timeout reached"))}r&&((c=n.spawned.stdout)==null||c.on("data",a)),e&&((u=n.spawned.stderr)==null||u.on("data",a)),n.spawned.on("exit",o),n.spawned.on("close",o),a()}}}function O6(){return{type:"spawn.args",action(t){let e=[],r;function i(n){(r=r||[]).push(...n)}for(let n=0;nyi(a)&&vl(a)||a));break}e.push(s)}return r?[...e,"--",...r.map(String)]:e}}}fe();var L6=_6();function N6(t,e){var n;let r=new $6,i=mC(t&&(typeof t=="string"?{baseDir:t}:t)||{},e);if(!Iv(i.baseDir))throw new b6(i,"Cannot use simple-git on a directory that does not exist");return Array.isArray(i.config)&&r.add(E6(i.config)),r.add(x6(i.unsafe)),r.add(S6(i.completion)),i.abort&&r.add(y6(i.abort)),i.progress&&r.add(F6(i.progress)),i.timeout&&r.add(D6(i.timeout)),i.spawnOptions&&r.add(M6(i.spawnOptions)),r.add(O6()),r.add(tC(R6(!0))),i.errors&&r.add(tC(i.errors)),C6(r,i.binary,(n=i.unsafe)==null?void 0:n.allowUnsafeCustomBinary),new L6(i,r)}xl();var n2=N6;var Se=class extends fl{constructor(r){super(r);this.useDefaultWindowsGitPath=!1}async setGitInstance(r=!1){var i;if(await this.isGitInstalled()){let n=this.app.vault.adapter,s=n.getBasePath(),a=s;this.plugin.settings.basePath&&(await n.exists((0,Jn.normalizePath)(this.plugin.settings.basePath))?a=ze.join(s,this.plugin.settings.basePath):r||new Jn.Notice("ObsidianGit: Base path does not exist")),this.absoluteRepoPath=a,this.git=n2({baseDir:a,binary:this.plugin.localStorage.getGitPath()||(this.useDefaultWindowsGitPath?bd:void 0),config:["core.quotepath=off"],unsafe:{allowUnsafeCustomBinary:!0,allowUnsafeEditor:!0,allowUnsafeAskPass:!0,allowUnsafeConfigEnvCount:!0,allowUnsafeConfigPaths:!0,allowUnsafeCredentialHelper:!0,allowUnsafeGitProxy:!0,allowUnsafeGpgProgram:!0,allowUnsafeHooksPath:!0,allowUnsafeMergeDriver:!0,allowUnsafeSshCommand:!0,allowUnsafePager:!0}});let o=this.plugin.localStorage.getPATHPaths(),l=this.plugin.localStorage.getEnvVars(),c=this.plugin.settings.gitDir,u={...process.env};if(o.length>0){let _=o.join(":")+":"+u.PATH;u.PATH=_}c&&(u.GIT_DIR=c,u.GIT_WORK_TREE=a);for(let _ of l){let[b,S]=_.split("=");u[b]=S}let f="simple-git",d=",",p=((i=localStorage.debug)!=null?i:"").split(d);if(!p.includes(f)&&!p.includes(`-${f}`)&&(p.push(f),o2.default.enable(p.join(d))),await this.git.env(u).checkIsRepo()){let _=await this.git.revparse("--show-cdup"),b=(0,yu.resolve)(a+yu.sep+_);this.absoluteRepoPath=b,await this.git.cwd(b)}let g=ze.join(s,this.app.vault.configDir,"plugins","obsidian-git"),v=ze.join(g,ba);u.SSH_ASKPASS==null&&(u.SSH_ASKPASS=v),u.SSH_ASKPASS_REQUIRE="force",u.OBSIDIAN_GIT_CREDENTIALS_INPUT=ze.join(g,yd),u.SSH_ASKPASS==v&&this.askpass().catch(_=>this.plugin.displayError(_)),u.OBSIDIAN_GIT="1",this.git=this.git.env(u)}}getRelativeVaultPath(r){let n=this.app.vault.adapter.getBasePath(),s=ze.join(this.absoluteRepoPath,r),a=ze.relative(n,s);return Jn.Platform.isWin&&(a=a.replace(/\\/g,"/")),a}getRelativeRepoPath(r,i=!0){if(i){let s=this.plugin.app.vault.adapter.getBasePath(),a=this.absoluteRepoPath,o=ze.join(s,r),l=ze.relative(a,o);return Jn.Platform.isWin&&(l=l.replace(/\\/g,"/")),l}return r}get absPluginConfigPath(){let i=this.app.vault.adapter.getBasePath();return ze.join(i,this.app.vault.configDir,"plugins","obsidian-git")}get relPluginConfigPath(){return ze.join(this.app.vault.configDir,"plugins","obsidian-git")}async askpass(){let r=this.app.vault.adapter,i=this.app.vault.configDir+"/plugins/obsidian-git/";await this.addAskPassScriptToExclude(),await ei.writeFile(ze.join(this.absPluginConfigPath,ba),Ek),await ei.chmod(ze.join(this.absPluginConfigPath,ba),493),this.watchAbortController=new AbortController;let{signal:n}=this.watchAbortController;try{let s=ei.watch(this.absPluginConfigPath,{signal:n});for await(let a of s){if(a.filename!=yd)continue;let o=i+yd;if(await new Promise(d=>window.setTimeout(d,200)),!await r.exists(o))continue;let l=await r.read(o),c;l.length>60&&(c=new Jn.Notice(l,999999));let u=!0;l.contains("Username for")&&(u=!1);let f=await new et(this.plugin,{allowEmpty:!0,obscure:u,placeholder:l.length>60?"Enter a response to the message.":l}).openAndGetResult();c==null||c.hide(),await r.exists(o)&&await r.write(`${o}.response`,f!=null?f:"")}}catch(s){this.plugin.displayError(s),await ei.rm(ze.join(this.absPluginConfigPath,ba),{force:!0}),await ei.rm(ze.join(this.absPluginConfigPath,`${ba}.response`),{force:!0}),await new Promise(a=>window.setTimeout(a,5e3)),this.plugin.log("Retry watch for ask pass"),await this.askpass()}}async addAskPassScriptToExclude(){try{if(!await this.git.checkIsRepo())return;let r=await this.git.revparse(["--path-format=absolute","--git-path","info/exclude"]),i=ze.join(this.app.vault.configDir,"plugins","obsidian-git",ba),n=this.getRelativeRepoPath(i,!0);(await ei.readFile(r,"utf-8")).split(` +`).some(l=>l.contains(n))||await ei.appendFile(r,n+` +`)}catch(r){console.error("Error while adding askpass script to exclude file:",r)}}unload(){var r;(r=this.watchAbortController)==null||r.abort()}async status(r){let i=r==null?void 0:r.path;this.plugin.setPluginState({gitAction:1});let n=await this.git.status(i!=null?["--",i]:[]);this.plugin.setPluginState({gitAction:0});let s=n.files.map(a=>{let o=this.formatPath(a);return{path:o.path,from:o.from,index:a.index==="?"?"U":a.index,workingDir:a.working_dir==="?"?"U":a.working_dir,vaultPath:this.getRelativeVaultPath(o.path)}});return{all:s,changed:s.filter(a=>a.workingDir!==" "),staged:s.filter(a=>a.index!==" "&&a.index!="U"),conflicted:n.conflicted.map(a=>this.formatPath({path:a}).path)}}async submoduleAwareHeadRevisonInContainingDirectory(r){let i=this.getRelativeRepoPath(r),s=["-C",ze.dirname(i),"rev-parse","HEAD"],a=this.git.raw(s);return a.catch(o=>console.warn("obsidian-git: rev-parse error:",o)),(await a).trim()}async getSubmodulePaths(){return new Promise(r=>{this.git.outputHandler((i,n,s,a)=>{if(!(a.contains("submodule")&&a.contains("foreach")))return;let o="",l=this.app.vault.adapter.getBasePath()+(this.plugin.settings.basePath?"/"+this.plugin.settings.basePath:"");n.on("data",c=>{o+=c.toString("utf8")}),n.on("end",()=>{let u=o.split(` +`).map(f=>{let d=f.match(/'([^']*)'/);if(d!=null)return l+"/"+d[1]+yu.sep}).filter(f=>!!f);u.reverse(),r(u)})}),this.git.subModule(["foreach","--recursive",""]).then(()=>{this.git.outputHandler(()=>{})},i=>this.plugin.displayError(i))})}formatPath(r){function i(n){if(n!=null)return n.startsWith('"')&&n.endsWith('"')?n.substring(1,n.length-1):n}return r.from!=null?{from:i(r.from),path:i(r.path)}:{path:i(r.path)}}async blame(r,i,n){if(r=this.getRelativeRepoPath(r),!await this.isTracked(r))return"untracked";let s=await this.getSubmoduleOfFile(r),a=s?["-C",s.submodule]:[],o=s?s.relativeFilepath:r;a.push("blame","--porcelain"),n&&a.push("-w");let l=`-C${_d}`;switch(i){case"inactive":break;case"same-commit":a.push("-C",l);break;case"all-commits":a.push("-C","-C",l);break;default:Os(i)}a.push("--",o);let c=await this.git.raw(a);return B6(c)}async isTracked(r){let i=await this.getSubmoduleOfFile(r),n=i?["-C",i.submodule]:[],s=i?i.relativeFilepath:r;return n.push("ls-files","--",s),this.git.raw(n).then(a=>a.trim()!=="")}async commitAll({message:r}){if(this.plugin.settings.updateSubmodules){this.plugin.setPluginState({gitAction:4});let n=await this.getSubmodulePaths();for(let s of n)await this.git.cwd({path:s,root:!1}).add("-A"),await this.git.cwd({path:s,root:!1}).commit(await this.formatCommitMessage(r))}this.plugin.setPluginState({gitAction:3}),await this.git.add("-A"),this.plugin.setPluginState({gitAction:4});let i=await this.git.commit(await this.formatCommitMessage(r));return this.app.workspace.trigger("obsidian-git:head-change"),i.summary.changes}async commit({message:r,amend:i}){this.plugin.setPluginState({gitAction:4});let n=(await this.git.commit(await this.formatCommitMessage(r),i?["--amend"]:[])).summary.changes;return this.app.workspace.trigger("obsidian-git:head-change"),this.plugin.setPluginState({gitAction:0}),n}async stage(r,i){this.plugin.setPluginState({gitAction:3}),r=this.getRelativeRepoPath(r,i),await this.git.add(["--",r]),this.plugin.setPluginState({gitAction:0})}async stageAll({dir:r}){this.plugin.setPluginState({gitAction:3}),await this.git.add(r!=null?r:"-A"),this.plugin.setPluginState({gitAction:0})}async unstageAll({dir:r}){this.plugin.setPluginState({gitAction:3}),await this.git.reset(r!=null?["--",r]:[]),this.plugin.setPluginState({gitAction:0})}async unstage(r,i){this.plugin.setPluginState({gitAction:3}),r=this.getRelativeRepoPath(r,i),await this.git.reset(["--",r]),this.plugin.setPluginState({gitAction:0})}async discard(r){this.plugin.setPluginState({gitAction:3}),await this.isTracked(r)&&await this.git.checkout(["--",r]),this.plugin.setPluginState({gitAction:0})}async applyPatch(r){let i=ze.join(this.relPluginConfigPath,"patch");await this.app.vault.adapter.write(i,r),await this.git.applyPatch(i,{"--cached":null,"--unidiff-zero":null,"--whitespace":"nowarn"}),await this.app.vault.adapter.remove(i)}async getUntrackedPaths(r){let i=r==null?void 0:r.path;this.plugin.setPluginState({gitAction:1});let n=[];i!=null&&n.push("--",i);let s=await this.git.clean(Aa.RECURSIVE+Aa.DRY_RUN,n);return this.plugin.setPluginState({gitAction:0}),s.paths}async hashObject(r){r=this.getRelativeRepoPath(r);let i=await this.getSubmoduleOfFile(r),n=i?["-C",i.submodule]:[],s=i?i.relativeFilepath:r;return n.push("hash-object","--",s),this.git.raw(n)}async discardAll({dir:r}){return this.discard(r!=null?r:".")}async pull(){this.plugin.setPluginState({gitAction:2});try{this.plugin.settings.updateSubmodules&&await this.git.subModule(["update","--remote","--merge","--recursive"]);let r=await this.branchInfo(),i=await this.git.revparse([r.current]);if(!r.tracking&&this.plugin.settings.updateSubmodules){this.plugin.log("No tracking branch found. Ignoring pull of main repo and updating submodules only.");return}await this.git.fetch();let n=await this.git.revparse([r.tracking]);if(i!==n){if(this.plugin.settings.syncMethod==="merge"||this.plugin.settings.syncMethod==="rebase")try{let o=[r.tracking];switch(this.plugin.settings.mergeStrategy!=="none"&&o.push(`--strategy-option=${this.plugin.settings.mergeStrategy}`),this.plugin.settings.syncMethod){case"merge":await this.git.merge(o);break;case"rebase":await this.git.rebase(o)}}catch(o){this.plugin.displayError(`Pull failed (${this.plugin.settings.syncMethod}): ${"message"in o?o.message:o}`);return}else if(this.plugin.settings.syncMethod==="reset")try{await this.git.raw(["update-ref",`refs/heads/${r.current}`,n]),await this.unstageAll({})}catch(o){this.plugin.displayError(`Sync failed (${this.plugin.settings.syncMethod}): ${"message"in o?o.message:o}`)}this.app.workspace.trigger("obsidian-git:head-change");let s=await this.git.revparse([r.current]);return(await this.git.diff([`${i}..${s}`,"--name-only"])).split(/\r\n|\r|\n/).filter(o=>o.length>0).map(o=>({path:o,workingDir:"P",vaultPath:this.getRelativeVaultPath(o)}))}else return[]}catch(r){this.convertErrors(r)}}async push(){this.plugin.setPluginState({gitAction:5});try{if(this.plugin.settings.updateSubmodules){let a=await this.git.subModule(["foreach","--recursive",`tracking=$(git for-each-ref --format='%(upstream:short)' "$(git symbolic-ref -q HEAD)"); echo $tracking; if [ ! -z "$(git diff --shortstat $tracking)" ]; then git push; fi`]);console.log(a)}let r=await this.git.status(),i=r.tracking,n=r.current;if(!i&&this.plugin.settings.updateSubmodules){this.plugin.log("No tracking branch found. Ignoring push of main repo and updating submodules only.");return}let s=null;return i&&(s=(await this.git.diffSummary([n,i,"--"])).changed),await this.git.push(),s}catch(r){this.convertErrors(r)}}async getUnpushedCommits(){let r=await this.git.status(),i=r.tracking,n=r.current;if(i==null||n==null)return 0;let[s]=Qn(i);return(await this.getRemoteBranches(s)).includes(i)?(await this.git.diffSummary([n,i,"--"])).changed:(this.plugin.log(`Tracking branch ${i} does not exist on remote ${s}.`),0)}async canPush(){if(this.plugin.settings.updateSubmodules===!0)return!0;let r=await this.git.status(),i=r.tracking,n=r.current;return i?(await this.git.diffSummary([n,i,"--"])).changed!==0:!1}async checkRequirements(){return await this.isGitInstalled()?await this.git.checkIsRepo()?"valid":"missing-repo":"missing-git"}async branchInfo(){let r=await this.git.status(),i=await this.git.branch(["--no-color"]);return{current:r.current||void 0,tracking:r.tracking||void 0,branches:i.all}}async getRemoteUrl(r){try{return await this.git.remote(["get-url",r])||void 0}catch(i){if(String(i).contains(r))return;throw i}}async log(r,i=!0,n,s){let a;r&&(a=this.getRelativeRepoPath(r,i));let o={file:a,maxCount:n,"--diff-merges":"first-parent","--name-status":null};return s&&(o[s]=null),(await this.git.log(o)).all.map(c=>{var u,f,d,h;return{...c,author:{name:c.author_name,email:c.author_email},refs:c.refs.split(", ").filter(p=>p.length>0),diff:{...c.diff,files:(f=(u=c.diff)==null?void 0:u.files.map(p=>({...p,status:p.status,path:p.file,hash:c.hash,vaultPath:this.getRelativeVaultPath(p.file),fromPath:p.from,fromVaultPath:p.from!=null?this.getRelativeVaultPath(p.from):void 0,binary:p.binary})))!=null?f:[]},fileName:(h=(d=c.diff)==null?void 0:d.files.first())==null?void 0:h.file}})}async show(r,i,n=!0){let s=this.getRelativeRepoPath(i,n);return this.git.show([r+":"+s])}async getLocalBranchUpstream(r){try{let n=(await this.git.raw(["rev-parse","--abbrev-ref",`${r}@{upstream}`])).trim();return n.length>0?n:void 0}catch(i){return}}getAvailableLocalBranchName(r,i,n){let s=r;if(!n.includes(s))return s;let a=`${r}-${i}`,o=a,l=0;for(;n.includes(o);)l+=1,o=`${a}-${l}`;return o}async checkout(r,i){if(i){let n=`${i}/${r}`,s=await this.branchInfo();if(s.branches.includes(r)&&await this.getLocalBranchUpstream(r)===n)await this.git.checkout(r);else{let l=this.getAvailableLocalBranchName(r,i,s.branches);await this.git.checkout(["-b",l,n])}}else await this.git.checkout(r);if(this.plugin.settings.submoduleRecurseCheckout){let n=await this.getSubmodulePaths();for(let s of n){let a=await this.git.cwd({path:s,root:!1}).branch();Object.keys(a.branches).includes(r)&&await this.git.cwd({path:s,root:!1}).checkout(r)}}}async createBranch(r){await this.git.checkout(["-b",r])}async deleteBranch(r,i){await this.git.branch([i?"-D":"-d",r])}async branchIsMerged(r){return!(await this.git.branch(["--no-merged"])).all.contains(r)}async init(){await this.git.init(!1)}async clone(r,i,n){await this.git.clone(r,ze.join(this.app.vault.adapter.getBasePath(),i),n?["--depth",`${n}`]:[]),await this.setGitInstance()}async setConfig(r,i){i==null?await this.git.raw(["config","--local","--unset",r]):await this.git.addConfig(r,i)}async getConfig(r,i="local"){var s;return(s=(await this.git.getConfig(r.toLowerCase(),i=="all"?void 0:i)).value)!=null?s:void 0}async fetch(r){await this.git.fetch(r!=null?[r]:[])}async setRemote(r,i){(await this.getRemotes()).includes(r)?await this.git.remote(["set-url",r,i]):await this.git.remote(["add",r,i])}async getRemoteBranches(r){let i=await this.git.branch(["-r","--list",`${r}*`]),n=[];for(let s in i.branches)n.push(i.branches[s].name);return n}async getRemotes(){let r=await this.git.remote([]);return r?r.trim().split(` +`):[]}async removeRemote(r){await this.git.removeRemote(r)}async updateUpstreamBranch(r){try{await this.git.branch(["--set-upstream-to",r])}catch(i){try{await this.git.branch(["--set-upstream",r])}catch(n){let[s,a]=Qn(r),o=await this.branchInfo();await this.git.push(["--set-upstream",s,`${o.current}:${a}`])}}}updateGitPath(r){return this.setGitInstance()}updateBasePath(r){return this.setGitInstance(!0)}async getDiffString(r,i=!1,n){return i?await this.git.diff(["--cached","--",r]):n?await this.git.show([`${n}`,"--",r]):await this.git.diff(["--",r])}async diff(r,i,n){return await this.git.diff([`${i}..${n}`,"--",r])}async rawCommand(r){let i=r.split(" ");return await this.git.raw(i[0],...i.slice(1))}async getSubmoduleOfFile(r){if(!await this.app.vault.adapter.exists(ze.dirname(r)))return;let i=await this.git.raw(["-C",ze.dirname(r),"rev-parse","--show-toplevel"],l=>l&&console.warn("get-submodule-of-file",l==null?void 0:l.message));if(i=i.trim(),(await this.git.raw(["-C",ze.dirname(r),"rev-parse","--show-superproject-working-tree"],l=>l&&console.warn("get-submodule-of-file",l==null?void 0:l.message))).trim()==="")return;let a=this.app.vault.adapter.getFullPath(ze.normalize(r)),o=ze.relative(i,a);return{submodule:i,relativeFilepath:o}}async getLastCommitTime(){try{let r=await this.git.log({n:1});if(r!=null&&r.latest!=null)return new Date(r.latest.date)}catch(r){if(r instanceof Nr){if(r.message.contains("does not have any commits yet"))return}else throw r}}async isGitInstalled(){let r=this.plugin.localStorage.getGitPath(),i=await fu(r||"git",["--version"],{});if(i.error)if(Jn.Platform.isWin&&!r){this.plugin.log(`Git not found in PATH. Checking standard installation path(${bd}) of Git for Windows.`);let n=await fu(bd,["--version"]);if(n.error)return console.error(n.error),!1;this.useDefaultWindowsGitPath=!0}else return console.error(i.error),!1;else this.useDefaultWindowsGitPath=!1;return!0}convertErrors(r){if(r instanceof Nr){let i=String(r.message);if(i.contains("Could not resolve host")||i.contains("Unable to resolve host")||i.contains("Unable to open connection")||i.match(/ssh: connect to host .*? port .*?: Operation timed out/)!=null||i.match(/ssh: connect to host .*? port .*?: Network is unreachable/)!=null||i.match(/ssh: connect to host .*? port .*?: Undefined error: 0/)!=null)throw new al(i)}throw r}async isFileTrackedByLFS(r){try{return(await this.git.raw(["check-attr","filter",r])).includes("filter: lfs")}catch(i){let n=i instanceof Error?i.message:String(i);return this.plugin.displayError(`Error checking LFS status: ${n}`),!1}}},l2={hash:"000000",isZeroCommit:!0,summary:""};function B6(t){let r=t.replace(`\r +`,` +`).split(` +`),i={commits:new Map,hashPerLine:[void 0],originalFileLineNrPerLine:[void 0],finalFileLineNrPerLine:[void 0],groupSizePerStartingLine:new Map},n=1;for(let s=0;s=4&&r.groupSizePerStartingLine.set(e,parseInt(t[3])),parseInt(t[2])!==e)throw Error(`git-blame output is out of order: ${e} vs ${t[2]}`);return i}function U6(t,e,r){let i=t[0],n=t.slice(1).join(" "),s=e.hashPerLine[r],a=e.commits.get(s)||{hash:s,author:{},committer:{},previous:{}};switch(i){case"summary":a.summary=n;break;case"author":a.author.name=n;break;case"author-mail":a.author.email=a2(n);break;case"author-time":a.author.epochSeconds=parseInt(n);break;case"author-tz":a.author.tz=n;break;case"committer":a.committer.name=n;break;case"committer-mail":a.committer.email=a2(n);break;case"committer-time":a.committer.epochSeconds=parseInt(n);break;case"committer-tz":a.committer.tz=n;break;case"previous":a.previous.commitHash=n;break;case"filename":a.previous.filename=n;break}e.commits.set(s,a)}function G6(t){if(t.summary===void 0)throw Error(`Summary not provided for commit: ${t.hash}`);Jv(t.author)&&(t.author=void 0),Jv(t.committer)&&(t.committer=void 0),Jv(t.previous)&&(t.previous=void 0),t.isZeroCommit=!!t.hash.match(/^0*$/)}function Jv(t){return!t||Object.keys(t).length===0}function s2(t){return t.length>0&&t[0].trim()===t[0]}function a2(t){let e=t.startsWith("<")?t.substring(1):t;return e.endsWith(">")?e.substring(0,e.length-1):e}m();var M2=require("@codemirror/state");m();var ew=class{constructor(){this.eventsPerFilepath=new Map;this.startRemoveStalesSubscribersInterval()}ifFilepathDefinedTransformSubscribers(e,r){if(e)return this.ensureInitialized(e),r(this.eventsPerFilepath.get(e))}forEachSubscriber(e){this.eventsPerFilepath.forEach(r=>r.forEach(e))}ensureInitialized(e){this.eventsPerFilepath.get(e)||this.eventsPerFilepath.set(e,new Set)}startRemoveStalesSubscribersInterval(){this.removeStalesSubscribersTimer=window.setInterval(()=>this==null?void 0:this.forEachSubscriber(e=>e==null?void 0:e.removeIfStale()),6e4)}clear(){window.clearInterval(this.removeStalesSubscribersTimer),this.eventsPerFilepath.clear()}},es=new ew;m();var Jd=require("@codemirror/state"),c2=Ht(tw(),1);function u2(t,e,r){if(!(t===void 0||e===void 0||r===void 0))return`head${t}-obj${e}-path${r}`}var f2=Jd.StateEffect.define();function d2(t,e,r){return r.update({effects:f2.of({key:t,la:e,lineOffsetsFromUnsavedChanges:new Map})})}var Sl=Jd.StateField.define({create:t=>{},update:(t,e)=>{for(let r of e.effects)if(r.is(f2))return r.value;return j6(e,t)},compare:(t,e)=>(t==null?void 0:t.key)===(e==null?void 0:e.key)});function eh(t){var s;let e=c2.sha256.create();if(!t)return e;let{la:r,key:i,lineOffsetsFromUnsavedChanges:n}=t;e.update(r==="untracked"?"t":"f"),e.update(i);for(let[a,o]of(s=n.entries())!=null?s:[])e.update([a,o]);return e}var xu={get:void 0,save:void 0};function h2(t,e){xu.get=t,xu.save=e}function th(t){var e,r;return(r=(e=Eu(t.coloringMaxAge))==null?void 0:e.asDays())!=null?r:Eu(ht.lineAuthor.coloringMaxAge).asDays()}function j6(t,e){if(e)return t.changes.empty||t.changes.iterChanges((r,i,n,s)=>{var p;let a=t.startState.doc,{newDoc:o}=t,l=a.lineAt(r).number,c=a.lineAt(i).number,u=o.lineAt(n).number,f=o.lineAt(s).number,d=c-l+1,h=f-u+1;for(let g=u;g<=f;g++){let v=(p=e.lineOffsetsFromUnsavedChanges.get(g))!=null?p:0,_=f===g,b=h-d;_&&(v+=b),e.lineOffsetsFromUnsavedChanges.set(g,v)}}),e}m();function p2(){kl=void 0,rw=[],rh=0,nh.clear(),sh.clear(),Al.clear()}var kl,ih=()=>kl;function m2(t,e){var n;let r=e.length;if(r<((n=kl==null?void 0:kl.length)!=null?n:0))return;kl={gutter:t,length:r,text:e};let i=jt.plugin.localStorage.getGutterSpacingFallbackLength();r!==i&&jt.plugin.localStorage.setGutterSpacingFallbackLength(r)}var rw=[],V6=15,rh=0;function g2(t){rw[rh]=t,rh=(rh+1)%V6}function v2(){return eA(rw)}var nh=new Map,sh=new Map,Al=new Set;m();var $2=require("@codemirror/state"),F2=require("@codemirror/view");m();var aw=require("@codemirror/view"),A2=Ht(tw(),1),Cl=require("obsidian");m();m();var ah={x:-10,y:-10};function w2(){ah.x===-10&&window.addEventListener("mousedown",t=>{ah.x=t.clientX,ah.y=t.clientY})}function _2(){for(let t of Al)if(z6(t,ah))return t}function z6(t,e){let{x:r,y:i,width:n,height:s}=t.getBoundingClientRect();return r<=e.x&&e.x<=r+n&&i<=e.y&&e.y<=i+s}var b2="data-commit";function y2(t,e,r){if(e.hasFocus())return;let i=_2();if(!i)return;let n=q6(i);n&&(!n.isZeroCommit&&!n.isWaitingGutter&&W6(n,t),iw("showCommitHash",t),iw("authorDisplay",t),iw("dateTimeFormatOptions",t))}function W6(t,e){e.addItem(r=>r.setTitle("Copy commit hash").setIcon("copy").setSection("obs-git-line-author-copy").onClick(i=>navigator.clipboard.writeText(t.hash)))}function iw(t,e){var l,c;let r,i,n=jt.plugin.settings.lineAuthor,s=n[t],a=typeof s=="boolean"?s:s!=="hide",o=ht.lineAuthor[t];if(t==="showCommitHash")r="Show commit hash",i=s;else if(t==="authorDisplay"){let u=(l=n.lastShownAuthorDisplay)!=null?l:o;r="Show author "+(a?s:u),i=a?"hide":u}else if(t==="dateTimeFormatOptions"){let u=(c=n.lastShownDateTimeFormatOptions)!=null?c:o;r="Show "+(a?s:u),r+=r.contains("date")?"":" date",i=a?"hide":u}else Os(t);e.addItem(u=>u.setTitle(r).setSection("obs-git-line-author-configure").setChecked(a).onClick(f=>{var d,h;return(h=(d=jt.plugin)==null?void 0:d.settingsTab)==null?void 0:h.lineAuthorSettingHandler(t,i)}))}function x2(t,e,r){r.setAttr(b2,JSON.stringify({hash:t.hash,isZeroCommit:t.isZeroCommit,isWaitingGutter:e}))}function q6(t){let e=t.getAttr(b2);return e?JSON.parse(e):void 0}m();function lh(t,e){return t==="oldest"?oh(0,!1,e).color:oh(void 0,!0,e).color}function oh(t,e,r){let i=th(r),n=Date.now()/1e3,s=t!=null?t:0,o=(e?0:n-s)/60/60/24,l=Math.pow(Math.clamp(o/i,0,1),1/2.3),c=Y6(),u=r.colorNew,f=r.colorOld,d=c?.4:1,h=nw(u.r,f.r,l)*d,p=nw(u.g,f.g,l)*d,g=nw(u.b,f.b,l)*d;return{color:`rgba(${h},${p},${g},${c?.75:.25})`,daysSinceCommit:o}}function nw(t,e,r){return t+(e-t)*r}function Y6(){var t;return((t=window.app)==null?void 0:t.getTheme())==="obsidian"}function E2(t){activeDocument.body.style.setProperty("--obs-git-gutter-text",t.textColorCss)}m();function S2(t,e,r){let i;for(let n=e;n<=r;n++){let s=t.hashPerLine[n],a=t.commits.get(s);(!i||a.isZeroCommit||X6(a,i))&&(i=a)}return i}function X6(t,e){var n,s,a,o;let r=(s=(n=t.author)==null?void 0:n.epochSeconds)!=null?s:0,i=(o=(a=e.author)==null?void 0:a.epochSeconds)!=null?o:0;return r>i}var C2=require("node:util");var k2="-",Z6="+",K6=3,Q6="*",J6=/\S/g,e5="%",Tl=class t extends aw.GutterMarker{constructor(r){super();this.text=r}eq(r){return r instanceof t&&this.text===r.text}toDOM(){return activeDocument.createTextNode(this.text)}destroy(r){}},sw=class extends aw.GutterMarker{constructor(r,i,n,s,a,o){super();this.lineAuthoring=r;this.startLine=i;this.endLine=n;this.key=s;this.settings=a;this.options=o;this.point=!1;this.elementClass="obs-git-blame-gutter"}eq(r){return this.key===(r==null?void 0:r.key)&&this.startLine===(r==null?void 0:r.startLine)&&this.endLine===(r==null?void 0:r.endLine)&&(this==null?void 0:this.options)===(r==null?void 0:r.options)}toDOM(){var r;return this.precomputedDomProvider=(r=this.precomputedDomProvider)!=null?r:this.computeDom(),this.precomputedDomProvider()}destroy(r){r&&(activeDocument.body.contains(r)||Al.delete(r))}computeDom(){let r=S2(this.lineAuthoring,this.startLine,this.endLine),i=r.isZeroCommit?"":this.renderNonZeroCommit(r);return!r.isZeroCommit&&this.options!=="waiting-for-result"?m2(this,i):i=this.adaptTextForFakeCommit(r,i,this.options),this.createHtmlNode(r,i,this.options==="waiting-for-result")}createHtmlNode(r,i,n){var c,u,f,d,h,p;let s=window.createDiv();s.setText(i);let{color:a,daysSinceCommit:o}=oh((c=r==null?void 0:r.author)==null?void 0:c.epochSeconds,r==null?void 0:r.isZeroCommit,this.settings);s.style.backgroundColor=a,s.setAttribute("data-author",(f=(u=r==null?void 0:r.author)==null?void 0:u.name)!=null?f:""),s.setAttribute("data-author-email",(h=(d=r==null?void 0:r.author)==null?void 0:d.email)!=null?h:""),(0,Cl.setTooltip)(s,(p=r==null?void 0:r.summary)!=null?p:""),x2(r,n,s);function l(){let g=s.cloneNode(!0);return Al.add(g),n||g2(o),g}return l}renderNonZeroCommit(r){let i=this.settings.showCommitHash?this.renderHash(r):"",n=this.settings.authorDisplay==="hide"?"":`${this.renderAuthorName(r,this.settings.authorDisplay)}`,s=this.settings.dateTimeFormatOptions==="hide"?"":`${this.renderAuthoringDate(r,this.settings.dateTimeFormatOptions,this.settings.dateTimeFormatCustomString,this.settings.dateTimeTimezone)}`;return[i,n,s].filter(o=>o.length>=1).join(" ")}renderHash(r){return r.hash.substring(0,6)}renderAuthorName(r,i){var o,l,c,u;let n=(l=(o=r==null?void 0:r.author)==null?void 0:o.name)!=null?l:"",s=n.split(" ").filter(f=>f.length>=1),a;switch(i){case"initials":a=s.map(f=>f[0].toUpperCase()).join("");break;case"first name":a=(c=s.first())!=null?c:k2;break;case"last name":a=(u=s.last())!=null?u:k2;break;case"full":a=n;break;default:return Os(i)}return(0,C2.isDeepStrictEqual)(r==null?void 0:r.author,r==null?void 0:r.committer)||(a=a+Q6),a}renderAuthoringDate(r,i,n,s){var c;let a="?";if(((c=r==null?void 0:r.author)==null?void 0:c.epochSeconds)===void 0)return a;let o;switch(i){case"date":o=wd;break;case"datetime":o=Hg;break;case"custom":o=n;break;case"natural language":o=u=>{let f=u.diff((0,Cl.moment)());return Cl.moment.duration(f).humanize(!0)};break;default:return Os(i)}let l=Cl.moment.unix(r.author.epochSeconds);switch(s){case"viewer-local":break;case"author-local":l=l.utcOffset(r.author.tz),typeof o=="string"&&(o+=" Z");break;case"utc0000":l=l.utc(),typeof o=="string"&&(o+="[Z]");break;default:return Os(s)}return typeof o=="string"?l.format(o):o(l)}adaptTextForFakeCommit(r,i,n){var l,c,u;let s=(c=(l=ih())==null?void 0:l.text)!=null?c:i,a=n!=="waiting-for-result"&&r.isZeroCommit?Z6:e5;i=s.replace(J6,a);let o=(u=jt.plugin.localStorage.getGutterSpacingFallbackLength())!=null?u:i.length;if(i=tA(i,o,a),n!=="waiting-for-result"&&r.isZeroCommit){let f=Math.min(o,K6);i=rA(i,o-f)}return i}};function Pa(t,e,r,i,n,s){let a=A2.sha256.create();a.update(JSON.stringify(n)),a.update(`s${e}-e${r}-k${i}-o${s}`);let o=a.hex(),l=nh.get(o);if(l)return l;let c=new sw(t,e,r,i,n,s);return nh.set(o,c),c}m();var T2=require("obsidian");function ow(){let t=jt.plugin.localStorage.getGutterSpacingFallbackLength();return new Tl(Array(t).fill("-").join(""))}function lw(t){let{lineAuthoring:e,ageForInitialRender:r}=t5(t);return Pa(e,1,1,"initialGutter"+r,t,"waiting-for-result")}function t5(t){var s;let e=(s=v2())!=null?s:th(t)*.25,r=(0,T2.moment)().add(-e,"days"),i={name:"",epochSeconds:Jk(r),tz:"+0000"},n={hash:"waiting-for-result",author:i,committer:i,isZeroCommit:!1};return{lineAuthoring:{hashPerLine:[void 0,"waiting-for-result"],commits:new Map([["waiting-for-result",n]])},ageForInitialRender:e}}m();function P2(t,e){return Pa({hashPerLine:[void 0,"000000"],commits:new Map([["000000",l2]])},1,1,t,e)}var cw=new Tl(""),I2=(0,F2.gutter)({class:"line-author-gutter-container",markers(t){let e=t.state.field(Sl,!1);return r5(t,e)},lineMarkerChange(t){let e=eh(t.state.field(Sl));return eh(t.startState.field(Sl))!==e},renderEmptyElements:!0,initialSpacer:t=>(R2(t),ow()),updateSpacer:(t,e)=>{var r,i;return R2(e.view),(i=(r=ih())==null?void 0:r.gutter)!=null?i:ow()}});function r5(t,e){let r=eh(e),i=t.state.doc,n=new Map;for(let u=1;u<=i.lines;u++){let f=i.line(u).from,d=t.lineBlockAt(f).to;n.set(u,[f,d]),r.update([f,d,0])}let s=xu.get();r.update("s"+Object.values(xu).join(","));let a=r.hex(),o=sh.get(a);if(o)return o;let{result:l,allowCache:c}=i5(i,n,s,e);return c&&sh.set(a,l),l}function i5(t,e,r,i){let n=!0,s=t.lines,a=[];function o(f,d,h){return a.push(h.range(f,d))}let l=n5(s,i),c=t.length===0,u=t.iterLines(s,s+1).next().value==="";for(let f=1;f<=s;f++){let[d,h]=e.get(f),p=t.lineAt(h).number;if(c){o(d,h,cw);continue}if(f===s&&u){o(d,h,cw);continue}if(i===void 0){o(d,h,lw(r)),n=!1;continue}let{key:g,la:v}=i;if(v==="untracked"){o(d,h,P2(v,r));continue}let _=v.hashPerLine.length-1,b=l[f],S=l[p];if(S&&S>_&&o(d,h,cw),b!==void 0&&nv(1,b,_)&&S!==void 0&&nv(1,S,_)){o(d,h,Pa(v,b,S,g,r));continue}if(_<1){o(d,h,lw(r)),n=!1;continue}let k=Math.clamp(b!=null?b:f,1,_),E=Math.clamp(S!=null?S:p,1,_);o(d,h,Pa(v,k,E,g+"computing",r,"waiting-for-result"))}return{result:$2.RangeSet.of(a,!0),allowCache:n}}function n5(t,e){if(!(e!=null&&e.lineOffsetsFromUnsavedChanges))return Array.from(new Array(t+1),n=>n);let r=[void 0],i=0;for(let n=1;n<=t;n++){let s=e.lineOffsetsFromUnsavedChanges.get(n);i+=s!=null?s:0,r[n]=s===void 0?n-i:void 0}return r}function R2(t){t.dom.querySelectorAll(".cm-gutters").forEach(r=>{r!=null&&r.style&&(r.style.marginLeft||(r.style.marginLeft="unset"))})}var ch=class{constructor(e){this.plugin=e;this.lineAuthorings=new Map}async trackChanged(e){return this.trackChangedHelper(e).catch(r=>(console.warn("Git: Error in trackChanged."+r),Promise.reject(r)))}async trackChangedHelper(e){if(e){if(e.path===void 0){console.warn("Git: Attempted to track change of undefined filepath. Unforeseen situation.");return}return this.computeLineAuthorInfo(e.path)}}destroy(){this.lineAuthorings.clear(),p2()}async computeLineAuthorInfo(e){let r=this.plugin.editorIntegration.lineAuthoringFeature.isAvailableOnCurrentPlatform().gitManager,i=await r.submoduleAwareHeadRevisonInContainingDirectory(e),n=await r.hashObject(e),s=u2(i,n,e);if(s!==void 0){if(!this.lineAuthorings.has(s)){let a=await r.blame(e,this.plugin.settings.lineAuthor.followMovement,this.plugin.settings.lineAuthor.ignoreWhitespace);this.lineAuthorings.set(s,a)}this.notifyComputationResultToSubscribers(e,s)}}notifyComputationResultToSubscribers(e,r){es.ifFilepathDefinedTransformSubscribers(e,i=>i.forEach(n=>n.notifyLineAuthoring(r,this.lineAuthorings.get(r))))}},D2=M2.Prec.high([Sl,I2]);var O2="https://momentjs.com/docs/#/parsing/string-format/",s5="https://publish.obsidian.md/git-doc/Line+Authoring",uh=class extends U.PluginSettingTab{constructor(r,i){super(r,i);this.plugin=i;this.lineAuthorColorSettings=new Map;this.icon="git-pull-request"}get settings(){return this.plugin.settings}display(){let{containerEl:r}=this,i=this.plugin,n;i.settings.differentIntervalCommitAndPush?n="commit":n="commit-and-sync";let s=i.gitReady;r.empty(),s||(r.createEl("p",{text:"Git is not ready. When all settings are correct you can configure commit-sync, etc."}),r.createEl("br"));let a;if(s){new U.Setting(r).setName("Automatic").setHeading(),new U.Setting(r).setName("Split timers for automatic commit and sync").setDesc("Enable to use one interval for commit and another for sync.").addToggle(f=>f.setValue(i.settings.differentIntervalCommitAndPush).onChange(async d=>{i.settings.differentIntervalCommitAndPush=d,await i.saveSettings(),i.automaticsManager.reload("commit","push"),this.refreshDisplayWithDelay()})),new U.Setting(r).setName(`Auto ${n} interval (minutes)`).setDesc(`${i.settings.differentIntervalCommitAndPush?"Commit":"Commit and sync"} changes every X minutes. Set to 0 (default) to disable. (See below setting for further configuration!)`).addText(f=>{f.inputEl.type="number",this.setNonDefaultValue({text:f,settingsProperty:"autoSaveInterval"}),f.setPlaceholder(String(ht.autoSaveInterval)),f.onChange(async d=>{d!==""?i.settings.autoSaveInterval=Number(d):i.settings.autoSaveInterval=ht.autoSaveInterval,await i.saveSettings(),i.automaticsManager.reload("commit")})}),a=new U.Setting(r).setName(`Auto ${n} after stopping file edits`).setDesc(`Requires the ${n} interval not to be 0. + If turned on, do auto ${n} every ${iA(i.settings.autoSaveInterval)} after stopping file edits. + This also prevents auto ${n} while editing a file. If turned off, it's independent from the last file edit.`).addToggle(f=>f.setValue(i.settings.autoBackupAfterFileChange).onChange(async d=>{i.settings.autoBackupAfterFileChange=d,this.refreshDisplayWithDelay(),await i.saveSettings(),i.automaticsManager.reload("commit")})),this.mayDisableSetting(a,i.settings.setLastSaveToLastCommit),a=new U.Setting(r).setName(`Auto ${n} after latest commit`).setDesc(`If turned on, sets last auto ${n} timestamp to the latest commit timestamp. This reduces the frequency of auto ${n} when doing manual commits.`).addToggle(f=>f.setValue(i.settings.setLastSaveToLastCommit).onChange(async d=>{i.settings.setLastSaveToLastCommit=d,await i.saveSettings(),i.automaticsManager.reload("commit"),this.refreshDisplayWithDelay()})),this.mayDisableSetting(a,i.settings.autoBackupAfterFileChange),a=new U.Setting(r).setName("Auto push interval (minutes)").setDesc("Push commits every X minutes. Set to 0 (default) to disable.").addText(f=>{f.inputEl.type="number",this.setNonDefaultValue({text:f,settingsProperty:"autoPushInterval"}),f.setPlaceholder(String(ht.autoPushInterval)),f.onChange(async d=>{d!==""?i.settings.autoPushInterval=Number(d):i.settings.autoPushInterval=ht.autoPushInterval,await i.saveSettings(),i.automaticsManager.reload("push")})}),this.mayDisableSetting(a,!i.settings.differentIntervalCommitAndPush),new U.Setting(r).setName("Auto pull interval (minutes)").setDesc("Pull changes every X minutes. Set to 0 (default) to disable.").addText(f=>{f.inputEl.type="number",this.setNonDefaultValue({text:f,settingsProperty:"autoPullInterval"}),f.setPlaceholder(String(ht.autoPullInterval)),f.onChange(async d=>{d!==""?i.settings.autoPullInterval=Number(d):i.settings.autoPullInterval=ht.autoPullInterval,await i.saveSettings(),i.automaticsManager.reload("pull")})}),new U.Setting(r).setName(`Auto ${n} only staged files`).setDesc(`If turned on, only staged files are committed on ${n}. If turned off, all changed files are committed.`).addToggle(f=>f.setValue(i.settings.autoCommitOnlyStaged).onChange(async d=>{i.settings.autoCommitOnlyStaged=d,await i.saveSettings()})),new U.Setting(r).setName(`Specify custom commit message on auto ${n}`).setDesc("You will get a pop up to specify your message.").addToggle(f=>f.setValue(i.settings.customMessageOnAutoBackup).onChange(async d=>{i.settings.customMessageOnAutoBackup=d,await i.saveSettings(),this.refreshDisplayWithDelay()})),a=new U.Setting(r).setName(`Commit message on auto ${n}`).setDesc("Available placeholders: {{date}} (see below), {{hostname}} (see below), {{numFiles}} (number of changed files in the commit) and {{files}} (changed files in commit message).").addTextArea(f=>{f.setPlaceholder(ht.autoCommitMessage).onChange(async d=>{d===""?i.settings.autoCommitMessage=ht.autoCommitMessage:i.settings.autoCommitMessage=d,await i.saveSettings()}),this.setNonDefaultValue({text:f,settingsProperty:"autoCommitMessage"})}),this.mayDisableSetting(a,i.settings.customMessageOnAutoBackup),new U.Setting(r).setName("Commit message").setHeading();let c=new U.Setting(r).setName("Commit message on manual commit").setDesc("Available placeholders: {{date}} (see below), {{hostname}} (see below), {{numFiles}} (number of changed files in the commit) and {{files}} (changed files in commit message). Leave empty to require manual input on each commit.");c.addTextArea(f=>{c.addButton(d=>{d.setIcon("reset").setTooltip(`Set to default: "${ht.commitMessage}"`).onClick(()=>{f.setValue(ht.commitMessage),f.onChanged()})}),f.setValue(i.settings.commitMessage),f.onChange(async d=>{i.settings.commitMessage=d,await i.saveSettings()})}),U.Platform.isDesktopApp&&new U.Setting(r).setName("Commit message script").setDesc("A script that is run using 'sh -c' to generate the commit message. May be used to generate commit messages using AI tools. Available placeholders: {{hostname}}, {{date}}.").addText(f=>{f.onChange(async d=>{d===""?i.settings.commitMessageScript=ht.commitMessageScript:i.settings.commitMessageScript=d,await i.saveSettings()}),this.setNonDefaultValue({text:f,settingsProperty:"commitMessageScript"})});let u=new U.Setting(r).setName("{{date}} placeholder format").addMomentFormat(f=>f.setDefaultFormat(i.settings.commitDateFormat).setValue(i.settings.commitDateFormat).onChange(async d=>{i.settings.commitDateFormat=d,await i.saveSettings()}));u.descEl.createSpan({text:` Specify custom date format. E.g. "${Ug}. See `}),u.descEl.createEl("a",{text:"Moment.js documentation",href:O2,attr:{target:"_blank"}}),u.descEl.createSpan({text:" for more formats."}),new U.Setting(r).setName("{{hostname}} placeholder replacement").setDesc("Specify custom hostname for every device. Defaults to the OS hostname if not set on desktop.").addText(f=>{var d;return f.setValue((d=i.localStorage.getHostname())!=null?d:"").onChange(h=>{i.localStorage.setHostname(h)})}),new U.Setting(r).setName("Preview commit message").addButton(f=>f.setButtonText("Preview").onClick(async()=>{let d=await i.gitManager.formatCommitMessage(i.settings.commitMessage);new U.Notice(`${d}`)})),new U.Setting(r).setName("List filenames affected by commit in the commit body").addToggle(f=>f.setValue(i.settings.listChangedFilesInMessageBody).onChange(async d=>{i.settings.listChangedFilesInMessageBody=d,await i.saveSettings()})),new U.Setting(r).setName("Pull").setHeading(),i.gitManager instanceof Se&&new U.Setting(r).setName("Merge strategy").setDesc("Decide how to integrate commits from your remote branch into your local branch.").addDropdown(f=>{let d={merge:"Merge",rebase:"Rebase",reset:"Other sync service (Only updates the HEAD without touching the working directory)"};f.addOptions(d),f.setValue(i.settings.syncMethod),f.onChange(async h=>{i.settings.syncMethod=h,await i.saveSettings()})}),new U.Setting(r).setName("Merge strategy on conflicts").setDesc("Decide how to solve conflicts when pulling remote changes. This can be used to favor your local changes or the remote changes automatically.").addDropdown(f=>{let d={none:"None (git default)",ours:"Our changes",theirs:"Their changes"};f.addOptions(d),f.setValue(i.settings.mergeStrategy),f.onChange(async h=>{i.settings.mergeStrategy=h,await i.saveSettings()})}),new U.Setting(r).setName("Pull on startup").setDesc("Automatically pull commits when Obsidian starts.").addToggle(f=>f.setValue(i.settings.autoPullOnBoot).onChange(async d=>{i.settings.autoPullOnBoot=d,await i.saveSettings()})),new U.Setting(r).setName("Commit-and-sync").setDesc("Commit-and-sync with default settings means staging everything -> committing -> pulling -> pushing. Ideally this is a single action that you do regularly to keep your local and remote repository in sync.").setHeading(),a=new U.Setting(r).setName("Push on commit-and-sync").setDesc(`Most of the time you want to push after committing. Turning this off turns a commit-and-sync action into commit ${i.settings.pullBeforePush?"and pull ":""}only. It will still be called commit-and-sync.`).addToggle(f=>f.setValue(!i.settings.disablePush).onChange(async d=>{i.settings.disablePush=!d,this.refreshDisplayWithDelay(),await i.saveSettings()})),new U.Setting(r).setName("Pull on commit-and-sync").setDesc(`On commit-and-sync, pull commits as well. Turning this off turns a commit-and-sync action into commit ${i.settings.disablePush?"":"and push "}only.`).addToggle(f=>f.setValue(i.settings.pullBeforePush).onChange(async d=>{i.settings.pullBeforePush=d,this.refreshDisplayWithDelay(),await i.saveSettings()})),i.gitManager instanceof Se&&(new U.Setting(r).setName("Hunk management").setDesc("Hunks are sections of grouped line changes right in your editor.").setHeading(),new U.Setting(r).setName("Signs").setDesc("This allows you to see your changes right in your editor via colored markers and stage/reset/preview individual hunks.").addToggle(f=>f.setValue(i.settings.hunks.showSigns).onChange(async d=>{i.settings.hunks.showSigns=d,await i.saveSettings(),i.editorIntegration.refreshSignsSettings()})),new U.Setting(r).setName("Hunk commands").setDesc("Adds commands to stage/reset individual Git diff hunks and navigate between them via 'Go to next/prev hunk' commands.").addToggle(f=>f.setValue(i.settings.hunks.hunkCommands).onChange(async d=>{i.settings.hunks.hunkCommands=d,await i.saveSettings(),i.editorIntegration.refreshSignsSettings()})),new U.Setting(r).setName("Status bar with summary of line changes").addDropdown(f=>f.addOptions({disabled:"Disabled",colored:"Colored",monochrome:"Monochrome"}).setValue(i.settings.hunks.statusBar).onChange(async d=>{i.settings.hunks.statusBar=d,await i.saveSettings(),i.editorIntegration.refreshSignsSettings()})),new U.Setting(r).setName("Line author information").setHeading(),this.addLineAuthorInfoSettings())}new U.Setting(r).setName("History view").setHeading(),new U.Setting(r).setName("Show Author").setDesc("Show the author of the commit in the history view.").addDropdown(c=>{let u={hide:"Hide",full:"Full",initials:"Initials"};c.addOptions(u),c.setValue(i.settings.authorInHistoryView),c.onChange(async f=>{i.settings.authorInHistoryView=f,await i.saveSettings(),await i.refresh()})}),new U.Setting(r).setName("Show Date").setDesc("Show the date of the commit in the history view. The {{date}} placeholder format is used to display the date.").addToggle(c=>c.setValue(i.settings.dateInHistoryView).onChange(async u=>{i.settings.dateInHistoryView=u,await i.saveSettings(),await i.refresh()})),new U.Setting(r).setName("Source control view").setHeading(),new U.Setting(r).setName("Automatically refresh source control view on file changes").setDesc("On slower machines this may cause lags. If so, just disable this option.").addToggle(c=>c.setValue(i.settings.refreshSourceControl).onChange(async u=>{i.settings.refreshSourceControl=u,await i.saveSettings()})),new U.Setting(r).setName("Source control view refresh interval").setDesc("Milliseconds to wait after file change before refreshing the Source Control View.").addText(c=>{c.inputEl.type="number",this.setNonDefaultValue({text:c,settingsProperty:"refreshSourceControlTimer"}),c.setPlaceholder(String(ht.refreshSourceControlTimer)),c.onChange(async f=>{f!==""&&Number.isInteger(Number(f))?i.settings.refreshSourceControlTimer=Math.max(Number(f),500):i.settings.refreshSourceControlTimer=ht.refreshSourceControlTimer,await i.saveSettings(),i.setRefreshDebouncer()})}),new U.Setting(r).setName("Miscellaneous").setHeading(),i.gitManager instanceof Se&&new U.Setting(r).setName("Diff view style").setDesc('Set the style for the diff view. Note that the actual diff in "Split" mode is not generated by Git, but the editor itself instead so it may differ from the diff generated by Git. One advantage of this is that you can edit the text in that view.').addDropdown(c=>{let u={split:"Split",git_unified:"Unified"};c.addOptions(u),c.setValue(i.settings.diffStyle),c.onChange(async f=>{i.settings.diffStyle=f,await i.saveSettings()})}),new U.Setting(r).setName("Disable informative notifications").setDesc("Disable informative notifications for git operations to minimize distraction (refer to status bar for updates).").addToggle(c=>c.setValue(i.settings.disablePopups).onChange(async u=>{i.settings.disablePopups=u,this.refreshDisplayWithDelay(),await i.saveSettings()})),new U.Setting(r).setName("Disable error notifications").setDesc("Disable error notifications of any kind to minimize distraction (refer to status bar for updates).").addToggle(c=>c.setValue(!i.settings.showErrorNotices).onChange(async u=>{i.settings.showErrorNotices=!u,await i.saveSettings()})),i.settings.disablePopups||new U.Setting(r).setName("Hide notifications for no changes").setDesc("Don't show notifications when there are no changes to commit or push.").addToggle(c=>c.setValue(i.settings.disablePopupsForNoChanges).onChange(async u=>{i.settings.disablePopupsForNoChanges=u,await i.saveSettings()})),new U.Setting(r).setName("Show status bar").setDesc("Obsidian must be restarted for the changes to take affect.").addToggle(c=>c.setValue(i.settings.showStatusBar).onChange(async u=>{i.settings.showStatusBar=u,await i.saveSettings()})),new U.Setting(r).setName("File menu integration").setDesc('Add "Stage", "Unstage" and "Add to .gitignore" actions to the file menu.').addToggle(c=>c.setValue(i.settings.showFileMenu).onChange(async u=>{i.settings.showFileMenu=u,await i.saveSettings()})),new U.Setting(r).setName("Show branch status bar").setDesc("Obsidian must be restarted for the changes to take affect.").addToggle(c=>c.setValue(i.settings.showBranchStatusBar).onChange(async u=>{i.settings.showBranchStatusBar=u,await i.saveSettings()})),new U.Setting(r).setName("Show the count of modified files in the status bar").addToggle(c=>c.setValue(i.settings.changedFilesInStatusBar).onChange(async u=>{i.settings.changedFilesInStatusBar=u,await i.saveSettings()})),i.gitManager instanceof Vi?new U.Setting(r).setName("Authentication/commit author").setHeading():new U.Setting(r).setName("Commit author").setHeading(),i.gitManager instanceof Vi&&new U.Setting(r).setName("Username on your git server. E.g. your username on GitHub").addText(c=>{var u;c.setValue((u=i.localStorage.getUsername())!=null?u:""),c.onChange(f=>{i.localStorage.setUsername(f)})}),i.gitManager instanceof Vi&&new U.Setting(r).setName("Password/Personal access token").setDesc("Type in your password. You won't be able to see it again.").addText(c=>{c.inputEl.autocapitalize="off",c.inputEl.autocomplete="off",c.inputEl.spellcheck=!1,c.onChange(u=>{i.localStorage.setPassword(u)})}),i.gitReady&&new U.Setting(r).setName("Author name for commit").addText(async c=>{var u;c.setValue((u=await i.gitManager.getConfig("user.name"))!=null?u:""),c.onChange(async f=>{await i.gitManager.setConfig("user.name",f==""?void 0:f)})}),i.gitReady&&new U.Setting(r).setName("Author email for commit").addText(async c=>{var u;c.setValue((u=await i.gitManager.getConfig("user.email"))!=null?u:""),c.onChange(async f=>{await i.gitManager.setConfig("user.email",f==""?void 0:f)})}),new U.Setting(r).setName("Advanced").setDesc("These settings usually don't need to be changed, but may be required for special setups.").setHeading(),i.gitManager instanceof Se&&(new U.Setting(r).setName("Update submodules").setDesc('"Commit-and-sync" and "pull" takes care of submodules. Missing features: Conflicted files, count of pulled/pushed/committed files. Tracking branch needs to be set for each submodule.').addToggle(c=>c.setValue(i.settings.updateSubmodules).onChange(async u=>{i.settings.updateSubmodules=u,await i.saveSettings()})),i.settings.updateSubmodules&&new U.Setting(r).setName("Submodule recurse checkout/switch").setDesc("Whenever a checkout happens on the root repository, recurse the checkout on the submodules (if the branches exist).").addToggle(c=>c.setValue(i.settings.submoduleRecurseCheckout).onChange(async u=>{i.settings.submoduleRecurseCheckout=u,await i.saveSettings()}))),i.gitManager instanceof Se&&new U.Setting(r).setName("Custom Git binary path").setDesc("Specify the path to the Git binary/executable. Git should already be in your PATH. Should only be necessary for a custom Git installation.").addText(c=>{var u;c.setValue((u=i.localStorage.getGitPath())!=null?u:""),c.setPlaceholder("git"),c.onChange(f=>{i.localStorage.setGitPath(f),i.gitManager.updateGitPath(f||"git").catch(d=>i.displayError(d))})}),i.gitManager instanceof Se&&new U.Setting(r).setName("Additional environment variables").setDesc("Use each line for a new environment variable in the format KEY=VALUE .").addTextArea(c=>{c.setPlaceholder("GIT_DIR=/path/to/git/dir"),c.setValue(i.localStorage.getEnvVars().join(` +`)),c.onChange(u=>{i.localStorage.setEnvVars(u.split(` +`))})}),i.gitManager instanceof Se&&new U.Setting(r).setName("Additional PATH environment variable paths").setDesc("Use each line for one path").addTextArea(c=>{c.setValue(i.localStorage.getPATHPaths().join(` +`)),c.onChange(u=>{i.localStorage.setPATHPaths(u.split(` +`))})}),i.gitManager instanceof Se&&new U.Setting(r).setName("Reload with new environment variables").setDesc("Removing previously added environment variables will not take effect until Obsidian is restarted.").addButton(c=>{c.setButtonText("Reload"),c.setCta(),c.onClick(async()=>{await i.gitManager.setGitInstance()})}),new U.Setting(r).setName("Custom base path (Git repository path)").setDesc(` + Sets the relative path to the vault from which the Git binary should be executed. + Mostly used to set the path to the Git repository, which is only required if the Git repository is below the vault root directory. Use "\\" instead of "/" on Windows. + `).addText(c=>{c.setValue(i.settings.basePath),c.setPlaceholder("directory/directory-with-git-repo"),c.onChange(async u=>{i.settings.basePath=u,await i.saveSettings(),i.gitManager.updateBasePath(u||"").catch(f=>i.displayError(f))})}),new U.Setting(r).setName("Custom Git directory path (Instead of '.git')").setDesc('Corresponds to the GIT_DIR environment variable. Requires restart of Obsidian to take effect. Use "\\" instead of "/" on Windows.').addText(c=>{c.setValue(i.settings.gitDir),c.setPlaceholder(".git"),c.onChange(async u=>{i.settings.gitDir=u,await i.saveSettings()})}),new U.Setting(r).setName("Disable on this device").setDesc("Disables the plugin on this device. This setting is not synced.").addToggle(c=>c.setValue(i.localStorage.getPluginDisabled()).onChange(u=>{i.localStorage.setPluginDisabled(u),u?i.unloadPlugin():i.init({fromReload:!0}).catch(f=>i.displayError(f)),new U.Notice("Obsidian must be restarted for the changes to take affect.")})),new U.Setting(r).setName("Support").setHeading(),new U.Setting(r).setName("Donate").setDesc("If you like this Plugin, consider donating to support continued development.").addButton(c=>{var f;let u=(f=c.buttonEl.parentElement)==null?void 0:f.createEl("a",{href:"https://ko-fi.com/F1F195IQ5",attr:{target:"_blank"}});u&&(u.createEl("img",{attr:{height:"36",style:"border:0px;height:36px;",src:"https://cdn.ko-fi.com/cdn/kofi3.png?v=3",border:"0",alt:"Buy Me a Coffee at ko-fi.com"}}),c.buttonEl.remove())});let o=r.createDiv();o.setAttr("align","center"),o.setAttr("style","margin: var(--size-4-2)");let l=o.createEl("button");if(l.setText("Copy Debug Information"),l.onclick=async()=>{await window.navigator.clipboard.writeText(JSON.stringify({settings:this.plugin.settings,pluginVersion:this.plugin.manifest.version},null,4)),new U.Notice("Debug information copied to clipboard. May contain sensitive information!")},U.Platform.isDesktopApp){let c=r.createDiv();c.setAttr("align","center"),c.setText(`Debugging and logging: +You can always see the logs of this and every other plugin by opening the console with`);let u=r.createDiv();u.setAttr("align","center"),u.addClass("obsidian-git-shortcuts"),U.Platform.isMacOS===!0?u.createEl("kbd",{text:"CMD (\u2318) + OPTION (\u2325) + I"}):u.createEl("kbd",{text:"CTRL + SHIFT + I"})}}mayDisableSetting(r,i){i&&(r.setDisabled(i),r.setClass("obsidian-git-disabled"))}configureLineAuthorShowStatus(r){this.settings.lineAuthor.show=r,this.plugin.saveSettings(),r?this.plugin.editorIntegration.activateLineAuthoring():this.plugin.editorIntegration.deactiveLineAuthoring()}async lineAuthorSettingHandler(r,i){this.settings.lineAuthor[r]=i,await this.plugin.saveSettings(),this.plugin.editorIntegration.lineAuthoringFeature.refreshLineAuthorViews()}beforeSaveSettings(){let r=this.settings.lineAuthor;r.authorDisplay!=="hide"&&(r.lastShownAuthorDisplay=r.authorDisplay),r.dateTimeFormatOptions!=="hide"&&(r.lastShownDateTimeFormatOptions=r.dateTimeFormatOptions)}addLineAuthorInfoSettings(){let r=new U.Setting(this.containerEl).setName("Show commit authoring information next to each line");if(this.plugin.editorIntegration.lineAuthoringFeature.isAvailableOnCurrentPlatform()||r.setDesc("Only available on desktop currently.").setDisabled(!0),r.descEl.createEl("a",{href:s5,text:"Feature guide and quick examples",attr:{target:"_blank"}}),r.descEl.createEl("br"),r.descEl.createSpan({text:" The commit hash, author name and authoring date can all be individually toggled."}),r.descEl.createEl("br"),r.descEl.createSpan({text:"Hide everything, to only show the age-colored sidebar."}),r.addToggle(i=>i.setValue(this.settings.lineAuthor.show).onChange(n=>{this.configureLineAuthorShowStatus(n),this.refreshDisplayWithDelay()})),this.settings.lineAuthor.show){let i=new U.Setting(this.containerEl).setName("Follow movement and copies across files and commits").addDropdown(l=>{l.addOptions({inactive:"Do not follow (default)","same-commit":"Follow within same commit","all-commits":"Follow within all commits (maybe slow)"}),l.setValue(this.settings.lineAuthor.followMovement),l.onChange(c=>this.lineAuthorSettingHandler("followMovement",c))});if(i.descEl.createSpan({text:"By default (deactivated), each line only shows the newest commit where it was changed."}),i.descEl.createEl("br"),i.descEl.createSpan({text:"With "}),i.descEl.createEl("i",{text:"same commit"}),i.descEl.createSpan({text:", cut-copy-paste-ing of text is followed within the same commit and the original commit of authoring will be shown."}),i.descEl.createEl("br"),i.descEl.createSpan({text:"With "}),i.descEl.createEl("i",{text:"all commits"}),i.descEl.createSpan({text:", cut-copy-paste-ing text inbetween multiple commits will be detected."}),i.descEl.createEl("br"),i.descEl.createSpan({text:"It uses "}),i.descEl.createEl("a",{href:"https://git-scm.com/docs/git-blame",text:"git-blame",attr:{target:"_blank"}}),i.descEl.createSpan({text:` and for matches (at least ${_d} characters) within the same (or all) commit(s), `}),i.descEl.createEl("em",{text:"the originating"}),i.descEl.createSpan({text:" commit's information is shown."}),new U.Setting(this.containerEl).setName("Show commit hash").addToggle(l=>{l.setValue(this.settings.lineAuthor.showCommitHash),l.onChange(c=>this.lineAuthorSettingHandler("showCommitHash",c))}),new U.Setting(this.containerEl).setName("Author name display").setDesc("If and how the author is displayed").addDropdown(l=>{let c={hide:"Hide",initials:"Initials (default)","first name":"First name","last name":"Last name",full:"Full name"};l.addOptions(c),l.setValue(this.settings.lineAuthor.authorDisplay),l.onChange(async u=>this.lineAuthorSettingHandler("authorDisplay",u))}),new U.Setting(this.containerEl).setName("Authoring date display").setDesc("If and how the date and time of authoring the line is displayed").addDropdown(l=>{let c={hide:"Hide",date:"Date (default)",datetime:"Date and time","natural language":"Natural language",custom:"Custom"};l.addOptions(c),l.setValue(this.settings.lineAuthor.dateTimeFormatOptions),l.onChange(async u=>{await this.lineAuthorSettingHandler("dateTimeFormatOptions",u),this.refreshDisplayWithDelay()})}),this.settings.lineAuthor.dateTimeFormatOptions==="custom"){let l=new U.Setting(this.containerEl);l.setName("Custom authoring date format").addText(c=>{c.setValue(this.settings.lineAuthor.dateTimeFormatCustomString),c.setPlaceholder("YYYY-MM-DD HH:mm"),c.onChange(async u=>{await this.lineAuthorSettingHandler("dateTimeFormatCustomString",u),this.setCustomDateTimeDescription(l.descEl,u)})}),this.setCustomDateTimeDescription(l.descEl,this.settings.lineAuthor.dateTimeFormatCustomString)}let n=new U.Setting(this.containerEl).setName("Authoring date display timezone").addDropdown(l=>{let c={"viewer-local":"My local (default)","author-local":"Author's local",utc0000:"UTC+0000/Z"};l.addOptions(c),l.setValue(this.settings.lineAuthor.dateTimeTimezone),l.onChange(async u=>this.lineAuthorSettingHandler("dateTimeTimezone",u))});n.descEl.empty(),n.descEl.createSpan({text:`The time-zone in which the authoring date should be shown. +Either your local time-zone (default), +the author's time-zone during commit creation or +`}),n.descEl.createEl("a",{text:"UTC\xB100:00",href:"https://en.wikipedia.org/wiki/UTC%C2%B100:00"}),n.descEl.createSpan({text:"."});let s=new U.Setting(this.containerEl).setName("Oldest age in coloring");this.setOldestAgeDescription(s.descEl,this.settings.lineAuthor.coloringMaxAge),s.addText(l=>{l.setPlaceholder("1y"),l.setValue(this.settings.lineAuthor.coloringMaxAge),l.onChange(async c=>{let f=Eu(c)!==void 0;this.setOldestAgeDescription(s.descEl,c),f&&(await this.lineAuthorSettingHandler("coloringMaxAge",c),this.refreshColorSettingsName("oldest"))})}),this.createColorSetting("newest"),this.createColorSetting("oldest");let a=new U.Setting(this.containerEl).setName("Text color").addText(l=>{l.setValue(this.settings.lineAuthor.textColorCss),l.onChange(async c=>{await this.lineAuthorSettingHandler("textColorCss",c)})});a.descEl.empty(),a.descEl.createSpan({text:"The CSS color of the gutter text."}),a.descEl.createEl("br"),a.descEl.createEl("br"),a.descEl.createSpan({text:"It is highly recommended to use "}),a.descEl.createEl("a",{text:"CSS variables",href:"https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties"}),a.descEl.createSpan({text:" defined by themes (e.g. "}),a.descEl.createEl("pre",{text:"var(--text-muted)",attr:{style:"display:inline"}}),a.descEl.createSpan({text:" or "}),a.descEl.createEl("pre",{text:"var(--text-on-accent)",attr:{style:"display:inline"}}),a.descEl.createSpan({text:"), because they automatically adapt to theme changes."}),a.descEl.createEl("br"),a.descEl.createEl("br"),a.descEl.createSpan({text:"See: "}),a.descEl.createEl("a",{text:"List of available CSS variables in Obsidian",href:"https://github.com/obsidian-community/obsidian-theme-template/blob/main/obsidian.css"});let o=new U.Setting(this.containerEl).setName("Ignore whitespace and newlines in changes").addToggle(l=>{l.setValue(this.settings.lineAuthor.ignoreWhitespace),l.onChange(c=>this.lineAuthorSettingHandler("ignoreWhitespace",c))});o.descEl.empty(),o.descEl.createSpan({text:"Whitespace and newlines are interpreted as part of the document and in changes by default (hence not ignored). This makes the last line being shown as 'changed' when a new subsequent line is added, even if the previously last line's text is the same."}),o.descEl.createEl("br"),o.descEl.createSpan({text:"If you don't care about purely-whitespace changes (e.g. list nesting / quote indentation changes), then activating this will provide more meaningful change detection."})}}createColorSetting(r){let i=new U.Setting(this.containerEl).setName("").addText(n=>{let s=uw(r,this.settings.lineAuthor),a=uw(r,ht.lineAuthor);n.setPlaceholder(iv(a)),n.setValue(iv(s)),n.onChange(async o=>{let l=Qk(o);if(l!==void 0){let c=r==="newest"?"colorNew":"colorOld";await this.lineAuthorSettingHandler(c,l)}this.refreshColorSettingsDesc(r,l)})});this.lineAuthorColorSettings.set(r,i),this.refreshColorSettingsName(r),this.refreshColorSettingsDesc(r,uw(r,this.settings.lineAuthor))}refreshColorSettingsName(r){let i=this.lineAuthorColorSettings.get(r);if(i){let n=r==="oldest"?`oldest (${this.settings.lineAuthor.coloringMaxAge} or older)`:"newest";i.nameEl.setText(`Color for ${n} commits`)}}refreshColorSettingsDesc(r,i){let n=this.lineAuthorColorSettings.get(r);n&&this.colorSettingPreviewDesc(n.descEl,r,this.settings.lineAuthor,i!==void 0)}colorSettingPreviewDesc(r,i,n,s){r.empty(),r.createSpan({text:"Supports 'rgb(r,g,b)', 'hsl(h,s,l)', hex (#) and named colors (e.g. 'black', 'purple'). Color preview: "});let a=s?lh(i,n):"rgba(127,127,127,0.3)",o=U.moment.unix(U.moment.now()/1e3).format("YYYY-MM-DD"),l=s?`abcdef Author Name ${o}`:"invalid color";r.createEl("div",{text:l,attr:{class:"line-author-settings-preview",style:`background-color: ${a}; width: 30ch;`}})}setCustomDateTimeDescription(r,i){r.empty(),r.createEl("a",{text:"Format string",href:O2}),r.createSpan({text:" to display the authoring date."}),r.createEl("br");let n=(0,U.moment)().format(i);r.createSpan({text:`Currently: ${n}`})}setOldestAgeDescription(r,i){let n=Eu(i),s=n!==void 0?`${n.asDays()} days`:"invalid!";r.empty(),r.createSpan({text:`The oldest age in the line author coloring. Everything older will have the same color. +Smallest valid age is "1d". Currently: ${s}`})}setNonDefaultValue({settingsProperty:r,text:i}){let n=this.plugin.settings[r];ht[r]!==n&&(typeof n=="string"||typeof n=="number"||typeof n=="boolean"?i.setValue(String(n)):i.setValue(JSON.stringify(n)))}refreshDisplayWithDelay(r=80){window.setTimeout(()=>this.display(),r)}};function uw(t,e){return t==="oldest"?e.colorOld:e.colorNew}function Eu(t){let e=U.moment.duration("P"+t.toUpperCase());return e.isValid()&&e.asDays()&&e.asDays()>=1?e:void 0}m();var ti=require("obsidian");var fh=class{constructor(e,r){this.statusBarEl=e;this.plugin=r;this.messages=[];this.base="obsidian-git-statusbar-";this.statusBarEl.setAttribute("data-tooltip-position","top"),r.registerEvent(r.app.workspace.on("obsidian-git:refreshed",()=>{this.refreshCommitTimestamp().catch(console.error)}))}displayMessage(e,r){this.messages.push({message:`Git: ${e.slice(0,100)}`,timeout:r}),this.display()}display(){this.messages.length>0&&!this.currentMessage?(this.currentMessage=this.messages.shift(),this.statusBarEl.addClass(this.base+"message"),this.statusBarEl.ariaLabel="",this.statusBarEl.setText(this.currentMessage.message),this.lastMessageTimestamp=Date.now()):this.currentMessage?Date.now()-this.lastMessageTimestamp>=this.currentMessage.timeout&&(this.currentMessage=null,this.lastMessageTimestamp=null):this.displayState()}displayState(){switch((this.statusBarEl.getText().length>3||!this.statusBarEl.hasChildNodes())&&(this.statusBarEl.empty(),this.conflictEl=this.statusBarEl.createDiv(),this.conflictEl.setAttribute("data-tooltip-position","top"),this.conflictEl.style.float="left",this.pausedEl=this.statusBarEl.createDiv(),this.pausedEl.setAttribute("data-tooltip-position","top"),this.pausedEl.style.float="left",this.iconEl=this.statusBarEl.createDiv(),this.iconEl.style.float="left",this.textEl=this.statusBarEl.createDiv(),this.textEl.style.float="right",this.textEl.style.marginLeft="5px"),this.plugin.localStorage.getConflict()?((0,ti.setIcon)(this.conflictEl,"alert-circle"),this.conflictEl.ariaLabel="You have merge conflicts. Resolve them and commit afterwards.",this.conflictEl.style.marginRight="5px",this.conflictEl.addClass(this.base+"conflict")):(this.conflictEl.empty(),this.conflictEl.style.marginRight=""),this.plugin.localStorage.getPausedAutomatics()?((0,ti.setIcon)(this.pausedEl,"pause-circle"),this.pausedEl.ariaLabel="Automatic routines are currently paused.",this.pausedEl.style.marginRight="5px",this.pausedEl.addClass(this.base+"paused")):(this.pausedEl.empty(),this.pausedEl.style.marginRight=""),this.plugin.state.gitAction){case 0:this.displayFromNow();break;case 1:this.statusBarEl.ariaLabel="Checking repository status...",(0,ti.setIcon)(this.iconEl,"refresh-cw"),this.statusBarEl.addClass(this.base+"status");break;case 3:this.statusBarEl.ariaLabel="Adding files...",(0,ti.setIcon)(this.iconEl,"archive"),this.statusBarEl.addClass(this.base+"add");break;case 4:this.statusBarEl.ariaLabel="Committing changes...",(0,ti.setIcon)(this.iconEl,"git-commit"),this.statusBarEl.addClass(this.base+"commit");break;case 5:this.statusBarEl.ariaLabel="Pushing changes...",(0,ti.setIcon)(this.iconEl,"upload"),this.statusBarEl.addClass(this.base+"push");break;case 2:this.statusBarEl.ariaLabel="Pulling changes...",(0,ti.setIcon)(this.iconEl,"download"),this.statusBarEl.addClass(this.base+"pull");break;default:this.statusBarEl.ariaLabel="Failed on initialization!",(0,ti.setIcon)(this.iconEl,"alert-triangle"),this.statusBarEl.addClass(this.base+"failed-init");break}}displayFromNow(){var i;let e=this.lastCommitTimestamp,r=this.plugin.state.offlineMode;if(e){let n=(0,ti.moment)(e).fromNow();this.statusBarEl.ariaLabel=`${r?"Offline: ":""}Last Commit: ${n}`,((i=this.unPushedCommits)!=null?i:0)>0&&(this.statusBarEl.ariaLabel+=` +(${this.unPushedCommits} unpushed commits)`)}else this.statusBarEl.ariaLabel=r?"Git is offline":"Git is ready";r?(0,ti.setIcon)(this.iconEl,"globe"):(0,ti.setIcon)(this.iconEl,"check"),this.plugin.settings.changedFilesInStatusBar&&this.plugin.cachedStatus&&this.textEl.setText(this.plugin.cachedStatus.changed.length.toString()),this.statusBarEl.addClass(this.base+"idle")}async refreshCommitTimestamp(){this.lastCommitTimestamp=await this.plugin.gitManager.getLastCommitTime(),this.unPushedCommits=await this.plugin.gitManager.getUnpushedCommits()}remove(){this.statusBarEl.remove()}};m();var hh=require("obsidian"),dh=class extends hh.SuggestModal{constructor(r){super(r.app);this.plugin=r;this.resolve=null;this.setPlaceholder("Type your message and select optional the version with the added date.")}openAndGetResult(){return new Promise(r=>{this.resolve=r,this.open()})}onClose(){new Promise(r=>window.setTimeout(r,10)).then(()=>{this.resolve&&this.resolve(void 0)})}getSuggestions(r){let i=(0,hh.moment)().format(this.plugin.settings.commitDateFormat);return r==""&&(r="..."),[r,`${i}: ${r}`,`${r}: ${i}`]}renderSuggestion(r,i){i.innerText=r}onChooseSuggestion(r,i){this.resolve&&this.resolve(r)}};m();var L2=require("obsidian"),Su=class{constructor(e){this.plugin=e}saveLastAuto(e,r){r==="backup"?this.plugin.localStorage.setLastAutoBackup(e.toString()):r==="pull"?this.plugin.localStorage.setLastAutoPull(e.toString()):r==="push"&&this.plugin.localStorage.setLastAutoPush(e.toString())}loadLastAuto(){var e,r,i;return{backup:new Date((e=this.plugin.localStorage.getLastAutoBackup())!=null?e:""),pull:new Date((r=this.plugin.localStorage.getLastAutoPull())!=null?r:""),push:new Date((i=this.plugin.localStorage.getLastAutoPush())!=null?i:"")}}async init(){await this.setUpAutoCommitAndSync();let e=this.loadLastAuto();if(this.plugin.settings.differentIntervalCommitAndPush&&this.plugin.settings.autoPushInterval>0){let r=this.diff(this.plugin.settings.autoPushInterval,e.push);this.startAutoPush(r)}if(this.plugin.settings.autoPullInterval>0){let r=this.diff(this.plugin.settings.autoPullInterval,e.pull);this.startAutoPull(r)}}unload(){this.clearAutoPull(),this.clearAutoPush(),this.clearAutoCommitAndSync()}reload(...e){this.plugin.localStorage.getPausedAutomatics()||(e.contains("commit")&&(this.clearAutoCommitAndSync(),this.plugin.settings.autoSaveInterval>0&&this.startAutoCommitAndSync(this.plugin.settings.autoSaveInterval)),e.contains("push")&&(this.clearAutoPush(),this.plugin.settings.differentIntervalCommitAndPush&&this.plugin.settings.autoPushInterval>0&&this.startAutoPush(this.plugin.settings.autoPushInterval)),e.contains("pull")&&(this.clearAutoPull(),this.plugin.settings.autoPullInterval>0&&this.startAutoPull(this.plugin.settings.autoPullInterval)))}async setUpAutoCommitAndSync(){if(this.plugin.settings.setLastSaveToLastCommit){this.clearAutoCommitAndSync();let e=await this.plugin.gitManager.getLastCommitTime();e&&this.saveLastAuto(e,"backup")}if(!this.timeoutIDCommitAndSync&&!this.plugin.autoCommitDebouncer){let e=this.loadLastAuto();if(this.plugin.settings.autoSaveInterval>0){let r=this.diff(this.plugin.settings.autoSaveInterval,e.backup);this.startAutoCommitAndSync(r)}}}startAutoCommitAndSync(e){let r=(e!=null?e:this.plugin.settings.autoSaveInterval)*6e4;this.plugin.settings.autoBackupAfterFileChange?e===0?this.doAutoCommitAndSync():this.plugin.autoCommitDebouncer=(0,L2.debounce)(()=>this.doAutoCommitAndSync(),r,!0):(r>2147483647&&(r=2147483647),this.timeoutIDCommitAndSync=window.setTimeout(()=>this.doAutoCommitAndSync(),r))}doAutoCommitAndSync(){this.plugin.promiseQueue.addTask(async()=>{if(this.plugin.settings.setLastSaveToLastCommit){let r=await this.plugin.gitManager.getLastCommitTime();if(r){this.saveLastAuto(r,"backup");let i=this.diff(this.plugin.settings.autoSaveInterval,r);if(i>0)return this.startAutoCommitAndSync(i),!1}}let e=this.plugin.settings.autoCommitOnlyStaged;return this.plugin.settings.differentIntervalCommitAndPush?await this.plugin.commit({fromAuto:!0,onlyStaged:e}):await this.plugin.commitAndSync({fromAutoBackup:!0,onlyStaged:e}),!0},e=>{e!==!1&&(this.saveLastAuto(new Date,"backup"),this.startAutoCommitAndSync())})}startAutoPull(e){let r=(e!=null?e:this.plugin.settings.autoPullInterval)*6e4;r>2147483647&&(r=2147483647),this.timeoutIDPull=window.setTimeout(()=>this.doAutoPull(),r)}doAutoPull(){this.plugin.promiseQueue.addTask(()=>this.plugin.pullChangesFromRemote(),()=>{this.saveLastAuto(new Date,"pull"),this.startAutoPull()})}startAutoPush(e){let r=(e!=null?e:this.plugin.settings.autoPushInterval)*6e4;r>2147483647&&(r=2147483647),this.timeoutIDPush=window.setTimeout(()=>this.doAutoPush(),r)}doAutoPush(){this.plugin.promiseQueue.addTask(()=>this.plugin.push(),()=>{this.saveLastAuto(new Date,"push"),this.startAutoPush()})}clearAutoCommitAndSync(){var r;let e=!1;return this.timeoutIDCommitAndSync&&(window.clearTimeout(this.timeoutIDCommitAndSync),this.timeoutIDCommitAndSync=void 0,e=!0),this.plugin.autoCommitDebouncer&&((r=this.plugin.autoCommitDebouncer)==null||r.cancel(),this.plugin.autoCommitDebouncer=void 0,e=!0),e}clearAutoPull(){return this.timeoutIDPull?(window.clearTimeout(this.timeoutIDPull),this.timeoutIDPull=void 0,!0):!1}clearAutoPush(){return this.timeoutIDPush?(window.clearTimeout(this.timeoutIDPush),this.timeoutIDPush=void 0,!0):!1}diff(e,r){let n=e-Math.round((new Date().getTime()-r.getTime())/1e3/60);return Math.max(0,n)}};m();var qi=require("obsidian");m();var ku=require("obsidian");async function N2(t,e,r){let i=await H2(e,r);if(i.result==="failure"){new ku.Notice(i.reason);return}let{isGitHub:n,branch:s,repo:a,user:o,filePath:l}=i;if(n){let c=t.getCursor("from").line+1,u=t.getCursor("to").line+1;c===u?window.open(`https://github.com/${o}/${a}/blob/${s}/${l}?plain=1#L${c}`):window.open(`https://github.com/${o}/${a}/blob/${s}/${l}?plain=1#L${c}-L${u}`)}else new ku.Notice("It seems like you are not using GitHub")}async function B2(t,e){let r=await H2(t,e);if(r.result==="failure"){new ku.Notice(r.reason);return}let{isGitHub:i,branch:n,repo:s,user:a,filePath:o}=r;i?window.open(`https://github.com/${a}/${s}/commits/${n}/${o}`):new ku.Notice("It seems like you are not using GitHub")}async function H2(t,e){let r=await e.branchInfo(),i=r.tracking,n=r.current,s,a=e.getRelativeRepoPath(t.path);if(e instanceof Se){let l=await e.getSubmoduleOfFile(e.getRelativeRepoPath(t.path));if(l){a=l.relativeFilepath;let c=await e.git.cwd({path:l.submodule,root:!1}).status();if(i=c.tracking||void 0,n=c.current||void 0,i){let u=i.substring(0,i.indexOf("/")),f=await e.git.cwd({path:l.submodule,root:!1}).getConfig(`remote.${u}.url`,"local");if(f.value!=null)s=f.value;else return{result:"failure",reason:"Failed to get remote url of submodule"}}}}if(i==null)return{result:"failure",reason:"Remote branch is not configured"};if(n==null)return{result:"failure",reason:"Failed to get current branch name"};if(s==null){let l=i.substring(0,i.indexOf("/"));if(s=await e.getConfig(`remote.${l}.url`),s==null)return{result:"failure",reason:"Failed to get remote url"}}let o=s.match(/(?:^https:\/\/github\.com\/(.+)\/(.+?)(?:\.git)?$)|(?:^[a-zA-Z]+@github\.com:(.+)\/(.+?)(?:\.git)?$)/);if(o==null)return{result:"failure",reason:"Could not parse remote url"};{let[l,c,u,f,d]=o;return{result:"success",isGitHub:!!l,repo:u||d,user:c||f,branch:n,filePath:a}}}m();var U2=require("obsidian"),ph=class extends U2.FuzzySuggestModal{constructor(e,r){super(e.app),this.plugin=e,this.changedFiles=r,this.setPlaceholder("Not supported files will be opened by default app!")}getItems(){return this.changedFiles}getItemText(e){if(e.index=="U"&&e.workingDir=="U")return`Untracked | ${e.vaultPath}`;let r="",i="";return e.workingDir!=" "&&(r=`Working Dir: ${e.workingDir} `),e.index!=" "&&(i=`Index: ${e.index}`),`${r}${i} | ${e.vaultPath}`}onChooseItem(e,r){this.plugin.app.metadataCache.getFirstLinkpathDest(e.vaultPath,"")==null?this.app.openWithDefaultApp(e.vaultPath):this.plugin.app.workspace.openLinkText(e.vaultPath,"/")}};m();var G2=require("obsidian"),mh=class extends G2.Modal{constructor(r,i){super(r);this.content=i;this.resolve=null}openAndGetReslt(){return new Promise(r=>{this.resolve=r,this.open()})}onOpen(){let{contentEl:r,titleEl:i}=this;i.setText("Edit .gitignore");let n=r.createDiv(),s=n.createEl("textarea",{text:this.content,cls:["obsidian-git-textarea"],attr:{rows:10,cols:30,wrap:"off"}});n.createEl("button",{cls:["mod-cta","obsidian-git-center-button"],text:"Save"}).addEventListener("click",()=>{this.resolve(s.value),this.close()})}onClose(){let{contentEl:r}=this;r.empty(),this.resolve&&this.resolve(void 0)}};m();var Du=require("@codemirror/state"),Rh=require("@codemirror/view");m();var $l=require("@codemirror/state");m();var Vt=class t{static createHunk(e,r,i,n){return{removed:{start:e,count:r,lines:[]},added:{start:i,count:n,lines:[]},head:`@@ -${e}${r>0?`,${r}`:""} +${i}${n>0?`,${n}`:""} @@`,vend:i+Math.max(n-1,0),type:n===0?"delete":r===0?"add":"change"}}static createPartialHunk(e,r,i){let n=r,s=i-r+1,a=0;for(let o of e){let l=o.added.count-o.removed.count,c=0;if(o.added.start>=r&&o.vend<=i)c=l;else{let u=Math.max(0,i+1-(o.added.start+o.removed.count)),f=Math.max(0,r-(o.added.start+o.removed.count));o.added.start>=r&&o.added.start<=i?c=u:o.vend>=r&&o.vend<=i?(c=l-f,n=n-f):o.added.start<=r&&o.vend>=i?(c=u-f,n=n-f):a++,r>o.vend&&(n=n-l)}s=s-c}if(a!==e.length)return s===0&&(n=n-1),this.createHunk(n,s,r,i-r+1)}patchLines(e,r=!1){let i=[];for(let n of e.removed.lines)i.push("-"+n);for(let n of e.added.lines)i.push("+"+n);return r?i.map(n=>n.replace(/\r$/,"")):i}static parseDiffLine(e){let n=e.split("@@")[1].trim().split(" "),s=n[0].substring(1).split(","),a=n[1].substring(1).split(","),o=this.createHunk(parseInt(s[0]),parseInt(s[1]||"1"),parseInt(a[0]),parseInt(a[1]||"1"));return o.head=e,o}static changeEnd(e){return e.added.count===0?e.added.start:e.removed.count===0?e.added.start+e.added.count-1:e.added.start+Math.min(e.added.count,e.removed.count)-1}static calcSigns(e,r,i,n=1,s=1/0,a){if(a&&r.type!=="add")return console.error(`Invalid hunk with untracked=${a} hunk="${r.head}"`),[];n=Math.max(1,n);let{start:o,added:l,removed:c}={start:r.added.start,added:r.added.count,removed:r.removed.count},u=this.changeEnd(r),f=r.type==="delete"&&(o===0||e&&this.changeEnd(e)===o)&&(!i||i.added.start!==o+1);f&&n===1&&(n=0);let d=[];for(let h=Math.max(o,n);h<=Math.min(u,s);h++){let p=r.type==="change"&&(c>l&&h===u||e&&e.added.start===0);d.push({type:f?"topdelete":p?"changedelete":a?"untracked":r.type,count:h===o?r.type==="add"?l:c:void 0,lnum:h+(f?1:0)})}if(r.type==="change"&&l>c&&r.vend>=n&&u<=s)for(let h=Math.max(u,n);h<=Math.min(r.vend,s);h++)d.push({type:"add",count:h===r.vend?l-c:void 0,lnum:h});return d}static createPatch(e,r,i,n=!1){let s=[`diff --git a/${e} b/${e}`,`index 000000..000000 ${i}`,`--- a/${e}`,`+++ b/${e}`],a=0;r=structuredClone(r);for(let o of r){let l=o.removed.start,c=o.removed.count,u=o.added.count;o.type==="add"&&(l=l+1);let f=o.removed.lines,d=o.added.lines;n&&([c,u]=[u,c],[f,d]=[d,f]),s.push(`@@ -${l},${c} +${l+a},${u} @@`);for(let h of f)s.push("-"+h);(n?o.added:o.removed).no_nl_at_eof&&s.push("\\ No newline at end of file");for(let h of d)s.push("+"+h);(n?o.removed:o.added).no_nl_at_eof&&s.push("\\ No newline at end of file"),o.removed.start=l+a,a=a+(u-c)}return s}getSummary(e){let r={added:0,changed:0,removed:0};for(let i of e)if(i.type==="add")r.added+=i.added.count;else if(i.type==="delete")r.removed+=i.removed.count;else if(i.type==="change"){let n=i.added.count,s=i.removed.count,a=Math.min(n,s);r.changed+=a,r.added+=n-a,r.removed+=s-a}return r}static findHunk(e,r){if(!r)return[void 0,void 0];for(let i=0;i=e)return[n,i]}return[void 0,void 0]}static findNearestHunk(e,r,i,n){if(r.length!==0){if(i==="first")return 0;if(i==="last")return r.length-1;if(i==="next"){if(r[0].added.start>e)return 0;for(let s=r.length-1;s>=0;s--)if(r[s].added.start<=e){if(s+1e)return s+1;if(n)return 0}}else if(i==="prev"){if(Math.max(r[r.length-1].vend)0&&Math.max(r[s-1].vend,1)l.added.start?n++:o.added.starta.map(v=>g.replace(/&/,v))).reduce((g,v)=>g.concat(v)),p,l);else if(p&&typeof p=="object"){if(!f)throw new RangeError("The value of a property ("+h+") should be a primitive value.");s(n(h),p,u,d)}else p!=null&&u.push(h.replace(/_.*/,"").replace(/[A-Z]/g,g=>"-"+g.toLowerCase())+": "+p+";")}(u.length||d)&&l.push((i&&!f&&!c?a.map(i):a).join(", ")+" {"+u.join(" ")+"}")}for(let a in e)s(n(a),e[a],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=V2[j2]||1;return V2[j2]=e+1,fw+e.toString(36)}static mount(e,r,i){let n=e[dw],s=i&&i.nonce;n?s&&n.setNonce(s):n=new hw(e,s),n.mount(Array.isArray(r)?r:[r],e)}},z2=new Map,hw=class{constructor(e,r){let i=e.ownerDocument||e,n=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&n.CSSStyleSheet){let s=z2.get(i);if(s)return e[dw]=s;this.sheet=new n.CSSStyleSheet,z2.set(i,this)}else this.styleTag=i.createElement("style"),r&&this.styleTag.setAttribute("nonce",r);this.modules=[],e[dw]=this}mount(e,r){let i=this.sheet,n=0,s=0;for(let a=0;a-1&&(this.modules.splice(l,1),s--,l=-1),l==-1){if(this.modules.splice(s++,0,o),i)for(let c=0;cc){let f=t.slice(e,r).indexOf(i.slice(n,s));if(f>-1)return[new Et(e,e+f,n,n),new Et(e+f+c,r,s,s)]}else if(c>l){let f=i.slice(n,s).indexOf(t.slice(e,r));if(f>-1)return[new Et(e,e,n,n+f),new Et(r,r,n+f+l,s)]}if(l==1||c==1)return[new Et(e,r,n,s)];let u=fP(t,e,r,i,n,s);if(u){let[f,d,h]=u;return $a(t,e,f,i,n,d).concat($a(t,f+h,r,i,d+h,s))}return o5(t,e,r,i,n,s)}var Au=1e9,Cu=0,bw=!1;function o5(t,e,r,i,n,s){let a=r-e,o=s-n;if(Au<1e9&&Math.min(a,o)>Au*16||Cu>0&&Date.now()>Cu)return Math.min(a,o)>Au*64?[new Et(e,r,n,s)]:W2(t,e,r,i,n,s);let l=Math.ceil((a+o)/2);pw.reset(l),mw.reset(l);let c=(h,p)=>t.charCodeAt(e+h)==i.charCodeAt(n+p),u=(h,p)=>t.charCodeAt(r-h-1)==i.charCodeAt(s-p-1),f=(a-o)%2!=0?mw:null,d=f?null:pw;for(let h=0;hAu||Cu>0&&!(h&63)&&Date.now()>Cu)return W2(t,e,r,i,n,s);let p=pw.advance(h,a,o,l,f,!1,c)||mw.advance(h,a,o,l,d,!0,u);if(p)return l5(t,e,r,e+p[0],i,n,s,n+p[1])}return[new Et(e,r,n,s)]}var yh=class{constructor(){this.vec=[]}reset(e){this.len=e<<1;for(let r=0;rr)this.end+=2;else if(f>i)this.start+=2;else if(s){let d=n+(r-i)-l;if(d>=0&&d=r-u)return[h,n+h-d]}else{let h=r-s.vec[d];if(u>=h)return[u,f]}}}return null}},pw=new yh,mw=new yh;function l5(t,e,r,i,n,s,a,o){let l=!1;return!Rl(t,i)&&++i==r&&(l=!0),!Rl(n,o)&&++o==a&&(l=!0),l?[new Et(e,r,s,a)]:$a(t,e,i,n,s,o).concat($a(t,i,r,n,o,a))}function uP(t,e){let r=1,i=Math.min(t,e);for(;rr||u>s||t.slice(o,c)!=i.slice(l,u)){if(a==1)return o-e-(Rl(t,o)?0:1);a=a>>1}else{if(c==r||u==s)return c-e;o=c,l=u}}}function xw(t,e,r,i,n,s){if(e==r||n==s||t.charCodeAt(r-1)!=i.charCodeAt(s-1))return 0;let a=uP(r-e,s-n);for(let o=r,l=s;;){let c=o-a,u=l-a;if(c>1}else{if(c==e||u==n)return r-c;o=c,l=u}}}function gw(t,e,r,i,n,s,a,o){let l=i.slice(n,s),c=null;for(;;){if(c||a=r)break;let d=t.slice(u,f),h=-1;for(;(h=l.indexOf(d,h+1))!=-1;){let p=yw(t,f,r,i,n+h+d.length,s),g=xw(t,e,u,i,n,n+h),v=d.length+p+g;(!c||c[2]>1}}function fP(t,e,r,i,n,s){let a=r-e,o=s-n;if(an.fromA-e&&i.toB>n.fromB-e&&(t[r-1]=new Et(i.fromA,n.toA,i.fromB,n.toB),t.splice(r--,1))}}function c5(t,e,r){for(;;){dP(r,1);let i=!1;for(let n=0;n3||o>3){let l=n==t.length-1?e.length:t[n+1].fromA,c=s.fromA-i,u=l-s.toA,f=Y2(e,s.fromA,c),d=q2(e,s.toA,u),h=s.fromA-f,p=d-s.toA;if((!a||!o)&&h&&p){let g=Math.max(a,o),[v,_,b]=a?[e,s.fromA,s.toA]:[r,s.fromB,s.toB];g>h&&e.slice(f,s.fromA)==v.slice(b-h,b)?(s=t[n]=new Et(f,f+a,s.fromB-h,s.toB-h),f=s.fromA,d=q2(e,s.toA,l-s.toA)):g>p&&e.slice(s.toA,d)==v.slice(_,_+p)&&(s=t[n]=new Et(d-a,d,s.fromB+p,s.toB+p),d=s.toA,f=Y2(e,s.fromA,s.fromA-i)),h=s.fromA-f,p=d-s.toA}if(h||p)s=t[n]=new Et(s.fromA-h,s.toA+p,s.fromB-h,s.toB+p);else if(a){if(!o){let g=Z2(e,s.fromA,s.toA),v,_=g<0?-1:X2(e,s.toA,s.fromA);g>-1&&(v=g-s.fromA)<=u&&e.slice(s.fromA,g)==e.slice(s.toA,s.toA+v)?s=t[n]=s.offset(v):_>-1&&(v=s.toA-_)<=c&&e.slice(s.fromA-v,s.fromA)==e.slice(_,s.toA)&&(s=t[n]=s.offset(-v))}}else{let g=Z2(r,s.fromB,s.toB),v,_=g<0?-1:X2(r,s.toB,s.fromB);g>-1&&(v=g-s.fromB)<=u&&r.slice(s.fromB,g)==r.slice(s.toB,s.toB+v)?s=t[n]=s.offset(v):_>-1&&(v=s.toB-_)<=c&&r.slice(s.fromB-v,s.fromB)==r.slice(_,s.toB)&&(s=t[n]=s.offset(-v))}}i=s.toA}return dP(t,3),t}var Ra;try{Ra=new RegExp("[\\p{Alphabetic}\\p{Number}]","u")}catch(t){}function hP(t){return t>48&&t<58||t>64&&t<91||t>96&&t<123}function pP(t,e){if(e==t.length)return 0;let r=t.charCodeAt(e);return r<192?hP(r)?1:0:Ra?!vP(r)||e==t.length-1?Ra.test(String.fromCharCode(r))?1:0:Ra.test(t.slice(e,e+2))?2:0:0}function mP(t,e){if(!e)return 0;let r=t.charCodeAt(e-1);return r<192?hP(r)?1:0:Ra?!wP(r)||e==1?Ra.test(String.fromCharCode(r))?1:0:Ra.test(t.slice(e-2,e))?2:0:0}var gP=8;function q2(t,e,r){if(e==t.length||!mP(t,e))return e;for(let i=e,n=e+r,s=0;sn)return i;i+=a}return e}function Y2(t,e,r){if(!e||!pP(t,e))return e;for(let i=e,n=e-r,s=0;st>=55296&&t<=56319,wP=t=>t>=56320&&t<=57343;function Rl(t,e){return!e||e==t.length||!vP(t.charCodeAt(e-1))||!wP(t.charCodeAt(e))}function f5(t,e,r){var i;let n=r==null?void 0:r.override;return n?n(t,e):(Au=((i=r==null?void 0:r.scanLimit)!==null&&i!==void 0?i:1e9)>>1,Cu=r!=null&&r.timeout?Date.now()+r.timeout:0,bw=!1,c5(t,e,$a(t,0,t.length,e,0,e.length)))}function _P(){return!bw}function bP(t,e,r){return u5(f5(t,e,r),t,e)}var zi=$e.Facet.define({combine:t=>t[0]}),vw=$e.StateEffect.define(),d5=$e.Facet.define(),Fa=$e.StateField.define({create(t){return null},update(t,e){for(let r of e.effects)r.is(vw)&&(t=r.value);for(let r of e.state.facet(d5))t=r(t,e);return t}});function Ew(t){let e=t.field(Fa,!1);if(!e)return null;let r=t.facet(zi);return{chunks:e,side:r?r.side:null}}var ts=class t{constructor(e,r,i,n,s,a=!0){this.changes=e,this.fromA=r,this.toA=i,this.fromB=n,this.toB=s,this.precise=a}offset(e,r){return e||r?new t(this.changes,this.fromA+e,this.toA+e,this.fromB+r,this.toB+r,this.precise):this}get endA(){return Math.max(this.fromA,this.toA-1)}get endB(){return Math.max(this.fromB,this.toB-1)}static build(e,r,i){let n=bP(e.toString(),r.toString(),i);return yP(n,e,r,0,0,_P())}static updateA(e,r,i,n,s){return tP(eP(e,n,!0,i.length),e,r,i,s)}static updateB(e,r,i,n,s){return tP(eP(e,n,!1,r.length),e,r,i,s)}};function K2(t,e,r,i){let n=r.lineAt(t),s=i.lineAt(e);return n.to==t&&s.to==e&&tf+1&&v>d+1)break;h.push(p.offset(-c+i,-u+n)),[f,d]=Q2(p.toA+i,p.toB+n,e,r),o++}a.push(new ts(h,c,Math.max(c,f),u,Math.max(u,d),s))}return a}var vh=1e3;function J2(t,e,r,i){let n=0,s=t.length;for(;;){if(n==s){let u=0,f=0;n&&({toA:u,toB:f}=t[n-1]);let d=e-(r?u:f);return[u+d,f+d]}let a=n+s>>1,o=t[a],[l,c]=r?[o.fromA,o.toA]:[o.fromB,o.toB];if(l>e)s=a;else if(c<=e)n=a+1;else return i?[o.fromA,o.fromB]:[o.toA,o.toB]}}function eP(t,e,r,i){let n=[];return e.iterChangedRanges((s,a,o,l)=>{let c=0,u=r?e.length:i,f=0,d=r?i:e.length;s>vh&&([c,f]=J2(t,s-vh,r,!0)),a=c?n[n.length-1]={fromA:p.fromA,fromB:p.fromB,toA:u,toB:d,diffA:p.diffA+g,diffB:p.diffB+v}:n.push({fromA:c,toA:u,fromB:f,toB:d,diffA:g,diffB:v})}),n}function tP(t,e,r,i,n){if(!t.length)return e;let s=[];for(let a=0,o=0,l=0,c=0;;a++){let u=a==t.length?null:t[a],f=u?u.fromA+o:r.length,d=u?u.fromB+l:i.length;for(;cf||v.toB+l>d))break;s.push(v.offset(o,l)),c++}if(!u)break;let h=u.toA+o+u.diffA,p=u.toB+l+u.diffB,g=bP(r.sliceString(f,h),i.sliceString(d,p),n);for(let v of yP(g,r,i,f,d,_P()))s.push(v);for(o+=u.diffA,l+=u.diffB;ch&&v.fromB+l>p)break;c++}}return s}var h5={scanLimit:500},xP=De.ViewPlugin.fromClass(class{constructor(t){({deco:this.deco,gutter:this.gutter}=nP(t))}update(t){(t.docChanged||t.viewportChanged||p5(t.startState,t.state)||m5(t.startState,t.state))&&({deco:this.deco,gutter:this.gutter}=nP(t.view))}},{decorations:t=>t.deco}),wh=$e.Prec.low((0,De.gutter)({class:"cm-changeGutter",markers:t=>{var e;return((e=t.plugin(xP))===null||e===void 0?void 0:e.gutter)||$e.RangeSet.empty}}));function p5(t,e){return t.field(Fa,!1)!=e.field(Fa,!1)}function m5(t,e){return t.facet(zi)!=e.facet(zi)}var rP=De.Decoration.line({class:"cm-changedLine"}),g5=De.Decoration.mark({class:"cm-changedText"}),v5=De.Decoration.mark({tagName:"ins",class:"cm-insertedLine"}),w5=De.Decoration.mark({tagName:"del",class:"cm-deletedLine"}),iP=new class extends De.GutterMarker{constructor(){super(...arguments),this.elementClass="cm-changedLineGutter"}};function _5(t,e,r,i,n,s){let a=r?t.fromA:t.fromB,o=r?t.toA:t.toB,l=0;if(a!=o){n.add(a,a,rP),n.add(a,o,r?w5:v5),s&&s.add(a,a,iP);for(let c=e.iterRange(a,o-1),u=a;!c.next().done;){if(c.lineBreak){u++,n.add(u,u,rP),s&&s.add(u,u,iP);continue}let f=u+c.value.length;if(i)for(;l=u)break;(a?f.toA:f.toB)>c&&(!s||!s(t.state,f,o,l))&&_5(f,t.state.doc,a,i,o,l)}return{deco:o.finish(),gutter:l&&l.finish()}}var Pl=class extends De.WidgetType{constructor(e){super(),this.height=e}eq(e){return this.height==e.height}toDOM(){let e=document.createElement("div");return e.className="cm-mergeSpacer",e.style.height=this.height+"px",e}updateDOM(e){return e.style.height=this.height+"px",!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}},xh=$e.StateEffect.define({map:(t,e)=>t.map(e)}),Tu=$e.StateField.define({create:()=>De.Decoration.none,update:(t,e)=>{for(let r of e.effects)if(r.is(xh))return r.value;return t.map(e.changes)},provide:t=>De.EditorView.decorations.from(t)}),_h=.01;function sP(t,e){if(t.size!=e.size)return!1;let r=t.iter(),i=e.iter();for(;r.value;){if(r.from!=i.from||Math.abs(r.value.spec.widget.height-i.value.spec.widget.height)>1)return!1;r.next(),i.next()}return!0}function b5(t,e,r){let i=new $e.RangeSetBuilder,n=new $e.RangeSetBuilder,s=t.state.field(Tu).iter(),a=e.state.field(Tu).iter(),o=0,l=0,c=0,u=0,f=t.viewport,d=e.viewport;for(let v=0;;v++){let _=v_h&&(u+=A,n.add(l,l,De.Decoration.widget({widget:new Pl(A),block:!0,side:-1})))}if(b>o+1e3&&of.from&&ld.from){let k=Math.min(f.from-o,d.from-l);o+=k,l+=k,v--}else if(_)o=_.toA,l=_.toB;else break;for(;s.value&&s.from_h&&n.add(e.state.doc.length,e.state.doc.length,De.Decoration.widget({widget:new Pl(h),block:!0,side:1}));let p=i.finish(),g=n.finish();sP(p,t.state.field(Tu))||t.dispatch({effects:xh.of(p)}),sP(g,e.state.field(Tu))||e.dispatch({effects:xh.of(g)})}var ww=$e.StateEffect.define({map:(t,e)=>e.mapPos(t)});var _w=class extends De.WidgetType{constructor(e){super(),this.lines=e}eq(e){return this.lines==e.lines}toDOM(e){let r=document.createElement("div");return r.className="cm-collapsedLines",r.textContent=e.state.phrase("$ unchanged lines",this.lines),r.addEventListener("click",i=>{let n=e.posAtDOM(i.target);e.dispatch({effects:ww.of(n)});let{side:s,sibling:a}=e.state.facet(zi);a&&a().dispatch({effects:ww.of(y5(n,e.state.field(Fa),s=="a"))})}),r}ignoreEvent(e){return e instanceof MouseEvent}get estimatedHeight(){return 27}get type(){return"collapsed-unchanged-code"}};function y5(t,e,r){let i=0,n=0;for(let s=0;;s++){let a=s=t)return n+(t-i);[i,n]=r?[a.toA,a.toB]:[a.toB,a.toA]}}var x5=$e.StateField.define({create(t){return De.Decoration.none},update(t,e){t=t.map(e.changes);for(let r of e.effects)r.is(ww)&&(t=t.update({filter:i=>i!=r.value}));return t},provide:t=>De.EditorView.decorations.from(t)});function aP({margin:t=3,minSize:e=4}){return x5.init(r=>E5(r,t,e))}function E5(t,e,r){let i=new $e.RangeSetBuilder,n=t.facet(zi).side=="a",s=t.field(Fa),a=1;for(let o=0;;o++){let l=o=r&&i.add(t.doc.line(c).from,t.doc.line(u).to,De.Decoration.replace({widget:new _w(f),block:!0})),!l)break;a=t.doc.lineAt(Math.min(t.doc.length,n?l.toA:l.toB)).number}return i.finish()}var S5=De.EditorView.styleModule.of(new gh({".cm-mergeView":{overflowY:"auto"},".cm-mergeViewEditors":{display:"flex",alignItems:"stretch"},".cm-mergeViewEditor":{flexGrow:1,flexBasis:0,overflow:"hidden"},".cm-merge-revert":{width:"1.6em",flexGrow:0,flexShrink:0,position:"relative"},".cm-merge-revert button":{position:"absolute",display:"block",width:"100%",boxSizing:"border-box",textAlign:"center",background:"none",border:"none",font:"inherit",cursor:"pointer"}})),k5=De.EditorView.baseTheme({".cm-mergeView & .cm-scroller, .cm-mergeView &":{height:"auto !important",overflowY:"visible !important"},"&.cm-merge-a .cm-changedLine, .cm-deletedChunk":{backgroundColor:"rgba(160, 128, 100, .08)"},"&.cm-merge-b .cm-changedLine, .cm-inlineChangedLine":{backgroundColor:"rgba(100, 160, 128, .08)"},"&light.cm-merge-a .cm-changedText, &light .cm-deletedChunk .cm-deletedText":{background:"linear-gradient(#ee443366, #ee443366) bottom/100% 2px no-repeat"},"&dark.cm-merge-a .cm-changedText, &dark .cm-deletedChunk .cm-deletedText":{background:"linear-gradient(#ffaa9966, #ffaa9966) bottom/100% 2px no-repeat"},"&light.cm-merge-b .cm-changedText":{background:"linear-gradient(#22bb22aa, #22bb22aa) bottom/100% 2px no-repeat"},"&dark.cm-merge-b .cm-changedText":{background:"linear-gradient(#88ff88aa, #88ff88aa) bottom/100% 2px no-repeat"},"&.cm-merge-b .cm-deletedText":{background:"#ff000033"},".cm-insertedLine, .cm-deletedLine, .cm-deletedLine del":{textDecoration:"none"},".cm-deletedChunk":{paddingLeft:"6px","& .cm-chunkButtons":{position:"absolute",insetInlineEnd:"5px"},"& button":{border:"none",cursor:"pointer",color:"white",margin:"0 2px",borderRadius:"3px","&[name=accept]":{background:"#2a2"},"&[name=reject]":{background:"#d43"}}},".cm-collapsedLines":{padding:"5px 5px 5px 10px",cursor:"pointer","&:before":{content:'"\u299A"',marginInlineEnd:"7px"},"&:after":{content:'"\u299A"',marginInlineStart:"7px"}},"&light .cm-collapsedLines":{color:"#444",background:"linear-gradient(to bottom, transparent 0, #f3f3f3 30%, #f3f3f3 70%, transparent 100%)"},"&dark .cm-collapsedLines":{color:"#ddd",background:"linear-gradient(to bottom, transparent 0, #222 30%, #222 70%, transparent 100%)"},".cm-changeGutter":{width:"3px",paddingLeft:"1px"},"&light.cm-merge-a .cm-changedLineGutter, &light .cm-deletedLineGutter":{background:"#e43"},"&dark.cm-merge-a .cm-changedLineGutter, &dark .cm-deletedLineGutter":{background:"#fa9"},"&light.cm-merge-b .cm-changedLineGutter":{background:"#2b2"},"&dark.cm-merge-b .cm-changedLineGutter":{background:"#8f8"},".cm-inlineChangedLineGutter":{background:"#75d"}}),oP=new $e.Compartment,bh=new $e.Compartment,Eh=class{constructor(e){this.revertDOM=null,this.revertToA=!1,this.revertToLeft=!1,this.measuring=-1,this.diffConf=e.diffConfig||h5;let r=[$e.Prec.low(xP),k5,S5,Tu,De.EditorView.updateListener.of(f=>{this.measuring<0&&(f.heightChanged||f.viewportChanged)&&!f.transactions.some(d=>d.effects.some(h=>h.is(xh)))&&this.measure()})],i=[zi.of({side:"a",sibling:()=>this.b,highlightChanges:e.highlightChanges!==!1,markGutter:e.gutter!==!1})];e.gutter!==!1&&i.push(wh);let n=$e.EditorState.create({doc:e.a.doc,selection:e.a.selection,extensions:[e.a.extensions||[],De.EditorView.editorAttributes.of({class:"cm-merge-a"}),bh.of(i),r]}),s=[zi.of({side:"b",sibling:()=>this.a,highlightChanges:e.highlightChanges!==!1,markGutter:e.gutter!==!1})];e.gutter!==!1&&s.push(wh);let a=$e.EditorState.create({doc:e.b.doc,selection:e.b.selection,extensions:[e.b.extensions||[],De.EditorView.editorAttributes.of({class:"cm-merge-b"}),bh.of(s),r]});this.chunks=ts.build(n.doc,a.doc,this.diffConf);let o=[Fa.init(()=>this.chunks),oP.of(e.collapseUnchanged?aP(e.collapseUnchanged):[])];n=n.update({effects:$e.StateEffect.appendConfig.of(o)}).state,a=a.update({effects:$e.StateEffect.appendConfig.of(o)}).state,this.dom=document.createElement("div"),this.dom.className="cm-mergeView",this.editorDOM=this.dom.appendChild(document.createElement("div")),this.editorDOM.className="cm-mergeViewEditors";let l=e.orientation||"a-b",c=document.createElement("div");c.className="cm-mergeViewEditor";let u=document.createElement("div");u.className="cm-mergeViewEditor",this.editorDOM.appendChild(l=="a-b"?c:u),this.editorDOM.appendChild(l=="a-b"?u:c),this.a=new De.EditorView({state:n,parent:c,root:e.root,dispatchTransactions:f=>this.dispatch(f,this.a)}),this.b=new De.EditorView({state:a,parent:u,root:e.root,dispatchTransactions:f=>this.dispatch(f,this.b)}),this.setupRevertControls(!!e.revertControls,e.revertControls=="b-to-a",e.renderRevertControl),e.parent&&e.parent.appendChild(this.dom),this.scheduleMeasure()}dispatch(e,r){if(e.some(i=>i.docChanged)){let i=e[e.length-1],n=e.reduce((a,o)=>a.compose(o.changes),$e.ChangeSet.empty(e[0].startState.doc.length));this.chunks=r==this.a?ts.updateA(this.chunks,i.newDoc,this.b.state.doc,n,this.diffConf):ts.updateB(this.chunks,this.a.state.doc,i.newDoc,n,this.diffConf),r.update([...e,i.state.update({effects:vw.of(this.chunks)})]);let s=r==this.a?this.b:this.a;s.update([s.state.update({effects:vw.of(this.chunks)})]),this.scheduleMeasure()}else r.update(e)}reconfigure(e){if("diffConfig"in e&&(this.diffConf=e.diffConfig),"orientation"in e){let s=e.orientation!="b-a";if(s!=(this.editorDOM.firstChild==this.a.dom.parentNode)){let a=this.a.dom.parentNode,o=this.b.dom.parentNode;a.remove(),o.remove(),this.editorDOM.insertBefore(s?a:o,this.editorDOM.firstChild),this.editorDOM.appendChild(s?o:a),this.revertToLeft=!this.revertToLeft,this.revertDOM&&(this.revertDOM.textContent="")}}if("revertControls"in e||"renderRevertControl"in e){let s=!!this.revertDOM,a=this.revertToA,o=this.renderRevert;"revertControls"in e&&(s=!!e.revertControls,a=e.revertControls=="b-to-a"),"renderRevertControl"in e&&(o=e.renderRevertControl),this.setupRevertControls(s,a,o)}let r="highlightChanges"in e,i="gutter"in e,n="collapseUnchanged"in e;if(r||i||n){let s=[],a=[];if(r||i){let o=this.a.state.facet(zi),l=i?e.gutter!==!1:o.markGutter,c=r?e.highlightChanges!==!1:o.highlightChanges;s.push(bh.reconfigure([zi.of({side:"a",sibling:()=>this.b,highlightChanges:c,markGutter:l}),l?wh:[]])),a.push(bh.reconfigure([zi.of({side:"b",sibling:()=>this.a,highlightChanges:c,markGutter:l}),l?wh:[]]))}if(n){let o=oP.reconfigure(e.collapseUnchanged?aP(e.collapseUnchanged):[]);s.push(o),a.push(o)}this.a.dispatch({effects:s}),this.b.dispatch({effects:a})}this.scheduleMeasure()}setupRevertControls(e,r,i){this.revertToA=r,this.revertToLeft=this.revertToA==(this.editorDOM.firstChild==this.a.dom.parentNode),this.renderRevert=i,!e&&this.revertDOM?(this.revertDOM.remove(),this.revertDOM=null):e&&!this.revertDOM?(this.revertDOM=this.editorDOM.insertBefore(document.createElement("div"),this.editorDOM.firstChild.nextSibling),this.revertDOM.addEventListener("mousedown",n=>this.revertClicked(n)),this.revertDOM.className="cm-merge-revert"):this.revertDOM&&(this.revertDOM.textContent="")}scheduleMeasure(){if(this.measuring<0){let e=this.dom.ownerDocument.defaultView||window;this.measuring=e.requestAnimationFrame(()=>{this.measuring=-1,this.measure()})}}measure(){b5(this.a,this.b,this.chunks),this.revertDOM&&this.updateRevertButtons()}updateRevertButtons(){let e=this.revertDOM,r=e.firstChild,i=this.a.viewport,n=this.b.viewport;for(let s=0;si.to||a.fromB>n.to)break;if(a.fromA-1&&(this.dom.ownerDocument.defaultView||window).cancelAnimationFrame(this.measuring),this.dom.remove()}};function lP(t){let e=t.nextSibling;return t.remove(),e}var Sw=require("@codemirror/state");function kw(t,e,r){let i=[],n=t.split(` +`),s=e.split(` +`);for(let a of r){let{oldStart:o,oldLines:l,newStart:c,newLines:u}=a,f=Vt.createHunk(o,l,c,u);if(a.oldLines>0){for(let d=o;dn.length&&n.last()!=""&&(f.removed.no_nl_at_eof=!0)}if(a.newLines>0){for(let d=c;ds.length&&s.last()!=""&&(f.added.no_nl_at_eof=!0)}i.push(f)}return i}function Aw(t,e,r){let i=e.lineAt(t.fromA).number,n=t.fromA==t.toA?0:Sh(e,t.endA)-i+1,s=r.lineAt(t.fromB).number,a=t.fromB==t.toB?0:Sh(r,t.endB)-s+1,o={oldStart:i,oldLines:n,newStart:s,newLines:a};return o.oldLines==0&&(o.oldStart-=1),o.newLines==0&&(o.newStart-=1),o}var EP={scanLimit:1e3,timeout:200};function A5(t,e,r,i){let n=Sw.Text.of(t.split(` +`)),s=Sw.Text.of(e.split(` +`)),a=r&&i?ts.updateB(r,n,s,i,EP):ts.build(n,s,EP),o=[];for(let l=0;lh.vend&&(f=f-(h.added.count-h.removed.count)),o>h.vend&&(d=d-(h.added.count-h.removed.count));c.added.lines=u.compareText.split(` +`).slice(f-1,d),u.compareTextHead?c.removed.lines=u.compareTextHead.split(` +`).slice(c.removed.start-1,c.removed.start-1+c.removed.count):c.removed.lines=[]}else c.added.lines=e.doc.toString().split(` +`).slice(a-1,o),o===e.doc.lines&&!e.doc.toString().endsWith(` +`)&&(c.added.no_nl_at_eof=!0),c.removed.lines=u.compareText.split(` +`).slice(c.removed.start-1,c.removed.start-1+c.removed.count),c.removed.start+c.removed.count-1===u.compareText.split(` +`).length&&!u.compareText.endsWith(` +`)&&(c.removed.no_nl_at_eof=!0);return c}},Hr=$l.StateField.define({create:t=>{},update:(t,e)=>{let r=t?{...t}:{maxDiffTimeMs:0,hunks:[],stagedHunks:[],chunks:void 0,isDirty:!1},i=!1;for(let n of e.effects)n.is(Il)&&(r.compareText=n.value.compareText,r.compareTextHead=n.value.compareTextHead,i=(t==null?void 0:t.compareText)!==n.value.compareText,i&&(r.chunks=void 0)),n.is(Pu)&&kP(r,n.value,e.state);if(r.compareText!==void 0){if(i||e.docChanged){r.isDirty=!0;let n=C5(e,r.compareText,r.chunks,r.maxDiffTimeMs);n&&kP(r,n,e.state)}}else r.compareText=void 0,r.compareTextHead=void 0,r.chunks=void 0,r.hunks=[],r.stagedHunks=[],r.isDirty=!1;return r}});function kP(t,e,r){var n,s;t.hunks=e.hunks,t.chunks=e.chunks,t.isDirty=!1,t.maxDiffTimeMs=Math.max(.95*t.maxDiffTimeMs,e.diffDuration);let i=r.field(Fl.editorInfoField).file;(s=(n=jt.plugin)==null?void 0:n.editorIntegration.signsFeature.changeStatusBar)==null||s.display(t.hunks,i)}var Cw=$l.StateField.define({create:()=>({debouncer:(0,Fl.debounce)(t=>{let{state:e,compareText:r,previousChunks:i,changeDesc:n}=t,s=AP(e,r,i,n);e.field(Fl.editorEditorField).dispatch({effects:Pu.of(s)})},1e3,!0),maxDiffTimeMs:0}),update:(t,e)=>{var r;for(let i of e.effects)if(i.is(Pu))return t.changeDesc=void 0,t;return!t.changeDesc&&e.changes?t.changeDesc=e.changes:t.changeDesc=(r=t.changeDesc)==null?void 0:r.composeDesc(e.changes),t}});function AP(t,e,r,i){let n=t.doc.toString(),s=performance.now(),{hunks:a,chunks:o}=SP(e,n,r,i),l=performance.now()-s;return{hunks:a,chunks:o,diffDuration:l}}function C5(t,e,r,i){let n=t.state,s=Math.abs(t.changes.length-t.changes.newLength),a=n.field(Cw);if(s>1e3||i>16)a.debouncer({state:n,compareText:e,previousChunks:r,changeDesc:a.changeDesc});else return a.changeDesc=void 0,AP(n,e,r,t.changes)}var Il=$l.StateEffect.define(),Pu=$l.StateEffect.define();function CP(t,e){return e.update({effects:Il.of(t)})}m();m();m();var nt;(function(t){t.INSERT="insert",t.DELETE="delete",t.CONTEXT="context"})(nt||(nt={}));var TP={LINE_BY_LINE:"line-by-line",SIDE_BY_SIDE:"side-by-side"},PP={LINES:"lines",WORDS:"words",NONE:"none"},RP={WORD:"word",CHAR:"char"},Ia;(function(t){t.AUTO="auto",t.DARK="dark",t.LIGHT="light"})(Ia||(Ia={}));m();var T5=["-","[","]","/","{","}","(",")","*","+","?",".","\\","^","$","|"],P5=RegExp("["+T5.join("\\")+"]","g");function $P(t){return t.replace(P5,"\\$&")}function Tw(t){return t&&t.replace(/\\/g,"/")}function FP(t){let e,r,i,n=0;for(e=0,i=t.length;e1?r[r.length-1]:e}function MP(t,e){return e.reduce((r,i)=>r||t.startsWith(i),!1)}var DP=["a/","b/","i/","w/","c/","o/"];function Hs(t,e,r){let i=r!==void 0?[...DP,r]:DP,n=e?new RegExp(`^${$P(e)} "?(.+?)"?$`):new RegExp('^"?(.+?)"?$'),[,s=""]=n.exec(t)||[],a=i.find(l=>s.indexOf(l)===0);return(a?s.slice(a.length):s).replace(/\s+\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:\.\d+)? [+-]\d{4}.*$/,"")}function R5(t,e){return Hs(t,"---",e)}function $5(t,e){return Hs(t,"+++",e)}function OP(t,e={}){let r=[],i=null,n=null,s=null,a=null,o=null,l=null,c=null,u="--- ",f="+++ ",d="@@",h=/^old mode (\d{6})/,p=/^new mode (\d{6})/,g=/^deleted file mode (\d{6})/,v=/^new file mode (\d{6})/,_=/^copy from "?(.+)"?/,b=/^copy to "?(.+)"?/,S=/^rename from "?(.+)"?/,k=/^rename to "?(.+)"?/,E=/^similarity index (\d+)%/,A=/^dissimilarity index (\d+)%/,w=/^index ([\da-z]+)\.\.([\da-z]+)\s*(\d{6})?/,x=/^Binary files (.*) and (.*) differ/,y=/^GIT binary patch/,C=/^index ([\da-z]+),([\da-z]+)\.\.([\da-z]+)/,P=/^mode (\d{6}),(\d{6})\.\.(\d{6})/,L=/^new file mode (\d{6})/,N=/^deleted file mode (\d{6}),(\d{6})/,B=t.replace(/\\ No newline at end of file/g,"").replace(/\r\n?/g,` +`).split(` +`);function ge(){n!==null&&i!==null&&(i.blocks.push(n),n=null)}function Le(){i!==null&&(!i.oldName&&l!==null&&(i.oldName=l),!i.newName&&c!==null&&(i.newName=c),i.newName&&(r.push(i),i=null)),l=null,c=null}function ke(){ge(),Le(),i={blocks:[],deletedLines:0,addedLines:0}}function ne(z){ge();let X;i!==null&&((X=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@.*/.exec(z))?(i.isCombined=!1,s=parseInt(X[1],10),o=parseInt(X[2],10)):(X=/^@@@ -(\d+)(?:,\d+)? -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@@.*/.exec(z))?(i.isCombined=!0,s=parseInt(X[1],10),a=parseInt(X[2],10),o=parseInt(X[3],10)):(z.startsWith(d)&&console.error("Failed to parse lines, starting in 0!"),s=0,o=0,i.isCombined=!1)),n={lines:[],oldStartLine:s,oldStartLine2:a,newStartLine:o,header:z}}function Ee(z){if(i===null||n===null||s===null||o===null)return;let X={content:z},V=i.isCombined?["+ "," +","++"]:["+"],Ne=i.isCombined?["- "," -","--"]:["-"];MP(z,V)?(i.addedLines++,X.type=nt.INSERT,X.oldNumber=void 0,X.newNumber=o++):MP(z,Ne)?(i.deletedLines++,X.type=nt.DELETE,X.oldNumber=s++,X.newNumber=void 0):(X.type=nt.CONTEXT,X.oldNumber=s++,X.newNumber=o++),n.lines.push(X)}function _e(z,X){let V=X;for(;V{if(!z||z.startsWith("*"))return;let V,Ne=B[X-1],gr=B[X+1],Nt=B[X+2];if(z.startsWith("diff --git")||z.startsWith("diff --combined")){if(ke(),(V=/^diff --git "?([a-ciow]\/.+)"? "?([a-ciow]\/.+)"?/.exec(z))&&(l=Hs(V[1],void 0,e.dstPrefix),c=Hs(V[2],void 0,e.srcPrefix)),i===null)throw new Error("Where is my file !!!");i.isGitDiff=!0;return}if(z.startsWith("Binary files")&&!(i!=null&&i.isGitDiff)){if(ke(),(V=/^Binary files "?([a-ciow]\/.+)"? and "?([a-ciow]\/.+)"? differ/.exec(z))&&(l=Hs(V[1],void 0,e.dstPrefix),c=Hs(V[2],void 0,e.srcPrefix)),i===null)throw new Error("Where is my file !!!");i.isBinary=!0;return}if((!i||!i.isGitDiff&&i&&z.startsWith(u)&&gr.startsWith(f)&&Nt.startsWith(d))&&ke(),i!=null&&i.isTooBig)return;if(i&&(typeof e.diffMaxChanges=="number"&&i.addedLines+i.deletedLines>e.diffMaxChanges||typeof e.diffMaxLineLength=="number"&&z.length>e.diffMaxLineLength)){i.isTooBig=!0,i.addedLines=0,i.deletedLines=0,i.blocks=[],n=null;let Pt=typeof e.diffTooBigMessage=="function"?e.diffTooBigMessage(r.length):"Diff too big to be displayed";ne(Pt);return}if(z.startsWith(u)&&gr.startsWith(f)||z.startsWith(f)&&Ne.startsWith(u)){if(i&&!i.oldName&&z.startsWith("--- ")&&(V=R5(z,e.srcPrefix))){i.oldName=V,i.language=IP(i.oldName,i.language);return}if(i&&!i.newName&&z.startsWith("+++ ")&&(V=$5(z,e.dstPrefix))){i.newName=V,i.language=IP(i.newName,i.language);return}}if(i&&(z.startsWith(d)||i.isGitDiff&&i.oldName&&i.newName&&!n)){ne(z);return}if(n&&(z.startsWith("+")||z.startsWith("-")||z.startsWith(" "))){Ee(z);return}let Fe=!_e(z,X);if(i===null)throw new Error("Where is my file !!!");(V=h.exec(z))?i.oldMode=V[1]:(V=p.exec(z))?i.newMode=V[1]:(V=g.exec(z))?(i.deletedFileMode=V[1],i.isDeleted=!0):(V=v.exec(z))?(i.newFileMode=V[1],i.isNew=!0):(V=_.exec(z))?(Fe&&(i.oldName=V[1]),i.isCopy=!0):(V=b.exec(z))?(Fe&&(i.newName=V[1]),i.isCopy=!0):(V=S.exec(z))?(Fe&&(i.oldName=V[1]),i.isRename=!0):(V=k.exec(z))?(Fe&&(i.newName=V[1]),i.isRename=!0):(V=x.exec(z))?(i.isBinary=!0,i.oldName=Hs(V[1],void 0,e.srcPrefix),i.newName=Hs(V[2],void 0,e.dstPrefix),ne("Binary file")):y.test(z)?(i.isBinary=!0,ne(z)):(V=E.exec(z))?i.unchangedPercentage=parseInt(V[1],10):(V=A.exec(z))?i.changedPercentage=parseInt(V[1],10):(V=w.exec(z))?(i.checksumBefore=V[1],i.checksumAfter=V[2],V[3]&&(i.mode=V[3])):(V=C.exec(z))?(i.checksumBefore=[V[2],V[3]],i.checksumAfter=V[1]):(V=P.exec(z))?(i.oldMode=[V[2],V[3]],i.newMode=V[1]):(V=L.exec(z))?(i.newFileMode=V[1],i.isNew=!0):(V=N.exec(z))&&(i.deletedFileMode=V[1],i.isDeleted=!0)}),ge(),Le(),r}m();m();m();function I5(t,e){if(t.length===0)return e.length;if(e.length===0)return t.length;let r=[],i;for(i=0;i<=e.length;i++)r[i]=[i];let n;for(n=0;n<=t.length;n++)r[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)===t.charAt(n-1)?r[i][n]=r[i-1][n-1]:r[i][n]=Math.min(r[i-1][n-1]+1,Math.min(r[i][n-1]+1,r[i-1][n]+1));return r[e.length][t.length]}function Ml(t){return(e,r)=>{let i=t(e).trim(),n=t(r).trim();return I5(i,n)/(i.length+n.length)}}function Dl(t){function e(i,n,s=new Map){let a=1/0,o;for(let l=0;l0||o.indexB>0)&&(S=v.concat(S)),(i.length>d||n.length>h)&&(S=S.concat(b)),S}return r}var Qt={INSERTS:"d2h-ins",DELETES:"d2h-del",CONTEXT:"d2h-cntx",INFO:"d2h-info",INSERT_CHANGES:"d2h-ins d2h-change",DELETE_CHANGES:"d2h-del d2h-change"},Ma={matching:PP.NONE,matchWordsThreshold:.25,maxLineLengthHighlight:1e4,diffStyle:RP.WORD,colorScheme:Ia.LIGHT},En="/",LP=Ml(t=>t.value),M5=Dl(LP);function Rw(t){return t.indexOf("dev/null")!==-1}function D5(t){return t.replace(/(]*>((.|\n)*?)<\/ins>)/g,"")}function O5(t){return t.replace(/(]*>((.|\n)*?)<\/del>)/g,"")}function Ol(t){switch(t){case nt.CONTEXT:return Qt.CONTEXT;case nt.INSERT:return Qt.INSERTS;case nt.DELETE:return Qt.DELETES}}function Ll(t){switch(t){case Ia.DARK:return"d2h-dark-color-scheme";case Ia.AUTO:return"d2h-auto-color-scheme";case Ia.LIGHT:default:return"d2h-light-color-scheme"}}function L5(t){return t?2:1}function Us(t){return t.slice(0).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")}function ki(t,e,r=!0){let i=L5(e);return{prefix:t.substring(0,i),content:r?Us(t.substring(i)):t.substring(i)}}function Da(t){let e=Tw(t.oldName),r=Tw(t.newName);if(e!==r&&!Rw(e)&&!Rw(r)){let i=[],n=[],s=e.split(En),a=r.split(En),o=s.length,l=a.length,c=0,u=o-1,f=l-1;for(;cc&&f>c&&s[u]===a[f];)n.unshift(a[f]),u-=1,f-=1;let d=i.join(En),h=n.join(En),p=s.slice(c,u+1).join(En),g=a.slice(c,f+1).join(En);return d.length&&h.length?d+En+"{"+p+" \u2192 "+g+"}"+En+h:d.length?d+En+"{"+p+" \u2192 "+g+"}":h.length?"{"+p+" \u2192 "+g+"}"+En+h:e+" \u2192 "+r}else return Rw(r)?e:r}function Nl(t){return`d2h-${FP(Da(t)).toString().slice(-6)}`}function Bl(t){let e="file-changed";return t.isRename||t.isCopy?e="file-renamed":t.isNew?e="file-added":t.isDeleted?e="file-deleted":t.newName!==t.oldName&&(e="file-renamed"),e}function Ah(t,e,r,i={}){let{matching:n,maxLineLengthHighlight:s,matchWordsThreshold:a,diffStyle:o}=Object.assign(Object.assign({},Ma),i),l=ki(t,r,!1),c=ki(e,r,!1);if(l.content.length>s||c.content.length>s)return{oldLine:{prefix:l.prefix,content:Us(l.content)},newLine:{prefix:c.prefix,content:Us(c.content)}};let u=o==="char"?jg(l.content,c.content):Zg(l.content,c.content),f=[];if(o==="word"&&n==="words"){let h=u.filter(v=>v.removed),p=u.filter(v=>v.added);M5(p,h).forEach(v=>{v[0].length===1&&v[1].length===1&&LP(v[0][0],v[1][0]){let g=p.added?"ins":p.removed?"del":null,v=f.indexOf(p)>-1?' class="d2h-change"':"",_=Us(p.value);return g!==null?`${h}<${g}${v}>${_}`:`${h}${_}`},"");return{oldLine:{prefix:l.prefix,content:D5(d)},newLine:{prefix:c.prefix,content:O5(d)}}}var NP="file-summary",N5="icon",B5={colorScheme:Ma.colorScheme},Ch=class{constructor(e,r={}){this.hoganUtils=e,this.config=Object.assign(Object.assign({},B5),r)}render(e){let r=e.map(i=>this.hoganUtils.render(NP,"line",{fileHtmlId:Nl(i),oldName:i.oldName,newName:i.newName,fileName:Da(i),deletedLines:"-"+i.deletedLines,addedLines:"+"+i.addedLines},{fileIcon:this.hoganUtils.template(N5,Bl(i))})).join(` +`);return this.hoganUtils.render(NP,"wrapper",{colorScheme:Ll(this.config.colorScheme),filesNumber:e.length,files:r})}};m();var Fw=Object.assign(Object.assign({},Ma),{renderNothingWhenEmpty:!1,matchingMaxComparisons:2500,maxLineSizeInBlockForComparison:200}),Ru="generic",BP="line-by-line",H5="icon",U5="tag",$u=class{constructor(e,r={}){this.hoganUtils=e,this.config=Object.assign(Object.assign({},Fw),r)}render(e){let r=e.map(i=>{let n;return i.blocks.length?n=this.generateFileHtml(i):n=this.generateEmptyDiff(),this.makeFileDiffHtml(i,n)}).join(` +`);return this.hoganUtils.render(Ru,"wrapper",{colorScheme:Ll(this.config.colorScheme),content:r})}makeFileDiffHtml(e,r){if(this.config.renderNothingWhenEmpty&&Array.isArray(e.blocks)&&e.blocks.length===0)return"";let i=this.hoganUtils.template(BP,"file-diff"),n=this.hoganUtils.template(Ru,"file-path"),s=this.hoganUtils.template(H5,"file"),a=this.hoganUtils.template(U5,Bl(e));return i.render({file:e,fileHtmlId:Nl(e),diffs:r,filePath:n.render({fileDiffName:Da(e)},{fileIcon:s,fileTag:a})})}generateEmptyDiff(){return this.hoganUtils.render(Ru,"empty-diff",{contentClass:"d2h-code-line",CSSLineClass:Qt})}generateFileHtml(e){let r=Dl(Ml(i=>ki(i.content,e.isCombined).content));return e.blocks.map(i=>{let n=this.hoganUtils.render(Ru,"block-header",{CSSLineClass:Qt,blockHeader:e.isTooBig?i.header:Us(i.header),lineClass:"d2h-code-linenumber",contentClass:"d2h-code-line"});return this.applyLineGroupping(i).forEach(([s,a,o])=>{if(a.length&&o.length&&!s.length)this.applyRematchMatching(a,o,r).map(([l,c])=>{let{left:u,right:f}=this.processChangedLines(e,e.isCombined,l,c);n+=u,n+=f});else if(s.length)s.forEach(l=>{let{prefix:c,content:u}=ki(l.content,e.isCombined);n+=this.generateSingleLineHtml(e,{type:Qt.CONTEXT,prefix:c,content:u,oldNumber:l.oldNumber,newNumber:l.newNumber})});else if(a.length||o.length){let{left:l,right:c}=this.processChangedLines(e,e.isCombined,a,o);n+=l,n+=c}else console.error("Unknown state reached while processing groups of lines",s,a,o)}),n}).join(` +`)}applyLineGroupping(e){let r=[],i=[],n=[];for(let s=0;s0)&&(r.push([[],i,n]),i=[],n=[]),a.type===nt.CONTEXT?r.push([[a],[],[]]):a.type===nt.INSERT&&i.length===0?r.push([[],[],[a]]):a.type===nt.INSERT&&i.length>0?n.push(a):a.type===nt.DELETE&&i.push(a)}return(i.length||n.length)&&(r.push([[],i,n]),i=[],n=[]),r}applyRematchMatching(e,r,i){let n=e.length*r.length,s=kh(e.concat(r).map(o=>o.content.length));return n{let n;return i.blocks.length?n=this.generateFileHtml(i):n=this.generateEmptyDiff(),this.makeFileDiffHtml(i,n)}).join(` +`);return this.hoganUtils.render(Fu,"wrapper",{colorScheme:Ll(this.config.colorScheme),content:r})}makeFileDiffHtml(e,r){if(this.config.renderNothingWhenEmpty&&Array.isArray(e.blocks)&&e.blocks.length===0)return"";let i=this.hoganUtils.template(G5,"file-diff"),n=this.hoganUtils.template(Fu,"file-path"),s=this.hoganUtils.template(j5,"file"),a=this.hoganUtils.template(V5,Bl(e));return i.render({file:e,fileHtmlId:Nl(e),diffs:r,filePath:n.render({fileDiffName:Da(e)},{fileIcon:s,fileTag:a})})}generateEmptyDiff(){return{right:"",left:this.hoganUtils.render(Fu,"empty-diff",{contentClass:"d2h-code-side-line",CSSLineClass:Qt})}}generateFileHtml(e){let r=Dl(Ml(i=>ki(i.content,e.isCombined).content));return e.blocks.map(i=>{let n={left:this.makeHeaderHtml(i.header,e),right:this.makeHeaderHtml("")};return this.applyLineGroupping(i).forEach(([s,a,o])=>{if(a.length&&o.length&&!s.length)this.applyRematchMatching(a,o,r).map(([l,c])=>{let{left:u,right:f}=this.processChangedLines(e.isCombined,l,c);n.left+=u,n.right+=f});else if(s.length)s.forEach(l=>{let{prefix:c,content:u}=ki(l.content,e.isCombined),{left:f,right:d}=this.generateLineHtml({type:Qt.CONTEXT,prefix:c,content:u,number:l.oldNumber},{type:Qt.CONTEXT,prefix:c,content:u,number:l.newNumber});n.left+=f,n.right+=d});else if(a.length||o.length){let{left:l,right:c}=this.processChangedLines(e.isCombined,a,o);n.left+=l,n.right+=c}else console.error("Unknown state reached while processing groups of lines",s,a,o)}),n}).reduce((i,n)=>({left:i.left+n.left,right:i.right+n.right}),{left:"",right:""})}applyLineGroupping(e){let r=[],i=[],n=[];for(let s=0;s0)&&(r.push([[],i,n]),i=[],n=[]),a.type===nt.CONTEXT?r.push([[a],[],[]]):a.type===nt.INSERT&&i.length===0?r.push([[],[],[a]]):a.type===nt.INSERT&&i.length>0?n.push(a):a.type===nt.DELETE&&i.push(a)}return(i.length||n.length)&&(r.push([[],i,n]),i=[],n=[]),r}applyRematchMatching(e,r,i){let n=e.length*r.length,s=kh(e.concat(r).map(o=>o.content.length));return n'),i.b(` +`+r),i.b(' '),i.b(` +`+r),i.b(i.rp("'),i.b(i.v(i.f("fileName",t,e,0))),i.b(""),i.b(` +`+r),i.b(' '),i.b(` +`+r),i.b(' '),i.b(i.v(i.f("addedLines",t,e,0))),i.b(""),i.b(` +`+r),i.b(' '),i.b(i.v(i.f("deletedLines",t,e,0))),i.b(""),i.b(` +`+r),i.b(" "),i.b(` +`+r),i.b(" "),i.b(` +`+r),i.b(""),i.fl()},partials:{"'),i.b(` +`+r),i.b('
    '),i.b(` +`+r),i.b(' Files changed ('),i.b(i.v(i.f("filesNumber",t,e,0))),i.b(")"),i.b(` +`+r),i.b(' hide'),i.b(` +`+r),i.b(' show'),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b('
      '),i.b(` +`+r),i.b(" "),i.b(i.t(i.f("files",t,e,0))),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b(""),i.fl()},partials:{},subs:{}});bt["generic-block-header"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b(""),i.b(` +`+r),i.b(' '),i.b(` +`+r),i.b(' '),i.b(` +`+r),i.b('
    '),i.s(i.f("blockHeader",t,e,1),t,e,0,156,173,"{{ }}")&&(i.rs(t,e,function(n,s,a){a.b(a.t(a.f("blockHeader",n,s,0)))}),t.pop()),i.s(i.f("blockHeader",t,e,1),t,e,1,0,0,"")||i.b(" "),i.b("
    "),i.b(` +`+r),i.b(" "),i.b(` +`+r),i.b(""),i.fl()},partials:{},subs:{}});bt["generic-empty-diff"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b(""),i.b(` +`+r),i.b(' '),i.b(` +`+r),i.b('
    '),i.b(` +`+r),i.b(" File without changes"),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b(" "),i.b(` +`+r),i.b(""),i.fl()},partials:{},subs:{}});bt["generic-file-path"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b(''),i.b(` +`+r),i.b(i.rp("'),i.b(i.v(i.f("fileDiffName",t,e,0))),i.b(""),i.b(` +`+r),i.b(i.rp(""),i.b(` +`+r),i.b('"),i.fl()},partials:{""),i.b(` +`+r),i.b(' '),i.b(` +`+r),i.b(" "),i.b(i.t(i.f("lineNumber",t,e,0))),i.b(` +`+r),i.b(" "),i.b(` +`+r),i.b(' '),i.b(` +`+r),i.b('
    '),i.b(` +`+r),i.s(i.f("prefix",t,e,1),t,e,0,162,238,"{{ }}")&&(i.rs(t,e,function(n,s,a){a.b(' '),a.b(a.t(a.f("prefix",n,s,0))),a.b(""),a.b(` +`+r)}),t.pop()),i.s(i.f("prefix",t,e,1),t,e,1,0,0,"")||(i.b('  '),i.b(` +`+r)),i.s(i.f("content",t,e,1),t,e,0,371,445,"{{ }}")&&(i.rs(t,e,function(n,s,a){a.b(' '),a.b(a.t(a.f("content",n,s,0))),a.b(""),a.b(` +`+r)}),t.pop()),i.s(i.f("content",t,e,1),t,e,1,0,0,"")||(i.b('
    '),i.b(` +`+r)),i.b("
    "),i.b(` +`+r),i.b(" "),i.b(` +`+r),i.b(""),i.fl()},partials:{},subs:{}});bt["generic-wrapper"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b('
    '),i.b(` +`+r),i.b(" "),i.b(i.t(i.f("content",t,e,0))),i.b(` +`+r),i.b("
    "),i.fl()},partials:{},subs:{}});bt["icon-file-added"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b('"),i.fl()},partials:{},subs:{}});bt["icon-file-changed"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b('"),i.fl()},partials:{},subs:{}});bt["icon-file-deleted"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b('"),i.fl()},partials:{},subs:{}});bt["icon-file-renamed"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b('"),i.fl()},partials:{},subs:{}});bt["icon-file"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b('"),i.fl()},partials:{},subs:{}});bt["line-by-line-file-diff"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b('
    '),i.b(` +`+r),i.b('
    '),i.b(` +`+r),i.b(" "),i.b(i.t(i.f("filePath",t,e,0))),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b('
    '),i.b(` +`+r),i.b('
    '),i.b(` +`+r),i.b(' '),i.b(` +`+r),i.b(' '),i.b(` +`+r),i.b(" "),i.b(i.t(i.f("diffs",t,e,0))),i.b(` +`+r),i.b(" "),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b("
    "),i.fl()},partials:{},subs:{}});bt["line-by-line-numbers"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b('
    '),i.b(i.v(i.f("oldNumber",t,e,0))),i.b("
    "),i.b(` +`+r),i.b('
    '),i.b(i.v(i.f("newNumber",t,e,0))),i.b("
    "),i.fl()},partials:{},subs:{}});bt["side-by-side-file-diff"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b('
    '),i.b(` +`+r),i.b('
    '),i.b(` +`+r),i.b(" "),i.b(i.t(i.f("filePath",t,e,0))),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b('
    '),i.b(` +`+r),i.b('
    '),i.b(` +`+r),i.b('
    '),i.b(` +`+r),i.b(' '),i.b(` +`+r),i.b(' '),i.b(` +`+r),i.b(" "),i.b(i.t(i.d("diffs.left",t,e,0))),i.b(` +`+r),i.b(" "),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b('
    '),i.b(` +`+r),i.b('
    '),i.b(` +`+r),i.b(' '),i.b(` +`+r),i.b(' '),i.b(` +`+r),i.b(" "),i.b(i.t(i.d("diffs.right",t,e,0))),i.b(` +`+r),i.b(" "),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b("
    "),i.b(` +`+r),i.b("
    "),i.fl()},partials:{},subs:{}});bt["tag-file-added"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b('ADDED'),i.fl()},partials:{},subs:{}});bt["tag-file-changed"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b('CHANGED'),i.fl()},partials:{},subs:{}});bt["tag-file-deleted"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b('DELETED'),i.fl()},partials:{},subs:{}});bt["tag-file-renamed"]=new St.Template({code:function(t,e,r){var i=this;return i.b(r=r||""),i.b('RENAMED'),i.fl()},partials:{},subs:{}});var Mu=class{constructor({compiledTemplates:e={},rawTemplates:r={}}){let i=Object.entries(r).reduce((n,[s,a])=>{let o=Lw.compile(a,{asString:!1});return Object.assign(Object.assign({},n),{[s]:o})},{});this.preCompiledTemplates=Object.assign(Object.assign(Object.assign({},bt),e),i)}static compile(e){return Lw.compile(e,{asString:!1})}render(e,r,i,n,s){let a=this.templateKey(e,r);try{return this.preCompiledTemplates[a].render(i,n,s)}catch(o){throw new Error(`Could not find template to render '${a}'`)}}template(e,r){return this.preCompiledTemplates[this.templateKey(e,r)]}templateKey(e,r){return`${e}-${r}`}};var W5=Object.assign(Object.assign(Object.assign({},Fw),Iw),{outputFormat:TP.LINE_BY_LINE,drawFileList:!0});function Ph(t,e={}){let r=Object.assign(Object.assign({},W5),e),i=typeof t=="string"?OP(t,r):t,n=new Mu(r),{colorScheme:s}=r,a={colorScheme:s},o=r.drawFileList?new Ch(n,a).render(i):"",l=r.outputFormat==="side-by-side"?new Iu(n,r).render(i):new $u(n,r).render(i);return o+l}var qP=Ht(zP(),1);var Oa=require("obsidian"),Nw=Du.StateEffect.define();function Gs(t,e){let r=t.state,i=r.field($h),n=r.field(Hr),s=r.doc.lineAt(e!=null?e:r.selection.main.head).number,a=Vt.findHunk(s,n==null?void 0:n.hunks)[0];if(!a)return;let o=r.doc.line(Math.max(1,a.added.start)).from,l=i.has(o);return r.field(Oa.editorEditorField).dispatch({effects:Nw.of({pos:o,add:!l})})}var $h=Du.StateField.define({create:()=>new Set,update(t,e){let r=new Set;for(let i of e.effects)i.is(Nw)&&(i.value.add?t.add(i.value.pos):t.delete(i.value.pos));for(let i of t)r.add(e.changes.mapPos(i));return r}}),YP=Du.StateField.define({create:t=>WP(t),update(t,e){return e.docChanged||e.effects.some(r=>r.is(Il)||r.is(Nw))?WP(e.state):t},provide:t=>Rh.showTooltip.computeN([t],e=>e.field(t))}),XP=Rh.EditorView.baseTheme({".cm-tooltip.git-diff-tooltip":{"z-index":"var(--layer-popover)",backgroundColor:"var(--background-primary-alt)",border:"var(--border-width) solid var(--background-primary-alt)",borderRadius:"var(--radius-s)"},".cm-tooltip.git-diff-tooltip .tooltip-toolbar":{display:"flex",padding:"var(--size-2-1)"}});function WP(t){let e=t.field(Hr);return e?[...t.field($h)].map(i=>{let n=t.doc.lineAt(i),s=Vt.findHunk(n.number,e.hunks)[0];if(s)return{pos:i,above:!1,arrow:!1,strictSide:!0,clip:!1,create:()=>q5(s,t,i)}}).filter(i=>i!==void 0):[]}function q5(t,e,r){var g,v;let i=Vt.createPatch("file",[t],"10064",!1).join(` +`)+` +`,n=Ph(i,{colorScheme:qP.ColorSchemeType.AUTO,diffStyle:"word",drawFileList:!1}),s=new DOMParser().parseFromString(n,"text/html").querySelector(".d2h-file-diff"),a=activeDocument.createDiv(),o=activeDocument.createDiv();o.addClass("tooltip-toolbar");let l=(_,b)=>{let S=activeDocument.createDiv();return(0,Oa.setIcon)(S,_),S.setAttr("aria-label",b),S.addClass("clickable-icon"),S},c=l("x","Close hunk"),u=l("plus","Stage hunk"),f=l("undo","Reset hunk");o.appendChild(c),o.appendChild(u),o.appendChild(f),a.appendChild(o),a.appendChild(s),a.addClass("git-diff-tooltip","git-diff");let d=e.field(Oa.editorEditorField);c.onclick=()=>{Gs(d,r)},u.onclick=()=>{let _=jt.plugin;_&&(_.promiseQueue.addTask(()=>_.hunkActions.stageHunk(r)),Gs(d,r))},f.onclick=()=>{let _=jt.plugin;_&&(_.hunkActions.resetHunk(r),Gs(d,r))};let h=(v=(g=jt.plugin)==null?void 0:g.app.workspace.getActiveViewOfType(Oa.MarkdownView))==null?void 0:v.scope,p=h==null?void 0:h.register(null,"Escape",(_,b)=>{Gs(d,r)});return{dom:a,destroy:()=>{p&&(h==null||h.unregister(p))},update:_=>{r=_.changes.mapPos(r)}}}function ZP(t){let e=t.app;t.addCommand({id:"edit-gitignore",name:"Edit .gitignore",callback:async()=>{let r=t.gitManager.getRelativeVaultPath(".gitignore");await e.vault.adapter.exists(r)||await e.vault.adapter.write(r,"");let i=await e.vault.adapter.read(r),s=await new mh(e,i).openAndGetReslt();s!==void 0&&(await e.vault.adapter.write(r,s),await t.refresh())}}),t.addCommand({id:"open-git-view",name:"Open source control view",callback:async()=>{var n;let r=e.workspace.getLeavesOfType(Kt.type),i;r.length===0?(i=(n=e.workspace.getRightLeaf(!1))!=null?n:e.workspace.getLeaf(),await i.setViewState({type:Kt.type})):i=r.first(),await e.workspace.revealLeaf(i),e.workspace.trigger("obsidian-git:refresh")}}),t.addCommand({id:"open-history-view",name:"Open history view",callback:async()=>{var n;let r=e.workspace.getLeavesOfType(bi.type),i;r.length===0?(i=(n=e.workspace.getRightLeaf(!1))!=null?n:e.workspace.getLeaf(),await i.setViewState({type:bi.type})):i=r.first(),await e.workspace.revealLeaf(i),e.workspace.trigger("obsidian-git:refresh")}}),t.addCommand({id:"open-diff-view",name:"Open diff view",checkCallback:r=>{let i=e.workspace.getActiveFile();if(r)return i!==null;{let n=t.gitManager.getRelativeRepoPath(i.path,!0);t.tools.openDiff({aFile:n,aRef:""})}}}),t.addCommand({id:"view-file-on-github",name:"Open file on GitHub",editorCallback:(r,{file:i})=>{if(i)return N2(r,i,t.gitManager)}}),t.addCommand({id:"view-history-on-github",name:"Open file history on GitHub",editorCallback:(r,{file:i})=>{if(i)return B2(i,t.gitManager)}}),t.addCommand({id:"pull",name:"Pull",callback:()=>t.promiseQueue.addTask(()=>t.pullChangesFromRemote())}),t.addCommand({id:"fetch",name:"Fetch",callback:()=>t.promiseQueue.addTask(()=>t.fetch())}),t.addCommand({id:"switch-to-remote-branch",name:"Switch to remote branch",callback:()=>t.promiseQueue.addTask(()=>t.switchRemoteBranch())}),t.addCommand({id:"add-to-gitignore",name:"Add file to .gitignore",checkCallback:r=>{let i=e.workspace.getActiveFile();if(r)return i!==null;t.addFileToGitignore(i.path,i instanceof qi.TFolder).catch(n=>t.displayError(n))}}),t.addCommand({id:"push",name:"Commit-and-sync",callback:()=>t.promiseQueue.addTask(()=>t.commitAndSync({fromAutoBackup:!1}))}),t.addCommand({id:"backup-and-close",name:"Commit-and-sync and then close Obsidian",callback:()=>t.promiseQueue.addTask(async()=>{await t.commitAndSync({fromAutoBackup:!1}),window.close()})}),t.addCommand({id:"commit-push-specified-message",name:"Commit-and-sync with specific message",callback:()=>t.promiseQueue.addTask(()=>t.commitAndSync({fromAutoBackup:!1,requestCustomMessage:!0}))}),t.addCommand({id:"commit",name:"Commit all changes",callback:()=>t.promiseQueue.addTask(()=>t.commit({fromAuto:!1}))}),t.addCommand({id:"commit-specified-message",name:"Commit all changes with specific message",callback:()=>t.promiseQueue.addTask(()=>t.commit({fromAuto:!1,requestCustomMessage:!0}))}),t.addCommand({id:"commit-smart",name:"Commit",callback:()=>t.promiseQueue.addTask(async()=>{let i=(await t.updateCachedStatus()).staged.length>0;return t.commit({fromAuto:!1,requestCustomMessage:!1,onlyStaged:i})})}),t.addCommand({id:"commit-staged",name:"Commit staged",checkCallback:function(r){if(r)return!1;t.promiseQueue.addTask(async()=>t.commit({fromAuto:!1,requestCustomMessage:!1}))}}),qi.Platform.isDesktopApp&&t.addCommand({id:"commit-amend-staged-specified-message",name:"Amend staged",callback:()=>t.promiseQueue.addTask(()=>t.commit({fromAuto:!1,requestCustomMessage:!0,onlyStaged:!0,amend:!0}))}),t.addCommand({id:"commit-smart-specified-message",name:"Commit with specific message",callback:()=>t.promiseQueue.addTask(async()=>{let i=(await t.updateCachedStatus()).staged.length>0;return t.commit({fromAuto:!1,requestCustomMessage:!0,onlyStaged:i})})}),t.addCommand({id:"commit-staged-specified-message",name:"Commit staged with specific message",checkCallback:function(r){return r?!1:t.promiseQueue.addTask(()=>t.commit({fromAuto:!1,requestCustomMessage:!0,onlyStaged:!0}))}}),t.addCommand({id:"push2",name:"Push",callback:()=>t.promiseQueue.addTask(()=>t.push())}),t.addCommand({id:"stage-current-file",name:"Stage current file",checkCallback:r=>{let i=e.workspace.getActiveFile();if(r)return i!==null;t.promiseQueue.addTask(()=>t.stageFile(i))}}),t.addCommand({id:"unstage-current-file",name:"Unstage current file",checkCallback:r=>{let i=e.workspace.getActiveFile();if(r)return i!==null;t.promiseQueue.addTask(()=>t.unstageFile(i))}}),t.addCommand({id:"edit-remotes",name:"Edit remotes",callback:()=>t.editRemotes().catch(r=>t.displayError(r))}),t.addCommand({id:"remove-remote",name:"Remove remote",callback:()=>t.removeRemote().catch(r=>t.displayError(r))}),t.addCommand({id:"set-upstream-branch",name:"Set upstream branch",callback:()=>t.setUpstreamBranch().catch(r=>t.displayError(r))}),t.addCommand({id:"delete-repo",name:"CAUTION: Delete repository",callback:async()=>{await e.vault.adapter.exists(`${t.settings.basePath}/.git`)?await new et(t,{options:["NO","YES"],placeholder:"Do you really want to delete the repository (.git directory)? plugin action cannot be undone.",onlySelection:!0}).openAndGetResult()==="YES"&&(await e.vault.adapter.rmdir(`${t.settings.basePath}/.git`,!0),new qi.Notice("Successfully deleted repository. Reloading plugin..."),t.unloadPlugin(),await t.init({fromReload:!0})):new qi.Notice("No repository found")}}),t.addCommand({id:"init-repo",name:"Initialize a new repo",callback:()=>t.createNewRepo().catch(r=>t.displayError(r))}),t.addCommand({id:"clone-repo",name:"Clone an existing remote repo",callback:()=>t.cloneNewRepo().catch(r=>t.displayError(r))}),t.addCommand({id:"list-changed-files",name:"List changed files",callback:async()=>{if(await t.isAllInitialized())try{let r=await t.updateCachedStatus();if(r.changed.length+r.staged.length>500){t.displayError("Too many changes to display");return}new ph(t,r.all).open()}catch(r){t.displayError(r)}}}),t.addCommand({id:"switch-branch",name:"Switch branch",callback:()=>{t.switchBranch().catch(r=>t.displayError(r))}}),t.addCommand({id:"create-branch",name:"Create new branch",callback:()=>{t.createBranch().catch(r=>t.displayError(r))}}),t.addCommand({id:"delete-branch",name:"Delete branch",callback:()=>{t.deleteBranch().catch(r=>t.displayError(r))}}),t.addCommand({id:"discard-all",name:"CAUTION: Discard all changes",callback:async()=>{let r=await t.discardAll();switch(r){case"discard":new qi.Notice("Discarded all changes in tracked files.");break;case"delete":new qi.Notice("Discarded all files.");break;case!1:break;default:Td(r)}}}),t.addCommand({id:"pause-automatic-routines",name:"Pause/Resume automatic routines",callback:()=>{let r=!t.localStorage.getPausedAutomatics();t.localStorage.setPausedAutomatics(r),r?(t.automaticsManager.unload(),new qi.Notice("Paused automatic routines.")):(t.automaticsManager.reload("commit","push","pull"),new qi.Notice("Resumed automatic routines."))}}),t.addCommand({id:"raw-command",name:"Raw command",checkCallback:r=>{let i=t.gitManager;if(r)return i instanceof Se;t.tools.runRawCommand().catch(n=>t.displayError(n))}}),t.addCommand({id:"toggle-line-author-info",name:"Toggle line author information",callback:()=>{var r;return(r=t.settingsTab)==null?void 0:r.configureLineAuthorShowStatus(!t.settings.lineAuthor.show)}}),t.addCommand({id:"reset-hunk",name:"Reset hunk",editorCheckCallback(r,i,n){if(r)return t.settings.hunks.hunkCommands&&t.hunkActions.editor!==void 0;t.hunkActions.resetHunk()}}),t.addCommand({id:"stage-hunk",name:"Stage hunk",editorCheckCallback:(r,i,n)=>{if(r)return t.settings.hunks.hunkCommands&&t.hunkActions.editor!==void 0;t.promiseQueue.addTask(()=>t.hunkActions.stageHunk())}}),t.addCommand({id:"preview-hunk",name:"Preview hunk",editorCheckCallback:(r,i,n)=>{if(r)return t.settings.hunks.hunkCommands&&t.hunkActions.editor!==void 0;let s=t.hunkActions.editor.editor;Gs(s)}}),t.addCommand({id:"next-hunk",name:"Go to next hunk",editorCheckCallback:(r,i,n)=>{if(r)return t.settings.hunks.hunkCommands&&t.hunkActions.editor!==void 0;t.hunkActions.goToHunk("next")}}),t.addCommand({id:"prev-hunk",name:"Go to previous hunk",editorCheckCallback:(r,i,n)=>{if(r)return t.settings.hunks.hunkCommands&&t.hunkActions.editor!==void 0;t.hunkActions.goToHunk("prev")}})}m();var Fh=class{constructor(e){this.plugin=e;this.prefix=this.plugin.manifest.id+":",this.app=e.app}migrate(){let e=["password","hostname","conflict","lastAutoPull","lastAutoBackup","lastAutoPush","gitPath","pluginDisabled"];for(let r of e){let i=localStorage.getItem(this.prefix+r);this.app.loadLocalStorage(this.prefix+r)==null&&i!=null&&i!=null&&(this.app.saveLocalStorage(this.prefix+r,i),localStorage.removeItem(this.prefix+r))}}getPassword(){return this.app.loadLocalStorage(this.prefix+"password")}setPassword(e){return this.app.saveLocalStorage(this.prefix+"password",e)}getUsername(){return this.app.loadLocalStorage(this.prefix+"username")}setUsername(e){return this.app.saveLocalStorage(this.prefix+"username",e)}getHostname(){return this.app.loadLocalStorage(this.prefix+"hostname")}setHostname(e){return this.app.saveLocalStorage(this.prefix+"hostname",e)}getConflict(){return this.app.loadLocalStorage(this.prefix+"conflict")=="true"}setConflict(e){return this.app.saveLocalStorage(this.prefix+"conflict",`${e}`)}getLastAutoPull(){return this.app.loadLocalStorage(this.prefix+"lastAutoPull")}setLastAutoPull(e){return this.app.saveLocalStorage(this.prefix+"lastAutoPull",e)}getLastAutoBackup(){return this.app.loadLocalStorage(this.prefix+"lastAutoBackup")}setLastAutoBackup(e){return this.app.saveLocalStorage(this.prefix+"lastAutoBackup",e)}getLastAutoPush(){return this.app.loadLocalStorage(this.prefix+"lastAutoPush")}setLastAutoPush(e){return this.app.saveLocalStorage(this.prefix+"lastAutoPush",e)}getGitPath(){return this.app.loadLocalStorage(this.prefix+"gitPath")}setGitPath(e){return this.app.saveLocalStorage(this.prefix+"gitPath",e)}getPATHPaths(){var e,r;return(r=(e=this.app.loadLocalStorage(this.prefix+"PATHPaths"))==null?void 0:e.split(":"))!=null?r:[]}setPATHPaths(e){return this.app.saveLocalStorage(this.prefix+"PATHPaths",e.join(":"))}getEnvVars(){var e;return JSON.parse((e=this.app.loadLocalStorage(this.prefix+"envVars"))!=null?e:"[]")}setEnvVars(e){return this.app.saveLocalStorage(this.prefix+"envVars",JSON.stringify(e))}getPluginDisabled(){return this.app.loadLocalStorage(this.prefix+"pluginDisabled")=="true"}setPluginDisabled(e){return this.app.saveLocalStorage(this.prefix+"pluginDisabled",`${e}`)}getPausedAutomatics(){return this.app.loadLocalStorage(this.prefix+"pausedAutomatics")=="true"}setPausedAutomatics(e){return this.app.saveLocalStorage(this.prefix+"pausedAutomatics",`${e}`)}getGutterSpacingFallbackLength(){var e;return(e=this.app.loadLocalStorage(this.prefix+"gutterSpacingFallbackLength"))!=null?e:5}setGutterSpacingFallbackLength(e){return this.app.saveLocalStorage(this.prefix+"gutterSpacingFallbackLength",e)}};m();var Hl=require("obsidian");var Ou=class{constructor(e){this.plugin=e}async hasTooBigFiles(e){let r=await this.plugin.gitManager.branchInfo(),i=r.tracking?Qn(r.tracking)[0]:null;if(!i)return!1;let n=await this.plugin.gitManager.getRemoteUrl(i);if(n!=null&&n.includes("github.com")){let s=[],a=this.plugin.gitManager;for(let o of e){let l=this.plugin.app.vault.getAbstractFileByPath(o.vaultPath),c=!1;if(l instanceof Hl.TFile)l.stat.size>=1e8&&(c=!0);else{let u=await this.plugin.app.vault.adapter.stat(o.vaultPath);u&&u.size>=1e8&&(c=!0)}if(c){let u=!1;a instanceof Se&&(u=await a.isFileTrackedByLFS(o.path)),u||s.push(o)}}if(s.length>0)return this.plugin.displayError(`Aborted commit, because the following files are too big: +- ${s.map(o=>o.vaultPath).join(` +- `)} +Please remove them or add to .gitignore.`),!0}return!1}async writeAndOpenFile(e){e!==void 0&&await this.plugin.app.vault.adapter.write(il,e);let r=!1;this.plugin.app.workspace.iterateAllLeaves(i=>{i.getDisplayText()!=""&&il.startsWith(i.getDisplayText())&&(r=!0)}),r||await this.plugin.app.workspace.openLinkText(il,"/",!0)}openDiff({aFile:e,bFile:r,aRef:i,bRef:n,event:s}){var l,c;let a=this.plugin.settings.diffStyle;Hl.Platform.isMobileApp&&(a="git_unified");let o={aFile:e,bFile:r!=null?r:e,aRef:i,bRef:n};a=="split"?(l=ji(this.plugin.app,s))==null||l.setViewState({type:Ms.type,active:!0,state:o}):a=="git_unified"&&((c=ji(this.plugin.app,s))==null||c.setViewState({type:Ds.type,active:!0,state:o}))}async runRawCommand(){let e=this.plugin.gitManager;if(!(e instanceof Se))return;let i=await new et(this.plugin,{placeholder:"push origin master",allowEmpty:!1}).openAndGetResult();i!==void 0&&this.plugin.promiseQueue.addTask(async()=>{let n=new Hl.Notice(`Running '${i}'...`,999999);try{let s=await e.rawCommand(i);s?(n.setMessage(s),window.setTimeout(()=>n.hide(),5e3)):n.hide()}catch(s){throw n.hide(),s}})}};m();var Ih=require("obsidian");var La=class extends Ih.ItemView{constructor(r,i){super(r);this.plugin=i;this.gettingDiff=!1;this.parser=new DOMParser,this.navigation=!0,this.contentEl.addClass("git-diff"),this.gitRefreshRef=this.app.workspace.on("obsidian-git:status-changed",()=>{this.refresh().catch(console.error)})}getViewType(){return Ds.type}getDisplayText(){var r;if(((r=this.state)==null?void 0:r.bFile)!=null){let i=this.state.bFile.split("/").last();return i!=null&&i.endsWith(".md")&&(i=i.slice(0,-3)),`Diff: ${i}`}return Ds.name}getIcon(){return Ds.icon}async setState(r,i){this.state=r,Ih.Platform.isMobile&&(this.leaf.view.titleEl.textContent=this.getDisplayText()),await this.refresh()}getState(){return this.state}onClose(){return this.app.workspace.offref(this.gitRefreshRef),this.app.workspace.offref(this.gitViewRefreshRef),super.onClose()}async onOpen(){return await this.refresh(),super.onOpen()}async refresh(){var r;if((r=this.state)!=null&&r.bFile&&!this.gettingDiff&&this.plugin.gitManager){this.gettingDiff=!0;try{let i=await this.plugin.gitManager.getDiffString(this.state.bFile,this.state.aRef=="HEAD",this.state.bRef);this.contentEl.empty();let n=this.plugin.gitManager.getRelativeVaultPath(this.state.bFile);if(!i){if(this.plugin.gitManager instanceof Se&&await this.plugin.gitManager.isTracked(this.state.bFile))i=[`--- ${this.state.aFile}`,`+++ ${this.state.bFile}`,""].join(` +`);else if(await this.app.vault.adapter.exists(n)){let s=await this.app.vault.adapter.read(n);i=[...`--- /dev/null ++++ ${this.state.bFile} +@@ -0,0 +1,${s.split(` +`).length} @@`.split(` +`),...s.split(` +`).map(o=>`+${o}`)].join(` +`)}}if(i){let s=this.parser.parseFromString(Ph(i),"text/html").querySelector(".d2h-file-diff");this.contentEl.append(s)}else{let s=this.contentEl.createDiv({cls:"obsidian-git-center"});s.createSpan({text:"\u26A0\uFE0F",attr:{style:"font-size: 2em"}}),s.createEl("br"),s.createSpan({text:"File not found: "+this.state.bFile})}}finally{this.gettingDiff=!1}}}};m();var rs=require("obsidian");var Gl=require("@codemirror/commands");var Mh=require("@codemirror/search"),Ul=require("@codemirror/state"),Ci=require("@codemirror/view");var Na=class extends rs.ItemView{constructor(r,i){super(r);this.plugin=i;this.refreshing=!1;this.ignoreNextModification=!1;this.navigation=!0,this.registerEvent(this.app.workspace.on("obsidian-git:status-changed",()=>{this.mergeView?this.updateRefEditors().catch(console.error):this.createMergeView().catch(console.error)})),this.intervalRef=window.setInterval(()=>{this.mergeView&&this.updateRefEditors().catch(console.error)},30*1e3),this.registerEvent(this.app.vault.on("modify",n=>{this.state.bRef==null&&n.path===this.state.bFile&&(this.ignoreNextModification?this.ignoreNextModification=!1:this.updateModifiableEditor().catch(console.error))})),this.registerEvent(this.app.vault.on("delete",n=>{this.state.bRef==null&&n.path===this.state.bFile&&this.createMergeView().catch(console.error)})),this.registerEvent(this.app.vault.on("create",n=>{this.state.bRef==null&&n.path===this.state.bFile&&this.createMergeView().catch(console.error)})),this.registerEvent(this.app.vault.on("rename",(n,s)=>{this.state.bRef==null&&(n.path===this.state.bFile||s===this.state.bFile)&&this.createMergeView().catch(console.error)})),this.fileSaveDebouncer=(0,rs.debounce)(n=>{let s=this.state.bFile;s&&(this.ignoreNextModification=!0,this.plugin.app.vault.adapter.write(this.plugin.gitManager.getRelativeVaultPath(s),n).catch(a=>this.plugin.displayError(a)))},1e3,!1)}getViewType(){return Ms.type}getDisplayText(){var r;if(((r=this.state)==null?void 0:r.bFile)!=null){let i=this.state.bFile.split("/").last();i!=null&&i.endsWith(".md")&&(i=i.slice(0,-3));let n;return this.state.bRef==null?n=" (Working Tree)":this.state.bRef==""?n=" (Index)":n="("+this.state.bRef.substring(0,7)+")",`Diff: ${i} ${n}`}return Ms.name}getIcon(){return Ms.icon}async setState(r,i){this.state=r,rs.Platform.isMobile&&(this.leaf.view.titleEl.textContent=this.getDisplayText()),await super.setState(r,i),await this.createMergeView()}getState(){return this.state}onClose(){return window.clearInterval(this.intervalRef),super.onClose()}async onOpen(){return await this.createMergeView(),super.onOpen()}async gitShow(r,i){try{return await this.plugin.gitManager.show(r,i,!1)}catch(n){if(n instanceof Nr&&(n.message.includes("does not exist")||n.message.includes("unknown revision or path")||n.message.includes("exists on disk, but not in")||n.message.includes("fatal: bad object")))return n.message.includes("fatal: bad object")&&this.plugin.displayError(n.message),"";throw n}}async bShouldBeEditable(){if(this.state.bRef!=null)return!1;let r=this.plugin.gitManager.getRelativeVaultPath(this.state.bFile);return await this.app.vault.adapter.exists(r)}async updateModifiableEditor(){if(!this.mergeView||this.refreshing)return;let r=this.mergeView.b;this.refreshing=!0;let i=await this.app.vault.adapter.read(this.state.bFile);if(i!=r.state.doc.toString()){let n=r.state.update({changes:{from:0,to:r.state.doc.length,insert:i},annotations:[Ul.Transaction.remote.of(!0)]});r.dispatch(n)}this.refreshing=!1}async updateRefEditors(){if(!this.mergeView||this.refreshing)return;let r=this.mergeView.a,i=this.mergeView.b;this.refreshing=!0;let n=await this.gitShow(this.state.aRef,this.state.aFile),s;if(this.state.bRef!=null&&(s=await this.gitShow(this.state.bRef,this.state.bFile)),n!=r.state.doc.toString()){let a=r.state.update({changes:{from:0,to:r.state.doc.length,insert:n}});r.dispatch(a)}if(s!=null&&s!=i.state.doc.toString()){let a=i.state.update({changes:{from:0,to:i.state.doc.length,insert:s}});i.dispatch(a)}this.refreshing=!1}renderButtons(){let r=activeDocument.createDiv(),i=r.createDiv();if(i.addClass("clickable-icon"),i.setAttr("aria-label",this.state.bRef==null?"Stage hunk":"Unstage hunk"),(0,rs.setIcon)(i,this.state.bRef==null?"plus":"minus"),i.onmousedown=async n=>{var h;let s=this.mergeView.b,a=this.mergeView.a,o=Ew(s.state),l=(h=r.parentElement)==null?void 0:h.indexOf(r),c=o.chunks[l],u=Aw(c,a.state.doc,s.state.doc),f=kw(this.mergeView.a.state.doc.toString(),this.mergeView.b.state.doc.toString(),[u])[0],d=Vt.createPatch(this.state.bFile,[f],"100644",this.state.bRef!=null).join(` +`)+` +`;await this.plugin.gitManager.applyPatch(d),this.plugin.app.workspace.trigger("obsidian-git:refresh")},this.state.bRef==null){let n=r.createDiv();n.addClass("clickable-icon"),n.setAttr("aria-label","Reset hunk"),(0,rs.setIcon)(n,"undo"),n.onmousedown=s=>{var f;let a=this.mergeView.a,o=this.mergeView.b,l=Ew(o.state),c=(f=r.parentElement)==null?void 0:f.indexOf(r),u=l.chunks[c];if(u){let d=u.fromA,h=u.toA,p=u.fromB,g=u.toB,v=a.state.sliceDoc(d,Math.max(d,h-1));d!=h&&g<=o.state.doc.length&&(v+=a.state.lineBreak),o.dispatch({changes:{from:p,to:Math.min(o.state.doc.length,g),insert:v},userEvent:"revert"})}}}return r.onmousedown=n=>{n.preventDefault(),n.stopPropagation()},r}async createMergeView(){var r,i,n;if((r=this.state)!=null&&r.aFile&&((i=this.state)!=null&&i.bFile)&&!this.refreshing&&this.plugin.gitManager){this.refreshing=!0,(n=this.mergeView)==null||n.destroy();let s=this.containerEl.children[1];s.empty(),this.contentEl.addClass("git-split-diff-view","git-diff"),this.bIsEditable=await this.bShouldBeEditable();let a=await this.gitShow(this.state.aRef,this.state.aFile),o;if(this.state.bRef!=null)o=await this.gitShow(this.state.bRef,this.state.bFile);else{let g=this.plugin.gitManager.getRelativeVaultPath(this.state.bFile);await this.app.vault.adapter.exists(g)?o=await this.app.vault.adapter.read(g):o=""}let l=[(0,Ci.lineNumbers)(),(0,Mh.highlightSelectionMatches)(),(0,Ci.drawSelection)(),Ci.keymap.of([...Gl.standardKeymap,Gl.indentWithTab]),(0,Gl.history)(),(0,Mh.search)(),Ci.EditorView.lineWrapping],c=this,u=Ci.ViewPlugin.define(g=>({update(v){if(v.docChanged&&!v.transactions.some(_=>_.annotation(Ul.Transaction.remote))){let _=g.state.doc.toString();c.fileSaveDebouncer(_)}}})),f={doc:a,extensions:[...l,Ci.EditorView.editable.of(!1),Ul.EditorState.readOnly.of(!0)]},d=[...l];this.bIsEditable?d.push(u):d.push(Ci.EditorView.editable.of(!1),Ul.EditorState.readOnly.of(!0));let h={doc:o,extensions:d};s.addClasses(["cm-s-obsidian","mod-cm6","markdown-source-view","cm-content"]);let p=this.plugin.gitManager instanceof Se&&(this.state.bRef===void 0||this.state.bRef==="");this.mergeView=new Eh({b:h,a:f,collapseUnchanged:{minSize:6,margin:4},renderRevertControl:p?()=>this.renderButtons():void 0,revertControls:p?"a-to-b":void 0,diffConfig:{scanLimit:this.bIsEditable?1e3:1e4},parent:s}),this.refreshing=!1}}};m();var U$=require("obsidian");m();m();m();var KP="5";var QP,JP,eR;typeof window!="undefined"&&((eR=(JP=(QP=window.__svelte)!=null?QP:window.__svelte={}).v)!=null?eR:JP.v=new Set).add(KP);m();m();m();var jl="[",Ba="[!",Bw="[?",Ha="]",is={};var Ze=Symbol(),Ti=Symbol("filename"),tR=Symbol("hmr"),Dh="http://www.w3.org/1999/xhtml";m();m();m();m();var Oh=!0;m();var I=!1;m();var ns=Array.isArray,rR=Array.prototype.indexOf,Yi=Array.prototype.includes,Vl=Array.from,Hw=Object.keys,or=Object.defineProperty,Ur=Object.getOwnPropertyDescriptor,Uw=Object.getOwnPropertyDescriptors,Gw=Object.prototype,iR=Array.prototype,zl=Object.getPrototypeOf,jw=Object.isExtensible;function Vw(t){return typeof t=="function"}var lr=()=>{};function Lh(t){for(var e=0;e{t=i,e=n});return{promise:r,resolve:t,reject:e}}m();m();var Jt=Symbol("$state"),Lu=Symbol("legacy props"),sR=Symbol(""),Bh=Symbol("proxy path"),zw=Symbol("hmr anchor"),ri=new class extends Error{constructor(){super(...arguments);Ve(this,"name","StaleReactionError");Ve(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}},nR,Ww=!!((nR=globalThis.document)!=null&&nR.contentType)&&globalThis.document.contentType.includes("xml");var Wl=3,Pi=8;m();m();function aR(t){if(I){let e=new Error(`invariant_violation +An invariant violation occurred, meaning Svelte's internal assumptions were flawed. This is a bug in Svelte, not your app \u2014 please open an issue at https://github.com/sveltejs/svelte, citing the following message: "${t}" +https://svelte.dev/e/invariant_violation`);throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/invariant_violation")}function Hh(t){if(I){let e=new Error(`lifecycle_outside_component +\`${t}(...)\` can only be used during component initialisation +https://svelte.dev/e/lifecycle_outside_component`);throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function lR(){if(I){let t=new Error("async_derived_orphan\nCannot create a `$derived(...)` with an `await` expression outside of an effect tree\nhttps://svelte.dev/e/async_derived_orphan");throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/async_derived_orphan")}function qw(){if(I){let t=new Error("bind_invalid_checkbox_value\nUsing `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\nhttps://svelte.dev/e/bind_invalid_checkbox_value");throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/bind_invalid_checkbox_value")}function cR(){if(I){let t=new Error(`derived_references_self +A derived value cannot reference itself recursively +https://svelte.dev/e/derived_references_self`);throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/derived_references_self")}function Yw(t,e,r){if(I){let i=new Error(`each_key_duplicate +${r?`Keyed each block has duplicate key \`${r}\` at indexes ${t} and ${e}`:`Keyed each block has duplicate key at indexes ${t} and ${e}`} +https://svelte.dev/e/each_key_duplicate`);throw i.name="Svelte error",i}else throw new Error("https://svelte.dev/e/each_key_duplicate")}function uR(t,e,r){if(I){let i=new Error(`each_key_volatile +Keyed each block has key that is not idempotent \u2014 the key for item at index ${t} was \`${e}\` but is now \`${r}\`. Keys must be the same each time for a given item +https://svelte.dev/e/each_key_volatile`);throw i.name="Svelte error",i}else throw new Error("https://svelte.dev/e/each_key_volatile")}function fR(t){if(I){let e=new Error(`effect_in_teardown +\`${t}\` cannot be used inside an effect cleanup function +https://svelte.dev/e/effect_in_teardown`);throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/effect_in_teardown")}function dR(){if(I){let t=new Error("effect_in_unowned_derived\nEffect cannot be created inside a `$derived` value that was not itself created inside an effect\nhttps://svelte.dev/e/effect_in_unowned_derived");throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function hR(t){if(I){let e=new Error(`effect_orphan +\`${t}\` can only be used inside an effect (e.g. during component initialisation) +https://svelte.dev/e/effect_orphan`);throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/effect_orphan")}function pR(){if(I){let t=new Error(`effect_update_depth_exceeded +Maximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state +https://svelte.dev/e/effect_update_depth_exceeded`);throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function mR(){if(I){let t=new Error(`hydration_failed +Failed to hydrate the application +https://svelte.dev/e/hydration_failed`);throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/hydration_failed")}function gR(t){if(I){let e=new Error(`props_invalid_value +Cannot do \`bind:${t}={undefined}\` when \`${t}\` has a fallback value +https://svelte.dev/e/props_invalid_value`);throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/props_invalid_value")}function vR(t){if(I){let e=new Error(`rune_outside_svelte +The \`${t}\` rune is only available inside \`.svelte\` and \`.svelte.js/ts\` files +https://svelte.dev/e/rune_outside_svelte`);throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/rune_outside_svelte")}function wR(){if(I){let t=new Error("state_descriptors_fixed\nProperty descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\nhttps://svelte.dev/e/state_descriptors_fixed");throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function _R(){if(I){let t=new Error("state_prototype_fixed\nCannot set prototype of `$state` object\nhttps://svelte.dev/e/state_prototype_fixed");throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/state_prototype_fixed")}function bR(){if(I){let t=new Error("state_unsafe_mutation\nUpdating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\nhttps://svelte.dev/e/state_unsafe_mutation");throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function yR(){if(I){let t=new Error("svelte_boundary_reset_onerror\nA `` `reset` function cannot be called while an error is still being handled\nhttps://svelte.dev/e/svelte_boundary_reset_onerror");throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}m();m();m();var Sn="font-weight: bold",kn="font-weight: normal";function xR(t){I?console.warn(`%c[svelte] await_reactivity_loss +%cDetected reactivity loss when reading \`${t}\`. This happens when state is read in an async function after an earlier \`await\` +https://svelte.dev/e/await_reactivity_loss`,Sn,kn):console.warn("https://svelte.dev/e/await_reactivity_loss")}function ER(t,e){I?console.warn(`%c[svelte] await_waterfall +%cAn async derived, \`${t}\` (${e}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app +https://svelte.dev/e/await_waterfall`,Sn,kn):console.warn("https://svelte.dev/e/await_waterfall")}function SR(){I?console.warn(`%c[svelte] derived_inert +%cReading a derived belonging to a now-destroyed effect may result in stale values +https://svelte.dev/e/derived_inert`,Sn,kn):console.warn("https://svelte.dev/e/derived_inert")}function kR(t,e,r){I?console.warn(`%c[svelte] hydration_attribute_changed +%cThe \`${t}\` attribute on \`${e}\` changed its value between server and client renders. The client value, \`${r}\`, will be ignored in favour of the server value +https://svelte.dev/e/hydration_attribute_changed`,Sn,kn):console.warn("https://svelte.dev/e/hydration_attribute_changed")}function Ua(t){I?console.warn(`%c[svelte] hydration_mismatch +%c${t?`Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${t}`:"Hydration failed because the initial UI does not match what was rendered on the server"} +https://svelte.dev/e/hydration_mismatch`,Sn,kn):console.warn("https://svelte.dev/e/hydration_mismatch")}function AR(){I?console.warn(`%c[svelte] lifecycle_double_unmount +%cTried to unmount a component that was not mounted +https://svelte.dev/e/lifecycle_double_unmount`,Sn,kn):console.warn("https://svelte.dev/e/lifecycle_double_unmount")}function Uh(t){I?console.warn(`%c[svelte] state_proxy_equality_mismatch +%cReactive \`$state(...)\` proxies and the values they proxy have different identities. Because of this, comparisons with \`${t}\` will produce unexpected results +https://svelte.dev/e/state_proxy_equality_mismatch`,Sn,kn):console.warn("https://svelte.dev/e/state_proxy_equality_mismatch")}function CR(){I?console.warn(`%c[svelte] state_proxy_unmount +%cTried to unmount a state proxy, rather than a component +https://svelte.dev/e/state_proxy_unmount`,Sn,kn):console.warn("https://svelte.dev/e/state_proxy_unmount")}function TR(){I?console.warn("%c[svelte] svelte_boundary_reset_noop\n%cA `` `reset` function only resets the boundary the first time it is called\nhttps://svelte.dev/e/svelte_boundary_reset_noop",Sn,kn):console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function PR(t){I?console.warn(`%c[svelte] transition_slide_display +%cThe \`slide\` transition does not work correctly for elements with \`display: ${t}\` +https://svelte.dev/e/transition_slide_display`,Sn,kn):console.warn("https://svelte.dev/e/transition_slide_display")}var ie=!1;function Ft(t){ie=t}var me;function Ue(t){if(t===null)throw Ua(),is;return me=t}function cr(){return Ue(tr(me))}function G(t){if(ie){if(tr(me)!==null)throw Ua(),is;me=t}}function Ga(t=1){if(ie){for(var e=t,r=me;e--;)r=tr(r);me=r}}function An(t=!0){for(var e=0,r=me;;){if(r.nodeType===Pi){var i=r.data;if(i===Ha){if(e===0)return r;e-=1}else(i===jl||i===Ba||i[0]==="["&&!isNaN(Number(i.slice(1))))&&(e+=1)}var n=tr(r);t&&r.remove(),r=n}}function Nu(t){if(!t||t.nodeType!==Pi)throw Ua(),is;return t.data}m();m();m();m();function Gh(t){return t===this.v}function Xw(t,e){return t!=t?e==e:t!==e||t!==null&&typeof t=="object"||typeof t=="function"}function jh(t){return!Xw(t,this.v)}m();var kt=!1,ss=!1,Xi=!1;m();m();m();var Bu=null;function ur(t,e){return t.label=e,zh(t.v,e),t}function zh(t,e){var r;return(r=t==null?void 0:t[Bh])==null||r.call(t,e),t}m();function Ki(t){let e=new Error,r=Y5();return r.length===0?null:(r.unshift(` +`),or(e,"stack",{value:r.join(` +`)}),or(e,"name",{value:t}),e)}function Y5(){let t=Error.stackTraceLimit;Error.stackTraceLimit=1/0;let e=new Error().stack;if(Error.stackTraceLimit=t,!e)return[];let r=e.split(` +`),i=[];for(let n=0;n{e===ja&&FR()})}ja.push(t)}function IR(){for(;ja.length>0;)FR()}m();var Kw=new WeakMap;function qh(t){var e=Z;if(e===null)return oe.f|=8388608,t;if(I&&t instanceof Error&&!Kw.has(t)&&Kw.set(t,X5(t,e)),!(e.f&32768)&&!(e.f&4))throw I&&!e.parent&&t instanceof Error&&MR(t),t;Ri(t,e)}function Ri(t,e){for(;e!==null;){if(e.f&128){if(!(e.f&32768))throw t;try{e.b.error(t);return}catch(r){t=r}}e=e.parent}throw I&&t instanceof Error&&MR(t),t}function X5(t,e){var a,o,l;let r=Ur(t,"message");if(!(r&&!r.configurable)){for(var i=Uu?" ":" ",n=` +${i}in ${((a=e.fn)==null?void 0:a.name)||""}`,s=e.ctx;s!==null;)n+=` +${i}in ${(o=s.function)==null?void 0:o[Ti].split("/").pop()}`,s=s.p;return{message:t.message+` +${n} +`,stack:(l=t.stack)==null?void 0:l.split(` +`).filter(c=>!c.includes("svelte/src/internal")).join(` +`)}}}function MR(t){let e=Kw.get(t);e&&(or(t,"message",{value:e.message}),or(t,"stack",{value:e.stack}))}m();m();var Z5=-7169;function Ge(t,e){t.f=t.f&Z5|e}function Yl(t){t.f&512||t.deps===null?Ge(t,1024):Ge(t,4096)}function DR(t){if(t!==null)for(let e of t)!(e.f&2)||!(e.f&65536)||(e.f^=65536,DR(e.deps))}function Yh(t,e,r){t.f&2048?e.add(t):t.f&4096&&r.add(t),DR(t.deps),Ge(t,1024)}m();m();m();var OR=!1,Xh=!1,UZ=Symbol();function Qw(t){var e=Xh;try{return Xh=!1,[t(),Xh]}finally{Xh=e}}m();var Pn=new Set,le=null,ju=null,Ct=null,e0=null,Va=!1,Jw=!1,qa=null,Gu=null,LR=0,J5=I?new Set:null,e4=1,Zl,Kl,Ya,ls,Rn,Vu,Gr,zu,Vs,cs,$n,Ql,Jl,zs,yt,Zh,BR,Kh,t0,Qh,HR,Jh=class Jh{constructor(){pe(this,yt);Ve(this,"id",e4++);Ve(this,"current",new Map);Ve(this,"previous",new Map);pe(this,Zl,new Set);pe(this,Kl,new Set);pe(this,Ya,new Set);pe(this,ls,new Map);pe(this,Rn,new Map);pe(this,Vu,null);pe(this,Gr,[]);pe(this,zu,[]);pe(this,Vs,new Set);pe(this,cs,new Set);pe(this,$n,new Map);pe(this,Ql,new Set);Ve(this,"is_fork",!1);pe(this,Jl,!1);pe(this,zs,new Set)}skip_effect(e){R(this,$n).has(e)||R(this,$n).set(e,{d:[],m:[]}),R(this,Ql).delete(e)}unskip_effect(e,r=i=>this.schedule(i)){var i=R(this,$n).get(e);if(i){R(this,$n).delete(e);for(var n of i.d)Ge(n,2048),r(n);for(n of i.m)Ge(n,4096),r(n)}R(this,Ql).add(e)}capture(e,r,i=!1){e.v!==Ze&&!this.previous.has(e)&&this.previous.set(e,e.v),e.f&8388608||(this.current.set(e,[r,i]),Ct==null||Ct.set(e,r)),this.is_fork||(e.v=r)}activate(){le=this}deactivate(){le=null,Ct=null}flush(){var e=I?new Set:null;try{Jw=!0,le=this,Me(this,yt,Kh).call(this)}finally{if(LR=0,e0=null,qa=null,Gu=null,Jw=!1,le=null,Ct=null,us.clear(),I)for(let r of e)r.updated=null}}discard(){for(let e of R(this,Kl))e(this);R(this,Kl).clear(),R(this,Ya).clear(),Pn.delete(this)}register_created_effect(e){R(this,zu).push(e)}increment(e,r){var n,s;let i=(n=R(this,ls).get(r))!=null?n:0;if(R(this,ls).set(r,i+1),e){let a=(s=R(this,Rn).get(r))!=null?s:0;R(this,Rn).set(r,a+1)}}decrement(e,r,i){var s,a;let n=(s=R(this,ls).get(r))!=null?s:0;if(n===1?R(this,ls).delete(r):R(this,ls).set(r,n-1),e){let o=(a=R(this,Rn).get(r))!=null?a:0;o===1?R(this,Rn).delete(r):R(this,Rn).set(r,o-1)}R(this,Jl)||i||(we(this,Jl,!0),It(()=>{we(this,Jl,!1),this.flush()}))}transfer_effects(e,r){for(let i of e)R(this,Vs).add(i);for(let i of r)R(this,cs).add(i);e.clear(),r.clear()}oncommit(e){R(this,Zl).add(e)}ondiscard(e){R(this,Kl).add(e)}on_fork_commit(e){R(this,Ya).add(e)}run_fork_commit_callbacks(){for(let e of R(this,Ya))e(this);R(this,Ya).clear()}settled(){var e;return((e=R(this,Vu))!=null?e:we(this,Vu,Nh())).promise}static ensure(){if(le===null){let e=le=new Jh;Jw||(Pn.add(le),Va||It(()=>{le===e&&e.flush()}))}return le}apply(){if(!kt||!this.is_fork&&Pn.size===1){Ct=null;return}Ct=new Map;for(let[i,[n]]of this.current)Ct.set(i,n);for(let i of Pn)if(!(i===this||i.is_fork)){var e=!1,r=!1;if(i.id0},BR=function(){for(let i of R(this,zs))for(let n of R(i,Rn).keys()){for(var e=!1,r=n;r.parent!==null;){if(R(this,$n).has(r)){e=!0;break}r=r.parent}if(!e)return!0}return!1},Kh=function(){var o,l;if(LR++>1e3&&(Pn.delete(this),t4()),!Me(this,yt,Zh).call(this)){for(let c of R(this,Vs))R(this,cs).delete(c),Ge(c,2048),this.schedule(c);for(let c of R(this,cs))Ge(c,4096),this.schedule(c)}let e=R(this,Gr);we(this,Gr,[]),this.apply();var r=qa=[],i=[],n=Gu=[];for(let c of e)try{Me(this,yt,t0).call(this,c,r,i)}catch(u){throw jR(c),u}if(le=null,n.length>0){var s=Jh.ensure();for(let c of n)s.schedule(c)}if(qa=null,Gu=null,Me(this,yt,Zh).call(this)||Me(this,yt,BR).call(this)){Me(this,yt,Qh).call(this,i),Me(this,yt,Qh).call(this,r);for(let[c,u]of R(this,$n))GR(c,u)}else{R(this,ls).size===0&&Pn.delete(this),R(this,Vs).clear(),R(this,cs).clear();for(let c of R(this,Zl))c(this);R(this,Zl).clear(),ju=this,NR(i),NR(r),ju=null,(o=R(this,Vu))==null||o.resolve()}var a=le;if(R(this,Gr).length>0){let c=a!=null?a:a=this;R(c,Gr).push(...R(this,Gr).filter(u=>!R(c,Gr).includes(u)))}if(a!==null){if(Pn.add(a),I)for(let c of this.current.keys())J5.add(c);Me(l=a,yt,Kh).call(l)}kt&&!Pn.has(this)&&Me(this,yt,HR).call(this)},t0=function(e,r,i){e.f^=1024;for(var n=e.first;n!==null;){var s=n.f,a=(s&96)!==0,o=a&&(s&1024)!==0,l=o||(s&8192)!==0||R(this,$n).has(n);if(!l&&n.fn!==null){a?n.f^=1024:s&4?r.push(n):kt&&s&16777224?i.push(n):Ws(n)&&(s&16&&R(this,cs).add(n),Fn(n));var c=n.first;if(c!==null){n=c;continue}}for(;n!==null;){var u=n.next;if(u!==null){n=u;break}n=n.parent}}},Qh=function(e){for(var r=0;r!this.current.has(p));if(n.length===0)e&&h.discard();else if(r.length>0){if(I&&$R(R(h,Gr).length===0,"Batch has scheduled roots"),e)for(let p of R(this,Ql))h.unskip_effect(p,g=>{var v;g.f&4194320?h.schedule(g):Me(v=h,yt,Qh).call(v,[g])});h.activate();var s=new Set,a=new Map;for(var o of r)UR(o,n,s,a);a=new Map;var l=[...h.current.keys()].filter(p=>this.current.has(p)?this.current.get(p)[0]!==p:!0);for(let p of R(this,zu))!(p.f&155648)&&r0(p,l,a)&&(p.f&4194320?(Ge(p,2048),h.schedule(p)):R(h,Vs).add(p));if(R(h,Gr).length>0){h.apply();for(var c of R(h,Gr))Me(u=h,yt,t0).call(u,c,[],[]);we(h,Gr,[])}h.deactivate()}}for(let h of Pn)R(h,zs).has(this)&&(R(h,zs).delete(this),R(h,zs).size===0&&!Me(f=h,yt,Zh).call(f)&&(h.activate(),Me(d=h,yt,Kh).call(d)))};var ni=Jh;function Za(t){var e=Va;Va=!0;try{var r;for(t&&(le!==null&&!le.is_fork&&le.flush(),r=t());;){if(IR(),le===null)return r;le.flush()}}finally{Va=e}}function t4(){var r;if(I){var t=new Map;for(let i of le.current.keys())for(let[n,s]of(r=i.updated)!=null?r:[]){var e=t.get(n);e||(e={error:s.error,count:0},t.set(n,e)),e.count+=s.count}for(let i of t.values())i.error&&console.error(i.error)}try{pR()}catch(i){I&&or(i,"stack",{value:""}),Ri(i,e0)}}var jr=null;function NR(t){var e=t.length;if(e!==0){for(var r=0;r0)){us.clear();for(let n of jr){if(n.f&24576)continue;let s=[n],a=n.parent;for(;a!==null;)jr.has(a)&&(jr.delete(a),s.push(a)),a=a.parent;for(let o=s.length-1;o>=0;o--){let l=s[o];l.f&24576||Fn(l)}}jr.clear()}}jr=null}}function UR(t,e,r,i){if(!r.has(t)&&(r.add(t),t.reactions!==null))for(let n of t.reactions){let s=n.f;s&2?UR(n,e,r,i):s&4194320&&!(s&2048)&&r0(n,e,i)&&(Ge(n,2048),Wu(n))}}function r0(t,e,r){let i=r.get(t);if(i!==void 0)return i;if(t.deps!==null)for(let n of t.deps){if(Yi.call(e,n))return!0;if(n.f&2&&r0(n,e,r))return r.set(n,!0),!0}return r.set(t,!1),!1}function Wu(t){le.schedule(t)}function GR(t,e){if(!(t.f&32&&t.f&1024)){t.f&2048?e.d.push(t):t.f&4096&&e.m.push(t),Ge(t,1024);for(var r=t.first;r!==null;)GR(r,e),r=r.next}}function jR(t){Ge(t,1024);for(var e=t.first;e!==null;)jR(e),e=e.next}m();m();m();m();function zR(t){let e=0,r=pr(0),i;return I&&ur(r,"createSubscriber version"),()=>{js()&&($(r),nr(()=>(e===0&&(i=We(()=>t(()=>Ka(r)))),e+=1,()=>{It(()=>{e-=1,e===0&&(i==null||i(),i=void 0,Ka(r))})})))}}var i4=589824;function l0(t,e,r,i){new n0(t,e,r,i)}var si,qu,Fi,Qa,Vr,Ii,kr,ai,fs,Ja,qs,tc,Yu,Xu,In,np,tt,WR,qR,YR,s0,rp,ip,a0,o0,n0=class{constructor(e,r,i,n){pe(this,tt);Ve(this,"parent");Ve(this,"is_pending",!1);Ve(this,"transform_error");pe(this,si);pe(this,qu,ie?me:null);pe(this,Fi);pe(this,Qa);pe(this,Vr);pe(this,Ii,null);pe(this,kr,null);pe(this,ai,null);pe(this,fs,null);pe(this,Ja,0);pe(this,qs,0);pe(this,tc,!1);pe(this,Yu,new Set);pe(this,Xu,new Set);pe(this,In,null);pe(this,np,zR(()=>(we(this,In,pr(R(this,Ja))),I&&ur(R(this,In),"$effect.pending()"),()=>{we(this,In,null)})));var s,a;we(this,si,e),we(this,Fi,r),we(this,Qa,o=>{var l=Z;l.b=this,l.f|=128,i(o)}),this.parent=Z.b,this.transform_error=(a=n!=null?n:(s=this.parent)==null?void 0:s.transform_error)!=null?a:o=>o,we(this,Vr,oi(()=>{if(ie){let o=R(this,qu);cr();let l=o.data===Ba;if(o.data.startsWith(Bw)){let u=JSON.parse(o.data.slice(Bw.length));Me(this,tt,qR).call(this,u)}else l?Me(this,tt,YR).call(this):Me(this,tt,WR).call(this)}else Me(this,tt,s0).call(this)},i4)),ie&&we(this,si,me)}defer_effect(e){Yh(e,R(this,Yu),R(this,Xu))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!R(this,Fi).pending}update_pending_count(e,r){Me(this,tt,a0).call(this,e,r),we(this,Ja,R(this,Ja)+e),!(!R(this,In)||R(this,tc))&&(we(this,tc,!0),It(()=>{we(this,tc,!1),R(this,In)&&en(R(this,In),R(this,Ja))}))}get_effect_pending(){return R(this,np).call(this),$(R(this,In))}error(e){var r;if(!R(this,Fi).onerror&&!R(this,Fi).failed)throw e;(r=le)!=null&&r.is_fork?(R(this,Ii)&&le.skip_effect(R(this,Ii)),R(this,kr)&&le.skip_effect(R(this,kr)),R(this,ai)&&le.skip_effect(R(this,ai)),le.on_fork_commit(()=>{Me(this,tt,o0).call(this,e)})):Me(this,tt,o0).call(this,e)}};si=new WeakMap,qu=new WeakMap,Fi=new WeakMap,Qa=new WeakMap,Vr=new WeakMap,Ii=new WeakMap,kr=new WeakMap,ai=new WeakMap,fs=new WeakMap,Ja=new WeakMap,qs=new WeakMap,tc=new WeakMap,Yu=new WeakMap,Xu=new WeakMap,In=new WeakMap,np=new WeakMap,tt=new WeakSet,WR=function(){try{we(this,Ii,qt(()=>R(this,Qa).call(this,R(this,si))))}catch(e){this.error(e)}},qR=function(e){let r=R(this,Fi).failed;r&&we(this,ai,qt(()=>{r(R(this,si),()=>e,()=>()=>{})}))},YR=function(){let e=R(this,Fi).pending;e&&(this.is_pending=!0,we(this,kr,qt(()=>e(R(this,si)))),It(()=>{var r=we(this,fs,document.createDocumentFragment()),i=Lt();r.append(i),we(this,Ii,Me(this,tt,ip).call(this,()=>qt(()=>R(this,Qa).call(this,i)))),R(this,qs)===0&&(R(this,si).before(r),we(this,fs,null),Mn(R(this,kr),()=>{we(this,kr,null)}),Me(this,tt,rp).call(this,le))}))},s0=function(){try{if(this.is_pending=this.has_pending_snippet(),we(this,qs,0),we(this,Ja,0),we(this,Ii,qt(()=>{R(this,Qa).call(this,R(this,si))})),R(this,qs)>0){var e=we(this,fs,document.createDocumentFragment());rc(R(this,Ii),e);let r=R(this,Fi).pending;we(this,kr,qt(()=>r(R(this,si))))}else Me(this,tt,rp).call(this,le)}catch(r){this.error(r)}},rp=function(e){this.is_pending=!1,e.transfer_effects(R(this,Yu),R(this,Xu))},ip=function(e){var r=Z,i=oe,n=ye;Ot(R(this,Vr)),Dt(R(this,Vr)),as(R(this,Vr).ctx);try{return ni.ensure(),e()}catch(s){return qh(s),null}finally{Ot(r),Dt(i),as(n)}},a0=function(e,r){var i;if(!this.has_pending_snippet()){this.parent&&Me(i=this.parent,tt,a0).call(i,e,r);return}we(this,qs,R(this,qs)+e),R(this,qs)===0&&(Me(this,tt,rp).call(this,r),R(this,kr)&&Mn(R(this,kr),()=>{we(this,kr,null)}),R(this,fs)&&(R(this,si).before(R(this,fs)),we(this,fs,null)))},o0=function(e){R(this,Ii)&&(mt(R(this,Ii)),we(this,Ii,null)),R(this,kr)&&(mt(R(this,kr)),we(this,kr,null)),R(this,ai)&&(mt(R(this,ai)),we(this,ai,null)),ie&&(Ue(R(this,qu)),Ga(),Ue(An()));var r=R(this,Fi).onerror;let i=R(this,Fi).failed;var n=!1,s=!1;let a=()=>{if(n){TR();return}n=!0,s&&yR(),R(this,ai)!==null&&Mn(R(this,ai),()=>{we(this,ai,null)}),Me(this,tt,ip).call(this,()=>{Me(this,tt,s0).call(this)})},o=l=>{try{s=!0,r==null||r(l,a),s=!1}catch(c){Ri(c,R(this,Vr)&&R(this,Vr).parent)}i&&we(this,ai,Me(this,tt,ip).call(this,()=>{try{return qt(()=>{var c=Z;c.b=this,c.f|=128,i(R(this,si),()=>l,()=>a)})}catch(c){return Ri(c,R(this,Vr).parent),null}}))};It(()=>{var l;try{l=this.transform_error(e)}catch(c){Ri(c,R(this,Vr)&&R(this,Vr).parent);return}l!==null&&typeof l=="object"&&typeof l.then=="function"?l.then(o,c=>Ri(c,R(this,Vr)&&R(this,Vr).parent)):o(l)})};function sp(t,e,r,i){let n=Tn()?eo:to;var s=t.filter(d=>!d.settled);if(r.length===0&&s.length===0){i(e.map(n));return}var a=Z,o=XR(),l=s.length===1?s[0].promise:s.length>1?Promise.all(s.map(d=>d.promise)):null;function c(d){o();try{i(d)}catch(h){a.f&16384||Ri(h,a)}ic()}if(r.length===0){l.then(()=>c(e.map(n)));return}var u=Zu();function f(){Promise.all(r.map(d=>u0(d))).then(d=>c([...e.map(n),...d])).catch(d=>Ri(d,a)).finally(()=>u())}l?l.then(()=>{o(),f(),ic()}):f()}function XR(){var t=Z,e=oe,r=ye,i=le;if(I)var n=Cn;return function(a=!0){Ot(t),Dt(e),as(r),a&&!(t.f&16384)&&(i==null||i.activate(),i==null||i.apply()),I&&(c0(null),ql(n))}}function ic(t=!0){var e;Ot(null),Dt(null),as(null),t&&((e=le)==null||e.deactivate()),I&&(c0(null),ql(null))}function Zu(){var t=Z,e=t.b,r=le,i=e.is_rendered();return e.update_pending_count(1,r),r.increment(i,t),(n=!1)=>{e.update_pending_count(-1,r),r.decrement(i,t,n)}}var Wr=null;function c0(t){Wr=t}var Ku=new Set;function eo(t){var e=2050;Z!==null&&(Z.f|=524288);let r={ctx:ye,deps:null,effects:null,equals:Gh,f:e,fn:t,reactions:null,rv:0,v:Ze,wv:0,parent:Z,ac:null};return I&&Xi&&(r.created=Ki("created at")),r}function u0(t,e,r){let i=Z;i===null&&lR();var n=void 0,s=pr(Ze);I&&(s.label=e);var a=!oe,o=new Map;return QR(()=>{var h;var l=Z;I&&(Wr={effect:l,effect_deps:new Set,warned:!1});var c=Nh();n=c.promise;try{Promise.resolve(t()).then(c.resolve,c.reject).finally(ic)}catch(p){c.reject(p),ic()}if(I){if(Wr){if(l.deps!==null)for(let p=0;p{if(I&&(Wr=null),f){var v=g===ri;f(v)}if(!(g===ri||l.f&16384)){if(u.activate(),g)s.f|=8388608,en(s,g);else{s.f&8388608&&(s.f^=8388608),en(s,p);for(let[_,b]of o){if(o.delete(_),_===u)break;b.reject(ri)}I&&r!==void 0&&(Ku.add(s),setTimeout(()=>{Ku.has(s)&&(ER(s.label,r),Ku.delete(s))}))}u.deactivate()}};c.promise.then(d,p=>d(null,p||"unknown"))}),dr(()=>{for(let l of o.values())l.reject(ri)}),I&&(s.f|=4194304),new Promise(l=>{function c(u){function f(){u===n?l(s):c(n)}u.then(f,f)}c(n)})}function ut(t){let e=eo(t);return kt||op(e),e}function to(t){let e=eo(t);return e.equals=jh,e}function ZR(t){var e=t.effects;if(e!==null){t.effects=null;for(var r=0;r5){let l=Ki("updated at");if(l!==null){let c=t.updated.get(l.stack);c||(c={error:l,count:0},t.updated.set(l.stack,c)),c.count++}}}Z!==null&&(t.set_during_effect=!0)}if(t.f&2){let o=t;t.f&2048&&Qu(o),Ct===null&&Yl(o)}t.wv=ec(),e$(t,2048,r),Tn()&&Z!==null&&Z.f&1024&&!(Z.f&96)&&(ui===null?t$([t]):ui.push(t)),!i.is_fork&&ro.size>0&&!p0&&tp()}return e}function tp(){p0=!1;for(let t of ro)t.f&1024&&Ge(t,4096),Ws(t)&&Fn(t);ro.clear()}function Ka(t){se(t,t.v+1)}function e$(t,e,r){var d;var i=t.reactions;if(i!==null)for(var n=Tn(),s=i.length,a=0;a{if(Ys===a)return f();var d=oe,h=Ys;Dt(null),m0(a);var p=f();return Dt(d),m0(h),p};i&&(r.set("length",Oe(t.length,s)),I&&(t=o4(t)));var l="";let c=!1;function u(f){if(!c){c=!0,l=f,ur(n,`${l} version`);for(let[d,h]of r)ur(h,no(l,d));c=!1}}return new Proxy(t,{defineProperty(f,d,h){(!("value"in h)||h.configurable===!1||h.enumerable===!1||h.writable===!1)&&wR();var p=r.get(d);return p===void 0?o(()=>{var g=Oe(h.value,s);return r.set(d,g),I&&typeof d=="string"&&ur(g,no(l,d)),g}):se(p,h.value,!0),!0},deleteProperty(f,d){var h=r.get(d);if(h===void 0){if(d in f){let p=o(()=>Oe(Ze,s));r.set(d,p),Ka(n),I&&ur(p,no(l,d))}}else se(h,Ze),Ka(n);return!0},get(f,d,h){var _;if(d===Jt)return t;if(I&&d===Bh)return u;var p=r.get(d),g=d in f;if(p===void 0&&(!g||(_=Ur(f,d))!=null&&_.writable)&&(p=o(()=>{var b=Qe(g?f[d]:Ze),S=Oe(b,s);return I&&ur(S,no(l,d)),S}),r.set(d,p)),p!==void 0){var v=$(p);return v===Ze?void 0:v}return Reflect.get(f,d,h)},getOwnPropertyDescriptor(f,d){var h=Reflect.getOwnPropertyDescriptor(f,d);if(h&&"value"in h){var p=r.get(d);p&&(h.value=$(p))}else if(h===void 0){var g=r.get(d),v=g==null?void 0:g.v;if(g!==void 0&&v!==Ze)return{enumerable:!0,configurable:!0,value:v,writable:!0}}return h},has(f,d){var v;if(d===Jt)return!0;var h=r.get(d),p=h!==void 0&&h.v!==Ze||Reflect.has(f,d);if(h!==void 0||Z!==null&&(!p||(v=Ur(f,d))!=null&&v.writable)){h===void 0&&(h=o(()=>{var _=p?Qe(f[d]):Ze,b=Oe(_,s);return I&&ur(b,no(l,d)),b}),r.set(d,h));var g=$(h);if(g===Ze)return!1}return p},set(f,d,h,p){var w;var g=r.get(d),v=d in f;if(i&&d==="length")for(var _=h;_Oe(Ze,s)),r.set(_+"",b),I&&ur(b,no(l,_)))}if(g===void 0)(!v||(w=Ur(f,d))!=null&&w.writable)&&(g=o(()=>Oe(void 0,s)),I&&ur(g,no(l,d)),se(g,Qe(h)),r.set(d,g));else{v=g.v!==Ze;var S=o(()=>Qe(h));se(g,S)}var k=Reflect.getOwnPropertyDescriptor(f,d);if(k!=null&&k.set&&k.set.call(p,h),!v){if(i&&typeof d=="string"){var E=r.get("length"),A=Number(d);Number.isInteger(A)&&A>=E.v&&se(E,A+1)}Ka(n)}return!0},ownKeys(f){$(n);var d=Reflect.ownKeys(f).filter(g=>{var v=r.get(g);return v===void 0||v.v!==Ze});for(var[h,p]of r)p.v!==Ze&&!(h in f)&&d.push(h);return d},setPrototypeOf(){_R()}})}function no(t,e){var r;return typeof e=="symbol"?`${t}[Symbol(${(r=e.description)!=null?r:""})]`:s4.test(e)?`${t}.${e}`:/^\d+$/.test(e)?`${t}[${e}]`:`${t}['${e}']`}function lp(t){try{if(t!==null&&typeof t=="object"&&Jt in t)return t[Jt]}catch(e){}return t}var a4=new Set(["copyWithin","fill","pop","push","reverse","shift","sort","splice","unshift"]);function o4(t){return new Proxy(t,{get(e,r,i){var n=Reflect.get(e,r,i);return a4.has(r)?function(...s){JR();var a=n.apply(this,s);return tp(),a}:n}})}function r$(){let t=Array.prototype,e=Array.__svelte_cleanup;e&&e();let{indexOf:r,lastIndexOf:i,includes:n}=t;t.indexOf=function(s,a){let o=r.call(this,s,a);if(o===-1){for(let l=a!=null?a:0;l{t.indexOf=r,t.lastIndexOf=i,t.includes=n}}var g0,i$,Uu,n$,s$;function cp(){if(g0===void 0){g0=window,i$=document,Uu=/Firefox/.test(navigator.userAgent);var t=Element.prototype,e=Node.prototype,r=Text.prototype;n$=Ur(e,"firstChild").get,s$=Ur(e,"nextSibling").get,jw(t)&&(t.__click=void 0,t.__className=void 0,t.__attributes=null,t.__style=void 0,t.__e=void 0),jw(r)&&(r.__t=void 0),I&&(t.__svelte_meta=null,r$())}}function Lt(t=""){return document.createTextNode(t)}function sr(t){return n$.call(t)}function tr(t){return s$.call(t)}function j(t,e){if(!ie)return sr(t);var r=sr(me);if(r===null)r=me.appendChild(Lt());else if(e&&r.nodeType!==Wl){var i=Lt();return r==null||r.before(i),Ue(i),i}return e&&fp(r),Ue(r),r}function Mi(t,e=!1){var n,s;if(!ie){var r=sr(t);return r instanceof Comment&&r.data===""?tr(r):r}if(e){if(((n=me)==null?void 0:n.nodeType)!==Wl){var i=Lt();return(s=me)==null||s.before(i),Ue(i),i}fp(me)}return me}function te(t,e=1,r=!1){let i=ie?me:t;for(var n;e--;)n=i,i=tr(i);if(!ie)return i;if(r){if((i==null?void 0:i.nodeType)!==Wl){var s=Lt();return i===null?n==null||n.after(s):i.before(s),Ue(s),s}fp(i)}return Ue(i),i}function sc(t){t.textContent=""}function up(){if(!kt||jr!==null)return!1;var t=Z.f;return(t&32768)!==0}function On(t,e,r){let i=r?{is:r}:void 0;return document.createElementNS(e!=null?e:Dh,t,i)}function fp(t){if(t.nodeValue.length<65536)return;let e=t.nextSibling;for(;e!==null&&e.nodeType===Wl;)e.remove(),t.nodeValue+=e.nodeValue,e=t.nextSibling}m();m();function v0(t){ie&&sr(t)!==null&&sc(t)}var a$=!1;function w0(){a$||(a$=!0,document.addEventListener("reset",t=>{Promise.resolve().then(()=>{var e;if(!t.defaultPrevented)for(let r of t.target.elements)(e=r.__on_r)==null||e.call(r)})},{capture:!0}))}function tn(t){var e=oe,r=Z;Dt(null),Ot(null);try{return t()}finally{Dt(e),Ot(r)}}function _0(t,e,r,i=r){t.addEventListener(e,()=>tn(r));let n=t.__on_r;n?t.__on_r=()=>{n(),i(!0)}:t.__on_r=()=>i(!0),w0()}function l$(t){Z===null&&(oe===null&&hR(t),dR()),li&&fR(t)}function c4(t,e){var r=e.last;r===null?e.last=e.first=t:(r.next=t,t.prev=r,e.last=t)}function Ln(t,e){var a,o;var r=Z;if(I)for(;r!==null&&r.f&131072;)r=r.parent;r!==null&&r.f&8192&&(t|=8192);var i={ctx:ye,deps:null,nodes:null,f:t|2048|512,first:null,fn:e,last:null,next:null,parent:r,b:r&&r.b,prev:null,teardown:null,wv:0,ac:null};I&&(i.component_function=Qi),(a=le)==null||a.register_created_effect(i);var n=i;if(t&4)qa!==null?qa.push(i):ni.ensure().schedule(i);else if(e!==null){try{Fn(i)}catch(l){throw mt(i),l}n.deps===null&&n.teardown===null&&n.nodes===null&&n.first===n.last&&!(n.f&524288)&&(n=n.first,t&16&&t&65536&&n!==null&&(n.f|=65536))}if(n!==null&&(n.parent=r,r!==null&&c4(n,r),oe!==null&&oe.f&2&&!(t&64))){var s=oe;((o=s.effects)!=null?o:s.effects=[]).push(n)}return i}function js(){return oe!==null&&!Cr}function dr(t){let e=Ln(8,null);return Ge(e,1024),e.teardown=t,e}function mr(t){var n;l$("$effect"),I&&or(t,"name",{value:"$effect"});var e=Z.f,r=!oe&&(e&32)!==0&&(e&32768)===0;if(r){var i=ye;((n=i.e)!=null?n:i.e=[]).push(t)}else return Zw(t)}function Zw(t){return Ln(1048580,t)}function y0(t){ni.ensure();let e=Ln(524352,t);return()=>{mt(e)}}function c$(t){ni.ensure();let e=Ln(524352,t);return(r={})=>new Promise(i=>{r.outro?Mn(e,()=>{mt(e),i(void 0)}):(mt(e),i(void 0))})}function qr(t){return Ln(4,t)}function QR(t){return Ln(4718592,t)}function nr(t,e=0){return Ln(8|e,t)}function Be(t,e=[],r=[],i=[]){sp(i,e,r,n=>{Ln(8,()=>t(...n.map($)))})}function oi(t,e=0){var r=Ln(16|e,t);return I&&(r.dev_stack=Cn),r}function qt(t){return Ln(524320,t)}function x0(t){var e=t.teardown;if(e!==null){let r=li,i=oe;b0(!0),Dt(null);try{e.call(null)}finally{b0(r),Dt(i)}}}function Ju(t,e=!1){var r=t.first;for(t.first=t.last=null;r!==null;){let n=r.ac;n!==null&&tn(()=>{n.abort(ri)});var i=r.next;r.f&64?r.parent=null:mt(r,e),r=i}}function u$(t){for(var e=t.first;e!==null;){var r=e.next;e.f&32||mt(e),e=r}}function mt(t,e=!0){var r=!1;(e||t.f&262144)&&t.nodes!==null&&t.nodes.end!==null&&(f$(t.nodes.start,t.nodes.end),r=!0),Ge(t,33554432),Ju(t,e&&!r),io(t,0);var i=t.nodes&&t.nodes.t;if(i!==null)for(let s of i)s.stop();x0(t),t.f^=33554432,t.f|=16384;var n=t.parent;n!==null&&n.first!==null&&i0(t),I&&(t.component_function=null),t.next=t.prev=t.teardown=t.ctx=t.deps=t.fn=t.nodes=t.ac=t.b=null}function f$(t,e){for(;t!==null;){var r=t===e?null:tr(t);t.remove(),t=r}}function i0(t){var e=t.parent,r=t.prev,i=t.next;r!==null&&(r.next=i),i!==null&&(i.prev=r),e!==null&&(e.first===t&&(e.first=i),e.last===t&&(e.last=r))}function Mn(t,e,r=!0){var i=[];d$(t,i,!0);var n=()=>{r&&mt(t),e&&e()},s=i.length;if(s>0){var a=()=>--s||n();for(var o of i)o.out(a)}else n()}function d$(t,e,r){if(!(t.f&8192)){t.f^=8192;var i=t.nodes&&t.nodes.t;if(i!==null)for(let o of i)(o.is_global||r)&&e.push(o);for(var n=t.first;n!==null;){var s=n.next;if(!(n.f&64)){var a=(n.f&65536)!==0||(n.f&32)!==0&&(t.f&16)!==0;d$(n,e,a?r:!1)}n=s}}}function ef(t){h$(t,!0)}function h$(t,e){if(t.f&8192){t.f^=8192,t.f&1024||(Ge(t,2048),ni.ensure().schedule(t));for(var r=t.first;r!==null;){var i=r.next,n=(r.f&65536)!==0||(r.f&32)!==0;h$(r,n?e:!1),r=i}var s=t.nodes&&t.nodes.t;if(s!==null)for(let a of s)(a.is_global||e)&&a.in()}}function rc(t,e){if(t.nodes)for(var r=t.nodes.start,i=t.nodes.end;r!==null;){var n=r===i?null:tr(r);e.append(r),r=n}}m();var p$=null;var hp=!1,li=!1;function b0(t){li=t}var oe=null,Cr=!1;function Dt(t){oe=t}var Z=null;function Ot(t){Z=t}var ci=null;function op(t){oe!==null&&(!kt||oe.f&2)&&(ci===null?ci=[t]:ci.push(t))}var Yt=null,Ar=0,ui=null;function t$(t){ui=t}var m$=1,so=0,Ys=so;function m0(t){Ys=t}function ec(){return++m$}function Ws(t){var e=t.f;if(e&2048)return!0;if(e&2&&(t.f&=-65537),e&4096){for(var r=t.deps,i=r.length,n=0;nt.wv)return!0}e&512&&Ct===null&&Ge(t,1024)}return!1}function g$(t,e,r=!0){var i=t.reactions;if(i!==null&&!(!kt&&ci!==null&&Yi.call(ci,t)))for(var n=0;n{t.ac.abort(ri)}),t.ac=null);try{t.f|=2097152;var u=t.fn,f=u();t.f|=32768;var d=t.deps,h=(g=le)==null?void 0:g.is_fork;if(Yt!==null){var p;if(h||io(t,Ar),d!==null&&Ar>0)for(d.length=Ar+Yt.length,p=0;p{requestAnimationFrame(()=>t()),setTimeout(()=>t())});await Promise.resolve(),Za()}function $(t){var h,p,g;var e=t.f,r=(e&2)!==0;if((h=p$)==null||h.add(t),oe!==null&&!Cr){var i=Z!==null&&(Z.f&16384)!==0;if(!i&&(ci===null||!Yi.call(ci,t))){var n=oe.deps;if(oe.f&2097152)t.rvr==null?void 0:r.call(this,s))}return t.startsWith("pointer")||t.startsWith("touch")||t==="wheel"?It(()=>{e.addEventListener(t,n,i)}):e.addEventListener(t,n,i),n}function fi(t,e,r,i,n){var s={capture:i,passive:n},a=b$(t,e,r,s);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&dr(()=>{e.removeEventListener(t,a,s)})}function de(t,e,r){var i;((i=e[ao])!=null?i:e[ao]={})[t]=r}function Tt(t){for(var e=0;e{throw b});throw d}}finally{t[ao]=e,delete t.currentTarget,Dt(u),Ot(f)}}}m();m();var y$,S0=((y$=globalThis==null?void 0:globalThis.window)==null?void 0:y$.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:t=>t});function x$(t){var e;return(e=S0==null?void 0:S0.createHTML(t))!=null?e:t}function k0(t){var e=On("template");return e.innerHTML=x$(t.replaceAll("","")),e.content}function Nn(t,e){var r=Z;r.nodes===null&&(r.nodes={start:t,end:e,a:null,t:null})}function he(t,e){var r=(e&1)!==0,i=(e&2)!==0,n,s=!t.startsWith("");return()=>{if(ie)return Nn(me,null),me;n===void 0&&(n=k0(s?t:""+t),r||(n=sr(n)));var a=i||Uu?document.importNode(n,!0):n.cloneNode(!0);if(r){var o=sr(a),l=a.lastChild;Nn(o,l)}else Nn(a,a);return a}}function oo(){if(ie)return Nn(me,null),me;var t=document.createDocumentFragment(),e=document.createComment(""),r=Lt();return t.append(e,r),Nn(e,r),t}function ce(t,e){if(ie){var r=Z;(!(r.f&32768)||r.nodes.end===null)&&(r.nodes.end=me),cr();return}t!==null&&t.before(e)}m();var g4=["allowfullscreen","async","autofocus","autoplay","checked","controls","default","disabled","formnovalidate","indeterminate","inert","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","seamless","selected","webkitdirectory","defer","disablepictureinpicture","disableremoteplayback"];var Mee=[...g4,"formNoValidate","isMap","noModule","playsInline","readOnly","value","volume","defaultValue","defaultChecked","srcObject","noValidate","allowFullscreen","disablePictureInPicture","disableRemotePlayback"];var v4=["touchstart","touchmove"];function E$(t){return v4.includes(t)}var w4=["$state","$state.raw","$derived","$derived.by"],Dee=[...w4,"$state.eager","$state.snapshot","$props","$props.id","$bindable","$effect","$effect.pre","$effect.tracking","$effect.root","$effect.pending","$inspect","$inspect().with","$inspect.trace","$host"];var wp=!0;function je(t,e){var i;var r=e==null?"":typeof e=="object"?`${e}`:e;r!==((i=t.__t)!=null?i:t.__t=t.nodeValue)&&(t.__t=r,t.nodeValue=`${r}`)}function Xs(t,e){return S$(t,e)}function T0(t,e){var a;cp(),e.intro=(a=e.intro)!=null?a:!1;let r=e.target,i=ie,n=me;try{for(var s=sr(r);s&&(s.nodeType!==Pi||s.data!==jl);)s=tr(s);if(!s)throw is;Ft(!0),Ue(s);let o=S$(t,{...e,anchor:s});return Ft(!1),o}catch(o){if(o instanceof Error&&o.message.split(` +`).some(l=>l.startsWith("https://svelte.dev/e/")))throw o;return o!==is&&console.warn("Failed to hydrate: ",o),e.recover===!1&&mR(),cp(),sc(r),Ft(!1),Xs(t,e)}finally{Ft(i),Ue(n)}}var vp=new Map;function S$(t,{target:e,anchor:r,props:i={},events:n,context:s,intro:a=!0,transformError:o}){cp();var l=void 0,c=c$(()=>{var u=r!=null?r:e.appendChild(Lt());l0(u,{pending:()=>{}},h=>{lt({});var p=ye;if(s&&(p.c=s),n&&(i.$$events=n),ie&&Nn(h,null),wp=a,l=t(h,i)||{},wp=!0,ie&&(Z.nodes.end=me,me===null||me.nodeType!==Pi||me.data!==Ha))throw Ua(),is;ct()},o);var f=new Set,d=h=>{for(var p=0;p{var v;for(var h of f)for(let _ of[e,document]){var p=vp.get(_),g=p.get(h);--g==0?(_.removeEventListener(h,gp),p.delete(h),p.size===0&&vp.delete(_)):p.set(h,g)}mp.delete(d),u!==r&&((v=u.parentNode)==null||v.removeChild(u))}});return C0.set(l,c),l}var C0=new WeakMap;function ds(t,e){let r=C0.get(t);return r?(C0.delete(t),r(e)):(I&&(Jt in t?CR():AR()),Promise.resolve())}m();m();m();var rn,Bn,di,lo,tf,rf,_p,hs=class{constructor(e,r=!0){Ve(this,"anchor");pe(this,rn,new Map);pe(this,Bn,new Map);pe(this,di,new Map);pe(this,lo,new Set);pe(this,tf,!0);pe(this,rf,e=>{if(R(this,rn).has(e)){var r=R(this,rn).get(e),i=R(this,Bn).get(r);if(i)ef(i),R(this,lo).delete(r);else{var n=R(this,di).get(r);n&&(R(this,Bn).set(r,n.effect),R(this,di).delete(r),I&&(n.fragment.lastChild[zw]=this.anchor),n.fragment.lastChild.remove(),this.anchor.before(n.fragment),i=n.effect)}for(let[s,a]of R(this,rn)){if(R(this,rn).delete(s),s===e)break;let o=R(this,di).get(a);o&&(mt(o.effect),R(this,di).delete(a))}for(let[s,a]of R(this,Bn)){if(s===r||R(this,lo).has(s))continue;let o=()=>{if(Array.from(R(this,rn).values()).includes(s)){var c=document.createDocumentFragment();rc(a,c),c.append(Lt()),R(this,di).set(s,{effect:a,fragment:c})}else mt(a);R(this,lo).delete(s),R(this,Bn).delete(s)};R(this,tf)||!i?(R(this,lo).add(s),Mn(a,o,!1)):o()}}});pe(this,_p,e=>{R(this,rn).delete(e);let r=Array.from(R(this,rn).values());for(let[i,n]of R(this,di))r.includes(i)||(mt(n.effect),R(this,di).delete(i))});this.anchor=e,we(this,tf,r)}ensure(e,r){var i=le,n=up();if(r&&!R(this,Bn).has(e)&&!R(this,di).has(e))if(n){var s=document.createDocumentFragment(),a=Lt();s.append(a),R(this,di).set(e,{effect:qt(()=>r(a)),fragment:s})}else R(this,Bn).set(e,qt(()=>r(this.anchor)));if(R(this,rn).set(i,e),n){for(let[o,l]of R(this,Bn))o===e?i.unskip_effect(l):i.skip_effect(l);for(let[o,l]of R(this,di))o===e?i.unskip_effect(l.effect):i.skip_effect(l.effect);i.oncommit(R(this,rf)),i.ondiscard(R(this,_p))}else ie&&(this.anchor=me),R(this,rf).call(this,i)}};rn=new WeakMap,Bn=new WeakMap,di=new WeakMap,lo=new WeakMap,tf=new WeakMap,rf=new WeakMap,_p=new WeakMap;if(I){let t=function(e){if(!(e in globalThis)){let r;Object.defineProperty(globalThis,e,{configurable:!0,get:()=>{if(r!==void 0)return r;vR(e)},set:i=>{r=i}})}};t("$state"),t("$effect"),t("$derived"),t("$inspect"),t("$props"),t("$bindable")}function co(t){ye===null&&Hh("onMount"),ss&&ye.l!==null?y4(ye).m.push(t):mr(()=>{let e=We(t);if(typeof e=="function")return e})}function y4(t){var r;var e=t.l;return(r=e.u)!=null?r:e.u={a:[],b:[],m:[]}}m();m();var C$=new Map;function T$(t,e){var r=C$.get(t);r||(r=new Set,C$.set(t,r)),r.add(e)}m();m();m();m();m();m();m();m();m();function Re(t,e,r=!1){var i;ie&&(i=me,cr());var n=new hs(t),s=r?65536:0;function a(o,l){if(ie){var c=Nu(i);if(o!==parseInt(c.substring(1))){var u=An();Ue(u),n.anchor=u,Ft(!1),n.ensure(o,l),Ft(!0);return}}n.ensure(o,l)}oi(()=>{var o=!1;e((l,c=0)=>{o=!0,a(c,l)}),o||a(-1,null)},s)}m();var $ie=Symbol("NaN");m();m();function hi(t,e){return e}function T4(t,e,r){var f;for(var i=[],n=e.length,s,a=e.length,o=0;o{if(s){if(s.pending.delete(d),s.done.add(d),s.pending.size===0){var h=t.outrogroups;P0(t,Vl(s.done)),h.delete(s),h.size===0&&(t.outrogroups=null)}}else a-=1},!1)}if(a===0){var l=i.length===0&&r!==null;if(l){var c=r,u=c.parentNode;sc(u),u.append(c),t.items.clear()}P0(t,e,!l)}else s={pending:new Set(e),done:new Set},((f=t.outrogroups)!=null?f:t.outrogroups=new Set).add(s)}function P0(t,e,r=!0){var i;if(t.pending.size>0){i=new Set;for(let a of t.pending.values())for(let o of a)i.add(t.items.get(o).e)}for(var n=0;n{var S=r();return ns(S)?S:S==null?[]:Vl(S)});I&&ur(f,"{#each ...}");var d,h=new Map,p=!0;function g(S){b.effect.f&16384||(b.pending.delete(S),b.fallback=u,P4(b,d,a,e,i),u!==null&&(d.length===0?u.f&33554432?(u.f^=33554432,sf(u,null,a)):ef(u):Mn(u,()=>{u=null})))}function v(S){b.pending.delete(S)}var _=oi(()=>{d=$(f);var S=d.length;let k=!1;if(ie){var E=Nu(a)===Ba;E!==(S===0)&&(a=An(),Ue(a),Ft(!1),k=!0)}for(var A=new Set,w=le,x=up(),y=0;ys(a)):(u=qt(()=>s(ac!=null?ac:ac=Lt())),u.f|=33554432)),S>A.size&&(I?$4(d,i):Yw("","","")),ie&&S>0&&Ue(An()),!p)if(h.set(w,A),x){for(let[B,ge]of o)A.has(B)||w.skip_effect(ge.e);w.oncommit(g),w.ondiscard(v)}else g(w);k&&Ft(!0),$(f)}),b={effect:_,flags:e,items:o,pending:h,outrogroups:null,fallback:u};p=!1,ie&&(a=me)}function nf(t){for(;t!==null&&!(t.f&32);)t=t.next;return t}function P4(t,e,r,i,n){var C,P,L,N,B,ge,Le,ke,ne;var s=(i&8)!==0,a=e.length,o=t.items,l=nf(t.effect.first),c,u=null,f,d=[],h=[],p,g,v,_;if(s)for(_=0;_0){var y=i&4&&a===0?r:null;if(s){for(_=0;_{var Ee,_e;if(f!==void 0)for(v of f)(_e=(Ee=v.nodes)==null?void 0:Ee.a)==null||_e.apply()})}function R4(t,e,r,i,n,s,a,o){var l=a&1?a&16?pr(r):za(r,!1,!1):null,c=a&2?pr(n):null;return I&&l&&(l.trace=()=>{var u;o()[(u=c==null?void 0:c.v)!=null?u:n]}),{v:l,i:c,e:qt(()=>(s(e,l!=null?l:r,c!=null?c:n,o),()=>{t.delete(i)}))}}function sf(t,e,r){if(t.nodes)for(var i=t.nodes.start,n=t.nodes.end,s=e&&!(e.f&33554432)?e.nodes.start:r;i!==null;){var a=tr(i);if(s.before(i),i===n)return;i=a}}function Zs(t,e,r){e===null?t.effect.first=r:e.next=r,r===null?t.effect.last=e:r.prev=e}function $4(t,e){let r=new Map,i=t.length;for(let n=0;nperformance.now():()=>Date.now(),nn={tick:t=>(Oh?requestAnimationFrame:lr)(t),now:()=>F4(),tasks:new Set};function R$(){let t=nn.now();nn.tasks.forEach(e=>{e.c(t)||(nn.tasks.delete(e),e.f())}),nn.tasks.size!==0&&nn.tick(R$)}function $$(t){let e;return nn.tasks.size===0&&nn.tick(R$),{promise:new Promise(r=>{nn.tasks.add(e={c:t,f:r})}),abort(){nn.tasks.delete(e)}}}function bp(t,e){tn(()=>{t.dispatchEvent(new CustomEvent(e))})}function O4(t){if(t==="float")return"cssFloat";if(t==="offset")return"cssOffset";if(t.startsWith("--"))return t;let e=t.split("-");return e.length===1?e[0]:e[0]+e.slice(1).map(r=>r[0].toUpperCase()+r.slice(1)).join("")}function F$(t){let e={},r=t.split(";");for(let i of r){let[n,s]=i.split(":");if(!n||s===void 0)break;let a=O4(n.trim());e[a]=s.trim()}return e}var L4=t=>t;function sn(t,e,r,i){var S,k;var n=(t&1)!==0,s=(t&2)!==0,a=n&&s,o=(t&4)!==0,l=a?"both":n?"in":"out",c,u=e.inert,f=e.style.overflow,d,h;function p(){return tn(()=>{var E;return c!=null?c:c=r()(e,(E=i==null?void 0:i())!=null?E:{},{direction:l})})}var g={is_global:o,in(){var E;if(e.inert=u,!n){h==null||h.abort(),(E=h==null?void 0:h.reset)==null||E.call(h);return}s||d==null||d.abort(),d=R0(e,p(),h,1,()=>{bp(e,"introstart")},()=>{bp(e,"introend"),d==null||d.abort(),d=c=void 0,e.style.overflow=f})},out(E){if(!s){E==null||E(),c=void 0;return}e.inert=!0,h=R0(e,p(),d,0,()=>{bp(e,"outrostart")},()=>{bp(e,"outroend"),E==null||E()})},stop:()=>{d==null||d.abort(),h==null||h.abort()}},v=Z;if(((k=(S=v.nodes).t)!=null?k:S.t=[]).push(g),n&&wp){var _=o;if(!_){for(var b=v.parent;b&&b.f&65536;)for(;(b=b.parent)&&!(b.f&16););_=!b||(b.f&32768)!==0}_&&qr(()=>{We(()=>g.in())})}}function R0(t,e,r,i,n,s){var a=i===1;if(Vw(e)){var o,l=!1;return It(()=>{if(!l){var _=e({direction:a?"in":"out"});o=R0(t,_,r,i,n,s)}}),{abort:()=>{l=!0,o==null||o.abort()},deactivate:()=>o.deactivate(),reset:()=>o.reset(),t:()=>o.t()}}if(r==null||r.deactivate(),!(e!=null&&e.duration)&&!(e!=null&&e.delay))return n(),s(),{abort:lr,deactivate:lr,reset:lr,t:()=>i};let{delay:c=0,css:u,tick:f,easing:d=L4}=e;var h=[];if(a&&r===void 0&&(f&&f(0,1),u)){var p=F$(u(0,1));h.push(p,p)}var g=()=>1-i,v=t.animate(h,{duration:c,fill:"forwards"});return v.onfinish=()=>{var C;v.cancel(),n();var _=(C=r==null?void 0:r.t())!=null?C:1-i;r==null||r.abort();var b=i-_,S=e.duration*Math.abs(b),k=[];if(S>0){var E=!1;if(u)for(var A=Math.ceil(S/16.666666666666668),w=0;w<=A;w+=1){var x=_+b*d(w/A),y=F$(u(x,1-x));k.push(y),E||(E=y.overflow==="hidden")}E&&(t.style.overflow="hidden"),g=()=>{var P=v.currentTime;return _+b*d(P/S)},f&&$$(()=>{if(v.playState!=="running")return!1;var P=g();return f(P,1-P),!0})}v=t.animate(k,{duration:S,fill:"forwards"}),v.onfinish=()=>{g=()=>i,f==null||f(i,1-i),s()}},{abort:()=>{v&&(v.cancel(),v.effect=null,v.onfinish=lr)},deactivate:()=>{s=lr},reset:()=>{i===0&&(f==null||f(1,0))},t:()=>g()}}m();m();function an(t,e){qr(()=>{var n;var r=t.getRootNode(),i=r.host?r:(n=r.head)!=null?n:r.ownerDocument.head;if(!i.querySelector("#"+e.hash)){let s=On("style");s.id=e.hash,s.textContent=e.code,i.appendChild(s),I&&T$(e.hash,s)}})}m();m();m();m();m();m();var M$=[...` +\r\f\xA0\v\uFEFF`];function D$(t,e,r){var i=t==null?"":""+t;if(e&&(i=i?i+" "+e:e),r){for(var n of Object.keys(r))if(r[n])i=i?i+" "+n:n;else if(i.length)for(var s=n.length,a=0;(a=i.indexOf(n,a))>=0;){var o=a+s;(a===0||M$.includes(i[a-1]))&&(o===i.length||M$.includes(i[o]))?i=(a===0?"":i.substring(0,a))+i.substring(o+1):a=o}}return i===""?null:i}m();function gt(t,e,r,i,n,s){var a=t.__className;if(ie||a!==r||a===void 0){var o=D$(r,i,s);(!ie||o!==t.getAttribute("class"))&&(o==null?t.removeAttribute("class"):e?t.className=o:t.setAttribute("class",o)),t.__className=r}else if(s&&n!==s)for(var l in s){var c=!!s[l];(n==null||c!==!!n[l])&&t.classList.toggle(l,c)}return s}m();m();var z4=Symbol("class"),W4=Symbol("style"),q4=Symbol("is custom element"),Y4=Symbol("is html"),X4=Ww?"link":"LINK";function xe(t,e,r,i){var n=Z4(t);if(ie&&(n[e]=t.getAttribute(e),e==="src"||e==="srcset"||e==="href"&&t.nodeName===X4)){i||Q4(t,e,r!=null?r:"");return}n[e]!==(n[e]=r)&&(e==="loading"&&(t[sR]=r),r==null?t.removeAttribute(e):typeof r!="string"&&K4(t).includes(e)?t[e]=r:t.setAttribute(e,r))}function Z4(t){var e;return(e=t.__attributes)!=null?e:t.__attributes={[q4]:t.nodeName.includes("-"),[Y4]:t.namespaceURI===Dh}}var O$=new Map;function K4(t){var e=t.getAttribute("is")||t.nodeName,r=O$.get(e);if(r)return r;O$.set(e,r=[]);for(var i,n=t,s=Element.prototype;s!==n;){i=Uw(n);for(var a in i)i[a].set&&r.push(a);n=zl(n)}return r}function Q4(t,e,r){var i;I&&(e==="srcset"&&J4(t,r)||$0((i=t.getAttribute(e))!=null?i:"",r)||kR(e,t.outerHTML.replace(t.innerHTML,t.innerHTML&&"..."),String(r)))}function $0(t,e){return t===e?!0:new URL(t,document.baseURI).href===new URL(e,document.baseURI).href}function L$(t){return t.split(",").map(e=>e.trim().split(" ").filter(Boolean))}function J4(t,e){var r=L$(t.srcset),i=L$(e);return i.length===r.length&&i.every(([n,s],a)=>s===r[a][1]&&($0(r[a][0],n)||$0(n,r[a][0])))}m();m();m();function M0(t,e,r=e){var i=new WeakSet;_0(t,"input",async n=>{I&&t.type==="checkbox"&&qw();var s=n?t.defaultValue:t.value;if(s=F0(t)?I0(s):s,r(s),le!==null&&i.add(le),await pp(),s!==(s=e())){var a=t.selectionStart,o=t.selectionEnd,l=t.value.length;if(t.value=s!=null?s:"",o!==null){var c=t.value.length;a===o&&o===l&&c>l?(t.selectionStart=c,t.selectionEnd=c):(t.selectionStart=a,t.selectionEnd=Math.min(o,c))}}}),(ie&&t.defaultValue!==t.value||We(e)==null&&t.value)&&(r(F0(t)?I0(t.value):t.value),le!==null&&i.add(le)),nr(()=>{I&&t.type==="checkbox"&&qw();var n=e();if(t===document.activeElement){var s=kt?ju:le;if(i.has(s))return}F0(t)&&n===I0(t.value)||t.type==="date"&&!n&&!t.value||n!==t.value&&(t.value=n!=null?n:"")})}function F0(t){var e=t.type;return e==="number"||e==="range"}function I0(t){return t===""?null:+t}m();m();m();m();m();function B$(t,e){return t===e||(t==null?void 0:t[Jt])===e}function at(t={},e,r,i){var n=ye.r,s=Z;return qr(()=>{var a,o;return nr(()=>{a=o,o=(i==null?void 0:i())||[],We(()=>{t!==r(...o)&&(e(t,...o),a&&B$(r(...a),t)&&e(null,...a))})}),()=>{let l=s;for(;l!==n&&l.parent!==null&&l.parent.f&33554432;)l=l.parent;let c=()=>{o&&B$(r(...o),t)&&e(null,...o)},u=l.teardown;l.teardown=()=>{c(),u==null||u()}}}),t}m();m();m();m();m();m();function Di(t,e,r,i){var S,k;var n=!ss||(r&2)!==0,s=(r&8)!==0,a=(r&16)!==0,o=i,l=!0,c=()=>(l&&(l=!1,o=a?We(i):i),o);let u;if(s){var f=Jt in t||Lu in t;u=(k=(S=Ur(t,e))==null?void 0:S.set)!=null?k:f&&e in t?E=>t[e]=E:void 0}var d,h=!1;s?[d,h]=Qw(()=>t[e]):d=t[e],d===void 0&&i!==void 0&&(d=c(),u&&(n&&gR(e),u(d)));var p;if(n?p=()=>{var E=t[e];return E===void 0?c():(l=!0,E)}:p=()=>{var E=t[e];return E!==void 0&&(o=void 0),E===void 0?o:E},n&&!(r&4))return p;if(u){var g=t.$$legacy;return function(E,A){return arguments.length>0?((!n||!A||g||h)&&u(A?p():E),E):p()}}var v=!1,_=(r&1?eo:to)(()=>(v=!1,p()));I&&(_.label=e),s&&$(_);var b=Z;return function(E,A){if(arguments.length>0){let w=A?$(_):n&&s?Qe(E):E;return se(_,w),v=!0,o!==void 0&&(o=w),E}return li&&v||b.f&16384?_.v:$(_)}}m();m();m();function H$(t){return new O0(t)}var ps,Oi,O0=class{constructor(e){pe(this,ps);pe(this,Oi);var s,a;var r=new Map,i=(o,l)=>{var c=za(l,!1,!1);return r.set(o,c),c};let n=new Proxy({...e.props||{},$$events:{}},{get(o,l){var c;return $((c=r.get(l))!=null?c:i(l,Reflect.get(o,l)))},has(o,l){var c;return l===Lu?!0:($((c=r.get(l))!=null?c:i(l,Reflect.get(o,l))),Reflect.has(o,l))},set(o,l,c){var u;return se((u=r.get(l))!=null?u:i(l,c),c),Reflect.set(o,l,c)}});we(this,Oi,(e.hydrate?T0:Xs)(e.component,{target:e.target,anchor:e.anchor,props:n,context:e.context,intro:(s=e.intro)!=null?s:!1,recover:e.recover,transformError:e.transformError})),!kt&&(!((a=e==null?void 0:e.props)!=null&&a.$$host)||e.sync===!1)&&Za(),we(this,ps,n.$$events);for(let o of Object.keys(R(this,Oi)))o==="$set"||o==="$destroy"||o==="$on"||or(this,o,{get(){return R(this,Oi)[o]},set(l){R(this,Oi)[o]=l},enumerable:!0});R(this,Oi).$set=o=>{Object.assign(n,o)},R(this,Oi).$destroy=()=>{ds(R(this,Oi))}}$set(e){R(this,Oi).$set(e)}$on(e,r){R(this,ps)[e]=R(this,ps)[e]||[];let i=(...n)=>r.call(this,...n);return R(this,ps)[e].push(i),()=>{R(this,ps)[e]=R(this,ps)[e].filter(n=>n!==i)}}$destroy(){R(this,Oi).$destroy()}};ps=new WeakMap,Oi=new WeakMap;var dU;typeof HTMLElement=="function"&&(dU=class extends HTMLElement{constructor(e,r,i){super();Ve(this,"$$ctor");Ve(this,"$$s");Ve(this,"$$c");Ve(this,"$$cn",!1);Ve(this,"$$d",{});Ve(this,"$$r",!1);Ve(this,"$$p_d",{});Ve(this,"$$l",{});Ve(this,"$$l_u",new Map);Ve(this,"$$me");Ve(this,"$$shadowRoot",null);this.$$ctor=e,this.$$s=r,i&&(this.$$shadowRoot=this.attachShadow(i))}addEventListener(e,r,i){if(this.$$l[e]=this.$$l[e]||[],this.$$l[e].push(r),this.$$c){let n=this.$$c.$on(e,r);this.$$l_u.set(r,n)}super.addEventListener(e,r,i)}removeEventListener(e,r,i){if(super.removeEventListener(e,r,i),this.$$c){let n=this.$$l_u.get(r);n&&(n(),this.$$l_u.delete(r))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let e=function(n){return s=>{let a=On("slot");n!=="default"&&(a.name=n),ce(s,a)}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;let r={},i=hU(this);for(let n of this.$$s)n in i&&(n==="default"&&!this.$$d.children?(this.$$d.children=e(n),r.default=!0):r[n]=e(n));for(let n of this.attributes){let s=this.$$g_p(n.name);s in this.$$d||(this.$$d[s]=L0(s,n.value,this.$$p_d,"toProp"))}for(let n in this.$$p_d)!(n in this.$$d)&&this[n]!==void 0&&(this.$$d[n]=this[n],delete this[n]);this.$$c=H$({component:this.$$ctor,target:this.$$shadowRoot||this,props:{...this.$$d,$$slots:r,$$host:this}}),this.$$me=y0(()=>{nr(()=>{var n;this.$$r=!0;for(let s of Hw(this.$$c)){if(!((n=this.$$p_d[s])!=null&&n.reflect))continue;this.$$d[s]=this.$$c[s];let a=L0(s,this.$$d[s],this.$$p_d,"toAttribute");a==null?this.removeAttribute(this.$$p_d[s].attribute||s):this.setAttribute(this.$$p_d[s].attribute||s,a)}this.$$r=!1})});for(let n in this.$$l)for(let s of this.$$l[n]){let a=this.$$c.$on(n,s);this.$$l_u.set(s,a)}this.$$l={}}}attributeChangedCallback(e,r,i){var n;this.$$r||(e=this.$$g_p(e),this.$$d[e]=L0(e,i,this.$$p_d,"toProp"),(n=this.$$c)==null||n.$set({[e]:this.$$d[e]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{!this.$$cn&&this.$$c&&(this.$$c.$destroy(),this.$$me(),this.$$c=void 0)})}$$g_p(e){return Hw(this.$$p_d).find(r=>this.$$p_d[r].attribute===e||!this.$$p_d[r].attribute&&r.toLowerCase()===e)||e}});function L0(t,e,r,i){var s;let n=(s=r[t])==null?void 0:s.type;if(e=n==="Boolean"&&typeof e!="boolean"?e!=null:e,!i||!r[t])return e;if(i==="toAttribute")switch(n){case"Object":case"Array":return e==null?null:JSON.stringify(e);case"Boolean":return e?"":null;case"Number":return e==null?null:e;default:return e}else switch(n){case"Object":case"Array":return e&&JSON.parse(e);case"Boolean":return e;case"Number":return e!=null?+e:e;default:return e}}function hU(t){let e={};return t.childNodes.forEach(r=>{e[r.slot||"default"]=!0}),e}m();m();function uo(t,e,r,i){function n(s){return s instanceof r?s:new r(function(a){a(s)})}return new(r||(r=Promise))(function(s,a){function o(u){try{c(i.next(u))}catch(f){a(f)}}function l(u){try{c(i.throw(u))}catch(f){a(f)}}function c(u){u.done?s(u.value):n(u.value).then(o,l)}c((i=i.apply(t,e||[])).next())})}var U0=require("obsidian");m();var B0=require("obsidian");m();function pU(t){let e=t-1;return e*e*e+1}var N0=!1;function Gn(t,{delay:e=0,duration:r=400,easing:i=pU,axis:n="y"}={}){let s=getComputedStyle(t);I&&!N0&&/(contents|inline|table)/.test(s.display)&&(N0=!0,Promise.resolve().then(()=>N0=!1),PR(s.display));let a=+s.opacity,o=n==="y"?"height":"width",l=parseFloat(s[o]),c=n==="y"?["top","bottom"]:["left","right"],u=c.map(_=>`${_[0].toUpperCase()}${_.slice(1)}`),f=parseFloat(s[`padding${u[0]}`]),d=parseFloat(s[`padding${u[1]}`]),h=parseFloat(s[`margin${u[0]}`]),p=parseFloat(s[`margin${u[1]}`]),g=parseFloat(s[`border${u[0]}Width`]),v=parseFloat(s[`border${u[1]}Width`]);return{delay:e,duration:r,easing:i,css:_=>`overflow: hidden;opacity: ${Math.min(_*20,1)*a};${o}: ${_*l}px;padding-${c[0]}: ${_*f}px;padding-${c[1]}: ${_*d}px;margin-${c[0]}: ${_*h}px;margin-${c[1]}: ${_*p}px;border-${c[0]}-width: ${_*g}px;border-${c[1]}-width: ${_*v}px;min-${o}: 0`}}m();var xp=require("obsidian");var mU=he('
    '),gU=he('
    '),vU={hash:"svelte-1c0jiav",code:"main.svelte-1c0jiav .nav-file-title:where(.svelte-1c0jiav) {align-items:center;}"};function af(t,e){lt(e,!0),an(t,vU);let r=Qe([]),i=ut(()=>e.view.leaf.getRoot().side=="left"?"right":"left");mr(()=>{for(let b of r)b&&(0,xp.setIcon)(b,b.getAttr("data-icon"))});function n(b){b.stopPropagation(),ll(e.diff.path)?s(b):a(b)}function s(b){var S;b.stopPropagation();let k=e.view.app.vault.getAbstractFileByPath(e.diff.vaultPath);k instanceof xp.TFile&&((S=ji(e.view.app,b))===null||S===void 0||S.openFile(k).catch(E=>e.view.plugin.displayError(E)))}function a(b){var S;e.view.plugin.tools.openDiff({event:b,aFile:(S=e.diff.fromPath)!==null&&S!==void 0?S:e.diff.path,aRef:`${e.diff.hash}^`,bFile:e.diff.path,bRef:e.diff.hash})}var o=gU(),l=j(o),c=j(l),u=j(c,!0);G(c);var f=te(c,2),d=j(f),h=j(d);{var p=b=>{var S=mU();at(S,k=>r[0]=k,()=>r==null?void 0:r[0]),fi("auxclick",S,s),de("click",S,s),ce(b,S)},g=ut(()=>cl(e.diff.vaultPath,e.view.app));Re(h,b=>{$(g)&&b(p)})}G(d);var v=te(d,2),_=j(v,!0);G(v),G(f),G(l),G(o),Be(b=>{xe(l,"data-path",e.diff.vaultPath),xe(l,"data-tooltip-position",$(i)),xe(l,"aria-label",e.diff.vaultPath),je(u,b),xe(v,"data-type",e.diff.status),je(_,e.diff.status)},[()=>yn(e.diff.vaultPath)]),de("click",o,n),fi("auxclick",o,b=>{b.stopPropagation(),b.button==2?bn(e.view.app,b,e.diff.vaultPath,e.view.leaf,"git-history"):n(b)}),ce(t,o),ct()}Tt(["click"]);m();var wU=he("
    "),_U=he(''),bU=he('
    '),yU=he("
    "),xU={hash:"svelte-d9h7mp",code:"main.svelte-d9h7mp .nav-folder-title-content:where(.svelte-d9h7mp) {display:flex;align-items:center;}"};function of(t,e){lt(e,!0),an(t,xU);let r=Di(e,"topLevel",3,!1),i=Di(e,"closed",15),n=ut(()=>e.view.leaf.getRoot().side=="left"?"right":"left");function s(l,c){l.stopPropagation(),i(i()[c.path]=!i()[c.path],!0)}var a=yU();let o;pi(a,21,()=>e.hierarchy.children,hi,(l,c)=>{var u=oo(),f=Mi(u);{var d=p=>{var g=wU(),v=j(g);af(v,{get diff(){return $(c).data},get view(){return e.view}}),G(g),ce(p,g)},h=p=>{var g=bU();let v;var _=j(g),b=te(j(_),2);let S;var k=te(b,2),E=j(k,!0);G(k),G(_);var A=te(_,2);{var w=x=>{var y=_U(),C=j(y);of(C,{get hierarchy(){return $(c)},get plugin(){return e.plugin},get view(){return e.view},get closed(){return i()},set closed(P){i(P)}}),G(y),sn(3,y,()=>Gn,()=>({duration:150})),ce(x,y)};Re(A,x=>{i()[$(c).path]||x(w)})}G(g),Be(()=>{v=gt(g,1,"tree-item nav-folder",null,v,{"is-collapsed":i()[$(c).path]}),xe(_,"data-tooltip-position",$(n)),xe(_,"aria-label",$(c).vaultPath),S=gt(b,1,"tree-item-icon nav-folder-collapse-indicator collapse-icon",null,S,{"is-collapsed":i()[$(c).path]}),je(E,$(c).title)}),de("click",_,x=>s(x,$(c))),ce(p,g)};Re(f,p=>{$(c).data?p(d):p(h,-1)})}ce(l,u)}),G(a),Be(()=>o=gt(a,1,"svelte-d9h7mp",null,o,{topLevel:r()})),ce(t,a),ct()}Tt(["click"]);var EU=he('
    '),SU=he('
    '),kU=he('
    '),AU=he(''),CU=he('
    '),TU={hash:"svelte-1edsiy5",code:""};function H0(t,e){lt(e,!0),an(t,TU);let r=ut(()=>({title:"",path:"",vaultPath:"",children:e.plugin.gitManager.getTreeStructure(e.log.diff.files)})),i=ut(()=>e.view.leaf.getRoot().side=="left"?"right":"left"),n=Oe(!0),s=Oe(Qe({}));function a(x){let y=x.author.name;if(e.plugin.settings.authorInHistoryView=="full")return y;if(e.plugin.settings.authorInHistoryView=="initials")return y.split(" ").filter(P=>P.length>0).map(P=>P[0].toUpperCase()).join("")}var o=CU(),l=j(o);let c;var u=j(l),f=j(u);let d;var h=te(f,2),p=j(h);{var g=x=>{var y=EU(),C=j(y,!0);G(y),Be(P=>je(C,P),[()=>e.log.refs.join(", ")]),ce(x,y)};Re(p,x=>{e.log.refs.length>0&&x(g)})}var v=te(p,2);{var _=x=>{var y=SU(),C=j(y,!0);G(y),Be(P=>je(C,P),[()=>a(e.log)]),ce(x,y)};Re(v,x=>{var y;e.plugin.settings.authorInHistoryView!="hide"&&((y=e.log.author)!=null&&y.name)&&x(_)})}var b=te(v,2);{var S=x=>{var y=kU(),C=j(y,!0);G(y),Be(P=>je(C,P),[()=>(0,B0.moment)(e.log.date).format(e.plugin.settings.commitDateFormat)]),ce(x,y)};Re(b,x=>{e.plugin.settings.dateInHistoryView&&x(S)})}var k=te(b,2),E=j(k,!0);G(k),G(h),G(u);var A=te(u,2);{var w=x=>{var y=AU(),C=j(y);{var P=N=>{of(N,{get hierarchy(){return $(r)},get plugin(){return e.plugin},get view(){return e.view},topLevel:!0,get closed(){return $(s)},set closed(B){se(s,B,!0)}})},L=N=>{var B=oo(),ge=Mi(B);pi(ge,17,()=>e.log.diff.files,hi,(Le,ke)=>{af(Le,{get view(){return e.view},get diff(){return $(ke)}})}),ce(N,B)};Re(C,N=>{e.showTree?N(P):N(L,-1)})}G(y),sn(3,y,()=>Gn,()=>({duration:150})),ce(x,y)};Re(A,x=>{$(n)||x(w)})}G(l),G(o),Be(x=>{c=gt(l,1,"tree-item nav-folder",null,c,{"is-collapsed":$(n)}),xe(u,"aria-label",x),xe(u,"data-tooltip-position",$(i)),d=gt(f,1,"tree-item-icon nav-folder-collapse-indicator collapse-icon",null,d,{"is-collapsed":$(n)}),je(E,e.log.message)},[()=>{var x;return`${e.log.refs.length>0?e.log.refs.join(", ")+` +`:""}${(x=e.log.author)==null?void 0:x.name} +${(0,B0.moment)(e.log.date).format(e.plugin.settings.commitDateFormat)} +${e.log.message}`}]),de("click",u,()=>se(n,!$(n))),ce(t,o),ct()}Tt(["click"]);var PU=he(''),RU=he('
    '),$U={hash:"svelte-12n6twc",code:""};function G0(t,e){lt(e,!0),an(t,$U);let r=Di(e,"plugin",15),i=Oe(!1),n=Qe([]),s=Oe(void 0),a=Oe(Qe(r().settings.treeStructure)),o;mr(()=>{o&&o.empty()}),co(()=>{e.view.registerEvent(e.view.app.workspace.on("obsidian-git:head-change",()=>void c().catch(console.error)))}),mr(()=>{n.forEach(k=>(0,U0.setIcon)(k,k.getAttr("data-icon")))}),co(()=>{let k=new IntersectionObserver(A=>{A[0].isIntersecting&&!$(i)&&u().catch(console.error)}),E=activeDocument.querySelector("#sentinel");return E&&k.observe(E),()=>{k.disconnect()}}),c().catch(console.error);function l(){c().catch(console.error)}function c(){return uo(this,void 0,void 0,function*(){var k;if(!r().gitReady){se(s,void 0);return}se(i,!0);let E=r().gitManager instanceof Se,A;((k=$(s)===null||$(s)===void 0?void 0:$(s).length)!==null&&k!==void 0?k:0)==0?A=E?50:10:A=$(s).length,se(s,yield r().gitManager.log(void 0,!1,A),!0),se(i,!1)})}function u(){return uo(this,void 0,void 0,function*(){var k;if(!r().gitReady||$(s)===void 0)return;se(i,!0);let A=r().gitManager instanceof Se?50:10,w=yield r().gitManager.log(void 0,!1,A,(k=$(s).last())===null||k===void 0?void 0:k.hash);$(s).push(...w.slice(1)),se(i,!1)})}var f=RU(),d=j(f),h=j(d),p=j(h);at(p,k=>n[0]=k,()=>n==null?void 0:n[0]);var g=te(p,2);let v;at(g,k=>n[1]=k,()=>n==null?void 0:n[1]),G(h),G(d);var _=te(d,2),b=j(_);{var S=k=>{var E=PU();pi(E,21,()=>$(s),hi,(A,w)=>{H0(A,{get view(){return e.view},get showTree(){return $(a)},get log(){return $(w)},get plugin(){return r()}})}),G(E),ce(k,E)};Re(b,k=>{$(s)&&k(S)})}Ga(4),G(_),G(f),Be(()=>{xe(p,"data-icon",$(a)?"list":"folder"),v=gt(g,1,"clickable-icon nav-action-button",null,v,{loading:$(i)})}),de("click",p,()=>{se(a,!$(a)),(0,U0.setIcon)(n[0],$(a)?"list":"folder"),r(r().settings.treeStructure=$(a),!0),r().saveSettings()}),de("click",g,l),ce(t,f),ct()}Tt(["click"]);var lf=class extends U$.ItemView{constructor(e,r){super(e),this.plugin=r,this.hoverPopover=null}getViewType(){return bi.type}getDisplayText(){return bi.name}getIcon(){return bi.icon}onClose(){return this._view&&ds(this._view),super.onClose()}reload(){this._view&&ds(this._view),this._view=Xs(G0,{target:this.contentEl,props:{plugin:this.plugin,view:this}})}onOpen(){return this.reload(),super.onOpen()}};m();var G$=require("obsidian"),Ep=class extends G$.FuzzySuggestModal{constructor(r,i){super(r.app);this.branches=i;this.setPlaceholder("Select branch to checkout")}getItems(){return this.branches}getItemText(r){return r}onChooseItem(r,i){this.resolve(r)}openAndGetReslt(){return new Promise(r=>{this.resolve=r,this.open()})}onClose(){new Promise(r=>window.setTimeout(r,10)).then(()=>{this.resolve&&this.resolve(void 0)})}};m();var z$=require("obsidian");m();var po=require("obsidian");m();var cf=require("obsidian");m();var j$=require("obsidian");var oc=class extends j$.Modal{constructor({app:r,path:i,filesToDeleteCount:n,filesToDiscardCount:s}){super(r);this.resolve=null;this.path=i,this.deleteCount=n,this.discardCount=s}openAndGetResult(){return this.open(),new Promise(r=>{this.resolve=r})}onOpen(){let r=this.deleteCount+this.discardCount,{contentEl:i,titleEl:n}=this,s="";this.path!=""&&(r>1?s=`files in "${this.path}"`:s=`"${this.path}"`),n.setText(`${this.discardCount==0?"Delete":"Discard"} ${s}`),this.deleteCount>0&&i.createEl("p").setText(`Are you sure you want to DELETE the ${cu(this.deleteCount,"untracked file")}? They are deleted according to your Obsidian trash settting.`),this.discardCount>0&&i.createEl("p").setText(`Are you sure you want to discard ALL changes in ${cu(this.discardCount,"tracked file")}?`);let a=i.createDiv({cls:"modal-button-container"});if(this.deleteCount>0){let l=a.createEl("button",{cls:"mod-warning",text:`${this.discardCount>0?"Discard":"Delete"} all ${cu(r,"file")}`});l.addEventListener("click",()=>{this.resolve&&this.resolve("delete"),this.close()}),l.addEventListener("keypress",()=>{this.resolve&&this.resolve("delete"),this.close()})}if(this.discardCount>0){let l=a.createEl("button",{cls:"mod-warning",text:`Discard all ${cu(this.discardCount,"tracked file")}`});l.addEventListener("click",()=>{this.resolve&&this.resolve("discard"),this.close()}),l.addEventListener("keypress",()=>{this.resolve&&this.resolve("discard"),this.close()})}let o=a.createEl("button",{text:"Cancel"});o.addEventListener("click",()=>(this.resolve&&this.resolve(!1),this.close())),o.addEventListener("keypress",()=>(this.resolve&&this.resolve(!1),this.close()))}onClose(){let{contentEl:r}=this;r.empty()}};var FU=he('
    '),IU=he('
    ');function uf(t,e){lt(e,!0);let r=Qe([]),i=ut(()=>e.view.leaf.getRoot().side=="left"?"right":"left");mr(()=>{for(let w of r)w&&(0,cf.setIcon)(w,w.getAttr("data-icon"))});function n(w){w.stopPropagation(),ll(e.change.path)?a(w):l(w)}function s(w){e.view.app.vault.getAbstractFileByPath(e.change.vaultPath)&&ul(e.view.app,w,e.view,e.change.vaultPath)}function a(w){var x;w.stopPropagation();let y=e.view.app.vault.getAbstractFileByPath(e.change.vaultPath);y instanceof cf.TFile&&((x=ji(e.view.app,w))===null||x===void 0||x.openFile(y).catch(C=>e.view.plugin.displayError(C)))}function o(w){w.stopPropagation(),e.manager.stage(e.change.path,!1).catch(x=>e.view.plugin.displayError(x)).finally(()=>{e.view.app.workspace.trigger("obsidian-git:refresh")})}function l(w){w.stopPropagation(),e.view.plugin.tools.openDiff({aFile:e.change.path,aRef:"",event:w})}function c(w){w.stopPropagation();let x=e.change.workingDir=="U";new oc({app:e.view.app,filesToDeleteCount:x?1:0,filesToDiscardCount:x?0:1,path:e.change.vaultPath}).openAndGetResult().then(y=>uo(this,void 0,void 0,function*(){if(y=="delete"){let C=e.view.app.vault.getAbstractFileByPath(e.change.vaultPath);C instanceof cf.TFile?yield e.view.app.fileManager.trashFile(C):yield e.view.app.vault.adapter.remove(e.change.vaultPath)}else y=="discard"&&(yield e.manager.discard(e.change.path).finally(()=>{e.view.app.workspace.trigger("obsidian-git:refresh")}));e.view.app.workspace.trigger("obsidian-git:refresh")}),y=>e.view.plugin.displayError(y))}var u=IU(),f=j(u),d=j(f),h=j(d,!0);G(d);var p=te(d,2),g=j(p),v=j(g);{var _=w=>{var x=FU();at(x,y=>r[0]=y,()=>r==null?void 0:r[0]),fi("auxclick",x,a),de("click",x,a),ce(w,x)},b=ut(()=>cl(e.change.vaultPath,e.view.app));Re(v,w=>{$(b)&&w(_)})}var S=te(v,2);at(S,w=>r[1]=w,()=>r==null?void 0:r[1]);var k=te(S,2);at(k,w=>r[2]=w,()=>r==null?void 0:r[2]),G(g);var E=te(g,2),A=j(E,!0);G(E),G(p),G(f),G(u),Be(w=>{xe(f,"data-path",e.change.vaultPath),xe(f,"data-tooltip-position",$(i)),xe(f,"aria-label",e.change.vaultPath),je(h,w),xe(E,"data-type",e.change.workingDir),je(A,e.change.workingDir)},[()=>yn(e.change.vaultPath)]),de("mouseover",u,s),de("click",u,n),fi("auxclick",u,w=>{w.stopPropagation(),w.button==2?bn(e.view.app,w,e.change.vaultPath,e.view.leaf,"git-source-control"):n(w)}),de("click",S,c),de("click",k,o),ce(t,u),ct()}Tt(["mouseover","click"]);m();var V$=require("obsidian");var MU=he('
    ');function ff(t,e){lt(e,!0);let r=ut(()=>e.view.leaf.getRoot().side=="left"?"right":"left");function i(d){e.view.app.vault.getAbstractFileByPath(e.change.vaultPath)&&ul(e.view.app,d,e.view,e.change.vaultPath)}function n(d){var h;d.stopPropagation();let p=e.view.app.vault.getAbstractFileByPath(e.change.vaultPath);p instanceof V$.TFile&&((h=ji(e.view.app,d))===null||h===void 0||h.openFile(p).catch(g=>e.view.plugin.displayError(g)))}var s=MU(),a=j(s),o=j(a),l=j(o,!0);G(o);var c=te(o,2),u=j(c),f=j(u,!0);G(u),G(c),G(a),G(s),Be(d=>{xe(a,"data-path",e.change.vaultPath),xe(a,"data-tooltip-position",$(r)),xe(a,"aria-label",e.change.vaultPath),je(l,d),xe(u,"data-type",e.change.workingDir),je(f,e.change.workingDir)},[()=>yn(e.change.vaultPath)]),de("mouseover",s,i),de("click",s,n),fi("auxclick",s,d=>{d.stopPropagation(),d.button==2?bn(e.view.app,d,e.change.vaultPath,e.view.leaf,"git-source-control"):n(d)}),ce(t,s),ct()}Tt(["mouseover","click"]);m();var Sp=require("obsidian");var DU=he('
    '),OU=he('
    ');function df(t,e){lt(e,!0);let r=Qe([]),i=ut(()=>e.view.leaf.getRoot().side=="left"?"right":"left");mr(()=>{for(let E of r)E&&(0,Sp.setIcon)(E,E.getAttr("data-icon"))});function n(E){E.stopPropagation(),ll(e.change.path)?a(E):o(E)}function s(E){e.view.app.vault.getFileByPath(e.change.vaultPath)&&ul(e.view.app,E,e.view,e.change.vaultPath)}function a(E){var A;E.stopPropagation();let w=e.view.app.vault.getAbstractFileByPath(e.change.vaultPath);w instanceof Sp.TFile&&((A=ji(e.view.app,E))===null||A===void 0||A.openFile(w).catch(x=>e.view.plugin.displayError(x)))}function o(E){var A;E.stopPropagation(),e.view.plugin.tools.openDiff({aFile:(A=e.change.from)!==null&&A!==void 0?A:e.change.path,bFile:e.change.path,aRef:"HEAD",bRef:"",event:E})}function l(E){E.stopPropagation(),e.manager.unstage(e.change.path,!1).catch(A=>e.view.plugin.displayError(A)).finally(()=>{e.view.app.workspace.trigger("obsidian-git:refresh")})}var c=OU(),u=j(c),f=j(u),d=j(f,!0);G(f);var h=te(f,2),p=j(h),g=j(p);{var v=E=>{var A=DU();at(A,w=>r[0]=w,()=>r==null?void 0:r[0]),de("click",A,a),ce(E,A)},_=ut(()=>cl(e.change.vaultPath,e.view.app));Re(g,E=>{$(_)&&E(v)})}var b=te(g,2);at(b,E=>r[1]=E,()=>r==null?void 0:r[1]),G(p);var S=te(p,2),k=j(S,!0);G(S),G(h),G(u),G(c),Be(E=>{xe(u,"data-path",e.change.vaultPath),xe(u,"data-tooltip-position",$(i)),xe(u,"aria-label",e.change.vaultPath),je(d,E),xe(S,"data-type",e.change.index),je(k,e.change.index)},[()=>yn(e.change.vaultPath)]),de("mouseover",c,s),de("click",c,n),fi("auxclick",c,E=>{E.stopPropagation(),E.button==2?bn(e.view.app,E,e.change.vaultPath,e.view.leaf,"git-source-control"):n(E)}),de("click",b,l),ce(t,c),ct()}Tt(["mouseover","click"]);m();m();var LU=he(''),NU=he("
    ");function fo(t,e){lt(e,!0);var r=NU(),i=j(r);{var n=s=>{var a=LU(),o=j(a),l=j(o),c=j(l,!0);G(l),G(o),G(a),Be(()=>{xe(o,"aria-label","And "+(e.files.length-500)+" more files"),je(c,"And "+(e.files.length-500)+" more files")}),ce(s,a)};Re(i,s=>{e.files.length>500&&s(n)})}G(r),ce(t,r),ct()}var HU=he("
    "),UU=he('
    '),GU=he('
    ',1),jU=he(''),VU=he('
    '),zU=he("
    ");function ho(t,e){lt(e,!0);let r=Di(e,"topLevel",3,!1),i=Di(e,"closed",15);co(()=>{var h,p;for(let g of e.hierarchy.children)((p=(h=g.children)===null||h===void 0?void 0:h.length)!==null&&p!==void 0?p:0)>100&&i(i()[g.title]=!0,!0)});let n=ut(()=>e.view.leaf.getRoot().side=="left"?"right":"left");function s(h,p){h.stopPropagation(),e.plugin.gitManager.stageAll({dir:p}).catch(g=>e.plugin.displayError(g)).finally(()=>{e.view.app.workspace.trigger("obsidian-git:refresh")})}function a(h,p){h.stopPropagation(),e.plugin.gitManager.unstageAll({dir:p}).catch(g=>e.plugin.displayError(g)).finally(()=>{e.view.app.workspace.trigger("obsidian-git:refresh")})}function o(h,p){h.stopPropagation(),e.plugin.discardAll(p.vaultPath)}function l(h,p){h.stopPropagation(),i(i()[p.path]=!i()[p.path],!0)}var c=zU();let u;var f=j(c);pi(f,17,()=>uu(e.hierarchy.children,500),hi,(h,p)=>{var g=oo(),v=Mi(g);{var _=S=>{var k=HU(),E=j(k);{var A=y=>{df(y,{get change(){return $(p).data},get manager(){return e.plugin.gitManager},get view(){return e.view}})},w=y=>{uf(y,{get change(){return $(p).data},get manager(){return e.plugin.gitManager},get view(){return e.view}})},x=y=>{ff(y,{get change(){return $(p).data},get view(){return e.view}})};Re(E,y=>{e.fileType==0?y(A):e.fileType==1?y(w,1):e.fileType==2&&y(x,2)})}G(k),ce(S,k)},b=S=>{var k=VU();let E;var A=j(k),w=te(j(A),2);let x;var y=te(w,2),C=j(y,!0);G(y);var P=te(y,2),L=j(P),N=j(L);{var B=ne=>{var Ee=UU();de("click",Ee,_e=>a(_e,$(p).path)),ce(ne,Ee)},ge=ne=>{var Ee=GU(),_e=Mi(Ee),z=te(_e,2);de("click",_e,X=>o(X,$(p))),de("click",z,X=>s(X,$(p).path)),ce(ne,Ee)};Re(N,ne=>{e.fileType==0?ne(B):ne(ge,-1)})}Ga(2),G(L),G(P),G(A);var Le=te(A,2);{var ke=ne=>{var Ee=jU(),_e=j(Ee);ho(_e,{get hierarchy(){return $(p)},get plugin(){return e.plugin},get view(){return e.view},get fileType(){return e.fileType},get closed(){return i()},set closed(z){i(z)}}),G(Ee),sn(3,Ee,()=>Gn,()=>({duration:150})),ce(ne,Ee)};Re(Le,ne=>{i()[$(p).path]||ne(ke)})}G(k),Be(()=>{E=gt(k,1,"tree-item nav-folder",null,E,{"is-collapsed":i()[$(p).path]}),xe(A,"data-tooltip-position",$(n)),xe(A,"aria-label",$(p).vaultPath),x=gt(w,1,"tree-item-icon nav-folder-collapse-indicator collapse-icon",null,x,{"is-collapsed":i()[$(p).path]}),je(C,$(p).title)}),fi("auxclick",k,ne=>bn(e.view.app,ne,$(p).vaultPath,e.view.leaf,"git-source-control")),de("click",A,ne=>l(ne,$(p))),ce(S,k)};Re(v,S=>{$(p).data?S(_):S(b,-1)})}ce(h,g)});var d=te(f,2);fo(d,{get files(){return e.hierarchy.children}}),G(c),Be(()=>u=gt(c,1,"",null,u,{topLevel:r()})),ce(t,c),ct()}Tt(["click"]);var WU=he('
    '),qU=he(" ",1),YU=he(''),XU=he(" ",1),ZU=he(''),KU=he(" ",1),QU=he(''),JU=he('
    '),eG=he(''),tG=he('
    '),rG={hash:"svelte-5wq9p",code:`.commit-msg-input.svelte-5wq9p {width:100%;overflow:hidden;resize:none;padding:7px 5px;background-color:var(--background-modifier-form-field);}.git-commit-msg.svelte-5wq9p {position:relative;padding:0;width:calc(100% - var(--size-4-8));margin:4px auto;}main.svelte-5wq9p .git-tools:where(.svelte-5wq9p) .files-count:where(.svelte-5wq9p) {padding-left:var(--size-2-1);width:11px;display:flex;align-items:center;justify-content:center;}.nav-folder-title.svelte-5wq9p {align-items:center;}.git-commit-msg-clear-button.svelte-5wq9p {position:absolute;background:transparent;border-radius:50%;color:var(--search-clear-button-color);cursor:var(--cursor);top:-4px;right:2px;bottom:0px;line-height:0;height:var(--input-height);width:28px;margin:auto;padding:0 0;text-align:center;display:flex;justify-content:center;align-items:center;transition:color 0.15s ease-in-out;}.git-commit-msg-clear-button.svelte-5wq9p:after {content:"";height:var(--search-clear-button-size);width:var(--search-clear-button-size);display:block;background-color:currentColor;mask-image:url("data:image/svg+xml,");mask-repeat:no-repeat;-webkit-mask-image:url("data:image/svg+xml,");-webkit-mask-repeat:no-repeat;}`};function j0(t,e){lt(e,!0),an(t,rG);let r=Di(e,"plugin",7),i=Di(e,"view",7),n=Oe(!1),s=Oe(void 0),a=Oe(Qe([])),o=ut(()=>r().settings.commitMessage),l=Qe([]),c=Oe(void 0),u=Oe(void 0),f=Oe(void 0),d=Oe(!0),h=Oe(!0),p=Oe(!0),g=Oe(0),v=Oe(Qe({})),_=Oe(Qe({})),b=Oe(Qe({})),S=ut(()=>r().settings.treeStructure);co(()=>{i().registerEvent(i().app.workspace.on("obsidian-git:loading-status",()=>se(n,!0))),i().registerEvent(i().app.workspace.on("obsidian-git:status-changed",()=>void A().catch(console.error))),i().plugin.cachedStatus==null?i().plugin.refresh().catch(console.error):A().catch(console.error),i().scope=new po.Scope(r().app.scope),i().scope.register(["Ctrl"],"Enter",M=>E())}),mr(()=>{l.forEach(M=>(0,po.setIcon)(M,M.getAttr("data-icon")))}),mr(()=>{l.forEach(M=>{var ae,Te;!M||M.id!="push"||(po.Platform.isMobile?(M.removeClass("button-border"),$(g)>0&&M.addClass("button-border")):((ae=M.firstElementChild)===null||ae===void 0||ae.removeAttribute("color"),$(g)>0&&((Te=M.firstElementChild)===null||Te===void 0||Te.setAttr("color","var(--text-accent)"))))})});function k(){if(se(n,!0),$(s)){let M=$(s).staged.length>0;r().promiseQueue.addTask(()=>r().commit({fromAuto:!1,commitMessage:$(o),onlyStaged:M}).then(()=>se(o,r().settings.commitMessage)).finally(w))}}function E(){if(se(n,!0),$(s)){let M=$(s).staged.length>0;r().promiseQueue.addTask(()=>r().commitAndSync({fromAutoBackup:!1,commitMessage:$(o),onlyStaged:M}).then(()=>{se(o,r().settings.commitMessage)}).finally(w))}}function A(){return uo(this,void 0,void 0,function*(){if(!r().gitReady){se(s,void 0);return}if(se(g,yield r().gitManager.getUnpushedCommits(),!0),se(s,r().cachedStatus,!0),se(n,!1),r().lastPulledFiles&&r().lastPulledFiles!=$(a)&&(se(a,r().lastPulledFiles,!0),se(f,{title:"",path:"",vaultPath:"",children:r().gitManager.getTreeStructure($(a))},!0)),$(s)){let M=(ae,Te)=>ae.vaultPath.split("/").last().localeCompare(yn(Te.vaultPath));$(s).changed.sort(M),$(s).staged.sort(M),se(c,{title:"",path:"",vaultPath:"",children:r().gitManager.getTreeStructure($(s).changed)},!0),se(u,{title:"",path:"",vaultPath:"",children:r().gitManager.getTreeStructure($(s).staged)},!0)}else se(c,void 0),se(u,void 0)})}function w(){i().app.workspace.trigger("obsidian-git:refresh")}function x(M){M.stopPropagation(),se(n,!0),r().promiseQueue.addTask(()=>r().gitManager.stageAll({status:$(s)}).finally(w))}function y(M){M.stopPropagation(),se(n,!0),r().promiseQueue.addTask(()=>r().gitManager.unstageAll({status:$(s)}).finally(w))}function C(){se(n,!0),r().promiseQueue.addTask(()=>r().push().finally(w))}function P(){se(n,!0),r().promiseQueue.addTask(()=>r().pullChangesFromRemote().finally(w))}function L(M){M.stopPropagation(),r().discardAll()}let N=ut(()=>($(o).match(/\n/g)||[]).length+1||1);var B=tG(),ge=j(B),Le=j(ge),ke=j(Le);at(ke,M=>l[0]=M,()=>l==null?void 0:l[0]);var ne=te(ke,2);at(ne,M=>l[1]=M,()=>l==null?void 0:l[1]);var Ee=te(ne,2);at(Ee,M=>l[2]=M,()=>l==null?void 0:l[2]);var _e=te(Ee,2);at(_e,M=>l[3]=M,()=>l==null?void 0:l[3]);var z=te(_e,2);at(z,M=>l[4]=M,()=>l==null?void 0:l[4]);var X=te(z,2);at(X,M=>l[5]=M,()=>l==null?void 0:l[5]);var V=te(X,2);at(V,M=>l[6]=M,()=>l==null?void 0:l[6]);var Ne=te(V,2);let gr;at(Ne,M=>l[7]=M,()=>l==null?void 0:l[7]),G(Le),G(ge);var Nt=te(ge,2),Fe=j(Nt);v0(Fe);var Pt=te(Fe,2);{var Rt=M=>{var ae=WU();xe(ae,"aria-label","Clear"),de("click",ae,()=>se(o,"")),ce(M,ae)};Re(Pt,M=>{$(o)&&M(Rt)})}G(Nt);var Ye=te(Nt,2),J=j(Ye);{var D=M=>{var ae=eG(),Te=j(ae);let Bt;var Tr=j(Te),vo=j(Tr);let Y0;var X0=te(vo,4),Lp=j(X0),Z0=j(Lp);at(Z0,vr=>l[8]=vr,()=>l==null?void 0:l[8]),G(Lp);var K0=te(Lp,2),eF=j(K0,!0);G(K0),G(X0),G(Tr);var tF=te(Tr,2);{var rF=vr=>{var Pr=YU(),wo=j(Pr);{var ms=wr=>{ho(wr,{get hierarchy(){return $(u)},get plugin(){return r()},get view(){return i()},get fileType(){return 0},topLevel:!0,get closed(){return $(v)},set closed(Li){se(v,Li,!0)}})},_o=wr=>{var Li=qU(),Ks=Mi(Li);pi(Ks,17,()=>uu($(s).staged,500),hi,(gs,cc)=>{df(gs,{get change(){return $(cc)},get view(){return i()},get manager(){return r().gitManager}})});var Qs=te(Ks,2);fo(Qs,{get files(){return $(s).staged}}),ce(wr,Li)};Re(wo,wr=>{$(S)?wr(ms):wr(_o,-1)})}G(Pr),sn(3,Pr,()=>Gn,()=>({duration:150})),ce(vr,Pr)};Re(tF,vr=>{$(h)&&vr(rF)})}G(Te);var pf=te(Te,2);let Q0;var mf=j(pf),J0=j(mf);let e_;var t_=te(J0,4),Np=j(t_),r_=j(Np),i_=te(r_,2);at(i_,vr=>l[9]=vr,()=>l==null?void 0:l[9]),G(Np);var n_=te(Np,2),iF=j(n_,!0);G(n_),G(t_),G(mf);var nF=te(mf,2);{var sF=vr=>{var Pr=ZU(),wo=j(Pr);{var ms=wr=>{ho(wr,{get hierarchy(){return $(c)},get plugin(){return r()},get view(){return i()},get fileType(){return 1},topLevel:!0,get closed(){return $(_)},set closed(Li){se(_,Li,!0)}})},_o=wr=>{var Li=XU(),Ks=Mi(Li);pi(Ks,17,()=>uu($(s).changed,500),hi,(gs,cc)=>{uf(gs,{get change(){return $(cc)},get view(){return i()},get manager(){return r().gitManager}})});var Qs=te(Ks,2);fo(Qs,{get files(){return $(s).changed}}),ce(wr,Li)};Re(wo,wr=>{$(S)?wr(ms):wr(_o,-1)})}G(Pr),sn(3,Pr,()=>Gn,()=>({duration:150})),ce(vr,Pr)};Re(nF,vr=>{$(d)&&vr(sF)})}G(pf);var aF=te(pf,2);{var oF=vr=>{var Pr=JU();let wo;var ms=j(Pr),_o=te(j(ms),4),wr=j(_o,!0);G(_o),G(ms);var Li=te(ms,2);{var Ks=Qs=>{var gs=QU(),cc=j(gs);{var lF=bo=>{ho(bo,{get hierarchy(){return $(f)},get plugin(){return r()},get view(){return i()},get fileType(){return 2},topLevel:!0,get closed(){return $(b)},set closed(gf){se(b,gf,!0)}})},cF=bo=>{var gf=KU(),s_=Mi(gf);pi(s_,17,()=>$(a),hi,(fF,dF)=>{ff(fF,{get change(){return $(dF)},get view(){return i()}})});var uF=te(s_,2);fo(uF,{get files(){return $(a)}}),ce(bo,gf)};Re(cc,bo=>{$(S)?bo(lF):bo(cF,-1)})}G(gs),sn(3,gs,()=>Gn,()=>({duration:150})),ce(Qs,gs)};Re(Li,Qs=>{$(p)&&Qs(Ks)})}G(Pr),Be(()=>{wo=gt(Pr,1,"pulled nav-folder",null,wo,{"is-collapsed":!$(p)}),je(wr,$(a).length)}),de("click",ms,()=>se(p,!$(p))),ce(vr,Pr)};Re(aF,vr=>{$(a).length>0&&$(f)&&vr(oF)})}G(ae),Be(()=>{Bt=gt(Te,1,"staged tree-item nav-folder",null,Bt,{"is-collapsed":!$(h)}),Y0=gt(vo,1,"tree-item-icon nav-folder-collapse-indicator collapse-icon",null,Y0,{"is-collapsed":!$(h)}),je(eF,$(s).staged.length),Q0=gt(pf,1,"changes tree-item nav-folder",null,Q0,{"is-collapsed":!$(d)}),e_=gt(J0,1,"tree-item-icon nav-folder-collapse-indicator collapse-icon",null,e_,{"is-collapsed":!$(d)}),je(iF,$(s).changed.length)}),de("click",Tr,()=>se(h,!$(h))),de("click",Z0,y),de("click",mf,()=>se(d,!$(d))),de("click",r_,L),de("click",i_,x),ce(M,ae)};Re(J,M=>{$(s)&&$(u)&&$(c)&&M(D)})}G(Ye),G(B),Be(()=>{xe(B,"data-type",Kt.type),xe(V,"data-icon",$(S)?"list":"folder"),gr=gt(Ne,1,"clickable-icon nav-action-button",null,gr,{loading:$(n)}),xe(Fe,"rows",$(N))}),de("click",ke,E),de("click",ne,k),de("click",Ee,x),de("click",_e,y),de("click",z,C),de("click",X,P),de("click",V,()=>{se(S,!$(S)),(0,po.setIcon)(l[6],$(S)?"list":"folder"),r().settings.treeStructure=$(S),r().saveSettings()}),de("click",Ne,w),M0(Fe,()=>$(o),M=>se(o,M)),ce(t,B),ct()}Tt(["click"]);var hf=class extends z$.ItemView{constructor(e,r){super(e),this.plugin=r,this.hoverPopover=null}getViewType(){return Kt.type}getDisplayText(){return Kt.name}getIcon(){return Kt.icon}onClose(){return this._view&&ds(this._view),super.onClose()}reload(){this._view&&ds(this._view),this._view=Xs(j0,{target:this.contentEl,props:{plugin:this.plugin,view:this}})}onOpen(){return this.reload(),super.onOpen()}};m();var kp=class{constructor(e,r){this.statusBarEl=e;this.plugin=r;this.statusBarEl.addClass("mod-clickable"),this.statusBarEl.onClickEvent(i=>{this.plugin.switchBranch().catch(n=>r.displayError(n))})}async display(){if(this.plugin.gitReady){let e=await this.plugin.gitManager.branchInfo();e.current!=null?this.statusBarEl.setText(e.current):this.statusBarEl.empty()}else this.statusBarEl.empty()}remove(){this.statusBarEl.remove()}};m();var W$=require("obsidian");var Ap=class{constructor(e){this.plugin=e}get editor(){var i;let e=(i=this.plugin.app.workspace.activeEditor)==null?void 0:i.editor,r=e==null?void 0:e.cm;if(!(!e||!Wi.hasHunksData(r.state)))return{editor:r,obEditor:e}}get gitManager(){return this.plugin.gitManager}resetHunk(e){if(!this.editor)return;let{editor:r,obEditor:i}=this.editor,n=Wi.getHunk(r.state,!1,e);if(n){let s,a;n.type==="delete"?(s=n.added.start+1,a=n.added.start+1):(s=n.added.start-0,a=n.added.start-1+n.added.count);let o=r.state.doc.line(s).from,l=n.type==="delete"?r.state.doc.line(a).from:r.state.doc.line(a).to+1,c=n.removed.lines.join(` +`);n.removed.lines.length>0&&!n.removed.no_nl_at_eof&&(c+=` +`),i.replaceRange(c,i.offsetToPos(o),i.offsetToPos(l)),i.setSelection(i.offsetToPos(o))}}async stageHunk(e){if(!await this.plugin.isAllInitialized()||!this.editor)return;let{editor:r}=this.editor,i=Wi.getHunk(r.state,!1,e),n=!1;if(i||(i=Wi.getHunk(r.state,!0,e),n=!0),!i)return;let s=r.state.field(W$.editorInfoField).file.path,a=Vt.createPatch(s,[i],"100644",n).join(` +`)+` +`;await this.gitManager.applyPatch(a),this.plugin.app.workspace.trigger("obsidian-git:refresh")}goToHunk(e){if(!this.editor)return;let{editor:r,obEditor:i}=this.editor,n=Wi.getHunks(r.state,!1),s=i.getCursor().line+1,a=Vt.findNearestHunk(s,n,e,!0);if(a==null)return;let o=n[a];if(o){let l=o.added.start-1;i.setCursor(l,0),i.scrollIntoView({from:{line:l,ch:0},to:{line:l+1,ch:0}},!0)}}};m();m();var mo=require("obsidian");var Cp=class{constructor(e){this.plg=e;this.codeMirrorExtensions=[];this.handleWorkspaceLeaf=e=>{if(!this.lineAuthorInfoProvider){console.warn("Git: undefined lineAuthorInfoProvider. Unexpected situation.");return}let r=e==null?void 0:e.view;!(r instanceof mo.MarkdownView)||r.file==null||(r==null?void 0:r.allowNoFile)===!0||this.lineAuthorInfoProvider.trackChanged(r.file).catch(console.error)}}onLoadPlugin(){this.plg.registerEditorExtension(this.codeMirrorExtensions),h2(()=>this.plg.settings.lineAuthor,e=>{this.plg.settings.lineAuthor=e,this.plg.saveSettings()})}conditionallyActivateBySettings(){this.plg.settings.lineAuthor.show&&this.activateFeature()}activateFeature(){try{if(!this.isAvailableOnCurrentPlatform().available)return;E2(this.plg.settings.lineAuthor),this.lineAuthorInfoProvider=new ch(this.plg),this.createEventHandlers(),this.activateCodeMirrorExtensions(),console.log(this.plg.manifest.name+": Enabled line authoring.")}catch(e){console.warn("Git: Error while loading line authoring feature.",e),this.deactivateFeature()}}deactivateFeature(){var e;this.destroyEventHandlers(),this.deactivateCodeMirrorExtensions(),(e=this.lineAuthorInfoProvider)==null||e.destroy(),this.lineAuthorInfoProvider=void 0,console.log(this.plg.manifest.name+": Disabled line authoring.")}isAvailableOnCurrentPlatform(){return{available:this.plg.useSimpleGit&&mo.Platform.isDesktopApp,gitManager:this.plg.gitManager instanceof Se?this.plg.gitManager:void 0}}refreshLineAuthorViews(){this.plg.settings.lineAuthor.show&&(this.deactivateFeature(),this.activateFeature())}activateCodeMirrorExtensions(){this.codeMirrorExtensions.push(D2),this.plg.app.workspace.updateOptions(),this.plg.app.workspace.iterateAllLeaves(this.handleWorkspaceLeaf)}deactivateCodeMirrorExtensions(){for(let e of this.codeMirrorExtensions)this.codeMirrorExtensions.remove(e);this.plg.app.workspace.updateOptions()}createEventHandlers(){this.gutterContextMenuEvent=this.createGutterContextMenuHandler(),this.fileOpenEvent=this.createFileOpenEvent(),this.workspaceLeafChangeEvent=this.createWorkspaceLeafChangeEvent(),this.fileModificationEvent=this.createVaultFileModificationHandler(),this.headChangeEvent=this.createHeadChangeEvent(),this.refreshOnCssChangeEvent=this.createCssRefreshHandler(),this.fileRenameEvent=this.createFileRenameEvent(),w2(),this.plg.registerEvent(this.gutterContextMenuEvent),this.plg.registerEvent(this.refreshOnCssChangeEvent),this.plg.registerEvent(this.fileOpenEvent),this.plg.registerEvent(this.workspaceLeafChangeEvent),this.plg.registerEvent(this.fileModificationEvent),this.plg.registerEvent(this.headChangeEvent),this.plg.registerEvent(this.fileRenameEvent)}destroyEventHandlers(){this.plg.app.workspace.offref(this.gutterContextMenuEvent),this.plg.app.workspace.offref(this.refreshOnCssChangeEvent),this.plg.app.workspace.offref(this.fileOpenEvent),this.plg.app.workspace.offref(this.workspaceLeafChangeEvent),this.plg.app.workspace.offref(this.refreshOnCssChangeEvent),this.plg.app.vault.offref(this.fileModificationEvent),this.plg.app.workspace.offref(this.headChangeEvent),this.plg.app.vault.offref(this.fileRenameEvent)}createFileOpenEvent(){return this.plg.app.workspace.on("file-open",e=>{var r;return void((r=this.lineAuthorInfoProvider)==null?void 0:r.trackChanged(e).catch(console.error))})}createWorkspaceLeafChangeEvent(){return this.plg.app.workspace.on("active-leaf-change",this.handleWorkspaceLeaf)}createFileRenameEvent(){return this.plg.app.vault.on("rename",(e,r)=>{var i;return e instanceof mo.TFile&&((i=this.lineAuthorInfoProvider)==null?void 0:i.trackChanged(e))})}createVaultFileModificationHandler(){return this.plg.app.vault.on("modify",e=>{var r;return e instanceof mo.TFile&&((r=this.lineAuthorInfoProvider)==null?void 0:r.trackChanged(e))})}createHeadChangeEvent(){return this.plg.app.workspace.on("obsidian-git:head-change",()=>{this.refreshLineAuthorViews()})}createCssRefreshHandler(){return this.plg.app.workspace.on("css-change",()=>this.refreshLineAuthorViews())}createGutterContextMenuHandler(){return this.plg.app.workspace.on("editor-menu",y2)}};m();var lc=require("obsidian");m();m();var go=require("@codemirror/state"),Pp=require("@codemirror/view");var Tp=class extends Pp.GutterMarker{constructor(r,i){super();this.type=r;this.staged=i}toDOM(r){let i=activeDocument.createElement("div");return i.className=`git-gutter-marker git-${this.type} ${this.staged?"staged":"unstaged"}`,this.type=="changedelete"&&i.setText("~"),i}},V0=go.StateField.define({create:()=>go.RangeSet.empty,update:(t,e)=>{let r=e.state.field(Hr,!1);if(!r)return go.RangeSet.empty;let i=e.effects.some(s=>s.is(Pu)),n=e.effects.some(s=>s.is(Il));if(i||n||(e.docChanged||t.size==0)&&r.isDirty==!1){let s=new Set,a=q$(e,r.hunks,!1,s),o=q$(e,r.stagedHunks,!0,s);return t=go.RangeSet.of([...a,...o],!0),t}else e.docChanged&&(t=t.map(e.changes));return t}});function q$(t,e,r,i){let n=[];for(let a=0;a0?e[a-1]:void 0,l=a{var e;return(e=t.state.field(V0,!1))!=null?e:go.RangeSet.empty},initialSpacer:t=>new Tp("delete",!1),domEventHandlers:{click:(t,e,r)=>{var n;return((n=Wi.getHunkAtPos(t.state,e.from,!1))!=null?n:Wi.getHunkAtPos(t.state,e.from,!0))&&(Gs(t,e.from),r.preventDefault()),!1}}});var Rp=class{constructor(e){this.plugin=e}async trackChanged(e){return this.trackChangedHelper(e).catch(r=>(console.warn("Git: Error in trackChanged."+r),Promise.reject(r)))}async trackChangedHelper(e){if(e){if(e.path===void 0){console.warn("Git: Attempted to track change of undefined filepath. Unforeseen situation.");return}return this.computeSigns(e.path)}}destroy(){}async computeSigns(e){let i=await this.plugin.editorIntegration.lineAuthoringFeature.isAvailableOnCurrentPlatform().gitManager.show("",e).catch(()=>{});this.notifySignComputationResultToSubscribers(e,{compareText:i,compareTextHead:void 0})}notifySignComputationResultToSubscribers(e,r){es.ifFilepathDefinedTransformSubscribers(e,i=>i.forEach(n=>n.notifyGitCompare(r)))}},X$=[YP,XP,Y$,V0,$h],Z$=[Hr,Cw];m();var z0=require("obsidian"),$p=class{constructor(e,r){this.statusBarEl=e;this.plugin=r;e.addClass("git-changes-status-bar"),r.settings.hunks.statusBar==="colored"&&e.addClass("git-changes-status-bar-colored"),e.setAttr("aria-label","Git diff of the current editor"),this.statusBarEl.setAttribute("data-tooltip-position","top"),r.app.workspace.on("active-leaf-change",i=>{(!i||i.getRoot()==r.app.workspace.rootSplit&&!(i.view instanceof z0.MarkdownView))&&this.statusBarEl.empty()})}display(e,r){var o;let i=this.plugin.app.workspace.getActiveViewOfType(z0.MarkdownView);if(!i||((o=i.file)==null?void 0:o.path)!==(r==null?void 0:r.path))return;let n=0,s=0,a=0;for(let l of e)n+=Math.max(0,l.added.count-l.removed.count),s+=Math.min(l.added.count,l.removed.count),a+=Math.max(0,l.removed.count-l.added.count);this.statusBarEl.empty(),n>0&&this.statusBarEl.createSpan({text:`+${n} `,cls:"git-add"}),s>0&&this.statusBarEl.createSpan({text:`~${s} `,cls:"git-change"}),a>0&&this.statusBarEl.createSpan({text:`-${a}`,cls:"git-delete"})}remove(){this.statusBarEl.remove()}};var Fp=class{constructor(e){this.plg=e;this.codeMirrorExtensions=[];this.handleWorkspaceLeaf=e=>{if(!this.signsProvider){console.warn("Git: undefined signsProvider. Unexpected situation.");return}let r=e==null?void 0:e.view;!(r instanceof lc.MarkdownView)||r.file==null||(r==null?void 0:r.allowNoFile)===!0||this.signsProvider.trackChanged(r.file).catch(console.error)}}onLoadPlugin(){this.plg.registerEditorExtension(this.codeMirrorExtensions)}conditionallyActivateBySettings(){(this.plg.settings.hunks.showSigns||this.plg.settings.hunks.statusBar!="disabled"||this.plg.settings.hunks.hunkCommands)&&this.activateFeature()}activateFeature(){try{if(!this.isAvailableOnCurrentPlatform().available)return;if(this.signsProvider=new Rp(this.plg),this.createEventHandlers(),this.activateCodeMirrorExtensions(),this.plg.settings.hunks.statusBar!="disabled"){let e=this.plg.addStatusBarItem();this.changeStatusBar=new $p(e,this.plg)}}catch(e){console.warn("Git: Error while loading signs feature.",e),this.deactivateFeature()}}deactivateFeature(){var e,r;this.destroyEventHandlers(),this.deactivateCodeMirrorExtensions(),(e=this.signsProvider)==null||e.destroy(),this.signsProvider=void 0,(r=this.changeStatusBar)==null||r.remove(),this.changeStatusBar=void 0}isAvailableOnCurrentPlatform(){return{available:this.plg.useSimpleGit&&lc.Platform.isDesktopApp,gitManager:this.plg.gitManager instanceof Se?this.plg.gitManager:void 0}}refresh(){this.plg.settings.hunks.showSigns&&this.plg.app.workspace.iterateAllLeaves(this.handleWorkspaceLeaf)}activateCodeMirrorExtensions(){this.codeMirrorExtensions.push(Z$),this.plg.settings.hunks.showSigns&&this.codeMirrorExtensions.push(...X$),this.plg.app.workspace.updateOptions(),this.plg.app.workspace.iterateAllLeaves(this.handleWorkspaceLeaf)}deactivateCodeMirrorExtensions(){for(let e of this.codeMirrorExtensions)this.codeMirrorExtensions.remove(e);this.plg.app.workspace.updateOptions()}createEventHandlers(){this.workspaceLeafChangeEvent=this.createWorkspaceLeafChangeEvent(),this.fileRenameEvent=this.createFileRenameEvent(),this.pluginRefreshedEvent=this.createPluginRefreshedEvent(),this.intervalRefreshEvent=this.createIntervalRefreshEvent(),this.plg.registerEvent(this.workspaceLeafChangeEvent),this.plg.registerEvent(this.fileRenameEvent),this.plg.registerEvent(this.pluginRefreshedEvent),this.plg.registerInterval(this.intervalRefreshEvent)}destroyEventHandlers(){this.plg.app.workspace.offref(this.workspaceLeafChangeEvent),this.plg.app.vault.offref(this.fileRenameEvent),this.plg.app.workspace.offref(this.pluginRefreshedEvent),this.plg.app.workspace.offref(this.gutterContextMenuEvent),window.clearInterval(this.intervalRefreshEvent)}createWorkspaceLeafChangeEvent(){return this.plg.app.workspace.on("active-leaf-change",this.handleWorkspaceLeaf)}createFileRenameEvent(){return this.plg.app.vault.on("rename",(e,r)=>{var i;return es.ifFilepathDefinedTransformSubscribers(r,n=>n.forEach(s=>{s.changeToNewFilepath(e.path)})),e instanceof lc.TFile&&((i=this.signsProvider)==null?void 0:i.trackChanged(e))})}createPluginRefreshedEvent(){return this.plg.app.workspace.on("obsidian-git:refresh",()=>{this.refresh()})}createIntervalRefreshEvent(){return window.setInterval(()=>{var e,r;(e=this.plg.app.workspace.activeEditor)!=null&&e.file&&((r=this.signsProvider)==null||r.trackChanged(this.plg.app.workspace.activeEditor.file).catch(console.error))},10*1e3)}};m();var K$=require("@codemirror/state"),Ip=require("obsidian");var W0=class{constructor(e){this.state=e;this.subscribeMe()}notifyLineAuthoring(e,r){if(this.view===void 0){console.warn(`Git: View is not defined for editor cache key. Unforeseen situation. id: ${e}`);return}let i=this.view.state,n=d2(e,r,i);this.view.dispatch(n)}notifyGitCompare(e){if(this.view===void 0){console.warn("Git: View is not defined for editor cache key. Unforeseen situation. id: ");return}if(this.removeIfStale())return;let r=this.view.state,i=r.field(Hr);if(!i||i.compareText!=e.compareText||i.compareTextHead!=e.compareTextHead){let n=CP(e,r);this.view.dispatch(n)}}updateToNewState(e){return this.state=e,!this.lastSeenPath&&this.filepath&&this.subscribeMe(),this}removeIfStale(){var e;return((e=this.view)==null?void 0:e.state.field(q0,!1))!=this||this.view.destroyed?(this.unsubscribeMe(this.lastSeenPath),!0):!1}changeToNewFilepath(e){this.unsubscribeMe(this.lastSeenPath),this.subscribeMe(e)}subscribeMe(e){e!=null||(e=this.filepath),e!==void 0&&(es.ifFilepathDefinedTransformSubscribers(e,r=>r.add(this)),this.lastSeenPath=e)}unsubscribeMe(e){es.ifFilepathDefinedTransformSubscribers(e,r=>r.delete(this))}get filepath(){var e,r;return(r=(e=this.state.field(Ip.editorInfoField))==null?void 0:e.file)==null?void 0:r.path}get view(){return this.state.field(Ip.editorEditorField)}},q0=K$.StateField.define({create:t=>new W0(t),update:(t,e)=>t.updateToNewState(e.state),compare:(t,e)=>t===e});var Mp=class{constructor(e){this.plg=e;this.lineAuthoringFeature=new Cp(this.plg);this.signsFeature=new Fp(this.plg)}onUnloadPlugin(){this.lineAuthoringFeature.deactivateFeature(),this.signsFeature.deactivateFeature()}onLoadPlugin(){this.plg.registerEditorExtension(q0),this.lineAuthoringFeature.onLoadPlugin(),this.signsFeature.onLoadPlugin()}onReady(){this.lineAuthoringFeature.conditionallyActivateBySettings(),this.signsFeature.conditionallyActivateBySettings()}activateLineAuthoring(){this.lineAuthoringFeature.activateFeature()}deactiveLineAuthoring(){this.lineAuthoringFeature.deactivateFeature()}refreshSignsSettings(){let e=this.plg.settings.hunks;e.showSigns||e.statusBar!="disabled"||e.hunkCommands?(this.signsFeature.deactivateFeature(),this.signsFeature.activateFeature()):this.signsFeature.deactivateFeature()}};var Dp=class extends be.Plugin{constructor(){super(...arguments);this.automaticsManager=new Su(this);this.tools=new Ou(this);this.localStorage=new Fh(this);this.state={gitAction:0,offlineMode:!1};this.gitReady=!1;this.promiseQueue=new vd(this);this.intervalsToClear=[];this.editorIntegration=new Mp(this);this.hunkActions=new Ap(this)}setPluginState(r){var i;this.state=Object.assign(this.state,r),(i=this.statusBar)==null||i.display()}async updateCachedStatus(){var r,i;return this.app.workspace.trigger("obsidian-git:loading-status"),this.cachedStatus=await this.gitManager.status(),this.cachedStatus.conflicted.length>0?(this.localStorage.setConflict(!0),await((r=this.branchBar)==null?void 0:r.display())):(this.localStorage.setConflict(!1),await((i=this.branchBar)==null?void 0:i.display())),this.app.workspace.trigger("obsidian-git:status-changed",this.cachedStatus),this.cachedStatus}async refresh(){if(!this.gitReady)return;let r=this.app.workspace.getLeavesOfType(Kt.type),i=this.app.workspace.getLeavesOfType(bi.type);(this.settings.changedFilesInStatusBar||r.some(n=>{var s;return!((s=n.isDeferred)!=null&&s)})||i.some(n=>{var s;return!((s=n.isDeferred)!=null&&s)}))&&await this.updateCachedStatus().catch(n=>this.displayError(n)),this.app.workspace.trigger("obsidian-git:refreshed")}refreshUpdatedHead(){}async onload(){console.log("loading "+this.manifest.name+" plugin: v"+this.manifest.version),jt.plugin=this,this.localStorage.migrate(),await this.loadSettings(),await this.migrateSettings(),this.settingsTab=new uh(this.app,this),this.addSettingTab(this.settingsTab),this.localStorage.getPluginDisabled()||(this.registerStuff(),this.app.workspace.onLayoutReady(()=>this.init({fromReload:!1}).catch(r=>this.displayError(r))))}onExternalSettingsChange(){this.reloadSettings().catch(r=>this.displayError(r))}async reloadSettings(){let r=JSON.stringify(this.settings);await this.loadSettings();let i=JSON.stringify(this.settings);r!==i&&(this.log("Reloading settings"),this.unloadPlugin(),await this.init({fromReload:!0}),this.app.workspace.getLeavesOfType(Kt.type).forEach(n=>{var s;if(!((s=n.isDeferred)!=null&&s))return n.view.reload()}),this.app.workspace.getLeavesOfType(bi.type).forEach(n=>{var s;if(!((s=n.isDeferred)!=null&&s))return n.view.reload()}))}registerStuff(){this.registerEvent(this.app.workspace.on("obsidian-git:refresh",()=>{this.refresh().catch(r=>this.displayError(r))})),this.registerEvent(this.app.workspace.on("obsidian-git:head-change",()=>{this.refreshUpdatedHead()})),this.registerEvent(this.app.workspace.on("file-menu",(r,i,n)=>{this.handleFileMenu(r,i,n,"file-manu")})),this.registerEvent(this.app.workspace.on("obsidian-git:menu",(r,i,n)=>{this.handleFileMenu(r,i,n,"obsidian-git:menu")})),this.registerEvent(this.app.workspace.on("active-leaf-change",r=>{this.onActiveLeafChange(r)})),this.registerEvent(this.app.vault.on("modify",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerEvent(this.app.vault.on("delete",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerEvent(this.app.vault.on("create",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerEvent(this.app.vault.on("rename",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerView(Kt.type,r=>new hf(r,this)),this.registerView(bi.type,r=>new lf(r,this)),this.registerView(Ds.type,r=>new La(r,this)),this.registerView(Ms.type,r=>new Na(r,this)),this.addRibbonIcon("git-pull-request","Open Git source control",async()=>{var n;let r=this.app.workspace.getLeavesOfType(Kt.type),i;r.length===0?(i=(n=this.app.workspace.getRightLeaf(!1))!=null?n:this.app.workspace.getLeaf(),await i.setViewState({type:Kt.type})):i=r.first(),await this.app.workspace.revealLeaf(i)}),this.registerHoverLinkSource(Kt.type,{display:"Git View",defaultMod:!0}),this.editorIntegration.onLoadPlugin(),this.setRefreshDebouncer(),ZP(this)}setRefreshDebouncer(){var r;(r=this.debRefresh)==null||r.cancel(),this.debRefresh=(0,be.debounce)(()=>{this.settings.refreshSourceControl&&this.refresh().catch(console.error)},this.settings.refreshSourceControlTimer,!0)}async addFileToGitignore(r,i){let n=this.gitManager.getRelativeRepoPath(r,!0),s=nA({isFolder:i,gitRelativePath:n});await this.app.vault.adapter.append(this.gitManager.getRelativeVaultPath(".gitignore"),` +`+s),this.app.workspace.trigger("obsidian-git:refresh")}handleFileMenu(r,i,n,s){if(!this.gitReady||!this.settings.showFileMenu||!i)return;let a;if(typeof i=="string"?a=i:a=i.path,n=="file-explorer-context-menu"&&(r.addItem(o=>{o.setTitle("Git: Stage").setIcon("plus-circle").setSection("action").onClick(l=>{this.promiseQueue.addTask(async()=>{i instanceof be.TFile?await this.stageFile(i):(await this.gitManager.stageAll({dir:this.gitManager.getRelativeRepoPath(a,!0)}),this.app.workspace.trigger("obsidian-git:refresh"))})})}),r.addItem(o=>{o.setTitle("Git: Unstage").setIcon("minus-circle").setSection("action").onClick(l=>{this.promiseQueue.addTask(async()=>{i instanceof be.TFile?await this.unstageFile(i):(await this.gitManager.unstageAll({dir:this.gitManager.getRelativeRepoPath(a,!0)}),this.app.workspace.trigger("obsidian-git:refresh"))})})}),r.addItem(o=>{o.setTitle("Git: Add to .gitignore").setIcon("file-x").setSection("action").onClick(l=>{this.addFileToGitignore(a,i instanceof be.TFolder).catch(c=>this.displayError(c))})})),n=="git-source-control"){r.addItem(l=>{l.setTitle("Git: Add to .gitignore").setIcon("file-x").setSection("action").onClick(c=>{this.addFileToGitignore(a,i instanceof be.TFolder).catch(u=>this.displayError(u))})});let o=this.app.vault.adapter;s==="obsidian-git:menu"&&o instanceof be.FileSystemAdapter&&(r.addItem(l=>{l.setTitle("Open in default app").setIcon("arrow-up-right").setSection("action").onClick(c=>{this.app.openWithDefaultApp(a)})}),r.addItem(l=>{l.setTitle("Show in system explorer").setIcon("arrow-up-right").setSection("action").onClick(c=>{window.electron.shell.showItemInFolder(J$.join(o.getBasePath(),a))})}))}}async migrateSettings(){this.settings.mergeOnPull!=null&&(this.settings.syncMethod=this.settings.mergeOnPull?"merge":"rebase",this.settings.mergeOnPull=void 0,await this.saveSettings()),this.settings.autoCommitMessage===void 0&&(this.settings.autoCommitMessage=this.settings.commitMessage,await this.saveSettings()),this.settings.gitPath!=null&&(this.localStorage.setGitPath(this.settings.gitPath),this.settings.gitPath=void 0,await this.saveSettings()),this.settings.username!=null&&(this.localStorage.setPassword(this.settings.username),this.settings.username=void 0,await this.saveSettings())}unloadPlugin(){var r,i;this.gitReady=!1,this.editorIntegration.onUnloadPlugin(),this.automaticsManager.unload(),(r=this.branchBar)==null||r.remove(),(i=this.statusBar)==null||i.remove(),this.statusBar=void 0,this.branchBar=void 0,this.gitManager.unload(),this.promiseQueue.clear();for(let n of this.intervalsToClear)window.clearInterval(n);this.intervalsToClear=[],this.debRefresh.cancel()}onunload(){this.unloadPlugin(),console.log("unloading "+this.manifest.name+" plugin")}async loadSettings(){let r=await this.loadData();r==null&&(r={showedMobileNotice:!0}),this.settings=Rk(ht,r)}async saveSettings(){var r;(r=this.settingsTab)==null||r.beforeSaveSettings(),await this.saveData(this.settings)}get useSimpleGit(){return be.Platform.isDesktopApp}async init({fromReload:r=!1}){var i;if(this.settings.showStatusBar&&!this.statusBar){let n=this.addStatusBarItem();this.statusBar=new fh(n,this),this.intervalsToClear.push(window.setInterval(()=>{var s;return(s=this.statusBar)==null?void 0:s.display()},1e3))}try{this.useSimpleGit?(this.gitManager=new Se(this),await this.gitManager.setGitInstance()):this.gitManager=new Vi(this);let n=await this.gitManager.checkRequirements(),s=this.localStorage.getPausedAutomatics();switch(n){case"missing-git":this.displayError(`Cannot run git command. Trying to run: '${this.localStorage.getGitPath()||"git"}' .`);break;case"missing-repo":new be.Notice("Can't find a valid git repository. Please create one via the given command or clone an existing repo.",1e4);break;case"valid":if(this.gitReady=!0,this.setPluginState({gitAction:0}),be.Platform.isDesktop&&this.settings.showBranchStatusBar&&!this.branchBar){let a=this.addStatusBarItem();this.branchBar=new kp(a,this),this.intervalsToClear.push(window.setInterval(()=>{var o;return void((o=this.branchBar)==null?void 0:o.display().catch(console.error))},6e4))}await((i=this.branchBar)==null?void 0:i.display()),this.editorIntegration.onReady(),this.app.workspace.trigger("obsidian-git:refresh"),this.app.workspace.trigger("obsidian-git:head-change"),!r&&this.settings.autoPullOnBoot&&!s&&this.promiseQueue.addTask(()=>this.pullChangesFromRemote()),s||await this.automaticsManager.init(),s&&new be.Notice("Automatic routines are currently paused.");break;default:this.log("Something weird happened. The 'checkRequirements' result is "+n)}}catch(n){this.displayError(n),console.error(n)}}async createNewRepo(){try{await this.gitManager.init(),new be.Notice("Initialized new repo"),await this.init({fromReload:!0})}catch(r){this.displayError(r)}}async cloneNewRepo(){let i=await new et(this,{placeholder:"Enter remote URL"}).openAndGetResult();if(i){let n="Vault Root",s=await new et(this,{options:this.gitManager instanceof Vi?[n]:[],placeholder:"Enter directory for clone. It needs to be empty or not existent.",allowEmpty:this.gitManager instanceof Vi}).openAndGetResult();if(s==null)return;if(s===n&&(s="."),s=(0,be.normalizePath)(s),s==="/"&&(s="."),s==="."){let f=await new et(this,{options:["NO","YES"],placeholder:`Does your remote repo contain a ${this.app.vault.configDir} directory at the root?`,onlySelection:!0}).openAndGetResult();if(f===void 0){new be.Notice("Aborted clone");return}else if(f==="YES"){let d="DELETE ALL YOUR LOCAL CONFIG AND PLUGINS";if(await new et(this,{options:["Abort clone",d],placeholder:`To avoid conflicts, the local ${this.app.vault.configDir} directory needs to be deleted.`,onlySelection:!0}).openAndGetResult()===d)await this.app.vault.adapter.rmdir(this.app.vault.configDir,!0);else{new be.Notice("Aborted clone");return}}}let a=await new et(this,{placeholder:"Specify depth of clone. Leave empty for full clone.",allowEmpty:!0}).openAndGetResult(),o;if(a===void 0){new be.Notice("Aborted clone");return}if(a!==""&&(o=parseInt(a),isNaN(o))){new be.Notice("Invalid depth. Aborting clone.");return}new be.Notice(`Cloning new repo into "${s}"`);let l=this.settings.basePath,c=s&&s!==".";c&&(this.settings.basePath=s);try{await this.gitManager.clone(sv(i),s,o),new be.Notice("Cloned new repo."),new be.Notice("Please restart Obsidian"),c&&await this.saveSettings()}catch(u){this.displayError(u),this.settings.basePath=l,await this.saveSettings()}}}async isAllInitialized(){return this.gitReady||await this.init({fromReload:!0}),this.gitReady}async pullChangesFromRemote(){if(!await this.isAllInitialized())return;let r=await this.pull();if(r!==!1){if(r||this.displayMessage("Pull: Everything is up-to-date"),this.gitManager instanceof Se){let i=await this.updateCachedStatus();i.conflicted.length>0&&(this.displayError(`You have conflicts in ${i.conflicted.length} ${i.conflicted.length==1?"file":"files"}`),await this.handleConflict(i.conflicted))}this.app.workspace.trigger("obsidian-git:refresh"),this.setPluginState({gitAction:0})}}async commitAndSync({fromAutoBackup:r,requestCustomMessage:i=!1,commitMessage:n,onlyStaged:s=!1}){!await this.isAllInitialized()||(this.settings.syncMethod=="reset"&&this.settings.pullBeforePush&&await this.pull(),!await this.commit({fromAuto:r,requestCustomMessage:i,commitMessage:n,onlyStaged:s}))||(this.settings.syncMethod!="reset"&&this.settings.pullBeforePush&&await this.pull(),this.settings.disablePush||(await this.remotesAreSet()&&await this.gitManager.canPush()?await this.push():this.displayMessage("No commits to push")),this.setPluginState({gitAction:0}))}async commit({fromAuto:r,requestCustomMessage:i=!1,onlyStaged:n=!1,commitMessage:s,amend:a=!1}){if(!await this.isAllInitialized())return!1;try{let o=this.localStorage.getConflict(),l,c=[],u=[];if(this.gitManager instanceof Se){if(await this.mayDeleteConflictFile(),l=await this.updateCachedStatus(),l.conflicted.length==0&&(o=!1),r&&l.conflicted.length>0)return this.displayError(`Did not commit, because you have conflicts in ${l.conflicted.length} ${l.conflicted.length==1?"file":"files"}. Please resolve them and commit per command.`),await this.handleConflict(l.conflicted),!1;c=l.staged,u=l.changed}else{if(r&&o)return this.displayError("Did not commit, because you have conflicts. Please resolve them and commit per command."),!1;{o&&await this.mayDeleteConflictFile();let f=this.gitManager;n?c=await f.getStagedFiles():u=(await f.getUnstagedFiles()).map(({path:h,type:p})=>({vaultPath:this.gitManager.getRelativeVaultPath(h),path:h,type:p}))}}if(await this.tools.hasTooBigFiles(n?c:[...c,...u]))return this.setPluginState({gitAction:0}),!1;if(u.length+c.length!==0||o){let f=s!=null?s:s=r?this.settings.autoCommitMessage:this.settings.commitMessage;if(r&&this.settings.customMessageOnAutoBackup||i){!this.settings.disablePopups&&r&&new be.Notice("Auto backup: Please enter a custom commit message. Leave empty to abort");let p=await new dh(this).openAndGetResult();if(p!=null&&p!=""&&p!="...")f=p;else return this.setPluginState({gitAction:0}),!1}else if(this.gitManager instanceof Se&&this.settings.commitMessageScript){let p=this.settings.commitMessageScript,g=this.localStorage.getHostname()||"",v=p.replace("{{hostname}}",g);v=v.replace("{{date}}",(0,be.moment)().format(this.settings.commitDateFormat));let _="sh";if(be.Platform.isWin){_=process.env.PROGRAMFILES+"\\Git\\bin\\sh.exe";let S=!1;try{await Op.access(_,Op.constants.X_OK),S=!0}catch(k){S=!1}if(!S)return this.displayError(`Cannot find sh.exe at ${_}. Please make sure Git is properly installed.`),!1}let b=await fu(_,["-c",v],{cwd:this.gitManager.absoluteRepoPath});b.code!=0?this.displayError(b.stderr):b.stdout.trim().length==0?this.displayMessage("Stdout from commit message script is empty. Using default message."):f=b.stdout}if(!f||f.trim()==="")return new be.Notice("Commit aborted: No commit message provided"),this.setPluginState({gitAction:0}),!1;let d;n?d=await this.gitManager.commit({message:f,amend:a}):d=await this.gitManager.commitAll({message:f,status:l,unstagedFiles:u,amend:a}),this.gitManager instanceof Se&&await this.updateCachedStatus();let h=!1;d===void 0&&(h=!0,d=u.length+c.length||0),this.displayMessage(`Committed${h?" approx.":""} ${d} ${d==1?"file":"files"}`)}else this.displayMessage("No changes to commit");return this.app.workspace.trigger("obsidian-git:refresh"),!0}catch(o){return this.displayError(o),!1}}async push(){if(!await this.isAllInitialized()||!await this.remotesAreSet())return!1;let r=this.localStorage.getConflict();try{this.gitManager instanceof Se&&await this.mayDeleteConflictFile();let i;if(this.gitManager instanceof Se&&(i=await this.updateCachedStatus()).conflicted.length>0)return this.displayError(`Cannot push. You have conflicts in ${i.conflicted.length} ${i.conflicted.length==1?"file":"files"}`),await this.handleConflict(i.conflicted),!1;if(this.gitManager instanceof Vi&&r)return this.displayError("Cannot push. You have conflicts"),!1;this.log("Pushing....");let n=await this.gitManager.push();return n!==void 0&&(n===null?this.displayMessage("Pushed to remote"):n>0?this.displayMessage(`Pushed ${n} ${n==1?"file":"files"} to remote`):this.displayMessage("No commits to push")),this.setPluginState({offlineMode:!1}),this.app.workspace.trigger("obsidian-git:refresh"),!0}catch(i){return i instanceof al?this.handleNoNetworkError(i):this.displayError(i),!1}}async pull(){if(!await this.remotesAreSet())return!1;try{this.log("Pulling....");let r=await this.gitManager.pull()||[];return this.setPluginState({offlineMode:!1}),r.length>0&&(this.displayMessage(`Pulled ${r.length} ${r.length==1?"file":"files"} from remote`),this.lastPulledFiles=r),r.length}catch(r){return this.displayError(r),!1}}async fetch(){if(await this.remotesAreSet())try{await this.gitManager.fetch(),this.displayMessage("Fetched from remote"),this.setPluginState({offlineMode:!1}),this.app.workspace.trigger("obsidian-git:refresh")}catch(r){this.displayError(r)}}async mayDeleteConflictFile(){let r=this.app.vault.getAbstractFileByPath(il);r&&(this.app.workspace.iterateAllLeaves(i=>{var n;i.view instanceof be.MarkdownView&&((n=i.view.file)==null?void 0:n.path)==r.path&&i.detach()}),await this.app.vault.delete(r))}async stageFile(r){return await this.isAllInitialized()?(await this.gitManager.stage(r.path,!0),this.app.workspace.trigger("obsidian-git:refresh"),this.setPluginState({gitAction:0}),!0):!1}async unstageFile(r){return await this.isAllInitialized()?(await this.gitManager.unstage(r.path,!0),this.app.workspace.trigger("obsidian-git:refresh"),this.setPluginState({gitAction:0}),!0):!1}async switchBranch(){var n;if(!await this.isAllInitialized())return;let r=await this.gitManager.branchInfo(),i=await new Ep(this,r.branches).openAndGetReslt();if(i!=null)return await this.gitManager.checkout(i),this.displayMessage(`Switched to ${i}`),this.app.workspace.trigger("obsidian-git:refresh"),await((n=this.branchBar)==null?void 0:n.display()),i}async switchRemoteBranch(){var s;if(!await this.isAllInitialized())return;let r=await this.selectRemoteBranch()||"",[i,n]=Qn(r);if(n!=null&&i!=null)return await this.gitManager.checkout(n,i),this.displayMessage(`Switched to ${r}`),await((s=this.branchBar)==null?void 0:s.display()),r}async createBranch(){var i;if(!await this.isAllInitialized())return;let r=await new et(this,{placeholder:"Create new branch"}).openAndGetResult();if(r!=null)return await this.gitManager.createBranch(r),this.displayMessage(`Created new branch ${r}`),await((i=this.branchBar)==null?void 0:i.display()),r}async deleteBranch(){var n;if(!await this.isAllInitialized())return;let r=await this.gitManager.branchInfo();r.current&&r.branches.remove(r.current);let i=await new et(this,{options:r.branches,placeholder:"Delete branch",onlySelection:!0}).openAndGetResult();if(i!=null){let s=!1;if(!await this.gitManager.branchIsMerged(i)){let o=await new et(this,{options:["YES","NO"],placeholder:"This branch isn't merged into HEAD. Force delete?",onlySelection:!0}).openAndGetResult();if(o!=="YES")return;s=o==="YES"}return await this.gitManager.deleteBranch(i,s),this.displayMessage(`Deleted branch ${i}`),await((n=this.branchBar)==null?void 0:n.display()),i}}async remotesAreSet(){return this.settings.updateSubmodules||this.gitManager instanceof Se&&await this.gitManager.getConfig("push.autoSetupRemote","all")=="true"||(await this.gitManager.branchInfo()).tracking?!0:(new be.Notice("No upstream branch is set. Please select one."),await this.setUpstreamBranch())}async setUpstreamBranch(){let r=await this.selectRemoteBranch();return r==null?(this.displayError("Aborted. No upstream-branch is set!",1e4),this.setPluginState({gitAction:0}),!1):(await this.gitManager.updateUpstreamBranch(r),this.displayMessage(`Set upstream branch to ${r}`),this.setPluginState({gitAction:0}),!0)}async discardAll(r){if(!await this.isAllInitialized())return!1;let i=await this.gitManager.status({path:r}),n=0,s=0;for(let o of i.changed)o.workingDir=="U"?n++:s++;if(n+s==0)return!1;let a=await new oc({app:this.app,filesToDeleteCount:n,filesToDiscardCount:s,path:r!=null?r:""}).openAndGetResult();switch(a){case!1:return a;case"discard":await this.gitManager.discardAll({dir:r,status:this.cachedStatus});break;case"delete":{await this.gitManager.discardAll({dir:r,status:this.cachedStatus});let o=await this.gitManager.getUntrackedPaths({path:r,status:this.cachedStatus});for(let l of o){let c=this.gitManager.getRelativeVaultPath(l),u=this.app.vault.getAbstractFileByPath(c);u?await this.app.fileManager.trashFile(u):l.endsWith("/")?await this.app.vault.adapter.rmdir(c,!0):await this.app.vault.adapter.remove(c)}break}default:Td(a)}return this.app.workspace.trigger("obsidian-git:refresh"),a}async handleConflict(r){this.localStorage.setConflict(!0);let i;r!==void 0&&(i=["# Conflicts","Please resolve them and commit them using the commands `Git: Commit all changes` followed by `Git: Push`","(This file will automatically be deleted before commit)","[[#Additional Instructions]] available below file list","",...r.map(n=>{let s=this.app.vault.getAbstractFileByPath(n);return s instanceof be.TFile?`- [[${this.app.metadataCache.fileToLinktext(s,"/")}]]`:`- Not a file: ${n}`}),` +# Additional Instructions +I strongly recommend to use "Source mode" for viewing the conflicted files. For simple conflicts, in each file listed above replace every occurrence of the following text blocks with the desired text. + +\`\`\`diff +<<<<<<< HEAD + File changes in local repository +======= + File changes in remote repository +>>>>>>> origin/main +\`\`\``]),await this.tools.writeAndOpenFile(i==null?void 0:i.join(` +`))}async editRemotes(){if(!await this.isAllInitialized())return;let r=await this.gitManager.getRemotes(),n=await new et(this,{options:r,placeholder:"Select or create a new remote by typing its name and selecting it"}).openAndGetResult();if(n){let s=await this.gitManager.getRemoteUrl(n),o=await new et(this,{initialValue:s,placeholder:"Enter remote URL"}).openAndGetResult();if(o)return await this.gitManager.setRemote(n,sv(o)),n}}async selectRemoteBranch(){let r=await this.gitManager.getRemotes(),i;r.length===0&&(i=await this.editRemotes(),i==null&&(r=await this.gitManager.getRemotes()));let n=new et(this,{options:r,placeholder:"Select or create a new remote by typing its name and selecting it"}),s=i!=null?i:await n.openAndGetResult();if(s){this.displayMessage("Fetching remote branches"),await this.gitManager.fetch(s);let a=await this.gitManager.getRemoteBranches(s),l=await new et(this,{options:a,placeholder:"Select or create a new remote branch by typing its name and selecting it"}).openAndGetResult();return l==null?void 0:l.startsWith(s+"/")?l:`${s}/${l}`}}async removeRemote(){if(!await this.isAllInitialized())return;let r=await this.gitManager.getRemotes(),n=await new et(this,{options:r,placeholder:"Select a remote"}).openAndGetResult();n&&await this.gitManager.removeRemote(n)}onActiveLeafChange(r){var a,o;let i=r==null?void 0:r.view;if(!(i!=null&&i.getState().file)&&!(i instanceof La||i instanceof Na))return;let n=this.app.workspace.getLeavesOfType(Kt.type).first(),s=this.app.workspace.getLeavesOfType(bi.type).first();if((a=n==null?void 0:n.view.containerEl.querySelector("div.tree-item-self.is-active"))==null||a.removeClass("is-active"),(o=s==null?void 0:s.view.containerEl.querySelector("div.tree-item-self.is-active"))==null||o.removeClass("is-active"),(r==null?void 0:r.view)instanceof La||(r==null?void 0:r.view)instanceof Na){let c=r.view.state.bFile.replace(/["\\]/g,"\\$&");this.lastDiffViewState=r.view.getState();let u;n&&r.view.state.aRef=="HEAD"?u=n.view.containerEl.querySelector(`div.staged div.tree-item-self[data-path="${c}"]`):n&&r.view.state.aRef==""?u=n.view.containerEl.querySelector(`div.changes div.tree-item-self[data-path="${c}"]`):s&&(u=s.view.containerEl.querySelector(`div.tree-item-self[data-path='${c}']`)),u==null||u.addClass("is-active")}else this.lastDiffViewState=void 0}handleNoNetworkError(r){this.state.offlineMode?this.log("Encountered network error, but already in offline mode"):this.displayError("Git: Going into offline mode. Future network errors will no longer be displayed.",2e3),this.setPluginState({gitAction:0,offlineMode:!0})}displayMessage(r,i=4*1e3){var n;(n=this.statusBar)==null||n.displayMessage(r.toLowerCase(),i),this.settings.disablePopups||(!this.settings.disablePopupsForNoChanges||!r.startsWith("No changes"))&&new be.Notice(r,5*1e3),this.log(r)}displayError(r,i=10*1e3){var s;if(r instanceof Q$.Errors.UserCanceledError){new be.Notice("Aborted");return}let n;r instanceof Error?n=r:n=new Error(String(r)),this.setPluginState({gitAction:0}),this.settings.showErrorNotices&&new be.Notice(n.message,i),console.error(`${this.manifest.id}:`,n.stack),(s=this.statusBar)==null||s.displayMessage(n.message.toLowerCase(),i)}log(...r){console.log(`${this.manifest.id}:`,...r)}}; +/*! Bundled license information: + +ieee754/index.js: + (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh *) + +buffer/index.js: + (*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + *) + +safe-buffer/index.js: + (*! safe-buffer. MIT License. Feross Aboukhadijeh *) + +crc-32/crc32.js: + (*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com *) + +isomorphic-git/index.cjs: + (*! + * This code for `path.join` is directly copied from @zenfs/core/path for bundle size improvements. + * SPDX-License-Identifier: LGPL-3.0-or-later + * Copyright (c) James Prevett and other ZenFS contributors. + *) + +js-sha256/src/sha256.js: + (** + * [js-sha256]{@link https://github.com/emn178/js-sha256} + * + * @version 0.9.0 + * @author Chen, Yi-Cyuan [emn178@gmail.com] + * @copyright Chen, Yi-Cyuan 2014-2017 + * @license MIT + *) +*/ + +/* nosourcemap */ \ No newline at end of file diff --git a/PaperBell/.obsidian/plugins/obsidian-git/manifest.json b/PaperBell/.obsidian/plugins/obsidian-git/manifest.json new file mode 100644 index 00000000..4030cb56 --- /dev/null +++ b/PaperBell/.obsidian/plugins/obsidian-git/manifest.json @@ -0,0 +1,10 @@ +{ + "author": "Vinzent", + "authorUrl": "https://github.com/Vinzent03", + "id": "obsidian-git", + "name": "Git", + "description": "Integrate Git version control with automatic backup and other advanced features.", + "isDesktopOnly": false, + "fundingUrl": "https://ko-fi.com/vinzent", + "version": "2.38.3" +} diff --git a/PaperBell/.obsidian/plugins/obsidian-git/styles.css b/PaperBell/.obsidian/plugins/obsidian-git/styles.css new file mode 100644 index 00000000..7dee885c --- /dev/null +++ b/PaperBell/.obsidian/plugins/obsidian-git/styles.css @@ -0,0 +1,705 @@ +@keyframes loading { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +.workspace-leaf-content[data-type="git-view"] .button-border { + border: 2px solid var(--interactive-accent); + border-radius: var(--radius-s); +} + +.workspace-leaf-content[data-type="git-view"] .view-content { + padding-left: 0; + padding-top: 0; + padding-right: 0; +} + +.workspace-leaf-content[data-type="git-history-view"] .view-content { + padding-left: 0; + padding-top: 0; + padding-right: 0; +} + +.loading { + overflow: hidden; +} + +.loading > svg { + animation: 2s linear infinite loading; + transform-origin: 50% 50%; + display: inline-block; +} + +.obsidian-git-center { + margin: auto; + text-align: center; + width: 50%; +} + +.obsidian-git-textarea { + display: block; + margin-left: auto; + margin-right: auto; +} + +.obsidian-git-disabled { + opacity: 0.5; +} + +.obsidian-git-center-button { + display: block; + margin: 20px auto; +} + +.tooltip.mod-left { + overflow-wrap: break-word; +} + +.tooltip.mod-right { + overflow-wrap: break-word; +} + +/* Limits the scrollbar to the view body */ +.git-view { + display: flex; + flex-direction: column; + position: relative; + height: 100%; +} + +/* Re-enable wrapping of nav buttns to prevent overflow on smaller screens #*/ +.workspace-drawer .git-view .nav-buttons-container { + flex-wrap: wrap; +} + +.git-tools { + display: flex; + margin-left: auto; +} +.git-tools .type { + padding-left: var(--size-2-1); + display: flex; + align-items: center; + justify-content: center; + width: 11px; +} + +.git-tools .type[data-type="M"] { + color: orange; +} +.git-tools .type[data-type="D"] { + color: red; +} +.git-tools .buttons { + display: flex; +} +.git-tools .buttons > * { + padding: 0; + height: auto; +} + +.workspace-leaf-content[data-type="git-view"] .tree-item-self, +.workspace-leaf-content[data-type="git-history-view"] .tree-item-self { + align-items: center; +} + +.workspace-leaf-content[data-type="git-view"] + .tree-item-self:hover + .clickable-icon, +.workspace-leaf-content[data-type="git-history-view"] + .tree-item-self:hover + .clickable-icon { + color: var(--icon-color-hover); +} + +/* Highlight an item as active if it's diff is currently opened */ +.is-active .git-tools .buttons > * { + color: var(--nav-item-color-active); +} + +.git-author { + color: var(--text-accent); +} + +.git-date { + color: var(--text-accent); +} + +.git-ref { + color: var(--text-accent); +} + +/* ====== diff2html ====== +The following styles are adapted from the obsidian-version-history plugin by +@kometenstaub https://github.com/kometenstaub/obsidian-version-history-diff/blob/main/src/styles.scss +which itself is adapted from the diff2html library with the following original license: + + https://github.com/rtfpessoa/diff2html/blob/master/LICENSE.md + + Copyright 2014-2016 Rodrigo Fernandes https://rtfpessoa.github.io/ + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +.theme-dark, +.theme-light { + --git-delete-bg: #ff475040; + --git-delete-hl: #96050a75; + --git-insert-bg: #68d36840; + --git-insert-hl: #23c02350; + --git-change-bg: #ffd55840; + --git-selected: #3572b0; + + --git-delete: #cc3333; + --git-insert: #399839; + --git-change: #d0b44c; + --git-move: #3572b0; +} + +.git-diff { + .d2h-d-none { + display: none; + } + .d2h-wrapper { + text-align: left; + border-radius: 0.25em; + overflow: auto; + } + .d2h-file-header.d2h-file-header { + background-color: var(--background-secondary); + border-bottom: 1px solid var(--background-modifier-border); + font-family: + Source Sans Pro, + Helvetica Neue, + Helvetica, + Arial, + sans-serif; + height: 35px; + padding: 5px 10px; + } + .d2h-file-header, + .d2h-file-stats { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + } + .d2h-file-header { + display: none; + } + .d2h-file-stats { + font-size: 14px; + margin-left: auto; + } + .d2h-lines-added { + border: 1px solid var(--color-green); + border-radius: 5px 0 0 5px; + color: var(--color-green); + padding: 2px; + text-align: right; + vertical-align: middle; + } + .d2h-lines-deleted { + border: 1px solid var(--color-red); + border-radius: 0 5px 5px 0; + color: var(--color-red); + margin-left: 1px; + padding: 2px; + text-align: left; + vertical-align: middle; + } + .d2h-file-name-wrapper { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + font-size: 15px; + width: 100%; + } + .d2h-file-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: var(--text-normal); + font-size: var(--h5-size); + } + .d2h-file-wrapper { + border: 1px solid var(--background-secondary-alt); + border-radius: 3px; + margin-bottom: 1em; + max-height: 100%; + } + .d2h-file-collapse { + -webkit-box-pack: end; + -ms-flex-pack: end; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + border: 1px solid var(--background-secondary-alt); + border-radius: 3px; + cursor: pointer; + display: none; + font-size: 12px; + justify-content: flex-end; + padding: 4px 8px; + } + .d2h-file-collapse.d2h-selected { + background-color: var(--git-selected); + } + .d2h-file-collapse-input { + margin: 0 4px 0 0; + } + .d2h-diff-table { + border-collapse: collapse; + font-family: var(--font-monospace); + font-size: var(--code-size); + width: 100%; + } + .d2h-files-diff { + width: 100%; + } + .d2h-file-diff { + /* + overflow-y: scroll; + */ + border-radius: 5px; + font-size: var(--font-text-size); + line-height: var(--line-height-normal); + } + .d2h-file-side-diff { + display: inline-block; + margin-bottom: -8px; + margin-right: -4px; + overflow-x: scroll; + overflow-y: hidden; + width: 50%; + } + .d2h-code-line { + padding-left: 6em; + padding-right: 1.5em; + } + .d2h-code-line, + .d2h-code-side-line { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + white-space: nowrap; + width: 100%; + } + .d2h-code-side-line { + /* needed to be changed */ + padding-left: 0.5em; + padding-right: 0.5em; + } + .d2h-code-line-ctn { + word-wrap: normal; + background: none; + display: inline-block; + padding: 0; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; + vertical-align: middle; + width: 100%; + /* only works for line-by-line */ + white-space: pre-wrap; + } + .d2h-code-line del, + .d2h-code-side-line del { + background-color: var(--git-delete-hl); + color: var(--text-normal); + } + .d2h-code-line del, + .d2h-code-line ins, + .d2h-code-side-line del, + .d2h-code-side-line ins { + border-radius: 0.2em; + display: inline-block; + margin-top: -1px; + text-decoration: none; + vertical-align: middle; + } + .d2h-code-line ins, + .d2h-code-side-line ins { + background-color: var(--git-insert-hl); + text-align: left; + } + .d2h-code-line-prefix { + word-wrap: normal; + background: none; + display: inline; + padding: 0; + white-space: pre; + } + .line-num1 { + float: left; + } + .line-num1, + .line-num2 { + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + /* + padding: 0 0.5em; + */ + text-overflow: ellipsis; + width: 2.5em; + padding-left: 0; + } + .line-num2 { + float: right; + } + .d2h-code-linenumber { + background-color: var(--background-primary); + border: solid var(--background-modifier-border); + border-width: 0 1px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: var(--text-faint); + cursor: pointer; + display: inline-block; + position: absolute; + text-align: right; + width: 5.5em; + } + .d2h-code-linenumber:after { + content: "\200b"; + } + .d2h-code-side-linenumber { + background-color: var(--background-primary); + border: solid var(--background-modifier-border); + border-width: 0 1px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: var(--text-faint); + cursor: pointer; + overflow: hidden; + padding: 0 0.5em; + text-align: right; + text-overflow: ellipsis; + width: 4em; + /* needed to be changed */ + display: table-cell; + position: relative; + } + .d2h-code-side-linenumber:after { + content: "\200b"; + } + .d2h-code-side-emptyplaceholder, + .d2h-emptyplaceholder { + background-color: var(--background-primary); + border-color: var(--background-modifier-border); + } + .d2h-code-line-prefix, + .d2h-code-linenumber, + .d2h-code-side-linenumber, + .d2h-emptyplaceholder { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + .d2h-code-linenumber, + .d2h-code-side-linenumber { + direction: rtl; + } + .d2h-del { + background-color: var(--git-delete-bg); + border-color: var(--git-delete-hl); + } + .d2h-ins { + background-color: var(--git-insert-bg); + border-color: var(--git-insert-hl); + } + .d2h-info { + background-color: var(--background-primary); + border-color: var(--background-modifier-border); + color: var(--text-faint); + } + .d2h-del, + .d2h-ins, + .d2h-file-diff .d2h-change { + color: var(--text-normal); + } + .d2h-file-diff .d2h-del.d2h-change { + background-color: var(--git-change-bg); + } + .d2h-file-diff .d2h-ins.d2h-change { + background-color: var(--git-insert-bg); + } + .d2h-file-list-wrapper { + a { + text-decoration: none; + cursor: default; + -webkit-user-drag: none; + } + + svg { + display: none; + } + } + .d2h-file-list-header { + text-align: left; + } + .d2h-file-list-title { + display: none; + } + .d2h-file-list-line { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + text-align: left; + } + .d2h-file-list { + } + .d2h-file-list > li { + border-bottom: 1px solid var(--background-modifier-border); + margin: 0; + padding: 5px 10px; + } + .d2h-file-list > li:last-child { + border-bottom: none; + } + .d2h-file-switch { + cursor: pointer; + display: none; + font-size: 10px; + } + .d2h-icon { + fill: currentColor; + margin-right: 10px; + vertical-align: middle; + } + .d2h-deleted { + color: var(--git-delete); + } + .d2h-added { + color: var(--git-insert); + } + .d2h-changed { + color: var(--git-change); + } + .d2h-moved { + color: var(--git-move); + } + .d2h-tag { + background-color: var(--background-secondary); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + font-size: 10px; + margin-left: 5px; + padding: 0 2px; + } + .d2h-deleted-tag { + border: 1px solid var(--git-delete); + } + .d2h-added-tag { + border: 1px solid var(--git-insert); + } + .d2h-changed-tag { + border: 1px solid var(--git-change); + } + .d2h-moved-tag { + border: 1px solid var(--git-move); + } + + /* needed for line-by-line*/ + + .d2h-diff-tbody { + position: relative; + } + + /* My additions */ + .cm-merge-revert { + width: 4em; + } + /* Ensure that merge revert markers are positioned correctly */ + .cm-merge-revert > * { + position: absolute; + background-color: var(--background-secondary); + display: flex; + } +} + +/* ====================== Line Authoring Information ====================== */ + +.cm-gutterElement.obs-git-blame-gutter { + /* Add background color to spacing inbetween and around the gutter for better aesthetics */ + border-width: 0px 2px 0.2px; + border-style: solid; + border-color: var(--background-secondary); + background-color: var(--background-secondary); +} + +.cm-gutterElement.obs-git-blame-gutter > div, +.line-author-settings-preview { + /* delegate text color to settings */ + color: var(--obs-git-gutter-text); + font-family: monospace; + height: 100%; /* ensure, that age-based background color occupies entire parent */ + text-align: right; + padding: 0px 6px; + white-space: pre; /* Keep spaces and do not collapse them. */ +} + +@media (max-width: 800px) { + /* hide git blame gutter not to superpose text */ + .cm-gutterElement.obs-git-blame-gutter { + display: none; + } +} + +.git-unified-diff-view, +.git-split-diff-view .cm-deletedLine .cm-changedText { + background-color: #ee443330; +} + +.git-unified-diff-view, +.git-split-diff-view .cm-insertedLine .cm-changedText { + background-color: #22bb2230; +} + +.git-obscure-prompt[git-is-obscured="true"] #git-show-password:after { + -webkit-mask-image: url('data:image/svg+xml,'); +} + +.git-obscure-prompt[git-is-obscured="false"] #git-show-password:after { + -webkit-mask-image: url('data:image/svg+xml,'); +} + +/* Override styling of Codemirror merge view "collapsed lines" indicator */ +.git-split-diff-view .ͼ2 .cm-collapsedLines { + background: var(--interactive-normal); + border-radius: var(--radius-m); + color: var(--text-accent); + font-size: var(--font-small); + padding: var(--size-4-1) var(--size-4-1); +} +.git-split-diff-view .ͼ2 .cm-collapsedLines:hover { + background: var(--interactive-hover); + color: var(--text-accent-hover); +} + +.git-signs-gutter { + .cm-gutterElement { + display: grid; + + /* Needed to align the sign properly for different line heigts. Such as + * when having a heading or list item. + */ + padding-top: 0 !important; + } +} + +.git-gutter-marker:hover { + border-radius: 2px; +} + +.git-gutter-marker.git-add { + background-color: var(--color-green); + justify-self: center; + height: inherit; + width: 0.2rem; +} + +.git-gutter-marker.git-change { + background-color: var(--color-yellow); + justify-self: center; + height: inherit; + width: 0.2rem; +} + +.git-gutter-marker.git-changedelete { + color: var(--color-yellow); + font-weight: var(--font-bold); + font-size: 1rem; + justify-self: center; + height: inherit; +} + +.git-gutter-marker.git-delete { + background-color: var(--color-red); + height: 0.2rem; + width: 0.8rem; + align-self: end; +} + +.git-gutter-marker.git-topdelete { + background-color: var(--color-red); + height: 0.2rem; + width: 0.8rem; + align-self: start; +} + +div:hover > .git-gutter-marker.git-change { + width: 0.6rem; +} + +div:hover > .git-gutter-marker.git-add { + width: 0.6rem; +} + +div:hover > .git-gutter-marker.git-delete { + height: 0.6rem; +} + +div:hover > .git-gutter-marker.git-topdelete { + height: 0.6rem; +} + +div:hover > .git-gutter-marker.git-changedelete { + font-weight: var(--font-bold); +} + +.git-gutter-marker.staged { + opacity: 0.5; +} + +/* Prevent shifting of the editor when git signs gutter is the only gutter present */ +.cm-gutters.cm-gutters-before:has(> .git-signs-gutter:only-child) { + margin-inline-end: 0; + .git-signs-gutter { + margin-inline-start: -1rem; + } +} + +.git-changes-status-bar-colored { + .git-add { + color: var(--color-green); + } + .git-change { + color: var(--color-yellow); + } + .git-delete { + color: var(--color-red); + } +} + +.git-changes-status-bar .git-add { + margin-right: 0.3em; +} + +.git-changes-status-bar .git-change { + margin-right: 0.3em; +} diff --git a/PaperBell/.obsidian/plugins/paperbell/data.json b/PaperBell/.obsidian/plugins/paperbell/data.json index ada065a9..0f6a879e 100644 --- a/PaperBell/.obsidian/plugins/paperbell/data.json +++ b/PaperBell/.obsidian/plugins/paperbell/data.json @@ -281,10 +281,9 @@ "componentSettings": {} }, "updater": { - "repository": "PaperBell-Org/Obsidian-PaperBell", - "excludePatterns": [ - "**/*.js" - ], + "repository": "PaperBell-Org/longform-maintaining", + "targetPluginId": "longform", + "excludePatterns": [], "autoUpdate": false, "minAppVersion": "4.0.2", "customReplacements": {}, diff --git a/PaperBell/.obsidian/plugins/paperbell/main.js b/PaperBell/.obsidian/plugins/paperbell/main.js index 3edf8e38..c38b24ba 100644 --- a/PaperBell/.obsidian/plugins/paperbell/main.js +++ b/PaperBell/.obsidian/plugins/paperbell/main.js @@ -1,10 +1,10 @@ -"use strict";const _=require("obsidian"),yw=require("crypto");function kw(f,a){for(var r=0;ri[o]})}}}return Object.freeze(Object.defineProperty(f,Symbol.toStringTag,{value:"Module"}))}const Xs=[{agentType:"claude-code",name:"Claude Code",binaryName:"claude",windowsBinaryName:"claude.cmd",commonPaths:{win32:["%APPDATA%\\npm","%LOCALAPPDATA%\\npm","%USERPROFILE%\\.npm-global"],darwin:["/usr/local/bin","/opt/homebrew/bin","~/.npm-global/bin"],linux:["/usr/local/bin","~/.npm-global/bin","~/.local/bin"]}},{agentType:"openai-codex",name:"OpenAI Codex",binaryName:"codex",windowsBinaryName:"codex.cmd",commonPaths:{win32:["%APPDATA%\\npm","%LOCALAPPDATA%\\npm","%USERPROFILE%\\.npm-global"],darwin:["/usr/local/bin","/opt/homebrew/bin","~/.npm-global/bin"],linux:["/usr/local/bin","~/.npm-global/bin","~/.local/bin"]}},{agentType:"gemini-cli",name:"Gemini CLI",binaryName:"gemini",windowsBinaryName:"gemini.cmd",commonPaths:{win32:["%APPDATA%\\npm","%LOCALAPPDATA%\\npm","%USERPROFILE%\\.npm-global"],darwin:["/usr/local/bin","/opt/homebrew/bin","~/.npm-global/bin"],linux:["/usr/local/bin","~/.npm-global/bin","~/.local/bin"]}}],$m={enabled:!1,rules:[],binaryPaths:{},globalMaxConcurrent:2,showNoticeOnTrigger:!0,maxOutputLinesPerRun:5e3,maxHistoryRuns:50},Bm=[{id:"blank",name:"空白规则",description:"从零开始配置自定义规则",rule:{}},{id:"literature-note",name:"文献笔记处理",description:"格式化导入的文献笔记(Zotero 等)",rule:{name:"文献笔记处理",triggerEvents:["create"],promptTemplate:["你是一个学术笔记助手,正在协助管理一个 Obsidian 学术知识库。","Vault 路径: {{vaultPath}}","","一个新的文献笔记被导入:","- 文件: {{filePath}}","- 时间: {{timestamp}}","","请执行以下操作:","1. 读取该文件的完整内容","2. 识别文献元数据(标题、作者、年份、DOI 等)","3. 确保 YAML frontmatter 包含: title, authors, year, tags, type: literature","4. 如果正文中有 Zotero 导出的原始注释/高亮,整理为结构化的阅读笔记:"," - ## 核心论点"," - ## 关键发现"," - ## 方法论"," - ## 与本库的关联","5. 将注释中的学术概念用 [[wikilink]] 格式链接","6. 保留所有原始高亮和注释内容,不要删除任何信息"].join(` +"use strict";const w=require("obsidian"),$i=require("crypto"),pe=[{agentType:"claude-code",name:"Claude Code",binaryName:"claude",windowsBinaryName:"claude.cmd",commonPaths:{win32:["%APPDATA%\\npm","%LOCALAPPDATA%\\npm","%USERPROFILE%\\.npm-global"],darwin:["/usr/local/bin","/opt/homebrew/bin","~/.npm-global/bin"],linux:["/usr/local/bin","~/.npm-global/bin","~/.local/bin"]}},{agentType:"openai-codex",name:"OpenAI Codex",binaryName:"codex",windowsBinaryName:"codex.cmd",commonPaths:{win32:["%APPDATA%\\npm","%LOCALAPPDATA%\\npm","%USERPROFILE%\\.npm-global"],darwin:["/usr/local/bin","/opt/homebrew/bin","~/.npm-global/bin"],linux:["/usr/local/bin","~/.npm-global/bin","~/.local/bin"]}},{agentType:"gemini-cli",name:"Gemini CLI",binaryName:"gemini",windowsBinaryName:"gemini.cmd",commonPaths:{win32:["%APPDATA%\\npm","%LOCALAPPDATA%\\npm","%USERPROFILE%\\.npm-global"],darwin:["/usr/local/bin","/opt/homebrew/bin","~/.npm-global/bin"],linux:["/usr/local/bin","~/.npm-global/bin","~/.local/bin"]}}],gi={enabled:!1,rules:[],binaryPaths:{},globalMaxConcurrent:2,showNoticeOnTrigger:!0,maxOutputLinesPerRun:5e3,maxHistoryRuns:50},mi=[{id:"blank",name:"空白规则",description:"从零开始配置自定义规则",rule:{}},{id:"literature-note",name:"文献笔记处理",description:"格式化导入的文献笔记(Zotero 等)",rule:{name:"文献笔记处理",triggerEvents:["create"],promptTemplate:["你是一个学术笔记助手,正在协助管理一个 Obsidian 学术知识库。","Vault 路径: {{vaultPath}}","","一个新的文献笔记被导入:","- 文件: {{filePath}}","- 时间: {{timestamp}}","","请执行以下操作:","1. 读取该文件的完整内容","2. 识别文献元数据(标题、作者、年份、DOI 等)","3. 确保 YAML frontmatter 包含: title, authors, year, tags, type: literature","4. 如果正文中有 Zotero 导出的原始注释/高亮,整理为结构化的阅读笔记:"," - ## 核心论点"," - ## 关键发现"," - ## 方法论"," - ## 与本库的关联","5. 将注释中的学术概念用 [[wikilink]] 格式链接","6. 保留所有原始高亮和注释内容,不要删除任何信息"].join(` `),debounceMs:3e3}},{id:"inbox-triage",name:"收件箱分类",description:"分析新笔记内容并补充元数据与标签",rule:{name:"收件箱分类",triggerEvents:["create"],promptTemplate:["你是一个学术知识库管理助手。","Vault 路径: {{vaultPath}}","","收件箱中出现了一个新文件:","- 文件: {{filePath}}","- 时间: {{timestamp}}","","请执行以下操作:","1. 读取该文件内容","2. 分析其内容类型(文献笔记、会议记录、想法草稿、项目文档等)","3. 在 YAML frontmatter 中添加合适的 tags 和 type 字段","4. 如果缺少标题,根据内容生成一个简洁准确的标题","5. 确保文档有基本的结构(标题层级、分段)","6. 不要移动或重命名文件,仅更新其内容和元数据"].join(` `),debounceMs:5e3}},{id:"template-format",name:"模板格式化",description:"按标准模板格式化新建笔记",rule:{name:"模板格式化",triggerEvents:["create"],promptTemplate:["你是一个 Obsidian 笔记格式化助手。","Vault 路径: {{vaultPath}}","","一个新笔记被创建:","- 文件: {{filePath}}","- 时间: {{timestamp}}","","请执行以下操作:","1. 读取该文件内容","2. 如果没有 YAML frontmatter,添加基础字段: date, tags, type","3. 确保文档结构清晰: 使用正确的标题层级(# → ## → ###)","4. 如果内容是纯文本,组织为带有小节标题的结构化格式","5. 保留所有原始内容,仅优化格式和结构"].join(` `),debounceMs:3e3}},{id:"research-summary",name:"研究笔记摘要",description:"为更新的研究笔记生成/刷新摘要",rule:{name:"研究笔记摘要",triggerEvents:["modify"],promptTemplate:["你是一个学术研究助手。","Vault 路径: {{vaultPath}}","","以下研究笔记被更新:","- 文件: {{filePath}}","- 时间: {{timestamp}}","","请执行以下操作:","1. 读取该文件的完整内容","2. 在 frontmatter 后(或第一个标题前),更新或创建一个「## 摘要」章节","3. 用 2-3 句话概括核心内容和关键论点","4. 如果文中提到其他文献或概念,确保用 [[wikilink]] 格式链接","5. 不要修改摘要之外的任何内容"].join(` -`),debounceMs:1e4}}];function xw(){return{id:crypto.randomUUID(),enabled:!0,name:"",watchPaths:[],triggerEvents:["create"],agentType:"claude-code",customBinaryPath:"",promptTemplate:["你是一个 Obsidian 学术知识库助手。","Vault 路径: {{vaultPath}}","","文件「{{filePath}}」发生了 {{eventType}} 事件({{timestamp}})。","","请读取该文件内容,根据其类型(文献笔记、项目文档、会议记录等)进行适当处理:","- 确保 YAML frontmatter 完整(date, tags, type 等)","- 优化文档结构和格式","- 用 [[wikilink]] 链接相关概念","- 保留所有原始内容,不要删除信息"].join(` -`),workingDirectory:"",extraArgs:[],debounceMs:2e3,timeoutMs:0,maxConcurrent:1,requireConfirmation:!1,confirmationTimeoutMs:3e4,allowedTools:["Edit","Write","Read"]}}function Sw(f){const a=Bm.find(i=>i.id===f),r=xw();return!a||f==="blank"?r:{...r,...a.rule}}const hi="paperbell-landing-view",Os=["welcome","account","renameRepo","configurePlugins","customizeTheme","complete"],Ew={welcome:"欢迎",account:"账户",renameRepo:"仓库",configurePlugins:"插件",customizeTheme:"主题",complete:"完成"},la={firstLoad:!0,completedSteps:{account:!1,renameRepo:!1,configurePlugins:{"obsidian-pandoc-reference-list":!1,"obsidian-memos":!1,zotlit:!1,soundscapes:!1},customizeTheme:!1}};class Cw extends _.ItemView{constructor(a,r){super(a),this.currentStepIndex=0,this.navigationDirection="forward",this.activePlugin=null,this.authStatus="unknown",this.licenseData=null,this.oauthPollingInterval=null,this.configSections=[{id:"renameRepo",title:"重命名仓库",icon:"folder",steps:[{title:"访问仓库管理",description:"第一步是点击左下角的 PaperBell,第二步是点击管理仓库:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504121548819.png",alt:"管理仓库",caption:"访问仓库管理界面"}]},{title:"重命名仓库",description:"第三步是点击右侧的三个点进入重命名仓库;第四步是选择重命名仓库,需要先关闭当前仓库,然后将其重命名为你想要的名称。(这里重命名为 Test,路径中包含中文字符。但最好避免中文字符和空格)",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504121551378.png",alt:"重命名仓库",caption:"仓库重命名操作"}]},{title:"完成重命名",description:"重命名后,界面如下图所示,再次点击 Test 即可打开。",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504121556959.png",alt:"完成重命名",caption:"重命名完成后的界面"}]},{title:"查看重命名结果",description:"可以看到左下角已经变成了重命名后的名称:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504121559755.png",alt:"左下角名称",caption:"查看左下角显示的仓库名称"}]}]},{id:"configurePlugins",title:"插件配置",icon:"settings",steps:[{title:"文件夹介绍",description:"在正式介绍各个插件之前,先介绍左侧文件夹的含义及其对应的功能。您可以修改文件夹名称,但也需要相应地修改插件中的文件夹名称。因此,首次使用时,通常不建议轻易修改。熟悉插件和功能后,可以随意修改。",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504121633442.png",alt:"文件夹介绍",caption:"文件夹结构和功能"}]}],plugins:[{id:"obsidian-pandoc-reference-list",title:"Pandoc Reference List",icon:"file-text",description:"这个插件主要用于在 Obsidian 中显示当前文档的参考文献列表,需要配置 Pandoc 路径和参考文献文件。",steps:[{title:"Pandoc 路径设置",description:"设置 Pandoc 路径,注意这是 Pandoc.exe 的位置,下载和安装时请记住这个位置:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/8b79442eea370008bc170e60ef436e1.png",alt:"Pandoc 设置",caption:"Pandoc 路径配置"}]},{title:"Zotero 导出",description:"Bib 文件(红框中的第二行)主要从 Zotero 导出。首先,在 Zotero 中选择要导出的条目,右键点击,然后导出:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122011623.png",alt:"Zotero 导出",caption:"从 Zotero 导出参考文献"}]},{title:"导出设置",description:"勾选 export notes、keepUpdated 和 worker:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122012672.png",alt:"导出设置",caption:"Zotero 导出设置选项"}]},{title:"导出路径",description:"设置导出路径,最好导入到 Obsidian 以便更好地多设备同步。如果导出到其他位置,请务必记住导出位置。名称可以更改,但最好使用英文且不包含空格。",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122013032.png",alt:"导出路径",caption:"设置参考文献导出路径"}]},{title:"Better BibTeX 设置",description:"特别是下面 Zotero 的 Better BibTeX 中的红框,务必设置正确的路径,应该与上面的路径一致,尽量确保没有空格或中文字符:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122017003.png",alt:"Better BibTeX 设置",caption:"设置 Better BibTeX 路径"}]},{title:"参考文献格式",description:"再次插入参考文献,下面是正确的格式:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122015642.png",alt:"参考文献格式",caption:"正确的参考文献格式示例"}]}]},{id:"obsidian-memos",title:"Thino",icon:"pencil",description:"这个插件主要用于在 Obsidian 中记录您的想法,需要进行基本设置。",steps:[{title:"Thino 设置",description:"这个插件主要用于在 Obsidian 中记录您的想法。需要更改的设置主要是下图中三个红框位置,可以根据您的需求自由修改。",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122021763.png",alt:"Thino 设置",caption:"Thino 插件设置界面"}]}]},{id:"zotlit",title:"Zotlit",icon:"book",description:"Zotlit 用于导入 Zotero 文件,需要配置 Zotero 数据位置。",steps:[{title:"Zotlit 设置",description:"Zotlit 用于导入 Zotero 文件。在 connect 中,找到 Zotero 数据位置才能正确使用。",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122025700.png",alt:"Zotlit 设置",caption:"Zotlit 插件设置界面"}]},{title:"查找 Zotero 位置",description:"这取决于您的 Zotero 位置。方法如下:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122028523.png",alt:"Zotero 位置",caption:"查找 Zotero 数据位置的方法"}]}]},{id:"soundscapes",title:"SoundScapes",icon:"headphones",description:"这个插件主要用于在 Obsidian 中播放音乐,需要配置本地音乐文件夹。",steps:[{title:"SoundScapes 设置",description:"这个插件主要用于听音乐。在线音乐需要 VPN,所以对于本地音乐播放,您需要确定您的音乐文件夹位置。只需修改下面框中的文件位置,其他设置可根据需要修改。",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122000444.png",alt:"SoundScapes 设置",caption:"SoundScapes 插件设置界面"}]}]}]},{id:"customizeTheme",title:"主题定制",icon:"brush",steps:[{title:"样式设置",description:"您需要下载 Style Settings 插件进行修改。您可以观看 B 站的详细教程 (https://b23.tv/stTdoOm),里面有详细说明。这里不做任何更改,您可以根据自己的喜好按照教程进行修改。",images:[]}]}],this.plugin=r}getViewType(){return hi}getDisplayText(){return"PaperBell 设置向导"}getIcon(){return"paperclip"}async onOpen(){this.plugin.settings.landing||(this.plugin.settings.landing=la,await this.plugin.saveSettings()),this.plugin.settings.landing.completedSteps.account===void 0&&(this.plugin.settings.landing.completedSteps.account=!1,await this.plugin.saveSettings()),await this.checkAuthStatus(),this.renderView()}async onClose(){this.stopOAuthPolling()}goToStep(a){a<0||a>=Os.length||(this.navigationDirection=a>this.currentStepIndex?"forward":"back",this.activePlugin=null,this.currentStepIndex=a,this.renderView())}goNext(){this.goToStep(this.currentStepIndex+1)}goPrevious(){if(this.activePlugin){this.activePlugin=null,this.renderView();return}this.goToStep(this.currentStepIndex-1)}async checkAuthStatus(){this.authStatus="checking";try{await this.plugin.verificationWorker.verify()?(this.authStatus="authenticated",this.licenseData=this.plugin.verificationWorker.getLicenseData()):(this.authStatus="unauthenticated",this.licenseData=null)}catch{this.authStatus="unauthenticated",this.licenseData=null}}startOAuthPolling(){this.stopOAuthPolling(),this.oauthPollingInterval=window.setInterval(async()=>{await this.checkAuthStatus(),this.authStatus==="authenticated"&&(this.stopOAuthPolling(),this.updateStepCompletion("account",!0),this.renderView())},2e3),window.setTimeout(()=>this.stopOAuthPolling(),300*1e3)}stopOAuthPolling(){this.oauthPollingInterval&&(window.clearInterval(this.oauthPollingInterval),this.oauthPollingInterval=null)}renderView(){const{containerEl:a}=this;a.empty(),a.addClass("paperbell-landing-view");const r=a.createEl("div",{cls:"ppb-wizard-wrapper"});this.renderProgressBar(r);const i=r.createEl("div",{cls:"ppb-wizard-content"}),o=this.navigationDirection==="back"?"ppb-wizard-step-enter-reverse":"ppb-wizard-step-enter",l=i.createEl("div",{cls:o});this.renderStepContent(l),this.renderNavigation(r)}renderProgressBar(a){const r=a.createEl("div",{cls:"ppb-wizard-progress"});Os.forEach((i,o)=>{if(o>0){const u=r.createEl("div",{cls:"ppb-wizard-progress-line"});o<=this.currentStepIndex&&u.addClass("is-completed")}const l=r.createEl("div",{cls:"ppb-wizard-progress-step"}),c=l.createEl("div",{cls:"ppb-wizard-progress-dot"});othis.goToStep(o))),l.createEl("div",{cls:"ppb-wizard-progress-label",text:Ew[i]})})}renderNavigation(a){const r=Os[this.currentStepIndex],i=a.createEl("div",{cls:"ppb-wizard-nav"}),o=i.createEl("div",{cls:"ppb-wizard-nav-left"}),l=i.createEl("div",{cls:"ppb-wizard-nav-right"});if(this.currentStepIndex>0&&r!=="complete"){const c=o.createEl("button",{cls:"ppb-wizard-nav-btn"}),u=c.createEl("span",{cls:"ppb-wizard-nav-icon"});_.setIcon(u,"arrow-left"),c.createEl("span",{text:"上一步"}),this.registerDomEvent(c,"click",()=>this.goPrevious())}if(r==="account"&&this.authStatus!=="authenticated"){const c=l.createEl("button",{cls:"ppb-wizard-nav-btn",text:"稍后再说"});this.registerDomEvent(c,"click",()=>this.goNext())}if(r!=="complete"){const c=r==="welcome"?"开始配置":"下一步",u=l.createEl("button",{cls:"mod-cta ppb-wizard-nav-btn"});u.createEl("span",{text:c});const d=u.createEl("span",{cls:"ppb-wizard-nav-icon"});_.setIcon(d,"arrow-right"),this.registerDomEvent(u,"click",()=>this.goNext())}if(r==="complete"){const c=o.createEl("button",{cls:"ppb-wizard-nav-btn",text:"跳过设置"});this.registerDomEvent(c,"click",()=>this.skipSetup());const u=l.createEl("button",{cls:"mod-cta ppb-wizard-nav-btn",text:"完成并关闭"});this.registerDomEvent(u,"click",()=>this.saveAndClose())}}renderStepContent(a){switch(Os[this.currentStepIndex]){case"welcome":this.renderWelcomeStep(a);break;case"account":this.renderAccountStep(a);break;case"renameRepo":this.renderRenameRepoStep(a);break;case"configurePlugins":this.activePlugin?this.renderPluginDetail(a,this.activePlugin):this.renderPluginConfigStep(a);break;case"customizeTheme":this.renderThemeStep(a);break;case"complete":this.renderCompleteStep(a);break}}renderWelcomeStep(a){const r=a.createEl("div",{cls:"paperbell-welcome-container"}),i=r.createEl("div",{cls:"paperbell-welcome-logo"});_.setIcon(i,"school");const o=r.createEl("div",{cls:"paperbell-welcome-header"});o.createEl("h1",{text:"欢迎使用 PaperBell"}),o.createEl("p",{text:"让我们花几分钟完成初始配置,帮助您打造最佳的学术工作环境。"});const l=r.createEl("div",{cls:"paperbell-welcome-features"});[{icon:"user",title:"账户激活",description:"登录账户,解锁全部功能"},{icon:"settings",title:"插件配置",description:"一站式配置学术工作流所需的插件"},{icon:"brush",title:"个性定制",description:"调整主题和外观,打造专属界面"}].forEach(u=>{const d=l.createEl("div",{cls:"paperbell-welcome-feature"}),h=d.createEl("div",{cls:"paperbell-welcome-feature-icon"});_.setIcon(h,u.icon),d.createEl("h3",{text:u.title}),d.createEl("p",{text:u.description})})}renderAccountStep(a){const r=a.createEl("div",{cls:"ppb-account-container"}),i=r.createEl("div",{cls:"ppb-step-header"}),o=i.createEl("div",{cls:"ppb-step-header-icon"});if(_.setIcon(o,"user-check"),i.createEl("h2",{text:"账户设置"}),i.createEl("p",{text:"登录您的 PaperBell 账户以激活许可证。"}),this.authStatus==="checking"){const d=r.createEl("div",{cls:"ppb-account-checking"}),h=d.createEl("div",{cls:"ppb-account-spinner"});_.setIcon(h,"loader"),d.createEl("p",{text:"正在检查账户状态..."});return}if(this.authStatus==="authenticated"){const d=r.createEl("div",{cls:"ppb-account-success"}),h=d.createEl("div",{cls:"ppb-account-success-icon"});if(_.setIcon(h,"check"),d.createEl("h3",{text:"已成功登录"}),this.licenseData&&(this.licenseData.user_name&&d.createEl("p",{text:`欢迎回来,${this.licenseData.user_name}`,cls:"ppb-account-user-name"}),this.licenseData.expires_at)){const m=new Date(this.licenseData.expires_at);d.createEl("p",{text:`许可证有效期至:${m.toLocaleDateString()}`,cls:"ppb-account-license-info"})}this.updateStepCompletion("account",!0);return}const l=r.createEl("div",{cls:"ppb-account-method"}),c=l.createEl("div",{cls:"ppb-account-method-icon"});_.setIcon(c,"globe"),l.createEl("h3",{text:"浏览器登录"}),l.createEl("p",{text:"通过浏览器安全授权,自动激活您的账户",cls:"ppb-account-method-desc"});const u=l.createEl("button",{cls:"mod-cta ppb-account-login-btn",text:"打开浏览器登录"});this.registerDomEvent(u,"click",async()=>{await this.plugin.startAccountLogin(),u.textContent="等待授权中...",u.disabled=!0,this.startOAuthPolling()})}renderRenameRepoStep(a){const r=this.configSections.find(c=>c.id==="renameRepo");if(!r)return;const i=a.createEl("div",{cls:"ppb-step-header"}),o=i.createEl("div",{cls:"ppb-step-header-icon"});_.setIcon(o,r.icon),i.createEl("h2",{text:r.title}),i.createEl("p",{text:"将仓库重命名为您喜欢的名称,建议使用英文且不包含空格。"});const l=a.createEl("div",{cls:"paperbell-landing-tab-content"});this.renderSteps(l,r.steps),this.createCompletionCheckbox(a,"renameRepo")}renderPluginConfigStep(a){const r=this.configSections.find(b=>b.id==="configurePlugins");if(!r||!r.plugins)return;const i=a.createEl("div",{cls:"ppb-step-header"}),o=i.createEl("div",{cls:"ppb-step-header-icon"});_.setIcon(o,r.icon),i.createEl("h2",{text:r.title}),i.createEl("p",{text:"配置学术工作流中用到的各个插件,按需启用和设置。"});const l=this.getPluginProgress(),c=i.createEl("div",{cls:"paperbell-landing-progress"});c.createEl("span",{cls:"paperbell-landing-progress-text",text:`${l.completed}/${l.total} 已完成`});const d=c.createEl("div",{cls:"paperbell-landing-progress-bar"}).createEl("div",{cls:"paperbell-landing-progress-inner"});d.style.width=`${l.completed/l.total*100}%`;const h=a.createEl("div",{cls:"paperbell-landing-tab-content"});this.renderSteps(h,r.steps);const m=h.createEl("div",{cls:"paperbell-landings-grid"});r.plugins.forEach(b=>{const k=m.createEl("div",{cls:"paperbell-landing-card"}),v=k.createEl("div",{cls:"paperbell-landing-card-icon"});_.setIcon(v,b.icon),k.createEl("h3",{text:b.title}),k.createEl("p",{text:b.description});const y=this.isPluginEnabled(b.id),w=this.isPluginCompleted(b.id);let D="待配置",E="pending";w?(D="已完成",E="completed mod-cta"):y?(D="已启用,待配置",E="enabled"):(D="未启用",E="disabled mod-destructive"),k.createEl("button",{cls:`${E}`,text:D});const T=k.createEl("div",{cls:"paperbell-landing-card-actions"});if(y){const z=T.createEl("button",{cls:"paperbell-landing-card-button settings",text:"打开设置"});this.registerDomEvent(z,"click",()=>{this.openPluginSettings(b.id)})}else if(this.app.plugins.plugins[b.id]){const z=T.createEl("button",{cls:"paperbell-landing-card-button enable",text:"启用"});this.registerDomEvent(z,"click",async()=>{await this.enablePlugin(b.id)&&this.renderView()})}else{const z=T.createEl("button",{cls:"paperbell-landing-card-button enable",text:"下载"});this.registerDomEvent(z,"click",async()=>{window.open(`obsidian://show-plugin?id=${b.id}`)})}const A=T.createEl("button",{cls:"paperbell-landing-card-button config",text:"配置指南"});this.registerDomEvent(A,"click",()=>{this.activePlugin=b.id,this.renderView()})})}renderPluginDetail(a,r){const i=this.configSections.find(w=>w.id==="configurePlugins");if(!i||!i.plugins)return;const o=i.plugins.find(w=>w.id===r);if(!o)return;const l=a.createEl("div",{cls:"paperbell-landing-topbar"}),c=l.createEl("button",{cls:"paperbell-landing-back-button"});_.setIcon(c,"arrow-left"),c.createEl("span",{text:"返回插件列表"}),this.registerDomEvent(c,"click",()=>{this.activePlugin=null,this.renderView()});const u=l.createEl("div",{cls:"paperbell-landing-status-container"}),d=this.isPluginEnabled(r),h=this.isPluginCompleted(r);let m="未启用",b="disabled";h?(m="配置已完成",b="completed mod-cta"):d&&(m="已启用,待配置",b="enabled mod-cta"),d&&u.createEl("button",{cls:`${b}`,text:m});const k=u.createEl("div",{cls:"paperbell-landing-actions"});if(!d&&this.app.plugins.plugins[r]){const w=k.createEl("button",{cls:"paperbell-landing-enable-btn",text:"启用"});this.registerDomEvent(w,"click",async()=>{await this.enablePlugin(r)&&this.renderView()})}else if(!d&&!this.app.plugins.plugins[r]){const w=k.createEl("button",{cls:"paperbell-landing-enable-btn",text:"下载"});this.registerDomEvent(w,"click",async()=>{window.open(`obsidian://show-plugin?id=${r}`)})}this.createPluginCheckbox(u,r,"").classList.add("paperbell-landing-topbar-checkbox");const y=a.createEl("div",{cls:"paperbell-landing-tab-content"});y.createEl("h2",{text:o.title}),y.createEl("p",{cls:"paperbell-landing-description",text:o.description}),this.renderSteps(y,o.steps,r)}renderThemeStep(a){const r=this.configSections.find(c=>c.id==="customizeTheme");if(!r)return;const i=a.createEl("div",{cls:"ppb-step-header"}),o=i.createEl("div",{cls:"ppb-step-header-icon"});_.setIcon(o,r.icon),i.createEl("h2",{text:r.title}),i.createEl("p",{text:"根据您的喜好调整界面外观和主题样式。"});const l=a.createEl("div",{cls:"paperbell-landing-tab-content"});this.renderSteps(l,r.steps),this.createCompletionCheckbox(a,"customizeTheme")}renderCompleteStep(a){const r=a.createEl("div",{cls:"ppb-complete-container"}),i=r.createEl("div",{cls:"ppb-complete-icon"});_.setIcon(i,"check-circle"),r.createEl("h2",{text:"设置完成!"}),r.createEl("p",{text:"以下是您的配置状态总览。您可以随时通过命令面板重新打开此向导。",cls:"ppb-complete-description"});const o=r.createEl("div",{cls:"ppb-complete-checklist"}),l=[{label:"账户激活",done:this.isStepCompleted("account"),detail:this.authStatus==="authenticated"?`已登录${this.licenseData?.user_name?` (${this.licenseData.user_name})`:""}`:"未登录"},{label:"仓库重命名",done:this.isStepCompleted("renameRepo"),detail:this.isStepCompleted("renameRepo")?"已完成":"未完成"},{label:"插件配置",done:this.isStepCompleted("configurePlugins"),detail:`${this.getPluginProgress().completed}/${this.getPluginProgress().total} 已配置`},{label:"主题定制",done:this.isStepCompleted("customizeTheme"),detail:this.isStepCompleted("customizeTheme")?"已完成":"未完成"}];l.forEach(u=>{const d=o.createEl("div",{cls:"ppb-complete-checklist-item"}),h=d.createEl("div",{cls:`ppb-complete-checklist-icon ${u.done?"is-done":"is-pending"}`});_.setIcon(h,u.done?"check-circle":"circle");const m=d.createEl("div",{cls:"ppb-complete-checklist-text"});m.createEl("span",{text:u.label,cls:"ppb-complete-checklist-label"}),m.createEl("span",{text:u.detail,cls:"ppb-complete-checklist-detail"})}),l.every(u=>u.done)||r.createEl("p",{text:"未完成的步骤可以稍后随时通过命令面板中的「显示 PaperBell 设置」来完成。",cls:"ppb-complete-note"})}renderSteps(a,r,i){r.forEach(o=>{const l=a.createEl("div",{cls:"paperbell-landing-step"}),c=l.createEl("div",{cls:"paperbell-landing-step-header"});if(c.createEl("h3",{text:o.title}),i&&this.isPluginEnabled(i)){const d=c.createEl("button",{cls:"paperbell-landing-step-settings-btn",text:"打开设置"});this.registerDomEvent(d,"click",()=>{this.openPluginSettings(i)})}const u=l.createEl("div",{cls:"paperbell-landing-step-description"});if(u.innerHTML=o.description,o.images&&o.images.length>0){const d=l.createEl("button",{cls:"paperbell-landing-toggle-images",text:"显示图片教程"}),h=l.createEl("div",{cls:"paperbell-landing-images-container collapsed"});o.images.forEach(m=>{const b=h.createEl("figure",{cls:"paperbell-landing-figure"});b.createEl("img",{attr:{src:m.src,alt:m.alt}}),m.caption&&b.createEl("figcaption",{text:m.caption})}),this.registerDomEvent(d,"click",()=>{const m=h.classList.contains("collapsed");h.classList.toggle("collapsed",!m),d.textContent=m?"隐藏图片教程":"显示图片教程"})}})}createCompletionCheckbox(a,r){const i=a.createEl("div",{cls:"paperbell-landing-checkbox"}),o=i.createEl("input",{type:"checkbox",attr:{id:`${r}-completed`,...this.isStepCompleted(r)?{checked:!0}:{}}});return i.createEl("label",{text:"我已完成此步骤",attr:{for:`${r}-completed`}}),this.registerDomEvent(o,"change",l=>{const c=l.target;this.updateStepCompletion(r,c.checked)}),i}createPluginCheckbox(a,r,i){const l=this.plugin.settings.landing?.completedSteps?.configurePlugins?.[r]||!1,c=a.createEl("div",{cls:"paperbell-landing-checkbox"}),u=c.createEl("input",{type:"checkbox",attr:{id:`${r}-completed`,...l?{checked:!0}:{}}});return i?c.createEl("label",{text:i,attr:{for:`${r}-completed`}}):c.createEl("label",{text:"配置已完成",attr:{for:`${r}-completed`}}),this.registerDomEvent(u,"change",d=>{const h=d.target;this.updatePluginCompletion(r,h.checked)}),c}isStepCompleted(a){const r=this.plugin.settings;if(!r.landing?.completedSteps)return!1;if(a==="account")return r.landing.completedSteps.account??!1;if(a==="renameRepo")return r.landing.completedSteps.renameRepo;if(a==="configurePlugins"){const i=r.landing.completedSteps.configurePlugins;return i["obsidian-pandoc-reference-list"]&&i["obsidian-memos"]&&i.zotlit&&i.soundscapes}else if(a==="customizeTheme")return r.landing.completedSteps.customizeTheme;return!1}isPluginCompleted(a){const r=this.plugin.settings;return r.landing?.completedSteps?.configurePlugins&&this.isValidPluginId(a)?r.landing.completedSteps.configurePlugins[a]:!1}getPluginProgress(){const a=this.plugin.settings;if(!a.landing?.completedSteps?.configurePlugins)return{completed:0,total:4};const r=a.landing.completedSteps.configurePlugins;let i=0;return r["obsidian-pandoc-reference-list"]&&i++,r["obsidian-memos"]&&i++,r.zotlit&&i++,r.soundscapes&&i++,{completed:i,total:4}}updateStepCompletion(a,r){this.plugin.settings.landing||(this.plugin.settings.landing=la),a==="account"?this.plugin.settings.landing.completedSteps.account=r:a==="renameRepo"?this.plugin.settings.landing.completedSteps.renameRepo=r:a==="customizeTheme"&&(this.plugin.settings.landing.completedSteps.customizeTheme=r),this.plugin.saveSettings()}updatePluginCompletion(a,r){this.plugin.settings.landing||(this.plugin.settings.landing=la),this.isValidPluginId(a)&&(this.plugin.settings.landing.completedSteps.configurePlugins[a]=r,this.plugin.saveSettings(),this.renderView())}isValidPluginId(a){return["obsidian-pandoc-reference-list","obsidian-memos","zotlit","soundscapes"].includes(a)}isPluginEnabled(a){const i={"obsidian-pandoc-reference-list":"obsidian-pandoc-reference-list","obsidian-memos":"obsidian-memos",zotlit:"zotlit",soundscapes:"soundscapes"}[a];return i?!!this.app.plugins.plugins[i]:!1}async enablePlugin(a){const i={"obsidian-pandoc-reference-list":"obsidian-pandoc-reference-list","obsidian-memos":"obsidian-memos",zotlit:"zotlit",soundscapes:"soundscapes"}[a];if(!i)return new _.Notice(`未知的插件 ID: ${a}`),!1;try{return await this.app.plugins.enablePluginAndSave(i),new _.Notice(`${a} 插件已启用`),!0}catch(o){return new _.Notice(`启用 ${a} 插件失败: ${o.message}`),!1}}openPluginSettings(a){const i={"obsidian-pandoc-reference-list":"obsidian-pandoc-reference-list","obsidian-memos":"obsidian-memos",zotlit:"zotlit",soundscapes:"soundscapes"}[a];if(!i){new _.Notice(`未知的插件 ID: ${a}`);return}if(!this.isPluginEnabled(a)){new _.Notice(`插件 ${a} 未启用`);return}this.app.setting.open(),this.app.setting.openTabById(i)}async saveAndClose(){this.plugin.settings.landing||(this.plugin.settings.landing=la),this.plugin.settings.landing.firstLoad=!1,await this.plugin.saveSettings(),new _.Notice("设置已保存"),this.leaf.detach()}async skipSetup(){this.plugin.settings.landing||(this.plugin.settings.landing=la),this.plugin.settings.landing.firstLoad=!1,await this.plugin.saveSettings(),new _.Notice("初始设置已跳过"),this.leaf.detach()}}const mr={academicOverview:{type:"folder",displayName:"学术概览",description:"展示学术研究的整体概况和统计信息",useMockData:!1,refreshInterval:0,cacheTimeout:5e3,metricsSource:"calculated",metrics:{literatureTotalSource:"zotero",draftsSource:"papers",publishedSource:"papers",manual:{},external:{}}},todayFocus:{type:"folder",displayName:"今日聚焦",description:"显示今天需要关注的重要任务和事项",useMockData:!1,taskSources:[],priorityField:"priority",deadlineField:"due",refreshInterval:6e4,cacheTimeout:5e3},recentLiterature:{type:"folder",displayName:"最近文献",description:"展示最近阅读和收集的学术文献",useMockData:!1,paperFields:{title:"title",authors:"authors",year:"year",journal:"journal",doi:"doi",keywords:"keywords",abstract:"abstract"},maxAge:30,refreshInterval:3e5,cacheTimeout:6e4,literatureFolderPath:"Inputs/Zotero",literatureDisplaySettings:{titleWrap:!0,authorWrap:!0,keywordsWrap:!0,tagsWrap:!0}},researchFocusMap:{type:"folder",displayName:"研究焦点地图",description:"可视化展示研究领域和关注重点",useMockData:!1,topicField:"topic",weightField:"weight",refreshInterval:0,cacheTimeout:6e4,trackingTags:["research","study","paper","note","想法","project"],gridSize:50,borderRadius:4},projectBaseManager:{type:"folder",displayName:"项目管理(默认配置)",description:"其他项目组件未配置时的后备数据源,优先级低于具体组件配置",useMockData:!1,statusField:"status",progressField:"progress",teamField:"team",refreshInterval:6e4,cacheTimeout:5e3,identifyMode:"frontmatter",frontmatterKey:"project",typeValues:["project"]},papersManager:{type:"folder",displayName:"研究论文",description:"论文写作、审核状态和发表进度管理",useMockData:!1,paperFields:{title:"title",authors:"authors",status:"status",journal:"journal",year:"year"},refreshInterval:3e5,cacheTimeout:6e4,identifyMode:"frontmatter",frontmatterKey:"paper",typeValues:["paper","research-paper"]},experimentsManager:{type:"folder",displayName:"实验数据",description:"实验设计、数据收集和结果分析",useMockData:!1,experimentFields:{title:"title",status:"status",startDate:"startDate",endDate:"endDate",description:"description"},refreshInterval:18e4,cacheTimeout:3e4,identifyMode:"frontmatter",frontmatterKey:"experiment",typeValues:["experiment","experimental-data"]},tasksManager:{type:"folder",displayName:"科研课题",description:"课题管理、任务分解和进度跟踪",useMockData:!1,taskFields:{title:"title",status:"status",priority:"priority",deadline:"deadline",assignee:"assignee"},refreshInterval:12e4,cacheTimeout:15e3,identifyMode:"frontmatter",frontmatterKey:"task",typeValues:["task","research-task"]},resourcesManager:{type:"folder",displayName:"学术资源",description:"文献、工具、数据集和参考资料",useMockData:!1,resourceFields:{title:"title",type:"type",url:"url",description:"description",tags:"tags"},refreshInterval:6e5,cacheTimeout:12e4,identifyMode:"frontmatter",frontmatterKey:"resource",typeValues:["resource","academic-resource"]},bookShelf:{type:"folder",displayName:"书架",description:"展示个人图书收藏和阅读进度",useMockData:!1,bookFields:{title:"title",author:"author",cover:"cover",rating:"rating",progress:"progress",category:"category",tags:"tags"},refreshInterval:0,cacheTimeout:3e4},todoManager:{type:"folder",displayName:"待办管理",description:"管理和跟踪个人待办事项",useMockData:!1,todoPattern:"- [ ]",completedPattern:"- [x]",priorityMarkers:{high:"!!!",medium:"!!",low:"!"},refreshInterval:3e4,cacheTimeout:5e3},recentBooks:{type:"folder",displayName:"最近阅读",description:"展示最近阅读的书籍和进度",useMockData:!1,daysToConsider:30,progressTracking:!0,refreshInterval:6e4,cacheTimeout:1e4},readingAnalytics:{type:"folder",displayName:"阅读分析",description:"分析和统计个人阅读习惯和数据",useMockData:!1,trackingMethod:"automatic",metricsToTrack:["pages","time","books"],refreshInterval:3e5,cacheTimeout:6e4}},bi={userProfile:{name:"研究者",title:"学者",email:"researcher@example.com",institution:"研究机构",avatar:""},dataSources:{booksFolder:"Books",projectsFolder:"Projects",papersFolder:"Papers",notesFolder:"Notes",literatureFolder:"Inputs/Zotero",experimentsFolder:"Experiments",resourcesFolder:"Resources",todosSource:"dataview",todosFolder:"Tasks"},componentSettings:{}};class Zs{constructor(a,r,i,o){this.tagCache=new Map,this.fileTagCache=new Map,this.cacheInitialized=!1,this.metadataListener=null,this.app=a||window.app,this.dataManager=r,this.plugin=o,this.config={...bi,...i}}updateConfig(a){this.config={...this.config,...a}}extractTagsFromFile(a){const r=new Set;if(!a)return r;if((a.tags||[]).forEach(o=>{if(o.tag){const l=o.tag.replace("#","").trim();!l.includes("<%")&&!l.includes("%>")&&l.length>0&&r.add(l)}}),a.frontmatter?.tags){let o=[];typeof a.frontmatter.tags=="string"?o=[a.frontmatter.tags]:Array.isArray(a.frontmatter.tags)&&(o=a.frontmatter.tags.filter(l=>typeof l=="string")),o.forEach(l=>{const c=l.replace("#","").trim();!c.includes("<%")&&!c.includes("%>")&&c.length>0&&r.add(c)})}return r}async initializeTagCache(){if(!this.app||this.cacheInitialized)return;const a=Date.now();this.tagCache.clear(),this.fileTagCache.clear();const r=this.app.vault.getMarkdownFiles();for(const o of r){const l=this.app.metadataCache.getFileCache(o),c=this.extractTagsFromFile(l);if(c.size>0){this.fileTagCache.set(o.path,c);for(const u of c)this.tagCache.has(u)||this.tagCache.set(u,new Set),this.tagCache.get(u).add(o)}}this.cacheInitialized=!0;const i=Date.now()}updateFileInCache(a,r){const i=a.path,o=this.fileTagCache.get(i)||new Set,l=this.extractTagsFromFile(r),c=o.size!==l.size||![...o].every(u=>l.has(u));for(const u of o)if(!l.has(u)){const d=this.tagCache.get(u);d&&(d.delete(a),d.size===0&&this.tagCache.delete(u))}for(const u of l)o.has(u)||(this.tagCache.has(u)||this.tagCache.set(u,new Set),this.tagCache.get(u).add(a));l.size>0?this.fileTagCache.set(i,l):this.fileTagCache.delete(i),c&&window.app&&window.app.workspace.trigger("tag-cache-updated",{file:a.path,oldTags:Array.from(o),newTags:Array.from(l)})}registerMetadataCacheListener(){!this.app||this.metadataListener||(this.initializeTagCache(),this.metadataListener=this.app.metadataCache.on("changed",a=>{if(a.extension==="md"){const r=this.app.metadataCache.getFileCache(a);this.updateFileInCache(a,r)}}),this.app.vault.on("delete",a=>{if(a instanceof _.TFile&&a.extension==="md"){const r=a.path,i=this.fileTagCache.get(r);if(i){for(const o of i){const l=this.tagCache.get(o);l&&(l.delete(a),l.size===0&&this.tagCache.delete(o))}this.fileTagCache.delete(r)}}}),this.app.vault.on("rename",(a,r)=>{if(a instanceof _.TFile&&a.extension==="md"){const i=this.fileTagCache.get(r);i&&(this.fileTagCache.delete(r),this.fileTagCache.set(a.path,i))}}))}unregisterMetadataCacheListener(){this.metadataListener&&this.app&&(this.app.metadataCache.offref(this.metadataListener),this.metadataListener=null)}clearTagCache(){this.tagCache.clear(),this.fileTagCache.clear(),this.cacheInitialized=!1}getConfig(){return{...this.config}}async getUserProfile(){return{name:this.config.userProfile.name||"研究者",title:this.config.userProfile.title||"学者",email:this.config.userProfile.email||"researcher@example.com",institution:this.config.userProfile.institution||"研究机构",avatar:this.config.userProfile.avatar||"https://avatars.githubusercontent.com/u/45836839?v=4"}}async getWritingStats(){try{if(!this.dataManager)return this.getMockWritingStats();const a=await this.getPapersData(),r=await this.getNotesData(),i=await this.getRecentLiterature();let o=await this.getAllLiteratureCount();const l=await this.getAllNotesCount(),c=await this.calculateTotalWords(),u=a.length,d=l;let h=a.filter(v=>v.status==="draft"||v.status==="in-progress").length,m=a.filter(v=>v.status==="published").length;if(this.plugin?.settings?.componentDataSources){const y=this.plugin.settings.componentDataSources?.academicOverview?.metrics;if(y){if(y.literatureTotalSource==="papers")o=u;else if(y.literatureTotalSource==="folder"){const w=y.literatureFolderPath;w&&this.app&&(o=await this.getFileCountInFolder(w))}else if(y.literatureTotalSource==="tag"){const D=y.literatureTags?.split(",").map(E=>E.trim()).filter(Boolean);D&&D.length>0&&(o=(await this.getNotesWithTags(D)).length)}else y.literatureTotalSource==="manual"?o=Number(y?.manual?.literatureTotal)||o:y.literatureTotalSource;if(y.draftsSource==="folder"){const w=y.draftsFolderPath;w&&this.app&&(h=await this.getFileCountInFolder(w))}else if(y.draftsSource==="tag"){const w=y.draftsTags?.split(",").map(D=>D.trim()).filter(Boolean);w&&w.length>0&&(h=(await this.getNotesWithTags(w)).length)}else y.draftsSource==="frontmatter"?y.draftsFrontmatter&&(h=await this.getFileCountByFrontmatter(y.draftsFrontmatter)):y.draftsSource==="manual"?h=Number(y?.manual?.draftsCount)||h:y.draftsSource;if(y.publishedSource==="folder"){const w=y.publishedFolderPath;w&&this.app&&(m=await this.getFileCountInFolder(w))}else if(y.publishedSource==="tag"){const w=y.publishedTags?.split(",").map(D=>D.trim()).filter(Boolean);w&&w.length>0&&(m=(await this.getNotesWithTags(w)).length)}else y.publishedSource==="frontmatter"?y.publishedFrontmatter&&(m=await this.getFileCountByFrontmatter(y.publishedFrontmatter)):y.publishedSource==="manual"?m=Number(y?.manual?.publishedCount)||m:y.publishedSource}}const b=await this.calculateMonthlyGrowth(a),k=await this.generateRealDailyStats();return{totalWords:c,papersCount:u,literatureCount:o,monthlyGrowth:b,notesCount:d,draftsCount:h,publishedCount:m,dailyStats:k}}catch(a){return console.error("Error in getWritingStats:",a),this.getMockWritingStats()}}async getBooksData(){if(!this.dataManager)return this.getMockBooksData();const a={type:"folder",folderPath:this.config.dataSources.booksFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]}};try{const r=this.dataManager.createDataSource(a,"books");if(r)return(await this.dataManager.getDataSourceData(r))?.data||[]}catch(r){console.error("Error fetching books data:",r)}return this.getMockBooksData()}async getProjectsData(){if(!this.dataManager)return this.getMockProjectsData();let a=this.config.componentSettings;this.plugin?.settings?.componentDataSources&&(a=this.plugin.settings.componentDataSources);const r=a?.tasksManager,i=a?.projectBaseManager,o=r?.folderPath?r:i,l={identifyMode:o?.identifyMode||"frontmatter",frontmatterKey:o?.frontmatterKey||(r?.folderPath?"task":"project"),tagIdentifier:o?.tagIdentifier,typeValues:o?.typeValues||(r?.folderPath?["task","research-task"]:["project"]),type:r?.folderPath?"tasks":"projects"},c={type:"folder",folderPath:o?.folderPath||this.config.dataSources.projectsFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]},sectionConfig:l};try{const u=this.dataManager.createDataSource(c,"projects");if(u)return(await this.dataManager.getDataSourceData(u))?.data||[]}catch(u){console.error("Error fetching projects data:",u)}return this.getMockProjectsData()}async getPapersData(){if(!this.dataManager)return this.getMockPapersData();let a=this.config.componentSettings;this.plugin?.settings?.componentDataSources&&(a=this.plugin.settings.componentDataSources);const r=a?.papersManager,i={identifyMode:r?.identifyMode||"frontmatter",frontmatterKey:r?.frontmatterKey||"paper",tagIdentifier:r?.tagIdentifier,typeValues:r?.typeValues||["paper","research-paper"]},o={type:"folder",folderPath:r?.folderPath||this.config.dataSources.papersFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]},sectionConfig:{type:"papers",...i}};try{const l=this.dataManager.createDataSource(o,"papers");if(l)return(await this.dataManager.getDataSourceData(l))?.data||[]}catch(l){console.error("Error fetching papers data:",l)}return this.getMockPapersData()}async getNotesData(){if(!this.dataManager)return this.getMockNotesData();const a={type:"folder",folderPath:this.config.dataSources.notesFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]}};try{const r=this.dataManager.createDataSource(a,"notes");if(r)return(await this.dataManager.getDataSourceData(r))?.data||[]}catch(r){console.error("Error fetching notes data:",r)}return this.getMockNotesData()}async calculateMonthlyGrowth(a){if(!this.app||!this.app.vault)return 0;try{const r=new Date,i=new Date(r);i.setDate(r.getDate()-30),i.setHours(0,0,0,0);const o=new Date(r);o.setDate(r.getDate()-60),o.setHours(0,0,0,0);const l=this.app.vault.getMarkdownFiles();let c=0,u=0;for(const d of l){const h=await this.app.vault.adapter.stat(d.path);if(h){const m=new Date(h.ctime);if(m>=i){const b=await this.app.vault.read(d),k=(b.match(/[\u4e00-\u9fa5]+/g)||[]).join("").length,v=(b.match(/[a-zA-Z]+/g)||[]).length;c+=k+v}else if(m>=o&&m0?100:0:(c-u)/u*100}catch(r){return console.error("Error calculating monthly growth:",r),0}}async getTodosData(){if(!this.dataManager)return this.getMockTodosData();const a=this.config.dataSources.todosSource==="folder"?{type:"folder",folderPath:this.config.dataSources.todosFolder||"Tasks",parseMode:"frontmatter",fileFilter:{extensions:["md"]}}:{type:"dataview",parseMode:"tasks"};try{const r=this.dataManager.createDataSource(a,"todos");if(r)return(await this.dataManager.getDataSourceData(r))?.data||[]}catch(r){console.error("Error fetching todos data:",r)}return this.getMockTodosData()}async getTodayFocus(){const a=new Date().toISOString().split("T")[0];return[{id:"focus-1",title:"完成深度学习论文修改",description:"根据审稿意见完善实验部分",priority:"high",deadline:a,status:"in-progress"},{id:"focus-2",title:"准备学术报告PPT",description:"整理研究进展和核心发现",priority:"medium",deadline:a,status:"pending"}]}async getRecentLiterature(a){if(!this.dataManager)return this.getMockRecentLiterature();const i={type:"folder",folderPath:a||this.config.dataSources.literatureFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]}};try{const o=this.dataManager.createDataSource(i,"recent-literature");if(o){const l=await this.dataManager.getDataSourceData(o);if(l?.data&&l.data.length>0)return this.parseLiteratureData(l.data).slice(0,10)}}catch(o){console.error("Error fetching recent literature:",o)}return this.getMockRecentLiterature()}parseLiteratureData(a){return a.map(r=>{const i=r.title||r.Title||r.name||"未知标题",o=r.author||r.Author||r.authors||r.creators||"未知作者",l=r.year||r.Year||r.date?.substring(0,4)||"",c=r.journal||r.publicationTitle||r.publication||"",u=r.doi||r.DOI||"",d=r.abstract||r.Abstract||"";let h=r.tags||r.Tags||[];typeof h=="string"?h=h.includes(",")?h.split(",").map(w=>w.trim()).filter(Boolean):[h.trim()].filter(Boolean):Array.isArray(h)||(h=[]);const m=r.keywords||r.Keywords||"",b=r.url||r.URL||"",k=r.notes||r.Notes||"";let v="未读";h.includes("已读")||h.includes("read")||h.includes("finished")?v="已读":(h.includes("在读")||h.includes("reading")||h.includes("in-progress"))&&(v="在读");const y=h.includes("重要")||h.includes("important")||h.includes("starred")||h.includes("⭐");return{title:i,author:Array.isArray(o)?o.join(", "):o,year:l,journal:c,doi:u,abstract:d,keywords:Array.isArray(m)?m.join(", "):m,tags:[...h,v,y?"重要":""].filter(Boolean),url:b,notes:k,lastModified:r.modified||r.lastModified||new Date().toISOString(),filePath:r.filePath||""}}).sort((r,i)=>new Date(i.lastModified).getTime()-new Date(r.lastModified).getTime())}async getFileCountInFolder(a){if(!this.app||!a)return 0;try{const r=this.app.vault.getAbstractFileByPath(a);if(!r||!("children"in r))return 0;let i=0;const o=l=>{if("children"in l)for(const c of l.children)c.extension==="md"?i++:"children"in c&&o(c)};return o(r),i}catch(r){return console.error("Error counting files in folder:",r),0}}async getFileCountByFrontmatter(a){if(!this.app||!a)return 0;try{const r=this.app.vault.getMarkdownFiles();let i=0;const o=a.split(":");if(o.length!==2)return console.warn("[DataService] Invalid frontmatter condition format:",a),0;const l=o[0].trim(),c=o[1].trim().replace(/["']/g,"");for(const u of r){const d=this.app.metadataCache.getFileCache(u);if(d?.frontmatter){const h=d.frontmatter[l];(c==="true"&&h===!0||c==="false"&&h===!1||h===c||Array.isArray(h)&&h.includes(c))&&i++}}return i}catch(r){return console.error("Error counting files by frontmatter:",r),0}}async getAllLiteratureCount(){if(!this.dataManager)return 0;const a={type:"folder",folderPath:this.config.dataSources.literatureFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]}};try{const r=this.dataManager.createDataSource(a,"literature-count");if(r)return(await this.dataManager.getDataSourceData(r))?.data?.length||0}catch(r){console.error("Error fetching literature count:",r)}return 0}async getAllNotesCount(){if(!this.app||!this.app.vault)return 0;try{return this.app.vault.getMarkdownFiles().length}catch(a){return console.error("Error counting all notes:",a),0}}async calculateTotalWords(){if(!this.app||!this.app.vault)return 0;try{const a=this.app.vault.getMarkdownFiles();let r=0;const i=new Date;i.setDate(i.getDate()-30),i.setHours(0,0,0,0);for(const o of a){const l=await this.app.vault.adapter.stat(o.path);if(l&&new Date(l.ctime)>=i){const u=await this.app.vault.read(o),d=(u.match(/[\u4e00-\u9fa5]+/g)||[]).join("").length,h=(u.match(/[a-zA-Z]+/g)||[]).length;r+=d+h}}return r}catch(a){return console.error("Error calculating total words:",a),0}}async getFileStatsByDateRange(a){if(!this.app||!this.app.vault)return new Map;const r=new Map,i=new Date,o=new Date(i);o.setDate(i.getDate()-a),o.setHours(0,0,0,0);try{const l=this.app.vault.getMarkdownFiles();for(const c of l){const u=await this.app.vault.adapter.stat(c.path);if(u){const d=new Date(u.ctime);if(d>=o&&d<=i){const h=d.toISOString().split("T")[0],m=await this.app.vault.read(c),b=(m.match(/[\u4e00-\u9fa5]+/g)||[]).join("").length,k=(m.match(/[a-zA-Z]+/g)||[]).length,v=b+k,y=r.get(h)||{fileCount:0,wordCount:0};r.set(h,{fileCount:y.fileCount+1,wordCount:y.wordCount+v})}}}}catch(l){console.error("Error in getFileStatsByDateRange:",l)}return r}async generateRealDailyStats(){const a=await this.getFileStatsByDateRange(90),r=[],i=new Date;i.setHours(23,59,59,999);const o=[];for(let u=89;u>=0;u--){const d=new Date(i);d.setDate(i.getDate()-u),d.setHours(0,0,0,0);const h=d.toISOString().split("T")[0],m=a.get(h)||{fileCount:0,wordCount:0};o.push({date:new Date(d),words:m.wordCount,fileCount:m.fileCount})}let l=0,c=0;for(let u=0;u<30;u++)l+=o[u].words;for(let u=60;u<90;u++){const d=o[u];c+=d.words;let h=0;for(let m=30;m<=u-30;m++)h+=o[m].words;r.push({date:d.date,words:d.words,cumulativeWords:c,papers:d.fileCount,previousMonthCumulative:h})}return r}getMockRecentLiterature(){return[]}async getResearchFocusData(){const a=await this.getPapersData(),r={};return a.forEach(i=>{i.tags&&i.tags.forEach(o=>{r[o]=(r[o]||0)+1})}),Object.entries(r).map(([i,o])=>({topic:i,intensity:Math.min(o*20,100),papers:o}))}async getRecentBooks(){return(await this.getBooksData()).filter(r=>r.status==="reading"||r.status==="completed").sort((r,i)=>new Date(i.lastRead||0).getTime()-new Date(r.lastRead||0).getTime()).slice(0,6)}async getReadingAnalytics(){const a=await this.getBooksData(),r=a.filter(o=>o.status==="completed"),i=a.filter(o=>o.status==="reading");return{totalBooks:a.length,completedBooks:r.length,readingBooks:i.length,averageRating:r.reduce((o,l)=>o+(l.rating||0),0)/r.length||0,readingTime:r.reduce((o,l)=>o+parseInt(l.duration?.replace(/[^\d]/g,"")||"0"),0),monthlyStats:this.generateMonthlyReadingStats(12)}}async getExperimentsData(){if(!this.dataManager)return this.getMockExperimentsData();let a=this.config.componentSettings;this.plugin?.settings?.componentDataSources&&(a=this.plugin.settings.componentDataSources);const r=a?.experimentsManager,i={identifyMode:r?.identifyMode||"frontmatter",frontmatterKey:r?.frontmatterKey||"experiment",tagIdentifier:r?.tagIdentifier,typeValues:r?.typeValues||["experiment","experimental-data"],type:"experiments"},o={type:"folder",folderPath:r?.folderPath||this.config.dataSources.experimentsFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]},sectionConfig:i};try{const l=this.dataManager.createDataSource(o,"experiments");if(l)return(await this.dataManager.getDataSourceData(l))?.data||[]}catch(l){console.error("Error fetching experiments data:",l)}return this.getMockExperimentsData()}async getResourcesData(){if(!this.dataManager)return this.getMockResourcesData();let a=this.config.componentSettings;this.plugin?.settings?.componentDataSources&&(a=this.plugin.settings.componentDataSources);const r=a?.resourcesManager,i={identifyMode:r?.identifyMode||"frontmatter",frontmatterKey:r?.frontmatterKey||"resource",tagIdentifier:r?.tagIdentifier,typeValues:r?.typeValues||["resource","academic-resource"],type:"resources"},o={type:"folder",folderPath:r?.folderPath||this.config.dataSources.resourcesFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]},sectionConfig:i};try{const l=this.dataManager.createDataSource(o,"resources");if(l)return(await this.dataManager.getDataSourceData(l))?.data||[]}catch(l){console.error("Error fetching resources data:",l)}return this.getMockResourcesData()}async getResearchFocusMap(a){if(!this.dataManager)return{data:[],months:[],isRealData:!1,dataSource:"empty",totalNotes:0};try{const r=await this.getNotesWithTags(a);return{...this.organizeFocusDataByDate(r,a),isRealData:!0,dataSource:"obsidian",totalNotes:r.length}}catch(r){return console.error("Error fetching research focus data:",r),{data:[],months:[],isRealData:!1,dataSource:"error",totalNotes:0,error:r instanceof Error?r.message:"Unknown error"}}}async getNotesWithTags(a){if(!this.dataManager)return[];if(!this.app)return this.getNotesWithTagsViaDataSource(a);this.cacheInitialized||await this.initializeTagCache();try{const r=new Set,i=Date.now();if(!a||a.length===0){for(const[c,u]of this.fileTagCache)if(u.size>0){const d=this.app.vault.getAbstractFileByPath(c);d instanceof _.TFile&&r.add(d)}}else for(const c of a){const u=c.replace("#","").trim().toLowerCase();for(const[d,h]of this.tagCache){const m=d.toLowerCase();if(m===u||m.startsWith(u+"/")||u.startsWith(m+"/"))for(const k of h)r.add(k)}}const o=[];for(const c of r){const u=this.fileTagCache.get(c.path);if(!u)continue;const d=c.stat;o.push({name:c.name,path:c.path,tags:Array.from(u),created:d.ctime,createdDate:new Date(d.ctime),modified:d.mtime,mtime:d.mtime,ctime:d.ctime,file:c})}const l=Date.now();return o}catch(r){return console.error("Error fetching notes with tags via metadataCache:",r),this.getNotesWithTagsViaDataSource(a)}}async getNotesWithTagsViaDataSource(a){const r={type:"folder",folderPath:"",recursive:!0,parseMode:"frontmatter",fileFilter:{extensions:["md"]}};try{const i=this.dataManager.createDataSource(r,"research-notes");if(i){const o=await this.dataManager.getDataSourceData(i);return!a||a.length===0?o?.data||[]:(o?.data||[]).filter(c=>{const u=c.tags||[];if(Array.isArray(u)&&u.some(m=>a.includes(m.replace("#","").trim())))return!0;const d=c.content||"";return a.some(h=>d.includes(`#${h}`)||d.includes(`#${h} `)||d.includes(`#${h} -`)||d.includes(`#${h}\r`))})}}catch(i){console.error("Error fetching notes with tags via data source:",i)}return[]}organizeFocusDataByDate(a,r){const i=new Date,o=new Date(i.getFullYear(),i.getMonth()-2,1),l=[],c=[];for(let u=0;u<3;u++){const d=new Date(o.getFullYear(),o.getMonth()+u,1);c.push(d.toLocaleDateString("en-US",{month:"short"}));const h=[],m=new Date(d.getFullYear(),d.getMonth()+1,0).getDate();for(let b=0;b<4;b++){if(a.length===0){h.push({tag:"",intensity:0,count:0,weekNotes:0});continue}const k=new Date(d.getFullYear(),d.getMonth(),Math.max(1,b*7+1));k.setHours(0,0,0,0);const v=new Date(d.getFullYear(),d.getMonth(),Math.min(m,(b+1)*7));v.setHours(23,59,59,999);const y=a.filter(E=>{let T=null;return E.createdDate?T=new Date(E.createdDate):E.created?T=new Date(E.created):E.date?T=new Date(E.date):E.ctime?T=new Date(E.ctime):E.mtime&&(T=new Date(E.mtime)),!T||isNaN(T.getTime())?!1:T>=k&&T<=v});y.length>0&&y.forEach(E=>{const T=E.createdDate||E.created||E.date||E.ctime||E.mtime});const w={};r&&r.length>0?r.forEach(E=>{const T=E.replace("#","").trim().toLowerCase();let A=0;if(y.forEach(z=>{z.tags&&Array.isArray(z.tags)&&z.tags.some(q=>{const V=q.replace("#","").trim().toLowerCase();return!!(V===T||V.startsWith(T+"/")||T.startsWith(V+"/"))})&&A++}),A>0){const z=E.replace("#","").trim();w[z]=A}}):y.forEach(E=>{E.tags&&Array.isArray(E.tags)&&E.tags.forEach(T=>{const A=T.replace("#","").trim();!A.includes("<%")&&!A.includes("%>")&&A.length>0&&(w[A]=(w[A]||0)+1)})});const D=Object.entries(w);if(D.length>0){D.sort((R,q)=>q[1]-R[1]);const E=D[0],T=Math.max(...D.map(([,R])=>R)),A=Math.min(E[1]/Math.max(T,5),1),z={tag:`#${E[0]}`,intensity:Math.max(.1,A),count:E[1],weekNotes:y.length};h.push(z)}else{const E={tag:"",intensity:0,count:0,weekNotes:y.length};h.push(E)}}l.push(h)}return{data:l,months:c}}async getDashboardData(){return{userProfile:await this.getUserProfile(),writingStats:await this.getWritingStats(),books:await this.getBooksData(),projects:await this.getProjectsData(),todos:await this.getTodosData(),recentLiterature:await this.getRecentLiterature(),todayFocus:await this.getTodayFocus()}}getMockWritingStats(){let d=[];try{d=this.generateDailyStats(30,0,0)}catch(h){console.error("Error generating daily stats:",h),d=[]}return{totalWords:0,papersCount:0,literatureCount:0,monthlyGrowth:0,notesCount:0,draftsCount:0,publishedCount:0,dailyStats:d}}getMockBooksData(){return[{id:"1",title:"深度学习",author:"Ian Goodfellow",publisher:"MIT Press",year:"2017",cover:"https://images.unsplash.com/photo-1561379331-b07f7431ade1?w=200&h=280&fit=crop",rating:5,status:"reading",progress:85,notes:23,bookmarks:12,duration:"45小时",difficulty:"hard",importance:"high",tags:["深度学习","神经网络","机器学习"],insights:["反向传播算法","卷积神经网络"],lastRead:"2024-01-15",filePath:"Books/深度学习.md"},{id:"2",title:"统计学习方法",author:"李航",publisher:"清华大学出版社",year:"2019",cover:"https://images.unsplash.com/photo-1753939582692-6b01009b9cca?w=200&h=280&fit=crop",rating:5,status:"completed",progress:100,notes:31,bookmarks:18,duration:"38小时",difficulty:"medium",importance:"high",tags:["统计学习","支持向量机","决策树"],insights:["统计学习三要素","EM算法"],lastRead:"2024-01-10",filePath:"Books/统计学习方法.md"}]}getMockProjectsData(){return[{id:"1",title:"Climate Prediction Model",description:"基于深度学习的气候预测模型开发",status:"active",progress:65,startDate:"2024-01-01",endDate:"2024-12-31",team:["宋爽","John Doe","Jane Smith"],tags:["Deep Learning","Climate","Python"],repository:"https://github.com/example/climate-model",stars:145,forks:28,filePath:"Projects/Climate Prediction Model.md"},{id:"2",title:"Earth System Modeling",description:"地球系统综合建模框架",status:"planning",progress:20,startDate:"2024-03-01",team:["宋爽","Alice Johnson"],tags:["Modeling","Earth System","Julia"],filePath:"Projects/Earth System Modeling.md"}]}getMockPapersData(){return[{id:"1",title:"Deep Learning for Climate Prediction",authors:["宋爽","John Doe","Jane Smith"],journal:"Nature Climate Change",year:2024,citations:45,doi:"10.1038/nclimate.2024.123",status:"published",tags:["Climate","Deep Learning","Prediction"],wordCount:8500},{id:"2",title:"Machine Learning Applications in Earth Sciences",authors:["宋爽","Alice Johnson"],journal:"Science Advances",year:2023,citations:67,doi:"10.1126/sciadv.2023.456",status:"published",tags:["Machine Learning","Earth Sciences","Applications"],wordCount:7200}]}getMockTodosData(){return[{id:"1",title:"ICLR 2024 会议参与",description:"论文投稿、会议注册、行程安排",category:"学术会议",priority:"urgent",status:"in-progress",dueDate:"2024-05-10",createdAt:"2024-01-15",tags:["ICLR","会议","投稿"],budget:{total:25e3,spent:8500,currency:"CNY"}}]}getMockExperimentsData(){return[]}getMockResourcesData(){return[]}getMockNotesData(){return[]}generateDailyStats(a,r,i){const o=[],l=new Date;l.setDate(l.getDate()-a+1);let c=0,u=0;for(let d=0;ds.id===u),t=Oi();return!e||u==="blank"?t:{...t,...e.rule}}const Ut="paperbell-landing-view",Jt=["welcome","account","renameRepo","configurePlugins","customizeTheme","complete"],zi={welcome:"欢迎",account:"账户",renameRepo:"仓库",configurePlugins:"插件",customizeTheme:"主题",complete:"完成"},Ft={firstLoad:!0,completedSteps:{account:!1,renameRepo:!1,configurePlugins:{"obsidian-pandoc-reference-list":!1,"obsidian-memos":!1,zotlit:!1,soundscapes:!1},customizeTheme:!1}};class ji extends w.ItemView{constructor(e,t){super(e),this.currentStepIndex=0,this.navigationDirection="forward",this.activePlugin=null,this.authStatus="unknown",this.licenseData=null,this.oauthPollingInterval=null,this.configSections=[{id:"renameRepo",title:"重命名仓库",icon:"folder",steps:[{title:"访问仓库管理",description:"第一步是点击左下角的 PaperBell,第二步是点击管理仓库:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504121548819.png",alt:"管理仓库",caption:"访问仓库管理界面"}]},{title:"重命名仓库",description:"第三步是点击右侧的三个点进入重命名仓库;第四步是选择重命名仓库,需要先关闭当前仓库,然后将其重命名为你想要的名称。(这里重命名为 Test,路径中包含中文字符。但最好避免中文字符和空格)",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504121551378.png",alt:"重命名仓库",caption:"仓库重命名操作"}]},{title:"完成重命名",description:"重命名后,界面如下图所示,再次点击 Test 即可打开。",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504121556959.png",alt:"完成重命名",caption:"重命名完成后的界面"}]},{title:"查看重命名结果",description:"可以看到左下角已经变成了重命名后的名称:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504121559755.png",alt:"左下角名称",caption:"查看左下角显示的仓库名称"}]}]},{id:"configurePlugins",title:"插件配置",icon:"settings",steps:[{title:"文件夹介绍",description:"在正式介绍各个插件之前,先介绍左侧文件夹的含义及其对应的功能。您可以修改文件夹名称,但也需要相应地修改插件中的文件夹名称。因此,首次使用时,通常不建议轻易修改。熟悉插件和功能后,可以随意修改。",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504121633442.png",alt:"文件夹介绍",caption:"文件夹结构和功能"}]}],plugins:[{id:"obsidian-pandoc-reference-list",title:"Pandoc Reference List",icon:"file-text",description:"这个插件主要用于在 Obsidian 中显示当前文档的参考文献列表,需要配置 Pandoc 路径和参考文献文件。",steps:[{title:"Pandoc 路径设置",description:"设置 Pandoc 路径,注意这是 Pandoc.exe 的位置,下载和安装时请记住这个位置:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/8b79442eea370008bc170e60ef436e1.png",alt:"Pandoc 设置",caption:"Pandoc 路径配置"}]},{title:"Zotero 导出",description:"Bib 文件(红框中的第二行)主要从 Zotero 导出。首先,在 Zotero 中选择要导出的条目,右键点击,然后导出:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122011623.png",alt:"Zotero 导出",caption:"从 Zotero 导出参考文献"}]},{title:"导出设置",description:"勾选 export notes、keepUpdated 和 worker:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122012672.png",alt:"导出设置",caption:"Zotero 导出设置选项"}]},{title:"导出路径",description:"设置导出路径,最好导入到 Obsidian 以便更好地多设备同步。如果导出到其他位置,请务必记住导出位置。名称可以更改,但最好使用英文且不包含空格。",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122013032.png",alt:"导出路径",caption:"设置参考文献导出路径"}]},{title:"Better BibTeX 设置",description:"特别是下面 Zotero 的 Better BibTeX 中的红框,务必设置正确的路径,应该与上面的路径一致,尽量确保没有空格或中文字符:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122017003.png",alt:"Better BibTeX 设置",caption:"设置 Better BibTeX 路径"}]},{title:"参考文献格式",description:"再次插入参考文献,下面是正确的格式:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122015642.png",alt:"参考文献格式",caption:"正确的参考文献格式示例"}]}]},{id:"obsidian-memos",title:"Thino",icon:"pencil",description:"这个插件主要用于在 Obsidian 中记录您的想法,需要进行基本设置。",steps:[{title:"Thino 设置",description:"这个插件主要用于在 Obsidian 中记录您的想法。需要更改的设置主要是下图中三个红框位置,可以根据您的需求自由修改。",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122021763.png",alt:"Thino 设置",caption:"Thino 插件设置界面"}]}]},{id:"zotlit",title:"Zotlit",icon:"book",description:"Zotlit 用于导入 Zotero 文件,需要配置 Zotero 数据位置。",steps:[{title:"Zotlit 设置",description:"Zotlit 用于导入 Zotero 文件。在 connect 中,找到 Zotero 数据位置才能正确使用。",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122025700.png",alt:"Zotlit 设置",caption:"Zotlit 插件设置界面"}]},{title:"查找 Zotero 位置",description:"这取决于您的 Zotero 位置。方法如下:",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122028523.png",alt:"Zotero 位置",caption:"查找 Zotero 数据位置的方法"}]}]},{id:"soundscapes",title:"SoundScapes",icon:"headphones",description:"这个插件主要用于在 Obsidian 中播放音乐,需要配置本地音乐文件夹。",steps:[{title:"SoundScapes 设置",description:"这个插件主要用于听音乐。在线音乐需要 VPN,所以对于本地音乐播放,您需要确定您的音乐文件夹位置。只需修改下面框中的文件位置,其他设置可根据需要修改。",images:[{src:"https://senjiang-1317527983.cos.ap-nanjing.myqcloud.com/Obsidian/202504122000444.png",alt:"SoundScapes 设置",caption:"SoundScapes 插件设置界面"}]}]}]},{id:"customizeTheme",title:"主题定制",icon:"brush",steps:[{title:"样式设置",description:"您需要下载 Style Settings 插件进行修改。您可以观看 B 站的详细教程 (https://b23.tv/stTdoOm),里面有详细说明。这里不做任何更改,您可以根据自己的喜好按照教程进行修改。",images:[]}]}],this.plugin=t}getViewType(){return Ut}getDisplayText(){return"PaperBell 设置向导"}getIcon(){return"paperclip"}async onOpen(){this.plugin.settings.landing||(this.plugin.settings.landing=Ft,await this.plugin.saveSettings()),this.plugin.settings.landing.completedSteps.account===void 0&&(this.plugin.settings.landing.completedSteps.account=!1,await this.plugin.saveSettings()),await this.checkAuthStatus(),this.renderView()}async onClose(){this.stopOAuthPolling()}goToStep(e){e<0||e>=Jt.length||(this.navigationDirection=e>this.currentStepIndex?"forward":"back",this.activePlugin=null,this.currentStepIndex=e,this.renderView())}goNext(){this.goToStep(this.currentStepIndex+1)}goPrevious(){if(this.activePlugin){this.activePlugin=null,this.renderView();return}this.goToStep(this.currentStepIndex-1)}async checkAuthStatus(){this.authStatus="checking";try{await this.plugin.verificationWorker.verify()?(this.authStatus="authenticated",this.licenseData=this.plugin.verificationWorker.getLicenseData()):(this.authStatus="unauthenticated",this.licenseData=null)}catch{this.authStatus="unauthenticated",this.licenseData=null}}startOAuthPolling(){this.stopOAuthPolling(),this.oauthPollingInterval=window.setInterval(async()=>{await this.checkAuthStatus(),this.authStatus==="authenticated"&&(this.stopOAuthPolling(),this.updateStepCompletion("account",!0),this.renderView())},2e3),window.setTimeout(()=>this.stopOAuthPolling(),300*1e3)}stopOAuthPolling(){this.oauthPollingInterval&&(window.clearInterval(this.oauthPollingInterval),this.oauthPollingInterval=null)}renderView(){const{containerEl:e}=this;e.empty(),e.addClass("paperbell-landing-view");const t=e.createEl("div",{cls:"ppb-wizard-wrapper"});this.renderProgressBar(t);const s=t.createEl("div",{cls:"ppb-wizard-content"}),n=this.navigationDirection==="back"?"ppb-wizard-step-enter-reverse":"ppb-wizard-step-enter",i=s.createEl("div",{cls:n});this.renderStepContent(i),this.renderNavigation(t)}renderProgressBar(e){const t=e.createEl("div",{cls:"ppb-wizard-progress"});Jt.forEach((s,n)=>{if(n>0){const a=t.createEl("div",{cls:"ppb-wizard-progress-line"});n<=this.currentStepIndex&&a.addClass("is-completed")}const i=t.createEl("div",{cls:"ppb-wizard-progress-step"}),r=i.createEl("div",{cls:"ppb-wizard-progress-dot"});nthis.goToStep(n))),i.createEl("div",{cls:"ppb-wizard-progress-label",text:zi[s]})})}renderNavigation(e){const t=Jt[this.currentStepIndex],s=e.createEl("div",{cls:"ppb-wizard-nav"}),n=s.createEl("div",{cls:"ppb-wizard-nav-left"}),i=s.createEl("div",{cls:"ppb-wizard-nav-right"});if(this.currentStepIndex>0&&t!=="complete"){const r=n.createEl("button",{cls:"ppb-wizard-nav-btn"}),a=r.createEl("span",{cls:"ppb-wizard-nav-icon"});w.setIcon(a,"arrow-left"),r.createEl("span",{text:"上一步"}),this.registerDomEvent(r,"click",()=>this.goPrevious())}if(t==="account"&&this.authStatus!=="authenticated"){const r=i.createEl("button",{cls:"ppb-wizard-nav-btn",text:"稍后再说"});this.registerDomEvent(r,"click",()=>this.goNext())}if(t!=="complete"){const r=t==="welcome"?"开始配置":"下一步",a=i.createEl("button",{cls:"mod-cta ppb-wizard-nav-btn"});a.createEl("span",{text:r});const o=a.createEl("span",{cls:"ppb-wizard-nav-icon"});w.setIcon(o,"arrow-right"),this.registerDomEvent(a,"click",()=>this.goNext())}if(t==="complete"){const r=n.createEl("button",{cls:"ppb-wizard-nav-btn",text:"跳过设置"});this.registerDomEvent(r,"click",()=>this.skipSetup());const a=i.createEl("button",{cls:"mod-cta ppb-wizard-nav-btn",text:"完成并关闭"});this.registerDomEvent(a,"click",()=>this.saveAndClose())}}renderStepContent(e){switch(Jt[this.currentStepIndex]){case"welcome":this.renderWelcomeStep(e);break;case"account":this.renderAccountStep(e);break;case"renameRepo":this.renderRenameRepoStep(e);break;case"configurePlugins":this.activePlugin?this.renderPluginDetail(e,this.activePlugin):this.renderPluginConfigStep(e);break;case"customizeTheme":this.renderThemeStep(e);break;case"complete":this.renderCompleteStep(e);break}}renderWelcomeStep(e){const t=e.createEl("div",{cls:"paperbell-welcome-container"}),s=t.createEl("div",{cls:"paperbell-welcome-logo"});w.setIcon(s,"school");const n=t.createEl("div",{cls:"paperbell-welcome-header"});n.createEl("h1",{text:"欢迎使用 PaperBell"}),n.createEl("p",{text:"让我们花几分钟完成初始配置,帮助您打造最佳的学术工作环境。"});const i=t.createEl("div",{cls:"paperbell-welcome-features"});[{icon:"user",title:"账户激活",description:"登录账户,解锁全部功能"},{icon:"settings",title:"插件配置",description:"一站式配置学术工作流所需的插件"},{icon:"brush",title:"个性定制",description:"调整主题和外观,打造专属界面"}].forEach(a=>{const o=i.createEl("div",{cls:"paperbell-welcome-feature"}),c=o.createEl("div",{cls:"paperbell-welcome-feature-icon"});w.setIcon(c,a.icon),o.createEl("h3",{text:a.title}),o.createEl("p",{text:a.description})})}renderAccountStep(e){const t=e.createEl("div",{cls:"ppb-account-container"}),s=t.createEl("div",{cls:"ppb-step-header"}),n=s.createEl("div",{cls:"ppb-step-header-icon"});if(w.setIcon(n,"user-check"),s.createEl("h2",{text:"账户设置"}),s.createEl("p",{text:"登录您的 PaperBell 账户以激活许可证。"}),this.authStatus==="checking"){const o=t.createEl("div",{cls:"ppb-account-checking"}),c=o.createEl("div",{cls:"ppb-account-spinner"});w.setIcon(c,"loader"),o.createEl("p",{text:"正在检查账户状态..."});return}if(this.authStatus==="authenticated"){const o=t.createEl("div",{cls:"ppb-account-success"}),c=o.createEl("div",{cls:"ppb-account-success-icon"});if(w.setIcon(c,"check"),o.createEl("h3",{text:"已成功登录"}),this.licenseData&&(this.licenseData.user_name&&o.createEl("p",{text:`欢迎回来,${this.licenseData.user_name}`,cls:"ppb-account-user-name"}),this.licenseData.expires_at)){const l=new Date(this.licenseData.expires_at);o.createEl("p",{text:`许可证有效期至:${l.toLocaleDateString()}`,cls:"ppb-account-license-info"})}this.updateStepCompletion("account",!0);return}const i=t.createEl("div",{cls:"ppb-account-method"}),r=i.createEl("div",{cls:"ppb-account-method-icon"});w.setIcon(r,"globe"),i.createEl("h3",{text:"浏览器登录"}),i.createEl("p",{text:"通过浏览器安全授权,自动激活您的账户",cls:"ppb-account-method-desc"});const a=i.createEl("button",{cls:"mod-cta ppb-account-login-btn",text:"打开浏览器登录"});this.registerDomEvent(a,"click",async()=>{await this.plugin.startAccountLogin(),a.textContent="等待授权中...",a.disabled=!0,this.startOAuthPolling()})}renderRenameRepoStep(e){const t=this.configSections.find(r=>r.id==="renameRepo");if(!t)return;const s=e.createEl("div",{cls:"ppb-step-header"}),n=s.createEl("div",{cls:"ppb-step-header-icon"});w.setIcon(n,t.icon),s.createEl("h2",{text:t.title}),s.createEl("p",{text:"将仓库重命名为您喜欢的名称,建议使用英文且不包含空格。"});const i=e.createEl("div",{cls:"paperbell-landing-tab-content"});this.renderSteps(i,t.steps),this.createCompletionCheckbox(e,"renameRepo")}renderPluginConfigStep(e){const t=this.configSections.find(d=>d.id==="configurePlugins");if(!t||!t.plugins)return;const s=e.createEl("div",{cls:"ppb-step-header"}),n=s.createEl("div",{cls:"ppb-step-header-icon"});w.setIcon(n,t.icon),s.createEl("h2",{text:t.title}),s.createEl("p",{text:"配置学术工作流中用到的各个插件,按需启用和设置。"});const i=this.getPluginProgress(),r=s.createEl("div",{cls:"paperbell-landing-progress"});r.createEl("span",{cls:"paperbell-landing-progress-text",text:`${i.completed}/${i.total} 已完成`});const o=r.createEl("div",{cls:"paperbell-landing-progress-bar"}).createEl("div",{cls:"paperbell-landing-progress-inner"});o.style.width=`${i.completed/i.total*100}%`;const c=e.createEl("div",{cls:"paperbell-landing-tab-content"});this.renderSteps(c,t.steps);const l=c.createEl("div",{cls:"paperbell-landings-grid"});t.plugins.forEach(d=>{const f=l.createEl("div",{cls:"paperbell-landing-card"}),h=f.createEl("div",{cls:"paperbell-landing-card-icon"});w.setIcon(h,d.icon),f.createEl("h3",{text:d.title}),f.createEl("p",{text:d.description});const g=this.isPluginEnabled(d.id),p=this.isPluginCompleted(d.id);let y="待配置",v="pending";p?(y="已完成",v="completed mod-cta"):g?(y="已启用,待配置",v="enabled"):(y="未启用",v="disabled mod-destructive"),f.createEl("button",{cls:`${v}`,text:y});const E=f.createEl("div",{cls:"paperbell-landing-card-actions"});if(g){const C=E.createEl("button",{cls:"paperbell-landing-card-button settings",text:"打开设置"});this.registerDomEvent(C,"click",()=>{this.openPluginSettings(d.id)})}else if(this.app.plugins.plugins[d.id]){const C=E.createEl("button",{cls:"paperbell-landing-card-button enable",text:"启用"});this.registerDomEvent(C,"click",async()=>{await this.enablePlugin(d.id)&&this.renderView()})}else{const C=E.createEl("button",{cls:"paperbell-landing-card-button enable",text:"下载"});this.registerDomEvent(C,"click",async()=>{window.open(`obsidian://show-plugin?id=${d.id}`)})}const x=E.createEl("button",{cls:"paperbell-landing-card-button config",text:"配置指南"});this.registerDomEvent(x,"click",()=>{this.activePlugin=d.id,this.renderView()})})}renderPluginDetail(e,t){const s=this.configSections.find(p=>p.id==="configurePlugins");if(!s||!s.plugins)return;const n=s.plugins.find(p=>p.id===t);if(!n)return;const i=e.createEl("div",{cls:"paperbell-landing-topbar"}),r=i.createEl("button",{cls:"paperbell-landing-back-button"});w.setIcon(r,"arrow-left"),r.createEl("span",{text:"返回插件列表"}),this.registerDomEvent(r,"click",()=>{this.activePlugin=null,this.renderView()});const a=i.createEl("div",{cls:"paperbell-landing-status-container"}),o=this.isPluginEnabled(t),c=this.isPluginCompleted(t);let l="未启用",d="disabled";c?(l="配置已完成",d="completed mod-cta"):o&&(l="已启用,待配置",d="enabled mod-cta"),o&&a.createEl("button",{cls:`${d}`,text:l});const f=a.createEl("div",{cls:"paperbell-landing-actions"});if(!o&&this.app.plugins.plugins[t]){const p=f.createEl("button",{cls:"paperbell-landing-enable-btn",text:"启用"});this.registerDomEvent(p,"click",async()=>{await this.enablePlugin(t)&&this.renderView()})}else if(!o&&!this.app.plugins.plugins[t]){const p=f.createEl("button",{cls:"paperbell-landing-enable-btn",text:"下载"});this.registerDomEvent(p,"click",async()=>{window.open(`obsidian://show-plugin?id=${t}`)})}this.createPluginCheckbox(a,t,"").classList.add("paperbell-landing-topbar-checkbox");const g=e.createEl("div",{cls:"paperbell-landing-tab-content"});g.createEl("h2",{text:n.title}),g.createEl("p",{cls:"paperbell-landing-description",text:n.description}),this.renderSteps(g,n.steps,t)}renderThemeStep(e){const t=this.configSections.find(r=>r.id==="customizeTheme");if(!t)return;const s=e.createEl("div",{cls:"ppb-step-header"}),n=s.createEl("div",{cls:"ppb-step-header-icon"});w.setIcon(n,t.icon),s.createEl("h2",{text:t.title}),s.createEl("p",{text:"根据您的喜好调整界面外观和主题样式。"});const i=e.createEl("div",{cls:"paperbell-landing-tab-content"});this.renderSteps(i,t.steps),this.createCompletionCheckbox(e,"customizeTheme")}renderCompleteStep(e){const t=e.createEl("div",{cls:"ppb-complete-container"}),s=t.createEl("div",{cls:"ppb-complete-icon"});w.setIcon(s,"check-circle"),t.createEl("h2",{text:"设置完成!"}),t.createEl("p",{text:"以下是您的配置状态总览。您可以随时通过命令面板重新打开此向导。",cls:"ppb-complete-description"});const n=t.createEl("div",{cls:"ppb-complete-checklist"}),i=[{label:"账户激活",done:this.isStepCompleted("account"),detail:this.authStatus==="authenticated"?`已登录${this.licenseData?.user_name?` (${this.licenseData.user_name})`:""}`:"未登录"},{label:"仓库重命名",done:this.isStepCompleted("renameRepo"),detail:this.isStepCompleted("renameRepo")?"已完成":"未完成"},{label:"插件配置",done:this.isStepCompleted("configurePlugins"),detail:`${this.getPluginProgress().completed}/${this.getPluginProgress().total} 已配置`},{label:"主题定制",done:this.isStepCompleted("customizeTheme"),detail:this.isStepCompleted("customizeTheme")?"已完成":"未完成"}];i.forEach(a=>{const o=n.createEl("div",{cls:"ppb-complete-checklist-item"}),c=o.createEl("div",{cls:`ppb-complete-checklist-icon ${a.done?"is-done":"is-pending"}`});w.setIcon(c,a.done?"check-circle":"circle");const l=o.createEl("div",{cls:"ppb-complete-checklist-text"});l.createEl("span",{text:a.label,cls:"ppb-complete-checklist-label"}),l.createEl("span",{text:a.detail,cls:"ppb-complete-checklist-detail"})}),i.every(a=>a.done)||t.createEl("p",{text:"未完成的步骤可以稍后随时通过命令面板中的「显示 PaperBell 设置」来完成。",cls:"ppb-complete-note"})}renderSteps(e,t,s){t.forEach(n=>{const i=e.createEl("div",{cls:"paperbell-landing-step"}),r=i.createEl("div",{cls:"paperbell-landing-step-header"});if(r.createEl("h3",{text:n.title}),s&&this.isPluginEnabled(s)){const o=r.createEl("button",{cls:"paperbell-landing-step-settings-btn",text:"打开设置"});this.registerDomEvent(o,"click",()=>{this.openPluginSettings(s)})}const a=i.createEl("div",{cls:"paperbell-landing-step-description"});if(a.innerHTML=n.description,n.images&&n.images.length>0){const o=i.createEl("button",{cls:"paperbell-landing-toggle-images",text:"显示图片教程"}),c=i.createEl("div",{cls:"paperbell-landing-images-container collapsed"});n.images.forEach(l=>{const d=c.createEl("figure",{cls:"paperbell-landing-figure"});d.createEl("img",{attr:{src:l.src,alt:l.alt}}),l.caption&&d.createEl("figcaption",{text:l.caption})}),this.registerDomEvent(o,"click",()=>{const l=c.classList.contains("collapsed");c.classList.toggle("collapsed",!l),o.textContent=l?"隐藏图片教程":"显示图片教程"})}})}createCompletionCheckbox(e,t){const s=e.createEl("div",{cls:"paperbell-landing-checkbox"}),n=s.createEl("input",{type:"checkbox",attr:{id:`${t}-completed`,...this.isStepCompleted(t)?{checked:!0}:{}}});return s.createEl("label",{text:"我已完成此步骤",attr:{for:`${t}-completed`}}),this.registerDomEvent(n,"change",i=>{const r=i.target;this.updateStepCompletion(t,r.checked)}),s}createPluginCheckbox(e,t,s){const i=this.plugin.settings.landing?.completedSteps?.configurePlugins?.[t]||!1,r=e.createEl("div",{cls:"paperbell-landing-checkbox"}),a=r.createEl("input",{type:"checkbox",attr:{id:`${t}-completed`,...i?{checked:!0}:{}}});return s?r.createEl("label",{text:s,attr:{for:`${t}-completed`}}):r.createEl("label",{text:"配置已完成",attr:{for:`${t}-completed`}}),this.registerDomEvent(a,"change",o=>{const c=o.target;this.updatePluginCompletion(t,c.checked)}),r}isStepCompleted(e){const t=this.plugin.settings;if(!t.landing?.completedSteps)return!1;if(e==="account")return t.landing.completedSteps.account??!1;if(e==="renameRepo")return t.landing.completedSteps.renameRepo;if(e==="configurePlugins"){const s=t.landing.completedSteps.configurePlugins;return s["obsidian-pandoc-reference-list"]&&s["obsidian-memos"]&&s.zotlit&&s.soundscapes}else if(e==="customizeTheme")return t.landing.completedSteps.customizeTheme;return!1}isPluginCompleted(e){const t=this.plugin.settings;return t.landing?.completedSteps?.configurePlugins&&this.isValidPluginId(e)?t.landing.completedSteps.configurePlugins[e]:!1}getPluginProgress(){const e=this.plugin.settings;if(!e.landing?.completedSteps?.configurePlugins)return{completed:0,total:4};const t=e.landing.completedSteps.configurePlugins;let s=0;return t["obsidian-pandoc-reference-list"]&&s++,t["obsidian-memos"]&&s++,t.zotlit&&s++,t.soundscapes&&s++,{completed:s,total:4}}updateStepCompletion(e,t){this.plugin.settings.landing||(this.plugin.settings.landing=Ft),e==="account"?this.plugin.settings.landing.completedSteps.account=t:e==="renameRepo"?this.plugin.settings.landing.completedSteps.renameRepo=t:e==="customizeTheme"&&(this.plugin.settings.landing.completedSteps.customizeTheme=t),this.plugin.saveSettings()}updatePluginCompletion(e,t){this.plugin.settings.landing||(this.plugin.settings.landing=Ft),this.isValidPluginId(e)&&(this.plugin.settings.landing.completedSteps.configurePlugins[e]=t,this.plugin.saveSettings(),this.renderView())}isValidPluginId(e){return["obsidian-pandoc-reference-list","obsidian-memos","zotlit","soundscapes"].includes(e)}isPluginEnabled(e){const s={"obsidian-pandoc-reference-list":"obsidian-pandoc-reference-list","obsidian-memos":"obsidian-memos",zotlit:"zotlit",soundscapes:"soundscapes"}[e];return s?!!this.app.plugins.plugins[s]:!1}async enablePlugin(e){const s={"obsidian-pandoc-reference-list":"obsidian-pandoc-reference-list","obsidian-memos":"obsidian-memos",zotlit:"zotlit",soundscapes:"soundscapes"}[e];if(!s)return new w.Notice(`未知的插件 ID: ${e}`),!1;try{return await this.app.plugins.enablePluginAndSave(s),new w.Notice(`${e} 插件已启用`),!0}catch(n){return new w.Notice(`启用 ${e} 插件失败: ${n.message}`),!1}}openPluginSettings(e){const s={"obsidian-pandoc-reference-list":"obsidian-pandoc-reference-list","obsidian-memos":"obsidian-memos",zotlit:"zotlit",soundscapes:"soundscapes"}[e];if(!s){new w.Notice(`未知的插件 ID: ${e}`);return}if(!this.isPluginEnabled(e)){new w.Notice(`插件 ${e} 未启用`);return}this.app.setting.open(),this.app.setting.openTabById(s)}async saveAndClose(){this.plugin.settings.landing||(this.plugin.settings.landing=Ft),this.plugin.settings.landing.firstLoad=!1,await this.plugin.saveSettings(),new w.Notice("设置已保存"),this.leaf.detach()}async skipSetup(){this.plugin.settings.landing||(this.plugin.settings.landing=Ft),this.plugin.settings.landing.firstLoad=!1,await this.plugin.saveSettings(),new w.Notice("初始设置已跳过"),this.leaf.detach()}}const Dt={academicOverview:{type:"folder",displayName:"学术概览",description:"展示学术研究的整体概况和统计信息",useMockData:!1,refreshInterval:0,cacheTimeout:5e3,metricsSource:"calculated",metrics:{literatureTotalSource:"zotero",draftsSource:"papers",publishedSource:"papers",manual:{},external:{}}},todayFocus:{type:"folder",displayName:"今日聚焦",description:"显示今天需要关注的重要任务和事项",useMockData:!1,taskSources:[],priorityField:"priority",deadlineField:"due",refreshInterval:6e4,cacheTimeout:5e3},recentLiterature:{type:"folder",displayName:"最近文献",description:"展示最近阅读和收集的学术文献",useMockData:!1,paperFields:{title:"title",authors:"authors",year:"year",journal:"journal",doi:"doi",keywords:"keywords",abstract:"abstract"},maxAge:30,refreshInterval:3e5,cacheTimeout:6e4,literatureFolderPath:"Inputs/Zotero",literatureDisplaySettings:{titleWrap:!0,authorWrap:!0,keywordsWrap:!0,tagsWrap:!0}},researchFocusMap:{type:"folder",displayName:"研究焦点地图",description:"可视化展示研究领域和关注重点",useMockData:!1,topicField:"topic",weightField:"weight",refreshInterval:0,cacheTimeout:6e4,trackingTags:["research","study","paper","note","想法","project"],gridSize:50,borderRadius:4},projectBaseManager:{type:"folder",displayName:"项目管理(默认配置)",description:"其他项目组件未配置时的后备数据源,优先级低于具体组件配置",useMockData:!1,statusField:"status",progressField:"progress",teamField:"team",refreshInterval:6e4,cacheTimeout:5e3,identifyMode:"frontmatter",frontmatterKey:"project",typeValues:["project"]},papersManager:{type:"folder",displayName:"研究论文",description:"论文写作、审核状态和发表进度管理",useMockData:!1,paperFields:{title:"title",authors:"authors",status:"status",journal:"journal",year:"year"},refreshInterval:3e5,cacheTimeout:6e4,identifyMode:"frontmatter",frontmatterKey:"paper",typeValues:["paper","research-paper"]},experimentsManager:{type:"folder",displayName:"实验数据",description:"实验设计、数据收集和结果分析",useMockData:!1,experimentFields:{title:"title",status:"status",startDate:"startDate",endDate:"endDate",description:"description"},refreshInterval:18e4,cacheTimeout:3e4,identifyMode:"frontmatter",frontmatterKey:"experiment",typeValues:["experiment","experimental-data"]},tasksManager:{type:"folder",displayName:"科研课题",description:"课题管理、任务分解和进度跟踪",useMockData:!1,taskFields:{title:"title",status:"status",priority:"priority",deadline:"deadline",assignee:"assignee"},refreshInterval:12e4,cacheTimeout:15e3,identifyMode:"frontmatter",frontmatterKey:"task",typeValues:["task","research-task"]},resourcesManager:{type:"folder",displayName:"学术资源",description:"文献、工具、数据集和参考资料",useMockData:!1,resourceFields:{title:"title",type:"type",url:"url",description:"description",tags:"tags"},refreshInterval:6e5,cacheTimeout:12e4,identifyMode:"frontmatter",frontmatterKey:"resource",typeValues:["resource","academic-resource"]},bookShelf:{type:"folder",displayName:"书架",description:"展示个人图书收藏和阅读进度",useMockData:!1,bookFields:{title:"title",author:"author",cover:"cover",rating:"rating",progress:"progress",category:"category",tags:"tags"},refreshInterval:0,cacheTimeout:3e4},todoManager:{type:"folder",displayName:"待办管理",description:"管理和跟踪个人待办事项",useMockData:!1,todoPattern:"- [ ]",completedPattern:"- [x]",priorityMarkers:{high:"!!!",medium:"!!",low:"!"},refreshInterval:3e4,cacheTimeout:5e3},recentBooks:{type:"folder",displayName:"最近阅读",description:"展示最近阅读的书籍和进度",useMockData:!1,daysToConsider:30,progressTracking:!0,refreshInterval:6e4,cacheTimeout:1e4},readingAnalytics:{type:"folder",displayName:"阅读分析",description:"分析和统计个人阅读习惯和数据",useMockData:!1,trackingMethod:"automatic",metricsToTrack:["pages","time","books"],refreshInterval:3e5,cacheTimeout:6e4}},Ht={userProfile:{name:"研究者",title:"学者",email:"researcher@example.com",institution:"研究机构",avatar:""},dataSources:{booksFolder:"Books",projectsFolder:"Projects",papersFolder:"Papers",notesFolder:"Notes",literatureFolder:"Inputs/Zotero",experimentsFolder:"Experiments",resourcesFolder:"Resources",todosSource:"dataview",todosFolder:"Tasks"},componentSettings:{}};class le{constructor(e,t,s,n){this.tagCache=new Map,this.fileTagCache=new Map,this.cacheInitialized=!1,this.metadataListener=null,this.app=e||window.app,this.dataManager=t,this.plugin=n,this.config={...Ht,...s}}updateConfig(e){this.config={...this.config,...e}}extractTagsFromFile(e){const t=new Set;if(!e)return t;if((e.tags||[]).forEach(n=>{if(n.tag){const i=n.tag.replace("#","").trim();!i.includes("<%")&&!i.includes("%>")&&i.length>0&&t.add(i)}}),e.frontmatter?.tags){let n=[];typeof e.frontmatter.tags=="string"?n=[e.frontmatter.tags]:Array.isArray(e.frontmatter.tags)&&(n=e.frontmatter.tags.filter(i=>typeof i=="string")),n.forEach(i=>{const r=i.replace("#","").trim();!r.includes("<%")&&!r.includes("%>")&&r.length>0&&t.add(r)})}return t}async initializeTagCache(){if(!this.app||this.cacheInitialized)return;const e=Date.now();this.tagCache.clear(),this.fileTagCache.clear();const t=this.app.vault.getMarkdownFiles();for(const n of t){const i=this.app.metadataCache.getFileCache(n),r=this.extractTagsFromFile(i);if(r.size>0){this.fileTagCache.set(n.path,r);for(const a of r)this.tagCache.has(a)||this.tagCache.set(a,new Set),this.tagCache.get(a).add(n)}}this.cacheInitialized=!0;const s=Date.now()}updateFileInCache(e,t){const s=e.path,n=this.fileTagCache.get(s)||new Set,i=this.extractTagsFromFile(t),r=n.size!==i.size||![...n].every(a=>i.has(a));for(const a of n)if(!i.has(a)){const o=this.tagCache.get(a);o&&(o.delete(e),o.size===0&&this.tagCache.delete(a))}for(const a of i)n.has(a)||(this.tagCache.has(a)||this.tagCache.set(a,new Set),this.tagCache.get(a).add(e));i.size>0?this.fileTagCache.set(s,i):this.fileTagCache.delete(s),r&&window.app&&window.app.workspace.trigger("tag-cache-updated",{file:e.path,oldTags:Array.from(n),newTags:Array.from(i)})}registerMetadataCacheListener(){!this.app||this.metadataListener||(this.initializeTagCache(),this.metadataListener=this.app.metadataCache.on("changed",e=>{if(e.extension==="md"){const t=this.app.metadataCache.getFileCache(e);this.updateFileInCache(e,t)}}),this.app.vault.on("delete",e=>{if(e instanceof w.TFile&&e.extension==="md"){const t=e.path,s=this.fileTagCache.get(t);if(s){for(const n of s){const i=this.tagCache.get(n);i&&(i.delete(e),i.size===0&&this.tagCache.delete(n))}this.fileTagCache.delete(t)}}}),this.app.vault.on("rename",(e,t)=>{if(e instanceof w.TFile&&e.extension==="md"){const s=this.fileTagCache.get(t);s&&(this.fileTagCache.delete(t),this.fileTagCache.set(e.path,s))}}))}unregisterMetadataCacheListener(){this.metadataListener&&this.app&&(this.app.metadataCache.offref(this.metadataListener),this.metadataListener=null)}clearTagCache(){this.tagCache.clear(),this.fileTagCache.clear(),this.cacheInitialized=!1}getConfig(){return{...this.config}}async getUserProfile(){return{name:this.config.userProfile.name||"研究者",title:this.config.userProfile.title||"学者",email:this.config.userProfile.email||"researcher@example.com",institution:this.config.userProfile.institution||"研究机构",avatar:this.config.userProfile.avatar||"https://avatars.githubusercontent.com/u/45836839?v=4"}}async getWritingStats(){try{if(!this.dataManager)return this.getMockWritingStats();const e=await this.getPapersData(),t=await this.getNotesData(),s=await this.getRecentLiterature();let n=await this.getAllLiteratureCount();const i=await this.getAllNotesCount(),r=await this.calculateTotalWords(),a=e.length,o=i;let c=e.filter(h=>h.status==="draft"||h.status==="in-progress").length,l=e.filter(h=>h.status==="published").length;if(this.plugin?.settings?.componentDataSources){const g=this.plugin.settings.componentDataSources?.academicOverview?.metrics;if(g){if(g.literatureTotalSource==="papers")n=a;else if(g.literatureTotalSource==="folder"){const p=g.literatureFolderPath;p&&this.app&&(n=await this.getFileCountInFolder(p))}else if(g.literatureTotalSource==="tag"){const y=g.literatureTags?.split(",").map(v=>v.trim()).filter(Boolean);y&&y.length>0&&(n=(await this.getNotesWithTags(y)).length)}else g.literatureTotalSource==="manual"?n=Number(g?.manual?.literatureTotal)||n:g.literatureTotalSource;if(g.draftsSource==="folder"){const p=g.draftsFolderPath;p&&this.app&&(c=await this.getFileCountInFolder(p))}else if(g.draftsSource==="tag"){const p=g.draftsTags?.split(",").map(y=>y.trim()).filter(Boolean);p&&p.length>0&&(c=(await this.getNotesWithTags(p)).length)}else g.draftsSource==="frontmatter"?g.draftsFrontmatter&&(c=await this.getFileCountByFrontmatter(g.draftsFrontmatter)):g.draftsSource==="manual"?c=Number(g?.manual?.draftsCount)||c:g.draftsSource;if(g.publishedSource==="folder"){const p=g.publishedFolderPath;p&&this.app&&(l=await this.getFileCountInFolder(p))}else if(g.publishedSource==="tag"){const p=g.publishedTags?.split(",").map(y=>y.trim()).filter(Boolean);p&&p.length>0&&(l=(await this.getNotesWithTags(p)).length)}else g.publishedSource==="frontmatter"?g.publishedFrontmatter&&(l=await this.getFileCountByFrontmatter(g.publishedFrontmatter)):g.publishedSource==="manual"?l=Number(g?.manual?.publishedCount)||l:g.publishedSource}}const d=await this.calculateMonthlyGrowth(e),f=await this.generateRealDailyStats();return{totalWords:r,papersCount:a,literatureCount:n,monthlyGrowth:d,notesCount:o,draftsCount:c,publishedCount:l,dailyStats:f}}catch(e){return console.error("Error in getWritingStats:",e),this.getMockWritingStats()}}async getBooksData(){if(!this.dataManager)return this.getMockBooksData();const e={type:"folder",folderPath:this.config.dataSources.booksFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]}};try{const t=this.dataManager.createDataSource(e,"books");if(t)return(await this.dataManager.getDataSourceData(t))?.data||[]}catch(t){console.error("Error fetching books data:",t)}return this.getMockBooksData()}async getProjectsData(){if(!this.dataManager)return this.getMockProjectsData();let e=this.config.componentSettings;this.plugin?.settings?.componentDataSources&&(e=this.plugin.settings.componentDataSources);const t=e?.tasksManager,s=e?.projectBaseManager,n=t?.folderPath?t:s,i={identifyMode:n?.identifyMode||"frontmatter",frontmatterKey:n?.frontmatterKey||(t?.folderPath?"task":"project"),tagIdentifier:n?.tagIdentifier,typeValues:n?.typeValues||(t?.folderPath?["task","research-task"]:["project"]),type:t?.folderPath?"tasks":"projects"},r={type:"folder",folderPath:n?.folderPath||this.config.dataSources.projectsFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]},sectionConfig:i};try{const a=this.dataManager.createDataSource(r,"projects");if(a)return(await this.dataManager.getDataSourceData(a))?.data||[]}catch(a){console.error("Error fetching projects data:",a)}return this.getMockProjectsData()}async getPapersData(){if(!this.dataManager)return this.getMockPapersData();let e=this.config.componentSettings;this.plugin?.settings?.componentDataSources&&(e=this.plugin.settings.componentDataSources);const t=e?.papersManager,s={identifyMode:t?.identifyMode||"frontmatter",frontmatterKey:t?.frontmatterKey||"paper",tagIdentifier:t?.tagIdentifier,typeValues:t?.typeValues||["paper","research-paper"]},n={type:"folder",folderPath:t?.folderPath||this.config.dataSources.papersFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]},sectionConfig:{type:"papers",...s}};try{const i=this.dataManager.createDataSource(n,"papers");if(i)return(await this.dataManager.getDataSourceData(i))?.data||[]}catch(i){console.error("Error fetching papers data:",i)}return this.getMockPapersData()}async getNotesData(){if(!this.dataManager)return this.getMockNotesData();const e={type:"folder",folderPath:this.config.dataSources.notesFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]}};try{const t=this.dataManager.createDataSource(e,"notes");if(t)return(await this.dataManager.getDataSourceData(t))?.data||[]}catch(t){console.error("Error fetching notes data:",t)}return this.getMockNotesData()}async calculateMonthlyGrowth(e){if(!this.app||!this.app.vault)return 0;try{const t=new Date,s=new Date(t);s.setDate(t.getDate()-30),s.setHours(0,0,0,0);const n=new Date(t);n.setDate(t.getDate()-60),n.setHours(0,0,0,0);const i=this.app.vault.getMarkdownFiles();let r=0,a=0;for(const o of i){const c=await this.app.vault.adapter.stat(o.path);if(c){const l=new Date(c.ctime);if(l>=s){const d=await this.app.vault.read(o),f=(d.match(/[\u4e00-\u9fa5]+/g)||[]).join("").length,h=(d.match(/[a-zA-Z]+/g)||[]).length;r+=f+h}else if(l>=n&&l0?100:0:(r-a)/a*100}catch(t){return console.error("Error calculating monthly growth:",t),0}}async getTodosData(){if(!this.dataManager)return this.getMockTodosData();const e=this.config.dataSources.todosSource==="folder"?{type:"folder",folderPath:this.config.dataSources.todosFolder||"Tasks",parseMode:"frontmatter",fileFilter:{extensions:["md"]}}:{type:"dataview",parseMode:"tasks"};try{const t=this.dataManager.createDataSource(e,"todos");if(t)return(await this.dataManager.getDataSourceData(t))?.data||[]}catch(t){console.error("Error fetching todos data:",t)}return this.getMockTodosData()}async getTodayFocus(){const e=new Date().toISOString().split("T")[0];return[{id:"focus-1",title:"完成深度学习论文修改",description:"根据审稿意见完善实验部分",priority:"high",deadline:e,status:"in-progress"},{id:"focus-2",title:"准备学术报告PPT",description:"整理研究进展和核心发现",priority:"medium",deadline:e,status:"pending"}]}async getRecentLiterature(e){if(!this.dataManager)return this.getMockRecentLiterature();const s={type:"folder",folderPath:e||this.config.dataSources.literatureFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]}};try{const n=this.dataManager.createDataSource(s,"recent-literature");if(n){const i=await this.dataManager.getDataSourceData(n);if(i?.data&&i.data.length>0)return this.parseLiteratureData(i.data).slice(0,10)}}catch(n){console.error("Error fetching recent literature:",n)}return this.getMockRecentLiterature()}parseLiteratureData(e){return e.map(t=>{const s=t.title||t.Title||t.name||"未知标题",n=t.author||t.Author||t.authors||t.creators||"未知作者",i=t.year||t.Year||t.date?.substring(0,4)||"",r=t.journal||t.publicationTitle||t.publication||"",a=t.doi||t.DOI||"",o=t.abstract||t.Abstract||"";let c=t.tags||t.Tags||[];typeof c=="string"?c=c.includes(",")?c.split(",").map(p=>p.trim()).filter(Boolean):[c.trim()].filter(Boolean):Array.isArray(c)||(c=[]);const l=t.keywords||t.Keywords||"",d=t.url||t.URL||"",f=t.notes||t.Notes||"";let h="未读";c.includes("已读")||c.includes("read")||c.includes("finished")?h="已读":(c.includes("在读")||c.includes("reading")||c.includes("in-progress"))&&(h="在读");const g=c.includes("重要")||c.includes("important")||c.includes("starred")||c.includes("⭐");return{title:s,author:Array.isArray(n)?n.join(", "):n,year:i,journal:r,doi:a,abstract:o,keywords:Array.isArray(l)?l.join(", "):l,tags:[...c,h,g?"重要":""].filter(Boolean),url:d,notes:f,lastModified:t.modified||t.lastModified||new Date().toISOString(),filePath:t.filePath||""}}).sort((t,s)=>new Date(s.lastModified).getTime()-new Date(t.lastModified).getTime())}async getFileCountInFolder(e){if(!this.app||!e)return 0;try{const t=this.app.vault.getAbstractFileByPath(e);if(!t||!("children"in t))return 0;let s=0;const n=i=>{if("children"in i)for(const r of i.children)r.extension==="md"?s++:"children"in r&&n(r)};return n(t),s}catch(t){return console.error("Error counting files in folder:",t),0}}async getFileCountByFrontmatter(e){if(!this.app||!e)return 0;try{const t=this.app.vault.getMarkdownFiles();let s=0;const n=e.split(":");if(n.length!==2)return console.warn("[DataService] Invalid frontmatter condition format:",e),0;const i=n[0].trim(),r=n[1].trim().replace(/["']/g,"");for(const a of t){const o=this.app.metadataCache.getFileCache(a);if(o?.frontmatter){const c=o.frontmatter[i];(r==="true"&&c===!0||r==="false"&&c===!1||c===r||Array.isArray(c)&&c.includes(r))&&s++}}return s}catch(t){return console.error("Error counting files by frontmatter:",t),0}}async getAllLiteratureCount(){if(!this.dataManager)return 0;const e={type:"folder",folderPath:this.config.dataSources.literatureFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]}};try{const t=this.dataManager.createDataSource(e,"literature-count");if(t)return(await this.dataManager.getDataSourceData(t))?.data?.length||0}catch(t){console.error("Error fetching literature count:",t)}return 0}async getAllNotesCount(){if(!this.app||!this.app.vault)return 0;try{return this.app.vault.getMarkdownFiles().length}catch(e){return console.error("Error counting all notes:",e),0}}async calculateTotalWords(){if(!this.app||!this.app.vault)return 0;try{const e=this.app.vault.getMarkdownFiles();let t=0;const s=new Date;s.setDate(s.getDate()-30),s.setHours(0,0,0,0);for(const n of e){const i=await this.app.vault.adapter.stat(n.path);if(i&&new Date(i.ctime)>=s){const a=await this.app.vault.read(n),o=(a.match(/[\u4e00-\u9fa5]+/g)||[]).join("").length,c=(a.match(/[a-zA-Z]+/g)||[]).length;t+=o+c}}return t}catch(e){return console.error("Error calculating total words:",e),0}}async getFileStatsByDateRange(e){if(!this.app||!this.app.vault)return new Map;const t=new Map,s=new Date,n=new Date(s);n.setDate(s.getDate()-e),n.setHours(0,0,0,0);try{const i=this.app.vault.getMarkdownFiles();for(const r of i){const a=await this.app.vault.adapter.stat(r.path);if(a){const o=new Date(a.ctime);if(o>=n&&o<=s){const c=o.toISOString().split("T")[0],l=await this.app.vault.read(r),d=(l.match(/[\u4e00-\u9fa5]+/g)||[]).join("").length,f=(l.match(/[a-zA-Z]+/g)||[]).length,h=d+f,g=t.get(c)||{fileCount:0,wordCount:0};t.set(c,{fileCount:g.fileCount+1,wordCount:g.wordCount+h})}}}}catch(i){console.error("Error in getFileStatsByDateRange:",i)}return t}async generateRealDailyStats(){const e=await this.getFileStatsByDateRange(90),t=[],s=new Date;s.setHours(23,59,59,999);const n=[];for(let a=89;a>=0;a--){const o=new Date(s);o.setDate(s.getDate()-a),o.setHours(0,0,0,0);const c=o.toISOString().split("T")[0],l=e.get(c)||{fileCount:0,wordCount:0};n.push({date:new Date(o),words:l.wordCount,fileCount:l.fileCount})}let i=0,r=0;for(let a=0;a<30;a++)i+=n[a].words;for(let a=60;a<90;a++){const o=n[a];r+=o.words;let c=0;for(let l=30;l<=a-30;l++)c+=n[l].words;t.push({date:o.date,words:o.words,cumulativeWords:r,papers:o.fileCount,previousMonthCumulative:c})}return t}getMockRecentLiterature(){return[]}async getResearchFocusData(){const e=await this.getPapersData(),t={};return e.forEach(s=>{s.tags&&s.tags.forEach(n=>{t[n]=(t[n]||0)+1})}),Object.entries(t).map(([s,n])=>({topic:s,intensity:Math.min(n*20,100),papers:n}))}async getRecentBooks(){return(await this.getBooksData()).filter(t=>t.status==="reading"||t.status==="completed").sort((t,s)=>new Date(s.lastRead||0).getTime()-new Date(t.lastRead||0).getTime()).slice(0,6)}async getReadingAnalytics(){const e=await this.getBooksData(),t=e.filter(n=>n.status==="completed"),s=e.filter(n=>n.status==="reading");return{totalBooks:e.length,completedBooks:t.length,readingBooks:s.length,averageRating:t.reduce((n,i)=>n+(i.rating||0),0)/t.length||0,readingTime:t.reduce((n,i)=>n+parseInt(i.duration?.replace(/[^\d]/g,"")||"0"),0),monthlyStats:this.generateMonthlyReadingStats(12)}}async getExperimentsData(){if(!this.dataManager)return this.getMockExperimentsData();let e=this.config.componentSettings;this.plugin?.settings?.componentDataSources&&(e=this.plugin.settings.componentDataSources);const t=e?.experimentsManager,s={identifyMode:t?.identifyMode||"frontmatter",frontmatterKey:t?.frontmatterKey||"experiment",tagIdentifier:t?.tagIdentifier,typeValues:t?.typeValues||["experiment","experimental-data"],type:"experiments"},n={type:"folder",folderPath:t?.folderPath||this.config.dataSources.experimentsFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]},sectionConfig:s};try{const i=this.dataManager.createDataSource(n,"experiments");if(i)return(await this.dataManager.getDataSourceData(i))?.data||[]}catch(i){console.error("Error fetching experiments data:",i)}return this.getMockExperimentsData()}async getResourcesData(){if(!this.dataManager)return this.getMockResourcesData();let e=this.config.componentSettings;this.plugin?.settings?.componentDataSources&&(e=this.plugin.settings.componentDataSources);const t=e?.resourcesManager,s={identifyMode:t?.identifyMode||"frontmatter",frontmatterKey:t?.frontmatterKey||"resource",tagIdentifier:t?.tagIdentifier,typeValues:t?.typeValues||["resource","academic-resource"],type:"resources"},n={type:"folder",folderPath:t?.folderPath||this.config.dataSources.resourcesFolder,parseMode:"frontmatter",fileFilter:{extensions:["md"]},sectionConfig:s};try{const i=this.dataManager.createDataSource(n,"resources");if(i)return(await this.dataManager.getDataSourceData(i))?.data||[]}catch(i){console.error("Error fetching resources data:",i)}return this.getMockResourcesData()}async getResearchFocusMap(e){if(!this.dataManager)return{data:[],months:[],isRealData:!1,dataSource:"empty",totalNotes:0};try{const t=await this.getNotesWithTags(e);return{...this.organizeFocusDataByDate(t,e),isRealData:!0,dataSource:"obsidian",totalNotes:t.length}}catch(t){return console.error("Error fetching research focus data:",t),{data:[],months:[],isRealData:!1,dataSource:"error",totalNotes:0,error:t instanceof Error?t.message:"Unknown error"}}}async getNotesWithTags(e){if(!this.dataManager)return[];if(!this.app)return this.getNotesWithTagsViaDataSource(e);this.cacheInitialized||await this.initializeTagCache();try{const t=new Set,s=Date.now();if(!e||e.length===0){for(const[r,a]of this.fileTagCache)if(a.size>0){const o=this.app.vault.getAbstractFileByPath(r);o instanceof w.TFile&&t.add(o)}}else for(const r of e){const a=r.replace("#","").trim().toLowerCase();for(const[o,c]of this.tagCache){const l=o.toLowerCase();if(l===a||l.startsWith(a+"/")||a.startsWith(l+"/"))for(const f of c)t.add(f)}}const n=[];for(const r of t){const a=this.fileTagCache.get(r.path);if(!a)continue;const o=r.stat;n.push({name:r.name,path:r.path,tags:Array.from(a),created:o.ctime,createdDate:new Date(o.ctime),modified:o.mtime,mtime:o.mtime,ctime:o.ctime,file:r})}const i=Date.now();return n}catch(t){return console.error("Error fetching notes with tags via metadataCache:",t),this.getNotesWithTagsViaDataSource(e)}}async getNotesWithTagsViaDataSource(e){const t={type:"folder",folderPath:"",recursive:!0,parseMode:"frontmatter",fileFilter:{extensions:["md"]}};try{const s=this.dataManager.createDataSource(t,"research-notes");if(s){const n=await this.dataManager.getDataSourceData(s);return!e||e.length===0?n?.data||[]:(n?.data||[]).filter(r=>{const a=r.tags||[];if(Array.isArray(a)&&a.some(l=>e.includes(l.replace("#","").trim())))return!0;const o=r.content||"";return e.some(c=>o.includes(`#${c}`)||o.includes(`#${c} `)||o.includes(`#${c} +`)||o.includes(`#${c}\r`))})}}catch(s){console.error("Error fetching notes with tags via data source:",s)}return[]}organizeFocusDataByDate(e,t){const s=new Date,n=new Date(s.getFullYear(),s.getMonth()-2,1),i=[],r=[];for(let a=0;a<3;a++){const o=new Date(n.getFullYear(),n.getMonth()+a,1);r.push(o.toLocaleDateString("en-US",{month:"short"}));const c=[],l=new Date(o.getFullYear(),o.getMonth()+1,0).getDate();for(let d=0;d<4;d++){if(e.length===0){c.push({tag:"",intensity:0,count:0,weekNotes:0});continue}const f=new Date(o.getFullYear(),o.getMonth(),Math.max(1,d*7+1));f.setHours(0,0,0,0);const h=new Date(o.getFullYear(),o.getMonth(),Math.min(l,(d+1)*7));h.setHours(23,59,59,999);const g=e.filter(v=>{let E=null;return v.createdDate?E=new Date(v.createdDate):v.created?E=new Date(v.created):v.date?E=new Date(v.date):v.ctime?E=new Date(v.ctime):v.mtime&&(E=new Date(v.mtime)),!E||isNaN(E.getTime())?!1:E>=f&&E<=h});g.length>0&&g.forEach(v=>{const E=v.createdDate||v.created||v.date||v.ctime||v.mtime});const p={};t&&t.length>0?t.forEach(v=>{const E=v.replace("#","").trim().toLowerCase();let x=0;if(g.forEach(C=>{C.tags&&Array.isArray(C.tags)&&C.tags.some(R=>{const F=R.replace("#","").trim().toLowerCase();return!!(F===E||F.startsWith(E+"/")||E.startsWith(F+"/"))})&&x++}),x>0){const C=v.replace("#","").trim();p[C]=x}}):g.forEach(v=>{v.tags&&Array.isArray(v.tags)&&v.tags.forEach(E=>{const x=E.replace("#","").trim();!x.includes("<%")&&!x.includes("%>")&&x.length>0&&(p[x]=(p[x]||0)+1)})});const y=Object.entries(p);if(y.length>0){y.sort((T,R)=>R[1]-T[1]);const v=y[0],E=Math.max(...y.map(([,T])=>T)),x=Math.min(v[1]/Math.max(E,5),1),C={tag:`#${v[0]}`,intensity:Math.max(.1,x),count:v[1],weekNotes:g.length};c.push(C)}else{const v={tag:"",intensity:0,count:0,weekNotes:g.length};c.push(v)}}i.push(c)}return{data:i,months:r}}async getDashboardData(){return{userProfile:await this.getUserProfile(),writingStats:await this.getWritingStats(),books:await this.getBooksData(),projects:await this.getProjectsData(),todos:await this.getTodosData(),recentLiterature:await this.getRecentLiterature(),todayFocus:await this.getTodayFocus()}}getMockWritingStats(){let o=[];try{o=this.generateDailyStats(30,0,0)}catch(c){console.error("Error generating daily stats:",c),o=[]}return{totalWords:0,papersCount:0,literatureCount:0,monthlyGrowth:0,notesCount:0,draftsCount:0,publishedCount:0,dailyStats:o}}getMockBooksData(){return[{id:"1",title:"深度学习",author:"Ian Goodfellow",publisher:"MIT Press",year:"2017",cover:"https://images.unsplash.com/photo-1561379331-b07f7431ade1?w=200&h=280&fit=crop",rating:5,status:"reading",progress:85,notes:23,bookmarks:12,duration:"45小时",difficulty:"hard",importance:"high",tags:["深度学习","神经网络","机器学习"],insights:["反向传播算法","卷积神经网络"],lastRead:"2024-01-15",filePath:"Books/深度学习.md"},{id:"2",title:"统计学习方法",author:"李航",publisher:"清华大学出版社",year:"2019",cover:"https://images.unsplash.com/photo-1753939582692-6b01009b9cca?w=200&h=280&fit=crop",rating:5,status:"completed",progress:100,notes:31,bookmarks:18,duration:"38小时",difficulty:"medium",importance:"high",tags:["统计学习","支持向量机","决策树"],insights:["统计学习三要素","EM算法"],lastRead:"2024-01-10",filePath:"Books/统计学习方法.md"}]}getMockProjectsData(){return[{id:"1",title:"Climate Prediction Model",description:"基于深度学习的气候预测模型开发",status:"active",progress:65,startDate:"2024-01-01",endDate:"2024-12-31",team:["宋爽","John Doe","Jane Smith"],tags:["Deep Learning","Climate","Python"],repository:"https://github.com/example/climate-model",stars:145,forks:28,filePath:"Projects/Climate Prediction Model.md"},{id:"2",title:"Earth System Modeling",description:"地球系统综合建模框架",status:"planning",progress:20,startDate:"2024-03-01",team:["宋爽","Alice Johnson"],tags:["Modeling","Earth System","Julia"],filePath:"Projects/Earth System Modeling.md"}]}getMockPapersData(){return[{id:"1",title:"Deep Learning for Climate Prediction",authors:["宋爽","John Doe","Jane Smith"],journal:"Nature Climate Change",year:2024,citations:45,doi:"10.1038/nclimate.2024.123",status:"published",tags:["Climate","Deep Learning","Prediction"],wordCount:8500},{id:"2",title:"Machine Learning Applications in Earth Sciences",authors:["宋爽","Alice Johnson"],journal:"Science Advances",year:2023,citations:67,doi:"10.1126/sciadv.2023.456",status:"published",tags:["Machine Learning","Earth Sciences","Applications"],wordCount:7200}]}getMockTodosData(){return[{id:"1",title:"ICLR 2024 会议参与",description:"论文投稿、会议注册、行程安排",category:"学术会议",priority:"urgent",status:"in-progress",dueDate:"2024-05-10",createdAt:"2024-01-15",tags:["ICLR","会议","投稿"],budget:{total:25e3,spent:8500,currency:"CNY"}}]}getMockExperimentsData(){return[]}getMockResourcesData(){return[]}getMockNotesData(){return[]}generateDailyStats(e,t,s){const n=[],i=new Date;i.setDate(i.getDate()-e+1);let r=0,a=0;for(let o=0;o{o.setPlaceholder("输入用户名称").setValue(r.settings.userProfile?.name||"").onChange(l=>{i.updateUserProfileSettings({name:l})})}),new _.Setting(a).setName("职位/头衔").setDesc("设置显示的职位或学术头衔").addText(o=>{o.setPlaceholder("输入职位头衔").setValue(r.settings.userProfile?.title||"").onChange(l=>{i.updateUserProfileSettings({title:l})})}),new _.Setting(a).setName("邮箱地址").setDesc("设置联系邮箱,用于展示或导出").addText(o=>{o.setPlaceholder("输入邮箱地址").setValue(r.settings.userProfile?.email||"").onChange(l=>{i.updateUserProfileSettings({email:l})})}),new _.Setting(a).setName("所属机构").setDesc("设置所属的工作单位或研究机构").addText(o=>{o.setPlaceholder("输入所属机构").setValue(r.settings.userProfile?.institution||"").onChange(l=>{i.updateUserProfileSettings({institution:l})})}),new _.Setting(a).setName("头像链接").setDesc("设置头像图片的 URL 地址(支持网络图片)").addText(o=>{o.setPlaceholder("输入头像URL").setValue(r.settings.userProfile?.avatar||"").onChange(l=>{i.updateUserProfileSettings({avatar:l})})})}function Tu(f,a){const{plugin:r}=f,i=r.verificationWorker.getLicenseData();if(i&&i.is_active){const c=new DocumentFragment;c.createEl("span",{text:`已登录: ${i.user_name||"已激活账户"}`}),new _.Setting(a).setName("当前账户").setDesc(c).addButton(u=>{u.setButtonText("切换账户").onClick(async()=>{r.settings.registrationId="",await r.saveSettings(),await r.verificationWorker.reloadActivationCode(),a.empty(),Tu(f,a),await r.startAccountLogin()})})}else new _.Setting(a).setName("账户登录").setDesc("通过浏览器授权登录以激活许可证").addButton(c=>{c.setButtonText("登录").setCta().onClick(async()=>{await r.startAccountLogin()})});const o=new DocumentFragment;o.createEl("span",{cls:"paperbell-code-desc",text:"输入您的 Paperbell 注册 ID。您可以从这里获取:"},c=>{c.createEl("a",{href:"https://paperbell.cn",text:"https://paperbell.cn"})}),new _.Setting(a).setName("🎓 注册 ID").setDesc(o).addButton(c=>{c.setButtonText("验证").onClick(async()=>{if(await r.verificationWorker.reloadActivationCode(),!await r.verificationWorker.verify())new _.Notice("无效的激活码");else{const d=r.verificationWorker.getLicenseData();if(d){let h="激活码已验证";if(d.expires_at){const m=new Date(d.expires_at);h+=` -过期时间: ${m.toLocaleDateString()}`}d.license_key&&(h+=` -许可证: ${d.license_key}`),new _.Notice(h,8e3)}else new _.Notice("激活码已验证")}a.empty(),Tu(f,a)})}).addText(c=>{c.inputEl.type="password",c.setPlaceholder("输入激活码").setValue(r.settings.registrationId).onChange(async u=>{r.settings.registrationId=u,f.saveSettings()})}),r.verificationWorker.verify().then(c=>{if(c)return;const u=a.createDiv({cls:"paperbell-uri-info"});u.createEl("div",{text:"💡 通过控制台快速激活",cls:"setting-item-name"});const d=u.createDiv({cls:"setting-item-description"});d.createEl("p",{text:"您也可以通过点击控制台中的按钮来激活 Paperbell"}),d.createEl("a",{text:"https://paperbell.cn/dashboard",cls:"paperbell-dashboard-link",href:"https://paperbell.cn/dashboard"}).setAttribute("target","_blank"),d.createEl("p",{text:"点击上面的链接访问您的控制台并激活 Paperbell。"})});const l=r.verificationWorker.getLicenseData();if(l){new _.Setting(a).setName("许可证状态").setHeading();const c=a.createDiv({cls:"paperbell-license-info"});if(c.createEl("div",{text:"许可状态: ✅ 已激活",cls:"paperbell-license-status-active"}),l.license_key&&c.createEl("div",{text:`许可密钥: ${l.license_key}`}),l.expires_at){const u=new Date(l.expires_at),d=r.verificationWorker.isLicenseExpiringSoon();c.createEl("div",{text:`过期时间: ${u.toLocaleDateString()}`,cls:d?"paperbell-license-expiring":""}),d&&c.createEl("div",{text:"⚠️ 许可即将过期!",cls:"paperbell-license-warning"})}l.user_name&&c.createEl("div",{text:`授权给: ${l.user_name}`})}new _.Setting(a).setName("📱 设备信息").setDesc("显示当前设备的唯一标识符,用于许可管理").addButton(c=>{const u=r.verificationWorker.getDeviceId();c.setButtonText("复制设备 ID").onClick(()=>{navigator.clipboard.writeText(u).then(()=>{new _.Notice("设备 ID 已复制到剪贴板")}).catch(()=>{new _.Notice(`设备 ID: ${u}`,1e4)})})})}function jm(f,a){const{plugin:r}=f;new _.Setting(a).setName("主题模式").setDesc("切换界面的明亮或暗黑主题模式").addDropdown(i=>{i.addOption("system","跟随系统").addOption("light","浅色模式").addOption("dark","深色模式").setValue(r.settings.themeModePreference||"system").onChange(async o=>{r.settings.themeModePreference=o,f.saveSettings()})}),new _.Setting(a).setName("浅色主题颜色").setHeading(),tg(a,r.settings.themeColors?.light||ua,"light",f),new _.Setting(a).setName("深色主题颜色").setHeading(),tg(a,r.settings.themeColors?.dark||pa,"dark",f),new _.Setting(a).setName("重置所有颜色").setDesc("将所有自定义颜色恢复为系统默认设置").addButton(i=>{i.setButtonText("重置为默认").setWarning().onClick(async()=>{r.settings.themeColors={light:{...ua},dark:{...pa}},f.saveSettings(),a.empty(),jm(f,a)})})}function tg(f,a,r,i){const{plugin:o}=i,l={primary:"主色调",secondary:"次要色",muted:"柔和色","muted-foreground":"柔和前景色",foreground:"前景色",background:"背景色","ticket-bg-start":"卡片背景起始","ticket-bg-end":"卡片背景结束","ticket-border":"卡片边框","ticket-accent":"卡片强调色","ticket-text":"卡片文字","ticket-text-muted":"卡片柔和文字"};["primary","secondary","foreground","background"].forEach(h=>{new _.Setting(f).setName(l[h]).addColorPicker(m=>{m.setValue(a[h]).onChange(async b=>{o.settings.themeColors||(o.settings.themeColors={light:{...ua},dark:{...pa}}),o.settings.themeColors[r][h]=b,i.saveSettings()})})});const u=f.createEl("details",{cls:"paperbell-color-details"});u.createEl("summary",{text:"卡片颜色(高级)"}),["ticket-bg-start","ticket-bg-end","ticket-border","ticket-accent","ticket-text","ticket-text-muted"].forEach(h=>{new _.Setting(u).setName(l[h]).addColorPicker(m=>{m.setValue(a[h]).onChange(async b=>{o.settings.themeColors||(o.settings.themeColors={light:{...ua},dark:{...pa}}),o.settings.themeColors[r][h]=b,i.saveSettings()})})})}class Uu extends _.FuzzySuggestModal{constructor(a,r){super(a),this.onChooseCallback=r,this.setPlaceholder("选择文件夹作为数据源...")}getItems(){const a=[];return this.app.vault.getAllLoadedFiles().forEach(i=>{i instanceof _.TFolder&&a.push(i)}),a.sort((i,o)=>i.path.localeCompare(o.path)),a}getItemText(a){return a.path||"/"}onChooseItem(a,r){this.onChooseCallback(a)}renderSuggestion(a,r){const i=a.item,o=r.createDiv({cls:"folder-selector-item"}),l=o.createSpan({cls:"folder-selector-icon"});l.setText("📁"),l.style.marginRight="8px",o.createSpan({cls:"folder-selector-path"}).setText(i.path||"/");const u=this.getFolderStats(i);if(u.fileCount>0){const d=o.createSpan({cls:"folder-selector-stats"});d.setText(`(${u.fileCount} 个文件)`),d.style.marginLeft="8px",d.style.fontSize="0.9em",d.style.opacity="0.7"}o.style.display="flex",o.style.alignItems="center",o.style.padding="4px"}getFolderStats(a){let r=0;const i=o=>{o.children.forEach(l=>{l instanceof _.TFolder?i(l):r++})};return i(a),{fileCount:r}}}const rg={projects:{title:"Projects",icon:"folder-kanban",defaultTag:"project"},papers:{title:"Papers",icon:"file-text",defaultTag:"paper"},experiments:{title:"Experiments",icon:"flask-conical",defaultTag:"experiment"},tasks:{title:"Tasks",icon:"target",defaultTag:"task"},resources:{title:"Resources",icon:"bookmark",defaultTag:"resource"},books:{title:"Books",icon:"book-open",defaultTag:"book"},literature:{title:"Recent Literature",icon:"book-open",defaultTag:"literature"}},Dw=[{value:"table",label:"Table"},{value:"cards",label:"Cards"},{value:"list",label:"List"}];class Nu extends _.Modal{constructor(a,r,i,o){super(a),this.searchInput=null,this.baseFileList=null,this.plugin=r,this.containerType=i,this.onChoose=o}onOpen(){const{contentEl:a}=this;a.empty(),a.addClass("ppb-base-selector-modal");const r=rg[this.containerType],i=a.createDiv({cls:"ppb-base-modal-title"}),o=i.createSpan({cls:"ppb-base-modal-icon"});_.setIcon(o,r.icon),i.createEl("h2",{text:`Configure ${r.title} Base`}),this.renderExistingBaseSection(a),a.createDiv({cls:"ppb-base-modal-divider"}).createEl("span",{text:"OR CREATE NEW"}),this.renderCreateBaseSection(a)}renderExistingBaseSection(a){const r=a.createDiv({cls:"ppb-base-modal-section"});r.createEl("h3",{text:"Select Existing Base"});const i=r.createDiv({cls:"ppb-base-search"});this.searchInput=i.createEl("input",{type:"text",placeholder:"Search .base files...",cls:"ppb-base-search-input"}),this.baseFileList=r.createDiv({cls:"ppb-base-file-list"}),this.refreshBaseFileList(""),this.searchInput.addEventListener("input",()=>{this.refreshBaseFileList(this.searchInput?.value||"")})}refreshBaseFileList(a){if(!this.baseFileList)return;this.baseFileList.empty();const r=this.app.vault.getFiles().filter(i=>i.extension==="base").filter(i=>a?i.path.toLowerCase().includes(a.toLowerCase()):!0).sort((i,o)=>o.stat.mtime-i.stat.mtime);if(r.length===0){this.baseFileList.createDiv({cls:"ppb-base-empty-list"}).setText(a?"No .base files match your search":"No .base files found in vault");return}for(const i of r){const o=this.baseFileList.createDiv({cls:"ppb-base-file-item"}),l=o.createSpan({cls:"ppb-base-file-icon"});_.setIcon(l,"database");const c=o.createDiv({cls:"ppb-base-file-info"});c.createEl("span",{text:i.basename,cls:"ppb-base-file-name"}),c.createEl("span",{text:i.parent?.path||"/",cls:"ppb-base-file-path"}),o.addEventListener("click",()=>{this.onChoose(i.path),this.close()})}}renderCreateBaseSection(a){const r=a.createDiv({cls:"ppb-base-modal-section"});r.createEl("h3",{text:"Create New Base"});const i=rg[this.containerType];let o=this.containerType,l="table";const c=[{type:"tag",value:i.defaultTag}];new _.Setting(r).setName("Base name").setDesc("Name for the .base file (saved in ppb/ folder)").addText(v=>{v.setValue(o).setPlaceholder("e.g. my-papers").onChange(y=>{o=y})}),new _.Setting(r).setName("Default view").setDesc("How the data will be displayed").addDropdown(v=>{for(const y of Dw)v.addOption(y.value,y.label);v.setValue(l),v.onChange(y=>{l=y})});const u=r.createDiv({cls:"ppb-base-filters"});u.createEl("h4",{text:"Filters"});const d=u.createDiv({cls:"ppb-base-filter-list"}),h=()=>{d.empty(),c.forEach((v,y)=>{const w=d.createDiv({cls:"ppb-base-filter-row"}),D=w.createEl("select",{cls:"ppb-base-filter-type"}),E=[{value:"tag",label:"Has Tag"},{value:"folder",label:"In Folder"},{value:"property",label:"Has Property"}];for(const z of E){const R=D.createEl("option",{text:z.label,value:z.value});z.value===v.type&&(R.selected=!0)}D.addEventListener("change",()=>{v.type=D.value});const T=w.createEl("input",{type:"text",cls:"ppb-base-filter-value",placeholder:v.type==="tag"?"tag name":v.type==="folder"?"folder/path":"property name",value:v.value});T.addEventListener("input",()=>{v.value=T.value}),w.createEl("button",{cls:"ppb-base-filter-remove",text:"×"}).addEventListener("click",()=>{c.splice(y,1),h()})})};h(),u.createEl("button",{cls:"ppb-base-add-filter",text:"+ Add Filter"}).addEventListener("click",()=>{c.push({type:"tag",value:""}),h()}),r.createDiv({cls:"ppb-base-create-action"}).createEl("button",{cls:"ppb-base-create-btn mod-cta",text:"Create Base"}).addEventListener("click",async()=>{if(!o.trim()){new _.Notice("Please enter a base name");return}try{const v=await this.createBaseFile(o.trim(),c,l);this.onChoose(v),this.close(),new _.Notice(`Created base: ${v}`)}catch(v){new _.Notice(`Failed to create base: ${v}`)}})}async createBaseFile(a,r,i){this.app.vault.getFolderByPath("ppb")||await this.app.vault.createFolder("ppb");const l=this.buildBaseYaml(r,i),u=`ppb/${a.replace(/[\\/:*?"<>|]/g,"-")}.base`,d=this.app.vault.getFileByPath(u);return d?await this.app.vault.modify(d,l):await this.app.vault.create(u,l),u}buildBaseYaml(a,r){const i=[];for(const l of a)if(l.value.trim())switch(l.type){case"tag":i.push(` - file.hasTag("${l.value.trim()}")`);break;case"folder":i.push(` - file.inFolder("${l.value.trim()}")`);break;case"property":i.push(` - file.hasProperty("${l.value.trim()}")`);break}let o="";return i.length>0&&(o+=`filters: +`}];function Ui(u,e){const{plugin:t}=u,s=t.getDashboardStore();new w.Setting(e).setName("用户名称").setDesc("设置在仪表板中显示的用户名").addText(n=>{n.setPlaceholder("输入用户名称").setValue(t.settings.userProfile?.name||"").onChange(i=>{s.updateUserProfileSettings({name:i})})}),new w.Setting(e).setName("职位/头衔").setDesc("设置显示的职位或学术头衔").addText(n=>{n.setPlaceholder("输入职位头衔").setValue(t.settings.userProfile?.title||"").onChange(i=>{s.updateUserProfileSettings({title:i})})}),new w.Setting(e).setName("邮箱地址").setDesc("设置联系邮箱,用于展示或导出").addText(n=>{n.setPlaceholder("输入邮箱地址").setValue(t.settings.userProfile?.email||"").onChange(i=>{s.updateUserProfileSettings({email:i})})}),new w.Setting(e).setName("所属机构").setDesc("设置所属的工作单位或研究机构").addText(n=>{n.setPlaceholder("输入所属机构").setValue(t.settings.userProfile?.institution||"").onChange(i=>{s.updateUserProfileSettings({institution:i})})}),new w.Setting(e).setName("头像链接").setDesc("设置头像图片的 URL 地址(支持网络图片)").addText(n=>{n.setPlaceholder("输入头像URL").setValue(t.settings.userProfile?.avatar||"").onChange(i=>{s.updateUserProfileSettings({avatar:i})})})}function Es(u,e){const{plugin:t}=u,s=t.verificationWorker.getLicenseData();if(s&&s.is_active){const r=new DocumentFragment;r.createEl("span",{text:`已登录: ${s.user_name||"已激活账户"}`}),new w.Setting(e).setName("当前账户").setDesc(r).addButton(a=>{a.setButtonText("切换账户").onClick(async()=>{t.settings.registrationId="",await t.saveSettings(),await t.verificationWorker.reloadActivationCode(),e.empty(),Es(u,e),await t.startAccountLogin()})})}else new w.Setting(e).setName("账户登录").setDesc("通过浏览器授权登录以激活许可证").addButton(r=>{r.setButtonText("登录").setCta().onClick(async()=>{await t.startAccountLogin()})});const n=new DocumentFragment;n.createEl("span",{cls:"paperbell-code-desc",text:"输入您的 Paperbell 注册 ID。您可以从这里获取:"},r=>{r.createEl("a",{href:"https://paperbell.cn",text:"https://paperbell.cn"})}),new w.Setting(e).setName("🎓 注册 ID").setDesc(n).addButton(r=>{r.setButtonText("验证").onClick(async()=>{if(await t.verificationWorker.reloadActivationCode(),!await t.verificationWorker.verify())new w.Notice("无效的激活码");else{const o=t.verificationWorker.getLicenseData();if(o){let c="激活码已验证";if(o.expires_at){const l=new Date(o.expires_at);c+=` +过期时间: ${l.toLocaleDateString()}`}o.license_key&&(c+=` +许可证: ${o.license_key}`),new w.Notice(c,8e3)}else new w.Notice("激活码已验证")}e.empty(),Es(u,e)})}).addText(r=>{r.inputEl.type="password",r.setPlaceholder("输入激活码").setValue(t.settings.registrationId).onChange(async a=>{t.settings.registrationId=a,u.saveSettings()})}),t.verificationWorker.verify().then(r=>{if(r)return;const a=e.createDiv({cls:"paperbell-uri-info"});a.createEl("div",{text:"💡 通过控制台快速激活",cls:"setting-item-name"});const o=a.createDiv({cls:"setting-item-description"});o.createEl("p",{text:"您也可以通过点击控制台中的按钮来激活 Paperbell"}),o.createEl("a",{text:"https://paperbell.cn/dashboard",cls:"paperbell-dashboard-link",href:"https://paperbell.cn/dashboard"}).setAttribute("target","_blank"),o.createEl("p",{text:"点击上面的链接访问您的控制台并激活 Paperbell。"})});const i=t.verificationWorker.getLicenseData();if(i){new w.Setting(e).setName("许可证状态").setHeading();const r=e.createDiv({cls:"paperbell-license-info"});if(r.createEl("div",{text:"许可状态: ✅ 已激活",cls:"paperbell-license-status-active"}),i.license_key&&r.createEl("div",{text:`许可密钥: ${i.license_key}`}),i.expires_at){const a=new Date(i.expires_at),o=t.verificationWorker.isLicenseExpiringSoon();r.createEl("div",{text:`过期时间: ${a.toLocaleDateString()}`,cls:o?"paperbell-license-expiring":""}),o&&r.createEl("div",{text:"⚠️ 许可即将过期!",cls:"paperbell-license-warning"})}i.user_name&&r.createEl("div",{text:`授权给: ${i.user_name}`})}new w.Setting(e).setName("📱 设备信息").setDesc("显示当前设备的唯一标识符,用于许可管理").addButton(r=>{const a=t.verificationWorker.getDeviceId();r.setButtonText("复制设备 ID").onClick(()=>{navigator.clipboard.writeText(a).then(()=>{new w.Notice("设备 ID 已复制到剪贴板")}).catch(()=>{new w.Notice(`设备 ID: ${a}`,1e4)})})})}function vi(u,e){const{plugin:t}=u;new w.Setting(e).setName("主题模式").setDesc("切换界面的明亮或暗黑主题模式").addDropdown(s=>{s.addOption("system","跟随系统").addOption("light","浅色模式").addOption("dark","深色模式").setValue(t.settings.themeModePreference||"system").onChange(async n=>{t.settings.themeModePreference=n,u.saveSettings()})}),new w.Setting(e).setName("浅色主题颜色").setHeading(),Ys(e,t.settings.themeColors?.light||Rt,"light",u),new w.Setting(e).setName("深色主题颜色").setHeading(),Ys(e,t.settings.themeColors?.dark||Lt,"dark",u),new w.Setting(e).setName("重置所有颜色").setDesc("将所有自定义颜色恢复为系统默认设置").addButton(s=>{s.setButtonText("重置为默认").setWarning().onClick(async()=>{t.settings.themeColors={light:{...Rt},dark:{...Lt}},u.saveSettings(),e.empty(),vi(u,e)})})}function Ys(u,e,t,s){const{plugin:n}=s,i={primary:"主色调",secondary:"次要色",muted:"柔和色","muted-foreground":"柔和前景色",foreground:"前景色",background:"背景色","ticket-bg-start":"卡片背景起始","ticket-bg-end":"卡片背景结束","ticket-border":"卡片边框","ticket-accent":"卡片强调色","ticket-text":"卡片文字","ticket-text-muted":"卡片柔和文字"};["primary","secondary","foreground","background"].forEach(c=>{new w.Setting(u).setName(i[c]).addColorPicker(l=>{l.setValue(e[c]).onChange(async d=>{n.settings.themeColors||(n.settings.themeColors={light:{...Rt},dark:{...Lt}}),n.settings.themeColors[t][c]=d,s.saveSettings()})})});const a=u.createEl("details",{cls:"paperbell-color-details"});a.createEl("summary",{text:"卡片颜色(高级)"}),["ticket-bg-start","ticket-bg-end","ticket-border","ticket-accent","ticket-text","ticket-text-muted"].forEach(c=>{new w.Setting(a).setName(i[c]).addColorPicker(l=>{l.setValue(e[c]).onChange(async d=>{n.settings.themeColors||(n.settings.themeColors={light:{...Rt},dark:{...Lt}}),n.settings.themeColors[t][c]=d,s.saveSettings()})})})}class Ls extends w.FuzzySuggestModal{constructor(e,t){super(e),this.onChooseCallback=t,this.setPlaceholder("选择文件夹作为数据源...")}getItems(){const e=[];return this.app.vault.getAllLoadedFiles().forEach(s=>{s instanceof w.TFolder&&e.push(s)}),e.sort((s,n)=>s.path.localeCompare(n.path)),e}getItemText(e){return e.path||"/"}onChooseItem(e,t){this.onChooseCallback(e)}renderSuggestion(e,t){const s=e.item,n=t.createDiv({cls:"folder-selector-item"}),i=n.createSpan({cls:"folder-selector-icon"});i.setText("📁"),i.style.marginRight="8px",n.createSpan({cls:"folder-selector-path"}).setText(s.path||"/");const a=this.getFolderStats(s);if(a.fileCount>0){const o=n.createSpan({cls:"folder-selector-stats"});o.setText(`(${a.fileCount} 个文件)`),o.style.marginLeft="8px",o.style.fontSize="0.9em",o.style.opacity="0.7"}n.style.display="flex",n.style.alignItems="center",n.style.padding="4px"}getFolderStats(e){let t=0;const s=n=>{n.children.forEach(i=>{i instanceof w.TFolder?s(i):t++})};return s(e),{fileCount:t}}}const Ks={projects:{title:"Projects",icon:"folder-kanban",defaultTag:"project"},papers:{title:"Papers",icon:"file-text",defaultTag:"paper"},experiments:{title:"Experiments",icon:"flask-conical",defaultTag:"experiment"},tasks:{title:"Tasks",icon:"target",defaultTag:"task"},resources:{title:"Resources",icon:"bookmark",defaultTag:"resource"},books:{title:"Books",icon:"book-open",defaultTag:"book"},literature:{title:"Recent Literature",icon:"book-open",defaultTag:"literature"}},Wi=[{value:"table",label:"Table"},{value:"cards",label:"Cards"},{value:"list",label:"List"}];class ks extends w.Modal{constructor(e,t,s,n){super(e),this.searchInput=null,this.baseFileList=null,this.plugin=t,this.containerType=s,this.onChoose=n}onOpen(){const{contentEl:e}=this;e.empty(),e.addClass("ppb-base-selector-modal");const t=Ks[this.containerType],s=e.createDiv({cls:"ppb-base-modal-title"}),n=s.createSpan({cls:"ppb-base-modal-icon"});w.setIcon(n,t.icon),s.createEl("h2",{text:`Configure ${t.title} Base`}),this.renderExistingBaseSection(e),e.createDiv({cls:"ppb-base-modal-divider"}).createEl("span",{text:"OR CREATE NEW"}),this.renderCreateBaseSection(e)}renderExistingBaseSection(e){const t=e.createDiv({cls:"ppb-base-modal-section"});t.createEl("h3",{text:"Select Existing Base"});const s=t.createDiv({cls:"ppb-base-search"});this.searchInput=s.createEl("input",{type:"text",placeholder:"Search .base files...",cls:"ppb-base-search-input"}),this.baseFileList=t.createDiv({cls:"ppb-base-file-list"}),this.refreshBaseFileList(""),this.searchInput.addEventListener("input",()=>{this.refreshBaseFileList(this.searchInput?.value||"")})}refreshBaseFileList(e){if(!this.baseFileList)return;this.baseFileList.empty();const t=this.app.vault.getFiles().filter(s=>s.extension==="base").filter(s=>e?s.path.toLowerCase().includes(e.toLowerCase()):!0).sort((s,n)=>n.stat.mtime-s.stat.mtime);if(t.length===0){this.baseFileList.createDiv({cls:"ppb-base-empty-list"}).setText(e?"No .base files match your search":"No .base files found in vault");return}for(const s of t){const n=this.baseFileList.createDiv({cls:"ppb-base-file-item"}),i=n.createSpan({cls:"ppb-base-file-icon"});w.setIcon(i,"database");const r=n.createDiv({cls:"ppb-base-file-info"});r.createEl("span",{text:s.basename,cls:"ppb-base-file-name"}),r.createEl("span",{text:s.parent?.path||"/",cls:"ppb-base-file-path"}),n.addEventListener("click",()=>{this.onChoose(s.path),this.close()})}}renderCreateBaseSection(e){const t=e.createDiv({cls:"ppb-base-modal-section"});t.createEl("h3",{text:"Create New Base"});const s=Ks[this.containerType];let n=this.containerType,i="table";const r=[{type:"tag",value:s.defaultTag}];new w.Setting(t).setName("Base name").setDesc("Name for the .base file (saved in ppb/ folder)").addText(h=>{h.setValue(n).setPlaceholder("e.g. my-papers").onChange(g=>{n=g})}),new w.Setting(t).setName("Default view").setDesc("How the data will be displayed").addDropdown(h=>{for(const g of Wi)h.addOption(g.value,g.label);h.setValue(i),h.onChange(g=>{i=g})});const a=t.createDiv({cls:"ppb-base-filters"});a.createEl("h4",{text:"Filters"});const o=a.createDiv({cls:"ppb-base-filter-list"}),c=()=>{o.empty(),r.forEach((h,g)=>{const p=o.createDiv({cls:"ppb-base-filter-row"}),y=p.createEl("select",{cls:"ppb-base-filter-type"}),v=[{value:"tag",label:"Has Tag"},{value:"folder",label:"In Folder"},{value:"property",label:"Has Property"}];for(const C of v){const T=y.createEl("option",{text:C.label,value:C.value});C.value===h.type&&(T.selected=!0)}y.addEventListener("change",()=>{h.type=y.value});const E=p.createEl("input",{type:"text",cls:"ppb-base-filter-value",placeholder:h.type==="tag"?"tag name":h.type==="folder"?"folder/path":"property name",value:h.value});E.addEventListener("input",()=>{h.value=E.value}),p.createEl("button",{cls:"ppb-base-filter-remove",text:"×"}).addEventListener("click",()=>{r.splice(g,1),c()})})};c(),a.createEl("button",{cls:"ppb-base-add-filter",text:"+ Add Filter"}).addEventListener("click",()=>{r.push({type:"tag",value:""}),c()}),t.createDiv({cls:"ppb-base-create-action"}).createEl("button",{cls:"ppb-base-create-btn mod-cta",text:"Create Base"}).addEventListener("click",async()=>{if(!n.trim()){new w.Notice("Please enter a base name");return}try{const h=await this.createBaseFile(n.trim(),r,i);this.onChoose(h),this.close(),new w.Notice(`Created base: ${h}`)}catch(h){new w.Notice(`Failed to create base: ${h}`)}})}async createBaseFile(e,t,s){this.app.vault.getFolderByPath("ppb")||await this.app.vault.createFolder("ppb");const i=this.buildBaseYaml(t,s),a=`ppb/${e.replace(/[\\/:*?"<>|]/g,"-")}.base`,o=this.app.vault.getFileByPath(a);return o?await this.app.vault.modify(o,i):await this.app.vault.create(a,i),a}buildBaseYaml(e,t){const s=[];for(const i of e)if(i.value.trim())switch(i.type){case"tag":s.push(` - file.hasTag("${i.value.trim()}")`);break;case"folder":s.push(` - file.inFolder("${i.value.trim()}")`);break;case"property":s.push(` - file.hasProperty("${i.value.trim()}")`);break}let n="";return s.length>0&&(n+=`filters: and: -${i.join(` +${s.join(` `)} -`),o+=`views: -`,o+=` - type: ${r} -`,o+=` name: "${r.charAt(0).toUpperCase()+r.slice(1)}" -`,o+=` order: -`,o+=` - file.name -`,o+=` - status -`,o+=` - tags -`,o}onClose(){const{contentEl:a}=this;a.empty()}}const Pw=[{id:"academic",name:"学术组件"},{id:"project",name:"项目组件"},{id:"personal",name:"个人组件"}],Tw={projectBaseManager:"projects",papersManager:"papers",experimentsManager:"experiments",tasksManager:"tasks",resourcesManager:"resources",bookShelf:"books"},Nw=["academicOverview","todayFocus"],Iw=["recentLiterature","researchFocusMap"],Aw=[{key:"academicOverview",name:"学术概览",desc:"展示学术研究的整体概况和统计信息",category:"academic"},{key:"todayFocus",name:"今日聚焦",desc:"显示今天需要关注的重要任务和事项",category:"academic"},{key:"recentLiterature",name:"最近文献",desc:"自动展示最新文献(数据来源于文献设置中的文件夹路径)",category:"academic"},{key:"researchFocusMap",name:"研究焦点地图",desc:"展示研究领域和关注重点(数据来源于追踪标签配置)",category:"academic"},{key:"projectBaseManager",name:"项目管理(默认配置)",desc:"其他项目组件未配置时的后备数据源,优先级低于具体组件配置",category:"project"},{key:"papersManager",name:"研究论文",desc:"管理论文写作、审核状态和发表进度",category:"project"},{key:"experimentsManager",name:"实验数据",desc:"管理实验设计、数据收集和结果分析",category:"project"},{key:"tasksManager",name:"科研课题",desc:"管理课题、任务分解和进度跟踪",category:"project"},{key:"resourcesManager",name:"学术资源",desc:"管理文献、工具、数据集和参考资料",category:"project"},{key:"bookShelf",name:"书架",desc:"展示个人图书收藏和阅读进度",category:"personal"}];let Ms="academic";function Fw(f,a){const{plugin:r}=f,i=a.createDiv({cls:"ppb-component-tabs"}),o=a.createDiv({cls:"ppb-component-tab-content"});Pw.forEach(c=>{const u=i.createEl("button",{text:c.name,cls:"ppb-component-tab-btn"});c.id===Ms&&u.addClass("is-active"),u.addEventListener("click",()=>{Ms=c.id,i.querySelectorAll(".ppb-component-tab-btn").forEach(d=>{d.removeClass("is-active")}),u.addClass("is-active"),Sc(f,o,c.id)})}),Sc(f,o,Ms);const l=a.createDiv({cls:"ppb-component-footer"});new _.Setting(l).setName("重置所有组件配置").setDesc("将所有组件的数据源配置重置为默认值").addButton(c=>{c.setButtonText("重置为默认").setWarning().onClick(async()=>{r.settings.componentDataSources={...mr},f.saveSettings(),Sc(f,o,Ms),new _.Notice("已重置所有组件配置为默认值")})})}function Sc(f,a,r){a.empty(),Aw.filter(o=>o.category===r).forEach(o=>{Lw(f,a,o.key,o.name,o.desc)})}function Lw(f,a,r,i,o){const{plugin:l}=f;if(!Um(l,r))return;const u=a.createDiv({cls:"ppb-component-section"});Na(f,u,r,i,o)}function Na(f,a,r,i,o){a.empty();const{plugin:l}=f,c=Um(l,r);if(!c)return;const u=a.createDiv({cls:"ppb-component-header"});u.createEl("h4",{text:c.displayName||i}),u.createEl("p",{text:c.description||o,cls:"ppb-component-desc"});const d=a.createDiv({cls:"ppb-component-settings"});new _.Setting(d).setName("基本信息").setHeading(),new _.Setting(d).setName("显示名称").setDesc("设置该组件在界面显示的标题").addText(m=>m.setPlaceholder(i).setValue(c.displayName||i).onChange(async b=>{Nt(f,r,{displayName:b})})),new _.Setting(d).setName("描述").setDesc("设置该组件在界面显示的说明文字").addText(m=>m.setPlaceholder(o).setValue(c.description||o).onChange(async b=>{Nt(f,r,{description:b})}));const h=Tw[r];h?zw(f,d,r,h,a,i,o):Nw.includes(r)?(new _.Setting(d).setName("数据源").setHeading(),new _.Setting(d).setName("自动获取").setDesc(r==="academicOverview"?"数据由插件自动从 Vault 中统计(写作字数、文献数量、笔记数量等)":"数据由插件自动从 Vault 中分析(今日阅读时长、写作字数、文献笔记等)")):Iw.includes(r)?r==="recentLiterature"&&Rw(f,d):(new _.Setting(d).setName("数据源配置").setHeading(),Ow(f,d,r,c)),Mw(f,d,r,c,a,i,o),new _.Setting(d).addButton(m=>m.setButtonText("重置此组件").onClick(async()=>{const b=mr[r];b&&(l.settings.componentDataSources||(l.settings.componentDataSources={...mr}),l.settings.componentDataSources[r]={...b},f.saveSettings(),Na(f,a,r,i,o),new _.Notice(`已重置 ${i} 配置`))}))}function zw(f,a,r,i,o,l,c){const{plugin:u}=f,d=u.settings.baseContainerPaths?.[i]||null;if(new _.Setting(a).setName("Base 数据源").setHeading(),d){const h=u.app.vault.getFileByPath(d),m=new _.Setting(a).setName("当前 Base 文件").setDesc(d);if(m.addButton(b=>b.setIcon("edit").setTooltip("编辑 Base 文件").onClick(async()=>{h?(await u.app.workspace.getLeaf(!1).openFile(h),new _.Notice(`已打开: ${d}`)):new _.Notice(`文件不存在: ${d}`)})),m.addButton(b=>b.setIcon("settings").setTooltip("更换 Base").onClick(()=>{new Nu(u.app,u,i,async k=>{u.settings.baseContainerPaths||(u.settings.baseContainerPaths={projects:null,papers:null,experiments:null,tasks:null,resources:null,books:null,literature:null}),u.settings.baseContainerPaths[i]=k,await u.saveSettings(),Na(f,o,r,l,c),new _.Notice(`已更换 Base: ${k}`)}).open()})),m.addButton(b=>b.setIcon("x").setTooltip("清除 Base 配置").setWarning().onClick(async()=>{u.settings.baseContainerPaths&&(u.settings.baseContainerPaths[i]=null,await u.saveSettings(),Na(f,o,r,l,c),new _.Notice("已清除 Base 配置"))})),!h){const b=a.createDiv({cls:"ppb-base-config-warning"});_.setIcon(b.createSpan(),"alert-triangle"),b.createSpan({text:" Base 文件不存在,请重新配置"})}}else new _.Setting(a).setName("未配置 Base").setDesc("点击配置按钮选择或创建一个 .base 文件").addButton(h=>h.setButtonText("配置 Base").setCta().onClick(()=>{new Nu(u.app,u,i,async m=>{u.settings.baseContainerPaths||(u.settings.baseContainerPaths={projects:null,papers:null,experiments:null,tasks:null,resources:null,books:null,literature:null}),u.settings.baseContainerPaths[i]=m,await u.saveSettings(),Na(f,o,r,l,c),new _.Notice(`已配置 Base: ${m}`)}).open()}))}function Rw(f,a,r,i,o){const{plugin:l}=f,c=l.settings.componentDataSources?.recentLiterature||{},u=c.literatureFolderPath||"Inputs/Zotero",d=c.literatureDisplaySettings||{titleWrap:!0,authorWrap:!0,keywordsWrap:!0,tagsWrap:!0};new _.Setting(a).setName("数据源").setHeading();let h=null;new _.Setting(a).setName("文献文件夹路径").setDesc("文献笔记所在的文件夹,用于生成 Base 视图查询").addText(m=>{h=m,m.setPlaceholder("例如: Inputs/Zotero").setValue(u).onChange(async b=>{Nt(f,"recentLiterature",{literatureFolderPath:b})})}).addButton(m=>m.setIcon("folder").setTooltip("浏览文件夹").onClick(()=>{new Uu(l.app,k=>{Nt(f,"recentLiterature",{literatureFolderPath:k.path}),h&&h.setValue(k.path),new _.Notice(`已配置文献文件夹: ${k.path}`)}).open()})),new _.Setting(a).setName("文献显示设置").setHeading(),new _.Setting(a).setName("标题自动换行").setDesc("允许长标题在列表中自动换行显示,避免截断").addToggle(m=>{m.setValue(d.titleWrap??!0).onChange(b=>{Nt(f,"recentLiterature",{literatureDisplaySettings:{...d,titleWrap:b}})})}),new _.Setting(a).setName("作者自动换行").setDesc("允许作者列表自动换行显示").addToggle(m=>{m.setValue(d.authorWrap??!0).onChange(b=>{Nt(f,"recentLiterature",{literatureDisplaySettings:{...d,authorWrap:b}})})}),new _.Setting(a).setName("关键词自动换行").setDesc("允许关键词列表自动换行显示").addToggle(m=>{m.setValue(d.keywordsWrap??!0).onChange(b=>{Nt(f,"recentLiterature",{literatureDisplaySettings:{...d,keywordsWrap:b}})})}),new _.Setting(a).setName("标签自动换行").setDesc("允许标签列表自动换行显示").addToggle(m=>{m.setValue(d.tagsWrap??!0).onChange(b=>{Nt(f,"recentLiterature",{literatureDisplaySettings:{...d,tagsWrap:b}})})})}function Ow(f,a,r,i,o,l,c){const{plugin:u}=f;let d=null;new _.Setting(a).setName("文件夹路径").setDesc("指定组件读取数据的源文件夹").addText(h=>{d=h,h.setPlaceholder("例如: Projects/Research").setValue(i.folderPath||"").onChange(async m=>{Nt(f,r,{folderPath:m})})}).addButton(h=>h.setIcon("folder").setTooltip("浏览文件夹").onClick(()=>{new Uu(u.app,b=>{Nt(f,r,{folderPath:b.path,type:"folder",recursive:!0}),d&&d.setValue(b.path),new _.Notice(`已配置文件夹数据源: ${b.path}`)}).open()})),new _.Setting(a).setName("递归搜索").setDesc("开启后将包含子文件夹中的文件").addToggle(h=>h.setValue(i.recursive??!0).onChange(async m=>{Nt(f,r,{recursive:m})})),new _.Setting(a).setName("文件扩展名过滤").setDesc("仅包含指定扩展名的文件(如 md, canvas)").addText(h=>h.setPlaceholder("md").setValue(i.fileFilter?.extensions?.join(", ")||"").onChange(async m=>{const b=m.split(",").map(k=>k.trim()).filter(Boolean);Nt(f,r,{fileFilter:{...i.fileFilter,extensions:b}})}))}function Mw(f,a,r,i,o,l,c){if(r==="researchFocusMap"){new _.Setting(a).setName("追踪标签设置").setHeading();const u=a.createDiv({cls:"ppb-tags-container"}),d=i.trackingTags||[];if(d.length>0){const m=u.createDiv({cls:"ppb-tags-list"});d.forEach(b=>{const k=m.createDiv({cls:"ppb-tag-item"});k.createSpan({text:`#${b}`}),k.createEl("button",{cls:"clickable-icon ppb-tag-remove"},y=>{_.setIcon(y,"cross")}).addEventListener("click",()=>{const y=d.filter(w=>w!==b);Nt(f,r,{trackingTags:y}),Na(f,o,r,l,c)})})}else u.createEl("p",{text:"暂无标签,请添加要追踪的标签",cls:"ppb-tags-empty"});let h="";new _.Setting(a).setName("添加标签").setDesc("输入标签名称(不需要 #)").addText(m=>m.setPlaceholder("如: research").onChange(b=>{h=b})).addButton(m=>m.setButtonText("添加").onClick(()=>{const b=h.trim().replace(/^#/,"");b&&!d.includes(b)&&(Nt(f,r,{trackingTags:[...d,b]}),Na(f,o,r,l,c))})),new _.Setting(a).setName("网格设置").setHeading(),new _.Setting(a).setName("网格大小").setDesc("调整研究焦点地图中格子的显示尺寸").addSlider(m=>{m.setLimits(20,100,5).setValue(i.gridSize??50).setDynamicTooltip().onChange(b=>{Nt(f,r,{gridSize:b})})}),new _.Setting(a).setName("圆角半径").setDesc("调整研究焦点地图中格子的圆角弧度").addSlider(m=>{m.setLimits(0,20,1).setValue(i.borderRadius??4).setDynamicTooltip().onChange(b=>{Nt(f,r,{borderRadius:b})})})}}function Um(f,a){return f.settings.componentDataSources||(f.settings.componentDataSources={...mr}),f.settings.componentDataSources[a]||mr[a]||null}function Nt(f,a,r){const{plugin:i}=f;i.settings.componentDataSources||(i.settings.componentDataSources={...mr});const o=i.settings.componentDataSources[a]||mr[a];i.settings.componentDataSources[a]={...o,...r},f.saveSettings(),i.getDashboardStore().bumpSettingsVersion()}function oa(f,a){const{plugin:r}=f;r.verificationWorker.verify().then(i=>{if(!i){const o=a.createDiv({cls:"paperbell-updater-warning"});o.createEl("p",{text:"⚠️ 此功能需要激活许可证"}),o.createEl("p",{text:"请先在「许可证」页面激活您的 PaperBell Pro 许可证。"}),new _.Setting(o).addButton(l=>{l.setButtonText("前往激活").onClick(()=>{f.openTab("license")})});return}$w(f,a)})}function $w(f,a){const{plugin:r}=f;if(new _.Setting(a).setName("启用 PaperBell 仓库更新程序").setDesc("启用手动检查和更新 PaperBell 仓库的功能").addToggle(d=>{d.setValue(r.settings.enableUpdater).onChange(async h=>{r.settings.enableUpdater=h,f.saveSettings(),a.empty(),oa(f,a)})}),!r.settings.enableUpdater)return;new _.Setting(a).setName("当前 PaperBell 仓库版本").setDesc("显示当前安装的 PaperBell 仓库版本号").addButton(d=>{d.setButtonText(r.updater?.lastUpdateInfo?.latestVersion||"0.0.0"),d.setDisabled(!0)}),new _.Setting(a).setName("更新范围设置").setHeading(),Gt(r);const i=r.settings.updater.updateScope||{};new _.Setting(a).setName("更新常规文件").setDesc("更新 .md、图片等常规内容文件").addToggle(d=>{d.setValue(i.regularFiles!==!1).onChange(async h=>{Gt(r),r.settings.updater.updateScope={...r.settings.updater.updateScope,regularFiles:h},f.saveSettings()})}),new _.Setting(a).setName("更新 Obsidian 核心配置").setDesc("更新 .obsidian 下的配置文件 (app.json 等)").addToggle(d=>{d.setValue(i.obsidianCore!==!1).onChange(async h=>{Gt(r),r.settings.updater.updateScope={...r.settings.updater.updateScope,obsidianCore:h},f.saveSettings()})}),new _.Setting(a).setName("更新插件程序").setDesc("更新 .obsidian/plugins 下的插件文件").addToggle(d=>{d.setValue(i.plugins!==!1).onChange(async h=>{Gt(r),r.settings.updater.updateScope={...r.settings.updater.updateScope,plugins:h},f.saveSettings()})}),new _.Setting(a).setName("更新外观主题").setDesc("更新 .obsidian/themes 下的主题文件").addToggle(d=>{d.setValue(i.themes!==!1).onChange(async h=>{Gt(r),r.settings.updater.updateScope={...r.settings.updater.updateScope,themes:h},f.saveSettings()})}),new _.Setting(a).setName("更新 CSS 片段").setDesc("更新 .obsidian/snippets 下的样式文件").addToggle(d=>{d.setValue(i.snippets!==!1).onChange(async h=>{Gt(r),r.settings.updater.updateScope={...r.settings.updater.updateScope,snippets:h},f.saveSettings()})}),new _.Setting(a).setName("重置插件配置 (data.json)").setDesc("⚠️ 警告:开启后将覆盖插件的本地配置(包括本插件)").addToggle(d=>{d.setValue(i.pluginData===!0).onChange(async h=>{Gt(r),r.settings.updater.updateScope={...r.settings.updater.updateScope,pluginData:h},f.saveSettings()})}),new _.Setting(a).setName("Obsidian 冲突处理").setHeading();const o=[{value:"prompt",label:"提示冲突"},{value:"skip",label:"跳过冲突"},{value:"ignore",label:"忽略冲突"},{value:"no_merge",label:"不合并"}];new _.Setting(a).setName("设置冲突处理").setDesc("设置更新时配置文件发生冲突的处理策略").addDropdown(d=>{o.forEach(h=>d.addOption(h.value,h.label)),d.setValue(r.settings.updater?.obsidianConflictHandling?.settings||"prompt").onChange(async h=>{Gt(r),r.settings.updater.obsidianConflictHandling.settings=h,f.saveSettings()})}),new _.Setting(a).setName("主题冲突处理").setDesc("设置更新时主题文件发生冲突的处理策略").addDropdown(d=>{o.forEach(h=>d.addOption(h.value,h.label)),d.setValue(r.settings.updater?.obsidianConflictHandling?.themes||"prompt").onChange(async h=>{Gt(r),r.settings.updater.obsidianConflictHandling.themes=h,f.saveSettings()})}),new _.Setting(a).setName("样式片段冲突处理").setDesc("设置更新时 CSS 片段发生冲突的处理策略").addDropdown(d=>{o.forEach(h=>d.addOption(h.value,h.label)),d.setValue(r.settings.updater?.obsidianConflictHandling?.snippets||"prompt").onChange(async h=>{Gt(r),r.settings.updater.obsidianConflictHandling.snippets=h,f.saveSettings()})}),new _.Setting(a).setName("插件冲突处理").setDesc("设置更新时插件文件发生冲突的处理策略").addDropdown(d=>{o.forEach(h=>d.addOption(h.value,h.label)),d.setValue(r.settings.updater?.obsidianConflictHandling?.plugins||"prompt").onChange(async h=>{Gt(r),r.settings.updater.obsidianConflictHandling.plugins=h,f.saveSettings()})}),new _.Setting(a).setName("排除模式").setDesc("配置不需要更新的文件路径匹配模式").addButton(d=>{d.setButtonText("添加").setIcon("plus").onClick(()=>{Gt(r),r.settings.updater.excludePatterns=r.settings.updater.excludePatterns||[],r.settings.updater.excludePatterns.push(""),f.saveSettings(),a.empty(),oa(f,a)})}),(r.settings.updater?.excludePatterns||[]).forEach((d,h)=>{new _.Setting(a).setName(`排除模式 ${h+1}`).addText(m=>{m.setPlaceholder("e.g. **/*.js").setValue(d).onChange(b=>{r.settings.updater?.excludePatterns&&(r.settings.updater.excludePatterns[h]=b,f.saveSettings())})}).addExtraButton(m=>{m.setIcon("trash").setTooltip("删除").onClick(()=>{r.settings.updater?.excludePatterns&&(r.settings.updater.excludePatterns.splice(h,1),f.saveSettings(),a.empty(),oa(f,a))})})}),new _.Setting(a).setName("自定义替换").setDesc("配置更新前自动执行的文本替换规则,按顺序应用").setHeading().addButton(d=>{d.setButtonText("添加").setIcon("plus").onClick(()=>{Gt(r),r.settings.updater.customReplacements=r.settings.updater.customReplacements||{};const h=`pattern-${Object.keys(r.settings.updater.customReplacements).length}`;r.settings.updater.customReplacements[h]="",f.saveSettings(),a.empty(),oa(f,a)})});const c=r.settings.updater?.customReplacements||{},u=Object.keys(c);u.forEach((d,h)=>{const m=a.createDiv({cls:"paperbell-replacement-item"}),b=m.createDiv({cls:"paperbell-replacement-fields"});b.createEl("input",{type:"text",value:d,placeholder:"搜索模式"}).addEventListener("change",T=>{const A=d,z=T.target.value;if(A!==z&&r.settings.updater?.customReplacements){const R=r.settings.updater.customReplacements[A];delete r.settings.updater.customReplacements[A],r.settings.updater.customReplacements[z]=R,f.saveSettings()}}),b.createEl("input",{type:"text",value:c[d],placeholder:"替换文本"}).addEventListener("change",T=>{r.settings.updater?.customReplacements&&(r.settings.updater.customReplacements[d]=T.target.value,f.saveSettings())});const y=m.createDiv({cls:"paperbell-replacement-buttons"}),w=y.createEl("span",{cls:"clickable-icon",attr:{"aria-label":"上移"}});_.setIcon(w,"arrow-up"),h===0&&w.addClass("is-disabled"),w.addEventListener("click",()=>{if(h>0&&r.settings.updater?.customReplacements){const T={};u.forEach((A,z)=>{z===h-1?T[d]=c[d]:z===h?T[u[h-1]]=c[u[h-1]]:T[A]=c[A]}),r.settings.updater.customReplacements=T,f.saveSettings(),a.empty(),oa(f,a)}});const D=y.createEl("span",{cls:"clickable-icon",attr:{"aria-label":"下移"}});_.setIcon(D,"arrow-down"),h===u.length-1&&D.addClass("is-disabled"),D.addEventListener("click",()=>{if(h{z===h?T[u[h+1]]=c[u[h+1]]:z===h+1?T[d]=c[d]:T[A]=c[A]}),r.settings.updater.customReplacements=T,f.saveSettings(),a.empty(),oa(f,a)}});const E=y.createEl("span",{cls:"clickable-icon",attr:{"aria-label":"删除"}});_.setIcon(E,"trash"),E.addEventListener("click",()=>{r.settings.updater?.customReplacements&&(delete r.settings.updater.customReplacements[d],f.saveSettings(),a.empty(),oa(f,a))})})}function Gt(f){f.settings.updater||(f.settings.updater={repository:""}),f.settings.updater.obsidianConflictHandling||(f.settings.updater.obsidianConflictHandling={}),f.settings.updater.updateScope||(f.settings.updater.updateScope={regularFiles:!0,obsidianCore:!0,plugins:!0,themes:!0,snippets:!0,pluginData:!1})}function Bw(f,a){const{plugin:r}=f;new _.Setting(a).setName("新机构笔记位置").setDesc("指定新创建机构笔记的存放目录").addText(i=>{i.setPlaceholder("输入位置").setValue(r.settings.noteLocation).onChange(async o=>{r.settings.noteLocation=o,f.saveSettings()})}),new _.Setting(a).setName("机构笔记模板").setDesc("选择创建机构笔记时使用的模板文件").addText(i=>{new jw(r.app,i.inputEl,o=>{r.settings.institutionNoteTemplate=o,f.saveSettings()}),i.setPlaceholder("输入模板").setValue(r.settings.institutionNoteTemplate).onChange(async o=>{r.settings.institutionNoteTemplate=o,f.saveSettings()})}),new _.Setting(a).setName("自动生成机构笔记").setDesc("导入数据时自动检测并创建缺失的机构笔记").addToggle(i=>{i.setValue(r.settings.autoGenerateInstitutionNotes).onChange(async o=>{r.settings.autoGenerateInstitutionNotes=o,f.saveSettings()})}),new _.Setting(a).setName("创建后打开机构笔记").setDesc("笔记创建完成后自动打开编辑窗口").addToggle(i=>{i.setValue(r.settings.openInstitutionAfterCreation).onChange(async o=>{r.settings.openInstitutionAfterCreation=o,f.saveSettings()})}),new _.Setting(a).setName("监听文件创建路径").setDesc("监控指定路径下的新文件以自动生成关联笔记").addText(i=>{i.setPlaceholder("输入位置").setValue(r.settings.listenToFileCreatedInPath).onChange(async o=>{r.settings.listenToFileCreatedInPath=o,f.saveSettings()})})}class jw extends _.AbstractInputSuggest{constructor(a,r,i){super(a,r),this.inputEl=r,this.onChange=i}getSuggestions(a){const r=this.app.vault.getMarkdownFiles();if(!a)return r;const i=_.prepareFuzzySearch(a.toLowerCase());return r.map(l=>{const c=l.path.slice(0,-3).toLowerCase(),u=i(c);return{file:l,result:u}}).filter(l=>l.result!==null).sort((l,c)=>c.result.score-l.result.score).map(l=>l.file)}renderSuggestion(a,r){r.setText(a.basename)}selectSuggestion(a,r){const i=a.path.slice(0,-3);this.setValue(i),this.onChange(i),this.close()}}function Uw(f,a){const{plugin:r}=f;new _.Setting(a).setName("版本").setDesc(`PaperBell v${r.manifest.version}`),new _.Setting(a).setName("文档").setDesc("浏览插件的详细使用文档").addButton(i=>{i.setButtonText("打开文档").onClick(()=>{window.open("https://paperbell.cn")})}),new _.Setting(a).setName("GitHub").setDesc("访问 GitHub 仓库查看源码或提交问题").addButton(i=>{i.setButtonText("打开 GitHub").onClick(()=>{window.open("https://github.com/PaperBell-Org/Obsidian-PaperBell")})}),new _.Setting(a).setName("支持").setDesc("支持插件的持续开发").addButton(i=>{i.setButtonText("支持开发").onClick(()=>{window.open("https://paperbell.cn")})}),new _.Setting(a).setName("联系我们").setDesc("发送邮件联系开发团队").addButton(i=>{i.setButtonText("发送邮件").onClick(()=>{window.open("mailto:support@paperbell.cn")})}),new _.Setting(a).setName("引导向导").setDesc("重新启动欢迎引导和设置向导").addButton(i=>{i.setButtonText("重新开始引导").setIcon("graduation-cap").onClick(async()=>{r.settings.landing={...la},await r.saveSettings(),f.close(),r.app.workspace.getLeaf().setViewState({type:hi})})})}const Vm="ppb-builtin-";function Vw(f){return gi.find(a=>a.id===f.agentType)??gi[0]}function Iu(f,a,r){return r==="directory"?_.normalizePath(`${f}/${a}/SKILL.md`):_.normalizePath(`${f}/${a}.md`)}function Wm(f,a){return _.normalizePath(`${f}/${a}`)}async function Vu(f,a){const r=a??ju,i=f.vault.adapter,o=_.normalizePath(r.skillsDirectory),l=Vw(r);await i.exists(o)||await i.mkdir(o);for(const c of vi){const u=r.builtinSkillStates[c.id]!==!1,d=Iu(o,c.id,l.skillFormat);if(u){if(l.skillFormat==="directory"){const h=Wm(o,c.id);await i.exists(h)||await i.mkdir(h)}await i.write(d,c.content)}else await Ww(i,o,c.id,l.skillFormat)}l.skillFormat==="directory"&&await Hw(i,o)}async function Ww(f,a,r,i){if(i==="directory"){const o=Iu(a,r,"directory");await f.exists(o)&&await f.remove(o);const l=Wm(a,r);await f.exists(l)&&await f.rmdir(l,!1)}else{const o=Iu(a,r,"flat");await f.exists(o)&&await f.remove(o)}}async function Hw(f,a){for(const r of vi){const i=_.normalizePath(`${a}/${Vm}${r.id}.md`);await f.exists(i)&&await f.remove(i)}}async function qw(f,a){const r=f.vault.adapter,i=_.normalizePath(a);if(await r.exists(i))for(const o of vi){const l=_.normalizePath(`${i}/${o.id}/SKILL.md`);await r.exists(l)&&await r.remove(l);const c=_.normalizePath(`${i}/${o.id}`);await r.exists(c)&&await r.rmdir(c,!1);const u=_.normalizePath(`${i}/${o.id}.md`);await r.exists(u)&&await r.remove(u);const d=_.normalizePath(`${i}/${Vm}${o.id}.md`);await r.exists(d)&&await r.remove(d)}}class Gw extends _.Modal{constructor(a,r,i){super(a),this.skillName=r,this.skillContent=i}onOpen(){const{contentEl:a,modalEl:r}=this;r.addClass("mod-narrow"),a.createEl("h2",{text:this.skillName});const i=a.createDiv({cls:"paperbell-skill-preview"});i.style.cssText="max-height: 60vh; overflow-y: auto; padding: 12px; background: var(--background-secondary); border-radius: 6px; font-size: 13px; line-height: 1.5; white-space: pre-wrap; font-family: var(--font-monospace);",i.setText(this.skillContent),new _.Setting(a).addButton(o=>o.setButtonText("关闭").onClick(()=>this.close()))}onClose(){this.contentEl.empty()}}function Ys(f,a){const{plugin:r}=f;r.settings.aiSkills||(r.settings.aiSkills={...ju});const i=r.settings.aiSkills;Zw(f,a,i),Yw(f,a,i),Kw(f,a,i)}function Zw(f,a,r){new _.Setting(a).setName("AI Agent").setHeading(),gi.find(i=>i.id===r.agentType),new _.Setting(a).setName("当前 Agent").setDesc("选择你使用的 AI 编程工具,技能文件将安装到对应的目录中").addDropdown(i=>{for(const o of gi)i.addOption(o.id,o.name);i.setValue(r.agentType).onChange(async o=>{const l=o,c=r.agentType;if(l===c)return;const u=gi.find(b=>b.id===l),d=r.skillsDirectory,h=u.skillsDirectory;r.marketplaceSkills.some(b=>b.installed)&&d!==h&&await Xw(f,d,h)&&await Jw(f,r,d,h),await qw(f.plugin.app,d),r.agentType=l,r.skillsDirectory=h,f.saveSettings(),await Vu(f.plugin.app,r),a.empty(),Ys(f,a)})}),new _.Setting(a).setName("技能文件目录").setDesc(r.skillsDirectory).setDisabled(!0)}function Yw(f,a,r){if(new _.Setting(a).setName("内置技能").setHeading(),vi.length===0){a.createEl("p",{text:"暂无内置技能",cls:"setting-item-description"});return}for(const i of vi){const o=r.builtinSkillStates[i.id]!==!1;new _.Setting(a).setName(i.name).setDesc(i.description).addToggle(c=>c.setValue(o).onChange(async u=>{r.builtinSkillStates[i.id]=u,f.saveSettings(),await Vu(f.plugin.app,r)})).addExtraButton(c=>c.setIcon("eye").setTooltip("预览技能内容").onClick(()=>{new Gw(f.plugin.app,i.name,i.content).open()}))}}function Kw(f,a,r){new _.Setting(a).setName("技能市场").setHeading();const i=a.createDiv({cls:"paperbell-marketplace-placeholder"});i.style.cssText="padding: 24px; text-align: center; border: 1px dashed var(--background-modifier-border); border-radius: 8px; margin-bottom: 12px;";const o=i.createDiv();if(o.style.cssText="margin-bottom: 8px;",_.setIcon(o,"store"),o.style.cssText+="display: flex; justify-content: center; opacity: 0.5;",i.createEl("p",{text:"技能市场即将上线"}).style.cssText="font-weight: 600; margin-bottom: 4px; color: var(--text-normal);",i.createEl("p",{text:"届时您可以在此浏览和安装来自社区的第三方技能"}).style.cssText="font-size: 13px; color: var(--text-muted); margin: 0;",r.marketplaceSkills.length>0){new _.Setting(a).setName("已安装的技能").setHeading();for(const l of r.marketplaceSkills)Qw(f,a,l,r)}}function Qw(f,a,r,i){const o=r.installed?"已安装":"未安装",l=new _.Setting(a).setName(r.name).setDesc(r.description||o);l.addToggle(c=>c.setValue(r.enabled).setDisabled(!r.installed).onChange(u=>{r.enabled=u,f.saveSettings()})),r.installed&&l.addButton(c=>c.setButtonText("卸载").setWarning().onClick(async()=>{await ag(f,r,i),a.empty(),Ys(f,a)})),l.addExtraButton(c=>c.setIcon("trash").setTooltip("从列表中删除").onClick(async()=>{r.installed&&await ag(f,r,i);const u=i.marketplaceSkills.indexOf(r);u>=0&&i.marketplaceSkills.splice(u,1),f.saveSettings(),a.empty(),Ys(f,a)}))}async function ag(f,a,r){const i=f.plugin.app.vault.adapter;try{const o=_.normalizePath(`${r.skillsDirectory}/${a.filename}`);await i.exists(o)&&await i.remove(o),a.installed=!1,a.enabled=!1,f.saveSettings(),new _.Notice(`技能已卸载: ${a.name}`)}catch(o){console.error("Failed to uninstall skill:",o),new _.Notice(`卸载失败: ${o instanceof Error?o.message:"未知错误"}`)}}function Xw(f,a,r){return new Promise(i=>{const o=new _.Modal(f.plugin.app);o.titleEl.setText("迁移技能文件"),o.contentEl.createEl("p",{text:"切换 Agent 后技能目录将变更:"}),o.contentEl.createEl("p",{text:`${a} → ${r}`}).style.cssText="font-family: var(--font-monospace); font-size: 13px; padding: 8px; background: var(--background-secondary); border-radius: 4px;",o.contentEl.createEl("p",{text:"是否将已安装的技能文件迁移到新目录?"}),new _.Setting(o.contentEl).addButton(l=>l.setButtonText("迁移").setCta().onClick(()=>{o.close(),i(!0)})).addButton(l=>l.setButtonText("不迁移").onClick(()=>{o.close(),i(!1)})),o.onClose=()=>i(!1),o.open()})}async function Jw(f,a,r,i){const o=f.plugin.app.vault.adapter,l=_.normalizePath(i);await o.exists(l)||await o.mkdir(l);let c=0;for(const u of a.marketplaceSkills){if(!u.installed)continue;const d=_.normalizePath(`${r}/${u.filename}`),h=_.normalizePath(`${i}/${u.filename}`);try{if(await o.exists(d)){const m=await o.read(d);await o.write(h,m),await o.remove(d),c++}}catch(m){console.error(`Failed to migrate skill ${u.name}:`,m)}}c>0&&new _.Notice(`已迁移 ${c} 个技能文件到 ${i}`)}function e0(){const f=window.require||globalThis.require||void 0;if(typeof f!="function")throw new Error("Node require() is not available in this environment");try{return f("node:child_process")}catch{return f("child_process")}}function t0(){const f=window.require||globalThis.require||void 0;if(typeof f!="function")throw new Error("Node require() is not available in this environment");try{return f("node:fs")}catch{return f("fs")}}function r0(){const f=window.require||globalThis.require||void 0;if(typeof f!="function")throw new Error("Node require() is not available in this environment");try{return f("node:path")}catch{return f("path")}}function a0(){const f=window.require||globalThis.require||void 0;if(typeof f!="function")throw new Error("Node require() is not available in this environment");try{return f("node:os")}catch{return f("os")}}function Hm(f){const r=a0().homedir();let i=f.replace(/^~/,r);return i=i.replace(/%([^%]+)%/g,(o,l)=>process.env[l]||""),i}function Wu(f){try{const a=t0();return a.accessSync(f,a.constants.X_OK),!0}catch{return!1}}function ng(f){const a=e0(),i=process.platform==="win32"?"where":"which";try{const l=a.execSync(`${i} ${f}`,{encoding:"utf-8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim().split(` -`)[0]?.trim();return l&&Wu(l)?l:null}catch{return null}}function n0(f){const a=process.platform,r=f.commonPaths[a]||[],i=a==="win32"?f.windowsBinaryName:f.binaryName,o=r0();for(const l of r){const c=Hm(l),u=o.join(c,i);if(Wu(u))return u}return null}function Au(f,a){const r=Xs.find(u=>u.agentType===f);if(!r)return{found:!1,path:"",error:`Unknown agent type: ${f}`};if(a&&a.trim()){const u=Hm(a.trim());return Wu(u)?{found:!0,path:u}:{found:!1,path:"",error:`Custom path not found or not executable: ${u}`}}const i=process.platform==="win32",o=i?r.windowsBinaryName:r.binaryName,l=ng(o);if(l)return{found:!0,path:l};if(i){const u=ng(r.binaryName);if(u)return{found:!0,path:u}}const c=n0(r);return c?{found:!0,path:c}:{found:!1,path:"",error:`${r.name} CLI not found. Please install it or configure the path manually.`}}function Js(f,a){const{plugin:r}=f;r.settings.agentAutoExec||(r.settings={...r.settings,agentAutoExec:{...$m}},r.saveSettings());const i=r.settings.agentAutoExec;i&&(i0(f,a,i),s0(f,a,i),o0(f,a,i),c0(f,a,i))}function i0(f,a,r){if(new _.Setting(a).setName("启用自动执行").setDesc("当文件变更时自动触发 AI Agent 执行任务").addToggle(i=>i.setValue(r.enabled).onChange(async o=>{r.enabled=o,f.saveSettings(),a.empty(),Js(f,a)})),!r.enabled){a.createEl("p",{text:"启用后可配置自动化规则,在文件变更时自动调用 AI CLI 工具。",cls:"setting-item-description"});return}}function s0(f,a,r){if(r.enabled){a.createEl("h3",{text:"CLI 路径配置"}),a.createEl("p",{text:"配置 AI CLI 工具的路径,留空则自动检测。",cls:"setting-item-description"});for(const i of Xs){const o=i.agentType,l=r.binaryPaths[o]||"";new _.Setting(a).setName(i.name).setDesc(`${i.binaryName} CLI 路径`).addText(c=>c.setPlaceholder("自动检测").setValue(l).onChange(async u=>{u.trim()?r.binaryPaths[o]=u.trim():delete r.binaryPaths[o],f.saveSettings()})).addButton(c=>c.setButtonText("检测").onClick(()=>{const u=Au(o,l);u.found?new _.Notice(`✓ 找到 ${i.name}: ${u.path}`):new _.Notice(`✕ 未找到 ${i.name}: ${u.error||"请手动配置路径"}`)}))}}}function o0(f,a,r){if(!r.enabled)return;const i=a.createDiv({cls:"setting-item setting-item-heading"});if(i.createEl("div",{cls:"setting-item-info"}).createEl("div",{cls:"setting-item-name",text:"自动化规则"}),i.createDiv({cls:"setting-item-control"}).createEl("button",{cls:"mod-cta",text:"添加规则"}).addEventListener("click",c=>{const u=new _.Menu;for(const d of Bm)u.addItem(h=>{h.setTitle(d.name).setSection("presets").onClick(()=>{const m=Sw(d.id);r.rules.push(m),f.saveSettings(),a.empty(),Js(f,a)})});u.showAtMouseEvent(c)}),r.rules.length===0){a.createEl("p",{text:"暂无自动化规则,点击「添加规则」创建。",cls:"setting-item-description"});return}for(const c of r.rules)l0(f,a,r,c)}function l0(f,a,r,i){const o=a.createDiv({cls:"ppb-agent-rule-card"});o.style.cssText="border: 1px solid var(--background-modifier-border); border-radius: 8px; padding: 12px; margin-bottom: 12px;",new _.Setting(o).setName("规则名称").addText(k=>k.setPlaceholder("输入规则名称").setValue(i.name).onChange(async v=>{i.name=v,f.saveSettings()})).addToggle(k=>k.setValue(i.enabled).onChange(async v=>{i.enabled=v,f.saveSettings()})).addButton(k=>k.setIcon("trash").setWarning().onClick(()=>{const v=r.rules.indexOf(i);v>=0&&(r.rules.splice(v,1),f.saveSettings(),a.empty(),Js(f,a))})),new _.Setting(o).setName("AI Agent").setDesc("选择要调用的 AI CLI 工具").addDropdown(k=>{for(const v of Xs)k.addOption(v.agentType,v.name);k.setValue(i.agentType),k.onChange(async v=>{i.agentType=v,f.saveSettings()})}),new _.Setting(o).setName("监听路径").setDesc("Vault 中要监听的文件夹路径,用逗号分隔").addText(k=>k.setPlaceholder("例如: Projects, Inputs/Zotero").setValue(i.watchPaths.join(", ")).onChange(async v=>{i.watchPaths=v.split(",").map(y=>y.trim()).filter(y=>y.length>0),f.saveSettings()}));const l=o.createDiv({cls:"ppb-agent-events"});l.style.cssText="padding: 0 0 8px 0;";const c=new _.Setting(l).setName("触发事件").setDesc("选择哪些文件操作会触发此规则"),u=[{value:"create",label:"新建"},{value:"modify",label:"编辑"},{value:"delete",label:"删除"},{value:"rename",label:"重命名"}];for(const k of u)c.addToggle(v=>{v.setValue(i.triggerEvents.includes(k.value)).setTooltip(k.label).onChange(async D=>{D?i.triggerEvents.includes(k.value)||i.triggerEvents.push(k.value):i.triggerEvents=i.triggerEvents.filter(E=>E!==k.value),f.saveSettings()});const w=v.toggleEl.parentElement?.createSpan({text:k.label});w&&(w.style.cssText="font-size: 0.8em; margin-left: 4px; margin-right: 8px; color: var(--text-muted);")});new _.Setting(o).setName("Prompt 模板").setDesc("支持占位符: {{filePath}}, {{fileName}}, {{eventType}}, {{vaultPath}}, {{timestamp}}").addTextArea(k=>{k.setPlaceholder("请处理以下文件变更: {{filePath}} ({{eventType}})").setValue(i.promptTemplate).onChange(async v=>{i.promptTemplate=v,f.saveSettings()}),k.inputEl.rows=4,k.inputEl.style.width="100%"}),new _.Setting(o).setName("自定义 CLI 路径").setDesc("覆盖全局配置的 CLI 路径(留空使用全局配置)").addText(k=>k.setPlaceholder("使用全局配置").setValue(i.customBinaryPath).onChange(async v=>{i.customBinaryPath=v.trim(),f.saveSettings()}));const h=o.createDiv().createEl("details"),m=h.createEl("summary",{text:"高级设置"});m.style.cssText="cursor: pointer; font-size: 0.85em; color: var(--text-muted); margin-bottom: 8px;";const b=h.createDiv();new _.Setting(b).setName("防抖延迟 (ms)").setDesc("文件变更后等待多久再触发(避免频繁触发)").addText(k=>k.setPlaceholder("2000").setValue(String(i.debounceMs)).onChange(async v=>{const y=parseInt(v,10);!isNaN(y)&&y>=0&&(i.debounceMs=y,f.saveSettings())})),new _.Setting(b).setName("超时 (ms)").setDesc("0 = 不限制").addText(k=>k.setPlaceholder("0").setValue(String(i.timeoutMs)).onChange(async v=>{const y=parseInt(v,10);!isNaN(y)&&y>=0&&(i.timeoutMs=y,f.saveSettings())})),new _.Setting(b).setName("最大并发数").setDesc("此规则同时运行的最大进程数(0 = 不限制)").addText(k=>k.setPlaceholder("1").setValue(String(i.maxConcurrent)).onChange(async v=>{const y=parseInt(v,10);!isNaN(y)&&y>=0&&(i.maxConcurrent=y,f.saveSettings())})),new _.Setting(b).setName("工作目录").setDesc("CLI 进程的工作目录(相对 Vault 根目录,留空为 Vault 根)").addText(k=>k.setPlaceholder("Vault 根目录").setValue(i.workingDirectory).onChange(async v=>{i.workingDirectory=v.trim(),f.saveSettings()})),new _.Setting(b).setName("额外参数").setDesc("传递给 CLI 的额外命令行参数,用逗号分隔").addText(k=>k.setPlaceholder("例如: --verbose, --no-color").setValue(i.extraArgs.join(", ")).onChange(async v=>{i.extraArgs=v.split(",").map(y=>y.trim()).filter(y=>y.length>0),f.saveSettings()})),new _.Setting(b).setName("执行前确认").setDesc("触发时弹出确认通知,需用户手动允许后才执行").addToggle(k=>k.setValue(i.requireConfirmation??!1).onChange(async v=>{i.requireConfirmation=v,f.saveSettings()})),new _.Setting(b).setName("确认超时 (ms)").setDesc("超时后自动拒绝执行(默认 30000ms = 30秒)").addText(k=>k.setPlaceholder("30000").setValue(String(i.confirmationTimeoutMs??3e4)).onChange(async v=>{const y=parseInt(v,10);!isNaN(y)&&y>=0&&(i.confirmationTimeoutMs=y,f.saveSettings())})),new _.Setting(b).setName("预授权工具").setDesc("Claude Code 的 --allowedTools 参数,用逗号分隔。例如: Edit, Write, Read, Bash(git *)").addText(k=>k.setPlaceholder("Edit, Write, Read").setValue((i.allowedTools??[]).join(", ")).onChange(async v=>{i.allowedTools=v.split(",").map(y=>y.trim()).filter(y=>y.length>0),f.saveSettings()}))}function c0(f,a,r){r.enabled&&(a.createEl("h3",{text:"全局设置"}),new _.Setting(a).setName("全局最大并发数").setDesc("所有规则同时运行的最大进程总数").addText(i=>i.setValue(String(r.globalMaxConcurrent)).onChange(async o=>{const l=parseInt(o,10);!isNaN(l)&&l>=0&&(r.globalMaxConcurrent=l,f.saveSettings())})),new _.Setting(a).setName("触发通知").setDesc("当规则被触发时显示 Notice 通知").addToggle(i=>i.setValue(r.showNoticeOnTrigger).onChange(async o=>{r.showNoticeOnTrigger=o,f.saveSettings()})),new _.Setting(a).setName("最大输出行数").setDesc("每次运行保留的最大输出行数(防止内存溢出)").addText(i=>i.setValue(String(r.maxOutputLinesPerRun)).onChange(async o=>{const l=parseInt(o,10);!isNaN(l)&&l>0&&(r.maxOutputLinesPerRun=l,f.saveSettings())})),new _.Setting(a).setName("最大历史记录数").setDesc("保留的运行历史记录数量").addText(i=>i.setValue(String(r.maxHistoryRuns)).onChange(async o=>{const l=parseInt(o,10);!isNaN(l)&&l>0&&(r.maxHistoryRuns=l,f.saveSettings())})))}class Fu extends _.Modal{constructor(a,r,i){super(a),this.activeTabId="profile",this.initialTabId=null,this.mobileTitleEl=null,this.isProVerified=!1,this.dirty=!1,this.tabs=[{id:"profile",name:"用户资料",icon:"user",category:"core"},{id:"license",name:"许可证",icon:"key",category:"core"},{id:"theme",name:"主题颜色",icon:"palette",category:"display",proOnly:!0},{id:"components",name:"组件数据源",icon:"database",category:"data",proOnly:!0},{id:"updater",name:"更新管理",icon:"download",category:"advanced",proOnly:!0},{id:"institution",name:"机构笔记",icon:"building",category:"advanced",proOnly:!0},{id:"ai-skills",name:"技能",icon:"bot",category:"ai",proOnly:!0},{id:"agent-auto-exec",name:"自动执行",icon:"play-circle",category:"ai",proOnly:!0},{id:"about",name:"关于",icon:"info",category:"info"}],this.categories=[{id:"core",name:"核心设置"},{id:"display",name:"显示与外观"},{id:"data",name:"数据源"},{id:"advanced",name:"高级"},{id:"ai",name:"AI"},{id:"info",name:"信息"}],this.plugin=r,this.initialTabId=i??null,this.debouncedSave=_.debounce(async()=>{await this.plugin.saveSettings(),this.dirty=!1},100,!0)}saveSettings(){this.dirty=!0,this.debouncedSave()}onOpen(){const{contentEl:a,modalEl:r}=this;r.toggleClass(["mod-settings","mod-sidebar-layout"],!0),a.empty(),a.addClass("vertical-tabs-container"),this.mobileTitleEl=r.querySelector(".modal-title"),_.Platform.isMobile&&(this.activeTabId=""),this.sidebarEl=a.createDiv({cls:"vertical-tab-header"}),this.modalContentEl=a.createDiv({cls:"vertical-tab-content-container"}),this.plugin.verificationWorker.verify().then(i=>{this.isProVerified=i,this.renderSidebar(),this.initializeView()})}initializeView(){_.Platform.isMobile?this.initialTabId?this.openTab(this.initialTabId):this.updateMobileView():(this.activeTabId=this.initialTabId||"profile",this.renderSidebar(),this.renderContent())}onClose(){this.modalContentEl?.empty(),this.dirty&&(this.debouncedSave.cancel(),this.plugin.saveSettings(),this.dirty=!1),this.plugin.getDashboardStore().bumpSettingsVersion()}renderSidebar(){this.sidebarEl.empty();const a=this.tabs.filter(r=>!r.proOnly||this.isProVerified);this.categories.forEach(r=>{const i=a.filter(c=>c.category===r.id);if(i.length===0)return;const o=this.sidebarEl.createDiv({cls:"vertical-tab-header-group"});o.createDiv({cls:"vertical-tab-header-group-title",text:r.name});const l=o.createDiv({cls:"vertical-tab-header-group-items"});i.forEach(c=>{const u=l.createDiv({cls:`vertical-tab-nav-item tappable ${this.activeTabId===c.id?"is-active":""}`});u.setAttribute("data-tab-id",c.id);const d=u.createDiv({cls:"vertical-tab-nav-item-icon"});_.setIcon(d,c.icon),u.createDiv({cls:"vertical-tab-nav-item-title",text:c.name});const h=u.createDiv({cls:"vertical-tab-nav-item-chevron"});_.setIcon(h,"chevron-right"),u.addEventListener("click",()=>{this.openTab(c.id)})})})}openTab(a){this.activeTabId=a,this.sidebarEl.querySelectorAll(".vertical-tab-nav-item").forEach(i=>{i.getAttribute("data-tab-id")===a?i.addClass("is-active"):i.removeClass("is-active")}),this.renderContent(),_.Platform.isMobile&&this.updateMobileView()}goBackToNavigation(){this.activeTabId="",this.sidebarEl.querySelectorAll(".vertical-tab-nav-item").forEach(r=>{r.removeClass("is-active")}),this.modalContentEl.empty(),this.updateMobileView()}updateMobileView(){if(!_.Platform.isMobile)return;const a=this.activeTabId!=="";if(this.sidebarEl.toggleClass("is-mobile-hidden",a),this.modalContentEl.toggleClass("is-mobile-hidden",!a),this.mobileTitleEl)if(this.mobileTitleEl.empty(),a){const r=this.mobileTitleEl.createDiv({cls:"clickable-icon modal-setting-back-button mod-raised"});_.setIcon(r,"arrow-left"),r.addEventListener("click",()=>{this.goBackToNavigation()});const i=this.tabs.find(o=>o.id===this.activeTabId);this.mobileTitleEl.createSpan({text:i?.name||"设置"})}else this.mobileTitleEl.createSpan({text:"PaperBell"})}renderContent(){this.modalContentEl.empty();const a=this.tabs.find(d=>d.id===this.activeTabId);if(!a)return;const r=this.modalContentEl.createDiv({cls:"vertical-tab-content"}),i=r.createDiv({cls:"vertical-tab-content-header"}),o=i.createEl("h2",{cls:"vertical-tab-content-header-title"}),l=o.createSpan({cls:"vertical-tab-content-header-icon"});_.setIcon(l,a.icon),o.createSpan({text:a.name});const c=this.getTabDescription(a.id);c&&i.createEl("p",{cls:"vertical-tab-content-header-desc",text:c});const u=r.createDiv({cls:"vertical-tab-content-body"});this.renderTabContent(a.id,u)}getTabDescription(a){return{profile:"配置您在仪表板中显示的个人信息",license:"管理 PaperBell 许可证激活状态",theme:"自定义界面主题颜色",components:"配置各仪表板组件的数据来源",updater:"管理 PaperBell 仓库更新",institution:"配置机构笔记的自动生成","ai-skills":"管理 AI 技能,配置内置技能与技能市场","agent-auto-exec":"配置文件变更时自动触发 AI Agent 执行任务",about:"关于 PaperBell 插件"}[a]||""}renderTabContent(a,r){switch(a){case"profile":_w(this,r);break;case"license":Tu(this,r);break;case"theme":jm(this,r);break;case"components":Fw(this,r);break;case"updater":oa(this,r);break;case"institution":Bw(this,r);break;case"ai-skills":Ys(this,r);break;case"agent-auto-exec":Js(this,r);break;case"about":Uw(this,r);break;default:r.createEl("p",{text:"此设置页面正在开发中..."})}}}const ua={primary:"#648EC0",secondary:"#B0D2EC",muted:"#B5ACA3","muted-foreground":"#849DBB",foreground:"#533A33",background:"#ffffff","ticket-bg-start":"#FFF4E6","ticket-bg-end":"#FFE7CC","ticket-border":"#fed7aa","ticket-accent":"#FFB86A","ticket-text":"#92400e","ticket-text-muted":"#9ca3af"},pa={primary:"#8b5cf6",secondary:"#3730a3",muted:"#262640","muted-foreground":"#94a3b8",foreground:"#e2e8f0",background:"#0f0f23","ticket-bg-start":"#262640","ticket-bg-end":"#1a1a35","ticket-border":"#374151","ticket-accent":"#8b5cf6","ticket-text":"#e2e8f0","ticket-text-muted":"#94a3b8"},ca={registrationId:"",oauthLoginState:void 0,oauthLoginStateCreatedAt:void 0,noteLocation:"Locations/Institutes",institutionNoteTemplate:"",autoGenerateInstitutionNotes:!1,openInstitutionAfterCreation:!1,listenToFileCreatedInPath:"Persons/Scholars",enableUpdater:!1,landing:la,componentDataSources:mr,dataServiceConfig:bi,updater:{repository:"PaperBell-Org/Obsidian-PaperBell",excludePatterns:["**/*.js"],autoUpdate:!1,minAppVersion:"0.0.0",customReplacements:{},updateScope:{regularFiles:!0,obsidianCore:!0,plugins:!0,themes:!0,snippets:!0,pluginData:!1},obsidianConflictHandling:{settings:"prompt",themes:"prompt",snippets:"prompt",plugins:"prompt"}},userProfile:{name:"用户",title:"研究者",email:"user@example.com",institution:"研究机构",avatar:"https://avatars.githubusercontent.com/u/45836839?v=4"},componentSettings:{academicOverview:{showCitations:!0,showTrends:!0,trendDays:30},todayFocus:{maxItems:5,showProgress:!0,showDeadlines:!0},recentLiterature:{maxPapers:10,showAbstract:!1,showKeywords:!0,sortBy:"date"},researchFocus:{showLabels:!0,maxTopics:20,colorScheme:"default"},projectManager:{defaultView:"grid",showArchived:!1,taskFilters:!0},bookShelf:{viewMode:"covers",sortBy:"recent",showProgress:!0},todoManager:{showCompleted:!1,maxDays:7,priorities:!0},readingAnalytics:{chartType:"line",timeRange:"week",showGoals:!0}},themeColors:{light:{...ua},dark:{...pa}},themeModePreference:"system",darkMode:!1,pomodoroSettings:{workDuration:25,shortBreakDuration:5,longBreakDuration:15,longBreakInterval:4,enableNotifications:!0,enableStatusBar:!0,autoStartBreaks:!1,autoStartWork:!1},baseContainerPaths:{projects:null,papers:null,experiments:null,tasks:null,resources:null,books:null,literature:null},aiSkills:ju,agentAutoExec:$m};class u0 extends _.PluginSettingTab{constructor(a,r){super(a,r),this.icon="graduation-cap",this.plugin=r}display(){const{containerEl:a}=this;a.empty(),a.addClass("paperbell-settings-entry");const r=a.createDiv({cls:"settings-entry-header"}),i=r.createDiv({cls:"settings-entry-title-container"}),o=i.createSpan({cls:"settings-entry-logo"});_.setIcon(o,"graduation-cap");const l=i.createDiv({cls:"settings-entry-title-text"});l.createEl("h2",{text:"PaperBell Pro"}),l.createEl("span",{cls:"settings-entry-version",text:`v${this.plugin.manifest.version}`}),r.createDiv({cls:"settings-entry-desc"}).createEl("p",{text:"专业的学术写作工作流增强插件,提供文献管理、项目跟踪、研究焦点可视化等功能。"}),new _.Setting(a).setName("打开设置").setDesc("在专用设置窗口中配置所有 PaperBell 功能").addButton(v=>{v.setButtonText("打开设置").setCta().onClick(()=>{new Fu(this.app,this.plugin).open()})});const u=a.createDiv({cls:"settings-entry-links"});u.createEl("h3",{text:"快速链接"});const d=u.createDiv({cls:"settings-entry-links-grid"});[{icon:"book",text:"文档",url:"https://paperbell.cn"},{icon:"github",text:"GitHub",url:"https://github.com/PaperBell-Org/Obsidian-PaperBell"},{icon:"heart",text:"支持",url:"https://paperbell.cn"},{icon:"mail",text:"联系",url:"mailto:support@paperbell.cn"}].forEach(v=>{const y=d.createEl("a",{cls:"settings-entry-link",href:v.url});y.setAttr("target","_blank");const w=y.createSpan({cls:"settings-entry-link-icon"});_.setIcon(w,v.icon),y.createSpan({text:v.text})});const m=a.createDiv({cls:"settings-entry-features"});m.createEl("h3",{text:"功能特色"});const b=[{icon:"book-open",title:"文献笔记",desc:"快速文献笔记创建",tabId:"components"},{icon:"target",title:"研究焦点",desc:"可视化研究领域和热点追踪",tabId:"components"},{icon:"folder-kanban",title:"协助项目管理",desc:"多视图项目进度跟踪",tabId:"components"},{icon:"download",title:"自动更新",desc:"一键同步最新模板与组件",tabId:"updater"},{icon:"book",title:"Focus Map",desc:"专注内容统计与可视化",tabId:"heatmap"},{icon:"palette",title:"主题定制",desc:"自定义界面颜色主题",tabId:"theme"}],k=m.createDiv({cls:"settings-entry-features-grid"});b.forEach(v=>{const y=k.createDiv({cls:"settings-entry-feature"});v.tabId&&(y.addClass("is-clickable"),y.addEventListener("click",()=>{this.plugin.openSettings(v.tabId)}));const w=y.createDiv({cls:"settings-entry-feature-icon"});_.setIcon(w,v.icon);const D=y.createDiv({cls:"settings-entry-feature-text"});D.createEl("strong",{text:v.title}),D.createEl("span",{text:v.desc})})}openTab(a){const r=new Fu(this.app,this.plugin);r.open(),r.openTab(a)}}const qm=`(function(){"use strict";self.addEventListener("message",a=>{Promise.resolve().then(async()=>{try{const o=a.data;let t=!1;const r=o;if(r.type==="verify"){if(!r.activationCode){postMessage({messageSource:"verify",$error:"Access denied: No activation code provided"});return}try{const s=await fetch("https://paperbell.cn/api/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({activation_code:r.activationCode,device_id:r.deviceId,device_info:navigator.userAgent})});if(s.ok){const e=await s.json();if(e.valid&&e.data){const i=e.data;if(!i.is_active){postMessage({messageSource:"verify",$error:"Access denied: License is not active"});return}if(i.expires_at){const c=new Date(i.expires_at);if(new Date>c){postMessage({messageSource:"verify",$error:"Access denied: License has expired"});return}}t=!0,postMessage({messageSource:"verify",type:"success",verified:t,licenseData:i})}else postMessage({messageSource:"verify",$error:"Access denied: "+(e.error||"Invalid activation code")})}else{const e=await s.json().catch(()=>({}));postMessage({messageSource:"verify",$error:"Access denied: "+(e.error||"Verification failed")})}}catch(s){console.error("Verification error:",s),postMessage({messageSource:"verify",$error:"Access denied: Network error during verification"})}return}postMessage({messageSource:"verify",$error:"Unsupported import method."})}catch(o){postMessage({messageSource:"verify",$error:o.message||"Unknown error in worker"})}})})})(); -`,ig=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",qm],{type:"text/javascript;charset=utf-8"});function p0(f){let a;try{if(a=ig&&(self.URL||self.webkitURL).createObjectURL(ig),!a)throw"";const r=new Worker(a,{name:f?.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(a)}),r}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(qm),{name:f?.name})}}function d0(){let f,a;const i=new Promise((o,l)=>{f=o,a=l});return i.resolve=f,i.reject=a,i}var $s=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Hu(f){return f&&f.__esModule&&Object.prototype.hasOwnProperty.call(f,"default")?f.default:f}var Ec={},Cc={},sg;function f0(){if(sg)return Cc;sg=1;class f{constructor(r){this._elements=Array.isArray(r)?r:[],this._offset=0}enqueue(r){return this._elements.push(r),this}push(r){return this.enqueue(r)}dequeue(){if(this.size()===0)return null;const r=this.front();return this._offset+=1,this._offset*20?this._elements[this._offset]:null}back(){return this.size()>0?this._elements[this._elements.length-1]:null}size(){return this._elements.length-this._offset}isEmpty(){return this.size()===0}contains(r){for(let i=this._offset;im0),this.queue=new g0.Queue,this.outstanding=new Map,this.app=a,this.activationCode=i,this.deviceId=this.generateDeviceId(),this.verified=!1,this.licenseData=null,this.plugin=r}generateDeviceId(){const a=localStorage.getItem("paperbell-device-id")||sessionStorage.getItem("paperbell-device-id");if(a)return localStorage.setItem("paperbell-device-id",a),sessionStorage.setItem("paperbell-device-id",a),a;const r=navigator.userAgent,i=navigator.platform,o=navigator.language,l=Intl.DateTimeFormat().resolvedOptions().timeZone,c=`${screen.width}x${screen.height}`;let u="";navigator.hardwareConcurrency&&(u=navigator.hardwareConcurrency.toString());const d=[r,i,o,l,c,u].join("|");let h=0;for(let b=0;bthis.throttle().workers)this.workers.delete(a.id),lg(a);else{const l=Date.now(),c=Math.max(.1,this.throttle().utilization)-1,u=(l-o)*c;a.active=void 0,u<=1e-10?(a.availableAt=l,this.schedule()):(a.availableAt=l+u,setTimeout(this.schedule.bind(this),u))}}availableWorker(){const a=Date.now();for(let r of this.workers.values())if(!r.active&&r.availableAt<=a)return r;if(this.workers.sizeawait this.handleWorkerMessage(a,r.data),a}onunload(){for(let a of this.workers.values())lg(a);for(;!this.queue.isEmpty();){const[a]=this.queue.pop();a.reject("Terminated")}this.shutdown=!0}async verify(){try{const a=this.availableWorker();if(!a)throw new Error("No available workers in pool");let r=d0();return a.active=[r,Date.now()],a.worker.postMessage({type:"verify",activationCode:this.activationCode,deviceId:this.deviceId}),(await r).verified}catch{return!1}}async handleWorkerMessage(a,r){if(r.messageSource==="verify"){if(r.$error){this.verified=!1,this.licenseData=null,this.finish(a,r);return}a.active&&(this.verified=r.verified,this.licenseData=r.licenseData||null,this.verified&&this.licenseData&&(this.isLicenseValid()||(this.verified=!1,this.licenseData=null,r.$error="License has expired or is invalid")),this.finish(a,r));return}this.verified=!1,this.licenseData=null,this.finish(a,r)}isLicenseValid(){if(!this.licenseData||!this.licenseData.is_active)return!1;if(this.licenseData.expires_at){const a=new Date(this.licenseData.expires_at);if(new Date>a)return!1}return!(this.licenseData.token_type&&this.licenseData.token_type!=="activation_code")}async reloadActivationCode(){this.verified=!1,this.licenseData=null,this.activationCode=this.plugin.settings.registrationId}updateActivationCode(a){this.activationCode=a,this.verified=!1,this.licenseData=null}getDeviceId(){return this.deviceId}getLicenseData(){return this.licenseData}isLicenseExpiringSoon(){if(!this.licenseData||!this.licenseData.expires_at)return!1;const a=new Date(this.licenseData.expires_at),r=new Date,i=new Date(r.getTime()+10080*60*1e3);return a<=i&&a>r}}function lg(f){f.worker.terminate(),f.active&&f.active[0].reject("Terminated"),f.active=void 0}class Bs extends _.Modal{constructor(a,r,i){super(a),this.plugin=r,this.institutionName=i}async onOpen(){this.titleEl.setText("Institution Search"),this.contentEl.createEl("p",{text:"Please enter the institution name to search."});const a=this.contentEl.createDiv("search-container");this.inputEl=a.createEl("input",{type:"text",placeholder:"Institution name",cls:"institution-search-input"}),this.inputEl.addEventListener("keydown",async r=>{if(r.key==="Enter"){if(!await this.plugin.verificationWorker.verify()){new _.Notice("You are not authorized to use this feature. Please check your registration ID.");return}await this.searchInstitution(this.inputEl.value)}}),new _.Setting(a).addButton(r=>r.setButtonText("Search").onClick(async()=>{if(!await this.plugin.verificationWorker.verify()){new _.Notice("You are not authorized to use this feature. Please check your registration ID.");return}await this.searchInstitution(this.inputEl.value)})),this.resultContainer=this.contentEl.createDiv("search-results"),this.confirmButton=new _.Setting(this.contentEl).addButton(r=>r.setButtonText("Create Institution Note").setDisabled(!0).onClick(async()=>{await this.plugin.createInstitutionNote({abbr:this.institution.acronyms?.[0]||"",aliases:[...this.institution.aliases||[],...this.institution.labels?.map(i=>i.label)||[]],website:this.institution.links?.[0]||"",location:[this.institution.addresses?.[0]?.lat||0,this.institution.addresses?.[0]?.lng||0],logo:this.institution.logos?.[0]?.url||"",name:this.institution.labels?.[0]?.label||this.institution.name||"",tags:["university"]}),this.close()})),this.confirmButton.settingEl.hide(),this.institutionName&&(this.inputEl.value=this.institutionName,await this.plugin.verificationWorker.verify()&&this.searchInstitution(this.institutionName))}async searchInstitution(a){try{const r=await this.plugin.proxyService.proxyRequest({url:`https://api.ror.org/v1/organizations?query=${encodeURIComponent(`${a}`)}`,method:"GET"});if(!r.success){console.error("Error searching institution:",r.error);return}const i=r.data;if(i.items&&i.items.length>0){this.institution=i.items[0];const o=this.institution.labels?.[0]?.label||this.institution.name;o&&(this.institutionName=o),await this.displayResults()}}catch(r){console.error("Error searching institution:",r)}}async displayResults(){this.resultContainer.empty();const a=`| Field | Value | +`),n+=`views: +`,n+=` - type: ${t} +`,n+=` name: "${t.charAt(0).toUpperCase()+t.slice(1)}" +`,n+=` order: +`,n+=` - file.name +`,n+=` - status +`,n+=` - tags +`,n}onClose(){const{contentEl:e}=this;e.empty()}}const Vi=[{id:"academic",name:"学术组件"},{id:"project",name:"项目组件"},{id:"personal",name:"个人组件"}],Hi={projectBaseManager:"projects",papersManager:"papers",experimentsManager:"experiments",tasksManager:"tasks",resourcesManager:"resources",bookShelf:"books"},qi=["academicOverview","todayFocus"],Zi=["recentLiterature","researchFocusMap"],Gi=[{key:"academicOverview",name:"学术概览",desc:"展示学术研究的整体概况和统计信息",category:"academic"},{key:"todayFocus",name:"今日聚焦",desc:"显示今天需要关注的重要任务和事项",category:"academic"},{key:"recentLiterature",name:"最近文献",desc:"自动展示最新文献(数据来源于文献设置中的文件夹路径)",category:"academic"},{key:"researchFocusMap",name:"研究焦点地图",desc:"展示研究领域和关注重点(数据来源于追踪标签配置)",category:"academic"},{key:"projectBaseManager",name:"项目管理(默认配置)",desc:"其他项目组件未配置时的后备数据源,优先级低于具体组件配置",category:"project"},{key:"papersManager",name:"研究论文",desc:"管理论文写作、审核状态和发表进度",category:"project"},{key:"experimentsManager",name:"实验数据",desc:"管理实验设计、数据收集和结果分析",category:"project"},{key:"tasksManager",name:"科研课题",desc:"管理课题、任务分解和进度跟踪",category:"project"},{key:"resourcesManager",name:"学术资源",desc:"管理文献、工具、数据集和参考资料",category:"project"},{key:"bookShelf",name:"书架",desc:"展示个人图书收藏和阅读进度",category:"personal"}];let Qt="academic";function Yi(u,e){const{plugin:t}=u,s=e.createDiv({cls:"ppb-component-tabs"}),n=e.createDiv({cls:"ppb-component-tab-content"});Vi.forEach(r=>{const a=s.createEl("button",{text:r.name,cls:"ppb-component-tab-btn"});r.id===Qt&&a.addClass("is-active"),a.addEventListener("click",()=>{Qt=r.id,s.querySelectorAll(".ppb-component-tab-btn").forEach(o=>{o.removeClass("is-active")}),a.addClass("is-active"),ke(u,n,r.id)})}),ke(u,n,Qt);const i=e.createDiv({cls:"ppb-component-footer"});new w.Setting(i).setName("重置所有组件配置").setDesc("将所有组件的数据源配置重置为默认值").addButton(r=>{r.setButtonText("重置为默认").setWarning().onClick(async()=>{t.settings.componentDataSources={...Dt},u.saveSettings(),ke(u,n,Qt),new w.Notice("已重置所有组件配置为默认值")})})}function ke(u,e,t){e.empty(),Gi.filter(n=>n.category===t).forEach(n=>{Ki(u,e,n.key,n.name,n.desc)})}function Ki(u,e,t,s,n){const{plugin:i}=u;if(!bi(i,t))return;const a=e.createDiv({cls:"ppb-component-section"});$t(u,a,t,s,n)}function $t(u,e,t,s,n){e.empty();const{plugin:i}=u,r=bi(i,t);if(!r)return;const a=e.createDiv({cls:"ppb-component-header"});a.createEl("h4",{text:r.displayName||s}),a.createEl("p",{text:r.description||n,cls:"ppb-component-desc"});const o=e.createDiv({cls:"ppb-component-settings"});new w.Setting(o).setName("基本信息").setHeading(),new w.Setting(o).setName("显示名称").setDesc("设置该组件在界面显示的标题").addText(l=>l.setPlaceholder(s).setValue(r.displayName||s).onChange(async d=>{vt(u,t,{displayName:d})})),new w.Setting(o).setName("描述").setDesc("设置该组件在界面显示的说明文字").addText(l=>l.setPlaceholder(n).setValue(r.description||n).onChange(async d=>{vt(u,t,{description:d})}));const c=Hi[t];c?Xi(u,o,t,c,e,s,n):qi.includes(t)?(new w.Setting(o).setName("数据源").setHeading(),new w.Setting(o).setName("自动获取").setDesc(t==="academicOverview"?"数据由插件自动从 Vault 中统计(写作字数、文献数量、笔记数量等)":"数据由插件自动从 Vault 中分析(今日阅读时长、写作字数、文献笔记等)")):Zi.includes(t)?t==="recentLiterature"&&Ji(u,o):(new w.Setting(o).setName("数据源配置").setHeading(),Qi(u,o,t,r)),tr(u,o,t,r,e,s,n),new w.Setting(o).addButton(l=>l.setButtonText("重置此组件").onClick(async()=>{const d=Dt[t];d&&(i.settings.componentDataSources||(i.settings.componentDataSources={...Dt}),i.settings.componentDataSources[t]={...d},u.saveSettings(),$t(u,e,t,s,n),new w.Notice(`已重置 ${s} 配置`))}))}function Xi(u,e,t,s,n,i,r){const{plugin:a}=u,o=a.settings.baseContainerPaths?.[s]||null;if(new w.Setting(e).setName("Base 数据源").setHeading(),o){const c=a.app.vault.getFileByPath(o),l=new w.Setting(e).setName("当前 Base 文件").setDesc(o);if(l.addButton(d=>d.setIcon("edit").setTooltip("编辑 Base 文件").onClick(async()=>{c?(await a.app.workspace.getLeaf(!1).openFile(c),new w.Notice(`已打开: ${o}`)):new w.Notice(`文件不存在: ${o}`)})),l.addButton(d=>d.setIcon("settings").setTooltip("更换 Base").onClick(()=>{new ks(a.app,a,s,async f=>{a.settings.baseContainerPaths||(a.settings.baseContainerPaths={projects:null,papers:null,experiments:null,tasks:null,resources:null,books:null,literature:null}),a.settings.baseContainerPaths[s]=f,await a.saveSettings(),$t(u,n,t,i,r),new w.Notice(`已更换 Base: ${f}`)}).open()})),l.addButton(d=>d.setIcon("x").setTooltip("清除 Base 配置").setWarning().onClick(async()=>{a.settings.baseContainerPaths&&(a.settings.baseContainerPaths[s]=null,await a.saveSettings(),$t(u,n,t,i,r),new w.Notice("已清除 Base 配置"))})),!c){const d=e.createDiv({cls:"ppb-base-config-warning"});w.setIcon(d.createSpan(),"alert-triangle"),d.createSpan({text:" Base 文件不存在,请重新配置"})}}else new w.Setting(e).setName("未配置 Base").setDesc("点击配置按钮选择或创建一个 .base 文件").addButton(c=>c.setButtonText("配置 Base").setCta().onClick(()=>{new ks(a.app,a,s,async l=>{a.settings.baseContainerPaths||(a.settings.baseContainerPaths={projects:null,papers:null,experiments:null,tasks:null,resources:null,books:null,literature:null}),a.settings.baseContainerPaths[s]=l,await a.saveSettings(),$t(u,n,t,i,r),new w.Notice(`已配置 Base: ${l}`)}).open()}))}function Ji(u,e,t,s,n){const{plugin:i}=u,r=i.settings.componentDataSources?.recentLiterature||{},a=r.literatureFolderPath||"Inputs/Zotero",o=r.literatureDisplaySettings||{titleWrap:!0,authorWrap:!0,keywordsWrap:!0,tagsWrap:!0};new w.Setting(e).setName("数据源").setHeading();let c=null;new w.Setting(e).setName("文献文件夹路径").setDesc("文献笔记所在的文件夹,用于生成 Base 视图查询").addText(l=>{c=l,l.setPlaceholder("例如: Inputs/Zotero").setValue(a).onChange(async d=>{vt(u,"recentLiterature",{literatureFolderPath:d})})}).addButton(l=>l.setIcon("folder").setTooltip("浏览文件夹").onClick(()=>{new Ls(i.app,f=>{vt(u,"recentLiterature",{literatureFolderPath:f.path}),c&&c.setValue(f.path),new w.Notice(`已配置文献文件夹: ${f.path}`)}).open()})),new w.Setting(e).setName("文献显示设置").setHeading(),new w.Setting(e).setName("标题自动换行").setDesc("允许长标题在列表中自动换行显示,避免截断").addToggle(l=>{l.setValue(o.titleWrap??!0).onChange(d=>{vt(u,"recentLiterature",{literatureDisplaySettings:{...o,titleWrap:d}})})}),new w.Setting(e).setName("作者自动换行").setDesc("允许作者列表自动换行显示").addToggle(l=>{l.setValue(o.authorWrap??!0).onChange(d=>{vt(u,"recentLiterature",{literatureDisplaySettings:{...o,authorWrap:d}})})}),new w.Setting(e).setName("关键词自动换行").setDesc("允许关键词列表自动换行显示").addToggle(l=>{l.setValue(o.keywordsWrap??!0).onChange(d=>{vt(u,"recentLiterature",{literatureDisplaySettings:{...o,keywordsWrap:d}})})}),new w.Setting(e).setName("标签自动换行").setDesc("允许标签列表自动换行显示").addToggle(l=>{l.setValue(o.tagsWrap??!0).onChange(d=>{vt(u,"recentLiterature",{literatureDisplaySettings:{...o,tagsWrap:d}})})})}function Qi(u,e,t,s,n,i,r){const{plugin:a}=u;let o=null;new w.Setting(e).setName("文件夹路径").setDesc("指定组件读取数据的源文件夹").addText(c=>{o=c,c.setPlaceholder("例如: Projects/Research").setValue(s.folderPath||"").onChange(async l=>{vt(u,t,{folderPath:l})})}).addButton(c=>c.setIcon("folder").setTooltip("浏览文件夹").onClick(()=>{new Ls(a.app,d=>{vt(u,t,{folderPath:d.path,type:"folder",recursive:!0}),o&&o.setValue(d.path),new w.Notice(`已配置文件夹数据源: ${d.path}`)}).open()})),new w.Setting(e).setName("递归搜索").setDesc("开启后将包含子文件夹中的文件").addToggle(c=>c.setValue(s.recursive??!0).onChange(async l=>{vt(u,t,{recursive:l})})),new w.Setting(e).setName("文件扩展名过滤").setDesc("仅包含指定扩展名的文件(如 md, canvas)").addText(c=>c.setPlaceholder("md").setValue(s.fileFilter?.extensions?.join(", ")||"").onChange(async l=>{const d=l.split(",").map(f=>f.trim()).filter(Boolean);vt(u,t,{fileFilter:{...s.fileFilter,extensions:d}})}))}function tr(u,e,t,s,n,i,r){if(t==="researchFocusMap"){new w.Setting(e).setName("追踪标签设置").setHeading();const a=e.createDiv({cls:"ppb-tags-container"}),o=s.trackingTags||[];if(o.length>0){const l=a.createDiv({cls:"ppb-tags-list"});o.forEach(d=>{const f=l.createDiv({cls:"ppb-tag-item"});f.createSpan({text:`#${d}`}),f.createEl("button",{cls:"clickable-icon ppb-tag-remove"},g=>{w.setIcon(g,"cross")}).addEventListener("click",()=>{const g=o.filter(p=>p!==d);vt(u,t,{trackingTags:g}),$t(u,n,t,i,r)})})}else a.createEl("p",{text:"暂无标签,请添加要追踪的标签",cls:"ppb-tags-empty"});let c="";new w.Setting(e).setName("添加标签").setDesc("输入标签名称(不需要 #)").addText(l=>l.setPlaceholder("如: research").onChange(d=>{c=d})).addButton(l=>l.setButtonText("添加").onClick(()=>{const d=c.trim().replace(/^#/,"");d&&!o.includes(d)&&(vt(u,t,{trackingTags:[...o,d]}),$t(u,n,t,i,r))})),new w.Setting(e).setName("网格设置").setHeading(),new w.Setting(e).setName("网格大小").setDesc("调整研究焦点地图中格子的显示尺寸").addSlider(l=>{l.setLimits(20,100,5).setValue(s.gridSize??50).setDynamicTooltip().onChange(d=>{vt(u,t,{gridSize:d})})}),new w.Setting(e).setName("圆角半径").setDesc("调整研究焦点地图中格子的圆角弧度").addSlider(l=>{l.setLimits(0,20,1).setValue(s.borderRadius??4).setDynamicTooltip().onChange(d=>{vt(u,t,{borderRadius:d})})})}}function bi(u,e){return u.settings.componentDataSources||(u.settings.componentDataSources={...Dt}),u.settings.componentDataSources[e]||Dt[e]||null}function vt(u,e,t){const{plugin:s}=u;s.settings.componentDataSources||(s.settings.componentDataSources={...Dt});const n=s.settings.componentDataSources[e]||Dt[e];s.settings.componentDataSources[e]={...n,...t},u.saveSettings(),s.getDashboardStore().bumpSettingsVersion()}function At(u,e){const{plugin:t}=u;t.verificationWorker.verify().then(s=>{if(!s){const n=e.createDiv({cls:"paperbell-updater-warning"});n.createEl("p",{text:"⚠️ 此功能需要激活许可证"}),n.createEl("p",{text:"请先在「许可证」页面激活您的 PaperBell Pro 许可证。"}),new w.Setting(n).addButton(i=>{i.setButtonText("前往激活").onClick(()=>{u.openTab("license")})});return}er(u,e)})}function er(u,e){const{plugin:t}=u;if(new w.Setting(e).setName("启用 PaperBell 仓库更新程序").setDesc("启用手动检查和更新 PaperBell 仓库的功能").addToggle(o=>{o.setValue(t.settings.enableUpdater).onChange(async c=>{t.settings.enableUpdater=c,u.saveSettings(),e.empty(),At(u,e)})}),!t.settings.enableUpdater)return;new w.Setting(e).setName("当前 PaperBell 仓库版本").setDesc("显示当前安装的 PaperBell 仓库版本号").addButton(o=>{o.setButtonText(t.updater?.lastUpdateInfo?.latestVersion||"0.0.0"),o.setDisabled(!0)}),new w.Setting(e).setName("更新范围设置").setHeading(),Et(t);const s=t.settings.updater.updateScope||{};new w.Setting(e).setName("更新常规文件").setDesc("更新 .md、图片等常规内容文件").addToggle(o=>{o.setValue(s.regularFiles!==!1).onChange(async c=>{Et(t),t.settings.updater.updateScope={...t.settings.updater.updateScope,regularFiles:c},u.saveSettings()})}),new w.Setting(e).setName("更新 Obsidian 核心配置").setDesc("更新 .obsidian 下的配置文件 (app.json 等)").addToggle(o=>{o.setValue(s.obsidianCore!==!1).onChange(async c=>{Et(t),t.settings.updater.updateScope={...t.settings.updater.updateScope,obsidianCore:c},u.saveSettings()})}),new w.Setting(e).setName("更新插件程序").setDesc("更新 .obsidian/plugins 下的插件文件").addToggle(o=>{o.setValue(s.plugins!==!1).onChange(async c=>{Et(t),t.settings.updater.updateScope={...t.settings.updater.updateScope,plugins:c},u.saveSettings()})}),new w.Setting(e).setName("更新外观主题").setDesc("更新 .obsidian/themes 下的主题文件").addToggle(o=>{o.setValue(s.themes!==!1).onChange(async c=>{Et(t),t.settings.updater.updateScope={...t.settings.updater.updateScope,themes:c},u.saveSettings()})}),new w.Setting(e).setName("更新 CSS 片段").setDesc("更新 .obsidian/snippets 下的样式文件").addToggle(o=>{o.setValue(s.snippets!==!1).onChange(async c=>{Et(t),t.settings.updater.updateScope={...t.settings.updater.updateScope,snippets:c},u.saveSettings()})}),new w.Setting(e).setName("重置插件配置 (data.json)").setDesc("⚠️ 警告:开启后将覆盖插件的本地配置(包括本插件)").addToggle(o=>{o.setValue(s.pluginData===!0).onChange(async c=>{Et(t),t.settings.updater.updateScope={...t.settings.updater.updateScope,pluginData:c},u.saveSettings()})}),new w.Setting(e).setName("Obsidian 冲突处理").setHeading();const n=[{value:"prompt",label:"提示冲突"},{value:"skip",label:"跳过冲突"},{value:"ignore",label:"忽略冲突"},{value:"no_merge",label:"不合并"}];new w.Setting(e).setName("设置冲突处理").setDesc("设置更新时配置文件发生冲突的处理策略").addDropdown(o=>{n.forEach(c=>o.addOption(c.value,c.label)),o.setValue(t.settings.updater?.obsidianConflictHandling?.settings||"prompt").onChange(async c=>{Et(t),t.settings.updater.obsidianConflictHandling.settings=c,u.saveSettings()})}),new w.Setting(e).setName("主题冲突处理").setDesc("设置更新时主题文件发生冲突的处理策略").addDropdown(o=>{n.forEach(c=>o.addOption(c.value,c.label)),o.setValue(t.settings.updater?.obsidianConflictHandling?.themes||"prompt").onChange(async c=>{Et(t),t.settings.updater.obsidianConflictHandling.themes=c,u.saveSettings()})}),new w.Setting(e).setName("样式片段冲突处理").setDesc("设置更新时 CSS 片段发生冲突的处理策略").addDropdown(o=>{n.forEach(c=>o.addOption(c.value,c.label)),o.setValue(t.settings.updater?.obsidianConflictHandling?.snippets||"prompt").onChange(async c=>{Et(t),t.settings.updater.obsidianConflictHandling.snippets=c,u.saveSettings()})}),new w.Setting(e).setName("插件冲突处理").setDesc("设置更新时插件文件发生冲突的处理策略").addDropdown(o=>{n.forEach(c=>o.addOption(c.value,c.label)),o.setValue(t.settings.updater?.obsidianConflictHandling?.plugins||"prompt").onChange(async c=>{Et(t),t.settings.updater.obsidianConflictHandling.plugins=c,u.saveSettings()})}),new w.Setting(e).setName("排除模式").setDesc("配置不需要更新的文件路径匹配模式").addButton(o=>{o.setButtonText("添加").setIcon("plus").onClick(()=>{Et(t),t.settings.updater.excludePatterns=t.settings.updater.excludePatterns||[],t.settings.updater.excludePatterns.push(""),u.saveSettings(),e.empty(),At(u,e)})}),(t.settings.updater?.excludePatterns||[]).forEach((o,c)=>{new w.Setting(e).setName(`排除模式 ${c+1}`).addText(l=>{l.setPlaceholder("e.g. **/*.js").setValue(o).onChange(d=>{t.settings.updater?.excludePatterns&&(t.settings.updater.excludePatterns[c]=d,u.saveSettings())})}).addExtraButton(l=>{l.setIcon("trash").setTooltip("删除").onClick(()=>{t.settings.updater?.excludePatterns&&(t.settings.updater.excludePatterns.splice(c,1),u.saveSettings(),e.empty(),At(u,e))})})}),new w.Setting(e).setName("自定义替换").setDesc("配置更新前自动执行的文本替换规则,按顺序应用").setHeading().addButton(o=>{o.setButtonText("添加").setIcon("plus").onClick(()=>{Et(t),t.settings.updater.customReplacements=t.settings.updater.customReplacements||{};const c=`pattern-${Object.keys(t.settings.updater.customReplacements).length}`;t.settings.updater.customReplacements[c]="",u.saveSettings(),e.empty(),At(u,e)})});const r=t.settings.updater?.customReplacements||{},a=Object.keys(r);a.forEach((o,c)=>{const l=e.createDiv({cls:"paperbell-replacement-item"}),d=l.createDiv({cls:"paperbell-replacement-fields"});d.createEl("input",{type:"text",value:o,placeholder:"搜索模式"}).addEventListener("change",E=>{const x=o,C=E.target.value;if(x!==C&&t.settings.updater?.customReplacements){const T=t.settings.updater.customReplacements[x];delete t.settings.updater.customReplacements[x],t.settings.updater.customReplacements[C]=T,u.saveSettings()}}),d.createEl("input",{type:"text",value:r[o],placeholder:"替换文本"}).addEventListener("change",E=>{t.settings.updater?.customReplacements&&(t.settings.updater.customReplacements[o]=E.target.value,u.saveSettings())});const g=l.createDiv({cls:"paperbell-replacement-buttons"}),p=g.createEl("span",{cls:"clickable-icon",attr:{"aria-label":"上移"}});w.setIcon(p,"arrow-up"),c===0&&p.addClass("is-disabled"),p.addEventListener("click",()=>{if(c>0&&t.settings.updater?.customReplacements){const E={};a.forEach((x,C)=>{C===c-1?E[o]=r[o]:C===c?E[a[c-1]]=r[a[c-1]]:E[x]=r[x]}),t.settings.updater.customReplacements=E,u.saveSettings(),e.empty(),At(u,e)}});const y=g.createEl("span",{cls:"clickable-icon",attr:{"aria-label":"下移"}});w.setIcon(y,"arrow-down"),c===a.length-1&&y.addClass("is-disabled"),y.addEventListener("click",()=>{if(c{C===c?E[a[c+1]]=r[a[c+1]]:C===c+1?E[o]=r[o]:E[x]=r[x]}),t.settings.updater.customReplacements=E,u.saveSettings(),e.empty(),At(u,e)}});const v=g.createEl("span",{cls:"clickable-icon",attr:{"aria-label":"删除"}});w.setIcon(v,"trash"),v.addEventListener("click",()=>{t.settings.updater?.customReplacements&&(delete t.settings.updater.customReplacements[o],u.saveSettings(),e.empty(),At(u,e))})})}function Et(u){u.settings.updater||(u.settings.updater={repository:""}),u.settings.updater.obsidianConflictHandling||(u.settings.updater.obsidianConflictHandling={}),u.settings.updater.updateScope||(u.settings.updater.updateScope={regularFiles:!0,obsidianCore:!0,plugins:!0,themes:!0,snippets:!0,pluginData:!1})}function sr(u,e){const{plugin:t}=u;new w.Setting(e).setName("新机构笔记位置").setDesc("指定新创建机构笔记的存放目录").addText(s=>{s.setPlaceholder("输入位置").setValue(t.settings.noteLocation).onChange(async n=>{t.settings.noteLocation=n,u.saveSettings()})}),new w.Setting(e).setName("机构笔记模板").setDesc("选择创建机构笔记时使用的模板文件").addText(s=>{new nr(t.app,s.inputEl,n=>{t.settings.institutionNoteTemplate=n,u.saveSettings()}),s.setPlaceholder("输入模板").setValue(t.settings.institutionNoteTemplate).onChange(async n=>{t.settings.institutionNoteTemplate=n,u.saveSettings()})}),new w.Setting(e).setName("自动生成机构笔记").setDesc("导入数据时自动检测并创建缺失的机构笔记").addToggle(s=>{s.setValue(t.settings.autoGenerateInstitutionNotes).onChange(async n=>{t.settings.autoGenerateInstitutionNotes=n,u.saveSettings()})}),new w.Setting(e).setName("创建后打开机构笔记").setDesc("笔记创建完成后自动打开编辑窗口").addToggle(s=>{s.setValue(t.settings.openInstitutionAfterCreation).onChange(async n=>{t.settings.openInstitutionAfterCreation=n,u.saveSettings()})}),new w.Setting(e).setName("监听文件创建路径").setDesc("监控指定路径下的新文件以自动生成关联笔记").addText(s=>{s.setPlaceholder("输入位置").setValue(t.settings.listenToFileCreatedInPath).onChange(async n=>{t.settings.listenToFileCreatedInPath=n,u.saveSettings()})})}class nr extends w.AbstractInputSuggest{constructor(e,t,s){super(e,t),this.inputEl=t,this.onChange=s}getSuggestions(e){const t=this.app.vault.getMarkdownFiles();if(!e)return t;const s=w.prepareFuzzySearch(e.toLowerCase());return t.map(i=>{const r=i.path.slice(0,-3).toLowerCase(),a=s(r);return{file:i,result:a}}).filter(i=>i.result!==null).sort((i,r)=>r.result.score-i.result.score).map(i=>i.file)}renderSuggestion(e,t){t.setText(e.basename)}selectSuggestion(e,t){const s=e.path.slice(0,-3);this.setValue(s),this.onChange(s),this.close()}}function ir(u,e){const{plugin:t}=u;new w.Setting(e).setName("版本").setDesc(`PaperBell v${t.manifest.version}`),new w.Setting(e).setName("文档").setDesc("浏览插件的详细使用文档").addButton(s=>{s.setButtonText("打开文档").onClick(()=>{window.open("https://paperbell.cn")})}),new w.Setting(e).setName("GitHub").setDesc("访问 GitHub 仓库查看源码或提交问题").addButton(s=>{s.setButtonText("打开 GitHub").onClick(()=>{window.open("https://github.com/PaperBell-Org/Obsidian-PaperBell")})}),new w.Setting(e).setName("支持").setDesc("支持插件的持续开发").addButton(s=>{s.setButtonText("支持开发").onClick(()=>{window.open("https://paperbell.cn")})}),new w.Setting(e).setName("联系我们").setDesc("发送邮件联系开发团队").addButton(s=>{s.setButtonText("发送邮件").onClick(()=>{window.open("mailto:support@paperbell.cn")})}),new w.Setting(e).setName("引导向导").setDesc("重新启动欢迎引导和设置向导").addButton(s=>{s.setButtonText("重新开始引导").setIcon("graduation-cap").onClick(async()=>{t.settings.landing={...Ft},await t.saveSettings(),u.close(),t.app.workspace.getLeaf().setViewState({type:Ut})})})}const wi="ppb-builtin-";function rr(u){return Wt.find(e=>e.id===u.agentType)??Wt[0]}function xs(u,e,t){return t==="directory"?w.normalizePath(`${u}/${e}/SKILL.md`):w.normalizePath(`${u}/${e}.md`)}function yi(u,e){return w.normalizePath(`${u}/${e}`)}async function Ms(u,e){const t=e??Rs,s=u.vault.adapter,n=w.normalizePath(t.skillsDirectory),i=rr(t);await s.exists(n)||await s.mkdir(n);for(const r of qt){const a=t.builtinSkillStates[r.id]!==!1,o=xs(n,r.id,i.skillFormat);if(a){if(i.skillFormat==="directory"){const c=yi(n,r.id);await s.exists(c)||await s.mkdir(c)}await s.write(o,r.content)}else await ar(s,n,r.id,i.skillFormat)}i.skillFormat==="directory"&&await or(s,n)}async function ar(u,e,t,s){if(s==="directory"){const n=xs(e,t,"directory");await u.exists(n)&&await u.remove(n);const i=yi(e,t);await u.exists(i)&&await u.rmdir(i,!1)}else{const n=xs(e,t,"flat");await u.exists(n)&&await u.remove(n)}}async function or(u,e){for(const t of qt){const s=w.normalizePath(`${e}/${wi}${t.id}.md`);await u.exists(s)&&await u.remove(s)}}async function cr(u,e){const t=u.vault.adapter,s=w.normalizePath(e);if(await t.exists(s))for(const n of qt){const i=w.normalizePath(`${s}/${n.id}/SKILL.md`);await t.exists(i)&&await t.remove(i);const r=w.normalizePath(`${s}/${n.id}`);await t.exists(r)&&await t.rmdir(r,!1);const a=w.normalizePath(`${s}/${n.id}.md`);await t.exists(a)&&await t.remove(a);const o=w.normalizePath(`${s}/${wi}${n.id}.md`);await t.exists(o)&&await t.remove(o)}}class lr extends w.Modal{constructor(e,t,s){super(e),this.skillName=t,this.skillContent=s}onOpen(){const{contentEl:e,modalEl:t}=this;t.addClass("mod-narrow"),e.createEl("h2",{text:this.skillName});const s=e.createDiv({cls:"paperbell-skill-preview"});s.style.cssText="max-height: 60vh; overflow-y: auto; padding: 12px; background: var(--background-secondary); border-radius: 6px; font-size: 13px; line-height: 1.5; white-space: pre-wrap; font-family: var(--font-monospace);",s.setText(this.skillContent),new w.Setting(e).addButton(n=>n.setButtonText("关闭").onClick(()=>this.close()))}onClose(){this.contentEl.empty()}}function ue(u,e){const{plugin:t}=u;t.settings.aiSkills||(t.settings.aiSkills={...Rs});const s=t.settings.aiSkills;ur(u,e,s),dr(u,e,s),hr(u,e,s)}function ur(u,e,t){new w.Setting(e).setName("AI Agent").setHeading(),Wt.find(s=>s.id===t.agentType),new w.Setting(e).setName("当前 Agent").setDesc("选择你使用的 AI 编程工具,技能文件将安装到对应的目录中").addDropdown(s=>{for(const n of Wt)s.addOption(n.id,n.name);s.setValue(t.agentType).onChange(async n=>{const i=n,r=t.agentType;if(i===r)return;const a=Wt.find(d=>d.id===i),o=t.skillsDirectory,c=a.skillsDirectory;t.marketplaceSkills.some(d=>d.installed)&&o!==c&&await fr(u,o,c)&&await gr(u,t,o,c),await cr(u.plugin.app,o),t.agentType=i,t.skillsDirectory=c,u.saveSettings(),await Ms(u.plugin.app,t),e.empty(),ue(u,e)})}),new w.Setting(e).setName("技能文件目录").setDesc(t.skillsDirectory).setDisabled(!0)}function dr(u,e,t){if(new w.Setting(e).setName("内置技能").setHeading(),qt.length===0){e.createEl("p",{text:"暂无内置技能",cls:"setting-item-description"});return}for(const s of qt){const n=t.builtinSkillStates[s.id]!==!1;new w.Setting(e).setName(s.name).setDesc(s.description).addToggle(r=>r.setValue(n).onChange(async a=>{t.builtinSkillStates[s.id]=a,u.saveSettings(),await Ms(u.plugin.app,t)})).addExtraButton(r=>r.setIcon("eye").setTooltip("预览技能内容").onClick(()=>{new lr(u.plugin.app,s.name,s.content).open()}))}}function hr(u,e,t){new w.Setting(e).setName("技能市场").setHeading();const s=e.createDiv({cls:"paperbell-marketplace-placeholder"});s.style.cssText="padding: 24px; text-align: center; border: 1px dashed var(--background-modifier-border); border-radius: 8px; margin-bottom: 12px;";const n=s.createDiv();if(n.style.cssText="margin-bottom: 8px;",w.setIcon(n,"store"),n.style.cssText+="display: flex; justify-content: center; opacity: 0.5;",s.createEl("p",{text:"技能市场即将上线"}).style.cssText="font-weight: 600; margin-bottom: 4px; color: var(--text-normal);",s.createEl("p",{text:"届时您可以在此浏览和安装来自社区的第三方技能"}).style.cssText="font-size: 13px; color: var(--text-muted); margin: 0;",t.marketplaceSkills.length>0){new w.Setting(e).setName("已安装的技能").setHeading();for(const i of t.marketplaceSkills)pr(u,e,i,t)}}function pr(u,e,t,s){const n=t.installed?"已安装":"未安装",i=new w.Setting(e).setName(t.name).setDesc(t.description||n);i.addToggle(r=>r.setValue(t.enabled).setDisabled(!t.installed).onChange(a=>{t.enabled=a,u.saveSettings()})),t.installed&&i.addButton(r=>r.setButtonText("卸载").setWarning().onClick(async()=>{await Xs(u,t,s),e.empty(),ue(u,e)})),i.addExtraButton(r=>r.setIcon("trash").setTooltip("从列表中删除").onClick(async()=>{t.installed&&await Xs(u,t,s);const a=s.marketplaceSkills.indexOf(t);a>=0&&s.marketplaceSkills.splice(a,1),u.saveSettings(),e.empty(),ue(u,e)}))}async function Xs(u,e,t){const s=u.plugin.app.vault.adapter;try{const n=w.normalizePath(`${t.skillsDirectory}/${e.filename}`);await s.exists(n)&&await s.remove(n),e.installed=!1,e.enabled=!1,u.saveSettings(),new w.Notice(`技能已卸载: ${e.name}`)}catch(n){console.error("Failed to uninstall skill:",n),new w.Notice(`卸载失败: ${n instanceof Error?n.message:"未知错误"}`)}}function fr(u,e,t){return new Promise(s=>{const n=new w.Modal(u.plugin.app);n.titleEl.setText("迁移技能文件"),n.contentEl.createEl("p",{text:"切换 Agent 后技能目录将变更:"}),n.contentEl.createEl("p",{text:`${e} → ${t}`}).style.cssText="font-family: var(--font-monospace); font-size: 13px; padding: 8px; background: var(--background-secondary); border-radius: 4px;",n.contentEl.createEl("p",{text:"是否将已安装的技能文件迁移到新目录?"}),new w.Setting(n.contentEl).addButton(i=>i.setButtonText("迁移").setCta().onClick(()=>{n.close(),s(!0)})).addButton(i=>i.setButtonText("不迁移").onClick(()=>{n.close(),s(!1)})),n.onClose=()=>s(!1),n.open()})}async function gr(u,e,t,s){const n=u.plugin.app.vault.adapter,i=w.normalizePath(s);await n.exists(i)||await n.mkdir(i);let r=0;for(const a of e.marketplaceSkills){if(!a.installed)continue;const o=w.normalizePath(`${t}/${a.filename}`),c=w.normalizePath(`${s}/${a.filename}`);try{if(await n.exists(o)){const l=await n.read(o);await n.write(c,l),await n.remove(o),r++}}catch(l){console.error(`Failed to migrate skill ${a.name}:`,l)}}r>0&&new w.Notice(`已迁移 ${r} 个技能文件到 ${s}`)}function mr(){const u=window.require||globalThis.require||void 0;if(typeof u!="function")throw new Error("Node require() is not available in this environment");try{return u("node:child_process")}catch{return u("child_process")}}function vr(){const u=window.require||globalThis.require||void 0;if(typeof u!="function")throw new Error("Node require() is not available in this environment");try{return u("node:fs")}catch{return u("fs")}}function br(){const u=window.require||globalThis.require||void 0;if(typeof u!="function")throw new Error("Node require() is not available in this environment");try{return u("node:path")}catch{return u("path")}}function wr(){const u=window.require||globalThis.require||void 0;if(typeof u!="function")throw new Error("Node require() is not available in this environment");try{return u("node:os")}catch{return u("os")}}function Si(u){const t=wr().homedir();let s=u.replace(/^~/,t);return s=s.replace(/%([^%]+)%/g,(n,i)=>process.env[i]||""),s}function $s(u){try{const e=vr();return e.accessSync(u,e.constants.X_OK),!0}catch{return!1}}function Js(u){const e=mr(),s=process.platform==="win32"?"where":"which";try{const i=e.execSync(`${s} ${u}`,{encoding:"utf-8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim().split(` +`)[0]?.trim();return i&&$s(i)?i:null}catch{return null}}function yr(u){const e=process.platform,t=u.commonPaths[e]||[],s=e==="win32"?u.windowsBinaryName:u.binaryName,n=br();for(const i of t){const r=Si(i),a=n.join(r,s);if($s(a))return a}return null}function Cs(u,e){const t=pe.find(a=>a.agentType===u);if(!t)return{found:!1,path:"",error:`Unknown agent type: ${u}`};if(e&&e.trim()){const a=Si(e.trim());return $s(a)?{found:!0,path:a}:{found:!1,path:"",error:`Custom path not found or not executable: ${a}`}}const s=process.platform==="win32",n=s?t.windowsBinaryName:t.binaryName,i=Js(n);if(i)return{found:!0,path:i};if(s){const a=Js(t.binaryName);if(a)return{found:!0,path:a}}const r=yr(t);return r?{found:!0,path:r}:{found:!1,path:"",error:`${t.name} CLI not found. Please install it or configure the path manually.`}}function fe(u,e){const{plugin:t}=u;t.settings.agentAutoExec||(t.settings={...t.settings,agentAutoExec:{...gi}},t.saveSettings());const s=t.settings.agentAutoExec;s&&(Sr(u,e,s),Er(u,e,s),kr(u,e,s),Cr(u,e,s))}function Sr(u,e,t){if(new w.Setting(e).setName("启用自动执行").setDesc("当文件变更时自动触发 AI Agent 执行任务").addToggle(s=>s.setValue(t.enabled).onChange(async n=>{t.enabled=n,u.saveSettings(),e.empty(),fe(u,e)})),!t.enabled){e.createEl("p",{text:"启用后可配置自动化规则,在文件变更时自动调用 AI CLI 工具。",cls:"setting-item-description"});return}}function Er(u,e,t){if(t.enabled){e.createEl("h3",{text:"CLI 路径配置"}),e.createEl("p",{text:"配置 AI CLI 工具的路径,留空则自动检测。",cls:"setting-item-description"});for(const s of pe){const n=s.agentType,i=t.binaryPaths[n]||"";new w.Setting(e).setName(s.name).setDesc(`${s.binaryName} CLI 路径`).addText(r=>r.setPlaceholder("自动检测").setValue(i).onChange(async a=>{a.trim()?t.binaryPaths[n]=a.trim():delete t.binaryPaths[n],u.saveSettings()})).addButton(r=>r.setButtonText("检测").onClick(()=>{const a=Cs(n,i);a.found?new w.Notice(`✓ 找到 ${s.name}: ${a.path}`):new w.Notice(`✕ 未找到 ${s.name}: ${a.error||"请手动配置路径"}`)}))}}}function kr(u,e,t){if(!t.enabled)return;const s=e.createDiv({cls:"setting-item setting-item-heading"});if(s.createEl("div",{cls:"setting-item-info"}).createEl("div",{cls:"setting-item-name",text:"自动化规则"}),s.createDiv({cls:"setting-item-control"}).createEl("button",{cls:"mod-cta",text:"添加规则"}).addEventListener("click",r=>{const a=new w.Menu;for(const o of mi)a.addItem(c=>{c.setTitle(o.name).setSection("presets").onClick(()=>{const l=Bi(o.id);t.rules.push(l),u.saveSettings(),e.empty(),fe(u,e)})});a.showAtMouseEvent(r)}),t.rules.length===0){e.createEl("p",{text:"暂无自动化规则,点击「添加规则」创建。",cls:"setting-item-description"});return}for(const r of t.rules)xr(u,e,t,r)}function xr(u,e,t,s){const n=e.createDiv({cls:"ppb-agent-rule-card"});n.style.cssText="border: 1px solid var(--background-modifier-border); border-radius: 8px; padding: 12px; margin-bottom: 12px;",new w.Setting(n).setName("规则名称").addText(f=>f.setPlaceholder("输入规则名称").setValue(s.name).onChange(async h=>{s.name=h,u.saveSettings()})).addToggle(f=>f.setValue(s.enabled).onChange(async h=>{s.enabled=h,u.saveSettings()})).addButton(f=>f.setIcon("trash").setWarning().onClick(()=>{const h=t.rules.indexOf(s);h>=0&&(t.rules.splice(h,1),u.saveSettings(),e.empty(),fe(u,e))})),new w.Setting(n).setName("AI Agent").setDesc("选择要调用的 AI CLI 工具").addDropdown(f=>{for(const h of pe)f.addOption(h.agentType,h.name);f.setValue(s.agentType),f.onChange(async h=>{s.agentType=h,u.saveSettings()})}),new w.Setting(n).setName("监听路径").setDesc("Vault 中要监听的文件夹路径,用逗号分隔").addText(f=>f.setPlaceholder("例如: Projects, Inputs/Zotero").setValue(s.watchPaths.join(", ")).onChange(async h=>{s.watchPaths=h.split(",").map(g=>g.trim()).filter(g=>g.length>0),u.saveSettings()}));const i=n.createDiv({cls:"ppb-agent-events"});i.style.cssText="padding: 0 0 8px 0;";const r=new w.Setting(i).setName("触发事件").setDesc("选择哪些文件操作会触发此规则"),a=[{value:"create",label:"新建"},{value:"modify",label:"编辑"},{value:"delete",label:"删除"},{value:"rename",label:"重命名"}];for(const f of a)r.addToggle(h=>{h.setValue(s.triggerEvents.includes(f.value)).setTooltip(f.label).onChange(async y=>{y?s.triggerEvents.includes(f.value)||s.triggerEvents.push(f.value):s.triggerEvents=s.triggerEvents.filter(v=>v!==f.value),u.saveSettings()});const p=h.toggleEl.parentElement?.createSpan({text:f.label});p&&(p.style.cssText="font-size: 0.8em; margin-left: 4px; margin-right: 8px; color: var(--text-muted);")});new w.Setting(n).setName("Prompt 模板").setDesc("支持占位符: {{filePath}}, {{fileName}}, {{eventType}}, {{vaultPath}}, {{timestamp}}").addTextArea(f=>{f.setPlaceholder("请处理以下文件变更: {{filePath}} ({{eventType}})").setValue(s.promptTemplate).onChange(async h=>{s.promptTemplate=h,u.saveSettings()}),f.inputEl.rows=4,f.inputEl.style.width="100%"}),new w.Setting(n).setName("自定义 CLI 路径").setDesc("覆盖全局配置的 CLI 路径(留空使用全局配置)").addText(f=>f.setPlaceholder("使用全局配置").setValue(s.customBinaryPath).onChange(async h=>{s.customBinaryPath=h.trim(),u.saveSettings()}));const c=n.createDiv().createEl("details"),l=c.createEl("summary",{text:"高级设置"});l.style.cssText="cursor: pointer; font-size: 0.85em; color: var(--text-muted); margin-bottom: 8px;";const d=c.createDiv();new w.Setting(d).setName("防抖延迟 (ms)").setDesc("文件变更后等待多久再触发(避免频繁触发)").addText(f=>f.setPlaceholder("2000").setValue(String(s.debounceMs)).onChange(async h=>{const g=parseInt(h,10);!isNaN(g)&&g>=0&&(s.debounceMs=g,u.saveSettings())})),new w.Setting(d).setName("超时 (ms)").setDesc("0 = 不限制").addText(f=>f.setPlaceholder("0").setValue(String(s.timeoutMs)).onChange(async h=>{const g=parseInt(h,10);!isNaN(g)&&g>=0&&(s.timeoutMs=g,u.saveSettings())})),new w.Setting(d).setName("最大并发数").setDesc("此规则同时运行的最大进程数(0 = 不限制)").addText(f=>f.setPlaceholder("1").setValue(String(s.maxConcurrent)).onChange(async h=>{const g=parseInt(h,10);!isNaN(g)&&g>=0&&(s.maxConcurrent=g,u.saveSettings())})),new w.Setting(d).setName("工作目录").setDesc("CLI 进程的工作目录(相对 Vault 根目录,留空为 Vault 根)").addText(f=>f.setPlaceholder("Vault 根目录").setValue(s.workingDirectory).onChange(async h=>{s.workingDirectory=h.trim(),u.saveSettings()})),new w.Setting(d).setName("额外参数").setDesc("传递给 CLI 的额外命令行参数,用逗号分隔").addText(f=>f.setPlaceholder("例如: --verbose, --no-color").setValue(s.extraArgs.join(", ")).onChange(async h=>{s.extraArgs=h.split(",").map(g=>g.trim()).filter(g=>g.length>0),u.saveSettings()})),new w.Setting(d).setName("执行前确认").setDesc("触发时弹出确认通知,需用户手动允许后才执行").addToggle(f=>f.setValue(s.requireConfirmation??!1).onChange(async h=>{s.requireConfirmation=h,u.saveSettings()})),new w.Setting(d).setName("确认超时 (ms)").setDesc("超时后自动拒绝执行(默认 30000ms = 30秒)").addText(f=>f.setPlaceholder("30000").setValue(String(s.confirmationTimeoutMs??3e4)).onChange(async h=>{const g=parseInt(h,10);!isNaN(g)&&g>=0&&(s.confirmationTimeoutMs=g,u.saveSettings())})),new w.Setting(d).setName("预授权工具").setDesc("Claude Code 的 --allowedTools 参数,用逗号分隔。例如: Edit, Write, Read, Bash(git *)").addText(f=>f.setPlaceholder("Edit, Write, Read").setValue((s.allowedTools??[]).join(", ")).onChange(async h=>{s.allowedTools=h.split(",").map(g=>g.trim()).filter(g=>g.length>0),u.saveSettings()}))}function Cr(u,e,t){t.enabled&&(e.createEl("h3",{text:"全局设置"}),new w.Setting(e).setName("全局最大并发数").setDesc("所有规则同时运行的最大进程总数").addText(s=>s.setValue(String(t.globalMaxConcurrent)).onChange(async n=>{const i=parseInt(n,10);!isNaN(i)&&i>=0&&(t.globalMaxConcurrent=i,u.saveSettings())})),new w.Setting(e).setName("触发通知").setDesc("当规则被触发时显示 Notice 通知").addToggle(s=>s.setValue(t.showNoticeOnTrigger).onChange(async n=>{t.showNoticeOnTrigger=n,u.saveSettings()})),new w.Setting(e).setName("最大输出行数").setDesc("每次运行保留的最大输出行数(防止内存溢出)").addText(s=>s.setValue(String(t.maxOutputLinesPerRun)).onChange(async n=>{const i=parseInt(n,10);!isNaN(i)&&i>0&&(t.maxOutputLinesPerRun=i,u.saveSettings())})),new w.Setting(e).setName("最大历史记录数").setDesc("保留的运行历史记录数量").addText(s=>s.setValue(String(t.maxHistoryRuns)).onChange(async n=>{const i=parseInt(n,10);!isNaN(i)&&i>0&&(t.maxHistoryRuns=i,u.saveSettings())})))}class Ds extends w.Modal{constructor(e,t,s){super(e),this.activeTabId="profile",this.initialTabId=null,this.mobileTitleEl=null,this.isProVerified=!1,this.dirty=!1,this.tabs=[{id:"profile",name:"用户资料",icon:"user",category:"core"},{id:"license",name:"许可证",icon:"key",category:"core"},{id:"theme",name:"主题颜色",icon:"palette",category:"display",proOnly:!0},{id:"components",name:"组件数据源",icon:"database",category:"data",proOnly:!0},{id:"updater",name:"更新管理",icon:"download",category:"advanced",proOnly:!0},{id:"institution",name:"机构笔记",icon:"building",category:"advanced",proOnly:!0},{id:"ai-skills",name:"技能",icon:"bot",category:"ai",proOnly:!0},{id:"agent-auto-exec",name:"自动执行",icon:"play-circle",category:"ai",proOnly:!0},{id:"about",name:"关于",icon:"info",category:"info"}],this.categories=[{id:"core",name:"核心设置"},{id:"display",name:"显示与外观"},{id:"data",name:"数据源"},{id:"advanced",name:"高级"},{id:"ai",name:"AI"},{id:"info",name:"信息"}],this.plugin=t,this.initialTabId=s??null,this.debouncedSave=w.debounce(async()=>{await this.plugin.saveSettings(),this.dirty=!1},100,!0)}saveSettings(){this.dirty=!0,this.debouncedSave()}onOpen(){const{contentEl:e,modalEl:t}=this;t.toggleClass(["mod-settings","mod-sidebar-layout"],!0),e.empty(),e.addClass("vertical-tabs-container"),this.mobileTitleEl=t.querySelector(".modal-title"),w.Platform.isMobile&&(this.activeTabId=""),this.sidebarEl=e.createDiv({cls:"vertical-tab-header"}),this.modalContentEl=e.createDiv({cls:"vertical-tab-content-container"}),this.plugin.verificationWorker.verify().then(s=>{this.isProVerified=s,this.renderSidebar(),this.initializeView()})}initializeView(){w.Platform.isMobile?this.initialTabId?this.openTab(this.initialTabId):this.updateMobileView():(this.activeTabId=this.initialTabId||"profile",this.renderSidebar(),this.renderContent())}onClose(){this.modalContentEl?.empty(),this.dirty&&(this.debouncedSave.cancel(),this.plugin.saveSettings(),this.dirty=!1),this.plugin.getDashboardStore().bumpSettingsVersion()}renderSidebar(){this.sidebarEl.empty();const e=this.tabs.filter(t=>!t.proOnly||this.isProVerified);this.categories.forEach(t=>{const s=e.filter(r=>r.category===t.id);if(s.length===0)return;const n=this.sidebarEl.createDiv({cls:"vertical-tab-header-group"});n.createDiv({cls:"vertical-tab-header-group-title",text:t.name});const i=n.createDiv({cls:"vertical-tab-header-group-items"});s.forEach(r=>{const a=i.createDiv({cls:`vertical-tab-nav-item tappable ${this.activeTabId===r.id?"is-active":""}`});a.setAttribute("data-tab-id",r.id);const o=a.createDiv({cls:"vertical-tab-nav-item-icon"});w.setIcon(o,r.icon),a.createDiv({cls:"vertical-tab-nav-item-title",text:r.name});const c=a.createDiv({cls:"vertical-tab-nav-item-chevron"});w.setIcon(c,"chevron-right"),a.addEventListener("click",()=>{this.openTab(r.id)})})})}openTab(e){this.activeTabId=e,this.sidebarEl.querySelectorAll(".vertical-tab-nav-item").forEach(s=>{s.getAttribute("data-tab-id")===e?s.addClass("is-active"):s.removeClass("is-active")}),this.renderContent(),w.Platform.isMobile&&this.updateMobileView()}goBackToNavigation(){this.activeTabId="",this.sidebarEl.querySelectorAll(".vertical-tab-nav-item").forEach(t=>{t.removeClass("is-active")}),this.modalContentEl.empty(),this.updateMobileView()}updateMobileView(){if(!w.Platform.isMobile)return;const e=this.activeTabId!=="";if(this.sidebarEl.toggleClass("is-mobile-hidden",e),this.modalContentEl.toggleClass("is-mobile-hidden",!e),this.mobileTitleEl)if(this.mobileTitleEl.empty(),e){const t=this.mobileTitleEl.createDiv({cls:"clickable-icon modal-setting-back-button mod-raised"});w.setIcon(t,"arrow-left"),t.addEventListener("click",()=>{this.goBackToNavigation()});const s=this.tabs.find(n=>n.id===this.activeTabId);this.mobileTitleEl.createSpan({text:s?.name||"设置"})}else this.mobileTitleEl.createSpan({text:"PaperBell"})}renderContent(){this.modalContentEl.empty();const e=this.tabs.find(o=>o.id===this.activeTabId);if(!e)return;const t=this.modalContentEl.createDiv({cls:"vertical-tab-content"}),s=t.createDiv({cls:"vertical-tab-content-header"}),n=s.createEl("h2",{cls:"vertical-tab-content-header-title"}),i=n.createSpan({cls:"vertical-tab-content-header-icon"});w.setIcon(i,e.icon),n.createSpan({text:e.name});const r=this.getTabDescription(e.id);r&&s.createEl("p",{cls:"vertical-tab-content-header-desc",text:r});const a=t.createDiv({cls:"vertical-tab-content-body"});this.renderTabContent(e.id,a)}getTabDescription(e){return{profile:"配置您在仪表板中显示的个人信息",license:"管理 PaperBell 许可证激活状态",theme:"自定义界面主题颜色",components:"配置各仪表板组件的数据来源",updater:"管理 PaperBell 仓库更新",institution:"配置机构笔记的自动生成","ai-skills":"管理 AI 技能,配置内置技能与技能市场","agent-auto-exec":"配置文件变更时自动触发 AI Agent 执行任务",about:"关于 PaperBell 插件"}[e]||""}renderTabContent(e,t){switch(e){case"profile":Ui(this,t);break;case"license":Es(this,t);break;case"theme":vi(this,t);break;case"components":Yi(this,t);break;case"updater":At(this,t);break;case"institution":sr(this,t);break;case"ai-skills":ue(this,t);break;case"agent-auto-exec":fe(this,t);break;case"about":ir(this,t);break;default:t.createEl("p",{text:"此设置页面正在开发中..."})}}}const Rt={primary:"#648EC0",secondary:"#B0D2EC",muted:"#B5ACA3","muted-foreground":"#849DBB",foreground:"#533A33",background:"#ffffff","ticket-bg-start":"#FFF4E6","ticket-bg-end":"#FFE7CC","ticket-border":"#fed7aa","ticket-accent":"#FFB86A","ticket-text":"#92400e","ticket-text-muted":"#9ca3af"},Lt={primary:"#8b5cf6",secondary:"#3730a3",muted:"#262640","muted-foreground":"#94a3b8",foreground:"#e2e8f0",background:"#0f0f23","ticket-bg-start":"#262640","ticket-bg-end":"#1a1a35","ticket-border":"#374151","ticket-accent":"#8b5cf6","ticket-text":"#e2e8f0","ticket-text-muted":"#94a3b8"},Nt={registrationId:"",oauthLoginState:void 0,oauthLoginStateCreatedAt:void 0,noteLocation:"Locations/Institutes",institutionNoteTemplate:"",autoGenerateInstitutionNotes:!1,openInstitutionAfterCreation:!1,listenToFileCreatedInPath:"Persons/Scholars",enableUpdater:!1,landing:Ft,componentDataSources:Dt,dataServiceConfig:Ht,updater:{repository:"PaperBell-Org/longform-maintaining",targetPluginId:"longform",excludePatterns:[],autoUpdate:!1,minAppVersion:"0.0.0",customReplacements:{},updateScope:{regularFiles:!0,obsidianCore:!0,plugins:!0,themes:!0,snippets:!0,pluginData:!1},obsidianConflictHandling:{settings:"prompt",themes:"prompt",snippets:"prompt",plugins:"prompt"}},userProfile:{name:"用户",title:"研究者",email:"user@example.com",institution:"研究机构",avatar:"https://avatars.githubusercontent.com/u/45836839?v=4"},componentSettings:{academicOverview:{showCitations:!0,showTrends:!0,trendDays:30},todayFocus:{maxItems:5,showProgress:!0,showDeadlines:!0},recentLiterature:{maxPapers:10,showAbstract:!1,showKeywords:!0,sortBy:"date"},researchFocus:{showLabels:!0,maxTopics:20,colorScheme:"default"},projectManager:{defaultView:"grid",showArchived:!1,taskFilters:!0},bookShelf:{viewMode:"covers",sortBy:"recent",showProgress:!0},todoManager:{showCompleted:!1,maxDays:7,priorities:!0},readingAnalytics:{chartType:"line",timeRange:"week",showGoals:!0}},themeColors:{light:{...Rt},dark:{...Lt}},themeModePreference:"system",darkMode:!1,pomodoroSettings:{workDuration:25,shortBreakDuration:5,longBreakDuration:15,longBreakInterval:4,enableNotifications:!0,enableStatusBar:!0,autoStartBreaks:!1,autoStartWork:!1},baseContainerPaths:{projects:null,papers:null,experiments:null,tasks:null,resources:null,books:null,literature:null},aiSkills:Rs,agentAutoExec:gi};class Dr extends w.PluginSettingTab{constructor(e,t){super(e,t),this.icon="graduation-cap",this.plugin=t}display(){const{containerEl:e}=this;e.empty(),e.addClass("paperbell-settings-entry");const t=e.createDiv({cls:"settings-entry-header"}),s=t.createDiv({cls:"settings-entry-title-container"}),n=s.createSpan({cls:"settings-entry-logo"});w.setIcon(n,"graduation-cap");const i=s.createDiv({cls:"settings-entry-title-text"});i.createEl("h2",{text:"PaperBell Pro"}),i.createEl("span",{cls:"settings-entry-version",text:`v${this.plugin.manifest.version}`}),t.createDiv({cls:"settings-entry-desc"}).createEl("p",{text:"专业的学术写作工作流增强插件,提供文献管理、项目跟踪、研究焦点可视化等功能。"}),new w.Setting(e).setName("打开设置").setDesc("在专用设置窗口中配置所有 PaperBell 功能").addButton(h=>{h.setButtonText("打开设置").setCta().onClick(()=>{new Ds(this.app,this.plugin).open()})});const a=e.createDiv({cls:"settings-entry-links"});a.createEl("h3",{text:"快速链接"});const o=a.createDiv({cls:"settings-entry-links-grid"});[{icon:"book",text:"文档",url:"https://paperbell.cn"},{icon:"github",text:"GitHub",url:"https://github.com/PaperBell-Org/Obsidian-PaperBell"},{icon:"heart",text:"支持",url:"https://paperbell.cn"},{icon:"mail",text:"联系",url:"mailto:support@paperbell.cn"}].forEach(h=>{const g=o.createEl("a",{cls:"settings-entry-link",href:h.url});g.setAttr("target","_blank");const p=g.createSpan({cls:"settings-entry-link-icon"});w.setIcon(p,h.icon),g.createSpan({text:h.text})});const l=e.createDiv({cls:"settings-entry-features"});l.createEl("h3",{text:"功能特色"});const d=[{icon:"book-open",title:"文献笔记",desc:"快速文献笔记创建",tabId:"components"},{icon:"target",title:"研究焦点",desc:"可视化研究领域和热点追踪",tabId:"components"},{icon:"folder-kanban",title:"协助项目管理",desc:"多视图项目进度跟踪",tabId:"components"},{icon:"download",title:"自动更新",desc:"一键同步最新模板与组件",tabId:"updater"},{icon:"book",title:"Focus Map",desc:"专注内容统计与可视化",tabId:"heatmap"},{icon:"palette",title:"主题定制",desc:"自定义界面颜色主题",tabId:"theme"}],f=l.createDiv({cls:"settings-entry-features-grid"});d.forEach(h=>{const g=f.createDiv({cls:"settings-entry-feature"});h.tabId&&(g.addClass("is-clickable"),g.addEventListener("click",()=>{this.plugin.openSettings(h.tabId)}));const p=g.createDiv({cls:"settings-entry-feature-icon"});w.setIcon(p,h.icon);const y=g.createDiv({cls:"settings-entry-feature-text"});y.createEl("strong",{text:h.title}),y.createEl("span",{text:h.desc})})}openTab(e){const t=new Ds(this.app,this.plugin);t.open(),t.openTab(e)}}const Ei=`(function(){"use strict";self.addEventListener("message",a=>{Promise.resolve().then(async()=>{try{const o=a.data;let t=!1;const r=o;if(r.type==="verify"){if(!r.activationCode){postMessage({messageSource:"verify",$error:"Access denied: No activation code provided"});return}try{const s=await fetch("https://paperbell.cn/api/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({activation_code:r.activationCode,device_id:r.deviceId,device_info:navigator.userAgent})});if(s.ok){const e=await s.json();if(e.valid&&e.data){const i=e.data;if(!i.is_active){postMessage({messageSource:"verify",$error:"Access denied: License is not active"});return}if(i.expires_at){const c=new Date(i.expires_at);if(new Date>c){postMessage({messageSource:"verify",$error:"Access denied: License has expired"});return}}t=!0,postMessage({messageSource:"verify",type:"success",verified:t,licenseData:i})}else postMessage({messageSource:"verify",$error:"Access denied: "+(e.error||"Invalid activation code")})}else{const e=await s.json().catch(()=>({}));postMessage({messageSource:"verify",$error:"Access denied: "+(e.error||"Verification failed")})}}catch(s){console.error("Verification error:",s),postMessage({messageSource:"verify",$error:"Access denied: Network error during verification"})}return}postMessage({messageSource:"verify",$error:"Unsupported import method."})}catch(o){postMessage({messageSource:"verify",$error:o.message||"Unknown error in worker"})}})})})(); +`,Qs=typeof self<"u"&&self.Blob&&new Blob(["(self.URL || self.webkitURL).revokeObjectURL(self.location.href);",Ei],{type:"text/javascript;charset=utf-8"});function Tr(u){let e;try{if(e=Qs&&(self.URL||self.webkitURL).createObjectURL(Qs),!e)throw"";const t=new Worker(e,{name:u?.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),t}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Ei),{name:u?.name})}}function _r(){let u,e;const s=new Promise((n,i)=>{u=n,e=i});return s.resolve=u,s.reject=e,s}var te=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Pr(u){return u&&u.__esModule&&Object.prototype.hasOwnProperty.call(u,"default")?u.default:u}var xe={},Ce={},tn;function Ir(){if(tn)return Ce;tn=1;class u{constructor(t){this._elements=Array.isArray(t)?t:[],this._offset=0}enqueue(t){return this._elements.push(t),this}push(t){return this.enqueue(t)}dequeue(){if(this.size()===0)return null;const t=this.front();return this._offset+=1,this._offset*20?this._elements[this._offset]:null}back(){return this.size()>0?this._elements[this._elements.length-1]:null}size(){return this._elements.length-this._offset}isEmpty(){return this.size()===0}contains(t){for(let s=this._offset;sNr),this.queue=new Fr.Queue,this.outstanding=new Map,this.app=e,this.activationCode=s,this.deviceId=this.generateDeviceId(),this.verified=!1,this.licenseData=null,this.plugin=t}generateDeviceId(){const e=localStorage.getItem("paperbell-device-id")||sessionStorage.getItem("paperbell-device-id");if(e)return localStorage.setItem("paperbell-device-id",e),sessionStorage.setItem("paperbell-device-id",e),e;const t=navigator.userAgent,s=navigator.platform,n=navigator.language,i=Intl.DateTimeFormat().resolvedOptions().timeZone,r=`${screen.width}x${screen.height}`;let a="";navigator.hardwareConcurrency&&(a=navigator.hardwareConcurrency.toString());const o=[t,s,n,i,r,a].join("|");let c=0;for(let d=0;dthis.throttle().workers)this.workers.delete(e.id),sn(e);else{const i=Date.now(),r=Math.max(.1,this.throttle().utilization)-1,a=(i-n)*r;e.active=void 0,a<=1e-10?(e.availableAt=i,this.schedule()):(e.availableAt=i+a,setTimeout(this.schedule.bind(this),a))}}availableWorker(){const e=Date.now();for(let t of this.workers.values())if(!t.active&&t.availableAt<=e)return t;if(this.workers.sizeawait this.handleWorkerMessage(e,t.data),e}onunload(){for(let e of this.workers.values())sn(e);for(;!this.queue.isEmpty();){const[e]=this.queue.pop();e.reject("Terminated")}this.shutdown=!0}async verify(){try{const e=this.availableWorker();if(!e)throw new Error("No available workers in pool");let t=_r();return e.active=[t,Date.now()],e.worker.postMessage({type:"verify",activationCode:this.activationCode,deviceId:this.deviceId}),(await t).verified}catch{return!1}}async handleWorkerMessage(e,t){if(t.messageSource==="verify"){if(t.$error){this.verified=!1,this.licenseData=null,this.finish(e,t);return}e.active&&(this.verified=t.verified,this.licenseData=t.licenseData||null,this.verified&&this.licenseData&&(this.isLicenseValid()||(this.verified=!1,this.licenseData=null,t.$error="License has expired or is invalid")),this.finish(e,t));return}this.verified=!1,this.licenseData=null,this.finish(e,t)}isLicenseValid(){if(!this.licenseData||!this.licenseData.is_active)return!1;if(this.licenseData.expires_at){const e=new Date(this.licenseData.expires_at);if(new Date>e)return!1}return!(this.licenseData.token_type&&this.licenseData.token_type!=="activation_code")}async reloadActivationCode(){this.verified=!1,this.licenseData=null,this.activationCode=this.plugin.settings.registrationId}updateActivationCode(e){this.activationCode=e,this.verified=!1,this.licenseData=null}getDeviceId(){return this.deviceId}getLicenseData(){return this.licenseData}isLicenseExpiringSoon(){if(!this.licenseData||!this.licenseData.expires_at)return!1;const e=new Date(this.licenseData.expires_at),t=new Date,s=new Date(t.getTime()+10080*60*1e3);return e<=s&&e>t}}function sn(u){u.worker.terminate(),u.active&&u.active[0].reject("Terminated"),u.active=void 0}class ee extends w.Modal{constructor(e,t,s){super(e),this.plugin=t,this.institutionName=s}async onOpen(){this.titleEl.setText("Institution Search"),this.contentEl.createEl("p",{text:"Please enter the institution name to search."});const e=this.contentEl.createDiv("search-container");this.inputEl=e.createEl("input",{type:"text",placeholder:"Institution name",cls:"institution-search-input"}),this.inputEl.addEventListener("keydown",async t=>{if(t.key==="Enter"){if(!await this.plugin.verificationWorker.verify()){new w.Notice("You are not authorized to use this feature. Please check your registration ID.");return}await this.searchInstitution(this.inputEl.value)}}),new w.Setting(e).addButton(t=>t.setButtonText("Search").onClick(async()=>{if(!await this.plugin.verificationWorker.verify()){new w.Notice("You are not authorized to use this feature. Please check your registration ID.");return}await this.searchInstitution(this.inputEl.value)})),this.resultContainer=this.contentEl.createDiv("search-results"),this.confirmButton=new w.Setting(this.contentEl).addButton(t=>t.setButtonText("Create Institution Note").setDisabled(!0).onClick(async()=>{await this.plugin.createInstitutionNote({abbr:this.institution.acronyms?.[0]||"",aliases:[...this.institution.aliases||[],...this.institution.labels?.map(s=>s.label)||[]],website:this.institution.links?.[0]||"",location:[this.institution.addresses?.[0]?.lat||0,this.institution.addresses?.[0]?.lng||0],logo:this.institution.logos?.[0]?.url||"",name:this.institution.labels?.[0]?.label||this.institution.name||"",tags:["university"]}),this.close()})),this.confirmButton.settingEl.hide(),this.institutionName&&(this.inputEl.value=this.institutionName,await this.plugin.verificationWorker.verify()&&this.searchInstitution(this.institutionName))}async searchInstitution(e){try{const t=await this.plugin.proxyService.proxyRequest({url:`https://api.ror.org/v1/organizations?query=${encodeURIComponent(`${e}`)}`,method:"GET"});if(!t.success){console.error("Error searching institution:",t.error);return}const s=t.data;if(s.items&&s.items.length>0){this.institution=s.items[0];const n=this.institution.labels?.[0]?.label||this.institution.name;n&&(this.institutionName=n),await this.displayResults()}}catch(t){console.error("Error searching institution:",t)}}async displayResults(){this.resultContainer.empty();const e=`| Field | Value | |--------|--------| | Name | ${this.institution.labels?.[0]?.label||this.institution.name||"N/A"} | | Abbreviation | ${this.institution.acronyms?.[0]||"N/A"} | @@ -69,142 +69,61 @@ ${i.join(` | Aliases | ${[...this.institution.aliases||[],this.institution.name,...this.institution.acronyms?[this.institution.acronyms[0]]:[]].join(", ")||"N/A"} | | Location | ${"["+this.institution.addresses?.[0]?.lat+", "+this.institution.addresses?.[0]?.lng+"]"} | | Wikipedia | ${this.institution.wikipedia_url||"N/A"} | -| Logo | ${this.institution.logos?.[0]?.url||"N/A"} |`;await _.MarkdownRenderer.render(this.app,a,this.resultContainer,"",this.plugin),this.confirmButton.settingEl.show(),this.confirmButton.setDisabled(this.plugin.checkIfInstitutionNoteExists(this.institutionName)),this.confirmButton.setTooltip(this.plugin.checkIfInstitutionNoteExists(this.institutionName)?"Institution Note Already Exists":"Create Institution Note")}onClose(){this.contentEl.empty()}}function v0(f,a){const r=Object.keys(a).map(i=>w0(f,i,a[i]));return r.length===1?r[0]:function(){r.forEach(i=>i())}}function w0(f,a,r){const i=f[a],o=f.hasOwnProperty(a),l=o?i:function(){return Object.getPrototypeOf(f)[a].apply(this,arguments)};let c=r(l);return i&&Object.setPrototypeOf(c,i),Object.setPrototypeOf(u,c),f[a]=u,d;function u(...h){return c===l&&f[a]===u&&d(),c.apply(this,h)}function d(){f[a]===u&&(o?f[a]=l:delete f[a]),c!==l&&(c=l,Object.setPrototypeOf(u,i||Function))}}class y0{constructor(a){this.vault=a}processTemplate(a,r){let i=a;for(const[o,l]of Object.entries(r.institute)){const c=new RegExp(`{{\\s*ppb\\.institute\\.${o}\\s*}}`,"g");Array.isArray(l)?i=i.replace(c,l.map(u=>`- ${u}`).join(` -`)):i=i.replace(c,String(l))}return i}async readTemplateFile(a){try{const r=this.vault.getFileByPath(a+".md");return r instanceof _.TFile?await this.vault.read(r):null}catch(r){return console.error("Error reading template file:",r),null}}getVariablesFromInstitution(a){return{institute:{abbr:a.abbr,aliases:a.aliases,website:a.website,lon:a.location[1],lat:a.location[0],logo:a.logo,name:a.name,tags:a.tags}}}}var js={exports:{}},_c,cg;function eo(){if(cg)return _c;cg=1;const f="2.0.0",a=256,r=Number.MAX_SAFE_INTEGER||9007199254740991,i=16,o=a-6;return _c={MAX_LENGTH:a,MAX_SAFE_COMPONENT_LENGTH:i,MAX_SAFE_BUILD_LENGTH:o,MAX_SAFE_INTEGER:r,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:f,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2},_c}var Dc,ug;function to(){return ug||(ug=1,Dc=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...a)=>console.error("SEMVER",...a):()=>{}),Dc}var pg;function xi(){return pg||(pg=1,(function(f,a){const{MAX_SAFE_COMPONENT_LENGTH:r,MAX_SAFE_BUILD_LENGTH:i,MAX_LENGTH:o}=eo(),l=to();a=f.exports={};const c=a.re=[],u=a.safeRe=[],d=a.src=[],h=a.safeSrc=[],m=a.t={};let b=0;const k="[a-zA-Z0-9-]",v=[["\\s",1],["\\d",o],[k,i]],y=D=>{for(const[E,T]of v)D=D.split(`${E}*`).join(`${E}{0,${T}}`).split(`${E}+`).join(`${E}{1,${T}}`);return D},w=(D,E,T)=>{const A=y(E),z=b++;l(D,z,E),m[D]=z,d[z]=E,h[z]=A,c[z]=new RegExp(E,T?"g":void 0),u[z]=new RegExp(A,T?"g":void 0)};w("NUMERICIDENTIFIER","0|[1-9]\\d*"),w("NUMERICIDENTIFIERLOOSE","\\d+"),w("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${k}*`),w("MAINVERSION",`(${d[m.NUMERICIDENTIFIER]})\\.(${d[m.NUMERICIDENTIFIER]})\\.(${d[m.NUMERICIDENTIFIER]})`),w("MAINVERSIONLOOSE",`(${d[m.NUMERICIDENTIFIERLOOSE]})\\.(${d[m.NUMERICIDENTIFIERLOOSE]})\\.(${d[m.NUMERICIDENTIFIERLOOSE]})`),w("PRERELEASEIDENTIFIER",`(?:${d[m.NONNUMERICIDENTIFIER]}|${d[m.NUMERICIDENTIFIER]})`),w("PRERELEASEIDENTIFIERLOOSE",`(?:${d[m.NONNUMERICIDENTIFIER]}|${d[m.NUMERICIDENTIFIERLOOSE]})`),w("PRERELEASE",`(?:-(${d[m.PRERELEASEIDENTIFIER]}(?:\\.${d[m.PRERELEASEIDENTIFIER]})*))`),w("PRERELEASELOOSE",`(?:-?(${d[m.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${d[m.PRERELEASEIDENTIFIERLOOSE]})*))`),w("BUILDIDENTIFIER",`${k}+`),w("BUILD",`(?:\\+(${d[m.BUILDIDENTIFIER]}(?:\\.${d[m.BUILDIDENTIFIER]})*))`),w("FULLPLAIN",`v?${d[m.MAINVERSION]}${d[m.PRERELEASE]}?${d[m.BUILD]}?`),w("FULL",`^${d[m.FULLPLAIN]}$`),w("LOOSEPLAIN",`[v=\\s]*${d[m.MAINVERSIONLOOSE]}${d[m.PRERELEASELOOSE]}?${d[m.BUILD]}?`),w("LOOSE",`^${d[m.LOOSEPLAIN]}$`),w("GTLT","((?:<|>)?=?)"),w("XRANGEIDENTIFIERLOOSE",`${d[m.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),w("XRANGEIDENTIFIER",`${d[m.NUMERICIDENTIFIER]}|x|X|\\*`),w("XRANGEPLAIN",`[v=\\s]*(${d[m.XRANGEIDENTIFIER]})(?:\\.(${d[m.XRANGEIDENTIFIER]})(?:\\.(${d[m.XRANGEIDENTIFIER]})(?:${d[m.PRERELEASE]})?${d[m.BUILD]}?)?)?`),w("XRANGEPLAINLOOSE",`[v=\\s]*(${d[m.XRANGEIDENTIFIERLOOSE]})(?:\\.(${d[m.XRANGEIDENTIFIERLOOSE]})(?:\\.(${d[m.XRANGEIDENTIFIERLOOSE]})(?:${d[m.PRERELEASELOOSE]})?${d[m.BUILD]}?)?)?`),w("XRANGE",`^${d[m.GTLT]}\\s*${d[m.XRANGEPLAIN]}$`),w("XRANGELOOSE",`^${d[m.GTLT]}\\s*${d[m.XRANGEPLAINLOOSE]}$`),w("COERCEPLAIN",`(^|[^\\d])(\\d{1,${r}})(?:\\.(\\d{1,${r}}))?(?:\\.(\\d{1,${r}}))?`),w("COERCE",`${d[m.COERCEPLAIN]}(?:$|[^\\d])`),w("COERCEFULL",d[m.COERCEPLAIN]+`(?:${d[m.PRERELEASE]})?(?:${d[m.BUILD]})?(?:$|[^\\d])`),w("COERCERTL",d[m.COERCE],!0),w("COERCERTLFULL",d[m.COERCEFULL],!0),w("LONETILDE","(?:~>?)"),w("TILDETRIM",`(\\s*)${d[m.LONETILDE]}\\s+`,!0),a.tildeTrimReplace="$1~",w("TILDE",`^${d[m.LONETILDE]}${d[m.XRANGEPLAIN]}$`),w("TILDELOOSE",`^${d[m.LONETILDE]}${d[m.XRANGEPLAINLOOSE]}$`),w("LONECARET","(?:\\^)"),w("CARETTRIM",`(\\s*)${d[m.LONECARET]}\\s+`,!0),a.caretTrimReplace="$1^",w("CARET",`^${d[m.LONECARET]}${d[m.XRANGEPLAIN]}$`),w("CARETLOOSE",`^${d[m.LONECARET]}${d[m.XRANGEPLAINLOOSE]}$`),w("COMPARATORLOOSE",`^${d[m.GTLT]}\\s*(${d[m.LOOSEPLAIN]})$|^$`),w("COMPARATOR",`^${d[m.GTLT]}\\s*(${d[m.FULLPLAIN]})$|^$`),w("COMPARATORTRIM",`(\\s*)${d[m.GTLT]}\\s*(${d[m.LOOSEPLAIN]}|${d[m.XRANGEPLAIN]})`,!0),a.comparatorTrimReplace="$1$2$3",w("HYPHENRANGE",`^\\s*(${d[m.XRANGEPLAIN]})\\s+-\\s+(${d[m.XRANGEPLAIN]})\\s*$`),w("HYPHENRANGELOOSE",`^\\s*(${d[m.XRANGEPLAINLOOSE]})\\s+-\\s+(${d[m.XRANGEPLAINLOOSE]})\\s*$`),w("STAR","(<|>)?=?\\s*\\*"),w("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),w("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")})(js,js.exports)),js.exports}var Pc,dg;function qu(){if(dg)return Pc;dg=1;const f=Object.freeze({loose:!0}),a=Object.freeze({});return Pc=i=>i?typeof i!="object"?f:i:a,Pc}var Tc,fg;function Gm(){if(fg)return Tc;fg=1;const f=/^[0-9]+$/,a=(i,o)=>{if(typeof i=="number"&&typeof o=="number")return i===o?0:ia(o,i)},Tc}var Nc,hg;function At(){if(hg)return Nc;hg=1;const f=to(),{MAX_LENGTH:a,MAX_SAFE_INTEGER:r}=eo(),{safeRe:i,t:o}=xi(),l=qu(),{compareIdentifiers:c}=Gm();class u{constructor(h,m){if(m=l(m),h instanceof u){if(h.loose===!!m.loose&&h.includePrerelease===!!m.includePrerelease)return h;h=h.version}else if(typeof h!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof h}".`);if(h.length>a)throw new TypeError(`version is longer than ${a} characters`);f("SemVer",h,m),this.options=m,this.loose=!!m.loose,this.includePrerelease=!!m.includePrerelease;const b=h.trim().match(m.loose?i[o.LOOSE]:i[o.FULL]);if(!b)throw new TypeError(`Invalid Version: ${h}`);if(this.raw=h,this.major=+b[1],this.minor=+b[2],this.patch=+b[3],this.major>r||this.major<0)throw new TypeError("Invalid major version");if(this.minor>r||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>r||this.patch<0)throw new TypeError("Invalid patch version");b[4]?this.prerelease=b[4].split(".").map(k=>{if(/^[0-9]+$/.test(k)){const v=+k;if(v>=0&&vh.major?1:this.minorh.minor?1:this.patchh.patch?1:0}comparePre(h){if(h instanceof u||(h=new u(h,this.options)),this.prerelease.length&&!h.prerelease.length)return-1;if(!this.prerelease.length&&h.prerelease.length)return 1;if(!this.prerelease.length&&!h.prerelease.length)return 0;let m=0;do{const b=this.prerelease[m],k=h.prerelease[m];if(f("prerelease compare",m,b,k),b===void 0&&k===void 0)return 0;if(k===void 0)return 1;if(b===void 0)return-1;if(b===k)continue;return c(b,k)}while(++m)}compareBuild(h){h instanceof u||(h=new u(h,this.options));let m=0;do{const b=this.build[m],k=h.build[m];if(f("build compare",m,b,k),b===void 0&&k===void 0)return 0;if(k===void 0)return 1;if(b===void 0)return-1;if(b===k)continue;return c(b,k)}while(++m)}inc(h,m,b){if(h.startsWith("pre")){if(!m&&b===!1)throw new Error("invalid increment argument: identifier is empty");if(m){const k=`-${m}`.match(this.options.loose?i[o.PRERELEASELOOSE]:i[o.PRERELEASE]);if(!k||k[1]!==m)throw new Error(`invalid identifier: ${m}`)}}switch(h){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",m,b);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",m,b);break;case"prepatch":this.prerelease.length=0,this.inc("patch",m,b),this.inc("pre",m,b);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",m,b),this.inc("pre",m,b);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{const k=Number(b)?1:0;if(this.prerelease.length===0)this.prerelease=[k];else{let v=this.prerelease.length;for(;--v>=0;)typeof this.prerelease[v]=="number"&&(this.prerelease[v]++,v=-2);if(v===-1){if(m===this.prerelease.join(".")&&b===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(k)}}if(m){let v=[m,k];b===!1&&(v=[m]),c(this.prerelease[0],m)===0?isNaN(this.prerelease[1])&&(this.prerelease=v):this.prerelease=v}break}default:throw new Error(`invalid increment argument: ${h}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}return Nc=u,Nc}var Ic,gg;function wn(){if(gg)return Ic;gg=1;const f=At();return Ic=(r,i,o=!1)=>{if(r instanceof f)return r;try{return new f(r,i)}catch(l){if(!o)return null;throw l}},Ic}var Ac,mg;function k0(){if(mg)return Ac;mg=1;const f=wn();return Ac=(r,i)=>{const o=f(r,i);return o?o.version:null},Ac}var Fc,bg;function x0(){if(bg)return Fc;bg=1;const f=wn();return Fc=(r,i)=>{const o=f(r.trim().replace(/^[=v]+/,""),i);return o?o.version:null},Fc}var Lc,vg;function S0(){if(vg)return Lc;vg=1;const f=At();return Lc=(r,i,o,l,c)=>{typeof o=="string"&&(c=l,l=o,o=void 0);try{return new f(r instanceof f?r.version:r,o).inc(i,l,c).version}catch{return null}},Lc}var zc,wg;function E0(){if(wg)return zc;wg=1;const f=wn();return zc=(r,i)=>{const o=f(r,null,!0),l=f(i,null,!0),c=o.compare(l);if(c===0)return null;const u=c>0,d=u?o:l,h=u?l:o,m=!!d.prerelease.length;if(!!h.prerelease.length&&!m){if(!h.patch&&!h.minor)return"major";if(h.compareMain(d)===0)return h.minor&&!h.patch?"minor":"patch"}const k=m?"pre":"";return o.major!==l.major?k+"major":o.minor!==l.minor?k+"minor":o.patch!==l.patch?k+"patch":"prerelease"},zc}var Rc,yg;function C0(){if(yg)return Rc;yg=1;const f=At();return Rc=(r,i)=>new f(r,i).major,Rc}var Oc,kg;function _0(){if(kg)return Oc;kg=1;const f=At();return Oc=(r,i)=>new f(r,i).minor,Oc}var Mc,xg;function D0(){if(xg)return Mc;xg=1;const f=At();return Mc=(r,i)=>new f(r,i).patch,Mc}var $c,Sg;function P0(){if(Sg)return $c;Sg=1;const f=wn();return $c=(r,i)=>{const o=f(r,i);return o&&o.prerelease.length?o.prerelease:null},$c}var Bc,Eg;function lr(){if(Eg)return Bc;Eg=1;const f=At();return Bc=(r,i,o)=>new f(r,o).compare(new f(i,o)),Bc}var jc,Cg;function T0(){if(Cg)return jc;Cg=1;const f=lr();return jc=(r,i,o)=>f(i,r,o),jc}var Uc,_g;function N0(){if(_g)return Uc;_g=1;const f=lr();return Uc=(r,i)=>f(r,i,!0),Uc}var Vc,Dg;function Gu(){if(Dg)return Vc;Dg=1;const f=At();return Vc=(r,i,o)=>{const l=new f(r,o),c=new f(i,o);return l.compare(c)||l.compareBuild(c)},Vc}var Wc,Pg;function I0(){if(Pg)return Wc;Pg=1;const f=Gu();return Wc=(r,i)=>r.sort((o,l)=>f(o,l,i)),Wc}var Hc,Tg;function A0(){if(Tg)return Hc;Tg=1;const f=Gu();return Hc=(r,i)=>r.sort((o,l)=>f(l,o,i)),Hc}var qc,Ng;function ro(){if(Ng)return qc;Ng=1;const f=lr();return qc=(r,i,o)=>f(r,i,o)>0,qc}var Gc,Ig;function Zu(){if(Ig)return Gc;Ig=1;const f=lr();return Gc=(r,i,o)=>f(r,i,o)<0,Gc}var Zc,Ag;function Zm(){if(Ag)return Zc;Ag=1;const f=lr();return Zc=(r,i,o)=>f(r,i,o)===0,Zc}var Yc,Fg;function Ym(){if(Fg)return Yc;Fg=1;const f=lr();return Yc=(r,i,o)=>f(r,i,o)!==0,Yc}var Kc,Lg;function Yu(){if(Lg)return Kc;Lg=1;const f=lr();return Kc=(r,i,o)=>f(r,i,o)>=0,Kc}var Qc,zg;function Ku(){if(zg)return Qc;zg=1;const f=lr();return Qc=(r,i,o)=>f(r,i,o)<=0,Qc}var Xc,Rg;function Km(){if(Rg)return Xc;Rg=1;const f=Zm(),a=Ym(),r=ro(),i=Yu(),o=Zu(),l=Ku();return Xc=(u,d,h,m)=>{switch(d){case"===":return typeof u=="object"&&(u=u.version),typeof h=="object"&&(h=h.version),u===h;case"!==":return typeof u=="object"&&(u=u.version),typeof h=="object"&&(h=h.version),u!==h;case"":case"=":case"==":return f(u,h,m);case"!=":return a(u,h,m);case">":return r(u,h,m);case">=":return i(u,h,m);case"<":return o(u,h,m);case"<=":return l(u,h,m);default:throw new TypeError(`Invalid operator: ${d}`)}},Xc}var Jc,Og;function F0(){if(Og)return Jc;Og=1;const f=At(),a=wn(),{safeRe:r,t:i}=xi();return Jc=(l,c)=>{if(l instanceof f)return l;if(typeof l=="number"&&(l=String(l)),typeof l!="string")return null;c=c||{};let u=null;if(!c.rtl)u=l.match(c.includePrerelease?r[i.COERCEFULL]:r[i.COERCE]);else{const v=c.includePrerelease?r[i.COERCERTLFULL]:r[i.COERCERTL];let y;for(;(y=v.exec(l))&&(!u||u.index+u[0].length!==l.length);)(!u||y.index+y[0].length!==u.index+u[0].length)&&(u=y),v.lastIndex=y.index+y[1].length+y[2].length;v.lastIndex=-1}if(u===null)return null;const d=u[2],h=u[3]||"0",m=u[4]||"0",b=c.includePrerelease&&u[5]?`-${u[5]}`:"",k=c.includePrerelease&&u[6]?`+${u[6]}`:"";return a(`${d}.${h}.${m}${b}${k}`,c)},Jc}var eu,Mg;function L0(){if(Mg)return eu;Mg=1;class f{constructor(){this.max=1e3,this.map=new Map}get(r){const i=this.map.get(r);if(i!==void 0)return this.map.delete(r),this.map.set(r,i),i}delete(r){return this.map.delete(r)}set(r,i){if(!this.delete(r)&&i!==void 0){if(this.map.size>=this.max){const l=this.map.keys().next().value;this.delete(l)}this.map.set(r,i)}return this}}return eu=f,eu}var tu,$g;function cr(){if($g)return tu;$g=1;const f=/\s+/g;class a{constructor(W,U){if(U=o(U),W instanceof a)return W.loose===!!U.loose&&W.includePrerelease===!!U.includePrerelease?W:new a(W.raw,U);if(W instanceof l)return this.raw=W.value,this.set=[[W]],this.formatted=void 0,this;if(this.options=U,this.loose=!!U.loose,this.includePrerelease=!!U.includePrerelease,this.raw=W.trim().replace(f," "),this.set=this.raw.split("||").map(j=>this.parseRange(j.trim())).filter(j=>j.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){const j=this.set[0];if(this.set=this.set.filter(se=>!w(se[0])),this.set.length===0)this.set=[j];else if(this.set.length>1){for(const se of this.set)if(se.length===1&&D(se[0])){this.set=[se];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let W=0;W0&&(this.formatted+="||");const U=this.set[W];for(let j=0;j0&&(this.formatted+=" "),this.formatted+=U[j].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(W){const j=((this.options.includePrerelease&&v)|(this.options.loose&&y))+":"+W,se=i.get(j);if(se)return se;const Y=this.options.loose,ue=Y?d[h.HYPHENRANGELOOSE]:d[h.HYPHENRANGE];W=W.replace(ue,M(this.options.includePrerelease)),c("hyphen replace",W),W=W.replace(d[h.COMPARATORTRIM],m),c("comparator trim",W),W=W.replace(d[h.TILDETRIM],b),c("tilde trim",W),W=W.replace(d[h.CARETTRIM],k),c("caret trim",W);let P=W.split(" ").map(ne=>T(ne,this.options)).join(" ").split(/\s+/).map(ne=>ve(ne,this.options));Y&&(P=P.filter(ne=>(c("loose invalid filter",ne,this.options),!!ne.match(d[h.COMPARATORLOOSE])))),c("range list",P);const L=new Map,ee=P.map(ne=>new l(ne,this.options));for(const ne of ee){if(w(ne))return[ne];L.set(ne.value,ne)}L.size>1&&L.has("")&&L.delete("");const ae=[...L.values()];return i.set(j,ae),ae}intersects(W,U){if(!(W instanceof a))throw new TypeError("a Range is required");return this.set.some(j=>E(j,U)&&W.set.some(se=>E(se,U)&&j.every(Y=>se.every(ue=>Y.intersects(ue,U)))))}test(W){if(!W)return!1;if(typeof W=="string")try{W=new u(W,this.options)}catch{return!1}for(let U=0;Ux.value==="<0.0.0-0",D=x=>x.value==="",E=(x,W)=>{let U=!0;const j=x.slice();let se=j.pop();for(;U&&j.length;)U=j.every(Y=>se.intersects(Y,W)),se=j.pop();return U},T=(x,W)=>(x=x.replace(d[h.BUILD],""),c("comp",x,W),x=q(x,W),c("caret",x),x=z(x,W),c("tildes",x),x=K(x,W),c("xrange",x),x=he(x,W),c("stars",x),x),A=x=>!x||x.toLowerCase()==="x"||x==="*",z=(x,W)=>x.trim().split(/\s+/).map(U=>R(U,W)).join(" "),R=(x,W)=>{const U=W.loose?d[h.TILDELOOSE]:d[h.TILDE];return x.replace(U,(j,se,Y,ue,P)=>{c("tilde",x,j,se,Y,ue,P);let L;return A(se)?L="":A(Y)?L=`>=${se}.0.0 <${+se+1}.0.0-0`:A(ue)?L=`>=${se}.${Y}.0 <${se}.${+Y+1}.0-0`:P?(c("replaceTilde pr",P),L=`>=${se}.${Y}.${ue}-${P} <${se}.${+Y+1}.0-0`):L=`>=${se}.${Y}.${ue} <${se}.${+Y+1}.0-0`,c("tilde return",L),L})},q=(x,W)=>x.trim().split(/\s+/).map(U=>V(U,W)).join(" "),V=(x,W)=>{c("caret",x,W);const U=W.loose?d[h.CARETLOOSE]:d[h.CARET],j=W.includePrerelease?"-0":"";return x.replace(U,(se,Y,ue,P,L)=>{c("caret",x,se,Y,ue,P,L);let ee;return A(Y)?ee="":A(ue)?ee=`>=${Y}.0.0${j} <${+Y+1}.0.0-0`:A(P)?Y==="0"?ee=`>=${Y}.${ue}.0${j} <${Y}.${+ue+1}.0-0`:ee=`>=${Y}.${ue}.0${j} <${+Y+1}.0.0-0`:L?(c("replaceCaret pr",L),Y==="0"?ue==="0"?ee=`>=${Y}.${ue}.${P}-${L} <${Y}.${ue}.${+P+1}-0`:ee=`>=${Y}.${ue}.${P}-${L} <${Y}.${+ue+1}.0-0`:ee=`>=${Y}.${ue}.${P}-${L} <${+Y+1}.0.0-0`):(c("no pr"),Y==="0"?ue==="0"?ee=`>=${Y}.${ue}.${P}${j} <${Y}.${ue}.${+P+1}-0`:ee=`>=${Y}.${ue}.${P}${j} <${Y}.${+ue+1}.0-0`:ee=`>=${Y}.${ue}.${P} <${+Y+1}.0.0-0`),c("caret return",ee),ee})},K=(x,W)=>(c("replaceXRanges",x,W),x.split(/\s+/).map(U=>Q(U,W)).join(" ")),Q=(x,W)=>{x=x.trim();const U=W.loose?d[h.XRANGELOOSE]:d[h.XRANGE];return x.replace(U,(j,se,Y,ue,P,L)=>{c("xRange",x,j,se,Y,ue,P,L);const ee=A(Y),ae=ee||A(ue),ne=ae||A(P),we=ne;return se==="="&&we&&(se=""),L=W.includePrerelease?"-0":"",ee?se===">"||se==="<"?j="<0.0.0-0":j="*":se&&we?(ae&&(ue=0),P=0,se===">"?(se=">=",ae?(Y=+Y+1,ue=0,P=0):(ue=+ue+1,P=0)):se==="<="&&(se="<",ae?Y=+Y+1:ue=+ue+1),se==="<"&&(L="-0"),j=`${se+Y}.${ue}.${P}${L}`):ae?j=`>=${Y}.0.0${L} <${+Y+1}.0.0-0`:ne&&(j=`>=${Y}.${ue}.0${L} <${Y}.${+ue+1}.0-0`),c("xRange return",j),j})},he=(x,W)=>(c("replaceStars",x,W),x.trim().replace(d[h.STAR],"")),ve=(x,W)=>(c("replaceGTE0",x,W),x.trim().replace(d[W.includePrerelease?h.GTE0PRE:h.GTE0],"")),M=x=>(W,U,j,se,Y,ue,P,L,ee,ae,ne,we)=>(A(j)?U="":A(se)?U=`>=${j}.0.0${x?"-0":""}`:A(Y)?U=`>=${j}.${se}.0${x?"-0":""}`:ue?U=`>=${U}`:U=`>=${U}${x?"-0":""}`,A(ee)?L="":A(ae)?L=`<${+ee+1}.0.0-0`:A(ne)?L=`<${ee}.${+ae+1}.0-0`:we?L=`<=${ee}.${ae}.${ne}-${we}`:x?L=`<${ee}.${ae}.${+ne+1}-0`:L=`<=${L}`,`${U} ${L}`.trim()),le=(x,W,U)=>{for(let j=0;j0){const se=x[j].semver;if(se.major===W.major&&se.minor===W.minor&&se.patch===W.patch)return!0}return!1}return!0};return tu}var ru,Bg;function ao(){if(Bg)return ru;Bg=1;const f=Symbol("SemVer ANY");class a{static get ANY(){return f}constructor(m,b){if(b=r(b),m instanceof a){if(m.loose===!!b.loose)return m;m=m.value}m=m.trim().split(/\s+/).join(" "),c("comparator",m,b),this.options=b,this.loose=!!b.loose,this.parse(m),this.semver===f?this.value="":this.value=this.operator+this.semver.version,c("comp",this)}parse(m){const b=this.options.loose?i[o.COMPARATORLOOSE]:i[o.COMPARATOR],k=m.match(b);if(!k)throw new TypeError(`Invalid comparator: ${m}`);this.operator=k[1]!==void 0?k[1]:"",this.operator==="="&&(this.operator=""),k[2]?this.semver=new u(k[2],this.options.loose):this.semver=f}toString(){return this.value}test(m){if(c("Comparator.test",m,this.options.loose),this.semver===f||m===f)return!0;if(typeof m=="string")try{m=new u(m,this.options)}catch{return!1}return l(m,this.operator,this.semver,this.options)}intersects(m,b){if(!(m instanceof a))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new d(m.value,b).test(this.value):m.operator===""?m.value===""?!0:new d(this.value,b).test(m.semver):(b=r(b),b.includePrerelease&&(this.value==="<0.0.0-0"||m.value==="<0.0.0-0")||!b.includePrerelease&&(this.value.startsWith("<0.0.0")||m.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&m.operator.startsWith(">")||this.operator.startsWith("<")&&m.operator.startsWith("<")||this.semver.version===m.semver.version&&this.operator.includes("=")&&m.operator.includes("=")||l(this.semver,"<",m.semver,b)&&this.operator.startsWith(">")&&m.operator.startsWith("<")||l(this.semver,">",m.semver,b)&&this.operator.startsWith("<")&&m.operator.startsWith(">")))}}ru=a;const r=qu(),{safeRe:i,t:o}=xi(),l=Km(),c=to(),u=At(),d=cr();return ru}var au,jg;function no(){if(jg)return au;jg=1;const f=cr();return au=(r,i,o)=>{try{i=new f(i,o)}catch{return!1}return i.test(r)},au}var nu,Ug;function z0(){if(Ug)return nu;Ug=1;const f=cr();return nu=(r,i)=>new f(r,i).set.map(o=>o.map(l=>l.value).join(" ").trim().split(" ")),nu}var iu,Vg;function R0(){if(Vg)return iu;Vg=1;const f=At(),a=cr();return iu=(i,o,l)=>{let c=null,u=null,d=null;try{d=new a(o,l)}catch{return null}return i.forEach(h=>{d.test(h)&&(!c||u.compare(h)===-1)&&(c=h,u=new f(c,l))}),c},iu}var su,Wg;function O0(){if(Wg)return su;Wg=1;const f=At(),a=cr();return su=(i,o,l)=>{let c=null,u=null,d=null;try{d=new a(o,l)}catch{return null}return i.forEach(h=>{d.test(h)&&(!c||u.compare(h)===1)&&(c=h,u=new f(c,l))}),c},su}var ou,Hg;function M0(){if(Hg)return ou;Hg=1;const f=At(),a=cr(),r=ro();return ou=(o,l)=>{o=new a(o,l);let c=new f("0.0.0");if(o.test(c)||(c=new f("0.0.0-0"),o.test(c)))return c;c=null;for(let u=0;u{const b=new f(m.semver.version);switch(m.operator){case">":b.prerelease.length===0?b.patch++:b.prerelease.push(0),b.raw=b.format();case"":case">=":(!h||r(b,h))&&(h=b);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${m.operator}`)}}),h&&(!c||r(c,h))&&(c=h)}return c&&o.test(c)?c:null},ou}var lu,qg;function $0(){if(qg)return lu;qg=1;const f=cr();return lu=(r,i)=>{try{return new f(r,i).range||"*"}catch{return null}},lu}var cu,Gg;function Qu(){if(Gg)return cu;Gg=1;const f=At(),a=ao(),{ANY:r}=a,i=cr(),o=no(),l=ro(),c=Zu(),u=Ku(),d=Yu();return cu=(m,b,k,v)=>{m=new f(m,v),b=new i(b,v);let y,w,D,E,T;switch(k){case">":y=l,w=u,D=c,E=">",T=">=";break;case"<":y=c,w=d,D=l,E="<",T="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(o(m,b,v))return!1;for(let A=0;A{V.semver===r&&(V=new a(">=0.0.0")),R=R||V,q=q||V,y(V.semver,R.semver,v)?R=V:D(V.semver,q.semver,v)&&(q=V)}),R.operator===E||R.operator===T||(!q.operator||q.operator===E)&&w(m,q.semver))return!1;if(q.operator===T&&D(m,q.semver))return!1}return!0},cu}var uu,Zg;function B0(){if(Zg)return uu;Zg=1;const f=Qu();return uu=(r,i,o)=>f(r,i,">",o),uu}var pu,Yg;function j0(){if(Yg)return pu;Yg=1;const f=Qu();return pu=(r,i,o)=>f(r,i,"<",o),pu}var du,Kg;function U0(){if(Kg)return du;Kg=1;const f=cr();return du=(r,i,o)=>(r=new f(r,o),i=new f(i,o),r.intersects(i,o)),du}var fu,Qg;function V0(){if(Qg)return fu;Qg=1;const f=no(),a=lr();return fu=(r,i,o)=>{const l=[];let c=null,u=null;const d=r.sort((k,v)=>a(k,v,o));for(const k of d)f(k,i,o)?(u=k,c||(c=k)):(u&&l.push([c,u]),u=null,c=null);c&&l.push([c,null]);const h=[];for(const[k,v]of l)k===v?h.push(k):!v&&k===d[0]?h.push("*"):v?k===d[0]?h.push(`<=${v}`):h.push(`${k} - ${v}`):h.push(`>=${k}`);const m=h.join(" || "),b=typeof i.raw=="string"?i.raw:String(i);return m.length{if(b===k)return!0;b=new f(b,v),k=new f(k,v);let y=!1;e:for(const w of b.set){for(const D of k.set){const E=d(w,D,v);if(y=y||E!==null,E)continue e}if(y)return!1}return!0},c=[new a(">=0.0.0-0")],u=[new a(">=0.0.0")],d=(b,k,v)=>{if(b===k)return!0;if(b.length===1&&b[0].semver===r){if(k.length===1&&k[0].semver===r)return!0;v.includePrerelease?b=c:b=u}if(k.length===1&&k[0].semver===r){if(v.includePrerelease)return!0;k=u}const y=new Set;let w,D;for(const K of b)K.operator===">"||K.operator===">="?w=h(w,K,v):K.operator==="<"||K.operator==="<="?D=m(D,K,v):y.add(K.semver);if(y.size>1)return null;let E;if(w&&D){if(E=o(w.semver,D.semver,v),E>0)return null;if(E===0&&(w.operator!==">="||D.operator!=="<="))return null}for(const K of y){if(w&&!i(K,String(w),v)||D&&!i(K,String(D),v))return null;for(const Q of k)if(!i(K,String(Q),v))return!1;return!0}let T,A,z,R,q=D&&!v.includePrerelease&&D.semver.prerelease.length?D.semver:!1,V=w&&!v.includePrerelease&&w.semver.prerelease.length?w.semver:!1;q&&q.prerelease.length===1&&D.operator==="<"&&q.prerelease[0]===0&&(q=!1);for(const K of k){if(R=R||K.operator===">"||K.operator===">=",z=z||K.operator==="<"||K.operator==="<=",w){if(V&&K.semver.prerelease&&K.semver.prerelease.length&&K.semver.major===V.major&&K.semver.minor===V.minor&&K.semver.patch===V.patch&&(V=!1),K.operator===">"||K.operator===">="){if(T=h(w,K,v),T===K&&T!==w)return!1}else if(w.operator===">="&&!i(w.semver,String(K),v))return!1}if(D){if(q&&K.semver.prerelease&&K.semver.prerelease.length&&K.semver.major===q.major&&K.semver.minor===q.minor&&K.semver.patch===q.patch&&(q=!1),K.operator==="<"||K.operator==="<="){if(A=m(D,K,v),A===K&&A!==D)return!1}else if(D.operator==="<="&&!i(D.semver,String(K),v))return!1}if(!K.operator&&(D||w)&&E!==0)return!1}return!(w&&z&&!D&&E!==0||D&&R&&!w&&E!==0||V||q)},h=(b,k,v)=>{if(!b)return k;const y=o(b.semver,k.semver,v);return y>0?b:y<0||k.operator===">"&&b.operator===">="?k:b},m=(b,k,v)=>{if(!b)return k;const y=o(b.semver,k.semver,v);return y<0?b:y>0||k.operator==="<"&&b.operator==="<="?k:b};return hu=l,hu}var gu,Jg;function H0(){if(Jg)return gu;Jg=1;const f=xi(),a=eo(),r=At(),i=Gm(),o=wn(),l=k0(),c=x0(),u=S0(),d=E0(),h=C0(),m=_0(),b=D0(),k=P0(),v=lr(),y=T0(),w=N0(),D=Gu(),E=I0(),T=A0(),A=ro(),z=Zu(),R=Zm(),q=Ym(),V=Yu(),K=Ku(),Q=Km(),he=F0(),ve=ao(),M=cr(),le=no(),x=z0(),W=R0(),U=O0(),j=M0(),se=$0(),Y=Qu(),ue=B0(),P=j0(),L=U0(),ee=V0(),ae=W0();return gu={parse:o,valid:l,clean:c,inc:u,diff:d,major:h,minor:m,patch:b,prerelease:k,compare:v,rcompare:y,compareLoose:w,compareBuild:D,sort:E,rsort:T,gt:A,lt:z,eq:R,neq:q,gte:V,lte:K,cmp:Q,coerce:he,Comparator:ve,Range:M,satisfies:le,toComparators:x,maxSatisfying:W,minSatisfying:U,minVersion:j,validRange:se,outside:Y,gtr:ue,ltr:P,intersects:L,simplifyRange:ee,subset:ae,SemVer:r,re:f.re,src:f.src,tokens:f.t,SEMVER_SPEC_VERSION:a.SEMVER_SPEC_VERSION,RELEASE_TYPES:a.RELEASE_TYPES,compareIdentifiers:i.compareIdentifiers,rcompareIdentifiers:i.rcompareIdentifiers},gu}var q0=H0();const Us=Hu(q0);class mu{constructor(a,r,i){this.repository=a,this.minAppVersion=r,this.proxyService=i}async checkForUpdates(a,r=!1){try{const i=await this.fetchLatestRelease(),o=Us.gt(i.version,r?"0.0.0":a),l=this.checkCompatibility(i);return{hasUpdate:o,currentVersion:a,latestVersion:i.version,releaseInfo:i,compatibilityIssues:l}}catch(i){throw new Error(`Failed to check for updates: ${i.message}`)}}async fetchLatestRelease(){const a=`https://api.github.com/repos/${this.repository}/releases/latest`;if(this.proxyService){if(!this.proxyService.isServiceActivated()&&!await this.proxyService.activate())throw new Error("Failed to activate license for update check");const r=await _.requestUrl({url:a});if(r.status!==200)throw new Error(`Failed to fetch latest release: ${r.status}`);const i=r.json;return{version:i.tag_name.replace(/^v/,""),minAppVersion:i.minAppVersion||"0.0.0",downloadUrl:i.assets[0]?.browser_download_url,sha256:i.assets[0]?.sha256,releaseNotes:i.body,dependencies:i.dependencies||{}}}else{const r=await _.requestUrl({url:a});if(r.status!==200)throw new Error(`Failed to fetch latest release: ${r.status}`);const i=r.json;return{version:i.tag_name.replace(/^v/,""),minAppVersion:i.minAppVersion||"0.0.0",downloadUrl:i.assets[0]?.browser_download_url,sha256:i.assets[0]?.sha256,releaseNotes:i.body,dependencies:i.dependencies||{}}}}checkCompatibility(a){const r=[];return Us.lt(this.minAppVersion,a.minAppVersion)&&r.push(`Requires Obsidian version ${a.minAppVersion} or higher`),r}static isValidVersion(a){return Us.valid(a)!==null}static compareVersions(a,r){return Us.compare(a,r)}}function Vs(f){throw new Error('Could not dynamically require "'+f+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var bu={exports:{}},em;function G0(){return em||(em=1,(function(f,a){(function(r){f.exports=r()})(function(){return(function r(i,o,l){function c(h,m){if(!o[h]){if(!i[h]){var b=typeof Vs=="function"&&Vs;if(!m&&b)return b(h,!0);if(u)return u(h,!0);var k=new Error("Cannot find module '"+h+"'");throw k.code="MODULE_NOT_FOUND",k}var v=o[h]={exports:{}};i[h][0].call(v.exports,function(y){var w=i[h][1][y];return c(w||y)},v,v.exports,r,i,o,l)}return o[h].exports}for(var u=typeof Vs=="function"&&Vs,d=0;d>2,v=(3&h)<<4|m>>4,y=1>6:64,w=2>4,m=(15&k)<<4|(v=u.indexOf(d.charAt(w++)))>>2,b=(3&v)<<6|(y=u.indexOf(d.charAt(w++))),T[D++]=h,v!==64&&(T[D++]=m),y!==64&&(T[D++]=b);return T}},{"./support":30,"./utils":32}],2:[function(r,i,o){var l=r("./external"),c=r("./stream/DataWorker"),u=r("./stream/Crc32Probe"),d=r("./stream/DataLengthProbe");function h(m,b,k,v,y){this.compressedSize=m,this.uncompressedSize=b,this.crc32=k,this.compression=v,this.compressedContent=y}h.prototype={getContentWorker:function(){var m=new c(l.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new d("data_length")),b=this;return m.on("end",function(){if(this.streamInfo.data_length!==b.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),m},getCompressedWorker:function(){return new c(l.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},h.createWorkerFrom=function(m,b,k){return m.pipe(new u).pipe(new d("uncompressedSize")).pipe(b.compressWorker(k)).pipe(new d("compressedSize")).withStreamInfo("compression",b)},i.exports=h},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(r,i,o){var l=r("./stream/GenericWorker");o.STORE={magic:"\0\0",compressWorker:function(){return new l("STORE compression")},uncompressWorker:function(){return new l("STORE decompression")}},o.DEFLATE=r("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(r,i,o){var l=r("./utils"),c=(function(){for(var u,d=[],h=0;h<256;h++){u=h;for(var m=0;m<8;m++)u=1&u?3988292384^u>>>1:u>>>1;d[h]=u}return d})();i.exports=function(u,d){return u!==void 0&&u.length?l.getTypeOf(u)!=="string"?(function(h,m,b,k){var v=c,y=k+b;h^=-1;for(var w=k;w>>8^v[255&(h^m[w])];return-1^h})(0|d,u,u.length,0):(function(h,m,b,k){var v=c,y=k+b;h^=-1;for(var w=k;w>>8^v[255&(h^m.charCodeAt(w))];return-1^h})(0|d,u,u.length,0):0}},{"./utils":32}],5:[function(r,i,o){o.base64=!1,o.binary=!1,o.dir=!1,o.createFolders=!0,o.date=null,o.compression=null,o.compressionOptions=null,o.comment=null,o.unixPermissions=null,o.dosPermissions=null},{}],6:[function(r,i,o){var l=null;l=typeof Promise<"u"?Promise:r("lie"),i.exports={Promise:l}},{lie:37}],7:[function(r,i,o){var l=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",c=r("pako"),u=r("./utils"),d=r("./stream/GenericWorker"),h=l?"uint8array":"array";function m(b,k){d.call(this,"FlateWorker/"+b),this._pako=null,this._pakoAction=b,this._pakoOptions=k,this.meta={}}o.magic="\b\0",u.inherits(m,d),m.prototype.processChunk=function(b){this.meta=b.meta,this._pako===null&&this._createPako(),this._pako.push(u.transformTo(h,b.data),!1)},m.prototype.flush=function(){d.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},m.prototype.cleanUp=function(){d.prototype.cleanUp.call(this),this._pako=null},m.prototype._createPako=function(){this._pako=new c[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var b=this;this._pako.onData=function(k){b.push({data:k,meta:b.meta})}},o.compressWorker=function(b){return new m("Deflate",b)},o.uncompressWorker=function(){return new m("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(r,i,o){function l(v,y){var w,D="";for(w=0;w>>=8;return D}function c(v,y,w,D,E,T){var A,z,R=v.file,q=v.compression,V=T!==h.utf8encode,K=u.transformTo("string",T(R.name)),Q=u.transformTo("string",h.utf8encode(R.name)),he=R.comment,ve=u.transformTo("string",T(he)),M=u.transformTo("string",h.utf8encode(he)),le=Q.length!==R.name.length,x=M.length!==he.length,W="",U="",j="",se=R.dir,Y=R.date,ue={crc32:0,compressedSize:0,uncompressedSize:0};y&&!w||(ue.crc32=v.crc32,ue.compressedSize=v.compressedSize,ue.uncompressedSize=v.uncompressedSize);var P=0;y&&(P|=8),V||!le&&!x||(P|=2048);var L=0,ee=0;se&&(L|=16),E==="UNIX"?(ee=798,L|=(function(ne,we){var Ne=ne;return ne||(Ne=we?16893:33204),(65535&Ne)<<16})(R.unixPermissions,se)):(ee=20,L|=(function(ne){return 63&(ne||0)})(R.dosPermissions)),A=Y.getUTCHours(),A<<=6,A|=Y.getUTCMinutes(),A<<=5,A|=Y.getUTCSeconds()/2,z=Y.getUTCFullYear()-1980,z<<=4,z|=Y.getUTCMonth()+1,z<<=5,z|=Y.getUTCDate(),le&&(U=l(1,1)+l(m(K),4)+Q,W+="up"+l(U.length,2)+U),x&&(j=l(1,1)+l(m(ve),4)+M,W+="uc"+l(j.length,2)+j);var ae="";return ae+=` -\0`,ae+=l(P,2),ae+=q.magic,ae+=l(A,2),ae+=l(z,2),ae+=l(ue.crc32,4),ae+=l(ue.compressedSize,4),ae+=l(ue.uncompressedSize,4),ae+=l(K.length,2),ae+=l(W.length,2),{fileRecord:b.LOCAL_FILE_HEADER+ae+K+W,dirRecord:b.CENTRAL_FILE_HEADER+l(ee,2)+ae+l(ve.length,2)+"\0\0\0\0"+l(L,4)+l(D,4)+K+W+ve}}var u=r("../utils"),d=r("../stream/GenericWorker"),h=r("../utf8"),m=r("../crc32"),b=r("../signature");function k(v,y,w,D){d.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=y,this.zipPlatform=w,this.encodeFileName=D,this.streamFiles=v,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}u.inherits(k,d),k.prototype.push=function(v){var y=v.meta.percent||0,w=this.entriesCount,D=this._sources.length;this.accumulate?this.contentBuffer.push(v):(this.bytesWritten+=v.data.length,d.prototype.push.call(this,{data:v.data,meta:{currentFile:this.currentFile,percent:w?(y+100*(w-D-1))/w:100}}))},k.prototype.openedSource=function(v){this.currentSourceOffset=this.bytesWritten,this.currentFile=v.file.name;var y=this.streamFiles&&!v.file.dir;if(y){var w=c(v,y,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:w.fileRecord,meta:{percent:0}})}else this.accumulate=!0},k.prototype.closedSource=function(v){this.accumulate=!1;var y=this.streamFiles&&!v.file.dir,w=c(v,y,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(w.dirRecord),y)this.push({data:(function(D){return b.DATA_DESCRIPTOR+l(D.crc32,4)+l(D.compressedSize,4)+l(D.uncompressedSize,4)})(v),meta:{percent:100}});else for(this.push({data:w.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},k.prototype.flush=function(){for(var v=this.bytesWritten,y=0;y=this.index;d--)h=(h<<8)+this.byteAt(d);return this.index+=u,h},readString:function(u){return l.transformTo("string",this.readData(u))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var u=this.readInt(4);return new Date(Date.UTC(1980+(u>>25&127),(u>>21&15)-1,u>>16&31,u>>11&31,u>>5&63,(31&u)<<1))}},i.exports=c},{"../utils":32}],19:[function(r,i,o){var l=r("./Uint8ArrayReader");function c(u){l.call(this,u)}r("../utils").inherits(c,l),c.prototype.readData=function(u){this.checkOffset(u);var d=this.data.slice(this.zero+this.index,this.zero+this.index+u);return this.index+=u,d},i.exports=c},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(r,i,o){var l=r("./DataReader");function c(u){l.call(this,u)}r("../utils").inherits(c,l),c.prototype.byteAt=function(u){return this.data.charCodeAt(this.zero+u)},c.prototype.lastIndexOfSignature=function(u){return this.data.lastIndexOf(u)-this.zero},c.prototype.readAndCheckSignature=function(u){return u===this.readData(4)},c.prototype.readData=function(u){this.checkOffset(u);var d=this.data.slice(this.zero+this.index,this.zero+this.index+u);return this.index+=u,d},i.exports=c},{"../utils":32,"./DataReader":18}],21:[function(r,i,o){var l=r("./ArrayReader");function c(u){l.call(this,u)}r("../utils").inherits(c,l),c.prototype.readData=function(u){if(this.checkOffset(u),u===0)return new Uint8Array(0);var d=this.data.subarray(this.zero+this.index,this.zero+this.index+u);return this.index+=u,d},i.exports=c},{"../utils":32,"./ArrayReader":17}],22:[function(r,i,o){var l=r("../utils"),c=r("../support"),u=r("./ArrayReader"),d=r("./StringReader"),h=r("./NodeBufferReader"),m=r("./Uint8ArrayReader");i.exports=function(b){var k=l.getTypeOf(b);return l.checkSupport(k),k!=="string"||c.uint8array?k==="nodebuffer"?new h(b):c.uint8array?new m(l.transformTo("uint8array",b)):new u(l.transformTo("array",b)):new d(b)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(r,i,o){o.LOCAL_FILE_HEADER="PK",o.CENTRAL_FILE_HEADER="PK",o.CENTRAL_DIRECTORY_END="PK",o.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",o.ZIP64_CENTRAL_DIRECTORY_END="PK",o.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(r,i,o){var l=r("./GenericWorker"),c=r("../utils");function u(d){l.call(this,"ConvertWorker to "+d),this.destType=d}c.inherits(u,l),u.prototype.processChunk=function(d){this.push({data:c.transformTo(this.destType,d.data),meta:d.meta})},i.exports=u},{"../utils":32,"./GenericWorker":28}],25:[function(r,i,o){var l=r("./GenericWorker"),c=r("../crc32");function u(){l.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}r("../utils").inherits(u,l),u.prototype.processChunk=function(d){this.streamInfo.crc32=c(d.data,this.streamInfo.crc32||0),this.push(d)},i.exports=u},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(r,i,o){var l=r("../utils"),c=r("./GenericWorker");function u(d){c.call(this,"DataLengthProbe for "+d),this.propName=d,this.withStreamInfo(d,0)}l.inherits(u,c),u.prototype.processChunk=function(d){if(d){var h=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=h+d.data.length}c.prototype.processChunk.call(this,d)},i.exports=u},{"../utils":32,"./GenericWorker":28}],27:[function(r,i,o){var l=r("../utils"),c=r("./GenericWorker");function u(d){c.call(this,"DataWorker");var h=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,d.then(function(m){h.dataIsReady=!0,h.data=m,h.max=m&&m.length||0,h.type=l.getTypeOf(m),h.isPaused||h._tickAndRepeat()},function(m){h.error(m)})}l.inherits(u,c),u.prototype.cleanUp=function(){c.prototype.cleanUp.call(this),this.data=null},u.prototype.resume=function(){return!!c.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,l.delay(this._tickAndRepeat,[],this)),!0)},u.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(l.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},u.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var d=null,h=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":d=this.data.substring(this.index,h);break;case"uint8array":d=this.data.subarray(this.index,h);break;case"array":case"nodebuffer":d=this.data.slice(this.index,h)}return this.index=h,this.push({data:d,meta:{percent:this.max?this.index/this.max*100:0}})},i.exports=u},{"../utils":32,"./GenericWorker":28}],28:[function(r,i,o){function l(c){this.name=c||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}l.prototype={push:function(c){this.emit("data",c)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(c){this.emit("error",c)}return!0},error:function(c){return!this.isFinished&&(this.isPaused?this.generatedError=c:(this.isFinished=!0,this.emit("error",c),this.previous&&this.previous.error(c),this.cleanUp()),!0)},on:function(c,u){return this._listeners[c].push(u),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(c,u){if(this._listeners[c])for(var d=0;d "+c:c}},i.exports=l},{}],29:[function(r,i,o){var l=r("../utils"),c=r("./ConvertWorker"),u=r("./GenericWorker"),d=r("../base64"),h=r("../support"),m=r("../external"),b=null;if(h.nodestream)try{b=r("../nodejs/NodejsStreamOutputAdapter")}catch{}function k(y,w){return new m.Promise(function(D,E){var T=[],A=y._internalType,z=y._outputType,R=y._mimeType;y.on("data",function(q,V){T.push(q),w&&w(V)}).on("error",function(q){T=[],E(q)}).on("end",function(){try{var q=(function(V,K,Q){switch(V){case"blob":return l.newBlob(l.transformTo("arraybuffer",K),Q);case"base64":return d.encode(K);default:return l.transformTo(V,K)}})(z,(function(V,K){var Q,he=0,ve=null,M=0;for(Q=0;Q"u")o.blob=!1;else{var l=new ArrayBuffer(0);try{o.blob=new Blob([l],{type:"application/zip"}).size===0}catch{try{var c=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);c.append(l),o.blob=c.getBlob("application/zip").size===0}catch{o.blob=!1}}}try{o.nodestream=!!r("readable-stream").Readable}catch{o.nodestream=!1}},{"readable-stream":16}],31:[function(r,i,o){for(var l=r("./utils"),c=r("./support"),u=r("./nodejsUtils"),d=r("./stream/GenericWorker"),h=new Array(256),m=0;m<256;m++)h[m]=252<=m?6:248<=m?5:240<=m?4:224<=m?3:192<=m?2:1;h[254]=h[254]=1;function b(){d.call(this,"utf-8 decode"),this.leftOver=null}function k(){d.call(this,"utf-8 encode")}o.utf8encode=function(v){return c.nodebuffer?u.newBufferFrom(v,"utf-8"):(function(y){var w,D,E,T,A,z=y.length,R=0;for(T=0;T>>6:(D<65536?w[A++]=224|D>>>12:(w[A++]=240|D>>>18,w[A++]=128|D>>>12&63),w[A++]=128|D>>>6&63),w[A++]=128|63&D);return w})(v)},o.utf8decode=function(v){return c.nodebuffer?l.transformTo("nodebuffer",v).toString("utf-8"):(function(y){var w,D,E,T,A=y.length,z=new Array(2*A);for(w=D=0;w>10&1023,z[D++]=56320|1023&E)}return z.length!==D&&(z.subarray?z=z.subarray(0,D):z.length=D),l.applyFromCharCode(z)})(v=l.transformTo(c.uint8array?"uint8array":"array",v))},l.inherits(b,d),b.prototype.processChunk=function(v){var y=l.transformTo(c.uint8array?"uint8array":"array",v.data);if(this.leftOver&&this.leftOver.length){if(c.uint8array){var w=y;(y=new Uint8Array(w.length+this.leftOver.length)).set(this.leftOver,0),y.set(w,this.leftOver.length)}else y=this.leftOver.concat(y);this.leftOver=null}var D=(function(T,A){var z;for((A=A||T.length)>T.length&&(A=T.length),z=A-1;0<=z&&(192&T[z])==128;)z--;return z<0||z===0?A:z+h[T[z]]>A?z:A})(y),E=y;D!==y.length&&(c.uint8array?(E=y.subarray(0,D),this.leftOver=y.subarray(D,y.length)):(E=y.slice(0,D),this.leftOver=y.slice(D,y.length))),this.push({data:o.utf8decode(E),meta:v.meta})},b.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:o.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},o.Utf8DecodeWorker=b,l.inherits(k,d),k.prototype.processChunk=function(v){this.push({data:o.utf8encode(v.data),meta:v.meta})},o.Utf8EncodeWorker=k},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(r,i,o){var l=r("./support"),c=r("./base64"),u=r("./nodejsUtils"),d=r("./external");function h(w){return w}function m(w,D){for(var E=0;E>8;this.dir=!!(16&this.externalFileAttributes),v==0&&(this.dosPermissions=63&this.externalFileAttributes),v==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var v=l(this.extraFields[1].value);this.uncompressedSize===c.MAX_VALUE_32BITS&&(this.uncompressedSize=v.readInt(8)),this.compressedSize===c.MAX_VALUE_32BITS&&(this.compressedSize=v.readInt(8)),this.localHeaderOffset===c.MAX_VALUE_32BITS&&(this.localHeaderOffset=v.readInt(8)),this.diskNumberStart===c.MAX_VALUE_32BITS&&(this.diskNumberStart=v.readInt(4))}},readExtraFields:function(v){var y,w,D,E=v.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});v.index+4>>6:(v<65536?k[D++]=224|v>>>12:(k[D++]=240|v>>>18,k[D++]=128|v>>>12&63),k[D++]=128|v>>>6&63),k[D++]=128|63&v);return k},o.buf2binstring=function(b){return m(b,b.length)},o.binstring2buf=function(b){for(var k=new l.Buf8(b.length),v=0,y=k.length;v>10&1023,T[y++]=56320|1023&w)}return m(T,y)},o.utf8border=function(b,k){var v;for((k=k||b.length)>b.length&&(k=b.length),v=k-1;0<=v&&(192&b[v])==128;)v--;return v<0||v===0?k:v+d[b[v]]>k?v:k}},{"./common":41}],43:[function(r,i,o){i.exports=function(l,c,u,d){for(var h=65535&l|0,m=l>>>16&65535|0,b=0;u!==0;){for(u-=b=2e3>>1:c>>>1;u[d]=c}return u})();i.exports=function(c,u,d,h){var m=l,b=h+d;c^=-1;for(var k=h;k>>8^m[255&(c^u[k])];return-1^c}},{}],46:[function(r,i,o){var l,c=r("../utils/common"),u=r("./trees"),d=r("./adler32"),h=r("./crc32"),m=r("./messages"),b=0,k=4,v=0,y=-2,w=-1,D=4,E=2,T=8,A=9,z=286,R=30,q=19,V=2*z+1,K=15,Q=3,he=258,ve=he+Q+1,M=42,le=113,x=1,W=2,U=3,j=4;function se(C,pe){return C.msg=m[pe],pe}function Y(C){return(C<<1)-(4C.avail_out&&(O=C.avail_out),O!==0&&(c.arraySet(C.output,pe.pending_buf,pe.pending_out,O,C.next_out),C.next_out+=O,pe.pending_out+=O,C.total_out+=O,C.avail_out-=O,pe.pending-=O,pe.pending===0&&(pe.pending_out=0))}function L(C,pe){u._tr_flush_block(C,0<=C.block_start?C.block_start:-1,C.strstart-C.block_start,pe),C.block_start=C.strstart,P(C.strm)}function ee(C,pe){C.pending_buf[C.pending++]=pe}function ae(C,pe){C.pending_buf[C.pending++]=pe>>>8&255,C.pending_buf[C.pending++]=255&pe}function ne(C,pe){var O,N,F=C.max_chain_length,$=C.strstart,te=C.prev_length,ie=C.nice_match,Z=C.strstart>C.w_size-ve?C.strstart-(C.w_size-ve):0,me=C.window,be=C.w_mask,ge=C.prev,xe=C.strstart+he,Re=me[$+te-1],Pe=me[$+te];C.prev_length>=C.good_match&&(F>>=2),ie>C.lookahead&&(ie=C.lookahead);do if(me[(O=pe)+te]===Pe&&me[O+te-1]===Re&&me[O]===me[$]&&me[++O]===me[$+1]){$+=2,O++;do;while(me[++$]===me[++O]&&me[++$]===me[++O]&&me[++$]===me[++O]&&me[++$]===me[++O]&&me[++$]===me[++O]&&me[++$]===me[++O]&&me[++$]===me[++O]&&me[++$]===me[++O]&&$Z&&--F!=0);return te<=C.lookahead?te:C.lookahead}function we(C){var pe,O,N,F,$,te,ie,Z,me,be,ge=C.w_size;do{if(F=C.window_size-C.lookahead-C.strstart,C.strstart>=ge+(ge-ve)){for(c.arraySet(C.window,C.window,ge,ge,0),C.match_start-=ge,C.strstart-=ge,C.block_start-=ge,pe=O=C.hash_size;N=C.head[--pe],C.head[pe]=ge<=N?N-ge:0,--O;);for(pe=O=ge;N=C.prev[--pe],C.prev[pe]=ge<=N?N-ge:0,--O;);F+=ge}if(C.strm.avail_in===0)break;if(te=C.strm,ie=C.window,Z=C.strstart+C.lookahead,me=F,be=void 0,be=te.avail_in,me=Q)for($=C.strstart-C.insert,C.ins_h=C.window[$],C.ins_h=(C.ins_h<=Q&&(C.ins_h=(C.ins_h<=Q)if(N=u._tr_tally(C,C.strstart-C.match_start,C.match_length-Q),C.lookahead-=C.match_length,C.match_length<=C.max_lazy_match&&C.lookahead>=Q){for(C.match_length--;C.strstart++,C.ins_h=(C.ins_h<=Q&&(C.ins_h=(C.ins_h<=Q&&C.match_length<=C.prev_length){for(F=C.strstart+C.lookahead-Q,N=u._tr_tally(C,C.strstart-1-C.prev_match,C.prev_length-Q),C.lookahead-=C.prev_length-1,C.prev_length-=2;++C.strstart<=F&&(C.ins_h=(C.ins_h<C.pending_buf_size-5&&(O=C.pending_buf_size-5);;){if(C.lookahead<=1){if(we(C),C.lookahead===0&&pe===b)return x;if(C.lookahead===0)break}C.strstart+=C.lookahead,C.lookahead=0;var N=C.block_start+O;if((C.strstart===0||C.strstart>=N)&&(C.lookahead=C.strstart-N,C.strstart=N,L(C,!1),C.strm.avail_out===0)||C.strstart-C.block_start>=C.w_size-ve&&(L(C,!1),C.strm.avail_out===0))return x}return C.insert=0,pe===k?(L(C,!0),C.strm.avail_out===0?U:j):(C.strstart>C.block_start&&(L(C,!1),C.strm.avail_out),x)}),new Ce(4,4,8,4,Ne),new Ce(4,5,16,8,Ne),new Ce(4,6,32,32,Ne),new Ce(4,4,16,16,_e),new Ce(8,16,32,32,_e),new Ce(8,16,128,128,_e),new Ce(8,32,128,256,_e),new Ce(32,128,258,1024,_e),new Ce(32,258,258,4096,_e)],o.deflateInit=function(C,pe){return xt(C,pe,T,15,8,0)},o.deflateInit2=xt,o.deflateReset=kt,o.deflateResetKeep=qe,o.deflateSetHeader=function(C,pe){return C&&C.state?C.state.wrap!==2?y:(C.state.gzhead=pe,v):y},o.deflate=function(C,pe){var O,N,F,$;if(!C||!C.state||5>8&255),ee(N,N.gzhead.time>>16&255),ee(N,N.gzhead.time>>24&255),ee(N,N.level===9?2:2<=N.strategy||N.level<2?4:0),ee(N,255&N.gzhead.os),N.gzhead.extra&&N.gzhead.extra.length&&(ee(N,255&N.gzhead.extra.length),ee(N,N.gzhead.extra.length>>8&255)),N.gzhead.hcrc&&(C.adler=h(C.adler,N.pending_buf,N.pending,0)),N.gzindex=0,N.status=69):(ee(N,0),ee(N,0),ee(N,0),ee(N,0),ee(N,0),ee(N,N.level===9?2:2<=N.strategy||N.level<2?4:0),ee(N,3),N.status=le);else{var te=T+(N.w_bits-8<<4)<<8;te|=(2<=N.strategy||N.level<2?0:N.level<6?1:N.level===6?2:3)<<6,N.strstart!==0&&(te|=32),te+=31-te%31,N.status=le,ae(N,te),N.strstart!==0&&(ae(N,C.adler>>>16),ae(N,65535&C.adler)),C.adler=1}if(N.status===69)if(N.gzhead.extra){for(F=N.pending;N.gzindex<(65535&N.gzhead.extra.length)&&(N.pending!==N.pending_buf_size||(N.gzhead.hcrc&&N.pending>F&&(C.adler=h(C.adler,N.pending_buf,N.pending-F,F)),P(C),F=N.pending,N.pending!==N.pending_buf_size));)ee(N,255&N.gzhead.extra[N.gzindex]),N.gzindex++;N.gzhead.hcrc&&N.pending>F&&(C.adler=h(C.adler,N.pending_buf,N.pending-F,F)),N.gzindex===N.gzhead.extra.length&&(N.gzindex=0,N.status=73)}else N.status=73;if(N.status===73)if(N.gzhead.name){F=N.pending;do{if(N.pending===N.pending_buf_size&&(N.gzhead.hcrc&&N.pending>F&&(C.adler=h(C.adler,N.pending_buf,N.pending-F,F)),P(C),F=N.pending,N.pending===N.pending_buf_size)){$=1;break}$=N.gzindexF&&(C.adler=h(C.adler,N.pending_buf,N.pending-F,F)),$===0&&(N.gzindex=0,N.status=91)}else N.status=91;if(N.status===91)if(N.gzhead.comment){F=N.pending;do{if(N.pending===N.pending_buf_size&&(N.gzhead.hcrc&&N.pending>F&&(C.adler=h(C.adler,N.pending_buf,N.pending-F,F)),P(C),F=N.pending,N.pending===N.pending_buf_size)){$=1;break}$=N.gzindexF&&(C.adler=h(C.adler,N.pending_buf,N.pending-F,F)),$===0&&(N.status=103)}else N.status=103;if(N.status===103&&(N.gzhead.hcrc?(N.pending+2>N.pending_buf_size&&P(C),N.pending+2<=N.pending_buf_size&&(ee(N,255&C.adler),ee(N,C.adler>>8&255),C.adler=0,N.status=le)):N.status=le),N.pending!==0){if(P(C),C.avail_out===0)return N.last_flush=-1,v}else if(C.avail_in===0&&Y(pe)<=Y(O)&&pe!==k)return se(C,-5);if(N.status===666&&C.avail_in!==0)return se(C,-5);if(C.avail_in!==0||N.lookahead!==0||pe!==b&&N.status!==666){var ie=N.strategy===2?(function(Z,me){for(var be;;){if(Z.lookahead===0&&(we(Z),Z.lookahead===0)){if(me===b)return x;break}if(Z.match_length=0,be=u._tr_tally(Z,0,Z.window[Z.strstart]),Z.lookahead--,Z.strstart++,be&&(L(Z,!1),Z.strm.avail_out===0))return x}return Z.insert=0,me===k?(L(Z,!0),Z.strm.avail_out===0?U:j):Z.last_lit&&(L(Z,!1),Z.strm.avail_out===0)?x:W})(N,pe):N.strategy===3?(function(Z,me){for(var be,ge,xe,Re,Pe=Z.window;;){if(Z.lookahead<=he){if(we(Z),Z.lookahead<=he&&me===b)return x;if(Z.lookahead===0)break}if(Z.match_length=0,Z.lookahead>=Q&&0Z.lookahead&&(Z.match_length=Z.lookahead)}if(Z.match_length>=Q?(be=u._tr_tally(Z,1,Z.match_length-Q),Z.lookahead-=Z.match_length,Z.strstart+=Z.match_length,Z.match_length=0):(be=u._tr_tally(Z,0,Z.window[Z.strstart]),Z.lookahead--,Z.strstart++),be&&(L(Z,!1),Z.strm.avail_out===0))return x}return Z.insert=0,me===k?(L(Z,!0),Z.strm.avail_out===0?U:j):Z.last_lit&&(L(Z,!1),Z.strm.avail_out===0)?x:W})(N,pe):l[N.level].func(N,pe);if(ie!==U&&ie!==j||(N.status=666),ie===x||ie===U)return C.avail_out===0&&(N.last_flush=-1),v;if(ie===W&&(pe===1?u._tr_align(N):pe!==5&&(u._tr_stored_block(N,0,0,!1),pe===3&&(ue(N.head),N.lookahead===0&&(N.strstart=0,N.block_start=0,N.insert=0))),P(C),C.avail_out===0))return N.last_flush=-1,v}return pe!==k?v:N.wrap<=0?1:(N.wrap===2?(ee(N,255&C.adler),ee(N,C.adler>>8&255),ee(N,C.adler>>16&255),ee(N,C.adler>>24&255),ee(N,255&C.total_in),ee(N,C.total_in>>8&255),ee(N,C.total_in>>16&255),ee(N,C.total_in>>24&255)):(ae(N,C.adler>>>16),ae(N,65535&C.adler)),P(C),0=O.w_size&&($===0&&(ue(O.head),O.strstart=0,O.block_start=0,O.insert=0),me=new c.Buf8(O.w_size),c.arraySet(me,pe,be-O.w_size,O.w_size,0),pe=me,be=O.w_size),te=C.avail_in,ie=C.next_in,Z=C.input,C.avail_in=be,C.next_in=0,C.input=pe,we(O);O.lookahead>=Q;){for(N=O.strstart,F=O.lookahead-(Q-1);O.ins_h=(O.ins_h<>>=Q=K>>>24,A-=Q,(Q=K>>>16&255)===0)W[m++]=65535&K;else{if(!(16&Q)){if((64&Q)==0){K=z[(65535&K)+(T&(1<>>=Q,A-=Q),A<15&&(T+=x[d++]<>>=Q=K>>>24,A-=Q,!(16&(Q=K>>>16&255))){if((64&Q)==0){K=R[(65535&K)+(T&(1<>>=Q,A-=Q,(Q=m-b)>3,T&=(1<<(A-=he<<3))-1,l.next_in=d,l.next_out=m,l.avail_in=d>>24&255)+(M>>>8&65280)+((65280&M)<<8)+((255&M)<<24)}function T(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new l.Buf16(320),this.work=new l.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function A(M){var le;return M&&M.state?(le=M.state,M.total_in=M.total_out=le.total=0,M.msg="",le.wrap&&(M.adler=1&le.wrap),le.mode=y,le.last=0,le.havedict=0,le.dmax=32768,le.head=null,le.hold=0,le.bits=0,le.lencode=le.lendyn=new l.Buf32(w),le.distcode=le.distdyn=new l.Buf32(D),le.sane=1,le.back=-1,k):v}function z(M){var le;return M&&M.state?((le=M.state).wsize=0,le.whave=0,le.wnext=0,A(M)):v}function R(M,le){var x,W;return M&&M.state?(W=M.state,le<0?(x=0,le=-le):(x=1+(le>>4),le<48&&(le&=15)),le&&(le<8||15=j.wsize?(l.arraySet(j.window,le,x-j.wsize,j.wsize,0),j.wnext=0,j.whave=j.wsize):(W<(U=j.wsize-j.wnext)&&(U=W),l.arraySet(j.window,le,x-W,U,j.wnext),(W-=U)?(l.arraySet(j.window,le,x-W,W,0),j.wnext=W,j.whave=j.wsize):(j.wnext+=U,j.wnext===j.wsize&&(j.wnext=0),j.whave>>8&255,x.check=u(x.check,$,2,0),L=P=0,x.mode=2;break}if(x.flags=0,x.head&&(x.head.done=!1),!(1&x.wrap)||(((255&P)<<8)+(P>>8))%31){M.msg="incorrect header check",x.mode=30;break}if((15&P)!=8){M.msg="unknown compression method",x.mode=30;break}if(L-=4,C=8+(15&(P>>>=4)),x.wbits===0)x.wbits=C;else if(C>x.wbits){M.msg="invalid window size",x.mode=30;break}x.dmax=1<>8&1),512&x.flags&&($[0]=255&P,$[1]=P>>>8&255,x.check=u(x.check,$,2,0)),L=P=0,x.mode=3;case 3:for(;L<32;){if(Y===0)break e;Y--,P+=W[j++]<>>8&255,$[2]=P>>>16&255,$[3]=P>>>24&255,x.check=u(x.check,$,4,0)),L=P=0,x.mode=4;case 4:for(;L<16;){if(Y===0)break e;Y--,P+=W[j++]<>8),512&x.flags&&($[0]=255&P,$[1]=P>>>8&255,x.check=u(x.check,$,2,0)),L=P=0,x.mode=5;case 5:if(1024&x.flags){for(;L<16;){if(Y===0)break e;Y--,P+=W[j++]<>>8&255,x.check=u(x.check,$,2,0)),L=P=0}else x.head&&(x.head.extra=null);x.mode=6;case 6:if(1024&x.flags&&(Y<(ne=x.length)&&(ne=Y),ne&&(x.head&&(C=x.head.extra_len-x.length,x.head.extra||(x.head.extra=new Array(x.head.extra_len)),l.arraySet(x.head.extra,W,j,ne,C)),512&x.flags&&(x.check=u(x.check,W,ne,j)),Y-=ne,j+=ne,x.length-=ne),x.length))break e;x.length=0,x.mode=7;case 7:if(2048&x.flags){if(Y===0)break e;for(ne=0;C=W[j+ne++],x.head&&C&&x.length<65536&&(x.head.name+=String.fromCharCode(C)),C&&ne>9&1,x.head.done=!0),M.adler=x.check=0,x.mode=12;break;case 10:for(;L<32;){if(Y===0)break e;Y--,P+=W[j++]<>>=7&L,L-=7&L,x.mode=27;break}for(;L<3;){if(Y===0)break e;Y--,P+=W[j++]<>>=1)){case 0:x.mode=14;break;case 1:if(he(x),x.mode=20,le!==6)break;P>>>=2,L-=2;break e;case 2:x.mode=17;break;case 3:M.msg="invalid block type",x.mode=30}P>>>=2,L-=2;break;case 14:for(P>>>=7&L,L-=7&L;L<32;){if(Y===0)break e;Y--,P+=W[j++]<>>16^65535)){M.msg="invalid stored block lengths",x.mode=30;break}if(x.length=65535&P,L=P=0,x.mode=15,le===6)break e;case 15:x.mode=16;case 16:if(ne=x.length){if(Y>>=5,L-=5,x.ndist=1+(31&P),P>>>=5,L-=5,x.ncode=4+(15&P),P>>>=4,L-=4,286>>=3,L-=3}for(;x.have<19;)x.lens[te[x.have++]]=0;if(x.lencode=x.lendyn,x.lenbits=7,O={bits:x.lenbits},pe=h(0,x.lens,0,19,x.lencode,0,x.work,O),x.lenbits=O.bits,pe){M.msg="invalid code lengths set",x.mode=30;break}x.have=0,x.mode=19;case 19:for(;x.have>>16&255,Je=65535&F,!((_e=F>>>24)<=L);){if(Y===0)break e;Y--,P+=W[j++]<>>=_e,L-=_e,x.lens[x.have++]=Je;else{if(Je===16){for(N=_e+2;L>>=_e,L-=_e,x.have===0){M.msg="invalid bit length repeat",x.mode=30;break}C=x.lens[x.have-1],ne=3+(3&P),P>>>=2,L-=2}else if(Je===17){for(N=_e+3;L>>=_e)),P>>>=3,L-=3}else{for(N=_e+7;L>>=_e)),P>>>=7,L-=7}if(x.have+ne>x.nlen+x.ndist){M.msg="invalid bit length repeat",x.mode=30;break}for(;ne--;)x.lens[x.have++]=C}}if(x.mode===30)break;if(x.lens[256]===0){M.msg="invalid code -- missing end-of-block",x.mode=30;break}if(x.lenbits=9,O={bits:x.lenbits},pe=h(m,x.lens,0,x.nlen,x.lencode,0,x.work,O),x.lenbits=O.bits,pe){M.msg="invalid literal/lengths set",x.mode=30;break}if(x.distbits=6,x.distcode=x.distdyn,O={bits:x.distbits},pe=h(b,x.lens,x.nlen,x.ndist,x.distcode,0,x.work,O),x.distbits=O.bits,pe){M.msg="invalid distances set",x.mode=30;break}if(x.mode=20,le===6)break e;case 20:x.mode=21;case 21:if(6<=Y&&258<=ue){M.next_out=se,M.avail_out=ue,M.next_in=j,M.avail_in=Y,x.hold=P,x.bits=L,d(M,ae),se=M.next_out,U=M.output,ue=M.avail_out,j=M.next_in,W=M.input,Y=M.avail_in,P=x.hold,L=x.bits,x.mode===12&&(x.back=-1);break}for(x.back=0;Ce=(F=x.lencode[P&(1<>>16&255,Je=65535&F,!((_e=F>>>24)<=L);){if(Y===0)break e;Y--,P+=W[j++]<>qe)])>>>16&255,Je=65535&F,!(qe+(_e=F>>>24)<=L);){if(Y===0)break e;Y--,P+=W[j++]<>>=qe,L-=qe,x.back+=qe}if(P>>>=_e,L-=_e,x.back+=_e,x.length=Je,Ce===0){x.mode=26;break}if(32&Ce){x.back=-1,x.mode=12;break}if(64&Ce){M.msg="invalid literal/length code",x.mode=30;break}x.extra=15&Ce,x.mode=22;case 22:if(x.extra){for(N=x.extra;L>>=x.extra,L-=x.extra,x.back+=x.extra}x.was=x.length,x.mode=23;case 23:for(;Ce=(F=x.distcode[P&(1<>>16&255,Je=65535&F,!((_e=F>>>24)<=L);){if(Y===0)break e;Y--,P+=W[j++]<>qe)])>>>16&255,Je=65535&F,!(qe+(_e=F>>>24)<=L);){if(Y===0)break e;Y--,P+=W[j++]<>>=qe,L-=qe,x.back+=qe}if(P>>>=_e,L-=_e,x.back+=_e,64&Ce){M.msg="invalid distance code",x.mode=30;break}x.offset=Je,x.extra=15&Ce,x.mode=24;case 24:if(x.extra){for(N=x.extra;L>>=x.extra,L-=x.extra,x.back+=x.extra}if(x.offset>x.dmax){M.msg="invalid distance too far back",x.mode=30;break}x.mode=25;case 25:if(ue===0)break e;if(ne=ae-ue,x.offset>ne){if((ne=x.offset-ne)>x.whave&&x.sane){M.msg="invalid distance too far back",x.mode=30;break}we=ne>x.wnext?(ne-=x.wnext,x.wsize-ne):x.wnext-ne,ne>x.length&&(ne=x.length),Ne=x.window}else Ne=U,we=se-x.offset,ne=x.length;for(ueV?(Q=we[Ne+D[le]],L[ee+D[le]]):(Q=96,0),T=1<>se)+(A-=T)]=K<<24|Q<<16|he|0,A!==0;);for(T=1<>=1;if(T!==0?(P&=T-1,P+=T):P=0,le++,--ae[M]==0){if(M===W)break;M=b[k+D[le]]}if(U>>7)]}function ee(F,$){F.pending_buf[F.pending++]=255&$,F.pending_buf[F.pending++]=$>>>8&255}function ae(F,$,te){F.bi_valid>E-te?(F.bi_buf|=$<>E-F.bi_valid,F.bi_valid+=te-E):(F.bi_buf|=$<>>=1,te<<=1,0<--$;);return te>>>1}function Ne(F,$,te){var ie,Z,me=new Array(D+1),be=0;for(ie=1;ie<=D;ie++)me[ie]=be=be+te[ie-1]<<1;for(Z=0;Z<=$;Z++){var ge=F[2*Z+1];ge!==0&&(F[2*Z]=we(me[ge]++,ge))}}function _e(F){var $;for($=0;$>1;1<=te;te--)qe(F,me,te);for(Z=xe;te=F.heap[1],F.heap[1]=F.heap[F.heap_len--],qe(F,me,1),ie=F.heap[1],F.heap[--F.heap_max]=te,F.heap[--F.heap_max]=ie,me[2*Z]=me[2*te]+me[2*ie],F.depth[Z]=(F.depth[te]>=F.depth[ie]?F.depth[te]:F.depth[ie])+1,me[2*te+1]=me[2*ie+1]=Z,F.heap[1]=Z++,qe(F,me,1),2<=F.heap_len;);F.heap[--F.heap_max]=F.heap[1],(function(Pe,rt){var vt,tt,at,Ie,lt,Pt,ot=rt.dyn_tree,Si=rt.max_code,lo=rt.stat_desc.static_tree,co=rt.stat_desc.has_stree,Ia=rt.stat_desc.extra_bits,da=rt.stat_desc.extra_base,ur=rt.stat_desc.max_length,Zt=0;for(Ie=0;Ie<=D;Ie++)Pe.bl_count[Ie]=0;for(ot[2*Pe.heap[Pe.heap_max]+1]=0,vt=Pe.heap_max+1;vt>=7;Z>>=1)if(1&Re&&ge.dyn_ltree[2*xe]!==0)return c;if(ge.dyn_ltree[18]!==0||ge.dyn_ltree[20]!==0||ge.dyn_ltree[26]!==0)return u;for(xe=32;xe>>3,(me=F.static_len+3+7>>>3)<=Z&&(Z=me)):Z=me=te+5,te+4<=Z&&$!==-1?N(F,$,te,ie):F.strategy===4||me===Z?(ae(F,2+(ie?1:0),3),kt(F,ve,M)):(ae(F,4+(ie?1:0),3),(function(ge,xe,Re,Pe){var rt;for(ae(ge,xe-257,5),ae(ge,Re-1,5),ae(ge,Pe-4,4),rt=0;rt>>8&255,F.pending_buf[F.d_buf+2*F.last_lit+1]=255&$,F.pending_buf[F.l_buf+F.last_lit]=255&te,F.last_lit++,$===0?F.dyn_ltree[2*te]++:(F.matches++,$--,F.dyn_ltree[2*(x[te]+b+1)]++,F.dyn_dtree[2*L($)]++),F.last_lit===F.lit_bufsize-1},o._tr_align=function(F){ae(F,2,3),ne(F,A,ve),(function($){$.bi_valid===16?(ee($,$.bi_buf),$.bi_buf=0,$.bi_valid=0):8<=$.bi_valid&&($.pending_buf[$.pending++]=255&$.bi_buf,$.bi_buf>>=8,$.bi_valid-=8)})(F)}},{"../utils/common":41}],53:[function(r,i,o){i.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(r,i,o){(function(l){(function(c,u){if(!c.setImmediate){var d,h,m,b,k=1,v={},y=!1,w=c.document,D=Object.getPrototypeOf&&Object.getPrototypeOf(c);D=D&&D.setTimeout?D:c,d={}.toString.call(c.process)==="[object process]"?function(z){process.nextTick(function(){T(z)})}:(function(){if(c.postMessage&&!c.importScripts){var z=!0,R=c.onmessage;return c.onmessage=function(){z=!1},c.postMessage("","*"),c.onmessage=R,z}})()?(b="setImmediate$"+Math.random()+"$",c.addEventListener?c.addEventListener("message",A,!1):c.attachEvent("onmessage",A),function(z){c.postMessage(b+z,"*")}):c.MessageChannel?((m=new MessageChannel).port1.onmessage=function(z){T(z.data)},function(z){m.port2.postMessage(z)}):w&&"onreadystatechange"in w.createElement("script")?(h=w.documentElement,function(z){var R=w.createElement("script");R.onreadystatechange=function(){T(z),R.onreadystatechange=null,h.removeChild(R),R=null},h.appendChild(R)}):function(z){setTimeout(T,0,z)},D.setImmediate=function(z){typeof z!="function"&&(z=new Function(""+z));for(var R=new Array(arguments.length-1),q=0;q"u"?l===void 0?this:l:self)}).call(this,typeof $s<"u"?$s:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})})(bu)),bu.exports}var tm=G0();class rm{constructor(a,r,i){this.downloadUrl=a,this.sha256=r,this.proxyService=i}async download(a){const r=await this.downloadRelease(a);return this.sha256&&await this.verifyChecksum(r),r}async extract(a,r){return await this.extractZip(a,r)}async downloadAndExtract(a){const r=await this.downloadRelease(a);a({phase:"extract",progress:0,total:100});const i=await tm.loadAsync(r),o={},l=Object.keys(i.files);let c=0;for(const u of l){const d=i.files[u];if(!d.dir){const h=await d.async("string"),m=u.split("/");if(m.length>1){const b=m.slice(1).join("/");o[b]=h}}c++,a({phase:"extract",progress:c,total:l.length})}return o}async downloadRelease(a){a({phase:"download",progress:0,total:100});try{if(this.proxyService){if(!this.proxyService.isServiceActivated()&&!await this.proxyService.activate())throw new Error("Failed to activate license for download");const i=(await _.requestUrl({url:this.downloadUrl,method:"HEAD"})).headers["content-length"],o=i?parseInt(i,10):100;let l=0,c=!0,u=null;(()=>{const m=Math.floor(o*.95),b=1e4,k=100,v=b/k,y=m/v;let w=0;u=setInterval(()=>{if(!c||w>=v){u&&clearInterval(u);return}w++;const D=Math.min(Math.floor(w*y),m);D>l&&(l=D,a({phase:"download",progress:l,total:o}))},k)})();const h=await _.requestUrl({url:this.downloadUrl,method:"GET"});if(c=!1,u&&clearInterval(u),h.status!==200)throw new Error(`Download failed with status: ${h.status}`);return a({phase:"download",progress:100,total:100}),h.arrayBuffer}else{const i=(await _.requestUrl({url:this.downloadUrl,method:"HEAD"})).headers["content-length"],o=i?parseInt(i,10):100;let l=0,c=!0,u=null;(()=>{const m=Math.floor(o*.95),b=1e4,k=100,v=b/k,y=m/v;let w=0;u=setInterval(()=>{if(!c||w>=v){u&&clearInterval(u);return}w++;const D=Math.min(Math.floor(w*y),m);D>l&&(l=D,a({phase:"download",progress:l,total:o}))},k)})();const h=await _.requestUrl({url:this.downloadUrl,method:"GET"});if(c=!1,u&&clearInterval(u),h.status!==200)throw new Error(`Download failed with status: ${h.status}`);return a({phase:"download",progress:100,total:100}),h.arrayBuffer}}catch{const i=await _.requestUrl({url:this.downloadUrl,method:"GET"});if(i.status!==200)throw new Error(`Download failed with status: ${i.status}`);return a({phase:"download",progress:100,total:100}),i.arrayBuffer}}async verifyChecksum(a){if(!this.sha256)return;if(await this.calculateSHA256(a)!==this.sha256)throw new Error("Checksum verification failed")}async calculateSHA256(a){const r=await crypto.subtle.digest("SHA-256",a);return Array.from(new Uint8Array(r)).map(o=>o.toString(16).padStart(2,"0")).join("")}async extractZip(a,r){const i=await tm.loadAsync(a),o=new Map,l=Object.keys(i.files).length;let c=0,u="";const d=Object.keys(i.files),h=d[0];if(h&&h.includes("/")){const m=h.split("/")[0]+"/";d.every(b=>b===m||b.startsWith(m))&&(u=m)}for(const[m,b]of Object.entries(i.files)){if(!b.dir){r({phase:"extract",progress:c,total:l,currentFile:m});const k=await b.async("arraybuffer"),v=u&&m.startsWith(u)?m.slice(u.length):m;o.set(v,k)}c++}return r({phase:"extract",progress:l,total:l}),o}}function br(){}br.prototype={diff:function(a,r){var i,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},l=o.callback;typeof o=="function"&&(l=o,o={});var c=this;function u(z){return z=c.postProcess(z,o),l?(setTimeout(function(){l(z)},0),!0):z}a=this.castInput(a,o),r=this.castInput(r,o),a=this.removeEmpty(this.tokenize(a,o)),r=this.removeEmpty(this.tokenize(r,o));var d=r.length,h=a.length,m=1,b=d+h;o.maxEditLength!=null&&(b=Math.min(b,o.maxEditLength));var k=(i=o.timeout)!==null&&i!==void 0?i:1/0,v=Date.now()+k,y=[{oldPos:-1,lastComponent:void 0}],w=this.extractCommon(y[0],r,a,0,o);if(y[0].oldPos+1>=h&&w+1>=d)return u(am(c,y[0].lastComponent,r,a,c.useLongestToken));var D=-1/0,E=1/0;function T(){for(var z=Math.max(D,-m);z<=Math.min(E,m);z+=2){var R=void 0,q=y[z-1],V=y[z+1];q&&(y[z-1]=void 0);var K=!1;if(V){var Q=V.oldPos-z;K=V&&0<=Q&&Q=h&&w+1>=d)return u(am(c,R.lastComponent,r,a,c.useLongestToken));y[z]=R,R.oldPos+1>=h&&(E=Math.min(E,z-1)),w+1>=d&&(D=Math.max(D,z+1))}m++}if(l)(function z(){setTimeout(function(){if(m>b||Date.now()>v)return l();T()||z()},0)})();else for(;m<=b&&Date.now()<=v;){var A=T();if(A)return A}},addToPath:function(a,r,i,o,l){var c=a.lastComponent;return c&&!l.oneChangePerToken&&c.added===r&&c.removed===i?{oldPos:a.oldPos+o,lastComponent:{count:c.count+1,added:r,removed:i,previousComponent:c.previousComponent}}:{oldPos:a.oldPos+o,lastComponent:{count:1,added:r,removed:i,previousComponent:c}}},extractCommon:function(a,r,i,o,l){for(var c=r.length,u=i.length,d=a.oldPos,h=d-o,m=0;h+1v.length?w:v}),b.value=f.join(k)}else b.value=f.join(r.slice(h,h+b.count));h+=b.count,b.added||(m+=b.count)}}return l}function nm(f,a){var r;for(r=0;ra.length&&(r=f.length-a.length);var i=a.length;f.length0&&a[c]!=a[l];)l=o[l];a[c]==a[l]&&l++}l=0;for(var u=r;u0&&f[u]!=a[l];)l=o[l];f[u]==a[l]&&l++}return l}var Ks="a-zA-Z0-9_\\u{C0}-\\u{FF}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}",Y0=new RegExp("[".concat(Ks,"]+|\\s+|[^").concat(Ks,"]"),"ug"),io=new br;io.equals=function(f,a,r){return r.ignoreCase&&(f=f.toLowerCase(),a=a.toLowerCase()),f.trim()===a.trim()};io.tokenize=function(f){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r;if(a.intlSegmenter){if(a.intlSegmenter.resolvedOptions().granularity!="word")throw new Error('The segmenter passed must have a granularity of "word"');r=Array.from(a.intlSegmenter.segment(f),function(l){return l.segment})}else r=f.match(Y0)||[];var i=[],o=null;return r.forEach(function(l){/\s/.test(l)?o==null?i.push(l):i.push(i.pop()+l):/\s/.test(o)?i[i.length-1]==o?i.push(i.pop()+l):i.push(o+l):i.push(l),o=l}),i};io.join=function(f){return f.map(function(a,r){return r==0?a:a.replace(/^\s+/,"")}).join("")};io.postProcess=function(f,a){if(!f||a.oneChangePerToken)return f;var r=null,i=null,o=null;return f.forEach(function(l){l.added?i=l:l.removed?o=l:((i||o)&&om(r,o,i,l),r=l,i=null,o=null)}),(i||o)&&om(r,o,i,null),f};function om(f,a,r,i){if(a&&r){var o=a.value.match(/^\s*/)[0],l=a.value.match(/\s*$/)[0],c=r.value.match(/^\s*/)[0],u=r.value.match(/\s*$/)[0];if(f){var d=nm(o,c);f.value=zu(f.value,c,d),a.value=pi(a.value,d),r.value=pi(r.value,d)}if(i){var h=im(l,u);i.value=Lu(i.value,u,h),a.value=Ws(a.value,h),r.value=Ws(r.value,h)}}else if(r)f&&(r.value=r.value.replace(/^\s*/,"")),i&&(i.value=i.value.replace(/^\s*/,""));else if(f&&i){var m=i.value.match(/^\s*/)[0],b=a.value.match(/^\s*/)[0],k=a.value.match(/\s*$/)[0],v=nm(m,b);a.value=pi(a.value,v);var y=im(pi(m,v),k);a.value=Ws(a.value,y),i.value=Lu(i.value,m,y),f.value=zu(f.value,m,m.slice(0,m.length-y.length))}else if(i){var w=i.value.match(/^\s*/)[0],D=a.value.match(/\s*$/)[0],E=sm(D,w);a.value=Ws(a.value,E)}else if(f){var T=f.value.match(/\s*$/)[0],A=a.value.match(/^\s*/)[0],z=sm(T,A);a.value=pi(a.value,z)}}var K0=new br;K0.tokenize=function(f){var a=new RegExp("(\\r?\\n)|[".concat(Ks,"]+|[^\\S\\n\\r]+|[^").concat(Ks,"]"),"ug");return f.match(a)||[]};var so=new br;so.tokenize=function(f,a){a.stripTrailingCr&&(f=f.replace(/\r\n/g,` -`));var r=[],i=f.split(/(\n|\r\n)/);i[i.length-1]||i.pop();for(var o=0;o"u"?r:c}:i;return typeof f=="string"?f:JSON.stringify(Ou(f,null,null,o),o," ")};wi.equals=function(f,a,r){return br.prototype.equals.call(wi,f.replace(/,([\r\n])/g,"$1"),a.replace(/,([\r\n])/g,"$1"),r)};function Ou(f,a,r,i,o){a=a||[],r=r||[],i&&(f=i(o,f));var l;for(l=0;l0&&this.conflicts[0].incoming instanceof ArrayBuffer)){this.conflicts=[],this.operations=[],this.resolutions={},this.renderContent();return}this.resolutions=Object.fromEntries(this.conflicts.map(o=>[o.path,"keep_current"])),this.selectedFile=null,this.renderContent()}async onClose(){this.resizeObserver?.disconnect(),this.resizeObserver=null,this.detailEl=null,this.containerEl.empty()}setResolution(a,r){this.resolutions[a]=r,this.updateRadioStates(a)}setCategoryResolutions(a,r){const i=this.getCategorizedFiles()[a];for(const o of i)this.resolutions[o.path]=r,this.updateRadioStates(o.path)}updateRadioStates(a){if(this.selectedFile===a&&this.detailEl){const o=this.detailEl.querySelectorAll('input[type="radio"]'),l=this.resolutions[a]==="apply_update";o[0]&&(o[0].checked=!l),o[1]&&(o[1].checked=l)}const i=this.containerEl.querySelector(`.conflict-file-item[data-path="${CSS.escape(a)}"]`)?.querySelector(".conflict-resolution-indicator");i&&(i.dataset.resolution=this.resolutions[a])}selectFile(a){const r=this.selectedFile;this.selectedFile=r===a?null:a,r&&this.containerEl.querySelector(`.conflict-file-item[data-path="${CSS.escape(r)}"]`)?.removeClass("is-active"),this.selectedFile&&this.containerEl.querySelector(`.conflict-file-item[data-path="${CSS.escape(this.selectedFile)}"]`)?.addClass("is-active"),this.renderDetailPanel()}getCategorizedFiles(){const a=this.conflicts.filter(i=>!i.current||i.current.byteLength===0),r=this.conflicts.filter(i=>i.current&&i.current.byteLength>0);return{new:a,updated:r.filter(i=>i.currentHash!==i.incomingHash),unchanged:r.filter(i=>i.currentHash===i.incomingHash)}}getFileCategory(a){return!a.current||a.current.byteLength===0?"new":a.currentHash!==a.incomingHash?"updated":"unchanged"}renderContent(){const{containerEl:a}=this;this.resizeObserver?.disconnect(),a.empty();const r=a.createDiv({cls:"conflict-view"});if(this.conflicts.length===0){r.createEl("h2",{text:"No Update Data"}),r.createDiv({cls:"conflict-view-description",text:"This view has no update data. Please trigger a new update to review changes."});const m=r.createDiv({cls:"conflict-view-footer"}).createEl("button",{text:"Close"});this.registerDomEvent(m,"click",()=>this.leaf.detach());return}r.createEl("h2",{text:"Update Confirmation"}),r.createDiv({cls:"conflict-view-description",text:"Please review the changes that will be applied:"});const i=r.createDiv({cls:"conflict-view-body"}),o=i.createDiv({cls:"conflict-view-sidebar"});this.detailEl=i.createDiv({cls:"conflict-view-detail"});const l=this.getCategorizedFiles();l.new.length>0&&this.renderSection(o,"new",l.new,"New Files",{keepLabel:"Skip",applyLabel:"Create File",bulkKeep:"Skip All",bulkApply:"Create All"}),l.updated.length>0&&this.renderSection(o,"updated",l.updated,"Modified Files",{keepLabel:"Keep Current",applyLabel:"Apply Update",bulkKeep:"Keep All Current",bulkApply:"Apply All Updates"}),l.unchanged.length>0&&this.renderSection(o,"unchanged",l.unchanged,"Unchanged Files",{keepLabel:"Skip",applyLabel:"Keep Unchanged",bulkKeep:"Skip All",bulkApply:"Keep All Unchanged"}),this.renderDetailPanel(),this.resizeObserver=new ResizeObserver(h=>{const b=(h[0]?.contentRect.width??0)>=J0?"split":"inline";b!==this.diffMode&&(this.diffMode=b,this.renderDetailPanel())}),this.resizeObserver.observe(this.detailEl);const c=r.createDiv({cls:"conflict-view-footer"}),u=c.createEl("button",{cls:"mod-cta",text:"Apply Selected Files"}),d=c.createEl("button",{text:"Cancel"});this.registerDomEvent(u,"click",()=>{this.leaf.view.app.workspace.trigger("ppb:trigger-update",{resolutions:this.resolutions,operations:this.operations}),this.leaf.detach()}),this.registerDomEvent(d,"click",()=>this.leaf.detach())}renderSection(a,r,i,o,l){const c=a.createDiv({cls:"conflict-view-section"});c.createEl("h3",{text:`${o} (${i.length})`});const u=c.createDiv({cls:"conflict-category-actions"}),d=u.createEl("button",{cls:"conflict-select-all",text:l.bulkKeep}),h=u.createEl("button",{cls:"conflict-select-all",text:l.bulkApply});this.registerDomEvent(d,"click",()=>this.setCategoryResolutions(r,"keep_current")),this.registerDomEvent(h,"click",()=>this.setCategoryResolutions(r,"apply_update"));const m=c.createDiv({cls:"conflict-view-files"});for(const b of i)this.renderFileItem(m,b,r)}renderFileItem(a,r,i){const o=a.createDiv({cls:"conflict-file-item"});o.dataset.path=r.path,o.dataset.category=i;const l=o.createDiv({cls:"conflict-file-header"}),c=l.createEl("span",{cls:"conflict-resolution-indicator"});c.dataset.resolution=this.resolutions[r.path],l.createEl("span",{cls:"conflict-file-path",text:r.path}),this.registerDomEvent(l,"click",()=>{this.selectFile(r.path)})}getLabelsForCategory(a){switch(a){case"new":return{keepLabel:"Skip",applyLabel:"Create File"};case"updated":return{keepLabel:"Keep Current",applyLabel:"Apply Update"};case"unchanged":return{keepLabel:"Skip",applyLabel:"Keep Unchanged"}}}renderDetailPanel(){if(!this.detailEl)return;if(this.detailEl.empty(),!this.selectedFile){this.detailEl.createDiv({cls:"conflict-view-detail-empty",text:"Select a file to view details"});return}const a=this.conflicts.find(m=>m.path===this.selectedFile);if(!a)return;const r=this.getFileCategory(a),i=this.getLabelsForCategory(r),o=this.detailEl.createDiv({cls:"conflict-view-detail-header"});o.createEl("span",{cls:"conflict-view-detail-path",text:a.path});const l=o.createDiv({cls:"conflict-view-detail-actions"}),c=l.createEl("label",{cls:"conflict-resolution-label"}),u=c.createEl("input");u.type="radio",u.name="detail-resolution",u.checked=this.resolutions[a.path]==="keep_current",c.appendText(i.keepLabel);const d=l.createEl("label",{cls:"conflict-resolution-label"}),h=d.createEl("input");if(h.type="radio",h.name="detail-resolution",h.checked=this.resolutions[a.path]==="apply_update",d.appendText(i.applyLabel),this.registerDomEvent(u,"change",()=>{this.setResolution(a.path,"keep_current")}),this.registerDomEvent(h,"change",()=>{this.setResolution(a.path,"apply_update")}),r==="updated"){const m=this.detailEl.createDiv({cls:"conflict-diff"});this.diffMode==="split"?this.renderDiffSplit(m,a):this.renderDiffInline(m,a)}else{const m=this.detailEl.createDiv({cls:"conflict-file-preview"});this.renderPreview(m,a)}}renderDiffInline(a,r){if(!this.isTextFile(r.current)){a.createDiv({cls:"binary-file-notice",text:"Binary file, diff not available"});return}try{const i=new TextDecoder().decode(r.current),o=new TextDecoder().decode(r.incoming),l=lm(i,o),c=a.createEl("table",{cls:"diff"}),u=c.createEl("colgroup");u.createEl("col",{cls:"diff-gutter-col"}),u.createEl("col");const d=c.createEl("tbody");let h=1,m=1;for(const b of l){const k=b.value.replace(/\n$/,"").split(` -`);for(const v of k){const y=d.createEl("tr",{cls:"diff-line"});b.removed?(y.createEl("td",{cls:"diff-gutter diff-gutter-delete",text:String(h++)}),y.createEl("td",{cls:"diff-code diff-code-delete",text:v})):b.added?(y.createEl("td",{cls:"diff-gutter diff-gutter-insert",text:String(m++)}),y.createEl("td",{cls:"diff-code diff-code-insert",text:v})):(y.createEl("td",{cls:"diff-gutter",text:String(h++)}),y.createEl("td",{cls:"diff-code",text:v}),m++)}}}catch(i){console.error("Error generating diff:",i),a.createDiv({text:"Error generating diff"})}}renderDiffSplit(a,r){if(!this.isTextFile(r.current)){a.createDiv({cls:"binary-file-notice",text:"Binary file, diff not available"});return}try{const i=new TextDecoder().decode(r.current),o=new TextDecoder().decode(r.incoming),l=lm(i,o),c=a.createEl("table",{cls:"diff diff-split"}),u=c.createEl("colgroup");u.createEl("col",{cls:"diff-gutter-col"}),u.createEl("col"),u.createEl("col",{cls:"diff-gutter-col"}),u.createEl("col");const d=c.createEl("tbody");let h=1,m=1;const b=this.groupChangesForSplit(l);for(const k of b)if(k.type==="unchanged"){const v=k.lines;for(const y of v){const w=d.createEl("tr",{cls:"diff-line"});w.createEl("td",{cls:"diff-gutter",text:String(h++)}),w.createEl("td",{cls:"diff-code",text:y}),w.createEl("td",{cls:"diff-gutter",text:String(m++)}),w.createEl("td",{cls:"diff-code",text:y})}}else if(k.type==="paired"){const v=Math.max(k.removed.length,k.added.length);for(let y=0;y1e3?"...":"");a.createEl("pre",{text:o})}isTextFile(a){try{const r=new TextDecoder().decode(a);return!r.includes("\0")&&r.length>0}catch{return!1}}}class cm extends _.Component{constructor(a,r,i,o,l=[],c={},u={},d={}){super(),this.latestManifest=null,this.pendingOperations=[],this.manager=a,this.app=r,this.vault=i,this.backupDir=o,this.excludePatterns=l,this.customReplacements=c,this.obsidianConflictHandling=u,this.updateScope={regularFiles:!0,obsidianCore:!0,plugins:!0,themes:!0,snippets:!0,pluginData:!1,...d},this.downloadZipPath=".paperbell_update.zip"}listenToEvents(a,r,i,o){this.registerEvent(this.app.workspace.on("ppb:trigger-update",async l=>{const c=l.operations||[],u=l.resolutions||{},d=[];let h=0;const m=c.filter(b=>u[b.path]==="apply_update");for(const b of m)this.shouldExclude(b.path)||(this.app.workspace.trigger("ppb:update-progress",{phase:"apply",progress:h,total:m.length,currentFile:_.normalizePath(b.path)}),await this.applyOperation(b),d.push(_.normalizePath(b.path)),h++);this.app.workspace.trigger("ppb:update-progress",{phase:"apply",progress:m.length,total:m.length}),this.app.workspace.trigger("ppb:update-complete",{success:!0,updatedFilePaths:d,version:this.latestManifest?.version||this.manager.lastUpdateInfo?.latestVersion}),await this.cleanupDownloadedFiles()})),this.registerEvent(this.app.workspace.on("ppb:update-complete",l=>{if(l.success){const c={minAppVersion:l.version};if(c?.minAppVersion){if(r.updateConfig({minAppVersion:c.minAppVersion}),i&&i.settings)try{i.settings.updater||(i.settings.updater={repository:r.getRepository()}),i.settings.updater.minAppVersion=c.minAppVersion,i.saveSettings()}catch(u){console.warn("Could not update plugin settings after update",u)}a.setText(`Updated to ${l.version} successfully!`)}}})),this.registerEvent(this.app.workspace.on("ppb:update-progress",l=>{o&&o(l)}))}async saveDownloadedZip(a){await this.vault.adapter.writeBinary(_.normalizePath(this.downloadZipPath),a)}async loadDownloadedZip(){return await this.vault.adapter.exists(this.downloadZipPath)?await this.vault.adapter.readBinary(this.downloadZipPath):null}async cleanupDownloadedFiles(){await this.vault.adapter.exists(this.downloadZipPath)&&await this.vault.adapter.remove(this.downloadZipPath)}async parseReleaseContents(a){const r={manifest:null,changelog:null,regularFiles:new Map,obsidianFiles:{core:new Map,snippets:new Map,plugins:new Map,themes:new Map}};let i="";const o=Array.from(a.keys());if(o.length>0){const l=o[0];if(l.includes("/")){const c=l.split("/")[0]+"/";o.every(u=>u===c||u.startsWith(c))&&(i=c)}}for(const[l,c]of a.entries()){let u=i&&l.startsWith(i)?l.substring(i.length):l;if(u=_.normalizePath(u),u==="manifest.json"){r.manifest=c,this.latestManifest=this.parseJsonFromArrayBuffer(c);continue}if(u==="changelog.md"){r.changelog=c;continue}if(u.startsWith(".obsidian/")){this.processObsidianFile(u,c,r);continue}r.regularFiles.set(u,c)}return r}processObsidianFile(a,r,i){const o=a.split("/");if(o.length<2)return;const l=o[1],c=o.slice(2).join("/");if(o.length===2&&o[1].endsWith(".json")){i.obsidianFiles.core||(i.obsidianFiles.core=new Map),i.obsidianFiles.core.set(o[1],r);return}switch(l){case"snippets":i.obsidianFiles.snippets.set(c,r);break;case"plugins":i.obsidianFiles.plugins.set(c,r);break;case"themes":i.obsidianFiles.themes.set(c,r);break;default:i.regularFiles.set(a,r)}}async comparePlugins(a){if(this.updateScope.plugins===!1)return new Map;const r=new Map,i=new Map;for(const[o,l]of a.obsidianFiles.plugins.entries()){const c=o.split("/");if(c.length===0)continue;const u=c[0],d=c.slice(1).join("/");i.has(u)||i.set(u,new Map),i.get(u).set(d,l)}for(const[o,l]of i.entries()){if(o===this.getCurrentPluginName()){for(const[u,d]of l.entries())u==="data.json"&&this.updateScope.pluginData!==!0||r.set(`.obsidian/plugins/${o}/${u}`,{type:"update",path:`.obsidian/plugins/${o}/${u}`,content:d});continue}if(!l.has("manifest.json"))continue;const c=`.obsidian/plugins/${o}/manifest.json`;if(await this.vault.adapter.exists(_.normalizePath(c))){const u=await this.vault.adapter.readBinary(_.normalizePath(c)),d=this.parseJsonFromArrayBuffer(u),h=this.parseJsonFromArrayBuffer(l.get("manifest.json"));if(!d.version||!h.version||this.compareVersions(h.version,d.version)>0)for(const[m,b]of l.entries())m==="data.json"&&this.updateScope.pluginData!==!0||r.set(`.obsidian/plugins/${o}/${m}`,{type:"update",path:`.obsidian/plugins/${o}/${m}`,content:b})}else for(const[u,d]of l.entries())u==="data.json"&&this.updateScope.pluginData!==!0||r.set(`.obsidian/plugins/${o}/${u}`,{type:"add",path:`.obsidian/plugins/${o}/${u}`,content:d})}return r}async compareThemes(a){if(this.updateScope.themes===!1)return new Map;const r=new Map,i=new Map;for(const[o,l]of a.obsidianFiles.themes.entries()){const c=o.split("/");if(c.length===0)continue;const u=c[0],d=c.slice(1).join("/");i.has(u)||i.set(u,new Map),i.get(u).set(d,l)}for(const[o,l]of i.entries()){if(!l.has("manifest.json")){for(const[u,d]of l.entries())r.set(`.obsidian/themes/${o}/${u}`,{type:"update",path:`.obsidian/themes/${o}/${u}`,content:d});continue}const c=`.obsidian/themes/${o}/manifest.json`;if(await this.vault.adapter.exists(_.normalizePath(c))){const u=await this.vault.adapter.readBinary(_.normalizePath(c)),d=this.parseJsonFromArrayBuffer(u),h=this.parseJsonFromArrayBuffer(l.get("manifest.json"));if(!d.version||!h.version||this.compareVersions(h.version,d.version)>0)for(const[m,b]of l.entries())r.set(`.obsidian/themes/${o}/${m}`,{type:"update",path:`.obsidian/themes/${o}/${m}`,content:b})}else for(const[u,d]of l.entries())r.set(`.obsidian/themes/${o}/${u}`,{type:"add",path:`.obsidian/themes/${o}/${u}`,content:d})}return r}parseJsonFromArrayBuffer(a){try{const i=new TextDecoder().decode(a);return JSON.parse(i)}catch(r){return console.warn("Failed to parse JSON from buffer",r),{}}}compareVersions(a,r){const i=a.split(".").map(l=>parseInt(l.replace(/[^0-9]/g,""),10)),o=r.split(".").map(l=>parseInt(l.replace(/[^0-9]/g,""),10));for(;i.lengthu)return 1}return 0}getCurrentPluginName(){try{const a=this.app;if(a.plugins?.manifests){for(const r in a.plugins.manifests)if(r.toLowerCase().includes("paperbell"))return r}if(a.plugins?.plugins?.paperbell?.manifest?.id)return a.plugins.plugins.paperbell.manifest.id}catch(a){console.warn("Could not determine current plugin name",a)}return"paperbell-pro"}areBuffersEqual(a,r){if(a.byteLength!==r.byteLength)return!1;const i=new Uint8Array(a),o=new Uint8Array(r);for(let l=0;lthis.getConflictHandlingForPath(h.path)!=="no_merge"),this.setPendingOperations(a);const i=await this.createBackupWithHash(a.map(h=>h.path),r),o=await this.detectConflicts(a,i),l=[],c=[],u=[];for(const h of a){const m=o.find(v=>v.path===h.path),b=await this.vault.adapter.exists(_.normalizePath(h.path)),k=m?{...m,category:m.currentHash===m.incomingHash?"unchanged":"update"}:{path:h.path,current:b?await this.vault.adapter.readBinary(_.normalizePath(h.path)):new ArrayBuffer(0),incoming:h.content||new ArrayBuffer(0),currentHash:b?this.hashContent(await this.vault.adapter.readBinary(_.normalizePath(h.path))):"",incomingHash:h.content?this.hashContent(h.content):"",category:!b||h.type==="add"?"new":"unchanged"};h.type==="add"||!b?(k.category="new",l.push(k)):m&&m.currentHash!==m.incomingHash?(k.category="update",c.push(k)):(k.category="unchanged",u.push(k))}const d=[...l,...c,...u];return await this.showConflictView(d),[]}catch(i){throw await this.restoreBackup(r),i}}async createBackupWithHash(a,r){const i=new Map;r({phase:"backup",progress:0,total:a.length});for(let o=0;o{if(l)try{const u=new RegExp(l,"g");i=i.replace(u,c)}catch(u){console.warn(`Invalid replacement pattern: ${l}`,u)}}),new TextEncoder().encode(i).buffer}async detectConflicts(a,r){const i=[];for(const o of a){if(o.type==="delete")continue;const l=await this.vault.adapter.exists(_.normalizePath(o.path)),c=this.getConflictHandlingForPath(o.path);if(c==="ignore"||c==="no_merge")continue;if(!l){i.push({path:o.path,current:new ArrayBuffer(0),incoming:o.content,currentHash:"",incomingHash:this.hashContent(o.content)});continue}const u=await this.vault.adapter.readBinary(_.normalizePath(o.path)),d=this.applyCustomReplacements(u),h=o.content?this.applyCustomReplacements(o.content):new ArrayBuffer(0),m=this.hashContent(d),b=this.hashContent(h);if(m!==b){if(c==="skip")continue;i.push({path:o.path,current:u,incoming:o.content,currentHash:m,incomingHash:b})}}return i}getConflictHandlingForPath(a){const r="prompt";if(!a)return r;if(a=_.normalizePath(a),a.startsWith(".obsidian/")){if(a.match(/^\.obsidian\/[^\/]+\.json$/))return this.obsidianConflictHandling.settings||r;if(a.startsWith(".obsidian/themes/"))return this.obsidianConflictHandling.themes||r;if(a.startsWith(".obsidian/snippets/"))return this.obsidianConflictHandling.snippets||r;if(a.startsWith(".obsidian/plugins/"))return this.obsidianConflictHandling.plugins||r}return r}showConflictView(a){const r=this.app.workspace.getLeaf();let i=this.app.workspace.getLeavesOfType(yi)[0];if(i){this.app.workspace.revealLeaf(i);return}const o=a.map(c=>({path:c.path,current:c.current,incoming:c.incoming,currentHash:c.currentHash,incomingHash:c.incomingHash})),l=this.getPendingOperations();r.setViewState({type:yi,state:{conflicts:o,operations:l}}),this.app.workspace.revealLeaf(r)}getPendingOperations(){return this.pendingOperations}setPendingOperations(a){this.pendingOperations=a}async createBackup(a,r){r({phase:"backup",progress:0,total:a.length});for(let i=0;ir!=="").some(r=>{if(r.includes("**")){const i=r.replace(/\*\*/g,"___GLOBSTAR___").replace(/\./g,"\\.").replace(/\//g,"\\/").replace(/\*/g,"[^/]*").replace(/___GLOBSTAR___/g,".*");return new RegExp(`^${i}$`).test(a)}else{const i=r.split("/"),o=a.split("/");if(i.length>o.length)return!1;for(let l=0;l{this.resolvePromise=a,this.rejectPromise=r,this.open()})}onOpen(){const{contentEl:a}=this;a.createEl("h2",{text:"Enter Update Version"}),a.createEl("p",{text:"Please enter the version number for the update package. This is required when a manifest.json file is not provided."}),new _.Setting(a).setName("Version").setDesc("Example: 1.0.0").addText(l=>l.setValue(this.version).onChange(c=>{this.version=c}));const r=a.createDiv();r.addClass("modal-button-container"),r.createEl("button",{text:"Cancel"}).addEventListener("click",()=>{this.close(),this.resolvePromise(null)}),r.createEl("button",{text:"Confirm",cls:"mod-cta"}).addEventListener("click",()=>{if(!this.version||!this.isValidVersion(this.version)){new _.Notice("Please enter a valid version number (e.g., 1.0.0)",3e3);return}this.close(),this.resolvePromise(this.version)})}isValidVersion(a){return/^\d+\.\d+\.\d+(?:-[a-zA-Z0-9.]+)?(?:\+[a-zA-Z0-9.]+)?$/.test(a)}onClose(){const{contentEl:a}=this;a.empty(),this.resolvePromise&&this.version===""&&this.resolvePromise(null)}}class ay extends _.Component{constructor(a,r){super(),this.lastUpdateInfo=null,this.app=a.app,this.plugin=a,this.vault=a.app.vault,this.configManager=new ty(a.settings.updater),this.currentVersion=r,this.versionChecker=new mu(this.configManager.getRepository(),this.configManager.getMinAppVersion())}isValidVersion(a){return/^\d+\.\d+\.\d+(?:-[a-zA-Z0-9.]+)?(?:\+[a-zA-Z0-9.]+)?$/.test(a)}parseSha256FromText(a){const r=a.match(/[a-fA-F0-9]{64}/);return r?r[0].toLowerCase():null}async calculateSHA256Hex(a){const r=await crypto.subtle.digest("SHA-256",a);return Array.from(new Uint8Array(r)).map(o=>o.toString(16).padStart(2,"0")).join("")}setProxyService(a){this.proxyService=a,this.versionChecker=new mu(this.configManager.getRepository(),this.configManager.getMinAppVersion(),this.proxyService)}onload(){this.stautsBar=this.plugin.addStatusBarItem(),this.stautsBar.setText("PaperBell 更新管理器"),this.registerEvent(this.app.workspace.on("ppb:update-complete",a=>{a?.success&&typeof a.version=="string"&&a.version.trim()&&(this.currentVersion=a.version.trim())})),this.plugin.addCommand({id:"check-updates-from-local",name:"从本地文件检查更新",callback:()=>this.checkForUpdatesFromLocal()}),this.stautsBar.onclick=()=>{const a=this.app.workspace.getLeavesOfType(yi)[0];if(a){this.app.workspace.revealLeaf(a);return}this.triggerUpdate()},this.stautsBar.oncontextmenu=a=>{a.preventDefault(),a.stopPropagation();const r=new _.Menu;r.addItem(i=>{i.setTitle("从本地文件检查更新"),i.onClick(async()=>{try{await this.checkForUpdatesFromLocal()}catch(o){new _.Notice(`更新时出错: ${o.message}`,5e3),console.error(`更新时出错: ${o.message}`)}})}),r.showAtPosition({x:a.clientX,y:a.clientY})},setTimeout(()=>{this.checkForUpdates().then(a=>{a.hasUpdate&&this.configManager.isAutoUpdateEnabled()&&a.compatibilityIssues?.length===0&&this.triggerUpdate(!0)})},2e3),this.plugin.addCommand({id:"remove-update-backups",name:"删除更新备份",callback:()=>this.removeBackups()}),this.app.workspace.onLayoutReady(()=>{this.checkForUpdates()})}onunload(){}async checkForUpdatesFromLocal(){if(!await this.plugin.verificationWorker.verify()){new _.Notice("请先验证您的账户。");return}const a=i=>{const o=i.total>0?Math.floor(i.progress/i.total*100):0;this.stautsBar.setText(`正在更新 (${i.phase} ${o}%)...`)},r=document.createElement("input");r.type="file",r.multiple=!0,r.accept=".zip,.json,.sha256,.txt",r.onchange=async i=>{const o=r.files;if(!o||o.length===0)return;let l=null,c=null,u=null,d=null,h=null,m=null;for(let b=0;b0&&console.error(`Invalid configuration: ${r.join(", ")}`);const i=await this.versionChecker.checkForUpdates(this.currentVersion,a);return this.lastUpdateInfo=i,i.hasUpdate?this.stautsBar.setText(`有可用更新: ${i.latestVersion}`):this.stautsBar.setText("没有可用更新"),i}async triggerUpdate(a=!1,r){if(!await this.plugin.verificationWorker.verify())return new _.Notice("您需要验证账户才能更新 PaperBell 仓库",5e3),null;if((!this.lastUpdateInfo||a)&&(this.lastUpdateInfo=await this.checkForUpdates(a)),!this.lastUpdateInfo.hasUpdate)return null;this.stautsBar.setText(`Updating to ${this.lastUpdateInfo.latestVersion}...`);const i=".update_backup";try{await this.vault.adapter.exists(i)||await this.vault.adapter.mkdir(i)}catch(c){return new _.Notice(`Failed to create backup directory: ${c.message}`,5e3),console.error(`Failed to create backup directory: ${c.message}`),this.stautsBar.setText("Update failed"),{success:!1,version:this.currentVersion,updatedFiles:[],errors:[`Failed to create backup directory: ${c.message}`],rollbackNeeded:!1}}const o=r||(c=>{this.stautsBar.setText(`Updating (${c.phase} ${Math.floor(c.progress/c.total*100)}%)...`)}),l=await this.update(this.lastUpdateInfo,o);return l.success?this.currentVersion=l.version:(l.errors&&l.errors.length>0&&(new _.Notice(`Update failed: ${l.errors.join(", ")}`,5e3),console.error(`Update failed: ${l.errors.join(", ")}`)),this.stautsBar.setText("Update failed")),l}async update(a,r){try{if(!a.releaseInfo)throw new Error("没有可用的发布信息");const i=new cm(this,this.app,this.vault,".update_backup",this.configManager.getExcludePatterns(),this.configManager.getCustomReplacements(),this.configManager.getObsidianConflictHandling(),this.configManager.getUpdateScope());this.addChild(i),i.listenToEvents(this.stautsBar,this.configManager,this.plugin,r);let o=await i.loadDownloadedZip(),l;const c=new rm(a.releaseInfo.downloadUrl,a.releaseInfo.sha256,this.proxyService);if(o||(o=await c.download(r),await i.saveDownloadedZip(o)),!o)throw new Error("下载或加载更新包失败");l=await c.extract(o,r);const u=await i.parseReleaseContents(l),d=await i.prepareReleaseOperations(u),h=await i.applyUpdates(d,r);return{success:!0,version:a.latestVersion,updatedFiles:h}}catch(i){return new _.Notice(`Update failed: ${i.message}`,5e3),console.error(`Update failed: ${i.message}`),{success:!1,version:this.currentVersion,updatedFiles:[],errors:[i.message],rollbackNeeded:!0}}}getConfig(){return this.configManager.getConfig()}updateConfig(a){this.configManager.updateConfig(a),(a.repository||a.minAppVersion)&&(this.versionChecker=new mu(this.configManager.getRepository(),this.configManager.getMinAppVersion()))}async removeBackups(){const a=".paperbell-pro_backup";try{await this.vault.adapter.exists(a)?(await this.vault.adapter.rmdir(a,!0),new _.Notice("更新备份已成功删除")):new _.Notice("未找到更新备份")}catch(r){console.error("Failed to remove backups:",r),new _.Notice("删除备份失败: "+(r.message||r))}}}class oo{constructor(a){this.subscribers=new Set,this.app=a.app,this.config=a.config,this.cache=a.cache??!0,this.cacheTimeout=a.cacheTimeout??5e3}async getData(){if(this.cache&&this.lastResult&&this.lastFetchTime&&new Date().getTime()-this.lastFetchTime.getTime(){this.subscribers.delete(a)}}notifySubscribers(a){this.subscribers.forEach(r=>r(a))}clearCache(){this.lastResult=void 0,this.lastFetchTime=void 0}getConfig(){return this.config}updateConfig(a){this.config={...this.config,...a},this.clearCache()}destroy(){this.subscribers.clear(),this.clearCache()}}class ny{extractPaperData(a,r,i){const o=i?.identifyMode||"both",l=i?.frontmatterKey,c=i?.tagIdentifier;let u=!1;if(!l&&!c)if(_.getFrontMatterInfo(a).exists)u=!0;else return null;else{c&&(o==="tag"||o==="both")&&new RegExp(`#${c}\\b`,"i").test(a)&&(u=!0);const h=_.getFrontMatterInfo(a);if(!h.exists&&!u)return null;if(l&&(o==="frontmatter"||o==="both")){const m=h.exists?_.parseYaml(h.frontmatter):{};(m[l]||m.type?.includes(l))&&(u=!0)}if(!u)return null}const d=_.getFrontMatterInfo(a);try{const h=d.exists?_.parseYaml(d.frontmatter):{};return{id:this.generateId(r),title:h.title||this.extractTitleFromPath(r),status:this.normalizeStatus(h.status||"进行中"),progress:this.normalizeProgress(h.progress||0),deadline:h.deadline||h.due_date,filePath:r,authors:h.authors||(h.author?[h.author]:void 0),journal:h.journal||h.publication,tags:this.normalizeTags(h.tags)}}catch(h){return console.error("Error parsing frontmatter:",h),null}}hasPaperFrontmatter(a,r){const i=r?.identifyMode||"both",o=r?.frontmatterKey||"paper",l=r?.tagIdentifier||"paper";if((i==="tag"||i==="both")&&new RegExp(`#${l}\\b`,"i").test(a))return!0;if(i==="frontmatter"||i==="both"){const c=_.getFrontMatterInfo(a);if(!c.exists)return!1;try{const u=_.parseYaml(c.frontmatter);return!!(u[o]||u.type?.includes(o))}catch{return!1}}return!1}extractProjectData(a,r,i){const o=i?.identifyMode||"frontmatter",l=i?.frontmatterKey||"project",c=i?.tagIdentifier,u=i?.typeValues||["project"];let d=!1;c&&(o==="tag"||o==="both")&&new RegExp(`#${c}\\b`,"i").test(a)&&(d=!0),o==="folder"&&(d=!0);const h=_.getFrontMatterInfo(a);if(o==="frontmatter"||o==="both"){if(!h.exists&&!d)return null;if(h.exists)try{const k=_.parseYaml(h.frontmatter);if(k[l]&&(d=!0),k.type){const v=Array.isArray(k.type)?k.type:[k.type];u.some(y=>v.includes(y))&&(d=!0)}}catch(k){if(console.error("Error parsing frontmatter:",k),!d)return null}}if(!d)return null;let m={};if(h.exists)try{m=_.parseYaml(h.frontmatter)}catch(k){console.error("Error parsing project frontmatter:",k),m={}}return{id:this.generateId(r),title:m.title||this.extractTitleFromPath(r),description:m.description||m.summary,status:this.normalizeProjectStatus(m.status||"planning"),progress:this.normalizeProgress(m.progress||0),startDate:m.start_date||m.startDate,endDate:m.end_date||m.endDate||m.due_date,team:m.team||m.members||(m.author?[m.author]:void 0),tags:this.normalizeTags(m.tags),repository:m.repository||m.repo||m.github,stars:m.stars,forks:m.forks,filePath:r}}extractBookData(a,r){const i=_.getFrontMatterInfo(a);if(!i.exists)return null;try{const o=_.parseYaml(i.frontmatter);return!o.book&&!o.type?.includes("book")?null:{id:this.generateId(r),title:o.title||this.extractTitleFromPath(r),author:o.author||o.authors?.join(", ")||"",publisher:o.publisher,year:o.year||o.published,cover:o.cover||o.image,rating:o.rating||o.score,status:this.normalizeBookStatus(o.status||"wishlist"),progress:this.normalizeProgress(o.progress||0),notes:o.notes,bookmarks:o.bookmarks,duration:o.duration||o.reading_time,difficulty:this.normalizeDifficulty(o.difficulty||"medium"),importance:this.normalizeImportance(o.importance||"medium"),tags:this.normalizeTags(o.tags),insights:o.insights||o.key_points,lastRead:o.last_read||o.lastRead,filePath:r}}catch(o){return console.error("Error parsing book frontmatter:",o),null}}normalizeProjectStatus(a){return{planning:"planning",plan:"planning",planned:"planning",active:"active",ongoing:"active",in_progress:"active",paused:"paused",on_hold:"paused",hold:"paused",completed:"completed",done:"completed",finished:"completed",cancelled:"cancelled",canceled:"cancelled",abandoned:"cancelled"}[a.toLowerCase()]||"planning"}normalizeBookStatus(a){return{reading:"reading",current:"reading",in_progress:"reading",completed:"completed",done:"completed",finished:"completed",paused:"paused",on_hold:"paused",wishlist:"wishlist",want_to_read:"wishlist",to_read:"wishlist"}[a.toLowerCase()]||"wishlist"}normalizeDifficulty(a){return{easy:"easy",beginner:"easy",simple:"easy",medium:"medium",intermediate:"medium",hard:"hard",advanced:"hard",difficult:"hard"}[a.toLowerCase()]||"medium"}normalizeImportance(a){return{low:"low",medium:"medium",high:"high",critical:"high",important:"high"}[a.toLowerCase()]||"medium"}generateId(a){return`paper_${a.replace(/[^a-zA-Z0-9]/g,"_")}_${Date.now()}`}extractTitleFromPath(a){return(a.split("/").pop()||"").replace(/\.md$/,"")}normalizeStatus(a){return{in_progress:"进行中","in-progress":"进行中",ongoing:"进行中",active:"进行中",review:"待审核",pending:"待审核",under_review:"待审核",completed:"已完成",done:"已完成",finished:"已完成",paused:"暂停",on_hold:"暂停",cancelled:"已取消",canceled:"已取消"}[a.toLowerCase()]||"进行中"}normalizeProgress(a){if(typeof a=="number")return Math.max(0,Math.min(100,a));if(typeof a=="string"){const r=parseInt(a.replace("%",""),10);return isNaN(r)?0:Math.max(0,Math.min(100,r))}return 0}normalizeTags(a){return Array.isArray(a)?a.filter(r=>typeof r=="string"&&r.trim()):typeof a=="string"?a.includes(",")?a.split(",").map(r=>r.trim()).filter(Boolean):[a.trim()].filter(Boolean):[]}}class iy{extractTasks(a){const r=a.split(` -`),i=[];let o=!1;for(let l=0;lthis.isTasksIdentifier(i))}isTasksIdentifier(a){const r=a.trim().toLowerCase();return r.includes("tasks")||r.includes("待办")||r.includes("todo")||r.includes("任务")}isNewSection(a){return a.trim().startsWith("#")&&!this.isTaskLine(a)}isTaskLine(a){return!!a.trim().match(/^[-*+]\s*\[[ xX]\]/)}parseTaskLine(a,r){const i=a.match(/^(\s*)[-*+]\s*\[([xX ])\]\s*(.+)$/);if(!i)return null;const[,,o,l]=i,c=o.toLowerCase()==="x",u=this.extractPriority(l),d=this.extractDueDate(l),h=this.extractTags(l),m=this.cleanContent(l);return{id:`task_${r}_${Date.now()}`,content:m,completed:c,priority:u,dueDate:d,tags:h,lineNumber:r}}extractPriority(a){if(a.includes("🔴")||a.includes("high")||a.includes("高"))return"high";if(a.includes("🟡")||a.includes("medium")||a.includes("中"))return"medium";if(a.includes("🟢")||a.includes("low")||a.includes("低"))return"low"}extractDueDate(a){const r=a.match(/\b(\d{4}-\d{2}-\d{2})\b/);return r?r[1]:void 0}extractTags(a){const r=a.match(/#[\w\u4e00-\u9fff]+/g);return r?r.map(i=>i.slice(1)):[]}cleanContent(a){return a.replace(/[🔴🟡🟢]/g,"").replace(/#[\w\u4e00-\u9fff]+/g,"").replace(/\b\d{4}-\d{2}-\d{2}\b/g,"").replace(/\b(high|medium|low)\b/gi,"").replace(/\s+/g," ").trim()}}class sy{extractIdeas(a){const r=a.split(` -`),i=[];for(let o=0;o=0&&o<24&&l>=0&&l<60?i[1]:null}isListItem(a){const r=a.trim();return r.startsWith("-")||r.startsWith("*")||r.startsWith("+")}parseCaptureLine(a,r,i){const o=/^[\s\-*+]+\s*\[[ xX]\]/.test(a);let l=a.replace(/^[\s\-*+]+/,"").trim();if(l=l.replace(/^\[[ xX]\]\s*/,"").trim(),!l)return null;const c=this.extractTags(l),u=this.cleanContent(l);let d="idea";return(c.includes("quick-capture")||c.includes("quick"))&&(d="quick"),{id:`capture_${r}_${Date.now()}`,content:u,timestamp:new Date().toISOString(),time:i,tags:c,lineNumber:r,captureType:d,isTask:o}}extractTags(a){const r=a.match(/#[\w\u4e00-\u9fff\-]+/g);return r?r.map(i=>i.slice(1)):[]}cleanContent(a){let r=a.replace(/^\s*\[[ xX]\]\s*/,"");return r=r.replace(/^\d{1,2}:\d{2}\s*/,""),r=r.replace(/#[\w\u4e00-\u9fff\-]+/g,""),r=r.replace(/\s+/g," "),r.trim()}}const bn=new ny,Xu=new iy,Ju=new sy;class oy extends oo{constructor(a){super(a),this.setupFileWatcher()}async fetchData(){const a=this.config,r=this.app.vault.getAbstractFileByPath(a.filePath);if(!r||!(r instanceof _.TFile))return{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`File not found: ${a.filePath}`]}};try{const i=await this.app.vault.read(r),o=await this.parseContent(i,r),l={data:o,metadata:{lastUpdated:new Date,sourceCount:o.length}};return this.notifySubscribers(l),l}catch(i){return console.error(`Error reading file ${a.filePath}:`,i),{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`Error reading file: ${i.message}`]}}}}async validate(){const a=this.config;return a.filePath?this.app.vault.getFileByPath(a.filePath)?!0:(new _.Notice(`File not found: ${a.filePath}`),!1):(new _.Notice("File path is required"),!1)}async parseContent(a,r){switch(this.config.parseMode||"raw"){case"frontmatter":{const l=bn.extractPaperData(a,r.path);return l?[l]:[]}case"tasks":return Xu.extractTasks(a);case"ideas":return Ju.extractIdeas(a);default:return[{content:a,filePath:r.path,fileName:r.basename}]}}setupFileWatcher(){const a=this.config;this.fileChangeHandler=this.app.vault.on("modify",r=>{r instanceof _.TFile&&r.path===a.filePath&&(this.clearCache(),this.fetchData())}),this.app.vault.on("delete",r=>{r instanceof _.TFile&&r.path===a.filePath&&this.notifySubscribers({data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`File deleted: ${a.filePath}`]}})}),this.app.vault.on("rename",(r,i)=>{r instanceof _.TFile&&i===a.filePath&&(this.config.filePath=r.path,this.clearCache(),this.fetchData())})}destroy(){this.fileChangeHandler&&this.app.vault.offref(this.fileChangeHandler),super.destroy()}}class ly extends oo{constructor(a){super(a),this.setupFolderWatcher()}async fetchData(){const a=this.config,r=this.app.vault.getAbstractFileByPath(a.folderPath);if(!r||!(r instanceof _.TFolder))return{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`Folder not found: ${a.folderPath}`]}};try{const i=await this.getFilesInFolder(r,a.recursive??!0),o=this.filterFiles(i,a.fileFilter),l=[],c=[];for(const d of o)try{const h=await this.app.vault.read(d),m=await this.parseContent(h,d,a.parseMode||"raw");m.length>0,l.push(...m)}catch(h){c.push(`Error reading ${d.path}: ${h.message}`)}const u={data:l,metadata:{lastUpdated:new Date,sourceCount:l.length,errors:c.length>0?c:void 0}};return this.notifySubscribers(u),u}catch(i){return console.error(`Error reading folder ${a.folderPath}:`,i),{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`Error reading folder: ${i.message}`]}}}}async validate(){const a=this.config;if(!a.folderPath)return new _.Notice("Folder path is required"),!1;const r=this.app.vault.getAbstractFileByPath(a.folderPath);return!r||!(r instanceof _.TFolder)?(new _.Notice(`Folder not found: ${a.folderPath}`),!1):!0}async getFilesInFolder(a,r){const i=[];return r?this.app.vault.getMarkdownFiles().forEach(o=>{o.path.startsWith(a.path+"/")&&i.push(o)}):a.children.forEach(o=>{o instanceof _.TFile&&o.extension==="md"&&i.push(o)}),i}filterFiles(a,r){return r?a.filter(i=>{if(r.extensions&&!r.extensions.includes(i.extension)||r.namePattern&&!new RegExp(r.namePattern).test(i.basename))return!1;if(r.excludePatterns){for(const o of r.excludePatterns)if(new RegExp(o).test(i.path))return!1}return!0}):a}async parseContent(a,r,i){const o=this.config,l=c=>{const u={id:`uncategorized-${r.path}`,title:r.basename,filePath:r.path,status:"未分类",tags:["未分类"],_isUncategorized:!0};switch(c){case"projects":return{...u,description:"未配置项目元数据的文件",progress:0};case"books":return{...u,author:"未知作者",status:"未分类"};case"papers":return{...u,authors:[],journal:"未知",progress:0};default:return u}};switch(i){case"frontmatter":{if(o.sectionConfig?.type==="projects"||o.folderPath?.includes("Projects")){const u=bn.extractProjectData(a,r.path,o.sectionConfig);return u?[u]:[l("projects")]}if(o.sectionConfig?.type==="books"||o.folderPath?.includes("Books")){const u=bn.extractBookData(a,r.path);return u?[u]:[l("books")]}if(o.sectionConfig?.type==="papers"){const u=bn.extractProjectData(a,r.path,o.sectionConfig);return u?[u]:[l("papers")]}const c=bn.extractPaperData(a,r.path,o.sectionConfig);return c?[c]:[l("papers")]}case"tasks":{const c=Xu.extractTasks(a);return c.length>0?c.map(u=>({...u,filePath:r.path})):[l("tasks")]}case"ideas":{const c=Ju.extractIdeas(a);return c.length>0?c.map(u=>({...u,filePath:r.path})):[l("ideas")]}default:return[{content:a,filePath:r.path,fileName:r.basename,title:r.basename}]}}setupFolderWatcher(){const a=this.config;this.folderChangeHandler=this.app.vault.on("modify",r=>{r instanceof _.TFile&&r.path.startsWith(a.folderPath+"/")&&(this.clearCache(),this.fetchData())}),this.app.vault.on("create",r=>{r instanceof _.TFile&&r.path.startsWith(a.folderPath+"/")&&(this.clearCache(),this.fetchData())}),this.app.vault.on("delete",r=>{r instanceof _.TFile&&r.path.startsWith(a.folderPath+"/")&&(this.clearCache(),this.fetchData())}),this.app.vault.on("rename",(r,i)=>{r instanceof _.TFile&&(r.path.startsWith(a.folderPath+"/")||i.startsWith(a.folderPath+"/"))&&(this.clearCache(),this.fetchData())})}destroy(){this.folderChangeHandler&&this.app.vault.offref(this.folderChangeHandler),super.destroy()}}class cy extends oo{constructor(a){super(a),this.fileChangeHandlers=new Map,this.setupFileWatchers()}async fetchData(){const a=this.config,r=[],i=[];let o=0;for(const u of a.filePaths){const d=this.app.vault.getAbstractFileByPath(u);if(!d||!(d instanceof _.TFile)){i.push(`File not found: ${u}`);continue}try{const h=await this.app.vault.read(d),m=await this.parseContent(h,d);r.push(...m),o++}catch(h){i.push(`Error reading ${u}: ${h.message}`)}}const c={data:this.applyMergeStrategy(r,a.mergeStrategy||"concat"),metadata:{lastUpdated:new Date,sourceCount:o,errors:i.length>0?i:void 0}};return this.notifySubscribers(c),c}async validate(){const a=this.config;if(!a.filePaths||a.filePaths.length===0)return new _.Notice("At least one file path is required"),!1;let r=!1;for(const i of a.filePaths){const o=this.app.vault.getAbstractFileByPath(i);if(o&&o instanceof _.TFile){r=!0;break}}return r?!0:(new _.Notice("No valid files found in the specified paths"),!1)}async parseContent(a,r){switch(this.config.parseMode||"raw"){case"frontmatter":const l=bn.extractPaperData(a,r.path);return l?[l]:[];case"tasks":return Xu.extractTasks(a).map(d=>({...d,filePath:r.path}));case"ideas":return Ju.extractIdeas(a).map(d=>({...d,filePath:r.path}));default:return[{content:a,filePath:r.path,fileName:r.basename}]}}applyMergeStrategy(a,r){if(r==="concat")return a;const i=new Set;return a.filter(o=>{const l=this.getItemKey(o);return i.has(l)?!1:(i.add(l),!0)})}getItemKey(a){return a.id?a.id:a.content?a.content:a.title?a.title:JSON.stringify(a)}setupFileWatchers(){const a=this.config;a.filePaths.forEach(r=>{const i=this.app.vault.on("modify",o=>{o instanceof _.TFile&&o.path===r&&(this.clearCache(),this.fetchData())});this.fileChangeHandlers.set(r,i)}),this.app.vault.on("delete",r=>{r instanceof _.TFile&&a.filePaths.includes(r.path)&&(a.filePaths=a.filePaths.filter(i=>i!==r.path),this.clearCache(),this.fetchData())}),this.app.vault.on("rename",(r,i)=>{if(r instanceof _.TFile&&a.filePaths.includes(i)){const o=a.filePaths.indexOf(i);o!==-1&&(a.filePaths[o]=r.path),this.clearCache(),this.fetchData()}})}updateConfig(a){a.filePaths&&a.filePaths!==this.config.filePaths&&(this.fileChangeHandlers.forEach(r=>{this.app.vault.offref(r)}),this.fileChangeHandlers.clear()),super.updateConfig(a),a.filePaths&&this.setupFileWatchers()}destroy(){this.fileChangeHandlers.forEach(a=>{this.app.vault.offref(a)}),this.fileChangeHandlers.clear(),super.destroy()}}class uy extends oo{constructor(a){super(a),this.component=new _.Component,this.component.load()}async fetchData(){const a=this.config;if(!a.query||a.query.trim()==="")return{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:["No query provided"]}};try{if(!this.app.plugins.plugins.dataview)return{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:["Dataview plugin is not installed or enabled"]}};if((a.renderMode||"markdown")==="markdown"){const l={data:[{type:"dataview-rendered",content:await this.renderDataviewBlock(a.query),query:a.query}],metadata:{lastUpdated:new Date,sourceCount:1}};return this.notifySubscribers(l),l}else{const o=await this.extractDataviewData(a.query),l={data:o,metadata:{lastUpdated:new Date,sourceCount:o.length}};return this.notifySubscribers(l),l}}catch(r){return console.error("Error executing dataview query:",r),{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`Error executing query: ${r.message}`]}}}}async validate(){const a=this.config;return!a.query||a.query.trim()===""?(new _.Notice("Dataview query is required"),!1):this.app.plugins.plugins.dataview?!0:(new _.Notice("Dataview plugin is not installed or enabled"),!1)}async renderDataviewBlock(a){this.renderContainer||(this.renderContainer=createDiv(),this.renderContainer.style.display="none",document.body.appendChild(this.renderContainer)),this.renderContainer.empty();const r="```dataview\n"+a+"\n```";return await _.MarkdownRenderer.renderMarkdown(r,this.renderContainer,"",this.component),await new Promise(o=>setTimeout(o,100)),this.renderContainer.innerHTML}async extractDataviewData(a){const r=this.app.plugins.plugins.dataview;if(!r||!r.api)return[];try{const i=a.trim().toLowerCase();return i.startsWith("table")?await this.extractTableData(a,r.api):i.startsWith("list")?await this.extractListData(a,r.api):i.startsWith("task")?await this.extractTaskData(a,r.api):await this.executeDQL(a,r.api)}catch(i){return console.error("Error extracting dataview data:",i),[]}}async extractTableData(a,r){try{const i=await r.query(a);if(i.successful&&i.value.type==="table")return i.value.values.map(o=>({type:"table-row",data:o.values,file:o.key?.path}))}catch(i){console.error("Error in table query:",i)}return[]}async extractListData(a,r){try{const i=await r.query(a);if(i.successful&&i.value.type==="list")return i.value.values.map(o=>({type:"list-item",content:o.value,file:o.key?.path}))}catch(i){console.error("Error in list query:",i)}return[]}async extractTaskData(a,r){try{const i=await r.query(a);if(i.successful&&i.value.type==="task")return i.value.values.map(o=>({type:"task-item",text:o.text,completed:o.completed,file:o.path}))}catch(i){console.error("Error in task query:",i)}return[]}async executeDQL(a,r){try{const i=await r.query(a);if(i.successful)return[{type:"dql-result",data:i.value}]}catch(i){console.error("Error in DQL query:",i)}return[]}destroy(){this.renderContainer&&(this.renderContainer.remove(),this.renderContainer=void 0),this.component.unload(),super.destroy()}}class Qm extends _.Component{constructor(a){super(),this.dataSources=new Map,this.app=a.app,this.autoRefresh=a.autoRefresh??!1,this.refreshInterval=a.refreshInterval??3e4}onload(){this.initialize()}initialize(){this.setupFileWatchers(),this.autoRefresh&&this.startAutoRefresh()}destroy(){this.dataSources.forEach(a=>{a.dataSource.destroy()}),this.dataSources.clear(),this.fileEventRef&&this.app.vault.offref(this.fileEventRef),this.stopAutoRefresh(),super.unload()}createDataSource(a,r){const i=this.instantiateDataSource(a);if(!i)return null;const o=this.generateDataSourceId(),l={id:o,dataSource:i,sectionId:r};return this.dataSources.set(o,l),o}instantiateDataSource(a){const r={app:this.app,config:a};switch(a.type){case"file":return new oy(r);case"folder":return new ly(r);case"files":return new cy(r);case"dataview":return new uy(r);default:return console.error(`Unknown data source type: ${a.type}`),null}}removeDataSource(a){const r=this.dataSources.get(a);return r?(r.dataSource.destroy(),this.dataSources.delete(a),!0):!1}async getDataSourceData(a){const r=this.dataSources.get(a);if(!r)return null;try{const i=await r.dataSource.getData();return r.lastUpdate=new Date,r.lastResult=i,i}catch(i){return console.error(`Error fetching data from source ${a}:`,i),{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`Error: ${i.message}`]}}}}async getSectionData(a){const r=Array.from(this.dataSources.values()).filter(l=>l.sectionId===a);if(r.length===0)return[];const i=await Promise.all(r.map(l=>this.getDataSourceData(l.id))),o=[];return i.forEach(l=>{l&&o.push(...l.data)}),o}updateDataSourceConfig(a,r){const i=this.dataSources.get(a);return i?(i.dataSource.updateConfig(r),!0):!1}subscribeToDataSource(a,r){const i=this.dataSources.get(a);return i?i.dataSource.subscribe(r):null}getDataSourcesBySectionId(a){return Array.from(this.dataSources.values()).filter(r=>r.sectionId===a)}getAllDataSources(){return Array.from(this.dataSources.values())}clearSectionDataSources(a){this.getDataSourcesBySectionId(a).forEach(i=>{this.removeDataSource(i.id)})}async refreshAllDataSources(){const a=Array.from(this.dataSources.keys()).map(r=>this.getDataSourceData(r));await Promise.all(a)}async refreshSectionDataSources(a){const i=this.getDataSourcesBySectionId(a).map(o=>this.getDataSourceData(o.id));await Promise.all(i)}setupFileWatchers(){this.registerEvent(this.app.vault.on("modify",a=>{a instanceof _.TFile&&this.handleFileChange(a)})),this.registerEvent(this.app.vault.on("delete",a=>{a instanceof _.TFile&&this.handleFileDelete(a)})),this.registerEvent(this.app.vault.on("rename",(a,r)=>{a instanceof _.TFile&&this.handleFileRename(a,r)}))}handleFileChange(a){this.dataSources.forEach(r=>{const i=r.dataSource.getConfig();if(i.type==="file"){const o=i.filePath||i.config?.filePath;o&&o===a.path&&(r.dataSource.clearCache(),this.refreshDataSource(r.id))}else if(i.type==="folder"){const o=i.folderPath||i.config?.folderPath;o&&a.path.startsWith(o)&&(r.dataSource.clearCache(),this.refreshDataSource(r.id))}else if(i.type==="files"){const o=i.filePaths||i.config?.filePaths;o&&o.includes(a.path)&&(r.dataSource.clearCache(),this.refreshDataSource(r.id))}})}async refreshDataSource(a){const r=this.dataSources.get(a);if(r)try{const i=await r.dataSource.getData();r.lastUpdate=new Date,r.lastResult=i}catch(i){console.error(`[DataManager] Error refreshing data source ${a}:`,i)}}handleFileDelete(a){this.dataSources.forEach(r=>{const i=r.dataSource.getConfig();if(i.type==="file"){const o=i.filePath||i.config?.filePath;o&&o===a.path&&r.dataSource.notifySubscribers({data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`File deleted: ${a.path}`]}})}else if(i.type==="folder"){const o=i.folderPath||i.config?.folderPath;o&&a.path.startsWith(o)&&this.refreshDataSource(r.id)}else if(i.type==="files"){const o=i.filePaths||i.config?.filePaths;o&&o.includes(a.path)&&this.refreshDataSource(r.id)}})}handleFileRename(a,r){this.dataSources.forEach(i=>{const o=i.dataSource.getConfig();if(o.type==="file"){const l=o.filePath||o.config?.filePath;if(l&&l===r){const c=o.filePath!==void 0?{filePath:a.path}:{config:{filePath:a.path}};i.dataSource.updateConfig(c),this.refreshDataSource(i.id)}}else if(o.type==="files"){const l=o.filePaths||o.config?.filePaths;if(l&&l.includes(r)){const c=l.map(d=>d===r?a.path:d),u=o.filePaths!==void 0?{filePaths:c}:{config:{filePaths:c}};i.dataSource.updateConfig(u),this.refreshDataSource(i.id)}}})}startAutoRefresh(){this.refreshTimer&&this.stopAutoRefresh(),this.refreshTimer=window.setInterval(()=>{this.refreshAllDataSources()},this.refreshInterval),this.registerInterval(this.refreshTimer)}stopAutoRefresh(){this.refreshTimer&&(clearInterval(this.refreshTimer),this.refreshTimer=void 0)}setAutoRefresh(a,r){this.autoRefresh=a,r&&(this.refreshInterval=r),a?this.startAutoRefresh():this.stopAutoRefresh()}generateDataSourceId(){return`ds_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}exportConfiguration(){const a={dataSources:[]};return this.dataSources.forEach(r=>{a.dataSources.push({id:r.id,sectionId:r.sectionId,config:r.dataSource.getConfig()})}),a}importConfiguration(a){!a.dataSources||!Array.isArray(a.dataSources)||(this.destroy(),this.dataSources.clear(),a.dataSources.forEach(r=>{const i=this.instantiateDataSource(r.config);if(i){const o={id:r.id,dataSource:i,sectionId:r.sectionId};this.dataSources.set(r.id,o)}}),this.initialize())}}const py={academicOverview:"学术概览",todayFocus:"今日聚焦",recentLiterature:"最近文献",researchFocusMap:"研究焦点地图",projectBaseManager:"项目管理(默认配置)",papersManager:"研究论文",experimentsManager:"实验数据",tasksManager:"科研课题",resourcesManager:"学术资源",bookShelf:"书架",todoManager:"待办管理",recentBooks:"最近阅读",readingAnalytics:"阅读分析"};function dy(f,a){return a?.[f]?.displayName?a[f].displayName:py[f]||f}function fy(f,a){return a?.[f]?.description}function Xm(f){return f?.settings?.componentDataSources?f.settings.componentDataSources:null}function ep(f,a){const r=Xm(a);return dy(f,r??void 0)}function Jm(f,a){const r=Xm(a);return fy(f,r??void 0)}const hy={papers:{componentKey:"papersManager",icon:"file-text"},experiments:{componentKey:"experimentsManager",icon:"flask-conical"},tasks:{componentKey:"tasksManager",icon:"target"},resources:{componentKey:"resourcesManager",icon:"bookmark"},literature:{componentKey:"recentLiterature",icon:"book-open"}};class gy extends _.Component{constructor(a,r,i,o){super(),this.app=r,this.plugin=i,this.type=o,this.renderComponent=new _.Component,this.renderComponent.load(),this.containerEl=a.createDiv({cls:"ppb-base-container"}),this.buildUI()}buildUI(){const a=hy[this.type],r=ep(a.componentKey,this.plugin),i=Jm(a.componentKey,this.plugin);this.headerEl=this.containerEl.createDiv({cls:"ppb-base-header"});const o=this.headerEl.createDiv({cls:"ppb-base-header-left"}),l=o.createSpan({cls:"ppb-base-header-icon"});_.setIcon(l,a.icon);const c=o.createDiv({cls:"ppb-base-header-titles"});c.createEl("h3",{text:r,cls:"ppb-base-title"}),i&&c.createEl("p",{text:i,cls:"ppb-base-description"});const u=this.headerEl.createDiv({cls:"ppb-base-header-right"}),d=this.plugin.settings.baseContainerPaths?.[this.type];if(d){const m=u.createSpan({cls:"ppb-base-path-badge"});m.setText(d.replace(/^ppb\//,"").replace(/\.base$/,"")),m.title=d}const h=u.createEl("button",{cls:"ppb-base-config-btn clickable-icon"});if(_.setIcon(h,"settings"),h.title="Configure base",h.addEventListener("click",m=>{m.stopPropagation(),this.openConfigModal()}),d){const m=u.createEl("button",{cls:"ppb-base-clear-btn clickable-icon"});_.setIcon(m,"x"),m.title="Remove base",m.addEventListener("click",async b=>{b.stopPropagation(),await this.clearBase()})}this.contentEl=this.containerEl.createDiv({cls:"ppb-base-content"}),this.renderBase()}openConfigModal(){new Nu(this.app,this.plugin,this.type,async a=>{this.plugin.settings.baseContainerPaths||(this.plugin.settings.baseContainerPaths={projects:null,papers:null,experiments:null,tasks:null,resources:null,books:null,literature:null}),this.plugin.settings.baseContainerPaths[this.type]=a,await this.plugin.saveSettings(),this.rebuild()}).open()}async clearBase(){this.plugin.settings.baseContainerPaths&&(this.plugin.settings.baseContainerPaths[this.type]=null,await this.plugin.saveSettings(),this.rebuild())}rebuild(){this.containerEl.empty(),this.renderComponent.unload(),this.renderComponent=new _.Component,this.renderComponent.load(),this.buildUI()}async renderBase(){this.contentEl.empty();const a=this.plugin.settings.baseContainerPaths?.[this.type];if(!a){this.renderEmptyState();return}if(!this.app.vault.getFileByPath(a)){this.renderMissingState(a);return}const i=`![[${a}]]`;try{await _.MarkdownRenderer.render(this.app,i,this.contentEl,a,this.renderComponent)}catch(o){console.error(`[BaseContainer] Failed to render base embed for ${a}:`,o),this.contentEl.empty(),this.contentEl.createDiv({cls:"ppb-base-error"}).setText(`Failed to render base: ${o}`)}}renderEmptyState(){const a=this.contentEl.createDiv({cls:"ppb-base-empty-state"}),r=a.createDiv({cls:"ppb-base-empty-icon"});_.setIcon(r,"database"),a.createEl("p",{text:"No base configured",cls:"ppb-base-empty-title"}),a.createEl("p",{text:"Click the settings icon to select or create a base",cls:"ppb-base-empty-hint"}),a.createEl("button",{cls:"ppb-base-empty-btn mod-cta",text:"Configure Base"}).addEventListener("click",()=>this.openConfigModal())}renderMissingState(a){const r=this.contentEl.createDiv({cls:"ppb-base-missing-state"}),i=r.createDiv({cls:"ppb-base-missing-icon"});_.setIcon(i,"alert-triangle"),r.createEl("p",{text:"Base file not found",cls:"ppb-base-missing-title"}),r.createEl("p",{text:a,cls:"ppb-base-missing-path"}),r.createEl("button",{cls:"ppb-base-empty-btn",text:"Reconfigure"}).addEventListener("click",()=>this.openConfigModal())}onunload(){this.renderComponent.unload(),this.containerEl.remove()}}const my={books:{componentKey:"bookShelf",icon:"book-open"}};class by extends _.Component{constructor(a,r,i,o){super(),this.app=r,this.plugin=i,this.type=o,this.renderComponent=new _.Component,this.renderComponent.load(),this.containerEl=a.createDiv({cls:"ppb-base-container"}),this.buildUI()}buildUI(){const a=my[this.type],r=ep(a.componentKey,this.plugin),i=Jm(a.componentKey,this.plugin);this.headerEl=this.containerEl.createDiv({cls:"ppb-base-header"});const o=this.headerEl.createDiv({cls:"ppb-base-header-left"}),l=o.createSpan({cls:"ppb-base-header-icon"});_.setIcon(l,a.icon);const c=o.createDiv({cls:"ppb-base-header-titles"});c.createEl("h3",{text:r,cls:"ppb-base-title"}),i&&c.createEl("p",{text:i,cls:"ppb-base-description"});const u=this.headerEl.createDiv({cls:"ppb-base-header-right"}),d=this.getFolderPath();if(d){const m=u.createSpan({cls:"ppb-base-path-badge"});m.setText(d),m.title=d}const h=u.createEl("button",{cls:"ppb-base-config-btn clickable-icon"});if(_.setIcon(h,"folder-open"),h.title="Select folder",h.addEventListener("click",m=>{m.stopPropagation(),this.openFolderSelector()}),this.getBasePath()){const m=u.createEl("button",{cls:"ppb-base-clear-btn clickable-icon"});_.setIcon(m,"x"),m.title="Remove base",m.addEventListener("click",async b=>{b.stopPropagation(),await this.clearBase()})}this.contentEl=this.containerEl.createDiv({cls:"ppb-base-content"}),this.renderBase()}getFolderPath(){const a=this.getBasePath();if(!a)return null;const r=a.match(new RegExp(`ppb/${this.type}-(.+)\\.base$`));return r?r[1].replace(/-/g,"/"):a}getBasePath(){return this.plugin.settings.baseContainerPaths?.[this.type]||null}openFolderSelector(){new Uu(this.app,async a=>{try{const r=await this.createFolderBase(a.path);this.plugin.settings.baseContainerPaths||(this.plugin.settings.baseContainerPaths={projects:null,papers:null,experiments:null,tasks:null,resources:null,books:null,literature:null}),this.plugin.settings.baseContainerPaths[this.type]=r,await this.plugin.saveSettings(),this.rebuild()}catch(r){new _.Notice(`Failed to create base: ${r}`)}}).open()}async createFolderBase(a){this.app.vault.getFolderByPath("ppb")||await this.app.vault.createFolder("ppb");const i=this.buildGalleryYaml(a),o=a.replace(/[\\/:*?"<>|]/g,"-"),l=`ppb/${this.type}-${o}.base`,c=this.app.vault.getFileByPath(l);return c?await this.app.vault.modify(c,i):await this.app.vault.create(l,i),l}buildGalleryYaml(a){let r="";return r+=`filters: -`,r+=` and: -`,r+=` - file.inFolder("${a}") -`,r+=`views: -`,r+=` - type: cards -`,r+=` name: "Gallery" -`,r+=` order: -`,r+=` - file.name -`,r+=` - cover -`,r+=` - tags -`,r}async clearBase(){this.plugin.settings.baseContainerPaths&&(this.plugin.settings.baseContainerPaths[this.type]=null,await this.plugin.saveSettings(),this.rebuild())}rebuild(){this.containerEl.empty(),this.renderComponent.unload(),this.renderComponent=new _.Component,this.renderComponent.load(),this.buildUI()}async renderBase(){this.contentEl.empty();const a=this.getBasePath();if(!a){this.renderEmptyState();return}if(!this.app.vault.getFileByPath(a)){this.renderMissingState(a);return}const i=`![[${a}]]`;try{await _.MarkdownRenderer.render(this.app,i,this.contentEl,a,this.renderComponent)}catch(o){console.error(`[FolderBaseContainer] Failed to render base embed for ${a}:`,o),this.contentEl.empty(),this.contentEl.createDiv({cls:"ppb-base-error"}).setText(`Failed to render base: ${o}`)}}renderEmptyState(){const a=this.contentEl.createDiv({cls:"ppb-base-empty-state"}),r=a.createDiv({cls:"ppb-base-empty-icon"});_.setIcon(r,"book-open"),a.createEl("p",{text:"No folder selected",cls:"ppb-base-empty-title"}),a.createEl("p",{text:"Select a folder to display as a gallery",cls:"ppb-base-empty-hint"}),a.createEl("button",{cls:"ppb-base-empty-btn mod-cta",text:"Select Folder"}).addEventListener("click",()=>this.openFolderSelector())}renderMissingState(a){const r=this.contentEl.createDiv({cls:"ppb-base-missing-state"}),i=r.createDiv({cls:"ppb-base-missing-icon"});_.setIcon(i,"alert-triangle"),r.createEl("p",{text:"Base file not found",cls:"ppb-base-missing-title"}),r.createEl("p",{text:a,cls:"ppb-base-missing-path"}),r.createEl("button",{cls:"ppb-base-empty-btn",text:"Select Folder"}).addEventListener("click",()=>this.openFolderSelector())}onunload(){this.renderComponent.unload(),this.containerEl.remove()}}class um extends _.Component{constructor(a,r,i,o){super(),this.showingAlternate=!1,this.alternateChild=null,this.toggleBtn=null,this.app=r,this.plugin=i,this.config=o,this.renderComponent=new _.Component,this.renderComponent.load(),this.containerEl=a.createDiv({cls:"ppb-base-container ppb-academic-base-view"}),this.buildUI()}buildUI(){const a=this.containerEl.createDiv({cls:"ppb-base-header"}),r=a.createDiv({cls:"ppb-base-header-left"}),i=r.createSpan({cls:"ppb-base-header-icon"});_.setIcon(i,this.config.icon);const o=r.createDiv({cls:"ppb-base-header-titles"});if(o.createEl("h3",{text:this.config.title,cls:"ppb-base-title"}),this.config.description&&o.createEl("p",{text:this.config.description,cls:"ppb-base-description"}),this.config.alternateView){const l=a.createDiv({cls:"ppb-base-header-right"});this.toggleBtn=l.createEl("button",{cls:"clickable-icon ppb-base-toggle-btn",attr:{"aria-label":this.config.alternateView.tooltip}}),_.setIcon(this.toggleBtn,this.config.alternateView.icon),this.toggleBtn.addEventListener("click",()=>this.toggleView())}this.contentEl=this.containerEl.createDiv({cls:"ppb-base-content"}),this.renderBase()}toggleView(){if(this.config.alternateView){if(this.showingAlternate=!this.showingAlternate,this.toggleBtn){const a=this.showingAlternate?"table":this.config.alternateView.icon;this.toggleBtn.empty(),_.setIcon(this.toggleBtn,a),this.toggleBtn.setAttribute("aria-label",this.showingAlternate?"Switch to table view":this.config.alternateView.tooltip),this.toggleBtn.toggleClass("is-active",this.showingAlternate)}this.removeAlternateChild(),this.contentEl.empty(),this.showingAlternate?this.config.alternateView.baseYaml?this.renderBase(this.config.alternateView.baseYaml):this.config.alternateView.createView&&(this.alternateChild=this.config.alternateView.createView(this.contentEl,this.app,this.plugin),this.addChild(this.alternateChild)):this.renderBase()}}removeAlternateChild(){this.alternateChild&&(this.removeChild(this.alternateChild),this.alternateChild=null)}async renderBase(a){this.contentEl.empty();const r="```base\n"+(a||this.config.baseYaml)+"\n```";try{await _.MarkdownRenderer.render(this.app,r,this.contentEl,"",this.renderComponent)}catch(i){console.error("[AcademicBaseView] Failed to render base code block:",i),this.contentEl.empty(),this.contentEl.createDiv({cls:"ppb-base-error"}).setText(`Failed to render base: ${i}`)}}onunload(){this.removeAlternateChild(),this.renderComponent.unload(),this.containerEl.remove()}}const pm=f=>{let a;const r=new Set,i=(h,m)=>{const b=typeof h=="function"?h(a):h;if(!Object.is(b,a)){const k=a;a=m??(typeof b!="object"||b===null)?b:Object.assign({},a,b),r.forEach(v=>v(a,k))}},o=()=>a,u={setState:i,getState:o,getInitialState:()=>d,subscribe:h=>(r.add(h),()=>r.delete(h))},d=a=f(i,o,u);return u},vy=f=>f?pm(f):pm;var vu={exports:{}},Ae={},dm;function wy(){if(dm)return Ae;dm=1;var f=Symbol.for("react.transitional.element"),a=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),l=Symbol.for("react.consumer"),c=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),b=Symbol.for("react.activity"),k=Symbol.iterator;function v(P){return P===null||typeof P!="object"?null:(P=k&&P[k]||P["@@iterator"],typeof P=="function"?P:null)}var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},w=Object.assign,D={};function E(P,L,ee){this.props=P,this.context=L,this.refs=D,this.updater=ee||y}E.prototype.isReactComponent={},E.prototype.setState=function(P,L){if(typeof P!="object"&&typeof P!="function"&&P!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,P,L,"setState")},E.prototype.forceUpdate=function(P){this.updater.enqueueForceUpdate(this,P,"forceUpdate")};function T(){}T.prototype=E.prototype;function A(P,L,ee){this.props=P,this.context=L,this.refs=D,this.updater=ee||y}var z=A.prototype=new T;z.constructor=A,w(z,E.prototype),z.isPureReactComponent=!0;var R=Array.isArray;function q(){}var V={H:null,A:null,T:null,S:null},K=Object.prototype.hasOwnProperty;function Q(P,L,ee){var ae=ee.ref;return{$$typeof:f,type:P,key:L,ref:ae!==void 0?ae:null,props:ee}}function he(P,L){return Q(P.type,L,P.props)}function ve(P){return typeof P=="object"&&P!==null&&P.$$typeof===f}function M(P){var L={"=":"=0",":":"=2"};return"$"+P.replace(/[=:]/g,function(ee){return L[ee]})}var le=/\/+/g;function x(P,L){return typeof P=="object"&&P!==null&&P.key!=null?M(""+P.key):L.toString(36)}function W(P){switch(P.status){case"fulfilled":return P.value;case"rejected":throw P.reason;default:switch(typeof P.status=="string"?P.then(q,q):(P.status="pending",P.then(function(L){P.status==="pending"&&(P.status="fulfilled",P.value=L)},function(L){P.status==="pending"&&(P.status="rejected",P.reason=L)})),P.status){case"fulfilled":return P.value;case"rejected":throw P.reason}}throw P}function U(P,L,ee,ae,ne){var we=typeof P;(we==="undefined"||we==="boolean")&&(P=null);var Ne=!1;if(P===null)Ne=!0;else switch(we){case"bigint":case"string":case"number":Ne=!0;break;case"object":switch(P.$$typeof){case f:case a:Ne=!0;break;case m:return Ne=P._init,U(Ne(P._payload),L,ee,ae,ne)}}if(Ne)return ne=ne(P),Ne=ae===""?"."+x(P,0):ae,R(ne)?(ee="",Ne!=null&&(ee=Ne.replace(le,"$&/")+"/"),U(ne,L,ee,"",function(Je){return Je})):ne!=null&&(ve(ne)&&(ne=he(ne,ee+(ne.key==null||P&&P.key===ne.key?"":(""+ne.key).replace(le,"$&/")+"/")+Ne)),L.push(ne)),1;Ne=0;var _e=ae===""?".":ae+":";if(R(P))for(var Ce=0;Cef;function xy(f,a=ky){const r=vn.useSyncExternalStore(f.subscribe,vn.useCallback(()=>a(f.getState()),[f,a]),vn.useCallback(()=>a(f.getInitialState()),[f,a]));return vn.useDebugValue(r),r}const Sy=f=>{const a=vy(f),r=i=>xy(a,i);return Object.assign(r,a),r},eb=f=>Sy,hm={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},gm=f=>!!f.dispatchFromDevtools&&typeof f.dispatch=="function",ki=new Map,Hs=f=>{const a=ki.get(f);return a?Object.fromEntries(Object.entries(a.stores).map(([r,i])=>[r,i.getState()])):{}},Ey=(f,a,r)=>{if(f===void 0)return{type:"untracked",connection:a.connect(r)};const i=ki.get(r.name);if(i)return{type:"tracked",store:f,...i};const o={connection:a.connect(r),stores:{}};return ki.set(r.name,o),{type:"tracked",store:f,...o}},Cy=(f,a)=>{if(a===void 0)return;const r=ki.get(f);r&&(delete r.stores[a],Object.keys(r.stores).length===0&&ki.delete(f))},_y=f=>{var a,r;if(!f)return;const i=f.split(` -`),o=i.findIndex(c=>c.includes("api.setState"));if(o<0)return;const l=((a=i[o+1])==null?void 0:a.trim())||"";return(r=/.+ (.+) .+/.exec(l))==null?void 0:r[1]},Dy=(f,a={})=>(r,i,o)=>{const{enabled:l,anonymousActionType:c,store:u,...d}=a;let h;try{h=(l??(hm?"production":void 0)!=="production")&&window.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!h)return f(r,i,o);const{connection:m,...b}=Ey(u,h,d);let k=!0;o.setState=(w,D,E)=>{const T=r(w,D);if(!k)return T;const A=E===void 0?{type:c||_y(new Error().stack)||"anonymous"}:typeof E=="string"?{type:E}:E;return u===void 0?(m?.send(A,i()),T):(m?.send({...A,type:`${u}/${A.type}`},{...Hs(d.name),[u]:o.getState()}),T)},o.devtools={cleanup:()=>{m&&typeof m.unsubscribe=="function"&&m.unsubscribe(),Cy(d.name,u)}};const v=(...w)=>{const D=k;k=!1,r(...w),k=D},y=f(o.setState,i,o);if(b.type==="untracked"?m?.init(y):(b.stores[b.store]=o,m?.init(Object.fromEntries(Object.entries(b.stores).map(([w,D])=>[w,w===b.store?y:D.getState()])))),gm(o)){let w=!1;const D=o.dispatch;o.dispatch=(...E)=>{(hm?"production":void 0)!=="production"&&E[0].type==="__setState"&&!w&&(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),w=!0),D(...E)}}return m.subscribe(w=>{var D;switch(w.type){case"ACTION":if(typeof w.payload!="string"){console.error("[zustand devtools middleware] Unsupported action format");return}return wu(w.payload,E=>{if(E.type==="__setState"){if(u===void 0){v(E.state);return}Object.keys(E.state).length!==1&&console.error(` +| Logo | ${this.institution.logos?.[0]?.url||"N/A"} |`;await w.MarkdownRenderer.render(this.app,e,this.resultContainer,"",this.plugin),this.confirmButton.settingEl.show(),this.confirmButton.setDisabled(this.plugin.checkIfInstitutionNoteExists(this.institutionName)),this.confirmButton.setTooltip(this.plugin.checkIfInstitutionNoteExists(this.institutionName)?"Institution Note Already Exists":"Create Institution Note")}onClose(){this.contentEl.empty()}}function Lr(u,e){const t=Object.keys(e).map(s=>Mr(u,s,e[s]));return t.length===1?t[0]:function(){t.forEach(s=>s())}}function Mr(u,e,t){const s=u[e],n=u.hasOwnProperty(e),i=n?s:function(){return Object.getPrototypeOf(u)[e].apply(this,arguments)};let r=t(i);return s&&Object.setPrototypeOf(r,s),Object.setPrototypeOf(a,r),u[e]=a,o;function a(...c){return r===i&&u[e]===a&&o(),r.apply(this,c)}function o(){u[e]===a&&(n?u[e]=i:delete u[e]),r!==i&&(r=i,Object.setPrototypeOf(a,s||Function))}}class $r{constructor(e){this.vault=e}processTemplate(e,t){let s=e;for(const[n,i]of Object.entries(t.institute)){const r=new RegExp(`{{\\s*ppb\\.institute\\.${n}\\s*}}`,"g");Array.isArray(i)?s=s.replace(r,i.map(a=>`- ${a}`).join(` +`)):s=s.replace(r,String(i))}return s}async readTemplateFile(e){try{const t=this.vault.getFileByPath(e+".md");return t instanceof w.TFile?await this.vault.read(t):null}catch(t){return console.error("Error reading template file:",t),null}}getVariablesFromInstitution(e){return{institute:{abbr:e.abbr,aliases:e.aliases,website:e.website,lon:e.location[1],lat:e.location[0],logo:e.logo,name:e.name,tags:e.tags}}}}var se={exports:{}},De,nn;function ge(){if(nn)return De;nn=1;const u="2.0.0",e=256,t=Number.MAX_SAFE_INTEGER||9007199254740991,s=16,n=e-6;return De={MAX_LENGTH:e,MAX_SAFE_COMPONENT_LENGTH:s,MAX_SAFE_BUILD_LENGTH:n,MAX_SAFE_INTEGER:t,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:u,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2},De}var Te,rn;function me(){return rn||(rn=1,Te=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{}),Te}var an;function Kt(){return an||(an=1,(function(u,e){const{MAX_SAFE_COMPONENT_LENGTH:t,MAX_SAFE_BUILD_LENGTH:s,MAX_LENGTH:n}=ge(),i=me();e=u.exports={};const r=e.re=[],a=e.safeRe=[],o=e.src=[],c=e.safeSrc=[],l=e.t={};let d=0;const f="[a-zA-Z0-9-]",h=[["\\s",1],["\\d",n],[f,s]],g=y=>{for(const[v,E]of h)y=y.split(`${v}*`).join(`${v}{0,${E}}`).split(`${v}+`).join(`${v}{1,${E}}`);return y},p=(y,v,E)=>{const x=g(v),C=d++;i(y,C,v),l[y]=C,o[C]=v,c[C]=x,r[C]=new RegExp(v,E?"g":void 0),a[C]=new RegExp(x,E?"g":void 0)};p("NUMERICIDENTIFIER","0|[1-9]\\d*"),p("NUMERICIDENTIFIERLOOSE","\\d+"),p("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${f}*`),p("MAINVERSION",`(${o[l.NUMERICIDENTIFIER]})\\.(${o[l.NUMERICIDENTIFIER]})\\.(${o[l.NUMERICIDENTIFIER]})`),p("MAINVERSIONLOOSE",`(${o[l.NUMERICIDENTIFIERLOOSE]})\\.(${o[l.NUMERICIDENTIFIERLOOSE]})\\.(${o[l.NUMERICIDENTIFIERLOOSE]})`),p("PRERELEASEIDENTIFIER",`(?:${o[l.NONNUMERICIDENTIFIER]}|${o[l.NUMERICIDENTIFIER]})`),p("PRERELEASEIDENTIFIERLOOSE",`(?:${o[l.NONNUMERICIDENTIFIER]}|${o[l.NUMERICIDENTIFIERLOOSE]})`),p("PRERELEASE",`(?:-(${o[l.PRERELEASEIDENTIFIER]}(?:\\.${o[l.PRERELEASEIDENTIFIER]})*))`),p("PRERELEASELOOSE",`(?:-?(${o[l.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${o[l.PRERELEASEIDENTIFIERLOOSE]})*))`),p("BUILDIDENTIFIER",`${f}+`),p("BUILD",`(?:\\+(${o[l.BUILDIDENTIFIER]}(?:\\.${o[l.BUILDIDENTIFIER]})*))`),p("FULLPLAIN",`v?${o[l.MAINVERSION]}${o[l.PRERELEASE]}?${o[l.BUILD]}?`),p("FULL",`^${o[l.FULLPLAIN]}$`),p("LOOSEPLAIN",`[v=\\s]*${o[l.MAINVERSIONLOOSE]}${o[l.PRERELEASELOOSE]}?${o[l.BUILD]}?`),p("LOOSE",`^${o[l.LOOSEPLAIN]}$`),p("GTLT","((?:<|>)?=?)"),p("XRANGEIDENTIFIERLOOSE",`${o[l.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),p("XRANGEIDENTIFIER",`${o[l.NUMERICIDENTIFIER]}|x|X|\\*`),p("XRANGEPLAIN",`[v=\\s]*(${o[l.XRANGEIDENTIFIER]})(?:\\.(${o[l.XRANGEIDENTIFIER]})(?:\\.(${o[l.XRANGEIDENTIFIER]})(?:${o[l.PRERELEASE]})?${o[l.BUILD]}?)?)?`),p("XRANGEPLAINLOOSE",`[v=\\s]*(${o[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${o[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${o[l.XRANGEIDENTIFIERLOOSE]})(?:${o[l.PRERELEASELOOSE]})?${o[l.BUILD]}?)?)?`),p("XRANGE",`^${o[l.GTLT]}\\s*${o[l.XRANGEPLAIN]}$`),p("XRANGELOOSE",`^${o[l.GTLT]}\\s*${o[l.XRANGEPLAINLOOSE]}$`),p("COERCEPLAIN",`(^|[^\\d])(\\d{1,${t}})(?:\\.(\\d{1,${t}}))?(?:\\.(\\d{1,${t}}))?`),p("COERCE",`${o[l.COERCEPLAIN]}(?:$|[^\\d])`),p("COERCEFULL",o[l.COERCEPLAIN]+`(?:${o[l.PRERELEASE]})?(?:${o[l.BUILD]})?(?:$|[^\\d])`),p("COERCERTL",o[l.COERCE],!0),p("COERCERTLFULL",o[l.COERCEFULL],!0),p("LONETILDE","(?:~>?)"),p("TILDETRIM",`(\\s*)${o[l.LONETILDE]}\\s+`,!0),e.tildeTrimReplace="$1~",p("TILDE",`^${o[l.LONETILDE]}${o[l.XRANGEPLAIN]}$`),p("TILDELOOSE",`^${o[l.LONETILDE]}${o[l.XRANGEPLAINLOOSE]}$`),p("LONECARET","(?:\\^)"),p("CARETTRIM",`(\\s*)${o[l.LONECARET]}\\s+`,!0),e.caretTrimReplace="$1^",p("CARET",`^${o[l.LONECARET]}${o[l.XRANGEPLAIN]}$`),p("CARETLOOSE",`^${o[l.LONECARET]}${o[l.XRANGEPLAINLOOSE]}$`),p("COMPARATORLOOSE",`^${o[l.GTLT]}\\s*(${o[l.LOOSEPLAIN]})$|^$`),p("COMPARATOR",`^${o[l.GTLT]}\\s*(${o[l.FULLPLAIN]})$|^$`),p("COMPARATORTRIM",`(\\s*)${o[l.GTLT]}\\s*(${o[l.LOOSEPLAIN]}|${o[l.XRANGEPLAIN]})`,!0),e.comparatorTrimReplace="$1$2$3",p("HYPHENRANGE",`^\\s*(${o[l.XRANGEPLAIN]})\\s+-\\s+(${o[l.XRANGEPLAIN]})\\s*$`),p("HYPHENRANGELOOSE",`^\\s*(${o[l.XRANGEPLAINLOOSE]})\\s+-\\s+(${o[l.XRANGEPLAINLOOSE]})\\s*$`),p("STAR","(<|>)?=?\\s*\\*"),p("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),p("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")})(se,se.exports)),se.exports}var _e,on;function Os(){if(on)return _e;on=1;const u=Object.freeze({loose:!0}),e=Object.freeze({});return _e=s=>s?typeof s!="object"?u:s:e,_e}var Pe,cn;function ki(){if(cn)return Pe;cn=1;const u=/^[0-9]+$/,e=(s,n)=>{if(typeof s=="number"&&typeof n=="number")return s===n?0:se(n,s)},Pe}var Ie,ln;function wt(){if(ln)return Ie;ln=1;const u=me(),{MAX_LENGTH:e,MAX_SAFE_INTEGER:t}=ge(),{safeRe:s,t:n}=Kt(),i=Os(),{compareIdentifiers:r}=ki();class a{constructor(c,l){if(l=i(l),c instanceof a){if(c.loose===!!l.loose&&c.includePrerelease===!!l.includePrerelease)return c;c=c.version}else if(typeof c!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof c}".`);if(c.length>e)throw new TypeError(`version is longer than ${e} characters`);u("SemVer",c,l),this.options=l,this.loose=!!l.loose,this.includePrerelease=!!l.includePrerelease;const d=c.trim().match(l.loose?s[n.LOOSE]:s[n.FULL]);if(!d)throw new TypeError(`Invalid Version: ${c}`);if(this.raw=c,this.major=+d[1],this.minor=+d[2],this.patch=+d[3],this.major>t||this.major<0)throw new TypeError("Invalid major version");if(this.minor>t||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>t||this.patch<0)throw new TypeError("Invalid patch version");d[4]?this.prerelease=d[4].split(".").map(f=>{if(/^[0-9]+$/.test(f)){const h=+f;if(h>=0&&hc.major?1:this.minorc.minor?1:this.patchc.patch?1:0}comparePre(c){if(c instanceof a||(c=new a(c,this.options)),this.prerelease.length&&!c.prerelease.length)return-1;if(!this.prerelease.length&&c.prerelease.length)return 1;if(!this.prerelease.length&&!c.prerelease.length)return 0;let l=0;do{const d=this.prerelease[l],f=c.prerelease[l];if(u("prerelease compare",l,d,f),d===void 0&&f===void 0)return 0;if(f===void 0)return 1;if(d===void 0)return-1;if(d===f)continue;return r(d,f)}while(++l)}compareBuild(c){c instanceof a||(c=new a(c,this.options));let l=0;do{const d=this.build[l],f=c.build[l];if(u("build compare",l,d,f),d===void 0&&f===void 0)return 0;if(f===void 0)return 1;if(d===void 0)return-1;if(d===f)continue;return r(d,f)}while(++l)}inc(c,l,d){if(c.startsWith("pre")){if(!l&&d===!1)throw new Error("invalid increment argument: identifier is empty");if(l){const f=`-${l}`.match(this.options.loose?s[n.PRERELEASELOOSE]:s[n.PRERELEASE]);if(!f||f[1]!==l)throw new Error(`invalid identifier: ${l}`)}}switch(c){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",l,d);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",l,d);break;case"prepatch":this.prerelease.length=0,this.inc("patch",l,d),this.inc("pre",l,d);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",l,d),this.inc("pre",l,d);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{const f=Number(d)?1:0;if(this.prerelease.length===0)this.prerelease=[f];else{let h=this.prerelease.length;for(;--h>=0;)typeof this.prerelease[h]=="number"&&(this.prerelease[h]++,h=-2);if(h===-1){if(l===this.prerelease.join(".")&&d===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(f)}}if(l){let h=[l,f];d===!1&&(h=[l]),r(this.prerelease[0],l)===0?isNaN(this.prerelease[1])&&(this.prerelease=h):this.prerelease=h}break}default:throw new Error(`invalid increment argument: ${c}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}return Ie=a,Ie}var Ae,un;function Bt(){if(un)return Ae;un=1;const u=wt();return Ae=(t,s,n=!1)=>{if(t instanceof u)return t;try{return new u(t,s)}catch(i){if(!n)return null;throw i}},Ae}var Fe,dn;function Or(){if(dn)return Fe;dn=1;const u=Bt();return Fe=(t,s)=>{const n=u(t,s);return n?n.version:null},Fe}var Ne,hn;function Br(){if(hn)return Ne;hn=1;const u=Bt();return Ne=(t,s)=>{const n=u(t.trim().replace(/^[=v]+/,""),s);return n?n.version:null},Ne}var Re,pn;function zr(){if(pn)return Re;pn=1;const u=wt();return Re=(t,s,n,i,r)=>{typeof n=="string"&&(r=i,i=n,n=void 0);try{return new u(t instanceof u?t.version:t,n).inc(s,i,r).version}catch{return null}},Re}var Le,fn;function jr(){if(fn)return Le;fn=1;const u=Bt();return Le=(t,s)=>{const n=u(t,null,!0),i=u(s,null,!0),r=n.compare(i);if(r===0)return null;const a=r>0,o=a?n:i,c=a?i:n,l=!!o.prerelease.length;if(!!c.prerelease.length&&!l){if(!c.patch&&!c.minor)return"major";if(c.compareMain(o)===0)return c.minor&&!c.patch?"minor":"patch"}const f=l?"pre":"";return n.major!==i.major?f+"major":n.minor!==i.minor?f+"minor":n.patch!==i.patch?f+"patch":"prerelease"},Le}var Me,gn;function Ur(){if(gn)return Me;gn=1;const u=wt();return Me=(t,s)=>new u(t,s).major,Me}var $e,mn;function Wr(){if(mn)return $e;mn=1;const u=wt();return $e=(t,s)=>new u(t,s).minor,$e}var Oe,vn;function Vr(){if(vn)return Oe;vn=1;const u=wt();return Oe=(t,s)=>new u(t,s).patch,Oe}var Be,bn;function Hr(){if(bn)return Be;bn=1;const u=Bt();return Be=(t,s)=>{const n=u(t,s);return n&&n.prerelease.length?n.prerelease:null},Be}var ze,wn;function kt(){if(wn)return ze;wn=1;const u=wt();return ze=(t,s,n)=>new u(t,n).compare(new u(s,n)),ze}var je,yn;function qr(){if(yn)return je;yn=1;const u=kt();return je=(t,s,n)=>u(s,t,n),je}var Ue,Sn;function Zr(){if(Sn)return Ue;Sn=1;const u=kt();return Ue=(t,s)=>u(t,s,!0),Ue}var We,En;function Bs(){if(En)return We;En=1;const u=wt();return We=(t,s,n)=>{const i=new u(t,n),r=new u(s,n);return i.compare(r)||i.compareBuild(r)},We}var Ve,kn;function Gr(){if(kn)return Ve;kn=1;const u=Bs();return Ve=(t,s)=>t.sort((n,i)=>u(n,i,s)),Ve}var He,xn;function Yr(){if(xn)return He;xn=1;const u=Bs();return He=(t,s)=>t.sort((n,i)=>u(i,n,s)),He}var qe,Cn;function ve(){if(Cn)return qe;Cn=1;const u=kt();return qe=(t,s,n)=>u(t,s,n)>0,qe}var Ze,Dn;function zs(){if(Dn)return Ze;Dn=1;const u=kt();return Ze=(t,s,n)=>u(t,s,n)<0,Ze}var Ge,Tn;function xi(){if(Tn)return Ge;Tn=1;const u=kt();return Ge=(t,s,n)=>u(t,s,n)===0,Ge}var Ye,_n;function Ci(){if(_n)return Ye;_n=1;const u=kt();return Ye=(t,s,n)=>u(t,s,n)!==0,Ye}var Ke,Pn;function js(){if(Pn)return Ke;Pn=1;const u=kt();return Ke=(t,s,n)=>u(t,s,n)>=0,Ke}var Xe,In;function Us(){if(In)return Xe;In=1;const u=kt();return Xe=(t,s,n)=>u(t,s,n)<=0,Xe}var Je,An;function Di(){if(An)return Je;An=1;const u=xi(),e=Ci(),t=ve(),s=js(),n=zs(),i=Us();return Je=(a,o,c,l)=>{switch(o){case"===":return typeof a=="object"&&(a=a.version),typeof c=="object"&&(c=c.version),a===c;case"!==":return typeof a=="object"&&(a=a.version),typeof c=="object"&&(c=c.version),a!==c;case"":case"=":case"==":return u(a,c,l);case"!=":return e(a,c,l);case">":return t(a,c,l);case">=":return s(a,c,l);case"<":return n(a,c,l);case"<=":return i(a,c,l);default:throw new TypeError(`Invalid operator: ${o}`)}},Je}var Qe,Fn;function Kr(){if(Fn)return Qe;Fn=1;const u=wt(),e=Bt(),{safeRe:t,t:s}=Kt();return Qe=(i,r)=>{if(i instanceof u)return i;if(typeof i=="number"&&(i=String(i)),typeof i!="string")return null;r=r||{};let a=null;if(!r.rtl)a=i.match(r.includePrerelease?t[s.COERCEFULL]:t[s.COERCE]);else{const h=r.includePrerelease?t[s.COERCERTLFULL]:t[s.COERCERTL];let g;for(;(g=h.exec(i))&&(!a||a.index+a[0].length!==i.length);)(!a||g.index+g[0].length!==a.index+a[0].length)&&(a=g),h.lastIndex=g.index+g[1].length+g[2].length;h.lastIndex=-1}if(a===null)return null;const o=a[2],c=a[3]||"0",l=a[4]||"0",d=r.includePrerelease&&a[5]?`-${a[5]}`:"",f=r.includePrerelease&&a[6]?`+${a[6]}`:"";return e(`${o}.${c}.${l}${d}${f}`,r)},Qe}var ts,Nn;function Xr(){if(Nn)return ts;Nn=1;class u{constructor(){this.max=1e3,this.map=new Map}get(t){const s=this.map.get(t);if(s!==void 0)return this.map.delete(t),this.map.set(t,s),s}delete(t){return this.map.delete(t)}set(t,s){if(!this.delete(t)&&s!==void 0){if(this.map.size>=this.max){const i=this.map.keys().next().value;this.delete(i)}this.map.set(t,s)}return this}}return ts=u,ts}var es,Rn;function xt(){if(Rn)return es;Rn=1;const u=/\s+/g;class e{constructor(I,G){if(G=n(G),I instanceof e)return I.loose===!!G.loose&&I.includePrerelease===!!G.includePrerelease?I:new e(I.raw,G);if(I instanceof i)return this.raw=I.value,this.set=[[I]],this.formatted=void 0,this;if(this.options=G,this.loose=!!G.loose,this.includePrerelease=!!G.includePrerelease,this.raw=I.trim().replace(u," "),this.set=this.raw.split("||").map($=>this.parseRange($.trim())).filter($=>$.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){const $=this.set[0];if(this.set=this.set.filter(Y=>!p(Y[0])),this.set.length===0)this.set=[$];else if(this.set.length>1){for(const Y of this.set)if(Y.length===1&&y(Y[0])){this.set=[Y];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let I=0;I0&&(this.formatted+="||");const G=this.set[I];for(let $=0;$0&&(this.formatted+=" "),this.formatted+=G[$].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(I){const $=((this.options.includePrerelease&&h)|(this.options.loose&&g))+":"+I,Y=s.get($);if(Y)return Y;const z=this.options.loose,K=z?o[c.HYPHENRANGELOOSE]:o[c.HYPHENRANGE];I=I.replace(K,P(this.options.includePrerelease)),r("hyphen replace",I),I=I.replace(o[c.COMPARATORTRIM],l),r("comparator trim",I),I=I.replace(o[c.TILDETRIM],d),r("tilde trim",I),I=I.replace(o[c.CARETTRIM],f),r("caret trim",I);let L=I.split(" ").map(Z=>E(Z,this.options)).join(" ").split(/\s+/).map(Z=>tt(Z,this.options));z&&(L=L.filter(Z=>(r("loose invalid filter",Z,this.options),!!Z.match(o[c.COMPARATORLOOSE])))),r("range list",L);const A=new Map,Q=L.map(Z=>new i(Z,this.options));for(const Z of Q){if(p(Z))return[Z];A.set(Z.value,Z)}A.size>1&&A.has("")&&A.delete("");const X=[...A.values()];return s.set($,X),X}intersects(I,G){if(!(I instanceof e))throw new TypeError("a Range is required");return this.set.some($=>v($,G)&&I.set.some(Y=>v(Y,G)&&$.every(z=>Y.every(K=>z.intersects(K,G)))))}test(I){if(!I)return!1;if(typeof I=="string")try{I=new a(I,this.options)}catch{return!1}for(let G=0;Gb.value==="<0.0.0-0",y=b=>b.value==="",v=(b,I)=>{let G=!0;const $=b.slice();let Y=$.pop();for(;G&&$.length;)G=$.every(z=>Y.intersects(z,I)),Y=$.pop();return G},E=(b,I)=>(b=b.replace(o[c.BUILD],""),r("comp",b,I),b=R(b,I),r("caret",b),b=C(b,I),r("tildes",b),b=M(b,I),r("xrange",b),b=q(b,I),r("stars",b),b),x=b=>!b||b.toLowerCase()==="x"||b==="*",C=(b,I)=>b.trim().split(/\s+/).map(G=>T(G,I)).join(" "),T=(b,I)=>{const G=I.loose?o[c.TILDELOOSE]:o[c.TILDE];return b.replace(G,($,Y,z,K,L)=>{r("tilde",b,$,Y,z,K,L);let A;return x(Y)?A="":x(z)?A=`>=${Y}.0.0 <${+Y+1}.0.0-0`:x(K)?A=`>=${Y}.${z}.0 <${Y}.${+z+1}.0-0`:L?(r("replaceTilde pr",L),A=`>=${Y}.${z}.${K}-${L} <${Y}.${+z+1}.0-0`):A=`>=${Y}.${z}.${K} <${Y}.${+z+1}.0-0`,r("tilde return",A),A})},R=(b,I)=>b.trim().split(/\s+/).map(G=>F(G,I)).join(" "),F=(b,I)=>{r("caret",b,I);const G=I.loose?o[c.CARETLOOSE]:o[c.CARET],$=I.includePrerelease?"-0":"";return b.replace(G,(Y,z,K,L,A)=>{r("caret",b,Y,z,K,L,A);let Q;return x(z)?Q="":x(K)?Q=`>=${z}.0.0${$} <${+z+1}.0.0-0`:x(L)?z==="0"?Q=`>=${z}.${K}.0${$} <${z}.${+K+1}.0-0`:Q=`>=${z}.${K}.0${$} <${+z+1}.0.0-0`:A?(r("replaceCaret pr",A),z==="0"?K==="0"?Q=`>=${z}.${K}.${L}-${A} <${z}.${K}.${+L+1}-0`:Q=`>=${z}.${K}.${L}-${A} <${z}.${+K+1}.0-0`:Q=`>=${z}.${K}.${L}-${A} <${+z+1}.0.0-0`):(r("no pr"),z==="0"?K==="0"?Q=`>=${z}.${K}.${L}${$} <${z}.${K}.${+L+1}-0`:Q=`>=${z}.${K}.${L}${$} <${z}.${+K+1}.0-0`:Q=`>=${z}.${K}.${L} <${+z+1}.0.0-0`),r("caret return",Q),Q})},M=(b,I)=>(r("replaceXRanges",b,I),b.split(/\s+/).map(G=>B(G,I)).join(" ")),B=(b,I)=>{b=b.trim();const G=I.loose?o[c.XRANGELOOSE]:o[c.XRANGE];return b.replace(G,($,Y,z,K,L,A)=>{r("xRange",b,$,Y,z,K,L,A);const Q=x(z),X=Q||x(K),Z=X||x(L),lt=Z;return Y==="="&<&&(Y=""),A=I.includePrerelease?"-0":"",Q?Y===">"||Y==="<"?$="<0.0.0-0":$="*":Y&<?(X&&(K=0),L=0,Y===">"?(Y=">=",X?(z=+z+1,K=0,L=0):(K=+K+1,L=0)):Y==="<="&&(Y="<",X?z=+z+1:K=+K+1),Y==="<"&&(A="-0"),$=`${Y+z}.${K}.${L}${A}`):X?$=`>=${z}.0.0${A} <${+z+1}.0.0-0`:Z&&($=`>=${z}.${K}.0${A} <${z}.${+K+1}.0-0`),r("xRange return",$),$})},q=(b,I)=>(r("replaceStars",b,I),b.trim().replace(o[c.STAR],"")),tt=(b,I)=>(r("replaceGTE0",b,I),b.trim().replace(o[I.includePrerelease?c.GTE0PRE:c.GTE0],"")),P=b=>(I,G,$,Y,z,K,L,A,Q,X,Z,lt)=>(x($)?G="":x(Y)?G=`>=${$}.0.0${b?"-0":""}`:x(z)?G=`>=${$}.${Y}.0${b?"-0":""}`:K?G=`>=${G}`:G=`>=${G}${b?"-0":""}`,x(Q)?A="":x(X)?A=`<${+Q+1}.0.0-0`:x(Z)?A=`<${Q}.${+X+1}.0-0`:lt?A=`<=${Q}.${X}.${Z}-${lt}`:b?A=`<${Q}.${X}.${+Z+1}-0`:A=`<=${A}`,`${G} ${A}`.trim()),U=(b,I,G)=>{for(let $=0;$0){const Y=b[$].semver;if(Y.major===I.major&&Y.minor===I.minor&&Y.patch===I.patch)return!0}return!1}return!0};return es}var ss,Ln;function be(){if(Ln)return ss;Ln=1;const u=Symbol("SemVer ANY");class e{static get ANY(){return u}constructor(l,d){if(d=t(d),l instanceof e){if(l.loose===!!d.loose)return l;l=l.value}l=l.trim().split(/\s+/).join(" "),r("comparator",l,d),this.options=d,this.loose=!!d.loose,this.parse(l),this.semver===u?this.value="":this.value=this.operator+this.semver.version,r("comp",this)}parse(l){const d=this.options.loose?s[n.COMPARATORLOOSE]:s[n.COMPARATOR],f=l.match(d);if(!f)throw new TypeError(`Invalid comparator: ${l}`);this.operator=f[1]!==void 0?f[1]:"",this.operator==="="&&(this.operator=""),f[2]?this.semver=new a(f[2],this.options.loose):this.semver=u}toString(){return this.value}test(l){if(r("Comparator.test",l,this.options.loose),this.semver===u||l===u)return!0;if(typeof l=="string")try{l=new a(l,this.options)}catch{return!1}return i(l,this.operator,this.semver,this.options)}intersects(l,d){if(!(l instanceof e))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new o(l.value,d).test(this.value):l.operator===""?l.value===""?!0:new o(this.value,d).test(l.semver):(d=t(d),d.includePrerelease&&(this.value==="<0.0.0-0"||l.value==="<0.0.0-0")||!d.includePrerelease&&(this.value.startsWith("<0.0.0")||l.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&l.operator.startsWith(">")||this.operator.startsWith("<")&&l.operator.startsWith("<")||this.semver.version===l.semver.version&&this.operator.includes("=")&&l.operator.includes("=")||i(this.semver,"<",l.semver,d)&&this.operator.startsWith(">")&&l.operator.startsWith("<")||i(this.semver,">",l.semver,d)&&this.operator.startsWith("<")&&l.operator.startsWith(">")))}}ss=e;const t=Os(),{safeRe:s,t:n}=Kt(),i=Di(),r=me(),a=wt(),o=xt();return ss}var ns,Mn;function we(){if(Mn)return ns;Mn=1;const u=xt();return ns=(t,s,n)=>{try{s=new u(s,n)}catch{return!1}return s.test(t)},ns}var is,$n;function Jr(){if($n)return is;$n=1;const u=xt();return is=(t,s)=>new u(t,s).set.map(n=>n.map(i=>i.value).join(" ").trim().split(" ")),is}var rs,On;function Qr(){if(On)return rs;On=1;const u=wt(),e=xt();return rs=(s,n,i)=>{let r=null,a=null,o=null;try{o=new e(n,i)}catch{return null}return s.forEach(c=>{o.test(c)&&(!r||a.compare(c)===-1)&&(r=c,a=new u(r,i))}),r},rs}var as,Bn;function ta(){if(Bn)return as;Bn=1;const u=wt(),e=xt();return as=(s,n,i)=>{let r=null,a=null,o=null;try{o=new e(n,i)}catch{return null}return s.forEach(c=>{o.test(c)&&(!r||a.compare(c)===1)&&(r=c,a=new u(r,i))}),r},as}var os,zn;function ea(){if(zn)return os;zn=1;const u=wt(),e=xt(),t=ve();return os=(n,i)=>{n=new e(n,i);let r=new u("0.0.0");if(n.test(r)||(r=new u("0.0.0-0"),n.test(r)))return r;r=null;for(let a=0;a{const d=new u(l.semver.version);switch(l.operator){case">":d.prerelease.length===0?d.patch++:d.prerelease.push(0),d.raw=d.format();case"":case">=":(!c||t(d,c))&&(c=d);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${l.operator}`)}}),c&&(!r||t(r,c))&&(r=c)}return r&&n.test(r)?r:null},os}var cs,jn;function sa(){if(jn)return cs;jn=1;const u=xt();return cs=(t,s)=>{try{return new u(t,s).range||"*"}catch{return null}},cs}var ls,Un;function Ws(){if(Un)return ls;Un=1;const u=wt(),e=be(),{ANY:t}=e,s=xt(),n=we(),i=ve(),r=zs(),a=Us(),o=js();return ls=(l,d,f,h)=>{l=new u(l,h),d=new s(d,h);let g,p,y,v,E;switch(f){case">":g=i,p=a,y=r,v=">",E=">=";break;case"<":g=r,p=o,y=i,v="<",E="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(n(l,d,h))return!1;for(let x=0;x{F.semver===t&&(F=new e(">=0.0.0")),T=T||F,R=R||F,g(F.semver,T.semver,h)?T=F:y(F.semver,R.semver,h)&&(R=F)}),T.operator===v||T.operator===E||(!R.operator||R.operator===v)&&p(l,R.semver))return!1;if(R.operator===E&&y(l,R.semver))return!1}return!0},ls}var us,Wn;function na(){if(Wn)return us;Wn=1;const u=Ws();return us=(t,s,n)=>u(t,s,">",n),us}var ds,Vn;function ia(){if(Vn)return ds;Vn=1;const u=Ws();return ds=(t,s,n)=>u(t,s,"<",n),ds}var hs,Hn;function ra(){if(Hn)return hs;Hn=1;const u=xt();return hs=(t,s,n)=>(t=new u(t,n),s=new u(s,n),t.intersects(s,n)),hs}var ps,qn;function aa(){if(qn)return ps;qn=1;const u=we(),e=kt();return ps=(t,s,n)=>{const i=[];let r=null,a=null;const o=t.sort((f,h)=>e(f,h,n));for(const f of o)u(f,s,n)?(a=f,r||(r=f)):(a&&i.push([r,a]),a=null,r=null);r&&i.push([r,null]);const c=[];for(const[f,h]of i)f===h?c.push(f):!h&&f===o[0]?c.push("*"):h?f===o[0]?c.push(`<=${h}`):c.push(`${f} - ${h}`):c.push(`>=${f}`);const l=c.join(" || "),d=typeof s.raw=="string"?s.raw:String(s);return l.length{if(d===f)return!0;d=new u(d,h),f=new u(f,h);let g=!1;t:for(const p of d.set){for(const y of f.set){const v=o(p,y,h);if(g=g||v!==null,v)continue t}if(g)return!1}return!0},r=[new e(">=0.0.0-0")],a=[new e(">=0.0.0")],o=(d,f,h)=>{if(d===f)return!0;if(d.length===1&&d[0].semver===t){if(f.length===1&&f[0].semver===t)return!0;h.includePrerelease?d=r:d=a}if(f.length===1&&f[0].semver===t){if(h.includePrerelease)return!0;f=a}const g=new Set;let p,y;for(const M of d)M.operator===">"||M.operator===">="?p=c(p,M,h):M.operator==="<"||M.operator==="<="?y=l(y,M,h):g.add(M.semver);if(g.size>1)return null;let v;if(p&&y){if(v=n(p.semver,y.semver,h),v>0)return null;if(v===0&&(p.operator!==">="||y.operator!=="<="))return null}for(const M of g){if(p&&!s(M,String(p),h)||y&&!s(M,String(y),h))return null;for(const B of f)if(!s(M,String(B),h))return!1;return!0}let E,x,C,T,R=y&&!h.includePrerelease&&y.semver.prerelease.length?y.semver:!1,F=p&&!h.includePrerelease&&p.semver.prerelease.length?p.semver:!1;R&&R.prerelease.length===1&&y.operator==="<"&&R.prerelease[0]===0&&(R=!1);for(const M of f){if(T=T||M.operator===">"||M.operator===">=",C=C||M.operator==="<"||M.operator==="<=",p){if(F&&M.semver.prerelease&&M.semver.prerelease.length&&M.semver.major===F.major&&M.semver.minor===F.minor&&M.semver.patch===F.patch&&(F=!1),M.operator===">"||M.operator===">="){if(E=c(p,M,h),E===M&&E!==p)return!1}else if(p.operator===">="&&!s(p.semver,String(M),h))return!1}if(y){if(R&&M.semver.prerelease&&M.semver.prerelease.length&&M.semver.major===R.major&&M.semver.minor===R.minor&&M.semver.patch===R.patch&&(R=!1),M.operator==="<"||M.operator==="<="){if(x=l(y,M,h),x===M&&x!==y)return!1}else if(y.operator==="<="&&!s(y.semver,String(M),h))return!1}if(!M.operator&&(y||p)&&v!==0)return!1}return!(p&&C&&!y&&v!==0||y&&T&&!p&&v!==0||F||R)},c=(d,f,h)=>{if(!d)return f;const g=n(d.semver,f.semver,h);return g>0?d:g<0||f.operator===">"&&d.operator===">="?f:d},l=(d,f,h)=>{if(!d)return f;const g=n(d.semver,f.semver,h);return g<0?d:g>0||f.operator==="<"&&d.operator==="<="?f:d};return fs=i,fs}var gs,Gn;function ca(){if(Gn)return gs;Gn=1;const u=Kt(),e=ge(),t=wt(),s=ki(),n=Bt(),i=Or(),r=Br(),a=zr(),o=jr(),c=Ur(),l=Wr(),d=Vr(),f=Hr(),h=kt(),g=qr(),p=Zr(),y=Bs(),v=Gr(),E=Yr(),x=ve(),C=zs(),T=xi(),R=Ci(),F=js(),M=Us(),B=Di(),q=Kr(),tt=be(),P=xt(),U=we(),b=Jr(),I=Qr(),G=ta(),$=ea(),Y=sa(),z=Ws(),K=na(),L=ia(),A=ra(),Q=aa(),X=oa();return gs={parse:n,valid:i,clean:r,inc:a,diff:o,major:c,minor:l,patch:d,prerelease:f,compare:h,rcompare:g,compareLoose:p,compareBuild:y,sort:v,rsort:E,gt:x,lt:C,eq:T,neq:R,gte:F,lte:M,cmp:B,coerce:q,Comparator:tt,Range:P,satisfies:U,toComparators:b,maxSatisfying:I,minSatisfying:G,minVersion:$,validRange:Y,outside:z,gtr:K,ltr:L,intersects:A,simplifyRange:Q,subset:X,SemVer:t,re:u.re,src:u.src,tokens:u.t,SEMVER_SPEC_VERSION:e.SEMVER_SPEC_VERSION,RELEASE_TYPES:e.RELEASE_TYPES,compareIdentifiers:s.compareIdentifiers,rcompareIdentifiers:s.rcompareIdentifiers},gs}var la=ca();const ne=Pr(la);class ms{constructor(e,t,s){this.repository=e,this.minAppVersion=t,this.proxyService=s}async checkForUpdates(e,t=!1){try{const s=await this.fetchLatestRelease(),n=ne.gt(s.version,t?"0.0.0":e),i=this.checkCompatibility(s);return{hasUpdate:n,currentVersion:e,latestVersion:s.version,releaseInfo:s,compatibilityIssues:i}}catch(s){throw new Error(`Failed to check for updates: ${s.message}`)}}async fetchLatestRelease(){const e=`https://api.github.com/repos/${this.repository}/releases/latest`,t=this.proxyService?await this.proxyService.request({url:e}):await w.requestUrl({url:e});if(t.status!==200)throw new Error(`Failed to fetch latest release: ${t.status}`);const s=t.json,n=this.parseAssets(s.assets||[]),r=n.find(a=>a.name.toLowerCase().endsWith(".zip"))||n[0];return{version:s.tag_name.replace(/^v/,""),minAppVersion:s.minAppVersion||"0.0.0",downloadUrl:r?.browserDownloadUrl,sha256:r?.sha256,releaseNotes:s.body,dependencies:s.dependencies||{},assets:n}}parseAssets(e){return e.map(t=>({name:t.name,browserDownloadUrl:t.browser_download_url,sha256:t.sha256})).filter(t=>typeof t.name=="string"&&typeof t.browserDownloadUrl=="string")}checkCompatibility(e){const t=[];return ne.lt(this.minAppVersion,e.minAppVersion)&&t.push(`Requires Obsidian version ${e.minAppVersion} or higher`),t}static isValidVersion(e){return ne.valid(e)!==null}static compareVersions(e,t){return ne.compare(e,t)}}function ie(u){throw new Error('Could not dynamically require "'+u+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var vs={exports:{}},Yn;function ua(){return Yn||(Yn=1,(function(u,e){(function(t){u.exports=t()})(function(){return(function t(s,n,i){function r(c,l){if(!n[c]){if(!s[c]){var d=typeof ie=="function"&&ie;if(!l&&d)return d(c,!0);if(a)return a(c,!0);var f=new Error("Cannot find module '"+c+"'");throw f.code="MODULE_NOT_FOUND",f}var h=n[c]={exports:{}};s[c][0].call(h.exports,function(g){var p=s[c][1][g];return r(p||g)},h,h.exports,t,s,n,i)}return n[c].exports}for(var a=typeof ie=="function"&&ie,o=0;o>2,h=(3&c)<<4|l>>4,g=1>6:64,p=2>4,l=(15&f)<<4|(h=a.indexOf(o.charAt(p++)))>>2,d=(3&h)<<6|(g=a.indexOf(o.charAt(p++))),E[y++]=c,h!==64&&(E[y++]=l),g!==64&&(E[y++]=d);return E}},{"./support":30,"./utils":32}],2:[function(t,s,n){var i=t("./external"),r=t("./stream/DataWorker"),a=t("./stream/Crc32Probe"),o=t("./stream/DataLengthProbe");function c(l,d,f,h,g){this.compressedSize=l,this.uncompressedSize=d,this.crc32=f,this.compression=h,this.compressedContent=g}c.prototype={getContentWorker:function(){var l=new r(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new o("data_length")),d=this;return l.on("end",function(){if(this.streamInfo.data_length!==d.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),l},getCompressedWorker:function(){return new r(i.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},c.createWorkerFrom=function(l,d,f){return l.pipe(new a).pipe(new o("uncompressedSize")).pipe(d.compressWorker(f)).pipe(new o("compressedSize")).withStreamInfo("compression",d)},s.exports=c},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(t,s,n){var i=t("./stream/GenericWorker");n.STORE={magic:"\0\0",compressWorker:function(){return new i("STORE compression")},uncompressWorker:function(){return new i("STORE decompression")}},n.DEFLATE=t("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(t,s,n){var i=t("./utils"),r=(function(){for(var a,o=[],c=0;c<256;c++){a=c;for(var l=0;l<8;l++)a=1&a?3988292384^a>>>1:a>>>1;o[c]=a}return o})();s.exports=function(a,o){return a!==void 0&&a.length?i.getTypeOf(a)!=="string"?(function(c,l,d,f){var h=r,g=f+d;c^=-1;for(var p=f;p>>8^h[255&(c^l[p])];return-1^c})(0|o,a,a.length,0):(function(c,l,d,f){var h=r,g=f+d;c^=-1;for(var p=f;p>>8^h[255&(c^l.charCodeAt(p))];return-1^c})(0|o,a,a.length,0):0}},{"./utils":32}],5:[function(t,s,n){n.base64=!1,n.binary=!1,n.dir=!1,n.createFolders=!0,n.date=null,n.compression=null,n.compressionOptions=null,n.comment=null,n.unixPermissions=null,n.dosPermissions=null},{}],6:[function(t,s,n){var i=null;i=typeof Promise<"u"?Promise:t("lie"),s.exports={Promise:i}},{lie:37}],7:[function(t,s,n){var i=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",r=t("pako"),a=t("./utils"),o=t("./stream/GenericWorker"),c=i?"uint8array":"array";function l(d,f){o.call(this,"FlateWorker/"+d),this._pako=null,this._pakoAction=d,this._pakoOptions=f,this.meta={}}n.magic="\b\0",a.inherits(l,o),l.prototype.processChunk=function(d){this.meta=d.meta,this._pako===null&&this._createPako(),this._pako.push(a.transformTo(c,d.data),!1)},l.prototype.flush=function(){o.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){o.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new r[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var d=this;this._pako.onData=function(f){d.push({data:f,meta:d.meta})}},n.compressWorker=function(d){return new l("Deflate",d)},n.uncompressWorker=function(){return new l("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(t,s,n){function i(h,g){var p,y="";for(p=0;p>>=8;return y}function r(h,g,p,y,v,E){var x,C,T=h.file,R=h.compression,F=E!==c.utf8encode,M=a.transformTo("string",E(T.name)),B=a.transformTo("string",c.utf8encode(T.name)),q=T.comment,tt=a.transformTo("string",E(q)),P=a.transformTo("string",c.utf8encode(q)),U=B.length!==T.name.length,b=P.length!==q.length,I="",G="",$="",Y=T.dir,z=T.date,K={crc32:0,compressedSize:0,uncompressedSize:0};g&&!p||(K.crc32=h.crc32,K.compressedSize=h.compressedSize,K.uncompressedSize=h.uncompressedSize);var L=0;g&&(L|=8),F||!U&&!b||(L|=2048);var A=0,Q=0;Y&&(A|=16),v==="UNIX"?(Q=798,A|=(function(Z,lt){var mt=Z;return Z||(mt=lt?16893:33204),(65535&mt)<<16})(T.unixPermissions,Y)):(Q=20,A|=(function(Z){return 63&(Z||0)})(T.dosPermissions)),x=z.getUTCHours(),x<<=6,x|=z.getUTCMinutes(),x<<=5,x|=z.getUTCSeconds()/2,C=z.getUTCFullYear()-1980,C<<=4,C|=z.getUTCMonth()+1,C<<=5,C|=z.getUTCDate(),U&&(G=i(1,1)+i(l(M),4)+B,I+="up"+i(G.length,2)+G),b&&($=i(1,1)+i(l(tt),4)+P,I+="uc"+i($.length,2)+$);var X="";return X+=` +\0`,X+=i(L,2),X+=R.magic,X+=i(x,2),X+=i(C,2),X+=i(K.crc32,4),X+=i(K.compressedSize,4),X+=i(K.uncompressedSize,4),X+=i(M.length,2),X+=i(I.length,2),{fileRecord:d.LOCAL_FILE_HEADER+X+M+I,dirRecord:d.CENTRAL_FILE_HEADER+i(Q,2)+X+i(tt.length,2)+"\0\0\0\0"+i(A,4)+i(y,4)+M+I+tt}}var a=t("../utils"),o=t("../stream/GenericWorker"),c=t("../utf8"),l=t("../crc32"),d=t("../signature");function f(h,g,p,y){o.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=g,this.zipPlatform=p,this.encodeFileName=y,this.streamFiles=h,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}a.inherits(f,o),f.prototype.push=function(h){var g=h.meta.percent||0,p=this.entriesCount,y=this._sources.length;this.accumulate?this.contentBuffer.push(h):(this.bytesWritten+=h.data.length,o.prototype.push.call(this,{data:h.data,meta:{currentFile:this.currentFile,percent:p?(g+100*(p-y-1))/p:100}}))},f.prototype.openedSource=function(h){this.currentSourceOffset=this.bytesWritten,this.currentFile=h.file.name;var g=this.streamFiles&&!h.file.dir;if(g){var p=r(h,g,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:p.fileRecord,meta:{percent:0}})}else this.accumulate=!0},f.prototype.closedSource=function(h){this.accumulate=!1;var g=this.streamFiles&&!h.file.dir,p=r(h,g,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(p.dirRecord),g)this.push({data:(function(y){return d.DATA_DESCRIPTOR+i(y.crc32,4)+i(y.compressedSize,4)+i(y.uncompressedSize,4)})(h),meta:{percent:100}});else for(this.push({data:p.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},f.prototype.flush=function(){for(var h=this.bytesWritten,g=0;g=this.index;o--)c=(c<<8)+this.byteAt(o);return this.index+=a,c},readString:function(a){return i.transformTo("string",this.readData(a))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var a=this.readInt(4);return new Date(Date.UTC(1980+(a>>25&127),(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1))}},s.exports=r},{"../utils":32}],19:[function(t,s,n){var i=t("./Uint8ArrayReader");function r(a){i.call(this,a)}t("../utils").inherits(r,i),r.prototype.readData=function(a){this.checkOffset(a);var o=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,o},s.exports=r},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(t,s,n){var i=t("./DataReader");function r(a){i.call(this,a)}t("../utils").inherits(r,i),r.prototype.byteAt=function(a){return this.data.charCodeAt(this.zero+a)},r.prototype.lastIndexOfSignature=function(a){return this.data.lastIndexOf(a)-this.zero},r.prototype.readAndCheckSignature=function(a){return a===this.readData(4)},r.prototype.readData=function(a){this.checkOffset(a);var o=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,o},s.exports=r},{"../utils":32,"./DataReader":18}],21:[function(t,s,n){var i=t("./ArrayReader");function r(a){i.call(this,a)}t("../utils").inherits(r,i),r.prototype.readData=function(a){if(this.checkOffset(a),a===0)return new Uint8Array(0);var o=this.data.subarray(this.zero+this.index,this.zero+this.index+a);return this.index+=a,o},s.exports=r},{"../utils":32,"./ArrayReader":17}],22:[function(t,s,n){var i=t("../utils"),r=t("../support"),a=t("./ArrayReader"),o=t("./StringReader"),c=t("./NodeBufferReader"),l=t("./Uint8ArrayReader");s.exports=function(d){var f=i.getTypeOf(d);return i.checkSupport(f),f!=="string"||r.uint8array?f==="nodebuffer"?new c(d):r.uint8array?new l(i.transformTo("uint8array",d)):new a(i.transformTo("array",d)):new o(d)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(t,s,n){n.LOCAL_FILE_HEADER="PK",n.CENTRAL_FILE_HEADER="PK",n.CENTRAL_DIRECTORY_END="PK",n.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",n.ZIP64_CENTRAL_DIRECTORY_END="PK",n.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(t,s,n){var i=t("./GenericWorker"),r=t("../utils");function a(o){i.call(this,"ConvertWorker to "+o),this.destType=o}r.inherits(a,i),a.prototype.processChunk=function(o){this.push({data:r.transformTo(this.destType,o.data),meta:o.meta})},s.exports=a},{"../utils":32,"./GenericWorker":28}],25:[function(t,s,n){var i=t("./GenericWorker"),r=t("../crc32");function a(){i.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}t("../utils").inherits(a,i),a.prototype.processChunk=function(o){this.streamInfo.crc32=r(o.data,this.streamInfo.crc32||0),this.push(o)},s.exports=a},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(t,s,n){var i=t("../utils"),r=t("./GenericWorker");function a(o){r.call(this,"DataLengthProbe for "+o),this.propName=o,this.withStreamInfo(o,0)}i.inherits(a,r),a.prototype.processChunk=function(o){if(o){var c=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=c+o.data.length}r.prototype.processChunk.call(this,o)},s.exports=a},{"../utils":32,"./GenericWorker":28}],27:[function(t,s,n){var i=t("../utils"),r=t("./GenericWorker");function a(o){r.call(this,"DataWorker");var c=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,o.then(function(l){c.dataIsReady=!0,c.data=l,c.max=l&&l.length||0,c.type=i.getTypeOf(l),c.isPaused||c._tickAndRepeat()},function(l){c.error(l)})}i.inherits(a,r),a.prototype.cleanUp=function(){r.prototype.cleanUp.call(this),this.data=null},a.prototype.resume=function(){return!!r.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},a.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},a.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var o=null,c=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":o=this.data.substring(this.index,c);break;case"uint8array":o=this.data.subarray(this.index,c);break;case"array":case"nodebuffer":o=this.data.slice(this.index,c)}return this.index=c,this.push({data:o,meta:{percent:this.max?this.index/this.max*100:0}})},s.exports=a},{"../utils":32,"./GenericWorker":28}],28:[function(t,s,n){function i(r){this.name=r||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(r){this.emit("data",r)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(r){this.emit("error",r)}return!0},error:function(r){return!this.isFinished&&(this.isPaused?this.generatedError=r:(this.isFinished=!0,this.emit("error",r),this.previous&&this.previous.error(r),this.cleanUp()),!0)},on:function(r,a){return this._listeners[r].push(a),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(r,a){if(this._listeners[r])for(var o=0;o "+r:r}},s.exports=i},{}],29:[function(t,s,n){var i=t("../utils"),r=t("./ConvertWorker"),a=t("./GenericWorker"),o=t("../base64"),c=t("../support"),l=t("../external"),d=null;if(c.nodestream)try{d=t("../nodejs/NodejsStreamOutputAdapter")}catch{}function f(g,p){return new l.Promise(function(y,v){var E=[],x=g._internalType,C=g._outputType,T=g._mimeType;g.on("data",function(R,F){E.push(R),p&&p(F)}).on("error",function(R){E=[],v(R)}).on("end",function(){try{var R=(function(F,M,B){switch(F){case"blob":return i.newBlob(i.transformTo("arraybuffer",M),B);case"base64":return o.encode(M);default:return i.transformTo(F,M)}})(C,(function(F,M){var B,q=0,tt=null,P=0;for(B=0;B"u")n.blob=!1;else{var i=new ArrayBuffer(0);try{n.blob=new Blob([i],{type:"application/zip"}).size===0}catch{try{var r=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);r.append(i),n.blob=r.getBlob("application/zip").size===0}catch{n.blob=!1}}}try{n.nodestream=!!t("readable-stream").Readable}catch{n.nodestream=!1}},{"readable-stream":16}],31:[function(t,s,n){for(var i=t("./utils"),r=t("./support"),a=t("./nodejsUtils"),o=t("./stream/GenericWorker"),c=new Array(256),l=0;l<256;l++)c[l]=252<=l?6:248<=l?5:240<=l?4:224<=l?3:192<=l?2:1;c[254]=c[254]=1;function d(){o.call(this,"utf-8 decode"),this.leftOver=null}function f(){o.call(this,"utf-8 encode")}n.utf8encode=function(h){return r.nodebuffer?a.newBufferFrom(h,"utf-8"):(function(g){var p,y,v,E,x,C=g.length,T=0;for(E=0;E>>6:(y<65536?p[x++]=224|y>>>12:(p[x++]=240|y>>>18,p[x++]=128|y>>>12&63),p[x++]=128|y>>>6&63),p[x++]=128|63&y);return p})(h)},n.utf8decode=function(h){return r.nodebuffer?i.transformTo("nodebuffer",h).toString("utf-8"):(function(g){var p,y,v,E,x=g.length,C=new Array(2*x);for(p=y=0;p>10&1023,C[y++]=56320|1023&v)}return C.length!==y&&(C.subarray?C=C.subarray(0,y):C.length=y),i.applyFromCharCode(C)})(h=i.transformTo(r.uint8array?"uint8array":"array",h))},i.inherits(d,o),d.prototype.processChunk=function(h){var g=i.transformTo(r.uint8array?"uint8array":"array",h.data);if(this.leftOver&&this.leftOver.length){if(r.uint8array){var p=g;(g=new Uint8Array(p.length+this.leftOver.length)).set(this.leftOver,0),g.set(p,this.leftOver.length)}else g=this.leftOver.concat(g);this.leftOver=null}var y=(function(E,x){var C;for((x=x||E.length)>E.length&&(x=E.length),C=x-1;0<=C&&(192&E[C])==128;)C--;return C<0||C===0?x:C+c[E[C]]>x?C:x})(g),v=g;y!==g.length&&(r.uint8array?(v=g.subarray(0,y),this.leftOver=g.subarray(y,g.length)):(v=g.slice(0,y),this.leftOver=g.slice(y,g.length))),this.push({data:n.utf8decode(v),meta:h.meta})},d.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:n.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},n.Utf8DecodeWorker=d,i.inherits(f,o),f.prototype.processChunk=function(h){this.push({data:n.utf8encode(h.data),meta:h.meta})},n.Utf8EncodeWorker=f},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(t,s,n){var i=t("./support"),r=t("./base64"),a=t("./nodejsUtils"),o=t("./external");function c(p){return p}function l(p,y){for(var v=0;v>8;this.dir=!!(16&this.externalFileAttributes),h==0&&(this.dosPermissions=63&this.externalFileAttributes),h==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var h=i(this.extraFields[1].value);this.uncompressedSize===r.MAX_VALUE_32BITS&&(this.uncompressedSize=h.readInt(8)),this.compressedSize===r.MAX_VALUE_32BITS&&(this.compressedSize=h.readInt(8)),this.localHeaderOffset===r.MAX_VALUE_32BITS&&(this.localHeaderOffset=h.readInt(8)),this.diskNumberStart===r.MAX_VALUE_32BITS&&(this.diskNumberStart=h.readInt(4))}},readExtraFields:function(h){var g,p,y,v=h.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});h.index+4>>6:(h<65536?f[y++]=224|h>>>12:(f[y++]=240|h>>>18,f[y++]=128|h>>>12&63),f[y++]=128|h>>>6&63),f[y++]=128|63&h);return f},n.buf2binstring=function(d){return l(d,d.length)},n.binstring2buf=function(d){for(var f=new i.Buf8(d.length),h=0,g=f.length;h>10&1023,E[g++]=56320|1023&p)}return l(E,g)},n.utf8border=function(d,f){var h;for((f=f||d.length)>d.length&&(f=d.length),h=f-1;0<=h&&(192&d[h])==128;)h--;return h<0||h===0?f:h+o[d[h]]>f?h:f}},{"./common":41}],43:[function(t,s,n){s.exports=function(i,r,a,o){for(var c=65535&i|0,l=i>>>16&65535|0,d=0;a!==0;){for(a-=d=2e3>>1:r>>>1;a[o]=r}return a})();s.exports=function(r,a,o,c){var l=i,d=c+o;r^=-1;for(var f=c;f>>8^l[255&(r^a[f])];return-1^r}},{}],46:[function(t,s,n){var i,r=t("../utils/common"),a=t("./trees"),o=t("./adler32"),c=t("./crc32"),l=t("./messages"),d=0,f=4,h=0,g=-2,p=-1,y=4,v=2,E=8,x=9,C=286,T=30,R=19,F=2*C+1,M=15,B=3,q=258,tt=q+B+1,P=42,U=113,b=1,I=2,G=3,$=4;function Y(m,W){return m.msg=l[W],W}function z(m){return(m<<1)-(4m.avail_out&&(D=m.avail_out),D!==0&&(r.arraySet(m.output,W.pending_buf,W.pending_out,D,m.next_out),m.next_out+=D,W.pending_out+=D,m.total_out+=D,m.avail_out-=D,W.pending-=D,W.pending===0&&(W.pending_out=0))}function A(m,W){a._tr_flush_block(m,0<=m.block_start?m.block_start:-1,m.strstart-m.block_start,W),m.block_start=m.strstart,L(m.strm)}function Q(m,W){m.pending_buf[m.pending++]=W}function X(m,W){m.pending_buf[m.pending++]=W>>>8&255,m.pending_buf[m.pending++]=255&W}function Z(m,W){var D,S,k=m.max_chain_length,_=m.strstart,O=m.prev_length,j=m.nice_match,N=m.strstart>m.w_size-tt?m.strstart-(m.w_size-tt):0,H=m.window,J=m.w_mask,V=m.prev,et=m.strstart+q,at=H[_+O-1],st=H[_+O];m.prev_length>=m.good_match&&(k>>=2),j>m.lookahead&&(j=m.lookahead);do if(H[(D=W)+O]===st&&H[D+O-1]===at&&H[D]===H[_]&&H[++D]===H[_+1]){_+=2,D++;do;while(H[++_]===H[++D]&&H[++_]===H[++D]&&H[++_]===H[++D]&&H[++_]===H[++D]&&H[++_]===H[++D]&&H[++_]===H[++D]&&H[++_]===H[++D]&&H[++_]===H[++D]&&_N&&--k!=0);return O<=m.lookahead?O:m.lookahead}function lt(m){var W,D,S,k,_,O,j,N,H,J,V=m.w_size;do{if(k=m.window_size-m.lookahead-m.strstart,m.strstart>=V+(V-tt)){for(r.arraySet(m.window,m.window,V,V,0),m.match_start-=V,m.strstart-=V,m.block_start-=V,W=D=m.hash_size;S=m.head[--W],m.head[W]=V<=S?S-V:0,--D;);for(W=D=V;S=m.prev[--W],m.prev[W]=V<=S?S-V:0,--D;);k+=V}if(m.strm.avail_in===0)break;if(O=m.strm,j=m.window,N=m.strstart+m.lookahead,H=k,J=void 0,J=O.avail_in,H=B)for(_=m.strstart-m.insert,m.ins_h=m.window[_],m.ins_h=(m.ins_h<=B&&(m.ins_h=(m.ins_h<=B)if(S=a._tr_tally(m,m.strstart-m.match_start,m.match_length-B),m.lookahead-=m.match_length,m.match_length<=m.max_lazy_match&&m.lookahead>=B){for(m.match_length--;m.strstart++,m.ins_h=(m.ins_h<=B&&(m.ins_h=(m.ins_h<=B&&m.match_length<=m.prev_length){for(k=m.strstart+m.lookahead-B,S=a._tr_tally(m,m.strstart-1-m.prev_match,m.prev_length-B),m.lookahead-=m.prev_length-1,m.prev_length-=2;++m.strstart<=k&&(m.ins_h=(m.ins_h<m.pending_buf_size-5&&(D=m.pending_buf_size-5);;){if(m.lookahead<=1){if(lt(m),m.lookahead===0&&W===d)return b;if(m.lookahead===0)break}m.strstart+=m.lookahead,m.lookahead=0;var S=m.block_start+D;if((m.strstart===0||m.strstart>=S)&&(m.lookahead=m.strstart-S,m.strstart=S,A(m,!1),m.strm.avail_out===0)||m.strstart-m.block_start>=m.w_size-tt&&(A(m,!1),m.strm.avail_out===0))return b}return m.insert=0,W===f?(A(m,!0),m.strm.avail_out===0?G:$):(m.strstart>m.block_start&&(A(m,!1),m.strm.avail_out),b)}),new ct(4,4,8,4,mt),new ct(4,5,16,8,mt),new ct(4,6,32,32,mt),new ct(4,4,16,16,ot),new ct(8,16,32,32,ot),new ct(8,16,128,128,ot),new ct(8,32,128,256,ot),new ct(32,128,258,1024,ot),new ct(32,258,258,4096,ot)],n.deflateInit=function(m,W){return yt(m,W,E,15,8,0)},n.deflateInit2=yt,n.deflateReset=St,n.deflateResetKeep=dt,n.deflateSetHeader=function(m,W){return m&&m.state?m.state.wrap!==2?g:(m.state.gzhead=W,h):g},n.deflate=function(m,W){var D,S,k,_;if(!m||!m.state||5>8&255),Q(S,S.gzhead.time>>16&255),Q(S,S.gzhead.time>>24&255),Q(S,S.level===9?2:2<=S.strategy||S.level<2?4:0),Q(S,255&S.gzhead.os),S.gzhead.extra&&S.gzhead.extra.length&&(Q(S,255&S.gzhead.extra.length),Q(S,S.gzhead.extra.length>>8&255)),S.gzhead.hcrc&&(m.adler=c(m.adler,S.pending_buf,S.pending,0)),S.gzindex=0,S.status=69):(Q(S,0),Q(S,0),Q(S,0),Q(S,0),Q(S,0),Q(S,S.level===9?2:2<=S.strategy||S.level<2?4:0),Q(S,3),S.status=U);else{var O=E+(S.w_bits-8<<4)<<8;O|=(2<=S.strategy||S.level<2?0:S.level<6?1:S.level===6?2:3)<<6,S.strstart!==0&&(O|=32),O+=31-O%31,S.status=U,X(S,O),S.strstart!==0&&(X(S,m.adler>>>16),X(S,65535&m.adler)),m.adler=1}if(S.status===69)if(S.gzhead.extra){for(k=S.pending;S.gzindex<(65535&S.gzhead.extra.length)&&(S.pending!==S.pending_buf_size||(S.gzhead.hcrc&&S.pending>k&&(m.adler=c(m.adler,S.pending_buf,S.pending-k,k)),L(m),k=S.pending,S.pending!==S.pending_buf_size));)Q(S,255&S.gzhead.extra[S.gzindex]),S.gzindex++;S.gzhead.hcrc&&S.pending>k&&(m.adler=c(m.adler,S.pending_buf,S.pending-k,k)),S.gzindex===S.gzhead.extra.length&&(S.gzindex=0,S.status=73)}else S.status=73;if(S.status===73)if(S.gzhead.name){k=S.pending;do{if(S.pending===S.pending_buf_size&&(S.gzhead.hcrc&&S.pending>k&&(m.adler=c(m.adler,S.pending_buf,S.pending-k,k)),L(m),k=S.pending,S.pending===S.pending_buf_size)){_=1;break}_=S.gzindexk&&(m.adler=c(m.adler,S.pending_buf,S.pending-k,k)),_===0&&(S.gzindex=0,S.status=91)}else S.status=91;if(S.status===91)if(S.gzhead.comment){k=S.pending;do{if(S.pending===S.pending_buf_size&&(S.gzhead.hcrc&&S.pending>k&&(m.adler=c(m.adler,S.pending_buf,S.pending-k,k)),L(m),k=S.pending,S.pending===S.pending_buf_size)){_=1;break}_=S.gzindexk&&(m.adler=c(m.adler,S.pending_buf,S.pending-k,k)),_===0&&(S.status=103)}else S.status=103;if(S.status===103&&(S.gzhead.hcrc?(S.pending+2>S.pending_buf_size&&L(m),S.pending+2<=S.pending_buf_size&&(Q(S,255&m.adler),Q(S,m.adler>>8&255),m.adler=0,S.status=U)):S.status=U),S.pending!==0){if(L(m),m.avail_out===0)return S.last_flush=-1,h}else if(m.avail_in===0&&z(W)<=z(D)&&W!==f)return Y(m,-5);if(S.status===666&&m.avail_in!==0)return Y(m,-5);if(m.avail_in!==0||S.lookahead!==0||W!==d&&S.status!==666){var j=S.strategy===2?(function(N,H){for(var J;;){if(N.lookahead===0&&(lt(N),N.lookahead===0)){if(H===d)return b;break}if(N.match_length=0,J=a._tr_tally(N,0,N.window[N.strstart]),N.lookahead--,N.strstart++,J&&(A(N,!1),N.strm.avail_out===0))return b}return N.insert=0,H===f?(A(N,!0),N.strm.avail_out===0?G:$):N.last_lit&&(A(N,!1),N.strm.avail_out===0)?b:I})(S,W):S.strategy===3?(function(N,H){for(var J,V,et,at,st=N.window;;){if(N.lookahead<=q){if(lt(N),N.lookahead<=q&&H===d)return b;if(N.lookahead===0)break}if(N.match_length=0,N.lookahead>=B&&0N.lookahead&&(N.match_length=N.lookahead)}if(N.match_length>=B?(J=a._tr_tally(N,1,N.match_length-B),N.lookahead-=N.match_length,N.strstart+=N.match_length,N.match_length=0):(J=a._tr_tally(N,0,N.window[N.strstart]),N.lookahead--,N.strstart++),J&&(A(N,!1),N.strm.avail_out===0))return b}return N.insert=0,H===f?(A(N,!0),N.strm.avail_out===0?G:$):N.last_lit&&(A(N,!1),N.strm.avail_out===0)?b:I})(S,W):i[S.level].func(S,W);if(j!==G&&j!==$||(S.status=666),j===b||j===G)return m.avail_out===0&&(S.last_flush=-1),h;if(j===I&&(W===1?a._tr_align(S):W!==5&&(a._tr_stored_block(S,0,0,!1),W===3&&(K(S.head),S.lookahead===0&&(S.strstart=0,S.block_start=0,S.insert=0))),L(m),m.avail_out===0))return S.last_flush=-1,h}return W!==f?h:S.wrap<=0?1:(S.wrap===2?(Q(S,255&m.adler),Q(S,m.adler>>8&255),Q(S,m.adler>>16&255),Q(S,m.adler>>24&255),Q(S,255&m.total_in),Q(S,m.total_in>>8&255),Q(S,m.total_in>>16&255),Q(S,m.total_in>>24&255)):(X(S,m.adler>>>16),X(S,65535&m.adler)),L(m),0=D.w_size&&(_===0&&(K(D.head),D.strstart=0,D.block_start=0,D.insert=0),H=new r.Buf8(D.w_size),r.arraySet(H,W,J-D.w_size,D.w_size,0),W=H,J=D.w_size),O=m.avail_in,j=m.next_in,N=m.input,m.avail_in=J,m.next_in=0,m.input=W,lt(D);D.lookahead>=B;){for(S=D.strstart,k=D.lookahead-(B-1);D.ins_h=(D.ins_h<>>=B=M>>>24,x-=B,(B=M>>>16&255)===0)I[l++]=65535&M;else{if(!(16&B)){if((64&B)==0){M=C[(65535&M)+(E&(1<>>=B,x-=B),x<15&&(E+=b[o++]<>>=B=M>>>24,x-=B,!(16&(B=M>>>16&255))){if((64&B)==0){M=T[(65535&M)+(E&(1<>>=B,x-=B,(B=l-d)>3,E&=(1<<(x-=q<<3))-1,i.next_in=o,i.next_out=l,i.avail_in=o>>24&255)+(P>>>8&65280)+((65280&P)<<8)+((255&P)<<24)}function E(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function x(P){var U;return P&&P.state?(U=P.state,P.total_in=P.total_out=U.total=0,P.msg="",U.wrap&&(P.adler=1&U.wrap),U.mode=g,U.last=0,U.havedict=0,U.dmax=32768,U.head=null,U.hold=0,U.bits=0,U.lencode=U.lendyn=new i.Buf32(p),U.distcode=U.distdyn=new i.Buf32(y),U.sane=1,U.back=-1,f):h}function C(P){var U;return P&&P.state?((U=P.state).wsize=0,U.whave=0,U.wnext=0,x(P)):h}function T(P,U){var b,I;return P&&P.state?(I=P.state,U<0?(b=0,U=-U):(b=1+(U>>4),U<48&&(U&=15)),U&&(U<8||15=$.wsize?(i.arraySet($.window,U,b-$.wsize,$.wsize,0),$.wnext=0,$.whave=$.wsize):(I<(G=$.wsize-$.wnext)&&(G=I),i.arraySet($.window,U,b-I,G,$.wnext),(I-=G)?(i.arraySet($.window,U,b-I,I,0),$.wnext=I,$.whave=$.wsize):($.wnext+=G,$.wnext===$.wsize&&($.wnext=0),$.whave<$.wsize&&($.whave+=G))),0}n.inflateReset=C,n.inflateReset2=T,n.inflateResetKeep=x,n.inflateInit=function(P){return R(P,15)},n.inflateInit2=R,n.inflate=function(P,U){var b,I,G,$,Y,z,K,L,A,Q,X,Z,lt,mt,ot,ct,gt,dt,St,yt,m,W,D,S,k=0,_=new i.Buf8(4),O=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!P||!P.state||!P.output||!P.input&&P.avail_in!==0)return h;(b=P.state).mode===12&&(b.mode=13),Y=P.next_out,G=P.output,K=P.avail_out,$=P.next_in,I=P.input,z=P.avail_in,L=b.hold,A=b.bits,Q=z,X=K,W=f;t:for(;;)switch(b.mode){case g:if(b.wrap===0){b.mode=13;break}for(;A<16;){if(z===0)break t;z--,L+=I[$++]<>>8&255,b.check=a(b.check,_,2,0),A=L=0,b.mode=2;break}if(b.flags=0,b.head&&(b.head.done=!1),!(1&b.wrap)||(((255&L)<<8)+(L>>8))%31){P.msg="incorrect header check",b.mode=30;break}if((15&L)!=8){P.msg="unknown compression method",b.mode=30;break}if(A-=4,m=8+(15&(L>>>=4)),b.wbits===0)b.wbits=m;else if(m>b.wbits){P.msg="invalid window size",b.mode=30;break}b.dmax=1<>8&1),512&b.flags&&(_[0]=255&L,_[1]=L>>>8&255,b.check=a(b.check,_,2,0)),A=L=0,b.mode=3;case 3:for(;A<32;){if(z===0)break t;z--,L+=I[$++]<>>8&255,_[2]=L>>>16&255,_[3]=L>>>24&255,b.check=a(b.check,_,4,0)),A=L=0,b.mode=4;case 4:for(;A<16;){if(z===0)break t;z--,L+=I[$++]<>8),512&b.flags&&(_[0]=255&L,_[1]=L>>>8&255,b.check=a(b.check,_,2,0)),A=L=0,b.mode=5;case 5:if(1024&b.flags){for(;A<16;){if(z===0)break t;z--,L+=I[$++]<>>8&255,b.check=a(b.check,_,2,0)),A=L=0}else b.head&&(b.head.extra=null);b.mode=6;case 6:if(1024&b.flags&&(z<(Z=b.length)&&(Z=z),Z&&(b.head&&(m=b.head.extra_len-b.length,b.head.extra||(b.head.extra=new Array(b.head.extra_len)),i.arraySet(b.head.extra,I,$,Z,m)),512&b.flags&&(b.check=a(b.check,I,Z,$)),z-=Z,$+=Z,b.length-=Z),b.length))break t;b.length=0,b.mode=7;case 7:if(2048&b.flags){if(z===0)break t;for(Z=0;m=I[$+Z++],b.head&&m&&b.length<65536&&(b.head.name+=String.fromCharCode(m)),m&&Z>9&1,b.head.done=!0),P.adler=b.check=0,b.mode=12;break;case 10:for(;A<32;){if(z===0)break t;z--,L+=I[$++]<>>=7&A,A-=7&A,b.mode=27;break}for(;A<3;){if(z===0)break t;z--,L+=I[$++]<>>=1)){case 0:b.mode=14;break;case 1:if(q(b),b.mode=20,U!==6)break;L>>>=2,A-=2;break t;case 2:b.mode=17;break;case 3:P.msg="invalid block type",b.mode=30}L>>>=2,A-=2;break;case 14:for(L>>>=7&A,A-=7&A;A<32;){if(z===0)break t;z--,L+=I[$++]<>>16^65535)){P.msg="invalid stored block lengths",b.mode=30;break}if(b.length=65535&L,A=L=0,b.mode=15,U===6)break t;case 15:b.mode=16;case 16:if(Z=b.length){if(z>>=5,A-=5,b.ndist=1+(31&L),L>>>=5,A-=5,b.ncode=4+(15&L),L>>>=4,A-=4,286>>=3,A-=3}for(;b.have<19;)b.lens[O[b.have++]]=0;if(b.lencode=b.lendyn,b.lenbits=7,D={bits:b.lenbits},W=c(0,b.lens,0,19,b.lencode,0,b.work,D),b.lenbits=D.bits,W){P.msg="invalid code lengths set",b.mode=30;break}b.have=0,b.mode=19;case 19:for(;b.have>>16&255,gt=65535&k,!((ot=k>>>24)<=A);){if(z===0)break t;z--,L+=I[$++]<>>=ot,A-=ot,b.lens[b.have++]=gt;else{if(gt===16){for(S=ot+2;A>>=ot,A-=ot,b.have===0){P.msg="invalid bit length repeat",b.mode=30;break}m=b.lens[b.have-1],Z=3+(3&L),L>>>=2,A-=2}else if(gt===17){for(S=ot+3;A>>=ot)),L>>>=3,A-=3}else{for(S=ot+7;A>>=ot)),L>>>=7,A-=7}if(b.have+Z>b.nlen+b.ndist){P.msg="invalid bit length repeat",b.mode=30;break}for(;Z--;)b.lens[b.have++]=m}}if(b.mode===30)break;if(b.lens[256]===0){P.msg="invalid code -- missing end-of-block",b.mode=30;break}if(b.lenbits=9,D={bits:b.lenbits},W=c(l,b.lens,0,b.nlen,b.lencode,0,b.work,D),b.lenbits=D.bits,W){P.msg="invalid literal/lengths set",b.mode=30;break}if(b.distbits=6,b.distcode=b.distdyn,D={bits:b.distbits},W=c(d,b.lens,b.nlen,b.ndist,b.distcode,0,b.work,D),b.distbits=D.bits,W){P.msg="invalid distances set",b.mode=30;break}if(b.mode=20,U===6)break t;case 20:b.mode=21;case 21:if(6<=z&&258<=K){P.next_out=Y,P.avail_out=K,P.next_in=$,P.avail_in=z,b.hold=L,b.bits=A,o(P,X),Y=P.next_out,G=P.output,K=P.avail_out,$=P.next_in,I=P.input,z=P.avail_in,L=b.hold,A=b.bits,b.mode===12&&(b.back=-1);break}for(b.back=0;ct=(k=b.lencode[L&(1<>>16&255,gt=65535&k,!((ot=k>>>24)<=A);){if(z===0)break t;z--,L+=I[$++]<>dt)])>>>16&255,gt=65535&k,!(dt+(ot=k>>>24)<=A);){if(z===0)break t;z--,L+=I[$++]<>>=dt,A-=dt,b.back+=dt}if(L>>>=ot,A-=ot,b.back+=ot,b.length=gt,ct===0){b.mode=26;break}if(32&ct){b.back=-1,b.mode=12;break}if(64&ct){P.msg="invalid literal/length code",b.mode=30;break}b.extra=15&ct,b.mode=22;case 22:if(b.extra){for(S=b.extra;A>>=b.extra,A-=b.extra,b.back+=b.extra}b.was=b.length,b.mode=23;case 23:for(;ct=(k=b.distcode[L&(1<>>16&255,gt=65535&k,!((ot=k>>>24)<=A);){if(z===0)break t;z--,L+=I[$++]<>dt)])>>>16&255,gt=65535&k,!(dt+(ot=k>>>24)<=A);){if(z===0)break t;z--,L+=I[$++]<>>=dt,A-=dt,b.back+=dt}if(L>>>=ot,A-=ot,b.back+=ot,64&ct){P.msg="invalid distance code",b.mode=30;break}b.offset=gt,b.extra=15&ct,b.mode=24;case 24:if(b.extra){for(S=b.extra;A>>=b.extra,A-=b.extra,b.back+=b.extra}if(b.offset>b.dmax){P.msg="invalid distance too far back",b.mode=30;break}b.mode=25;case 25:if(K===0)break t;if(Z=X-K,b.offset>Z){if((Z=b.offset-Z)>b.whave&&b.sane){P.msg="invalid distance too far back",b.mode=30;break}lt=Z>b.wnext?(Z-=b.wnext,b.wsize-Z):b.wnext-Z,Z>b.length&&(Z=b.length),mt=b.window}else mt=G,lt=Y-b.offset,Z=b.length;for(KF?(B=lt[mt+y[U]],A[Q+y[U]]):(B=96,0),E=1<>Y)+(x-=E)]=M<<24|B<<16|q|0,x!==0;);for(E=1<>=1;if(E!==0?(L&=E-1,L+=E):L=0,U++,--X[P]==0){if(P===I)break;P=d[f+y[U]]}if(G>>7)]}function Q(k,_){k.pending_buf[k.pending++]=255&_,k.pending_buf[k.pending++]=_>>>8&255}function X(k,_,O){k.bi_valid>v-O?(k.bi_buf|=_<>v-k.bi_valid,k.bi_valid+=O-v):(k.bi_buf|=_<>>=1,O<<=1,0<--_;);return O>>>1}function mt(k,_,O){var j,N,H=new Array(y+1),J=0;for(j=1;j<=y;j++)H[j]=J=J+O[j-1]<<1;for(N=0;N<=_;N++){var V=k[2*N+1];V!==0&&(k[2*N]=lt(H[V]++,V))}}function ot(k){var _;for(_=0;_>1;1<=O;O--)dt(k,H,O);for(N=et;O=k.heap[1],k.heap[1]=k.heap[k.heap_len--],dt(k,H,1),j=k.heap[1],k.heap[--k.heap_max]=O,k.heap[--k.heap_max]=j,H[2*N]=H[2*O]+H[2*j],k.depth[N]=(k.depth[O]>=k.depth[j]?k.depth[O]:k.depth[j])+1,H[2*O+1]=H[2*j+1]=N,k.heap[1]=N++,dt(k,H,1),2<=k.heap_len;);k.heap[--k.heap_max]=k.heap[1],(function(st,pt){var bt,ht,ft,it,It,Mt,_t=pt.dyn_tree,Zs=pt.max_code,Ri=pt.stat_desc.static_tree,Li=pt.stat_desc.has_stree,Mi=pt.stat_desc.extra_bits,Gs=pt.stat_desc.extra_base,zt=pt.stat_desc.max_length,Xt=0;for(it=0;it<=y;it++)st.bl_count[it]=0;for(_t[2*st.heap[st.heap_max]+1]=0,bt=st.heap_max+1;bt>=7;N>>=1)if(1&at&&V.dyn_ltree[2*et]!==0)return r;if(V.dyn_ltree[18]!==0||V.dyn_ltree[20]!==0||V.dyn_ltree[26]!==0)return a;for(et=32;et>>3,(H=k.static_len+3+7>>>3)<=N&&(N=H)):N=H=O+5,O+4<=N&&_!==-1?S(k,_,O,j):k.strategy===4||H===N?(X(k,2+(j?1:0),3),St(k,tt,P)):(X(k,4+(j?1:0),3),(function(V,et,at,st){var pt;for(X(V,et-257,5),X(V,at-1,5),X(V,st-4,4),pt=0;pt>>8&255,k.pending_buf[k.d_buf+2*k.last_lit+1]=255&_,k.pending_buf[k.l_buf+k.last_lit]=255&O,k.last_lit++,_===0?k.dyn_ltree[2*O]++:(k.matches++,_--,k.dyn_ltree[2*(b[O]+d+1)]++,k.dyn_dtree[2*A(_)]++),k.last_lit===k.lit_bufsize-1},n._tr_align=function(k){X(k,2,3),Z(k,x,tt),(function(_){_.bi_valid===16?(Q(_,_.bi_buf),_.bi_buf=0,_.bi_valid=0):8<=_.bi_valid&&(_.pending_buf[_.pending++]=255&_.bi_buf,_.bi_buf>>=8,_.bi_valid-=8)})(k)}},{"../utils/common":41}],53:[function(t,s,n){s.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(t,s,n){(function(i){(function(r,a){if(!r.setImmediate){var o,c,l,d,f=1,h={},g=!1,p=r.document,y=Object.getPrototypeOf&&Object.getPrototypeOf(r);y=y&&y.setTimeout?y:r,o={}.toString.call(r.process)==="[object process]"?function(C){process.nextTick(function(){E(C)})}:(function(){if(r.postMessage&&!r.importScripts){var C=!0,T=r.onmessage;return r.onmessage=function(){C=!1},r.postMessage("","*"),r.onmessage=T,C}})()?(d="setImmediate$"+Math.random()+"$",r.addEventListener?r.addEventListener("message",x,!1):r.attachEvent("onmessage",x),function(C){r.postMessage(d+C,"*")}):r.MessageChannel?((l=new MessageChannel).port1.onmessage=function(C){E(C.data)},function(C){l.port2.postMessage(C)}):p&&"onreadystatechange"in p.createElement("script")?(c=p.documentElement,function(C){var T=p.createElement("script");T.onreadystatechange=function(){E(C),T.onreadystatechange=null,c.removeChild(T),T=null},c.appendChild(T)}):function(C){setTimeout(E,0,C)},y.setImmediate=function(C){typeof C!="function"&&(C=new Function(""+C));for(var T=new Array(arguments.length-1),R=0;R"u"?i===void 0?this:i:self)}).call(this,typeof te<"u"?te:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})})(vs)),vs.exports}var Kn=ua();class de{constructor(e,t,s){this.downloadUrl=e,this.sha256=t,this.proxyService=s}request(e){return this.proxyService?this.proxyService.request(e):w.requestUrl(e)}async download(e){const t=await this.downloadRelease(e);return this.sha256&&await this.verifyChecksum(t),t}async extract(e,t){return await this.extractZip(e,t)}async downloadFiles(e,t){const s=new Map;for(let n=0;n1){const d=l.slice(1).join("/");n[d]=c}}r++,e({phase:"extract",progress:r,total:i.length})}return n}async downloadRelease(e){e({phase:"download",progress:0,total:100});try{if(this.proxyService){if(!this.proxyService.isServiceActivated()&&!await this.proxyService.activate())throw new Error("Failed to activate license for download");const s=(await this.request({url:this.downloadUrl,method:"HEAD"})).headers["content-length"],n=s?parseInt(s,10):100;let i=0,r=!0,a=null;(()=>{const l=Math.floor(n*.95),d=1e4,f=100,h=d/f,g=l/h;let p=0;a=setInterval(()=>{if(!r||p>=h){a&&clearInterval(a);return}p++;const y=Math.min(Math.floor(p*g),l);y>i&&(i=y,e({phase:"download",progress:i,total:n}))},f)})();const c=await this.request({url:this.downloadUrl,method:"GET"});if(r=!1,a&&clearInterval(a),c.status!==200)throw new Error(`Download failed with status: ${c.status}`);return e({phase:"download",progress:100,total:100}),c.arrayBuffer}else{const s=(await this.request({url:this.downloadUrl,method:"HEAD"})).headers["content-length"],n=s?parseInt(s,10):100;let i=0,r=!0,a=null;(()=>{const l=Math.floor(n*.95),d=1e4,f=100,h=d/f,g=l/h;let p=0;a=setInterval(()=>{if(!r||p>=h){a&&clearInterval(a);return}p++;const y=Math.min(Math.floor(p*g),l);y>i&&(i=y,e({phase:"download",progress:i,total:n}))},f)})();const c=await this.request({url:this.downloadUrl,method:"GET"});if(r=!1,a&&clearInterval(a),c.status!==200)throw new Error(`Download failed with status: ${c.status}`);return e({phase:"download",progress:100,total:100}),c.arrayBuffer}}catch{const s=await this.request({url:this.downloadUrl,method:"GET"});if(s.status!==200)throw new Error(`Download failed with status: ${s.status}`);return e({phase:"download",progress:100,total:100}),s.arrayBuffer}}async verifyChecksum(e){if(!this.sha256)return;if(await this.calculateSHA256(e)!==this.sha256)throw new Error("Checksum verification failed")}async calculateSHA256(e){const t=await crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(t)).map(n=>n.toString(16).padStart(2,"0")).join("")}async extractZip(e,t){const s=await Kn.loadAsync(e),n=new Map,i=Object.keys(s.files).length;let r=0,a="";const o=Object.keys(s.files),c=o[0];if(c&&c.includes("/")){const l=c.split("/")[0]+"/";o.every(d=>d===l||d.startsWith(l))&&(a=l)}for(const[l,d]of Object.entries(s.files)){if(!d.dir){t({phase:"extract",progress:r,total:i,currentFile:l});const f=await d.async("arraybuffer"),h=a&&l.startsWith(a)?l.slice(a.length):l;n.set(h,f)}r++}return t({phase:"extract",progress:i,total:i}),n}}function Tt(){}Tt.prototype={diff:function(e,t){var s,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=n.callback;typeof n=="function"&&(i=n,n={});var r=this;function a(C){return C=r.postProcess(C,n),i?(setTimeout(function(){i(C)},0),!0):C}e=this.castInput(e,n),t=this.castInput(t,n),e=this.removeEmpty(this.tokenize(e,n)),t=this.removeEmpty(this.tokenize(t,n));var o=t.length,c=e.length,l=1,d=o+c;n.maxEditLength!=null&&(d=Math.min(d,n.maxEditLength));var f=(s=n.timeout)!==null&&s!==void 0?s:1/0,h=Date.now()+f,g=[{oldPos:-1,lastComponent:void 0}],p=this.extractCommon(g[0],t,e,0,n);if(g[0].oldPos+1>=c&&p+1>=o)return a(Xn(r,g[0].lastComponent,t,e,r.useLongestToken));var y=-1/0,v=1/0;function E(){for(var C=Math.max(y,-l);C<=Math.min(v,l);C+=2){var T=void 0,R=g[C-1],F=g[C+1];R&&(g[C-1]=void 0);var M=!1;if(F){var B=F.oldPos-C;M=F&&0<=B&&B=c&&p+1>=o)return a(Xn(r,T.lastComponent,t,e,r.useLongestToken));g[C]=T,T.oldPos+1>=c&&(v=Math.min(v,C-1)),p+1>=o&&(y=Math.max(y,C+1))}l++}if(i)(function C(){setTimeout(function(){if(l>d||Date.now()>h)return i();E()||C()},0)})();else for(;l<=d&&Date.now()<=h;){var x=E();if(x)return x}},addToPath:function(e,t,s,n,i){var r=e.lastComponent;return r&&!i.oneChangePerToken&&r.added===t&&r.removed===s?{oldPos:e.oldPos+n,lastComponent:{count:r.count+1,added:t,removed:s,previousComponent:r.previousComponent}}:{oldPos:e.oldPos+n,lastComponent:{count:1,added:t,removed:s,previousComponent:r}}},extractCommon:function(e,t,s,n,i){for(var r=t.length,a=s.length,o=e.oldPos,c=o-n,l=0;c+1h.length?p:h}),d.value=u.join(f)}else d.value=u.join(t.slice(c,c+d.count));c+=d.count,d.added||(l+=d.count)}}return i}function Jn(u,e){var t;for(t=0;te.length&&(t=u.length-e.length);var s=e.length;u.length0&&e[r]!=e[i];)i=n[i];e[r]==e[i]&&i++}i=0;for(var a=t;a0&&u[a]!=e[i];)i=n[i];u[a]==e[i]&&i++}return i}var he="a-zA-Z0-9_\\u{C0}-\\u{FF}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}",ha=new RegExp("[".concat(he,"]+|\\s+|[^").concat(he,"]"),"ug"),ye=new Tt;ye.equals=function(u,e,t){return t.ignoreCase&&(u=u.toLowerCase(),e=e.toLowerCase()),u.trim()===e.trim()};ye.tokenize=function(u){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t;if(e.intlSegmenter){if(e.intlSegmenter.resolvedOptions().granularity!="word")throw new Error('The segmenter passed must have a granularity of "word"');t=Array.from(e.intlSegmenter.segment(u),function(i){return i.segment})}else t=u.match(ha)||[];var s=[],n=null;return t.forEach(function(i){/\s/.test(i)?n==null?s.push(i):s.push(s.pop()+i):/\s/.test(n)?s[s.length-1]==n?s.push(s.pop()+i):s.push(n+i):s.push(i),n=i}),s};ye.join=function(u){return u.map(function(e,t){return t==0?e:e.replace(/^\s+/,"")}).join("")};ye.postProcess=function(u,e){if(!u||e.oneChangePerToken)return u;var t=null,s=null,n=null;return u.forEach(function(i){i.added?s=i:i.removed?n=i:((s||n)&&ei(t,n,s,i),t=i,s=null,n=null)}),(s||n)&&ei(t,n,s,null),u};function ei(u,e,t,s){if(e&&t){var n=e.value.match(/^\s*/)[0],i=e.value.match(/\s*$/)[0],r=t.value.match(/^\s*/)[0],a=t.value.match(/\s*$/)[0];if(u){var o=Jn(n,r);u.value=_s(u.value,r,o),e.value=jt(e.value,o),t.value=jt(t.value,o)}if(s){var c=Qn(i,a);s.value=Ts(s.value,a,c),e.value=re(e.value,c),t.value=re(t.value,c)}}else if(t)u&&(t.value=t.value.replace(/^\s*/,"")),s&&(s.value=s.value.replace(/^\s*/,""));else if(u&&s){var l=s.value.match(/^\s*/)[0],d=e.value.match(/^\s*/)[0],f=e.value.match(/\s*$/)[0],h=Jn(l,d);e.value=jt(e.value,h);var g=Qn(jt(l,h),f);e.value=re(e.value,g),s.value=Ts(s.value,l,g),u.value=_s(u.value,l,l.slice(0,l.length-g.length))}else if(s){var p=s.value.match(/^\s*/)[0],y=e.value.match(/\s*$/)[0],v=ti(y,p);e.value=re(e.value,v)}else if(u){var E=u.value.match(/\s*$/)[0],x=e.value.match(/^\s*/)[0],C=ti(E,x);e.value=jt(e.value,C)}}var pa=new Tt;pa.tokenize=function(u){var e=new RegExp("(\\r?\\n)|[".concat(he,"]+|[^\\S\\n\\r]+|[^").concat(he,"]"),"ug");return u.match(e)||[]};var Se=new Tt;Se.tokenize=function(u,e){e.stripTrailingCr&&(u=u.replace(/\r\n/g,` +`));var t=[],s=u.split(/(\n|\r\n)/);s[s.length-1]||s.pop();for(var n=0;n"u"?t:r}:s;return typeof u=="string"?u:JSON.stringify(Is(u,null,null,n),n," ")};Zt.equals=function(u,e,t){return Tt.prototype.equals.call(Zt,u.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"),t)};function Is(u,e,t,s,n){e=e||[],t=t||[],s&&(u=s(n,u));var i;for(i=0;i0&&this.conflicts[0].incoming instanceof ArrayBuffer)){this.conflicts=[],this.operations=[],this.resolutions={},this.renderContent();return}this.resolutions=Object.fromEntries(this.conflicts.map(n=>[n.path,"keep_current"])),this.selectedFile=null,this.renderContent()}async onClose(){this.resizeObserver?.disconnect(),this.resizeObserver=null,this.detailEl=null,this.containerEl.empty()}setResolution(e,t){this.resolutions[e]=t,this.updateRadioStates(e)}setCategoryResolutions(e,t){const s=this.getCategorizedFiles()[e];for(const n of s)this.resolutions[n.path]=t,this.updateRadioStates(n.path)}updateRadioStates(e){if(this.selectedFile===e&&this.detailEl){const n=this.detailEl.querySelectorAll('input[type="radio"]'),i=this.resolutions[e]==="apply_update";n[0]&&(n[0].checked=!i),n[1]&&(n[1].checked=i)}const s=this.containerEl.querySelector(`.conflict-file-item[data-path="${CSS.escape(e)}"]`)?.querySelector(".conflict-resolution-indicator");s&&(s.dataset.resolution=this.resolutions[e])}selectFile(e){const t=this.selectedFile;this.selectedFile=t===e?null:e,t&&this.containerEl.querySelector(`.conflict-file-item[data-path="${CSS.escape(t)}"]`)?.removeClass("is-active"),this.selectedFile&&this.containerEl.querySelector(`.conflict-file-item[data-path="${CSS.escape(this.selectedFile)}"]`)?.addClass("is-active"),this.renderDetailPanel()}getCategorizedFiles(){const e=this.conflicts.filter(s=>!s.current||s.current.byteLength===0),t=this.conflicts.filter(s=>s.current&&s.current.byteLength>0);return{new:e,updated:t.filter(s=>s.currentHash!==s.incomingHash),unchanged:t.filter(s=>s.currentHash===s.incomingHash)}}getFileCategory(e){return!e.current||e.current.byteLength===0?"new":e.currentHash!==e.incomingHash?"updated":"unchanged"}renderContent(){const{containerEl:e}=this;this.resizeObserver?.disconnect(),e.empty();const t=e.createDiv({cls:"conflict-view"});if(this.conflicts.length===0){t.createEl("h2",{text:"No Update Data"}),t.createDiv({cls:"conflict-view-description",text:"This view has no update data. Please trigger a new update to review changes."});const l=t.createDiv({cls:"conflict-view-footer"}).createEl("button",{text:"Close"});this.registerDomEvent(l,"click",()=>this.leaf.detach());return}t.createEl("h2",{text:"Update Confirmation"}),t.createDiv({cls:"conflict-view-description",text:"Please review the changes that will be applied:"});const s=t.createDiv({cls:"conflict-view-body"}),n=s.createDiv({cls:"conflict-view-sidebar"});this.detailEl=s.createDiv({cls:"conflict-view-detail"});const i=this.getCategorizedFiles();i.new.length>0&&this.renderSection(n,"new",i.new,"New Files",{keepLabel:"Skip",applyLabel:"Create File",bulkKeep:"Skip All",bulkApply:"Create All"}),i.updated.length>0&&this.renderSection(n,"updated",i.updated,"Modified Files",{keepLabel:"Keep Current",applyLabel:"Apply Update",bulkKeep:"Keep All Current",bulkApply:"Apply All Updates"}),i.unchanged.length>0&&this.renderSection(n,"unchanged",i.unchanged,"Unchanged Files",{keepLabel:"Skip",applyLabel:"Keep Unchanged",bulkKeep:"Skip All",bulkApply:"Keep All Unchanged"}),this.renderDetailPanel(),this.resizeObserver=new ResizeObserver(c=>{const d=(c[0]?.contentRect.width??0)>=ma?"split":"inline";d!==this.diffMode&&(this.diffMode=d,this.renderDetailPanel())}),this.resizeObserver.observe(this.detailEl);const r=t.createDiv({cls:"conflict-view-footer"}),a=r.createEl("button",{cls:"mod-cta",text:"Apply Selected Files"}),o=r.createEl("button",{text:"Cancel"});this.registerDomEvent(a,"click",()=>{this.leaf.view.app.workspace.trigger("ppb:trigger-update",{resolutions:this.resolutions,operations:this.operations}),this.leaf.detach()}),this.registerDomEvent(o,"click",()=>this.leaf.detach())}renderSection(e,t,s,n,i){const r=e.createDiv({cls:"conflict-view-section"});r.createEl("h3",{text:`${n} (${s.length})`});const a=r.createDiv({cls:"conflict-category-actions"}),o=a.createEl("button",{cls:"conflict-select-all",text:i.bulkKeep}),c=a.createEl("button",{cls:"conflict-select-all",text:i.bulkApply});this.registerDomEvent(o,"click",()=>this.setCategoryResolutions(t,"keep_current")),this.registerDomEvent(c,"click",()=>this.setCategoryResolutions(t,"apply_update"));const l=r.createDiv({cls:"conflict-view-files"});for(const d of s)this.renderFileItem(l,d,t)}renderFileItem(e,t,s){const n=e.createDiv({cls:"conflict-file-item"});n.dataset.path=t.path,n.dataset.category=s;const i=n.createDiv({cls:"conflict-file-header"}),r=i.createEl("span",{cls:"conflict-resolution-indicator"});r.dataset.resolution=this.resolutions[t.path],i.createEl("span",{cls:"conflict-file-path",text:t.path}),this.registerDomEvent(i,"click",()=>{this.selectFile(t.path)})}getLabelsForCategory(e){switch(e){case"new":return{keepLabel:"Skip",applyLabel:"Create File"};case"updated":return{keepLabel:"Keep Current",applyLabel:"Apply Update"};case"unchanged":return{keepLabel:"Skip",applyLabel:"Keep Unchanged"}}}renderDetailPanel(){if(!this.detailEl)return;if(this.detailEl.empty(),!this.selectedFile){this.detailEl.createDiv({cls:"conflict-view-detail-empty",text:"Select a file to view details"});return}const e=this.conflicts.find(l=>l.path===this.selectedFile);if(!e)return;const t=this.getFileCategory(e),s=this.getLabelsForCategory(t),n=this.detailEl.createDiv({cls:"conflict-view-detail-header"});n.createEl("span",{cls:"conflict-view-detail-path",text:e.path});const i=n.createDiv({cls:"conflict-view-detail-actions"}),r=i.createEl("label",{cls:"conflict-resolution-label"}),a=r.createEl("input");a.type="radio",a.name="detail-resolution",a.checked=this.resolutions[e.path]==="keep_current",r.appendText(s.keepLabel);const o=i.createEl("label",{cls:"conflict-resolution-label"}),c=o.createEl("input");if(c.type="radio",c.name="detail-resolution",c.checked=this.resolutions[e.path]==="apply_update",o.appendText(s.applyLabel),this.registerDomEvent(a,"change",()=>{this.setResolution(e.path,"keep_current")}),this.registerDomEvent(c,"change",()=>{this.setResolution(e.path,"apply_update")}),t==="updated"){const l=this.detailEl.createDiv({cls:"conflict-diff"});this.diffMode==="split"?this.renderDiffSplit(l,e):this.renderDiffInline(l,e)}else{const l=this.detailEl.createDiv({cls:"conflict-file-preview"});this.renderPreview(l,e)}}renderDiffInline(e,t){if(!this.isTextFile(t.current)){e.createDiv({cls:"binary-file-notice",text:"Binary file, diff not available"});return}try{const s=new TextDecoder().decode(t.current),n=new TextDecoder().decode(t.incoming),i=si(s,n),r=e.createEl("table",{cls:"diff"}),a=r.createEl("colgroup");a.createEl("col",{cls:"diff-gutter-col"}),a.createEl("col");const o=r.createEl("tbody");let c=1,l=1;for(const d of i){const f=d.value.replace(/\n$/,"").split(` +`);for(const h of f){const g=o.createEl("tr",{cls:"diff-line"});d.removed?(g.createEl("td",{cls:"diff-gutter diff-gutter-delete",text:String(c++)}),g.createEl("td",{cls:"diff-code diff-code-delete",text:h})):d.added?(g.createEl("td",{cls:"diff-gutter diff-gutter-insert",text:String(l++)}),g.createEl("td",{cls:"diff-code diff-code-insert",text:h})):(g.createEl("td",{cls:"diff-gutter",text:String(c++)}),g.createEl("td",{cls:"diff-code",text:h}),l++)}}}catch(s){console.error("Error generating diff:",s),e.createDiv({text:"Error generating diff"})}}renderDiffSplit(e,t){if(!this.isTextFile(t.current)){e.createDiv({cls:"binary-file-notice",text:"Binary file, diff not available"});return}try{const s=new TextDecoder().decode(t.current),n=new TextDecoder().decode(t.incoming),i=si(s,n),r=e.createEl("table",{cls:"diff diff-split"}),a=r.createEl("colgroup");a.createEl("col",{cls:"diff-gutter-col"}),a.createEl("col"),a.createEl("col",{cls:"diff-gutter-col"}),a.createEl("col");const o=r.createEl("tbody");let c=1,l=1;const d=this.groupChangesForSplit(i);for(const f of d)if(f.type==="unchanged"){const h=f.lines;for(const g of h){const p=o.createEl("tr",{cls:"diff-line"});p.createEl("td",{cls:"diff-gutter",text:String(c++)}),p.createEl("td",{cls:"diff-code",text:g}),p.createEl("td",{cls:"diff-gutter",text:String(l++)}),p.createEl("td",{cls:"diff-code",text:g})}}else if(f.type==="paired"){const h=Math.max(f.removed.length,f.added.length);for(let g=0;g1e3?"...":"");e.createEl("pre",{text:n})}isTextFile(e){try{const t=new TextDecoder().decode(e);return!t.includes("\0")&&t.length>0}catch{return!1}}}class ni extends w.Component{constructor(e,t,s,n,i=[],r={},a={},o={},c){super(),this.latestManifest=null,this.pendingOperations=[],this.manager=e,this.targetPluginId=c,this.app=t,this.vault=s,this.backupDir=n,this.excludePatterns=i,this.customReplacements=r,this.obsidianConflictHandling=a,this.updateScope={regularFiles:!0,obsidianCore:!0,plugins:!0,themes:!0,snippets:!0,pluginData:!1,...o},this.downloadZipPath=".paperbell_update.zip"}listenToEvents(e,t,s,n){this.registerEvent(this.app.workspace.on("ppb:trigger-update",async i=>{const r=i.operations||[],a=i.resolutions||{},o=[];let c=0;const l=r.filter(d=>a[d.path]==="apply_update");for(const d of l)this.shouldExclude(d.path)||(this.app.workspace.trigger("ppb:update-progress",{phase:"apply",progress:c,total:l.length,currentFile:w.normalizePath(d.path)}),await this.applyOperation(d),o.push(w.normalizePath(d.path)),c++);this.app.workspace.trigger("ppb:update-progress",{phase:"apply",progress:l.length,total:l.length}),this.app.workspace.trigger("ppb:update-complete",{success:!0,updatedFilePaths:o,version:this.latestManifest?.version||this.manager.lastUpdateInfo?.latestVersion}),await this.cleanupDownloadedFiles()})),this.registerEvent(this.app.workspace.on("ppb:update-complete",i=>{if(i.success){const r={minAppVersion:i.version};if(r?.minAppVersion){if(t.updateConfig({minAppVersion:r.minAppVersion}),s&&s.settings)try{s.settings.updater||(s.settings.updater={repository:t.getRepository()}),s.settings.updater.minAppVersion=r.minAppVersion,s.saveSettings()}catch(a){console.warn("Could not update plugin settings after update",a)}e.setText(`Updated to ${i.version} successfully!`)}}})),this.registerEvent(this.app.workspace.on("ppb:update-progress",i=>{n&&n(i)}))}async saveDownloadedZip(e){await this.vault.adapter.writeBinary(w.normalizePath(this.downloadZipPath),e)}async loadDownloadedZip(){return await this.vault.adapter.exists(this.downloadZipPath)?await this.vault.adapter.readBinary(this.downloadZipPath):null}async cleanupDownloadedFiles(){await this.vault.adapter.exists(this.downloadZipPath)&&await this.vault.adapter.remove(this.downloadZipPath)}async parseReleaseContents(e){const t={manifest:null,changelog:null,regularFiles:new Map,obsidianFiles:{core:new Map,snippets:new Map,plugins:new Map,themes:new Map}};let s="";const n=Array.from(e.keys());if(n.length>0){const i=n[0];if(i.includes("/")){const r=i.split("/")[0]+"/";n.every(a=>a===r||a.startsWith(r))&&(s=r)}}for(const[i,r]of e.entries()){let a=s&&i.startsWith(s)?i.substring(s.length):i;if(a=w.normalizePath(a),a==="manifest.json"){t.manifest=r,this.latestManifest=this.parseJsonFromArrayBuffer(r);continue}if(a==="changelog.md"){t.changelog=r;continue}if(a.startsWith(".obsidian/")){this.processObsidianFile(a,r,t);continue}t.regularFiles.set(a,r)}return this.normalizeRootPluginRelease(t)}normalizeRootPluginRelease(e){if(!this.targetPluginId||this.latestManifest?.id!==this.targetPluginId)return e;e.manifest&&e.obsidianFiles.plugins.set(`${this.targetPluginId}/manifest.json`,e.manifest),e.changelog&&e.obsidianFiles.plugins.set(`${this.targetPluginId}/changelog.md`,e.changelog);for(const[t,s]of e.regularFiles.entries())e.obsidianFiles.plugins.set(`${this.targetPluginId}/${t}`,s);return e.manifest=null,e.changelog=null,e.regularFiles.clear(),e}processObsidianFile(e,t,s){const n=e.split("/");if(n.length<2)return;const i=n[1],r=n.slice(2).join("/");if(n.length===2&&n[1].endsWith(".json")){s.obsidianFiles.core||(s.obsidianFiles.core=new Map),s.obsidianFiles.core.set(n[1],t);return}switch(i){case"snippets":s.obsidianFiles.snippets.set(r,t);break;case"plugins":s.obsidianFiles.plugins.set(r,t);break;case"themes":s.obsidianFiles.themes.set(r,t);break;default:s.regularFiles.set(e,t)}}async comparePlugins(e){if(this.updateScope.plugins===!1)return new Map;const t=new Map,s=new Map;for(const[n,i]of e.obsidianFiles.plugins.entries()){const r=n.split("/");if(r.length===0)continue;const a=r[0],o=r.slice(1).join("/");s.has(a)||s.set(a,new Map),s.get(a).set(o,i)}for(const[n,i]of s.entries()){if(n===this.getCurrentPluginName()||n===this.targetPluginId){for(const[a,o]of i.entries())a==="data.json"&&this.updateScope.pluginData!==!0||t.set(`.obsidian/plugins/${n}/${a}`,{type:"update",path:`.obsidian/plugins/${n}/${a}`,content:o});continue}if(!i.has("manifest.json"))continue;const r=`.obsidian/plugins/${n}/manifest.json`;if(await this.vault.adapter.exists(w.normalizePath(r))){const a=await this.vault.adapter.readBinary(w.normalizePath(r)),o=this.parseJsonFromArrayBuffer(a),c=this.parseJsonFromArrayBuffer(i.get("manifest.json"));if(!o.version||!c.version||this.compareVersions(c.version,o.version)>0)for(const[l,d]of i.entries())l==="data.json"&&this.updateScope.pluginData!==!0||t.set(`.obsidian/plugins/${n}/${l}`,{type:"update",path:`.obsidian/plugins/${n}/${l}`,content:d})}else for(const[a,o]of i.entries())a==="data.json"&&this.updateScope.pluginData!==!0||t.set(`.obsidian/plugins/${n}/${a}`,{type:"add",path:`.obsidian/plugins/${n}/${a}`,content:o})}return t}async compareThemes(e){if(this.updateScope.themes===!1)return new Map;const t=new Map,s=new Map;for(const[n,i]of e.obsidianFiles.themes.entries()){const r=n.split("/");if(r.length===0)continue;const a=r[0],o=r.slice(1).join("/");s.has(a)||s.set(a,new Map),s.get(a).set(o,i)}for(const[n,i]of s.entries()){if(!i.has("manifest.json")){for(const[a,o]of i.entries())t.set(`.obsidian/themes/${n}/${a}`,{type:"update",path:`.obsidian/themes/${n}/${a}`,content:o});continue}const r=`.obsidian/themes/${n}/manifest.json`;if(await this.vault.adapter.exists(w.normalizePath(r))){const a=await this.vault.adapter.readBinary(w.normalizePath(r)),o=this.parseJsonFromArrayBuffer(a),c=this.parseJsonFromArrayBuffer(i.get("manifest.json"));if(!o.version||!c.version||this.compareVersions(c.version,o.version)>0)for(const[l,d]of i.entries())t.set(`.obsidian/themes/${n}/${l}`,{type:"update",path:`.obsidian/themes/${n}/${l}`,content:d})}else for(const[a,o]of i.entries())t.set(`.obsidian/themes/${n}/${a}`,{type:"add",path:`.obsidian/themes/${n}/${a}`,content:o})}return t}parseJsonFromArrayBuffer(e){try{const s=new TextDecoder().decode(e);return JSON.parse(s)}catch(t){return console.warn("Failed to parse JSON from buffer",t),{}}}compareVersions(e,t){const s=e.split(".").map(i=>parseInt(i.replace(/[^0-9]/g,""),10)),n=t.split(".").map(i=>parseInt(i.replace(/[^0-9]/g,""),10));for(;s.lengtha)return 1}return 0}getCurrentPluginName(){try{const e=this.app;if(e.plugins?.manifests){for(const t in e.plugins.manifests)if(t.toLowerCase().includes("paperbell"))return t}if(e.plugins?.plugins?.paperbell?.manifest?.id)return e.plugins.plugins.paperbell.manifest.id}catch(e){console.warn("Could not determine current plugin name",e)}return"paperbell-pro"}areBuffersEqual(e,t){if(e.byteLength!==t.byteLength)return!1;const s=new Uint8Array(e),n=new Uint8Array(t);for(let i=0;ithis.getConflictHandlingForPath(c.path)!=="no_merge"),this.setPendingOperations(e);const s=await this.createBackupWithHash(e.map(c=>c.path),t),n=await this.detectConflicts(e,s),i=[],r=[],a=[];for(const c of e){const l=n.find(h=>h.path===c.path),d=await this.vault.adapter.exists(w.normalizePath(c.path)),f=l?{...l,category:l.currentHash===l.incomingHash?"unchanged":"update"}:{path:c.path,current:d?await this.vault.adapter.readBinary(w.normalizePath(c.path)):new ArrayBuffer(0),incoming:c.content||new ArrayBuffer(0),currentHash:d?this.hashContent(await this.vault.adapter.readBinary(w.normalizePath(c.path))):"",incomingHash:c.content?this.hashContent(c.content):"",category:!d||c.type==="add"?"new":"unchanged"};c.type==="add"||!d?(f.category="new",i.push(f)):l&&l.currentHash!==l.incomingHash?(f.category="update",r.push(f)):(f.category="unchanged",a.push(f))}const o=[...i,...r,...a];return await this.showConflictView(o),[]}catch(s){throw await this.restoreBackup(t),s}}async createBackupWithHash(e,t){const s=new Map;t({phase:"backup",progress:0,total:e.length});for(let n=0;n{if(i)try{const a=new RegExp(i,"g");s=s.replace(a,r)}catch(a){console.warn(`Invalid replacement pattern: ${i}`,a)}}),new TextEncoder().encode(s).buffer}async detectConflicts(e,t){const s=[];for(const n of e){if(n.type==="delete")continue;const i=await this.vault.adapter.exists(w.normalizePath(n.path)),r=this.getConflictHandlingForPath(n.path);if(r==="ignore"||r==="no_merge")continue;if(!i){s.push({path:n.path,current:new ArrayBuffer(0),incoming:n.content,currentHash:"",incomingHash:this.hashContent(n.content)});continue}const a=await this.vault.adapter.readBinary(w.normalizePath(n.path)),o=this.applyCustomReplacements(a),c=n.content?this.applyCustomReplacements(n.content):new ArrayBuffer(0),l=this.hashContent(o),d=this.hashContent(c);if(l!==d){if(r==="skip")continue;s.push({path:n.path,current:a,incoming:n.content,currentHash:l,incomingHash:d})}}return s}getConflictHandlingForPath(e){const t="prompt";if(!e)return t;if(e=w.normalizePath(e),e.startsWith(".obsidian/")){if(e.match(/^\.obsidian\/[^\/]+\.json$/))return this.obsidianConflictHandling.settings||t;if(e.startsWith(".obsidian/themes/"))return this.obsidianConflictHandling.themes||t;if(e.startsWith(".obsidian/snippets/"))return this.obsidianConflictHandling.snippets||t;if(e.startsWith(".obsidian/plugins/"))return this.obsidianConflictHandling.plugins||t}return t}showConflictView(e){const t=this.app.workspace.getLeaf();let s=this.app.workspace.getLeavesOfType(Gt)[0];if(s){this.app.workspace.revealLeaf(s);return}const n=e.map(r=>({path:r.path,current:r.current,incoming:r.incoming,currentHash:r.currentHash,incomingHash:r.incomingHash})),i=this.getPendingOperations();t.setViewState({type:Gt,state:{conflicts:n,operations:i}}),this.app.workspace.revealLeaf(t)}getPendingOperations(){return this.pendingOperations}setPendingOperations(e){this.pendingOperations=e}async createBackup(e,t){t({phase:"backup",progress:0,total:e.length});for(let s=0;st!=="").some(t=>{if(t.includes("**")){const s=t.replace(/\*\*/g,"___GLOBSTAR___").replace(/\./g,"\\.").replace(/\//g,"\\/").replace(/\*/g,"[^/]*").replace(/___GLOBSTAR___/g,".*");return new RegExp(`^${s}$`).test(e)}else{const s=t.split("/"),n=e.split("/");if(s.length>n.length)return!1;for(let i=0;i{this.resolvePromise=e,this.rejectPromise=t,this.open()})}onOpen(){const{contentEl:e}=this;e.createEl("h2",{text:"Enter Update Version"}),e.createEl("p",{text:"Please enter the version number for the update package. This is required when a manifest.json file is not provided."}),new w.Setting(e).setName("Version").setDesc("Example: 1.0.0").addText(i=>i.setValue(this.version).onChange(r=>{this.version=r}));const t=e.createDiv();t.addClass("modal-button-container"),t.createEl("button",{text:"Cancel"}).addEventListener("click",()=>{this.close(),this.resolvePromise(null)}),t.createEl("button",{text:"Confirm",cls:"mod-cta"}).addEventListener("click",()=>{if(!this.version||!this.isValidVersion(this.version)){new w.Notice("Please enter a valid version number (e.g., 1.0.0)",3e3);return}this.close(),this.resolvePromise(this.version)})}isValidVersion(e){return/^\d+\.\d+\.\d+(?:-[a-zA-Z0-9.]+)?(?:\+[a-zA-Z0-9.]+)?$/.test(e)}onClose(){const{contentEl:e}=this;e.empty(),this.resolvePromise&&this.version===""&&this.resolvePromise(null)}}class ya extends w.Component{constructor(e,t){super(),this.lastUpdateInfo=null,this.app=e.app,this.plugin=e,this.vault=e.app.vault,this.configManager=new ba(e.settings.updater),this.currentVersion=t,this.versionChecker=new ms(this.configManager.getRepository(),this.configManager.getMinAppVersion())}isValidVersion(e){return/^\d+\.\d+\.\d+(?:-[a-zA-Z0-9.]+)?(?:\+[a-zA-Z0-9.]+)?$/.test(e)}parseSha256FromText(e){const t=e.match(/[a-fA-F0-9]{64}/);return t?t[0].toLowerCase():null}async calculateSHA256Hex(e){const t=await crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(t)).map(n=>n.toString(16).padStart(2,"0")).join("")}setProxyService(e){this.proxyService=e,this.versionChecker=new ms(this.configManager.getRepository(),this.configManager.getMinAppVersion(),this.proxyService)}onload(){this.stautsBar=this.plugin.addStatusBarItem(),this.stautsBar.setText("PaperBell 更新管理器"),this.registerEvent(this.app.workspace.on("ppb:update-complete",e=>{e?.success&&typeof e.version=="string"&&e.version.trim()&&(this.currentVersion=e.version.trim())})),this.plugin.addCommand({id:"check-updates-from-local",name:"从本地文件检查更新",callback:()=>this.checkForUpdatesFromLocal()}),this.stautsBar.onclick=()=>{const e=this.app.workspace.getLeavesOfType(Gt)[0];if(e){this.app.workspace.revealLeaf(e);return}this.triggerUpdate()},this.stautsBar.oncontextmenu=e=>{e.preventDefault(),e.stopPropagation();const t=new w.Menu;t.addItem(s=>{s.setTitle("从本地文件检查更新"),s.onClick(async()=>{try{await this.checkForUpdatesFromLocal()}catch(n){new w.Notice(`更新时出错: ${n.message}`,5e3),console.error(`更新时出错: ${n.message}`)}})}),t.showAtPosition({x:e.clientX,y:e.clientY})},setTimeout(()=>{this.checkForUpdates().then(e=>{e.hasUpdate&&this.configManager.isAutoUpdateEnabled()&&e.compatibilityIssues?.length===0&&this.triggerUpdate(!0)})},2e3),this.plugin.addCommand({id:"remove-update-backups",name:"删除更新备份",callback:()=>this.removeBackups()}),this.app.workspace.onLayoutReady(()=>{this.checkForUpdates()})}onunload(){}async checkForUpdatesFromLocal(){if(!await this.plugin.verificationWorker.verify()){new w.Notice("请先验证您的账户。");return}const e=s=>{const n=s.total>0?Math.floor(s.progress/s.total*100):0;this.stautsBar.setText(`正在更新 (${s.phase} ${n}%)...`)},t=document.createElement("input");t.type="file",t.multiple=!0,t.accept=".zip,.json,.sha256,.txt",t.onchange=async s=>{const n=t.files;if(!n||n.length===0)return;let i=null,r=null,a=null,o=null,c=null,l=null;for(let d=0;d0&&console.error(`Invalid configuration: ${t.join(", ")}`);const s=await this.versionChecker.checkForUpdates(this.currentVersion,e);return this.lastUpdateInfo=s,s.hasUpdate?this.stautsBar.setText(`有可用更新: ${s.latestVersion}`):this.stautsBar.setText("没有可用更新"),s}async triggerUpdate(e=!1,t){if(!await this.plugin.verificationWorker.verify())return new w.Notice("您需要验证账户才能更新 PaperBell 仓库",5e3),null;if((!this.lastUpdateInfo||e)&&(this.lastUpdateInfo=await this.checkForUpdates(e)),!this.lastUpdateInfo.hasUpdate)return null;this.stautsBar.setText(`Updating to ${this.lastUpdateInfo.latestVersion}...`);const s=".update_backup";try{await this.vault.adapter.exists(s)||await this.vault.adapter.mkdir(s)}catch(r){return new w.Notice(`Failed to create backup directory: ${r.message}`,5e3),console.error(`Failed to create backup directory: ${r.message}`),this.stautsBar.setText("Update failed"),{success:!1,version:this.currentVersion,updatedFiles:[],errors:[`Failed to create backup directory: ${r.message}`],rollbackNeeded:!1}}const n=t||(r=>{this.stautsBar.setText(`Updating (${r.phase} ${Math.floor(r.progress/r.total*100)}%)...`)}),i=await this.update(this.lastUpdateInfo,n);return i.success?this.currentVersion=i.version:(i.errors&&i.errors.length>0&&(new w.Notice(`Update failed: ${i.errors.join(", ")}`,5e3),console.error(`Update failed: ${i.errors.join(", ")}`)),this.stautsBar.setText("Update failed")),i}async update(e,t){try{if(!e.releaseInfo)throw new Error("没有可用的发布信息");const s=new ni(this,this.app,this.vault,".update_backup",this.configManager.getExcludePatterns(),this.configManager.getCustomReplacements(),this.configManager.getObsidianConflictHandling(),this.configManager.getUpdateScope(),this.configManager.getTargetPluginId());this.addChild(s),s.listenToEvents(this.stautsBar,this.configManager,this.plugin,t);let n=await s.loadDownloadedZip(),i;const r=e.releaseInfo.assets||[],a=r.find(h=>h.name.toLowerCase().endsWith(".zip")),o=r.filter(h=>["main.js","manifest.json","styles.css"].includes(h.name)),c=new de(a?.browserDownloadUrl||e.releaseInfo.downloadUrl||"",a?.sha256||e.releaseInfo.sha256,this.proxyService);if(o.length>0&&!a)i=await c.downloadFiles(o,t);else{if(n||(n=await c.download(t),await s.saveDownloadedZip(n)),!n)throw new Error("下载或加载更新包失败");i=await c.extract(n,t)}const l=await s.parseReleaseContents(i),d=await s.prepareReleaseOperations(l),f=await s.applyUpdates(d,t);return{success:!0,version:e.latestVersion,updatedFiles:f}}catch(s){return new w.Notice(`Update failed: ${s.message}`,5e3),console.error(`Update failed: ${s.message}`),{success:!1,version:this.currentVersion,updatedFiles:[],errors:[s.message],rollbackNeeded:!0}}}getConfig(){return this.configManager.getConfig()}updateConfig(e){this.configManager.updateConfig(e),(e.repository||e.minAppVersion)&&(this.versionChecker=new ms(this.configManager.getRepository(),this.configManager.getMinAppVersion()))}async removeBackups(){const e=".paperbell-pro_backup";try{await this.vault.adapter.exists(e)?(await this.vault.adapter.rmdir(e,!0),new w.Notice("更新备份已成功删除")):new w.Notice("未找到更新备份")}catch(t){console.error("Failed to remove backups:",t),new w.Notice("删除备份失败: "+(t.message||t))}}}class Ee{constructor(e){this.subscribers=new Set,this.app=e.app,this.config=e.config,this.cache=e.cache??!0,this.cacheTimeout=e.cacheTimeout??5e3}async getData(){if(this.cache&&this.lastResult&&this.lastFetchTime&&new Date().getTime()-this.lastFetchTime.getTime(){this.subscribers.delete(e)}}notifySubscribers(e){this.subscribers.forEach(t=>t(e))}clearCache(){this.lastResult=void 0,this.lastFetchTime=void 0}getConfig(){return this.config}updateConfig(e){this.config={...this.config,...e},this.clearCache()}destroy(){this.subscribers.clear(),this.clearCache()}}class Sa{extractPaperData(e,t,s){const n=s?.identifyMode||"both",i=s?.frontmatterKey,r=s?.tagIdentifier;let a=!1;if(!i&&!r)if(w.getFrontMatterInfo(e).exists)a=!0;else return null;else{r&&(n==="tag"||n==="both")&&new RegExp(`#${r}\\b`,"i").test(e)&&(a=!0);const c=w.getFrontMatterInfo(e);if(!c.exists&&!a)return null;if(i&&(n==="frontmatter"||n==="both")){const l=c.exists?w.parseYaml(c.frontmatter):{};(l[i]||l.type?.includes(i))&&(a=!0)}if(!a)return null}const o=w.getFrontMatterInfo(e);try{const c=o.exists?w.parseYaml(o.frontmatter):{};return{id:this.generateId(t),title:c.title||this.extractTitleFromPath(t),status:this.normalizeStatus(c.status||"进行中"),progress:this.normalizeProgress(c.progress||0),deadline:c.deadline||c.due_date,filePath:t,authors:c.authors||(c.author?[c.author]:void 0),journal:c.journal||c.publication,tags:this.normalizeTags(c.tags)}}catch(c){return console.error("Error parsing frontmatter:",c),null}}hasPaperFrontmatter(e,t){const s=t?.identifyMode||"both",n=t?.frontmatterKey||"paper",i=t?.tagIdentifier||"paper";if((s==="tag"||s==="both")&&new RegExp(`#${i}\\b`,"i").test(e))return!0;if(s==="frontmatter"||s==="both"){const r=w.getFrontMatterInfo(e);if(!r.exists)return!1;try{const a=w.parseYaml(r.frontmatter);return!!(a[n]||a.type?.includes(n))}catch{return!1}}return!1}extractProjectData(e,t,s){const n=s?.identifyMode||"frontmatter",i=s?.frontmatterKey||"project",r=s?.tagIdentifier,a=s?.typeValues||["project"];let o=!1;r&&(n==="tag"||n==="both")&&new RegExp(`#${r}\\b`,"i").test(e)&&(o=!0),n==="folder"&&(o=!0);const c=w.getFrontMatterInfo(e);if(n==="frontmatter"||n==="both"){if(!c.exists&&!o)return null;if(c.exists)try{const f=w.parseYaml(c.frontmatter);if(f[i]&&(o=!0),f.type){const h=Array.isArray(f.type)?f.type:[f.type];a.some(g=>h.includes(g))&&(o=!0)}}catch(f){if(console.error("Error parsing frontmatter:",f),!o)return null}}if(!o)return null;let l={};if(c.exists)try{l=w.parseYaml(c.frontmatter)}catch(f){console.error("Error parsing project frontmatter:",f),l={}}return{id:this.generateId(t),title:l.title||this.extractTitleFromPath(t),description:l.description||l.summary,status:this.normalizeProjectStatus(l.status||"planning"),progress:this.normalizeProgress(l.progress||0),startDate:l.start_date||l.startDate,endDate:l.end_date||l.endDate||l.due_date,team:l.team||l.members||(l.author?[l.author]:void 0),tags:this.normalizeTags(l.tags),repository:l.repository||l.repo||l.github,stars:l.stars,forks:l.forks,filePath:t}}extractBookData(e,t){const s=w.getFrontMatterInfo(e);if(!s.exists)return null;try{const n=w.parseYaml(s.frontmatter);return!n.book&&!n.type?.includes("book")?null:{id:this.generateId(t),title:n.title||this.extractTitleFromPath(t),author:n.author||n.authors?.join(", ")||"",publisher:n.publisher,year:n.year||n.published,cover:n.cover||n.image,rating:n.rating||n.score,status:this.normalizeBookStatus(n.status||"wishlist"),progress:this.normalizeProgress(n.progress||0),notes:n.notes,bookmarks:n.bookmarks,duration:n.duration||n.reading_time,difficulty:this.normalizeDifficulty(n.difficulty||"medium"),importance:this.normalizeImportance(n.importance||"medium"),tags:this.normalizeTags(n.tags),insights:n.insights||n.key_points,lastRead:n.last_read||n.lastRead,filePath:t}}catch(n){return console.error("Error parsing book frontmatter:",n),null}}normalizeProjectStatus(e){return{planning:"planning",plan:"planning",planned:"planning",active:"active",ongoing:"active",in_progress:"active",paused:"paused",on_hold:"paused",hold:"paused",completed:"completed",done:"completed",finished:"completed",cancelled:"cancelled",canceled:"cancelled",abandoned:"cancelled"}[e.toLowerCase()]||"planning"}normalizeBookStatus(e){return{reading:"reading",current:"reading",in_progress:"reading",completed:"completed",done:"completed",finished:"completed",paused:"paused",on_hold:"paused",wishlist:"wishlist",want_to_read:"wishlist",to_read:"wishlist"}[e.toLowerCase()]||"wishlist"}normalizeDifficulty(e){return{easy:"easy",beginner:"easy",simple:"easy",medium:"medium",intermediate:"medium",hard:"hard",advanced:"hard",difficult:"hard"}[e.toLowerCase()]||"medium"}normalizeImportance(e){return{low:"low",medium:"medium",high:"high",critical:"high",important:"high"}[e.toLowerCase()]||"medium"}generateId(e){return`paper_${e.replace(/[^a-zA-Z0-9]/g,"_")}_${Date.now()}`}extractTitleFromPath(e){return(e.split("/").pop()||"").replace(/\.md$/,"")}normalizeStatus(e){return{in_progress:"进行中","in-progress":"进行中",ongoing:"进行中",active:"进行中",review:"待审核",pending:"待审核",under_review:"待审核",completed:"已完成",done:"已完成",finished:"已完成",paused:"暂停",on_hold:"暂停",cancelled:"已取消",canceled:"已取消"}[e.toLowerCase()]||"进行中"}normalizeProgress(e){if(typeof e=="number")return Math.max(0,Math.min(100,e));if(typeof e=="string"){const t=parseInt(e.replace("%",""),10);return isNaN(t)?0:Math.max(0,Math.min(100,t))}return 0}normalizeTags(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.trim()):typeof e=="string"?e.includes(",")?e.split(",").map(t=>t.trim()).filter(Boolean):[e.trim()].filter(Boolean):[]}}class Ea{extractTasks(e){const t=e.split(` +`),s=[];let n=!1;for(let i=0;ithis.isTasksIdentifier(s))}isTasksIdentifier(e){const t=e.trim().toLowerCase();return t.includes("tasks")||t.includes("待办")||t.includes("todo")||t.includes("任务")}isNewSection(e){return e.trim().startsWith("#")&&!this.isTaskLine(e)}isTaskLine(e){return!!e.trim().match(/^[-*+]\s*\[[ xX]\]/)}parseTaskLine(e,t){const s=e.match(/^(\s*)[-*+]\s*\[([xX ])\]\s*(.+)$/);if(!s)return null;const[,,n,i]=s,r=n.toLowerCase()==="x",a=this.extractPriority(i),o=this.extractDueDate(i),c=this.extractTags(i),l=this.cleanContent(i);return{id:`task_${t}_${Date.now()}`,content:l,completed:r,priority:a,dueDate:o,tags:c,lineNumber:t}}extractPriority(e){if(e.includes("🔴")||e.includes("high")||e.includes("高"))return"high";if(e.includes("🟡")||e.includes("medium")||e.includes("中"))return"medium";if(e.includes("🟢")||e.includes("low")||e.includes("低"))return"low"}extractDueDate(e){const t=e.match(/\b(\d{4}-\d{2}-\d{2})\b/);return t?t[1]:void 0}extractTags(e){const t=e.match(/#[\w\u4e00-\u9fff]+/g);return t?t.map(s=>s.slice(1)):[]}cleanContent(e){return e.replace(/[🔴🟡🟢]/g,"").replace(/#[\w\u4e00-\u9fff]+/g,"").replace(/\b\d{4}-\d{2}-\d{2}\b/g,"").replace(/\b(high|medium|low)\b/gi,"").replace(/\s+/g," ").trim()}}class ka{extractIdeas(e){const t=e.split(` +`),s=[];for(let n=0;n=0&&n<24&&i>=0&&i<60?s[1]:null}isListItem(e){const t=e.trim();return t.startsWith("-")||t.startsWith("*")||t.startsWith("+")}parseCaptureLine(e,t,s){const n=/^[\s\-*+]+\s*\[[ xX]\]/.test(e);let i=e.replace(/^[\s\-*+]+/,"").trim();if(i=i.replace(/^\[[ xX]\]\s*/,"").trim(),!i)return null;const r=this.extractTags(i),a=this.cleanContent(i);let o="idea";return(r.includes("quick-capture")||r.includes("quick"))&&(o="quick"),{id:`capture_${t}_${Date.now()}`,content:a,timestamp:new Date().toISOString(),time:s,tags:r,lineNumber:t,captureType:o,isTask:n}}extractTags(e){const t=e.match(/#[\w\u4e00-\u9fff\-]+/g);return t?t.map(s=>s.slice(1)):[]}cleanContent(e){let t=e.replace(/^\s*\[[ xX]\]\s*/,"");return t=t.replace(/^\d{1,2}:\d{2}\s*/,""),t=t.replace(/#[\w\u4e00-\u9fff\-]+/g,""),t=t.replace(/\s+/g," "),t.trim()}}const Ot=new Sa,Vs=new Ea,Hs=new ka;class xa extends Ee{constructor(e){super(e),this.setupFileWatcher()}async fetchData(){const e=this.config,t=this.app.vault.getAbstractFileByPath(e.filePath);if(!t||!(t instanceof w.TFile))return{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`File not found: ${e.filePath}`]}};try{const s=await this.app.vault.read(t),n=await this.parseContent(s,t),i={data:n,metadata:{lastUpdated:new Date,sourceCount:n.length}};return this.notifySubscribers(i),i}catch(s){return console.error(`Error reading file ${e.filePath}:`,s),{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`Error reading file: ${s.message}`]}}}}async validate(){const e=this.config;return e.filePath?this.app.vault.getFileByPath(e.filePath)?!0:(new w.Notice(`File not found: ${e.filePath}`),!1):(new w.Notice("File path is required"),!1)}async parseContent(e,t){switch(this.config.parseMode||"raw"){case"frontmatter":{const i=Ot.extractPaperData(e,t.path);return i?[i]:[]}case"tasks":return Vs.extractTasks(e);case"ideas":return Hs.extractIdeas(e);default:return[{content:e,filePath:t.path,fileName:t.basename}]}}setupFileWatcher(){const e=this.config;this.fileChangeHandler=this.app.vault.on("modify",t=>{t instanceof w.TFile&&t.path===e.filePath&&(this.clearCache(),this.fetchData())}),this.app.vault.on("delete",t=>{t instanceof w.TFile&&t.path===e.filePath&&this.notifySubscribers({data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`File deleted: ${e.filePath}`]}})}),this.app.vault.on("rename",(t,s)=>{t instanceof w.TFile&&s===e.filePath&&(this.config.filePath=t.path,this.clearCache(),this.fetchData())})}destroy(){this.fileChangeHandler&&this.app.vault.offref(this.fileChangeHandler),super.destroy()}}class Ca extends Ee{constructor(e){super(e),this.setupFolderWatcher()}async fetchData(){const e=this.config,t=this.app.vault.getAbstractFileByPath(e.folderPath);if(!t||!(t instanceof w.TFolder))return{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`Folder not found: ${e.folderPath}`]}};try{const s=await this.getFilesInFolder(t,e.recursive??!0),n=this.filterFiles(s,e.fileFilter),i=[],r=[];for(const o of n)try{const c=await this.app.vault.read(o),l=await this.parseContent(c,o,e.parseMode||"raw");l.length>0,i.push(...l)}catch(c){r.push(`Error reading ${o.path}: ${c.message}`)}const a={data:i,metadata:{lastUpdated:new Date,sourceCount:i.length,errors:r.length>0?r:void 0}};return this.notifySubscribers(a),a}catch(s){return console.error(`Error reading folder ${e.folderPath}:`,s),{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`Error reading folder: ${s.message}`]}}}}async validate(){const e=this.config;if(!e.folderPath)return new w.Notice("Folder path is required"),!1;const t=this.app.vault.getAbstractFileByPath(e.folderPath);return!t||!(t instanceof w.TFolder)?(new w.Notice(`Folder not found: ${e.folderPath}`),!1):!0}async getFilesInFolder(e,t){const s=[];return t?this.app.vault.getMarkdownFiles().forEach(n=>{n.path.startsWith(e.path+"/")&&s.push(n)}):e.children.forEach(n=>{n instanceof w.TFile&&n.extension==="md"&&s.push(n)}),s}filterFiles(e,t){return t?e.filter(s=>{if(t.extensions&&!t.extensions.includes(s.extension)||t.namePattern&&!new RegExp(t.namePattern).test(s.basename))return!1;if(t.excludePatterns){for(const n of t.excludePatterns)if(new RegExp(n).test(s.path))return!1}return!0}):e}async parseContent(e,t,s){const n=this.config,i=r=>{const a={id:`uncategorized-${t.path}`,title:t.basename,filePath:t.path,status:"未分类",tags:["未分类"],_isUncategorized:!0};switch(r){case"projects":return{...a,description:"未配置项目元数据的文件",progress:0};case"books":return{...a,author:"未知作者",status:"未分类"};case"papers":return{...a,authors:[],journal:"未知",progress:0};default:return a}};switch(s){case"frontmatter":{if(n.sectionConfig?.type==="projects"||n.folderPath?.includes("Projects")){const a=Ot.extractProjectData(e,t.path,n.sectionConfig);return a?[a]:[i("projects")]}if(n.sectionConfig?.type==="books"||n.folderPath?.includes("Books")){const a=Ot.extractBookData(e,t.path);return a?[a]:[i("books")]}if(n.sectionConfig?.type==="papers"){const a=Ot.extractProjectData(e,t.path,n.sectionConfig);return a?[a]:[i("papers")]}const r=Ot.extractPaperData(e,t.path,n.sectionConfig);return r?[r]:[i("papers")]}case"tasks":{const r=Vs.extractTasks(e);return r.length>0?r.map(a=>({...a,filePath:t.path})):[i("tasks")]}case"ideas":{const r=Hs.extractIdeas(e);return r.length>0?r.map(a=>({...a,filePath:t.path})):[i("ideas")]}default:return[{content:e,filePath:t.path,fileName:t.basename,title:t.basename}]}}setupFolderWatcher(){const e=this.config;this.folderChangeHandler=this.app.vault.on("modify",t=>{t instanceof w.TFile&&t.path.startsWith(e.folderPath+"/")&&(this.clearCache(),this.fetchData())}),this.app.vault.on("create",t=>{t instanceof w.TFile&&t.path.startsWith(e.folderPath+"/")&&(this.clearCache(),this.fetchData())}),this.app.vault.on("delete",t=>{t instanceof w.TFile&&t.path.startsWith(e.folderPath+"/")&&(this.clearCache(),this.fetchData())}),this.app.vault.on("rename",(t,s)=>{t instanceof w.TFile&&(t.path.startsWith(e.folderPath+"/")||s.startsWith(e.folderPath+"/"))&&(this.clearCache(),this.fetchData())})}destroy(){this.folderChangeHandler&&this.app.vault.offref(this.folderChangeHandler),super.destroy()}}class Da extends Ee{constructor(e){super(e),this.fileChangeHandlers=new Map,this.setupFileWatchers()}async fetchData(){const e=this.config,t=[],s=[];let n=0;for(const a of e.filePaths){const o=this.app.vault.getAbstractFileByPath(a);if(!o||!(o instanceof w.TFile)){s.push(`File not found: ${a}`);continue}try{const c=await this.app.vault.read(o),l=await this.parseContent(c,o);t.push(...l),n++}catch(c){s.push(`Error reading ${a}: ${c.message}`)}}const r={data:this.applyMergeStrategy(t,e.mergeStrategy||"concat"),metadata:{lastUpdated:new Date,sourceCount:n,errors:s.length>0?s:void 0}};return this.notifySubscribers(r),r}async validate(){const e=this.config;if(!e.filePaths||e.filePaths.length===0)return new w.Notice("At least one file path is required"),!1;let t=!1;for(const s of e.filePaths){const n=this.app.vault.getAbstractFileByPath(s);if(n&&n instanceof w.TFile){t=!0;break}}return t?!0:(new w.Notice("No valid files found in the specified paths"),!1)}async parseContent(e,t){switch(this.config.parseMode||"raw"){case"frontmatter":const i=Ot.extractPaperData(e,t.path);return i?[i]:[];case"tasks":return Vs.extractTasks(e).map(o=>({...o,filePath:t.path}));case"ideas":return Hs.extractIdeas(e).map(o=>({...o,filePath:t.path}));default:return[{content:e,filePath:t.path,fileName:t.basename}]}}applyMergeStrategy(e,t){if(t==="concat")return e;const s=new Set;return e.filter(n=>{const i=this.getItemKey(n);return s.has(i)?!1:(s.add(i),!0)})}getItemKey(e){return e.id?e.id:e.content?e.content:e.title?e.title:JSON.stringify(e)}setupFileWatchers(){const e=this.config;e.filePaths.forEach(t=>{const s=this.app.vault.on("modify",n=>{n instanceof w.TFile&&n.path===t&&(this.clearCache(),this.fetchData())});this.fileChangeHandlers.set(t,s)}),this.app.vault.on("delete",t=>{t instanceof w.TFile&&e.filePaths.includes(t.path)&&(e.filePaths=e.filePaths.filter(s=>s!==t.path),this.clearCache(),this.fetchData())}),this.app.vault.on("rename",(t,s)=>{if(t instanceof w.TFile&&e.filePaths.includes(s)){const n=e.filePaths.indexOf(s);n!==-1&&(e.filePaths[n]=t.path),this.clearCache(),this.fetchData()}})}updateConfig(e){e.filePaths&&e.filePaths!==this.config.filePaths&&(this.fileChangeHandlers.forEach(t=>{this.app.vault.offref(t)}),this.fileChangeHandlers.clear()),super.updateConfig(e),e.filePaths&&this.setupFileWatchers()}destroy(){this.fileChangeHandlers.forEach(e=>{this.app.vault.offref(e)}),this.fileChangeHandlers.clear(),super.destroy()}}class Ta extends Ee{constructor(e){super(e),this.component=new w.Component,this.component.load()}async fetchData(){const e=this.config;if(!e.query||e.query.trim()==="")return{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:["No query provided"]}};try{if(!this.app.plugins.plugins.dataview)return{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:["Dataview plugin is not installed or enabled"]}};if((e.renderMode||"markdown")==="markdown"){const i={data:[{type:"dataview-rendered",content:await this.renderDataviewBlock(e.query),query:e.query}],metadata:{lastUpdated:new Date,sourceCount:1}};return this.notifySubscribers(i),i}else{const n=await this.extractDataviewData(e.query),i={data:n,metadata:{lastUpdated:new Date,sourceCount:n.length}};return this.notifySubscribers(i),i}}catch(t){return console.error("Error executing dataview query:",t),{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`Error executing query: ${t.message}`]}}}}async validate(){const e=this.config;return!e.query||e.query.trim()===""?(new w.Notice("Dataview query is required"),!1):this.app.plugins.plugins.dataview?!0:(new w.Notice("Dataview plugin is not installed or enabled"),!1)}async renderDataviewBlock(e){this.renderContainer||(this.renderContainer=createDiv(),this.renderContainer.style.display="none",document.body.appendChild(this.renderContainer)),this.renderContainer.empty();const t="```dataview\n"+e+"\n```";return await w.MarkdownRenderer.renderMarkdown(t,this.renderContainer,"",this.component),await new Promise(n=>setTimeout(n,100)),this.renderContainer.innerHTML}async extractDataviewData(e){const t=this.app.plugins.plugins.dataview;if(!t||!t.api)return[];try{const s=e.trim().toLowerCase();return s.startsWith("table")?await this.extractTableData(e,t.api):s.startsWith("list")?await this.extractListData(e,t.api):s.startsWith("task")?await this.extractTaskData(e,t.api):await this.executeDQL(e,t.api)}catch(s){return console.error("Error extracting dataview data:",s),[]}}async extractTableData(e,t){try{const s=await t.query(e);if(s.successful&&s.value.type==="table")return s.value.values.map(n=>({type:"table-row",data:n.values,file:n.key?.path}))}catch(s){console.error("Error in table query:",s)}return[]}async extractListData(e,t){try{const s=await t.query(e);if(s.successful&&s.value.type==="list")return s.value.values.map(n=>({type:"list-item",content:n.value,file:n.key?.path}))}catch(s){console.error("Error in list query:",s)}return[]}async extractTaskData(e,t){try{const s=await t.query(e);if(s.successful&&s.value.type==="task")return s.value.values.map(n=>({type:"task-item",text:n.text,completed:n.completed,file:n.path}))}catch(s){console.error("Error in task query:",s)}return[]}async executeDQL(e,t){try{const s=await t.query(e);if(s.successful)return[{type:"dql-result",data:s.value}]}catch(s){console.error("Error in DQL query:",s)}return[]}destroy(){this.renderContainer&&(this.renderContainer.remove(),this.renderContainer=void 0),this.component.unload(),super.destroy()}}class Ti extends w.Component{constructor(e){super(),this.dataSources=new Map,this.app=e.app,this.autoRefresh=e.autoRefresh??!1,this.refreshInterval=e.refreshInterval??3e4}onload(){this.initialize()}initialize(){this.setupFileWatchers(),this.autoRefresh&&this.startAutoRefresh()}destroy(){this.dataSources.forEach(e=>{e.dataSource.destroy()}),this.dataSources.clear(),this.fileEventRef&&this.app.vault.offref(this.fileEventRef),this.stopAutoRefresh(),super.unload()}createDataSource(e,t){const s=this.instantiateDataSource(e);if(!s)return null;const n=this.generateDataSourceId(),i={id:n,dataSource:s,sectionId:t};return this.dataSources.set(n,i),n}instantiateDataSource(e){const t={app:this.app,config:e};switch(e.type){case"file":return new xa(t);case"folder":return new Ca(t);case"files":return new Da(t);case"dataview":return new Ta(t);default:return console.error(`Unknown data source type: ${e.type}`),null}}removeDataSource(e){const t=this.dataSources.get(e);return t?(t.dataSource.destroy(),this.dataSources.delete(e),!0):!1}async getDataSourceData(e){const t=this.dataSources.get(e);if(!t)return null;try{const s=await t.dataSource.getData();return t.lastUpdate=new Date,t.lastResult=s,s}catch(s){return console.error(`Error fetching data from source ${e}:`,s),{data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`Error: ${s.message}`]}}}}async getSectionData(e){const t=Array.from(this.dataSources.values()).filter(i=>i.sectionId===e);if(t.length===0)return[];const s=await Promise.all(t.map(i=>this.getDataSourceData(i.id))),n=[];return s.forEach(i=>{i&&n.push(...i.data)}),n}updateDataSourceConfig(e,t){const s=this.dataSources.get(e);return s?(s.dataSource.updateConfig(t),!0):!1}subscribeToDataSource(e,t){const s=this.dataSources.get(e);return s?s.dataSource.subscribe(t):null}getDataSourcesBySectionId(e){return Array.from(this.dataSources.values()).filter(t=>t.sectionId===e)}getAllDataSources(){return Array.from(this.dataSources.values())}clearSectionDataSources(e){this.getDataSourcesBySectionId(e).forEach(s=>{this.removeDataSource(s.id)})}async refreshAllDataSources(){const e=Array.from(this.dataSources.keys()).map(t=>this.getDataSourceData(t));await Promise.all(e)}async refreshSectionDataSources(e){const s=this.getDataSourcesBySectionId(e).map(n=>this.getDataSourceData(n.id));await Promise.all(s)}setupFileWatchers(){this.registerEvent(this.app.vault.on("modify",e=>{e instanceof w.TFile&&this.handleFileChange(e)})),this.registerEvent(this.app.vault.on("delete",e=>{e instanceof w.TFile&&this.handleFileDelete(e)})),this.registerEvent(this.app.vault.on("rename",(e,t)=>{e instanceof w.TFile&&this.handleFileRename(e,t)}))}handleFileChange(e){this.dataSources.forEach(t=>{const s=t.dataSource.getConfig();if(s.type==="file"){const n=s.filePath||s.config?.filePath;n&&n===e.path&&(t.dataSource.clearCache(),this.refreshDataSource(t.id))}else if(s.type==="folder"){const n=s.folderPath||s.config?.folderPath;n&&e.path.startsWith(n)&&(t.dataSource.clearCache(),this.refreshDataSource(t.id))}else if(s.type==="files"){const n=s.filePaths||s.config?.filePaths;n&&n.includes(e.path)&&(t.dataSource.clearCache(),this.refreshDataSource(t.id))}})}async refreshDataSource(e){const t=this.dataSources.get(e);if(t)try{const s=await t.dataSource.getData();t.lastUpdate=new Date,t.lastResult=s}catch(s){console.error(`[DataManager] Error refreshing data source ${e}:`,s)}}handleFileDelete(e){this.dataSources.forEach(t=>{const s=t.dataSource.getConfig();if(s.type==="file"){const n=s.filePath||s.config?.filePath;n&&n===e.path&&t.dataSource.notifySubscribers({data:[],metadata:{lastUpdated:new Date,sourceCount:0,errors:[`File deleted: ${e.path}`]}})}else if(s.type==="folder"){const n=s.folderPath||s.config?.folderPath;n&&e.path.startsWith(n)&&this.refreshDataSource(t.id)}else if(s.type==="files"){const n=s.filePaths||s.config?.filePaths;n&&n.includes(e.path)&&this.refreshDataSource(t.id)}})}handleFileRename(e,t){this.dataSources.forEach(s=>{const n=s.dataSource.getConfig();if(n.type==="file"){const i=n.filePath||n.config?.filePath;if(i&&i===t){const r=n.filePath!==void 0?{filePath:e.path}:{config:{filePath:e.path}};s.dataSource.updateConfig(r),this.refreshDataSource(s.id)}}else if(n.type==="files"){const i=n.filePaths||n.config?.filePaths;if(i&&i.includes(t)){const r=i.map(o=>o===t?e.path:o),a=n.filePaths!==void 0?{filePaths:r}:{config:{filePaths:r}};s.dataSource.updateConfig(a),this.refreshDataSource(s.id)}}})}startAutoRefresh(){this.refreshTimer&&this.stopAutoRefresh(),this.refreshTimer=window.setInterval(()=>{this.refreshAllDataSources()},this.refreshInterval),this.registerInterval(this.refreshTimer)}stopAutoRefresh(){this.refreshTimer&&(clearInterval(this.refreshTimer),this.refreshTimer=void 0)}setAutoRefresh(e,t){this.autoRefresh=e,t&&(this.refreshInterval=t),e?this.startAutoRefresh():this.stopAutoRefresh()}generateDataSourceId(){return`ds_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}exportConfiguration(){const e={dataSources:[]};return this.dataSources.forEach(t=>{e.dataSources.push({id:t.id,sectionId:t.sectionId,config:t.dataSource.getConfig()})}),e}importConfiguration(e){!e.dataSources||!Array.isArray(e.dataSources)||(this.destroy(),this.dataSources.clear(),e.dataSources.forEach(t=>{const s=this.instantiateDataSource(t.config);if(s){const n={id:t.id,dataSource:s,sectionId:t.sectionId};this.dataSources.set(t.id,n)}}),this.initialize())}}const _a={academicOverview:"学术概览",todayFocus:"今日聚焦",recentLiterature:"最近文献",researchFocusMap:"研究焦点地图",projectBaseManager:"项目管理(默认配置)",papersManager:"研究论文",experimentsManager:"实验数据",tasksManager:"科研课题",resourcesManager:"学术资源",bookShelf:"书架",todoManager:"待办管理",recentBooks:"最近阅读",readingAnalytics:"阅读分析"};function Pa(u,e){return e?.[u]?.displayName?e[u].displayName:_a[u]||u}function Ia(u,e){return e?.[u]?.description}function _i(u){return u?.settings?.componentDataSources?u.settings.componentDataSources:null}function qs(u,e){const t=_i(e);return Pa(u,t??void 0)}function Pi(u,e){const t=_i(e);return Ia(u,t??void 0)}const Aa={papers:{componentKey:"papersManager",icon:"file-text"},experiments:{componentKey:"experimentsManager",icon:"flask-conical"},tasks:{componentKey:"tasksManager",icon:"target"},resources:{componentKey:"resourcesManager",icon:"bookmark"},literature:{componentKey:"recentLiterature",icon:"book-open"}};class Fa extends w.Component{constructor(e,t,s,n){super(),this.app=t,this.plugin=s,this.type=n,this.renderComponent=new w.Component,this.renderComponent.load(),this.containerEl=e.createDiv({cls:"ppb-base-container"}),this.buildUI()}buildUI(){const e=Aa[this.type],t=qs(e.componentKey,this.plugin),s=Pi(e.componentKey,this.plugin);this.headerEl=this.containerEl.createDiv({cls:"ppb-base-header"});const n=this.headerEl.createDiv({cls:"ppb-base-header-left"}),i=n.createSpan({cls:"ppb-base-header-icon"});w.setIcon(i,e.icon);const r=n.createDiv({cls:"ppb-base-header-titles"});r.createEl("h3",{text:t,cls:"ppb-base-title"}),s&&r.createEl("p",{text:s,cls:"ppb-base-description"});const a=this.headerEl.createDiv({cls:"ppb-base-header-right"}),o=this.plugin.settings.baseContainerPaths?.[this.type];if(o){const l=a.createSpan({cls:"ppb-base-path-badge"});l.setText(o.replace(/^ppb\//,"").replace(/\.base$/,"")),l.title=o}const c=a.createEl("button",{cls:"ppb-base-config-btn clickable-icon"});if(w.setIcon(c,"settings"),c.title="Configure base",c.addEventListener("click",l=>{l.stopPropagation(),this.openConfigModal()}),o){const l=a.createEl("button",{cls:"ppb-base-clear-btn clickable-icon"});w.setIcon(l,"x"),l.title="Remove base",l.addEventListener("click",async d=>{d.stopPropagation(),await this.clearBase()})}this.contentEl=this.containerEl.createDiv({cls:"ppb-base-content"}),this.renderBase()}openConfigModal(){new ks(this.app,this.plugin,this.type,async e=>{this.plugin.settings.baseContainerPaths||(this.plugin.settings.baseContainerPaths={projects:null,papers:null,experiments:null,tasks:null,resources:null,books:null,literature:null}),this.plugin.settings.baseContainerPaths[this.type]=e,await this.plugin.saveSettings(),this.rebuild()}).open()}async clearBase(){this.plugin.settings.baseContainerPaths&&(this.plugin.settings.baseContainerPaths[this.type]=null,await this.plugin.saveSettings(),this.rebuild())}rebuild(){this.containerEl.empty(),this.renderComponent.unload(),this.renderComponent=new w.Component,this.renderComponent.load(),this.buildUI()}async renderBase(){this.contentEl.empty();const e=this.plugin.settings.baseContainerPaths?.[this.type];if(!e){this.renderEmptyState();return}if(!this.app.vault.getFileByPath(e)){this.renderMissingState(e);return}const s=`![[${e}]]`;try{await w.MarkdownRenderer.render(this.app,s,this.contentEl,e,this.renderComponent)}catch(n){console.error(`[BaseContainer] Failed to render base embed for ${e}:`,n),this.contentEl.empty(),this.contentEl.createDiv({cls:"ppb-base-error"}).setText(`Failed to render base: ${n}`)}}renderEmptyState(){const e=this.contentEl.createDiv({cls:"ppb-base-empty-state"}),t=e.createDiv({cls:"ppb-base-empty-icon"});w.setIcon(t,"database"),e.createEl("p",{text:"No base configured",cls:"ppb-base-empty-title"}),e.createEl("p",{text:"Click the settings icon to select or create a base",cls:"ppb-base-empty-hint"}),e.createEl("button",{cls:"ppb-base-empty-btn mod-cta",text:"Configure Base"}).addEventListener("click",()=>this.openConfigModal())}renderMissingState(e){const t=this.contentEl.createDiv({cls:"ppb-base-missing-state"}),s=t.createDiv({cls:"ppb-base-missing-icon"});w.setIcon(s,"alert-triangle"),t.createEl("p",{text:"Base file not found",cls:"ppb-base-missing-title"}),t.createEl("p",{text:e,cls:"ppb-base-missing-path"}),t.createEl("button",{cls:"ppb-base-empty-btn",text:"Reconfigure"}).addEventListener("click",()=>this.openConfigModal())}onunload(){this.renderComponent.unload(),this.containerEl.remove()}}const Na={books:{componentKey:"bookShelf",icon:"book-open"}};class Ra extends w.Component{constructor(e,t,s,n){super(),this.app=t,this.plugin=s,this.type=n,this.renderComponent=new w.Component,this.renderComponent.load(),this.containerEl=e.createDiv({cls:"ppb-base-container"}),this.buildUI()}buildUI(){const e=Na[this.type],t=qs(e.componentKey,this.plugin),s=Pi(e.componentKey,this.plugin);this.headerEl=this.containerEl.createDiv({cls:"ppb-base-header"});const n=this.headerEl.createDiv({cls:"ppb-base-header-left"}),i=n.createSpan({cls:"ppb-base-header-icon"});w.setIcon(i,e.icon);const r=n.createDiv({cls:"ppb-base-header-titles"});r.createEl("h3",{text:t,cls:"ppb-base-title"}),s&&r.createEl("p",{text:s,cls:"ppb-base-description"});const a=this.headerEl.createDiv({cls:"ppb-base-header-right"}),o=this.getFolderPath();if(o){const l=a.createSpan({cls:"ppb-base-path-badge"});l.setText(o),l.title=o}const c=a.createEl("button",{cls:"ppb-base-config-btn clickable-icon"});if(w.setIcon(c,"folder-open"),c.title="Select folder",c.addEventListener("click",l=>{l.stopPropagation(),this.openFolderSelector()}),this.getBasePath()){const l=a.createEl("button",{cls:"ppb-base-clear-btn clickable-icon"});w.setIcon(l,"x"),l.title="Remove base",l.addEventListener("click",async d=>{d.stopPropagation(),await this.clearBase()})}this.contentEl=this.containerEl.createDiv({cls:"ppb-base-content"}),this.renderBase()}getFolderPath(){const e=this.getBasePath();if(!e)return null;const t=e.match(new RegExp(`ppb/${this.type}-(.+)\\.base$`));return t?t[1].replace(/-/g,"/"):e}getBasePath(){return this.plugin.settings.baseContainerPaths?.[this.type]||null}openFolderSelector(){new Ls(this.app,async e=>{try{const t=await this.createFolderBase(e.path);this.plugin.settings.baseContainerPaths||(this.plugin.settings.baseContainerPaths={projects:null,papers:null,experiments:null,tasks:null,resources:null,books:null,literature:null}),this.plugin.settings.baseContainerPaths[this.type]=t,await this.plugin.saveSettings(),this.rebuild()}catch(t){new w.Notice(`Failed to create base: ${t}`)}}).open()}async createFolderBase(e){this.app.vault.getFolderByPath("ppb")||await this.app.vault.createFolder("ppb");const s=this.buildGalleryYaml(e),n=e.replace(/[\\/:*?"<>|]/g,"-"),i=`ppb/${this.type}-${n}.base`,r=this.app.vault.getFileByPath(i);return r?await this.app.vault.modify(r,s):await this.app.vault.create(i,s),i}buildGalleryYaml(e){let t="";return t+=`filters: +`,t+=` and: +`,t+=` - file.inFolder("${e}") +`,t+=`views: +`,t+=` - type: cards +`,t+=` name: "Gallery" +`,t+=` order: +`,t+=` - file.name +`,t+=` - cover +`,t+=` - tags +`,t}async clearBase(){this.plugin.settings.baseContainerPaths&&(this.plugin.settings.baseContainerPaths[this.type]=null,await this.plugin.saveSettings(),this.rebuild())}rebuild(){this.containerEl.empty(),this.renderComponent.unload(),this.renderComponent=new w.Component,this.renderComponent.load(),this.buildUI()}async renderBase(){this.contentEl.empty();const e=this.getBasePath();if(!e){this.renderEmptyState();return}if(!this.app.vault.getFileByPath(e)){this.renderMissingState(e);return}const s=`![[${e}]]`;try{await w.MarkdownRenderer.render(this.app,s,this.contentEl,e,this.renderComponent)}catch(n){console.error(`[FolderBaseContainer] Failed to render base embed for ${e}:`,n),this.contentEl.empty(),this.contentEl.createDiv({cls:"ppb-base-error"}).setText(`Failed to render base: ${n}`)}}renderEmptyState(){const e=this.contentEl.createDiv({cls:"ppb-base-empty-state"}),t=e.createDiv({cls:"ppb-base-empty-icon"});w.setIcon(t,"book-open"),e.createEl("p",{text:"No folder selected",cls:"ppb-base-empty-title"}),e.createEl("p",{text:"Select a folder to display as a gallery",cls:"ppb-base-empty-hint"}),e.createEl("button",{cls:"ppb-base-empty-btn mod-cta",text:"Select Folder"}).addEventListener("click",()=>this.openFolderSelector())}renderMissingState(e){const t=this.contentEl.createDiv({cls:"ppb-base-missing-state"}),s=t.createDiv({cls:"ppb-base-missing-icon"});w.setIcon(s,"alert-triangle"),t.createEl("p",{text:"Base file not found",cls:"ppb-base-missing-title"}),t.createEl("p",{text:e,cls:"ppb-base-missing-path"}),t.createEl("button",{cls:"ppb-base-empty-btn",text:"Select Folder"}).addEventListener("click",()=>this.openFolderSelector())}onunload(){this.renderComponent.unload(),this.containerEl.remove()}}class ii extends w.Component{constructor(e,t,s,n){super(),this.showingAlternate=!1,this.alternateChild=null,this.toggleBtn=null,this.app=t,this.plugin=s,this.config=n,this.renderComponent=new w.Component,this.renderComponent.load(),this.containerEl=e.createDiv({cls:"ppb-base-container ppb-academic-base-view"}),this.buildUI()}buildUI(){const e=this.containerEl.createDiv({cls:"ppb-base-header"}),t=e.createDiv({cls:"ppb-base-header-left"}),s=t.createSpan({cls:"ppb-base-header-icon"});w.setIcon(s,this.config.icon);const n=t.createDiv({cls:"ppb-base-header-titles"});if(n.createEl("h3",{text:this.config.title,cls:"ppb-base-title"}),this.config.description&&n.createEl("p",{text:this.config.description,cls:"ppb-base-description"}),this.config.alternateView){const i=e.createDiv({cls:"ppb-base-header-right"});this.toggleBtn=i.createEl("button",{cls:"clickable-icon ppb-base-toggle-btn",attr:{"aria-label":this.config.alternateView.tooltip}}),w.setIcon(this.toggleBtn,this.config.alternateView.icon),this.toggleBtn.addEventListener("click",()=>this.toggleView())}this.contentEl=this.containerEl.createDiv({cls:"ppb-base-content"}),this.renderBase()}toggleView(){if(this.config.alternateView){if(this.showingAlternate=!this.showingAlternate,this.toggleBtn){const e=this.showingAlternate?"table":this.config.alternateView.icon;this.toggleBtn.empty(),w.setIcon(this.toggleBtn,e),this.toggleBtn.setAttribute("aria-label",this.showingAlternate?"Switch to table view":this.config.alternateView.tooltip),this.toggleBtn.toggleClass("is-active",this.showingAlternate)}this.removeAlternateChild(),this.contentEl.empty(),this.showingAlternate?this.config.alternateView.baseYaml?this.renderBase(this.config.alternateView.baseYaml):this.config.alternateView.createView&&(this.alternateChild=this.config.alternateView.createView(this.contentEl,this.app,this.plugin),this.addChild(this.alternateChild)):this.renderBase()}}removeAlternateChild(){this.alternateChild&&(this.removeChild(this.alternateChild),this.alternateChild=null)}async renderBase(e){this.contentEl.empty();const t="```base\n"+(e||this.config.baseYaml)+"\n```";try{await w.MarkdownRenderer.render(this.app,t,this.contentEl,"",this.renderComponent)}catch(s){console.error("[AcademicBaseView] Failed to render base code block:",s),this.contentEl.empty(),this.contentEl.createDiv({cls:"ppb-base-error"}).setText(`Failed to render base: ${s}`)}}onunload(){this.removeAlternateChild(),this.renderComponent.unload(),this.containerEl.remove()}}const La=u=>{let e;const t=new Set,s=(c,l)=>{const d=typeof c=="function"?c(e):c;if(!Object.is(d,e)){const f=e;e=l??(typeof d!="object"||d===null)?d:Object.assign({},e,d),t.forEach(h=>h(e,f))}},n=()=>e,a={setState:s,getState:n,getInitialState:()=>o,subscribe:c=>(t.add(c),()=>t.delete(c))},o=e=u(s,n,a);return a},Ii=u=>La,ri={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},ai=u=>!!u.dispatchFromDevtools&&typeof u.dispatch=="function",Yt=new Map,ae=u=>{const e=Yt.get(u);return e?Object.fromEntries(Object.entries(e.stores).map(([t,s])=>[t,s.getState()])):{}},Ma=(u,e,t)=>{if(u===void 0)return{type:"untracked",connection:e.connect(t)};const s=Yt.get(t.name);if(s)return{type:"tracked",store:u,...s};const n={connection:e.connect(t),stores:{}};return Yt.set(t.name,n),{type:"tracked",store:u,...n}},$a=(u,e)=>{if(e===void 0)return;const t=Yt.get(u);t&&(delete t.stores[e],Object.keys(t.stores).length===0&&Yt.delete(u))},Oa=u=>{var e,t;if(!u)return;const s=u.split(` +`),n=s.findIndex(r=>r.includes("api.setState"));if(n<0)return;const i=((e=s[n+1])==null?void 0:e.trim())||"";return(t=/.+ (.+) .+/.exec(i))==null?void 0:t[1]},Ba=(u,e={})=>(t,s,n)=>{const{enabled:i,anonymousActionType:r,store:a,...o}=e;let c;try{c=(i??(ri?"production":void 0)!=="production")&&window.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!c)return u(t,s,n);const{connection:l,...d}=Ma(a,c,o);let f=!0;n.setState=(p,y,v)=>{const E=t(p,y);if(!f)return E;const x=v===void 0?{type:r||Oa(new Error().stack)||"anonymous"}:typeof v=="string"?{type:v}:v;return a===void 0?(l?.send(x,s()),E):(l?.send({...x,type:`${a}/${x.type}`},{...ae(o.name),[a]:n.getState()}),E)},n.devtools={cleanup:()=>{l&&typeof l.unsubscribe=="function"&&l.unsubscribe(),$a(o.name,a)}};const h=(...p)=>{const y=f;f=!1,t(...p),f=y},g=u(n.setState,s,n);if(d.type==="untracked"?l?.init(g):(d.stores[d.store]=n,l?.init(Object.fromEntries(Object.entries(d.stores).map(([p,y])=>[p,p===d.store?g:y.getState()])))),ai(n)){let p=!1;const y=n.dispatch;n.dispatch=(...v)=>{(ri?"production":void 0)!=="production"&&v[0].type==="__setState"&&!p&&(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),p=!0),y(...v)}}return l.subscribe(p=>{var y;switch(p.type){case"ACTION":if(typeof p.payload!="string"){console.error("[zustand devtools middleware] Unsupported action format");return}return bs(p.payload,v=>{if(v.type==="__setState"){if(a===void 0){h(v.state);return}Object.keys(v.state).length!==1&&console.error(` [zustand devtools middleware] Unsupported __setState action format. When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(), and value of this only key should be a state object. Example: { "type": "__setState", "state": { "abc123Store": { "foo": "bar" } } } - `);const T=E.state[u];if(T==null)return;JSON.stringify(o.getState())!==JSON.stringify(T)&&v(T);return}gm(o)&&o.dispatch(E)});case"DISPATCH":switch(w.payload.type){case"RESET":return v(y),u===void 0?m?.init(o.getState()):m?.init(Hs(d.name));case"COMMIT":if(u===void 0){m?.init(o.getState());return}return m?.init(Hs(d.name));case"ROLLBACK":return wu(w.state,E=>{if(u===void 0){v(E),m?.init(o.getState());return}v(E[u]),m?.init(Hs(d.name))});case"JUMP_TO_STATE":case"JUMP_TO_ACTION":return wu(w.state,E=>{if(u===void 0){v(E);return}JSON.stringify(o.getState())!==JSON.stringify(E[u])&&v(E[u])});case"IMPORT_STATE":{const{nextLiftedState:E}=w.payload,T=(D=E.computedStates.slice(-1)[0])==null?void 0:D.state;if(!T)return;v(u===void 0?T:T[u]),m?.send(null,E);return}case"PAUSE_RECORDING":return k=!k}return}}),y},tb=Dy,wu=(f,a)=>{let r;try{r=JSON.parse(f)}catch(i){console.error("[zustand devtools middleware] Could not parse the received json",i)}r!==void 0&&a(r)},Py=f=>(a,r,i)=>{const o=i.subscribe;return i.subscribe=(c,u,d)=>{let h=c;if(u){const m=d?.equalityFn||Object.is;let b=c(i.getState());h=k=>{const v=c(k);if(!m(b,v)){const y=b;u(b=v,y)}},d?.fireImmediately&&u(b,b)}return o(h)},f(a,r,i)},rb=Py;function Ty(f){const a=Math.floor(f/60),r=f%60;return`${a.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`}function Ny(f){switch(f){case"work":return"🍅";case"shortBreak":return"☕";case"longBreak":return"🌟";default:return"🍅"}}function $u(f){switch(f){case"work":return"专注工作";case"shortBreak":return"短休息";case"longBreak":return"长休息";default:return"专注工作"}}function Iy(f,a,r){return f==="work"?(a+1)%r===0?"longBreak":"shortBreak":"work"}function Ay(f,a,r=!1){const i=r?"⏸️":Ny(f),o=Ty(a);return`${i} ${o}`}function Fy(f,a){const r=$u(f),i=$u(a);switch(f){case"work":return`🎉 ${r}完成!${a==="longBreak"?"是时候好好休息一下了!":"休息一下再继续吧!"}`;case"shortBreak":return`☕ ${r}结束,准备开始${i}!`;case"longBreak":return`🌟 ${r}结束,精神饱满地开始新的工作吧!`;default:return`会话完成,开始${i}!`}}const mm={isRunning:!1,isPaused:!1,remainingTime:0,currentSession:"work",sessionCount:0,totalWorkTime:0,startTime:null},Ly=f=>f?.settings?.pomodoroSettings?f.settings.pomodoroSettings:{workDuration:25,shortBreakDuration:5,longBreakDuration:15,longBreakInterval:4,enableNotifications:!0,enableStatusBar:!0,autoStartBreaks:!1,autoStartWork:!1},zy=f=>f?.settings?.userProfile?f.settings.userProfile:ca.userProfile,Ry=f=>({light:f?.settings?.themeColors?.light||ua,dark:f?.settings?.themeColors?.dark||pa,modePreference:f?.settings?.themeModePreference||"system"}),Oy=f=>f?.settings?.componentSettings?f.settings.componentSettings:ca.componentSettings,Xe=eb()(tb(rb((f,a)=>({app:null,plugin:null,dataService:new Zs(null,void 0),userProfile:null,writingStats:null,writingStatsLoading:!1,writingStatsError:null,books:[],booksLoading:!1,booksError:null,projects:[],projectsLoading:!1,projectsError:null,papers:[],papersLoading:!1,papersError:null,experiments:[],experimentsLoading:!1,experimentsError:null,resources:[],resourcesLoading:!1,resourcesError:null,todos:[],pomodoroState:{...mm},pomodoroSettings:{workDuration:25,shortBreakDuration:5,longBreakDuration:15,longBreakInterval:4,enableNotifications:!0,enableStatusBar:!0,autoStartBreaks:!1,autoStartWork:!1},todosLoading:!1,todosError:null,literature:[],literatureLoading:!1,literatureError:null,researchFocusMap:null,researchFocusLoading:!1,researchFocusError:null,userProfileSettings:ca.userProfile,themeSettings:{light:ua,dark:pa,modePreference:"system"},componentSettings:ca.componentSettings,settingsVersion:0,currentTab:"academic",setCurrentTab:r=>f({currentTab:r}),initializeDataService:(r,i,o)=>{const l={app:r,dataService:new Zs(r,i,void 0,o)};o&&(l.plugin=o,l.pomodoroSettings=Ly(o),l.userProfileSettings=zy(o),l.themeSettings=Ry(o),l.componentSettings=Oy(o)),f(l)},getDataManagerStatus:()=>{const r=a().dataService,i=!!r.dataManager,o=!!r&&!!r.app;return{hasDataManager:i,dataServiceInitialized:o}},fetchUserProfile:async()=>{try{const r=a().plugin;if(r?.settings?.userProfile)f({userProfile:r.settings.userProfile});else{const i=await a().dataService.getUserProfile();f({userProfile:i})}}catch(r){console.error("Error fetching user profile:",r)}},fetchWritingStats:async()=>{f({writingStatsLoading:!0,writingStatsError:null});try{const r=await a().dataService.getWritingStats();f({writingStats:r,writingStatsLoading:!1})}catch(r){f({writingStatsError:r instanceof Error?r.message:"Failed to load writing stats",writingStatsLoading:!1})}},fetchBooks:async()=>{f({booksLoading:!0,booksError:null});try{const r=await a().dataService.getBooksData();f({books:r,booksLoading:!1})}catch(r){f({booksError:r instanceof Error?r.message:"Failed to load books",booksLoading:!1})}},fetchProjects:async()=>{f({projectsLoading:!0,projectsError:null});try{const r=await a().dataService.getProjectsData();f({projects:r,projectsLoading:!1})}catch(r){f({projectsError:r instanceof Error?r.message:"Failed to load projects",projectsLoading:!1})}},fetchPapers:async()=>{f({papersLoading:!0,papersError:null});try{const r=await a().dataService.getPapersData();f({papers:r,papersLoading:!1})}catch(r){f({papersError:r instanceof Error?r.message:"Failed to load papers",papersLoading:!1})}},fetchExperiments:async()=>{f({experimentsLoading:!0,experimentsError:null});try{const r=await a().dataService.getExperimentsData();f({experiments:r,experimentsLoading:!1})}catch(r){f({experimentsError:r instanceof Error?r.message:"Failed to load experiments",experimentsLoading:!1})}},fetchResources:async()=>{f({resourcesLoading:!0,resourcesError:null});try{const r=await a().dataService.getResourcesData();f({resources:r,resourcesLoading:!1})}catch(r){f({resourcesError:r instanceof Error?r.message:"Failed to load resources",resourcesLoading:!1})}},fetchTodos:async()=>{f({todosLoading:!0,todosError:null});try{const r=await a().dataService.getTodosData();f({todos:r,todosLoading:!1})}catch(r){f({todosError:r instanceof Error?r.message:"Failed to load todos",todosLoading:!1})}},fetchLiterature:async r=>{f({literatureLoading:!0,literatureError:null});try{const i=a().plugin,o=r||i?.settings?.componentDataSources?.recentLiterature?.literatureFolderPath||"Inputs/Zotero",l=await a().dataService.getRecentLiterature(o);f({literature:l,literatureLoading:!1})}catch(i){f({literatureError:i instanceof Error?i.message:"Failed to load literature",literatureLoading:!1})}},fetchResearchFocusMap:async r=>{f({researchFocusLoading:!0,researchFocusError:null});try{const i=a().plugin,o=r||i?.settings?.componentDataSources?.researchFocusMap?.trackingTags||[],l=await a().dataService.getResearchFocusMap(o);f({researchFocusMap:l,researchFocusLoading:!1})}catch(i){f({researchFocusError:i instanceof Error?i.message:"Failed to load research focus map",researchFocusLoading:!1})}},updateUserProfileSettings:r=>{const i={...a().userProfileSettings,...r};f({userProfileSettings:i});const o=a().plugin;o&&(o.settings.userProfile=i,o.saveSettings())},updateThemeSettings:r=>{const i={...a().themeSettings,...r};f({themeSettings:i});const o=a().plugin;o&&(o.settings.themeColors={light:i.light,dark:i.dark},o.settings.themeModePreference=i.modePreference,o.saveSettings())},updateThemeColors:(r,i)=>{const o=a().themeSettings,l={...o[r],...i},c={...o,[r]:l};f({themeSettings:c});const u=a().plugin;u&&(u.settings.themeColors||(u.settings.themeColors={light:ua,dark:pa}),u.settings.themeColors[r]=l,u.saveSettings())},updateComponentSettings:(r,i)=>{const o={...a().componentSettings,[r]:{...a().componentSettings[r],...i}};f({componentSettings:o});const l=a().plugin;l&&(l.settings.componentSettings=o,l.saveSettings())},bumpSettingsVersion:()=>{f({settingsVersion:a().settingsVersion+1})},startPomodoro:()=>{const{pomodoroState:r,pomodoroSettings:i}=a(),o=r.currentSession==="work"?i.workDuration:r.currentSession==="shortBreak"?i.shortBreakDuration:i.longBreakDuration,l=Math.max(1,Math.floor(o*60));f({pomodoroState:{...r,isRunning:!0,isPaused:!1,remainingTime:l,startTime:Date.now()}})},pausePomodoro:()=>{const{pomodoroState:r}=a();r.isRunning&&f({pomodoroState:{...r,isPaused:!r.isPaused}})},stopPomodoro:()=>{f({pomodoroState:{...mm,currentSession:"work"}})},skipSession:()=>{const{pomodoroState:r,pomodoroSettings:i}=a(),o=Iy(r.currentSession,r.sessionCount,i.longBreakInterval);f({pomodoroState:{...r,currentSession:o,isRunning:!1,isPaused:!1,remainingTime:0,startTime:null}})},tickPomodoro:()=>{const{pomodoroState:r}=a();if(!r.isRunning||r.isPaused)return;const i=Math.max(0,r.remainingTime-1),o=r.remainingTime>0&&i===0;f({pomodoroState:{...r,remainingTime:i,isRunning:r.isRunning,sessionCount:o&&r.currentSession==="work"?r.sessionCount+1:r.sessionCount,totalWorkTime:r.currentSession==="work"&&i>0?r.totalWorkTime+1:r.totalWorkTime}})},updatePomodoroSettings:r=>{const i={...a().pomodoroSettings,...r};f({pomodoroSettings:i});const o=a().plugin;o&&(o.settings.pomodoroSettings=i,o.saveSettings())},refreshAllData:async()=>{const r=[a().fetchUserProfile(),a().fetchWritingStats(),a().fetchBooks(),a().fetchProjects(),a().fetchTodos(),a().fetchLiterature(),a().fetchResearchFocusMap()];await Promise.all(r)}})),{name:"dashboard-store"}));class My extends _.Component{constructor(a,r,i){super(),this.unsubscribe=null,this.settingsUnsub=null,this.app=r,this.plugin=i,this.containerEl=a.createDiv({cls:"ppb-overview"})}onload(){const a=Xe.getState().writingStats;a?this.render(a):(this.renderLoading(),this.fetchAndRender()),this.unsubscribe=Xe.subscribe(r=>r.writingStats,r=>{r&&this.render(r)}),this.settingsUnsub=Xe.subscribe(r=>r.settingsVersion,()=>{const r=Xe.getState().writingStats;r&&this.render(r)})}async fetchAndRender(){const a=Xe.getState();try{await a.fetchWritingStats();const r=Xe.getState().writingStats;r?this.render(r):this.renderEmpty()}catch{this.renderError()}}renderLoading(){this.containerEl.empty();const a=this.containerEl.createDiv({cls:"ppb-overview-loading"}),r=a.createDiv({cls:"ppb-overview-spinner"});_.setIcon(r,"loader"),a.createEl("span",{text:"Loading academic data..."})}renderError(){this.containerEl.empty();const a=this.containerEl.createDiv({cls:"ppb-overview-error"});_.setIcon(a.createSpan(),"alert-triangle"),a.createEl("span",{text:"Failed to load academic data"}),a.createEl("button",{text:"Retry",cls:"mod-cta"}).addEventListener("click",()=>{this.renderLoading(),this.fetchAndRender()})}renderEmpty(){this.containerEl.empty(),this.containerEl.createDiv({cls:"ppb-overview-empty"}).createEl("p",{text:"No writing statistics available yet."})}render(a){this.containerEl.empty(),this.containerEl.addClass("ppb-overview");const r=ep("academicOverview",this.plugin),i=this.containerEl.createDiv({cls:"ppb-overview-spark-wrap"});this.buildSparkline(i,a);const o=this.containerEl.createDiv({cls:"ppb-overview-content"});o.createEl("h3",{text:r,cls:"ppb-overview-title"});const l=o.createDiv({cls:"ppb-overview-metric"});l.createEl("span",{text:a.totalWords.toLocaleString(),cls:"ppb-overview-metric-value"});const c=l.createEl("span",{cls:"ppb-overview-metric-growth"}),u=c.createSpan();_.setIcon(u,"trending-up"),c.createEl("span",{text:`${a.monthlyGrowth.toFixed(2)}%`});const d=a.monthlyGrowth>0?"Performing well compared to last month":a.monthlyGrowth<0?"Writing slightly down this month":"Keep it up, maintain your pace";o.createEl("p",{text:d,cls:"ppb-overview-subtitle"});const h=o.createDiv({cls:"ppb-overview-stats"}),m=[{icon:"file-text",label:"Literature",value:a.literatureCount},{icon:"book-open",label:"Notes",value:a.notesCount},{icon:"edit",label:"Drafts",value:a.draftsCount},{icon:"award",label:"Published",value:a.publishedCount}];for(const b of m){const k=h.createDiv({cls:"ppb-overview-stat"}),v=k.createDiv({cls:"ppb-overview-stat-icon"});_.setIcon(v,b.icon);const y=k.createDiv({cls:"ppb-overview-stat-info"});y.createEl("span",{text:b.label,cls:"ppb-overview-stat-label"}),y.createEl("span",{text:String(b.value),cls:"ppb-overview-stat-value"})}}buildSparkline(a,r){const i=r.dailyStats||[];if(i.length===0)return;const o=320,l=160,c={t:20,r:20,b:30,l:20},u=o-c.l-c.r,d=l-c.t-c.b,h="http://www.w3.org/2000/svg",m=document.createElementNS(h,"svg");m.setAttribute("viewBox",`0 0 ${o} ${l}`),m.classList.add("ppb-overview-sparkline");const b=i.map(V=>V.cumulativeWords??0),k=i.map(V=>V.previousMonthCumulative??0),v=[...b,...k],y=Math.max(...v,1),w=Math.min(...v,0),D=y-w||1,E=V=>V/Math.max(i.length-1,1)*u,T=V=>(y-V)/D*d,A=V=>V.map((K,Q)=>`${Q===0?"M":"L"} ${E(Q)} ${T(K)}`).join(" "),z=document.createElementNS(h,"g");z.setAttribute("transform",`translate(${c.l},${c.t})`);for(let V=0;V{this.applyThemeColors()}),this.themeObserver.observe(document.body,{attributes:!0,attributeFilter:["class"]})}applyThemeColors(){const a=document.body.classList.contains("theme-dark"),r=document.documentElement;let i;this.plugin?.settings?.themeColors?i=a?this.plugin.settings.themeColors.dark:this.plugin.settings.themeColors.light:i=a?By:$y,Object.entries(i).forEach(([o,l])=>{r.style.setProperty(`--${o}`,l),r.style.setProperty(`--ppb-${o}`,l),o==="primary"&&(r.style.setProperty("--chart-1",l),r.style.setProperty("--ppb-chart-1",l))})}buildNativeShell(){const a=this.contentEl;a.empty(),a.addClass("section-view-workspace");const r=a.createDiv({cls:"ppb-native-shell"}),i=r.createDiv({cls:"ppb-native-shell-header"});this.buildHeader(i),this.tabContainers.academic=r.createDiv({cls:"ppb-tab-container ppb-tab-academic"}),this.tabContainers.projects=r.createDiv({cls:"ppb-tab-container ppb-tab-projects"}),this.tabContainers.personal=r.createDiv({cls:"ppb-tab-container ppb-tab-personal"}),this.buildAcademicTab(this.tabContainers.academic),this.buildProjectsTab(this.tabContainers.projects),this.buildPersonalTab(this.tabContainers.personal),this.switchTab(Xe.getState().currentTab||"academic")}buildAcademicTab(a){const r=a.createDiv({cls:"ppb-academic-grid"}),i=[r.createDiv({cls:"ppb-island"}),r.createDiv({cls:"ppb-island"}),r.createDiv({cls:"ppb-base-cell ppb-academic-base"}),r.createDiv({cls:"ppb-base-cell ppb-academic-base"})],o=new My(i[0],this.app,this.plugin);this.addChild(o),this.buildTodayFocusViews(i[1]);const l=this.plugin.settings.componentDataSources?.recentLiterature?.literatureFolderPath||"Inputs/Zotero",c=this.plugin.settings.componentDataSources?.recentLiterature,u=new um(i[2],this.app,this.plugin,{title:c?.displayName||"最近文献",icon:"book-open",description:c?.description||"展示最近阅读和收集的学术文献",baseYaml:["filters:"," and:",` - file.inFolder("${l}")`,"views:"," - type: table",' name: "Literature"'," order:"," - file.name"," - tags"," - file.modified"].join(` -`)});this.addChild(u);const d=this.plugin.settings.componentDataSources?.researchFocusMap?.trackingTags||["research","study","paper","note","想法","project"],h=d.length>0?["filters:"," or:",...d.map(k=>` - file.hasTag("${k}")`)]:[],m=this.plugin.settings.componentDataSources?.researchFocusMap,b=new um(i[3],this.app,this.plugin,{title:m?.displayName||"研究焦点地图",icon:"target",description:m?.description||"可视化展示研究领域和关注重点",baseYaml:[...h,"views:"," - type: ppb-focus-heatmap",' name: "Research Focus"'," order:"," - file.name"," - tags"," - file.modified"].join(` -`),alternateView:{icon:"grid",tooltip:"Switch to heatmap grid view",baseYaml:[...h,"views:"," - type: ppb-focus-grid",' name: "Focus Grid"'," order:"," - file.name"," - tags"," - file.modified"].join(` -`)}});this.addChild(b)}buildTodayFocusViews(a){const r=a.createDiv({cls:"ppb-today-split"}),i=["filters:",` 'file.mtime >= date("today")'`,"views:"," - type: ppb-today-stats",' name: "Today Stats"'].join(` -`),o=["filters:",` 'file.mtime >= date("today")'`,"views:"," - type: ppb-weekly-performance",' name: "Weekly Performance"'].join(` -`),l=r.createDiv({cls:"ppb-today-split-cell"}),c=r.createDiv({cls:"ppb-today-split-cell"}),u=new _.Component;u.load(),this.register(()=>u.unload());const d=new _.Component;d.load(),this.register(()=>d.unload()),_.MarkdownRenderer.render(this.app,"```base\n"+i+"\n```",l,"",u),_.MarkdownRenderer.render(this.app,"```base\n"+o+"\n```",c,"",d)}buildProjectsTab(a){const r=a.createDiv({cls:"ppb-base-grid"}),i=["papers","experiments","tasks","resources"];for(const o of i){const l=r.createDiv({cls:"ppb-base-cell"}),c=new gy(l,this.app,this.plugin,o);this.addChild(c),this.baseContainers.push(c)}}buildPersonalTab(a){const r=a.createDiv({cls:"ppb-base-cell"}),i=new by(r,this.app,this.plugin,"books");this.addChild(i),this.baseContainers.push(i)}buildHeader(a){const r=Xe.getState(),i=this.plugin?.settings?.userProfile||{name:"用户",title:"研究者",email:"user@example.com",institution:"研究机构",avatar:""},o=a.createDiv({cls:"ppb-header"}),l=o.createDiv({cls:"ppb-header-left"}),u=l.createDiv({cls:"ppb-header-avatar"}).createEl("img",{attr:{src:this.resolveAvatarSrc(i.avatar),alt:"用户头像"}});u.addEventListener("error",()=>{u.src="https://avatars.githubusercontent.com/u/45836839?v=4"});const d=l.createDiv({cls:"ppb-header-info"}),h=d.createDiv({cls:"ppb-header-name-row"});h.createEl("h2",{cls:"ppb-header-name",text:i.name||"用户"}),h.createEl("span",{cls:"ppb-header-title",text:i.title||"研究者"});const m=d.createDiv({cls:"ppb-header-details"}),b=m.createDiv({cls:"ppb-header-detail-row"});b.createSpan({text:"📮"}),b.createSpan({text:i.email||"user@example.com"});const k=m.createDiv({cls:"ppb-header-detail-row"});k.createSpan({text:"🏫"}),k.createSpan({text:i.institution||"研究机构"});const v=o.createDiv({cls:"ppb-header-right"}),y=v.createEl("button",{cls:"ppb-header-settings-btn",attr:{title:"设置"}});y.innerHTML='',y.appendText(" 设置"),y.addEventListener("click",()=>this.openSettings());const w=v.createDiv({cls:"ppb-header-tab-switcher"}),D=[{key:"academic",label:"学术"},{key:"projects",label:"项目"},{key:"personal",label:"个人"}],E={};for(const A of D){const z=w.createEl("button",{cls:"ppb-header-tab-btn",text:A.label});r.currentTab===A.key&&z.addClass("ppb-header-tab-active"),z.addEventListener("click",()=>{Xe.getState().setCurrentTab(A.key)}),E[A.key]=z}const T=Xe.subscribe(A=>A.currentTab,A=>{for(const[z,R]of Object.entries(E))z===A?R.addClass("ppb-header-tab-active"):R.removeClass("ppb-header-tab-active")});this.register(()=>T())}resolveAvatarSrc(a){if(!a)return"https://avatars.githubusercontent.com/u/45836839?v=4";if(a.startsWith("http"))return a;const r=this.app.vault.getFileByPath(a);return r?this.app.vault.getResourcePath(r):"https://avatars.githubusercontent.com/u/45836839?v=4"}subscribeToTabChanges(){this.storeUnsubscribe=Xe.subscribe(a=>a.currentTab,a=>this.switchTab(a))}switchTab(a){Object.entries(this.tabContainers).forEach(([r,i])=>{r===a?i.addClass("ppb-tab-active"):i.removeClass("ppb-tab-active")})}openSettings(){const a=this.app.setting;a&&(a.open(),a.openTabById("paperbell"))}async onClose(){this.storeUnsubscribe&&(this.storeUnsubscribe(),this.storeUnsubscribe=null),this.themeObserver&&(this.themeObserver.disconnect(),this.themeObserver=null);for(const a of this.baseContainers)this.removeChild(a);if(this.baseContainers=[],this.dataManager&&this.dataManager!==this.plugin.dataManager)try{this.dataManager.destroy()}catch(a){console.error("Error destroying DataManager:",a)}this.dataManager=null}getDefaultSettings(){return{sections:[],configMode:!1,layout:"free-grid",theme:"auto"}}}class Uy{constructor(a,r){this.baseUrl="https://paperbell.cn/api",this.isActivated=!1,this.fallbackMode=!1,this.lastProxyFailureTime=0,this.FALLBACK_COOLDOWN=300*1e3,this.activationCode=a,this.deviceId=r||this.generateDeviceId()}generateDeviceId(){const a=localStorage.getItem("paperbell-device-id");if(a)return a;const r=navigator.userAgent,i=navigator.platform,o=navigator.language,l=Intl.DateTimeFormat().resolvedOptions().timeZone,c=`${screen.width}x${screen.height}`;let u="";navigator.hardwareConcurrency&&(u=navigator.hardwareConcurrency.toString());const d=[r,i,o,l,c,u].join("|");let h=0;for(let b=0;bo)return new _.Notice("Activation failed: License has expired"),!1}return i.token_type&&i.token_type!=="activation_code"?(new _.Notice("Activation failed: Invalid token type"),!1):(this.isActivated=!0,!0)}else return new _.Notice("Activation failed: "+(r.error||"Invalid activation code")),!1}else return new _.Notice("Activation failed: Server error"),!1}catch(a){return console.error("Activation error:",a),new _.Notice("Activation failed: Network error"),!1}}async proxyRequest(a){if(!this.isActivated&&!await this.activate())return{success:!1,error:"Device not activated"};if(!this.fallbackMode||this.shouldRetryProxy())try{const r=new URL(a.url),i=a.url,o=r.host,l=`${this.baseUrl}/proxy`,c={url:i,method:a.method||"GET",headers:a.headers||{},...a.body&&{body:a.body}},u={url:l,method:"POST",headers:{"X-Activation-Code":this.activationCode,"X-Device-ID":this.deviceId,"X-Target-Service":o,"Content-Type":"application/json"},body:JSON.stringify(c)},d=await _.requestUrl(u);if(d.status===200)return this.fallbackMode=!1,{success:!0,data:d.json,status:d.status};if(d.status===401||d.status===403)return this.isActivated=!1,new _.Notice("License expired or invalid. Please check your activation code."),{success:!1,error:"License expired or invalid",status:d.status};console.warn(`Proxy server error (${d.status}), switching to fallback`),this.enableFallbackMode()}catch(r){console.warn("Proxy request failed, switching to fallback:",r),this.enableFallbackMode()}try{const r={url:a.url,method:a.method||"GET",headers:a.headers||{}};a.body&&(r.body=typeof a.body=="string"?a.body:JSON.stringify(a.body));const i=await _.requestUrl(r);return{success:!0,data:i.json,status:i.status,usedFallback:!0}}catch(r){return console.error("Direct request fallback also failed:",r),{success:!1,error:r.message||"Both proxy and direct request failed",usedFallback:!0}}}enableFallbackMode(){this.fallbackMode=!0,this.lastProxyFailureTime=Date.now()}shouldRetryProxy(){return Date.now()-this.lastProxyFailureTime>this.FALLBACK_COOLDOWN}updateActivationCode(a){this.activationCode=a,this.isActivated=!1,this.fallbackMode=!1}isServiceActivated(){return this.isActivated}getDeviceId(){return this.deviceId}isInFallbackMode(){return this.fallbackMode}}class Vy{constructor(a,r){this.dataService=null,this.app=a,this.config={...bi,componentSettings:mr,...r}}getConfig(){return{...this.config}}updateConfig(a){this.config={...this.config,...a},this.dataService&&this.dataService.updateConfig(this.config)}updateUserProfile(a){this.config.userProfile={...this.config.userProfile,...a},this.dataService&&this.dataService.updateConfig(this.config)}updateDataSources(a){this.config.dataSources={...this.config.dataSources,...a},this.dataService&&this.dataService.updateConfig(this.config)}updateComponentSettings(a){this.config.componentSettings={...this.config.componentSettings,...a},this.dataService&&this.dataService.updateConfig(this.config)}getDataService(a){return this.dataService||(this.dataService=new Zs(this.app,a,this.config)),this.dataService}resetToDefaults(){this.config={...bi,componentSettings:mr},this.dataService&&this.dataService.updateConfig(this.config)}validateConfig(){const a=[];this.config.userProfile.name.trim()||a.push("用户名称不能为空"),this.config.userProfile.email.trim()||a.push("用户邮箱不能为空");const r=["booksFolder","projectsFolder","papersFolder","notesFolder","literatureFolder","experimentsFolder","resourcesFolder"];for(const i of r)this.config.dataSources[i].trim()||a.push(`${i} 路径不能为空`);return this.config.dataSources.todosSource==="folder"&&!this.config.dataSources.todosFolder?.trim()&&a.push("待办事项文件夹路径不能为空"),{isValid:a.length===0,errors:a}}loadFromPluginSettings(a){a.dataServiceConfig&&this.updateConfig(a.dataServiceConfig)}exportToPluginSettings(){return{dataServiceConfig:this.config}}getRecommendedFolderStructure(){return{Books:"存放书籍相关的笔记和元数据",Projects:"存放项目管理相关的文件",Papers:"存放学术论文和研究文档",Notes:"存放日常笔记和研究记录","Inputs/Zotero":"存放从 Zotero 导入的文献",Experiments:"存放实验设计和数据",Resources:"存放学术资源和工具链接",Tasks:"存放待办事项(如果使用文件夹模式)"}}async checkFoldersExist(){const a=[],r=this.getRecommendedFolderStructure();for(const[i,o]of Object.entries(r)){const l=await this.app.vault.adapter.exists(i);a.push({folder:i,exists:l,description:o})}return a}async createMissingFolders(){const a=[],r=await this.checkFoldersExist();for(const{folder:i,exists:o}of r)if(!o)try{await this.app.vault.createFolder(i),a.push(i)}catch(l){console.error(`Failed to create folder ${i}:`,l)}return a}}class Wy extends _.Component{constructor(a){super(),this.statusBarItem=null,this.timer=null,this.unsubscribe=null,this.plugin=a}onload(){this.createStatusBarItem(),this.subscribeToStore(),this.startTimer(),this.loadSettings()}onunload(){this.stopTimer(),this.statusBarItem&&(this.statusBarItem.remove(),this.statusBarItem=null),this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null)}createStatusBarItem(){this.plugin.app.workspace.leftSplit&&(this.statusBarItem=this.plugin.addStatusBarItem(),this.statusBarItem.addClass("ppb-pomodoro-status-bar"),this.statusBarItem.setAttribute("aria-label","番茄钟"),this.statusBarItem.style.cursor="pointer",this.statusBarItem.addEventListener("click",a=>{a.preventDefault(),this.handleStatusBarClick()}),this.statusBarItem.addEventListener("contextmenu",a=>{a.preventDefault(),this.showContextMenu(a)}),this.updateStatusBarDisplay())}subscribeToStore(){this.unsubscribe=Xe.subscribe(a=>a.pomodoroState,(a,r)=>{this.updateStatusBarDisplay(),r&&r.remainingTime>0&&a.remainingTime<=0&&a.isRunning&&this.handleSessionComplete(r.currentSession)})}updateStatusBarDisplay(){if(!this.statusBarItem)return;const a=Xe.getState(),{pomodoroState:r,pomodoroSettings:i}=a;if(!i.enableStatusBar){this.statusBarItem.style.display="none";return}if(this.statusBarItem.style.display="block",r.isRunning||r.remainingTime>0){const l=Ay(r.currentSession,r.remainingTime,r.isPaused);this.statusBarItem.setText(l),this.statusBarItem.removeClass("ppb-pomodoro-idle","ppb-pomodoro-paused"),r.isPaused?this.statusBarItem.addClass("ppb-pomodoro-paused"):this.statusBarItem.addClass("ppb-pomodoro-running")}else this.statusBarItem.setText("🍅"),this.statusBarItem.removeClass("ppb-pomodoro-running","ppb-pomodoro-paused"),this.statusBarItem.addClass("ppb-pomodoro-idle");const o=$u(r.currentSession);this.statusBarItem.setAttribute("aria-label",`番茄钟 - ${o}`)}startTimer(){this.timer||(this.timer=window.setInterval(()=>{const a=Xe.getState();a.pomodoroState.isRunning&&!a.pomodoroState.isPaused&&a.tickPomodoro()},1e3))}stopTimer(){this.timer&&(window.clearInterval(this.timer),this.timer=null)}handleStatusBarClick(){const a=Xe.getState(),{pomodoroState:r}=a;if(r.isRunning){a.pausePomodoro();const i=r.isPaused?"继续":"暂停";new _.Notice(`番茄钟${i}`)}else a.startPomodoro(),new _.Notice("开始专注工作!")}showContextMenu(a){const r=Xe.getState(),{pomodoroState:i}=r,o=new _.Menu;i.isRunning?(o.addItem(l=>{l.setTitle(i.isPaused?"继续":"暂停").setIcon(i.isPaused?"play":"pause").onClick(()=>{r.pausePomodoro()})}),o.addItem(l=>{l.setTitle("跳过当前会话").setIcon("skip-forward").onClick(()=>{r.skipSession(),new _.Notice("已跳过当前会话")})}),o.addItem(l=>{l.setTitle("停止").setIcon("stop-circle").onClick(()=>{r.stopPomodoro(),new _.Notice("番茄钟已停止")})})):o.addItem(l=>{l.setTitle("开始专注").setIcon("play").onClick(()=>{r.startPomodoro(),new _.Notice("开始专注工作!")})}),o.addSeparator(),o.addItem(l=>{l.setTitle(`今日完成: ${i.sessionCount} 个番茄钟`).setIcon("calendar").setDisabled(!0)}),o.showAtPosition({x:a.clientX,y:a.clientY})}handleSessionComplete(a){const r=Xe.getState(),{pomodoroState:i,pomodoroSettings:o}=r;if(o.enableNotifications){const c=i.currentSession,u=Fy(a,c);new _.Notice(u,5e3)}(a==="work"&&o.autoStartBreaks||a!=="work"&&o.autoStartWork)&&setTimeout(()=>{const c=Xe.getState();c.pomodoroState.isRunning||c.startPomodoro()},2e3)}loadSettings(){try{const a=localStorage.getItem("pomodoroSettings");if(a){const r=JSON.parse(a);Xe.getState().updatePomodoroSettings(r)}}catch(a){console.warn("Failed to load pomodoro settings:",a)}}getCurrentState(){return Xe.getState().pomodoroState}getSettings(){return Xe.getState().pomodoroSettings}}function bm(f){return f!==null&&typeof f=="object"&&!Array.isArray(f)}function ab(f,a){if(!a)return{...f};const r={...f};for(const i of Object.keys(a)){const o=a[i],l=f[i];o!==void 0&&(bm(o)&&bm(l)?r[i]=ab(l,o):r[i]=o)}return r}class Hy extends _.BasesView{constructor(a,r){super(a),this.type="ppb-focus-heatmap",this.drilldownComponent=null,this.containerEl=r}onDataUpdated(){this.render()}matchesTrackingTag(a,r){if(r.size===0)return!0;const i=a.toLowerCase();for(const o of r)if(i===o||i.startsWith(o+"/"))return!0;return!1}render(){this.cleanupDrilldown(),this.containerEl.empty(),this.containerEl.addClass("ppb-focus-heatmap");const a=this.data?.data??[];if(a.length===0){this.renderEmpty();return}const i=this.app.plugins?.plugins?.paperbell?.settings?.componentDataSources?.researchFocusMap?.trackingTags||[],o=new Set(i.map(w=>w.replace(/^#/,"").toLowerCase())),l=new Map,c=new Map,u=new Date;for(const w of a){const D=w.file,E=this.app.metadataCache.getFileCache(D);if(E?.frontmatter?.tags){const z=Array.isArray(E.frontmatter.tags)?E.frontmatter.tags:[E.frontmatter.tags];for(const R of z){const q=String(R).replace(/^#/,"");this.matchesTrackingTag(q,o)&&l.set(q,(l.get(q)||0)+1)}}if(E?.tags)for(const z of E.tags){const R=z.tag.replace(/^#/,"");this.matchesTrackingTag(R,o)&&l.set(R,(l.get(R)||0)+1)}const T=new Date(D.stat.mtime),A=this.getWeekKey(T);c.set(A,(c.get(A)||0)+1)}const d=[...l.entries()].sort((w,D)=>D[1]-w[1]).slice(0,8),h=d.length>0?d[0][1]:1,m=this.containerEl.createDiv({cls:"ppb-focus-wrapper"}),b=m.createDiv({cls:"ppb-focus-stats"});this.renderStatCard(b,"file-text",String(a.length),"Total Notes");const k=this.getWeekKey(u),v=c.get(k)||0;if(this.renderStatCard(b,"activity",String(v),"This Week"),this.renderStatCard(b,"tags",String(l.size),"Focus Tags"),d.length>0){const w=m.createDiv({cls:"ppb-focus-tags-section"});w.createEl("div",{text:"Tag Distribution",cls:"ppb-focus-section-title"});const D=w.createDiv({cls:"ppb-focus-tag-list"});for(const[E,T]of d){const A=D.createDiv({cls:"ppb-focus-tag-row"});A.createSpan({text:`#${E}`,cls:"ppb-focus-tag-name"});const R=A.createDiv({cls:"ppb-focus-tag-bar-bg"}).createDiv({cls:"ppb-focus-tag-bar"});R.style.width=`${Math.max(T/h*100,4)}%`,A.createSpan({text:String(T),cls:"ppb-focus-tag-count"})}}const y=m.createDiv({cls:"ppb-focus-heatmap-section"});y.createEl("div",{text:"Recent Activity",cls:"ppb-focus-section-title"}),this.renderWeeklyHeatmap(y,c,u,i)}renderEmpty(){const a=this.containerEl.createDiv({cls:"ppb-focus-empty"}),r=a.createDiv({cls:"ppb-focus-empty-icon"});_.setIcon(r,"target"),a.createEl("p",{text:"No matching notes found",cls:"ppb-focus-empty-title"}),a.createEl("p",{text:"Notes with tracked tags will appear here",cls:"ppb-focus-empty-hint"})}renderStatCard(a,r,i,o){const l=a.createDiv({cls:"ppb-focus-stat-card"}),c=l.createDiv({cls:"ppb-focus-stat-icon"});_.setIcon(c,r),l.createDiv({text:i,cls:"ppb-focus-stat-value"}),l.createDiv({text:o,cls:"ppb-focus-stat-label"})}renderWeeklyHeatmap(a,r,i,o){const l=a.createDiv({cls:"ppb-focus-heatmap-grid"}),c=[];for(let d=11;d>=0;d--){const h=new Date(i);h.setDate(h.getDate()-d*7);const m=this.getWeekKey(h),b=r.get(m)||0,k=`${h.getMonth()+1}/${h.getDate()}`,v=new Date(h);v.setDate(v.getDate()-(v.getDay()+6)%7),v.setHours(0,0,0,0);const y=new Date(v);y.setDate(y.getDate()+6),y.setHours(23,59,59,999),c.push({key:m,label:k,count:b,start:v,end:y})}const u=Math.max(...c.map(d=>d.count),1);for(const d of c){const h=l.createDiv({cls:"ppb-focus-heatmap-cell"}),m=d.count===0?0:Math.min(Math.ceil(d.count/u*4),4);h.addClass(`ppb-focus-heat-${m}`),h.setAttribute("aria-label",`${d.label}: ${d.count} notes`),h.createDiv({text:d.label,cls:"ppb-focus-heatmap-label"}),h.createDiv({text:String(d.count),cls:"ppb-focus-heatmap-count"}),d.count>0&&(h.style.cursor="pointer",h.addEventListener("click",()=>{this.showWeekListView(d.label,d.start,d.end,d.count,o)}))}}async showWeekListView(a,r,i,o,l){this.cleanupDrilldown(),this.containerEl.empty();const c=this.containerEl.createDiv({cls:"ppb-focus-map-drilldown"}),u=c.createDiv({cls:"ppb-focus-map-drilldown-header"}),d=u.createDiv({cls:"ppb-focus-map-drilldown-label"});d.textContent=`Week of ${a} · ${o} notes`;const h=u.createEl("button",{cls:"clickable-icon ppb-focus-map-drilldown-back",attr:{"aria-label":"Back to overview"}});_.setIcon(h,"arrow-left"),h.addEventListener("click",()=>this.render());const m=A=>`${A.getFullYear()}-${String(A.getMonth()+1).padStart(2,"0")}-${String(A.getDate()).padStart(2,"0")}`,b=m(r),k=m(i),v=l.map(A=>A.replace(/^#/,"")),y=[];if(y.push("filters:"),y.push(" and:"),y.push(` - 'file.mtime >= date("${b}")'`),y.push(` - 'file.mtime <= date("${k}") + "1d"'`),v.length>0){y.push(" - or:");for(const A of v)y.push(` - file.hasTag("${A}")`)}const w=[];if(v.length>0){const A=v.map(z=>`value == "#${z}" || value.startsWith("#${z}/")`).join(" || ");w.push("formulas:"),w.push(` focus_tag: 'file.tags.filter(${A}).join(", ")'`)}const D=[...y,...w,"views:"," - type: list",` name: "Week of ${a}"`,...v.length>0?[" groupBy:"," property: formula.focus_tag"," direction: ASC"]:[]," order:"," - file.name"," - tags"," - file.modified"].join(` -`),E=c.createDiv({cls:"ppb-focus-map-drilldown-content"});this.drilldownComponent=new _.Component,this.drilldownComponent.load();const T="```base\n"+D+"\n```";try{await _.MarkdownRenderer.render(this.app,T,E,"",this.drilldownComponent)}catch(A){console.error("[ResearchFocusBasesView] Failed to render list view:",A),E.empty(),E.createDiv({text:`Failed to render list: ${A}`,cls:"ppb-focus-map-error"})}}cleanupDrilldown(){this.drilldownComponent&&(this.drilldownComponent.unload(),this.drilldownComponent=null)}getWeekKey(a){const r=new Date(a);r.setHours(0,0,0,0),r.setDate(r.getDate()+3-(r.getDay()+6)%7);const i=new Date(r.getFullYear(),0,4),o=Math.ceil(((r.getTime()-i.getTime())/864e5+i.getDay()+1)/7);return`${r.getFullYear()}-W${String(o).padStart(2,"0")}`}}class qy extends _.BasesView{constructor(a,r){super(a),this.type="ppb-focus-grid",this.cellDateRanges=[],this.drilldownComponent=null,this.containerEl=r}onDataUpdated(){this.render()}render(){this.cleanupDrilldown(),this.containerEl.empty(),this.containerEl.addClass("ppb-focus-map");const a=this.data?.data??[];if(a.length===0){this.renderEmpty();return}const i=this.app.plugins?.plugins?.paperbell?.settings?.componentDataSources?.researchFocusMap,o=i?.trackingTags||[],l=new Set(o.map(T=>T.replace(/^#/,"").toLowerCase())),c={gridSize:i?.gridSize??50,borderRadius:i?.borderRadius??6},{months:u,data:d,dateRanges:h}=this.computeGrid(a,o,l);this.cellDateRanges=h;const m=this.containerEl.createDiv({cls:"ppb-focus-map-info"});o.length>0&&m.createEl("span",{text:`Tracking: ${o.map(T=>`#${T}`).join(", ")}`,cls:"ppb-focus-map-tags"}),m.createEl("span",{text:`${a.length} notes`,cls:"ppb-focus-map-count"});const b=["W1","W2","W3","W4"],k=this.containerEl.createDiv({cls:"ppb-focus-map-grid"});k.style.gridTemplateColumns="minmax(55px, max-content) repeat(4, 1fr)",k.createDiv();for(const T of b)k.createDiv({text:T,cls:"ppb-focus-map-week-header"});const v=d.length>0?d:Array(Math.max(u.length,3)).fill(null).map(()=>Array(4).fill({tag:"",intensity:0,count:0,weekNotes:0})),y=u.length>0?u:["Mon 1","Mon 2","Mon 3"];for(let T=0;T.7&&(R.style.boxShadow="0 0 8px rgba(100, 142, 192, 0.3)"),R.title=z?.tag?`${z.tag} - Focus: ${Math.round(q*100)}%${z.count?` - ${z.count} notes`:""}${z.weekNotes?` - ${z.weekNotes} total this week`:""}`:"No data",z?.tag){const V=q>.5?"var(--primary-foreground)":"var(--foreground)",K=R.createDiv({cls:"ppb-focus-map-cell-tag"});K.style.color=V,K.textContent=z.tag;const Q=R.createDiv({cls:"ppb-focus-map-cell-pct"});if(Q.style.color=V,Q.textContent=`${Math.round(q*100)}%`,z.count>0){const he=R.createDiv({cls:"ppb-focus-map-cell-count"});he.style.color=V,he.textContent=`(${z.count})`}R.style.cursor="pointer",R.addEventListener("click",()=>{const he=this.cellDateRanges[T]?.[A];he&&this.showCellListView(y[T],`W${A+1}`,z,he,o)})}}}const w=this.containerEl.createDiv({cls:"ppb-focus-map-legend"});w.createEl("span",{text:"Focus"});const D=w.createDiv({cls:"ppb-focus-map-legend-bar"});D.createEl("span",{text:"Low"});const E=D.createDiv({cls:"ppb-focus-map-legend-swatches"});for(const T of[.2,.4,.6,.8,1]){const A=E.createDiv({cls:"ppb-focus-map-legend-swatch"});A.style.backgroundColor=this.getColor(T),A.style.borderRadius=`${Math.min(c.borderRadius,6)}px`}D.createEl("span",{text:"High"})}computeGrid(a,r,i){const o=new Date,l=new Date(o.getFullYear(),o.getMonth()-2,1),c=[],u=[],d=[];for(let h=0;h<3;h++){const m=new Date(l.getFullYear(),l.getMonth()+h,1);c.push(m.toLocaleDateString("en-US",{month:"short"}));const b=new Date(m.getFullYear(),m.getMonth()+1,0).getDate(),k=[],v=[];for(let y=0;y<4;y++){const w=new Date(m.getFullYear(),m.getMonth(),Math.max(1,y*7+1));w.setHours(0,0,0,0);const D=new Date(m.getFullYear(),m.getMonth(),Math.min(b,(y+1)*7));D.setHours(23,59,59,999),v.push({start:new Date(w),end:new Date(D)});const E=a.filter(z=>{const R=z.file?.stat?.mtime;if(!R)return!1;const q=new Date(R);return q>=w&&q<=D}),T={};for(const z of E){const R=z.file,q=this.app.metadataCache.getFileCache(R),V=this.collectFileTags(q);for(const K of V)if(this.matchesAnyTrackingTag(K,r,i)){const Q=this.findMatchingTrackingTag(K,r,i);T[Q]=(T[Q]||0)+1}}const A=Object.entries(T).sort((z,R)=>R[1]-z[1]);if(A.length>0){const[z,R]=A[0],q=Math.max(...A.map(([,K])=>K)),V=Math.max(.1,Math.min(R/Math.max(q,5),1));k.push({tag:`#${z}`,intensity:V,count:R,weekNotes:E.length})}else k.push({tag:"",intensity:0,count:0,weekNotes:E.length})}u.push(k),d.push(v)}return{months:c,data:u,dateRanges:d}}collectFileTags(a){const r=[];if(a?.frontmatter?.tags){const i=Array.isArray(a.frontmatter.tags)?a.frontmatter.tags:[a.frontmatter.tags];for(const o of i)r.push(String(o).replace(/^#/,""))}if(a?.tags)for(const i of a.tags)r.push(i.tag.replace(/^#/,""));return r}matchesAnyTrackingTag(a,r,i){if(i.size===0)return!0;const o=a.toLowerCase();for(const l of i)if(o===l||o.startsWith(l+"/"))return!0;return!1}findMatchingTrackingTag(a,r,i){const o=a.toLowerCase();for(const l of r){const c=l.replace(/^#/,"").toLowerCase();if(o===c||o.startsWith(c+"/"))return l.replace(/^#/,"")}return a}async showCellListView(a,r,i,o,l){this.cleanupDrilldown(),this.containerEl.empty();const c=this.containerEl.createDiv({cls:"ppb-focus-map-drilldown"}),u=c.createDiv({cls:"ppb-focus-map-drilldown-header"}),d=u.createDiv({cls:"ppb-focus-map-drilldown-label"});d.textContent=`${a} ${r}${i.tag?` · ${i.tag}`:""}${i.weekNotes?` · ${i.weekNotes} notes`:""}`;const h=u.createEl("button",{cls:"clickable-icon ppb-focus-map-drilldown-back",attr:{"aria-label":"Back to heatmap"}});_.setIcon(h,"arrow-left"),h.addEventListener("click",()=>this.render());const m=A=>`${A.getFullYear()}-${String(A.getMonth()+1).padStart(2,"0")}-${String(A.getDate()).padStart(2,"0")}`,b=m(o.start),k=m(o.end),v=l.map(A=>A.replace(/^#/,"")),y=[];if(y.push("filters:"),y.push(" and:"),y.push(` - 'file.mtime >= date("${b}")'`),y.push(` - 'file.mtime <= date("${k}") + "1d"'`),v.length>0){y.push(" - or:");for(const A of v)y.push(` - file.hasTag("${A}")`)}const w=[];if(v.length>0){const A=v.map(z=>`value == "#${z}" || value.startsWith("#${z}/")`).join(" || ");w.push("formulas:"),w.push(` focus_tag: 'file.tags.filter(${A}).join(", ")'`)}const D=[...y,...w,"views:"," - type: list",` name: "${a} ${r}"`,...v.length>0?[" groupBy:"," property: formula.focus_tag"," direction: ASC"]:[]," order:"," - file.name"," - tags"," - file.modified"].join(` -`),E=c.createDiv({cls:"ppb-focus-map-drilldown-content"});this.drilldownComponent=new _.Component,this.drilldownComponent.load();const T="```base\n"+D+"\n```";try{await _.MarkdownRenderer.render(this.app,T,E,"",this.drilldownComponent)}catch(A){console.error("[ResearchFocusMapView] Failed to render list view:",A),E.empty(),E.createDiv({text:`Failed to render list: ${A}`,cls:"ppb-focus-map-error"})}}cleanupDrilldown(){this.drilldownComponent&&(this.drilldownComponent.unload(),this.drilldownComponent=null)}renderEmpty(){const a=this.containerEl.createDiv({cls:"ppb-focus-map-empty"}),r=a.createDiv({cls:"ppb-focus-empty-icon"});_.setIcon(r,"target"),a.createEl("p",{text:"No research focus data found."}),a.createEl("p",{text:"Add tags to your notes to start tracking research focus.",cls:"ppb-focus-map-hint"})}getColor(a){const r=Math.max(.1,a),i=getComputedStyle(document.documentElement).getPropertyValue("--primary").trim();if(i.startsWith("#")){const o=parseInt(i.slice(1,3),16),l=parseInt(i.slice(3,5),16),c=parseInt(i.slice(5,7),16);return`rgba(${o}, ${l}, ${c}, ${r})`}return`rgba(100, 142, 192, ${r})`}}var Oe={},vm;function Gy(){if(vm)return Oe;vm=1,Object.defineProperty(Oe,"__esModule",{value:!0});var f=_;const a="YYYY-MM-DD",r="gggg-[W]ww",i="YYYY-MM",o="YYYY-[Q]Q",l="YYYY";function c(O){const N=window.app.plugins.getPlugin("periodic-notes");return N&&N.settings?.[O]?.enabled}function u(){try{const{internalPlugins:O,plugins:N}=window.app;if(c("daily")){const{format:ie,folder:Z,template:me}=N.getPlugin("periodic-notes")?.settings?.daily||{};return{format:ie||a,folder:Z?.trim()||"",template:me?.trim()||""}}const{folder:F,format:$,template:te}=O.getPluginById("daily-notes")?.instance?.options||{};return{format:$||a,folder:F?.trim()||"",template:te?.trim()||""}}catch{}}function d(){try{const O=window.app.plugins,N=O.getPlugin("calendar")?.options,F=O.getPlugin("periodic-notes")?.settings?.weekly;if(c("weekly"))return{format:F.format||r,folder:F.folder?.trim()||"",template:F.template?.trim()||""};const $=N||{};return{format:$.weeklyNoteFormat||r,folder:$.weeklyNoteFolder?.trim()||"",template:$.weeklyNoteTemplate?.trim()||""}}catch{}}function h(){const O=window.app.plugins;try{const N=c("monthly")&&O.getPlugin("periodic-notes")?.settings?.monthly||{};return{format:N.format||i,folder:N.folder?.trim()||"",template:N.template?.trim()||""}}catch{}}function m(){const O=window.app.plugins;try{const N=c("quarterly")&&O.getPlugin("periodic-notes")?.settings?.quarterly||{};return{format:N.format||o,folder:N.folder?.trim()||"",template:N.template?.trim()||""}}catch{}}function b(){const O=window.app.plugins;try{const N=c("yearly")&&O.getPlugin("periodic-notes")?.settings?.yearly||{};return{format:N.format||l,folder:N.folder?.trim()||"",template:N.template?.trim()||""}}catch{}}function k(...O){let N=[];for(let $=0,te=O.length;${const lt=$(),Pt=O.clone().set({hour:lt.get("hour"),minute:lt.get("minute"),second:lt.get("second")});return vt&&Pt.add(parseInt(tt,10),at),Ie?Pt.format(Ie.substring(1).trim()):Pt.format(ie)}).replace(/{{\s*yesterday\s*}}/gi,O.clone().subtract(1,"day").format(ie)).replace(/{{\s*tomorrow\s*}}/gi,O.clone().add(1,"d").format(ie)));return N.foldManager.save(Re,be),Re}catch(Re){console.error(`Failed to create file: '${xe}'`,Re),new f.Notice("Unable to create new file.")}}function Q(O,N){return N[E(O,"day")]??null}function he(){const{vault:O}=window.app,{folder:N}=u(),F=O.getAbstractFileByPath(f.normalizePath(N));if(!F)throw new V("Failed to find daily notes folder");const $={};return f.Vault.recurseChildren(F,te=>{if(te instanceof f.TFile){const ie=z(te,"day");if(ie){const Z=E(ie,"day");$[Z]=te}}}),$}class ve extends Error{}function M(){const{moment:O}=window;let N=O.localeData()._week.dow;const F=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"];for(;N;)F.push(F.shift()),N--;return F}function le(O){return M().indexOf(O.toLowerCase())}async function x(O){const{vault:N}=window.app,{template:F,format:$,folder:te}=d(),[ie,Z]=await D(F),me=O.format($),be=await w(te,me);try{const ge=await N.create(be,ie.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(xe,Re,Pe,rt,vt,tt)=>{const at=window.moment(),Ie=O.clone().set({hour:at.get("hour"),minute:at.get("minute"),second:at.get("second")});return Pe&&Ie.add(parseInt(rt,10),vt),tt?Ie.format(tt.substring(1).trim()):Ie.format($)}).replace(/{{\s*title\s*}}/gi,me).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*(sunday|monday|tuesday|wednesday|thursday|friday|saturday)\s*:(.*?)}}/gi,(xe,Re,Pe)=>{const rt=le(Re);return O.weekday(rt).format(Pe.trim())}));return window.app.foldManager.save(ge,Z),ge}catch(ge){console.error(`Failed to create file: '${be}'`,ge),new f.Notice("Unable to create new file.")}}function W(O,N){return N[E(O,"week")]??null}function U(){const O={};if(!Je())return O;const{vault:N}=window.app,{folder:F}=d(),$=N.getAbstractFileByPath(f.normalizePath(F));if(!$)throw new ve("Failed to find weekly notes folder");return f.Vault.recurseChildren($,te=>{if(te instanceof f.TFile){const ie=z(te,"week");if(ie){const Z=E(ie,"week");O[Z]=te}}}),O}class j extends Error{}async function se(O){const{vault:N}=window.app,{template:F,format:$,folder:te}=h(),[ie,Z]=await D(F),me=O.format($),be=await w(te,me);try{const ge=await N.create(be,ie.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(xe,Re,Pe,rt,vt,tt)=>{const at=window.moment(),Ie=O.clone().set({hour:at.get("hour"),minute:at.get("minute"),second:at.get("second")});return Pe&&Ie.add(parseInt(rt,10),vt),tt?Ie.format(tt.substring(1).trim()):Ie.format($)}).replace(/{{\s*date\s*}}/gi,me).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,me));return window.app.foldManager.save(ge,Z),ge}catch(ge){console.error(`Failed to create file: '${be}'`,ge),new f.Notice("Unable to create new file.")}}function Y(O,N){return N[E(O,"month")]??null}function ue(){const O={};if(!qe())return O;const{vault:N}=window.app,{folder:F}=h(),$=N.getAbstractFileByPath(f.normalizePath(F));if(!$)throw new j("Failed to find monthly notes folder");return f.Vault.recurseChildren($,te=>{if(te instanceof f.TFile){const ie=z(te,"month");if(ie){const Z=E(ie,"month");O[Z]=te}}}),O}class P extends Error{}async function L(O){const{vault:N}=window.app,{template:F,format:$,folder:te}=m(),[ie,Z]=await D(F),me=O.format($),be=await w(te,me);try{const ge=await N.create(be,ie.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(xe,Re,Pe,rt,vt,tt)=>{const at=window.moment(),Ie=O.clone().set({hour:at.get("hour"),minute:at.get("minute"),second:at.get("second")});return Pe&&Ie.add(parseInt(rt,10),vt),tt?Ie.format(tt.substring(1).trim()):Ie.format($)}).replace(/{{\s*date\s*}}/gi,me).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,me));return window.app.foldManager.save(ge,Z),ge}catch(ge){console.error(`Failed to create file: '${be}'`,ge),new f.Notice("Unable to create new file.")}}function ee(O,N){return N[E(O,"quarter")]??null}function ae(){const O={};if(!kt())return O;const{vault:N}=window.app,{folder:F}=m(),$=N.getAbstractFileByPath(f.normalizePath(F));if(!$)throw new P("Failed to find quarterly notes folder");return f.Vault.recurseChildren($,te=>{if(te instanceof f.TFile){const ie=z(te,"quarter");if(ie){const Z=E(ie,"quarter");O[Z]=te}}}),O}class ne extends Error{}async function we(O){const{vault:N}=window.app,{template:F,format:$,folder:te}=b(),[ie,Z]=await D(F),me=O.format($),be=await w(te,me);try{const ge=await N.create(be,ie.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(xe,Re,Pe,rt,vt,tt)=>{const at=window.moment(),Ie=O.clone().set({hour:at.get("hour"),minute:at.get("minute"),second:at.get("second")});return Pe&&Ie.add(parseInt(rt,10),vt),tt?Ie.format(tt.substring(1).trim()):Ie.format($)}).replace(/{{\s*date\s*}}/gi,me).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,me));return window.app.foldManager.save(ge,Z),ge}catch(ge){console.error(`Failed to create file: '${be}'`,ge),new f.Notice("Unable to create new file.")}}function Ne(O,N){return N[E(O,"year")]??null}function _e(){const O={};if(!xt())return O;const{vault:N}=window.app,{folder:F}=b(),$=N.getAbstractFileByPath(f.normalizePath(F));if(!$)throw new ne("Failed to find yearly notes folder");return f.Vault.recurseChildren($,te=>{if(te instanceof f.TFile){const ie=z(te,"year");if(ie){const Z=E(ie,"year");O[Z]=te}}}),O}function Ce(){const{app:O}=window,N=O.internalPlugins.plugins["daily-notes"];if(N&&N.enabled)return!0;const F=O.plugins.getPlugin("periodic-notes");return F&&F.settings?.daily?.enabled}function Je(){const{app:O}=window;if(O.plugins.getPlugin("calendar"))return!0;const N=O.plugins.getPlugin("periodic-notes");return N&&N.settings?.weekly?.enabled}function qe(){const{app:O}=window,N=O.plugins.getPlugin("periodic-notes");return N&&N.settings?.monthly?.enabled}function kt(){const{app:O}=window,N=O.plugins.getPlugin("periodic-notes");return N&&N.settings?.quarterly?.enabled}function xt(){const{app:O}=window,N=O.plugins.getPlugin("periodic-notes");return N&&N.settings?.yearly?.enabled}function C(O){const N={day:u,week:d,month:h,quarter:m,year:b}[O];return N()}function pe(O,N){return{day:K,month:se,week:x}[O](N)}return Oe.DEFAULT_DAILY_NOTE_FORMAT=a,Oe.DEFAULT_MONTHLY_NOTE_FORMAT=i,Oe.DEFAULT_QUARTERLY_NOTE_FORMAT=o,Oe.DEFAULT_WEEKLY_NOTE_FORMAT=r,Oe.DEFAULT_YEARLY_NOTE_FORMAT=l,Oe.appHasDailyNotesPluginLoaded=Ce,Oe.appHasMonthlyNotesPluginLoaded=qe,Oe.appHasQuarterlyNotesPluginLoaded=kt,Oe.appHasWeeklyNotesPluginLoaded=Je,Oe.appHasYearlyNotesPluginLoaded=xt,Oe.createDailyNote=K,Oe.createMonthlyNote=se,Oe.createPeriodicNote=pe,Oe.createQuarterlyNote=L,Oe.createWeeklyNote=x,Oe.createYearlyNote=we,Oe.getAllDailyNotes=he,Oe.getAllMonthlyNotes=ue,Oe.getAllQuarterlyNotes=ae,Oe.getAllWeeklyNotes=U,Oe.getAllYearlyNotes=_e,Oe.getDailyNote=Q,Oe.getDailyNoteSettings=u,Oe.getDateFromFile=z,Oe.getDateFromPath=R,Oe.getDateUID=E,Oe.getMonthlyNote=Y,Oe.getMonthlyNoteSettings=h,Oe.getPeriodicNoteSettings=C,Oe.getQuarterlyNote=ee,Oe.getQuarterlyNoteSettings=m,Oe.getTemplateInfo=D,Oe.getWeeklyNote=W,Oe.getWeeklyNoteSettings=d,Oe.getYearlyNote=Ne,Oe.getYearlyNoteSettings=b,Oe}var wm=Gy();const mi=class mi{static dateKey(a){const r=a||new Date;return`${r.getFullYear()}-${String(r.getMonth()+1).padStart(2,"0")}-${String(r.getDate()).padStart(2,"0")}`}static loadAll(){try{const a=localStorage.getItem(this.STORAGE_KEY);return a?JSON.parse(a):{}}catch{return{}}}static save(a,r){const i=this.loadAll();i[a]=r;const o=Object.keys(i).sort();for(;o.length>this.MAX_DAYS;)delete i[o.shift()];localStorage.setItem(this.STORAGE_KEY,JSON.stringify(i))}static get(a){return this.loadAll()[a]||null}static saveToday(a){this._lastStats={...a},this.save(this.dateKey(),a)}static flushOnUnload(){this._lastStats&&this.save(this.dateKey(),this._lastStats)}static async computeFromEntries(a,r,i){let o=0,l=0,c=0;for(const h of a){const m=h.file;try{const k=(await r.vault.cachedRead(m)).replace(/^---[\s\S]*?---\s*/,"");o+=k.replace(/\s/g,"").length;const v=(k.match(/[\u4e00-\u9fff]/g)||[]).length,w=k.replace(/[\u4e00-\u9fff]/g," ").split(/\s+/).filter(D=>D.length>0).length;l+=v+w}catch{}(m.path.startsWith(i+"/")||m.path===i)&&c++}const u=Math.round(o/60),d=await this.countInspirations(r);return{noteTimeMinutes:u,writingWords:l,literatureNotes:c,inspirations:d,timestamp:Date.now()}}static async computeAndSaveToday(a,r){const i=new Date,o=new Date(i.getFullYear(),i.getMonth(),i.getDate()).getTime(),l=a.vault.getMarkdownFiles();let c=0,u=0,d=0;for(const b of l)if(!(b.stat.mtimeE.length>0).length;u+=y+D}catch{}(b.path.startsWith(r+"/")||b.path===r)&&d++}const h=Math.round(c/60),m=await this.countInspirations(a);this.saveToday({noteTimeMinutes:h,writingWords:u,literatureNotes:d,inspirations:m,timestamp:Date.now()})}static hasCachedWeekData(){const a=this.loadAll(),r=new Date,i=r.getDay(),o=i===0?6:i-1,l=new Date(r);l.setDate(r.getDate()-o-7),l.setHours(0,0,0,0);for(let c=0;c<14;c++){const u=new Date(l);if(u.setDate(l.getDate()+c),a[this.dateKey(u)])return!0}return!1}static getWeeklyComparison(){const a=this.loadAll(),r=new Date,i=r.getDay(),o=i===0?6:i-1,l=new Date(r);l.setDate(r.getDate()-o),l.setHours(0,0,0,0);const c=new Date(l);c.setDate(l.getDate()-7);let u=0,d=0,h=0;const m=o+1;for(let y=0;y0?100:0:Math.min(Math.round(f/a*100),100)}function ku(f,a){if(a===0)return f>0?"+100%":"+0%";const r=Math.round((f-a)/a*100);return r>=0?`+${r}%`:`${r}%`}class Zy extends _.BasesView{constructor(a,r){super(a),this.type="ppb-today-stats",this.containerEl=r}onDataUpdated(){this.render()}async render(){this.containerEl.empty(),this.containerEl.addClass("ppb-today-left");const a=this.data?.data??[],r=this.app.plugins?.plugins?.paperbell,i=r?.settings?.componentDataSources?.recentLiterature?.literatureFolderPath||"Inputs/Zotero",o=await gr.computeFromEntries(a,this.app,i);gr.saveToday(o);const l=o.noteTimeMinutes>=60?`${Math.floor(o.noteTimeMinutes/60)}h${o.noteTimeMinutes%60>0?o.noteTimeMinutes%60+"m":""}`:`${o.noteTimeMinutes}m`,c=o.writingWords>=1e3?`${(o.writingWords/1e3).toFixed(1)}k`:String(o.writingWords),u=r?.settings?.componentDataSources?.todayFocus?.displayName||"Today Focus",d=[{label:"Note time",value:l,icon:"clock",bgColor:"#B0D2EC",textColor:"#648EC0"},{label:"Writing words",value:c,icon:"edit",bgColor:"#B5ACA3",textColor:"#533A33"},{label:"Literature notes",value:String(o.literatureNotes),icon:"book-open",bgColor:"#849DBB",textColor:"#533A33"},{label:"Inspirations",value:String(o.inspirations),icon:"lightbulb",bgColor:"#533A33",textColor:"#B0D2EC"}];this.containerEl.createEl("h3",{text:u,cls:"ppb-today-card-title"});const h=this.containerEl.createDiv({cls:"ppb-today-stats"});for(const m of d){const b=h.createDiv({cls:"ppb-today-stat-row"}),k=b.createDiv({cls:"ppb-today-stat-lhs"}),v=k.createDiv({cls:"ppb-today-stat-icon"});v.style.backgroundColor=m.bgColor;const y=v.createSpan();_.setIcon(y,m.icon),y.style.color=m.textColor,k.createEl("span",{text:m.label,cls:"ppb-today-stat-label"}),b.createEl("span",{text:m.value,cls:"ppb-today-stat-value"})}}}class Yy extends _.BasesView{constructor(a,r){super(a),this.type="ppb-weekly-performance",this.focusBtnEl=null,this.pomodoroUnsub=null,this.containerEl=r,this.pomodoroUnsub=Xe.subscribe(i=>i.pomodoroState,i=>this.updateFocusButton(i.isRunning))}onDataUpdated(){this.render()}async render(){this.containerEl.empty(),this.containerEl.addClass("ppb-today-right");const r=this.app.plugins?.plugins?.paperbell?.settings?.componentDataSources?.recentLiterature?.literatureFolderPath||"Inputs/Zotero",i=this.data?.data??[],o=await gr.computeFromEntries(i,this.app,r);gr.saveToday(o);const l=gr.hasCachedWeekData()?gr.getWeeklyComparison():await this.computeWeeklyProgressFromVault(r),c=this.containerEl.createDiv({cls:"ppb-today-ticket-head"});c.createEl("div",{text:"PaperBell",cls:"ppb-today-ticket-brand"}),c.createEl("div",{text:"Research to be connected",cls:"ppb-today-ticket-sub"}),c.createEl("span",{text:"Weekly performance",cls:"ppb-today-ticket-badge"});const u=[{label:"Writing words",pct:l.writingProgress,text:l.writingText,colorVar:"var(--interactive-accent)"},{label:"Note time",pct:l.noteTimeProgress,text:l.noteTimeText,colorVar:"var(--text-muted)"},{label:"Literature notes",pct:l.literatureProgress,text:l.literatureText,colorVar:"var(--text-normal)"}],d=this.containerEl.createDiv({cls:"ppb-today-bars"});for(const k of u){const v=d.createDiv({cls:"ppb-today-bar-group"}),y=v.createDiv({cls:"ppb-today-bar-header"});y.createEl("span",{text:k.label});const w=y.createEl("span",{text:k.text,cls:"ppb-today-bar-pct"});w.style.color=k.colorVar;const E=v.createDiv({cls:"ppb-today-bar-track"}).createDiv({cls:"ppb-today-bar-fill"});E.style.width=`${Math.min(Math.max(k.pct,0),100)}%`,E.style.backgroundColor=k.colorVar}this.containerEl.createDiv({cls:"ppb-today-divider"});const h=this.containerEl.createDiv({cls:"ppb-today-focus-btn-wrap"});this.focusBtnEl=h.createEl("button",{cls:"ppb-today-focus-btn"});const m=this.focusBtnEl.createSpan();_.setIcon(m,"focus");const b=Xe.getState().pomodoroState.isRunning;this.focusBtnEl.createEl("span",{text:b?"Focus in progress...":"Start focus now"}),b&&(this.focusBtnEl.disabled=!0),this.focusBtnEl.addEventListener("click",()=>{Xe.getState().startPomodoro()})}async computeWeeklyProgressFromVault(a){const r=new Date,i=r.getDay(),o=i===0?6:i-1,l=new Date(r);l.setDate(r.getDate()-o),l.setHours(0,0,0,0);const c=new Date(l);c.setDate(l.getDate()-7);const u=this.app.vault.getMarkdownFiles();let d=0,h=0,m=0,b=0,k=0,v=0;for(const D of u){const E=D.stat.mtime,T=E>=l.getTime(),A=E>=c.getTime()&&EM.length>0).length,he=V+Q,ve=D.path.startsWith(a+"/")||D.path===a;T?(d+=he,h+=q,ve&&m++):A&&(b+=he,k+=q,ve&&v++)}catch{}}const y=(D,E)=>E===0?D>0?100:0:Math.min(Math.round(D/E*100),100),w=(D,E)=>{if(E===0)return D>0?"+100%":"+0%";const T=Math.round((D-E)/E*100);return T>=0?`+${T}%`:`${T}%`};return{writingProgress:y(d,b),writingText:w(d,b),noteTimeProgress:y(h,k),noteTimeText:w(h,k),literatureProgress:y(m,v),literatureText:w(m,v)}}updateFocusButton(a){if(!this.focusBtnEl)return;const r=this.focusBtnEl.querySelector("span:last-child");r&&(r.textContent=a?"Focus in progress...":"Start focus now"),this.focusBtnEl.disabled=a}onunload(){this.pomodoroUnsub&&(this.pomodoroUnsub(),this.pomodoroUnsub=null)}}const Fe=eb()(tb(rb((f,a)=>({runs:[],outputMap:{},selectedRunId:null,outputPanelVisible:!1,autoScroll:!0,searchQuery:"",lineWrap:!0,showTimestamps:!1,addRun:r=>{const{outputLines:i,...o}=r;f(l=>({runs:[o,...l.runs].slice(0,50),outputMap:{...l.outputMap,[r.id]:i},selectedRunId:r.id,outputPanelVisible:!0}))},updateRun:(r,i)=>{const{runs:o}=a(),l=o.findIndex(u=>u.id===r);if(l===-1)return;const c=[...o];c[l]={...c[l],...i},f({runs:c})},appendOutput:(r,i,o,l)=>{const c=o.split(` -`).filter(u=>u.length>0).map(u=>({timestamp:Date.now(),stream:i,text:u}));c.length!==0&&f(u=>{const h=[...u.outputMap[r]??[],...c];return{outputMap:{...u.outputMap,[r]:h.length>l?h.slice(-l):h}}})},selectRun:r=>f({selectedRunId:r}),setOutputPanelVisible:r=>f({outputPanelVisible:r}),setAutoScroll:r=>f({autoScroll:r}),setSearchQuery:r=>f({searchQuery:r}),setLineWrap:r=>f({lineWrap:r}),setShowTimestamps:r=>f({showTimestamps:r}),clearHistory:()=>f({runs:[],outputMap:{},selectedRunId:null}),removeRun:r=>{const{runs:i,outputMap:o,selectedRunId:l}=a(),{[r]:c,...u}=o;f({runs:i.filter(d=>d.id!==r),outputMap:u,selectedRunId:l===r?null:l})},loadRuns:r=>f({runs:r,selectedRunId:r.length>0?r[0].id:null})})),{name:"agent-store"}));function ym(f){return Fe.getState().runs.filter(a=>a.ruleId===f&&a.status==="running").length}function km(){return Fe.getState().runs.filter(f=>f.status==="running").length}function xu(){const f=window.require||globalThis.require||void 0;if(typeof f!="function")throw new Error("Node require() is not available in this environment");try{return f("node:child_process")}catch{return f("child_process")}}function Ky(){const f=window.require||globalThis.require||void 0;if(typeof f!="function")throw new Error("Node require() is not available in this environment");try{return f("node:path")}catch{return f("path")}}class Qy extends _.Component{constructor(a){super(),this.activeProcesses=new Map,this.runQueue=[],this.timeouts=new Map,this.confirmationTimers=new Map,this.streamBuffers=new Map,this.persistedRunIds=new Set,this.unsubscribeStore=null,this.writeQueue=Promise.resolve(),this.onRunStarted=null,this.plugin=a}getSettings(){return this.plugin.settings.agentAutoExec??{enabled:!1,rules:[],binaryPaths:{},globalMaxConcurrent:2,showNoticeOnTrigger:!0,maxOutputLinesPerRun:5e3,maxHistoryRuns:50}}getVaultPath(){return this.plugin.app.vault.adapter.basePath||""}async executeRule(a,r,i){const o=crypto.randomUUID(),l={id:o,ruleId:a.id,ruleName:a.name||"Unnamed Rule",agentType:a.agentType,status:a.requireConfirmation?"pending_confirmation":"queued",triggerFile:r,triggerEvent:i,startedAt:null,completedAt:null,outputLines:[],exitCode:null,error:null,pid:null};return Fe.getState().addRun(l),this.onRunStarted?.(),a.requireConfirmation?(this.showConfirmationNotice(l,a),o):this.shouldQueue(a)?(this.runQueue.push({run:l,rule:a}),o):(await this.spawnProcess(l,a),o)}async executeAdHoc(a,r){const i=crypto.randomUUID(),o={id:i,ruleId:"__adhoc__",ruleName:"对话",agentType:a,status:"queued",triggerFile:"(用户输入)",triggerEvent:"create",startedAt:null,completedAt:null,outputLines:[],exitCode:null,error:null,pid:null};Fe.getState().addRun(o),this.onRunStarted?.();const l={id:"__adhoc__",enabled:!0,name:"对话",watchPaths:[],triggerEvents:["create"],agentType:a,customBinaryPath:"",promptTemplate:r,workingDirectory:"",extraArgs:[],debounceMs:0,timeoutMs:0,maxConcurrent:0,requireConfirmation:!1,confirmationTimeoutMs:0,allowedTools:["Edit","Write","Read"]};return await this.spawnProcess(o,l),i}showConfirmationNotice(a,r){const i=document.createDocumentFragment();i.createEl("div",{text:`AI Agent「${r.name||"未命名规则"}」请求执行`}).createEl("div",{text:`触发: ${a.triggerEvent} ${a.triggerFile}`,cls:"agent-confirm-detail"});const l=i.createEl("div",{cls:"agent-confirm-buttons"}),c=l.createEl("button",{text:"允许执行",cls:"mod-cta"}),u=l.createEl("button",{text:"拒绝"}),d=r.confirmationTimeoutMs||3e4,h=new _.Notice(i,d),m=()=>{const k=this.confirmationTimers.get(a.id);k!==void 0&&window.clearTimeout(k),this.confirmationTimers.delete(a.id)};c.addEventListener("click",()=>{h.hide(),m(),Fe.getState().updateRun(a.id,{status:"queued"}),this.shouldQueue(r)?this.runQueue.push({run:a,rule:r}):this.spawnProcess(a,r)}),u.addEventListener("click",()=>{h.hide(),m(),Fe.getState().updateRun(a.id,{status:"cancelled",completedAt:Date.now(),error:"用户拒绝执行"})});const b=window.setTimeout(()=>{this.confirmationTimers.delete(a.id),Fe.getState().runs.find(v=>v.id===a.id)?.status==="pending_confirmation"&&Fe.getState().updateRun(a.id,{status:"cancelled",completedAt:Date.now(),error:`确认超时 (${d/1e3}s)`})},d);this.confirmationTimers.set(a.id,b)}shouldQueue(a){const r=this.getSettings();return r.globalMaxConcurrent>0&&km()>=r.globalMaxConcurrent||a.maxConcurrent>0&&ym(a.id)>=a.maxConcurrent}async spawnProcess(a,r){const i=this.getSettings(),o=Fe.getState(),l=r.customBinaryPath||i.binaryPaths[r.agentType],c=Au(r.agentType,l);if(!c.found){o.updateRun(a.id,{status:"failed",error:c.error||"Binary not found",completedAt:Date.now()}),new _.Notice(`AI Agent 执行失败: ${c.error||"找不到 CLI"}`),this.processQueue();return}const u=xu(),d=Ky(),h=this.interpolatePrompt(r.promptTemplate,a),m=this.buildArgs(r.agentType,r.extraArgs,r.allowedTools),b=this.getVaultPath(),k=r.workingDirectory?d.resolve(b,r.workingDirectory):b;try{const v=u.spawn(c.path,m,{cwd:k,stdio:["pipe","pipe","pipe"],env:{...process.env},shell:process.platform==="win32"});if(v.stdin?.write(h),v.stdin?.end(),a.pid=v.pid??null,o.updateRun(a.id,{status:"running",pid:a.pid,startedAt:Date.now()}),this.activeProcesses.set(a.id,v),Fe.getState().appendOutput(a.id,"stdout",`▶ Prompt ━━━━━━━━━━━━━━━━━━━━━━━━━━━ -${h} -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`,i.maxOutputLinesPerRun),v.stdout?.on("data",y=>{const w=y.toString("utf-8");this.handleStreamChunk(a.id,r.agentType,w,i.maxOutputLinesPerRun)}),v.stderr?.on("data",y=>{const w=y.toString("utf-8");Fe.getState().appendOutput(a.id,"stderr",w,i.maxOutputLinesPerRun)}),v.on("close",y=>{this.flushStreamBuffer(a.id,i.maxOutputLinesPerRun),this.activeProcesses.delete(a.id),this.clearTimeout(a.id),Fe.getState().updateRun(a.id,{status:y===0?"completed":"failed",exitCode:y,completedAt:Date.now()}),this.processQueue()}),v.on("error",y=>{this.activeProcesses.delete(a.id),this.clearTimeout(a.id),Fe.getState().updateRun(a.id,{status:"failed",error:y.message,completedAt:Date.now()}),this.processQueue()}),r.timeoutMs>0){const y=window.setTimeout(()=>{this.activeProcesses.has(a.id)&&(this.cancelRun(a.id),Fe.getState().appendOutput(a.id,"stderr",`[超时] 进程在 ${r.timeoutMs}ms 后被终止`,i.maxOutputLinesPerRun))},r.timeoutMs);this.timeouts.set(a.id,y)}}catch(v){o.updateRun(a.id,{status:"failed",error:v.message||"Failed to spawn process",completedAt:Date.now()}),this.processQueue()}}buildArgs(a,r,i){switch(a){case"claude-code":{const o=["--print","--verbose","--output-format","stream-json"];if(i&&i.length>0)for(const l of i)o.push("--allowedTools",l);return o.push(...r),o}case"openai-codex":return["exec","--full-auto","--skip-git-repo-check","--json",...r];case"gemini-cli":return["--output-format","stream-json",...r];default:return[...r]}}extractStreamText(a,r){switch(a){case"claude-code":return r?.type==="stream_event"?this.extractStreamText(a,r.event):r?.type==="content_block_delta"&&r?.delta?.type==="text_delta"?r.delta.text??null:r?.type==="result"&&typeof r?.result=="string"?r.result:null;case"openai-codex":return r?.type==="message"&&typeof r?.content=="string"?r.content:typeof r?.text=="string"?r.text:null;case"gemini-cli":return(r?.type==="message"||r?.type==="result")&&typeof r?.content=="string"?r.content:r?.type==="tool_use"&&r?.name?`[tool] ${r.name}(${JSON.stringify(r.input??{})})`:r?.type==="tool_result"&&typeof r?.output=="string"?`[tool result] ${r.output.slice(0,200)}`:null;default:return typeof r?.text=="string"?r.text:typeof r?.content=="string"?r.content:null}}handleStreamChunk(a,r,i,o){let l=this.streamBuffers.get(a);l||(l={ndjsonPartial:""},this.streamBuffers.set(a,l));const u=(l.ndjsonPartial+i).split(` -`);l.ndjsonPartial=u.pop()??"";for(const d of u){const h=d.trim();if(!h)continue;let m;try{m=JSON.parse(h)}catch{Fe.getState().appendOutput(a,"stdout",h,o);continue}const b=this.extractStreamText(r,m);b!==null&&Fe.getState().appendOutput(a,"stdout",b,o)}}flushStreamBuffer(a,r){const i=this.streamBuffers.get(a);if(!i)return;const o=i.ndjsonPartial.trim();if(o)try{const l=JSON.parse(o),c=Fe.getState().runs.find(d=>d.id===a)?.agentType??"claude-code",u=this.extractStreamText(c,l);u&&Fe.getState().appendOutput(a,"stdout",u,r)}catch{o&&Fe.getState().appendOutput(a,"stdout",o,r)}this.streamBuffers.delete(a)}interpolatePrompt(a,r){const i={"{{filePath}}":r.triggerFile,"{{fileName}}":r.triggerFile.split("/").pop()||"","{{eventType}}":r.triggerEvent,"{{vaultPath}}":this.getVaultPath(),"{{timestamp}}":new Date().toISOString()};let o=a;for(const[l,c]of Object.entries(i))o=o.replaceAll(l,c);return o}cancelRun(a){const r=this.activeProcesses.get(a);if(r){if(process.platform==="win32"&&r.pid)try{xu().exec(`taskkill /pid ${r.pid} /T /F`)}catch{}else r.kill("SIGTERM"),window.setTimeout(()=>{this.activeProcesses.has(a)&&r.kill("SIGKILL")},5e3);this.flushStreamBuffer(a,this.getSettings().maxOutputLinesPerRun),this.activeProcesses.delete(a),this.clearTimeout(a),Fe.getState().updateRun(a,{status:"cancelled",completedAt:Date.now()}),this.processQueue()}}cancelAll(){for(const a of[...this.activeProcesses.keys()])this.cancelRun(a);for(const{run:a}of this.runQueue)Fe.getState().updateRun(a.id,{status:"cancelled",completedAt:Date.now()});this.runQueue=[];for(const[a,r]of this.confirmationTimers)window.clearTimeout(r),Fe.getState().updateRun(a,{status:"cancelled",completedAt:Date.now(),error:"已取消"});this.confirmationTimers.clear()}processQueue(){if(this.runQueue.length===0)return;const a=this.getSettings(),r=this.runQueue.findIndex(({rule:o})=>!(a.globalMaxConcurrent>0&&km()>=a.globalMaxConcurrent||o.maxConcurrent>0&&ym(o.id)>=o.maxConcurrent));if(r===-1)return;const[i]=this.runQueue.splice(r,1);this.spawnProcess(i.run,i.rule)}clearTimeout(a){const r=this.timeouts.get(a);r!==void 0&&(window.clearTimeout(r),this.timeouts.delete(a))}async debugRun(a,r){const i=`[AgentDebug:${a}]`,o=this.getSettings();console.group(`${i} Starting debug run`);const l=o.binaryPaths[a],c=Au(a,l);if(!c.found){console.error(`${i} Binary not found: ${c.error}`),new _.Notice(`Debug: ${a} CLI 未找到 — ${c.error}`),console.groupEnd();return}const u=this.buildArgs(a,[]),d=this.getVaultPath(),h=xu();let m;try{m=h.spawn(c.path,u,{cwd:d,stdio:["pipe","pipe","pipe"],env:{...process.env},shell:process.platform==="win32"}),m.stdin?.write(r),m.stdin?.end()}catch(v){console.error(`${i} Spawn failed:`,v),new _.Notice(`Debug: spawn 失败 — ${v.message}`),console.groupEnd();return}new _.Notice(`Debug: ${a} 已启动 (PID ${m.pid}),输出见 DevTools Console`);const b=crypto.randomUUID(),k={id:b,ruleId:"__debug__",ruleName:`[Debug] ${a}`,agentType:a,status:"running",triggerFile:"(debug)",triggerEvent:"create",startedAt:Date.now(),completedAt:null,outputLines:[],exitCode:null,error:null,pid:m.pid??null};Fe.getState().addRun(k),this.onRunStarted?.(),this.activeProcesses.set(b,m),m.stdout?.on("data",v=>{const y=v.toString("utf-8");this.handleStreamChunk(b,a,y,o.maxOutputLinesPerRun)}),m.stderr?.on("data",v=>{const y=v.toString("utf-8");console.warn(`${i} [stderr]`,y),Fe.getState().appendOutput(b,"stderr",y,o.maxOutputLinesPerRun)}),m.on("close",v=>{this.flushStreamBuffer(b,o.maxOutputLinesPerRun),this.activeProcesses.delete(b);const y=v===0?"completed":"failed";console.groupEnd(),Fe.getState().updateRun(b,{status:y,exitCode:v,completedAt:Date.now()}),new _.Notice(`Debug: ${a} 已退出 (code ${v})`)}),m.on("error",v=>{this.activeProcesses.delete(b),console.error(`${i} Process error:`,v),console.groupEnd(),Fe.getState().updateRun(b,{status:"failed",error:v.message,completedAt:Date.now()}),new _.Notice(`Debug: ${a} 错误 — ${v.message}`)})}get historyFilePath(){return _.normalizePath(`${this.plugin.manifest.dir}/agent-runs.jsonl`)}isTerminal(a){return a==="completed"||a==="failed"||a==="cancelled"}async initPersistence(){await this.loadRunHistory(),this.setupPersistenceSubscription()}setupPersistenceSubscription(){this.unsubscribeStore=Fe.subscribe(a=>a.runs,(a,r)=>{for(const l of a)this.isTerminal(l.status)&&!this.persistedRunIds.has(l.id)&&(this.persistedRunIds.add(l.id),this.enqueueWrite(()=>this.appendRunToFile(l)));if(a.length===0&&r.length>0){this.persistedRunIds.clear(),this.enqueueWrite(()=>this.clearHistoryFile());return}const i=new Set(a.map(l=>l.id));let o=!1;for(const l of this.persistedRunIds)i.has(l)||(this.persistedRunIds.delete(l),o=!0);o&&this.enqueueWrite(()=>this.rewriteHistoryFile())})}async loadRunHistory(){const a=this.plugin.app.vault.adapter,r=this.historyFilePath;if(await a.exists(r))try{const o=(await a.read(r)).split(` -`).filter(m=>m.trim()),l=this.getSettings().maxHistoryRuns,c=[];for(const m of o)try{c.push(JSON.parse(m))}catch{}const u=c.slice(-l);for(const m of u)this.persistedRunIds.add(m.id);c.length>l&&this.enqueueWrite(()=>this.rewriteHistoryFromPersisted(u));const d=[],h={};for(const m of u){const{outputLines:b,...k}=m;d.push(k),b&&b.length>0&&(h[k.id]=b)}Fe.getState().loadRuns(d.reverse()),Object.keys(h).length>0&&Fe.setState(m=>({outputMap:{...m.outputMap,...h}}))}catch(i){console.error("[AgentExecutor] Failed to load run history:",i)}}enqueueWrite(a){this.writeQueue=this.writeQueue.then(a).catch(r=>{console.error("[AgentExecutor] History write error:",r)})}async appendRunToFile(a){const r=this.plugin.app.vault.adapter,i=this.historyFilePath,o=Fe.getState().outputMap[a.id]??[],l={...a,outputLines:o},c=JSON.stringify(l)+` -`;await r.exists(i)?await r.append(i,c):await r.write(i,c)}async clearHistoryFile(){const a=this.plugin.app.vault.adapter,r=this.historyFilePath;await a.exists(r)&&await a.write(r,"")}async rewriteHistoryFile(){const a=Fe.getState(),i=[...a.runs.filter(o=>this.isTerminal(o.status))].reverse().map(o=>({...o,outputLines:a.outputMap[o.id]??[]}));await this.rewriteHistoryFromPersisted(i)}async rewriteHistoryFromPersisted(a){const r=this.plugin.app.vault.adapter,i=a.length>0?a.map(o=>JSON.stringify(o)).join(` + `);const E=v.state[a];if(E==null)return;JSON.stringify(n.getState())!==JSON.stringify(E)&&h(E);return}ai(n)&&n.dispatch(v)});case"DISPATCH":switch(p.payload.type){case"RESET":return h(g),a===void 0?l?.init(n.getState()):l?.init(ae(o.name));case"COMMIT":if(a===void 0){l?.init(n.getState());return}return l?.init(ae(o.name));case"ROLLBACK":return bs(p.state,v=>{if(a===void 0){h(v),l?.init(n.getState());return}h(v[a]),l?.init(ae(o.name))});case"JUMP_TO_STATE":case"JUMP_TO_ACTION":return bs(p.state,v=>{if(a===void 0){h(v);return}JSON.stringify(n.getState())!==JSON.stringify(v[a])&&h(v[a])});case"IMPORT_STATE":{const{nextLiftedState:v}=p.payload,E=(y=v.computedStates.slice(-1)[0])==null?void 0:y.state;if(!E)return;h(a===void 0?E:E[a]),l?.send(null,v);return}case"PAUSE_RECORDING":return f=!f}return}}),g},Ai=Ba,bs=(u,e)=>{let t;try{t=JSON.parse(u)}catch(s){console.error("[zustand devtools middleware] Could not parse the received json",s)}t!==void 0&&e(t)},za=u=>(e,t,s)=>{const n=s.subscribe;return s.subscribe=(r,a,o)=>{let c=r;if(a){const l=o?.equalityFn||Object.is;let d=r(s.getState());c=f=>{const h=r(f);if(!l(d,h)){const g=d;a(d=h,g)}},o?.fireImmediately&&a(d,d)}return n(c)},u(e,t,s)},Fi=za;function ja(u){const e=Math.floor(u/60),t=u%60;return`${e.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}`}function Ua(u){switch(u){case"work":return"🍅";case"shortBreak":return"☕";case"longBreak":return"🌟";default:return"🍅"}}function Fs(u){switch(u){case"work":return"专注工作";case"shortBreak":return"短休息";case"longBreak":return"长休息";default:return"专注工作"}}function Wa(u,e,t){return u==="work"?(e+1)%t===0?"longBreak":"shortBreak":"work"}function Va(u,e,t=!1){const s=t?"⏸️":Ua(u),n=ja(e);return`${s} ${n}`}function Ha(u,e){const t=Fs(u),s=Fs(e);switch(u){case"work":return`🎉 ${t}完成!${e==="longBreak"?"是时候好好休息一下了!":"休息一下再继续吧!"}`;case"shortBreak":return`☕ ${t}结束,准备开始${s}!`;case"longBreak":return`🌟 ${t}结束,精神饱满地开始新的工作吧!`;default:return`会话完成,开始${s}!`}}const oi={isRunning:!1,isPaused:!1,remainingTime:0,currentSession:"work",sessionCount:0,totalWorkTime:0,startTime:null},qa=u=>u?.settings?.pomodoroSettings?u.settings.pomodoroSettings:{workDuration:25,shortBreakDuration:5,longBreakDuration:15,longBreakInterval:4,enableNotifications:!0,enableStatusBar:!0,autoStartBreaks:!1,autoStartWork:!1},Za=u=>u?.settings?.userProfile?u.settings.userProfile:Nt.userProfile,Ga=u=>({light:u?.settings?.themeColors?.light||Rt,dark:u?.settings?.themeColors?.dark||Lt,modePreference:u?.settings?.themeModePreference||"system"}),Ya=u=>u?.settings?.componentSettings?u.settings.componentSettings:Nt.componentSettings,ut=Ii()(Ai(Fi((u,e)=>({app:null,plugin:null,dataService:new le(null,void 0),userProfile:null,writingStats:null,writingStatsLoading:!1,writingStatsError:null,books:[],booksLoading:!1,booksError:null,projects:[],projectsLoading:!1,projectsError:null,papers:[],papersLoading:!1,papersError:null,experiments:[],experimentsLoading:!1,experimentsError:null,resources:[],resourcesLoading:!1,resourcesError:null,todos:[],pomodoroState:{...oi},pomodoroSettings:{workDuration:25,shortBreakDuration:5,longBreakDuration:15,longBreakInterval:4,enableNotifications:!0,enableStatusBar:!0,autoStartBreaks:!1,autoStartWork:!1},todosLoading:!1,todosError:null,literature:[],literatureLoading:!1,literatureError:null,researchFocusMap:null,researchFocusLoading:!1,researchFocusError:null,userProfileSettings:Nt.userProfile,themeSettings:{light:Rt,dark:Lt,modePreference:"system"},componentSettings:Nt.componentSettings,settingsVersion:0,currentTab:"academic",setCurrentTab:t=>u({currentTab:t}),initializeDataService:(t,s,n)=>{const i={app:t,dataService:new le(t,s,void 0,n)};n&&(i.plugin=n,i.pomodoroSettings=qa(n),i.userProfileSettings=Za(n),i.themeSettings=Ga(n),i.componentSettings=Ya(n)),u(i)},getDataManagerStatus:()=>{const t=e().dataService,s=!!t.dataManager,n=!!t&&!!t.app;return{hasDataManager:s,dataServiceInitialized:n}},fetchUserProfile:async()=>{try{const t=e().plugin;if(t?.settings?.userProfile)u({userProfile:t.settings.userProfile});else{const s=await e().dataService.getUserProfile();u({userProfile:s})}}catch(t){console.error("Error fetching user profile:",t)}},fetchWritingStats:async()=>{u({writingStatsLoading:!0,writingStatsError:null});try{const t=await e().dataService.getWritingStats();u({writingStats:t,writingStatsLoading:!1})}catch(t){u({writingStatsError:t instanceof Error?t.message:"Failed to load writing stats",writingStatsLoading:!1})}},fetchBooks:async()=>{u({booksLoading:!0,booksError:null});try{const t=await e().dataService.getBooksData();u({books:t,booksLoading:!1})}catch(t){u({booksError:t instanceof Error?t.message:"Failed to load books",booksLoading:!1})}},fetchProjects:async()=>{u({projectsLoading:!0,projectsError:null});try{const t=await e().dataService.getProjectsData();u({projects:t,projectsLoading:!1})}catch(t){u({projectsError:t instanceof Error?t.message:"Failed to load projects",projectsLoading:!1})}},fetchPapers:async()=>{u({papersLoading:!0,papersError:null});try{const t=await e().dataService.getPapersData();u({papers:t,papersLoading:!1})}catch(t){u({papersError:t instanceof Error?t.message:"Failed to load papers",papersLoading:!1})}},fetchExperiments:async()=>{u({experimentsLoading:!0,experimentsError:null});try{const t=await e().dataService.getExperimentsData();u({experiments:t,experimentsLoading:!1})}catch(t){u({experimentsError:t instanceof Error?t.message:"Failed to load experiments",experimentsLoading:!1})}},fetchResources:async()=>{u({resourcesLoading:!0,resourcesError:null});try{const t=await e().dataService.getResourcesData();u({resources:t,resourcesLoading:!1})}catch(t){u({resourcesError:t instanceof Error?t.message:"Failed to load resources",resourcesLoading:!1})}},fetchTodos:async()=>{u({todosLoading:!0,todosError:null});try{const t=await e().dataService.getTodosData();u({todos:t,todosLoading:!1})}catch(t){u({todosError:t instanceof Error?t.message:"Failed to load todos",todosLoading:!1})}},fetchLiterature:async t=>{u({literatureLoading:!0,literatureError:null});try{const s=e().plugin,n=t||s?.settings?.componentDataSources?.recentLiterature?.literatureFolderPath||"Inputs/Zotero",i=await e().dataService.getRecentLiterature(n);u({literature:i,literatureLoading:!1})}catch(s){u({literatureError:s instanceof Error?s.message:"Failed to load literature",literatureLoading:!1})}},fetchResearchFocusMap:async t=>{u({researchFocusLoading:!0,researchFocusError:null});try{const s=e().plugin,n=t||s?.settings?.componentDataSources?.researchFocusMap?.trackingTags||[],i=await e().dataService.getResearchFocusMap(n);u({researchFocusMap:i,researchFocusLoading:!1})}catch(s){u({researchFocusError:s instanceof Error?s.message:"Failed to load research focus map",researchFocusLoading:!1})}},updateUserProfileSettings:t=>{const s={...e().userProfileSettings,...t};u({userProfileSettings:s});const n=e().plugin;n&&(n.settings.userProfile=s,n.saveSettings())},updateThemeSettings:t=>{const s={...e().themeSettings,...t};u({themeSettings:s});const n=e().plugin;n&&(n.settings.themeColors={light:s.light,dark:s.dark},n.settings.themeModePreference=s.modePreference,n.saveSettings())},updateThemeColors:(t,s)=>{const n=e().themeSettings,i={...n[t],...s},r={...n,[t]:i};u({themeSettings:r});const a=e().plugin;a&&(a.settings.themeColors||(a.settings.themeColors={light:Rt,dark:Lt}),a.settings.themeColors[t]=i,a.saveSettings())},updateComponentSettings:(t,s)=>{const n={...e().componentSettings,[t]:{...e().componentSettings[t],...s}};u({componentSettings:n});const i=e().plugin;i&&(i.settings.componentSettings=n,i.saveSettings())},bumpSettingsVersion:()=>{u({settingsVersion:e().settingsVersion+1})},startPomodoro:()=>{const{pomodoroState:t,pomodoroSettings:s}=e(),n=t.currentSession==="work"?s.workDuration:t.currentSession==="shortBreak"?s.shortBreakDuration:s.longBreakDuration,i=Math.max(1,Math.floor(n*60));u({pomodoroState:{...t,isRunning:!0,isPaused:!1,remainingTime:i,startTime:Date.now()}})},pausePomodoro:()=>{const{pomodoroState:t}=e();t.isRunning&&u({pomodoroState:{...t,isPaused:!t.isPaused}})},stopPomodoro:()=>{u({pomodoroState:{...oi,currentSession:"work"}})},skipSession:()=>{const{pomodoroState:t,pomodoroSettings:s}=e(),n=Wa(t.currentSession,t.sessionCount,s.longBreakInterval);u({pomodoroState:{...t,currentSession:n,isRunning:!1,isPaused:!1,remainingTime:0,startTime:null}})},tickPomodoro:()=>{const{pomodoroState:t}=e();if(!t.isRunning||t.isPaused)return;const s=Math.max(0,t.remainingTime-1),n=t.remainingTime>0&&s===0;u({pomodoroState:{...t,remainingTime:s,isRunning:t.isRunning,sessionCount:n&&t.currentSession==="work"?t.sessionCount+1:t.sessionCount,totalWorkTime:t.currentSession==="work"&&s>0?t.totalWorkTime+1:t.totalWorkTime}})},updatePomodoroSettings:t=>{const s={...e().pomodoroSettings,...t};u({pomodoroSettings:s});const n=e().plugin;n&&(n.settings.pomodoroSettings=s,n.saveSettings())},refreshAllData:async()=>{const t=[e().fetchUserProfile(),e().fetchWritingStats(),e().fetchBooks(),e().fetchProjects(),e().fetchTodos(),e().fetchLiterature(),e().fetchResearchFocusMap()];await Promise.all(t)}})),{name:"dashboard-store"}));class Ka extends w.Component{constructor(e,t,s){super(),this.unsubscribe=null,this.settingsUnsub=null,this.app=t,this.plugin=s,this.containerEl=e.createDiv({cls:"ppb-overview"})}onload(){const e=ut.getState().writingStats;e?this.render(e):(this.renderLoading(),this.fetchAndRender()),this.unsubscribe=ut.subscribe(t=>t.writingStats,t=>{t&&this.render(t)}),this.settingsUnsub=ut.subscribe(t=>t.settingsVersion,()=>{const t=ut.getState().writingStats;t&&this.render(t)})}async fetchAndRender(){const e=ut.getState();try{await e.fetchWritingStats();const t=ut.getState().writingStats;t?this.render(t):this.renderEmpty()}catch{this.renderError()}}renderLoading(){this.containerEl.empty();const e=this.containerEl.createDiv({cls:"ppb-overview-loading"}),t=e.createDiv({cls:"ppb-overview-spinner"});w.setIcon(t,"loader"),e.createEl("span",{text:"Loading academic data..."})}renderError(){this.containerEl.empty();const e=this.containerEl.createDiv({cls:"ppb-overview-error"});w.setIcon(e.createSpan(),"alert-triangle"),e.createEl("span",{text:"Failed to load academic data"}),e.createEl("button",{text:"Retry",cls:"mod-cta"}).addEventListener("click",()=>{this.renderLoading(),this.fetchAndRender()})}renderEmpty(){this.containerEl.empty(),this.containerEl.createDiv({cls:"ppb-overview-empty"}).createEl("p",{text:"No writing statistics available yet."})}render(e){this.containerEl.empty(),this.containerEl.addClass("ppb-overview");const t=qs("academicOverview",this.plugin),s=this.containerEl.createDiv({cls:"ppb-overview-spark-wrap"});this.buildSparkline(s,e);const n=this.containerEl.createDiv({cls:"ppb-overview-content"});n.createEl("h3",{text:t,cls:"ppb-overview-title"});const i=n.createDiv({cls:"ppb-overview-metric"});i.createEl("span",{text:e.totalWords.toLocaleString(),cls:"ppb-overview-metric-value"});const r=i.createEl("span",{cls:"ppb-overview-metric-growth"}),a=r.createSpan();w.setIcon(a,"trending-up"),r.createEl("span",{text:`${e.monthlyGrowth.toFixed(2)}%`});const o=e.monthlyGrowth>0?"Performing well compared to last month":e.monthlyGrowth<0?"Writing slightly down this month":"Keep it up, maintain your pace";n.createEl("p",{text:o,cls:"ppb-overview-subtitle"});const c=n.createDiv({cls:"ppb-overview-stats"}),l=[{icon:"file-text",label:"Literature",value:e.literatureCount},{icon:"book-open",label:"Notes",value:e.notesCount},{icon:"edit",label:"Drafts",value:e.draftsCount},{icon:"award",label:"Published",value:e.publishedCount}];for(const d of l){const f=c.createDiv({cls:"ppb-overview-stat"}),h=f.createDiv({cls:"ppb-overview-stat-icon"});w.setIcon(h,d.icon);const g=f.createDiv({cls:"ppb-overview-stat-info"});g.createEl("span",{text:d.label,cls:"ppb-overview-stat-label"}),g.createEl("span",{text:String(d.value),cls:"ppb-overview-stat-value"})}}buildSparkline(e,t){const s=t.dailyStats||[];if(s.length===0)return;const n=320,i=160,r={t:20,r:20,b:30,l:20},a=n-r.l-r.r,o=i-r.t-r.b,c="http://www.w3.org/2000/svg",l=document.createElementNS(c,"svg");l.setAttribute("viewBox",`0 0 ${n} ${i}`),l.classList.add("ppb-overview-sparkline");const d=s.map(F=>F.cumulativeWords??0),f=s.map(F=>F.previousMonthCumulative??0),h=[...d,...f],g=Math.max(...h,1),p=Math.min(...h,0),y=g-p||1,v=F=>F/Math.max(s.length-1,1)*a,E=F=>(g-F)/y*o,x=F=>F.map((M,B)=>`${B===0?"M":"L"} ${v(B)} ${E(M)}`).join(" "),C=document.createElementNS(c,"g");C.setAttribute("transform",`translate(${r.l},${r.t})`);for(let F=0;F{this.applyThemeColors()}),this.themeObserver.observe(document.body,{attributes:!0,attributeFilter:["class"]})}applyThemeColors(){}buildNativeShell(){const e=this.contentEl;e.empty(),e.addClass("section-view-workspace");const t=e.createDiv({cls:"ppb-native-shell"}),s=t.createDiv({cls:"ppb-native-shell-header"});this.buildHeader(s),this.tabContainers.academic=t.createDiv({cls:"ppb-tab-container ppb-tab-academic"}),this.tabContainers.projects=t.createDiv({cls:"ppb-tab-container ppb-tab-projects"}),this.tabContainers.personal=t.createDiv({cls:"ppb-tab-container ppb-tab-personal"}),this.buildAcademicTab(this.tabContainers.academic),this.buildProjectsTab(this.tabContainers.projects),this.buildPersonalTab(this.tabContainers.personal),this.switchTab(ut.getState().currentTab||"academic")}buildAcademicTab(e){const t=e.createDiv({cls:"ppb-academic-grid"}),s=[t.createDiv({cls:"ppb-island"}),t.createDiv({cls:"ppb-island"}),t.createDiv({cls:"ppb-base-cell ppb-academic-base"}),t.createDiv({cls:"ppb-base-cell ppb-academic-base"})],n=new Ka(s[0],this.app,this.plugin);this.addChild(n),this.buildTodayFocusViews(s[1]);const i=this.plugin.settings.componentDataSources?.recentLiterature?.literatureFolderPath||"Inputs/Zotero",r=this.plugin.settings.componentDataSources?.recentLiterature,a=new ii(s[2],this.app,this.plugin,{title:r?.displayName||"最近文献",icon:"book-open",description:r?.description||"展示最近阅读和收集的学术文献",baseYaml:["filters:"," and:",` - file.inFolder("${i}")`,"views:"," - type: table",' name: "Literature"'," order:"," - file.name"," - tags"," - file.modified"].join(` +`)});this.addChild(a);const o=this.plugin.settings.componentDataSources?.researchFocusMap?.trackingTags||["research","study","paper","note","想法","project"],c=o.length>0?["filters:"," or:",...o.map(f=>` - file.hasTag("${f}")`)]:[],l=this.plugin.settings.componentDataSources?.researchFocusMap,d=new ii(s[3],this.app,this.plugin,{title:l?.displayName||"研究焦点地图",icon:"target",description:l?.description||"可视化展示研究领域和关注重点",baseYaml:[...c,"views:"," - type: ppb-focus-heatmap",' name: "Research Focus"'," order:"," - file.name"," - tags"," - file.modified"].join(` +`),alternateView:{icon:"grid",tooltip:"Switch to heatmap grid view",baseYaml:[...c,"views:"," - type: ppb-focus-grid",' name: "Focus Grid"'," order:"," - file.name"," - tags"," - file.modified"].join(` +`)}});this.addChild(d)}buildTodayFocusViews(e){const t=e.createDiv({cls:"ppb-today-split"}),s=["filters:",` 'file.mtime >= date("today")'`,"views:"," - type: ppb-today-stats",' name: "Today Stats"'].join(` +`),n=["filters:",` 'file.mtime >= date("today")'`,"views:"," - type: ppb-weekly-performance",' name: "Weekly Performance"'].join(` +`),i=t.createDiv({cls:"ppb-today-split-cell"}),r=t.createDiv({cls:"ppb-today-split-cell"}),a=new w.Component;a.load(),this.register(()=>a.unload());const o=new w.Component;o.load(),this.register(()=>o.unload()),w.MarkdownRenderer.render(this.app,"```base\n"+s+"\n```",i,"",a),w.MarkdownRenderer.render(this.app,"```base\n"+n+"\n```",r,"",o)}buildProjectsTab(e){const t=e.createDiv({cls:"ppb-base-grid"}),s=["papers","experiments","tasks","resources"];for(const n of s){const i=t.createDiv({cls:"ppb-base-cell"}),r=new Fa(i,this.app,this.plugin,n);this.addChild(r),this.baseContainers.push(r)}}buildPersonalTab(e){const t=e.createDiv({cls:"ppb-base-cell"}),s=new Ra(t,this.app,this.plugin,"books");this.addChild(s),this.baseContainers.push(s)}buildHeader(e){const t=ut.getState(),s=this.plugin?.settings?.userProfile||{name:"用户",title:"研究者",email:"user@example.com",institution:"研究机构",avatar:""},n=e.createDiv({cls:"ppb-header"}),i=n.createDiv({cls:"ppb-header-left"}),a=i.createDiv({cls:"ppb-header-avatar"}).createEl("img",{attr:{src:this.resolveAvatarSrc(s.avatar),alt:"用户头像"}});a.addEventListener("error",()=>{a.src="https://avatars.githubusercontent.com/u/45836839?v=4"});const o=i.createDiv({cls:"ppb-header-info"}),c=o.createDiv({cls:"ppb-header-name-row"});c.createEl("h2",{cls:"ppb-header-name",text:s.name||"用户"}),c.createEl("span",{cls:"ppb-header-title",text:s.title||"研究者"});const l=o.createDiv({cls:"ppb-header-details"}),d=l.createDiv({cls:"ppb-header-detail-row"});d.createSpan({text:"📮"}),d.createSpan({text:s.email||"user@example.com"});const f=l.createDiv({cls:"ppb-header-detail-row"});f.createSpan({text:"🏫"}),f.createSpan({text:s.institution||"研究机构"});const h=n.createDiv({cls:"ppb-header-right"}),g=h.createEl("button",{cls:"ppb-header-settings-btn",attr:{title:"设置"}});g.innerHTML='',g.appendText(" 设置"),g.addEventListener("click",()=>this.openSettings());const p=h.createDiv({cls:"ppb-header-tab-switcher"}),y=[{key:"academic",label:"学术"},{key:"projects",label:"项目"},{key:"personal",label:"个人"}],v={};for(const x of y){const C=p.createEl("button",{cls:"ppb-header-tab-btn",text:x.label});t.currentTab===x.key&&C.addClass("ppb-header-tab-active"),C.addEventListener("click",()=>{ut.getState().setCurrentTab(x.key)}),v[x.key]=C}const E=ut.subscribe(x=>x.currentTab,x=>{for(const[C,T]of Object.entries(v))C===x?T.addClass("ppb-header-tab-active"):T.removeClass("ppb-header-tab-active")});this.register(()=>E())}resolveAvatarSrc(e){if(!e)return"https://avatars.githubusercontent.com/u/45836839?v=4";if(e.startsWith("http"))return e;const t=this.app.vault.getFileByPath(e);return t?this.app.vault.getResourcePath(t):"https://avatars.githubusercontent.com/u/45836839?v=4"}subscribeToTabChanges(){this.storeUnsubscribe=ut.subscribe(e=>e.currentTab,e=>this.switchTab(e))}switchTab(e){Object.entries(this.tabContainers).forEach(([t,s])=>{t===e?s.addClass("ppb-tab-active"):s.removeClass("ppb-tab-active")})}openSettings(){const e=this.app.setting;e&&(e.open(),e.openTabById("paperbell"))}async onClose(){this.storeUnsubscribe&&(this.storeUnsubscribe(),this.storeUnsubscribe=null),this.themeObserver&&(this.themeObserver.disconnect(),this.themeObserver=null);for(const e of this.baseContainers)this.removeChild(e);if(this.baseContainers=[],this.dataManager&&this.dataManager!==this.plugin.dataManager)try{this.dataManager.destroy()}catch(e){console.error("Error destroying DataManager:",e)}this.dataManager=null}getDefaultSettings(){return{sections:[],configMode:!1,layout:"free-grid",theme:"auto"}}}class Ja{constructor(e,t){this.baseUrl="https://paperbell.cn/api",this.isActivated=!1,this.fallbackMode=!1,this.lastProxyFailureTime=0,this.FALLBACK_COOLDOWN=300*1e3,this.activationCode=e,this.deviceId=t||this.generateDeviceId()}generateDeviceId(){const e=localStorage.getItem("paperbell-device-id");if(e)return e;const t=navigator.userAgent,s=navigator.platform,n=navigator.language,i=Intl.DateTimeFormat().resolvedOptions().timeZone,r=`${screen.width}x${screen.height}`;let a="";navigator.hardwareConcurrency&&(a=navigator.hardwareConcurrency.toString());const o=[t,s,n,i,r,a].join("|");let c=0;for(let d=0;dn)return new w.Notice("Activation failed: License has expired"),!1}return s.token_type&&s.token_type!=="activation_code"?(new w.Notice("Activation failed: Invalid token type"),!1):(this.isActivated=!0,!0)}else return new w.Notice("Activation failed: "+(t.error||"Invalid activation code")),!1}else return new w.Notice("Activation failed: Server error"),!1}catch(e){return console.error("Activation error:",e),new w.Notice("Activation failed: Network error"),!1}}async request(e){if(!this.isActivated&&!await this.activate())throw new Error("Device not activated");if(!this.fallbackMode||this.shouldRetryProxy())try{const t=new URL(e.url),s=await w.requestUrl({url:`${this.baseUrl}/proxy`,method:"POST",headers:{"X-Activation-Code":this.activationCode,"X-Device-ID":this.deviceId,"X-Target-Service":t.host,"Content-Type":"application/json"},body:JSON.stringify({url:e.url,method:e.method||"GET",headers:e.headers||{},...e.body?{body:e.body}:{}})});if(s.status===200)return this.fallbackMode=!1,s;if(s.status===401||s.status===403)return this.isActivated=!1,s;this.enableFallbackMode()}catch(t){console.warn("Proxy request failed, switching to fallback:",t),this.enableFallbackMode()}return w.requestUrl(e)}async proxyRequest(e){if(!this.isActivated&&!await this.activate())return{success:!1,error:"Device not activated"};if(!this.fallbackMode||this.shouldRetryProxy())try{const t=new URL(e.url),s=e.url,n=t.host,i=`${this.baseUrl}/proxy`,r={url:s,method:e.method||"GET",headers:e.headers||{},...e.body&&{body:e.body}},a={url:i,method:"POST",headers:{"X-Activation-Code":this.activationCode,"X-Device-ID":this.deviceId,"X-Target-Service":n,"Content-Type":"application/json"},body:JSON.stringify(r)},o=await w.requestUrl(a);if(o.status===200)return this.fallbackMode=!1,{success:!0,data:o.json,status:o.status};if(o.status===401||o.status===403)return this.isActivated=!1,new w.Notice("License expired or invalid. Please check your activation code."),{success:!1,error:"License expired or invalid",status:o.status};console.warn(`Proxy server error (${o.status}), switching to fallback`),this.enableFallbackMode()}catch(t){console.warn("Proxy request failed, switching to fallback:",t),this.enableFallbackMode()}try{const t={url:e.url,method:e.method||"GET",headers:e.headers||{}};e.body&&(t.body=typeof e.body=="string"?e.body:JSON.stringify(e.body));const s=await w.requestUrl(t);return{success:!0,data:s.json,status:s.status,usedFallback:!0}}catch(t){return console.error("Direct request fallback also failed:",t),{success:!1,error:t.message||"Both proxy and direct request failed",usedFallback:!0}}}enableFallbackMode(){this.fallbackMode=!0,this.lastProxyFailureTime=Date.now()}shouldRetryProxy(){return Date.now()-this.lastProxyFailureTime>this.FALLBACK_COOLDOWN}updateActivationCode(e){this.activationCode=e,this.isActivated=!1,this.fallbackMode=!1}isServiceActivated(){return this.isActivated}getDeviceId(){return this.deviceId}isInFallbackMode(){return this.fallbackMode}}class Qa{constructor(e,t){this.dataService=null,this.app=e,this.config={...Ht,componentSettings:Dt,...t}}getConfig(){return{...this.config}}updateConfig(e){this.config={...this.config,...e},this.dataService&&this.dataService.updateConfig(this.config)}updateUserProfile(e){this.config.userProfile={...this.config.userProfile,...e},this.dataService&&this.dataService.updateConfig(this.config)}updateDataSources(e){this.config.dataSources={...this.config.dataSources,...e},this.dataService&&this.dataService.updateConfig(this.config)}updateComponentSettings(e){this.config.componentSettings={...this.config.componentSettings,...e},this.dataService&&this.dataService.updateConfig(this.config)}getDataService(e){return this.dataService||(this.dataService=new le(this.app,e,this.config)),this.dataService}resetToDefaults(){this.config={...Ht,componentSettings:Dt},this.dataService&&this.dataService.updateConfig(this.config)}validateConfig(){const e=[];this.config.userProfile.name.trim()||e.push("用户名称不能为空"),this.config.userProfile.email.trim()||e.push("用户邮箱不能为空");const t=["booksFolder","projectsFolder","papersFolder","notesFolder","literatureFolder","experimentsFolder","resourcesFolder"];for(const s of t)this.config.dataSources[s].trim()||e.push(`${s} 路径不能为空`);return this.config.dataSources.todosSource==="folder"&&!this.config.dataSources.todosFolder?.trim()&&e.push("待办事项文件夹路径不能为空"),{isValid:e.length===0,errors:e}}loadFromPluginSettings(e){e.dataServiceConfig&&this.updateConfig(e.dataServiceConfig)}exportToPluginSettings(){return{dataServiceConfig:this.config}}getRecommendedFolderStructure(){return{Books:"存放书籍相关的笔记和元数据",Projects:"存放项目管理相关的文件",Papers:"存放学术论文和研究文档",Notes:"存放日常笔记和研究记录","Inputs/Zotero":"存放从 Zotero 导入的文献",Experiments:"存放实验设计和数据",Resources:"存放学术资源和工具链接",Tasks:"存放待办事项(如果使用文件夹模式)"}}async checkFoldersExist(){const e=[],t=this.getRecommendedFolderStructure();for(const[s,n]of Object.entries(t)){const i=await this.app.vault.adapter.exists(s);e.push({folder:s,exists:i,description:n})}return e}async createMissingFolders(){const e=[],t=await this.checkFoldersExist();for(const{folder:s,exists:n}of t)if(!n)try{await this.app.vault.createFolder(s),e.push(s)}catch(i){console.error(`Failed to create folder ${s}:`,i)}return e}}class to extends w.Component{constructor(e){super(),this.statusBarItem=null,this.timer=null,this.unsubscribe=null,this.plugin=e}onload(){this.createStatusBarItem(),this.subscribeToStore(),this.startTimer(),this.loadSettings()}onunload(){this.stopTimer(),this.statusBarItem&&(this.statusBarItem.remove(),this.statusBarItem=null),this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null)}createStatusBarItem(){this.plugin.app.workspace.leftSplit&&(this.statusBarItem=this.plugin.addStatusBarItem(),this.statusBarItem.addClass("ppb-pomodoro-status-bar"),this.statusBarItem.setAttribute("aria-label","番茄钟"),this.statusBarItem.style.cursor="pointer",this.statusBarItem.addEventListener("click",e=>{e.preventDefault(),this.handleStatusBarClick()}),this.statusBarItem.addEventListener("contextmenu",e=>{e.preventDefault(),this.showContextMenu(e)}),this.updateStatusBarDisplay())}subscribeToStore(){this.unsubscribe=ut.subscribe(e=>e.pomodoroState,(e,t)=>{this.updateStatusBarDisplay(),t&&t.remainingTime>0&&e.remainingTime<=0&&e.isRunning&&this.handleSessionComplete(t.currentSession)})}updateStatusBarDisplay(){if(!this.statusBarItem)return;const e=ut.getState(),{pomodoroState:t,pomodoroSettings:s}=e;if(!s.enableStatusBar){this.statusBarItem.style.display="none";return}if(this.statusBarItem.style.display="block",t.isRunning||t.remainingTime>0){const i=Va(t.currentSession,t.remainingTime,t.isPaused);this.statusBarItem.setText(i),this.statusBarItem.removeClass("ppb-pomodoro-idle","ppb-pomodoro-paused"),t.isPaused?this.statusBarItem.addClass("ppb-pomodoro-paused"):this.statusBarItem.addClass("ppb-pomodoro-running")}else this.statusBarItem.setText("🍅"),this.statusBarItem.removeClass("ppb-pomodoro-running","ppb-pomodoro-paused"),this.statusBarItem.addClass("ppb-pomodoro-idle");const n=Fs(t.currentSession);this.statusBarItem.setAttribute("aria-label",`番茄钟 - ${n}`)}startTimer(){this.timer||(this.timer=window.setInterval(()=>{const e=ut.getState();e.pomodoroState.isRunning&&!e.pomodoroState.isPaused&&e.tickPomodoro()},1e3))}stopTimer(){this.timer&&(window.clearInterval(this.timer),this.timer=null)}handleStatusBarClick(){const e=ut.getState(),{pomodoroState:t}=e;if(t.isRunning){e.pausePomodoro();const s=t.isPaused?"继续":"暂停";new w.Notice(`番茄钟${s}`)}else e.startPomodoro(),new w.Notice("开始专注工作!")}showContextMenu(e){const t=ut.getState(),{pomodoroState:s}=t,n=new w.Menu;s.isRunning?(n.addItem(i=>{i.setTitle(s.isPaused?"继续":"暂停").setIcon(s.isPaused?"play":"pause").onClick(()=>{t.pausePomodoro()})}),n.addItem(i=>{i.setTitle("跳过当前会话").setIcon("skip-forward").onClick(()=>{t.skipSession(),new w.Notice("已跳过当前会话")})}),n.addItem(i=>{i.setTitle("停止").setIcon("stop-circle").onClick(()=>{t.stopPomodoro(),new w.Notice("番茄钟已停止")})})):n.addItem(i=>{i.setTitle("开始专注").setIcon("play").onClick(()=>{t.startPomodoro(),new w.Notice("开始专注工作!")})}),n.addSeparator(),n.addItem(i=>{i.setTitle(`今日完成: ${s.sessionCount} 个番茄钟`).setIcon("calendar").setDisabled(!0)}),n.showAtPosition({x:e.clientX,y:e.clientY})}handleSessionComplete(e){const t=ut.getState(),{pomodoroState:s,pomodoroSettings:n}=t;if(n.enableNotifications){const r=s.currentSession,a=Ha(e,r);new w.Notice(a,5e3)}(e==="work"&&n.autoStartBreaks||e!=="work"&&n.autoStartWork)&&setTimeout(()=>{const r=ut.getState();r.pomodoroState.isRunning||r.startPomodoro()},2e3)}loadSettings(){try{const e=localStorage.getItem("pomodoroSettings");if(e){const t=JSON.parse(e);ut.getState().updatePomodoroSettings(t)}}catch(e){console.warn("Failed to load pomodoro settings:",e)}}getCurrentState(){return ut.getState().pomodoroState}getSettings(){return ut.getState().pomodoroSettings}}function ci(u){return u!==null&&typeof u=="object"&&!Array.isArray(u)}function Ni(u,e){if(!e)return{...u};const t={...u};for(const s of Object.keys(e)){const n=e[s],i=u[s];n!==void 0&&(ci(n)&&ci(i)?t[s]=Ni(i,n):t[s]=n)}return t}class eo extends w.BasesView{constructor(e,t){super(e),this.type="ppb-focus-heatmap",this.drilldownComponent=null,this.containerEl=t}onDataUpdated(){this.render()}matchesTrackingTag(e,t){if(t.size===0)return!0;const s=e.toLowerCase();for(const n of t)if(s===n||s.startsWith(n+"/"))return!0;return!1}render(){this.cleanupDrilldown(),this.containerEl.empty(),this.containerEl.addClass("ppb-focus-heatmap");const e=this.data?.data??[];if(e.length===0){this.renderEmpty();return}const s=this.app.plugins?.plugins?.paperbell?.settings?.componentDataSources?.researchFocusMap?.trackingTags||[],n=new Set(s.map(p=>p.replace(/^#/,"").toLowerCase())),i=new Map,r=new Map,a=new Date;for(const p of e){const y=p.file,v=this.app.metadataCache.getFileCache(y);if(v?.frontmatter?.tags){const C=Array.isArray(v.frontmatter.tags)?v.frontmatter.tags:[v.frontmatter.tags];for(const T of C){const R=String(T).replace(/^#/,"");this.matchesTrackingTag(R,n)&&i.set(R,(i.get(R)||0)+1)}}if(v?.tags)for(const C of v.tags){const T=C.tag.replace(/^#/,"");this.matchesTrackingTag(T,n)&&i.set(T,(i.get(T)||0)+1)}const E=new Date(y.stat.mtime),x=this.getWeekKey(E);r.set(x,(r.get(x)||0)+1)}const o=[...i.entries()].sort((p,y)=>y[1]-p[1]).slice(0,8),c=o.length>0?o[0][1]:1,l=this.containerEl.createDiv({cls:"ppb-focus-wrapper"}),d=l.createDiv({cls:"ppb-focus-stats"});this.renderStatCard(d,"file-text",String(e.length),"Total Notes");const f=this.getWeekKey(a),h=r.get(f)||0;if(this.renderStatCard(d,"activity",String(h),"This Week"),this.renderStatCard(d,"tags",String(i.size),"Focus Tags"),o.length>0){const p=l.createDiv({cls:"ppb-focus-tags-section"});p.createEl("div",{text:"Tag Distribution",cls:"ppb-focus-section-title"});const y=p.createDiv({cls:"ppb-focus-tag-list"});for(const[v,E]of o){const x=y.createDiv({cls:"ppb-focus-tag-row"});x.createSpan({text:`#${v}`,cls:"ppb-focus-tag-name"});const T=x.createDiv({cls:"ppb-focus-tag-bar-bg"}).createDiv({cls:"ppb-focus-tag-bar"});T.style.width=`${Math.max(E/c*100,4)}%`,x.createSpan({text:String(E),cls:"ppb-focus-tag-count"})}}const g=l.createDiv({cls:"ppb-focus-heatmap-section"});g.createEl("div",{text:"Recent Activity",cls:"ppb-focus-section-title"}),this.renderWeeklyHeatmap(g,r,a,s)}renderEmpty(){const e=this.containerEl.createDiv({cls:"ppb-focus-empty"}),t=e.createDiv({cls:"ppb-focus-empty-icon"});w.setIcon(t,"target"),e.createEl("p",{text:"No matching notes found",cls:"ppb-focus-empty-title"}),e.createEl("p",{text:"Notes with tracked tags will appear here",cls:"ppb-focus-empty-hint"})}renderStatCard(e,t,s,n){const i=e.createDiv({cls:"ppb-focus-stat-card"}),r=i.createDiv({cls:"ppb-focus-stat-icon"});w.setIcon(r,t),i.createDiv({text:s,cls:"ppb-focus-stat-value"}),i.createDiv({text:n,cls:"ppb-focus-stat-label"})}renderWeeklyHeatmap(e,t,s,n){const i=e.createDiv({cls:"ppb-focus-heatmap-grid"}),r=[];for(let o=11;o>=0;o--){const c=new Date(s);c.setDate(c.getDate()-o*7);const l=this.getWeekKey(c),d=t.get(l)||0,f=`${c.getMonth()+1}/${c.getDate()}`,h=new Date(c);h.setDate(h.getDate()-(h.getDay()+6)%7),h.setHours(0,0,0,0);const g=new Date(h);g.setDate(g.getDate()+6),g.setHours(23,59,59,999),r.push({key:l,label:f,count:d,start:h,end:g})}const a=Math.max(...r.map(o=>o.count),1);for(const o of r){const c=i.createDiv({cls:"ppb-focus-heatmap-cell"}),l=o.count===0?0:Math.min(Math.ceil(o.count/a*4),4);c.addClass(`ppb-focus-heat-${l}`),c.setAttribute("aria-label",`${o.label}: ${o.count} notes`),c.createDiv({text:o.label,cls:"ppb-focus-heatmap-label"}),c.createDiv({text:String(o.count),cls:"ppb-focus-heatmap-count"}),o.count>0&&(c.style.cursor="pointer",c.addEventListener("click",()=>{this.showWeekListView(o.label,o.start,o.end,o.count,n)}))}}async showWeekListView(e,t,s,n,i){this.cleanupDrilldown(),this.containerEl.empty();const r=this.containerEl.createDiv({cls:"ppb-focus-map-drilldown"}),a=r.createDiv({cls:"ppb-focus-map-drilldown-header"}),o=a.createDiv({cls:"ppb-focus-map-drilldown-label"});o.textContent=`Week of ${e} · ${n} notes`;const c=a.createEl("button",{cls:"clickable-icon ppb-focus-map-drilldown-back",attr:{"aria-label":"Back to overview"}});w.setIcon(c,"arrow-left"),c.addEventListener("click",()=>this.render());const l=x=>`${x.getFullYear()}-${String(x.getMonth()+1).padStart(2,"0")}-${String(x.getDate()).padStart(2,"0")}`,d=l(t),f=l(s),h=i.map(x=>x.replace(/^#/,"")),g=[];if(g.push("filters:"),g.push(" and:"),g.push(` - 'file.mtime >= date("${d}")'`),g.push(` - 'file.mtime <= date("${f}") + "1d"'`),h.length>0){g.push(" - or:");for(const x of h)g.push(` - file.hasTag("${x}")`)}const p=[];if(h.length>0){const x=h.map(C=>`value == "#${C}" || value.startsWith("#${C}/")`).join(" || ");p.push("formulas:"),p.push(` focus_tag: 'file.tags.filter(${x}).join(", ")'`)}const y=[...g,...p,"views:"," - type: list",` name: "Week of ${e}"`,...h.length>0?[" groupBy:"," property: formula.focus_tag"," direction: ASC"]:[]," order:"," - file.name"," - tags"," - file.modified"].join(` +`),v=r.createDiv({cls:"ppb-focus-map-drilldown-content"});this.drilldownComponent=new w.Component,this.drilldownComponent.load();const E="```base\n"+y+"\n```";try{await w.MarkdownRenderer.render(this.app,E,v,"",this.drilldownComponent)}catch(x){console.error("[ResearchFocusBasesView] Failed to render list view:",x),v.empty(),v.createDiv({text:`Failed to render list: ${x}`,cls:"ppb-focus-map-error"})}}cleanupDrilldown(){this.drilldownComponent&&(this.drilldownComponent.unload(),this.drilldownComponent=null)}getWeekKey(e){const t=new Date(e);t.setHours(0,0,0,0),t.setDate(t.getDate()+3-(t.getDay()+6)%7);const s=new Date(t.getFullYear(),0,4),n=Math.ceil(((t.getTime()-s.getTime())/864e5+s.getDay()+1)/7);return`${t.getFullYear()}-W${String(n).padStart(2,"0")}`}}class so extends w.BasesView{constructor(e,t){super(e),this.type="ppb-focus-grid",this.cellDateRanges=[],this.drilldownComponent=null,this.containerEl=t}onDataUpdated(){this.render()}render(){this.cleanupDrilldown(),this.containerEl.empty(),this.containerEl.addClass("ppb-focus-map");const e=this.data?.data??[];if(e.length===0){this.renderEmpty();return}const s=this.app.plugins?.plugins?.paperbell?.settings?.componentDataSources?.researchFocusMap,n=s?.trackingTags||[],i=new Set(n.map(E=>E.replace(/^#/,"").toLowerCase())),r={gridSize:s?.gridSize??50,borderRadius:s?.borderRadius??6},{months:a,data:o,dateRanges:c}=this.computeGrid(e,n,i);this.cellDateRanges=c;const l=this.containerEl.createDiv({cls:"ppb-focus-map-info"});n.length>0&&l.createEl("span",{text:`Tracking: ${n.map(E=>`#${E}`).join(", ")}`,cls:"ppb-focus-map-tags"}),l.createEl("span",{text:`${e.length} notes`,cls:"ppb-focus-map-count"});const d=["W1","W2","W3","W4"],f=this.containerEl.createDiv({cls:"ppb-focus-map-grid"});f.style.gridTemplateColumns="minmax(55px, max-content) repeat(4, 1fr)",f.createDiv();for(const E of d)f.createDiv({text:E,cls:"ppb-focus-map-week-header"});const h=o.length>0?o:Array(Math.max(a.length,3)).fill(null).map(()=>Array(4).fill({tag:"",intensity:0,count:0,weekNotes:0})),g=a.length>0?a:["Mon 1","Mon 2","Mon 3"];for(let E=0;E.7&&(T.style.boxShadow="0 0 8px rgba(100, 142, 192, 0.3)"),T.title=C?.tag?`${C.tag} - Focus: ${Math.round(R*100)}%${C.count?` - ${C.count} notes`:""}${C.weekNotes?` - ${C.weekNotes} total this week`:""}`:"No data",C?.tag){const F=R>.5?"var(--primary-foreground)":"var(--foreground)",M=T.createDiv({cls:"ppb-focus-map-cell-tag"});M.style.color=F,M.textContent=C.tag;const B=T.createDiv({cls:"ppb-focus-map-cell-pct"});if(B.style.color=F,B.textContent=`${Math.round(R*100)}%`,C.count>0){const q=T.createDiv({cls:"ppb-focus-map-cell-count"});q.style.color=F,q.textContent=`(${C.count})`}T.style.cursor="pointer",T.addEventListener("click",()=>{const q=this.cellDateRanges[E]?.[x];q&&this.showCellListView(g[E],`W${x+1}`,C,q,n)})}}}const p=this.containerEl.createDiv({cls:"ppb-focus-map-legend"});p.createEl("span",{text:"Focus"});const y=p.createDiv({cls:"ppb-focus-map-legend-bar"});y.createEl("span",{text:"Low"});const v=y.createDiv({cls:"ppb-focus-map-legend-swatches"});for(const E of[.2,.4,.6,.8,1]){const x=v.createDiv({cls:"ppb-focus-map-legend-swatch"});x.style.backgroundColor=this.getColor(E),x.style.borderRadius=`${Math.min(r.borderRadius,6)}px`}y.createEl("span",{text:"High"})}computeGrid(e,t,s){const n=new Date,i=new Date(n.getFullYear(),n.getMonth()-2,1),r=[],a=[],o=[];for(let c=0;c<3;c++){const l=new Date(i.getFullYear(),i.getMonth()+c,1);r.push(l.toLocaleDateString("en-US",{month:"short"}));const d=new Date(l.getFullYear(),l.getMonth()+1,0).getDate(),f=[],h=[];for(let g=0;g<4;g++){const p=new Date(l.getFullYear(),l.getMonth(),Math.max(1,g*7+1));p.setHours(0,0,0,0);const y=new Date(l.getFullYear(),l.getMonth(),Math.min(d,(g+1)*7));y.setHours(23,59,59,999),h.push({start:new Date(p),end:new Date(y)});const v=e.filter(C=>{const T=C.file?.stat?.mtime;if(!T)return!1;const R=new Date(T);return R>=p&&R<=y}),E={};for(const C of v){const T=C.file,R=this.app.metadataCache.getFileCache(T),F=this.collectFileTags(R);for(const M of F)if(this.matchesAnyTrackingTag(M,t,s)){const B=this.findMatchingTrackingTag(M,t,s);E[B]=(E[B]||0)+1}}const x=Object.entries(E).sort((C,T)=>T[1]-C[1]);if(x.length>0){const[C,T]=x[0],R=Math.max(...x.map(([,M])=>M)),F=Math.max(.1,Math.min(T/Math.max(R,5),1));f.push({tag:`#${C}`,intensity:F,count:T,weekNotes:v.length})}else f.push({tag:"",intensity:0,count:0,weekNotes:v.length})}a.push(f),o.push(h)}return{months:r,data:a,dateRanges:o}}collectFileTags(e){const t=[];if(e?.frontmatter?.tags){const s=Array.isArray(e.frontmatter.tags)?e.frontmatter.tags:[e.frontmatter.tags];for(const n of s)t.push(String(n).replace(/^#/,""))}if(e?.tags)for(const s of e.tags)t.push(s.tag.replace(/^#/,""));return t}matchesAnyTrackingTag(e,t,s){if(s.size===0)return!0;const n=e.toLowerCase();for(const i of s)if(n===i||n.startsWith(i+"/"))return!0;return!1}findMatchingTrackingTag(e,t,s){const n=e.toLowerCase();for(const i of t){const r=i.replace(/^#/,"").toLowerCase();if(n===r||n.startsWith(r+"/"))return i.replace(/^#/,"")}return e}async showCellListView(e,t,s,n,i){this.cleanupDrilldown(),this.containerEl.empty();const r=this.containerEl.createDiv({cls:"ppb-focus-map-drilldown"}),a=r.createDiv({cls:"ppb-focus-map-drilldown-header"}),o=a.createDiv({cls:"ppb-focus-map-drilldown-label"});o.textContent=`${e} ${t}${s.tag?` · ${s.tag}`:""}${s.weekNotes?` · ${s.weekNotes} notes`:""}`;const c=a.createEl("button",{cls:"clickable-icon ppb-focus-map-drilldown-back",attr:{"aria-label":"Back to heatmap"}});w.setIcon(c,"arrow-left"),c.addEventListener("click",()=>this.render());const l=x=>`${x.getFullYear()}-${String(x.getMonth()+1).padStart(2,"0")}-${String(x.getDate()).padStart(2,"0")}`,d=l(n.start),f=l(n.end),h=i.map(x=>x.replace(/^#/,"")),g=[];if(g.push("filters:"),g.push(" and:"),g.push(` - 'file.mtime >= date("${d}")'`),g.push(` - 'file.mtime <= date("${f}") + "1d"'`),h.length>0){g.push(" - or:");for(const x of h)g.push(` - file.hasTag("${x}")`)}const p=[];if(h.length>0){const x=h.map(C=>`value == "#${C}" || value.startsWith("#${C}/")`).join(" || ");p.push("formulas:"),p.push(` focus_tag: 'file.tags.filter(${x}).join(", ")'`)}const y=[...g,...p,"views:"," - type: list",` name: "${e} ${t}"`,...h.length>0?[" groupBy:"," property: formula.focus_tag"," direction: ASC"]:[]," order:"," - file.name"," - tags"," - file.modified"].join(` +`),v=r.createDiv({cls:"ppb-focus-map-drilldown-content"});this.drilldownComponent=new w.Component,this.drilldownComponent.load();const E="```base\n"+y+"\n```";try{await w.MarkdownRenderer.render(this.app,E,v,"",this.drilldownComponent)}catch(x){console.error("[ResearchFocusMapView] Failed to render list view:",x),v.empty(),v.createDiv({text:`Failed to render list: ${x}`,cls:"ppb-focus-map-error"})}}cleanupDrilldown(){this.drilldownComponent&&(this.drilldownComponent.unload(),this.drilldownComponent=null)}renderEmpty(){const e=this.containerEl.createDiv({cls:"ppb-focus-map-empty"}),t=e.createDiv({cls:"ppb-focus-empty-icon"});w.setIcon(t,"target"),e.createEl("p",{text:"No research focus data found."}),e.createEl("p",{text:"Add tags to your notes to start tracking research focus.",cls:"ppb-focus-map-hint"})}getColor(e){const t=Math.max(.1,e),s=getComputedStyle(document.documentElement).getPropertyValue("--primary").trim();if(s.startsWith("#")){const n=parseInt(s.slice(1,3),16),i=parseInt(s.slice(3,5),16),r=parseInt(s.slice(5,7),16);return`rgba(${n}, ${i}, ${r}, ${t})`}return`rgba(100, 142, 192, ${t})`}}var rt={},li;function no(){if(li)return rt;li=1,Object.defineProperty(rt,"__esModule",{value:!0});var u=w;const e="YYYY-MM-DD",t="gggg-[W]ww",s="YYYY-MM",n="YYYY-[Q]Q",i="YYYY";function r(D){const S=window.app.plugins.getPlugin("periodic-notes");return S&&S.settings?.[D]?.enabled}function a(){try{const{internalPlugins:D,plugins:S}=window.app;if(r("daily")){const{format:j,folder:N,template:H}=S.getPlugin("periodic-notes")?.settings?.daily||{};return{format:j||e,folder:N?.trim()||"",template:H?.trim()||""}}const{folder:k,format:_,template:O}=D.getPluginById("daily-notes")?.instance?.options||{};return{format:_||e,folder:k?.trim()||"",template:O?.trim()||""}}catch{}}function o(){try{const D=window.app.plugins,S=D.getPlugin("calendar")?.options,k=D.getPlugin("periodic-notes")?.settings?.weekly;if(r("weekly"))return{format:k.format||t,folder:k.folder?.trim()||"",template:k.template?.trim()||""};const _=S||{};return{format:_.weeklyNoteFormat||t,folder:_.weeklyNoteFolder?.trim()||"",template:_.weeklyNoteTemplate?.trim()||""}}catch{}}function c(){const D=window.app.plugins;try{const S=r("monthly")&&D.getPlugin("periodic-notes")?.settings?.monthly||{};return{format:S.format||s,folder:S.folder?.trim()||"",template:S.template?.trim()||""}}catch{}}function l(){const D=window.app.plugins;try{const S=r("quarterly")&&D.getPlugin("periodic-notes")?.settings?.quarterly||{};return{format:S.format||n,folder:S.folder?.trim()||"",template:S.template?.trim()||""}}catch{}}function d(){const D=window.app.plugins;try{const S=r("yearly")&&D.getPlugin("periodic-notes")?.settings?.yearly||{};return{format:S.format||i,folder:S.folder?.trim()||"",template:S.template?.trim()||""}}catch{}}function f(...D){let S=[];for(let _=0,O=D.length;_{const It=_(),Mt=D.clone().set({hour:It.get("hour"),minute:It.get("minute"),second:It.get("second")});return bt&&Mt.add(parseInt(ht,10),ft),it?Mt.format(it.substring(1).trim()):Mt.format(j)}).replace(/{{\s*yesterday\s*}}/gi,D.clone().subtract(1,"day").format(j)).replace(/{{\s*tomorrow\s*}}/gi,D.clone().add(1,"d").format(j)));return S.foldManager.save(at,J),at}catch(at){console.error(`Failed to create file: '${et}'`,at),new u.Notice("Unable to create new file.")}}function B(D,S){return S[v(D,"day")]??null}function q(){const{vault:D}=window.app,{folder:S}=a(),k=D.getAbstractFileByPath(u.normalizePath(S));if(!k)throw new F("Failed to find daily notes folder");const _={};return u.Vault.recurseChildren(k,O=>{if(O instanceof u.TFile){const j=C(O,"day");if(j){const N=v(j,"day");_[N]=O}}}),_}class tt extends Error{}function P(){const{moment:D}=window;let S=D.localeData()._week.dow;const k=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"];for(;S;)k.push(k.shift()),S--;return k}function U(D){return P().indexOf(D.toLowerCase())}async function b(D){const{vault:S}=window.app,{template:k,format:_,folder:O}=o(),[j,N]=await y(k),H=D.format(_),J=await p(O,H);try{const V=await S.create(J,j.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(et,at,st,pt,bt,ht)=>{const ft=window.moment(),it=D.clone().set({hour:ft.get("hour"),minute:ft.get("minute"),second:ft.get("second")});return st&&it.add(parseInt(pt,10),bt),ht?it.format(ht.substring(1).trim()):it.format(_)}).replace(/{{\s*title\s*}}/gi,H).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*(sunday|monday|tuesday|wednesday|thursday|friday|saturday)\s*:(.*?)}}/gi,(et,at,st)=>{const pt=U(at);return D.weekday(pt).format(st.trim())}));return window.app.foldManager.save(V,N),V}catch(V){console.error(`Failed to create file: '${J}'`,V),new u.Notice("Unable to create new file.")}}function I(D,S){return S[v(D,"week")]??null}function G(){const D={};if(!gt())return D;const{vault:S}=window.app,{folder:k}=o(),_=S.getAbstractFileByPath(u.normalizePath(k));if(!_)throw new tt("Failed to find weekly notes folder");return u.Vault.recurseChildren(_,O=>{if(O instanceof u.TFile){const j=C(O,"week");if(j){const N=v(j,"week");D[N]=O}}}),D}class $ extends Error{}async function Y(D){const{vault:S}=window.app,{template:k,format:_,folder:O}=c(),[j,N]=await y(k),H=D.format(_),J=await p(O,H);try{const V=await S.create(J,j.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(et,at,st,pt,bt,ht)=>{const ft=window.moment(),it=D.clone().set({hour:ft.get("hour"),minute:ft.get("minute"),second:ft.get("second")});return st&&it.add(parseInt(pt,10),bt),ht?it.format(ht.substring(1).trim()):it.format(_)}).replace(/{{\s*date\s*}}/gi,H).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,H));return window.app.foldManager.save(V,N),V}catch(V){console.error(`Failed to create file: '${J}'`,V),new u.Notice("Unable to create new file.")}}function z(D,S){return S[v(D,"month")]??null}function K(){const D={};if(!dt())return D;const{vault:S}=window.app,{folder:k}=c(),_=S.getAbstractFileByPath(u.normalizePath(k));if(!_)throw new $("Failed to find monthly notes folder");return u.Vault.recurseChildren(_,O=>{if(O instanceof u.TFile){const j=C(O,"month");if(j){const N=v(j,"month");D[N]=O}}}),D}class L extends Error{}async function A(D){const{vault:S}=window.app,{template:k,format:_,folder:O}=l(),[j,N]=await y(k),H=D.format(_),J=await p(O,H);try{const V=await S.create(J,j.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(et,at,st,pt,bt,ht)=>{const ft=window.moment(),it=D.clone().set({hour:ft.get("hour"),minute:ft.get("minute"),second:ft.get("second")});return st&&it.add(parseInt(pt,10),bt),ht?it.format(ht.substring(1).trim()):it.format(_)}).replace(/{{\s*date\s*}}/gi,H).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,H));return window.app.foldManager.save(V,N),V}catch(V){console.error(`Failed to create file: '${J}'`,V),new u.Notice("Unable to create new file.")}}function Q(D,S){return S[v(D,"quarter")]??null}function X(){const D={};if(!St())return D;const{vault:S}=window.app,{folder:k}=l(),_=S.getAbstractFileByPath(u.normalizePath(k));if(!_)throw new L("Failed to find quarterly notes folder");return u.Vault.recurseChildren(_,O=>{if(O instanceof u.TFile){const j=C(O,"quarter");if(j){const N=v(j,"quarter");D[N]=O}}}),D}class Z extends Error{}async function lt(D){const{vault:S}=window.app,{template:k,format:_,folder:O}=d(),[j,N]=await y(k),H=D.format(_),J=await p(O,H);try{const V=await S.create(J,j.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(et,at,st,pt,bt,ht)=>{const ft=window.moment(),it=D.clone().set({hour:ft.get("hour"),minute:ft.get("minute"),second:ft.get("second")});return st&&it.add(parseInt(pt,10),bt),ht?it.format(ht.substring(1).trim()):it.format(_)}).replace(/{{\s*date\s*}}/gi,H).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,H));return window.app.foldManager.save(V,N),V}catch(V){console.error(`Failed to create file: '${J}'`,V),new u.Notice("Unable to create new file.")}}function mt(D,S){return S[v(D,"year")]??null}function ot(){const D={};if(!yt())return D;const{vault:S}=window.app,{folder:k}=d(),_=S.getAbstractFileByPath(u.normalizePath(k));if(!_)throw new Z("Failed to find yearly notes folder");return u.Vault.recurseChildren(_,O=>{if(O instanceof u.TFile){const j=C(O,"year");if(j){const N=v(j,"year");D[N]=O}}}),D}function ct(){const{app:D}=window,S=D.internalPlugins.plugins["daily-notes"];if(S&&S.enabled)return!0;const k=D.plugins.getPlugin("periodic-notes");return k&&k.settings?.daily?.enabled}function gt(){const{app:D}=window;if(D.plugins.getPlugin("calendar"))return!0;const S=D.plugins.getPlugin("periodic-notes");return S&&S.settings?.weekly?.enabled}function dt(){const{app:D}=window,S=D.plugins.getPlugin("periodic-notes");return S&&S.settings?.monthly?.enabled}function St(){const{app:D}=window,S=D.plugins.getPlugin("periodic-notes");return S&&S.settings?.quarterly?.enabled}function yt(){const{app:D}=window,S=D.plugins.getPlugin("periodic-notes");return S&&S.settings?.yearly?.enabled}function m(D){const S={day:a,week:o,month:c,quarter:l,year:d}[D];return S()}function W(D,S){return{day:M,month:Y,week:b}[D](S)}return rt.DEFAULT_DAILY_NOTE_FORMAT=e,rt.DEFAULT_MONTHLY_NOTE_FORMAT=s,rt.DEFAULT_QUARTERLY_NOTE_FORMAT=n,rt.DEFAULT_WEEKLY_NOTE_FORMAT=t,rt.DEFAULT_YEARLY_NOTE_FORMAT=i,rt.appHasDailyNotesPluginLoaded=ct,rt.appHasMonthlyNotesPluginLoaded=dt,rt.appHasQuarterlyNotesPluginLoaded=St,rt.appHasWeeklyNotesPluginLoaded=gt,rt.appHasYearlyNotesPluginLoaded=yt,rt.createDailyNote=M,rt.createMonthlyNote=Y,rt.createPeriodicNote=W,rt.createQuarterlyNote=A,rt.createWeeklyNote=b,rt.createYearlyNote=lt,rt.getAllDailyNotes=q,rt.getAllMonthlyNotes=K,rt.getAllQuarterlyNotes=X,rt.getAllWeeklyNotes=G,rt.getAllYearlyNotes=ot,rt.getDailyNote=B,rt.getDailyNoteSettings=a,rt.getDateFromFile=C,rt.getDateFromPath=T,rt.getDateUID=v,rt.getMonthlyNote=z,rt.getMonthlyNoteSettings=c,rt.getPeriodicNoteSettings=m,rt.getQuarterlyNote=Q,rt.getQuarterlyNoteSettings=l,rt.getTemplateInfo=y,rt.getWeeklyNote=I,rt.getWeeklyNoteSettings=o,rt.getYearlyNote=mt,rt.getYearlyNoteSettings=d,rt}var ui=no();const Vt=class Vt{static dateKey(e){const t=e||new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}`}static loadAll(){try{const e=localStorage.getItem(this.STORAGE_KEY);return e?JSON.parse(e):{}}catch{return{}}}static save(e,t){const s=this.loadAll();s[e]=t;const n=Object.keys(s).sort();for(;n.length>this.MAX_DAYS;)delete s[n.shift()];localStorage.setItem(this.STORAGE_KEY,JSON.stringify(s))}static get(e){return this.loadAll()[e]||null}static saveToday(e){this._lastStats={...e},this.save(this.dateKey(),e)}static flushOnUnload(){this._lastStats&&this.save(this.dateKey(),this._lastStats)}static async computeFromEntries(e,t,s){let n=0,i=0,r=0;for(const c of e){const l=c.file;try{const f=(await t.vault.cachedRead(l)).replace(/^---[\s\S]*?---\s*/,"");n+=f.replace(/\s/g,"").length;const h=(f.match(/[\u4e00-\u9fff]/g)||[]).length,p=f.replace(/[\u4e00-\u9fff]/g," ").split(/\s+/).filter(y=>y.length>0).length;i+=h+p}catch{}(l.path.startsWith(s+"/")||l.path===s)&&r++}const a=Math.round(n/60),o=await this.countInspirations(t);return{noteTimeMinutes:a,writingWords:i,literatureNotes:r,inspirations:o,timestamp:Date.now()}}static async computeAndSaveToday(e,t){const s=new Date,n=new Date(s.getFullYear(),s.getMonth(),s.getDate()).getTime(),i=e.vault.getMarkdownFiles();let r=0,a=0,o=0;for(const d of i)if(!(d.stat.mtimev.length>0).length;a+=g+y}catch{}(d.path.startsWith(t+"/")||d.path===t)&&o++}const c=Math.round(r/60),l=await this.countInspirations(e);this.saveToday({noteTimeMinutes:c,writingWords:a,literatureNotes:o,inspirations:l,timestamp:Date.now()})}static hasCachedWeekData(){const e=this.loadAll(),t=new Date,s=t.getDay(),n=s===0?6:s-1,i=new Date(t);i.setDate(t.getDate()-n-7),i.setHours(0,0,0,0);for(let r=0;r<14;r++){const a=new Date(i);if(a.setDate(i.getDate()+r),e[this.dateKey(a)])return!0}return!1}static getWeeklyComparison(){const e=this.loadAll(),t=new Date,s=t.getDay(),n=s===0?6:s-1,i=new Date(t);i.setDate(t.getDate()-n),i.setHours(0,0,0,0);const r=new Date(i);r.setDate(i.getDate()-7);let a=0,o=0,c=0;const l=n+1;for(let g=0;g0?100:0:Math.min(Math.round(u/e*100),100)}function ys(u,e){if(e===0)return u>0?"+100%":"+0%";const t=Math.round((u-e)/e*100);return t>=0?`+${t}%`:`${t}%`}class io extends w.BasesView{constructor(e,t){super(e),this.type="ppb-today-stats",this.containerEl=t}onDataUpdated(){this.render()}async render(){this.containerEl.empty(),this.containerEl.addClass("ppb-today-left");const e=this.data?.data??[],t=this.app.plugins?.plugins?.paperbell,s=t?.settings?.componentDataSources?.recentLiterature?.literatureFolderPath||"Inputs/Zotero",n=await Ct.computeFromEntries(e,this.app,s);Ct.saveToday(n);const i=n.noteTimeMinutes>=60?`${Math.floor(n.noteTimeMinutes/60)}h${n.noteTimeMinutes%60>0?n.noteTimeMinutes%60+"m":""}`:`${n.noteTimeMinutes}m`,r=n.writingWords>=1e3?`${(n.writingWords/1e3).toFixed(1)}k`:String(n.writingWords),a=t?.settings?.componentDataSources?.todayFocus?.displayName||"Today Focus",o=[{label:"Note time",value:i,icon:"clock",bgColor:"#B0D2EC",textColor:"#648EC0"},{label:"Writing words",value:r,icon:"edit",bgColor:"#B5ACA3",textColor:"#533A33"},{label:"Literature notes",value:String(n.literatureNotes),icon:"book-open",bgColor:"#849DBB",textColor:"#533A33"},{label:"Inspirations",value:String(n.inspirations),icon:"lightbulb",bgColor:"#533A33",textColor:"#B0D2EC"}];this.containerEl.createEl("h3",{text:a,cls:"ppb-today-card-title"});const c=this.containerEl.createDiv({cls:"ppb-today-stats"});for(const l of o){const d=c.createDiv({cls:"ppb-today-stat-row"}),f=d.createDiv({cls:"ppb-today-stat-lhs"}),h=f.createDiv({cls:"ppb-today-stat-icon"});h.style.backgroundColor=l.bgColor;const g=h.createSpan();w.setIcon(g,l.icon),g.style.color=l.textColor,f.createEl("span",{text:l.label,cls:"ppb-today-stat-label"}),d.createEl("span",{text:l.value,cls:"ppb-today-stat-value"})}}}class ro extends w.BasesView{constructor(e,t){super(e),this.type="ppb-weekly-performance",this.focusBtnEl=null,this.pomodoroUnsub=null,this.containerEl=t,this.pomodoroUnsub=ut.subscribe(s=>s.pomodoroState,s=>this.updateFocusButton(s.isRunning))}onDataUpdated(){this.render()}async render(){this.containerEl.empty(),this.containerEl.addClass("ppb-today-right");const t=this.app.plugins?.plugins?.paperbell?.settings?.componentDataSources?.recentLiterature?.literatureFolderPath||"Inputs/Zotero",s=this.data?.data??[],n=await Ct.computeFromEntries(s,this.app,t);Ct.saveToday(n);const i=Ct.hasCachedWeekData()?Ct.getWeeklyComparison():await this.computeWeeklyProgressFromVault(t),r=this.containerEl.createDiv({cls:"ppb-today-ticket-head"});r.createEl("div",{text:"PaperBell",cls:"ppb-today-ticket-brand"}),r.createEl("div",{text:"Research to be connected",cls:"ppb-today-ticket-sub"}),r.createEl("span",{text:"Weekly performance",cls:"ppb-today-ticket-badge"});const a=[{label:"Writing words",pct:i.writingProgress,text:i.writingText,colorVar:"var(--interactive-accent)"},{label:"Note time",pct:i.noteTimeProgress,text:i.noteTimeText,colorVar:"var(--text-muted)"},{label:"Literature notes",pct:i.literatureProgress,text:i.literatureText,colorVar:"var(--text-normal)"}],o=this.containerEl.createDiv({cls:"ppb-today-bars"});for(const f of a){const h=o.createDiv({cls:"ppb-today-bar-group"}),g=h.createDiv({cls:"ppb-today-bar-header"});g.createEl("span",{text:f.label});const p=g.createEl("span",{text:f.text,cls:"ppb-today-bar-pct"});p.style.color=f.colorVar;const v=h.createDiv({cls:"ppb-today-bar-track"}).createDiv({cls:"ppb-today-bar-fill"});v.style.width=`${Math.min(Math.max(f.pct,0),100)}%`,v.style.backgroundColor=f.colorVar}this.containerEl.createDiv({cls:"ppb-today-divider"});const c=this.containerEl.createDiv({cls:"ppb-today-focus-btn-wrap"});this.focusBtnEl=c.createEl("button",{cls:"ppb-today-focus-btn"});const l=this.focusBtnEl.createSpan();w.setIcon(l,"focus");const d=ut.getState().pomodoroState.isRunning;this.focusBtnEl.createEl("span",{text:d?"Focus in progress...":"Start focus now"}),d&&(this.focusBtnEl.disabled=!0),this.focusBtnEl.addEventListener("click",()=>{ut.getState().startPomodoro()})}async computeWeeklyProgressFromVault(e){const t=new Date,s=t.getDay(),n=s===0?6:s-1,i=new Date(t);i.setDate(t.getDate()-n),i.setHours(0,0,0,0);const r=new Date(i);r.setDate(i.getDate()-7);const a=this.app.vault.getMarkdownFiles();let o=0,c=0,l=0,d=0,f=0,h=0;for(const y of a){const v=y.stat.mtime,E=v>=i.getTime(),x=v>=r.getTime()&&vP.length>0).length,q=F+B,tt=y.path.startsWith(e+"/")||y.path===e;E?(o+=q,c+=R,tt&&l++):x&&(d+=q,f+=R,tt&&h++)}catch{}}const g=(y,v)=>v===0?y>0?100:0:Math.min(Math.round(y/v*100),100),p=(y,v)=>{if(v===0)return y>0?"+100%":"+0%";const E=Math.round((y-v)/v*100);return E>=0?`+${E}%`:`${E}%`};return{writingProgress:g(o,d),writingText:p(o,d),noteTimeProgress:g(c,f),noteTimeText:p(c,f),literatureProgress:g(l,h),literatureText:p(l,h)}}updateFocusButton(e){if(!this.focusBtnEl)return;const t=this.focusBtnEl.querySelector("span:last-child");t&&(t.textContent=e?"Focus in progress...":"Start focus now"),this.focusBtnEl.disabled=e}onunload(){this.pomodoroUnsub&&(this.pomodoroUnsub(),this.pomodoroUnsub=null)}}const nt=Ii()(Ai(Fi((u,e)=>({runs:[],outputMap:{},selectedRunId:null,outputPanelVisible:!1,autoScroll:!0,searchQuery:"",lineWrap:!0,showTimestamps:!1,addRun:t=>{const{outputLines:s,...n}=t;u(i=>({runs:[n,...i.runs].slice(0,50),outputMap:{...i.outputMap,[t.id]:s},selectedRunId:t.id,outputPanelVisible:!0}))},updateRun:(t,s)=>{const{runs:n}=e(),i=n.findIndex(a=>a.id===t);if(i===-1)return;const r=[...n];r[i]={...r[i],...s},u({runs:r})},appendOutput:(t,s,n,i)=>{const r=n.split(` +`).filter(a=>a.length>0).map(a=>({timestamp:Date.now(),stream:s,text:a}));r.length!==0&&u(a=>{const c=[...a.outputMap[t]??[],...r];return{outputMap:{...a.outputMap,[t]:c.length>i?c.slice(-i):c}}})},selectRun:t=>u({selectedRunId:t}),setOutputPanelVisible:t=>u({outputPanelVisible:t}),setAutoScroll:t=>u({autoScroll:t}),setSearchQuery:t=>u({searchQuery:t}),setLineWrap:t=>u({lineWrap:t}),setShowTimestamps:t=>u({showTimestamps:t}),clearHistory:()=>u({runs:[],outputMap:{},selectedRunId:null}),removeRun:t=>{const{runs:s,outputMap:n,selectedRunId:i}=e(),{[t]:r,...a}=n;u({runs:s.filter(o=>o.id!==t),outputMap:a,selectedRunId:i===t?null:i})},loadRuns:t=>u({runs:t,selectedRunId:t.length>0?t[0].id:null})})),{name:"agent-store"}));function di(u){return nt.getState().runs.filter(e=>e.ruleId===u&&e.status==="running").length}function hi(){return nt.getState().runs.filter(u=>u.status==="running").length}function Ss(){const u=window.require||globalThis.require||void 0;if(typeof u!="function")throw new Error("Node require() is not available in this environment");try{return u("node:child_process")}catch{return u("child_process")}}function ao(){const u=window.require||globalThis.require||void 0;if(typeof u!="function")throw new Error("Node require() is not available in this environment");try{return u("node:path")}catch{return u("path")}}class oo extends w.Component{constructor(e){super(),this.activeProcesses=new Map,this.runQueue=[],this.timeouts=new Map,this.confirmationTimers=new Map,this.streamBuffers=new Map,this.persistedRunIds=new Set,this.unsubscribeStore=null,this.writeQueue=Promise.resolve(),this.onRunStarted=null,this.plugin=e}getSettings(){return this.plugin.settings.agentAutoExec??{enabled:!1,rules:[],binaryPaths:{},globalMaxConcurrent:2,showNoticeOnTrigger:!0,maxOutputLinesPerRun:5e3,maxHistoryRuns:50}}getVaultPath(){return this.plugin.app.vault.adapter.basePath||""}async executeRule(e,t,s){const n=crypto.randomUUID(),i={id:n,ruleId:e.id,ruleName:e.name||"Unnamed Rule",agentType:e.agentType,status:e.requireConfirmation?"pending_confirmation":"queued",triggerFile:t,triggerEvent:s,startedAt:null,completedAt:null,outputLines:[],exitCode:null,error:null,pid:null};return nt.getState().addRun(i),this.onRunStarted?.(),e.requireConfirmation?(this.showConfirmationNotice(i,e),n):this.shouldQueue(e)?(this.runQueue.push({run:i,rule:e}),n):(await this.spawnProcess(i,e),n)}async executeAdHoc(e,t){const s=crypto.randomUUID(),n={id:s,ruleId:"__adhoc__",ruleName:"对话",agentType:e,status:"queued",triggerFile:"(用户输入)",triggerEvent:"create",startedAt:null,completedAt:null,outputLines:[],exitCode:null,error:null,pid:null};nt.getState().addRun(n),this.onRunStarted?.();const i={id:"__adhoc__",enabled:!0,name:"对话",watchPaths:[],triggerEvents:["create"],agentType:e,customBinaryPath:"",promptTemplate:t,workingDirectory:"",extraArgs:[],debounceMs:0,timeoutMs:0,maxConcurrent:0,requireConfirmation:!1,confirmationTimeoutMs:0,allowedTools:["Edit","Write","Read"]};return await this.spawnProcess(n,i),s}showConfirmationNotice(e,t){const s=document.createDocumentFragment();s.createEl("div",{text:`AI Agent「${t.name||"未命名规则"}」请求执行`}).createEl("div",{text:`触发: ${e.triggerEvent} ${e.triggerFile}`,cls:"agent-confirm-detail"});const i=s.createEl("div",{cls:"agent-confirm-buttons"}),r=i.createEl("button",{text:"允许执行",cls:"mod-cta"}),a=i.createEl("button",{text:"拒绝"}),o=t.confirmationTimeoutMs||3e4,c=new w.Notice(s,o),l=()=>{const f=this.confirmationTimers.get(e.id);f!==void 0&&window.clearTimeout(f),this.confirmationTimers.delete(e.id)};r.addEventListener("click",()=>{c.hide(),l(),nt.getState().updateRun(e.id,{status:"queued"}),this.shouldQueue(t)?this.runQueue.push({run:e,rule:t}):this.spawnProcess(e,t)}),a.addEventListener("click",()=>{c.hide(),l(),nt.getState().updateRun(e.id,{status:"cancelled",completedAt:Date.now(),error:"用户拒绝执行"})});const d=window.setTimeout(()=>{this.confirmationTimers.delete(e.id),nt.getState().runs.find(h=>h.id===e.id)?.status==="pending_confirmation"&&nt.getState().updateRun(e.id,{status:"cancelled",completedAt:Date.now(),error:`确认超时 (${o/1e3}s)`})},o);this.confirmationTimers.set(e.id,d)}shouldQueue(e){const t=this.getSettings();return t.globalMaxConcurrent>0&&hi()>=t.globalMaxConcurrent||e.maxConcurrent>0&&di(e.id)>=e.maxConcurrent}async spawnProcess(e,t){const s=this.getSettings(),n=nt.getState(),i=t.customBinaryPath||s.binaryPaths[t.agentType],r=Cs(t.agentType,i);if(!r.found){n.updateRun(e.id,{status:"failed",error:r.error||"Binary not found",completedAt:Date.now()}),new w.Notice(`AI Agent 执行失败: ${r.error||"找不到 CLI"}`),this.processQueue();return}const a=Ss(),o=ao(),c=this.interpolatePrompt(t.promptTemplate,e),l=this.buildArgs(t.agentType,t.extraArgs,t.allowedTools),d=this.getVaultPath(),f=t.workingDirectory?o.resolve(d,t.workingDirectory):d;try{const h=a.spawn(r.path,l,{cwd:f,stdio:["pipe","pipe","pipe"],env:{...process.env},shell:process.platform==="win32"});if(h.stdin?.write(c),h.stdin?.end(),e.pid=h.pid??null,n.updateRun(e.id,{status:"running",pid:e.pid,startedAt:Date.now()}),this.activeProcesses.set(e.id,h),nt.getState().appendOutput(e.id,"stdout",`▶ Prompt ━━━━━━━━━━━━━━━━━━━━━━━━━━━ +${c} +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`,s.maxOutputLinesPerRun),h.stdout?.on("data",g=>{const p=g.toString("utf-8");this.handleStreamChunk(e.id,t.agentType,p,s.maxOutputLinesPerRun)}),h.stderr?.on("data",g=>{const p=g.toString("utf-8");nt.getState().appendOutput(e.id,"stderr",p,s.maxOutputLinesPerRun)}),h.on("close",g=>{this.flushStreamBuffer(e.id,s.maxOutputLinesPerRun),this.activeProcesses.delete(e.id),this.clearTimeout(e.id),nt.getState().updateRun(e.id,{status:g===0?"completed":"failed",exitCode:g,completedAt:Date.now()}),this.processQueue()}),h.on("error",g=>{this.activeProcesses.delete(e.id),this.clearTimeout(e.id),nt.getState().updateRun(e.id,{status:"failed",error:g.message,completedAt:Date.now()}),this.processQueue()}),t.timeoutMs>0){const g=window.setTimeout(()=>{this.activeProcesses.has(e.id)&&(this.cancelRun(e.id),nt.getState().appendOutput(e.id,"stderr",`[超时] 进程在 ${t.timeoutMs}ms 后被终止`,s.maxOutputLinesPerRun))},t.timeoutMs);this.timeouts.set(e.id,g)}}catch(h){n.updateRun(e.id,{status:"failed",error:h.message||"Failed to spawn process",completedAt:Date.now()}),this.processQueue()}}buildArgs(e,t,s){switch(e){case"claude-code":{const n=["--print","--verbose","--output-format","stream-json"];if(s&&s.length>0)for(const i of s)n.push("--allowedTools",i);return n.push(...t),n}case"openai-codex":return["exec","--full-auto","--skip-git-repo-check","--json",...t];case"gemini-cli":return["--output-format","stream-json",...t];default:return[...t]}}extractStreamText(e,t){switch(e){case"claude-code":return t?.type==="stream_event"?this.extractStreamText(e,t.event):t?.type==="content_block_delta"&&t?.delta?.type==="text_delta"?t.delta.text??null:t?.type==="result"&&typeof t?.result=="string"?t.result:null;case"openai-codex":return t?.type==="message"&&typeof t?.content=="string"?t.content:typeof t?.text=="string"?t.text:null;case"gemini-cli":return(t?.type==="message"||t?.type==="result")&&typeof t?.content=="string"?t.content:t?.type==="tool_use"&&t?.name?`[tool] ${t.name}(${JSON.stringify(t.input??{})})`:t?.type==="tool_result"&&typeof t?.output=="string"?`[tool result] ${t.output.slice(0,200)}`:null;default:return typeof t?.text=="string"?t.text:typeof t?.content=="string"?t.content:null}}handleStreamChunk(e,t,s,n){let i=this.streamBuffers.get(e);i||(i={ndjsonPartial:""},this.streamBuffers.set(e,i));const a=(i.ndjsonPartial+s).split(` +`);i.ndjsonPartial=a.pop()??"";for(const o of a){const c=o.trim();if(!c)continue;let l;try{l=JSON.parse(c)}catch{nt.getState().appendOutput(e,"stdout",c,n);continue}const d=this.extractStreamText(t,l);d!==null&&nt.getState().appendOutput(e,"stdout",d,n)}}flushStreamBuffer(e,t){const s=this.streamBuffers.get(e);if(!s)return;const n=s.ndjsonPartial.trim();if(n)try{const i=JSON.parse(n),r=nt.getState().runs.find(o=>o.id===e)?.agentType??"claude-code",a=this.extractStreamText(r,i);a&&nt.getState().appendOutput(e,"stdout",a,t)}catch{n&&nt.getState().appendOutput(e,"stdout",n,t)}this.streamBuffers.delete(e)}interpolatePrompt(e,t){const s={"{{filePath}}":t.triggerFile,"{{fileName}}":t.triggerFile.split("/").pop()||"","{{eventType}}":t.triggerEvent,"{{vaultPath}}":this.getVaultPath(),"{{timestamp}}":new Date().toISOString()};let n=e;for(const[i,r]of Object.entries(s))n=n.replaceAll(i,r);return n}cancelRun(e){const t=this.activeProcesses.get(e);if(t){if(process.platform==="win32"&&t.pid)try{Ss().exec(`taskkill /pid ${t.pid} /T /F`)}catch{}else t.kill("SIGTERM"),window.setTimeout(()=>{this.activeProcesses.has(e)&&t.kill("SIGKILL")},5e3);this.flushStreamBuffer(e,this.getSettings().maxOutputLinesPerRun),this.activeProcesses.delete(e),this.clearTimeout(e),nt.getState().updateRun(e,{status:"cancelled",completedAt:Date.now()}),this.processQueue()}}cancelAll(){for(const e of[...this.activeProcesses.keys()])this.cancelRun(e);for(const{run:e}of this.runQueue)nt.getState().updateRun(e.id,{status:"cancelled",completedAt:Date.now()});this.runQueue=[];for(const[e,t]of this.confirmationTimers)window.clearTimeout(t),nt.getState().updateRun(e,{status:"cancelled",completedAt:Date.now(),error:"已取消"});this.confirmationTimers.clear()}processQueue(){if(this.runQueue.length===0)return;const e=this.getSettings(),t=this.runQueue.findIndex(({rule:n})=>!(e.globalMaxConcurrent>0&&hi()>=e.globalMaxConcurrent||n.maxConcurrent>0&&di(n.id)>=n.maxConcurrent));if(t===-1)return;const[s]=this.runQueue.splice(t,1);this.spawnProcess(s.run,s.rule)}clearTimeout(e){const t=this.timeouts.get(e);t!==void 0&&(window.clearTimeout(t),this.timeouts.delete(e))}async debugRun(e,t){const s=`[AgentDebug:${e}]`,n=this.getSettings();console.group(`${s} Starting debug run`);const i=n.binaryPaths[e],r=Cs(e,i);if(!r.found){console.error(`${s} Binary not found: ${r.error}`),new w.Notice(`Debug: ${e} CLI 未找到 — ${r.error}`),console.groupEnd();return}const a=this.buildArgs(e,[]),o=this.getVaultPath(),c=Ss();let l;try{l=c.spawn(r.path,a,{cwd:o,stdio:["pipe","pipe","pipe"],env:{...process.env},shell:process.platform==="win32"}),l.stdin?.write(t),l.stdin?.end()}catch(h){console.error(`${s} Spawn failed:`,h),new w.Notice(`Debug: spawn 失败 — ${h.message}`),console.groupEnd();return}new w.Notice(`Debug: ${e} 已启动 (PID ${l.pid}),输出见 DevTools Console`);const d=crypto.randomUUID(),f={id:d,ruleId:"__debug__",ruleName:`[Debug] ${e}`,agentType:e,status:"running",triggerFile:"(debug)",triggerEvent:"create",startedAt:Date.now(),completedAt:null,outputLines:[],exitCode:null,error:null,pid:l.pid??null};nt.getState().addRun(f),this.onRunStarted?.(),this.activeProcesses.set(d,l),l.stdout?.on("data",h=>{const g=h.toString("utf-8");this.handleStreamChunk(d,e,g,n.maxOutputLinesPerRun)}),l.stderr?.on("data",h=>{const g=h.toString("utf-8");console.warn(`${s} [stderr]`,g),nt.getState().appendOutput(d,"stderr",g,n.maxOutputLinesPerRun)}),l.on("close",h=>{this.flushStreamBuffer(d,n.maxOutputLinesPerRun),this.activeProcesses.delete(d);const g=h===0?"completed":"failed";console.groupEnd(),nt.getState().updateRun(d,{status:g,exitCode:h,completedAt:Date.now()}),new w.Notice(`Debug: ${e} 已退出 (code ${h})`)}),l.on("error",h=>{this.activeProcesses.delete(d),console.error(`${s} Process error:`,h),console.groupEnd(),nt.getState().updateRun(d,{status:"failed",error:h.message,completedAt:Date.now()}),new w.Notice(`Debug: ${e} 错误 — ${h.message}`)})}get historyFilePath(){return w.normalizePath(`${this.plugin.manifest.dir}/agent-runs.jsonl`)}isTerminal(e){return e==="completed"||e==="failed"||e==="cancelled"}async initPersistence(){await this.loadRunHistory(),this.setupPersistenceSubscription()}setupPersistenceSubscription(){this.unsubscribeStore=nt.subscribe(e=>e.runs,(e,t)=>{for(const i of e)this.isTerminal(i.status)&&!this.persistedRunIds.has(i.id)&&(this.persistedRunIds.add(i.id),this.enqueueWrite(()=>this.appendRunToFile(i)));if(e.length===0&&t.length>0){this.persistedRunIds.clear(),this.enqueueWrite(()=>this.clearHistoryFile());return}const s=new Set(e.map(i=>i.id));let n=!1;for(const i of this.persistedRunIds)s.has(i)||(this.persistedRunIds.delete(i),n=!0);n&&this.enqueueWrite(()=>this.rewriteHistoryFile())})}async loadRunHistory(){const e=this.plugin.app.vault.adapter,t=this.historyFilePath;if(await e.exists(t))try{const n=(await e.read(t)).split(` +`).filter(l=>l.trim()),i=this.getSettings().maxHistoryRuns,r=[];for(const l of n)try{r.push(JSON.parse(l))}catch{}const a=r.slice(-i);for(const l of a)this.persistedRunIds.add(l.id);r.length>i&&this.enqueueWrite(()=>this.rewriteHistoryFromPersisted(a));const o=[],c={};for(const l of a){const{outputLines:d,...f}=l;o.push(f),d&&d.length>0&&(c[f.id]=d)}nt.getState().loadRuns(o.reverse()),Object.keys(c).length>0&&nt.setState(l=>({outputMap:{...l.outputMap,...c}}))}catch(s){console.error("[AgentExecutor] Failed to load run history:",s)}}enqueueWrite(e){this.writeQueue=this.writeQueue.then(e).catch(t=>{console.error("[AgentExecutor] History write error:",t)})}async appendRunToFile(e){const t=this.plugin.app.vault.adapter,s=this.historyFilePath,n=nt.getState().outputMap[e.id]??[],i={...e,outputLines:n},r=JSON.stringify(i)+` +`;await t.exists(s)?await t.append(s,r):await t.write(s,r)}async clearHistoryFile(){const e=this.plugin.app.vault.adapter,t=this.historyFilePath;await e.exists(t)&&await e.write(t,"")}async rewriteHistoryFile(){const e=nt.getState(),s=[...e.runs.filter(n=>this.isTerminal(n.status))].reverse().map(n=>({...n,outputLines:e.outputMap[n.id]??[]}));await this.rewriteHistoryFromPersisted(s)}async rewriteHistoryFromPersisted(e){const t=this.plugin.app.vault.adapter,s=e.length>0?e.map(n=>JSON.stringify(n)).join(` `)+` -`:"";await r.write(this.historyFilePath,i)}onunload(){this.unsubscribeStore&&(this.unsubscribeStore(),this.unsubscribeStore=null),this.cancelAll();for(const a of this.timeouts.values())window.clearTimeout(a);this.timeouts.clear();for(const a of this.confirmationTimers.values())window.clearTimeout(a);this.confirmationTimers.clear(),this.streamBuffers.clear()}}class Xy extends _.Component{constructor(a,r){super(),this.debouncers=new Map,this.plugin=a,this.executor=r}getSettings(){return this.plugin.settings.agentAutoExec??{enabled:!1,rules:[],binaryPaths:{},globalMaxConcurrent:2,showNoticeOnTrigger:!0,maxOutputLinesPerRun:5e3,maxHistoryRuns:50}}onload(){this.registerEvent(this.plugin.app.vault.on("create",a=>{a instanceof _.TFile&&this.handleEvent("create",a)})),this.registerEvent(this.plugin.app.vault.on("modify",a=>{a instanceof _.TFile&&this.handleEvent("modify",a)})),this.registerEvent(this.plugin.app.vault.on("delete",a=>{a instanceof _.TFile&&this.handleEvent("delete",a)})),this.registerEvent(this.plugin.app.vault.on("rename",a=>{a instanceof _.TFile&&this.handleEvent("rename",a)}))}handleEvent(a,r){const i=this.getSettings();if(console.debug("[FileWatcher] event=%s file=%s enabled=%s rules=%d",a,r.path,i.enabled,i.rules.length),!i.enabled)return;const o=i.rules.filter(l=>l.enabled&&l.triggerEvents.includes(a)&&this.pathMatchesRule(r.path,l.watchPaths));o.length===0&&console.debug("[FileWatcher] no matching rules for %s %s. Rule details: %o",a,r.path,i.rules.map(l=>({name:l.name,enabled:l.enabled,events:l.triggerEvents,paths:l.watchPaths})));for(const l of o)console.debug("[FileWatcher] matched rule=%s, debounce=%dms",l.name,l.debounceMs),this.debouncedExecute(l,r.path,a)}pathMatchesRule(a,r){return r.length===0?!0:r.some(i=>{const o=i.replace(/\/$/,"");return a.startsWith(o+"/")||a===o})}debouncedExecute(a,r,i){const o=`${a.id}:${r}`;let l=this.debouncers.get(o);l||(l=_.debounce(()=>{this.debouncers.delete(o),this.getSettings().showNoticeOnTrigger&&new _.Notice(`AI Agent 触发: ${a.name||"未命名规则"} (${i} ${r})`),this.executor.executeRule(a,r,i)},a.debounceMs,!0),this.debouncers.set(o,l)),l()}onunload(){for(const a of this.debouncers.values())a.cancel();this.debouncers.clear()}}var Su={exports:{}},di={},xm;function Jy(){if(xm)return di;xm=1;var f=Symbol.for("react.transitional.element"),a=Symbol.for("react.fragment");function r(i,o,l){var c=null;if(l!==void 0&&(c=""+l),o.key!==void 0&&(c=""+o.key),"key"in o){l={};for(var u in o)u!=="key"&&(l[u]=o[u])}else l=o;return o=l.ref,{$$typeof:f,type:i,key:c,ref:o!==void 0?o:null,props:l}}return di.Fragment=a,di.jsx=r,di.jsxs=r,di}var Sm;function ek(){return Sm||(Sm=1,Su.exports=Jy()),Su.exports}var ke=ek(),Eu={exports:{}},fi={},Cu={exports:{}},_u={},Em;function tk(){return Em||(Em=1,(function(f){function a(U,j){var se=U.length;U.push(j);e:for(;0>>1,ue=U[Y];if(0>>1;Yo(ee,se))aeo(ne,ee)?(U[Y]=ne,U[ae]=se,Y=ae):(U[Y]=ee,U[L]=se,Y=L);else if(aeo(ne,se))U[Y]=ne,U[ae]=se,Y=ae;else break e}}return j}function o(U,j){var se=U.sortIndex-j.sortIndex;return se!==0?se:U.id-j.id}if(f.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var l=performance;f.unstable_now=function(){return l.now()}}else{var c=Date,u=c.now();f.unstable_now=function(){return c.now()-u}}var d=[],h=[],m=1,b=null,k=3,v=!1,y=!1,w=!1,D=!1,E=typeof setTimeout=="function"?setTimeout:null,T=typeof clearTimeout=="function"?clearTimeout:null,A=typeof setImmediate<"u"?setImmediate:null;function z(U){for(var j=r(h);j!==null;){if(j.callback===null)i(h);else if(j.startTime<=U)i(h),j.sortIndex=j.expirationTime,a(d,j);else break;j=r(h)}}function R(U){if(w=!1,z(U),!y)if(r(d)!==null)y=!0,q||(q=!0,M());else{var j=r(h);j!==null&&W(R,j.startTime-U)}}var q=!1,V=-1,K=5,Q=-1;function he(){return D?!0:!(f.unstable_now()-QU&&he());){var Y=b.callback;if(typeof Y=="function"){b.callback=null,k=b.priorityLevel;var ue=Y(b.expirationTime<=U);if(U=f.unstable_now(),typeof ue=="function"){b.callback=ue,z(U),j=!0;break t}b===r(d)&&i(d),z(U)}else i(d);b=r(d)}if(b!==null)j=!0;else{var P=r(h);P!==null&&W(R,P.startTime-U),j=!1}}break e}finally{b=null,k=se,v=!1}j=void 0}}finally{j?M():q=!1}}}var M;if(typeof A=="function")M=function(){A(ve)};else if(typeof MessageChannel<"u"){var le=new MessageChannel,x=le.port2;le.port1.onmessage=ve,M=function(){x.postMessage(null)}}else M=function(){E(ve,0)};function W(U,j){V=E(function(){U(f.unstable_now())},j)}f.unstable_IdlePriority=5,f.unstable_ImmediatePriority=1,f.unstable_LowPriority=4,f.unstable_NormalPriority=3,f.unstable_Profiling=null,f.unstable_UserBlockingPriority=2,f.unstable_cancelCallback=function(U){U.callback=null},f.unstable_forceFrameRate=function(U){0>U||125Y?(U.sortIndex=se,a(h,U),r(d)===null&&U===r(h)&&(w?(T(V),V=-1):w=!0,W(R,se-Y))):(U.sortIndex=ue,a(d,U),y||v||(y=!0,q||(q=!0,M()))),U},f.unstable_shouldYield=he,f.unstable_wrapCallback=function(U){var j=k;return function(){var se=k;k=j;try{return U.apply(this,arguments)}finally{k=se}}}})(_u)),_u}var Cm;function rk(){return Cm||(Cm=1,Cu.exports=tk()),Cu.exports}var Du={exports:{}},Tt={},_m;function ak(){if(_m)return Tt;_m=1;var f=tp();function a(d){var h="https://react.dev/errors/"+d;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(f)}catch(a){console.error(a)}}return f(),Du.exports=ak(),Du.exports}var Pm;function nk(){if(Pm)return fi;Pm=1;var f=rk(),a=tp(),r=nb();function i(e){var t="https://react.dev/errors/"+e;if(1ue||(e.current=Y[ue],Y[ue]=null,ue--)}function ee(e,t){ue++,Y[ue]=e.current,e.current=t}var ae=P(null),ne=P(null),we=P(null),Ne=P(null);function _e(e,t){switch(ee(we,t),ee(ne,e),ee(ae,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Eh(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Eh(t),e=Ch(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}L(ae),ee(ae,e)}function Ce(){L(ae),L(ne),L(we)}function Je(e){e.memoizedState!==null&&ee(Ne,e);var t=ae.current,n=Ch(t,e.type);t!==n&&(ee(ne,e),ee(ae,n))}function qe(e){ne.current===e&&(L(ae),L(ne)),Ne.current===e&&(L(Ne),oi._currentValue=se)}var kt,xt;function C(e){if(kt===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);kt=t&&t[1]||"",xt=-1)":-1p||B[s]!==J[p]){var ce=` -`+B[s].replace(" at new "," at ");return e.displayName&&ce.includes("")&&(ce=ce.replace("",e.displayName)),ce}while(1<=s&&0<=p);break}}}finally{pe=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?C(n):""}function N(e,t){switch(e.tag){case 26:case 27:case 5:return C(e.type);case 16:return C("Lazy");case 13:return e.child!==t&&t!==null?C("Suspense Fallback"):C("Suspense");case 19:return C("SuspenseList");case 0:case 15:return O(e.type,!1);case 11:return O(e.type.render,!1);case 1:return O(e.type,!0);case 31:return C("Activity");default:return""}}function F(e){try{var t="",n=null;do t+=N(e,n),n=e,e=e.return;while(e);return t}catch(s){return` -Error generating stack: `+s.message+` -`+s.stack}}var $=Object.prototype.hasOwnProperty,te=f.unstable_scheduleCallback,ie=f.unstable_cancelCallback,Z=f.unstable_shouldYield,me=f.unstable_requestPaint,be=f.unstable_now,ge=f.unstable_getCurrentPriorityLevel,xe=f.unstable_ImmediatePriority,Re=f.unstable_UserBlockingPriority,Pe=f.unstable_NormalPriority,rt=f.unstable_LowPriority,vt=f.unstable_IdlePriority,tt=f.log,at=f.unstable_setDisableYieldValue,Ie=null,lt=null;function Pt(e){if(typeof tt=="function"&&at(e),lt&&typeof lt.setStrictMode=="function")try{lt.setStrictMode(Ie,e)}catch{}}var ot=Math.clz32?Math.clz32:co,Si=Math.log,lo=Math.LN2;function co(e){return e>>>=0,e===0?32:31-(Si(e)/lo|0)|0}var Ia=256,da=262144,ur=4194304;function Zt(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Ei(e,t,n){var s=e.pendingLanes;if(s===0)return 0;var p=0,g=e.suspendedLanes,S=e.pingedLanes;e=e.warmLanes;var I=s&134217727;return I!==0?(s=I&~g,s!==0?p=Zt(s):(S&=I,S!==0?p=Zt(S):n||(n=I&~e,n!==0&&(p=Zt(n))))):(I=s&~g,I!==0?p=Zt(I):S!==0?p=Zt(S):n||(n=s&~e,n!==0&&(p=Zt(n)))),p===0?0:t!==0&&t!==p&&(t&g)===0&&(g=p&-p,n=t&-t,g>=n||g===32&&(n&4194048)!==0)?t:p}function yn(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function ob(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function np(){var e=ur;return ur<<=1,(ur&62914560)===0&&(ur=4194304),e}function uo(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function kn(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function lb(e,t,n,s,p,g){var S=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var I=e.entanglements,B=e.expirationTimes,J=e.hiddenUpdates;for(n=S&~n;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var hb=/[\n"\\]/g;function Kt(e){return e.replace(hb,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function bo(e,t,n,s,p,g,S,I){e.name="",S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"?e.type=S:e.removeAttribute("type"),t!=null?S==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Yt(t)):e.value!==""+Yt(t)&&(e.value=""+Yt(t)):S!=="submit"&&S!=="reset"||e.removeAttribute("value"),t!=null?vo(e,S,Yt(t)):n!=null?vo(e,S,Yt(n)):s!=null&&e.removeAttribute("value"),p==null&&g!=null&&(e.defaultChecked=!!g),p!=null&&(e.checked=p&&typeof p!="function"&&typeof p!="symbol"),I!=null&&typeof I!="function"&&typeof I!="symbol"&&typeof I!="boolean"?e.name=""+Yt(I):e.removeAttribute("name")}function bp(e,t,n,s,p,g,S,I){if(g!=null&&typeof g!="function"&&typeof g!="symbol"&&typeof g!="boolean"&&(e.type=g),t!=null||n!=null){if(!(g!=="submit"&&g!=="reset"||t!=null)){mo(e);return}n=n!=null?""+Yt(n):"",t=t!=null?""+Yt(t):n,I||t===e.value||(e.value=t),e.defaultValue=t}s=s??p,s=typeof s!="function"&&typeof s!="symbol"&&!!s,e.checked=I?e.checked:!!s,e.defaultChecked=!!s,S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"&&(e.name=S),mo(e)}function vo(e,t,n){t==="number"&&Di(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function Oa(e,t,n,s){if(e=e.options,t){t={};for(var p=0;p"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),So=!1;if(yr)try{var Cn={};Object.defineProperty(Cn,"passive",{get:function(){So=!0}}),window.addEventListener("test",Cn,Cn),window.removeEventListener("test",Cn,Cn)}catch{So=!1}var Mr=null,Eo=null,Ti=null;function Ep(){if(Ti)return Ti;var e,t=Eo,n=t.length,s,p="value"in Mr?Mr.value:Mr.textContent,g=p.length;for(e=0;e=Pn),Np=" ",Ip=!1;function Ap(e,t){switch(e){case"keyup":return Ub.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Fp(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var ja=!1;function Wb(e,t){switch(e){case"compositionend":return Fp(t);case"keypress":return t.which!==32?null:(Ip=!0,Np);case"textInput":return e=t.data,e===Np&&Ip?null:e;default:return null}}function Hb(e,t){if(ja)return e==="compositionend"||!To&&Ap(e,t)?(e=Ep(),Ti=Eo=Mr=null,ja=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=s}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=jp(n)}}function Vp(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Vp(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Wp(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Di(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Di(e.document)}return t}function Ao(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var Jb=yr&&"documentMode"in document&&11>=document.documentMode,Ua=null,Fo=null,An=null,Lo=!1;function Hp(e,t,n){var s=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Lo||Ua==null||Ua!==Di(s)||(s=Ua,"selectionStart"in s&&Ao(s)?s={start:s.selectionStart,end:s.selectionEnd}:(s=(s.ownerDocument&&s.ownerDocument.defaultView||window).getSelection(),s={anchorNode:s.anchorNode,anchorOffset:s.anchorOffset,focusNode:s.focusNode,focusOffset:s.focusOffset}),An&&In(An,s)||(An=s,s=xs(Fo,"onSelect"),0>=S,p-=S,pr=1<<32-ot(t)+p|n<ze?(je=Se,Se=null):je=Se.sibling;var We=re(G,Se,X[ze],de);if(We===null){Se===null&&(Se=je);break}e&&Se&&We.alternate===null&&t(G,Se),H=g(We,H,ze),Ve===null?Ee=We:Ve.sibling=We,Ve=We,Se=je}if(ze===X.length)return n(G,Se),Ue&&xr(G,ze),Ee;if(Se===null){for(;zeze?(je=Se,Se=null):je=Se.sibling;var sa=re(G,Se,We.value,de);if(sa===null){Se===null&&(Se=je);break}e&&Se&&sa.alternate===null&&t(G,Se),H=g(sa,H,ze),Ve===null?Ee=sa:Ve.sibling=sa,Ve=sa,Se=je}if(We.done)return n(G,Se),Ue&&xr(G,ze),Ee;if(Se===null){for(;!We.done;ze++,We=X.next())We=fe(G,We.value,de),We!==null&&(H=g(We,H,ze),Ve===null?Ee=We:Ve.sibling=We,Ve=We);return Ue&&xr(G,ze),Ee}for(Se=s(Se);!We.done;ze++,We=X.next())We=oe(Se,G,ze,We.value,de),We!==null&&(e&&We.alternate!==null&&Se.delete(We.key===null?ze:We.key),H=g(We,H,ze),Ve===null?Ee=We:Ve.sibling=We,Ve=We);return e&&Se.forEach(function(ww){return t(G,ww)}),Ue&&xr(G,ze),Ee}function Qe(G,H,X,de){if(typeof X=="object"&&X!==null&&X.type===w&&X.key===null&&(X=X.props.children),typeof X=="object"&&X!==null){switch(X.$$typeof){case v:e:{for(var Ee=X.key;H!==null;){if(H.key===Ee){if(Ee=X.type,Ee===w){if(H.tag===7){n(G,H.sibling),de=p(H,X.props.children),de.return=G,G=de;break e}}else if(H.elementType===Ee||typeof Ee=="object"&&Ee!==null&&Ee.$$typeof===K&&Sa(Ee)===H.type){n(G,H.sibling),de=p(H,X.props),Mn(de,X),de.return=G,G=de;break e}n(G,H);break}else t(G,H);H=H.sibling}X.type===w?(de=va(X.props.children,G.mode,de,X.key),de.return=G,G=de):(de=$i(X.type,X.key,X.props,null,G.mode,de),Mn(de,X),de.return=G,G=de)}return S(G);case y:e:{for(Ee=X.key;H!==null;){if(H.key===Ee)if(H.tag===4&&H.stateNode.containerInfo===X.containerInfo&&H.stateNode.implementation===X.implementation){n(G,H.sibling),de=p(H,X.children||[]),de.return=G,G=de;break e}else{n(G,H);break}else t(G,H);H=H.sibling}de=jo(X,G.mode,de),de.return=G,G=de}return S(G);case K:return X=Sa(X),Qe(G,H,X,de)}if(W(X))return ye(G,H,X,de);if(M(X)){if(Ee=M(X),typeof Ee!="function")throw Error(i(150));return X=Ee.call(X),De(G,H,X,de)}if(typeof X.then=="function")return Qe(G,H,qi(X),de);if(X.$$typeof===A)return Qe(G,H,Ui(G,X),de);Gi(G,X)}return typeof X=="string"&&X!==""||typeof X=="number"||typeof X=="bigint"?(X=""+X,H!==null&&H.tag===6?(n(G,H.sibling),de=p(H,X),de.return=G,G=de):(n(G,H),de=Bo(X,G.mode,de),de.return=G,G=de),S(G)):n(G,H)}return function(G,H,X,de){try{On=0;var Ee=Qe(G,H,X,de);return Ja=null,Ee}catch(Se){if(Se===Xa||Se===Wi)throw Se;var Ve=jt(29,Se,null,G.mode);return Ve.lanes=de,Ve.return=G,Ve}}}var Ca=hd(!0),gd=hd(!1),Vr=!1;function Jo(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function el(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Wr(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Hr(e,t,n){var s=e.updateQueue;if(s===null)return null;if(s=s.shared,(He&2)!==0){var p=s.pending;return p===null?t.next=t:(t.next=p.next,p.next=t),s.pending=t,t=Mi(e),Xp(e,null,n),t}return Oi(e,s,t,n),Mi(e)}function $n(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194048)!==0)){var s=t.lanes;s&=e.pendingLanes,n|=s,t.lanes=n,sp(e,n)}}function tl(e,t){var n=e.updateQueue,s=e.alternate;if(s!==null&&(s=s.updateQueue,n===s)){var p=null,g=null;if(n=n.firstBaseUpdate,n!==null){do{var S={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};g===null?p=g=S:g=g.next=S,n=n.next}while(n!==null);g===null?p=g=t:g=g.next=t}else p=g=t;n={baseState:s.baseState,firstBaseUpdate:p,lastBaseUpdate:g,shared:s.shared,callbacks:s.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var rl=!1;function Bn(){if(rl){var e=Qa;if(e!==null)throw e}}function jn(e,t,n,s){rl=!1;var p=e.updateQueue;Vr=!1;var g=p.firstBaseUpdate,S=p.lastBaseUpdate,I=p.shared.pending;if(I!==null){p.shared.pending=null;var B=I,J=B.next;B.next=null,S===null?g=J:S.next=J,S=B;var ce=e.alternate;ce!==null&&(ce=ce.updateQueue,I=ce.lastBaseUpdate,I!==S&&(I===null?ce.firstBaseUpdate=J:I.next=J,ce.lastBaseUpdate=B))}if(g!==null){var fe=p.baseState;S=0,ce=J=B=null,I=g;do{var re=I.lane&-536870913,oe=re!==I.lane;if(oe?(Be&re)===re:(s&re)===re){re!==0&&re===Ka&&(rl=!0),ce!==null&&(ce=ce.next={lane:0,tag:I.tag,payload:I.payload,callback:null,next:null});e:{var ye=e,De=I;re=t;var Qe=n;switch(De.tag){case 1:if(ye=De.payload,typeof ye=="function"){fe=ye.call(Qe,fe,re);break e}fe=ye;break e;case 3:ye.flags=ye.flags&-65537|128;case 0:if(ye=De.payload,re=typeof ye=="function"?ye.call(Qe,fe,re):ye,re==null)break e;fe=b({},fe,re);break e;case 2:Vr=!0}}re=I.callback,re!==null&&(e.flags|=64,oe&&(e.flags|=8192),oe=p.callbacks,oe===null?p.callbacks=[re]:oe.push(re))}else oe={lane:re,tag:I.tag,payload:I.payload,callback:I.callback,next:null},ce===null?(J=ce=oe,B=fe):ce=ce.next=oe,S|=re;if(I=I.next,I===null){if(I=p.shared.pending,I===null)break;oe=I,I=oe.next,oe.next=null,p.lastBaseUpdate=oe,p.shared.pending=null}}while(!0);ce===null&&(B=fe),p.baseState=B,p.firstBaseUpdate=J,p.lastBaseUpdate=ce,g===null&&(p.shared.lanes=0),Kr|=S,e.lanes=S,e.memoizedState=fe}}function md(e,t){if(typeof e!="function")throw Error(i(191,e));e.call(t)}function bd(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;eg?g:8;var S=U.T,I={};U.T=I,kl(e,!1,t,n);try{var B=p(),J=U.S;if(J!==null&&J(I,B),B!==null&&typeof B=="object"&&typeof B.then=="function"){var ce=lv(B,s);Wn(e,t,ce,qt(e))}else Wn(e,t,s,qt(e))}catch(fe){Wn(e,t,{then:function(){},status:"rejected",reason:fe},qt())}finally{j.p=g,S!==null&&I.types!==null&&(S.types=I.types),U.T=S}}function hv(){}function wl(e,t,n,s){if(e.tag!==5)throw Error(i(476));var p=Yd(e).queue;Zd(e,p,t,se,n===null?hv:function(){return Kd(e),n(s)})}function Yd(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:se,baseState:se,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:_r,lastRenderedState:se},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:_r,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Kd(e){var t=Yd(e);t.next===null&&(t=e.alternate.memoizedState),Wn(e,t.next.queue,{},qt())}function yl(){return Ct(oi)}function Qd(){return dt().memoizedState}function Xd(){return dt().memoizedState}function gv(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=qt();e=Wr(n);var s=Hr(t,e,n);s!==null&&($t(s,t,n),$n(s,t,n)),t={cache:Yo()},e.payload=t;return}t=t.return}}function mv(e,t,n){var s=qt();n={lane:s,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},as(e)?ef(t,n):(n=Mo(e,t,n,s),n!==null&&($t(n,e,s),tf(n,t,s)))}function Jd(e,t,n){var s=qt();Wn(e,t,n,s)}function Wn(e,t,n,s){var p={lane:s,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(as(e))ef(t,p);else{var g=e.alternate;if(e.lanes===0&&(g===null||g.lanes===0)&&(g=t.lastRenderedReducer,g!==null))try{var S=t.lastRenderedState,I=g(S,n);if(p.hasEagerState=!0,p.eagerState=I,Bt(I,S))return Oi(e,t,p,0),et===null&&Ri(),!1}catch{}if(n=Mo(e,t,p,s),n!==null)return $t(n,e,s),tf(n,t,s),!0}return!1}function kl(e,t,n,s){if(s={lane:2,revertLane:Jl(),gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null},as(e)){if(t)throw Error(i(479))}else t=Mo(e,n,s,2),t!==null&&$t(t,e,2)}function as(e){var t=e.alternate;return e===Le||t!==null&&t===Le}function ef(e,t){tn=Ki=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function tf(e,t,n){if((n&4194048)!==0){var s=t.lanes;s&=e.pendingLanes,n|=s,t.lanes=n,sp(e,n)}}var Hn={readContext:Ct,use:Ji,useCallback:ct,useContext:ct,useEffect:ct,useImperativeHandle:ct,useLayoutEffect:ct,useInsertionEffect:ct,useMemo:ct,useReducer:ct,useRef:ct,useState:ct,useDebugValue:ct,useDeferredValue:ct,useTransition:ct,useSyncExternalStore:ct,useId:ct,useHostTransitionStatus:ct,useFormState:ct,useActionState:ct,useOptimistic:ct,useMemoCache:ct,useCacheRefresh:ct};Hn.useEffectEvent=ct;var rf={readContext:Ct,use:Ji,useCallback:function(e,t){return It().memoizedState=[e,t===void 0?null:t],e},useContext:Ct,useEffect:$d,useImperativeHandle:function(e,t,n){n=n!=null?n.concat([e]):null,ts(4194308,4,Vd.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ts(4194308,4,e,t)},useInsertionEffect:function(e,t){ts(4,2,e,t)},useMemo:function(e,t){var n=It();t=t===void 0?null:t;var s=e();if(_a){Pt(!0);try{e()}finally{Pt(!1)}}return n.memoizedState=[s,t],s},useReducer:function(e,t,n){var s=It();if(n!==void 0){var p=n(t);if(_a){Pt(!0);try{n(t)}finally{Pt(!1)}}}else p=t;return s.memoizedState=s.baseState=p,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:p},s.queue=e,e=e.dispatch=mv.bind(null,Le,e),[s.memoizedState,e]},useRef:function(e){var t=It();return e={current:e},t.memoizedState=e},useState:function(e){e=hl(e);var t=e.queue,n=Jd.bind(null,Le,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:bl,useDeferredValue:function(e,t){var n=It();return vl(n,e,t)},useTransition:function(){var e=hl(!1);return e=Zd.bind(null,Le,e.queue,!0,!1),It().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var s=Le,p=It();if(Ue){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),et===null)throw Error(i(349));(Be&127)!==0||Sd(s,t,n)}p.memoizedState=n;var g={value:n,getSnapshot:t};return p.queue=g,$d(Cd.bind(null,s,g,e),[e]),s.flags|=2048,an(9,{destroy:void 0},Ed.bind(null,s,g,n,t),null),n},useId:function(){var e=It(),t=et.identifierPrefix;if(Ue){var n=dr,s=pr;n=(s&~(1<<32-ot(s)-1)).toString(32)+n,t="_"+t+"R_"+n,n=Qi++,0<\/script>",g=g.removeChild(g.firstChild);break;case"select":g=typeof s.is=="string"?S.createElement("select",{is:s.is}):S.createElement("select"),s.multiple?g.multiple=!0:s.size&&(g.size=s.size);break;default:g=typeof s.is=="string"?S.createElement(p,{is:s.is}):S.createElement(p)}}g[St]=t,g[Ft]=s;e:for(S=t.child;S!==null;){if(S.tag===5||S.tag===6)g.appendChild(S.stateNode);else if(S.tag!==4&&S.tag!==27&&S.child!==null){S.child.return=S,S=S.child;continue}if(S===t)break e;for(;S.sibling===null;){if(S.return===null||S.return===t)break e;S=S.return}S.sibling.return=S.return,S=S.sibling}t.stateNode=g;e:switch(Dt(g,p,s),p){case"button":case"input":case"select":case"textarea":s=!!s.autoFocus;break e;case"img":s=!0;break e;default:s=!1}s&&Pr(t)}}return it(t),zl(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==s&&Pr(t);else{if(typeof s!="string"&&t.stateNode===null)throw Error(i(166));if(e=we.current,Za(t)){if(e=t.stateNode,n=t.memoizedProps,s=null,p=Et,p!==null)switch(p.tag){case 27:case 5:s=p.memoizedProps}e[St]=t,e=!!(e.nodeValue===n||s!==null&&s.suppressHydrationWarning===!0||xh(e.nodeValue,n)),e||jr(t,!0)}else e=Ss(e).createTextNode(s),e[St]=t,t.stateNode=e}return it(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(s=Za(t),n!==null){if(e===null){if(!s)throw Error(i(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(i(557));e[St]=t}else wa(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;it(t),e=!1}else n=Ho(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Vt(t),t):(Vt(t),null);if((t.flags&128)!==0)throw Error(i(558))}return it(t),null;case 13:if(s=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(p=Za(t),s!==null&&s.dehydrated!==null){if(e===null){if(!p)throw Error(i(318));if(p=t.memoizedState,p=p!==null?p.dehydrated:null,!p)throw Error(i(317));p[St]=t}else wa(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;it(t),p=!1}else p=Ho(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=p),p=!0;if(!p)return t.flags&256?(Vt(t),t):(Vt(t),null)}return Vt(t),(t.flags&128)!==0?(t.lanes=n,t):(n=s!==null,e=e!==null&&e.memoizedState!==null,n&&(s=t.child,p=null,s.alternate!==null&&s.alternate.memoizedState!==null&&s.alternate.memoizedState.cachePool!==null&&(p=s.alternate.memoizedState.cachePool.pool),g=null,s.memoizedState!==null&&s.memoizedState.cachePool!==null&&(g=s.memoizedState.cachePool.pool),g!==p&&(s.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),ls(t,t.updateQueue),it(t),null);case 4:return Ce(),e===null&&ac(t.stateNode.containerInfo),it(t),null;case 10:return Er(t.type),it(t),null;case 19:if(L(pt),s=t.memoizedState,s===null)return it(t),null;if(p=(t.flags&128)!==0,g=s.rendering,g===null)if(p)Gn(s,!1);else{if(ut!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(g=Yi(e),g!==null){for(t.flags|=128,Gn(s,!1),e=g.updateQueue,t.updateQueue=e,ls(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Jp(n,e),n=n.sibling;return ee(pt,pt.current&1|2),Ue&&xr(t,s.treeForkCount),t.child}e=e.sibling}s.tail!==null&&be()>fs&&(t.flags|=128,p=!0,Gn(s,!1),t.lanes=4194304)}else{if(!p)if(e=Yi(g),e!==null){if(t.flags|=128,p=!0,e=e.updateQueue,t.updateQueue=e,ls(t,e),Gn(s,!0),s.tail===null&&s.tailMode==="hidden"&&!g.alternate&&!Ue)return it(t),null}else 2*be()-s.renderingStartTime>fs&&n!==536870912&&(t.flags|=128,p=!0,Gn(s,!1),t.lanes=4194304);s.isBackwards?(g.sibling=t.child,t.child=g):(e=s.last,e!==null?e.sibling=g:t.child=g,s.last=g)}return s.tail!==null?(e=s.tail,s.rendering=e,s.tail=e.sibling,s.renderingStartTime=be(),e.sibling=null,n=pt.current,ee(pt,p?n&1|2:n&1),Ue&&xr(t,s.treeForkCount),e):(it(t),null);case 22:case 23:return Vt(t),nl(),s=t.memoizedState!==null,e!==null?e.memoizedState!==null!==s&&(t.flags|=8192):s&&(t.flags|=8192),s?(n&536870912)!==0&&(t.flags&128)===0&&(it(t),t.subtreeFlags&6&&(t.flags|=8192)):it(t),n=t.updateQueue,n!==null&&ls(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),s=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(s=t.memoizedState.cachePool.pool),s!==n&&(t.flags|=2048),e!==null&&L(xa),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Er(ft),it(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function kv(e,t){switch(Vo(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Er(ft),Ce(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return qe(t),null;case 31:if(t.memoizedState!==null){if(Vt(t),t.alternate===null)throw Error(i(340));wa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Vt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));wa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return L(pt),null;case 4:return Ce(),null;case 10:return Er(t.type),null;case 22:case 23:return Vt(t),nl(),e!==null&&L(xa),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Er(ft),null;case 25:return null;default:return null}}function Df(e,t){switch(Vo(t),t.tag){case 3:Er(ft),Ce();break;case 26:case 27:case 5:qe(t);break;case 4:Ce();break;case 31:t.memoizedState!==null&&Vt(t);break;case 13:Vt(t);break;case 19:L(pt);break;case 10:Er(t.type);break;case 22:case 23:Vt(t),nl(),e!==null&&L(xa);break;case 24:Er(ft)}}function Zn(e,t){try{var n=t.updateQueue,s=n!==null?n.lastEffect:null;if(s!==null){var p=s.next;n=p;do{if((n.tag&e)===e){s=void 0;var g=n.create,S=n.inst;s=g(),S.destroy=s}n=n.next}while(n!==p)}}catch(I){Ze(t,t.return,I)}}function Zr(e,t,n){try{var s=t.updateQueue,p=s!==null?s.lastEffect:null;if(p!==null){var g=p.next;s=g;do{if((s.tag&e)===e){var S=s.inst,I=S.destroy;if(I!==void 0){S.destroy=void 0,p=t;var B=n,J=I;try{J()}catch(ce){Ze(p,B,ce)}}}s=s.next}while(s!==g)}}catch(ce){Ze(t,t.return,ce)}}function Pf(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{bd(t,n)}catch(s){Ze(e,e.return,s)}}}function Tf(e,t,n){n.props=Da(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(s){Ze(e,t,s)}}function Yn(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var s=e.stateNode;break;case 30:s=e.stateNode;break;default:s=e.stateNode}typeof n=="function"?e.refCleanup=n(s):n.current=s}}catch(p){Ze(e,t,p)}}function fr(e,t){var n=e.ref,s=e.refCleanup;if(n!==null)if(typeof s=="function")try{s()}catch(p){Ze(e,t,p)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n=="function")try{n(null)}catch(p){Ze(e,t,p)}else n.current=null}function Nf(e){var t=e.type,n=e.memoizedProps,s=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&s.focus();break e;case"img":n.src?s.src=n.src:n.srcSet&&(s.srcset=n.srcSet)}}catch(p){Ze(e,e.return,p)}}function Rl(e,t,n){try{var s=e.stateNode;Vv(s,e.type,n,t),s[Ft]=t}catch(p){Ze(e,e.return,p)}}function If(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&ta(e.type)||e.tag===4}function Ol(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||If(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&ta(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Ml(e,t,n){var s=e.tag;if(s===5||s===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=wr));else if(s!==4&&(s===27&&ta(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Ml(e,t,n),e=e.sibling;e!==null;)Ml(e,t,n),e=e.sibling}function cs(e,t,n){var s=e.tag;if(s===5||s===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(s!==4&&(s===27&&ta(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(cs(e,t,n),e=e.sibling;e!==null;)cs(e,t,n),e=e.sibling}function Af(e){var t=e.stateNode,n=e.memoizedProps;try{for(var s=e.type,p=t.attributes;p.length;)t.removeAttributeNode(p[0]);Dt(t,s,n),t[St]=e,t[Ft]=n}catch(g){Ze(e,e.return,g)}}var Tr=!1,mt=!1,$l=!1,Ff=typeof WeakSet=="function"?WeakSet:Set,yt=null;function xv(e,t){if(e=e.containerInfo,sc=Ns,e=Wp(e),Ao(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var s=n.getSelection&&n.getSelection();if(s&&s.rangeCount!==0){n=s.anchorNode;var p=s.anchorOffset,g=s.focusNode;s=s.focusOffset;try{n.nodeType,g.nodeType}catch{n=null;break e}var S=0,I=-1,B=-1,J=0,ce=0,fe=e,re=null;t:for(;;){for(var oe;fe!==n||p!==0&&fe.nodeType!==3||(I=S+p),fe!==g||s!==0&&fe.nodeType!==3||(B=S+s),fe.nodeType===3&&(S+=fe.nodeValue.length),(oe=fe.firstChild)!==null;)re=fe,fe=oe;for(;;){if(fe===e)break t;if(re===n&&++J===p&&(I=S),re===g&&++ce===s&&(B=S),(oe=fe.nextSibling)!==null)break;fe=re,re=fe.parentNode}fe=oe}n=I===-1||B===-1?null:{start:I,end:B}}else n=null}n=n||{start:0,end:0}}else n=null;for(oc={focusedElem:e,selectionRange:n},Ns=!1,yt=t;yt!==null;)if(t=yt,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,yt=e;else for(;yt!==null;){switch(t=yt,g=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(n=0;n title"))),Dt(g,s,n),g[St]=e,wt(g),s=g;break e;case"link":var S=$h("link","href",p).get(s+(n.href||""));if(S){for(var I=0;IQe&&(S=Qe,Qe=De,De=S);var G=Up(I,De),H=Up(I,Qe);if(G&&H&&(oe.rangeCount!==1||oe.anchorNode!==G.node||oe.anchorOffset!==G.offset||oe.focusNode!==H.node||oe.focusOffset!==H.offset)){var X=fe.createRange();X.setStart(G.node,G.offset),oe.removeAllRanges(),De>Qe?(oe.addRange(X),oe.extend(H.node,H.offset)):(X.setEnd(H.node,H.offset),oe.addRange(X))}}}}for(fe=[],oe=I;oe=oe.parentNode;)oe.nodeType===1&&fe.push({element:oe,left:oe.scrollLeft,top:oe.scrollTop});for(typeof I.focus=="function"&&I.focus(),I=0;In?32:n,U.T=null,n=ql,ql=null;var g=Xr,S=Lr;if(bt=0,cn=Xr=null,Lr=0,(He&6)!==0)throw Error(i(331));var I=He;if(He|=4,Wf(g.current),jf(g,g.current,S,n),He=I,ti(0,!1),lt&&typeof lt.onPostCommitFiberRoot=="function")try{lt.onPostCommitFiberRoot(Ie,g)}catch{}return!0}finally{j.p=p,U.T=s,lh(e,t)}}function uh(e,t,n){t=Xt(n,t),t=Cl(e.stateNode,t,2),e=Hr(e,t,2),e!==null&&(kn(e,2),hr(e))}function Ze(e,t,n){if(e.tag===3)uh(e,e,n);else for(;t!==null;){if(t.tag===3){uh(t,e,n);break}else if(t.tag===1){var s=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof s.componentDidCatch=="function"&&(Qr===null||!Qr.has(s))){e=Xt(n,e),n=pf(2),s=Hr(t,n,2),s!==null&&(df(n,s,t,e),kn(s,2),hr(s));break}}t=t.return}}function Kl(e,t,n){var s=e.pingCache;if(s===null){s=e.pingCache=new Cv;var p=new Set;s.set(t,p)}else p=s.get(t),p===void 0&&(p=new Set,s.set(t,p));p.has(n)||(Ul=!0,p.add(n),e=Nv.bind(null,e,t,n),t.then(e,e))}function Nv(e,t,n){var s=e.pingCache;s!==null&&s.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,et===e&&(Be&n)===n&&(ut===4||ut===3&&(Be&62914560)===Be&&300>be()-ds?(He&2)===0&&un(e,0):Vl|=n,ln===Be&&(ln=0)),hr(e)}function ph(e,t){t===0&&(t=np()),e=ba(e,t),e!==null&&(kn(e,t),hr(e))}function Iv(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),ph(e,n)}function Av(e,t){var n=0;switch(e.tag){case 31:case 13:var s=e.stateNode,p=e.memoizedState;p!==null&&(n=p.retryLane);break;case 19:s=e.stateNode;break;case 22:s=e.stateNode._retryCache;break;default:throw Error(i(314))}s!==null&&s.delete(t),ph(e,n)}function Fv(e,t){return te(e,t)}var ws=null,dn=null,Ql=!1,ys=!1,Xl=!1,ea=0;function hr(e){e!==dn&&e.next===null&&(dn===null?ws=dn=e:dn=dn.next=e),ys=!0,Ql||(Ql=!0,zv())}function ti(e,t){if(!Xl&&ys){Xl=!0;do for(var n=!1,s=ws;s!==null;){if(e!==0){var p=s.pendingLanes;if(p===0)var g=0;else{var S=s.suspendedLanes,I=s.pingedLanes;g=(1<<31-ot(42|e)+1)-1,g&=p&~(S&~I),g=g&201326741?g&201326741|1:g?g|2:0}g!==0&&(n=!0,gh(s,g))}else g=Be,g=Ei(s,s===et?g:0,s.cancelPendingCommit!==null||s.timeoutHandle!==-1),(g&3)===0||yn(s,g)||(n=!0,gh(s,g));s=s.next}while(n);Xl=!1}}function Lv(){dh()}function dh(){ys=Ql=!1;var e=0;ea!==0&&Hv()&&(e=ea);for(var t=be(),n=null,s=ws;s!==null;){var p=s.next,g=fh(s,t);g===0?(s.next=null,n===null?ws=p:n.next=p,p===null&&(dn=n)):(n=s,(e!==0||(g&3)!==0)&&(ys=!0)),s=p}bt!==0&&bt!==5||ti(e),ea!==0&&(ea=0)}function fh(e,t){for(var n=e.suspendedLanes,s=e.pingedLanes,p=e.expirationTimes,g=e.pendingLanes&-62914561;0I)break;var ce=B.transferSize,fe=B.initiatorType;ce&&Sh(fe)&&(B=B.responseEnd,S+=ce*(B"u"?null:document;function zh(e,t,n){var s=fn;if(s&&typeof t=="string"&&t){var p=Kt(t);p='link[rel="'+e+'"][href="'+p+'"]',typeof n=="string"&&(p+='[crossorigin="'+n+'"]'),Lh.has(p)||(Lh.add(p),e={rel:e,crossOrigin:n,href:t},s.querySelector(p)===null&&(t=s.createElement("link"),Dt(t,"link",e),wt(t),s.head.appendChild(t)))}}function ew(e){zr.D(e),zh("dns-prefetch",e,null)}function tw(e,t){zr.C(e,t),zh("preconnect",e,t)}function rw(e,t,n){zr.L(e,t,n);var s=fn;if(s&&e&&t){var p='link[rel="preload"][as="'+Kt(t)+'"]';t==="image"&&n&&n.imageSrcSet?(p+='[imagesrcset="'+Kt(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(p+='[imagesizes="'+Kt(n.imageSizes)+'"]')):p+='[href="'+Kt(e)+'"]';var g=p;switch(t){case"style":g=hn(e);break;case"script":g=gn(e)}nr.has(g)||(e=b({rel:"preload",href:t==="image"&&n&&n.imageSrcSet?void 0:e,as:t},n),nr.set(g,e),s.querySelector(p)!==null||t==="style"&&s.querySelector(ii(g))||t==="script"&&s.querySelector(si(g))||(t=s.createElement("link"),Dt(t,"link",e),wt(t),s.head.appendChild(t)))}}function aw(e,t){zr.m(e,t);var n=fn;if(n&&e){var s=t&&typeof t.as=="string"?t.as:"script",p='link[rel="modulepreload"][as="'+Kt(s)+'"][href="'+Kt(e)+'"]',g=p;switch(s){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":g=gn(e)}if(!nr.has(g)&&(e=b({rel:"modulepreload",href:e},t),nr.set(g,e),n.querySelector(p)===null)){switch(s){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(si(g)))return}s=n.createElement("link"),Dt(s,"link",e),wt(s),n.head.appendChild(s)}}}function nw(e,t,n){zr.S(e,t,n);var s=fn;if(s&&e){var p=za(s).hoistableStyles,g=hn(e);t=t||"default";var S=p.get(g);if(!S){var I={loading:0,preload:null};if(S=s.querySelector(ii(g)))I.loading=5;else{e=b({rel:"stylesheet",href:e,"data-precedence":t},n),(n=nr.get(g))&&hc(e,n);var B=S=s.createElement("link");wt(B),Dt(B,"link",e),B._p=new Promise(function(J,ce){B.onload=J,B.onerror=ce}),B.addEventListener("load",function(){I.loading|=1}),B.addEventListener("error",function(){I.loading|=2}),I.loading|=4,Cs(S,t,s)}S={type:"stylesheet",instance:S,count:1,state:I},p.set(g,S)}}}function iw(e,t){zr.X(e,t);var n=fn;if(n&&e){var s=za(n).hoistableScripts,p=gn(e),g=s.get(p);g||(g=n.querySelector(si(p)),g||(e=b({src:e,async:!0},t),(t=nr.get(p))&&gc(e,t),g=n.createElement("script"),wt(g),Dt(g,"link",e),n.head.appendChild(g)),g={type:"script",instance:g,count:1,state:null},s.set(p,g))}}function sw(e,t){zr.M(e,t);var n=fn;if(n&&e){var s=za(n).hoistableScripts,p=gn(e),g=s.get(p);g||(g=n.querySelector(si(p)),g||(e=b({src:e,async:!0,type:"module"},t),(t=nr.get(p))&&gc(e,t),g=n.createElement("script"),wt(g),Dt(g,"link",e),n.head.appendChild(g)),g={type:"script",instance:g,count:1,state:null},s.set(p,g))}}function Rh(e,t,n,s){var p=(p=we.current)?Es(p):null;if(!p)throw Error(i(446));switch(e){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(t=hn(n.href),n=za(p).hoistableStyles,s=n.get(t),s||(s={type:"style",instance:null,count:0,state:null},n.set(t,s)),s):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){e=hn(n.href);var g=za(p).hoistableStyles,S=g.get(e);if(S||(p=p.ownerDocument||p,S={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},g.set(e,S),(g=p.querySelector(ii(e)))&&!g._p&&(S.instance=g,S.state.loading=5),nr.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},nr.set(e,n),g||ow(p,e,n,S.state))),t&&s===null)throw Error(i(528,""));return S}if(t&&s!==null)throw Error(i(529,""));return null;case"script":return t=n.async,n=n.src,typeof n=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=gn(n),n=za(p).hoistableScripts,s=n.get(t),s||(s={type:"script",instance:null,count:0,state:null},n.set(t,s)),s):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,e))}}function hn(e){return'href="'+Kt(e)+'"'}function ii(e){return'link[rel="stylesheet"]['+e+"]"}function Oh(e){return b({},e,{"data-precedence":e.precedence,precedence:null})}function ow(e,t,n,s){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?s.loading=1:(t=e.createElement("link"),s.preload=t,t.addEventListener("load",function(){return s.loading|=1}),t.addEventListener("error",function(){return s.loading|=2}),Dt(t,"link",n),wt(t),e.head.appendChild(t))}function gn(e){return'[src="'+Kt(e)+'"]'}function si(e){return"script[async]"+e}function Mh(e,t,n){if(t.count++,t.instance===null)switch(t.type){case"style":var s=e.querySelector('style[data-href~="'+Kt(n.href)+'"]');if(s)return t.instance=s,wt(s),s;var p=b({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return s=(e.ownerDocument||e).createElement("style"),wt(s),Dt(s,"style",p),Cs(s,n.precedence,e),t.instance=s;case"stylesheet":p=hn(n.href);var g=e.querySelector(ii(p));if(g)return t.state.loading|=4,t.instance=g,wt(g),g;s=Oh(n),(p=nr.get(p))&&hc(s,p),g=(e.ownerDocument||e).createElement("link"),wt(g);var S=g;return S._p=new Promise(function(I,B){S.onload=I,S.onerror=B}),Dt(g,"link",s),t.state.loading|=4,Cs(g,n.precedence,e),t.instance=g;case"script":return g=gn(n.src),(p=e.querySelector(si(g)))?(t.instance=p,wt(p),p):(s=n,(p=nr.get(g))&&(s=b({},n),gc(s,p)),e=e.ownerDocument||e,p=e.createElement("script"),wt(p),Dt(p,"link",s),e.head.appendChild(p),t.instance=p);case"void":return null;default:throw Error(i(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(s=t.instance,t.state.loading|=4,Cs(s,n.precedence,e));return t.instance}function Cs(e,t,n){for(var s=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),p=s.length?s[s.length-1]:null,g=p,S=0;S title"):null)}function lw(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(e=t.disabled,typeof t.precedence=="string"&&e==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function jh(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function cw(e,t,n,s){if(n.type==="stylesheet"&&(typeof s.media!="string"||matchMedia(s.media).matches!==!1)&&(n.state.loading&4)===0){if(n.instance===null){var p=hn(s.href),g=t.querySelector(ii(p));if(g){t=g._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Ds.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=g,wt(g);return}g=t.ownerDocument||t,s=Oh(s),(p=nr.get(p))&&hc(s,p),g=g.createElement("link"),wt(g);var S=g;S._p=new Promise(function(I,B){S.onload=I,S.onerror=B}),Dt(g,"link",s),n.instance=g}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&(n.state.loading&3)===0&&(e.count++,n=Ds.bind(e),t.addEventListener("load",n),t.addEventListener("error",n))}}var mc=0;function uw(e,t){return e.stylesheets&&e.count===0&&Ts(e,e.stylesheets),0mc?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(s),clearTimeout(p)}}:null}function Ds(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Ts(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Ps=null;function Ts(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Ps=new Map,t.forEach(pw,e),Ps=null,Ds.call(e))}function pw(e,t){if(!(t.state.loading&4)){var n=Ps.get(e);if(n)var s=n.get(null);else{n=new Map,Ps.set(e,n);for(var p=e.querySelectorAll("link[data-precedence],style[data-precedence]"),g=0;g"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(f)}catch(a){console.error(a)}}return f(),Eu.exports=nk(),Eu.exports}var sk=ik();const ok=Hu(sk),lk=`@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-outline-style:solid}}}:root,:host{--ppb-radius:.625rem;--ppb-background:oklch(100% 0 0);--ppb-foreground:oklch(14.5% 0 0);--ppb-card:oklch(100% 0 0);--ppb-card-foreground:oklch(14.5% 0 0);--ppb-popover:oklch(100% 0 0);--ppb-popover-foreground:oklch(14.5% 0 0);--ppb-primary:oklch(20.5% 0 0);--ppb-primary-foreground:oklch(98.5% 0 0);--ppb-secondary:oklch(97% 0 0);--ppb-secondary-foreground:oklch(20.5% 0 0);--ppb-muted:oklch(97% 0 0);--ppb-muted-foreground:oklch(55.6% 0 0);--ppb-accent:oklch(97% 0 0);--ppb-accent-foreground:oklch(20.5% 0 0);--ppb-destructive:oklch(57.7% .245 27.325);--ppb-success:oklch(62.7% .194 149.214);--ppb-warning:oklch(64.6% .222 41.116);--ppb-border:oklch(92.2% 0 0);--ppb-input:oklch(92.2% 0 0);--ppb-ring:oklch(70.8% 0 0);--ppb-chart-1:oklch(64.6% .222 41.116);--ppb-chart-2:oklch(60% .118 184.704);--ppb-chart-3:oklch(39.8% .07 227.392);--ppb-chart-4:oklch(82.8% .189 84.429);--ppb-chart-5:oklch(76.9% .188 70.08);--ppb-sidebar:oklch(98.5% 0 0);--ppb-sidebar-foreground:oklch(14.5% 0 0);--ppb-sidebar-primary:oklch(20.5% 0 0);--ppb-sidebar-primary-foreground:oklch(98.5% 0 0);--ppb-sidebar-accent:oklch(97% 0 0);--ppb-sidebar-accent-foreground:oklch(20.5% 0 0);--ppb-sidebar-border:oklch(92.2% 0 0);--ppb-sidebar-ring:oklch(70.8% 0 0)}.dark,:host[class~=dark],:root[class~=dark]{--ppb-background:oklch(14.5% 0 0);--ppb-foreground:oklch(98.5% 0 0);--ppb-card:oklch(20.5% 0 0);--ppb-card-foreground:oklch(98.5% 0 0);--ppb-popover:oklch(20.5% 0 0);--ppb-popover-foreground:oklch(98.5% 0 0);--ppb-primary:oklch(92.2% 0 0);--ppb-primary-foreground:oklch(20.5% 0 0);--ppb-secondary:oklch(26.9% 0 0);--ppb-secondary-foreground:oklch(98.5% 0 0);--ppb-muted:oklch(26.9% 0 0);--ppb-muted-foreground:oklch(70.8% 0 0);--ppb-accent:oklch(26.9% 0 0);--ppb-accent-foreground:oklch(98.5% 0 0);--ppb-destructive:oklch(70.4% .191 22.216);--ppb-border:oklch(100% 0 0/.1);--ppb-input:oklch(100% 0 0/.15);--ppb-ring:oklch(55.6% 0 0);--ppb-chart-1:oklch(48.8% .243 264.376);--ppb-chart-2:oklch(69.6% .17 162.48);--ppb-chart-3:oklch(76.9% .188 70.08);--ppb-chart-4:oklch(62.7% .265 303.9);--ppb-chart-5:oklch(64.5% .246 16.439);--ppb-sidebar:oklch(20.5% 0 0);--ppb-sidebar-foreground:oklch(98.5% 0 0);--ppb-sidebar-primary:oklch(48.8% .243 264.376);--ppb-sidebar-primary-foreground:oklch(98.5% 0 0);--ppb-sidebar-accent:oklch(26.9% 0 0);--ppb-sidebar-accent-foreground:oklch(98.5% 0 0);--ppb-sidebar-border:oklch(100% 0 0/.1);--ppb-sidebar-ring:oklch(55.6% 0 0)}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root,:host{--ppb-font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--ppb-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--ppb-color-orange-500:oklch(70.5% .213 47.604);--ppb-color-yellow-400:oklch(85.2% .199 91.936);--ppb-color-yellow-500:oklch(79.5% .184 86.047);--ppb-color-green-500:oklch(72.3% .219 149.579);--ppb-color-blue-500:oklch(62.3% .214 259.815);--ppb-color-gray-300:oklch(87.2% .01 258.338);--ppb-color-black:#000;--ppb-color-white:#fff;--ppb-spacing:.25rem;--ppb-container-sm:24rem;--ppb-container-md:28rem;--ppb-container-lg:32rem;--ppb-container-4xl:56rem;--ppb-text-xs--line-height:calc(1 / .75);--ppb-text-sm--line-height:calc(1.25 / .875);--ppb-text-base--line-height: 1.5 ;--ppb-text-lg--line-height:calc(1.75 / 1.125);--ppb-text-xl--line-height:calc(1.75 / 1.25);--ppb-text-2xl--line-height:calc(2 / 1.5);--ppb-text-4xl--line-height:calc(2.5 / 2.25);--ppb-text-5xl--line-height:1;--ppb-tracking-tight:-.025em;--ppb-tracking-widest:.1em;--ppb-leading-tight:1.25;--ppb-leading-relaxed:1.625;--ppb-radius-xs:.125rem;--ppb-radius-2xl:1rem;--ppb-ease-out:cubic-bezier(0, 0, .2, 1);--ppb-ease-in-out:cubic-bezier(.4, 0, .2, 1);--ppb-animate-spin:spin 1s linear infinite;--ppb-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--ppb-blur-sm:8px;--ppb-blur-xl:24px;--ppb-blur-3xl:64px;--ppb-aspect-video:16 / 9;--ppb-default-transition-duration:.15s;--ppb-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--ppb-default-font-family:var(--ppb-font-sans);--ppb-default-mono-font-family:var(--ppb-font-mono);--ppb-border:var(--border-width,.5px)}@layer theme;@layer base{[data-ppb] *,[data-ppb] :after,[data-ppb] :before,[data-ppb] ::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}[data-ppb] ::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}[data-ppb] html,[data-ppb] :host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--ppb-default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--ppb-default-font-feature-settings,normal);font-variation-settings:var(--ppb-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}[data-ppb] hr{height:0;color:inherit;border-top-width:1px}[data-ppb] abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}[data-ppb] h1,[data-ppb] h2,[data-ppb] h3,[data-ppb] h4,[data-ppb] h5,[data-ppb] h6{font-size:inherit;font-weight:inherit}[data-ppb] a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}[data-ppb] b,[data-ppb] strong{font-weight:bolder}[data-ppb] code,[data-ppb] kbd,[data-ppb] samp,[data-ppb] pre{font-family:var(--ppb-default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--ppb-default-mono-font-feature-settings,normal);font-variation-settings:var(--ppb-default-mono-font-variation-settings,normal);font-size:1em}[data-ppb] small{font-size:80%}[data-ppb] sub,[data-ppb] sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}[data-ppb] sub{bottom:-.25em}[data-ppb] sup{top:-.5em}[data-ppb] table{text-indent:0;border-color:inherit;border-collapse:collapse}[data-ppb] :-moz-focusring{outline:auto}[data-ppb] progress{vertical-align:baseline}[data-ppb] summary{display:list-item}[data-ppb] ol,[data-ppb] ul,[data-ppb] menu{list-style:none}[data-ppb] img,[data-ppb] svg,[data-ppb] video,[data-ppb] canvas,[data-ppb] audio,[data-ppb] iframe,[data-ppb] embed,[data-ppb] object{vertical-align:middle;display:block}[data-ppb] img,[data-ppb] video{max-width:100%;height:auto}[data-ppb] button,[data-ppb] input,[data-ppb] select,[data-ppb] optgroup,[data-ppb] textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}[data-ppb] ::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}[data-ppb] :where(select:is([multiple],[size])) optgroup{font-weight:bolder}[data-ppb] :where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}[data-ppb] ::file-selector-button{margin-inline-end:4px}[data-ppb] ::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){[data-ppb] ::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){[data-ppb] ::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}[data-ppb] textarea{resize:vertical}[data-ppb] ::-webkit-search-decoration{-webkit-appearance:none}[data-ppb] ::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}[data-ppb] ::-webkit-datetime-edit{display:inline-flex}[data-ppb] ::-webkit-datetime-edit-fields-wrapper{padding:0}[data-ppb] ::-webkit-datetime-edit{padding-block:0}[data-ppb] ::-webkit-datetime-edit-year-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-month-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-day-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-hour-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-minute-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-second-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-millisecond-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-meridiem-field{padding-block:0}[data-ppb] ::-webkit-calendar-picker-indicator{line-height:1}[data-ppb] :-moz-ui-invalid{box-shadow:none}[data-ppb] button,[data-ppb] input:where([type=button],[type=reset],[type=submit]){appearance:button}[data-ppb] ::file-selector-button{appearance:button}[data-ppb] ::-webkit-inner-spin-button{height:auto}[data-ppb] ::-webkit-outer-spin-button{height:auto}[data-ppb] [hidden]:where(:not([hidden=until-found])){display:none!important}[data-ppb] *{border-color:var(--background-modifier-border,var(--ppb-border));outline-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){[data-ppb] *{outline-color:color-mix(in oklab,var(--background-modifier-border-focus,var(--ppb-ring)) 50%,transparent)}}[data-ppb] body{background-color:var(--background-primary,var(--ppb-background));color:var(--text-normal,var(--ppb-foreground))}[data-ppb-reset] *,[data-ppb-reset] :after,[data-ppb-reset] :before,[data-ppb-reset] ::backdrop{all:revert-layer}[data-ppb-reset] ::file-selector-button{all:revert-layer}}@layer components;@layer utilities{.ppb\\:\\@container\\/card-header{container:card-header/inline-size}.ppb\\:pointer-events-none{pointer-events:none}.ppb\\:invisible{visibility:hidden}.ppb\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.ppb\\:absolute{position:absolute}.ppb\\:fixed{position:fixed}.ppb\\:relative{position:relative}.ppb\\:sticky{position:sticky}.ppb\\:inset-0{inset:calc(var(--ppb-spacing) * 0)}.ppb\\:inset-x-0{inset-inline:calc(var(--ppb-spacing) * 0)}.ppb\\:inset-y-0{inset-block:calc(var(--ppb-spacing) * 0)}.ppb\\:-top-8{top:calc(var(--ppb-spacing) * -8)}.ppb\\:-top-12{top:calc(var(--ppb-spacing) * -12)}.ppb\\:top-0{top:calc(var(--ppb-spacing) * 0)}.ppb\\:top-1\\.5{top:calc(var(--ppb-spacing) * 1.5)}.ppb\\:top-1\\/2{top:50%}.ppb\\:top-2{top:calc(var(--ppb-spacing) * 2)}.ppb\\:top-3\\.5{top:calc(var(--ppb-spacing) * 3.5)}.ppb\\:top-4{top:calc(var(--ppb-spacing) * 4)}.ppb\\:top-6{top:calc(var(--ppb-spacing) * 6)}.ppb\\:top-8{top:calc(var(--ppb-spacing) * 8)}.ppb\\:top-12{top:calc(var(--ppb-spacing) * 12)}.ppb\\:top-\\[1px\\]{top:1px}.ppb\\:top-\\[50\\%\\]{top:50%}.ppb\\:top-\\[60\\%\\]{top:60%}.ppb\\:top-full{top:100%}.ppb\\:-right-12{right:calc(var(--ppb-spacing) * -12)}.ppb\\:right-0{right:calc(var(--ppb-spacing) * 0)}.ppb\\:right-1{right:calc(var(--ppb-spacing) * 1)}.ppb\\:right-2{right:calc(var(--ppb-spacing) * 2)}.ppb\\:right-3{right:calc(var(--ppb-spacing) * 3)}.ppb\\:right-4{right:calc(var(--ppb-spacing) * 4)}.ppb\\:right-6{right:calc(var(--ppb-spacing) * 6)}.ppb\\:right-12{right:calc(var(--ppb-spacing) * 12)}.ppb\\:-bottom-12{bottom:calc(var(--ppb-spacing) * -12)}.ppb\\:bottom-0{bottom:calc(var(--ppb-spacing) * 0)}.ppb\\:bottom-1{bottom:calc(var(--ppb-spacing) * 1)}.ppb\\:bottom-6{bottom:calc(var(--ppb-spacing) * 6)}.ppb\\:bottom-8{bottom:calc(var(--ppb-spacing) * 8)}.ppb\\:-left-12{left:calc(var(--ppb-spacing) * -12)}.ppb\\:left-0{left:calc(var(--ppb-spacing) * 0)}.ppb\\:left-1{left:calc(var(--ppb-spacing) * 1)}.ppb\\:left-1\\/2{left:50%}.ppb\\:left-2{left:calc(var(--ppb-spacing) * 2)}.ppb\\:left-3{left:calc(var(--ppb-spacing) * 3)}.ppb\\:left-\\[50\\%\\]{left:50%}.ppb\\:isolate{isolation:isolate}.ppb\\:-z-10{z-index:-10}.ppb\\:z-10{z-index:10}.ppb\\:z-20{z-index:20}.ppb\\:z-50{z-index:50}.ppb\\:z-\\[1\\]{z-index:1}.ppb\\:col-span-1{grid-column:span 1/span 1}.ppb\\:col-start-2{grid-column-start:2}.ppb\\:row-span-2{grid-row:span 2/span 2}.ppb\\:row-start-1{grid-row-start:1}.ppb\\:m-\\[0px\\]{margin:0}.ppb\\:-mx-1{margin-inline:calc(var(--ppb-spacing) * -1)}.ppb\\:mx-1{margin-inline:calc(var(--ppb-spacing) * 1)}.ppb\\:mx-2{margin-inline:calc(var(--ppb-spacing) * 2)}.ppb\\:mx-3\\.5{margin-inline:calc(var(--ppb-spacing) * 3.5)}.ppb\\:mx-\\[-8px\\]{margin-inline:-8px}.ppb\\:mx-\\[-11px\\]{margin-inline:-11px}.ppb\\:mx-\\[0px\\]{margin-inline:0}.ppb\\:mx-auto{margin-inline:auto}.ppb\\:my-1{margin-block:calc(var(--ppb-spacing) * 1)}.ppb\\:my-4{margin-block:calc(var(--ppb-spacing) * 4)}.ppb\\:my-\\[-30px\\]{margin-block:-30px}.ppb\\:my-\\[0px\\]{margin-block:0}.ppb\\:my-\\[21px\\]{margin-block:21px}.ppb\\:-mt-3{margin-top:calc(var(--ppb-spacing) * -3)}.ppb\\:-mt-4{margin-top:calc(var(--ppb-spacing) * -4)}.ppb\\:-mt-8{margin-top:calc(var(--ppb-spacing) * -8)}.ppb\\:mt-0\\.5{margin-top:calc(var(--ppb-spacing) * .5)}.ppb\\:mt-1{margin-top:calc(var(--ppb-spacing) * 1)}.ppb\\:mt-1\\.5{margin-top:calc(var(--ppb-spacing) * 1.5)}.ppb\\:mt-2{margin-top:calc(var(--ppb-spacing) * 2)}.ppb\\:mt-4{margin-top:calc(var(--ppb-spacing) * 4)}.ppb\\:mt-\\[16px\\]{margin-top:16px}.ppb\\:mt-auto{margin-top:auto}.ppb\\:mr-1{margin-right:calc(var(--ppb-spacing) * 1)}.ppb\\:mr-2{margin-right:calc(var(--ppb-spacing) * 2)}.ppb\\:mb-1{margin-bottom:calc(var(--ppb-spacing) * 1)}.ppb\\:mb-2{margin-bottom:calc(var(--ppb-spacing) * 2)}.ppb\\:mb-3{margin-bottom:calc(var(--ppb-spacing) * 3)}.ppb\\:mb-4{margin-bottom:calc(var(--ppb-spacing) * 4)}.ppb\\:mb-6{margin-bottom:calc(var(--ppb-spacing) * 6)}.ppb\\:mb-8{margin-bottom:calc(var(--ppb-spacing) * 8)}.ppb\\:mb-\\[0px\\]{margin-bottom:0}.ppb\\:-ml-4{margin-left:calc(var(--ppb-spacing) * -4)}.ppb\\:ml-1{margin-left:calc(var(--ppb-spacing) * 1)}.ppb\\:ml-2{margin-left:calc(var(--ppb-spacing) * 2)}.ppb\\:ml-6{margin-left:calc(var(--ppb-spacing) * 6)}.ppb\\:ml-auto{margin-left:auto}.ppb\\:line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ppb\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ppb\\:block{display:block}.ppb\\:contents{display:contents}.ppb\\:flex{display:flex}.ppb\\:grid{display:grid}.ppb\\:hidden{display:none}.ppb\\:inline-block{display:inline-block}.ppb\\:inline-flex{display:inline-flex}.ppb\\:field-sizing-content{field-sizing:content}.ppb\\:aspect-\\[3\\/4\\]{aspect-ratio:3/4}.ppb\\:aspect-square{aspect-ratio:1}.ppb\\:aspect-video{aspect-ratio:var(--ppb-aspect-video)}.ppb\\:size-\\(--cell-size\\){width:var(--cell-size);height:var(--cell-size)}.ppb\\:size-2{width:calc(var(--ppb-spacing) * 2);height:calc(var(--ppb-spacing) * 2)}.ppb\\:size-2\\.5{width:calc(var(--ppb-spacing) * 2.5);height:calc(var(--ppb-spacing) * 2.5)}.ppb\\:size-3{width:calc(var(--ppb-spacing) * 3);height:calc(var(--ppb-spacing) * 3)}.ppb\\:size-3\\.5{width:calc(var(--ppb-spacing) * 3.5);height:calc(var(--ppb-spacing) * 3.5)}.ppb\\:size-4{width:calc(var(--ppb-spacing) * 4);height:calc(var(--ppb-spacing) * 4)}.ppb\\:size-7{width:calc(var(--ppb-spacing) * 7);height:calc(var(--ppb-spacing) * 7)}.ppb\\:size-8{width:calc(var(--ppb-spacing) * 8);height:calc(var(--ppb-spacing) * 8)}.ppb\\:size-9{width:calc(var(--ppb-spacing) * 9);height:calc(var(--ppb-spacing) * 9)}.ppb\\:size-auto{width:auto;height:auto}.ppb\\:size-full{width:100%;height:100%}.ppb\\:h-\\(--cell-size\\){height:var(--cell-size)}.ppb\\:h-0\\.5{height:calc(var(--ppb-spacing) * .5)}.ppb\\:h-1{height:calc(var(--ppb-spacing) * 1)}.ppb\\:h-1\\.5{height:calc(var(--ppb-spacing) * 1.5)}.ppb\\:h-2{height:calc(var(--ppb-spacing) * 2)}.ppb\\:h-2\\.5{height:calc(var(--ppb-spacing) * 2.5)}.ppb\\:h-3{height:calc(var(--ppb-spacing) * 3)}.ppb\\:h-4{height:calc(var(--ppb-spacing) * 4)}.ppb\\:h-5{height:calc(var(--ppb-spacing) * 5)}.ppb\\:h-6{height:calc(var(--ppb-spacing) * 6)}.ppb\\:h-7{height:calc(var(--ppb-spacing) * 7)}.ppb\\:h-8{height:calc(var(--ppb-spacing) * 8)}.ppb\\:h-9{height:calc(var(--ppb-spacing) * 9)}.ppb\\:h-10{height:calc(var(--ppb-spacing) * 10)}.ppb\\:h-12{height:calc(var(--ppb-spacing) * 12)}.ppb\\:h-20{height:calc(var(--ppb-spacing) * 20)}.ppb\\:h-32{height:calc(var(--ppb-spacing) * 32)}.ppb\\:h-64{height:calc(var(--ppb-spacing) * 64)}.ppb\\:h-\\[1\\.15rem\\]{height:1.15rem}.ppb\\:h-\\[calc\\(100\\%-1px\\)\\]{height:calc(100% - 1px)}.ppb\\:h-\\[var\\(--radix-navigation-menu-viewport-height\\)\\]{height:var(--radix-navigation-menu-viewport-height)}.ppb\\:h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.ppb\\:h-auto{height:auto}.ppb\\:h-full{height:100%}.ppb\\:h-px{height:1px}.ppb\\:h-svh{height:100svh}.ppb\\:max-h-\\(--radix-context-menu-content-available-height\\){max-height:var(--radix-context-menu-content-available-height)}.ppb\\:max-h-\\(--radix-dropdown-menu-content-available-height\\){max-height:var(--radix-dropdown-menu-content-available-height)}.ppb\\:max-h-\\(--radix-select-content-available-height\\){max-height:var(--radix-select-content-available-height)}.ppb\\:max-h-16{max-height:calc(var(--ppb-spacing) * 16)}.ppb\\:max-h-\\[80vh\\]{max-height:80vh}.ppb\\:max-h-\\[300px\\]{max-height:300px}.ppb\\:max-h-\\[400px\\]{max-height:400px}.ppb\\:max-h-\\[540px\\]{max-height:540px}.ppb\\:min-h-0{min-height:calc(var(--ppb-spacing) * 0)}.ppb\\:min-h-4{min-height:calc(var(--ppb-spacing) * 4)}.ppb\\:min-h-16{min-height:calc(var(--ppb-spacing) * 16)}.ppb\\:min-h-20{min-height:calc(var(--ppb-spacing) * 20)}.ppb\\:min-h-screen{min-height:100vh}.ppb\\:min-h-svh{min-height:100svh}.ppb\\:w-\\(--cell-size\\){width:var(--cell-size)}.ppb\\:w-\\(--sidebar-width\\){width:var(--sidebar-width)}.ppb\\:w-0\\.5{width:calc(var(--ppb-spacing) * .5)}.ppb\\:w-1{width:calc(var(--ppb-spacing) * 1)}.ppb\\:w-2{width:calc(var(--ppb-spacing) * 2)}.ppb\\:w-2\\.5{width:calc(var(--ppb-spacing) * 2.5)}.ppb\\:w-3{width:calc(var(--ppb-spacing) * 3)}.ppb\\:w-3\\/4{width:75%}.ppb\\:w-4{width:calc(var(--ppb-spacing) * 4)}.ppb\\:w-5{width:calc(var(--ppb-spacing) * 5)}.ppb\\:w-6{width:calc(var(--ppb-spacing) * 6)}.ppb\\:w-8{width:calc(var(--ppb-spacing) * 8)}.ppb\\:w-9{width:calc(var(--ppb-spacing) * 9)}.ppb\\:w-10{width:calc(var(--ppb-spacing) * 10)}.ppb\\:w-12{width:calc(var(--ppb-spacing) * 12)}.ppb\\:w-14{width:calc(var(--ppb-spacing) * 14)}.ppb\\:w-16{width:calc(var(--ppb-spacing) * 16)}.ppb\\:w-20{width:calc(var(--ppb-spacing) * 20)}.ppb\\:w-24{width:calc(var(--ppb-spacing) * 24)}.ppb\\:w-32{width:calc(var(--ppb-spacing) * 32)}.ppb\\:w-40{width:calc(var(--ppb-spacing) * 40)}.ppb\\:w-48{width:calc(var(--ppb-spacing) * 48)}.ppb\\:w-64{width:calc(var(--ppb-spacing) * 64)}.ppb\\:w-72{width:calc(var(--ppb-spacing) * 72)}.ppb\\:w-80{width:calc(var(--ppb-spacing) * 80)}.ppb\\:w-\\[100px\\]{width:100px}.ppb\\:w-\\[140px\\]{width:140px}.ppb\\:w-auto{width:auto}.ppb\\:w-fit{width:fit-content}.ppb\\:w-full{width:100%}.ppb\\:w-max{width:max-content}.ppb\\:w-px{width:1px}.ppb\\:max-w-\\(--skeleton-width\\){max-width:var(--skeleton-width)}.ppb\\:max-w-4xl{max-width:var(--ppb-container-4xl)}.ppb\\:max-w-\\[calc\\(100\\%-2rem\\)\\]{max-width:calc(100% - 2rem)}.ppb\\:max-w-full{max-width:100%}.ppb\\:max-w-max{max-width:max-content}.ppb\\:max-w-md{max-width:var(--ppb-container-md)}.ppb\\:max-w-sm{max-width:var(--ppb-container-sm)}.ppb\\:min-w-\\(--cell-size\\){min-width:var(--cell-size)}.ppb\\:min-w-0{min-width:calc(var(--ppb-spacing) * 0)}.ppb\\:min-w-5{min-width:calc(var(--ppb-spacing) * 5)}.ppb\\:min-w-8{min-width:calc(var(--ppb-spacing) * 8)}.ppb\\:min-w-9{min-width:calc(var(--ppb-spacing) * 9)}.ppb\\:min-w-10{min-width:calc(var(--ppb-spacing) * 10)}.ppb\\:min-w-\\[8rem\\]{min-width:8rem}.ppb\\:min-w-\\[12rem\\]{min-width:12rem}.ppb\\:min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.ppb\\:flex-1{flex:1}.ppb\\:flex-shrink-0,.ppb\\:shrink-0{flex-shrink:0}.ppb\\:grow{flex-grow:1}.ppb\\:grow-0{flex-grow:0}.ppb\\:basis-full{flex-basis:100%}.ppb\\:caption-bottom{caption-side:bottom}.ppb\\:border-collapse{border-collapse:collapse}.ppb\\:origin-\\(--radix-context-menu-content-transform-origin\\){transform-origin:var(--radix-context-menu-content-transform-origin)}.ppb\\:origin-\\(--radix-dropdown-menu-content-transform-origin\\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.ppb\\:origin-\\(--radix-hover-card-content-transform-origin\\){transform-origin:var(--radix-hover-card-content-transform-origin)}.ppb\\:origin-\\(--radix-menubar-content-transform-origin\\){transform-origin:var(--radix-menubar-content-transform-origin)}.ppb\\:origin-\\(--radix-popover-content-transform-origin\\){transform-origin:var(--radix-popover-content-transform-origin)}.ppb\\:origin-\\(--radix-select-content-transform-origin\\){transform-origin:var(--radix-select-content-transform-origin)}.ppb\\:origin-\\(--radix-tooltip-content-transform-origin\\){transform-origin:var(--radix-tooltip-content-transform-origin)}.ppb\\:-translate-x-1{--tw-translate-x:calc(var(--ppb-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:-translate-x-1\\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:translate-x-\\[-50\\%\\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:translate-y-0\\.5{--tw-translate-y:calc(var(--ppb-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:translate-y-\\[-50\\%\\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:translate-y-\\[calc\\(-50\\%_-_2px\\)\\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ppb\\:scale-y-75{--tw-scale-y:75%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ppb\\:rotate-45{rotate:45deg}.ppb\\:rotate-90{rotate:90deg}.ppb\\:transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.ppb\\:animate-caret-blink{animation:1.25s ease-out infinite caret-blink}.ppb\\:animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\\:animate-pulse{animation:var(--ppb-animate-pulse)}.ppb\\:animate-spin{animation:var(--ppb-animate-spin)}.ppb\\:cursor-default{cursor:default}.ppb\\:cursor-not-allowed{cursor:not-allowed}.ppb\\:cursor-pointer{cursor:pointer}.ppb\\:touch-none{touch-action:none}.ppb\\:scroll-my-1{scroll-margin-block:calc(var(--ppb-spacing) * 1)}.ppb\\:scroll-py-1{scroll-padding-block:calc(var(--ppb-spacing) * 1)}.ppb\\:list-none{list-style-type:none}.ppb\\:auto-rows-min{grid-auto-rows:min-content}.ppb\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.ppb\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.ppb\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.ppb\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.ppb\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.ppb\\:grid-cols-\\[0_1fr\\]{grid-template-columns:0 1fr}.ppb\\:grid-rows-\\[auto_auto\\]{grid-template-rows:auto auto}.ppb\\:flex-col{flex-direction:column}.ppb\\:flex-col-reverse{flex-direction:column-reverse}.ppb\\:flex-row{flex-direction:row}.ppb\\:flex-wrap{flex-wrap:wrap}.ppb\\:items-baseline{align-items:baseline}.ppb\\:items-center{align-items:center}.ppb\\:items-end{align-items:flex-end}.ppb\\:items-start{align-items:flex-start}.ppb\\:items-stretch{align-items:stretch}.ppb\\:justify-between{justify-content:space-between}.ppb\\:justify-center{justify-content:center}.ppb\\:justify-end{justify-content:flex-end}.ppb\\:justify-start{justify-content:flex-start}.ppb\\:justify-items-start{justify-items:start}.ppb\\:gap-0\\.5{gap:calc(var(--ppb-spacing) * .5)}.ppb\\:gap-1{gap:calc(var(--ppb-spacing) * 1)}.ppb\\:gap-1\\.5{gap:calc(var(--ppb-spacing) * 1.5)}.ppb\\:gap-2{gap:calc(var(--ppb-spacing) * 2)}.ppb\\:gap-3{gap:calc(var(--ppb-spacing) * 3)}.ppb\\:gap-4{gap:calc(var(--ppb-spacing) * 4)}.ppb\\:gap-5{gap:calc(var(--ppb-spacing) * 5)}.ppb\\:gap-6{gap:calc(var(--ppb-spacing) * 6)}.ppb\\:gap-8{gap:calc(var(--ppb-spacing) * 8)}:where(.ppb\\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\\:space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\\:space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ppb-spacing) * 1) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ppb-spacing) * 1) * calc(1 - var(--tw-space-x-reverse)))}:where(.ppb\\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ppb-spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ppb-spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}:where(.ppb\\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ppb-spacing) * 3) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ppb-spacing) * 3) * calc(1 - var(--tw-space-x-reverse)))}:where(.ppb\\:space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ppb-spacing) * 6) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ppb-spacing) * 6) * calc(1 - var(--tw-space-x-reverse)))}.ppb\\:gap-y-0\\.5{row-gap:calc(var(--ppb-spacing) * .5)}.ppb\\:self-start{align-self:flex-start}.ppb\\:justify-self-end{justify-self:flex-end}.ppb\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ppb\\:overflow-auto{overflow:auto}.ppb\\:overflow-hidden{overflow:hidden}.ppb\\:overflow-x-auto{overflow-x:auto}.ppb\\:overflow-x-hidden{overflow-x:hidden}.ppb\\:overflow-y-auto{overflow-y:auto}.ppb\\:rounded{border-radius:.25rem}.ppb\\:rounded-2xl{border-radius:var(--ppb-radius-2xl)}.ppb\\:rounded-\\[2px\\]{border-radius:2px}.ppb\\:rounded-\\[4px\\]{border-radius:4px}.ppb\\:rounded-\\[inherit\\]{border-radius:inherit}.ppb\\:rounded-full{border-radius:3.40282e38px}.ppb\\:rounded-md{border-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\\:rounded-none{border-radius:0}.ppb\\:rounded-sm{border-radius:var(--radius-s,calc(var(--ppb-radius) - 4px))}.ppb\\:rounded-xl{border-radius:var(--radius-xl,calc(var(--ppb-radius) + 4px))}.ppb\\:rounded-xs{border-radius:var(--ppb-radius-xs)}.ppb\\:rounded-t-lg{border-top-left-radius:var(--radius-l,var(--ppb-radius));border-top-right-radius:var(--radius-l,var(--ppb-radius))}.ppb\\:rounded-l-md{border-top-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\\:rounded-tl-sm{border-top-left-radius:var(--radius-s,calc(var(--ppb-radius) - 4px))}.ppb\\:rounded-r-md{border-top-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\\:border{border-style:var(--tw-border-style);border-width:1px}.ppb\\:border-2{border-style:var(--tw-border-style);border-width:2px}.ppb\\:border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.ppb\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.ppb\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.ppb\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ppb\\:border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.ppb\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\\:border-dashed{--tw-border-style:dashed;border-style:dashed}.ppb\\:border-\\(--color-border\\){border-color:var(--color-border)}.ppb\\:border-border,.ppb\\:border-border\\/20{border-color:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\\:border-border\\/20{border-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 20%,transparent)}}.ppb\\:border-border\\/30{border-color:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\\:border-border\\/30{border-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 30%,transparent)}}.ppb\\:border-border\\/50{border-color:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\\:border-border\\/50{border-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 50%,transparent)}}.ppb\\:border-destructive\\/50{border-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\\:border-destructive\\/50{border-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 50%,transparent)}}.ppb\\:border-input{border-color:var(--background-modifier-border,var(--ppb-input))}.ppb\\:border-muted{border-color:var(--background-primary-alt,var(--ppb-muted))}.ppb\\:border-primary{border-color:var(--interactive-accent,var(--ppb-primary))}.ppb\\:border-sidebar-border{border-color:var(--ppb-sidebar-border)}.ppb\\:border-transparent{border-color:#0000}.ppb\\:border-white{border-color:var(--ppb-color-white)}.ppb\\:border-t-transparent{border-top-color:#0000}.ppb\\:border-l-transparent{border-left-color:#0000}.ppb\\:bg-\\(--color-bg\\){background-color:var(--color-bg)}.ppb\\:bg-accent{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\\:bg-background{background-color:var(--background-primary,var(--ppb-background))}.ppb\\:bg-black\\/20{background-color:var(--ppb-color-black)}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-black\\/20{background-color:color-mix(in oklab,var(--ppb-color-black) 20%,transparent)}}.ppb\\:bg-black\\/50{background-color:var(--ppb-color-black)}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-black\\/50{background-color:color-mix(in oklab,var(--ppb-color-black) 50%,transparent)}}.ppb\\:bg-black\\/60{background-color:var(--ppb-color-black)}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-black\\/60{background-color:color-mix(in oklab,var(--ppb-color-black) 60%,transparent)}}.ppb\\:bg-blue-500{background-color:var(--ppb-color-blue-500)}.ppb\\:bg-border,.ppb\\:bg-border\\/20{background-color:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-border\\/20{background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 20%,transparent)}}.ppb\\:bg-card,.ppb\\:bg-card\\/50{background-color:var(--background-primary,var(--ppb-card))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-card\\/50{background-color:color-mix(in oklab,var(--background-primary,var(--ppb-card)) 50%,transparent)}}.ppb\\:bg-chart-1,.ppb\\:bg-chart-1\\/50{background-color:var(--ppb-chart-1)}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-chart-1\\/50{background-color:color-mix(in oklab,var(--ppb-chart-1) 50%,transparent)}}.ppb\\:bg-chart-2\\/50{background-color:var(--ppb-chart-2)}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-chart-2\\/50{background-color:color-mix(in oklab,var(--ppb-chart-2) 50%,transparent)}}.ppb\\:bg-chart-3\\/50{background-color:var(--ppb-chart-3)}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-chart-3\\/50{background-color:color-mix(in oklab,var(--ppb-chart-3) 50%,transparent)}}.ppb\\:bg-destructive,.ppb\\:bg-destructive\\/5{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-destructive\\/5{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 5%,transparent)}}.ppb\\:bg-destructive\\/10{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-destructive\\/10{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 10%,transparent)}}.ppb\\:bg-foreground,.ppb\\:bg-foreground\\/90{background-color:var(--text-normal,var(--ppb-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-foreground\\/90{background-color:color-mix(in oklab,var(--text-normal,var(--ppb-foreground)) 90%,transparent)}}.ppb\\:bg-green-500{background-color:var(--ppb-color-green-500)}.ppb\\:bg-muted,.ppb\\:bg-muted\\/5{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-muted\\/5{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 5%,transparent)}}.ppb\\:bg-muted\\/10{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-muted\\/10{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 10%,transparent)}}.ppb\\:bg-muted\\/20{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-muted\\/20{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 20%,transparent)}}.ppb\\:bg-muted\\/30{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-muted\\/30{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 30%,transparent)}}.ppb\\:bg-muted\\/50{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-muted\\/50{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 50%,transparent)}}.ppb\\:bg-orange-500{background-color:var(--ppb-color-orange-500)}.ppb\\:bg-popover{background-color:var(--ppb-popover)}.ppb\\:bg-primary,.ppb\\:bg-primary\\/10{background-color:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-primary\\/10{background-color:color-mix(in oklab,var(--interactive-accent,var(--ppb-primary)) 10%,transparent)}}.ppb\\:bg-primary\\/20{background-color:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-primary\\/20{background-color:color-mix(in oklab,var(--interactive-accent,var(--ppb-primary)) 20%,transparent)}}.ppb\\:bg-primary\\/30{background-color:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-primary\\/30{background-color:color-mix(in oklab,var(--interactive-accent,var(--ppb-primary)) 30%,transparent)}}.ppb\\:bg-secondary,.ppb\\:bg-secondary\\/20{background-color:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-secondary\\/20{background-color:color-mix(in oklab,var(--background-secondary,var(--ppb-secondary)) 20%,transparent)}}.ppb\\:bg-secondary\\/40{background-color:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){.ppb\\:bg-secondary\\/40{background-color:color-mix(in oklab,var(--background-secondary,var(--ppb-secondary)) 40%,transparent)}}.ppb\\:bg-sidebar{background-color:var(--ppb-sidebar)}.ppb\\:bg-sidebar-border{background-color:var(--ppb-sidebar-border)}.ppb\\:bg-transparent{background-color:#0000}.ppb\\:bg-white{background-color:var(--ppb-color-white)}.ppb\\:bg-yellow-500{background-color:var(--ppb-color-yellow-500)}.ppb\\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\\:bg-gradient-to-bl{--tw-gradient-position:to bottom left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\\:bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\\:bg-gradient-to-l{--tw-gradient-position:to left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\\:bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\\:bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\\:from-background{--tw-gradient-from:var(--background-primary,var(--ppb-background));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\\:from-muted\\/3{--tw-gradient-from:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\\:from-muted\\/3{--tw-gradient-from:color-mix(in oklab, var(--background-primary-alt,var(--ppb-muted)) 3%, transparent)}}.ppb\\:from-muted\\/3{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\\:from-muted\\/5{--tw-gradient-from:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\\:from-muted\\/5{--tw-gradient-from:color-mix(in oklab, var(--background-primary-alt,var(--ppb-muted)) 5%, transparent)}}.ppb\\:from-muted\\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\\:from-muted\\/40{--tw-gradient-from:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\\:from-muted\\/40{--tw-gradient-from:color-mix(in oklab, var(--background-primary-alt,var(--ppb-muted)) 40%, transparent)}}.ppb\\:from-muted\\/40{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\\:from-primary\\/5{--tw-gradient-from:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\\:from-primary\\/5{--tw-gradient-from:color-mix(in oklab, var(--interactive-accent,var(--ppb-primary)) 5%, transparent)}}.ppb\\:from-primary\\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\\:from-primary\\/20{--tw-gradient-from:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\\:from-primary\\/20{--tw-gradient-from:color-mix(in oklab, var(--interactive-accent,var(--ppb-primary)) 20%, transparent)}}.ppb\\:from-primary\\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\\:from-transparent{--tw-gradient-from:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\\:via-muted-foreground\\/20{--tw-gradient-via:var(--text-muted,var(--ppb-muted-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\\:via-muted-foreground\\/20{--tw-gradient-via:color-mix(in oklab, var(--text-muted,var(--ppb-muted-foreground)) 20%, transparent)}}.ppb\\:via-muted-foreground\\/20{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ppb\\:via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ppb\\:via-white\\/5{--tw-gradient-via:var(--ppb-color-white)}@supports (color:color-mix(in lab,red,red)){.ppb\\:via-white\\/5{--tw-gradient-via:color-mix(in oklab, var(--ppb-color-white) 5%, transparent)}}.ppb\\:via-white\\/5{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ppb\\:to-accent\\/3{--tw-gradient-to:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\\:to-accent\\/3{--tw-gradient-to:color-mix(in oklab, var(--background-modifier-hover,var(--ppb-accent)) 3%, transparent)}}.ppb\\:to-accent\\/3{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\\:to-accent\\/5{--tw-gradient-to:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\\:to-accent\\/5{--tw-gradient-to:color-mix(in oklab, var(--background-modifier-hover,var(--ppb-accent)) 5%, transparent)}}.ppb\\:to-accent\\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\\:to-secondary\\/10{--tw-gradient-to:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){.ppb\\:to-secondary\\/10{--tw-gradient-to:color-mix(in oklab, var(--background-secondary,var(--ppb-secondary)) 10%, transparent)}}.ppb\\:to-secondary\\/10{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\\:to-secondary\\/20{--tw-gradient-to:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){.ppb\\:to-secondary\\/20{--tw-gradient-to:color-mix(in oklab, var(--background-secondary,var(--ppb-secondary)) 20%, transparent)}}.ppb\\:to-secondary\\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\\:to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\\:bg-repeat-y{background-repeat:repeat-y}.ppb\\:fill-current{fill:currentColor}.ppb\\:fill-primary{fill:var(--interactive-accent,var(--ppb-primary))}.ppb\\:fill-yellow-400{fill:var(--ppb-color-yellow-400)}.ppb\\:object-cover{object-fit:cover}.ppb\\:p-0{padding:calc(var(--ppb-spacing) * 0)}.ppb\\:p-1{padding:calc(var(--ppb-spacing) * 1)}.ppb\\:p-2{padding:calc(var(--ppb-spacing) * 2)}.ppb\\:p-3{padding:calc(var(--ppb-spacing) * 3)}.ppb\\:p-4{padding:calc(var(--ppb-spacing) * 4)}.ppb\\:p-6{padding:calc(var(--ppb-spacing) * 6)}.ppb\\:p-8{padding:calc(var(--ppb-spacing) * 8)}.ppb\\:p-\\[3px\\]{padding:3px}.ppb\\:p-px{padding:1px}.ppb\\:px-\\(--cell-size\\){padding-inline:var(--cell-size)}.ppb\\:px-1{padding-inline:calc(var(--ppb-spacing) * 1)}.ppb\\:px-1\\.5{padding-inline:calc(var(--ppb-spacing) * 1.5)}.ppb\\:px-2{padding-inline:calc(var(--ppb-spacing) * 2)}.ppb\\:px-2\\.5{padding-inline:calc(var(--ppb-spacing) * 2.5)}.ppb\\:px-3{padding-inline:calc(var(--ppb-spacing) * 3)}.ppb\\:px-4{padding-inline:calc(var(--ppb-spacing) * 4)}.ppb\\:px-6{padding-inline:calc(var(--ppb-spacing) * 6)}.ppb\\:px-\\[0px\\]{padding-inline:0}.ppb\\:px-\\[20px\\]{padding-inline:20px}.ppb\\:px-\\[24px\\]{padding-inline:24px}.ppb\\:px-\\[26px\\]{padding-inline:26px}.ppb\\:px-\\[34px\\]{padding-inline:34px}.ppb\\:py-0{padding-block:calc(var(--ppb-spacing) * 0)}.ppb\\:py-0\\.5{padding-block:calc(var(--ppb-spacing) * .5)}.ppb\\:py-1{padding-block:calc(var(--ppb-spacing) * 1)}.ppb\\:py-1\\.5{padding-block:calc(var(--ppb-spacing) * 1.5)}.ppb\\:py-2{padding-block:calc(var(--ppb-spacing) * 2)}.ppb\\:py-3{padding-block:calc(var(--ppb-spacing) * 3)}.ppb\\:py-4{padding-block:calc(var(--ppb-spacing) * 4)}.ppb\\:py-6{padding-block:calc(var(--ppb-spacing) * 6)}.ppb\\:py-8{padding-block:calc(var(--ppb-spacing) * 8)}.ppb\\:py-12{padding-block:calc(var(--ppb-spacing) * 12)}.ppb\\:py-\\[19px\\]{padding-block:19px}.ppb\\:py-\\[37px\\]{padding-block:37px}.ppb\\:py-\\[41px\\]{padding-block:41px}.ppb\\:py-\\[42px\\]{padding-block:42px}.ppb\\:pt-0{padding-top:calc(var(--ppb-spacing) * 0)}.ppb\\:pt-2{padding-top:calc(var(--ppb-spacing) * 2)}.ppb\\:pt-3{padding-top:calc(var(--ppb-spacing) * 3)}.ppb\\:pt-4{padding-top:calc(var(--ppb-spacing) * 4)}.ppb\\:pr-1{padding-right:calc(var(--ppb-spacing) * 1)}.ppb\\:pr-2{padding-right:calc(var(--ppb-spacing) * 2)}.ppb\\:pr-2\\.5{padding-right:calc(var(--ppb-spacing) * 2.5)}.ppb\\:pr-8{padding-right:calc(var(--ppb-spacing) * 8)}.ppb\\:pb-2{padding-bottom:calc(var(--ppb-spacing) * 2)}.ppb\\:pb-3{padding-bottom:calc(var(--ppb-spacing) * 3)}.ppb\\:pb-4{padding-bottom:calc(var(--ppb-spacing) * 4)}.ppb\\:pb-8{padding-bottom:calc(var(--ppb-spacing) * 8)}.ppb\\:pl-2{padding-left:calc(var(--ppb-spacing) * 2)}.ppb\\:pl-4{padding-left:calc(var(--ppb-spacing) * 4)}.ppb\\:pl-8{padding-left:calc(var(--ppb-spacing) * 8)}.ppb\\:pl-9{padding-left:calc(var(--ppb-spacing) * 9)}.ppb\\:text-center{text-align:center}.ppb\\:text-left{text-align:left}.ppb\\:text-right{text-align:right}.ppb\\:align-middle{vertical-align:middle}.ppb\\:align-super{vertical-align:super}.ppb\\:font-mono{font-family:var(--ppb-font-mono)}.ppb\\:text-2xl{font-size:calc(var(--font-ui-large,20px) * 1.2);line-height:var(--tw-leading,var(--ppb-text-2xl--line-height))}.ppb\\:text-4xl{font-size:calc(var(--font-ui-large,20px) * 1.8);line-height:var(--tw-leading,var(--ppb-text-4xl--line-height))}.ppb\\:text-5xl{font-size:calc(var(--font-ui-large,20px) * 2.4);line-height:var(--tw-leading,var(--ppb-text-5xl--line-height))}.ppb\\:text-base{font-size:var(--font-ui-medium,1rem);line-height:var(--tw-leading,var(--ppb-text-base--line-height))}.ppb\\:text-lg{font-size:calc(var(--font-ui-large,20px) * .9);line-height:var(--tw-leading,var(--ppb-text-lg--line-height))}.ppb\\:text-sm{font-size:var(--font-ui-small,.875rem);line-height:var(--tw-leading,var(--ppb-text-sm--line-height))}.ppb\\:text-xl{font-size:var(--font-ui-large,1.25rem);line-height:var(--tw-leading,var(--ppb-text-xl--line-height))}.ppb\\:text-xs{font-size:var(--font-ui-smaller,.75rem);line-height:var(--tw-leading,var(--ppb-text-xs--line-height))}.ppb\\:text-\\[0\\.8rem\\]{font-size:.8rem}.ppb\\:text-\\[9px\\]{font-size:9px}.ppb\\:text-\\[10px\\]{font-size:10px}.ppb\\:text-\\[20px\\]{font-size:20px}.ppb\\:text-\\[22px\\]{font-size:22px}.ppb\\:leading-none{--tw-leading:1;line-height:1}.ppb\\:leading-tight{--tw-leading:var(--ppb-leading-tight);line-height:var(--ppb-leading-tight)}.ppb\\:font-bold{--tw-font-weight:var(--font-bold,700);font-weight:var(--font-bold,700)}.ppb\\:font-medium{--tw-font-weight:var(--font-medium,500);font-weight:var(--font-medium,500)}.ppb\\:font-normal{--tw-font-weight:var(--font-normal,400);font-weight:var(--font-normal,400)}.ppb\\:font-semibold{--tw-font-weight:var(--font-semibold,600);font-weight:var(--font-semibold,600)}.ppb\\:tracking-tight{--tw-tracking:var(--ppb-tracking-tight);letter-spacing:var(--ppb-tracking-tight)}.ppb\\:tracking-widest{--tw-tracking:var(--ppb-tracking-widest);letter-spacing:var(--ppb-tracking-widest)}.ppb\\:text-balance{text-wrap:balance}.ppb\\:break-words{overflow-wrap:break-word}.ppb\\:whitespace-nowrap{white-space:nowrap}.ppb\\:text-accent-foreground{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\\:text-background{color:var(--background-primary,var(--ppb-background))}.ppb\\:text-blue-500{color:var(--ppb-color-blue-500)}.ppb\\:text-card-foreground{color:var(--text-normal,var(--ppb-card-foreground))}.ppb\\:text-chart-1,.ppb\\:text-chart-1\\/60{color:var(--ppb-chart-1)}@supports (color:color-mix(in lab,red,red)){.ppb\\:text-chart-1\\/60{color:color-mix(in oklab,var(--ppb-chart-1) 60%,transparent)}}.ppb\\:text-chart-2{color:var(--ppb-chart-2)}.ppb\\:text-chart-3{color:var(--ppb-chart-3)}.ppb\\:text-current{color:currentColor}.ppb\\:text-destructive{color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\\:text-foreground{color:var(--text-normal,var(--ppb-foreground))}.ppb\\:text-gray-300{color:var(--ppb-color-gray-300)}.ppb\\:text-green-500{color:var(--ppb-color-green-500)}.ppb\\:text-muted-foreground,.ppb\\:text-muted-foreground\\/20{color:var(--text-muted,var(--ppb-muted-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\\:text-muted-foreground\\/20{color:color-mix(in oklab,var(--text-muted,var(--ppb-muted-foreground)) 20%,transparent)}}.ppb\\:text-muted-foreground\\/30{color:var(--text-muted,var(--ppb-muted-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\\:text-muted-foreground\\/30{color:color-mix(in oklab,var(--text-muted,var(--ppb-muted-foreground)) 30%,transparent)}}.ppb\\:text-muted-foreground\\/80{color:var(--text-muted,var(--ppb-muted-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\\:text-muted-foreground\\/80{color:color-mix(in oklab,var(--text-muted,var(--ppb-muted-foreground)) 80%,transparent)}}.ppb\\:text-popover-foreground{color:var(--ppb-popover-foreground)}.ppb\\:text-primary{color:var(--interactive-accent,var(--ppb-primary))}.ppb\\:text-primary-foreground{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\\:text-secondary-foreground{color:var(--text-normal,var(--ppb-secondary-foreground))}.ppb\\:text-sidebar-foreground,.ppb\\:text-sidebar-foreground\\/70{color:var(--ppb-sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.ppb\\:text-sidebar-foreground\\/70{color:color-mix(in oklab,var(--ppb-sidebar-foreground) 70%,transparent)}}.ppb\\:text-white{color:var(--ppb-color-white)}.ppb\\:text-yellow-400{color:var(--ppb-color-yellow-400)}.ppb\\:text-yellow-500{color:var(--ppb-color-yellow-500)}.ppb\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.ppb\\:line-through{text-decoration-line:line-through}.ppb\\:underline{text-decoration-line:underline}.ppb\\:underline-offset-4{text-underline-offset:4px}.ppb\\:opacity-0{opacity:0}.ppb\\:opacity-10{opacity:.1}.ppb\\:opacity-20{opacity:.2}.ppb\\:opacity-30{opacity:.3}.ppb\\:opacity-40{opacity:.4}.ppb\\:opacity-50{opacity:.5}.ppb\\:opacity-60{opacity:.6}.ppb\\:opacity-70{opacity:.7}.ppb\\:opacity-75{opacity:.75}.ppb\\:opacity-80{opacity:.8}.ppb\\:shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-border\\)\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:ring-ring\\/50{--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\\:ring-ring\\/50{--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}.ppb\\:ring-sidebar-ring{--tw-ring-color:var(--ppb-sidebar-ring)}.ppb\\:ring-offset-background{--tw-ring-offset-color:var(--background-primary,var(--ppb-background))}.ppb\\:outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\\:outline-hidden{outline-offset:2px;outline:2px solid #0000}}.ppb\\:blur-3xl{--tw-blur:blur(var(--ppb-blur-3xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.ppb\\:blur-xl{--tw-blur:blur(var(--ppb-blur-xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.ppb\\:backdrop-blur-sm{--tw-backdrop-blur:blur(var(--ppb-blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.ppb\\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\\:transition-\\[color\\,box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\\:transition-\\[left\\,right\\,width\\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\\:transition-\\[margin\\,opacity\\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\\:transition-\\[width\\,height\\,padding\\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\\:transition-\\[width\\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\\:transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\\:transition-none{transition-property:none}.ppb\\:delay-1000{transition-delay:1s}.ppb\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.ppb\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.ppb\\:duration-500{--tw-duration:.5s;transition-duration:.5s}.ppb\\:duration-700{--tw-duration:.7s;transition-duration:.7s}.ppb\\:duration-1000{--tw-duration:1s;transition-duration:1s}.ppb\\:ease-in-out{--tw-ease:var(--ppb-ease-in-out);transition-timing-function:var(--ppb-ease-in-out)}.ppb\\:ease-linear{--tw-ease:linear;transition-timing-function:linear}.ppb\\:ease-out{--tw-ease:var(--ppb-ease-out);transition-timing-function:var(--ppb-ease-out)}.ppb\\:delay-1000{--tw-animation-delay:1s;animation-delay:1s}.ppb\\:fade-in-0{--tw-enter-opacity:0}.ppb\\:outline-none{--tw-outline-style:none;outline-style:none}.ppb\\:select-none{-webkit-user-select:none;user-select:none}.ppb\\:zoom-in-95{--tw-enter-scale:.95}.ppb\\:\\[--cell-size\\:--spacing\\(8\\)\\]{--cell-size:calc(var(--ppb-spacing) * 8)}.ppb\\:group-focus-within\\/menu-item\\:opacity-100:is(:where(.ppb\\:group\\/menu-item):focus-within *){opacity:1}@media(hover:hover){.ppb\\:group-hover\\/menu-item\\:opacity-100:is(:where(.ppb\\:group\\/menu-item):hover *){opacity:1}}.ppb\\:group-has-data-\\[sidebar\\=menu-action\\]\\/menu-item\\:pr-8:is(:where(.ppb\\:group\\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--ppb-spacing) * 8)}.ppb\\:group-data-\\[collapsible\\=icon\\]\\:-mt-8:is(:where(.ppb\\:group)[data-collapsible=icon] *){margin-top:calc(var(--ppb-spacing) * -8)}.ppb\\:group-data-\\[collapsible\\=icon\\]\\:hidden:is(:where(.ppb\\:group)[data-collapsible=icon] *){display:none}.ppb\\:group-data-\\[collapsible\\=icon\\]\\:size-8\\!:is(:where(.ppb\\:group)[data-collapsible=icon] *){width:calc(var(--ppb-spacing) * 8)!important;height:calc(var(--ppb-spacing) * 8)!important}.ppb\\:group-data-\\[collapsible\\=icon\\]\\:w-\\(--sidebar-width-icon\\):is(:where(.ppb\\:group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.ppb\\:group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\)\\]:is(:where(.ppb\\:group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--ppb-spacing) * 4)))}.ppb\\:group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)\\+\\(--spacing\\(4\\)\\)\\+2px\\)\\]:is(:where(.ppb\\:group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--ppb-spacing) * 4)) + 2px)}.ppb\\:group-data-\\[collapsible\\=icon\\]\\:overflow-hidden:is(:where(.ppb\\:group)[data-collapsible=icon] *){overflow:hidden}.ppb\\:group-data-\\[collapsible\\=icon\\]\\:p-0\\!:is(:where(.ppb\\:group)[data-collapsible=icon] *){padding:calc(var(--ppb-spacing) * 0)!important}.ppb\\:group-data-\\[collapsible\\=icon\\]\\:p-2\\!:is(:where(.ppb\\:group)[data-collapsible=icon] *){padding:calc(var(--ppb-spacing) * 2)!important}.ppb\\:group-data-\\[collapsible\\=icon\\]\\:opacity-0:is(:where(.ppb\\:group)[data-collapsible=icon] *){opacity:0}.ppb\\:group-data-\\[collapsible\\=offcanvas\\]\\:right-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\]:is(:where(.ppb\\:group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width) * -1)}.ppb\\:group-data-\\[collapsible\\=offcanvas\\]\\:left-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\]:is(:where(.ppb\\:group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width) * -1)}.ppb\\:group-data-\\[collapsible\\=offcanvas\\]\\:w-0:is(:where(.ppb\\:group)[data-collapsible=offcanvas] *){width:calc(var(--ppb-spacing) * 0)}.ppb\\:group-data-\\[collapsible\\=offcanvas\\]\\:translate-x-0:is(:where(.ppb\\:group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--ppb-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:group-data-\\[disabled\\=true\\]\\:pointer-events-none:is(:where(.ppb\\:group)[data-disabled=true] *){pointer-events:none}.ppb\\:group-data-\\[disabled\\=true\\]\\:opacity-50:is(:where(.ppb\\:group)[data-disabled=true] *){opacity:.5}.ppb\\:group-data-\\[focused\\=true\\]\\/day\\:relative:is(:where(.ppb\\:group\\/day)[data-focused=true] *){position:relative}.ppb\\:group-data-\\[focused\\=true\\]\\/day\\:z-10:is(:where(.ppb\\:group\\/day)[data-focused=true] *){z-index:10}.ppb\\:group-data-\\[focused\\=true\\]\\/day\\:border-ring:is(:where(.ppb\\:group\\/day)[data-focused=true] *){border-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\\:group-data-\\[focused\\=true\\]\\/day\\:ring-\\[3px\\]:is(:where(.ppb\\:group\\/day)[data-focused=true] *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:group-data-\\[focused\\=true\\]\\/day\\:ring-ring\\/50:is(:where(.ppb\\:group\\/day)[data-focused=true] *){--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\\:group-data-\\[focused\\=true\\]\\/day\\:ring-ring\\/50:is(:where(.ppb\\:group\\/day)[data-focused=true] *){--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}.ppb\\:group-data-\\[side\\=left\\]\\:-right-4:is(:where(.ppb\\:group)[data-side=left] *){right:calc(var(--ppb-spacing) * -4)}.ppb\\:group-data-\\[side\\=left\\]\\:border-r:is(:where(.ppb\\:group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.ppb\\:group-data-\\[side\\=right\\]\\:left-0:is(:where(.ppb\\:group)[data-side=right] *){left:calc(var(--ppb-spacing) * 0)}.ppb\\:group-data-\\[side\\=right\\]\\:rotate-180:is(:where(.ppb\\:group)[data-side=right] *){rotate:180deg}.ppb\\:group-data-\\[side\\=right\\]\\:border-l:is(:where(.ppb\\:group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\\:group-data-\\[state\\=open\\]\\:rotate-180:is(:where(.ppb\\:group)[data-state=open] *){rotate:180deg}.ppb\\:group-data-\\[variant\\=floating\\]\\:rounded-lg:is(:where(.ppb\\:group)[data-variant=floating] *){border-radius:var(--radius-l,var(--ppb-radius))}.ppb\\:group-data-\\[variant\\=floating\\]\\:border:is(:where(.ppb\\:group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.ppb\\:group-data-\\[variant\\=floating\\]\\:border-sidebar-border:is(:where(.ppb\\:group)[data-variant=floating] *){border-color:var(--ppb-sidebar-border)}.ppb\\:group-data-\\[variant\\=floating\\]\\:shadow-sm:is(:where(.ppb\\:group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:group-data-\\[vaul-drawer-direction\\=bottom\\]\\/drawer-content\\:block:is(:where(.ppb\\:group\\/drawer-content)[data-vaul-drawer-direction=bottom] *){display:block}.ppb\\:group-data-\\[vaul-drawer-direction\\=bottom\\]\\/drawer-content\\:text-center:is(:where(.ppb\\:group\\/drawer-content)[data-vaul-drawer-direction=bottom] *),.ppb\\:group-data-\\[vaul-drawer-direction\\=top\\]\\/drawer-content\\:text-center:is(:where(.ppb\\:group\\/drawer-content)[data-vaul-drawer-direction=top] *){text-align:center}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:top-full:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *){top:100%}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:mt-1\\.5:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *){margin-top:calc(var(--ppb-spacing) * 1.5)}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:overflow-hidden:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *){overflow:hidden}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:rounded-md:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *){border-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:border:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *){border-style:var(--tw-border-style);border-width:1px}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:bg-popover:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *){background-color:var(--ppb-popover)}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:text-popover-foreground:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *){color:var(--ppb-popover-foreground)}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:shadow:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:duration-200:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *){--tw-duration:.2s;transition-duration:.2s}@media(hover:hover){.ppb\\:peer-hover\\/menu-button\\:text-sidebar-accent-foreground:is(:where(.ppb\\:peer\\/menu-button):hover~*){color:var(--ppb-sidebar-accent-foreground)}}.ppb\\:peer-disabled\\:cursor-not-allowed:is(:where(.ppb\\:peer):disabled~*){cursor:not-allowed}.ppb\\:peer-disabled\\:opacity-50:is(:where(.ppb\\:peer):disabled~*){opacity:.5}.ppb\\:peer-data-\\[active\\=true\\]\\/menu-button\\:text-sidebar-accent-foreground:is(:where(.ppb\\:peer\\/menu-button)[data-active=true]~*){color:var(--ppb-sidebar-accent-foreground)}.ppb\\:peer-data-\\[size\\=default\\]\\/menu-button\\:top-1\\.5:is(:where(.ppb\\:peer\\/menu-button)[data-size=default]~*){top:calc(var(--ppb-spacing) * 1.5)}.ppb\\:peer-data-\\[size\\=lg\\]\\/menu-button\\:top-2\\.5:is(:where(.ppb\\:peer\\/menu-button)[data-size=lg]~*){top:calc(var(--ppb-spacing) * 2.5)}.ppb\\:peer-data-\\[size\\=sm\\]\\/menu-button\\:top-1:is(:where(.ppb\\:peer\\/menu-button)[data-size=sm]~*){top:calc(var(--ppb-spacing) * 1)}.ppb\\:selection\\:bg-primary ::selection{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\\:selection\\:bg-primary::selection{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\\:selection\\:text-primary-foreground ::selection{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\\:selection\\:text-primary-foreground::selection{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\\:file\\:inline-flex::file-selector-button{display:inline-flex}.ppb\\:file\\:h-7::file-selector-button{height:calc(var(--ppb-spacing) * 7)}.ppb\\:file\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.ppb\\:file\\:bg-transparent::file-selector-button{background-color:#0000}.ppb\\:file\\:text-sm::file-selector-button{font-size:var(--font-ui-small,.875rem);line-height:var(--tw-leading,var(--ppb-text-sm--line-height))}.ppb\\:file\\:font-medium::file-selector-button{--tw-font-weight:var(--font-medium,500);font-weight:var(--font-medium,500)}.ppb\\:file\\:text-foreground::file-selector-button{color:var(--text-normal,var(--ppb-foreground))}.ppb\\:placeholder\\:text-muted-foreground::placeholder{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\\:after\\:absolute:after{content:var(--tw-content);position:absolute}.ppb\\:after\\:-inset-2:after{content:var(--tw-content);inset:calc(var(--ppb-spacing) * -2)}.ppb\\:after\\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--ppb-spacing) * 0)}.ppb\\:after\\:left-1\\/2:after{content:var(--tw-content);left:50%}.ppb\\:after\\:w-1:after{content:var(--tw-content);width:calc(var(--ppb-spacing) * 1)}.ppb\\:after\\:w-\\[2px\\]:after{content:var(--tw-content);width:2px}.ppb\\:after\\:-translate-x-1\\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:group-data-\\[collapsible\\=offcanvas\\]\\:after\\:left-full:is(:where(.ppb\\:group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.ppb\\:first\\:rounded-l-md:first-child{border-top-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\\:first\\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\\:last\\:rounded-r-md:last-child{border-top-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\\:last\\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ppb\\:focus\\:z-10:focus{z-index:10}.ppb\\:focus\\:bg-accent:focus{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\\:focus\\:text-accent-foreground:focus{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\\:focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:focus\\:ring-ring:focus{--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\\:focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ppb\\:focus\\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\\:focus\\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.ppb\\:focus-visible\\:z-10:focus-visible{z-index:10}.ppb\\:focus-visible\\:border-ring:focus-visible{border-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\\:focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:focus-visible\\:ring-4:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:focus-visible\\:ring-\\[3px\\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\\:focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 20%, transparent)}}.ppb\\:focus-visible\\:ring-ring:focus-visible,.ppb\\:focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\\:focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}.ppb\\:focus-visible\\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ppb\\:focus-visible\\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\\:focus-visible\\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.ppb\\:focus-visible\\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.ppb\\:focus-visible\\:outline-ring:focus-visible{outline-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\\:active\\:bg-sidebar-accent:active{background-color:var(--ppb-sidebar-accent)}.ppb\\:active\\:text-sidebar-accent-foreground:active{color:var(--ppb-sidebar-accent-foreground)}.ppb\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.ppb\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.ppb\\:disabled\\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .ppb\\:in-data-\\[side\\=left\\]\\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .ppb\\:in-data-\\[side\\=right\\]\\:cursor-e-resize{cursor:e-resize}.ppb\\:has-focus\\:border-ring:has(:focus){border-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\\:has-focus\\:ring-\\[3px\\]:has(:focus){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:has-focus\\:ring-ring\\/50:has(:focus){--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\\:has-focus\\:ring-ring\\/50:has(:focus){--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}.ppb\\:has-data-\\[slot\\=card-action\\]\\:grid-cols-\\[1fr_auto\\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.ppb\\:has-data-\\[variant\\=inset\\]\\:bg-sidebar:has([data-variant=inset]){background-color:var(--ppb-sidebar)}.ppb\\:has-\\[\\>svg\\]\\:grid-cols-\\[calc\\(var\\(--spacing\\)\\*4\\)_1fr\\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.ppb\\:has-\\[\\>svg\\]\\:gap-x-3:has(>svg){column-gap:calc(var(--ppb-spacing) * 3)}.ppb\\:has-\\[\\>svg\\]\\:px-2\\.5:has(>svg){padding-inline:calc(var(--ppb-spacing) * 2.5)}.ppb\\:has-\\[\\>svg\\]\\:px-3:has(>svg){padding-inline:calc(var(--ppb-spacing) * 3)}.ppb\\:has-\\[\\>svg\\]\\:px-4:has(>svg){padding-inline:calc(var(--ppb-spacing) * 4)}.ppb\\:aria-disabled\\:pointer-events-none[aria-disabled=true]{pointer-events:none}.ppb\\:aria-disabled\\:opacity-50[aria-disabled=true]{opacity:.5}.ppb\\:aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\\:aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\\:aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 20%, transparent)}}.ppb\\:aria-selected\\:text-muted-foreground[aria-selected=true]{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\\:data-\\[active\\=true\\]\\:z-10[data-active=true]{z-index:10}.ppb\\:data-\\[active\\=true\\]\\:border-ring[data-active=true]{border-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\\:data-\\[active\\=true\\]\\:bg-accent\\/50[data-active=true]{background-color:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\\:data-\\[active\\=true\\]\\:bg-accent\\/50[data-active=true]{background-color:color-mix(in oklab,var(--background-modifier-hover,var(--ppb-accent)) 50%,transparent)}}.ppb\\:data-\\[active\\=true\\]\\:bg-sidebar-accent[data-active=true]{background-color:var(--ppb-sidebar-accent)}.ppb\\:data-\\[active\\=true\\]\\:font-medium[data-active=true]{--tw-font-weight:var(--font-medium,500);font-weight:var(--font-medium,500)}.ppb\\:data-\\[active\\=true\\]\\:text-accent-foreground[data-active=true]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\\:data-\\[active\\=true\\]\\:text-sidebar-accent-foreground[data-active=true]{color:var(--ppb-sidebar-accent-foreground)}.ppb\\:data-\\[active\\=true\\]\\:ring-\\[3px\\][data-active=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:data-\\[active\\=true\\]\\:ring-ring\\/50[data-active=true]{--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\\:data-\\[active\\=true\\]\\:ring-ring\\/50[data-active=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}@media(hover:hover){.ppb\\:data-\\[active\\=true\\]\\:hover\\:bg-accent[data-active=true]:hover{background-color:var(--background-modifier-hover,var(--ppb-accent))}}.ppb\\:data-\\[active\\=true\\]\\:focus\\:bg-accent[data-active=true]:focus{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\\:data-\\[active\\=true\\]\\:aria-invalid\\:border-destructive[data-active=true][aria-invalid=true]{border-color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\\:data-\\[active\\=true\\]\\:aria-invalid\\:ring-destructive\\/20[data-active=true][aria-invalid=true]{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\\:data-\\[active\\=true\\]\\:aria-invalid\\:ring-destructive\\/20[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 20%, transparent)}}.ppb\\:data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.ppb\\:data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.ppb\\:data-\\[disabled\\=true\\]\\:pointer-events-none[data-disabled=true]{pointer-events:none}.ppb\\:data-\\[disabled\\=true\\]\\:opacity-50[data-disabled=true]{opacity:.5}.ppb\\:data-\\[error\\=true\\]\\:text-destructive[data-error=true]{color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\\:data-\\[inset\\]\\:pl-8[data-inset]{padding-left:calc(var(--ppb-spacing) * 8)}.ppb\\:data-\\[motion\\=from-end\\]\\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x:calc(52*var(--spacing))}.ppb\\:data-\\[motion\\=from-start\\]\\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x:calc(52*var(--spacing)*-1)}.ppb\\:data-\\[motion\\=to-end\\]\\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x:calc(52*var(--spacing))}.ppb\\:data-\\[motion\\=to-start\\]\\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x:calc(52*var(--spacing)*-1)}.ppb\\:data-\\[motion\\^\\=from-\\]\\:animate-in[data-motion^=from-]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\\:data-\\[motion\\^\\=from-\\]\\:fade-in[data-motion^=from-]{--tw-enter-opacity:0}.ppb\\:data-\\[motion\\^\\=to-\\]\\:animate-out[data-motion^=to-]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\\:data-\\[motion\\^\\=to-\\]\\:fade-out[data-motion^=to-]{--tw-exit-opacity:0}.ppb\\:data-\\[orientation\\=horizontal\\]\\:h-1\\.5[data-orientation=horizontal]{height:calc(var(--ppb-spacing) * 1.5)}.ppb\\:data-\\[orientation\\=horizontal\\]\\:h-full[data-orientation=horizontal]{height:100%}.ppb\\:data-\\[orientation\\=horizontal\\]\\:h-px[data-orientation=horizontal]{height:1px}.ppb\\:data-\\[orientation\\=horizontal\\]\\:w-full[data-orientation=horizontal]{width:100%}.ppb\\:data-\\[orientation\\=vertical\\]\\:h-full[data-orientation=vertical]{height:100%}.ppb\\:data-\\[orientation\\=vertical\\]\\:min-h-44[data-orientation=vertical]{min-height:calc(var(--ppb-spacing) * 44)}.ppb\\:data-\\[orientation\\=vertical\\]\\:w-1\\.5[data-orientation=vertical]{width:calc(var(--ppb-spacing) * 1.5)}.ppb\\:data-\\[orientation\\=vertical\\]\\:w-auto[data-orientation=vertical]{width:auto}.ppb\\:data-\\[orientation\\=vertical\\]\\:w-full[data-orientation=vertical]{width:100%}.ppb\\:data-\\[orientation\\=vertical\\]\\:w-px[data-orientation=vertical]{width:1px}.ppb\\:data-\\[orientation\\=vertical\\]\\:flex-col[data-orientation=vertical]{flex-direction:column}.ppb\\:data-\\[panel-group-direction\\=vertical\\]\\:h-px[data-panel-group-direction=vertical]{height:1px}.ppb\\:data-\\[panel-group-direction\\=vertical\\]\\:w-full[data-panel-group-direction=vertical]{width:100%}.ppb\\:data-\\[panel-group-direction\\=vertical\\]\\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.ppb\\:data-\\[panel-group-direction\\=vertical\\]\\:after\\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--ppb-spacing) * 0)}.ppb\\:data-\\[panel-group-direction\\=vertical\\]\\:after\\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--ppb-spacing) * 1)}.ppb\\:data-\\[panel-group-direction\\=vertical\\]\\:after\\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.ppb\\:data-\\[panel-group-direction\\=vertical\\]\\:after\\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--ppb-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:data-\\[panel-group-direction\\=vertical\\]\\:after\\:-translate-y-1\\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:data-\\[placeholder\\]\\:text-muted-foreground[data-placeholder]{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\\:data-\\[range-end\\=true\\]\\:rounded-md[data-range-end=true]{border-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\\:data-\\[range-end\\=true\\]\\:rounded-r-md[data-range-end=true]{border-top-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\\:data-\\[range-end\\=true\\]\\:bg-primary[data-range-end=true]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\\:data-\\[range-end\\=true\\]\\:text-primary-foreground[data-range-end=true]{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\\:data-\\[range-middle\\=true\\]\\:rounded-none[data-range-middle=true]{border-radius:0}.ppb\\:data-\\[range-middle\\=true\\]\\:bg-accent[data-range-middle=true]{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\\:data-\\[range-middle\\=true\\]\\:text-accent-foreground[data-range-middle=true]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\\:data-\\[range-start\\=true\\]\\:rounded-md[data-range-start=true]{border-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\\:data-\\[range-start\\=true\\]\\:rounded-l-md[data-range-start=true]{border-top-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\\:data-\\[range-start\\=true\\]\\:bg-primary[data-range-start=true]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\\:data-\\[range-start\\=true\\]\\:text-primary-foreground[data-range-start=true]{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\\:data-\\[selected-single\\=true\\]\\:bg-primary[data-selected-single=true]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\\:data-\\[selected-single\\=true\\]\\:text-primary-foreground[data-selected-single=true]{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\\:data-\\[selected\\=true\\]\\:rounded-none[data-selected=true]{border-radius:0}.ppb\\:data-\\[selected\\=true\\]\\:bg-accent[data-selected=true]{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\\:data-\\[selected\\=true\\]\\:text-accent-foreground[data-selected=true]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\\:data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--ppb-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.ppb\\:data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--ppb-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.ppb\\:data-\\[side\\=right\\]\\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--ppb-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.ppb\\:data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--ppb-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.ppb\\:data-\\[size\\=default\\]\\:h-9[data-size=default]{height:calc(var(--ppb-spacing) * 9)}.ppb\\:data-\\[size\\=sm\\]\\:h-8[data-size=sm]{height:calc(var(--ppb-spacing) * 8)}:is(.ppb\\:\\*\\:data-\\[slot\\=alert-description\\]\\:text-destructive\\/90>*)[data-slot=alert-description]{color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){:is(.ppb\\:\\*\\:data-\\[slot\\=alert-description\\]\\:text-destructive\\/90>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 90%,transparent)}}:is(.ppb\\:\\*\\*\\:data-\\[slot\\=command-input-wrapper\\]\\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--ppb-spacing) * 12)}:is(.ppb\\:\\*\\*\\:data-\\[slot\\=navigation-menu-link\\]\\:focus\\:ring-0 *)[data-slot=navigation-menu-link]:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.ppb\\:\\*\\*\\:data-\\[slot\\=navigation-menu-link\\]\\:focus\\:outline-none *)[data-slot=navigation-menu-link]:focus{--tw-outline-style:none;outline-style:none}:is(.ppb\\:\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.ppb\\:\\*\\:data-\\[slot\\=select-value\\]\\:flex>*)[data-slot=select-value]{display:flex}:is(.ppb\\:\\*\\:data-\\[slot\\=select-value\\]\\:items-center>*)[data-slot=select-value]{align-items:center}:is(.ppb\\:\\*\\:data-\\[slot\\=select-value\\]\\:gap-2>*)[data-slot=select-value]{gap:calc(var(--ppb-spacing) * 2)}.ppb\\:data-\\[state\\=active\\]\\:bg-background[data-state=active]{background-color:var(--background-primary,var(--ppb-background))}.ppb\\:data-\\[state\\=active\\]\\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:data-\\[state\\=checked\\]\\:translate-x-\\[calc\\(100\\%-2px\\)\\][data-state=checked]{--tw-translate-x: calc(100% - 2px) ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:data-\\[state\\=checked\\]\\:border-primary[data-state=checked]{border-color:var(--interactive-accent,var(--ppb-primary))}.ppb\\:data-\\[state\\=checked\\]\\:bg-primary[data-state=checked]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\\:data-\\[state\\=checked\\]\\:text-primary-foreground[data-state=checked]{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\\:data-\\[state\\=closed\\]\\:animate-accordion-up[data-state=closed]{animation:accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\\:data-\\[state\\=closed\\]\\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\\:data-\\[state\\=closed\\]\\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.ppb\\:data-\\[state\\=closed\\]\\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.ppb\\:data-\\[state\\=closed\\]\\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.ppb\\:data-\\[state\\=closed\\]\\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.ppb\\:data-\\[state\\=closed\\]\\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.ppb\\:data-\\[state\\=closed\\]\\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.ppb\\:data-\\[state\\=closed\\]\\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:data-\\[state\\=closed\\]\\:animate-out:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *)[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:data-\\[state\\=closed\\]\\:fade-out-0:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-opacity:0}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:data-\\[state\\=closed\\]\\:zoom-out-95:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-scale:.95}.ppb\\:data-\\[state\\=hidden\\]\\:animate-out[data-state=hidden]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\\:data-\\[state\\=hidden\\]\\:fade-out[data-state=hidden]{--tw-exit-opacity:0}.ppb\\:data-\\[state\\=on\\]\\:bg-accent[data-state=on]{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\\:data-\\[state\\=on\\]\\:text-accent-foreground[data-state=on]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\\:data-\\[state\\=open\\]\\:animate-accordion-down[data-state=open]{animation:accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\\:data-\\[state\\=open\\]\\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\\:data-\\[state\\=open\\]\\:bg-accent[data-state=open],.ppb\\:data-\\[state\\=open\\]\\:bg-accent\\/50[data-state=open]{background-color:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\\:data-\\[state\\=open\\]\\:bg-accent\\/50[data-state=open]{background-color:color-mix(in oklab,var(--background-modifier-hover,var(--ppb-accent)) 50%,transparent)}}.ppb\\:data-\\[state\\=open\\]\\:bg-secondary[data-state=open]{background-color:var(--background-secondary,var(--ppb-secondary))}.ppb\\:data-\\[state\\=open\\]\\:text-accent-foreground[data-state=open]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\\:data-\\[state\\=open\\]\\:text-muted-foreground[data-state=open]{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\\:data-\\[state\\=open\\]\\:opacity-100[data-state=open]{opacity:1}.ppb\\:data-\\[state\\=open\\]\\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.ppb\\:data-\\[state\\=open\\]\\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.ppb\\:data-\\[state\\=open\\]\\:zoom-in-90[data-state=open]{--tw-enter-scale:.9}.ppb\\:data-\\[state\\=open\\]\\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.ppb\\:data-\\[state\\=open\\]\\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.ppb\\:data-\\[state\\=open\\]\\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.ppb\\:data-\\[state\\=open\\]\\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.ppb\\:data-\\[state\\=open\\]\\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:data-\\[state\\=open\\]\\:animate-in:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *)[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:data-\\[state\\=open\\]\\:fade-in-0:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-opacity:0}.ppb\\:group-data-\\[viewport\\=false\\]\\/navigation-menu\\:data-\\[state\\=open\\]\\:zoom-in-95:is(:where(.ppb\\:group\\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-scale:.95}@media(hover:hover){.ppb\\:data-\\[state\\=open\\]\\:hover\\:bg-accent[data-state=open]:hover{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\\:data-\\[state\\=open\\]\\:hover\\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--ppb-sidebar-accent)}.ppb\\:data-\\[state\\=open\\]\\:hover\\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--ppb-sidebar-accent-foreground)}}.ppb\\:data-\\[state\\=open\\]\\:focus\\:bg-accent[data-state=open]:focus{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\\:data-\\[state\\=selected\\]\\:bg-muted[data-state=selected]{background-color:var(--background-primary-alt,var(--ppb-muted))}.ppb\\:data-\\[state\\=unchecked\\]\\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--ppb-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:data-\\[state\\=unchecked\\]\\:bg-input[data-state=unchecked]{background-color:var(--background-modifier-border,var(--ppb-input))}.ppb\\:data-\\[state\\=visible\\]\\:animate-in[data-state=visible]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\\:data-\\[state\\=visible\\]\\:fade-in[data-state=visible]{--tw-enter-opacity:0}.ppb\\:data-\\[variant\\=destructive\\]\\:text-destructive[data-variant=destructive]{color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10[data-variant=destructive]:focus{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 10%,transparent)}}.ppb\\:data-\\[variant\\=destructive\\]\\:focus\\:text-destructive[data-variant=destructive]:focus{color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\\:data-\\[variant\\=outline\\]\\:border-l-0[data-variant=outline]{border-left-style:var(--tw-border-style);border-left-width:0}.ppb\\:data-\\[variant\\=outline\\]\\:shadow-xs[data-variant=outline]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:data-\\[variant\\=outline\\]\\:first\\:border-l[data-variant=outline]:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\\:data-\\[vaul-drawer-direction\\=bottom\\]\\:inset-x-0[data-vaul-drawer-direction=bottom]{inset-inline:calc(var(--ppb-spacing) * 0)}.ppb\\:data-\\[vaul-drawer-direction\\=bottom\\]\\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:calc(var(--ppb-spacing) * 0)}.ppb\\:data-\\[vaul-drawer-direction\\=bottom\\]\\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:calc(var(--ppb-spacing) * 24)}.ppb\\:data-\\[vaul-drawer-direction\\=bottom\\]\\:max-h-\\[80vh\\][data-vaul-drawer-direction=bottom]{max-height:80vh}.ppb\\:data-\\[vaul-drawer-direction\\=bottom\\]\\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius-l,var(--ppb-radius));border-top-right-radius:var(--radius-l,var(--ppb-radius))}.ppb\\:data-\\[vaul-drawer-direction\\=bottom\\]\\:border-t[data-vaul-drawer-direction=bottom]{border-top-style:var(--tw-border-style);border-top-width:1px}.ppb\\:data-\\[vaul-drawer-direction\\=left\\]\\:inset-y-0[data-vaul-drawer-direction=left]{inset-block:calc(var(--ppb-spacing) * 0)}.ppb\\:data-\\[vaul-drawer-direction\\=left\\]\\:left-0[data-vaul-drawer-direction=left]{left:calc(var(--ppb-spacing) * 0)}.ppb\\:data-\\[vaul-drawer-direction\\=left\\]\\:w-3\\/4[data-vaul-drawer-direction=left]{width:75%}.ppb\\:data-\\[vaul-drawer-direction\\=left\\]\\:border-r[data-vaul-drawer-direction=left]{border-right-style:var(--tw-border-style);border-right-width:1px}.ppb\\:data-\\[vaul-drawer-direction\\=right\\]\\:inset-y-0[data-vaul-drawer-direction=right]{inset-block:calc(var(--ppb-spacing) * 0)}.ppb\\:data-\\[vaul-drawer-direction\\=right\\]\\:right-0[data-vaul-drawer-direction=right]{right:calc(var(--ppb-spacing) * 0)}.ppb\\:data-\\[vaul-drawer-direction\\=right\\]\\:w-3\\/4[data-vaul-drawer-direction=right]{width:75%}.ppb\\:data-\\[vaul-drawer-direction\\=right\\]\\:border-l[data-vaul-drawer-direction=right]{border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\\:data-\\[vaul-drawer-direction\\=top\\]\\:inset-x-0[data-vaul-drawer-direction=top]{inset-inline:calc(var(--ppb-spacing) * 0)}.ppb\\:data-\\[vaul-drawer-direction\\=top\\]\\:top-0[data-vaul-drawer-direction=top]{top:calc(var(--ppb-spacing) * 0)}.ppb\\:data-\\[vaul-drawer-direction\\=top\\]\\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:calc(var(--ppb-spacing) * 24)}.ppb\\:data-\\[vaul-drawer-direction\\=top\\]\\:max-h-\\[80vh\\][data-vaul-drawer-direction=top]{max-height:80vh}.ppb\\:data-\\[vaul-drawer-direction\\=top\\]\\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius-l,var(--ppb-radius));border-bottom-left-radius:var(--radius-l,var(--ppb-radius))}.ppb\\:data-\\[vaul-drawer-direction\\=top\\]\\:border-b[data-vaul-drawer-direction=top]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}@media(min-width:40rem){.ppb\\:sm\\:block{display:block}.ppb\\:sm\\:flex{display:flex}.ppb\\:sm\\:max-w-lg{max-width:var(--ppb-container-lg)}.ppb\\:sm\\:max-w-sm{max-width:var(--ppb-container-sm)}.ppb\\:sm\\:flex-row{flex-direction:row}.ppb\\:sm\\:justify-end{justify-content:flex-end}.ppb\\:sm\\:gap-2\\.5{gap:calc(var(--ppb-spacing) * 2.5)}.ppb\\:sm\\:pr-2\\.5{padding-right:calc(var(--ppb-spacing) * 2.5)}.ppb\\:sm\\:pl-2\\.5{padding-left:calc(var(--ppb-spacing) * 2.5)}.ppb\\:sm\\:text-left{text-align:left}.ppb\\:data-\\[vaul-drawer-direction\\=left\\]\\:sm\\:max-w-sm[data-vaul-drawer-direction=left],.ppb\\:data-\\[vaul-drawer-direction\\=right\\]\\:sm\\:max-w-sm[data-vaul-drawer-direction=right]{max-width:var(--ppb-container-sm)}}@media(min-width:48rem){.ppb\\:md\\:absolute{position:absolute}.ppb\\:md\\:block{display:block}.ppb\\:md\\:flex{display:flex}.ppb\\:md\\:w-\\[var\\(--radix-navigation-menu-viewport-width\\)\\]{width:var(--radix-navigation-menu-viewport-width)}.ppb\\:md\\:w-auto{width:auto}.ppb\\:md\\:flex-row{flex-direction:row}.ppb\\:md\\:gap-1\\.5{gap:calc(var(--ppb-spacing) * 1.5)}.ppb\\:md\\:text-left{text-align:left}.ppb\\:md\\:text-sm{font-size:var(--font-ui-small,.875rem);line-height:var(--tw-leading,var(--ppb-text-sm--line-height))}.ppb\\:md\\:opacity-0{opacity:0}.ppb\\:md\\:peer-data-\\[variant\\=inset\\]\\:m-2:is(:where(.ppb\\:peer)[data-variant=inset]~*){margin:calc(var(--ppb-spacing) * 2)}.ppb\\:md\\:peer-data-\\[variant\\=inset\\]\\:ml-0:is(:where(.ppb\\:peer)[data-variant=inset]~*){margin-left:calc(var(--ppb-spacing) * 0)}.ppb\\:md\\:peer-data-\\[variant\\=inset\\]\\:rounded-xl:is(:where(.ppb\\:peer)[data-variant=inset]~*){border-radius:var(--radius-xl,calc(var(--ppb-radius) + 4px))}.ppb\\:md\\:peer-data-\\[variant\\=inset\\]\\:shadow-sm:is(:where(.ppb\\:peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\\:md\\:peer-data-\\[variant\\=inset\\]\\:peer-data-\\[state\\=collapsed\\]\\:ml-2:is(:where(.ppb\\:peer)[data-variant=inset]~*):is(:where(.ppb\\:peer)[data-state=collapsed]~*){margin-left:calc(var(--ppb-spacing) * 2)}.ppb\\:md\\:after\\:hidden:after{content:var(--tw-content);display:none}}@media(min-width:64rem){.ppb\\:lg\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.ppb\\:dark\\:border-input:is(.dark,.dark *){border-color:var(--background-modifier-border,var(--ppb-input))}.ppb\\:dark\\:bg-destructive\\/60:is(.dark,.dark *){background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\\:dark\\:bg-destructive\\/60:is(.dark,.dark *){background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 60%,transparent)}}.ppb\\:dark\\:bg-input\\/30:is(.dark,.dark *){background-color:var(--background-modifier-border,var(--ppb-input))}@supports (color:color-mix(in lab,red,red)){.ppb\\:dark\\:bg-input\\/30:is(.dark,.dark *){background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-input)) 30%,transparent)}}.ppb\\:dark\\:text-muted-foreground:is(.dark,.dark *){color:var(--text-muted,var(--ppb-muted-foreground))}@media(hover:hover){.ppb\\:dark\\:hover\\:bg-accent\\/50:is(.dark,.dark *):hover{background-color:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\\:dark\\:hover\\:bg-accent\\/50:is(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--background-modifier-hover,var(--ppb-accent)) 50%,transparent)}}.ppb\\:dark\\:hover\\:bg-input\\/50:is(.dark,.dark *):hover{background-color:var(--background-modifier-border,var(--ppb-input))}@supports (color:color-mix(in lab,red,red)){.ppb\\:dark\\:hover\\:bg-input\\/50:is(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-input)) 50%,transparent)}}.ppb\\:dark\\:hover\\:text-accent-foreground:is(.dark,.dark *):hover{color:var(--text-normal,var(--ppb-accent-foreground))}}.ppb\\:dark\\:focus-visible\\:ring-destructive\\/40:is(.dark,.dark *):focus-visible{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\\:dark\\:focus-visible\\:ring-destructive\\/40:is(.dark,.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 40%, transparent)}}.ppb\\:dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark,.dark *)[aria-invalid=true]{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\\:dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark,.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 40%, transparent)}}.ppb\\:dark\\:data-\\[active\\=true\\]\\:aria-invalid\\:ring-destructive\\/40:is(.dark,.dark *)[data-active=true][aria-invalid=true]{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\\:dark\\:data-\\[active\\=true\\]\\:aria-invalid\\:ring-destructive\\/40:is(.dark,.dark *)[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 40%, transparent)}}.ppb\\:dark\\:data-\\[state\\=active\\]\\:border-input:is(.dark,.dark *)[data-state=active]{border-color:var(--background-modifier-border,var(--ppb-input))}.ppb\\:dark\\:data-\\[state\\=active\\]\\:bg-input\\/30:is(.dark,.dark *)[data-state=active]{background-color:var(--background-modifier-border,var(--ppb-input))}@supports (color:color-mix(in lab,red,red)){.ppb\\:dark\\:data-\\[state\\=active\\]\\:bg-input\\/30:is(.dark,.dark *)[data-state=active]{background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-input)) 30%,transparent)}}.ppb\\:dark\\:data-\\[state\\=active\\]\\:text-foreground:is(.dark,.dark *)[data-state=active]{color:var(--text-normal,var(--ppb-foreground))}.ppb\\:dark\\:data-\\[state\\=checked\\]\\:bg-primary:is(.dark,.dark *)[data-state=checked]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\\:dark\\:data-\\[state\\=checked\\]\\:bg-primary-foreground:is(.dark,.dark *)[data-state=checked]{background-color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\\:dark\\:data-\\[state\\=unchecked\\]\\:bg-foreground:is(.dark,.dark *)[data-state=unchecked]{background-color:var(--text-normal,var(--ppb-foreground))}.ppb\\:dark\\:data-\\[state\\=unchecked\\]\\:bg-input\\/80:is(.dark,.dark *)[data-state=unchecked]{background-color:var(--background-modifier-border,var(--ppb-input))}@supports (color:color-mix(in lab,red,red)){.ppb\\:dark\\:data-\\[state\\=unchecked\\]\\:bg-input\\/80:is(.dark,.dark *)[data-state=unchecked]{background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-input)) 80%,transparent)}}.ppb\\:dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20:is(.dark,.dark *)[data-variant=destructive]:focus{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\\:dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20:is(.dark,.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 20%,transparent)}}.ppb\\:\\[\\&_\\.recharts-cartesian-axis-tick_text\\]\\:fill-muted-foreground .recharts-cartesian-axis-tick text{fill:var(--text-muted,var(--ppb-muted-foreground))}.ppb\\:\\[\\&_\\.recharts-cartesian-grid_line\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border\\/50 .recharts-cartesian-grid line[stroke="#ccc"]{stroke:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\\:\\[\\&_\\.recharts-cartesian-grid_line\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border\\/50 .recharts-cartesian-grid line[stroke="#ccc"]{stroke:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 50%,transparent)}}.ppb\\:\\[\\&_\\.recharts-curve\\.recharts-tooltip-cursor\\]\\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:var(--background-modifier-border,var(--ppb-border))}.ppb\\:\\[\\&_\\.recharts-dot\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.ppb\\:\\[\\&_\\.recharts-layer\\]\\:outline-hidden .recharts-layer{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\\:\\[\\&_\\.recharts-layer\\]\\:outline-hidden .recharts-layer{outline-offset:2px;outline:2px solid #0000}}.ppb\\:\\[\\&_\\.recharts-polar-grid_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border .recharts-polar-grid [stroke="#ccc"]{stroke:var(--background-modifier-border,var(--ppb-border))}.ppb\\:\\[\\&_\\.recharts-radial-bar-background-sector\\]\\:fill-muted .recharts-radial-bar-background-sector,.ppb\\:\\[\\&_\\.recharts-rectangle\\.recharts-tooltip-cursor\\]\\:fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:var(--background-primary-alt,var(--ppb-muted))}.ppb\\:\\[\\&_\\.recharts-reference-line_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border .recharts-reference-line [stroke="#ccc"]{stroke:var(--background-modifier-border,var(--ppb-border))}.ppb\\:\\[\\&_\\.recharts-sector\\]\\:outline-hidden .recharts-sector{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\\:\\[\\&_\\.recharts-sector\\]\\:outline-hidden .recharts-sector{outline-offset:2px;outline:2px solid #0000}}.ppb\\:\\[\\&_\\.recharts-sector\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.ppb\\:\\[\\&_\\.recharts-surface\\]\\:outline-hidden .recharts-surface{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\\:\\[\\&_\\.recharts-surface\\]\\:outline-hidden .recharts-surface{outline-offset:2px;outline:2px solid #0000}}.ppb\\:\\[\\&_\\[cmdk-group-heading\\]\\]\\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--ppb-spacing) * 2)}.ppb\\:\\[\\&_\\[cmdk-group-heading\\]\\]\\:py-1\\.5 [cmdk-group-heading]{padding-block:calc(var(--ppb-spacing) * 1.5)}.ppb\\:\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-xs [cmdk-group-heading]{font-size:var(--font-ui-smaller,.75rem);line-height:var(--tw-leading,var(--ppb-text-xs--line-height))}.ppb\\:\\[\\&_\\[cmdk-group-heading\\]\\]\\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-medium,500);font-weight:var(--font-medium,500)}.ppb\\:\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-muted-foreground [cmdk-group-heading]{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\\:\\[\\&_\\[cmdk-group\\]\\]\\:px-2 [cmdk-group]{padding-inline:calc(var(--ppb-spacing) * 2)}.ppb\\:\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--ppb-spacing) * 0)}.ppb\\:\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--ppb-spacing) * 5)}.ppb\\:\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--ppb-spacing) * 5)}.ppb\\:\\[\\&_\\[cmdk-input\\]\\]\\:h-12 [cmdk-input]{height:calc(var(--ppb-spacing) * 12)}.ppb\\:\\[\\&_\\[cmdk-item\\]\\]\\:px-2 [cmdk-item]{padding-inline:calc(var(--ppb-spacing) * 2)}.ppb\\:\\[\\&_\\[cmdk-item\\]\\]\\:py-3 [cmdk-item]{padding-block:calc(var(--ppb-spacing) * 3)}.ppb\\:\\[\\&_\\[cmdk-item\\]_svg\\]\\:h-5 [cmdk-item] svg{height:calc(var(--ppb-spacing) * 5)}.ppb\\:\\[\\&_\\[cmdk-item\\]_svg\\]\\:w-5 [cmdk-item] svg{width:calc(var(--ppb-spacing) * 5)}.ppb\\:\\[\\&_p\\]\\:leading-relaxed p{--tw-leading:var(--ppb-leading-relaxed);line-height:var(--ppb-leading-relaxed)}.ppb\\:\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.ppb\\:\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.ppb\\:\\[\\&_svg\\:not\\(\\[class\\*\\=size-\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--ppb-spacing) * 4);height:calc(var(--ppb-spacing) * 4)}.ppb\\:\\[\\&_svg\\:not\\(\\[class\\*\\=text-\\]\\)\\]\\:text-muted-foreground svg:not([class*=text-]){color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\\:\\[\\&_tr\\]\\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ppb\\:\\[\\&_tr\\:last-child\\]\\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.ppb\\:\\[\\&\\:first-child\\[data-selected\\=true\\]_button\\]\\:rounded-l-md:first-child[data-selected=true] button{border-top-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\\:\\[\\&\\:has\\(\\[role\\=checkbox\\]\\)\\]\\:pr-0:has([role=checkbox]){padding-right:calc(var(--ppb-spacing) * 0)}.ppb\\:\\[\\.border-b\\]\\:pb-6.border-b{padding-bottom:calc(var(--ppb-spacing) * 6)}.ppb\\:\\[\\.border-t\\]\\:pt-6.border-t{padding-top:calc(var(--ppb-spacing) * 6)}:is(.ppb\\:\\*\\:\\[span\\]\\:last\\:flex>*):is(span):last-child{display:flex}:is(.ppb\\:\\*\\:\\[span\\]\\:last\\:items-center>*):is(span):last-child{align-items:center}:is(.ppb\\:\\*\\:\\[span\\]\\:last\\:gap-2>*):is(span):last-child{gap:calc(var(--ppb-spacing) * 2)}:is(.ppb\\:data-\\[variant\\=destructive\\]\\:\\*\\:\\[svg\\]\\:\\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--background-modifier-error,var(--ppb-destructive))!important}.ppb\\:\\[\\&\\:last-child\\[data-selected\\=true\\]_button\\]\\:rounded-r-md:last-child[data-selected=true] button{border-top-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\\:\\[\\&\\>\\[role\\=checkbox\\]\\]\\:translate-y-\\[2px\\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:\\[\\&\\>button\\]\\:hidden>button{display:none}.ppb\\:\\[\\&\\>span\\]\\:text-xs>span{font-size:var(--font-ui-smaller,.75rem);line-height:var(--tw-leading,var(--ppb-text-xs--line-height))}.ppb\\:\\[\\&\\>span\\]\\:opacity-70>span{opacity:.7}.ppb\\:\\[\\&\\>span\\:last-child\\]\\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ppb\\:\\[\\&\\>svg\\]\\:pointer-events-none>svg{pointer-events:none}.ppb\\:\\[\\&\\>svg\\]\\:size-3>svg{width:calc(var(--ppb-spacing) * 3);height:calc(var(--ppb-spacing) * 3)}.ppb\\:\\[\\&\\>svg\\]\\:size-3\\.5>svg{width:calc(var(--ppb-spacing) * 3.5);height:calc(var(--ppb-spacing) * 3.5)}.ppb\\:\\[\\&\\>svg\\]\\:size-4>svg{width:calc(var(--ppb-spacing) * 4);height:calc(var(--ppb-spacing) * 4)}.ppb\\:\\[\\&\\>svg\\]\\:h-2\\.5>svg{height:calc(var(--ppb-spacing) * 2.5)}.ppb\\:\\[\\&\\>svg\\]\\:h-3>svg{height:calc(var(--ppb-spacing) * 3)}.ppb\\:\\[\\&\\>svg\\]\\:w-2\\.5>svg{width:calc(var(--ppb-spacing) * 2.5)}.ppb\\:\\[\\&\\>svg\\]\\:w-3>svg{width:calc(var(--ppb-spacing) * 3)}.ppb\\:\\[\\&\\>svg\\]\\:shrink-0>svg{flex-shrink:0}.ppb\\:\\[\\&\\>svg\\]\\:translate-y-0\\.5>svg{--tw-translate-y:calc(var(--ppb-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\\:\\[\\&\\>svg\\]\\:text-current>svg{color:currentColor}.ppb\\:\\[\\&\\>svg\\]\\:text-muted-foreground>svg{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\\:\\[\\&\\>svg\\]\\:text-sidebar-accent-foreground>svg{color:var(--ppb-sidebar-accent-foreground)}.ppb\\:\\[\\&\\>tr\\]\\:last\\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ppb\\:\\[\\&\\[data-panel-group-direction\\=vertical\\]\\>div\\]\\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.ppb\\:\\[\\&\\[data-state\\=open\\]\\>svg\\]\\:rotate-180[data-state=open]>svg{rotate:180deg}[data-side=left][data-collapsible=offcanvas] .ppb\\:\\[\\[data-side\\=left\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-right-2{right:calc(var(--ppb-spacing) * -2)}[data-side=left][data-state=collapsed] .ppb\\:\\[\\[data-side\\=left\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .ppb\\:\\[\\[data-side\\=right\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-left-2{left:calc(var(--ppb-spacing) * -2)}[data-side=right][data-state=collapsed] .ppb\\:\\[\\[data-side\\=right\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-w-resize{cursor:w-resize}[data-slot=card-content] .ppb\\:\\[\\[data-slot\\=card-content\\]_\\&\\]\\:bg-transparent,[data-slot=popover-content] .ppb\\:\\[\\[data-slot\\=popover-content\\]_\\&\\]\\:bg-transparent{background-color:#0000}@media(hover:hover){a.ppb\\:\\[a\\&\\]\\:hover\\:bg-accent:hover{background-color:var(--background-modifier-hover,var(--ppb-accent))}a.ppb\\:\\[a\\&\\]\\:hover\\:bg-destructive\\/90:hover{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){a.ppb\\:\\[a\\&\\]\\:hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 90%,transparent)}}a.ppb\\:\\[a\\&\\]\\:hover\\:bg-primary\\/90:hover{background-color:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){a.ppb\\:\\[a\\&\\]\\:hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--interactive-accent,var(--ppb-primary)) 90%,transparent)}}a.ppb\\:\\[a\\&\\]\\:hover\\:bg-secondary\\/90:hover{background-color:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){a.ppb\\:\\[a\\&\\]\\:hover\\:bg-secondary\\/90:hover{background-color:color-mix(in oklab,var(--background-secondary,var(--ppb-secondary)) 90%,transparent)}}a.ppb\\:\\[a\\&\\]\\:hover\\:text-accent-foreground:hover{color:var(--text-normal,var(--ppb-accent-foreground))}}}.agent-output-shadow{height:100%}.agent-output-workspace{height:100%;overflow:hidden}.agent-panel{background:var(--background-primary);height:100%;color:var(--text-normal);outline:none;display:flex}.agent-panel-empty{justify-content:center;align-items:center}.agent-empty-message{text-align:center;color:var(--text-muted);padding:24px}.agent-empty-icon{opacity:.6;margin-bottom:12px;font-size:2.5em}.agent-empty-hint{color:var(--text-faint);margin-top:4px;font-size:.85em}.agent-panel-sidebar{border-right:1px solid var(--background-modifier-border);background:var(--background-secondary);flex-direction:column;width:220px;min-width:180px;transition:width .2s,min-width .2s;display:flex;overflow:hidden}.agent-sidebar-header{border-bottom:1px solid var(--background-modifier-border);justify-content:space-between;align-items:center;gap:6px;padding:8px 12px;font-size:.85em;font-weight:600;display:flex}.agent-sidebar-title{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;flex:1}.agent-sidebar-btn{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 6px;font-size:.85em;transition:background .15s,color .15s}.agent-sidebar-btn:hover{background:var(--background-modifier-hover);color:var(--text-normal)}.agent-sidebar-list{flex:1;overflow-y:auto}.agent-sidebar-list::-webkit-scrollbar{width:4px}.agent-sidebar-list::-webkit-scrollbar-thumb{background:var(--background-modifier-border);border-radius:2px}.agent-sidebar-list::-webkit-scrollbar-thumb:hover{background:var(--text-faint)}.agent-run-item{cursor:pointer;border-bottom:1px solid var(--background-modifier-border-hover);border-left:3px solid #0000;padding:8px 12px;transition:background .15s,border-color .15s}.agent-run-item:hover{background:var(--background-modifier-hover)}.agent-run-item.is-selected{background:var(--background-primary);border-left-color:var(--text-accent)}.agent-run-item-header{align-items:center;gap:6px;margin-bottom:2px;display:flex}.agent-run-name{text-overflow:ellipsis;white-space:nowrap;font-size:.85em;font-weight:500;overflow:hidden}.agent-run-item-meta{color:var(--text-faint);align-items:center;gap:6px;padding-left:14px;font-size:.75em;display:flex}.agent-run-file{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.agent-run-event{background:var(--background-modifier-hover);border-radius:3px;padding:1px 4px;font-size:.9em}.agent-status-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.agent-status-running{background:var(--text-accent);animation:1.5s infinite agent-pulse}.agent-status-completed{background:var(--text-success,#4caf50)}.agent-status-failed{background:var(--text-error)}.agent-status-queued{background:var(--text-muted)}.agent-status-cancelled{background:var(--text-faint)}.agent-status-pending{background:var(--text-warning,#ff9800);animation:1.5s infinite agent-pulse}@keyframes agent-pulse{0%,to{opacity:1}50%{opacity:.4}}.agent-status-badge{white-space:nowrap;border-radius:10px;padding:2px 8px;font-size:.75em;font-weight:600;display:inline-block}.agent-status-badge.agent-status-running{background:rgba(var(--color-accent-rgb,0, 122, 255),.15);color:var(--text-accent)}.agent-status-badge.agent-status-completed{color:var(--text-success,#4caf50);background:#4caf5026}.agent-status-badge.agent-status-failed{color:var(--text-error);background:#f4433626}.agent-status-badge.agent-status-queued{background:var(--background-modifier-hover);color:var(--text-muted)}.agent-status-badge.agent-status-cancelled{background:var(--background-modifier-hover);color:var(--text-faint)}.agent-status-badge.agent-status-pending{color:var(--text-warning,#ff9800);background:#ff980026}.agent-panel-main{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.agent-panel-placeholder{height:100%;color:var(--text-muted);justify-content:center;align-items:center;font-size:.9em;display:flex}.agent-panel-toolbar{border-bottom:1px solid var(--background-modifier-border);background:var(--background-primary);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:6px 12px;display:flex}.agent-toolbar-left{flex:1;align-items:center;gap:8px;min-width:0;display:flex}.agent-toolbar-agent{color:var(--text-muted);background:var(--background-modifier-hover);border-radius:4px;padding:1px 6px;font-size:.8em}.agent-toolbar-file{color:var(--text-faint);text-overflow:ellipsis;white-space:nowrap;font-size:.8em;overflow:hidden}.agent-toolbar-duration{color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:.8em}.agent-toolbar-right{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.agent-toolbar-btn{border:1px solid var(--background-modifier-border);color:var(--text-muted);cursor:pointer;white-space:nowrap;background:0 0;border-radius:4px;padding:2px 8px;font-size:.8em;transition:background .15s,color .15s,border-color .15s}.agent-toolbar-btn:hover{background:var(--background-modifier-hover);color:var(--text-normal)}.agent-toolbar-btn.is-active{background:rgba(var(--color-accent-rgb,0, 122, 255),.1);border-color:var(--text-accent);color:var(--text-accent)}.agent-rerun-btn{color:var(--text-accent);border-color:var(--text-accent)}.agent-rerun-btn:hover{background:rgba(var(--color-accent-rgb,0, 122, 255),.1)}.agent-autoscroll-toggle{color:var(--text-muted);cursor:pointer;align-items:center;gap:4px;font-size:.8em;display:flex}.agent-autoscroll-toggle input{margin:0}.agent-cancel-btn{background:var(--text-error);color:#fff;cursor:pointer;border:none;border-radius:4px;padding:3px 10px;font-size:.8em;font-weight:500;transition:opacity .15s}.agent-cancel-btn:hover{opacity:.85}.agent-search-input{background:var(--background-primary-alt);border:1px solid var(--background-modifier-border);color:var(--text-normal);border-radius:4px;width:140px;padding:2px 8px;font-size:.8em;transition:border-color .15s,width .2s}.agent-search-input:focus{border-color:var(--text-accent);outline:none;width:180px}.agent-search-input::placeholder{color:var(--text-faint)}.agent-output-terminal{font-family:var(--font-monospace);background:var(--background-primary-alt);white-space:pre-wrap;word-break:break-all;flex:1;padding:12px;font-size:13px;line-height:1.5;overflow-y:auto}.agent-output-terminal::-webkit-scrollbar{width:6px}.agent-output-terminal::-webkit-scrollbar-track{background:0 0}.agent-output-terminal::-webkit-scrollbar-thumb{background:var(--background-modifier-border);border-radius:3px}.agent-output-terminal::-webkit-scrollbar-thumb:hover{background:var(--text-faint)}.agent-line{border-radius:2px;min-height:1.5em;padding:0 4px;transition:background .1s;display:flex}.agent-line:hover{background:rgba(var(--color-accent-rgb,0, 122, 255),.04)}.agent-line-stderr{color:var(--text-error)}.agent-line-error{color:var(--text-error);border-top:1px solid var(--background-modifier-border);margin-top:8px;padding-top:8px;font-weight:600}.agent-line-done{color:var(--text-success,#4caf50);border-top:1px solid var(--background-modifier-border);margin-top:8px;padding-top:8px}.agent-line-pending{color:var(--text-warning,#ff9800);font-style:italic}.agent-line-ts{color:var(--text-faint);-webkit-user-select:none;user-select:none;opacity:.7;flex-shrink:0;margin-right:8px;font-size:.8em}.agent-cursor{color:var(--text-accent);animation:1s step-end infinite agent-blink}@keyframes agent-blink{0%,to{opacity:1}50%{opacity:0}}.agent-panel-sidebar.is-collapsed{width:40px;min-width:40px}.agent-panel-sidebar.is-collapsed .agent-sidebar-title,.agent-panel-sidebar.is-collapsed .agent-run-name,.agent-panel-sidebar.is-collapsed .agent-run-item-meta{display:none}.agent-panel-sidebar.is-collapsed .agent-run-item{border-left-width:0;justify-content:center;padding:8px 4px;display:flex}.agent-panel-sidebar.is-collapsed .agent-run-item-header{margin-bottom:0}.agent-panel-sidebar.is-collapsed .agent-sidebar-header{justify-content:center;padding:8px 4px}.agent-output-terminal.agent-no-wrap{white-space:pre;word-break:normal;overflow-x:auto}.agent-input-bar{border-top:1px solid var(--background-modifier-border);background:var(--background-primary);align-items:flex-end;gap:8px;padding:8px 12px;display:flex}.agent-input-textarea{border:1px solid var(--background-modifier-border);background:var(--background-primary-alt);min-height:36px;max-height:120px;color:var(--text-normal);font-family:var(--font-interface);resize:none;border-radius:8px;flex:1;padding:8px 12px;font-size:.9em;line-height:1.4;transition:border-color .15s;overflow-y:auto}.agent-input-textarea:focus{border-color:var(--text-accent);outline:none}.agent-input-textarea::placeholder{color:var(--text-faint)}.agent-input-send{background:var(--interactive-accent);width:36px;height:36px;color:var(--text-on-accent);cursor:pointer;border:none;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;transition:opacity .15s;display:flex}.agent-input-send:hover{opacity:.85}.agent-input-send:disabled{opacity:.4;cursor:default}.agent-empty-input-container{flex-direction:column;align-items:center;gap:16px;width:100%;max-width:560px;padding:24px;display:flex}.agent-empty-input-container p{color:var(--text-muted);font-size:.9em}.agent-empty-input-container .agent-input-bar{border-top:none;width:100%;padding:0}.agent-confirm-detail{color:var(--text-muted);margin:4px 0;font-size:.85em}.agent-confirm-buttons{gap:8px;margin-top:8px;display:flex}.agent-confirm-buttons button{cursor:pointer;border-radius:4px;padding:4px 12px;font-size:.85em}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))))}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))))}to{height:0}}@keyframes caret-blink{0%,70%,to{opacity:1}20%,50%{opacity:0}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}`,ck=`:root, -:host { - --ppb-radius: 0.625rem; - --ppb-background: oklch(1 0 0); - --ppb-foreground: oklch(0.145 0 0); - --ppb-card: oklch(1 0 0); - --ppb-card-foreground: oklch(0.145 0 0); - --ppb-popover: oklch(1 0 0); - --ppb-popover-foreground: oklch(0.145 0 0); - --ppb-primary: oklch(0.205 0 0); - --ppb-primary-foreground: oklch(0.985 0 0); - --ppb-secondary: oklch(0.97 0 0); - --ppb-secondary-foreground: oklch(0.205 0 0); - --ppb-muted: oklch(0.97 0 0); - --ppb-muted-foreground: oklch(0.556 0 0); - --ppb-accent: oklch(0.97 0 0); - --ppb-accent-foreground: oklch(0.205 0 0); - --ppb-destructive: oklch(0.577 0.245 27.325); - --ppb-success: oklch(62.7% 0.194 149.214); - --ppb-warning: oklch(64.6% 0.222 41.116); - --ppb-border: oklch(0.922 0 0); - --ppb-input: oklch(0.922 0 0); - --ppb-ring: oklch(0.708 0 0); - --ppb-chart-1: oklch(0.646 0.222 41.116); - --ppb-chart-2: oklch(0.6 0.118 184.704); - --ppb-chart-3: oklch(0.398 0.07 227.392); - --ppb-chart-4: oklch(0.828 0.189 84.429); - --ppb-chart-5: oklch(0.769 0.188 70.08); - --ppb-sidebar: oklch(0.985 0 0); - --ppb-sidebar-foreground: oklch(0.145 0 0); - --ppb-sidebar-primary: oklch(0.205 0 0); - --ppb-sidebar-primary-foreground: oklch(0.985 0 0); - --ppb-sidebar-accent: oklch(0.97 0 0); - --ppb-sidebar-accent-foreground: oklch(0.205 0 0); - --ppb-sidebar-border: oklch(0.922 0 0); - --ppb-sidebar-ring: oklch(0.708 0 0); -} - -.dark, -:host[class~="dark"], -:root[class~="dark"] { - --ppb-background: oklch(0.145 0 0); - --ppb-foreground: oklch(0.985 0 0); - --ppb-card: oklch(0.205 0 0); - --ppb-card-foreground: oklch(0.985 0 0); - --ppb-popover: oklch(0.205 0 0); - --ppb-popover-foreground: oklch(0.985 0 0); - --ppb-primary: oklch(0.922 0 0); - --ppb-primary-foreground: oklch(0.205 0 0); - --ppb-secondary: oklch(0.269 0 0); - --ppb-secondary-foreground: oklch(0.985 0 0); - --ppb-muted: oklch(0.269 0 0); - --ppb-muted-foreground: oklch(0.708 0 0); - --ppb-accent: oklch(0.269 0 0); - --ppb-accent-foreground: oklch(0.985 0 0); - --ppb-destructive: oklch(0.704 0.191 22.216); - --ppb-border: oklch(1 0 0 / 10%); - --ppb-input: oklch(1 0 0 / 15%); - --ppb-ring: oklch(0.556 0 0); - --ppb-chart-1: oklch(0.488 0.243 264.376); - --ppb-chart-2: oklch(0.696 0.17 162.48); - --ppb-chart-3: oklch(0.769 0.188 70.08); - --ppb-chart-4: oklch(0.627 0.265 303.9); - --ppb-chart-5: oklch(0.645 0.246 16.439); - --ppb-sidebar: oklch(0.205 0 0); - --ppb-sidebar-foreground: oklch(0.985 0 0); - --ppb-sidebar-primary: oklch(0.488 0.243 264.376); - --ppb-sidebar-primary-foreground: oklch(0.985 0 0); - --ppb-sidebar-accent: oklch(0.269 0 0); - --ppb-sidebar-accent-foreground: oklch(0.985 0 0); - --ppb-sidebar-border: oklch(1 0 0 / 10%); - --ppb-sidebar-ring: oklch(0.556 0 0); -} -`;function Nm(f,a){if(typeof f=="function")return f(a);f!=null&&(f.current=a)}function uk(...f){return a=>{let r=!1;const i=f.map(o=>{const l=Nm(o,a);return!r&&typeof l=="function"&&(r=!0),l});if(r)return()=>{for(let o=0;o{let{children:l,...c}=i;ib(l)&&typeof Qs=="function"&&(l=Qs(l._payload));const u=Te.Children.toArray(l),d=u.find(bk);if(d){const h=d.props.children,m=u.map(b=>b===d?Te.Children.count(h)>1?Te.Children.only(null):Te.isValidElement(h)?h.props.children:null:b);return ke.jsx(a,{...c,ref:o,children:Te.isValidElement(h)?Te.cloneElement(h,void 0,m):null})}return ke.jsx(a,{...c,ref:o,children:l})});return r.displayName=`${f}.Slot`,r}var hk=fk("Slot");function gk(f){const a=Te.forwardRef((r,i)=>{let{children:o,...l}=r;if(ib(o)&&typeof Qs=="function"&&(o=Qs(o._payload)),Te.isValidElement(o)){const c=wk(o),u=vk(l,o.props);return o.type!==Te.Fragment&&(u.ref=i?uk(i,c):c),Te.cloneElement(o,u)}return Te.Children.count(o)>1?Te.Children.only(null):null});return a.displayName=`${f}.SlotClone`,a}var mk=Symbol("radix.slottable");function bk(f){return Te.isValidElement(f)&&typeof f.type=="function"&&"__radixId"in f.type&&f.type.__radixId===mk}function vk(f,a){const r={...a};for(const i in a){const o=f[i],l=a[i];/^on[A-Z]/.test(i)?o&&l?r[i]=(...u)=>{const d=l(...u);return o(...u),d}:o&&(r[i]=o):i==="style"?r[i]={...o,...l}:i==="className"&&(r[i]=[o,l].filter(Boolean).join(" "))}return{...f,...r}}function wk(f){let a=Object.getOwnPropertyDescriptor(f.props,"ref")?.get,r=a&&"isReactWarning"in a&&a.isReactWarning;return r?f.ref:(a=Object.getOwnPropertyDescriptor(f,"ref")?.get,r=a&&"isReactWarning"in a&&a.isReactWarning,r?f.props.ref:f.props.ref||f.ref)}var yk=nb();const kk=Te.createContext(null);function xk({root:f,children:a=null,className:r=""}){return yk.createPortal(ke.jsx("div",{"data-ppb":"",className:r,style:{height:"100%",width:"100%"},children:a}),f)}const Sk=Te.forwardRef(({mode:f="open",delegatesFocus:a=!1,styleSheets:r=[],children:i,asChild:o,...l},c)=>{const u=Te.useRef(null),[d,h]=Te.useState(null),[m]=Te.useState(()=>new Set),b=`node_${f}${a}`,k=o?hk:"div";return Te.useImperativeHandle(c,()=>({onWindowMigrated:v=>{m.add(v)},win:window,shadowRoot:d}),[m,d]),Te.useLayoutEffect(()=>{if(!u.current||u.current.shadowRoot)return;let v=null;v=u.current.attachShadow({mode:f,delegatesFocus:a}),h(v)},[f,a]),Te.useLayoutEffect(()=>{d&&(d.adoptedStyleSheets=r)},[d,r]),ke.jsx(k,{ref:u,...l,children:ke.jsx(kk.Provider,{value:d,children:d&&ke.jsx(xk,{root:d,className:l.className||"",children:i})})},b)});function Im(f){const a=document.body.classList.contains("theme-dark"),r=document.body.classList.contains("theme-light");if(a)return!0;if(r)return!1;if(f)try{const u=f.getTheme?.();if(u)return!["moonstone","default","light","obsidian"].includes(u.toLowerCase())}catch(u){console.warn("app.getTheme() 不可用:",u)}const i=getComputedStyle(document.documentElement),o=i.getPropertyValue("color-scheme").trim();if(o==="dark")return!0;if(o==="light")return!1;const l=i.getPropertyValue("--background-primary")||i.getPropertyValue("--color-base-00")||i.backgroundColor;if(l){const u=l.match(/\d+/g);if(u&&u.length>=3)return(parseInt(u[0])*299+parseInt(u[1])*587+parseInt(u[2])*114)/1e3<128}const c=localStorage.getItem("darkMode");return c?JSON.parse(c):!1}function Ek(f,a){const[r,i]=Te.useState(()=>Im(f));return Te.useEffect(()=>{if(!f)return;const o=()=>{const c=Im(f);i(u=>u!==c?c:u)},l=new MutationObserver(c=>{c.forEach(u=>{u.type==="attributes"&&u.attributeName==="class"&&setTimeout(o,10)})});return l.observe(document.body,{attributes:!0,attributeFilter:["class"]}),o(),()=>{l.disconnect()}},[f]),{isDarkMode:r}}function Ck(){const f=document.body.classList.contains("theme-dark"),a=document.body.classList.contains("theme-light");if(f)return!0;if(a)return!1;const i=getComputedStyle(document.documentElement).getPropertyValue("color-scheme").trim();return i==="dark"?!0:i==="light"?!1:window.app.getTheme()!=="moonstone"}function rp(){try{const f=localStorage.getItem("themeColors");if(f)return JSON.parse(f)}catch(f){console.error("获取用户自定义颜色失败:",f)}return null}function _k(f,a=""){const r=rp();r&&Object.entries(r).forEach(([i,o])=>{const l=a?`--${a}${i}`:`--${i}`;if(f.style.setProperty(l,o),i==="primary"){const c=a?`--${a}chart-1`:"--chart-1";f.style.setProperty(c,o)}})}function Dk(f,a){a?f.classList.add("dark"):f.classList.remove("dark")}function Am(f,a){Dk(f,a),_k(f,"ppb-")}function Pk(f){console.group("🎨 Shadow DOM 主题调试信息");const a=f.classList.contains("dark"),r=getComputedStyle(f);["--ppb-background","--ppb-foreground","--ppb-primary","--ppb-secondary","--ppb-muted","--ppb-muted-foreground"].forEach(l=>{const c=r.getPropertyValue(l)});const o=rp();console.groupEnd()}function Tk(){console.group("🔍 初始化问题诊断");const f=Ck(),a=rp(),r=getComputedStyle(document.documentElement);["--ppb-background","--ppb-foreground","--ppb-primary","--background","--foreground","--primary"].forEach(l=>{const c=r.getPropertyValue(l)}),document.querySelectorAll('[class*="ppb"], [style*="--ppb-"]').forEach((l,c)=>{}),console.groupEnd()}function Nk(){window.debugShadowDOMTheme=f=>{if(!f){const a=document.querySelectorAll('[class*="dark"], [style*="--ppb-"]');if(a.length>0)f=a[0];else{console.error("未找到 Shadow DOM host 元素");return}}Pk(f)},window.diagnoseInit=Tk}const Pu=new WeakMap;async function Fm(f=window){const a=f.document;if(Pu.has(a))return Pu.get(a);const r=Promise.all([Lm(lk,f),Lm(ck,f)]);return Pu.set(a,r),await r}async function Lm(f,a){try{const{CSSStyleSheet:r}=a,i=new r;return await i.replace(f),i.cssRules.length===0&&console.warn("Warning: Stylesheet has no rules. CSS preview:",f.substring(0,500)),i}catch(r){throw console.error("Failed to build stylesheet:",r),console.error("CSS content preview:",f.substring(0,500)),r}}function Ik(f){const{app:a,...r}=f,[i,o]=Te.useState([]),[l,c]=Te.useState(!1),u=Te.useRef(null),{isDarkMode:d}=Ek(a);return Te.useEffect(()=>{let h=!0;return Fm(window).then(m=>{h&&(o(m),c(!0))}).catch(m=>{console.error("Failed to load Shadow DOM stylesheets:",m)}),()=>{h=!1}},[]),Te.useEffect(()=>{if(!u.current||!l)return;const h=u.current.shadowRoot;if(!h)return;const m=h.host;Am(m,d)},[d,l]),Te.useEffect(()=>{Nk()},[]),!l||i.length===0?null:ke.jsx(Sk,{ref:h=>{if(u.current=h,!h)return;const m=()=>{const b=h.shadowRoot?.host;b&&Am(b,d)};m(),setTimeout(m,10),h.onWindowMigrated(b=>{Fm(b).then(k=>{o(k),setTimeout(m,10)})})},styleSheets:i,className:`${r.className||""} ${d?"dark":""}`.trim(),...r})}function Ak({children:f,target:a,shadowRootClassName:r,app:i}){const o=ok.createRoot(a);return o.render(ke.jsx(Ik,{className:r,app:i,children:f})),()=>{o.unmount()}}const Fk=f=>f.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Lk=f=>f.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,r,i)=>i?i.toUpperCase():r.toLowerCase()),zm=f=>{const a=Lk(f);return a.charAt(0).toUpperCase()+a.slice(1)},sb=(...f)=>f.filter((a,r,i)=>!!a&&a.trim()!==""&&i.indexOf(a)===r).join(" ").trim(),zk=f=>{for(const a in f)if(a.startsWith("aria-")||a==="role"||a==="title")return!0};var Rk={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const Ok=Te.forwardRef(({color:f="currentColor",size:a=24,strokeWidth:r=2,absoluteStrokeWidth:i,className:o="",children:l,iconNode:c,...u},d)=>Te.createElement("svg",{ref:d,...Rk,width:a,height:a,stroke:f,strokeWidth:i?Number(r)*24/Number(a):r,className:sb("lucide",o),...!l&&!zk(u)&&{"aria-hidden":"true"},...u},[...c.map(([h,m])=>Te.createElement(h,m)),...Array.isArray(l)?l:[l]])),ap=(f,a)=>{const r=Te.forwardRef(({className:i,...o},l)=>Te.createElement(Ok,{ref:l,iconNode:a,className:sb(`lucide-${Fk(zm(f))}`,`lucide-${f}`,i),...o}));return r.displayName=zm(f),r},Mk=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m16 15-3-3 3-3",key:"14y99z"}]],$k=ap("panel-left-close",Mk),Bk=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}]],jk=ap("panel-left",Bk),Uk=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],Rm=ap("send",Uk),Om=[];function Mm(f){return f.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,"")}function Vk(f){return new Date(f).toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit",second:"2-digit"})}function Wk({status:f}){const r={pending_confirmation:{label:"待确认",cls:"agent-status-pending"},queued:{label:"排队中",cls:"agent-status-queued"},running:{label:"运行中",cls:"agent-status-running"},completed:{label:"完成",cls:"agent-status-completed"},failed:{label:"失败",cls:"agent-status-failed"},cancelled:{label:"已取消",cls:"agent-status-cancelled"}}[f];return ke.jsx("span",{className:`agent-status-badge ${r.cls}`,children:r.label})}function Hk(f){if(!f.startedAt)return"";const a=f.completedAt??Date.now(),r=Math.round((a-f.startedAt)/1e3);if(r<60)return`${r}s`;const i=Math.floor(r/60),o=r%60;return`${i}m${o}s`}function qk(f){return f==="completed"||f==="failed"||f==="cancelled"}function Gk({onCancelRun:f,onRerun:a,onSendPrompt:r}){const i=Fe(x=>x.runs),o=Fe(x=>x.selectedRunId),l=Fe(x=>x.autoScroll),c=Fe(x=>x.searchQuery),u=Fe(x=>x.lineWrap),d=Fe(x=>x.showTimestamps),h=Fe(x=>x.selectRun);Fe(x=>x.setAutoScroll);const m=Fe(x=>x.setSearchQuery);Fe(x=>x.setLineWrap);const b=Fe(x=>x.setShowTimestamps),k=Fe(x=>x.clearHistory),v=Fe(x=>o?x.outputMap[o]??Om:Om),y=i.find(x=>x.id===o)??null,w=Te.useRef(null),D=Te.useRef(null),[E,T]=Te.useState(!1),[A,z]=Te.useState(!1),[R,q]=Te.useState(""),V=Te.useRef(null),K=Te.useMemo(()=>{if(!y)return[];if(!c)return v;const x=c.toLowerCase();return v.filter(W=>W.text.toLowerCase().includes(x))},[v,c,y]);Te.useEffect(()=>{l&&w.current&&(w.current.scrollTop=w.current.scrollHeight)},[v.length,l]);const Q=Te.useCallback(()=>{y&&f&&f(y.id)},[y,f]),he=Te.useCallback(()=>{y&&a&&a(y)},[y,a]),ve=Te.useCallback(async()=>{if(!y)return;const W=(c?K:v).map(U=>Mm(U.text)).join(` -`);try{await navigator.clipboard.writeText(W),z(!0),setTimeout(()=>z(!1),2e3)}catch{}},[y,c,K,v]),M=Te.useCallback(()=>{const x=R.trim();if(!x||!r)return;const W=y?.agentType??"claude-code";r(W,x),q("")},[R,r,y]),le=Te.useCallback(x=>{(x.ctrlKey||x.metaKey)&&x.key==="f"&&(x.preventDefault(),D.current?.focus()),x.key==="Escape"&&y?.status==="running"&&f&&f(y.id)},[y,f]);return i.length===0?ke.jsx("div",{className:"agent-panel agent-panel-empty",children:ke.jsxs("div",{className:"agent-empty-message",children:[ke.jsx("p",{children:"暂无 AI Agent 运行记录"}),ke.jsx("p",{className:"agent-empty-hint",children:"配置自动化规则后,文件变更将自动触发 AI Agent"})]})}):ke.jsxs("div",{className:"agent-panel",onKeyDown:le,tabIndex:0,children:[ke.jsxs("div",{className:`agent-panel-sidebar ${E?"is-collapsed":""}`,children:[ke.jsxs("div",{className:"agent-sidebar-header",children:[ke.jsx("button",{className:"agent-sidebar-btn",onClick:()=>T(!E),title:E?"展开侧栏":"折叠侧栏",children:E?ke.jsx(jk,{size:14}):ke.jsx($k,{size:14})}),!E&&ke.jsxs(ke.Fragment,{children:[ke.jsx("span",{className:"agent-sidebar-title",children:"运行记录"}),ke.jsx("button",{className:"agent-sidebar-btn",onClick:k,title:"清除历史",children:"✕"})]})]}),ke.jsx("div",{className:"agent-sidebar-list",children:i.map(x=>ke.jsxs("div",{className:`agent-run-item ${x.id===o?"is-selected":""}`,onClick:()=>h(x.id),children:[ke.jsxs("div",{className:"agent-run-item-header",children:[ke.jsx("span",{className:`agent-status-dot agent-status-${x.status==="pending_confirmation"?"pending":x.status}`}),!E&&ke.jsx("span",{className:"agent-run-name",children:x.ruleName})]}),!E&&ke.jsxs("div",{className:"agent-run-item-meta",children:[ke.jsx("span",{className:"agent-run-file",children:x.triggerFile.split("/").pop()}),ke.jsx("span",{className:"agent-run-event",children:x.triggerEvent})]})]},x.id))})]}),ke.jsx("div",{className:"agent-panel-main",children:y?ke.jsxs(ke.Fragment,{children:[ke.jsxs("div",{className:"agent-panel-toolbar",children:[ke.jsxs("div",{className:"agent-toolbar-left",children:[ke.jsx(Wk,{status:y.status}),ke.jsx("span",{className:"agent-toolbar-agent",children:y.agentType}),ke.jsx("span",{className:"agent-toolbar-file",children:y.triggerFile}),y.startedAt&&ke.jsx("span",{className:"agent-toolbar-duration",children:Hk(y)})]}),ke.jsxs("div",{className:"agent-toolbar-right",children:[ke.jsx("input",{ref:D,className:"agent-search-input",type:"text",placeholder:"搜索输出...",value:c,onChange:x=>m(x.target.value)}),ke.jsx("button",{className:`agent-toolbar-btn ${d?"is-active":""}`,onClick:()=>b(!d),title:d?"隐藏时间戳":"显示时间戳",children:"时间"}),ke.jsx("button",{className:"agent-toolbar-btn",onClick:ve,title:"复制输出",children:A?"✓":"复制"}),qk(y.status)&&a&&ke.jsx("button",{className:"agent-toolbar-btn agent-rerun-btn",onClick:he,title:"重新运行",children:"重跑"}),y.status==="running"&&f&&ke.jsx("button",{className:"agent-cancel-btn",onClick:Q,children:"取消"})]})]}),ke.jsxs("div",{className:`agent-output-terminal ${u?"":"agent-no-wrap"}`,ref:w,children:[K.map((x,W)=>ke.jsxs("div",{className:`agent-line agent-line-${x.stream}`,children:[d&&ke.jsx("span",{className:"agent-line-ts",children:Vk(x.timestamp)}),ke.jsx("span",{children:Mm(x.text)})]},W)),y.status==="running"&&ke.jsx("div",{className:"agent-line agent-cursor",children:"▌"}),y.status==="pending_confirmation"&&ke.jsx("div",{className:"agent-line agent-line-pending",children:"等待用户确认执行..."}),y.error&&ke.jsxs("div",{className:"agent-line agent-line-error",children:["错误: ",y.error]}),y.status==="completed"&&ke.jsxs("div",{className:"agent-line agent-line-done",children:["✓ 进程退出,代码:"," ",y.exitCode??0]})]}),r&&ke.jsxs("div",{className:"agent-input-bar",children:[ke.jsx("textarea",{ref:V,className:"agent-input-textarea",placeholder:"输入 Prompt 发送给 AI Agent...",value:R,onChange:x=>q(x.target.value),onKeyDown:x=>{x.key==="Enter"&&!x.shiftKey&&(x.preventDefault(),M())},rows:1,onInput:x=>{const W=x.target;W.style.height="auto",W.style.height=`${Math.min(W.scrollHeight,120)}px`}}),ke.jsx("button",{className:"agent-input-send",onClick:M,disabled:!R.trim(),title:"发送 (Enter)",children:ke.jsx(Rm,{size:16})})]})]}):ke.jsx("div",{className:"agent-panel-placeholder",children:r?ke.jsxs("div",{className:"agent-empty-input-container",children:[ke.jsx("p",{children:"输入 Prompt 开始与 AI Agent 对话"}),ke.jsxs("div",{className:"agent-input-bar",children:[ke.jsx("textarea",{className:"agent-input-textarea",placeholder:"输入 Prompt 发送给 AI Agent...",value:R,onChange:x=>q(x.target.value),onKeyDown:x=>{x.key==="Enter"&&!x.shiftKey&&(x.preventDefault(),M())},rows:1,onInput:x=>{const W=x.target;W.style.height="auto",W.style.height=`${Math.min(W.scrollHeight,120)}px`}}),ke.jsx("button",{className:"agent-input-send",onClick:M,disabled:!R.trim(),title:"发送 (Enter)",children:ke.jsx(Rm,{size:16})})]})]}):"选择一个运行记录查看输出"})})]})}const Gs="ppb-agent-output";class Zk extends _.ItemView{constructor(a,r,i,o){super(a),this.unmountReact=null,this.cancelRunFn=null,this.rerunFn=null,this.sendPromptFn=null,this.cancelRunFn=r??null,this.rerunFn=i??null,this.sendPromptFn=o??null}getViewType(){return Gs}getDisplayText(){return"Paperbell AI"}getIcon(){return"terminal"}async onOpen(){const a=this.containerEl;a.empty(),a.addClass("agent-output-workspace"),this.unmountReact=Ak({children:vn.createElement(Gk,{onCancelRun:this.cancelRunFn??void 0,onRerun:this.rerunFn??void 0,onSendPrompt:this.sendPromptFn??void 0}),target:a,shadowRootClassName:"agent-output-shadow",app:this.app})}async onClose(){this.unmountReact&&(this.unmountReact(),this.unmountReact=null)}}const Rr=class Rr extends _.Plugin{constructor(){super(...arguments),this.settings=ca}getDashboardStore(){return Xe.getState()}openSettings(a){new Fu(this.app,this,a).open()}async onload(){await this.loadSettings(),this.dataServiceConfigManager=new Vy(this.app,this.settings.dataServiceConfig),this.templateProcessor=new y0(this.app.vault),this.verificationWorker=new b0(this.app,this,this.settings.registrationId),this.addSettingTab(new u0(this.app,this)),this.patchSettingTab();const a={searchInstitution:this.searchInstitution.bind(this),createInstitutionNote:this.createInstitutionNote.bind(this)};window.paperbell=a,this.app.workspace.onLayoutReady(async()=>{this.showLandingPageIfNeeded(),this.checkLicenseExpiration(),this.showProFeatures(),this.verificationWorker.verify().then(r=>{r&&Vu(this.app,this.settings.aiSkills)}),this.registerEvent(this.app.vault.on("create",async r=>{const i=await this.verificationWorker.verify();if(typeof i!="boolean"){new _.Notice("请先在设置中输入激活码。");return}if(!(!i&&!this.settings.registrationId)){if(!i){new _.Notice("请先验证您的账户。");return}r.parent?.path===this.settings.listenToFileCreatedInPath&&r instanceof _.TFile&&typeof i=="boolean"&&i&&await this.handleNewFile(r)}}))}),this.addCommand({id:"search-institution",name:"搜索机构",callback:()=>{new Bs(this.app,this,"").open()}}),this.addCommand({id:"create-institution-note",name:"创建机构笔记",editorCallback:(r,i)=>{const o=r.getSelection();o?new Bs(this.app,this,o).open():new _.Notice("请先选择一个机构名称。")}}),this.addCommand({id:"show-landing-page",name:"显示 PaperBell 设置",callback:()=>{this.showLandingPage()}}),this.addCommand({id:"show-section-view",name:"显示视图仪表板",callback:()=>{this.showSectionView()}}),this.addRibbonIcon("graduation-cap","搜索机构",()=>{new Bs(this.app,this,"").open()}),this.addRibbonIcon("shapes","打开视图仪表板",()=>{this.showSectionView()}),this.registerObsidianProtocolHandler("ppb",this.handleActivationURI.bind(this)),this.registerObsidianProtocolHandler("paperbell",this.handleActivationURI.bind(this)),this.registerObsidianProtocolHandler("paperbell/callback",this.handleActivationURI.bind(this)),this.patchSettingTab(),this.app.workspace.onLayoutReady(()=>{this.updater&&this.updater.onload()})}async showLandingPageIfNeeded(){_.Platform.isDesktop&&(this.registerView(hi,a=>new Cw(a,this)),this.settings.landing||(this.settings.landing=la,await this.saveSettings()),this.settings.landing.firstLoad&&this.showLandingPage(),this.addCommand({id:"show-landing-page",name:"显示 PaperBell 设置",callback:()=>{this.showLandingPage()}}))}async showLandingPage(){const a=this.app.workspace.getLeavesOfType(hi);if(a.length>0){this.app.workspace.revealLeaf(a[0]);return}const r=this.app.workspace.getLeaf();await r.setViewState({type:hi,active:!0}),this.app.workspace.revealLeaf(r)}async showProFeatures(){if(!await this.verificationWorker.verify()){new _.Notice("请先在设置中输入激活码。");return}this.updater=new ay(this,this.settings.updater?.minAppVersion||"0.0.0"),this.registerView(yi,i=>new ey(i)),this.registerView(qs,i=>new jy(i,this.app,this)),this.registerBasesView("ppb-focus-heatmap",{name:"Focus Heatmap",icon:"target",factory:(i,o)=>new Hy(i,o)}),this.registerBasesView("ppb-focus-grid",{name:"Focus Grid",icon:"grid",factory:(i,o)=>new qy(i,o)}),this.registerBasesView("ppb-today-stats",{name:"Today Stats",icon:"calendar-check",factory:(i,o)=>new Zy(i,o)}),this.registerBasesView("ppb-weekly-performance",{name:"Weekly Performance",icon:"bar-chart-2",factory:(i,o)=>new Yy(i,o)}),this.proxyService=new Uy(this.settings.registrationId),this.dataManager=new Qm({app:this.app,plugin:this,autoRefresh:!1,refreshInterval:3e4}),this.dataManager.initialize(),this.addChild(this.dataManager);const a=Xe.getState();a.initializeDataService(this.app,this.dataManager,this),a.dataService&&a.dataService.registerMetadataCacheListener(),this.addChild(this.updater),this.updater.setProxyService(this.proxyService),this.pomodoroManager=new Wy(this),this.addChild(this.pomodoroManager),this.registerView(Gs,i=>new Zk(i,o=>this.agentExecutor?.cancelRun(o),o=>{const c=(this.settings.agentAutoExec?.rules??[]).find(u=>u.id===o.ruleId);c&&this.agentExecutor&&this.agentExecutor.executeRule(c,o.triggerFile,o.triggerEvent)},(o,l)=>{this.agentExecutor&&this.agentExecutor.executeAdHoc(o,l)})),this.agentExecutor=new Qy(this),this.agentExecutor.onRunStarted=()=>{this.showAgentOutputView()},this.addChild(this.agentExecutor),this.agentExecutor.initPersistence(),this.fileWatcherService=new Xy(this,this.agentExecutor),this.addChild(this.fileWatcherService),this.addCommand({id:"show-agent-output",name:"显示 Paperbell AI",callback:()=>{this.showAgentOutputView()}}),this.addCommand({id:"cancel-all-agents",name:"取消所有运行中的 AI Agent",callback:()=>{this.agentExecutor?.cancelAll()}}),this.addCommand({id:"debug-agent-run",name:"Debug: 测试 AI Agent(输出到 DevTools Console)",callback:()=>{new Yk(this.app,o=>{this.agentExecutor?.debugRun(o,"请用一句话描述你是谁,并确认你能正常工作。")}).open()}});const r=this.settings.componentDataSources?.recentLiterature?.literatureFolderPath||"Inputs/Zotero";this.registerInterval(window.setInterval(()=>{new Date().getHours()===4&&gr.computeAndSaveToday(this.app,r)},1800*1e3))}async showAgentOutputView(){const a=this.app.workspace.getLeavesOfType(Gs);if(a.length>0){this.app.workspace.revealLeaf(a[0]);return}const r=this.app.workspace.getLeaf("split","horizontal");await r.setViewState({type:Gs,active:!0}),this.app.workspace.revealLeaf(r)}async showSectionView(){const a=this.app.workspace.getLeavesOfType(qs);if(a.length>0){this.app.workspace.revealLeaf(a[0]);return}const r=this.app.workspace.getLeaf();await r.setViewState({type:qs,active:!0}),this.app.workspace.revealLeaf(r)}async handleNewFile(a){const r=await this.app.vault.read(a),i=_.getFrontMatterInfo(r);if(!i.exists)return;const o=_.parseYaml(i.frontmatter);!o.institute&&!o.institution||await this.processInstitution(o.institute||o.institution)}checkIfInstitutionNoteExists(a){const r=this.app.vault.getMarkdownFiles();for(const i of r)if(this.app.metadataCache.getFileCache(i)?.frontmatter?.name===a)return!0;return!1}async processInstitution(a){const r=await this.searchInstitution(a);if(!this.checkIfInstitutionNoteExists(a)){if(!this.settings.autoGenerateInstitutionNotes){new Bs(this.app,this,a).open();return}r&&await this.createInstitutionNote(r)}}async searchInstitution(a){const r=await this.verificationWorker.verify();if(typeof r!="boolean")return new _.Notice("请先在设置中输入激活码。"),null;if(!r)return new _.Notice("Please verify your account first."),null;const i=await this.proxyService.proxyRequest({url:`https://api.ror.org/v1/organizations?query=${encodeURIComponent(`${a}`)}`,method:"GET"});if(!i.success)return new _.Notice("搜索机构失败: "+i.error),null;const o=i.data;if(o.items&&o.items.length>0){const l=o.items[0];return{abbr:l.acronyms?.[0]||"",aliases:[...l.aliases||[],...l.labels?.map(c=>c.label)||[]],website:l.links?.[0]||"",location:[l.addresses?.[0]?.lat||0,l.addresses?.[0]?.lng||0],logo:"",name:l.labels?.[0]?.label||l.name,tags:["university"]}}return null}async createInstitutionNote(a){const r=await this.verificationWorker.verify();if(typeof r!="boolean"){new _.Notice("请先在设置中输入激活码。");return}if(!r){new _.Notice("Please verify your account first.");return}const i=this.app.vault.getMarkdownFiles();for(const h of i)if((await this.app.metadataCache.getFileCache(h))?.frontmatter?.name===a.name)return;const o=await this.createInstitutionNoteContent(a),l=a.name.replace(/[\\/:*?"<>|]/g,""),c=this.settings.noteLocation;this.app.vault.getFolderByPath(c)||await this.app.vault.createFolder(c);const d=await this.app.vault.create(`${c}/${l}.md`,o);this.settings.openInstitutionAfterCreation&&this.app.workspace.getLeaf().openFile(d)}async createInstitutionNoteContent(a){const r=this.templateProcessor.getVariablesFromInstitution(a);if(this.settings.institutionNoteTemplate){const i=await this.templateProcessor.readTemplateFile(this.settings.institutionNoteTemplate);if(i)return this.templateProcessor.processTemplate(i,r)}return`--- -abbr: ${a.abbr} +`:"";await t.write(this.historyFilePath,s)}onunload(){this.unsubscribeStore&&(this.unsubscribeStore(),this.unsubscribeStore=null),this.cancelAll();for(const e of this.timeouts.values())window.clearTimeout(e);this.timeouts.clear();for(const e of this.confirmationTimers.values())window.clearTimeout(e);this.confirmationTimers.clear(),this.streamBuffers.clear()}}class co extends w.Component{constructor(e,t){super(),this.debouncers=new Map,this.plugin=e,this.executor=t}getSettings(){return this.plugin.settings.agentAutoExec??{enabled:!1,rules:[],binaryPaths:{},globalMaxConcurrent:2,showNoticeOnTrigger:!0,maxOutputLinesPerRun:5e3,maxHistoryRuns:50}}onload(){this.registerEvent(this.plugin.app.vault.on("create",e=>{e instanceof w.TFile&&this.handleEvent("create",e)})),this.registerEvent(this.plugin.app.vault.on("modify",e=>{e instanceof w.TFile&&this.handleEvent("modify",e)})),this.registerEvent(this.plugin.app.vault.on("delete",e=>{e instanceof w.TFile&&this.handleEvent("delete",e)})),this.registerEvent(this.plugin.app.vault.on("rename",e=>{e instanceof w.TFile&&this.handleEvent("rename",e)}))}handleEvent(e,t){const s=this.getSettings();if(console.debug("[FileWatcher] event=%s file=%s enabled=%s rules=%d",e,t.path,s.enabled,s.rules.length),!s.enabled)return;const n=s.rules.filter(i=>i.enabled&&i.triggerEvents.includes(e)&&this.pathMatchesRule(t.path,i.watchPaths));n.length===0&&console.debug("[FileWatcher] no matching rules for %s %s. Rule details: %o",e,t.path,s.rules.map(i=>({name:i.name,enabled:i.enabled,events:i.triggerEvents,paths:i.watchPaths})));for(const i of n)console.debug("[FileWatcher] matched rule=%s, debounce=%dms",i.name,i.debounceMs),this.debouncedExecute(i,t.path,e)}pathMatchesRule(e,t){return t.length===0?!0:t.some(s=>{const n=s.replace(/\/$/,"");return e.startsWith(n+"/")||e===n})}debouncedExecute(e,t,s){const n=`${e.id}:${t}`;let i=this.debouncers.get(n);i||(i=w.debounce(()=>{this.debouncers.delete(n),this.getSettings().showNoticeOnTrigger&&new w.Notice(`AI Agent 触发: ${e.name||"未命名规则"} (${s} ${t})`),this.executor.executeRule(e,t,s)},e.debounceMs,!0),this.debouncers.set(n,i)),i()}onunload(){for(const e of this.debouncers.values())e.cancel();this.debouncers.clear()}}const ce="ppb-agent-output";function pi(u){return u.replace(/[›][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,"")}function lo(u){return new Date(u).toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit",second:"2-digit"})}function fi(u){if(!u.startedAt)return"";const e=u.completedAt??Date.now(),t=Math.round((e-u.startedAt)/1e3);if(t<60)return`${t}s`;const s=Math.floor(t/60),n=t%60;return`${s}m${n}s`}function uo(u){return u==="completed"||u==="failed"||u==="cancelled"}const ho={pending_confirmation:{label:"待确认",cls:"agent-status-pending"},queued:{label:"排队中",cls:"agent-status-queued"},running:{label:"运行中",cls:"agent-status-running"},completed:{label:"完成",cls:"agent-status-completed"},failed:{label:"失败",cls:"agent-status-failed"},cancelled:{label:"已取消",cls:"agent-status-cancelled"}};class po extends w.ItemView{constructor(e,t,s,n){super(e),this.cancelRunFn=null,this.rerunFn=null,this.sendPromptFn=null,this.sidebarCollapsed=!1,this.inputValue="",this.panelEl=null,this.sidebarEl=null,this.sidebarListEl=null,this.mainEl=null,this.toolbarEl=null,this.terminalEl=null,this.inputBarEl=null,this.searchInputEl=null,this.unsubRuns=null,this.unsubOutput=null,this.unsubSelected=null,this.unsubUI=null,this.durationTimer=null,this.cancelRunFn=t??null,this.rerunFn=s??null,this.sendPromptFn=n??null}getViewType(){return ce}getDisplayText(){return"Paperbell AI"}getIcon(){return"terminal"}async onOpen(){const e=this.containerEl;e.empty(),e.addClass("agent-output-workspace"),this.buildUI(e),this.subscribeToStore()}async onClose(){this.unsubRuns?.(),this.unsubOutput?.(),this.unsubSelected?.(),this.unsubUI?.(),this.unsubRuns=null,this.unsubOutput=null,this.unsubSelected=null,this.unsubUI=null,this.durationTimer!==null&&(window.clearInterval(this.durationTimer),this.durationTimer=null)}buildUI(e){this.panelEl=e.createDiv({cls:"agent-panel"}),this.panelEl.tabIndex=0,this.panelEl.addEventListener("keydown",t=>{(t.ctrlKey||t.metaKey)&&t.key==="f"&&(t.preventDefault(),this.searchInputEl?.focus());const s=nt.getState(),n=s.runs.find(i=>i.id===s.selectedRunId);t.key==="Escape"&&n?.status==="running"&&this.cancelRunFn&&this.cancelRunFn(n.id)}),this.sidebarEl=this.panelEl.createDiv({cls:"agent-panel-sidebar"}),this.buildSidebarHeader(),this.sidebarListEl=this.sidebarEl.createDiv({cls:"agent-sidebar-list"}),this.mainEl=this.panelEl.createDiv({cls:"agent-panel-main"}),this.renderFull()}buildSidebarHeader(){if(!this.sidebarEl)return;const e=this.sidebarEl.createDiv({cls:"agent-sidebar-header"}),t=e.createEl("button",{cls:"agent-sidebar-btn"});t.title=this.sidebarCollapsed?"展开侧栏":"折叠侧栏",w.setIcon(t,this.sidebarCollapsed?"panel-left-open":"panel-left-close"),t.addEventListener("click",()=>{this.sidebarCollapsed=!this.sidebarCollapsed,this.sidebarEl?.toggleClass("is-collapsed",this.sidebarCollapsed),t.title=this.sidebarCollapsed?"展开侧栏":"折叠侧栏",w.setIcon(t,this.sidebarCollapsed?"panel-left-open":"panel-left-close"),this.sidebarCollapsed?(s.style.display="none",n.style.display="none"):(s.style.display="",n.style.display=""),this.renderSidebarList()});const s=e.createSpan({cls:"agent-sidebar-title",text:"运行记录"}),n=e.createEl("button",{cls:"agent-sidebar-btn",text:"✕"});n.title="清除历史",n.addEventListener("click",()=>{nt.getState().clearHistory()})}subscribeToStore(){const e=nt;this.unsubRuns=e.subscribe(t=>t.runs,()=>this.renderFull()),this.unsubOutput=e.subscribe(t=>{const s=t.selectedRunId;return s?t.outputMap[s]?.length??0:0},()=>this.renderTerminal()),this.unsubSelected=e.subscribe(t=>t.selectedRunId,()=>this.renderFull()),this.unsubUI=e.subscribe(t=>({ts:t.showTimestamps,wrap:t.lineWrap,search:t.searchQuery}),()=>this.renderTerminal(),{equalityFn:(t,s)=>t.ts===s.ts&&t.wrap===s.wrap&&t.search===s.search}),this.durationTimer=window.setInterval(()=>{const t=e.getState(),s=t.runs.find(n=>n.id===t.selectedRunId);s?.status==="running"&&this.updateDuration(s)},1e3)}renderFull(){this.renderSidebarList(),this.renderMain()}renderSidebarList(){if(!this.sidebarListEl)return;this.sidebarListEl.empty();const{runs:e,selectedRunId:t}=nt.getState();for(const s of e){const n=this.sidebarListEl.createDiv({cls:`agent-run-item ${s.id===t?"is-selected":""}`});n.addEventListener("click",()=>{nt.getState().selectRun(s.id)});const i=n.createDiv({cls:"agent-run-item-header"}),r=s.status==="pending_confirmation"?"pending":s.status;if(i.createSpan({cls:`agent-status-dot agent-status-${r}`}),!this.sidebarCollapsed){i.createSpan({cls:"agent-run-name",text:s.ruleName});const a=n.createDiv({cls:"agent-run-item-meta"});a.createSpan({cls:"agent-run-file",text:s.triggerFile.split("/").pop()??""}),a.createSpan({cls:"agent-run-event",text:s.triggerEvent})}}}renderMain(){if(!this.mainEl)return;this.mainEl.empty(),this.toolbarEl=null,this.terminalEl=null,this.inputBarEl=null,this.searchInputEl=null;const{runs:e,selectedRunId:t}=nt.getState();if(e.length===0){this.panelEl?.addClass("agent-panel-empty"),this.mainEl.empty();const n=this.mainEl.createDiv({cls:"agent-empty-message"});n.createEl("p",{text:"暂无 AI Agent 运行记录"}),n.createEl("p",{text:"配置自动化规则后,文件变更将自动触发 AI Agent",cls:"agent-empty-hint"}),this.renderEmptyInputArea(this.mainEl);return}this.panelEl?.removeClass("agent-panel-empty");const s=e.find(n=>n.id===t)??null;if(!s){const n=this.mainEl.createDiv({cls:"agent-panel-placeholder"});this.renderEmptyInputArea(n);return}this.renderToolbar(s),this.renderTerminal(),this.renderInputBar()}renderEmptyInputArea(e){if(!this.sendPromptFn){e.setText("选择一个运行记录查看输出");return}const t=e.createDiv({cls:"agent-empty-input-container"});t.createEl("p",{text:"输入 Prompt 开始与 AI Agent 对话"}),this.buildInputBar(t)}renderToolbar(e){if(!this.mainEl)return;this.toolbarEl=this.mainEl.createDiv({cls:"agent-panel-toolbar"});const t=this.toolbarEl.createDiv({cls:"agent-toolbar-left"}),s=ho[e.status];if(t.createSpan({cls:`agent-status-badge ${s.cls}`,text:s.label}),t.createSpan({cls:"agent-toolbar-agent",text:e.agentType}),t.createSpan({cls:"agent-toolbar-file",text:e.triggerFile}),e.startedAt){const o=t.createSpan({cls:"agent-toolbar-duration",text:fi(e)});o.dataset.role="duration"}const n=this.toolbarEl.createDiv({cls:"agent-toolbar-right"}),i=nt.getState();this.searchInputEl=n.createEl("input",{cls:"agent-search-input",type:"text",placeholder:"搜索输出...",value:i.searchQuery}),this.searchInputEl.addEventListener("input",o=>{nt.getState().setSearchQuery(o.target.value)});const r=n.createEl("button",{cls:`agent-toolbar-btn ${i.showTimestamps?"is-active":""}`,text:"时间"});r.title=i.showTimestamps?"隐藏时间戳":"显示时间戳",r.addEventListener("click",()=>{const o=nt.getState();o.setShowTimestamps(!o.showTimestamps),r.toggleClass("is-active",!o.showTimestamps)});const a=n.createEl("button",{cls:"agent-toolbar-btn",text:"复制"});if(a.title="复制输出",a.addEventListener("click",async()=>{const o=nt.getState(),c=o.selectedRunId?o.outputMap[o.selectedRunId]??[]:[],d=(o.searchQuery?c.filter(f=>f.text.toLowerCase().includes(o.searchQuery.toLowerCase())):c).map(f=>pi(f.text)).join(` +`);try{await navigator.clipboard.writeText(d),a.setText("✓"),setTimeout(()=>a.setText("复制"),2e3)}catch{}}),uo(e.status)&&this.rerunFn){const o=n.createEl("button",{cls:"agent-toolbar-btn agent-rerun-btn",text:"重跑"});o.title="重新运行",o.addEventListener("click",()=>{this.rerunFn?.(e)})}e.status==="running"&&this.cancelRunFn&&n.createEl("button",{cls:"agent-cancel-btn",text:"取消"}).addEventListener("click",()=>{this.cancelRunFn?.(e.id)})}renderTerminal(){if(!this.mainEl)return;const e=nt.getState(),t=e.runs.find(r=>r.id===e.selectedRunId)??null;if(!t)return;const s=e.selectedRunId?e.outputMap[e.selectedRunId]??[]:[],n=e.searchQuery,i=n?s.filter(r=>r.text.toLowerCase().includes(n.toLowerCase())):s;this.terminalEl?(this.terminalEl.empty(),this.terminalEl.className=`agent-output-terminal ${e.lineWrap?"":"agent-no-wrap"}`):(this.terminalEl=this.mainEl.createDiv({cls:`agent-output-terminal ${e.lineWrap?"":"agent-no-wrap"}`}),this.inputBarEl&&this.mainEl.insertBefore(this.terminalEl,this.inputBarEl));for(const r of i){const a=this.terminalEl.createDiv({cls:`agent-line agent-line-${r.stream}`});e.showTimestamps&&a.createSpan({cls:"agent-line-ts",text:lo(r.timestamp)}),a.createSpan({text:pi(r.text)})}t.status==="running"&&this.terminalEl.createDiv({cls:"agent-line agent-cursor",text:"▌"}),t.status==="pending_confirmation"&&this.terminalEl.createDiv({cls:"agent-line agent-line-pending",text:"等待用户确认执行..."}),t.error&&this.terminalEl.createDiv({cls:"agent-line agent-line-error",text:`错误: ${t.error}`}),t.status==="completed"&&this.terminalEl.createDiv({cls:"agent-line agent-line-done",text:`✓ 进程退出,代码: ${t.exitCode??0}`}),e.autoScroll&&(this.terminalEl.scrollTop=this.terminalEl.scrollHeight)}renderInputBar(){!this.sendPromptFn||!this.mainEl||this.buildInputBar(this.mainEl)}buildInputBar(e){if(!this.sendPromptFn)return;this.inputBarEl=e.createDiv({cls:"agent-input-bar"});const t=this.inputBarEl.createEl("textarea",{cls:"agent-input-textarea",placeholder:"输入 Prompt 发送给 AI Agent..."});t.rows=1,t.value=this.inputValue;const s=this.inputBarEl.createEl("button",{cls:"agent-input-send"});w.setIcon(s,"send"),s.title="发送 (Enter)",s.disabled=!this.inputValue.trim();const n=()=>{const i=this.inputValue.trim();if(!i||!this.sendPromptFn)return;const r=nt.getState(),o=r.runs.find(c=>c.id===r.selectedRunId)?.agentType??"claude-code";this.sendPromptFn(o,i),this.inputValue="",t.value="",t.style.height="auto",s.disabled=!0};t.addEventListener("input",()=>{this.inputValue=t.value,s.disabled=!t.value.trim(),t.style.height="auto",t.style.height=`${Math.min(t.scrollHeight,120)}px`}),t.addEventListener("keydown",i=>{i.key==="Enter"&&!i.shiftKey&&(i.preventDefault(),n())}),s.addEventListener("click",n)}updateDuration(e){if(!this.toolbarEl)return;const t=this.toolbarEl.querySelector('[data-role="duration"]');t&&(t.textContent=fi(e))}}const Pt=class Pt extends w.Plugin{constructor(){super(...arguments),this.settings=Nt}getDashboardStore(){return ut.getState()}openSettings(e){new Ds(this.app,this,e).open()}async onload(){await this.loadSettings(),this.dataServiceConfigManager=new Qa(this.app,this.settings.dataServiceConfig),this.templateProcessor=new $r(this.app.vault),this.verificationWorker=new Rr(this.app,this,this.settings.registrationId),this.addSettingTab(new Dr(this.app,this)),this.patchSettingTab();const e={searchInstitution:this.searchInstitution.bind(this),createInstitutionNote:this.createInstitutionNote.bind(this)};window.paperbell=e,this.app.workspace.onLayoutReady(async()=>{this.showLandingPageIfNeeded(),this.checkLicenseExpiration(),this.showProFeatures(),this.verificationWorker.verify().then(t=>{t&&Ms(this.app,this.settings.aiSkills)}),this.registerEvent(this.app.vault.on("create",async t=>{const s=await this.verificationWorker.verify();if(typeof s!="boolean"){new w.Notice("请先在设置中输入激活码。");return}if(!(!s&&!this.settings.registrationId)){if(!s){new w.Notice("请先验证您的账户。");return}t.parent?.path===this.settings.listenToFileCreatedInPath&&t instanceof w.TFile&&typeof s=="boolean"&&s&&await this.handleNewFile(t)}}))}),this.addCommand({id:"search-institution",name:"搜索机构",callback:()=>{new ee(this.app,this,"").open()}}),this.addCommand({id:"create-institution-note",name:"创建机构笔记",editorCallback:(t,s)=>{const n=t.getSelection();n?new ee(this.app,this,n).open():new w.Notice("请先选择一个机构名称。")}}),this.addCommand({id:"show-landing-page",name:"显示 PaperBell 设置",callback:()=>{this.showLandingPage()}}),this.addCommand({id:"show-section-view",name:"显示视图仪表板",callback:()=>{this.showSectionView()}}),this.addRibbonIcon("graduation-cap","搜索机构",()=>{new ee(this.app,this,"").open()}),this.addRibbonIcon("shapes","打开视图仪表板",()=>{this.showSectionView()}),this.registerObsidianProtocolHandler("ppb",this.handleActivationURI.bind(this)),this.registerObsidianProtocolHandler("paperbell",this.handleActivationURI.bind(this)),this.registerObsidianProtocolHandler("paperbell/callback",this.handleActivationURI.bind(this)),this.patchSettingTab(),this.app.workspace.onLayoutReady(()=>{this.updater&&this.updater.onload()})}async showLandingPageIfNeeded(){w.Platform.isDesktop&&(this.registerView(Ut,e=>new ji(e,this)),this.settings.landing||(this.settings.landing=Ft,await this.saveSettings()),this.settings.landing.firstLoad&&this.showLandingPage(),this.addCommand({id:"show-landing-page",name:"显示 PaperBell 设置",callback:()=>{this.showLandingPage()}}))}async showLandingPage(){const e=this.app.workspace.getLeavesOfType(Ut);if(e.length>0){this.app.workspace.revealLeaf(e[0]);return}const t=this.app.workspace.getLeaf();await t.setViewState({type:Ut,active:!0}),this.app.workspace.revealLeaf(t)}async showProFeatures(){if(!await this.verificationWorker.verify()){new w.Notice("请先在设置中输入激活码。");return}this.updater=new ya(this,this.settings.updater?.minAppVersion||"0.0.0"),this.registerView(Gt,s=>new va(s)),this.registerView(oe,s=>new Xa(s,this.app,this)),this.registerBasesView("ppb-focus-heatmap",{name:"Focus Heatmap",icon:"target",factory:(s,n)=>new eo(s,n)}),this.registerBasesView("ppb-focus-grid",{name:"Focus Grid",icon:"grid",factory:(s,n)=>new so(s,n)}),this.registerBasesView("ppb-today-stats",{name:"Today Stats",icon:"calendar-check",factory:(s,n)=>new io(s,n)}),this.registerBasesView("ppb-weekly-performance",{name:"Weekly Performance",icon:"bar-chart-2",factory:(s,n)=>new ro(s,n)}),this.proxyService=new Ja(this.settings.registrationId),this.dataManager=new Ti({app:this.app,plugin:this,autoRefresh:!1,refreshInterval:3e4}),this.dataManager.initialize(),this.addChild(this.dataManager);const e=ut.getState();e.initializeDataService(this.app,this.dataManager,this),e.dataService&&e.dataService.registerMetadataCacheListener(),this.addChild(this.updater),this.updater.setProxyService(this.proxyService),this.pomodoroManager=new to(this),this.addChild(this.pomodoroManager),this.registerView(ce,s=>new po(s,n=>this.agentExecutor?.cancelRun(n),n=>{const r=(this.settings.agentAutoExec?.rules??[]).find(a=>a.id===n.ruleId);r&&this.agentExecutor&&this.agentExecutor.executeRule(r,n.triggerFile,n.triggerEvent)},(n,i)=>{this.agentExecutor&&this.agentExecutor.executeAdHoc(n,i)})),this.agentExecutor=new oo(this),this.agentExecutor.onRunStarted=()=>{this.showAgentOutputView()},this.addChild(this.agentExecutor),this.agentExecutor.initPersistence(),this.fileWatcherService=new co(this,this.agentExecutor),this.addChild(this.fileWatcherService),this.addCommand({id:"show-agent-output",name:"显示 Paperbell AI",callback:()=>{this.showAgentOutputView()}}),this.addCommand({id:"cancel-all-agents",name:"取消所有运行中的 AI Agent",callback:()=>{this.agentExecutor?.cancelAll()}}),this.addCommand({id:"debug-agent-run",name:"Debug: 测试 AI Agent(输出到 DevTools Console)",callback:()=>{new fo(this.app,n=>{this.agentExecutor?.debugRun(n,"请用一句话描述你是谁,并确认你能正常工作。")}).open()}});const t=this.settings.componentDataSources?.recentLiterature?.literatureFolderPath||"Inputs/Zotero";this.registerInterval(window.setInterval(()=>{new Date().getHours()===4&&Ct.computeAndSaveToday(this.app,t)},1800*1e3))}async showAgentOutputView(){const e=this.app.workspace.getLeavesOfType(ce);if(e.length>0){this.app.workspace.revealLeaf(e[0]);return}const t=this.app.workspace.getLeaf("split","horizontal");await t.setViewState({type:ce,active:!0}),this.app.workspace.revealLeaf(t)}async showSectionView(){const e=this.app.workspace.getLeavesOfType(oe);if(e.length>0){this.app.workspace.revealLeaf(e[0]);return}const t=this.app.workspace.getLeaf();await t.setViewState({type:oe,active:!0}),this.app.workspace.revealLeaf(t)}async handleNewFile(e){const t=await this.app.vault.read(e),s=w.getFrontMatterInfo(t);if(!s.exists)return;const n=w.parseYaml(s.frontmatter);!n.institute&&!n.institution||await this.processInstitution(n.institute||n.institution)}checkIfInstitutionNoteExists(e){const t=this.app.vault.getMarkdownFiles();for(const s of t)if(this.app.metadataCache.getFileCache(s)?.frontmatter?.name===e)return!0;return!1}async processInstitution(e){const t=await this.searchInstitution(e);if(!this.checkIfInstitutionNoteExists(e)){if(!this.settings.autoGenerateInstitutionNotes){new ee(this.app,this,e).open();return}t&&await this.createInstitutionNote(t)}}async searchInstitution(e){const t=await this.verificationWorker.verify();if(typeof t!="boolean")return new w.Notice("请先在设置中输入激活码。"),null;if(!t)return new w.Notice("Please verify your account first."),null;const s=await this.proxyService.proxyRequest({url:`https://api.ror.org/v1/organizations?query=${encodeURIComponent(`${e}`)}`,method:"GET"});if(!s.success)return new w.Notice("搜索机构失败: "+s.error),null;const n=s.data;if(n.items&&n.items.length>0){const i=n.items[0];return{abbr:i.acronyms?.[0]||"",aliases:[...i.aliases||[],...i.labels?.map(r=>r.label)||[]],website:i.links?.[0]||"",location:[i.addresses?.[0]?.lat||0,i.addresses?.[0]?.lng||0],logo:"",name:i.labels?.[0]?.label||i.name,tags:["university"]}}return null}async createInstitutionNote(e){const t=await this.verificationWorker.verify();if(typeof t!="boolean"){new w.Notice("请先在设置中输入激活码。");return}if(!t){new w.Notice("Please verify your account first.");return}const s=this.app.vault.getMarkdownFiles();for(const c of s)if((await this.app.metadataCache.getFileCache(c))?.frontmatter?.name===e.name)return;const n=await this.createInstitutionNoteContent(e),i=e.name.replace(/[\\/:*?"<>|]/g,""),r=this.settings.noteLocation;this.app.vault.getFolderByPath(r)||await this.app.vault.createFolder(r);const o=await this.app.vault.create(`${r}/${i}.md`,n);this.settings.openInstitutionAfterCreation&&this.app.workspace.getLeaf().openFile(o)}async createInstitutionNoteContent(e){const t=this.templateProcessor.getVariablesFromInstitution(e);if(this.settings.institutionNoteTemplate){const s=await this.templateProcessor.readTemplateFile(this.settings.institutionNoteTemplate);if(s)return this.templateProcessor.processTemplate(s,t)}return`--- +abbr: ${e.abbr} aliases: -${a.aliases.map(i=>`- ${i}`).join(` +${e.aliases.map(s=>`- ${s}`).join(` `)} -website: ${a.website} -lon: ${a.location[1]} -lat: ${a.location[0]} -logo: "${a.logo}" -name: ${a.name} +website: ${e.website} +lon: ${e.location[1]} +lat: ${e.location[0]} +logo: "${e.logo}" +name: ${e.name} tags: - university --- @@ -216,6 +135,6 @@ TABLE file.link as "姓名", title as "职称", website as "主页", email as " FROM #scholar WHERE contains(institute, this.name) SORT paper_date DESC -\`\`\``}patchSettingTab(){const a=this.app.setting,r=Object.getPrototypeOf(a),i=v0(r,{onOpen:o=>function(){const l=this.pluginTabs.find(u=>u.id==="paperbell");return l&&(l.navEl.dataset.pluginId="paperbell",l.navEl.style.order="-1",l.navEl.createEl("span",{cls:"vertical-tab-nav-item-pro"})),o.call(this)}});this.register(i)}onunload(){gr.flushOnUnload(),this.stopOAuthDesktopCallbackServer();const a=Xe.getState();a.dataService&&(a.dataService.unregisterMetadataCacheListener(),a.dataService.clearTagCache())}async loadSettings(){const a=await this.loadData();if(this.settings=ab(ca,a),await this.migrateSettings(),a){const r=new Set(Object.keys(a));Object.keys(ca).some(o=>!r.has(o)&&ca[o]!==void 0)&&await this.saveData(this.settings)}}async migrateSettings(){let a=!1;const r=this.settings;if(!r.componentDataSources)return;const i=r.componentDataSources;if(r.literatureSettings){const o=r.literatureSettings;o.folderPath&&!i.recentLiterature?.literatureFolderPath&&(i.recentLiterature=i.recentLiterature||{},i.recentLiterature.literatureFolderPath=o.folderPath,a=!0),o.displaySettings&&!i.recentLiterature?.literatureDisplaySettings&&(i.recentLiterature=i.recentLiterature||{},i.recentLiterature.literatureDisplaySettings={...o.displaySettings},a=!0),delete r.literatureSettings,a=!0}if(r.displaySettings){const o=r.displaySettings;i.recentLiterature?.literatureDisplaySettings||(i.recentLiterature=i.recentLiterature||{},i.recentLiterature.literatureDisplaySettings={...o},a=!0),delete r.displaySettings,a=!0}if(r.heatmapSettings){const o=r.heatmapSettings;o.gridSize!==void 0&&!i.researchFocusMap?.gridSize&&(i.researchFocusMap=i.researchFocusMap||{},i.researchFocusMap.gridSize=o.gridSize,a=!0),o.borderRadius!==void 0&&!i.researchFocusMap?.borderRadius&&(i.researchFocusMap=i.researchFocusMap||{},i.researchFocusMap.borderRadius=o.borderRadius,a=!0),delete r.heatmapSettings,a=!0}if(r.researchFocusSettings){const o=r.researchFocusSettings;o.trackingTags?.length>0&&(!i.researchFocusMap?.trackingTags||i.researchFocusMap.trackingTags.length===0)&&(i.researchFocusMap=i.researchFocusMap||{},i.researchFocusMap.trackingTags=[...o.trackingTags],a=!0),o.gridSize!==void 0&&!i.researchFocusMap?.gridSize&&(i.researchFocusMap=i.researchFocusMap||{},i.researchFocusMap.gridSize=o.gridSize,a=!0),o.borderRadius!==void 0&&!i.researchFocusMap?.borderRadius&&(i.researchFocusMap=i.researchFocusMap||{},i.researchFocusMap.borderRadius=o.borderRadius,a=!0),delete r.researchFocusSettings,a=!0}a&&await this.saveData(this.settings)}async saveSettings(){console.debug("[PaperBell] saveSettings called, agentAutoExec=%o",this.settings.agentAutoExec),await this.saveData(this.settings),this.dataServiceConfigManager&&this.settings.dataServiceConfig&&this.dataServiceConfigManager.updateConfig(this.settings.dataServiceConfig),this.proxyService&&this.proxyService.updateActivationCode(this.settings.registrationId),this.verificationWorker&&this.verificationWorker.updateActivationCode(this.settings.registrationId)}generateOAuthState(a=16){const r=new Uint8Array(a);return crypto.getRandomValues(r),Array.from(r,i=>i.toString(16).padStart(2,"0")).join("")}async setOAuthLoginState(a){this.settings.oauthLoginState=a,this.settings.oauthLoginStateCreatedAt=Date.now(),await this.saveSettings()}async clearOAuthLoginState(){typeof this.settings.oauthLoginState>"u"&&typeof this.settings.oauthLoginStateCreatedAt>"u"||(this.settings.oauthLoginState=void 0,this.settings.oauthLoginStateCreatedAt=void 0,await this.saveSettings())}validateOAuthState(a){const r=this.settings.oauthLoginState;if(!r)return{ok:!0};if(!a)return{ok:!1,error:"回调中缺少 state 参数,请从插件内重新发起登录。"};const i=this.settings.oauthLoginStateCreatedAt??0;return i<=0||Date.now()-i>Rr.OAUTH_STATE_TTL_MS?{ok:!1,error:"登录已超时(state 过期),请重新发起登录。"}:a!==r?{ok:!1,error:"state 校验失败,请重新发起登录。"}:{ok:!0}}buildAuthorizeUrl(a){const r=new URL(Rr.OAUTH_AUTHORIZE_URL);return r.searchParams.set("client_id","obsidian"),r.searchParams.set("redirect_uri",a.redirectUri),r.searchParams.set("state",a.state),r.searchParams.set("response_type","code"),r.toString()}async stopOAuthDesktopCallbackServer(){if(this.oauthDesktopCallbackServer)try{clearTimeout(this.oauthDesktopCallbackServer.timeoutId),this.oauthDesktopCallbackServer.server.close?.()}finally{this.oauthDesktopCallbackServer=void 0}}async startOAuthDesktopCallbackServer(){const a=this.getNodeHttp();return await this.stopOAuthDesktopCallbackServer(),await new Promise((r,i)=>{const o=a.createServer((c,u)=>{try{const d=new URL(c.url??"/","http://127.0.0.1");if(d.pathname!=="/callback"){u.writeHead(404,{"Content-Type":"text/plain"}),u.end("Not found");return}const h={};for(const[m,b]of d.searchParams.entries())h[m]=b;u.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),u.end(["",'','',"PaperBell",'',"

    授权成功

    ","

    你可以关闭此页面并返回 Obsidian。

    ",""].join("")),this.handleActivationURI(h)}catch(d){u.writeHead(500,{"Content-Type":"text/plain"}),u.end("Internal error"),console.error("OAuth callback server error:",d)}finally{this.stopOAuthDesktopCallbackServer()}}),l=window.setTimeout(()=>{this.stopOAuthDesktopCallbackServer(),i(new Error("OAuth login timed out"))},Rr.OAUTH_STATE_TTL_MS);this.oauthDesktopCallbackServer={server:o,timeoutId:l},o.listen(0,"127.0.0.1",()=>{const c=o.address(),u=typeof c=="object"&&c&&"port"in c?c.port:null;if(!u){this.stopOAuthDesktopCallbackServer(),i(new Error("Failed to get callback server port"));return}r({redirectUri:`http://127.0.0.1:${u}/callback`})})})}getNodeHttp(){const a=window.require||globalThis.require||void 0;if(typeof a!="function")throw new Error("Node require() is not available in this environment");try{return a("node:http")}catch{return a("http")}}async startAccountLogin(){const a=this.generateOAuthState(16);if(_.Platform.isDesktop)try{await this.setOAuthLoginState(a);const{redirectUri:r}=await this.startOAuthDesktopCallbackServer();this.oauthRedirectUri=r;const i=this.buildAuthorizeUrl({redirectUri:r,state:a});window.open(i),new _.Notice("已打开浏览器,请完成授权以自动激活。",8e3);return}catch(r){await this.clearOAuthLoginState(),await this.stopOAuthDesktopCallbackServer(),this.oauthRedirectUri=void 0,console.error("Failed to start desktop OAuth login:",r),new _.Notice("无法启动登录流程,请稍后重试。");return}if(_.Platform.isMobile){const r="obsidian://paperbell/callback";this.oauthRedirectUri=r,await this.setOAuthLoginState(a);const i=this.buildAuthorizeUrl({redirectUri:r,state:a});window.open(i),new _.Notice("已打开浏览器,请完成授权以自动激活。",8e3);return}new _.Notice("当前平台不支持账户登录。")}async exchangeCodeForActivationCode(a,r){const i=await fetch(Rr.OAUTH_TOKEN_URL,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"authorization_code",code:a,client_id:"obsidian",redirect_uri:r})});if(!i.ok){const c=await i.json().catch(()=>({}));throw new Error(c.error_description||c.error||`HTTP ${i.status}`)}const o=await i.json(),l=o.activation_code||o.access_token||"";if(!l)throw new Error("服务端未返回激活码");return l}async handleActivationURI(a){const r=a.code||"",i=a.activation_code||a.activationCode||a.activation||a.token||"",o=a.state??null,l=a.error||a.error_description||"";if(l){await this.clearOAuthLoginState(),new _.Notice(`授权失败:${l}`);return}const c=this.validateOAuthState(o);if(!c.ok){await this.clearOAuthLoginState(),new _.Notice(c.error??"授权校验失败,请重试登录。");return}let u=i;if(r&&!i){const h=this.oauthRedirectUri;if(!h){await this.clearOAuthLoginState(),new _.Notice("OAuth 状态丢失,请重新登录");return}try{u=await this.exchangeCodeForActivationCode(r,h)}catch(m){await this.clearOAuthLoginState(),this.oauthRedirectUri=void 0,new _.Notice(`激活码交换失败:${m instanceof Error?m.message:"未知错误"}`);return}}if(!u){await this.clearOAuthLoginState(),this.oauthRedirectUri=void 0,new _.Notice("URI 中未提供激活码或授权码");return}if(this.settings.oauthLoginState&&await this.clearOAuthLoginState(),this.oauthRedirectUri=void 0,this.settings.registrationId=u,await this.saveSettings(),await this.verificationWorker.reloadActivationCode(),await this.verificationWorker.verify()){const h=this.verificationWorker.getLicenseData();let m="✅ 激活码已成功应用并验证!";if(h){if(h.expires_at){const b=new Date(h.expires_at);m+=` -过期时间: ${b.toLocaleDateString()}`}h.license_key&&(m+=` -许可证: ${h.license_key}`)}new _.Notice(m,8e3),this.app.setting.open(),this.app.setting.openTabById("paperbell")}else new _.Notice("❌ 无效的激活码。请检查代码并重试。",8e3),this.app.setting.open(),this.app.setting.openTabById("paperbell")}async checkLicenseExpiration(){try{if(await this.verificationWorker.verify()){const r=this.verificationWorker.getLicenseData();if(r&&r.expires_at){const i=new Date(r.expires_at),o=new Date;if(this.verificationWorker.isLicenseExpiringSoon()){const l=Math.ceil((i.getTime()-o.getTime())/864e5);new _.Notice(`您的 Paperbell 许可证将在 ${l} 天后过期。请续费您的许可证。`,1e4)}o>i&&new _.Notice("您的 Paperbell 许可证已过期。请续费您的许可证以继续使用插件。",15e3)}}}catch(a){console.error("Error checking license expiration:",a)}}};Rr.OAUTH_AUTHORIZE_URL="https://paperbell.cn/oauth/authorize",Rr.OAUTH_TOKEN_URL="https://paperbell.cn/api/oauth/token",Rr.OAUTH_STATE_TTL_MS=300*1e3;let Bu=Rr;class Yk extends _.FuzzySuggestModal{constructor(a,r){super(a),this.onChoose=r,this.setPlaceholder("选择要测试的 AI Agent…")}getItems(){return Xs}getItemText(a){return`${a.name} (${a.binaryName})`}onChooseItem(a){this.onChoose(a.agentType)}}module.exports=Bu; +\`\`\``}patchSettingTab(){const e=this.app.setting,t=Object.getPrototypeOf(e),s=Lr(t,{onOpen:n=>function(){const i=this.pluginTabs.find(a=>a.id==="paperbell");return i&&(i.navEl.dataset.pluginId="paperbell",i.navEl.style.order="-1",i.navEl.createEl("span",{cls:"vertical-tab-nav-item-pro"})),n.call(this)}});this.register(s)}onunload(){Ct.flushOnUnload(),this.stopOAuthDesktopCallbackServer();const e=ut.getState();e.dataService&&(e.dataService.unregisterMetadataCacheListener(),e.dataService.clearTagCache())}async loadSettings(){const e=await this.loadData();if(this.settings=Ni(Nt,e),await this.migrateSettings(),e){const t=new Set(Object.keys(e));Object.keys(Nt).some(n=>!t.has(n)&&Nt[n]!==void 0)&&await this.saveData(this.settings)}}async migrateSettings(){let e=!1;const t=this.settings;if(!t.componentDataSources)return;const s=t.componentDataSources;if(t.literatureSettings){const n=t.literatureSettings;n.folderPath&&!s.recentLiterature?.literatureFolderPath&&(s.recentLiterature=s.recentLiterature||{},s.recentLiterature.literatureFolderPath=n.folderPath,e=!0),n.displaySettings&&!s.recentLiterature?.literatureDisplaySettings&&(s.recentLiterature=s.recentLiterature||{},s.recentLiterature.literatureDisplaySettings={...n.displaySettings},e=!0),delete t.literatureSettings,e=!0}if(t.displaySettings){const n=t.displaySettings;s.recentLiterature?.literatureDisplaySettings||(s.recentLiterature=s.recentLiterature||{},s.recentLiterature.literatureDisplaySettings={...n},e=!0),delete t.displaySettings,e=!0}if(t.heatmapSettings){const n=t.heatmapSettings;n.gridSize!==void 0&&!s.researchFocusMap?.gridSize&&(s.researchFocusMap=s.researchFocusMap||{},s.researchFocusMap.gridSize=n.gridSize,e=!0),n.borderRadius!==void 0&&!s.researchFocusMap?.borderRadius&&(s.researchFocusMap=s.researchFocusMap||{},s.researchFocusMap.borderRadius=n.borderRadius,e=!0),delete t.heatmapSettings,e=!0}if(t.researchFocusSettings){const n=t.researchFocusSettings;n.trackingTags?.length>0&&(!s.researchFocusMap?.trackingTags||s.researchFocusMap.trackingTags.length===0)&&(s.researchFocusMap=s.researchFocusMap||{},s.researchFocusMap.trackingTags=[...n.trackingTags],e=!0),n.gridSize!==void 0&&!s.researchFocusMap?.gridSize&&(s.researchFocusMap=s.researchFocusMap||{},s.researchFocusMap.gridSize=n.gridSize,e=!0),n.borderRadius!==void 0&&!s.researchFocusMap?.borderRadius&&(s.researchFocusMap=s.researchFocusMap||{},s.researchFocusMap.borderRadius=n.borderRadius,e=!0),delete t.researchFocusSettings,e=!0}t.updater&&["PaperBell-Org/Obsidian-PaperBell","kevboh/longform"].includes(t.updater.repository)&&(t.updater.repository="PaperBell-Org/longform-maintaining",t.updater.targetPluginId="longform",t.updater.excludePatterns=(t.updater.excludePatterns||[]).filter(n=>n!=="**/*.js"),e=!0),e&&await this.saveData(this.settings)}async saveSettings(){console.debug("[PaperBell] saveSettings called, agentAutoExec=%o",this.settings.agentAutoExec),await this.saveData(this.settings),this.dataServiceConfigManager&&this.settings.dataServiceConfig&&this.dataServiceConfigManager.updateConfig(this.settings.dataServiceConfig),this.proxyService&&this.proxyService.updateActivationCode(this.settings.registrationId),this.verificationWorker&&this.verificationWorker.updateActivationCode(this.settings.registrationId)}generateOAuthState(e=16){const t=new Uint8Array(e);return crypto.getRandomValues(t),Array.from(t,s=>s.toString(16).padStart(2,"0")).join("")}async setOAuthLoginState(e){this.settings.oauthLoginState=e,this.settings.oauthLoginStateCreatedAt=Date.now(),await this.saveSettings()}async clearOAuthLoginState(){typeof this.settings.oauthLoginState>"u"&&typeof this.settings.oauthLoginStateCreatedAt>"u"||(this.settings.oauthLoginState=void 0,this.settings.oauthLoginStateCreatedAt=void 0,await this.saveSettings())}validateOAuthState(e){const t=this.settings.oauthLoginState;if(!t)return{ok:!0};if(!e)return{ok:!1,error:"回调中缺少 state 参数,请从插件内重新发起登录。"};const s=this.settings.oauthLoginStateCreatedAt??0;return s<=0||Date.now()-s>Pt.OAUTH_STATE_TTL_MS?{ok:!1,error:"登录已超时(state 过期),请重新发起登录。"}:e!==t?{ok:!1,error:"state 校验失败,请重新发起登录。"}:{ok:!0}}buildAuthorizeUrl(e){const t=new URL(Pt.OAUTH_AUTHORIZE_URL);return t.searchParams.set("client_id","obsidian"),t.searchParams.set("redirect_uri",e.redirectUri),t.searchParams.set("state",e.state),t.searchParams.set("response_type","code"),t.toString()}async stopOAuthDesktopCallbackServer(){if(this.oauthDesktopCallbackServer)try{clearTimeout(this.oauthDesktopCallbackServer.timeoutId),this.oauthDesktopCallbackServer.server.close?.()}finally{this.oauthDesktopCallbackServer=void 0}}async startOAuthDesktopCallbackServer(){const e=this.getNodeHttp();return await this.stopOAuthDesktopCallbackServer(),await new Promise((t,s)=>{const n=e.createServer((r,a)=>{try{const o=new URL(r.url??"/","http://127.0.0.1");if(o.pathname!=="/callback"){a.writeHead(404,{"Content-Type":"text/plain"}),a.end("Not found");return}const c={};for(const[l,d]of o.searchParams.entries())c[l]=d;a.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),a.end(["",'','',"PaperBell",'',"

    授权成功

    ","

    你可以关闭此页面并返回 Obsidian。

    ",""].join("")),this.handleActivationURI(c)}catch(o){a.writeHead(500,{"Content-Type":"text/plain"}),a.end("Internal error"),console.error("OAuth callback server error:",o)}finally{this.stopOAuthDesktopCallbackServer()}}),i=window.setTimeout(()=>{this.stopOAuthDesktopCallbackServer(),s(new Error("OAuth login timed out"))},Pt.OAUTH_STATE_TTL_MS);this.oauthDesktopCallbackServer={server:n,timeoutId:i},n.listen(0,"127.0.0.1",()=>{const r=n.address(),a=typeof r=="object"&&r&&"port"in r?r.port:null;if(!a){this.stopOAuthDesktopCallbackServer(),s(new Error("Failed to get callback server port"));return}t({redirectUri:`http://127.0.0.1:${a}/callback`})})})}getNodeHttp(){const e=window.require||globalThis.require||void 0;if(typeof e!="function")throw new Error("Node require() is not available in this environment");try{return e("node:http")}catch{return e("http")}}async startAccountLogin(){const e=this.generateOAuthState(16);if(w.Platform.isDesktop)try{await this.setOAuthLoginState(e);const{redirectUri:t}=await this.startOAuthDesktopCallbackServer();this.oauthRedirectUri=t;const s=this.buildAuthorizeUrl({redirectUri:t,state:e});window.open(s),new w.Notice("已打开浏览器,请完成授权以自动激活。",8e3);return}catch(t){await this.clearOAuthLoginState(),await this.stopOAuthDesktopCallbackServer(),this.oauthRedirectUri=void 0,console.error("Failed to start desktop OAuth login:",t),new w.Notice("无法启动登录流程,请稍后重试。");return}if(w.Platform.isMobile){const t="obsidian://paperbell/callback";this.oauthRedirectUri=t,await this.setOAuthLoginState(e);const s=this.buildAuthorizeUrl({redirectUri:t,state:e});window.open(s),new w.Notice("已打开浏览器,请完成授权以自动激活。",8e3);return}new w.Notice("当前平台不支持账户登录。")}async exchangeCodeForActivationCode(e,t){const s=await fetch(Pt.OAUTH_TOKEN_URL,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"authorization_code",code:e,client_id:"obsidian",redirect_uri:t})});if(!s.ok){const r=await s.json().catch(()=>({}));throw new Error(r.error_description||r.error||`HTTP ${s.status}`)}const n=await s.json(),i=n.activation_code||n.access_token||"";if(!i)throw new Error("服务端未返回激活码");return i}async handleActivationURI(e){const t=e.code||"",s=e.activation_code||e.activationCode||e.activation||e.token||"",n=e.state??null,i=e.error||e.error_description||"";if(i){await this.clearOAuthLoginState(),new w.Notice(`授权失败:${i}`);return}const r=this.validateOAuthState(n);if(!r.ok){await this.clearOAuthLoginState(),new w.Notice(r.error??"授权校验失败,请重试登录。");return}let a=s;if(t&&!s){const c=this.oauthRedirectUri;if(!c){await this.clearOAuthLoginState(),new w.Notice("OAuth 状态丢失,请重新登录");return}try{a=await this.exchangeCodeForActivationCode(t,c)}catch(l){await this.clearOAuthLoginState(),this.oauthRedirectUri=void 0,new w.Notice(`激活码交换失败:${l instanceof Error?l.message:"未知错误"}`);return}}if(!a){await this.clearOAuthLoginState(),this.oauthRedirectUri=void 0,new w.Notice("URI 中未提供激活码或授权码");return}if(this.settings.oauthLoginState&&await this.clearOAuthLoginState(),this.oauthRedirectUri=void 0,this.settings.registrationId=a,await this.saveSettings(),await this.verificationWorker.reloadActivationCode(),await this.verificationWorker.verify()){const c=this.verificationWorker.getLicenseData();let l="✅ 激活码已成功应用并验证!";if(c){if(c.expires_at){const d=new Date(c.expires_at);l+=` +过期时间: ${d.toLocaleDateString()}`}c.license_key&&(l+=` +许可证: ${c.license_key}`)}new w.Notice(l,8e3),this.app.setting.open(),this.app.setting.openTabById("paperbell")}else new w.Notice("❌ 无效的激活码。请检查代码并重试。",8e3),this.app.setting.open(),this.app.setting.openTabById("paperbell")}async checkLicenseExpiration(){try{if(await this.verificationWorker.verify()){const t=this.verificationWorker.getLicenseData();if(t&&t.expires_at){const s=new Date(t.expires_at),n=new Date;if(this.verificationWorker.isLicenseExpiringSoon()){const i=Math.ceil((s.getTime()-n.getTime())/864e5);new w.Notice(`您的 Paperbell 许可证将在 ${i} 天后过期。请续费您的许可证。`,1e4)}n>s&&new w.Notice("您的 Paperbell 许可证已过期。请续费您的许可证以继续使用插件。",15e3)}}}catch(e){console.error("Error checking license expiration:",e)}}};Pt.OAUTH_AUTHORIZE_URL="https://paperbell.cn/oauth/authorize",Pt.OAUTH_TOKEN_URL="https://paperbell.cn/api/oauth/token",Pt.OAUTH_STATE_TTL_MS=300*1e3;let Ns=Pt;class fo extends w.FuzzySuggestModal{constructor(e,t){super(e),this.onChoose=t,this.setPlaceholder("选择要测试的 AI Agent…")}getItems(){return pe}getItemText(e){return`${e.name} (${e.binaryName})`}onChooseItem(e){this.onChoose(e.agentType)}}module.exports=Ns; diff --git a/PaperBell/.obsidian/plugins/paperbell/manifest.json b/PaperBell/.obsidian/plugins/paperbell/manifest.json index ff6bd149..afa12606 100644 --- a/PaperBell/.obsidian/plugins/paperbell/manifest.json +++ b/PaperBell/.obsidian/plugins/paperbell/manifest.json @@ -1,11 +1 @@ -{ - "id": "paperbell", - "name": "Paperbell", - "version": "0.4.2", - "minAppVersion": "0.15.0", - "description": "Supercharges your academic writing workflow.", - "author": "Paperbell", - "authorUrl": "https://github.com/paperbell-group", - "fundingUrl": {}, - "isDesktopOnly": false -} \ No newline at end of file +{"id":"paperbell","name":"Paperbell","version":"0.4.3","minAppVersion":"0.15.0","description":"Supercharges your academic writing workflow.","author":"Paperbell","authorUrl":"https://github.com/paperbell-group","fundingUrl":{},"isDesktopOnly":false} \ No newline at end of file diff --git a/PaperBell/.obsidian/plugins/paperbell/styles.css b/PaperBell/.obsidian/plugins/paperbell/styles.css index 6c686dae..178f4808 100644 --- a/PaperBell/.obsidian/plugins/paperbell/styles.css +++ b/PaperBell/.obsidian/plugins/paperbell/styles.css @@ -1 +1 @@ -.modal.mod-settings-modal{width:90vw;height:85vh;max-width:1100px;max-height:850px}.modal.mod-settings-modal .modal-content{padding:0;height:100%;overflow:hidden}.modal.mod-settings-modal .modal-close-button{z-index:10}.modal.mod-settings .vertical-tab-header-search{padding:var(--size-4-3);border-bottom:1px solid var(--background-modifier-border);flex-shrink:0}.modal.mod-settings .vertical-tab-header-search input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background-color:var(--background-primary);font-size:var(--font-ui-small)}.modal.mod-settings-modal .vertical-tab-header-group{margin-bottom:var(--size-2-2)}.modal.mod-settings-modal .vertical-tab-header-group .vertical-tab-header-group-title{padding:var(--size-2-2) var(--size-4-3);font-size:var(--font-ui-smaller);font-weight:var(--font-weight-semibold);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.modal.mod-settings-modal .vertical-tab-header-group .vertical-tab-header-group-items{display:flex;flex-direction:column}.modal.mod-settings .vertical-tab-content-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:var(--size-2-2);padding:var(--size-4-2) var(--size-4-2);border-bottom:1px solid var(--background-modifier-border);flex-shrink:0;background-color:var(--background-primary);margin-bottom:var(--size-4-4);align-items:center}.modal.mod-settings .vertical-tab-content-header .vertical-tab-content-header-title{display:flex;align-items:center;gap:var(--size-2-3);margin:0;font-size:var(--font-ui-large);font-weight:var(--font-weight-semibold);color:var(--text-normal);padding:0}.modal.mod-settings .vertical-tab-content-header .vertical-tab-content-header-title .vertical-tab-content-header-icon{display:flex;align-items:center;justify-content:center;color:var(--interactive-accent)}.modal.mod-settings .vertical-tab-content-header .vertical-tab-content-header-actions{display:flex;align-items:center;gap:var(--size-2-3);flex-shrink:0}.modal.mod-settings .vertical-tab-content-header .vertical-tab-content-header-actions button{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-small)}.modal.mod-settings .vertical-tab-content-header .vertical-tab-content-header-desc{width:100%;margin:0;font-size:var(--font-ui-small);color:var(--text-muted);line-height:1.5}.modal.mod-settings-modal .vertical-tab-content-body{flex:1;overflow-y:auto;padding:var(--size-4-4) var(--size-4-6);animation:settingsFadeIn .15s ease-out}.modal.mod-settings-modal .vertical-tab-content-body .setting-item{padding-top:var(--size-4-3);padding-bottom:var(--size-4-3)}.modal.mod-settings-modal .vertical-tab-content-body .setting-item:first-child{padding-top:0;border-top:none}.modal.mod-settings-modal .vertical-tab-content-body h3{margin-top:var(--size-4-4);margin-bottom:var(--size-2-3);font-size:var(--font-ui-medium);font-weight:var(--font-weight-semibold);color:var(--text-normal)}.modal.mod-settings-modal .vertical-tab-content-body h3:first-child{margin-top:0}.modal.mod-settings-modal .vertical-tab-content-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:var(--size-4-8);text-align:center;color:var(--text-muted)}@keyframes settingsFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@media(max-width:600px){.modal.mod-settings-modal .vertical-tabs-container{flex-direction:column}.modal.mod-settings-modal .vertical-tab-header{width:100%;height:auto;max-height:200px;border-right:none;border-bottom:1px solid var(--background-modifier-border);overflow-y:auto}.modal.mod-settings-modal .vertical-tab-header .vertical-tab-header-group{display:flex;flex-wrap:wrap;gap:var(--size-2-1);margin-bottom:0;padding:var(--size-2-2)}.modal.mod-settings-modal .vertical-tab-header .vertical-tab-header-group .vertical-tab-header-group-title{display:none}.modal.mod-settings-modal .vertical-tab-header .vertical-tab-header-group .vertical-tab-header-group-items{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--size-2-1)}}.is-mobile .modal.mod-settings .vertical-tab-header{width:100%;height:100%;max-height:none;border-right:none;overflow-y:auto}.is-mobile .modal.mod-settings .vertical-tab-header.is-mobile-hidden{display:none}.is-mobile .modal.mod-settings .vertical-tab-header .vertical-tab-header-group{margin-bottom:var(--size-4-2)}.is-mobile .modal.mod-settings .vertical-tab-header .vertical-tab-header-group .vertical-tab-header-group-title{display:block}.is-mobile .modal.mod-settings .vertical-tab-header .vertical-tab-header-group .vertical-tab-header-group-items{flex-direction:column}.is-mobile .modal.mod-settings .vertical-tab-content-container{width:100%;height:100%}.is-mobile .modal.mod-settings .vertical-tab-content-container.is-mobile-hidden{display:none}.is-mobile .modal.mod-settings .vertical-tab-content-header,.is-mobile .modal.mod-settings .vertical-tab-content-body{padding:var(--size-4-3) var(--size-4-4)}.task-genius-settings-entry{max-width:800px;margin:0 auto;padding:var(--size-4-4)}.settings-entry-header{text-align:center;margin-bottom:var(--size-4-8);padding-bottom:var(--size-4-6);margin-block-start:var(--size-4-8);border-bottom:1px solid var(--background-modifier-border)}.settings-entry-title-container{display:flex;align-items:center;justify-content:center;gap:var(--size-4-3);margin-bottom:var(--size-4-3)}.settings-entry-logo{display:flex;align-items:center;justify-content:center;width:48px;height:48px;color:var(--interactive-accent);--icon-size: 48px}.settings-entry-title-text{display:flex;flex-direction:column;align-items:flex-start}.settings-entry-title-text h2{margin:0;padding:0;font-size:var(--font-ui-large);font-weight:var(--font-weight-bold);color:var(--text-normal)}.settings-entry-title-text .settings-entry-version{font-size:var(--font-ui-smaller);color:var(--text-muted)}.settings-entry-desc{max-width:500px;margin:0 auto}.settings-entry-desc p{margin:0;font-size:var(--font-ui-small);color:var(--text-muted);line-height:1.6}.settings-entry-action{margin-bottom:var(--size-4-6);padding:var(--size-4-4);background-color:var(--background-secondary);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border)}.settings-entry-action .setting-item{border:none;padding:0}.settings-entry-action .setting-item-info{flex:1}.settings-entry-action .setting-item-control button.mod-cta{padding:var(--size-4-2) var(--size-4-6);font-size:var(--font-ui-medium)}.settings-entry-links{margin-block-end:var(--size-4-6);margin-block-start:var(--size-4-4)}.settings-entry-links h3{margin:0 0 var(--size-4-3);font-size:var(--font-ui-medium);font-weight:var(--font-weight-semibold);color:var(--text-normal)}.settings-entry-links-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--size-4-2)}.settings-entry-link{display:flex;align-items:center;gap:var(--size-2-3);padding:var(--size-4-2) var(--size-4-3);background-color:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);color:var(--text-muted);text-decoration:none;font-size:var(--font-ui-small);transition:all .15s ease}.settings-entry-link:hover{background-color:var(--background-modifier-hover);color:var(--text-normal);border-color:var(--interactive-accent)}.settings-entry-link .settings-entry-link-icon{display:flex;align-items:center;justify-content:center;width:18px;height:18px;color:var(--interactive-accent)}.settings-entry-features h3{margin:0 0 var(--size-4-3);font-size:var(--font-ui-medium);font-weight:var(--font-weight-semibold);color:var(--text-normal)}.settings-entry-features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--size-4-3)}.settings-entry-feature{display:flex;align-items:flex-start;gap:var(--size-4-2);padding:var(--size-4-3);background-color:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);transition:all .15s ease}.settings-entry-feature:hover{border-color:var(--background-modifier-border-hover);transform:translateY(-1px);box-shadow:0 2px 8px #00000014}.settings-entry-feature .settings-entry-feature-icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background-color:var(--interactive-accent);border-radius:var(--radius-s);color:var(--text-on-accent);flex-shrink:0}.settings-entry-feature .settings-entry-feature-icon svg{width:18px;height:18px}.settings-entry-feature .settings-entry-feature-text{display:flex;flex-direction:column;gap:var(--size-2-1)}.settings-entry-feature .settings-entry-feature-text strong{font-size:var(--font-ui-small);font-weight:var(--font-weight-medium);color:var(--text-normal)}.settings-entry-feature .settings-entry-feature-text span{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:1.4}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-outline-style:solid}}}@layer theme;@layer base{[data-ppb] *,[data-ppb] :after,[data-ppb] :before,[data-ppb] ::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}[data-ppb] ::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}[data-ppb] html,[data-ppb] :host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--ppb-default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--ppb-default-font-feature-settings,normal);font-variation-settings:var(--ppb-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}[data-ppb] hr{height:0;color:inherit;border-top-width:1px}[data-ppb] abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}[data-ppb] h1,[data-ppb] h2,[data-ppb] h3,[data-ppb] h4,[data-ppb] h5,[data-ppb] h6{font-size:inherit;font-weight:inherit}[data-ppb] a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}[data-ppb] b,[data-ppb] strong{font-weight:bolder}[data-ppb] code,[data-ppb] kbd,[data-ppb] samp,[data-ppb] pre{font-family:var(--ppb-default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--ppb-default-mono-font-feature-settings,normal);font-variation-settings:var(--ppb-default-mono-font-variation-settings,normal);font-size:1em}[data-ppb] small{font-size:80%}[data-ppb] sub,[data-ppb] sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}[data-ppb] sub{bottom:-.25em}[data-ppb] sup{top:-.5em}[data-ppb] table{text-indent:0;border-color:inherit;border-collapse:collapse}[data-ppb] :-moz-focusring{outline:auto}[data-ppb] progress{vertical-align:baseline}[data-ppb] summary{display:list-item}[data-ppb] ol,[data-ppb] ul,[data-ppb] menu{list-style:none}[data-ppb] img,[data-ppb] svg,[data-ppb] video,[data-ppb] canvas,[data-ppb] audio,[data-ppb] iframe,[data-ppb] embed,[data-ppb] object{vertical-align:middle;display:block}[data-ppb] img,[data-ppb] video{max-width:100%;height:auto}[data-ppb] button,[data-ppb] input,[data-ppb] select,[data-ppb] optgroup,[data-ppb] textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}[data-ppb] ::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}[data-ppb] :where(select:is([multiple],[size])) optgroup{font-weight:bolder}[data-ppb] :where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}[data-ppb] ::file-selector-button{margin-inline-end:4px}[data-ppb] ::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){[data-ppb] ::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){[data-ppb] ::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}[data-ppb] textarea{resize:vertical}[data-ppb] ::-webkit-search-decoration{-webkit-appearance:none}[data-ppb] ::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}[data-ppb] ::-webkit-datetime-edit{display:inline-flex}[data-ppb] ::-webkit-datetime-edit-fields-wrapper{padding:0}[data-ppb] ::-webkit-datetime-edit{padding-block:0}[data-ppb] ::-webkit-datetime-edit-year-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-month-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-day-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-hour-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-minute-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-second-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-millisecond-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-meridiem-field{padding-block:0}[data-ppb] ::-webkit-calendar-picker-indicator{line-height:1}[data-ppb] :-moz-ui-invalid{box-shadow:none}[data-ppb] button,[data-ppb] input:where([type=button],[type=reset],[type=submit]){appearance:button}[data-ppb] ::file-selector-button{appearance:button}[data-ppb] ::-webkit-inner-spin-button{height:auto}[data-ppb] ::-webkit-outer-spin-button{height:auto}[data-ppb] [hidden]:where(:not([hidden=until-found])){display:none!important}[data-ppb] *{border-color:var(--background-modifier-border,var(--ppb-border));outline-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){[data-ppb] *{outline-color:color-mix(in oklab,var(--background-modifier-border-focus,var(--ppb-ring)) 50%,transparent)}}[data-ppb] body{background-color:var(--background-primary,var(--ppb-background));color:var(--text-normal,var(--ppb-foreground))}[data-ppb-reset] *,[data-ppb-reset] :after,[data-ppb-reset] :before,[data-ppb-reset] ::backdrop{all:revert-layer}[data-ppb-reset] ::file-selector-button{all:revert-layer}}@layer components;@layer utilities{.ppb\:\@container\/card-header{container:card-header/inline-size}.ppb\:pointer-events-none{pointer-events:none}.ppb\:invisible{visibility:hidden}.ppb\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.ppb\:absolute{position:absolute}.ppb\:fixed{position:fixed}.ppb\:relative{position:relative}.ppb\:sticky{position:sticky}.ppb\:inset-0{inset:calc(var(--ppb-spacing) * 0)}.ppb\:inset-x-0{inset-inline:calc(var(--ppb-spacing) * 0)}.ppb\:inset-y-0{inset-block:calc(var(--ppb-spacing) * 0)}.ppb\:-top-8{top:calc(var(--ppb-spacing) * -8)}.ppb\:-top-12{top:calc(var(--ppb-spacing) * -12)}.ppb\:top-0{top:calc(var(--ppb-spacing) * 0)}.ppb\:top-1\.5{top:calc(var(--ppb-spacing) * 1.5)}.ppb\:top-1\/2{top:50%}.ppb\:top-2{top:calc(var(--ppb-spacing) * 2)}.ppb\:top-3\.5{top:calc(var(--ppb-spacing) * 3.5)}.ppb\:top-4{top:calc(var(--ppb-spacing) * 4)}.ppb\:top-6{top:calc(var(--ppb-spacing) * 6)}.ppb\:top-8{top:calc(var(--ppb-spacing) * 8)}.ppb\:top-12{top:calc(var(--ppb-spacing) * 12)}.ppb\:top-\[1px\]{top:1px}.ppb\:top-\[50\%\]{top:50%}.ppb\:top-\[60\%\]{top:60%}.ppb\:top-full{top:100%}.ppb\:-right-12{right:calc(var(--ppb-spacing) * -12)}.ppb\:right-0{right:calc(var(--ppb-spacing) * 0)}.ppb\:right-1{right:calc(var(--ppb-spacing) * 1)}.ppb\:right-2{right:calc(var(--ppb-spacing) * 2)}.ppb\:right-3{right:calc(var(--ppb-spacing) * 3)}.ppb\:right-4{right:calc(var(--ppb-spacing) * 4)}.ppb\:right-6{right:calc(var(--ppb-spacing) * 6)}.ppb\:right-12{right:calc(var(--ppb-spacing) * 12)}.ppb\:-bottom-12{bottom:calc(var(--ppb-spacing) * -12)}.ppb\:bottom-0{bottom:calc(var(--ppb-spacing) * 0)}.ppb\:bottom-1{bottom:calc(var(--ppb-spacing) * 1)}.ppb\:bottom-6{bottom:calc(var(--ppb-spacing) * 6)}.ppb\:bottom-8{bottom:calc(var(--ppb-spacing) * 8)}.ppb\:-left-12{left:calc(var(--ppb-spacing) * -12)}.ppb\:left-0{left:calc(var(--ppb-spacing) * 0)}.ppb\:left-1{left:calc(var(--ppb-spacing) * 1)}.ppb\:left-1\/2{left:50%}.ppb\:left-2{left:calc(var(--ppb-spacing) * 2)}.ppb\:left-3{left:calc(var(--ppb-spacing) * 3)}.ppb\:left-\[50\%\]{left:50%}.ppb\:isolate{isolation:isolate}.ppb\:-z-10{z-index:-10}.ppb\:z-10{z-index:10}.ppb\:z-20{z-index:20}.ppb\:z-50{z-index:50}.ppb\:z-\[1\]{z-index:1}.ppb\:col-span-1{grid-column:span 1/span 1}.ppb\:col-start-2{grid-column-start:2}.ppb\:row-span-2{grid-row:span 2/span 2}.ppb\:row-start-1{grid-row-start:1}.ppb\:m-\[0px\]{margin:0}.ppb\:-mx-1{margin-inline:calc(var(--ppb-spacing) * -1)}.ppb\:mx-1{margin-inline:calc(var(--ppb-spacing) * 1)}.ppb\:mx-2{margin-inline:calc(var(--ppb-spacing) * 2)}.ppb\:mx-3\.5{margin-inline:calc(var(--ppb-spacing) * 3.5)}.ppb\:mx-\[-8px\]{margin-inline:-8px}.ppb\:mx-\[-11px\]{margin-inline:-11px}.ppb\:mx-\[0px\]{margin-inline:0}.ppb\:mx-auto{margin-inline:auto}.ppb\:my-1{margin-block:calc(var(--ppb-spacing) * 1)}.ppb\:my-4{margin-block:calc(var(--ppb-spacing) * 4)}.ppb\:my-\[-30px\]{margin-block:-30px}.ppb\:my-\[0px\]{margin-block:0}.ppb\:my-\[21px\]{margin-block:21px}.ppb\:-mt-3{margin-top:calc(var(--ppb-spacing) * -3)}.ppb\:-mt-4{margin-top:calc(var(--ppb-spacing) * -4)}.ppb\:-mt-8{margin-top:calc(var(--ppb-spacing) * -8)}.ppb\:mt-0\.5{margin-top:calc(var(--ppb-spacing) * .5)}.ppb\:mt-1{margin-top:calc(var(--ppb-spacing) * 1)}.ppb\:mt-1\.5{margin-top:calc(var(--ppb-spacing) * 1.5)}.ppb\:mt-2{margin-top:calc(var(--ppb-spacing) * 2)}.ppb\:mt-4{margin-top:calc(var(--ppb-spacing) * 4)}.ppb\:mt-\[16px\]{margin-top:16px}.ppb\:mt-auto{margin-top:auto}.ppb\:mr-1{margin-right:calc(var(--ppb-spacing) * 1)}.ppb\:mr-2{margin-right:calc(var(--ppb-spacing) * 2)}.ppb\:mb-1{margin-bottom:calc(var(--ppb-spacing) * 1)}.ppb\:mb-2{margin-bottom:calc(var(--ppb-spacing) * 2)}.ppb\:mb-3{margin-bottom:calc(var(--ppb-spacing) * 3)}.ppb\:mb-4{margin-bottom:calc(var(--ppb-spacing) * 4)}.ppb\:mb-6{margin-bottom:calc(var(--ppb-spacing) * 6)}.ppb\:mb-8{margin-bottom:calc(var(--ppb-spacing) * 8)}.ppb\:mb-\[0px\]{margin-bottom:0}.ppb\:-ml-4{margin-left:calc(var(--ppb-spacing) * -4)}.ppb\:ml-1{margin-left:calc(var(--ppb-spacing) * 1)}.ppb\:ml-2{margin-left:calc(var(--ppb-spacing) * 2)}.ppb\:ml-6{margin-left:calc(var(--ppb-spacing) * 6)}.ppb\:ml-auto{margin-left:auto}.ppb\:line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ppb\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ppb\:block{display:block}.ppb\:contents{display:contents}.ppb\:flex{display:flex}.ppb\:grid{display:grid}.ppb\:hidden{display:none}.ppb\:inline-block{display:inline-block}.ppb\:inline-flex{display:inline-flex}.ppb\:field-sizing-content{field-sizing:content}.ppb\:aspect-\[3\/4\]{aspect-ratio:3/4}.ppb\:aspect-square{aspect-ratio:1}.ppb\:aspect-video{aspect-ratio:var(--ppb-aspect-video)}.ppb\:size-\(--cell-size\){width:var(--cell-size);height:var(--cell-size)}.ppb\:size-2{width:calc(var(--ppb-spacing) * 2);height:calc(var(--ppb-spacing) * 2)}.ppb\:size-2\.5{width:calc(var(--ppb-spacing) * 2.5);height:calc(var(--ppb-spacing) * 2.5)}.ppb\:size-3{width:calc(var(--ppb-spacing) * 3);height:calc(var(--ppb-spacing) * 3)}.ppb\:size-3\.5{width:calc(var(--ppb-spacing) * 3.5);height:calc(var(--ppb-spacing) * 3.5)}.ppb\:size-4{width:calc(var(--ppb-spacing) * 4);height:calc(var(--ppb-spacing) * 4)}.ppb\:size-7{width:calc(var(--ppb-spacing) * 7);height:calc(var(--ppb-spacing) * 7)}.ppb\:size-8{width:calc(var(--ppb-spacing) * 8);height:calc(var(--ppb-spacing) * 8)}.ppb\:size-9{width:calc(var(--ppb-spacing) * 9);height:calc(var(--ppb-spacing) * 9)}.ppb\:size-auto{width:auto;height:auto}.ppb\:size-full{width:100%;height:100%}.ppb\:h-\(--cell-size\){height:var(--cell-size)}.ppb\:h-0\.5{height:calc(var(--ppb-spacing) * .5)}.ppb\:h-1{height:calc(var(--ppb-spacing) * 1)}.ppb\:h-1\.5{height:calc(var(--ppb-spacing) * 1.5)}.ppb\:h-2{height:calc(var(--ppb-spacing) * 2)}.ppb\:h-2\.5{height:calc(var(--ppb-spacing) * 2.5)}.ppb\:h-3{height:calc(var(--ppb-spacing) * 3)}.ppb\:h-4{height:calc(var(--ppb-spacing) * 4)}.ppb\:h-5{height:calc(var(--ppb-spacing) * 5)}.ppb\:h-6{height:calc(var(--ppb-spacing) * 6)}.ppb\:h-7{height:calc(var(--ppb-spacing) * 7)}.ppb\:h-8{height:calc(var(--ppb-spacing) * 8)}.ppb\:h-9{height:calc(var(--ppb-spacing) * 9)}.ppb\:h-10{height:calc(var(--ppb-spacing) * 10)}.ppb\:h-12{height:calc(var(--ppb-spacing) * 12)}.ppb\:h-20{height:calc(var(--ppb-spacing) * 20)}.ppb\:h-32{height:calc(var(--ppb-spacing) * 32)}.ppb\:h-64{height:calc(var(--ppb-spacing) * 64)}.ppb\:h-\[1\.15rem\]{height:1.15rem}.ppb\:h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.ppb\:h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.ppb\:h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.ppb\:h-auto{height:auto}.ppb\:h-full{height:100%}.ppb\:h-px{height:1px}.ppb\:h-svh{height:100svh}.ppb\:max-h-\(--radix-context-menu-content-available-height\){max-height:var(--radix-context-menu-content-available-height)}.ppb\:max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.ppb\:max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.ppb\:max-h-16{max-height:calc(var(--ppb-spacing) * 16)}.ppb\:max-h-\[80vh\]{max-height:80vh}.ppb\:max-h-\[300px\]{max-height:300px}.ppb\:max-h-\[400px\]{max-height:400px}.ppb\:max-h-\[540px\]{max-height:540px}.ppb\:min-h-0{min-height:calc(var(--ppb-spacing) * 0)}.ppb\:min-h-4{min-height:calc(var(--ppb-spacing) * 4)}.ppb\:min-h-16{min-height:calc(var(--ppb-spacing) * 16)}.ppb\:min-h-20{min-height:calc(var(--ppb-spacing) * 20)}.ppb\:min-h-screen{min-height:100vh}.ppb\:min-h-svh{min-height:100svh}.ppb\:w-\(--cell-size\){width:var(--cell-size)}.ppb\:w-\(--sidebar-width\){width:var(--sidebar-width)}.ppb\:w-0\.5{width:calc(var(--ppb-spacing) * .5)}.ppb\:w-1{width:calc(var(--ppb-spacing) * 1)}.ppb\:w-2{width:calc(var(--ppb-spacing) * 2)}.ppb\:w-2\.5{width:calc(var(--ppb-spacing) * 2.5)}.ppb\:w-3{width:calc(var(--ppb-spacing) * 3)}.ppb\:w-3\/4{width:75%}.ppb\:w-4{width:calc(var(--ppb-spacing) * 4)}.ppb\:w-5{width:calc(var(--ppb-spacing) * 5)}.ppb\:w-6{width:calc(var(--ppb-spacing) * 6)}.ppb\:w-8{width:calc(var(--ppb-spacing) * 8)}.ppb\:w-9{width:calc(var(--ppb-spacing) * 9)}.ppb\:w-10{width:calc(var(--ppb-spacing) * 10)}.ppb\:w-12{width:calc(var(--ppb-spacing) * 12)}.ppb\:w-14{width:calc(var(--ppb-spacing) * 14)}.ppb\:w-16{width:calc(var(--ppb-spacing) * 16)}.ppb\:w-20{width:calc(var(--ppb-spacing) * 20)}.ppb\:w-24{width:calc(var(--ppb-spacing) * 24)}.ppb\:w-32{width:calc(var(--ppb-spacing) * 32)}.ppb\:w-40{width:calc(var(--ppb-spacing) * 40)}.ppb\:w-48{width:calc(var(--ppb-spacing) * 48)}.ppb\:w-64{width:calc(var(--ppb-spacing) * 64)}.ppb\:w-72{width:calc(var(--ppb-spacing) * 72)}.ppb\:w-80{width:calc(var(--ppb-spacing) * 80)}.ppb\:w-\[100px\]{width:100px}.ppb\:w-\[140px\]{width:140px}.ppb\:w-auto{width:auto}.ppb\:w-fit{width:fit-content}.ppb\:w-full{width:100%}.ppb\:w-max{width:max-content}.ppb\:w-px{width:1px}.ppb\:max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.ppb\:max-w-4xl{max-width:var(--ppb-container-4xl)}.ppb\:max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.ppb\:max-w-full{max-width:100%}.ppb\:max-w-max{max-width:max-content}.ppb\:max-w-md{max-width:var(--ppb-container-md)}.ppb\:max-w-sm{max-width:var(--ppb-container-sm)}.ppb\:min-w-\(--cell-size\){min-width:var(--cell-size)}.ppb\:min-w-0{min-width:calc(var(--ppb-spacing) * 0)}.ppb\:min-w-5{min-width:calc(var(--ppb-spacing) * 5)}.ppb\:min-w-8{min-width:calc(var(--ppb-spacing) * 8)}.ppb\:min-w-9{min-width:calc(var(--ppb-spacing) * 9)}.ppb\:min-w-10{min-width:calc(var(--ppb-spacing) * 10)}.ppb\:min-w-\[8rem\]{min-width:8rem}.ppb\:min-w-\[12rem\]{min-width:12rem}.ppb\:min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.ppb\:flex-1{flex:1}.ppb\:flex-shrink-0,.ppb\:shrink-0{flex-shrink:0}.ppb\:grow{flex-grow:1}.ppb\:grow-0{flex-grow:0}.ppb\:basis-full{flex-basis:100%}.ppb\:caption-bottom{caption-side:bottom}.ppb\:border-collapse{border-collapse:collapse}.ppb\:origin-\(--radix-context-menu-content-transform-origin\){transform-origin:var(--radix-context-menu-content-transform-origin)}.ppb\:origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.ppb\:origin-\(--radix-hover-card-content-transform-origin\){transform-origin:var(--radix-hover-card-content-transform-origin)}.ppb\:origin-\(--radix-menubar-content-transform-origin\){transform-origin:var(--radix-menubar-content-transform-origin)}.ppb\:origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.ppb\:origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.ppb\:origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.ppb\:-translate-x-1{--tw-translate-x:calc(var(--ppb-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:translate-y-0\.5{--tw-translate-y:calc(var(--ppb-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ppb\:scale-y-75{--tw-scale-y:75%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ppb\:rotate-45{rotate:45deg}.ppb\:rotate-90{rotate:90deg}.ppb\:transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.ppb\:animate-caret-blink{animation:1.25s ease-out infinite caret-blink}.ppb\:animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:animate-pulse{animation:var(--ppb-animate-pulse)}.ppb\:animate-spin{animation:var(--ppb-animate-spin)}.ppb\:cursor-default{cursor:default}.ppb\:cursor-not-allowed{cursor:not-allowed}.ppb\:cursor-pointer{cursor:pointer}.ppb\:touch-none{touch-action:none}.ppb\:scroll-my-1{scroll-margin-block:calc(var(--ppb-spacing) * 1)}.ppb\:scroll-py-1{scroll-padding-block:calc(var(--ppb-spacing) * 1)}.ppb\:list-none{list-style-type:none}.ppb\:auto-rows-min{grid-auto-rows:min-content}.ppb\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.ppb\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.ppb\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.ppb\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.ppb\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.ppb\:grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.ppb\:grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.ppb\:flex-col{flex-direction:column}.ppb\:flex-col-reverse{flex-direction:column-reverse}.ppb\:flex-row{flex-direction:row}.ppb\:flex-wrap{flex-wrap:wrap}.ppb\:items-baseline{align-items:baseline}.ppb\:items-center{align-items:center}.ppb\:items-end{align-items:flex-end}.ppb\:items-start{align-items:flex-start}.ppb\:items-stretch{align-items:stretch}.ppb\:justify-between{justify-content:space-between}.ppb\:justify-center{justify-content:center}.ppb\:justify-end{justify-content:flex-end}.ppb\:justify-start{justify-content:flex-start}.ppb\:justify-items-start{justify-items:start}.ppb\:gap-0\.5{gap:calc(var(--ppb-spacing) * .5)}.ppb\:gap-1{gap:calc(var(--ppb-spacing) * 1)}.ppb\:gap-1\.5{gap:calc(var(--ppb-spacing) * 1.5)}.ppb\:gap-2{gap:calc(var(--ppb-spacing) * 2)}.ppb\:gap-3{gap:calc(var(--ppb-spacing) * 3)}.ppb\:gap-4{gap:calc(var(--ppb-spacing) * 4)}.ppb\:gap-5{gap:calc(var(--ppb-spacing) * 5)}.ppb\:gap-6{gap:calc(var(--ppb-spacing) * 6)}.ppb\:gap-8{gap:calc(var(--ppb-spacing) * 8)}:where(.ppb\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\:space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\:space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ppb-spacing) * 1) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ppb-spacing) * 1) * calc(1 - var(--tw-space-x-reverse)))}:where(.ppb\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ppb-spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ppb-spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}:where(.ppb\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ppb-spacing) * 3) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ppb-spacing) * 3) * calc(1 - var(--tw-space-x-reverse)))}:where(.ppb\:space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ppb-spacing) * 6) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ppb-spacing) * 6) * calc(1 - var(--tw-space-x-reverse)))}.ppb\:gap-y-0\.5{row-gap:calc(var(--ppb-spacing) * .5)}.ppb\:self-start{align-self:flex-start}.ppb\:justify-self-end{justify-self:flex-end}.ppb\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ppb\:overflow-auto{overflow:auto}.ppb\:overflow-hidden{overflow:hidden}.ppb\:overflow-x-auto{overflow-x:auto}.ppb\:overflow-x-hidden{overflow-x:hidden}.ppb\:overflow-y-auto{overflow-y:auto}.ppb\:rounded{border-radius:.25rem}.ppb\:rounded-2xl{border-radius:var(--ppb-radius-2xl)}.ppb\:rounded-\[2px\]{border-radius:2px}.ppb\:rounded-\[4px\]{border-radius:4px}.ppb\:rounded-\[inherit\]{border-radius:inherit}.ppb\:rounded-full{border-radius:3.40282e38px}.ppb\:rounded-md{border-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:rounded-none{border-radius:0}.ppb\:rounded-sm{border-radius:var(--radius-s,calc(var(--ppb-radius) - 4px))}.ppb\:rounded-xl{border-radius:var(--radius-xl,calc(var(--ppb-radius) + 4px))}.ppb\:rounded-xs{border-radius:var(--ppb-radius-xs)}.ppb\:rounded-t-lg{border-top-left-radius:var(--radius-l,var(--ppb-radius));border-top-right-radius:var(--radius-l,var(--ppb-radius))}.ppb\:rounded-l-md{border-top-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:rounded-tl-sm{border-top-left-radius:var(--radius-s,calc(var(--ppb-radius) - 4px))}.ppb\:rounded-r-md{border-top-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:border{border-style:var(--tw-border-style);border-width:1px}.ppb\:border-2{border-style:var(--tw-border-style);border-width:2px}.ppb\:border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.ppb\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.ppb\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.ppb\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ppb\:border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.ppb\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\:border-dashed{--tw-border-style:dashed;border-style:dashed}.ppb\:border-\(--color-border\){border-color:var(--color-border)}.ppb\:border-border,.ppb\:border-border\/20{border-color:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\:border-border\/20{border-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 20%,transparent)}}.ppb\:border-border\/30{border-color:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\:border-border\/30{border-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 30%,transparent)}}.ppb\:border-border\/50{border-color:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\:border-border\/50{border-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 50%,transparent)}}.ppb\:border-destructive\/50{border-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:border-destructive\/50{border-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 50%,transparent)}}.ppb\:border-input{border-color:var(--background-modifier-border,var(--ppb-input))}.ppb\:border-muted{border-color:var(--background-primary-alt,var(--ppb-muted))}.ppb\:border-primary{border-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:border-sidebar-border{border-color:var(--ppb-sidebar-border)}.ppb\:border-transparent{border-color:#0000}.ppb\:border-white{border-color:var(--ppb-color-white)}.ppb\:border-t-transparent{border-top-color:#0000}.ppb\:border-l-transparent{border-left-color:#0000}.ppb\:bg-\(--color-bg\){background-color:var(--color-bg)}.ppb\:bg-accent{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:bg-background{background-color:var(--background-primary,var(--ppb-background))}.ppb\:bg-black\/20{background-color:var(--ppb-color-black)}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-black\/20{background-color:color-mix(in oklab,var(--ppb-color-black) 20%,transparent)}}.ppb\:bg-black\/50{background-color:var(--ppb-color-black)}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-black\/50{background-color:color-mix(in oklab,var(--ppb-color-black) 50%,transparent)}}.ppb\:bg-black\/60{background-color:var(--ppb-color-black)}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-black\/60{background-color:color-mix(in oklab,var(--ppb-color-black) 60%,transparent)}}.ppb\:bg-blue-500{background-color:var(--ppb-color-blue-500)}.ppb\:bg-border,.ppb\:bg-border\/20{background-color:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-border\/20{background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 20%,transparent)}}.ppb\:bg-card,.ppb\:bg-card\/50{background-color:var(--background-primary,var(--ppb-card))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-card\/50{background-color:color-mix(in oklab,var(--background-primary,var(--ppb-card)) 50%,transparent)}}.ppb\:bg-chart-1,.ppb\:bg-chart-1\/50{background-color:var(--ppb-chart-1)}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-chart-1\/50{background-color:color-mix(in oklab,var(--ppb-chart-1) 50%,transparent)}}.ppb\:bg-chart-2\/50{background-color:var(--ppb-chart-2)}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-chart-2\/50{background-color:color-mix(in oklab,var(--ppb-chart-2) 50%,transparent)}}.ppb\:bg-chart-3\/50{background-color:var(--ppb-chart-3)}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-chart-3\/50{background-color:color-mix(in oklab,var(--ppb-chart-3) 50%,transparent)}}.ppb\:bg-destructive,.ppb\:bg-destructive\/5{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-destructive\/5{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 5%,transparent)}}.ppb\:bg-destructive\/10{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-destructive\/10{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 10%,transparent)}}.ppb\:bg-foreground,.ppb\:bg-foreground\/90{background-color:var(--text-normal,var(--ppb-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-foreground\/90{background-color:color-mix(in oklab,var(--text-normal,var(--ppb-foreground)) 90%,transparent)}}.ppb\:bg-green-500{background-color:var(--ppb-color-green-500)}.ppb\:bg-muted,.ppb\:bg-muted\/5{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-muted\/5{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 5%,transparent)}}.ppb\:bg-muted\/10{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-muted\/10{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 10%,transparent)}}.ppb\:bg-muted\/20{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-muted\/20{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 20%,transparent)}}.ppb\:bg-muted\/30{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-muted\/30{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 30%,transparent)}}.ppb\:bg-muted\/50{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-muted\/50{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 50%,transparent)}}.ppb\:bg-orange-500{background-color:var(--ppb-color-orange-500)}.ppb\:bg-popover{background-color:var(--ppb-popover)}.ppb\:bg-primary,.ppb\:bg-primary\/10{background-color:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-primary\/10{background-color:color-mix(in oklab,var(--interactive-accent,var(--ppb-primary)) 10%,transparent)}}.ppb\:bg-primary\/20{background-color:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-primary\/20{background-color:color-mix(in oklab,var(--interactive-accent,var(--ppb-primary)) 20%,transparent)}}.ppb\:bg-primary\/30{background-color:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-primary\/30{background-color:color-mix(in oklab,var(--interactive-accent,var(--ppb-primary)) 30%,transparent)}}.ppb\:bg-secondary,.ppb\:bg-secondary\/20{background-color:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-secondary\/20{background-color:color-mix(in oklab,var(--background-secondary,var(--ppb-secondary)) 20%,transparent)}}.ppb\:bg-secondary\/40{background-color:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-secondary\/40{background-color:color-mix(in oklab,var(--background-secondary,var(--ppb-secondary)) 40%,transparent)}}.ppb\:bg-sidebar{background-color:var(--ppb-sidebar)}.ppb\:bg-sidebar-border{background-color:var(--ppb-sidebar-border)}.ppb\:bg-transparent{background-color:#0000}.ppb\:bg-white{background-color:var(--ppb-color-white)}.ppb\:bg-yellow-500{background-color:var(--ppb-color-yellow-500)}.ppb\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\:bg-gradient-to-bl{--tw-gradient-position:to bottom left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\:bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\:bg-gradient-to-l{--tw-gradient-position:to left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\:bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\:bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\:from-background{--tw-gradient-from:var(--background-primary,var(--ppb-background));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:from-muted\/3{--tw-gradient-from:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:from-muted\/3{--tw-gradient-from:color-mix(in oklab, var(--background-primary-alt,var(--ppb-muted)) 3%, transparent)}}.ppb\:from-muted\/3{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:from-muted\/5{--tw-gradient-from:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:from-muted\/5{--tw-gradient-from:color-mix(in oklab, var(--background-primary-alt,var(--ppb-muted)) 5%, transparent)}}.ppb\:from-muted\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:from-muted\/40{--tw-gradient-from:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:from-muted\/40{--tw-gradient-from:color-mix(in oklab, var(--background-primary-alt,var(--ppb-muted)) 40%, transparent)}}.ppb\:from-muted\/40{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:from-primary\/5{--tw-gradient-from:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\:from-primary\/5{--tw-gradient-from:color-mix(in oklab, var(--interactive-accent,var(--ppb-primary)) 5%, transparent)}}.ppb\:from-primary\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:from-primary\/20{--tw-gradient-from:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\:from-primary\/20{--tw-gradient-from:color-mix(in oklab, var(--interactive-accent,var(--ppb-primary)) 20%, transparent)}}.ppb\:from-primary\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:from-transparent{--tw-gradient-from:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:via-muted-foreground\/20{--tw-gradient-via:var(--text-muted,var(--ppb-muted-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\:via-muted-foreground\/20{--tw-gradient-via:color-mix(in oklab, var(--text-muted,var(--ppb-muted-foreground)) 20%, transparent)}}.ppb\:via-muted-foreground\/20{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ppb\:via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ppb\:via-white\/5{--tw-gradient-via:var(--ppb-color-white)}@supports (color:color-mix(in lab,red,red)){.ppb\:via-white\/5{--tw-gradient-via:color-mix(in oklab, var(--ppb-color-white) 5%, transparent)}}.ppb\:via-white\/5{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ppb\:to-accent\/3{--tw-gradient-to:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\:to-accent\/3{--tw-gradient-to:color-mix(in oklab, var(--background-modifier-hover,var(--ppb-accent)) 3%, transparent)}}.ppb\:to-accent\/3{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:to-accent\/5{--tw-gradient-to:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\:to-accent\/5{--tw-gradient-to:color-mix(in oklab, var(--background-modifier-hover,var(--ppb-accent)) 5%, transparent)}}.ppb\:to-accent\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:to-secondary\/10{--tw-gradient-to:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){.ppb\:to-secondary\/10{--tw-gradient-to:color-mix(in oklab, var(--background-secondary,var(--ppb-secondary)) 10%, transparent)}}.ppb\:to-secondary\/10{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:to-secondary\/20{--tw-gradient-to:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){.ppb\:to-secondary\/20{--tw-gradient-to:color-mix(in oklab, var(--background-secondary,var(--ppb-secondary)) 20%, transparent)}}.ppb\:to-secondary\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:bg-repeat-y{background-repeat:repeat-y}.ppb\:fill-current{fill:currentColor}.ppb\:fill-primary{fill:var(--interactive-accent,var(--ppb-primary))}.ppb\:fill-yellow-400{fill:var(--ppb-color-yellow-400)}.ppb\:object-cover{object-fit:cover}.ppb\:p-0{padding:calc(var(--ppb-spacing) * 0)}.ppb\:p-1{padding:calc(var(--ppb-spacing) * 1)}.ppb\:p-2{padding:calc(var(--ppb-spacing) * 2)}.ppb\:p-3{padding:calc(var(--ppb-spacing) * 3)}.ppb\:p-4{padding:calc(var(--ppb-spacing) * 4)}.ppb\:p-6{padding:calc(var(--ppb-spacing) * 6)}.ppb\:p-8{padding:calc(var(--ppb-spacing) * 8)}.ppb\:p-\[3px\]{padding:3px}.ppb\:p-px{padding:1px}.ppb\:px-\(--cell-size\){padding-inline:var(--cell-size)}.ppb\:px-1{padding-inline:calc(var(--ppb-spacing) * 1)}.ppb\:px-1\.5{padding-inline:calc(var(--ppb-spacing) * 1.5)}.ppb\:px-2{padding-inline:calc(var(--ppb-spacing) * 2)}.ppb\:px-2\.5{padding-inline:calc(var(--ppb-spacing) * 2.5)}.ppb\:px-3{padding-inline:calc(var(--ppb-spacing) * 3)}.ppb\:px-4{padding-inline:calc(var(--ppb-spacing) * 4)}.ppb\:px-6{padding-inline:calc(var(--ppb-spacing) * 6)}.ppb\:px-\[0px\]{padding-inline:0}.ppb\:px-\[20px\]{padding-inline:20px}.ppb\:px-\[24px\]{padding-inline:24px}.ppb\:px-\[26px\]{padding-inline:26px}.ppb\:px-\[34px\]{padding-inline:34px}.ppb\:py-0{padding-block:calc(var(--ppb-spacing) * 0)}.ppb\:py-0\.5{padding-block:calc(var(--ppb-spacing) * .5)}.ppb\:py-1{padding-block:calc(var(--ppb-spacing) * 1)}.ppb\:py-1\.5{padding-block:calc(var(--ppb-spacing) * 1.5)}.ppb\:py-2{padding-block:calc(var(--ppb-spacing) * 2)}.ppb\:py-3{padding-block:calc(var(--ppb-spacing) * 3)}.ppb\:py-4{padding-block:calc(var(--ppb-spacing) * 4)}.ppb\:py-6{padding-block:calc(var(--ppb-spacing) * 6)}.ppb\:py-8{padding-block:calc(var(--ppb-spacing) * 8)}.ppb\:py-12{padding-block:calc(var(--ppb-spacing) * 12)}.ppb\:py-\[19px\]{padding-block:19px}.ppb\:py-\[37px\]{padding-block:37px}.ppb\:py-\[41px\]{padding-block:41px}.ppb\:py-\[42px\]{padding-block:42px}.ppb\:pt-0{padding-top:calc(var(--ppb-spacing) * 0)}.ppb\:pt-2{padding-top:calc(var(--ppb-spacing) * 2)}.ppb\:pt-3{padding-top:calc(var(--ppb-spacing) * 3)}.ppb\:pt-4{padding-top:calc(var(--ppb-spacing) * 4)}.ppb\:pr-1{padding-right:calc(var(--ppb-spacing) * 1)}.ppb\:pr-2{padding-right:calc(var(--ppb-spacing) * 2)}.ppb\:pr-2\.5{padding-right:calc(var(--ppb-spacing) * 2.5)}.ppb\:pr-8{padding-right:calc(var(--ppb-spacing) * 8)}.ppb\:pb-2{padding-bottom:calc(var(--ppb-spacing) * 2)}.ppb\:pb-3{padding-bottom:calc(var(--ppb-spacing) * 3)}.ppb\:pb-4{padding-bottom:calc(var(--ppb-spacing) * 4)}.ppb\:pb-8{padding-bottom:calc(var(--ppb-spacing) * 8)}.ppb\:pl-2{padding-left:calc(var(--ppb-spacing) * 2)}.ppb\:pl-4{padding-left:calc(var(--ppb-spacing) * 4)}.ppb\:pl-8{padding-left:calc(var(--ppb-spacing) * 8)}.ppb\:pl-9{padding-left:calc(var(--ppb-spacing) * 9)}.ppb\:text-center{text-align:center}.ppb\:text-left{text-align:left}.ppb\:text-right{text-align:right}.ppb\:align-middle{vertical-align:middle}.ppb\:align-super{vertical-align:super}.ppb\:font-mono{font-family:var(--ppb-font-mono)}.ppb\:text-2xl{font-size:calc(var(--font-ui-large,20px) * 1.2);line-height:var(--tw-leading,var(--ppb-text-2xl--line-height))}.ppb\:text-4xl{font-size:calc(var(--font-ui-large,20px) * 1.8);line-height:var(--tw-leading,var(--ppb-text-4xl--line-height))}.ppb\:text-5xl{font-size:calc(var(--font-ui-large,20px) * 2.4);line-height:var(--tw-leading,var(--ppb-text-5xl--line-height))}.ppb\:text-base{font-size:var(--font-ui-medium,1rem);line-height:var(--tw-leading,var(--ppb-text-base--line-height))}.ppb\:text-lg{font-size:calc(var(--font-ui-large,20px) * .9);line-height:var(--tw-leading,var(--ppb-text-lg--line-height))}.ppb\:text-sm{font-size:var(--font-ui-small,.875rem);line-height:var(--tw-leading,var(--ppb-text-sm--line-height))}.ppb\:text-xl{font-size:var(--font-ui-large,1.25rem);line-height:var(--tw-leading,var(--ppb-text-xl--line-height))}.ppb\:text-xs{font-size:var(--font-ui-smaller,.75rem);line-height:var(--tw-leading,var(--ppb-text-xs--line-height))}.ppb\:text-\[0\.8rem\]{font-size:.8rem}.ppb\:text-\[9px\]{font-size:9px}.ppb\:text-\[10px\]{font-size:10px}.ppb\:text-\[20px\]{font-size:20px}.ppb\:text-\[22px\]{font-size:22px}.ppb\:leading-none{--tw-leading:1;line-height:1}.ppb\:leading-tight{--tw-leading:var(--ppb-leading-tight);line-height:var(--ppb-leading-tight)}.ppb\:font-bold{--tw-font-weight:var(--font-bold,700);font-weight:var(--font-bold,700)}.ppb\:font-medium{--tw-font-weight:var(--font-medium,500);font-weight:var(--font-medium,500)}.ppb\:font-normal{--tw-font-weight:var(--font-normal,400);font-weight:var(--font-normal,400)}.ppb\:font-semibold{--tw-font-weight:var(--font-semibold,600);font-weight:var(--font-semibold,600)}.ppb\:tracking-tight{--tw-tracking:var(--ppb-tracking-tight);letter-spacing:var(--ppb-tracking-tight)}.ppb\:tracking-widest{--tw-tracking:var(--ppb-tracking-widest);letter-spacing:var(--ppb-tracking-widest)}.ppb\:text-balance{text-wrap:balance}.ppb\:break-words{overflow-wrap:break-word}.ppb\:whitespace-nowrap{white-space:nowrap}.ppb\:text-accent-foreground{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:text-background{color:var(--background-primary,var(--ppb-background))}.ppb\:text-blue-500{color:var(--ppb-color-blue-500)}.ppb\:text-card-foreground{color:var(--text-normal,var(--ppb-card-foreground))}.ppb\:text-chart-1,.ppb\:text-chart-1\/60{color:var(--ppb-chart-1)}@supports (color:color-mix(in lab,red,red)){.ppb\:text-chart-1\/60{color:color-mix(in oklab,var(--ppb-chart-1) 60%,transparent)}}.ppb\:text-chart-2{color:var(--ppb-chart-2)}.ppb\:text-chart-3{color:var(--ppb-chart-3)}.ppb\:text-current{color:currentColor}.ppb\:text-destructive{color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\:text-foreground{color:var(--text-normal,var(--ppb-foreground))}.ppb\:text-gray-300{color:var(--ppb-color-gray-300)}.ppb\:text-green-500{color:var(--ppb-color-green-500)}.ppb\:text-muted-foreground,.ppb\:text-muted-foreground\/20{color:var(--text-muted,var(--ppb-muted-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\:text-muted-foreground\/20{color:color-mix(in oklab,var(--text-muted,var(--ppb-muted-foreground)) 20%,transparent)}}.ppb\:text-muted-foreground\/30{color:var(--text-muted,var(--ppb-muted-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\:text-muted-foreground\/30{color:color-mix(in oklab,var(--text-muted,var(--ppb-muted-foreground)) 30%,transparent)}}.ppb\:text-muted-foreground\/80{color:var(--text-muted,var(--ppb-muted-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\:text-muted-foreground\/80{color:color-mix(in oklab,var(--text-muted,var(--ppb-muted-foreground)) 80%,transparent)}}.ppb\:text-popover-foreground{color:var(--ppb-popover-foreground)}.ppb\:text-primary{color:var(--interactive-accent,var(--ppb-primary))}.ppb\:text-primary-foreground{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:text-secondary-foreground{color:var(--text-normal,var(--ppb-secondary-foreground))}.ppb\:text-sidebar-foreground,.ppb\:text-sidebar-foreground\/70{color:var(--ppb-sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.ppb\:text-sidebar-foreground\/70{color:color-mix(in oklab,var(--ppb-sidebar-foreground) 70%,transparent)}}.ppb\:text-white{color:var(--ppb-color-white)}.ppb\:text-yellow-400{color:var(--ppb-color-yellow-400)}.ppb\:text-yellow-500{color:var(--ppb-color-yellow-500)}.ppb\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.ppb\:line-through{text-decoration-line:line-through}.ppb\:underline{text-decoration-line:underline}.ppb\:underline-offset-4{text-underline-offset:4px}.ppb\:opacity-0{opacity:0}.ppb\:opacity-10{opacity:.1}.ppb\:opacity-20{opacity:.2}.ppb\:opacity-30{opacity:.3}.ppb\:opacity-40{opacity:.4}.ppb\:opacity-50{opacity:.5}.ppb\:opacity-60{opacity:.6}.ppb\:opacity-70{opacity:.7}.ppb\:opacity-75{opacity:.75}.ppb\:opacity-80{opacity:.8}.ppb\:shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:ring-ring\/50{--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\:ring-ring\/50{--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}.ppb\:ring-sidebar-ring{--tw-ring-color:var(--ppb-sidebar-ring)}.ppb\:ring-offset-background{--tw-ring-offset-color:var(--background-primary,var(--ppb-background))}.ppb\:outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\:outline-hidden{outline-offset:2px;outline:2px solid #0000}}.ppb\:blur-3xl{--tw-blur:blur(var(--ppb-blur-3xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.ppb\:blur-xl{--tw-blur:blur(var(--ppb-blur-xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.ppb\:backdrop-blur-sm{--tw-backdrop-blur:blur(var(--ppb-blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.ppb\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-none{transition-property:none}.ppb\:delay-1000{transition-delay:1s}.ppb\:duration-200{--tw-duration:.2s;transition-duration:.2s}.ppb\:duration-300{--tw-duration:.3s;transition-duration:.3s}.ppb\:duration-500{--tw-duration:.5s;transition-duration:.5s}.ppb\:duration-700{--tw-duration:.7s;transition-duration:.7s}.ppb\:duration-1000{--tw-duration:1s;transition-duration:1s}.ppb\:ease-in-out{--tw-ease:var(--ppb-ease-in-out);transition-timing-function:var(--ppb-ease-in-out)}.ppb\:ease-linear{--tw-ease:linear;transition-timing-function:linear}.ppb\:ease-out{--tw-ease:var(--ppb-ease-out);transition-timing-function:var(--ppb-ease-out)}.ppb\:delay-1000{--tw-animation-delay:1s;animation-delay:1s}.ppb\:fade-in-0{--tw-enter-opacity:0}.ppb\:outline-none{--tw-outline-style:none;outline-style:none}.ppb\:select-none{-webkit-user-select:none;user-select:none}.ppb\:zoom-in-95{--tw-enter-scale:.95}.ppb\:\[--cell-size\:--spacing\(8\)\]{--cell-size:calc(var(--ppb-spacing) * 8)}.ppb\:group-focus-within\/menu-item\:opacity-100:is(:where(.ppb\:group\/menu-item):focus-within *){opacity:1}@media(hover:hover){.ppb\:group-hover\/menu-item\:opacity-100:is(:where(.ppb\:group\/menu-item):hover *){opacity:1}}.ppb\:group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.ppb\:group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--ppb-spacing) * 8)}.ppb\:group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.ppb\:group)[data-collapsible=icon] *){margin-top:calc(var(--ppb-spacing) * -8)}.ppb\:group-data-\[collapsible\=icon\]\:hidden:is(:where(.ppb\:group)[data-collapsible=icon] *){display:none}.ppb\:group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.ppb\:group)[data-collapsible=icon] *){width:calc(var(--ppb-spacing) * 8)!important;height:calc(var(--ppb-spacing) * 8)!important}.ppb\:group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.ppb\:group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.ppb\:group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.ppb\:group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--ppb-spacing) * 4)))}.ppb\:group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.ppb\:group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--ppb-spacing) * 4)) + 2px)}.ppb\:group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.ppb\:group)[data-collapsible=icon] *){overflow:hidden}.ppb\:group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.ppb\:group)[data-collapsible=icon] *){padding:calc(var(--ppb-spacing) * 0)!important}.ppb\:group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.ppb\:group)[data-collapsible=icon] *){padding:calc(var(--ppb-spacing) * 2)!important}.ppb\:group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.ppb\:group)[data-collapsible=icon] *){opacity:0}.ppb\:group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.ppb\:group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width) * -1)}.ppb\:group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.ppb\:group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width) * -1)}.ppb\:group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.ppb\:group)[data-collapsible=offcanvas] *){width:calc(var(--ppb-spacing) * 0)}.ppb\:group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.ppb\:group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--ppb-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.ppb\:group)[data-disabled=true] *){pointer-events:none}.ppb\:group-data-\[disabled\=true\]\:opacity-50:is(:where(.ppb\:group)[data-disabled=true] *){opacity:.5}.ppb\:group-data-\[focused\=true\]\/day\:relative:is(:where(.ppb\:group\/day)[data-focused=true] *){position:relative}.ppb\:group-data-\[focused\=true\]\/day\:z-10:is(:where(.ppb\:group\/day)[data-focused=true] *){z-index:10}.ppb\:group-data-\[focused\=true\]\/day\:border-ring:is(:where(.ppb\:group\/day)[data-focused=true] *){border-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\:group-data-\[focused\=true\]\/day\:ring-\[3px\]:is(:where(.ppb\:group\/day)[data-focused=true] *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:group-data-\[focused\=true\]\/day\:ring-ring\/50:is(:where(.ppb\:group\/day)[data-focused=true] *){--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\:group-data-\[focused\=true\]\/day\:ring-ring\/50:is(:where(.ppb\:group\/day)[data-focused=true] *){--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}.ppb\:group-data-\[side\=left\]\:-right-4:is(:where(.ppb\:group)[data-side=left] *){right:calc(var(--ppb-spacing) * -4)}.ppb\:group-data-\[side\=left\]\:border-r:is(:where(.ppb\:group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.ppb\:group-data-\[side\=right\]\:left-0:is(:where(.ppb\:group)[data-side=right] *){left:calc(var(--ppb-spacing) * 0)}.ppb\:group-data-\[side\=right\]\:rotate-180:is(:where(.ppb\:group)[data-side=right] *){rotate:180deg}.ppb\:group-data-\[side\=right\]\:border-l:is(:where(.ppb\:group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\:group-data-\[state\=open\]\:rotate-180:is(:where(.ppb\:group)[data-state=open] *){rotate:180deg}.ppb\:group-data-\[variant\=floating\]\:rounded-lg:is(:where(.ppb\:group)[data-variant=floating] *){border-radius:var(--radius-l,var(--ppb-radius))}.ppb\:group-data-\[variant\=floating\]\:border:is(:where(.ppb\:group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.ppb\:group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.ppb\:group)[data-variant=floating] *){border-color:var(--ppb-sidebar-border)}.ppb\:group-data-\[variant\=floating\]\:shadow-sm:is(:where(.ppb\:group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block:is(:where(.ppb\:group\/drawer-content)[data-vaul-drawer-direction=bottom] *){display:block}.ppb\:group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:text-center:is(:where(.ppb\:group\/drawer-content)[data-vaul-drawer-direction=bottom] *),.ppb\:group-data-\[vaul-drawer-direction\=top\]\/drawer-content\:text-center:is(:where(.ppb\:group\/drawer-content)[data-vaul-drawer-direction=top] *){text-align:center}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:top-full:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){top:100%}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){margin-top:calc(var(--ppb-spacing) * 1.5)}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){overflow:hidden}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:rounded-md:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){border-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:border:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){border-style:var(--tw-border-style);border-width:1px}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:bg-popover:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){background-color:var(--ppb-popover)}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){color:var(--ppb-popover-foreground)}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:shadow:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:duration-200:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){--tw-duration:.2s;transition-duration:.2s}@media(hover:hover){.ppb\:peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.ppb\:peer\/menu-button):hover~*){color:var(--ppb-sidebar-accent-foreground)}}.ppb\:peer-disabled\:cursor-not-allowed:is(:where(.ppb\:peer):disabled~*){cursor:not-allowed}.ppb\:peer-disabled\:opacity-50:is(:where(.ppb\:peer):disabled~*){opacity:.5}.ppb\:peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.ppb\:peer\/menu-button)[data-active=true]~*){color:var(--ppb-sidebar-accent-foreground)}.ppb\:peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.ppb\:peer\/menu-button)[data-size=default]~*){top:calc(var(--ppb-spacing) * 1.5)}.ppb\:peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.ppb\:peer\/menu-button)[data-size=lg]~*){top:calc(var(--ppb-spacing) * 2.5)}.ppb\:peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.ppb\:peer\/menu-button)[data-size=sm]~*){top:calc(var(--ppb-spacing) * 1)}.ppb\:selection\:bg-primary ::selection{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:selection\:bg-primary::selection{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:selection\:text-primary-foreground ::selection{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:selection\:text-primary-foreground::selection{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:file\:inline-flex::file-selector-button{display:inline-flex}.ppb\:file\:h-7::file-selector-button{height:calc(var(--ppb-spacing) * 7)}.ppb\:file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.ppb\:file\:bg-transparent::file-selector-button{background-color:#0000}.ppb\:file\:text-sm::file-selector-button{font-size:var(--font-ui-small,.875rem);line-height:var(--tw-leading,var(--ppb-text-sm--line-height))}.ppb\:file\:font-medium::file-selector-button{--tw-font-weight:var(--font-medium,500);font-weight:var(--font-medium,500)}.ppb\:file\:text-foreground::file-selector-button{color:var(--text-normal,var(--ppb-foreground))}.ppb\:placeholder\:text-muted-foreground::placeholder{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:after\:absolute:after{content:var(--tw-content);position:absolute}.ppb\:after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--ppb-spacing) * -2)}.ppb\:after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--ppb-spacing) * 0)}.ppb\:after\:left-1\/2:after{content:var(--tw-content);left:50%}.ppb\:after\:w-1:after{content:var(--tw-content);width:calc(var(--ppb-spacing) * 1)}.ppb\:after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.ppb\:after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.ppb\:group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.ppb\:first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\:last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ppb\:focus\:z-10:focus{z-index:10}.ppb\:focus\:bg-accent:focus{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:focus\:text-accent-foreground:focus{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:focus\:ring-ring:focus{--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\:focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ppb\:focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\:focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.ppb\:focus-visible\:z-10:focus-visible{z-index:10}.ppb\:focus-visible\:border-ring:focus-visible{border-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\:focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:focus-visible\:ring-4:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 20%, transparent)}}.ppb\:focus-visible\:ring-ring:focus-visible,.ppb\:focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\:focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}.ppb\:focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ppb\:focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\:focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.ppb\:focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.ppb\:focus-visible\:outline-ring:focus-visible{outline-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\:active\:bg-sidebar-accent:active{background-color:var(--ppb-sidebar-accent)}.ppb\:active\:text-sidebar-accent-foreground:active{color:var(--ppb-sidebar-accent-foreground)}.ppb\:disabled\:pointer-events-none:disabled{pointer-events:none}.ppb\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.ppb\:disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .ppb\:in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .ppb\:in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.ppb\:has-focus\:border-ring:has(:focus){border-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\:has-focus\:ring-\[3px\]:has(:focus){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:has-focus\:ring-ring\/50:has(:focus){--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\:has-focus\:ring-ring\/50:has(:focus){--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}.ppb\:has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.ppb\:has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--ppb-sidebar)}.ppb\:has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.ppb\:has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--ppb-spacing) * 3)}.ppb\:has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--ppb-spacing) * 2.5)}.ppb\:has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--ppb-spacing) * 3)}.ppb\:has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--ppb-spacing) * 4)}.ppb\:aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.ppb\:aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.ppb\:aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\:aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 20%, transparent)}}.ppb\:aria-selected\:text-muted-foreground[aria-selected=true]{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:data-\[active\=true\]\:z-10[data-active=true]{z-index:10}.ppb\:data-\[active\=true\]\:border-ring[data-active=true]{border-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\:data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\:data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:color-mix(in oklab,var(--background-modifier-hover,var(--ppb-accent)) 50%,transparent)}}.ppb\:data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--ppb-sidebar-accent)}.ppb\:data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-medium,500);font-weight:var(--font-medium,500)}.ppb\:data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--ppb-sidebar-accent-foreground)}.ppb\:data-\[active\=true\]\:ring-\[3px\][data-active=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\:data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}@media(hover:hover){.ppb\:data-\[active\=true\]\:hover\:bg-accent[data-active=true]:hover{background-color:var(--background-modifier-hover,var(--ppb-accent))}}.ppb\:data-\[active\=true\]\:focus\:bg-accent[data-active=true]:focus{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:data-\[active\=true\]\:aria-invalid\:border-destructive[data-active=true][aria-invalid=true]{border-color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/20[data-active=true][aria-invalid=true]{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/20[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 20%, transparent)}}.ppb\:data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.ppb\:data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.ppb\:data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.ppb\:data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.ppb\:data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\:data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--ppb-spacing) * 8)}.ppb\:data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x:calc(52*var(--spacing))}.ppb\:data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x:calc(52*var(--spacing)*-1)}.ppb\:data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x:calc(52*var(--spacing))}.ppb\:data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x:calc(52*var(--spacing)*-1)}.ppb\:data-\[motion\^\=from-\]\:animate-in[data-motion^=from-]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity:0}.ppb\:data-\[motion\^\=to-\]\:animate-out[data-motion^=to-]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[motion\^\=to-\]\:fade-out[data-motion^=to-]{--tw-exit-opacity:0}.ppb\:data-\[orientation\=horizontal\]\:h-1\.5[data-orientation=horizontal]{height:calc(var(--ppb-spacing) * 1.5)}.ppb\:data-\[orientation\=horizontal\]\:h-full[data-orientation=horizontal]{height:100%}.ppb\:data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.ppb\:data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.ppb\:data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.ppb\:data-\[orientation\=vertical\]\:min-h-44[data-orientation=vertical]{min-height:calc(var(--ppb-spacing) * 44)}.ppb\:data-\[orientation\=vertical\]\:w-1\.5[data-orientation=vertical]{width:calc(var(--ppb-spacing) * 1.5)}.ppb\:data-\[orientation\=vertical\]\:w-auto[data-orientation=vertical]{width:auto}.ppb\:data-\[orientation\=vertical\]\:w-full[data-orientation=vertical]{width:100%}.ppb\:data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.ppb\:data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical]{flex-direction:column}.ppb\:data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.ppb\:data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.ppb\:data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.ppb\:data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--ppb-spacing) * 1)}.ppb\:data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.ppb\:data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--ppb-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:data-\[range-end\=true\]\:rounded-md[data-range-end=true]{border-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:data-\[range-end\=true\]\:rounded-r-md[data-range-end=true]{border-top-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:data-\[range-end\=true\]\:bg-primary[data-range-end=true]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:data-\[range-end\=true\]\:text-primary-foreground[data-range-end=true]{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:data-\[range-middle\=true\]\:rounded-none[data-range-middle=true]{border-radius:0}.ppb\:data-\[range-middle\=true\]\:bg-accent[data-range-middle=true]{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:data-\[range-middle\=true\]\:text-accent-foreground[data-range-middle=true]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:data-\[range-start\=true\]\:rounded-md[data-range-start=true]{border-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:data-\[range-start\=true\]\:rounded-l-md[data-range-start=true]{border-top-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:data-\[range-start\=true\]\:bg-primary[data-range-start=true]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:data-\[range-start\=true\]\:text-primary-foreground[data-range-start=true]{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:data-\[selected-single\=true\]\:bg-primary[data-selected-single=true]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:data-\[selected-single\=true\]\:text-primary-foreground[data-selected-single=true]{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:data-\[selected\=true\]\:rounded-none[data-selected=true]{border-radius:0}.ppb\:data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--ppb-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.ppb\:data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--ppb-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.ppb\:data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--ppb-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.ppb\:data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--ppb-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.ppb\:data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--ppb-spacing) * 9)}.ppb\:data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--ppb-spacing) * 8)}:is(.ppb\:\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){:is(.ppb\:\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 90%,transparent)}}:is(.ppb\:\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--ppb-spacing) * 12)}:is(.ppb\:\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:ring-0 *)[data-slot=navigation-menu-link]:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.ppb\:\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:outline-none *)[data-slot=navigation-menu-link]:focus{--tw-outline-style:none;outline-style:none}:is(.ppb\:\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.ppb\:\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.ppb\:\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.ppb\:\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--ppb-spacing) * 2)}.ppb\:data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background-primary,var(--ppb-background))}.ppb\:data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x: calc(100% - 2px) ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.ppb\:data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.ppb\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.ppb\:data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.ppb\:data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.ppb\:data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.ppb\:data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-opacity:0}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-scale:.95}.ppb\:data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity:0}.ppb\:data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[state\=open\]\:bg-accent[data-state=open],.ppb\:data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\:data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:color-mix(in oklab,var(--background-modifier-hover,var(--ppb-accent)) 50%,transparent)}}.ppb\:data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--background-secondary,var(--ppb-secondary))}.ppb\:data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.ppb\:data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.ppb\:data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.ppb\:data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale:.9}.ppb\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.ppb\:data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.ppb\:data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.ppb\:data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.ppb\:data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *)[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-opacity:0}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-scale:.95}@media(hover:hover){.ppb\:data-\[state\=open\]\:hover\:bg-accent[data-state=open]:hover{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--ppb-sidebar-accent)}.ppb\:data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--ppb-sidebar-accent-foreground)}}.ppb\:data-\[state\=open\]\:focus\:bg-accent[data-state=open]:focus{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--background-primary-alt,var(--ppb-muted))}.ppb\:data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--ppb-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--background-modifier-border,var(--ppb-input))}.ppb\:data-\[state\=visible\]\:animate-in[data-state=visible]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity:0}.ppb\:data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\:data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 10%,transparent)}}.ppb\:data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\:data-\[variant\=outline\]\:border-l-0[data-variant=outline]{border-left-style:var(--tw-border-style);border-left-width:0}.ppb\:data-\[variant\=outline\]\:shadow-xs[data-variant=outline]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:data-\[variant\=outline\]\:first\:border-l[data-variant=outline]:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\:data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{inset-inline:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:calc(var(--ppb-spacing) * 24)}.ppb\:data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom]{max-height:80vh}.ppb\:data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius-l,var(--ppb-radius));border-top-right-radius:var(--radius-l,var(--ppb-radius))}.ppb\:data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-style:var(--tw-border-style);border-top-width:1px}.ppb\:data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left]{inset-block:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction=left]{left:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left]{width:75%}.ppb\:data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction=left]{border-right-style:var(--tw-border-style);border-right-width:1px}.ppb\:data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{inset-block:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction=right]{right:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.ppb\:data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction=right]{border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\:data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{inset-inline:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:calc(var(--ppb-spacing) * 24)}.ppb\:data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.ppb\:data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius-l,var(--ppb-radius));border-bottom-left-radius:var(--radius-l,var(--ppb-radius))}.ppb\:data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}@media(min-width:40rem){.ppb\:sm\:block{display:block}.ppb\:sm\:flex{display:flex}.ppb\:sm\:max-w-lg{max-width:var(--ppb-container-lg)}.ppb\:sm\:max-w-sm{max-width:var(--ppb-container-sm)}.ppb\:sm\:flex-row{flex-direction:row}.ppb\:sm\:justify-end{justify-content:flex-end}.ppb\:sm\:gap-2\.5{gap:calc(var(--ppb-spacing) * 2.5)}.ppb\:sm\:pr-2\.5{padding-right:calc(var(--ppb-spacing) * 2.5)}.ppb\:sm\:pl-2\.5{padding-left:calc(var(--ppb-spacing) * 2.5)}.ppb\:sm\:text-left{text-align:left}.ppb\:data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.ppb\:data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:var(--ppb-container-sm)}}@media(min-width:48rem){.ppb\:md\:absolute{position:absolute}.ppb\:md\:block{display:block}.ppb\:md\:flex{display:flex}.ppb\:md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.ppb\:md\:w-auto{width:auto}.ppb\:md\:flex-row{flex-direction:row}.ppb\:md\:gap-1\.5{gap:calc(var(--ppb-spacing) * 1.5)}.ppb\:md\:text-left{text-align:left}.ppb\:md\:text-sm{font-size:var(--font-ui-small,.875rem);line-height:var(--tw-leading,var(--ppb-text-sm--line-height))}.ppb\:md\:opacity-0{opacity:0}.ppb\:md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.ppb\:peer)[data-variant=inset]~*){margin:calc(var(--ppb-spacing) * 2)}.ppb\:md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.ppb\:peer)[data-variant=inset]~*){margin-left:calc(var(--ppb-spacing) * 0)}.ppb\:md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.ppb\:peer)[data-variant=inset]~*){border-radius:var(--radius-xl,calc(var(--ppb-radius) + 4px))}.ppb\:md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.ppb\:peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.ppb\:peer)[data-variant=inset]~*):is(:where(.ppb\:peer)[data-state=collapsed]~*){margin-left:calc(var(--ppb-spacing) * 2)}.ppb\:md\:after\:hidden:after{content:var(--tw-content);display:none}}@media(min-width:64rem){.ppb\:lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.ppb\:dark\:border-input:is(.dark,.dark *){border-color:var(--background-modifier-border,var(--ppb-input))}.ppb\:dark\:bg-destructive\/60:is(.dark,.dark *){background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:bg-destructive\/60:is(.dark,.dark *){background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 60%,transparent)}}.ppb\:dark\:bg-input\/30:is(.dark,.dark *){background-color:var(--background-modifier-border,var(--ppb-input))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:bg-input\/30:is(.dark,.dark *){background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-input)) 30%,transparent)}}.ppb\:dark\:text-muted-foreground:is(.dark,.dark *){color:var(--text-muted,var(--ppb-muted-foreground))}@media(hover:hover){.ppb\:dark\:hover\:bg-accent\/50:is(.dark,.dark *):hover{background-color:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:hover\:bg-accent\/50:is(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--background-modifier-hover,var(--ppb-accent)) 50%,transparent)}}.ppb\:dark\:hover\:bg-input\/50:is(.dark,.dark *):hover{background-color:var(--background-modifier-border,var(--ppb-input))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:hover\:bg-input\/50:is(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-input)) 50%,transparent)}}.ppb\:dark\:hover\:text-accent-foreground:is(.dark,.dark *):hover{color:var(--text-normal,var(--ppb-accent-foreground))}}.ppb\:dark\:focus-visible\:ring-destructive\/40:is(.dark,.dark *):focus-visible{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:focus-visible\:ring-destructive\/40:is(.dark,.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 40%, transparent)}}.ppb\:dark\:aria-invalid\:ring-destructive\/40:is(.dark,.dark *)[aria-invalid=true]{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:aria-invalid\:ring-destructive\/40:is(.dark,.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 40%, transparent)}}.ppb\:dark\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/40:is(.dark,.dark *)[data-active=true][aria-invalid=true]{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/40:is(.dark,.dark *)[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 40%, transparent)}}.ppb\:dark\:data-\[state\=active\]\:border-input:is(.dark,.dark *)[data-state=active]{border-color:var(--background-modifier-border,var(--ppb-input))}.ppb\:dark\:data-\[state\=active\]\:bg-input\/30:is(.dark,.dark *)[data-state=active]{background-color:var(--background-modifier-border,var(--ppb-input))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:data-\[state\=active\]\:bg-input\/30:is(.dark,.dark *)[data-state=active]{background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-input)) 30%,transparent)}}.ppb\:dark\:data-\[state\=active\]\:text-foreground:is(.dark,.dark *)[data-state=active]{color:var(--text-normal,var(--ppb-foreground))}.ppb\:dark\:data-\[state\=checked\]\:bg-primary:is(.dark,.dark *)[data-state=checked]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:dark\:data-\[state\=checked\]\:bg-primary-foreground:is(.dark,.dark *)[data-state=checked]{background-color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:dark\:data-\[state\=unchecked\]\:bg-foreground:is(.dark,.dark *)[data-state=unchecked]{background-color:var(--text-normal,var(--ppb-foreground))}.ppb\:dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark,.dark *)[data-state=unchecked]{background-color:var(--background-modifier-border,var(--ppb-input))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark,.dark *)[data-state=unchecked]{background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-input)) 80%,transparent)}}.ppb\:dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark,.dark *)[data-variant=destructive]:focus{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark,.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 20%,transparent)}}.ppb\:\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-muted-foreground .recharts-cartesian-axis-tick text{fill:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke="#ccc"]{stroke:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\:\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke="#ccc"]{stroke:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 50%,transparent)}}.ppb\:\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:var(--background-modifier-border,var(--ppb-border))}.ppb\:\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.ppb\:\[\&_\.recharts-layer\]\:outline-hidden .recharts-layer{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\:\[\&_\.recharts-layer\]\:outline-hidden .recharts-layer{outline-offset:2px;outline:2px solid #0000}}.ppb\:\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke="#ccc"]{stroke:var(--background-modifier-border,var(--ppb-border))}.ppb\:\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector,.ppb\:\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:var(--background-primary-alt,var(--ppb-muted))}.ppb\:\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke="#ccc"]{stroke:var(--background-modifier-border,var(--ppb-border))}.ppb\:\[\&_\.recharts-sector\]\:outline-hidden .recharts-sector{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\:\[\&_\.recharts-sector\]\:outline-hidden .recharts-sector{outline-offset:2px;outline:2px solid #0000}}.ppb\:\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.ppb\:\[\&_\.recharts-surface\]\:outline-hidden .recharts-surface{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\:\[\&_\.recharts-surface\]\:outline-hidden .recharts-surface{outline-offset:2px;outline:2px solid #0000}}.ppb\:\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--ppb-spacing) * 2)}.ppb\:\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--ppb-spacing) * 1.5)}.ppb\:\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--font-ui-smaller,.75rem);line-height:var(--tw-leading,var(--ppb-text-xs--line-height))}.ppb\:\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-medium,500);font-weight:var(--font-medium,500)}.ppb\:\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--ppb-spacing) * 2)}.ppb\:\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--ppb-spacing) * 0)}.ppb\:\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--ppb-spacing) * 5)}.ppb\:\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--ppb-spacing) * 5)}.ppb\:\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--ppb-spacing) * 12)}.ppb\:\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--ppb-spacing) * 2)}.ppb\:\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--ppb-spacing) * 3)}.ppb\:\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--ppb-spacing) * 5)}.ppb\:\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--ppb-spacing) * 5)}.ppb\:\[\&_p\]\:leading-relaxed p{--tw-leading:var(--ppb-leading-relaxed);line-height:var(--ppb-leading-relaxed)}.ppb\:\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.ppb\:\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.ppb\:\[\&_svg\:not\(\[class\*\=size-\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--ppb-spacing) * 4);height:calc(var(--ppb-spacing) * 4)}.ppb\:\[\&_svg\:not\(\[class\*\=text-\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ppb\:\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.ppb\:\[\&\:first-child\[data-selected\=true\]_button\]\:rounded-l-md:first-child[data-selected=true] button{border-top-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--ppb-spacing) * 0)}.ppb\:\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--ppb-spacing) * 6)}.ppb\:\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--ppb-spacing) * 6)}:is(.ppb\:\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.ppb\:\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.ppb\:\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--ppb-spacing) * 2)}:is(.ppb\:data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--background-modifier-error,var(--ppb-destructive))!important}.ppb\:\[\&\:last-child\[data-selected\=true\]_button\]\:rounded-r-md:last-child[data-selected=true] button{border-top-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:\[\&\>button\]\:hidden>button{display:none}.ppb\:\[\&\>span\]\:text-xs>span{font-size:var(--font-ui-smaller,.75rem);line-height:var(--tw-leading,var(--ppb-text-xs--line-height))}.ppb\:\[\&\>span\]\:opacity-70>span{opacity:.7}.ppb\:\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ppb\:\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.ppb\:\[\&\>svg\]\:size-3>svg{width:calc(var(--ppb-spacing) * 3);height:calc(var(--ppb-spacing) * 3)}.ppb\:\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--ppb-spacing) * 3.5);height:calc(var(--ppb-spacing) * 3.5)}.ppb\:\[\&\>svg\]\:size-4>svg{width:calc(var(--ppb-spacing) * 4);height:calc(var(--ppb-spacing) * 4)}.ppb\:\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--ppb-spacing) * 2.5)}.ppb\:\[\&\>svg\]\:h-3>svg{height:calc(var(--ppb-spacing) * 3)}.ppb\:\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--ppb-spacing) * 2.5)}.ppb\:\[\&\>svg\]\:w-3>svg{width:calc(var(--ppb-spacing) * 3)}.ppb\:\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.ppb\:\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--ppb-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:\[\&\>svg\]\:text-current>svg{color:currentColor}.ppb\:\[\&\>svg\]\:text-muted-foreground>svg{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--ppb-sidebar-accent-foreground)}.ppb\:\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ppb\:\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.ppb\:\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}[data-side=left][data-collapsible=offcanvas] .ppb\:\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--ppb-spacing) * -2)}[data-side=left][data-state=collapsed] .ppb\:\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .ppb\:\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--ppb-spacing) * -2)}[data-side=right][data-state=collapsed] .ppb\:\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-slot=card-content] .ppb\:\[\[data-slot\=card-content\]_\&\]\:bg-transparent,[data-slot=popover-content] .ppb\:\[\[data-slot\=popover-content\]_\&\]\:bg-transparent{background-color:#0000}@media(hover:hover){a.ppb\:\[a\&\]\:hover\:bg-accent:hover{background-color:var(--background-modifier-hover,var(--ppb-accent))}a.ppb\:\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){a.ppb\:\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 90%,transparent)}}a.ppb\:\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){a.ppb\:\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--interactive-accent,var(--ppb-primary)) 90%,transparent)}}a.ppb\:\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){a.ppb\:\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--background-secondary,var(--ppb-secondary)) 90%,transparent)}}a.ppb\:\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--text-normal,var(--ppb-accent-foreground))}}}.agent-panel{background:var(--background-primary);height:100%;color:var(--text-normal);outline:none;display:flex}.agent-empty-icon{opacity:.6;margin-bottom:12px;font-size:2.5em}.agent-empty-hint{color:var(--text-faint);margin-top:4px;font-size:.85em}.agent-panel-sidebar{border-right:1px solid var(--background-modifier-border);background:var(--background-secondary);flex-direction:column;width:220px;min-width:180px;transition:width .2s,min-width .2s;display:flex;overflow:hidden}.agent-sidebar-header{border-bottom:1px solid var(--background-modifier-border);justify-content:space-between;align-items:center;gap:6px;padding:8px 12px;font-size:.85em;font-weight:600;display:flex}.agent-sidebar-btn{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 6px;font-size:.85em;transition:background .15s,color .15s}.agent-sidebar-list{flex:1;overflow-y:auto}.agent-run-item{cursor:pointer;border-bottom:1px solid var(--background-modifier-border-hover);border-left:3px solid #0000;padding:8px 12px;transition:background .15s,border-color .15s}.agent-run-item-header{align-items:center;gap:6px;margin-bottom:2px;display:flex}.agent-run-name{text-overflow:ellipsis;white-space:nowrap;font-size:.85em;font-weight:500;overflow:hidden}.agent-run-item-meta{color:var(--text-faint);align-items:center;gap:6px;padding-left:14px;font-size:.75em;display:flex}.agent-run-file{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.agent-run-event{background:var(--background-modifier-hover);border-radius:3px;padding:1px 4px;font-size:.9em}.agent-status-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.agent-status-running{background:var(--text-accent);animation:1.5s infinite agent-pulse}.agent-status-completed{background:var(--text-success,#4caf50)}.agent-status-pending{background:var(--text-warning,#ff9800);animation:1.5s infinite agent-pulse}.agent-status-badge{white-space:nowrap;border-radius:10px;padding:2px 8px;font-size:.75em;font-weight:600;display:inline-block}.agent-status-badge.agent-status-running{background:rgba(var(--color-accent-rgb,0, 122, 255),.15);color:var(--text-accent)}.agent-status-badge.agent-status-completed{color:var(--text-success,#4caf50);background:#4caf5026}.agent-status-badge.agent-status-failed{color:var(--text-error);background:#f4433626}.agent-status-badge.agent-status-pending{color:var(--text-warning,#ff9800);background:#ff980026}.agent-panel-main{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.agent-panel-placeholder{height:100%;color:var(--text-muted);justify-content:center;align-items:center;font-size:.9em;display:flex}.agent-panel-toolbar{border-bottom:1px solid var(--background-modifier-border);background:var(--background-primary);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:6px 12px;display:flex}.agent-toolbar-left{flex:1;align-items:center;gap:8px;min-width:0;display:flex}.agent-toolbar-agent{color:var(--text-muted);background:var(--background-modifier-hover);border-radius:4px;padding:1px 6px;font-size:.8em}.agent-toolbar-file{color:var(--text-faint);text-overflow:ellipsis;white-space:nowrap;font-size:.8em;overflow:hidden}.agent-toolbar-duration{color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:.8em}.agent-toolbar-right{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.agent-toolbar-btn{border:1px solid var(--background-modifier-border);color:var(--text-muted);cursor:pointer;white-space:nowrap;background:0 0;border-radius:4px;padding:2px 8px;font-size:.8em;transition:background .15s,color .15s,border-color .15s}.agent-toolbar-btn.is-active{background:rgba(var(--color-accent-rgb,0, 122, 255),.1);border-color:var(--text-accent);color:var(--text-accent)}.agent-rerun-btn:hover{background:rgba(var(--color-accent-rgb,0, 122, 255),.1)}.agent-autoscroll-toggle{color:var(--text-muted);cursor:pointer;align-items:center;gap:4px;font-size:.8em;display:flex}.agent-cancel-btn{background:var(--text-error);color:#fff;cursor:pointer;border:none;border-radius:4px;padding:3px 10px;font-size:.8em;font-weight:500;transition:opacity .15s}.agent-search-input{background:var(--background-primary-alt);border:1px solid var(--background-modifier-border);color:var(--text-normal);border-radius:4px;width:140px;padding:2px 8px;font-size:.8em;transition:border-color .15s,width .2s}.agent-output-terminal{font-family:var(--font-monospace);background:var(--background-primary-alt);white-space:pre-wrap;word-break:break-all;flex:1;padding:12px;font-size:13px;line-height:1.5;overflow-y:auto}.agent-output-terminal::-webkit-scrollbar-track{background:0 0}.agent-line{border-radius:2px;min-height:1.5em;padding:0 4px;transition:background .1s;display:flex}.agent-line:hover{background:rgba(var(--color-accent-rgb,0, 122, 255),.04)}.agent-line-error{color:var(--text-error);border-top:1px solid var(--background-modifier-border);margin-top:8px;padding-top:8px;font-weight:600}.agent-line-done{color:var(--text-success,#4caf50);border-top:1px solid var(--background-modifier-border);margin-top:8px;padding-top:8px}.agent-line-pending{color:var(--text-warning,#ff9800);font-style:italic}.agent-line-ts{color:var(--text-faint);-webkit-user-select:none;user-select:none;opacity:.7;flex-shrink:0;margin-right:8px;font-size:.8em}.agent-cursor{color:var(--text-accent);animation:1s step-end infinite agent-blink}.agent-panel-sidebar.is-collapsed .agent-run-item{border-left-width:0;justify-content:center;padding:8px 4px;display:flex}.agent-output-terminal.agent-no-wrap{white-space:pre;word-break:normal;overflow-x:auto}.agent-input-bar{border-top:1px solid var(--background-modifier-border);background:var(--background-primary);align-items:flex-end;gap:8px;padding:8px 12px;display:flex}.agent-input-textarea{border:1px solid var(--background-modifier-border);background:var(--background-primary-alt);min-height:36px;max-height:120px;color:var(--text-normal);font-family:var(--font-interface);resize:none;border-radius:8px;flex:1;padding:8px 12px;font-size:.9em;line-height:1.4;transition:border-color .15s;overflow-y:auto}.agent-input-send{background:var(--interactive-accent);width:36px;height:36px;color:var(--text-on-accent);cursor:pointer;border:none;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;transition:opacity .15s;display:flex}.agent-empty-input-container{flex-direction:column;align-items:center;gap:16px;width:100%;max-width:560px;padding:24px;display:flex}.agent-empty-input-container .agent-input-bar{border-top:none;width:100%;padding:0}.agent-confirm-detail{color:var(--text-muted);margin:4px 0;font-size:.85em}.agent-confirm-buttons{gap:8px;margin-top:8px;display:flex}.agent-confirm-buttons button{cursor:pointer;border-radius:4px;padding:4px 12px;font-size:.85em}.section-view-container{padding:16px;background:var(--background-primary);height:100%;overflow-y:auto;display:flex;flex-direction:column}.section-view-toolbar{display:flex;gap:8px;margin-bottom:16px;padding:8px;background:var(--background-secondary);border-radius:6px;border:1px solid var(--background-modifier-border)}.section-wrapper{background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:8px;overflow:hidden;transition:all .2s ease;position:relative}.section-wrapper:hover{box-shadow:0 2px 8px #0000001a}.sections-container.layout-list .section-wrapper{margin-bottom:16px}.sections-container.layout-list .section-wrapper:last-child{margin-bottom:0}.section-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;height:var(--size-4-12)}.section-title{margin:0;font-size:16px;font-weight:600;color:var(--text-normal)}.section-actions{display:flex;gap:4px}.section-actions button{padding:4px 8px;font-size:12px;border:none;border-radius:4px;cursor:pointer;background:var(--interactive-normal);color:var(--text-normal);transition:background-color .2s ease}.section-actions button:hover{background:var(--interactive-hover)}.section-actions button.mod-warning{background:var(--color-red);color:#fff}.section-content{padding:16px;min-height:120px}.section-config-panel{display:none;padding:12px 16px}.section-view-container.config-mode .section-config-panel{display:block}.section-empty-state{text-align:center;padding:32px 16px;color:var(--text-muted)}.section-empty-icon{font-size:48px;margin-bottom:12px;display:flex;justify-content:center;align-items:center}.section-empty-icon svg{width:48px;height:48px;color:var(--text-muted)}.section-empty-text{font-size:18px;font-weight:600;margin-bottom:8px;color:var(--text-normal)}.section-empty-description{font-size:14px;line-height:1.4;color:var(--text-muted)}.add-section-button{display:flex;align-items:center;justify-content:center;min-height:120px;border:2px dashed var(--background-modifier-border);border-radius:8px;cursor:pointer;transition:all .2s ease;background:var(--background-primary);width:100%;margin-top:16px}.add-section-button:hover{border-color:var(--interactive-accent);background:var(--background-secondary)}.add-section-content{text-align:center;color:var(--text-muted)}.add-section-icon{font-size:24px;margin-bottom:8px}.add-section-text{font-size:14px;font-weight:500}.add-project-button,.add-keyword-button{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:12px;margin-top:16px;background:var(--interactive-accent);color:#fff;border:none;border-radius:6px;cursor:pointer;font-weight:500;transition:background-color .2s ease}.button-icon{display:flex;align-items:center}.button-icon svg{width:16px;height:16px}.hidden{display:none!important}.section-title-container{display:flex;flex-direction:row;align-items:center;gap:4px}.section-title-container .section-icon{margin-bottom:4px;display:flex;align-items:center;justify-content:center}.section-title-container .section-icon svg{width:20px;height:20px;color:var(--text-muted)}.section-title-container .section-title{margin:0}.section-actions button svg,.note-action-btn svg,.add-note-btn svg{display:inline-block;width:16px;height:16px;vertical-align:middle}.section-actions button{display:inline-flex;align-items:center;gap:4px}.sections-container{position:relative}.sections-container.layout-list{display:flex;flex-direction:column;gap:16px}.sections-container.layout-grid{display:block;flex:1;font-size:0;overflow-y:auto;box-sizing:border-box;position:relative}.sections-container.layout-grid .section-wrapper{display:inline-block;vertical-align:top;width:calc(50% - 8px);height:calc(50% - 8px);margin:0 16px 16px 0;font-size:1rem;box-sizing:border-box;overflow:auto}.sections-container.layout-grid .section-wrapper:nth-child(2n){margin-right:0}.sections-container.layout-grid .section-wrapper:nth-last-child(-n+2){margin-bottom:0}.section-drag-handle{cursor:grab;color:var(--text-muted);font-size:14px;padding:4px 8px;border-radius:4px;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.section-drag-handle:hover{background:var(--interactive-hover);color:var(--text-normal)}.section-drag-handle:active{cursor:grabbing;background:var(--interactive-accent);color:#fff}.drag-handle-icon{width:16px;height:16px;fill:currentColor}.section-wrapper.sortable-ghost{opacity:.4}.section-wrapper.sortable-drag{opacity:.5;transform:rotate(2deg);box-shadow:0 5px 15px #0000004d}.sections-container.is-dragging .section-wrapper:not(.sortable-drag){transition:transform .2s ease}.section-wrapper.drop-target{transform:scale(1.02);border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--interactive-accent-hover)}.sortable-ghost{opacity:.4}.sortable-drag{opacity:1!important}.grid-size-selector{display:flex;align-items:center;gap:8px}.grid-size-button{position:relative;padding:8px 12px;border:1px solid var(--background-modifier-border);border-radius:4px;background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;transition:all .2s ease}.grid-size-button:hover{background:var(--interactive-hover)}.grid-size-button.active{background:var(--interactive-accent);color:#fff;border-color:var(--interactive-accent)}.grid-preview{display:grid;gap:2px;margin-top:4px}.grid-cell{width:12px;height:12px;background:var(--background-modifier-border);border-radius:2px}.grid-size-button.active .grid-cell{background:#fff9}.keyword-tag{display:inline-block;padding:2px 6px;background:var(--interactive-accent);color:#fff;border-radius:4px;font-size:12px;cursor:pointer;transition:background-color .2s ease}.keyword-tag:hover{background:var(--interactive-accent-hover)}.keyword-tag.category-personal{background:var(--color-blue)}.keyword-tag.category-terms{background:var(--color-green)}.keyword-tag.category-projects{background:var(--color-purple)}.stat-item{display:flex;flex-direction:column;align-items:center;text-align:center}.stat-label{font-size:12px;color:var(--text-muted);margin-bottom:4px}.stat-value{font-size:18px;font-weight:600;color:var(--text-normal)}.config-group{margin-bottom:12px}.config-group label{display:block;margin-bottom:4px;font-weight:500;color:var(--text-normal)}.config-group select,.config-group input[type=number],.config-group textarea{width:100%;padding:6px 8px;border:1px solid var(--background-modifier-border);border-radius:4px;background:var(--background-primary);color:var(--text-normal)}.config-group input[type=checkbox]{margin-right:6px}.form-group{margin-bottom:20px}.form-group label{display:block;margin-bottom:6px;font-weight:600;color:var(--text-normal)}.form-group input,.form-group select,.form-group textarea{width:100%;padding:10px 12px;border:1px solid var(--background-modifier-border);border-radius:6px;background:var(--background-primary);color:var(--text-normal);font-size:14px;transition:border-color .2s ease}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:var(--interactive-accent)}.form-help{font-size:12px;color:var(--text-muted);margin-top:4px;line-height:1.4}.form-note{font-size:13px;color:var(--text-muted);font-style:italic;padding:12px;background:var(--background-secondary);border-radius:6px}.validation-error-message{color:var(--text-error);margin-top:8px;font-size:14px;font-weight:500}.project-section .projects-container{width:100%}.project-section .projects-container.layout-card{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:0;border-top:1px solid var(--background-modifier-border)}.projects-container.layout-card:has(.section-empty-state){display:flex}.project-card{padding:12px;background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:0;transition:background .2s ease}.project-card:hover{background:var(--background-primary-alt)}.project-title{margin:0 0 8px;font-size:16px;font-weight:600;color:var(--text-normal)}.project-status{display:inline-block;padding:2px 8px;border-radius:12px;font-size:12px;font-weight:500;margin-bottom:8px}.project-status.status-active{background:var(--color-green);color:#fff}.project-status.status-planning{background:var(--color-blue);color:#fff}.project-status.status-completed{background:var(--color-purple);color:#fff}.project-status.status-on-hold{background:var(--color-orange);color:#fff}.project-status.status-cancelled{background:var(--color-red);color:#fff}.project-description{margin-bottom:12px;color:var(--text-muted);font-size:14px;line-height:1.4}.project-session{margin-bottom:12px}.project-session strong{color:var(--text-normal)}.project-session ul{margin:4px 0 0 16px;padding:0}.project-session li{margin-bottom:2px;font-size:14px;color:var(--text-muted)}.project-keywords{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:12px}.project-dates{display:flex;gap:12px;margin-bottom:12px;font-size:12px;color:var(--text-muted)}.project-associations{margin-bottom:12px}.association-group{margin-bottom:6px;font-size:14px}.association-group strong{color:var(--text-normal)}.project-actions{display:flex;gap:8px;margin-top:12px}.project-list{list-style:none;padding:0;margin:0}.project-list-item{padding:12px;border-bottom:1px solid var(--background-modifier-border);cursor:pointer;transition:background-color .2s ease}.project-list-item:hover{background:var(--background-secondary)}.project-list-item:last-child{border-bottom:none}.project-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.project-table{width:100%;border-collapse:collapse}.project-table th,.project-table td{padding:8px 12px;text-align:left;border-bottom:1px solid var(--background-modifier-border)}.project-table th{background:var(--background-secondary);font-weight:600;color:var(--text-normal)}.project-table td{color:var(--text-muted)}.profile-section .profile-container{padding:0}.profile-minimal{padding:16px;background:var(--background-secondary);border-radius:8px;box-shadow:0 2px 8px #0000000d}.profile-row{display:flex;align-items:center;gap:16px}.profile-avatar{width:56px;height:56px;background:linear-gradient(135deg,var(--interactive-accent),var(--interactive-accent-hover));border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:20px;overflow:hidden;flex-shrink:0;border:2px solid var(--background-primary);box-shadow:0 2px 8px #0000001a}.profile-avatar img{width:100%;height:100%;object-fit:cover}.profile-info{flex:1}.profile-name{margin:0 0 4px;font-size:16px;font-weight:600;color:var(--text-normal)}.profile-title{margin:0;font-size:14px;color:var(--text-muted)}.profile-card{background:var(--background-primary);border-radius:12px;overflow:hidden;border:1px solid var(--background-modifier-border)}.profile-header{display:flex;align-items:center;gap:20px;padding:24px;background:linear-gradient(135deg,var(--interactive-accent) 0%,var(--interactive-accent-hover) 100%);color:#fff;position:relative}.profile-header:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.1) 0%,transparent 100%);pointer-events:none}.profile-avatar-large{width:80px;height:80px;background:#ffffff40;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:32px;overflow:hidden;flex-shrink:0;border:3px solid rgba(255,255,255,.3);box-shadow:0 4px 12px #00000026;position:relative;z-index:1}.profile-avatar-large img{width:100%;height:100%;object-fit:cover}.profile-main-info{flex:1}.profile-name-large{margin:0 0 4px;font-size:20px;font-weight:700}.profile-title-large{margin:0;font-size:16px;opacity:.9}.profile-details{padding:16px 20px}.profile-detail{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:14px;color:var(--text-muted)}.profile-detail:last-child{margin-bottom:0}.profile-icon{width:16px;height:16px;color:var(--text-muted)}.profile-detail a{color:var(--text-accent);text-decoration:none}.profile-detail a:hover{text-decoration:underline}.profile-edit-modal .modal-content{background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:8px;padding:24px;max-width:400px;width:90%;max-height:80vh;overflow-y:auto}.profile-edit-modal .profile-form .form-group{margin-bottom:16px}.profile-edit-modal .profile-form label{display:block;margin-bottom:4px;font-weight:500;color:var(--text-normal)}.profile-edit-modal .profile-form input{width:100%;padding:8px 12px;border:1px solid var(--background-modifier-border);border-radius:4px;background:var(--background-primary);color:var(--text-normal)}.profile-edit-modal .modal-buttons{display:flex;gap:8px;justify-content:flex-end;margin-top:20px}.profile-edit-modal .modal-buttons button{padding:8px 16px;border:1px solid var(--background-modifier-border);border-radius:4px;cursor:pointer;font-weight:500;transition:all .2s ease}.profile-edit-modal .modal-buttons button:first-child{background:var(--interactive-accent);color:#fff;border-color:var(--interactive-accent)}.profile-edit-modal .modal-buttons button:first-child:hover{background:var(--interactive-accent-hover)}.profile-edit-modal .modal-buttons button:last-child{background:var(--background-primary);color:var(--text-normal)}.profile-edit-modal .modal-buttons button:last-child:hover{background:var(--interactive-hover)}.papers-section{padding:16px}.papers-search{position:relative;margin-bottom:16px}.papers-search input{width:100%;padding:8px 12px 8px 36px;border:1px solid var(--background-modifier-border);border-radius:6px;background:var(--background-primary);color:var(--text-normal);font-size:14px;transition:border-color .2s ease}.papers-search input:focus{outline:none;border-color:var(--interactive-accent)}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none}.search-icon svg{width:16px;height:16px}.papers-list-container{min-height:200px}.papers-list{display:flex;flex-direction:column;gap:12px}.paper-item{padding:12px;background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:6px;cursor:pointer;transition:all .2s ease}.paper-item:hover{background:var(--background-secondary-alt);box-shadow:0 2px 8px #0000001a;transform:translateY(-1px)}.paper-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:8px}.paper-title{margin:0;font-size:16px;font-weight:600;color:var(--text-normal);line-height:1.4}.paper-meta{display:flex;gap:12px;align-items:center;flex-shrink:0}.papers-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.paper-card{padding:16px;background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:8px;cursor:pointer;transition:all .2s ease;display:flex;flex-direction:column;gap:12px}.paper-card:hover{background:var(--background-secondary-alt);box-shadow:0 4px 12px #0000001a;transform:translateY(-2px)}.paper-card .paper-title{font-size:15px;margin-bottom:8px}.paper-status{display:inline-block;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:500;text-transform:capitalize}.paper-status.status-reading{background:var(--color-blue);color:#fff}.paper-status.status-completed{background:var(--color-green);color:#fff}.paper-status.status-pending{background:var(--color-yellow);color:var(--text-normal)}.paper-status.status-archived{background:var(--background-modifier-border);color:var(--text-muted)}.paper-progress{display:flex;align-items:center;gap:8px;margin-top:8px}.progress-bar{flex:1;height:6px;background:var(--background-modifier-border);border-radius:3px;overflow:hidden}.progress-fill{height:100%;background:var(--interactive-accent);border-radius:3px;transition:width .3s ease}.progress-text{font-size:12px;color:var(--text-muted);min-width:40px;text-align:right}.paper-deadline{font-size:12px;color:var(--text-muted);display:flex;align-items:center;gap:4px}.paper-deadline:before{content:"📅";font-size:14px}.view-mode-toggle{padding:6px;background:transparent;border:none;border-radius:4px;cursor:pointer;color:var(--text-muted);transition:all .2s ease;display:inline-flex;align-items:center;justify-content:center}.view-mode-toggle:hover{background:var(--background-modifier-hover);color:var(--text-normal)}.view-mode-toggle svg{width:16px;height:16px;display:block}.section-actions .view-mode-toggle{margin-right:8px}.tag-filter-bar-container{margin-bottom:16px}.tag-filter-bar{background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:12px;padding:12px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.active-filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px;min-height:32px}.active-filters:empty{display:none}.filter-tag{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:6px;font-size:13px;font-weight:500;border:1px solid var(--background-modifier-border);background:var(--background-secondary);cursor:pointer;transition:all .2s ease;-webkit-user-select:none;user-select:none}.filter-tag:hover{transform:scale(1.02);box-shadow:0 1px 3px #0000000f}.filter-tag-domain{border-color:var(--color-blue);background:#3b8eff1a;color:var(--color-blue)}.filter-tag-method{border-color:var(--color-green);background:#34c7591a;color:var(--color-green)}.filter-tag-custom{border-color:var(--color-yellow);background:#ffcc001a;color:var(--color-yellow)}.filter-tag-status{border-color:var(--color-red);background:#ff3b301a;color:var(--color-red)}.filter-exclude{opacity:.6;text-decoration:line-through}.filter-tag-text{font-size:12px;font-weight:500}.filter-tag-remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#0000001a;color:var(--text-muted);font-size:14px;line-height:1;transition:all .2s ease}.filter-tag-remove:hover{background:#0003;color:var(--text-normal)}.filter-actions{display:flex;gap:8px;margin-bottom:12px}.filter-add-btn,.filter-save-btn,.filter-clear-btn{padding:6px 12px;border-radius:6px;border:1px solid var(--background-modifier-border);background:var(--background-secondary);font-size:13px;font-weight:500;cursor:pointer;transition:all .2s ease}.filter-add-btn:hover,.filter-save-btn:hover,.filter-clear-btn:hover{background:var(--background-secondary-alt);transform:translateY(-1px);box-shadow:0 2px 4px #0000000f}.saved-filters{display:flex;flex-wrap:wrap;gap:8px;padding-top:12px;border-top:1px solid var(--background-modifier-border)}.saved-filter-tab{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:6px;background:var(--background-secondary);border:1px solid var(--background-modifier-border);font-size:13px;font-weight:500;cursor:pointer;transition:all .2s ease}.saved-filter-tab:hover{background:var(--background-secondary-alt);transform:translateY(-1px);box-shadow:0 2px 4px #0000000f}.saved-filter-tab.filter-pinned{background:var(--interactive-accent);color:var(--text-on-accent);border-color:var(--interactive-accent)}.filter-pin-icon svg{width:12px;height:12px}.filter-name{font-size:12px;font-weight:500}.paper-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.tag-group{display:flex;flex-wrap:wrap;gap:4px}.paper-tag{display:inline-block;padding:2px 8px;border-radius:6px;font-size:11px;font-weight:500;border:1px solid;cursor:pointer;transition:all .2s ease;-webkit-user-select:none;user-select:none}.paper-tag:hover{transform:scale(1.05);box-shadow:0 1px 3px #0000000f}.paper-tag-domain{border-color:var(--color-blue);background:#3b8eff1a;color:var(--color-blue)}.paper-tag-method{border-color:var(--color-green);background:#34c7591a;color:var(--color-green)}.paper-tag-custom{border-color:var(--color-yellow);background:#ffcc001a;color:var(--color-yellow)}.paper-metadata{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px;font-size:12px;color:var(--text-muted)}.paper-authors{color:var(--text-muted)}.paper-year{color:var(--text-muted);font-weight:500}.paper-journal{color:var(--text-muted);font-style:italic}.paper-citations{color:var(--color-accent);font-weight:500;margin-left:auto}.paper-journal-info{display:flex;justify-content:space-between;align-items:center;margin-top:4px;font-size:12px;color:var(--text-muted)}.papers-section .paper-card{padding:16px;background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:12px;cursor:pointer;transition:all .2s ease;display:flex;flex-direction:column;gap:8px;box-shadow:0 1px 3px #0000000f}.papers-section .paper-card:hover{background:var(--background-secondary-alt);box-shadow:0 2px 8px #00000014;transform:translateY(-2px)}.paper-card-header{display:flex;flex-direction:column;gap:4px}.papers-section .paper-card .paper-title{font-size:14px;font-weight:600;line-height:1.3;color:var(--text-normal);margin:0}.papers-section .paper-item{padding:12px;background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:12px;cursor:pointer;transition:all .2s ease;box-shadow:0 1px 3px #0000000f}.papers-section .paper-item:hover{background:var(--background-secondary-alt);box-shadow:0 2px 8px #00000014;transform:translateY(-1px)}.paper-title-container{flex:1}.papers-section .paper-header .paper-title{margin:0;font-size:15px;font-weight:600;color:var(--text-normal);line-height:1.3}.paper-status-container{display:flex;flex-direction:column;gap:4px;align-items:flex-end}.filter-save-modal{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center}.modal-backdrop{position:absolute;inset:0;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-buttons{display:flex;justify-content:flex-end;gap:8px}.modal-buttons button{padding:6px 16px;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.capture-section{padding:16px;background-color:var(--background-primary);border-radius:8px;margin-bottom:16px}.capture-input-container{display:flex;gap:8px;margin-bottom:16px;align-items:center}.capture-input{flex:1;padding:8px 12px;border:1px solid var(--background-modifier-border);border-radius:4px;background:var(--background-primary);color:var(--text-normal);font-size:14px}.capture-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--interactive-accent-hover)}.capture-type-selector{display:flex;gap:4px}.type-btn{padding:6px 12px;background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:4px;cursor:pointer;font-size:13px;transition:all .2s}.type-btn:hover{background:var(--background-modifier-hover)}.type-btn.active{background:var(--interactive-accent);color:var(--text-on-accent);border-color:var(--interactive-accent)}.add-capture-btn{padding:8px 16px;background:var(--interactive-accent);color:var(--text-on-accent);border:none;border-radius:4px;cursor:pointer;display:flex;align-items:center;gap:4px;font-size:14px;font-weight:500}.add-capture-btn:hover{background:var(--interactive-accent-hover)}.capture-filter-tabs{display:flex;gap:8px;margin-bottom:16px;border-bottom:1px solid var(--background-modifier-border)}.filter-tab{padding:8px 16px;background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;color:var(--text-muted);font-size:14px;transition:all .2s}.filter-tab:hover{color:var(--text-normal)}.filter-tab.active{color:var(--interactive-accent);border-bottom-color:var(--interactive-accent);font-weight:500}.capture-stats{display:flex;gap:24px;margin-bottom:16px;padding:12px;background:var(--background-secondary);border-radius:6px}.capture-stats .stat-item{display:flex;flex-direction:column;gap:4px}.capture-stats .stat-label{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.capture-stats .stat-value{font-size:18px;font-weight:600;color:var(--text-normal)}.captures-container{margin-top:16px}.captures-list{display:flex;flex-direction:column;gap:10px}.capture-item{padding:14px 16px;background:var(--background-secondary);border-radius:8px;cursor:pointer;transition:all .2s;position:relative;box-shadow:0 1px 3px #0000000d}.capture-item:hover{background:var(--background-modifier-hover);transform:translateY(-1px);box-shadow:0 3px 8px #0000001a}.capture-type-label{position:absolute;top:14px;left:16px;padding:2px 6px;border-radius:10px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;opacity:.6}.capture-type-quick .capture-type-label{background:#42a5f51a;color:#1976d2}.capture-type-idea .capture-type-label{background:#ffa7261a;color:#e65100}.capture-time-badge{position:absolute;top:14px;right:16px;padding:3px 8px;background:var(--background-primary);border-radius:12px;font-size:11px;font-weight:600;color:var(--text-muted);opacity:.8}.capture-content{color:var(--text-normal);margin:28px 0 10px;line-height:1.6;font-size:14px;padding-right:60px}.capture-meta{display:flex;flex-wrap:wrap;gap:16px;font-size:11px;color:var(--text-muted);opacity:.7}.capture-file,.capture-timestamp{display:flex;align-items:center;gap:4px}.capture-file .file-icon,.capture-timestamp .timestamp-icon{width:12px;height:12px;opacity:.8}.capture-tags{display:flex;gap:6px;flex-wrap:wrap}.capture-tag{padding:1px 6px;background:var(--background-primary);border-radius:10px;color:var(--text-muted);font-size:10px;font-weight:500}.capture-tag:hover{background:var(--background-modifier-hover);color:var(--text-normal)}.more-indicator{text-align:center;padding:12px;color:var(--text-muted);font-size:14px;font-style:italic;margin-top:8px}.capture-section .section-empty-state{text-align:center;padding:32px;color:var(--text-muted)}.capture-section .section-empty-icon{font-size:48px;margin-bottom:16px;opacity:.3}.capture-section .section-empty-text{font-size:16px;font-weight:500;margin-bottom:8px;color:var(--text-normal)}.capture-section .section-empty-description{font-size:14px;color:var(--text-muted)}.capture-section .section-config-panel{padding:16px;background:var(--background-secondary);border-radius:6px;margin-top:16px}.capture-section .config-group{margin-bottom:16px}.capture-section .config-group label{display:block;margin-bottom:8px;font-size:14px;font-weight:500;color:var(--text-normal)}.capture-section .config-group input[type=text],.capture-section .config-group input[type=number],.capture-section .config-group select{width:100%;padding:6px 10px;border:1px solid var(--background-modifier-border);border-radius:4px;background:var(--background-primary);color:var(--text-normal);font-size:14px}.capture-section .config-group input[type=checkbox]{margin-right:8px}.section-markdown{width:100%;height:100%;display:flex;flex-direction:column}.markdown-content-container{flex:1;overflow-y:auto;padding:var(--size-4-3);background:var(--background-primary);border-radius:var(--radius-s);position:relative}.markdown-editor{width:100%;min-height:300px;resize:vertical;padding:var(--size-4-2);background:var(--background-modifier-form-field);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);font-family:var(--font-monospace);font-size:var(--font-smaller);line-height:1.5;color:var(--text-normal)}.markdown-editor:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--interactive-accent-hover)}.markdown-preview{padding:var(--size-4-2);background:var(--background-primary);border-radius:var(--radius-s);min-height:200px}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview h5,.markdown-preview h6{margin-top:var(--size-4-3);margin-bottom:var(--size-4-2)}.markdown-preview p{margin-bottom:var(--size-4-2)}.markdown-preview ul,.markdown-preview ol{margin-left:var(--size-4-4);margin-bottom:var(--size-4-2)}.markdown-preview blockquote{border-left:3px solid var(--quote-opening-modifier);padding-left:var(--size-4-3);margin:var(--size-4-2) 0;color:var(--text-muted)}.markdown-preview code{background:var(--code-background);padding:2px 4px;border-radius:var(--radius-s);font-family:var(--font-monospace);font-size:var(--font-smaller)}.markdown-preview pre{background:var(--code-background);padding:var(--size-4-2);border-radius:var(--radius-s);overflow-x:auto;margin-bottom:var(--size-4-2)}.preview-button,.edit-button{margin-top:var(--size-4-2);padding:var(--size-4-2) var(--size-4-3);background:var(--interactive-normal);color:var(--text-normal);border:none;border-radius:var(--radius-s);cursor:pointer;font-size:var(--font-ui-small);transition:background .2s}.preview-button:hover,.edit-button:hover{background:var(--interactive-hover)}.config-mode .section-markdown .section-config-panel{margin-top:var(--size-4-3);padding:var(--size-4-3);background:var(--background-secondary);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border)}.config-mode .section-markdown .config-group{margin-bottom:var(--size-4-3)}.config-mode .section-markdown .config-group h4{margin-bottom:var(--size-4-2);font-size:var(--font-ui-small);font-weight:600;color:var(--text-normal)}.config-mode .section-markdown .config-option{display:flex;align-items:center;margin-bottom:var(--size-4-2);gap:var(--size-4-2)}.config-mode .section-markdown .config-option label{flex:0 0 120px;font-size:var(--font-ui-smaller);color:var(--text-muted)}.config-mode .section-markdown .config-option select,.config-mode .section-markdown .config-option input[type=text]{flex:1;padding:var(--size-2-2) var(--size-4-2);background:var(--background-modifier-form-field);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-normal)}.config-mode .section-markdown .config-option select:focus,.config-mode .section-markdown .config-option input[type=text]:focus{outline:none;border-color:var(--interactive-accent)}.config-mode .section-markdown button.mod-warning{background:var(--background-modifier-error);color:var(--text-on-accent)}.config-mode .section-markdown button.mod-warning:hover{background:var(--background-modifier-error-hover)}.section-view-welcome{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:400px;text-align:center;padding:40px}.section-view-welcome h2{margin-bottom:16px;color:var(--text-normal);font-size:24px}.section-view-welcome p{margin-bottom:24px;color:var(--text-muted);font-size:16px}.configuration-wizard-modal{width:800px;max-width:90vw;height:600px;max-height:85vh}.configuration-wizard{height:100%;display:flex;flex-direction:column}.wizard-header{text-align:center;margin-bottom:32px;padding-bottom:24px;border-bottom:1px solid var(--background-modifier-border)}.wizard-title{margin:0 0 12px;color:var(--text-normal);font-size:28px;font-weight:700}.wizard-description{margin:0;color:var(--text-muted);font-size:16px}.wizard-stepper{height:100%;display:flex;flex-direction:column;overflow:hidden}.wizard-stepper>*{flex-shrink:0}.wizard-stepper .stepper-content{flex-shrink:1;flex-grow:1}.stepper-container{display:flex;flex-direction:column;height:100%}.stepper-header{margin-bottom:32px}.stepper-progress{margin-bottom:24px}.stepper-progress-bar{width:100%;height:6px;background:var(--background-modifier-border);border-radius:3px;overflow:hidden;margin-bottom:8px}.stepper-progress-fill{height:100%;background:var(--interactive-accent);transition:width .3s ease}.stepper-progress-text{text-align:center;font-size:12px;color:var(--text-muted)}.stepper-steps{display:flex;justify-content:space-between;position:relative}.stepper-step{display:flex;flex-direction:column;align-items:center;flex:1;cursor:pointer;transition:all .2s ease}.stepper-step:hover{opacity:.8}.stepper-step-icon{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;margin-bottom:8px;transition:all .2s ease;border:2px solid var(--background-modifier-border);background:var(--background-primary);color:var(--text-muted)}.stepper-step-active .stepper-step-icon{background:var(--interactive-accent);color:#fff;border-color:var(--interactive-accent)}.stepper-step-completed .stepper-step-icon{background:var(--color-green);color:#fff;border-color:var(--color-green)}.stepper-step-content{text-align:center;max-width:120px}.stepper-step-title{font-weight:600;font-size:14px;color:var(--text-normal);margin-bottom:4px}.stepper-step-description{font-size:12px;color:var(--text-muted);line-height:1.3}.stepper-step-optional{font-size:11px;color:var(--text-muted);font-style:italic}.stepper-content{flex:1;padding:24px 0;overflow-y:auto;min-height:300px;display:block!important}.stepper-content-area{height:100%;display:block!important}.wizard-step-content-active{display:block!important;visibility:visible!important}.stepper-navigation{display:flex;justify-content:space-between;align-items:center;padding-top:24px;border-top:1px solid var(--background-modifier-border);margin-top:auto}.stepper-nav-btn{padding:10px 20px;border:1px solid var(--background-modifier-border);border-radius:6px;background:var(--background-primary);color:var(--text-normal);cursor:pointer;font-weight:500;transition:all .2s ease}.stepper-nav-btn:hover{background:var(--interactive-hover)}.stepper-nav-btn:disabled{opacity:.5;cursor:not-allowed}.stepper-next-btn.mod-cta{background:var(--interactive-accent);color:#fff;border-color:var(--interactive-accent)}.stepper-next-btn.mod-cta:hover{background:var(--interactive-accent-hover)}.stepper-skip-btn{background:transparent;color:var(--text-muted);border:none}.stepper-skip-btn:hover{color:var(--text-normal);background:var(--interactive-hover)}.wizard-step-welcome,.wizard-step-profile,.wizard-step-sources,.wizard-step-layout,.wizard-step-complete{max-width:600px;margin:0 auto}.welcome-content{text-align:center}.welcome-title{margin-bottom:24px;color:var(--text-normal)}.welcome-features{text-align:left;margin:24px 0}.welcome-features h3{margin-bottom:12px;color:var(--text-normal)}.welcome-features ul{list-style:none;padding:0}.welcome-features li{padding:8px 0;color:var(--text-normal);font-size:14px}.welcome-note{margin-top:24px;padding:16px;background:var(--background-secondary);border-radius:6px;text-align:center}.complete-content{text-align:center}.success-message{margin-bottom:32px}.success-text{font-size:16px;color:var(--text-normal)}.config-summary{text-align:left;margin:32px 0;padding:24px;background:var(--background-secondary);border-radius:8px}.config-summary h3{margin-top:0;margin-bottom:20px;color:var(--text-normal);text-align:center}.summary-section{margin-bottom:20px}.summary-section:last-child{margin-bottom:0}.summary-section h4{margin:0 0 8px;color:var(--text-normal);font-size:14px;display:flex;align-items:center;gap:6px}.summary-section ul{margin:0;padding-left:20px}.summary-section li{margin-bottom:4px;font-size:13px;color:var(--text-muted)}.next-steps{margin:32px 0;text-align:left}.next-steps h3{margin-bottom:16px;color:var(--text-normal)}.next-steps ul{list-style:none;padding:0}.next-steps li{padding:8px 0;color:var(--text-normal);font-size:14px}.complete-actions{display:flex;gap:12px;justify-content:center;margin-top:32px}.complete-btn{padding:12px 24px;border-radius:6px;cursor:pointer;font-weight:600;transition:all .2s ease}.primary-btn{background:var(--interactive-accent);color:#fff;border:1px solid var(--interactive-accent)}.primary-btn:hover{background:var(--interactive-accent-hover)}.secondary-btn{background:var(--background-primary);color:var(--text-normal);border:1px solid var(--background-modifier-border)}.secondary-btn:hover{background:var(--interactive-hover)}@media(max-width:768px){.stepper-steps{flex-direction:column;gap:16px}.stepper-step{flex-direction:row;text-align:left}.stepper-step-content{max-width:none;margin-left:12px}.complete-actions{flex-direction:column}}.sections-container.free-grid{display:grid;width:100%;height:100%;overflow:auto;position:relative}.free-grid .section-wrapper{overflow:hidden;display:flex;flex-direction:column;background:var(--background-secondary);border-radius:8px;border:1px solid var(--background-modifier-border);transition:transform .2s ease,box-shadow .2s ease}.free-grid .section-wrapper:hover{box-shadow:0 4px 12px #0000001a}.grid-config-mode .section-wrapper{position:relative}.grid-config-mode .grid-item-configurable{outline:2px dashed var(--interactive-accent);outline-offset:-2px}.grid-config-mode .grid-item-configurable:hover{outline-color:var(--interactive-accent-hover);background:var(--background-secondary-alt)}.grid-resize-handle{position:absolute;bottom:4px;right:4px;width:24px;height:24px;cursor:nw-resize;opacity:0;transition:opacity .2s ease;background:var(--interactive-accent);border-radius:4px;display:flex;align-items:center;justify-content:center}.grid-config-mode .section-wrapper:hover .grid-resize-handle{opacity:.6}.grid-resize-handle:hover{opacity:1!important}.grid-resize-handle svg{width:16px;height:16px;color:#fff}.grid-overlay{position:absolute;inset:0;pointer-events:none;z-index:1000}.grid-overlay-lines{width:100%;height:100%;background-image:repeating-linear-gradient(0deg,transparent,transparent calc(100% / var(--grid-rows) - 1px),var(--background-modifier-border) calc(100% / var(--grid-rows) - 1px),var(--background-modifier-border) calc(100% / var(--grid-rows))),repeating-linear-gradient(90deg,transparent,transparent calc(100% / var(--grid-columns) - 1px),var(--background-modifier-border) calc(100% / var(--grid-columns) - 1px),var(--background-modifier-border) calc(100% / var(--grid-columns)));opacity:.3}.snap-indicator{position:absolute;background:var(--interactive-accent);opacity:.3;pointer-events:none;z-index:999;border-radius:4px;transition:all .15s ease}.grid-drop-placeholder{background:var(--background-modifier-hover);border:2px dashed var(--interactive-accent);border-radius:8px;opacity:.5}.free-grid.animating .section-wrapper{transition:all .3s cubic-bezier(.4,0,.2,1)}@media(max-width:768px){.free-grid{grid-template-columns:repeat(6,1fr)!important;grid-template-rows:repeat(8,minmax(120px,1fr))!important}}@media(max-width:480px){.free-grid{grid-template-columns:repeat(4,1fr)!important;grid-template-rows:repeat(10,minmax(100px,1fr))!important}}.grid-reset-button{position:fixed;bottom:20px;right:20px;padding:8px 16px;background:var(--interactive-accent);color:#fff;border-radius:20px;cursor:pointer;box-shadow:0 2px 8px #0003;z-index:1001;display:none;font-size:14px;font-weight:500}.grid-config-mode .grid-reset-button{display:block}.grid-reset-button:hover{background:var(--interactive-accent-hover);transform:translateY(-2px);box-shadow:0 4px 12px #0000004d}.free-grid .section-content{flex:1;overflow:auto;padding:12px}.free-grid .section-header{padding:8px 12px;background:var(--background-primary);border-bottom:1px solid var(--background-modifier-border);display:flex;align-items:center;justify-content:space-between;min-height:36px}.free-grid .section-title{font-weight:500;font-size:14px;color:var(--text-normal)}.view-action.is-active{background-color:var(--interactive-accent);color:var(--text-on-accent)}.view-action.is-active:hover{background-color:var(--interactive-accent-hover)}.view-content.section-view-workspace{padding:0;margin:0}.section-view-container{padding:var(--size-2-1) var(--size-2-1) var(--size-4-8)!important;margin:0;background:var(--background-primary)}.section-view-toolbar{margin:0;padding:10px 16px;border-radius:0;border:none}.sections-container{margin:0;padding:0}.sections-container.layout-grid{grid-template-columns:repeat(var(--grid-columns, 2),1fr)}.section-wrapper{margin:0;border-radius:0;border:1px solid var(--background-modifier-border);box-shadow:none;transition:background .2s ease}.section-wrapper:hover{box-shadow:none}.section-header{padding:8px 12px;border-radius:0}.section-title{font-size:14px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted)}.section-content{padding:12px;min-height:200px}.profile-section{background:var(--background-primary)}.profile-card{padding:16px;border-radius:0}.papers-container{padding:0}.paper-item{padding:12px;margin:0;border-radius:0;border-bottom:1px solid var(--background-modifier-border)}.paper-item:last-child{border-bottom:none}.paper-item:hover{background:var(--background-primary-alt)}.todo-container{padding:0}.todo-item{padding:10px 12px;margin:0;border-radius:0;border-bottom:1px solid var(--background-modifier-border)}.todo-item:last-child{border-bottom:none}.todo-item:hover{background:var(--background-primary-alt)}.todo-stats{display:flex;flex-direction:row}.quick-notes-section .note-input-container{display:flex;justify-content:space-between;gap:var(--size-4-2)}.quick-notes-section .note-input-container input{flex:1}.ideas-container{padding:0}.idea-item{padding:10px 12px;margin:0;border-radius:0;border-bottom:1px solid var(--background-modifier-border)}.idea-item:last-child{border-bottom:none}.ideas-stats{display:flex;flex-direction:row}.project-section .projects-container{padding:0}.project-card{margin:0;padding:12px;border-radius:0;border:1px solid var(--background-modifier-border);border-left:none;border-top:none}.section-empty-state{padding:32px 16px;background:var(--background-primary)}.add-project-button,.add-keyword-button{border-radius:0;margin:12px;background:var(--interactive-accent)}.add-project-button:hover,.add-keyword-button:hover{background:var(--interactive-accent-hover)}.section-config-panel{padding:10px 12px;border-radius:0}.section-wrapper>*{margin-top:0;margin-bottom:0}.section-wrapper.section-hidden{opacity:.5}.section-wrapper.section-hidden .section-content{opacity:.7}@media(max-width:768px){.sections-container{--grid-columns: 1}.section-wrapper{border-right:none}}.section-wrapper[data-section-type=project]{grid-column:1 / -1}.section-wrapper[data-section-type=profile]{order:0}.section-wrapper[data-section-type=papers]{order:1}.section-wrapper[data-section-type=todo]{order:2}.section-wrapper[data-section-type=ideas]{order:3}.section-wrapper[data-section-type=project]{order:4}.ppb-base-grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:8px;height:100%;padding:0}.ppb-base-cell{overflow:hidden;border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary)}.ppb-base-container{display:flex;flex-direction:column;height:100%}.ppb-base-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--background-modifier-border);background:var(--background-secondary);flex-shrink:0}.ppb-base-header-left{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.ppb-base-header-icon{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--radius-s);background:var(--interactive-accent);color:var(--text-on-accent);flex-shrink:0}.ppb-base-header-icon svg{width:16px;height:16px}.ppb-base-header-titles{min-width:0}.ppb-base-title{margin:0;font-size:var(--font-ui-medium);font-weight:var(--font-semibold);color:var(--text-normal);line-height:1.2}.ppb-base-description{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:1.3}.ppb-base-header-right{display:flex;align-items:center;gap:4px;flex-shrink:0}.ppb-base-path-badge{font-size:var(--font-ui-smaller);color:var(--text-muted);background:var(--background-modifier-hover);padding:2px 8px;border-radius:var(--radius-s);max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ppb-base-config-btn,.ppb-base-clear-btn{color:var(--text-muted)}.ppb-base-config-btn:hover,.ppb-base-clear-btn:hover{color:var(--text-normal)}.ppb-base-content{flex:1;overflow-y:auto;padding:0;position:relative}.ppb-base-content>p{margin-block-start:0;margin-block-end:0}.ppb-base-content .internal-embed{height:100%}.ppb-base-content .markdown-embed{height:100%;border:none}.ppb-base-empty-state,.ppb-base-missing-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:24px;text-align:center;gap:8px}.ppb-base-empty-icon,.ppb-base-missing-icon{width:48px;height:48px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-m);background:var(--background-modifier-hover);color:var(--text-muted);margin-bottom:4px}.ppb-base-empty-icon svg,.ppb-base-missing-icon svg{width:24px;height:24px}.ppb-base-empty-title,.ppb-base-missing-title{margin:0;font-size:var(--font-ui-medium);font-weight:var(--font-semibold);color:var(--text-normal)}.ppb-base-empty-hint,.ppb-base-missing-path{margin:0;font-size:var(--font-ui-small);color:var(--text-muted)}.ppb-base-empty-btn{margin-top:8px}.ppb-base-error{padding:16px;color:var(--text-error);font-size:var(--font-ui-small);text-align:center}.ppb-base-config-warning{display:flex;align-items:center;gap:6px;padding:8px 12px;margin-top:4px;border-radius:var(--radius-s);background:var(--background-modifier-error);color:var(--text-error);font-size:var(--font-ui-small)}.ppb-base-config-warning .svg-icon{width:16px;height:16px;flex-shrink:0}.ppb-base-selector-modal{max-width:600px}.ppb-base-modal-title{display:flex;align-items:center;gap:8px;margin-bottom:16px}.ppb-base-modal-title h2{margin:0}.ppb-base-modal-icon{display:flex;align-items:center;color:var(--interactive-accent)}.ppb-base-modal-icon svg{width:24px;height:24px}.ppb-base-modal-section{margin-bottom:16px}.ppb-base-modal-section h3{margin:0 0 12px;font-size:var(--font-ui-medium);color:var(--text-normal)}.ppb-base-modal-divider{display:flex;align-items:center;gap:12px;margin:20px 0;color:var(--text-muted);font-size:var(--font-ui-smaller);font-weight:var(--font-semibold);text-transform:uppercase;letter-spacing:.05em}.ppb-base-modal-divider:before,.ppb-base-modal-divider:after{content:"";flex:1;height:1px;background:var(--background-modifier-border)}.ppb-base-search{margin-bottom:8px}.ppb-base-search-input{width:100%;padding:8px 12px;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small)}.ppb-base-search-input:focus{border-color:var(--interactive-accent);outline:none;box-shadow:0 0 0 2px var(--interactive-accent-hover)}.ppb-base-file-list{max-height:200px;overflow-y:auto;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s)}.ppb-base-file-item{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;border-bottom:1px solid var(--background-modifier-border)}.ppb-base-file-item:last-child{border-bottom:none}.ppb-base-file-item:hover{background:var(--background-modifier-hover)}.ppb-base-file-icon{display:flex;color:var(--text-muted);flex-shrink:0}.ppb-base-file-icon svg{width:16px;height:16px}.ppb-base-file-info{display:flex;flex-direction:column;min-width:0}.ppb-base-file-name{font-size:var(--font-ui-small);font-weight:var(--font-medium);color:var(--text-normal)}.ppb-base-file-path{font-size:var(--font-ui-smaller);color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ppb-base-empty-list{padding:16px;text-align:center;color:var(--text-muted);font-size:var(--font-ui-small)}.ppb-base-filters h4{margin:0 0 8px;font-size:var(--font-ui-small);color:var(--text-muted)}.ppb-base-filter-list{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}.ppb-base-filter-row{display:flex;align-items:center;gap:6px}.ppb-base-filter-type{padding:4px 8px;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-smaller);min-width:110px}.ppb-base-filter-value{flex:1;padding:4px 8px;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-smaller)}.ppb-base-filter-remove{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:none;background:none;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-s);font-size:16px}.ppb-base-filter-remove:hover{color:var(--text-error);background:var(--background-modifier-hover)}.ppb-base-add-filter{font-size:var(--font-ui-smaller);color:var(--interactive-accent);background:none;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-s);padding:4px 12px;cursor:pointer;width:100%}.ppb-base-add-filter:hover{background:var(--background-modifier-hover)}.ppb-base-create-action{margin-top:16px;display:flex;justify-content:flex-end}.ppb-base-create-btn{padding:8px 24px}.ppb-academic-base .ppb-base-content .bases-header{display:none!important}.ppb-academic-grid .ppb-academic-base{min-height:200px}.ppb-native-shell{max-width:90rem;margin:0 auto;padding:24px;min-height:100vh;position:relative}.ppb-native-shell-header{margin-bottom:0;position:relative;z-index:20}.ppb-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:2rem}.ppb-header-left{display:flex;align-items:center;gap:1.5rem}.ppb-header-avatar{width:5rem;height:5rem;border-radius:9999px;border:2px solid white;overflow:hidden;background:#fff;box-shadow:0 4px 6px -1px #0000001a;flex-shrink:0}.ppb-header-avatar img{width:100%;height:100%;object-fit:cover}.ppb-header-info{display:flex;flex-direction:column;gap:.25rem}.ppb-header-name-row{display:flex;align-items:center;gap:.75rem}.ppb-header-name{font-size:1.25rem;font-weight:500;color:var(--ppb-foreground, var(--text-normal));margin:0}.ppb-header-title{padding:.25rem .5rem;font-size:.75rem;font-weight:500;background:hsl(var(--ppb-secondary, 210 40% 96%) / .2);color:var(--ppb-secondary-foreground, var(--text-muted));border-radius:.375rem}.ppb-header-details{display:flex;flex-direction:column;gap:.25rem}.ppb-header-detail-row{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:var(--ppb-muted-foreground, var(--text-muted))}.ppb-header-right{display:flex;flex-direction:column;align-items:flex-end;gap:.75rem;height:5rem;justify-content:space-between}button.ppb-header-settings-btn{display:flex;align-items:center;gap:.25rem;height:2rem;padding:0 .75rem;font-size:.875rem;border:1px solid hsl(var(--ppb-border, 214 32% 91%) / .5);border-radius:.375rem;background:transparent;color:var(--ppb-foreground, var(--text-normal));box-shadow:unset;cursor:pointer;transition:border-color .2s}button.ppb-header-settings-btn:hover{border-color:var(--ppb-border, var(--background-modifier-border))}button.ppb-header-settings-btn svg{flex-shrink:0}.ppb-header-tab-switcher{display:grid;grid-template-columns:repeat(3,1fr);width:12rem;background:var(--ppb-muted, var(--background-secondary));border-radius:.75rem;padding:.25rem}button.ppb-header-tab-btn{padding:.375rem .75rem;font-size:.875rem;font-weight:500;border-radius:.375rem;border:none;background:transparent;color:hsl(var(--ppb-muted-foreground, 215 16% 47%) / .8);box-shadow:unset;cursor:pointer;transition:all .15s;text-align:center}button.ppb-header-tab-btn:hover{color:var(--ppb-foreground, var(--text-normal))}button.ppb-header-tab-btn.ppb-header-tab-active{background:var(--ppb-background, var(--background-primary));color:var(--ppb-foreground, var(--text-normal));box-shadow:0 1px 2px #0000000d}.ppb-tab-container{display:none}.ppb-tab-container.ppb-tab-active{display:block}.ppb-tab-academic{container-type:inline-size}.ppb-academic-grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto;gap:24px}@container (max-width: 720px){.ppb-academic-grid{grid-template-columns:1fr}}.ppb-tab-projects{height:calc(100vh - 9rem)}.ppb-personal-grid,.ppb-personal-section{display:grid;grid-template-columns:1fr 1fr;gap:32px}.ppb-island{min-height:200px;overflow:hidden}.ppb-island-full-width{grid-column:1 / -1}.ppb-focus-heatmap{height:100%;overflow-y:auto}.ppb-focus-wrapper{display:flex;flex-direction:column;gap:16px;padding:12px}.ppb-focus-stats{display:flex;gap:8px}.ppb-focus-stat-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;padding:12px 8px;border-radius:var(--radius-m);background:var(--background-secondary);border:1px solid var(--background-modifier-border)}.ppb-focus-stat-icon{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--radius-s);background:var(--interactive-accent);color:var(--text-on-accent)}.ppb-focus-stat-icon svg{width:14px;height:14px}.ppb-focus-stat-value{font-size:var(--font-ui-large);font-weight:var(--font-bold);color:var(--text-normal);line-height:1}.ppb-focus-stat-label{font-size:var(--font-ui-smaller);color:var(--text-muted)}.ppb-focus-section-title{font-size:var(--font-ui-small);font-weight:var(--font-semibold);color:var(--text-muted);text-transform:uppercase;letter-spacing:.03em;margin-bottom:8px}.ppb-focus-tags-section{display:flex;flex-direction:column}.ppb-focus-tag-list{display:flex;flex-direction:column;gap:6px}.ppb-focus-tag-row{display:flex;align-items:center;gap:8px}.ppb-focus-tag-name{flex-shrink:0;width:80px;font-size:var(--font-ui-smaller);color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ppb-focus-tag-bar-bg{flex:1;height:6px;border-radius:3px;background:var(--background-modifier-hover);overflow:hidden}.ppb-focus-tag-bar{height:100%;border-radius:3px;background:var(--interactive-accent);transition:width .3s ease}.ppb-focus-tag-count{flex-shrink:0;width:28px;text-align:right;font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-normal)}.ppb-focus-heatmap-section{display:flex;flex-direction:column}.ppb-focus-heatmap-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:4px}.ppb-focus-heatmap-cell{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:6px 2px;border-radius:var(--radius-s);min-height:44px}.ppb-focus-heatmap-cell:not(.ppb-focus-heat-0) .ppb-focus-heatmap-label{color:var(--text-on-accent)}.ppb-focus-heatmap-label{font-size:9px;color:var(--text-faint);line-height:1;margin-bottom:2px}.ppb-focus-heatmap-count{font-size:var(--font-ui-smaller);font-weight:var(--font-semibold);line-height:1}.ppb-focus-heat-0{background:var(--background-modifier-hover)}.ppb-focus-heat-0 .ppb-focus-heatmap-count{color:var(--text-faint)}.ppb-focus-heat-1{background:color-mix(in srgb,var(--interactive-accent) 20%,var(--background-primary))}.ppb-focus-heat-1 .ppb-focus-heatmap-count{color:var(--interactive-accent)}.ppb-focus-heat-2{background:color-mix(in srgb,var(--interactive-accent) 40%,var(--background-primary))}.ppb-focus-heat-2 .ppb-focus-heatmap-count{color:var(--interactive-accent)}.ppb-focus-heat-3{background:color-mix(in srgb,var(--interactive-accent) 60%,var(--background-primary))}.ppb-focus-heat-3 .ppb-focus-heatmap-count{color:var(--text-on-accent)}.ppb-focus-heat-4{background:var(--interactive-accent)}.ppb-focus-heat-4 .ppb-focus-heatmap-count{color:var(--text-on-accent)}.ppb-focus-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:24px;text-align:center;gap:8px}.ppb-focus-empty-icon{width:48px;height:48px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-m);background:var(--background-modifier-hover);color:var(--text-muted)}.ppb-focus-empty-icon svg{width:24px;height:24px}.ppb-focus-empty-title{margin:0;font-size:var(--font-ui-medium);font-weight:var(--font-semibold);color:var(--text-normal)}.ppb-focus-empty-hint{margin:0;font-size:var(--font-ui-small);color:var(--text-muted)}.ppb-base-toggle-btn.is-active{color:var(--interactive-accent)}.ppb-focus-map{padding:12px}.ppb-focus-map-info{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;font-size:var(--font-ui-smaller);color:var(--text-muted)}.ppb-focus-map-tags{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ppb-focus-map-grid{display:grid;gap:8px;width:100%}.ppb-focus-map-week-header{font-size:var(--font-ui-smaller);color:var(--text-muted);text-align:center;padding:4px}.ppb-focus-map-month-label{font-size:var(--font-ui-smaller);color:var(--text-muted);display:flex;align-items:center;justify-content:flex-end;padding-right:8px}.ppb-focus-map-cell{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:8px 4px;border:1px solid var(--background-modifier-border);cursor:default;transition:transform .15s ease,box-shadow .15s ease}.ppb-focus-map-cell:hover{transform:scale(1.05)}.ppb-focus-map-cell-tag{font-size:var(--font-ui-smaller);font-weight:var(--font-medium);margin-bottom:2px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.ppb-focus-map-cell-pct{font-size:var(--font-ui-smaller)}.ppb-focus-map-cell-count{font-size:10px;opacity:.75;margin-top:2px}.ppb-focus-map-legend{display:flex;align-items:center;justify-content:space-between;margin-top:12px;padding:8px 12px;font-size:var(--font-ui-smaller);color:var(--text-muted);background:var(--background-secondary);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border)}.ppb-focus-map-legend-bar{display:flex;align-items:center;gap:6px}.ppb-focus-map-legend-swatches{display:flex;gap:3px}.ppb-focus-map-legend-swatch{width:12px;height:12px}.ppb-focus-map-loading{display:flex;align-items:center;justify-content:center;gap:8px;padding:32px;color:var(--text-muted);font-size:var(--font-ui-small)}.ppb-focus-map-spinner svg{animation:ppb-spin 1s linear infinite}.ppb-focus-map-error{display:flex;flex-direction:column;align-items:center;gap:8px;padding:32px;text-align:center;color:var(--text-error);font-size:var(--font-ui-small)}.ppb-focus-map-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;text-align:center;gap:4px}.ppb-focus-map-empty p{margin:0;color:var(--text-muted);font-size:var(--font-ui-small)}.ppb-focus-map-hint{font-size:var(--font-ui-smaller)!important}.ppb-focus-map-drilldown{padding:12px}.ppb-focus-map-drilldown-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.ppb-focus-map-drilldown-label{font-size:var(--font-ui-small);font-weight:var(--font-medium);color:var(--text-normal)}.ppb-focus-map-drilldown-back{flex-shrink:0}.ppb-focus-map-drilldown-content{min-height:100px}.ppb-overview{position:relative;padding:30px;height:100%;overflow:hidden;border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);container-type:inline-size}.ppb-overview-spark-wrap{position:absolute;top:40px;right:0;width:320px;height:160px;opacity:.3;transform:scale(1.1);pointer-events:none}.ppb-overview-sparkline{width:100%;height:100%;transform:scaleY(.75)}.ppb-overview-content{position:relative;z-index:1;display:flex;flex-direction:column;height:100%}.ppb-overview-title{margin:0 0 16px;font-size:20px;font-weight:var(--font-medium);color:var(--text-muted)}.ppb-overview-metric{display:flex;align-items:baseline;gap:12px;margin-bottom:4px}.ppb-overview-metric-value{font-size:3rem;font-weight:var(--font-bold);color:var(--text-normal);line-height:1}.ppb-overview-metric-growth{display:flex;align-items:center;gap:4px;font-size:var(--font-ui-smaller);color:var(--interactive-accent)}.ppb-overview-metric-growth svg{width:12px;height:12px}.ppb-overview-subtitle{margin:0;font-size:var(--font-ui-small);color:var(--text-muted)}.ppb-overview-stats{margin-top:auto;display:grid;grid-template-columns:repeat(4,1fr);gap:20px}@container (max-width: 400px){.ppb-overview-stats{grid-template-columns:repeat(2,1fr);gap:12px}}.ppb-overview-stat{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.ppb-overview-stat-icon{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--background-modifier-hover);color:var(--text-normal)}.ppb-overview-stat-icon svg{width:20px;height:20px}.ppb-overview-stat-info{display:flex;flex-direction:column}.ppb-overview-stat-label{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:1.4}.ppb-overview-stat-value{font-size:var(--font-ui-large);font-weight:var(--font-bold);color:var(--text-normal);line-height:1.2}.ppb-overview-loading,.ppb-overview-error{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:48px;text-align:center;color:var(--text-muted);font-size:var(--font-ui-small);height:100%}.ppb-overview-error{color:var(--text-error)}.ppb-overview-spinner svg{animation:ppb-spin 1s linear infinite}.ppb-overview-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-muted);font-size:var(--font-ui-small)}.ppb-overview-empty p{margin:0}.ppb-today-split{display:grid;grid-template-columns:1fr 1fr;gap:24px;height:100%;container-type:inline-size}@container (max-width: 480px){.ppb-today-split{grid-template-columns:1fr}}.ppb-today-split .bases-header{display:none!important}.ppb-today{display:grid;grid-template-columns:1fr 1fr;gap:24px;height:100%;container-type:inline-size}@container (max-width: 480px){.ppb-today{grid-template-columns:1fr}}.ppb-today--loading{display:flex}.ppb-today-loading,.ppb-today-error{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:48px;text-align:center;color:var(--text-muted);font-size:var(--font-ui-small);width:100%}.ppb-today-error{color:var(--text-error)}.ppb-today-spinner svg{animation:ppb-spin 1s linear infinite}.ppb-today-empty{display:flex;align-items:center;justify-content:center;width:100%;color:var(--text-muted);font-size:var(--font-ui-small)}.ppb-today-empty p{margin:0}.ppb-today-left{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);padding:26px 20px 37px;overflow:hidden;position:relative}.ppb-today-card-title{margin:0 0 16px;font-size:20px;font-weight:var(--font-medium)}.ppb-today-stats{display:flex;flex-direction:column;gap:12px;padding:19px 0}.ppb-today-stat-row{display:flex;align-items:center;justify-content:space-between}.ppb-today-stat-lhs{display:flex;align-items:center;gap:12px}.ppb-today-stat-icon{width:32px;height:32px;border-radius:var(--radius-s);display:flex;align-items:center;justify-content:center;flex-shrink:0}.ppb-today-stat-icon span{display:flex;align-items:center;justify-content:center}.ppb-today-stat-icon svg{width:16px;height:16px}.ppb-today-stat-label{font-size:var(--font-ui-small);color:var(--text-muted)}.ppb-today-stat-value{font-size:var(--font-ui-small);font-weight:var(--font-medium);color:var(--text-normal)}.ppb-today-right{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);padding:24px;overflow:hidden;position:relative;display:flex;flex-direction:column}.ppb-today-ticket-head{text-align:center;margin-bottom:16px}.ppb-today-ticket-brand{font-size:20px;font-weight:var(--font-bold);color:var(--text-normal)}.ppb-today-ticket-sub{font-size:var(--font-ui-smaller);color:var(--text-muted);margin-bottom:8px}.ppb-today-ticket-badge{display:inline-block;padding:2px 12px;border-radius:999px;font-size:var(--font-ui-smaller);font-weight:var(--font-medium);background:var(--background-modifier-hover);color:var(--text-normal)}.ppb-today-bars{display:flex;flex-direction:column;gap:12px;flex:1}.ppb-today-bar-group{display:flex;flex-direction:column;gap:4px}.ppb-today-bar-header{display:flex;justify-content:space-between;font-size:var(--font-ui-smaller);color:var(--text-muted)}.ppb-today-bar-pct{font-weight:var(--font-medium)}.ppb-today-bar-track{width:100%;height:8px;border-radius:4px;background:var(--background-modifier-hover);overflow:hidden}.ppb-today-bar-fill{height:100%;border-radius:4px;transition:width .4s ease}.ppb-today-divider{border-top:1px dashed var(--background-modifier-border);margin:16px 0}.ppb-today-focus-btn-wrap{text-align:center}.ppb-today-focus-btn{display:inline-flex;align-items:center;gap:8px;width:100%;justify-content:center;padding:10px 16px;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);cursor:pointer;transition:background .15s ease}.ppb-today-focus-btn:hover:not(:disabled){background:var(--background-modifier-hover)}.ppb-today-focus-btn:disabled{opacity:.6;cursor:not-allowed}.ppb-today-focus-btn svg{width:16px;height:16px}:root{--diff-selection-bg: #b3d7ff;--diff-gutter-insert-bg: #d6fedb;--diff-gutter-delete-bg: #fadde0;--diff-gutter-selected-bg: #fffce0;--diff-code-insert-bg: #eaffee;--diff-code-insert-edit-bg: #c0dc91;--diff-code-delete-bg: #fdeff0;--diff-code-delete-edit-bg: #f39ea2;--diff-code-selected-bg: #fffce0;--diff-omit-gutter-line: #cb2a1d}.theme-dark{--diff-selection-bg: rgba(56, 139, 253, .15);--diff-gutter-insert-bg: rgba(46, 160, 67, .15);--diff-gutter-delete-bg: rgba(248, 81, 73, .15);--diff-gutter-selected-bg: rgba(255, 255, 255, .05);--diff-code-insert-bg: rgba(46, 160, 67, .1);--diff-code-insert-edit-bg: rgba(46, 160, 67, .35);--diff-code-delete-bg: rgba(248, 81, 73, .1);--diff-code-delete-edit-bg: rgba(248, 81, 73, .35);--diff-code-selected-bg: rgba(255, 255, 255, .05);--diff-omit-gutter-line: #f85149}.institution-search-input{width:100%;padding:8px;margin-bottom:8px;border:1px solid var(--background-modifier-border);border-radius:4px}.search-container{margin-bottom:16px}.search-results{margin:16px 0;padding:12px;border:1px solid var(--background-modifier-border);border-radius:4px;background-color:var(--background-primary)}.search-results table{width:100%;border-collapse:collapse}.search-results th,.search-results td{padding:8px;border:1px solid var(--background-modifier-border)}.search-results th{background-color:var(--background-secondary);font-weight:700}.vertical-tab-nav-item[data-plugin-id=paperbell]:after{content:" 🎓"}.vertical-tab-nav-item-pro{right:var(--size-4-2);position:absolute}.vertical-tab-nav-item-pro:before{content:"PRO";font-size:var(--font-smallest);color:var(--text-faint);padding-left:var(--size-2-2);padding-right:var(--size-2-2);background-color:var(--background-secondary);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border)}.vertical-tab-nav-item[data-plugin-id=paperbell]{position:relative}.paperbell-replacements{margin-bottom:1em}.paperbell-replacement-item{display:flex;align-items:center;margin-bottom:.5em;padding:.5em;background-color:var(--background-secondary);border-radius:4px}.paperbell-replacement-fields{flex-grow:1;margin-right:.5em;display:flex;gap:.5em}.paperbell-replacement-fields input{flex-grow:1}.paperbell-replacement-buttons{display:flex;gap:.3em}.paperbell-replacement-item:first-child .paperbell-replacement-buttons .clickable-icon.clickable-icon-move-up[disabled]{pointer-events:none}.paperbell-replacement-item:last-child .paperbell-replacement-buttons .clickable-icon.clickable-icon-move-down[disabled]{pointer-events:none}.diff{background-color:var(--diff-background-color);border-collapse:collapse;color:var(--diff-text-color);table-layout:fixed;width:100%}.diff::-moz-selection{background-color:var(--diff-selection-bg);color:var(--diff-selection-text-color, var(--diff-text-color))}.diff::selection{background-color:var(--diff-selection-bg);color:var(--diff-selection-text-color, var(--diff-text-color))}.diff td{padding-bottom:0;padding-top:0;vertical-align:top}.diff-line{font-family:Consolas,Courier,monospace;font-family:var(--diff-font-family);line-height:1.5}.diff-gutter>a{color:inherit;display:block}.diff-gutter{cursor:pointer;padding:0 1ch;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none}.diff-gutter-insert{background-color:var(--diff-gutter-insert-bg);color:var(--diff-gutter-insert-text-color, var(--diff-text-color))}.diff-gutter-delete{background-color:var(--diff-gutter-delete-bg);color:var(--diff-gutter-delete-text-color, var(--diff-text-color))}.diff-gutter-omit{cursor:default}.diff-gutter-selected{background-color:var(--diff-gutter-selected-bg);color:var(--diff-gutter-selected-text-color, var(--diff-text-color))}.diff-code{word-wrap:break-word;padding:0 0 0 .5em;white-space:pre-wrap;word-break:break-all}.diff-code-edit{color:inherit}.diff-code-insert{background-color:var(--diff-code-insert-bg);color:var(--diff-code-insert-text-color, var(--diff-text-color))}.diff-code-insert .diff-code-edit{background-color:var(--diff-code-insert-edit-bg);color:var(--diff-code-insert-edit-text-color, var(--diff-text-color))}.diff-code-delete{background-color:var(--diff-code-delete-bg);color:var(--diff-code-delete-text-color, var(--diff-text-color))}.diff-code-delete .diff-code-edit{background-color:var(--diff-code-delete-edit-bg);color:var(--diff-code-delete-edit-text-color, var(--diff-text-color))}.diff-code-selected{background-color:var(--diff-code-selected-bg);color:var(--diff-code-selected-text-color, var(--diff-text-color))}.diff-widget-content{vertical-align:top}.diff-gutter-col{width:7ch}.diff-gutter-omit{height:0}.diff-gutter-omit:before{background-color:var(--diff-omit-gutter-line);content:" ";display:block;height:100%;margin-left:4.6ch;overflow:hidden;white-space:pre;width:2px}.diff-decoration{line-height:1.5;-webkit-user-select:none;-moz-user-select:none;user-select:none}.diff-decoration-content{font-family:Consolas,Courier,monospace;font-family:var(--diff-font-family);padding:0}.conflict-view{display:flex;flex-direction:column;height:100%;width:100%;padding:20px}.conflict-view-description{margin-bottom:16px;color:var(--text-muted)}.conflict-view-body{display:flex;flex:1;min-height:0;gap:12px}.conflict-view-sidebar{flex:0 0 300px;overflow-y:auto;border-right:1px solid var(--background-modifier-border);padding-right:12px}.conflict-view-detail{flex:1;overflow:auto;min-width:0}.conflict-view-detail-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-muted);font-style:italic}.conflict-view-detail-header{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;margin-bottom:8px;background-color:var(--background-secondary);border-radius:4px;gap:12px}.conflict-view-detail-path{flex:1;font-family:var(--font-monospace);font-size:var(--font-smaller);color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.conflict-view-detail-actions{display:flex;gap:12px;flex-shrink:0}.conflict-resolution-label{display:flex;align-items:center;gap:4px;white-space:nowrap;cursor:pointer;font-size:var(--font-small)}.conflict-view-section{margin-bottom:16px}.conflict-view-section h3{margin-bottom:8px;padding-bottom:5px;font-size:var(--font-small);border-bottom:1px solid var(--background-modifier-border)}.conflict-category-actions{margin-top:var(--size-4-2);margin-bottom:var(--size-4-2);display:flex;justify-content:flex-start;align-items:center;gap:var(--size-4-2)}.conflict-category-actions button{font-size:var(--font-smallest)}.conflict-file,.conflict-file-item{margin-bottom:4px;border:1px solid var(--background-modifier-border);border-radius:4px;transition:border-color .15s ease}.conflict-file-item.is-active{border-color:var(--interactive-accent)}.conflict-file-item.is-active .conflict-file-header{background-color:var(--background-modifier-hover)}.conflict-file-header{display:flex;justify-content:space-between;align-items:center;padding:6px 10px;cursor:pointer;background-color:var(--background-secondary);border-radius:3px}.conflict-file-path{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:var(--font-smaller)}.conflict-resolution-indicator{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-right:8px;background-color:var(--text-faint);transition:background-color .15s ease}.conflict-resolution-indicator[data-resolution=apply_update]{background-color:var(--interactive-accent)}.conflict-diff{padding:8px;overflow-x:auto;background-color:var(--background-primary);border-radius:4px}.conflict-file-preview{padding:10px;overflow:auto;background-color:var(--background-primary);border-radius:4px}.conflict-file-preview pre{margin:0;white-space:pre-wrap;word-break:break-all}.binary-file-notice{padding:10px;color:var(--text-muted);font-style:italic}.diff-split .diff-gutter-col{width:5ch}.conflict-view-footer{display:flex;justify-content:flex-end;gap:10px;margin-top:12px;padding-top:12px;border-top:1px solid var(--background-modifier-border)}.workspace-leaf-content.conflict-view-container[data-type^=ppb-conflict-view]{overflow:hidden;padding-bottom:0}.paperbell-landing-view{display:flex;flex-direction:column;height:100%;padding:0;overflow-y:auto}.ppb-wizard-wrapper{display:flex;flex-direction:column;height:100%;max-width:90%;margin:0 auto;padding:24px 32px;width:100%}.ppb-wizard-progress{display:flex;align-items:flex-start;justify-content:center;gap:0;margin-bottom:32px;padding:16px 0 8px;flex-shrink:0}.ppb-wizard-progress-step{display:flex;flex-direction:column;align-items:center;gap:6px}.ppb-wizard-progress-dot{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--font-ui-small);font-weight:600;border:2px solid var(--background-modifier-border);background-color:var(--background-primary);color:var(--text-muted);transition:all .3s ease;flex-shrink:0;--icon-size: 16px}.ppb-wizard-progress-dot.is-active{border-color:var(--interactive-accent);background-color:var(--interactive-accent);color:var(--text-on-accent);box-shadow:0 0 0 4px rgba(var(--interactive-accent-rgb, 72, 133, 237),.2)}.ppb-wizard-progress-dot.is-completed{border-color:var(--text-success, #28a745);background-color:var(--text-success, #28a745);color:#fff;cursor:pointer}.ppb-wizard-progress-dot.is-completed:hover{opacity:.85}.ppb-wizard-progress-line{width:48px;height:2px;background-color:var(--background-modifier-border);transition:background-color .3s ease;margin-top:15px;flex-shrink:0}.ppb-wizard-progress-line.is-completed{background-color:var(--text-success, #28a745)}.ppb-wizard-progress-label{font-size:var(--font-ui-smaller);color:var(--text-muted);text-align:center;max-width:60px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ppb-wizard-content{flex:1;overflow-y:auto;padding:0 20px;min-height:0}.ppb-wizard-step-enter{animation:ppb-step-enter .3s ease-out forwards}.ppb-wizard-step-enter-reverse{animation:ppb-step-enter-reverse .3s ease-out forwards}@keyframes ppb-step-enter{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:translate(0)}}@keyframes ppb-step-enter-reverse{0%{opacity:0;transform:translate(-30px)}to{opacity:1;transform:translate(0)}}.ppb-wizard-nav{display:flex;justify-content:space-between;align-items:center;padding:16px 0;border-top:1px solid var(--background-modifier-border);margin-top:24px;flex-shrink:0}.ppb-wizard-nav-left,.ppb-wizard-nav-right{display:flex;gap:8px}.ppb-wizard-nav-btn{display:flex;align-items:center;gap:6px;padding:8px 20px;border-radius:6px;font-weight:500;transition:all .2s ease;cursor:pointer;border:1px solid var(--background-modifier-border);background-color:var(--background-secondary);color:var(--text-normal)}.ppb-wizard-nav-btn:hover{background-color:var(--background-modifier-hover)}.ppb-wizard-nav-btn.mod-cta{border:none}.ppb-wizard-nav-icon{display:flex;align-items:center;--icon-size: 14px}.ppb-step-header{text-align:center;margin-bottom:24px}.ppb-step-header h2{margin:12px 0 8px;color:var(--text-normal);font-weight:700;font-size:1.5em}.ppb-step-header p{color:var(--text-muted);font-size:var(--font-ui-medium);line-height:1.5;max-width:600px;margin:0 auto}.ppb-step-header-icon{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:12px;background-color:var(--interactive-accent);color:var(--text-on-accent);--icon-size: 24px}.ppb-account-container{display:flex;flex-direction:column;align-items:center}.ppb-account-methods{display:flex;gap:16px;width:100%;max-width:700px;align-items:stretch}.ppb-account-method{flex:1;padding:24px;background-color:var(--background-secondary);border-radius:12px;border:1px solid var(--background-modifier-border);text-align:center;display:flex;flex-direction:column;align-items:center;gap:8px}.ppb-account-method h3{margin:0;font-size:1.1em}.ppb-account-method-desc{color:var(--text-muted);font-size:var(--font-ui-small);margin:0 0 8px}.ppb-account-method-icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background-color:var(--background-primary);border:2px solid var(--interactive-accent);color:var(--interactive-accent);--icon-size: 20px}.ppb-account-divider{display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-size:var(--font-ui-small);padding:0 4px;flex-shrink:0}.ppb-account-login-btn,.ppb-account-verify-btn{width:100%;padding:8px 16px;border-radius:6px;font-weight:500}.ppb-account-input-group{display:flex;flex-direction:column;gap:8px;width:100%}.ppb-account-input{width:100%;padding:8px 12px;border:1px solid var(--background-modifier-border);border-radius:6px;background-color:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small)}.ppb-account-input:focus{border-color:var(--interactive-accent);outline:none;box-shadow:0 0 0 2px rgba(var(--interactive-accent-rgb, 72, 133, 237),.2)}.ppb-account-error{color:var(--text-error, #dc3545);font-size:var(--font-ui-small);margin:4px 0 0}.ppb-account-link{font-size:var(--font-ui-small);color:var(--text-muted);margin-top:8px}.ppb-account-link a{color:var(--text-accent);text-decoration:none}.ppb-account-link a:hover{text-decoration:underline}.ppb-account-success{display:flex;flex-direction:column;align-items:center;gap:12px;padding:32px;background-color:var(--background-secondary);border-radius:12px;border:1px solid var(--text-success, #28a745);max-width:500px;width:100%}.ppb-account-success h3{margin:0;color:var(--text-success, #28a745)}.ppb-account-success-icon{width:64px;height:64px;border-radius:50%;background-color:var(--text-success, #28a745);color:#fff;display:flex;align-items:center;justify-content:center;--icon-size: 32px}.ppb-account-user-name{font-weight:600;color:var(--text-normal)}.ppb-account-license-info{color:var(--text-muted);font-size:var(--font-ui-small)}.ppb-account-checking{display:flex;flex-direction:column;align-items:center;gap:12px;padding:32px;color:var(--text-muted)}.ppb-account-spinner{animation:ppb-spin 1s linear infinite;--icon-size: 24px}@keyframes ppb-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ppb-complete-container{display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px;padding:32px 0}.ppb-complete-icon{color:var(--text-success, #28a745);--icon-size: 64px;animation:ppb-pop-in .5s ease-out}@keyframes ppb-pop-in{0%{transform:scale(0);opacity:0}60%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}.ppb-complete-container h2{margin:0;font-size:1.8em;color:var(--text-normal)}.ppb-complete-description{color:var(--text-muted);max-width:500px;line-height:1.5}.ppb-complete-checklist{width:100%;max-width:500px;text-align:left;background-color:var(--background-secondary);border-radius:12px;border:1px solid var(--background-modifier-border);overflow:hidden}.ppb-complete-checklist-item{display:flex;align-items:center;gap:12px;padding:14px 20px;border-bottom:1px solid var(--background-modifier-border)}.ppb-complete-checklist-item:last-child{border-bottom:none}.ppb-complete-checklist-icon{width:22px;height:22px;flex-shrink:0;--icon-size: 18px}.ppb-complete-checklist-icon.is-done{color:var(--text-success, #28a745)}.ppb-complete-checklist-icon.is-pending{color:var(--text-muted)}.ppb-complete-checklist-text{display:flex;flex-direction:column;gap:2px}.ppb-complete-checklist-label{font-weight:600;color:var(--text-normal)}.ppb-complete-checklist-detail{font-size:var(--font-ui-small);color:var(--text-muted)}.ppb-complete-note{color:var(--text-muted);font-size:var(--font-ui-small);max-width:500px;line-height:1.5;font-style:italic}.paperbell-landing-topbar{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-3);background-color:var(--background-secondary-alt);border-bottom:1px solid var(--background-modifier-border)}.paperbell-landing-title{margin:0;font-size:var(--font-ui-large)}.paperbell-landing-topbar-checkbox{margin:0!important;padding:8px 12px!important;background-color:var(--background-primary-alt)!important;border-radius:6px;border:1px solid var(--background-modifier-border)}.paperbell-landing-back-button{display:flex;align-items:center;gap:8px;background:none;border:none;cursor:pointer;color:var(--text-normal);padding:8px 12px;border-radius:6px;font-weight:500}.paperbell-landing-back-button:hover{background-color:var(--background-modifier-hover)}.paperbell-landing-progress{display:flex;flex-direction:column;align-items:flex-end;gap:5px}.paperbell-landing-progress-text{font-size:var(--font-ui-small);color:var(--text-muted)}.paperbell-landing-progress-bar{width:150px;height:8px;background-color:var(--background-modifier-border);border-radius:4px;overflow:hidden}.paperbell-landing-progress-inner{height:100%;background-color:var(--text-accent);border-radius:4px}.paperbell-landing-tab-content{padding:20px}.paperbell-landings-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:20px;margin-top:30px}.paperbell-landing-card{position:relative;display:flex;flex-direction:column;background-color:var(--background-secondary);border-radius:8px;padding:20px;transition:transform .2s ease,box-shadow .2s ease;border:1px solid var(--background-modifier-border);min-height:220px}.paperbell-landing-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-l)}.paperbell-landing-card-icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:8px;background-color:var(--interactive-accent);color:var(--text-on-accent);margin-bottom:15px;font-size:1.2em}.paperbell-landing-card h3{margin:0 0 10px;font-size:1.2em}.paperbell-landing-card p{color:var(--text-muted);margin-bottom:20px;font-size:.9em;flex-grow:1}.paperbell-landing-card-status{position:absolute;top:15px;right:15px;padding:6px 10px;border-radius:6px;font-size:.8em;font-weight:700;max-width:120px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.paperbell-landing-card-status.completed{background-color:var(--text-success);color:#fff}.paperbell-landing-card-status.pending{background-color:var(--text-muted);color:var(--background-primary)}.paperbell-landing-card-button{background-color:var(--interactive-accent);color:var(--text-on-accent);border:none;border-radius:4px;padding:8px 12px;cursor:pointer;font-weight:700;transition:background-color .2s ease;align-self:flex-start}.paperbell-landing-card-button:hover{background-color:var(--interactive-accent-hover)}.paperbell-landing-description{color:var(--text-muted);margin-bottom:20px;font-style:italic;padding-left:10px}.paperbell-landing-step{margin-bottom:25px;padding-bottom:15px;border-bottom:1px solid var(--background-modifier-border)}.paperbell-landing-step:last-child{border-bottom:none}.paperbell-landing-step-header{margin-bottom:10px}.paperbell-landing-step h3{margin-top:15px;margin-bottom:10px;font-size:1.2em;color:var(--text-accent)}.paperbell-landing-step-description{margin-bottom:15px;line-height:1.5}.paperbell-landing-toggle-images{background-color:var(--interactive-accent);color:var(--text-on-accent);border:none;border-radius:4px;padding:5px 10px;cursor:pointer;font-size:.9em;margin-bottom:10px}.paperbell-landing-images-container{margin-top:10px;transition:max-height .3s ease-in-out,opacity .3s ease-in-out;max-height:1000px;opacity:1;overflow:hidden}.paperbell-landing-images-container.collapsed{max-height:0;opacity:0;margin-top:0}.paperbell-landing-figure{margin-bottom:15px}.paperbell-landing-figure img{max-width:100%;border-radius:5px;border:1px solid var(--background-modifier-border)}.paperbell-landing-figure figcaption{text-align:center;font-style:italic;margin-top:5px;color:var(--text-muted)}.paperbell-landing-tab-content p{margin-bottom:15px;line-height:1.5}.paperbell-landing-tab-content a{color:var(--text-accent);text-decoration:none}.paperbell-landing-tab-content a:hover{text-decoration:underline}.paperbell-landing-tab-content ol,.paperbell-landing-tab-content ul{margin-left:20px;margin-bottom:15px}.paperbell-landing-tab-content li{margin-bottom:5px}.paperbell-landing-checkboxes{margin-top:30px;background-color:var(--background-secondary);border-radius:5px;padding:15px}.paperbell-landing-checkboxes h3{margin-top:0;margin-bottom:15px;color:var(--text-normal)}.paperbell-landing-checkbox{margin-top:10px;height:var(--input-height);padding:10px;background-color:var(--background-primary);border-radius:5px;display:flex;align-items:center}.paperbell-landing-checkbox input[type=checkbox]{margin-right:10px}.paperbell-landing-actions{display:flex;justify-content:flex-end;gap:10px}.paperbell-landing-actions button{padding:8px 16px}.paperbell-welcome-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:40px;text-align:center;max-width:900px;margin:0 auto;animation:fadeIn .8s ease-in-out}@keyframes fadeIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.paperbell-welcome-logo{font-size:60px;width:100px;height:100px;flex-shrink:0;background-color:var(--interactive-accent);color:var(--text-on-accent);border-radius:50%;display:flex;align-items:center;justify-content:center;margin-bottom:30px;box-shadow:0 8px 20px #00000026;animation:pulse 5s infinite ease-in-out;--icon-size: 48px}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}.paperbell-welcome-header{margin-bottom:40px}.paperbell-welcome-header h1{font-size:2.5em;color:var(--text-accent);margin-bottom:15px;font-weight:700}.paperbell-welcome-header p{font-size:1.2em;color:var(--text-muted);max-width:600px;margin:0 auto;line-height:1.5}.paperbell-welcome-features{display:flex;justify-content:center;gap:30px;margin-bottom:50px;flex-wrap:wrap}.paperbell-welcome-feature{width:220px;background-color:var(--background-secondary);border-radius:12px;padding:25px;transition:all .3s ease;border:1px solid var(--background-modifier-border);position:relative;animation:slideIn .5s ease-in-out forwards;animation-delay:calc(var(--animation-order) * .15s);opacity:0;transform:translateY(20px);height:200px;display:flex;flex-direction:column;align-items:center}.paperbell-welcome-feature:nth-child(1){--animation-order: 1}.paperbell-welcome-feature:nth-child(2){--animation-order: 2}.paperbell-welcome-feature:nth-child(3){--animation-order: 3}@keyframes slideIn{to{opacity:1;transform:translateY(0)}}.paperbell-welcome-feature:hover{transform:translateY(-8px);box-shadow:0 10px 20px #0000001a;border-color:var(--interactive-accent-hover)}.paperbell-welcome-feature-icon{font-size:30px;color:var(--interactive-accent);margin-bottom:20px;height:40px;width:40px;display:flex;align-items:center;justify-content:center;background-color:var(--background-primary);border-radius:50%;padding:10px;margin-top:-35px;border:2px solid var(--interactive-accent)}.paperbell-welcome-feature h3{margin:0 0 15px;color:var(--text-normal);font-weight:600;font-size:1.2em}.paperbell-welcome-feature p{color:var(--text-muted);font-size:.95em;line-height:1.5}.paperbell-welcome-actions{display:flex;gap:20px;margin-top:30px}.paperbell-welcome-actions button{padding:12px 24px;font-size:1.1em;border-radius:8px;transition:all .2s ease}.paperbell-welcome-start{background-color:var(--interactive-accent);color:var(--text-on-accent);font-weight:600;border:none;box-shadow:0 4px 8px #0000001a}.paperbell-welcome-start:hover{background-color:var(--interactive-accent-hover);transform:translateY(-2px);box-shadow:0 6px 12px #00000026}.paperbell-landing-card-status.enabled{background-color:var(--color-orange);color:#fff}.paperbell-landing-card-status.disabled{background-color:var(--color-red);color:#fff}.paperbell-landing-card-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:auto;padding-top:15px}.paperbell-landing-card-button.enable{background-color:var(--color-green);color:#fff;flex:1;min-width:90px;padding:8px 12px;border-radius:6px;font-weight:500}.paperbell-landing-card-button.enable:hover{background-color:var(--color-green-hover)}.paperbell-landing-card-button.settings{background-color:var(--color-blue);color:#fff;flex:1;min-width:90px;padding:8px 12px;border-radius:6px;font-weight:500}.paperbell-landing-card-button.settings:hover{background-color:var(--color-blue-hover)}.paperbell-landing-card-button.config{background-color:var(--interactive-accent);color:var(--text-on-accent);flex:1;min-width:90px;padding:8px 12px;border-radius:6px;font-weight:500}.paperbell-landing-card-button.config:hover{background-color:var(--interactive-accent-hover)}.paperbell-landing-status-container{display:flex;flex-direction:row;align-items:flex-end;gap:15px;min-width:200px}.paperbell-landing-status{padding:8px 16px;border-radius:8px;font-size:.95em;font-weight:600;text-align:center;min-width:120px;white-space:nowrap}.paperbell-landing-status.enabled{background-color:var(--color-orange);color:#fff}.paperbell-landing-status.disabled{background-color:var(--color-red);color:#fff}.paperbell-landing-status.completed{background-color:var(--color-green);color:#fff}.paperbell-landing-actions{display:flex;gap:8px;justify-content:flex-end}.paperbell-landing-actions:empty{display:none}.paperbell-landing-enable-btn,.paperbell-landing-settings-btn{padding:8px 16px;border-radius:6px;border:none;cursor:pointer;font-weight:500;transition:all .2s ease;min-width:90px;white-space:nowrap}.paperbell-landing-enable-btn{background-color:var(--color-green);color:#fff}.paperbell-landing-enable-btn:hover{background-color:var(--color-green-hover)}.paperbell-landing-settings-btn{background-color:var(--color-blue);color:#fff}.paperbell-landing-settings-btn:hover{background-color:var(--color-blue-hover)}.paperbell-landing-step-header{display:flex;justify-content:space-between;align-items:center}.paperbell-landing-step-settings-btn{background-color:var(--color-blue);color:#fff;border:none;border-radius:4px;padding:4px 8px;cursor:pointer;font-size:.85em;font-weight:500;transition:background-color .2s ease}.paperbell-landing-step-settings-btn:hover{background-color:var(--color-blue-hover)}:root{--color-red: #dc3545;--color-red-hover: #c82333;--color-green: #28a745;--color-green-hover: #218838;--color-orange: #fd7e14;--color-orange-hover: #e66500;--color-blue: #007bff;--color-blue-hover: #0056b3}.paperbell-license-info{display:flex;flex-direction:column;gap:var(--size-4-2);padding:var(--size-4-4);background-color:var(--setting-items-background);margin:var(--size-2-2);border-radius:var(--radius-m)}.paperbell-uri-info{margin:1em 0;padding:1em;background-color:var(--background-secondary-alt);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border)}.paperbell-uri-example{display:block;margin:.5em 0;padding:.5em;background-color:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);font-family:var(--font-monospace);font-size:.9em;word-break:break-all;color:var(--text-accent)}.paperbell-tabs-container{display:flex;gap:var(--size-4-2);flex-direction:column}.paperbell-tab-buttons{display:flex;gap:var(--size-4-2);background:var(--setting-items-background);width:fit-content;padding:var(--size-2-2) var(--size-4-2)}button.paperbell-tab-btn:not(.is-active){background-color:unset;box-shadow:none}.ppb-component-tabs{display:flex;gap:var(--size-4-1);border-bottom:1px solid var(--background-modifier-border);margin-bottom:var(--size-4-4);padding-bottom:var(--size-4-2)}.ppb-component-tab-btn{padding:var(--size-4-2) var(--size-4-4);border:none;background:transparent;cursor:pointer;font-size:var(--font-ui-small);color:var(--text-muted);border-radius:var(--radius-s);transition:all .15s ease}.ppb-component-tab-btn:hover{background:var(--background-modifier-hover);color:var(--text-normal)}.ppb-component-tab-btn.is-active{background:var(--interactive-accent);color:var(--text-on-accent)}.ppb-component-tab-content{min-height:200px}.ppb-component-section{margin-bottom:var(--size-4-6);padding:var(--size-4-4);background:var(--background-secondary);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border)}.ppb-component-header{margin-bottom:var(--size-4-3);padding-bottom:var(--size-4-2);border-bottom:1px solid var(--background-modifier-border)}.ppb-component-header h4{margin:0 0 var(--size-4-1) 0;padding:0;font-size:var(--font-ui-medium);font-weight:var(--font-semibold)}.ppb-component-desc{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.ppb-component-settings .setting-item{border-top:none;padding-top:var(--size-4-2);padding-bottom:var(--size-4-2)}.ppb-component-footer{margin-top:var(--size-4-6);padding-top:var(--size-4-4);border-top:1px solid var(--background-modifier-border)}.ppb-config-example{margin-top:var(--size-4-3);margin-bottom:var(--size-4-3);padding:var(--size-4-3);background:var(--background-primary);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);font-size:var(--font-ui-smaller)}.ppb-config-example-title{font-weight:var(--font-medium);margin-bottom:var(--size-4-2);color:var(--text-muted)}.ppb-config-example-list{margin:0;padding-left:var(--size-4-4);color:var(--text-muted)}.ppb-config-example-list li{margin-bottom:var(--size-4-1)}.ppb-config-example-list li code{background:var(--background-secondary);padding:2px 6px;border-radius:var(--radius-s);font-family:var(--font-monospace)}.ppb-tags-container{margin-bottom:var(--size-4-3)}.ppb-tags-list{display:flex;flex-wrap:wrap;gap:var(--size-4-2);padding:var(--size-4-3);background:var(--background-primary);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);min-height:40px}.ppb-tag-item{display:flex;align-items:center;gap:var(--size-4-1);padding:var(--size-4-1) var(--size-4-2);background:var(--interactive-accent);color:var(--text-on-accent);border-radius:var(--radius-s);font-size:var(--font-ui-smaller)}.ppb-tag-remove{background:transparent;border:none;color:var(--text-on-accent);cursor:pointer;padding:0 var(--size-4-1);font-size:var(--font-ui-medium);opacity:.7;transition:opacity .15s ease}.ppb-tag-remove:hover{opacity:1}.ppb-tags-empty{color:var(--text-muted);font-size:var(--font-ui-smaller);margin:0}.ppb-pomodoro-status-bar{font-family:var(--font-monospace, monospace);font-weight:500;transition:all .2s ease}.ppb-pomodoro-status-bar:hover{opacity:.8}.ppb-pomodoro-idle{color:var(--text-muted)}.ppb-pomodoro-running{color:var(--color-red);animation:ppb-pomodoro-pulse 2s infinite}.ppb-pomodoro-paused{color:var(--color-orange);opacity:.7}@keyframes ppb-pomodoro-pulse{0%,to{opacity:1}50%{opacity:.6}}.ppb-focus-button{position:relative;overflow:hidden}.ppb-focus-button:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s}.ppb-focus-button:hover:before{left:100%}.ppb-pomodoro-progress{position:relative;height:4px;background:var(--background-modifier-border);border-radius:2px;overflow:hidden}.ppb-pomodoro-progress-bar{height:100%;background:var(--interactive-accent);border-radius:2px;transition:width 1s ease}.ppb-pomodoro-progress-bar.work{background:var(--color-red)}.ppb-pomodoro-progress-bar.short-break{background:var(--color-green)}.ppb-pomodoro-progress-bar.long-break{background:var(--color-blue)}.ppb-session-indicator{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;border-radius:4px;font-size:.75em;font-weight:500}.ppb-session-indicator.work{background:rgba(var(--color-red-rgb),.1);color:var(--color-red)}.ppb-session-indicator.short-break{background:rgba(var(--color-green-rgb),.1);color:var(--color-green)}.ppb-session-indicator.long-break{background:rgba(var(--color-blue-rgb),.1);color:var(--color-blue)}.ppb-pomodoro-card{border:1px solid var(--background-modifier-border);border-radius:8px;padding:16px;background:var(--background-primary);transition:all .2s ease}.ppb-pomodoro-card:hover{border-color:var(--background-modifier-border-hover);box-shadow:0 2px 8px #0000001a}.ppb-pomodoro-card.active{border-color:var(--interactive-accent);box-shadow:0 0 0 1px var(--interactive-accent)}.ppb-pomodoro-time{font-family:var(--font-monospace, monospace);font-size:2em;font-weight:700;text-align:center;letter-spacing:.1em}.ppb-pomodoro-time.large{font-size:3em}.ppb-pomodoro-time.small{font-size:1.5em}.ppb-pomodoro-controls{display:flex;gap:8px;justify-content:center;align-items:center}.ppb-pomodoro-control-btn{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;border:1px solid var(--background-modifier-border);background:var(--background-primary);color:var(--text-normal);cursor:pointer;transition:all .2s ease}.ppb-pomodoro-control-btn:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover)}.ppb-pomodoro-control-btn.primary{background:var(--interactive-accent);color:var(--text-on-accent);border-color:var(--interactive-accent)}.ppb-pomodoro-control-btn.primary:hover{background:var(--interactive-accent-hover)}.ppb-pomodoro-control-btn:disabled{opacity:.5;cursor:not-allowed}.ppb-session-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(80px,1fr));gap:8px}.ppb-session-stat{text-align:center;padding:8px;border-radius:6px;background:var(--background-secondary)}.ppb-session-stat-value{font-size:1.2em;font-weight:600;color:var(--text-normal)}.ppb-session-stat-label{font-size:.8em;color:var(--text-muted);margin-top:2px}@media(max-width:768px){.ppb-pomodoro-time{font-size:1.8em}.ppb-pomodoro-time.large{font-size:2.5em}.ppb-pomodoro-controls{gap:6px}.ppb-pomodoro-control-btn{width:36px;height:36px}}.theme-dark .ppb-pomodoro-card{background:var(--background-primary-alt)}.theme-dark .ppb-pomodoro-progress{background:var(--background-modifier-border-focus)}@media(prefers-contrast:high){.ppb-pomodoro-status-bar{font-weight:700}.ppb-pomodoro-card{border-width:2px}.ppb-session-indicator{font-weight:700}}@media(prefers-reduced-motion:reduce){.ppb-pomodoro-running{animation:none}.ppb-focus-button:before{transition:none}.ppb-pomodoro-progress-bar{transition:none}*{transition:none!important}}.agent-output-shadow{height:100%}.agent-output-workspace{height:100%;overflow:hidden}.agent-panel{display:flex;height:100%;background:var(--background-primary);color:var(--text-normal);outline:none}.agent-panel-empty{justify-content:center;align-items:center}.agent-empty-message{text-align:center;color:var(--text-muted);padding:24px}.agent-empty-icon{font-size:2.5em;margin-bottom:12px;opacity:.6}.agent-empty-hint{font-size:.85em;color:var(--text-faint);margin-top:4px}.agent-panel-sidebar{width:220px;min-width:180px;border-right:1px solid var(--background-modifier-border);display:flex;flex-direction:column;overflow:hidden;background:var(--background-secondary);transition:width .2s ease,min-width .2s ease}.agent-sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--background-modifier-border);font-weight:600;font-size:.85em;gap:6px}.agent-sidebar-title{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;flex:1}.agent-sidebar-btn{background:none;border:none;color:var(--text-muted);cursor:pointer;padding:2px 6px;border-radius:4px;font-size:.85em;transition:background .15s,color .15s}.agent-sidebar-btn:hover{background:var(--background-modifier-hover);color:var(--text-normal)}.agent-sidebar-list{overflow-y:auto;flex:1}.agent-sidebar-list::-webkit-scrollbar{width:4px}.agent-sidebar-list::-webkit-scrollbar-thumb{background:var(--background-modifier-border);border-radius:2px}.agent-sidebar-list::-webkit-scrollbar-thumb:hover{background:var(--text-faint)}.agent-run-item{padding:8px 12px;cursor:pointer;border-bottom:1px solid var(--background-modifier-border-hover);border-left:3px solid transparent;transition:background .15s,border-color .15s}.agent-run-item:hover{background:var(--background-modifier-hover)}.agent-run-item.is-selected{background:var(--background-primary);border-left-color:var(--text-accent)}.agent-run-item-header{display:flex;align-items:center;gap:6px;margin-bottom:2px}.agent-run-name{font-size:.85em;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-run-item-meta{display:flex;align-items:center;gap:6px;font-size:.75em;color:var(--text-faint);padding-left:14px}.agent-run-file{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-run-event{padding:1px 4px;border-radius:3px;background:var(--background-modifier-hover);font-size:.9em}.agent-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.agent-status-running{background:var(--text-accent);animation:agent-pulse 1.5s infinite}.agent-status-completed{background:var(--text-success, #4caf50)}.agent-status-failed{background:var(--text-error)}.agent-status-queued{background:var(--text-muted)}.agent-status-cancelled{background:var(--text-faint)}.agent-status-pending{background:var(--text-warning, #ff9800);animation:agent-pulse 1.5s infinite}@keyframes agent-pulse{0%,to{opacity:1}50%{opacity:.4}}.agent-status-badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:.75em;font-weight:600;white-space:nowrap}.agent-status-badge.agent-status-running{background:rgba(var(--color-accent-rgb, 0, 122, 255),.15);color:var(--text-accent)}.agent-status-badge.agent-status-completed{background:#4caf5026;color:var(--text-success, #4caf50)}.agent-status-badge.agent-status-failed{background:#f4433626;color:var(--text-error)}.agent-status-badge.agent-status-queued{background:var(--background-modifier-hover);color:var(--text-muted)}.agent-status-badge.agent-status-cancelled{background:var(--background-modifier-hover);color:var(--text-faint)}.agent-status-badge.agent-status-pending{background:#ff980026;color:var(--text-warning, #ff9800)}.agent-panel-main{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.agent-panel-placeholder{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-muted);font-size:.9em}.agent-panel-toolbar{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;border-bottom:1px solid var(--background-modifier-border);gap:8px;flex-wrap:wrap;background:var(--background-primary)}.agent-toolbar-left{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.agent-toolbar-agent{font-size:.8em;color:var(--text-muted);padding:1px 6px;background:var(--background-modifier-hover);border-radius:4px}.agent-toolbar-file{font-size:.8em;color:var(--text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-toolbar-duration{font-size:.8em;color:var(--text-muted);font-variant-numeric:tabular-nums}.agent-toolbar-right{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.agent-toolbar-btn{background:none;border:1px solid var(--background-modifier-border);color:var(--text-muted);cursor:pointer;padding:2px 8px;border-radius:4px;font-size:.8em;transition:background .15s,color .15s,border-color .15s;white-space:nowrap}.agent-toolbar-btn:hover{background:var(--background-modifier-hover);color:var(--text-normal)}.agent-toolbar-btn.is-active{background:rgba(var(--color-accent-rgb, 0, 122, 255),.1);border-color:var(--text-accent);color:var(--text-accent)}.agent-rerun-btn{color:var(--text-accent);border-color:var(--text-accent)}.agent-rerun-btn:hover{background:rgba(var(--color-accent-rgb, 0, 122, 255),.1)}.agent-autoscroll-toggle{display:flex;align-items:center;gap:4px;font-size:.8em;color:var(--text-muted);cursor:pointer}.agent-autoscroll-toggle input{margin:0}.agent-cancel-btn{background:var(--text-error);color:#fff;border:none;padding:3px 10px;border-radius:4px;font-size:.8em;cursor:pointer;font-weight:500;transition:opacity .15s}.agent-cancel-btn:hover{opacity:.85}.agent-search-input{background:var(--background-primary-alt);border:1px solid var(--background-modifier-border);border-radius:4px;padding:2px 8px;font-size:.8em;color:var(--text-normal);width:140px;transition:border-color .15s,width .2s ease}.agent-search-input:focus{border-color:var(--text-accent);outline:none;width:180px}.agent-search-input::placeholder{color:var(--text-faint)}.agent-output-terminal{font-family:var(--font-monospace);font-size:13px;line-height:1.5;padding:12px;background:var(--background-primary-alt);overflow-y:auto;flex:1;white-space:pre-wrap;word-break:break-all}.agent-output-terminal::-webkit-scrollbar{width:6px}.agent-output-terminal::-webkit-scrollbar-track{background:transparent}.agent-output-terminal::-webkit-scrollbar-thumb{background:var(--background-modifier-border);border-radius:3px}.agent-output-terminal::-webkit-scrollbar-thumb:hover{background:var(--text-faint)}.agent-line{display:flex;min-height:1.5em;padding:0 4px;border-radius:2px;transition:background .1s}.agent-line:hover{background:rgba(var(--color-accent-rgb, 0, 122, 255),.04)}.agent-line-stderr{color:var(--text-error)}.agent-line-error{color:var(--text-error);font-weight:600;margin-top:8px;padding-top:8px;border-top:1px solid var(--background-modifier-border)}.agent-line-done{color:var(--text-success, #4caf50);margin-top:8px;padding-top:8px;border-top:1px solid var(--background-modifier-border)}.agent-line-pending{color:var(--text-warning, #ff9800);font-style:italic}.agent-line-ts{color:var(--text-faint);font-size:.8em;margin-right:8px;-webkit-user-select:none;user-select:none;flex-shrink:0;opacity:.7}.agent-cursor{animation:agent-blink 1s step-end infinite;color:var(--text-accent)}@keyframes agent-blink{0%,to{opacity:1}50%{opacity:0}}.agent-panel-sidebar.is-collapsed{width:40px;min-width:40px}.agent-panel-sidebar.is-collapsed .agent-sidebar-title,.agent-panel-sidebar.is-collapsed .agent-run-name,.agent-panel-sidebar.is-collapsed .agent-run-item-meta{display:none}.agent-panel-sidebar.is-collapsed .agent-run-item{padding:8px 4px;display:flex;justify-content:center;border-left-width:0}.agent-panel-sidebar.is-collapsed .agent-run-item-header{margin-bottom:0}.agent-panel-sidebar.is-collapsed .agent-sidebar-header{justify-content:center;padding:8px 4px}.agent-output-terminal.agent-no-wrap{white-space:pre;overflow-x:auto;word-break:normal}.agent-input-bar{display:flex;align-items:flex-end;gap:8px;padding:8px 12px;border-top:1px solid var(--background-modifier-border);background:var(--background-primary)}.agent-input-textarea{flex:1;min-height:36px;max-height:120px;padding:8px 12px;border:1px solid var(--background-modifier-border);border-radius:8px;background:var(--background-primary-alt);color:var(--text-normal);font-family:var(--font-interface);font-size:.9em;line-height:1.4;resize:none;overflow-y:auto;transition:border-color .15s}.agent-input-textarea:focus{border-color:var(--text-accent);outline:none}.agent-input-textarea::placeholder{color:var(--text-faint)}.agent-input-send{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:8px;background:var(--interactive-accent);color:var(--text-on-accent);cursor:pointer;flex-shrink:0;transition:opacity .15s}.agent-input-send:hover{opacity:.85}.agent-input-send:disabled{opacity:.4;cursor:default}.agent-empty-input-container{display:flex;flex-direction:column;align-items:center;gap:16px;width:100%;max-width:560px;padding:24px}.agent-empty-input-container p{color:var(--text-muted);font-size:.9em}.agent-empty-input-container .agent-input-bar{width:100%;border-top:none;padding:0}.agent-confirm-detail{font-size:.85em;color:var(--text-muted);margin:4px 0}.agent-confirm-buttons{display:flex;gap:8px;margin-top:8px}.agent-confirm-buttons button{padding:4px 12px;border-radius:4px;cursor:pointer;font-size:.85em}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-outline-style:solid}}}:root,:host{--ppb-radius:.625rem;--ppb-background:oklch(100% 0 0);--ppb-foreground:oklch(14.5% 0 0);--ppb-card:oklch(100% 0 0);--ppb-card-foreground:oklch(14.5% 0 0);--ppb-popover:oklch(100% 0 0);--ppb-popover-foreground:oklch(14.5% 0 0);--ppb-primary:oklch(20.5% 0 0);--ppb-primary-foreground:oklch(98.5% 0 0);--ppb-secondary:oklch(97% 0 0);--ppb-secondary-foreground:oklch(20.5% 0 0);--ppb-muted:oklch(97% 0 0);--ppb-muted-foreground:oklch(55.6% 0 0);--ppb-accent:oklch(97% 0 0);--ppb-accent-foreground:oklch(20.5% 0 0);--ppb-destructive:oklch(57.7% .245 27.325);--ppb-success:oklch(62.7% .194 149.214);--ppb-warning:oklch(64.6% .222 41.116);--ppb-border:oklch(92.2% 0 0);--ppb-input:oklch(92.2% 0 0);--ppb-ring:oklch(70.8% 0 0);--ppb-chart-1:oklch(64.6% .222 41.116);--ppb-chart-2:oklch(60% .118 184.704);--ppb-chart-3:oklch(39.8% .07 227.392);--ppb-chart-4:oklch(82.8% .189 84.429);--ppb-chart-5:oklch(76.9% .188 70.08);--ppb-sidebar:oklch(98.5% 0 0);--ppb-sidebar-foreground:oklch(14.5% 0 0);--ppb-sidebar-primary:oklch(20.5% 0 0);--ppb-sidebar-primary-foreground:oklch(98.5% 0 0);--ppb-sidebar-accent:oklch(97% 0 0);--ppb-sidebar-accent-foreground:oklch(20.5% 0 0);--ppb-sidebar-border:oklch(92.2% 0 0);--ppb-sidebar-ring:oklch(70.8% 0 0)}.dark,:host[class~=dark],:root[class~=dark]{--ppb-background:oklch(14.5% 0 0);--ppb-foreground:oklch(98.5% 0 0);--ppb-card:oklch(20.5% 0 0);--ppb-card-foreground:oklch(98.5% 0 0);--ppb-popover:oklch(20.5% 0 0);--ppb-popover-foreground:oklch(98.5% 0 0);--ppb-primary:oklch(92.2% 0 0);--ppb-primary-foreground:oklch(20.5% 0 0);--ppb-secondary:oklch(26.9% 0 0);--ppb-secondary-foreground:oklch(98.5% 0 0);--ppb-muted:oklch(26.9% 0 0);--ppb-muted-foreground:oklch(70.8% 0 0);--ppb-accent:oklch(26.9% 0 0);--ppb-accent-foreground:oklch(98.5% 0 0);--ppb-destructive:oklch(70.4% .191 22.216);--ppb-border:oklch(100% 0 0/.1);--ppb-input:oklch(100% 0 0/.15);--ppb-ring:oklch(55.6% 0 0);--ppb-chart-1:oklch(48.8% .243 264.376);--ppb-chart-2:oklch(69.6% .17 162.48);--ppb-chart-3:oklch(76.9% .188 70.08);--ppb-chart-4:oklch(62.7% .265 303.9);--ppb-chart-5:oklch(64.5% .246 16.439);--ppb-sidebar:oklch(20.5% 0 0);--ppb-sidebar-foreground:oklch(98.5% 0 0);--ppb-sidebar-primary:oklch(48.8% .243 264.376);--ppb-sidebar-primary-foreground:oklch(98.5% 0 0);--ppb-sidebar-accent:oklch(26.9% 0 0);--ppb-sidebar-accent-foreground:oklch(98.5% 0 0);--ppb-sidebar-border:oklch(100% 0 0/.1);--ppb-sidebar-ring:oklch(55.6% 0 0)}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root,:host{--ppb-font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--ppb-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--ppb-color-orange-500:oklch(70.5% .213 47.604);--ppb-color-yellow-400:oklch(85.2% .199 91.936);--ppb-color-yellow-500:oklch(79.5% .184 86.047);--ppb-color-green-500:oklch(72.3% .219 149.579);--ppb-color-blue-500:oklch(62.3% .214 259.815);--ppb-color-gray-300:oklch(87.2% .01 258.338);--ppb-color-black:#000;--ppb-color-white:#fff;--ppb-spacing:.25rem;--ppb-container-sm:24rem;--ppb-container-md:28rem;--ppb-container-lg:32rem;--ppb-container-4xl:56rem;--ppb-text-xs--line-height:calc(1 / .75);--ppb-text-sm--line-height:calc(1.25 / .875);--ppb-text-base--line-height: 1.5 ;--ppb-text-lg--line-height:calc(1.75 / 1.125);--ppb-text-xl--line-height:calc(1.75 / 1.25);--ppb-text-2xl--line-height:calc(2 / 1.5);--ppb-text-4xl--line-height:calc(2.5 / 2.25);--ppb-text-5xl--line-height:1;--ppb-tracking-tight:-.025em;--ppb-tracking-widest:.1em;--ppb-leading-tight:1.25;--ppb-leading-relaxed:1.625;--ppb-radius-xs:.125rem;--ppb-radius-2xl:1rem;--ppb-ease-out:cubic-bezier(0, 0, .2, 1);--ppb-ease-in-out:cubic-bezier(.4, 0, .2, 1);--ppb-animate-spin:spin 1s linear infinite;--ppb-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--ppb-blur-sm:8px;--ppb-blur-xl:24px;--ppb-blur-3xl:64px;--ppb-aspect-video:16 / 9;--ppb-default-transition-duration:.15s;--ppb-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--ppb-default-font-family:var(--ppb-font-sans);--ppb-default-mono-font-family:var(--ppb-font-mono);--ppb-border:var(--border-width,.5px)}@layer theme;@layer base{[data-ppb] *,[data-ppb] :after,[data-ppb] :before,[data-ppb] ::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}[data-ppb] ::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}[data-ppb] html,[data-ppb] :host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--ppb-default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--ppb-default-font-feature-settings,normal);font-variation-settings:var(--ppb-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}[data-ppb] hr{height:0;color:inherit;border-top-width:1px}[data-ppb] abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}[data-ppb] h1,[data-ppb] h2,[data-ppb] h3,[data-ppb] h4,[data-ppb] h5,[data-ppb] h6{font-size:inherit;font-weight:inherit}[data-ppb] a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}[data-ppb] b,[data-ppb] strong{font-weight:bolder}[data-ppb] code,[data-ppb] kbd,[data-ppb] samp,[data-ppb] pre{font-family:var(--ppb-default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--ppb-default-mono-font-feature-settings,normal);font-variation-settings:var(--ppb-default-mono-font-variation-settings,normal);font-size:1em}[data-ppb] small{font-size:80%}[data-ppb] sub,[data-ppb] sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}[data-ppb] sub{bottom:-.25em}[data-ppb] sup{top:-.5em}[data-ppb] table{text-indent:0;border-color:inherit;border-collapse:collapse}[data-ppb] :-moz-focusring{outline:auto}[data-ppb] progress{vertical-align:baseline}[data-ppb] summary{display:list-item}[data-ppb] ol,[data-ppb] ul,[data-ppb] menu{list-style:none}[data-ppb] img,[data-ppb] svg,[data-ppb] video,[data-ppb] canvas,[data-ppb] audio,[data-ppb] iframe,[data-ppb] embed,[data-ppb] object{vertical-align:middle;display:block}[data-ppb] img,[data-ppb] video{max-width:100%;height:auto}[data-ppb] button,[data-ppb] input,[data-ppb] select,[data-ppb] optgroup,[data-ppb] textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}[data-ppb] ::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}[data-ppb] :where(select:is([multiple],[size])) optgroup{font-weight:bolder}[data-ppb] :where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}[data-ppb] ::file-selector-button{margin-inline-end:4px}[data-ppb] ::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){[data-ppb] ::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){[data-ppb] ::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}[data-ppb] textarea{resize:vertical}[data-ppb] ::-webkit-search-decoration{-webkit-appearance:none}[data-ppb] ::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}[data-ppb] ::-webkit-datetime-edit{display:inline-flex}[data-ppb] ::-webkit-datetime-edit-fields-wrapper{padding:0}[data-ppb] ::-webkit-datetime-edit{padding-block:0}[data-ppb] ::-webkit-datetime-edit-year-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-month-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-day-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-hour-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-minute-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-second-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-millisecond-field{padding-block:0}[data-ppb] ::-webkit-datetime-edit-meridiem-field{padding-block:0}[data-ppb] ::-webkit-calendar-picker-indicator{line-height:1}[data-ppb] :-moz-ui-invalid{box-shadow:none}[data-ppb] button,[data-ppb] input:where([type=button],[type=reset],[type=submit]){appearance:button}[data-ppb] ::file-selector-button{appearance:button}[data-ppb] ::-webkit-inner-spin-button{height:auto}[data-ppb] ::-webkit-outer-spin-button{height:auto}[data-ppb] [hidden]:where(:not([hidden=until-found])){display:none!important}[data-ppb] *{border-color:var(--background-modifier-border,var(--ppb-border));outline-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){[data-ppb] *{outline-color:color-mix(in oklab,var(--background-modifier-border-focus,var(--ppb-ring)) 50%,transparent)}}[data-ppb] body{background-color:var(--background-primary,var(--ppb-background));color:var(--text-normal,var(--ppb-foreground))}[data-ppb-reset] *,[data-ppb-reset] :after,[data-ppb-reset] :before,[data-ppb-reset] ::backdrop{all:revert-layer}[data-ppb-reset] ::file-selector-button{all:revert-layer}}@layer components;@layer utilities{.ppb\:\@container\/card-header{container:card-header/inline-size}.ppb\:pointer-events-none{pointer-events:none}.ppb\:invisible{visibility:hidden}.ppb\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.ppb\:absolute{position:absolute}.ppb\:fixed{position:fixed}.ppb\:relative{position:relative}.ppb\:sticky{position:sticky}.ppb\:inset-0{inset:calc(var(--ppb-spacing) * 0)}.ppb\:inset-x-0{inset-inline:calc(var(--ppb-spacing) * 0)}.ppb\:inset-y-0{inset-block:calc(var(--ppb-spacing) * 0)}.ppb\:-top-8{top:calc(var(--ppb-spacing) * -8)}.ppb\:-top-12{top:calc(var(--ppb-spacing) * -12)}.ppb\:top-0{top:calc(var(--ppb-spacing) * 0)}.ppb\:top-1\.5{top:calc(var(--ppb-spacing) * 1.5)}.ppb\:top-1\/2{top:50%}.ppb\:top-2{top:calc(var(--ppb-spacing) * 2)}.ppb\:top-3\.5{top:calc(var(--ppb-spacing) * 3.5)}.ppb\:top-4{top:calc(var(--ppb-spacing) * 4)}.ppb\:top-6{top:calc(var(--ppb-spacing) * 6)}.ppb\:top-8{top:calc(var(--ppb-spacing) * 8)}.ppb\:top-12{top:calc(var(--ppb-spacing) * 12)}.ppb\:top-\[1px\]{top:1px}.ppb\:top-\[50\%\]{top:50%}.ppb\:top-\[60\%\]{top:60%}.ppb\:top-full{top:100%}.ppb\:-right-12{right:calc(var(--ppb-spacing) * -12)}.ppb\:right-0{right:calc(var(--ppb-spacing) * 0)}.ppb\:right-1{right:calc(var(--ppb-spacing) * 1)}.ppb\:right-2{right:calc(var(--ppb-spacing) * 2)}.ppb\:right-3{right:calc(var(--ppb-spacing) * 3)}.ppb\:right-4{right:calc(var(--ppb-spacing) * 4)}.ppb\:right-6{right:calc(var(--ppb-spacing) * 6)}.ppb\:right-12{right:calc(var(--ppb-spacing) * 12)}.ppb\:-bottom-12{bottom:calc(var(--ppb-spacing) * -12)}.ppb\:bottom-0{bottom:calc(var(--ppb-spacing) * 0)}.ppb\:bottom-1{bottom:calc(var(--ppb-spacing) * 1)}.ppb\:bottom-6{bottom:calc(var(--ppb-spacing) * 6)}.ppb\:bottom-8{bottom:calc(var(--ppb-spacing) * 8)}.ppb\:-left-12{left:calc(var(--ppb-spacing) * -12)}.ppb\:left-0{left:calc(var(--ppb-spacing) * 0)}.ppb\:left-1{left:calc(var(--ppb-spacing) * 1)}.ppb\:left-1\/2{left:50%}.ppb\:left-2{left:calc(var(--ppb-spacing) * 2)}.ppb\:left-3{left:calc(var(--ppb-spacing) * 3)}.ppb\:left-\[50\%\]{left:50%}.ppb\:isolate{isolation:isolate}.ppb\:-z-10{z-index:-10}.ppb\:z-10{z-index:10}.ppb\:z-20{z-index:20}.ppb\:z-50{z-index:50}.ppb\:z-\[1\]{z-index:1}.ppb\:col-span-1{grid-column:span 1/span 1}.ppb\:col-start-2{grid-column-start:2}.ppb\:row-span-2{grid-row:span 2/span 2}.ppb\:row-start-1{grid-row-start:1}.ppb\:m-\[0px\]{margin:0}.ppb\:-mx-1{margin-inline:calc(var(--ppb-spacing) * -1)}.ppb\:mx-1{margin-inline:calc(var(--ppb-spacing) * 1)}.ppb\:mx-2{margin-inline:calc(var(--ppb-spacing) * 2)}.ppb\:mx-3\.5{margin-inline:calc(var(--ppb-spacing) * 3.5)}.ppb\:mx-\[-8px\]{margin-inline:-8px}.ppb\:mx-\[-11px\]{margin-inline:-11px}.ppb\:mx-\[0px\]{margin-inline:0}.ppb\:mx-auto{margin-inline:auto}.ppb\:my-1{margin-block:calc(var(--ppb-spacing) * 1)}.ppb\:my-4{margin-block:calc(var(--ppb-spacing) * 4)}.ppb\:my-\[-30px\]{margin-block:-30px}.ppb\:my-\[0px\]{margin-block:0}.ppb\:my-\[21px\]{margin-block:21px}.ppb\:-mt-3{margin-top:calc(var(--ppb-spacing) * -3)}.ppb\:-mt-4{margin-top:calc(var(--ppb-spacing) * -4)}.ppb\:-mt-8{margin-top:calc(var(--ppb-spacing) * -8)}.ppb\:mt-0\.5{margin-top:calc(var(--ppb-spacing) * .5)}.ppb\:mt-1{margin-top:calc(var(--ppb-spacing) * 1)}.ppb\:mt-1\.5{margin-top:calc(var(--ppb-spacing) * 1.5)}.ppb\:mt-2{margin-top:calc(var(--ppb-spacing) * 2)}.ppb\:mt-4{margin-top:calc(var(--ppb-spacing) * 4)}.ppb\:mt-\[16px\]{margin-top:16px}.ppb\:mt-auto{margin-top:auto}.ppb\:mr-1{margin-right:calc(var(--ppb-spacing) * 1)}.ppb\:mr-2{margin-right:calc(var(--ppb-spacing) * 2)}.ppb\:mb-1{margin-bottom:calc(var(--ppb-spacing) * 1)}.ppb\:mb-2{margin-bottom:calc(var(--ppb-spacing) * 2)}.ppb\:mb-3{margin-bottom:calc(var(--ppb-spacing) * 3)}.ppb\:mb-4{margin-bottom:calc(var(--ppb-spacing) * 4)}.ppb\:mb-6{margin-bottom:calc(var(--ppb-spacing) * 6)}.ppb\:mb-8{margin-bottom:calc(var(--ppb-spacing) * 8)}.ppb\:mb-\[0px\]{margin-bottom:0}.ppb\:-ml-4{margin-left:calc(var(--ppb-spacing) * -4)}.ppb\:ml-1{margin-left:calc(var(--ppb-spacing) * 1)}.ppb\:ml-2{margin-left:calc(var(--ppb-spacing) * 2)}.ppb\:ml-6{margin-left:calc(var(--ppb-spacing) * 6)}.ppb\:ml-auto{margin-left:auto}.ppb\:line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ppb\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ppb\:block{display:block}.ppb\:contents{display:contents}.ppb\:flex{display:flex}.ppb\:grid{display:grid}.ppb\:hidden{display:none}.ppb\:inline-block{display:inline-block}.ppb\:inline-flex{display:inline-flex}.ppb\:field-sizing-content{field-sizing:content}.ppb\:aspect-\[3\/4\]{aspect-ratio:3/4}.ppb\:aspect-square{aspect-ratio:1}.ppb\:aspect-video{aspect-ratio:var(--ppb-aspect-video)}.ppb\:size-\(--cell-size\){width:var(--cell-size);height:var(--cell-size)}.ppb\:size-2{width:calc(var(--ppb-spacing) * 2);height:calc(var(--ppb-spacing) * 2)}.ppb\:size-2\.5{width:calc(var(--ppb-spacing) * 2.5);height:calc(var(--ppb-spacing) * 2.5)}.ppb\:size-3{width:calc(var(--ppb-spacing) * 3);height:calc(var(--ppb-spacing) * 3)}.ppb\:size-3\.5{width:calc(var(--ppb-spacing) * 3.5);height:calc(var(--ppb-spacing) * 3.5)}.ppb\:size-4{width:calc(var(--ppb-spacing) * 4);height:calc(var(--ppb-spacing) * 4)}.ppb\:size-7{width:calc(var(--ppb-spacing) * 7);height:calc(var(--ppb-spacing) * 7)}.ppb\:size-8{width:calc(var(--ppb-spacing) * 8);height:calc(var(--ppb-spacing) * 8)}.ppb\:size-9{width:calc(var(--ppb-spacing) * 9);height:calc(var(--ppb-spacing) * 9)}.ppb\:size-auto{width:auto;height:auto}.ppb\:size-full{width:100%;height:100%}.ppb\:h-\(--cell-size\){height:var(--cell-size)}.ppb\:h-0\.5{height:calc(var(--ppb-spacing) * .5)}.ppb\:h-1{height:calc(var(--ppb-spacing) * 1)}.ppb\:h-1\.5{height:calc(var(--ppb-spacing) * 1.5)}.ppb\:h-2{height:calc(var(--ppb-spacing) * 2)}.ppb\:h-2\.5{height:calc(var(--ppb-spacing) * 2.5)}.ppb\:h-3{height:calc(var(--ppb-spacing) * 3)}.ppb\:h-4{height:calc(var(--ppb-spacing) * 4)}.ppb\:h-5{height:calc(var(--ppb-spacing) * 5)}.ppb\:h-6{height:calc(var(--ppb-spacing) * 6)}.ppb\:h-7{height:calc(var(--ppb-spacing) * 7)}.ppb\:h-8{height:calc(var(--ppb-spacing) * 8)}.ppb\:h-9{height:calc(var(--ppb-spacing) * 9)}.ppb\:h-10{height:calc(var(--ppb-spacing) * 10)}.ppb\:h-12{height:calc(var(--ppb-spacing) * 12)}.ppb\:h-20{height:calc(var(--ppb-spacing) * 20)}.ppb\:h-32{height:calc(var(--ppb-spacing) * 32)}.ppb\:h-64{height:calc(var(--ppb-spacing) * 64)}.ppb\:h-\[1\.15rem\]{height:1.15rem}.ppb\:h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.ppb\:h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.ppb\:h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.ppb\:h-auto{height:auto}.ppb\:h-full{height:100%}.ppb\:h-px{height:1px}.ppb\:h-svh{height:100svh}.ppb\:max-h-\(--radix-context-menu-content-available-height\){max-height:var(--radix-context-menu-content-available-height)}.ppb\:max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.ppb\:max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.ppb\:max-h-16{max-height:calc(var(--ppb-spacing) * 16)}.ppb\:max-h-\[80vh\]{max-height:80vh}.ppb\:max-h-\[300px\]{max-height:300px}.ppb\:max-h-\[400px\]{max-height:400px}.ppb\:max-h-\[540px\]{max-height:540px}.ppb\:min-h-0{min-height:calc(var(--ppb-spacing) * 0)}.ppb\:min-h-4{min-height:calc(var(--ppb-spacing) * 4)}.ppb\:min-h-16{min-height:calc(var(--ppb-spacing) * 16)}.ppb\:min-h-20{min-height:calc(var(--ppb-spacing) * 20)}.ppb\:min-h-screen{min-height:100vh}.ppb\:min-h-svh{min-height:100svh}.ppb\:w-\(--cell-size\){width:var(--cell-size)}.ppb\:w-\(--sidebar-width\){width:var(--sidebar-width)}.ppb\:w-0\.5{width:calc(var(--ppb-spacing) * .5)}.ppb\:w-1{width:calc(var(--ppb-spacing) * 1)}.ppb\:w-2{width:calc(var(--ppb-spacing) * 2)}.ppb\:w-2\.5{width:calc(var(--ppb-spacing) * 2.5)}.ppb\:w-3{width:calc(var(--ppb-spacing) * 3)}.ppb\:w-3\/4{width:75%}.ppb\:w-4{width:calc(var(--ppb-spacing) * 4)}.ppb\:w-5{width:calc(var(--ppb-spacing) * 5)}.ppb\:w-6{width:calc(var(--ppb-spacing) * 6)}.ppb\:w-8{width:calc(var(--ppb-spacing) * 8)}.ppb\:w-9{width:calc(var(--ppb-spacing) * 9)}.ppb\:w-10{width:calc(var(--ppb-spacing) * 10)}.ppb\:w-12{width:calc(var(--ppb-spacing) * 12)}.ppb\:w-14{width:calc(var(--ppb-spacing) * 14)}.ppb\:w-16{width:calc(var(--ppb-spacing) * 16)}.ppb\:w-20{width:calc(var(--ppb-spacing) * 20)}.ppb\:w-24{width:calc(var(--ppb-spacing) * 24)}.ppb\:w-32{width:calc(var(--ppb-spacing) * 32)}.ppb\:w-40{width:calc(var(--ppb-spacing) * 40)}.ppb\:w-48{width:calc(var(--ppb-spacing) * 48)}.ppb\:w-64{width:calc(var(--ppb-spacing) * 64)}.ppb\:w-72{width:calc(var(--ppb-spacing) * 72)}.ppb\:w-80{width:calc(var(--ppb-spacing) * 80)}.ppb\:w-\[100px\]{width:100px}.ppb\:w-\[140px\]{width:140px}.ppb\:w-auto{width:auto}.ppb\:w-fit{width:fit-content}.ppb\:w-full{width:100%}.ppb\:w-max{width:max-content}.ppb\:w-px{width:1px}.ppb\:max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.ppb\:max-w-4xl{max-width:var(--ppb-container-4xl)}.ppb\:max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.ppb\:max-w-full{max-width:100%}.ppb\:max-w-max{max-width:max-content}.ppb\:max-w-md{max-width:var(--ppb-container-md)}.ppb\:max-w-sm{max-width:var(--ppb-container-sm)}.ppb\:min-w-\(--cell-size\){min-width:var(--cell-size)}.ppb\:min-w-0{min-width:calc(var(--ppb-spacing) * 0)}.ppb\:min-w-5{min-width:calc(var(--ppb-spacing) * 5)}.ppb\:min-w-8{min-width:calc(var(--ppb-spacing) * 8)}.ppb\:min-w-9{min-width:calc(var(--ppb-spacing) * 9)}.ppb\:min-w-10{min-width:calc(var(--ppb-spacing) * 10)}.ppb\:min-w-\[8rem\]{min-width:8rem}.ppb\:min-w-\[12rem\]{min-width:12rem}.ppb\:min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.ppb\:flex-1{flex:1}.ppb\:flex-shrink-0,.ppb\:shrink-0{flex-shrink:0}.ppb\:grow{flex-grow:1}.ppb\:grow-0{flex-grow:0}.ppb\:basis-full{flex-basis:100%}.ppb\:caption-bottom{caption-side:bottom}.ppb\:border-collapse{border-collapse:collapse}.ppb\:origin-\(--radix-context-menu-content-transform-origin\){transform-origin:var(--radix-context-menu-content-transform-origin)}.ppb\:origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.ppb\:origin-\(--radix-hover-card-content-transform-origin\){transform-origin:var(--radix-hover-card-content-transform-origin)}.ppb\:origin-\(--radix-menubar-content-transform-origin\){transform-origin:var(--radix-menubar-content-transform-origin)}.ppb\:origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.ppb\:origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.ppb\:origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.ppb\:-translate-x-1{--tw-translate-x:calc(var(--ppb-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:translate-y-0\.5{--tw-translate-y:calc(var(--ppb-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ppb\:scale-y-75{--tw-scale-y:75%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ppb\:rotate-45{rotate:45deg}.ppb\:rotate-90{rotate:90deg}.ppb\:transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.ppb\:animate-caret-blink{animation:1.25s ease-out infinite caret-blink}.ppb\:animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:animate-pulse{animation:var(--ppb-animate-pulse)}.ppb\:animate-spin{animation:var(--ppb-animate-spin)}.ppb\:cursor-default{cursor:default}.ppb\:cursor-not-allowed{cursor:not-allowed}.ppb\:cursor-pointer{cursor:pointer}.ppb\:touch-none{touch-action:none}.ppb\:scroll-my-1{scroll-margin-block:calc(var(--ppb-spacing) * 1)}.ppb\:scroll-py-1{scroll-padding-block:calc(var(--ppb-spacing) * 1)}.ppb\:list-none{list-style-type:none}.ppb\:auto-rows-min{grid-auto-rows:min-content}.ppb\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.ppb\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.ppb\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.ppb\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.ppb\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.ppb\:grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.ppb\:grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.ppb\:flex-col{flex-direction:column}.ppb\:flex-col-reverse{flex-direction:column-reverse}.ppb\:flex-row{flex-direction:row}.ppb\:flex-wrap{flex-wrap:wrap}.ppb\:items-baseline{align-items:baseline}.ppb\:items-center{align-items:center}.ppb\:items-end{align-items:flex-end}.ppb\:items-start{align-items:flex-start}.ppb\:items-stretch{align-items:stretch}.ppb\:justify-between{justify-content:space-between}.ppb\:justify-center{justify-content:center}.ppb\:justify-end{justify-content:flex-end}.ppb\:justify-start{justify-content:flex-start}.ppb\:justify-items-start{justify-items:start}.ppb\:gap-0\.5{gap:calc(var(--ppb-spacing) * .5)}.ppb\:gap-1{gap:calc(var(--ppb-spacing) * 1)}.ppb\:gap-1\.5{gap:calc(var(--ppb-spacing) * 1.5)}.ppb\:gap-2{gap:calc(var(--ppb-spacing) * 2)}.ppb\:gap-3{gap:calc(var(--ppb-spacing) * 3)}.ppb\:gap-4{gap:calc(var(--ppb-spacing) * 4)}.ppb\:gap-5{gap:calc(var(--ppb-spacing) * 5)}.ppb\:gap-6{gap:calc(var(--ppb-spacing) * 6)}.ppb\:gap-8{gap:calc(var(--ppb-spacing) * 8)}:where(.ppb\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\:space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ppb-spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ppb-spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}:where(.ppb\:space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ppb-spacing) * 1) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ppb-spacing) * 1) * calc(1 - var(--tw-space-x-reverse)))}:where(.ppb\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ppb-spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ppb-spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}:where(.ppb\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ppb-spacing) * 3) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ppb-spacing) * 3) * calc(1 - var(--tw-space-x-reverse)))}:where(.ppb\:space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ppb-spacing) * 6) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ppb-spacing) * 6) * calc(1 - var(--tw-space-x-reverse)))}.ppb\:gap-y-0\.5{row-gap:calc(var(--ppb-spacing) * .5)}.ppb\:self-start{align-self:flex-start}.ppb\:justify-self-end{justify-self:flex-end}.ppb\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ppb\:overflow-auto{overflow:auto}.ppb\:overflow-hidden{overflow:hidden}.ppb\:overflow-x-auto{overflow-x:auto}.ppb\:overflow-x-hidden{overflow-x:hidden}.ppb\:overflow-y-auto{overflow-y:auto}.ppb\:rounded{border-radius:.25rem}.ppb\:rounded-2xl{border-radius:var(--ppb-radius-2xl)}.ppb\:rounded-\[2px\]{border-radius:2px}.ppb\:rounded-\[4px\]{border-radius:4px}.ppb\:rounded-\[inherit\]{border-radius:inherit}.ppb\:rounded-full{border-radius:3.40282e38px}.ppb\:rounded-md{border-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:rounded-none{border-radius:0}.ppb\:rounded-sm{border-radius:var(--radius-s,calc(var(--ppb-radius) - 4px))}.ppb\:rounded-xl{border-radius:var(--radius-xl,calc(var(--ppb-radius) + 4px))}.ppb\:rounded-xs{border-radius:var(--ppb-radius-xs)}.ppb\:rounded-t-lg{border-top-left-radius:var(--radius-l,var(--ppb-radius));border-top-right-radius:var(--radius-l,var(--ppb-radius))}.ppb\:rounded-l-md{border-top-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:rounded-tl-sm{border-top-left-radius:var(--radius-s,calc(var(--ppb-radius) - 4px))}.ppb\:rounded-r-md{border-top-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:border{border-style:var(--tw-border-style);border-width:1px}.ppb\:border-2{border-style:var(--tw-border-style);border-width:2px}.ppb\:border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.ppb\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.ppb\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.ppb\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ppb\:border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.ppb\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\:border-dashed{--tw-border-style:dashed;border-style:dashed}.ppb\:border-\(--color-border\){border-color:var(--color-border)}.ppb\:border-border,.ppb\:border-border\/20{border-color:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\:border-border\/20{border-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 20%,transparent)}}.ppb\:border-border\/30{border-color:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\:border-border\/30{border-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 30%,transparent)}}.ppb\:border-border\/50{border-color:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\:border-border\/50{border-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 50%,transparent)}}.ppb\:border-destructive\/50{border-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:border-destructive\/50{border-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 50%,transparent)}}.ppb\:border-input{border-color:var(--background-modifier-border,var(--ppb-input))}.ppb\:border-muted{border-color:var(--background-primary-alt,var(--ppb-muted))}.ppb\:border-primary{border-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:border-sidebar-border{border-color:var(--ppb-sidebar-border)}.ppb\:border-transparent{border-color:#0000}.ppb\:border-white{border-color:var(--ppb-color-white)}.ppb\:border-t-transparent{border-top-color:#0000}.ppb\:border-l-transparent{border-left-color:#0000}.ppb\:bg-\(--color-bg\){background-color:var(--color-bg)}.ppb\:bg-accent{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:bg-background{background-color:var(--background-primary,var(--ppb-background))}.ppb\:bg-black\/20{background-color:var(--ppb-color-black)}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-black\/20{background-color:color-mix(in oklab,var(--ppb-color-black) 20%,transparent)}}.ppb\:bg-black\/50{background-color:var(--ppb-color-black)}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-black\/50{background-color:color-mix(in oklab,var(--ppb-color-black) 50%,transparent)}}.ppb\:bg-black\/60{background-color:var(--ppb-color-black)}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-black\/60{background-color:color-mix(in oklab,var(--ppb-color-black) 60%,transparent)}}.ppb\:bg-blue-500{background-color:var(--ppb-color-blue-500)}.ppb\:bg-border,.ppb\:bg-border\/20{background-color:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-border\/20{background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 20%,transparent)}}.ppb\:bg-card,.ppb\:bg-card\/50{background-color:var(--background-primary,var(--ppb-card))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-card\/50{background-color:color-mix(in oklab,var(--background-primary,var(--ppb-card)) 50%,transparent)}}.ppb\:bg-chart-1,.ppb\:bg-chart-1\/50{background-color:var(--ppb-chart-1)}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-chart-1\/50{background-color:color-mix(in oklab,var(--ppb-chart-1) 50%,transparent)}}.ppb\:bg-chart-2\/50{background-color:var(--ppb-chart-2)}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-chart-2\/50{background-color:color-mix(in oklab,var(--ppb-chart-2) 50%,transparent)}}.ppb\:bg-chart-3\/50{background-color:var(--ppb-chart-3)}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-chart-3\/50{background-color:color-mix(in oklab,var(--ppb-chart-3) 50%,transparent)}}.ppb\:bg-destructive,.ppb\:bg-destructive\/5{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-destructive\/5{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 5%,transparent)}}.ppb\:bg-destructive\/10{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-destructive\/10{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 10%,transparent)}}.ppb\:bg-foreground,.ppb\:bg-foreground\/90{background-color:var(--text-normal,var(--ppb-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-foreground\/90{background-color:color-mix(in oklab,var(--text-normal,var(--ppb-foreground)) 90%,transparent)}}.ppb\:bg-green-500{background-color:var(--ppb-color-green-500)}.ppb\:bg-muted,.ppb\:bg-muted\/5{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-muted\/5{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 5%,transparent)}}.ppb\:bg-muted\/10{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-muted\/10{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 10%,transparent)}}.ppb\:bg-muted\/20{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-muted\/20{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 20%,transparent)}}.ppb\:bg-muted\/30{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-muted\/30{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 30%,transparent)}}.ppb\:bg-muted\/50{background-color:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-muted\/50{background-color:color-mix(in oklab,var(--background-primary-alt,var(--ppb-muted)) 50%,transparent)}}.ppb\:bg-orange-500{background-color:var(--ppb-color-orange-500)}.ppb\:bg-popover{background-color:var(--ppb-popover)}.ppb\:bg-primary,.ppb\:bg-primary\/10{background-color:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-primary\/10{background-color:color-mix(in oklab,var(--interactive-accent,var(--ppb-primary)) 10%,transparent)}}.ppb\:bg-primary\/20{background-color:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-primary\/20{background-color:color-mix(in oklab,var(--interactive-accent,var(--ppb-primary)) 20%,transparent)}}.ppb\:bg-primary\/30{background-color:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-primary\/30{background-color:color-mix(in oklab,var(--interactive-accent,var(--ppb-primary)) 30%,transparent)}}.ppb\:bg-secondary,.ppb\:bg-secondary\/20{background-color:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-secondary\/20{background-color:color-mix(in oklab,var(--background-secondary,var(--ppb-secondary)) 20%,transparent)}}.ppb\:bg-secondary\/40{background-color:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){.ppb\:bg-secondary\/40{background-color:color-mix(in oklab,var(--background-secondary,var(--ppb-secondary)) 40%,transparent)}}.ppb\:bg-sidebar{background-color:var(--ppb-sidebar)}.ppb\:bg-sidebar-border{background-color:var(--ppb-sidebar-border)}.ppb\:bg-transparent{background-color:#0000}.ppb\:bg-white{background-color:var(--ppb-color-white)}.ppb\:bg-yellow-500{background-color:var(--ppb-color-yellow-500)}.ppb\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\:bg-gradient-to-bl{--tw-gradient-position:to bottom left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\:bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\:bg-gradient-to-l{--tw-gradient-position:to left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\:bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\:bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.ppb\:from-background{--tw-gradient-from:var(--background-primary,var(--ppb-background));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:from-muted\/3{--tw-gradient-from:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:from-muted\/3{--tw-gradient-from:color-mix(in oklab, var(--background-primary-alt,var(--ppb-muted)) 3%, transparent)}}.ppb\:from-muted\/3{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:from-muted\/5{--tw-gradient-from:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:from-muted\/5{--tw-gradient-from:color-mix(in oklab, var(--background-primary-alt,var(--ppb-muted)) 5%, transparent)}}.ppb\:from-muted\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:from-muted\/40{--tw-gradient-from:var(--background-primary-alt,var(--ppb-muted))}@supports (color:color-mix(in lab,red,red)){.ppb\:from-muted\/40{--tw-gradient-from:color-mix(in oklab, var(--background-primary-alt,var(--ppb-muted)) 40%, transparent)}}.ppb\:from-muted\/40{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:from-primary\/5{--tw-gradient-from:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\:from-primary\/5{--tw-gradient-from:color-mix(in oklab, var(--interactive-accent,var(--ppb-primary)) 5%, transparent)}}.ppb\:from-primary\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:from-primary\/20{--tw-gradient-from:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){.ppb\:from-primary\/20{--tw-gradient-from:color-mix(in oklab, var(--interactive-accent,var(--ppb-primary)) 20%, transparent)}}.ppb\:from-primary\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:from-transparent{--tw-gradient-from:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:via-muted-foreground\/20{--tw-gradient-via:var(--text-muted,var(--ppb-muted-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\:via-muted-foreground\/20{--tw-gradient-via:color-mix(in oklab, var(--text-muted,var(--ppb-muted-foreground)) 20%, transparent)}}.ppb\:via-muted-foreground\/20{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ppb\:via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ppb\:via-white\/5{--tw-gradient-via:var(--ppb-color-white)}@supports (color:color-mix(in lab,red,red)){.ppb\:via-white\/5{--tw-gradient-via:color-mix(in oklab, var(--ppb-color-white) 5%, transparent)}}.ppb\:via-white\/5{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ppb\:to-accent\/3{--tw-gradient-to:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\:to-accent\/3{--tw-gradient-to:color-mix(in oklab, var(--background-modifier-hover,var(--ppb-accent)) 3%, transparent)}}.ppb\:to-accent\/3{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:to-accent\/5{--tw-gradient-to:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\:to-accent\/5{--tw-gradient-to:color-mix(in oklab, var(--background-modifier-hover,var(--ppb-accent)) 5%, transparent)}}.ppb\:to-accent\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:to-secondary\/10{--tw-gradient-to:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){.ppb\:to-secondary\/10{--tw-gradient-to:color-mix(in oklab, var(--background-secondary,var(--ppb-secondary)) 10%, transparent)}}.ppb\:to-secondary\/10{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:to-secondary\/20{--tw-gradient-to:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){.ppb\:to-secondary\/20{--tw-gradient-to:color-mix(in oklab, var(--background-secondary,var(--ppb-secondary)) 20%, transparent)}}.ppb\:to-secondary\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ppb\:bg-repeat-y{background-repeat:repeat-y}.ppb\:fill-current{fill:currentColor}.ppb\:fill-primary{fill:var(--interactive-accent,var(--ppb-primary))}.ppb\:fill-yellow-400{fill:var(--ppb-color-yellow-400)}.ppb\:object-cover{object-fit:cover}.ppb\:p-0{padding:calc(var(--ppb-spacing) * 0)}.ppb\:p-1{padding:calc(var(--ppb-spacing) * 1)}.ppb\:p-2{padding:calc(var(--ppb-spacing) * 2)}.ppb\:p-3{padding:calc(var(--ppb-spacing) * 3)}.ppb\:p-4{padding:calc(var(--ppb-spacing) * 4)}.ppb\:p-6{padding:calc(var(--ppb-spacing) * 6)}.ppb\:p-8{padding:calc(var(--ppb-spacing) * 8)}.ppb\:p-\[3px\]{padding:3px}.ppb\:p-px{padding:1px}.ppb\:px-\(--cell-size\){padding-inline:var(--cell-size)}.ppb\:px-1{padding-inline:calc(var(--ppb-spacing) * 1)}.ppb\:px-1\.5{padding-inline:calc(var(--ppb-spacing) * 1.5)}.ppb\:px-2{padding-inline:calc(var(--ppb-spacing) * 2)}.ppb\:px-2\.5{padding-inline:calc(var(--ppb-spacing) * 2.5)}.ppb\:px-3{padding-inline:calc(var(--ppb-spacing) * 3)}.ppb\:px-4{padding-inline:calc(var(--ppb-spacing) * 4)}.ppb\:px-6{padding-inline:calc(var(--ppb-spacing) * 6)}.ppb\:px-\[0px\]{padding-inline:0}.ppb\:px-\[20px\]{padding-inline:20px}.ppb\:px-\[24px\]{padding-inline:24px}.ppb\:px-\[26px\]{padding-inline:26px}.ppb\:px-\[34px\]{padding-inline:34px}.ppb\:py-0{padding-block:calc(var(--ppb-spacing) * 0)}.ppb\:py-0\.5{padding-block:calc(var(--ppb-spacing) * .5)}.ppb\:py-1{padding-block:calc(var(--ppb-spacing) * 1)}.ppb\:py-1\.5{padding-block:calc(var(--ppb-spacing) * 1.5)}.ppb\:py-2{padding-block:calc(var(--ppb-spacing) * 2)}.ppb\:py-3{padding-block:calc(var(--ppb-spacing) * 3)}.ppb\:py-4{padding-block:calc(var(--ppb-spacing) * 4)}.ppb\:py-6{padding-block:calc(var(--ppb-spacing) * 6)}.ppb\:py-8{padding-block:calc(var(--ppb-spacing) * 8)}.ppb\:py-12{padding-block:calc(var(--ppb-spacing) * 12)}.ppb\:py-\[19px\]{padding-block:19px}.ppb\:py-\[37px\]{padding-block:37px}.ppb\:py-\[41px\]{padding-block:41px}.ppb\:py-\[42px\]{padding-block:42px}.ppb\:pt-0{padding-top:calc(var(--ppb-spacing) * 0)}.ppb\:pt-2{padding-top:calc(var(--ppb-spacing) * 2)}.ppb\:pt-3{padding-top:calc(var(--ppb-spacing) * 3)}.ppb\:pt-4{padding-top:calc(var(--ppb-spacing) * 4)}.ppb\:pr-1{padding-right:calc(var(--ppb-spacing) * 1)}.ppb\:pr-2{padding-right:calc(var(--ppb-spacing) * 2)}.ppb\:pr-2\.5{padding-right:calc(var(--ppb-spacing) * 2.5)}.ppb\:pr-8{padding-right:calc(var(--ppb-spacing) * 8)}.ppb\:pb-2{padding-bottom:calc(var(--ppb-spacing) * 2)}.ppb\:pb-3{padding-bottom:calc(var(--ppb-spacing) * 3)}.ppb\:pb-4{padding-bottom:calc(var(--ppb-spacing) * 4)}.ppb\:pb-8{padding-bottom:calc(var(--ppb-spacing) * 8)}.ppb\:pl-2{padding-left:calc(var(--ppb-spacing) * 2)}.ppb\:pl-4{padding-left:calc(var(--ppb-spacing) * 4)}.ppb\:pl-8{padding-left:calc(var(--ppb-spacing) * 8)}.ppb\:pl-9{padding-left:calc(var(--ppb-spacing) * 9)}.ppb\:text-center{text-align:center}.ppb\:text-left{text-align:left}.ppb\:text-right{text-align:right}.ppb\:align-middle{vertical-align:middle}.ppb\:align-super{vertical-align:super}.ppb\:font-mono{font-family:var(--ppb-font-mono)}.ppb\:text-2xl{font-size:calc(var(--font-ui-large,20px) * 1.2);line-height:var(--tw-leading,var(--ppb-text-2xl--line-height))}.ppb\:text-4xl{font-size:calc(var(--font-ui-large,20px) * 1.8);line-height:var(--tw-leading,var(--ppb-text-4xl--line-height))}.ppb\:text-5xl{font-size:calc(var(--font-ui-large,20px) * 2.4);line-height:var(--tw-leading,var(--ppb-text-5xl--line-height))}.ppb\:text-base{font-size:var(--font-ui-medium,1rem);line-height:var(--tw-leading,var(--ppb-text-base--line-height))}.ppb\:text-lg{font-size:calc(var(--font-ui-large,20px) * .9);line-height:var(--tw-leading,var(--ppb-text-lg--line-height))}.ppb\:text-sm{font-size:var(--font-ui-small,.875rem);line-height:var(--tw-leading,var(--ppb-text-sm--line-height))}.ppb\:text-xl{font-size:var(--font-ui-large,1.25rem);line-height:var(--tw-leading,var(--ppb-text-xl--line-height))}.ppb\:text-xs{font-size:var(--font-ui-smaller,.75rem);line-height:var(--tw-leading,var(--ppb-text-xs--line-height))}.ppb\:text-\[0\.8rem\]{font-size:.8rem}.ppb\:text-\[9px\]{font-size:9px}.ppb\:text-\[10px\]{font-size:10px}.ppb\:text-\[20px\]{font-size:20px}.ppb\:text-\[22px\]{font-size:22px}.ppb\:leading-none{--tw-leading:1;line-height:1}.ppb\:leading-tight{--tw-leading:var(--ppb-leading-tight);line-height:var(--ppb-leading-tight)}.ppb\:font-bold{--tw-font-weight:var(--font-bold,700);font-weight:var(--font-bold,700)}.ppb\:font-medium{--tw-font-weight:var(--font-medium,500);font-weight:var(--font-medium,500)}.ppb\:font-normal{--tw-font-weight:var(--font-normal,400);font-weight:var(--font-normal,400)}.ppb\:font-semibold{--tw-font-weight:var(--font-semibold,600);font-weight:var(--font-semibold,600)}.ppb\:tracking-tight{--tw-tracking:var(--ppb-tracking-tight);letter-spacing:var(--ppb-tracking-tight)}.ppb\:tracking-widest{--tw-tracking:var(--ppb-tracking-widest);letter-spacing:var(--ppb-tracking-widest)}.ppb\:text-balance{text-wrap:balance}.ppb\:break-words{overflow-wrap:break-word}.ppb\:whitespace-nowrap{white-space:nowrap}.ppb\:text-accent-foreground{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:text-background{color:var(--background-primary,var(--ppb-background))}.ppb\:text-blue-500{color:var(--ppb-color-blue-500)}.ppb\:text-card-foreground{color:var(--text-normal,var(--ppb-card-foreground))}.ppb\:text-chart-1,.ppb\:text-chart-1\/60{color:var(--ppb-chart-1)}@supports (color:color-mix(in lab,red,red)){.ppb\:text-chart-1\/60{color:color-mix(in oklab,var(--ppb-chart-1) 60%,transparent)}}.ppb\:text-chart-2{color:var(--ppb-chart-2)}.ppb\:text-chart-3{color:var(--ppb-chart-3)}.ppb\:text-current{color:currentColor}.ppb\:text-destructive{color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\:text-foreground{color:var(--text-normal,var(--ppb-foreground))}.ppb\:text-gray-300{color:var(--ppb-color-gray-300)}.ppb\:text-green-500{color:var(--ppb-color-green-500)}.ppb\:text-muted-foreground,.ppb\:text-muted-foreground\/20{color:var(--text-muted,var(--ppb-muted-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\:text-muted-foreground\/20{color:color-mix(in oklab,var(--text-muted,var(--ppb-muted-foreground)) 20%,transparent)}}.ppb\:text-muted-foreground\/30{color:var(--text-muted,var(--ppb-muted-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\:text-muted-foreground\/30{color:color-mix(in oklab,var(--text-muted,var(--ppb-muted-foreground)) 30%,transparent)}}.ppb\:text-muted-foreground\/80{color:var(--text-muted,var(--ppb-muted-foreground))}@supports (color:color-mix(in lab,red,red)){.ppb\:text-muted-foreground\/80{color:color-mix(in oklab,var(--text-muted,var(--ppb-muted-foreground)) 80%,transparent)}}.ppb\:text-popover-foreground{color:var(--ppb-popover-foreground)}.ppb\:text-primary{color:var(--interactive-accent,var(--ppb-primary))}.ppb\:text-primary-foreground{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:text-secondary-foreground{color:var(--text-normal,var(--ppb-secondary-foreground))}.ppb\:text-sidebar-foreground,.ppb\:text-sidebar-foreground\/70{color:var(--ppb-sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.ppb\:text-sidebar-foreground\/70{color:color-mix(in oklab,var(--ppb-sidebar-foreground) 70%,transparent)}}.ppb\:text-white{color:var(--ppb-color-white)}.ppb\:text-yellow-400{color:var(--ppb-color-yellow-400)}.ppb\:text-yellow-500{color:var(--ppb-color-yellow-500)}.ppb\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.ppb\:line-through{text-decoration-line:line-through}.ppb\:underline{text-decoration-line:underline}.ppb\:underline-offset-4{text-underline-offset:4px}.ppb\:opacity-0{opacity:0}.ppb\:opacity-10{opacity:.1}.ppb\:opacity-20{opacity:.2}.ppb\:opacity-30{opacity:.3}.ppb\:opacity-40{opacity:.4}.ppb\:opacity-50{opacity:.5}.ppb\:opacity-60{opacity:.6}.ppb\:opacity-70{opacity:.7}.ppb\:opacity-75{opacity:.75}.ppb\:opacity-80{opacity:.8}.ppb\:shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:ring-ring\/50{--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\:ring-ring\/50{--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}.ppb\:ring-sidebar-ring{--tw-ring-color:var(--ppb-sidebar-ring)}.ppb\:ring-offset-background{--tw-ring-offset-color:var(--background-primary,var(--ppb-background))}.ppb\:outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\:outline-hidden{outline-offset:2px;outline:2px solid #0000}}.ppb\:blur-3xl{--tw-blur:blur(var(--ppb-blur-3xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.ppb\:blur-xl{--tw-blur:blur(var(--ppb-blur-xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.ppb\:backdrop-blur-sm{--tw-backdrop-blur:blur(var(--ppb-blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.ppb\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--ppb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ppb-default-transition-duration))}.ppb\:transition-none{transition-property:none}.ppb\:delay-1000{transition-delay:1s}.ppb\:duration-200{--tw-duration:.2s;transition-duration:.2s}.ppb\:duration-300{--tw-duration:.3s;transition-duration:.3s}.ppb\:duration-500{--tw-duration:.5s;transition-duration:.5s}.ppb\:duration-700{--tw-duration:.7s;transition-duration:.7s}.ppb\:duration-1000{--tw-duration:1s;transition-duration:1s}.ppb\:ease-in-out{--tw-ease:var(--ppb-ease-in-out);transition-timing-function:var(--ppb-ease-in-out)}.ppb\:ease-linear{--tw-ease:linear;transition-timing-function:linear}.ppb\:ease-out{--tw-ease:var(--ppb-ease-out);transition-timing-function:var(--ppb-ease-out)}.ppb\:delay-1000{--tw-animation-delay:1s;animation-delay:1s}.ppb\:fade-in-0{--tw-enter-opacity:0}.ppb\:outline-none{--tw-outline-style:none;outline-style:none}.ppb\:select-none{-webkit-user-select:none;user-select:none}.ppb\:zoom-in-95{--tw-enter-scale:.95}.ppb\:\[--cell-size\:--spacing\(8\)\]{--cell-size:calc(var(--ppb-spacing) * 8)}.ppb\:group-focus-within\/menu-item\:opacity-100:is(:where(.ppb\:group\/menu-item):focus-within *){opacity:1}@media(hover:hover){.ppb\:group-hover\/menu-item\:opacity-100:is(:where(.ppb\:group\/menu-item):hover *){opacity:1}}.ppb\:group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.ppb\:group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--ppb-spacing) * 8)}.ppb\:group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.ppb\:group)[data-collapsible=icon] *){margin-top:calc(var(--ppb-spacing) * -8)}.ppb\:group-data-\[collapsible\=icon\]\:hidden:is(:where(.ppb\:group)[data-collapsible=icon] *){display:none}.ppb\:group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.ppb\:group)[data-collapsible=icon] *){width:calc(var(--ppb-spacing) * 8)!important;height:calc(var(--ppb-spacing) * 8)!important}.ppb\:group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.ppb\:group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.ppb\:group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.ppb\:group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--ppb-spacing) * 4)))}.ppb\:group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.ppb\:group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--ppb-spacing) * 4)) + 2px)}.ppb\:group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.ppb\:group)[data-collapsible=icon] *){overflow:hidden}.ppb\:group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.ppb\:group)[data-collapsible=icon] *){padding:calc(var(--ppb-spacing) * 0)!important}.ppb\:group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.ppb\:group)[data-collapsible=icon] *){padding:calc(var(--ppb-spacing) * 2)!important}.ppb\:group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.ppb\:group)[data-collapsible=icon] *){opacity:0}.ppb\:group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.ppb\:group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width) * -1)}.ppb\:group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.ppb\:group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width) * -1)}.ppb\:group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.ppb\:group)[data-collapsible=offcanvas] *){width:calc(var(--ppb-spacing) * 0)}.ppb\:group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.ppb\:group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--ppb-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.ppb\:group)[data-disabled=true] *){pointer-events:none}.ppb\:group-data-\[disabled\=true\]\:opacity-50:is(:where(.ppb\:group)[data-disabled=true] *){opacity:.5}.ppb\:group-data-\[focused\=true\]\/day\:relative:is(:where(.ppb\:group\/day)[data-focused=true] *){position:relative}.ppb\:group-data-\[focused\=true\]\/day\:z-10:is(:where(.ppb\:group\/day)[data-focused=true] *){z-index:10}.ppb\:group-data-\[focused\=true\]\/day\:border-ring:is(:where(.ppb\:group\/day)[data-focused=true] *){border-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\:group-data-\[focused\=true\]\/day\:ring-\[3px\]:is(:where(.ppb\:group\/day)[data-focused=true] *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:group-data-\[focused\=true\]\/day\:ring-ring\/50:is(:where(.ppb\:group\/day)[data-focused=true] *){--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\:group-data-\[focused\=true\]\/day\:ring-ring\/50:is(:where(.ppb\:group\/day)[data-focused=true] *){--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}.ppb\:group-data-\[side\=left\]\:-right-4:is(:where(.ppb\:group)[data-side=left] *){right:calc(var(--ppb-spacing) * -4)}.ppb\:group-data-\[side\=left\]\:border-r:is(:where(.ppb\:group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.ppb\:group-data-\[side\=right\]\:left-0:is(:where(.ppb\:group)[data-side=right] *){left:calc(var(--ppb-spacing) * 0)}.ppb\:group-data-\[side\=right\]\:rotate-180:is(:where(.ppb\:group)[data-side=right] *){rotate:180deg}.ppb\:group-data-\[side\=right\]\:border-l:is(:where(.ppb\:group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\:group-data-\[state\=open\]\:rotate-180:is(:where(.ppb\:group)[data-state=open] *){rotate:180deg}.ppb\:group-data-\[variant\=floating\]\:rounded-lg:is(:where(.ppb\:group)[data-variant=floating] *){border-radius:var(--radius-l,var(--ppb-radius))}.ppb\:group-data-\[variant\=floating\]\:border:is(:where(.ppb\:group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.ppb\:group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.ppb\:group)[data-variant=floating] *){border-color:var(--ppb-sidebar-border)}.ppb\:group-data-\[variant\=floating\]\:shadow-sm:is(:where(.ppb\:group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block:is(:where(.ppb\:group\/drawer-content)[data-vaul-drawer-direction=bottom] *){display:block}.ppb\:group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:text-center:is(:where(.ppb\:group\/drawer-content)[data-vaul-drawer-direction=bottom] *),.ppb\:group-data-\[vaul-drawer-direction\=top\]\/drawer-content\:text-center:is(:where(.ppb\:group\/drawer-content)[data-vaul-drawer-direction=top] *){text-align:center}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:top-full:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){top:100%}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){margin-top:calc(var(--ppb-spacing) * 1.5)}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){overflow:hidden}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:rounded-md:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){border-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:border:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){border-style:var(--tw-border-style);border-width:1px}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:bg-popover:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){background-color:var(--ppb-popover)}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){color:var(--ppb-popover-foreground)}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:shadow:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:duration-200:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *){--tw-duration:.2s;transition-duration:.2s}@media(hover:hover){.ppb\:peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.ppb\:peer\/menu-button):hover~*){color:var(--ppb-sidebar-accent-foreground)}}.ppb\:peer-disabled\:cursor-not-allowed:is(:where(.ppb\:peer):disabled~*){cursor:not-allowed}.ppb\:peer-disabled\:opacity-50:is(:where(.ppb\:peer):disabled~*){opacity:.5}.ppb\:peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.ppb\:peer\/menu-button)[data-active=true]~*){color:var(--ppb-sidebar-accent-foreground)}.ppb\:peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.ppb\:peer\/menu-button)[data-size=default]~*){top:calc(var(--ppb-spacing) * 1.5)}.ppb\:peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.ppb\:peer\/menu-button)[data-size=lg]~*){top:calc(var(--ppb-spacing) * 2.5)}.ppb\:peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.ppb\:peer\/menu-button)[data-size=sm]~*){top:calc(var(--ppb-spacing) * 1)}.ppb\:selection\:bg-primary ::selection{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:selection\:bg-primary::selection{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:selection\:text-primary-foreground ::selection{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:selection\:text-primary-foreground::selection{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:file\:inline-flex::file-selector-button{display:inline-flex}.ppb\:file\:h-7::file-selector-button{height:calc(var(--ppb-spacing) * 7)}.ppb\:file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.ppb\:file\:bg-transparent::file-selector-button{background-color:#0000}.ppb\:file\:text-sm::file-selector-button{font-size:var(--font-ui-small,.875rem);line-height:var(--tw-leading,var(--ppb-text-sm--line-height))}.ppb\:file\:font-medium::file-selector-button{--tw-font-weight:var(--font-medium,500);font-weight:var(--font-medium,500)}.ppb\:file\:text-foreground::file-selector-button{color:var(--text-normal,var(--ppb-foreground))}.ppb\:placeholder\:text-muted-foreground::placeholder{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:after\:absolute:after{content:var(--tw-content);position:absolute}.ppb\:after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--ppb-spacing) * -2)}.ppb\:after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--ppb-spacing) * 0)}.ppb\:after\:left-1\/2:after{content:var(--tw-content);left:50%}.ppb\:after\:w-1:after{content:var(--tw-content);width:calc(var(--ppb-spacing) * 1)}.ppb\:after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.ppb\:after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.ppb\:group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.ppb\:first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\:last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ppb\:focus\:z-10:focus{z-index:10}.ppb\:focus\:bg-accent:focus{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:focus\:text-accent-foreground:focus{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:focus\:ring-ring:focus{--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\:focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ppb\:focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\:focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.ppb\:focus-visible\:z-10:focus-visible{z-index:10}.ppb\:focus-visible\:border-ring:focus-visible{border-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\:focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:focus-visible\:ring-4:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 20%, transparent)}}.ppb\:focus-visible\:ring-ring:focus-visible,.ppb\:focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\:focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}.ppb\:focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ppb\:focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\:focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.ppb\:focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.ppb\:focus-visible\:outline-ring:focus-visible{outline-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\:active\:bg-sidebar-accent:active{background-color:var(--ppb-sidebar-accent)}.ppb\:active\:text-sidebar-accent-foreground:active{color:var(--ppb-sidebar-accent-foreground)}.ppb\:disabled\:pointer-events-none:disabled{pointer-events:none}.ppb\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.ppb\:disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .ppb\:in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .ppb\:in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.ppb\:has-focus\:border-ring:has(:focus){border-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\:has-focus\:ring-\[3px\]:has(:focus){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:has-focus\:ring-ring\/50:has(:focus){--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\:has-focus\:ring-ring\/50:has(:focus){--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}.ppb\:has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.ppb\:has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--ppb-sidebar)}.ppb\:has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.ppb\:has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--ppb-spacing) * 3)}.ppb\:has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--ppb-spacing) * 2.5)}.ppb\:has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--ppb-spacing) * 3)}.ppb\:has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--ppb-spacing) * 4)}.ppb\:aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.ppb\:aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.ppb\:aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\:aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 20%, transparent)}}.ppb\:aria-selected\:text-muted-foreground[aria-selected=true]{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:data-\[active\=true\]\:z-10[data-active=true]{z-index:10}.ppb\:data-\[active\=true\]\:border-ring[data-active=true]{border-color:var(--background-modifier-border-focus,var(--ppb-ring))}.ppb\:data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\:data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:color-mix(in oklab,var(--background-modifier-hover,var(--ppb-accent)) 50%,transparent)}}.ppb\:data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--ppb-sidebar-accent)}.ppb\:data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-medium,500);font-weight:var(--font-medium,500)}.ppb\:data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--ppb-sidebar-accent-foreground)}.ppb\:data-\[active\=true\]\:ring-\[3px\][data-active=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color:var(--background-modifier-border-focus,var(--ppb-ring))}@supports (color:color-mix(in lab,red,red)){.ppb\:data-\[active\=true\]\:ring-ring\/50[data-active=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-border-focus,var(--ppb-ring)) 50%, transparent)}}@media(hover:hover){.ppb\:data-\[active\=true\]\:hover\:bg-accent[data-active=true]:hover{background-color:var(--background-modifier-hover,var(--ppb-accent))}}.ppb\:data-\[active\=true\]\:focus\:bg-accent[data-active=true]:focus{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:data-\[active\=true\]\:aria-invalid\:border-destructive[data-active=true][aria-invalid=true]{border-color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/20[data-active=true][aria-invalid=true]{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/20[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 20%, transparent)}}.ppb\:data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.ppb\:data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.ppb\:data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.ppb\:data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.ppb\:data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\:data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--ppb-spacing) * 8)}.ppb\:data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x:calc(52*var(--spacing))}.ppb\:data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x:calc(52*var(--spacing)*-1)}.ppb\:data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x:calc(52*var(--spacing))}.ppb\:data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x:calc(52*var(--spacing)*-1)}.ppb\:data-\[motion\^\=from-\]\:animate-in[data-motion^=from-]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity:0}.ppb\:data-\[motion\^\=to-\]\:animate-out[data-motion^=to-]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[motion\^\=to-\]\:fade-out[data-motion^=to-]{--tw-exit-opacity:0}.ppb\:data-\[orientation\=horizontal\]\:h-1\.5[data-orientation=horizontal]{height:calc(var(--ppb-spacing) * 1.5)}.ppb\:data-\[orientation\=horizontal\]\:h-full[data-orientation=horizontal]{height:100%}.ppb\:data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.ppb\:data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.ppb\:data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.ppb\:data-\[orientation\=vertical\]\:min-h-44[data-orientation=vertical]{min-height:calc(var(--ppb-spacing) * 44)}.ppb\:data-\[orientation\=vertical\]\:w-1\.5[data-orientation=vertical]{width:calc(var(--ppb-spacing) * 1.5)}.ppb\:data-\[orientation\=vertical\]\:w-auto[data-orientation=vertical]{width:auto}.ppb\:data-\[orientation\=vertical\]\:w-full[data-orientation=vertical]{width:100%}.ppb\:data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.ppb\:data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical]{flex-direction:column}.ppb\:data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.ppb\:data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.ppb\:data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.ppb\:data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--ppb-spacing) * 1)}.ppb\:data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.ppb\:data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--ppb-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:data-\[range-end\=true\]\:rounded-md[data-range-end=true]{border-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:data-\[range-end\=true\]\:rounded-r-md[data-range-end=true]{border-top-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:data-\[range-end\=true\]\:bg-primary[data-range-end=true]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:data-\[range-end\=true\]\:text-primary-foreground[data-range-end=true]{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:data-\[range-middle\=true\]\:rounded-none[data-range-middle=true]{border-radius:0}.ppb\:data-\[range-middle\=true\]\:bg-accent[data-range-middle=true]{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:data-\[range-middle\=true\]\:text-accent-foreground[data-range-middle=true]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:data-\[range-start\=true\]\:rounded-md[data-range-start=true]{border-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:data-\[range-start\=true\]\:rounded-l-md[data-range-start=true]{border-top-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:data-\[range-start\=true\]\:bg-primary[data-range-start=true]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:data-\[range-start\=true\]\:text-primary-foreground[data-range-start=true]{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:data-\[selected-single\=true\]\:bg-primary[data-selected-single=true]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:data-\[selected-single\=true\]\:text-primary-foreground[data-selected-single=true]{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:data-\[selected\=true\]\:rounded-none[data-selected=true]{border-radius:0}.ppb\:data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--ppb-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.ppb\:data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--ppb-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.ppb\:data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--ppb-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.ppb\:data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--ppb-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.ppb\:data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--ppb-spacing) * 9)}.ppb\:data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--ppb-spacing) * 8)}:is(.ppb\:\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){:is(.ppb\:\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 90%,transparent)}}:is(.ppb\:\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--ppb-spacing) * 12)}:is(.ppb\:\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:ring-0 *)[data-slot=navigation-menu-link]:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(.ppb\:\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:outline-none *)[data-slot=navigation-menu-link]:focus{--tw-outline-style:none;outline-style:none}:is(.ppb\:\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.ppb\:\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.ppb\:\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.ppb\:\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--ppb-spacing) * 2)}.ppb\:data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background-primary,var(--ppb-background))}.ppb\:data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x: calc(100% - 2px) ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.ppb\:data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.ppb\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.ppb\:data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.ppb\:data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.ppb\:data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.ppb\:data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-opacity:0}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-scale:.95}.ppb\:data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity:0}.ppb\:data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[state\=open\]\:bg-accent[data-state=open],.ppb\:data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\:data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:color-mix(in oklab,var(--background-modifier-hover,var(--ppb-accent)) 50%,transparent)}}.ppb\:data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--background-secondary,var(--ppb-secondary))}.ppb\:data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--text-normal,var(--ppb-accent-foreground))}.ppb\:data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.ppb\:data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.ppb\:data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.ppb\:data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale:.9}.ppb\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.ppb\:data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.ppb\:data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.ppb\:data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.ppb\:data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *)[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-opacity:0}.ppb\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95:is(:where(.ppb\:group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-scale:.95}@media(hover:hover){.ppb\:data-\[state\=open\]\:hover\:bg-accent[data-state=open]:hover{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--ppb-sidebar-accent)}.ppb\:data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--ppb-sidebar-accent-foreground)}}.ppb\:data-\[state\=open\]\:focus\:bg-accent[data-state=open]:focus{background-color:var(--background-modifier-hover,var(--ppb-accent))}.ppb\:data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--background-primary-alt,var(--ppb-muted))}.ppb\:data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--ppb-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--background-modifier-border,var(--ppb-input))}.ppb\:data-\[state\=visible\]\:animate-in[data-state=visible]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ppb\:data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity:0}.ppb\:data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\:data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 10%,transparent)}}.ppb\:data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--background-modifier-error,var(--ppb-destructive))}.ppb\:data-\[variant\=outline\]\:border-l-0[data-variant=outline]{border-left-style:var(--tw-border-style);border-left-width:0}.ppb\:data-\[variant\=outline\]\:shadow-xs[data-variant=outline]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:data-\[variant\=outline\]\:first\:border-l[data-variant=outline]:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\:data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{inset-inline:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:calc(var(--ppb-spacing) * 24)}.ppb\:data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom]{max-height:80vh}.ppb\:data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius-l,var(--ppb-radius));border-top-right-radius:var(--radius-l,var(--ppb-radius))}.ppb\:data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-style:var(--tw-border-style);border-top-width:1px}.ppb\:data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left]{inset-block:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction=left]{left:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left]{width:75%}.ppb\:data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction=left]{border-right-style:var(--tw-border-style);border-right-width:1px}.ppb\:data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{inset-block:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction=right]{right:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.ppb\:data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction=right]{border-left-style:var(--tw-border-style);border-left-width:1px}.ppb\:data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{inset-inline:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:calc(var(--ppb-spacing) * 0)}.ppb\:data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:calc(var(--ppb-spacing) * 24)}.ppb\:data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.ppb\:data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius-l,var(--ppb-radius));border-bottom-left-radius:var(--radius-l,var(--ppb-radius))}.ppb\:data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}@media(min-width:40rem){.ppb\:sm\:block{display:block}.ppb\:sm\:flex{display:flex}.ppb\:sm\:max-w-lg{max-width:var(--ppb-container-lg)}.ppb\:sm\:max-w-sm{max-width:var(--ppb-container-sm)}.ppb\:sm\:flex-row{flex-direction:row}.ppb\:sm\:justify-end{justify-content:flex-end}.ppb\:sm\:gap-2\.5{gap:calc(var(--ppb-spacing) * 2.5)}.ppb\:sm\:pr-2\.5{padding-right:calc(var(--ppb-spacing) * 2.5)}.ppb\:sm\:pl-2\.5{padding-left:calc(var(--ppb-spacing) * 2.5)}.ppb\:sm\:text-left{text-align:left}.ppb\:data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.ppb\:data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:var(--ppb-container-sm)}}@media(min-width:48rem){.ppb\:md\:absolute{position:absolute}.ppb\:md\:block{display:block}.ppb\:md\:flex{display:flex}.ppb\:md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.ppb\:md\:w-auto{width:auto}.ppb\:md\:flex-row{flex-direction:row}.ppb\:md\:gap-1\.5{gap:calc(var(--ppb-spacing) * 1.5)}.ppb\:md\:text-left{text-align:left}.ppb\:md\:text-sm{font-size:var(--font-ui-small,.875rem);line-height:var(--tw-leading,var(--ppb-text-sm--line-height))}.ppb\:md\:opacity-0{opacity:0}.ppb\:md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.ppb\:peer)[data-variant=inset]~*){margin:calc(var(--ppb-spacing) * 2)}.ppb\:md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.ppb\:peer)[data-variant=inset]~*){margin-left:calc(var(--ppb-spacing) * 0)}.ppb\:md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.ppb\:peer)[data-variant=inset]~*){border-radius:var(--radius-xl,calc(var(--ppb-radius) + 4px))}.ppb\:md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.ppb\:peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ppb\:md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.ppb\:peer)[data-variant=inset]~*):is(:where(.ppb\:peer)[data-state=collapsed]~*){margin-left:calc(var(--ppb-spacing) * 2)}.ppb\:md\:after\:hidden:after{content:var(--tw-content);display:none}}@media(min-width:64rem){.ppb\:lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.ppb\:dark\:border-input:is(.dark,.dark *){border-color:var(--background-modifier-border,var(--ppb-input))}.ppb\:dark\:bg-destructive\/60:is(.dark,.dark *){background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:bg-destructive\/60:is(.dark,.dark *){background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 60%,transparent)}}.ppb\:dark\:bg-input\/30:is(.dark,.dark *){background-color:var(--background-modifier-border,var(--ppb-input))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:bg-input\/30:is(.dark,.dark *){background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-input)) 30%,transparent)}}.ppb\:dark\:text-muted-foreground:is(.dark,.dark *){color:var(--text-muted,var(--ppb-muted-foreground))}@media(hover:hover){.ppb\:dark\:hover\:bg-accent\/50:is(.dark,.dark *):hover{background-color:var(--background-modifier-hover,var(--ppb-accent))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:hover\:bg-accent\/50:is(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--background-modifier-hover,var(--ppb-accent)) 50%,transparent)}}.ppb\:dark\:hover\:bg-input\/50:is(.dark,.dark *):hover{background-color:var(--background-modifier-border,var(--ppb-input))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:hover\:bg-input\/50:is(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-input)) 50%,transparent)}}.ppb\:dark\:hover\:text-accent-foreground:is(.dark,.dark *):hover{color:var(--text-normal,var(--ppb-accent-foreground))}}.ppb\:dark\:focus-visible\:ring-destructive\/40:is(.dark,.dark *):focus-visible{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:focus-visible\:ring-destructive\/40:is(.dark,.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 40%, transparent)}}.ppb\:dark\:aria-invalid\:ring-destructive\/40:is(.dark,.dark *)[aria-invalid=true]{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:aria-invalid\:ring-destructive\/40:is(.dark,.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 40%, transparent)}}.ppb\:dark\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/40:is(.dark,.dark *)[data-active=true][aria-invalid=true]{--tw-ring-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:data-\[active\=true\]\:aria-invalid\:ring-destructive\/40:is(.dark,.dark *)[data-active=true][aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--background-modifier-error,var(--ppb-destructive)) 40%, transparent)}}.ppb\:dark\:data-\[state\=active\]\:border-input:is(.dark,.dark *)[data-state=active]{border-color:var(--background-modifier-border,var(--ppb-input))}.ppb\:dark\:data-\[state\=active\]\:bg-input\/30:is(.dark,.dark *)[data-state=active]{background-color:var(--background-modifier-border,var(--ppb-input))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:data-\[state\=active\]\:bg-input\/30:is(.dark,.dark *)[data-state=active]{background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-input)) 30%,transparent)}}.ppb\:dark\:data-\[state\=active\]\:text-foreground:is(.dark,.dark *)[data-state=active]{color:var(--text-normal,var(--ppb-foreground))}.ppb\:dark\:data-\[state\=checked\]\:bg-primary:is(.dark,.dark *)[data-state=checked]{background-color:var(--interactive-accent,var(--ppb-primary))}.ppb\:dark\:data-\[state\=checked\]\:bg-primary-foreground:is(.dark,.dark *)[data-state=checked]{background-color:var(--text-on-accent,var(--ppb-primary-foreground))}.ppb\:dark\:data-\[state\=unchecked\]\:bg-foreground:is(.dark,.dark *)[data-state=unchecked]{background-color:var(--text-normal,var(--ppb-foreground))}.ppb\:dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark,.dark *)[data-state=unchecked]{background-color:var(--background-modifier-border,var(--ppb-input))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark,.dark *)[data-state=unchecked]{background-color:color-mix(in oklab,var(--background-modifier-border,var(--ppb-input)) 80%,transparent)}}.ppb\:dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark,.dark *)[data-variant=destructive]:focus{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){.ppb\:dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark,.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 20%,transparent)}}.ppb\:\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-muted-foreground .recharts-cartesian-axis-tick text{fill:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke="#ccc"]{stroke:var(--background-modifier-border,var(--ppb-border))}@supports (color:color-mix(in lab,red,red)){.ppb\:\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke="#ccc"]{stroke:color-mix(in oklab,var(--background-modifier-border,var(--ppb-border)) 50%,transparent)}}.ppb\:\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:var(--background-modifier-border,var(--ppb-border))}.ppb\:\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.ppb\:\[\&_\.recharts-layer\]\:outline-hidden .recharts-layer{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\:\[\&_\.recharts-layer\]\:outline-hidden .recharts-layer{outline-offset:2px;outline:2px solid #0000}}.ppb\:\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke="#ccc"]{stroke:var(--background-modifier-border,var(--ppb-border))}.ppb\:\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector,.ppb\:\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:var(--background-primary-alt,var(--ppb-muted))}.ppb\:\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke="#ccc"]{stroke:var(--background-modifier-border,var(--ppb-border))}.ppb\:\[\&_\.recharts-sector\]\:outline-hidden .recharts-sector{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\:\[\&_\.recharts-sector\]\:outline-hidden .recharts-sector{outline-offset:2px;outline:2px solid #0000}}.ppb\:\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.ppb\:\[\&_\.recharts-surface\]\:outline-hidden .recharts-surface{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.ppb\:\[\&_\.recharts-surface\]\:outline-hidden .recharts-surface{outline-offset:2px;outline:2px solid #0000}}.ppb\:\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--ppb-spacing) * 2)}.ppb\:\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--ppb-spacing) * 1.5)}.ppb\:\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--font-ui-smaller,.75rem);line-height:var(--tw-leading,var(--ppb-text-xs--line-height))}.ppb\:\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-medium,500);font-weight:var(--font-medium,500)}.ppb\:\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--ppb-spacing) * 2)}.ppb\:\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--ppb-spacing) * 0)}.ppb\:\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--ppb-spacing) * 5)}.ppb\:\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--ppb-spacing) * 5)}.ppb\:\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--ppb-spacing) * 12)}.ppb\:\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--ppb-spacing) * 2)}.ppb\:\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--ppb-spacing) * 3)}.ppb\:\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--ppb-spacing) * 5)}.ppb\:\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--ppb-spacing) * 5)}.ppb\:\[\&_p\]\:leading-relaxed p{--tw-leading:var(--ppb-leading-relaxed);line-height:var(--ppb-leading-relaxed)}.ppb\:\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.ppb\:\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.ppb\:\[\&_svg\:not\(\[class\*\=size-\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--ppb-spacing) * 4);height:calc(var(--ppb-spacing) * 4)}.ppb\:\[\&_svg\:not\(\[class\*\=text-\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ppb\:\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.ppb\:\[\&\:first-child\[data-selected\=true\]_button\]\:rounded-l-md:first-child[data-selected=true] button{border-top-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-left-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--ppb-spacing) * 0)}.ppb\:\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--ppb-spacing) * 6)}.ppb\:\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--ppb-spacing) * 6)}:is(.ppb\:\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.ppb\:\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.ppb\:\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--ppb-spacing) * 2)}:is(.ppb\:data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--background-modifier-error,var(--ppb-destructive))!important}.ppb\:\[\&\:last-child\[data-selected\=true\]_button\]\:rounded-r-md:last-child[data-selected=true] button{border-top-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px));border-bottom-right-radius:var(--radius-m,calc(var(--ppb-radius) - 2px))}.ppb\:\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:\[\&\>button\]\:hidden>button{display:none}.ppb\:\[\&\>span\]\:text-xs>span{font-size:var(--font-ui-smaller,.75rem);line-height:var(--tw-leading,var(--ppb-text-xs--line-height))}.ppb\:\[\&\>span\]\:opacity-70>span{opacity:.7}.ppb\:\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ppb\:\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.ppb\:\[\&\>svg\]\:size-3>svg{width:calc(var(--ppb-spacing) * 3);height:calc(var(--ppb-spacing) * 3)}.ppb\:\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--ppb-spacing) * 3.5);height:calc(var(--ppb-spacing) * 3.5)}.ppb\:\[\&\>svg\]\:size-4>svg{width:calc(var(--ppb-spacing) * 4);height:calc(var(--ppb-spacing) * 4)}.ppb\:\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--ppb-spacing) * 2.5)}.ppb\:\[\&\>svg\]\:h-3>svg{height:calc(var(--ppb-spacing) * 3)}.ppb\:\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--ppb-spacing) * 2.5)}.ppb\:\[\&\>svg\]\:w-3>svg{width:calc(var(--ppb-spacing) * 3)}.ppb\:\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.ppb\:\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--ppb-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ppb\:\[\&\>svg\]\:text-current>svg{color:currentColor}.ppb\:\[\&\>svg\]\:text-muted-foreground>svg{color:var(--text-muted,var(--ppb-muted-foreground))}.ppb\:\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--ppb-sidebar-accent-foreground)}.ppb\:\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ppb\:\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.ppb\:\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}[data-side=left][data-collapsible=offcanvas] .ppb\:\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--ppb-spacing) * -2)}[data-side=left][data-state=collapsed] .ppb\:\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .ppb\:\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--ppb-spacing) * -2)}[data-side=right][data-state=collapsed] .ppb\:\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-slot=card-content] .ppb\:\[\[data-slot\=card-content\]_\&\]\:bg-transparent,[data-slot=popover-content] .ppb\:\[\[data-slot\=popover-content\]_\&\]\:bg-transparent{background-color:#0000}@media(hover:hover){a.ppb\:\[a\&\]\:hover\:bg-accent:hover{background-color:var(--background-modifier-hover,var(--ppb-accent))}a.ppb\:\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--background-modifier-error,var(--ppb-destructive))}@supports (color:color-mix(in lab,red,red)){a.ppb\:\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--background-modifier-error,var(--ppb-destructive)) 90%,transparent)}}a.ppb\:\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--interactive-accent,var(--ppb-primary))}@supports (color:color-mix(in lab,red,red)){a.ppb\:\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--interactive-accent,var(--ppb-primary)) 90%,transparent)}}a.ppb\:\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--background-secondary,var(--ppb-secondary))}@supports (color:color-mix(in lab,red,red)){a.ppb\:\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--background-secondary,var(--ppb-secondary)) 90%,transparent)}}a.ppb\:\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--text-normal,var(--ppb-accent-foreground))}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))))}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))))}to{height:0}}@keyframes caret-blink{0%,70%,to{opacity:1}20%,50%{opacity:0}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} +.modal.mod-settings-modal{width:90vw;height:85vh;max-width:1100px;max-height:850px}.modal.mod-settings-modal .modal-content{padding:0;height:100%;overflow:hidden}.modal.mod-settings-modal .modal-close-button{z-index:10}.modal.mod-settings .vertical-tab-header-search{padding:var(--size-4-3);border-bottom:1px solid var(--background-modifier-border);flex-shrink:0}.modal.mod-settings .vertical-tab-header-search input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background-color:var(--background-primary);font-size:var(--font-ui-small)}.modal.mod-settings-modal .vertical-tab-header-group{margin-bottom:var(--size-2-2)}.modal.mod-settings-modal .vertical-tab-header-group .vertical-tab-header-group-title{padding:var(--size-2-2) var(--size-4-3);font-size:var(--font-ui-smaller);font-weight:var(--font-weight-semibold);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.modal.mod-settings-modal .vertical-tab-header-group .vertical-tab-header-group-items{display:flex;flex-direction:column}.modal.mod-settings .vertical-tab-content-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:var(--size-2-2);padding:var(--size-4-2) var(--size-4-2);border-bottom:1px solid var(--background-modifier-border);flex-shrink:0;background-color:var(--background-primary);margin-bottom:var(--size-4-4);align-items:center}.modal.mod-settings .vertical-tab-content-header .vertical-tab-content-header-title{display:flex;align-items:center;gap:var(--size-2-3);margin:0;font-size:var(--font-ui-large);font-weight:var(--font-weight-semibold);color:var(--text-normal);padding:0}.modal.mod-settings .vertical-tab-content-header .vertical-tab-content-header-title .vertical-tab-content-header-icon{display:flex;align-items:center;justify-content:center;color:var(--interactive-accent)}.modal.mod-settings .vertical-tab-content-header .vertical-tab-content-header-actions{display:flex;align-items:center;gap:var(--size-2-3);flex-shrink:0}.modal.mod-settings .vertical-tab-content-header .vertical-tab-content-header-actions button{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-small)}.modal.mod-settings .vertical-tab-content-header .vertical-tab-content-header-desc{width:100%;margin:0;font-size:var(--font-ui-small);color:var(--text-muted);line-height:1.5}.modal.mod-settings-modal .vertical-tab-content-body{flex:1;overflow-y:auto;padding:var(--size-4-4) var(--size-4-6);animation:settingsFadeIn .15s ease-out}.modal.mod-settings-modal .vertical-tab-content-body .setting-item{padding-top:var(--size-4-3);padding-bottom:var(--size-4-3)}.modal.mod-settings-modal .vertical-tab-content-body .setting-item:first-child{padding-top:0;border-top:none}.modal.mod-settings-modal .vertical-tab-content-body h3{margin-top:var(--size-4-4);margin-bottom:var(--size-2-3);font-size:var(--font-ui-medium);font-weight:var(--font-weight-semibold);color:var(--text-normal)}.modal.mod-settings-modal .vertical-tab-content-body h3:first-child{margin-top:0}.modal.mod-settings-modal .vertical-tab-content-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:var(--size-4-8);text-align:center;color:var(--text-muted)}@keyframes settingsFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@media(max-width:600px){.modal.mod-settings-modal .vertical-tabs-container{flex-direction:column}.modal.mod-settings-modal .vertical-tab-header{width:100%;height:auto;max-height:200px;border-right:none;border-bottom:1px solid var(--background-modifier-border);overflow-y:auto}.modal.mod-settings-modal .vertical-tab-header .vertical-tab-header-group{display:flex;flex-wrap:wrap;gap:var(--size-2-1);margin-bottom:0;padding:var(--size-2-2)}.modal.mod-settings-modal .vertical-tab-header .vertical-tab-header-group .vertical-tab-header-group-title{display:none}.modal.mod-settings-modal .vertical-tab-header .vertical-tab-header-group .vertical-tab-header-group-items{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--size-2-1)}}.is-mobile .modal.mod-settings .vertical-tab-header{width:100%;height:100%;max-height:none;border-right:none;overflow-y:auto}.is-mobile .modal.mod-settings .vertical-tab-header.is-mobile-hidden{display:none}.is-mobile .modal.mod-settings .vertical-tab-header .vertical-tab-header-group{margin-bottom:var(--size-4-2)}.is-mobile .modal.mod-settings .vertical-tab-header .vertical-tab-header-group .vertical-tab-header-group-title{display:block}.is-mobile .modal.mod-settings .vertical-tab-header .vertical-tab-header-group .vertical-tab-header-group-items{flex-direction:column}.is-mobile .modal.mod-settings .vertical-tab-content-container{width:100%;height:100%}.is-mobile .modal.mod-settings .vertical-tab-content-container.is-mobile-hidden{display:none}.is-mobile .modal.mod-settings .vertical-tab-content-header,.is-mobile .modal.mod-settings .vertical-tab-content-body{padding:var(--size-4-3) var(--size-4-4)}.task-genius-settings-entry{max-width:800px;margin:0 auto;padding:var(--size-4-4)}.settings-entry-header{text-align:center;margin-bottom:var(--size-4-8);padding-bottom:var(--size-4-6);margin-block-start:var(--size-4-8);border-bottom:1px solid var(--background-modifier-border)}.settings-entry-title-container{display:flex;align-items:center;justify-content:center;gap:var(--size-4-3);margin-bottom:var(--size-4-3)}.settings-entry-logo{display:flex;align-items:center;justify-content:center;width:48px;height:48px;color:var(--interactive-accent);--icon-size: 48px}.settings-entry-title-text{display:flex;flex-direction:column;align-items:flex-start}.settings-entry-title-text h2{margin:0;padding:0;font-size:var(--font-ui-large);font-weight:var(--font-weight-bold);color:var(--text-normal)}.settings-entry-title-text .settings-entry-version{font-size:var(--font-ui-smaller);color:var(--text-muted)}.settings-entry-desc{max-width:500px;margin:0 auto}.settings-entry-desc p{margin:0;font-size:var(--font-ui-small);color:var(--text-muted);line-height:1.6}.settings-entry-action{margin-bottom:var(--size-4-6);padding:var(--size-4-4);background-color:var(--background-secondary);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border)}.settings-entry-action .setting-item{border:none;padding:0}.settings-entry-action .setting-item-info{flex:1}.settings-entry-action .setting-item-control button.mod-cta{padding:var(--size-4-2) var(--size-4-6);font-size:var(--font-ui-medium)}.settings-entry-links{margin-block-end:var(--size-4-6);margin-block-start:var(--size-4-4)}.settings-entry-links h3{margin:0 0 var(--size-4-3);font-size:var(--font-ui-medium);font-weight:var(--font-weight-semibold);color:var(--text-normal)}.settings-entry-links-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--size-4-2)}.settings-entry-link{display:flex;align-items:center;gap:var(--size-2-3);padding:var(--size-4-2) var(--size-4-3);background-color:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);color:var(--text-muted);text-decoration:none;font-size:var(--font-ui-small);transition:all .15s ease}.settings-entry-link:hover{background-color:var(--background-modifier-hover);color:var(--text-normal);border-color:var(--interactive-accent)}.settings-entry-link .settings-entry-link-icon{display:flex;align-items:center;justify-content:center;width:18px;height:18px;color:var(--interactive-accent)}.settings-entry-features h3{margin:0 0 var(--size-4-3);font-size:var(--font-ui-medium);font-weight:var(--font-weight-semibold);color:var(--text-normal)}.settings-entry-features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--size-4-3)}.settings-entry-feature{display:flex;align-items:flex-start;gap:var(--size-4-2);padding:var(--size-4-3);background-color:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);transition:all .15s ease}.settings-entry-feature:hover{border-color:var(--background-modifier-border-hover);transform:translateY(-1px);box-shadow:0 2px 8px #00000014}.settings-entry-feature .settings-entry-feature-icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background-color:var(--interactive-accent);border-radius:var(--radius-s);color:var(--text-on-accent);flex-shrink:0}.settings-entry-feature .settings-entry-feature-icon svg{width:18px;height:18px}.settings-entry-feature .settings-entry-feature-text{display:flex;flex-direction:column;gap:var(--size-2-1)}.settings-entry-feature .settings-entry-feature-text strong{font-size:var(--font-ui-small);font-weight:var(--font-weight-medium);color:var(--text-normal)}.settings-entry-feature .settings-entry-feature-text span{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:1.4}.section-view-container{padding:16px;background:var(--background-primary);height:100%;overflow-y:auto;display:flex;flex-direction:column}.section-view-toolbar{display:flex;gap:8px;margin-bottom:16px;padding:8px;background:var(--background-secondary);border-radius:6px;border:1px solid var(--background-modifier-border)}.section-wrapper{background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:8px;overflow:hidden;transition:all .2s ease;position:relative}.section-wrapper:hover{box-shadow:0 2px 8px #0000001a}.sections-container.layout-list .section-wrapper{margin-bottom:16px}.sections-container.layout-list .section-wrapper:last-child{margin-bottom:0}.section-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;height:var(--size-4-12)}.section-title{margin:0;font-size:16px;font-weight:600;color:var(--text-normal)}.section-actions{display:flex;gap:4px}.section-actions button{padding:4px 8px;font-size:12px;border:none;border-radius:4px;cursor:pointer;background:var(--interactive-normal);color:var(--text-normal);transition:background-color .2s ease}.section-actions button:hover{background:var(--interactive-hover)}.section-actions button.mod-warning{background:var(--color-red);color:#fff}.section-content{padding:16px;min-height:120px}.section-config-panel{display:none;padding:12px 16px}.section-view-container.config-mode .section-config-panel{display:block}.section-empty-state{text-align:center;padding:32px 16px;color:var(--text-muted)}.section-empty-icon{font-size:48px;margin-bottom:12px;display:flex;justify-content:center;align-items:center}.section-empty-icon svg{width:48px;height:48px;color:var(--text-muted)}.section-empty-text{font-size:18px;font-weight:600;margin-bottom:8px;color:var(--text-normal)}.section-empty-description{font-size:14px;line-height:1.4;color:var(--text-muted)}.add-section-button{display:flex;align-items:center;justify-content:center;min-height:120px;border:2px dashed var(--background-modifier-border);border-radius:8px;cursor:pointer;transition:all .2s ease;background:var(--background-primary);width:100%;margin-top:16px}.add-section-button:hover{border-color:var(--interactive-accent);background:var(--background-secondary)}.add-section-content{text-align:center;color:var(--text-muted)}.add-section-icon{font-size:24px;margin-bottom:8px}.add-section-text{font-size:14px;font-weight:500}.add-project-button,.add-keyword-button{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:12px;margin-top:16px;background:var(--interactive-accent);color:#fff;border:none;border-radius:6px;cursor:pointer;font-weight:500;transition:background-color .2s ease}.button-icon{display:flex;align-items:center}.button-icon svg{width:16px;height:16px}.hidden{display:none!important}.section-title-container{display:flex;flex-direction:row;align-items:center;gap:4px}.section-title-container .section-icon{margin-bottom:4px;display:flex;align-items:center;justify-content:center}.section-title-container .section-icon svg{width:20px;height:20px;color:var(--text-muted)}.section-title-container .section-title{margin:0}.section-actions button svg,.note-action-btn svg,.add-note-btn svg{display:inline-block;width:16px;height:16px;vertical-align:middle}.section-actions button{display:inline-flex;align-items:center;gap:4px}.sections-container{position:relative}.sections-container.layout-list{display:flex;flex-direction:column;gap:16px}.sections-container.layout-grid{display:block;flex:1;font-size:0;overflow-y:auto;box-sizing:border-box;position:relative}.sections-container.layout-grid .section-wrapper{display:inline-block;vertical-align:top;width:calc(50% - 8px);height:calc(50% - 8px);margin:0 16px 16px 0;font-size:1rem;box-sizing:border-box;overflow:auto}.sections-container.layout-grid .section-wrapper:nth-child(2n){margin-right:0}.sections-container.layout-grid .section-wrapper:nth-last-child(-n+2){margin-bottom:0}.section-drag-handle{cursor:grab;color:var(--text-muted);font-size:14px;padding:4px 8px;border-radius:4px;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.section-drag-handle:hover{background:var(--interactive-hover);color:var(--text-normal)}.section-drag-handle:active{cursor:grabbing;background:var(--interactive-accent);color:#fff}.drag-handle-icon{width:16px;height:16px;fill:currentColor}.section-wrapper.sortable-ghost{opacity:.4}.section-wrapper.sortable-drag{opacity:.5;transform:rotate(2deg);box-shadow:0 5px 15px #0000004d}.sections-container.is-dragging .section-wrapper:not(.sortable-drag){transition:transform .2s ease}.section-wrapper.drop-target{transform:scale(1.02);border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--interactive-accent-hover)}.sortable-ghost{opacity:.4}.sortable-drag{opacity:1!important}.grid-size-selector{display:flex;align-items:center;gap:8px}.grid-size-button{position:relative;padding:8px 12px;border:1px solid var(--background-modifier-border);border-radius:4px;background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;transition:all .2s ease}.grid-size-button:hover{background:var(--interactive-hover)}.grid-size-button.active{background:var(--interactive-accent);color:#fff;border-color:var(--interactive-accent)}.grid-preview{display:grid;gap:2px;margin-top:4px}.grid-cell{width:12px;height:12px;background:var(--background-modifier-border);border-radius:2px}.grid-size-button.active .grid-cell{background:#fff9}.keyword-tag{display:inline-block;padding:2px 6px;background:var(--interactive-accent);color:#fff;border-radius:4px;font-size:12px;cursor:pointer;transition:background-color .2s ease}.keyword-tag:hover{background:var(--interactive-accent-hover)}.keyword-tag.category-personal{background:var(--color-blue)}.keyword-tag.category-terms{background:var(--color-green)}.keyword-tag.category-projects{background:var(--color-purple)}.stat-item{display:flex;flex-direction:column;align-items:center;text-align:center}.stat-label{font-size:12px;color:var(--text-muted);margin-bottom:4px}.stat-value{font-size:18px;font-weight:600;color:var(--text-normal)}.config-group{margin-bottom:12px}.config-group label{display:block;margin-bottom:4px;font-weight:500;color:var(--text-normal)}.config-group select,.config-group input[type=number],.config-group textarea{width:100%;padding:6px 8px;border:1px solid var(--background-modifier-border);border-radius:4px;background:var(--background-primary);color:var(--text-normal)}.config-group input[type=checkbox]{margin-right:6px}.form-group{margin-bottom:20px}.form-group label{display:block;margin-bottom:6px;font-weight:600;color:var(--text-normal)}.form-group input,.form-group select,.form-group textarea{width:100%;padding:10px 12px;border:1px solid var(--background-modifier-border);border-radius:6px;background:var(--background-primary);color:var(--text-normal);font-size:14px;transition:border-color .2s ease}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:var(--interactive-accent)}.form-help{font-size:12px;color:var(--text-muted);margin-top:4px;line-height:1.4}.form-note{font-size:13px;color:var(--text-muted);font-style:italic;padding:12px;background:var(--background-secondary);border-radius:6px}.validation-error-message{color:var(--text-error);margin-top:8px;font-size:14px;font-weight:500}.project-section .projects-container{width:100%}.project-section .projects-container.layout-card{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:0;border-top:1px solid var(--background-modifier-border)}.projects-container.layout-card:has(.section-empty-state){display:flex}.project-card{padding:12px;background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:0;transition:background .2s ease}.project-card:hover{background:var(--background-primary-alt)}.project-title{margin:0 0 8px;font-size:16px;font-weight:600;color:var(--text-normal)}.project-status{display:inline-block;padding:2px 8px;border-radius:12px;font-size:12px;font-weight:500;margin-bottom:8px}.project-status.status-active{background:var(--color-green);color:#fff}.project-status.status-planning{background:var(--color-blue);color:#fff}.project-status.status-completed{background:var(--color-purple);color:#fff}.project-status.status-on-hold{background:var(--color-orange);color:#fff}.project-status.status-cancelled{background:var(--color-red);color:#fff}.project-description{margin-bottom:12px;color:var(--text-muted);font-size:14px;line-height:1.4}.project-session{margin-bottom:12px}.project-session strong{color:var(--text-normal)}.project-session ul{margin:4px 0 0 16px;padding:0}.project-session li{margin-bottom:2px;font-size:14px;color:var(--text-muted)}.project-keywords{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:12px}.project-dates{display:flex;gap:12px;margin-bottom:12px;font-size:12px;color:var(--text-muted)}.project-associations{margin-bottom:12px}.association-group{margin-bottom:6px;font-size:14px}.association-group strong{color:var(--text-normal)}.project-actions{display:flex;gap:8px;margin-top:12px}.project-list{list-style:none;padding:0;margin:0}.project-list-item{padding:12px;border-bottom:1px solid var(--background-modifier-border);cursor:pointer;transition:background-color .2s ease}.project-list-item:hover{background:var(--background-secondary)}.project-list-item:last-child{border-bottom:none}.project-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.project-table{width:100%;border-collapse:collapse}.project-table th,.project-table td{padding:8px 12px;text-align:left;border-bottom:1px solid var(--background-modifier-border)}.project-table th{background:var(--background-secondary);font-weight:600;color:var(--text-normal)}.project-table td{color:var(--text-muted)}.profile-section .profile-container{padding:0}.profile-minimal{padding:16px;background:var(--background-secondary);border-radius:8px;box-shadow:0 2px 8px #0000000d}.profile-row{display:flex;align-items:center;gap:16px}.profile-avatar{width:56px;height:56px;background:linear-gradient(135deg,var(--interactive-accent),var(--interactive-accent-hover));border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:20px;overflow:hidden;flex-shrink:0;border:2px solid var(--background-primary);box-shadow:0 2px 8px #0000001a}.profile-avatar img{width:100%;height:100%;object-fit:cover}.profile-info{flex:1}.profile-name{margin:0 0 4px;font-size:16px;font-weight:600;color:var(--text-normal)}.profile-title{margin:0;font-size:14px;color:var(--text-muted)}.profile-card{background:var(--background-primary);border-radius:12px;overflow:hidden;border:1px solid var(--background-modifier-border)}.profile-header{display:flex;align-items:center;gap:20px;padding:24px;background:linear-gradient(135deg,var(--interactive-accent) 0%,var(--interactive-accent-hover) 100%);color:#fff;position:relative}.profile-header:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.1) 0%,transparent 100%);pointer-events:none}.profile-avatar-large{width:80px;height:80px;background:#ffffff40;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:32px;overflow:hidden;flex-shrink:0;border:3px solid rgba(255,255,255,.3);box-shadow:0 4px 12px #00000026;position:relative;z-index:1}.profile-avatar-large img{width:100%;height:100%;object-fit:cover}.profile-main-info{flex:1}.profile-name-large{margin:0 0 4px;font-size:20px;font-weight:700}.profile-title-large{margin:0;font-size:16px;opacity:.9}.profile-details{padding:16px 20px}.profile-detail{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:14px;color:var(--text-muted)}.profile-detail:last-child{margin-bottom:0}.profile-icon{width:16px;height:16px;color:var(--text-muted)}.profile-detail a{color:var(--text-accent);text-decoration:none}.profile-detail a:hover{text-decoration:underline}.profile-edit-modal .modal-content{background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:8px;padding:24px;max-width:400px;width:90%;max-height:80vh;overflow-y:auto}.profile-edit-modal .profile-form .form-group{margin-bottom:16px}.profile-edit-modal .profile-form label{display:block;margin-bottom:4px;font-weight:500;color:var(--text-normal)}.profile-edit-modal .profile-form input{width:100%;padding:8px 12px;border:1px solid var(--background-modifier-border);border-radius:4px;background:var(--background-primary);color:var(--text-normal)}.profile-edit-modal .modal-buttons{display:flex;gap:8px;justify-content:flex-end;margin-top:20px}.profile-edit-modal .modal-buttons button{padding:8px 16px;border:1px solid var(--background-modifier-border);border-radius:4px;cursor:pointer;font-weight:500;transition:all .2s ease}.profile-edit-modal .modal-buttons button:first-child{background:var(--interactive-accent);color:#fff;border-color:var(--interactive-accent)}.profile-edit-modal .modal-buttons button:first-child:hover{background:var(--interactive-accent-hover)}.profile-edit-modal .modal-buttons button:last-child{background:var(--background-primary);color:var(--text-normal)}.profile-edit-modal .modal-buttons button:last-child:hover{background:var(--interactive-hover)}.papers-section{padding:16px}.papers-search{position:relative;margin-bottom:16px}.papers-search input{width:100%;padding:8px 12px 8px 36px;border:1px solid var(--background-modifier-border);border-radius:6px;background:var(--background-primary);color:var(--text-normal);font-size:14px;transition:border-color .2s ease}.papers-search input:focus{outline:none;border-color:var(--interactive-accent)}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none}.search-icon svg{width:16px;height:16px}.papers-list-container{min-height:200px}.papers-list{display:flex;flex-direction:column;gap:12px}.paper-item{padding:12px;background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:6px;cursor:pointer;transition:all .2s ease}.paper-item:hover{background:var(--background-secondary-alt);box-shadow:0 2px 8px #0000001a;transform:translateY(-1px)}.paper-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:8px}.paper-title{margin:0;font-size:16px;font-weight:600;color:var(--text-normal);line-height:1.4}.paper-meta{display:flex;gap:12px;align-items:center;flex-shrink:0}.papers-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.paper-card{padding:16px;background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:8px;cursor:pointer;transition:all .2s ease;display:flex;flex-direction:column;gap:12px}.paper-card:hover{background:var(--background-secondary-alt);box-shadow:0 4px 12px #0000001a;transform:translateY(-2px)}.paper-card .paper-title{font-size:15px;margin-bottom:8px}.paper-status{display:inline-block;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:500;text-transform:capitalize}.paper-status.status-reading{background:var(--color-blue);color:#fff}.paper-status.status-completed{background:var(--color-green);color:#fff}.paper-status.status-pending{background:var(--color-yellow);color:var(--text-normal)}.paper-status.status-archived{background:var(--background-modifier-border);color:var(--text-muted)}.paper-progress{display:flex;align-items:center;gap:8px;margin-top:8px}.progress-bar{flex:1;height:6px;background:var(--background-modifier-border);border-radius:3px;overflow:hidden}.progress-fill{height:100%;background:var(--interactive-accent);border-radius:3px;transition:width .3s ease}.progress-text{font-size:12px;color:var(--text-muted);min-width:40px;text-align:right}.paper-deadline{font-size:12px;color:var(--text-muted);display:flex;align-items:center;gap:4px}.paper-deadline:before{content:"📅";font-size:14px}.view-mode-toggle{padding:6px;background:transparent;border:none;border-radius:4px;cursor:pointer;color:var(--text-muted);transition:all .2s ease;display:inline-flex;align-items:center;justify-content:center}.view-mode-toggle:hover{background:var(--background-modifier-hover);color:var(--text-normal)}.view-mode-toggle svg{width:16px;height:16px;display:block}.section-actions .view-mode-toggle{margin-right:8px}.tag-filter-bar-container{margin-bottom:16px}.tag-filter-bar{background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:12px;padding:12px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.active-filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px;min-height:32px}.active-filters:empty{display:none}.filter-tag{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:6px;font-size:13px;font-weight:500;border:1px solid var(--background-modifier-border);background:var(--background-secondary);cursor:pointer;transition:all .2s ease;-webkit-user-select:none;user-select:none}.filter-tag:hover{transform:scale(1.02);box-shadow:0 1px 3px #0000000f}.filter-tag-domain{border-color:var(--color-blue);background:#3b8eff1a;color:var(--color-blue)}.filter-tag-method{border-color:var(--color-green);background:#34c7591a;color:var(--color-green)}.filter-tag-custom{border-color:var(--color-yellow);background:#ffcc001a;color:var(--color-yellow)}.filter-tag-status{border-color:var(--color-red);background:#ff3b301a;color:var(--color-red)}.filter-exclude{opacity:.6;text-decoration:line-through}.filter-tag-text{font-size:12px;font-weight:500}.filter-tag-remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#0000001a;color:var(--text-muted);font-size:14px;line-height:1;transition:all .2s ease}.filter-tag-remove:hover{background:#0003;color:var(--text-normal)}.filter-actions{display:flex;gap:8px;margin-bottom:12px}.filter-add-btn,.filter-save-btn,.filter-clear-btn{padding:6px 12px;border-radius:6px;border:1px solid var(--background-modifier-border);background:var(--background-secondary);font-size:13px;font-weight:500;cursor:pointer;transition:all .2s ease}.filter-add-btn:hover,.filter-save-btn:hover,.filter-clear-btn:hover{background:var(--background-secondary-alt);transform:translateY(-1px);box-shadow:0 2px 4px #0000000f}.saved-filters{display:flex;flex-wrap:wrap;gap:8px;padding-top:12px;border-top:1px solid var(--background-modifier-border)}.saved-filter-tab{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:6px;background:var(--background-secondary);border:1px solid var(--background-modifier-border);font-size:13px;font-weight:500;cursor:pointer;transition:all .2s ease}.saved-filter-tab:hover{background:var(--background-secondary-alt);transform:translateY(-1px);box-shadow:0 2px 4px #0000000f}.saved-filter-tab.filter-pinned{background:var(--interactive-accent);color:var(--text-on-accent);border-color:var(--interactive-accent)}.filter-pin-icon svg{width:12px;height:12px}.filter-name{font-size:12px;font-weight:500}.paper-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.tag-group{display:flex;flex-wrap:wrap;gap:4px}.paper-tag{display:inline-block;padding:2px 8px;border-radius:6px;font-size:11px;font-weight:500;border:1px solid;cursor:pointer;transition:all .2s ease;-webkit-user-select:none;user-select:none}.paper-tag:hover{transform:scale(1.05);box-shadow:0 1px 3px #0000000f}.paper-tag-domain{border-color:var(--color-blue);background:#3b8eff1a;color:var(--color-blue)}.paper-tag-method{border-color:var(--color-green);background:#34c7591a;color:var(--color-green)}.paper-tag-custom{border-color:var(--color-yellow);background:#ffcc001a;color:var(--color-yellow)}.paper-metadata{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px;font-size:12px;color:var(--text-muted)}.paper-authors{color:var(--text-muted)}.paper-year{color:var(--text-muted);font-weight:500}.paper-journal{color:var(--text-muted);font-style:italic}.paper-citations{color:var(--color-accent);font-weight:500;margin-left:auto}.paper-journal-info{display:flex;justify-content:space-between;align-items:center;margin-top:4px;font-size:12px;color:var(--text-muted)}.papers-section .paper-card{padding:16px;background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:12px;cursor:pointer;transition:all .2s ease;display:flex;flex-direction:column;gap:8px;box-shadow:0 1px 3px #0000000f}.papers-section .paper-card:hover{background:var(--background-secondary-alt);box-shadow:0 2px 8px #00000014;transform:translateY(-2px)}.paper-card-header{display:flex;flex-direction:column;gap:4px}.papers-section .paper-card .paper-title{font-size:14px;font-weight:600;line-height:1.3;color:var(--text-normal);margin:0}.papers-section .paper-item{padding:12px;background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:12px;cursor:pointer;transition:all .2s ease;box-shadow:0 1px 3px #0000000f}.papers-section .paper-item:hover{background:var(--background-secondary-alt);box-shadow:0 2px 8px #00000014;transform:translateY(-1px)}.paper-title-container{flex:1}.papers-section .paper-header .paper-title{margin:0;font-size:15px;font-weight:600;color:var(--text-normal);line-height:1.3}.paper-status-container{display:flex;flex-direction:column;gap:4px;align-items:flex-end}.filter-save-modal{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center}.modal-backdrop{position:absolute;inset:0;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-buttons{display:flex;justify-content:flex-end;gap:8px}.modal-buttons button{padding:6px 16px;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.capture-section{padding:16px;background-color:var(--background-primary);border-radius:8px;margin-bottom:16px}.capture-input-container{display:flex;gap:8px;margin-bottom:16px;align-items:center}.capture-input{flex:1;padding:8px 12px;border:1px solid var(--background-modifier-border);border-radius:4px;background:var(--background-primary);color:var(--text-normal);font-size:14px}.capture-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--interactive-accent-hover)}.capture-type-selector{display:flex;gap:4px}.type-btn{padding:6px 12px;background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:4px;cursor:pointer;font-size:13px;transition:all .2s}.type-btn:hover{background:var(--background-modifier-hover)}.type-btn.active{background:var(--interactive-accent);color:var(--text-on-accent);border-color:var(--interactive-accent)}.add-capture-btn{padding:8px 16px;background:var(--interactive-accent);color:var(--text-on-accent);border:none;border-radius:4px;cursor:pointer;display:flex;align-items:center;gap:4px;font-size:14px;font-weight:500}.add-capture-btn:hover{background:var(--interactive-accent-hover)}.capture-filter-tabs{display:flex;gap:8px;margin-bottom:16px;border-bottom:1px solid var(--background-modifier-border)}.filter-tab{padding:8px 16px;background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;color:var(--text-muted);font-size:14px;transition:all .2s}.filter-tab:hover{color:var(--text-normal)}.filter-tab.active{color:var(--interactive-accent);border-bottom-color:var(--interactive-accent);font-weight:500}.capture-stats{display:flex;gap:24px;margin-bottom:16px;padding:12px;background:var(--background-secondary);border-radius:6px}.capture-stats .stat-item{display:flex;flex-direction:column;gap:4px}.capture-stats .stat-label{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.capture-stats .stat-value{font-size:18px;font-weight:600;color:var(--text-normal)}.captures-container{margin-top:16px}.captures-list{display:flex;flex-direction:column;gap:10px}.capture-item{padding:14px 16px;background:var(--background-secondary);border-radius:8px;cursor:pointer;transition:all .2s;position:relative;box-shadow:0 1px 3px #0000000d}.capture-item:hover{background:var(--background-modifier-hover);transform:translateY(-1px);box-shadow:0 3px 8px #0000001a}.capture-type-label{position:absolute;top:14px;left:16px;padding:2px 6px;border-radius:10px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;opacity:.6}.capture-type-quick .capture-type-label{background:#42a5f51a;color:#1976d2}.capture-type-idea .capture-type-label{background:#ffa7261a;color:#e65100}.capture-time-badge{position:absolute;top:14px;right:16px;padding:3px 8px;background:var(--background-primary);border-radius:12px;font-size:11px;font-weight:600;color:var(--text-muted);opacity:.8}.capture-content{color:var(--text-normal);margin:28px 0 10px;line-height:1.6;font-size:14px;padding-right:60px}.capture-meta{display:flex;flex-wrap:wrap;gap:16px;font-size:11px;color:var(--text-muted);opacity:.7}.capture-file,.capture-timestamp{display:flex;align-items:center;gap:4px}.capture-file .file-icon,.capture-timestamp .timestamp-icon{width:12px;height:12px;opacity:.8}.capture-tags{display:flex;gap:6px;flex-wrap:wrap}.capture-tag{padding:1px 6px;background:var(--background-primary);border-radius:10px;color:var(--text-muted);font-size:10px;font-weight:500}.capture-tag:hover{background:var(--background-modifier-hover);color:var(--text-normal)}.more-indicator{text-align:center;padding:12px;color:var(--text-muted);font-size:14px;font-style:italic;margin-top:8px}.capture-section .section-empty-state{text-align:center;padding:32px;color:var(--text-muted)}.capture-section .section-empty-icon{font-size:48px;margin-bottom:16px;opacity:.3}.capture-section .section-empty-text{font-size:16px;font-weight:500;margin-bottom:8px;color:var(--text-normal)}.capture-section .section-empty-description{font-size:14px;color:var(--text-muted)}.capture-section .section-config-panel{padding:16px;background:var(--background-secondary);border-radius:6px;margin-top:16px}.capture-section .config-group{margin-bottom:16px}.capture-section .config-group label{display:block;margin-bottom:8px;font-size:14px;font-weight:500;color:var(--text-normal)}.capture-section .config-group input[type=text],.capture-section .config-group input[type=number],.capture-section .config-group select{width:100%;padding:6px 10px;border:1px solid var(--background-modifier-border);border-radius:4px;background:var(--background-primary);color:var(--text-normal);font-size:14px}.capture-section .config-group input[type=checkbox]{margin-right:8px}.section-markdown{width:100%;height:100%;display:flex;flex-direction:column}.markdown-content-container{flex:1;overflow-y:auto;padding:var(--size-4-3);background:var(--background-primary);border-radius:var(--radius-s);position:relative}.markdown-editor{width:100%;min-height:300px;resize:vertical;padding:var(--size-4-2);background:var(--background-modifier-form-field);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);font-family:var(--font-monospace);font-size:var(--font-smaller);line-height:1.5;color:var(--text-normal)}.markdown-editor:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--interactive-accent-hover)}.markdown-preview{padding:var(--size-4-2);background:var(--background-primary);border-radius:var(--radius-s);min-height:200px}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3,.markdown-preview h4,.markdown-preview h5,.markdown-preview h6{margin-top:var(--size-4-3);margin-bottom:var(--size-4-2)}.markdown-preview p{margin-bottom:var(--size-4-2)}.markdown-preview ul,.markdown-preview ol{margin-left:var(--size-4-4);margin-bottom:var(--size-4-2)}.markdown-preview blockquote{border-left:3px solid var(--quote-opening-modifier);padding-left:var(--size-4-3);margin:var(--size-4-2) 0;color:var(--text-muted)}.markdown-preview code{background:var(--code-background);padding:2px 4px;border-radius:var(--radius-s);font-family:var(--font-monospace);font-size:var(--font-smaller)}.markdown-preview pre{background:var(--code-background);padding:var(--size-4-2);border-radius:var(--radius-s);overflow-x:auto;margin-bottom:var(--size-4-2)}.preview-button,.edit-button{margin-top:var(--size-4-2);padding:var(--size-4-2) var(--size-4-3);background:var(--interactive-normal);color:var(--text-normal);border:none;border-radius:var(--radius-s);cursor:pointer;font-size:var(--font-ui-small);transition:background .2s}.preview-button:hover,.edit-button:hover{background:var(--interactive-hover)}.config-mode .section-markdown .section-config-panel{margin-top:var(--size-4-3);padding:var(--size-4-3);background:var(--background-secondary);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border)}.config-mode .section-markdown .config-group{margin-bottom:var(--size-4-3)}.config-mode .section-markdown .config-group h4{margin-bottom:var(--size-4-2);font-size:var(--font-ui-small);font-weight:600;color:var(--text-normal)}.config-mode .section-markdown .config-option{display:flex;align-items:center;margin-bottom:var(--size-4-2);gap:var(--size-4-2)}.config-mode .section-markdown .config-option label{flex:0 0 120px;font-size:var(--font-ui-smaller);color:var(--text-muted)}.config-mode .section-markdown .config-option select,.config-mode .section-markdown .config-option input[type=text]{flex:1;padding:var(--size-2-2) var(--size-4-2);background:var(--background-modifier-form-field);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-normal)}.config-mode .section-markdown .config-option select:focus,.config-mode .section-markdown .config-option input[type=text]:focus{outline:none;border-color:var(--interactive-accent)}.config-mode .section-markdown button.mod-warning{background:var(--background-modifier-error);color:var(--text-on-accent)}.config-mode .section-markdown button.mod-warning:hover{background:var(--background-modifier-error-hover)}.section-view-welcome{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:400px;text-align:center;padding:40px}.section-view-welcome h2{margin-bottom:16px;color:var(--text-normal);font-size:24px}.section-view-welcome p{margin-bottom:24px;color:var(--text-muted);font-size:16px}.configuration-wizard-modal{width:800px;max-width:90vw;height:600px;max-height:85vh}.configuration-wizard{height:100%;display:flex;flex-direction:column}.wizard-header{text-align:center;margin-bottom:32px;padding-bottom:24px;border-bottom:1px solid var(--background-modifier-border)}.wizard-title{margin:0 0 12px;color:var(--text-normal);font-size:28px;font-weight:700}.wizard-description{margin:0;color:var(--text-muted);font-size:16px}.wizard-stepper{height:100%;display:flex;flex-direction:column;overflow:hidden}.wizard-stepper>*{flex-shrink:0}.wizard-stepper .stepper-content{flex-shrink:1;flex-grow:1}.stepper-container{display:flex;flex-direction:column;height:100%}.stepper-header{margin-bottom:32px}.stepper-progress{margin-bottom:24px}.stepper-progress-bar{width:100%;height:6px;background:var(--background-modifier-border);border-radius:3px;overflow:hidden;margin-bottom:8px}.stepper-progress-fill{height:100%;background:var(--interactive-accent);transition:width .3s ease}.stepper-progress-text{text-align:center;font-size:12px;color:var(--text-muted)}.stepper-steps{display:flex;justify-content:space-between;position:relative}.stepper-step{display:flex;flex-direction:column;align-items:center;flex:1;cursor:pointer;transition:all .2s ease}.stepper-step:hover{opacity:.8}.stepper-step-icon{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;margin-bottom:8px;transition:all .2s ease;border:2px solid var(--background-modifier-border);background:var(--background-primary);color:var(--text-muted)}.stepper-step-active .stepper-step-icon{background:var(--interactive-accent);color:#fff;border-color:var(--interactive-accent)}.stepper-step-completed .stepper-step-icon{background:var(--color-green);color:#fff;border-color:var(--color-green)}.stepper-step-content{text-align:center;max-width:120px}.stepper-step-title{font-weight:600;font-size:14px;color:var(--text-normal);margin-bottom:4px}.stepper-step-description{font-size:12px;color:var(--text-muted);line-height:1.3}.stepper-step-optional{font-size:11px;color:var(--text-muted);font-style:italic}.stepper-content{flex:1;padding:24px 0;overflow-y:auto;min-height:300px;display:block!important}.stepper-content-area{height:100%;display:block!important}.wizard-step-content-active{display:block!important;visibility:visible!important}.stepper-navigation{display:flex;justify-content:space-between;align-items:center;padding-top:24px;border-top:1px solid var(--background-modifier-border);margin-top:auto}.stepper-nav-btn{padding:10px 20px;border:1px solid var(--background-modifier-border);border-radius:6px;background:var(--background-primary);color:var(--text-normal);cursor:pointer;font-weight:500;transition:all .2s ease}.stepper-nav-btn:hover{background:var(--interactive-hover)}.stepper-nav-btn:disabled{opacity:.5;cursor:not-allowed}.stepper-next-btn.mod-cta{background:var(--interactive-accent);color:#fff;border-color:var(--interactive-accent)}.stepper-next-btn.mod-cta:hover{background:var(--interactive-accent-hover)}.stepper-skip-btn{background:transparent;color:var(--text-muted);border:none}.stepper-skip-btn:hover{color:var(--text-normal);background:var(--interactive-hover)}.wizard-step-welcome,.wizard-step-profile,.wizard-step-sources,.wizard-step-layout,.wizard-step-complete{max-width:600px;margin:0 auto}.welcome-content{text-align:center}.welcome-title{margin-bottom:24px;color:var(--text-normal)}.welcome-features{text-align:left;margin:24px 0}.welcome-features h3{margin-bottom:12px;color:var(--text-normal)}.welcome-features ul{list-style:none;padding:0}.welcome-features li{padding:8px 0;color:var(--text-normal);font-size:14px}.welcome-note{margin-top:24px;padding:16px;background:var(--background-secondary);border-radius:6px;text-align:center}.complete-content{text-align:center}.success-message{margin-bottom:32px}.success-text{font-size:16px;color:var(--text-normal)}.config-summary{text-align:left;margin:32px 0;padding:24px;background:var(--background-secondary);border-radius:8px}.config-summary h3{margin-top:0;margin-bottom:20px;color:var(--text-normal);text-align:center}.summary-section{margin-bottom:20px}.summary-section:last-child{margin-bottom:0}.summary-section h4{margin:0 0 8px;color:var(--text-normal);font-size:14px;display:flex;align-items:center;gap:6px}.summary-section ul{margin:0;padding-left:20px}.summary-section li{margin-bottom:4px;font-size:13px;color:var(--text-muted)}.next-steps{margin:32px 0;text-align:left}.next-steps h3{margin-bottom:16px;color:var(--text-normal)}.next-steps ul{list-style:none;padding:0}.next-steps li{padding:8px 0;color:var(--text-normal);font-size:14px}.complete-actions{display:flex;gap:12px;justify-content:center;margin-top:32px}.complete-btn{padding:12px 24px;border-radius:6px;cursor:pointer;font-weight:600;transition:all .2s ease}.primary-btn{background:var(--interactive-accent);color:#fff;border:1px solid var(--interactive-accent)}.primary-btn:hover{background:var(--interactive-accent-hover)}.secondary-btn{background:var(--background-primary);color:var(--text-normal);border:1px solid var(--background-modifier-border)}.secondary-btn:hover{background:var(--interactive-hover)}@media(max-width:768px){.stepper-steps{flex-direction:column;gap:16px}.stepper-step{flex-direction:row;text-align:left}.stepper-step-content{max-width:none;margin-left:12px}.complete-actions{flex-direction:column}}.sections-container.free-grid{display:grid;width:100%;height:100%;overflow:auto;position:relative}.free-grid .section-wrapper{overflow:hidden;display:flex;flex-direction:column;background:var(--background-secondary);border-radius:8px;border:1px solid var(--background-modifier-border);transition:transform .2s ease,box-shadow .2s ease}.free-grid .section-wrapper:hover{box-shadow:0 4px 12px #0000001a}.grid-config-mode .section-wrapper{position:relative}.grid-config-mode .grid-item-configurable{outline:2px dashed var(--interactive-accent);outline-offset:-2px}.grid-config-mode .grid-item-configurable:hover{outline-color:var(--interactive-accent-hover);background:var(--background-secondary-alt)}.grid-resize-handle{position:absolute;bottom:4px;right:4px;width:24px;height:24px;cursor:nw-resize;opacity:0;transition:opacity .2s ease;background:var(--interactive-accent);border-radius:4px;display:flex;align-items:center;justify-content:center}.grid-config-mode .section-wrapper:hover .grid-resize-handle{opacity:.6}.grid-resize-handle:hover{opacity:1!important}.grid-resize-handle svg{width:16px;height:16px;color:#fff}.grid-overlay{position:absolute;inset:0;pointer-events:none;z-index:1000}.grid-overlay-lines{width:100%;height:100%;background-image:repeating-linear-gradient(0deg,transparent,transparent calc(100% / var(--grid-rows) - 1px),var(--background-modifier-border) calc(100% / var(--grid-rows) - 1px),var(--background-modifier-border) calc(100% / var(--grid-rows))),repeating-linear-gradient(90deg,transparent,transparent calc(100% / var(--grid-columns) - 1px),var(--background-modifier-border) calc(100% / var(--grid-columns) - 1px),var(--background-modifier-border) calc(100% / var(--grid-columns)));opacity:.3}.snap-indicator{position:absolute;background:var(--interactive-accent);opacity:.3;pointer-events:none;z-index:999;border-radius:4px;transition:all .15s ease}.grid-drop-placeholder{background:var(--background-modifier-hover);border:2px dashed var(--interactive-accent);border-radius:8px;opacity:.5}.free-grid.animating .section-wrapper{transition:all .3s cubic-bezier(.4,0,.2,1)}@media(max-width:768px){.free-grid{grid-template-columns:repeat(6,1fr)!important;grid-template-rows:repeat(8,minmax(120px,1fr))!important}}@media(max-width:480px){.free-grid{grid-template-columns:repeat(4,1fr)!important;grid-template-rows:repeat(10,minmax(100px,1fr))!important}}.grid-reset-button{position:fixed;bottom:20px;right:20px;padding:8px 16px;background:var(--interactive-accent);color:#fff;border-radius:20px;cursor:pointer;box-shadow:0 2px 8px #0003;z-index:1001;display:none;font-size:14px;font-weight:500}.grid-config-mode .grid-reset-button{display:block}.grid-reset-button:hover{background:var(--interactive-accent-hover);transform:translateY(-2px);box-shadow:0 4px 12px #0000004d}.free-grid .section-content{flex:1;overflow:auto;padding:12px}.free-grid .section-header{padding:8px 12px;background:var(--background-primary);border-bottom:1px solid var(--background-modifier-border);display:flex;align-items:center;justify-content:space-between;min-height:36px}.free-grid .section-title{font-weight:500;font-size:14px;color:var(--text-normal)}.view-action.is-active{background-color:var(--interactive-accent);color:var(--text-on-accent)}.view-action.is-active:hover{background-color:var(--interactive-accent-hover)}.view-content.section-view-workspace{padding:0;margin:0}.section-view-container{padding:var(--size-2-1) var(--size-2-1) var(--size-4-8)!important;margin:0;background:var(--background-primary)}.section-view-toolbar{margin:0;padding:10px 16px;border-radius:0;border:none}.sections-container{margin:0;padding:0}.sections-container.layout-grid{grid-template-columns:repeat(var(--grid-columns, 2),1fr)}.section-wrapper{margin:0;border-radius:0;border:1px solid var(--background-modifier-border);box-shadow:none;transition:background .2s ease}.section-wrapper:hover{box-shadow:none}.section-header{padding:8px 12px;border-radius:0}.section-title{font-size:14px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted)}.section-content{padding:12px;min-height:200px}.profile-section{background:var(--background-primary)}.profile-card{padding:16px;border-radius:0}.papers-container{padding:0}.paper-item{padding:12px;margin:0;border-radius:0;border-bottom:1px solid var(--background-modifier-border)}.paper-item:last-child{border-bottom:none}.paper-item:hover{background:var(--background-primary-alt)}.todo-container{padding:0}.todo-item{padding:10px 12px;margin:0;border-radius:0;border-bottom:1px solid var(--background-modifier-border)}.todo-item:last-child{border-bottom:none}.todo-item:hover{background:var(--background-primary-alt)}.todo-stats{display:flex;flex-direction:row}.quick-notes-section .note-input-container{display:flex;justify-content:space-between;gap:var(--size-4-2)}.quick-notes-section .note-input-container input{flex:1}.ideas-container{padding:0}.idea-item{padding:10px 12px;margin:0;border-radius:0;border-bottom:1px solid var(--background-modifier-border)}.idea-item:last-child{border-bottom:none}.ideas-stats{display:flex;flex-direction:row}.project-section .projects-container{padding:0}.project-card{margin:0;padding:12px;border-radius:0;border:1px solid var(--background-modifier-border);border-left:none;border-top:none}.section-empty-state{padding:32px 16px;background:var(--background-primary)}.add-project-button,.add-keyword-button{border-radius:0;margin:12px;background:var(--interactive-accent)}.add-project-button:hover,.add-keyword-button:hover{background:var(--interactive-accent-hover)}.section-config-panel{padding:10px 12px;border-radius:0}.section-wrapper>*{margin-top:0;margin-bottom:0}.section-wrapper.section-hidden{opacity:.5}.section-wrapper.section-hidden .section-content{opacity:.7}@media(max-width:768px){.sections-container{--grid-columns: 1}.section-wrapper{border-right:none}}.section-wrapper[data-section-type=project]{grid-column:1 / -1}.section-wrapper[data-section-type=profile]{order:0}.section-wrapper[data-section-type=papers]{order:1}.section-wrapper[data-section-type=todo]{order:2}.section-wrapper[data-section-type=ideas]{order:3}.section-wrapper[data-section-type=project]{order:4}.ppb-base-grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:8px;height:100%;padding:0}.ppb-base-cell{overflow:hidden;border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary)}.ppb-base-container{display:flex;flex-direction:column;height:100%}.ppb-base-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--background-modifier-border);background:var(--background-secondary);flex-shrink:0}.ppb-base-header-left{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.ppb-base-header-icon{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--radius-s);background:var(--interactive-accent);color:var(--text-on-accent);flex-shrink:0}.ppb-base-header-icon svg{width:16px;height:16px}.ppb-base-header-titles{min-width:0}.ppb-base-title{margin:0;font-size:var(--font-ui-medium);font-weight:var(--font-semibold);color:var(--text-normal);line-height:1.2}.ppb-base-description{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:1.3}.ppb-base-header-right{display:flex;align-items:center;gap:4px;flex-shrink:0}.ppb-base-path-badge{font-size:var(--font-ui-smaller);color:var(--text-muted);background:var(--background-modifier-hover);padding:2px 8px;border-radius:var(--radius-s);max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ppb-base-config-btn,.ppb-base-clear-btn{color:var(--text-muted)}.ppb-base-config-btn:hover,.ppb-base-clear-btn:hover{color:var(--text-normal)}.ppb-base-content{flex:1;overflow-y:auto;padding:0;position:relative}.ppb-base-content>p{margin-block-start:0;margin-block-end:0}.ppb-base-content .internal-embed{height:100%}.ppb-base-content .markdown-embed{height:100%;border:none}.ppb-base-empty-state,.ppb-base-missing-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:24px;text-align:center;gap:8px}.ppb-base-empty-icon,.ppb-base-missing-icon{width:48px;height:48px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-m);background:var(--background-modifier-hover);color:var(--text-muted);margin-bottom:4px}.ppb-base-empty-icon svg,.ppb-base-missing-icon svg{width:24px;height:24px}.ppb-base-empty-title,.ppb-base-missing-title{margin:0;font-size:var(--font-ui-medium);font-weight:var(--font-semibold);color:var(--text-normal)}.ppb-base-empty-hint,.ppb-base-missing-path{margin:0;font-size:var(--font-ui-small);color:var(--text-muted)}.ppb-base-empty-btn{margin-top:8px}.ppb-base-error{padding:16px;color:var(--text-error);font-size:var(--font-ui-small);text-align:center}.ppb-base-config-warning{display:flex;align-items:center;gap:6px;padding:8px 12px;margin-top:4px;border-radius:var(--radius-s);background:var(--background-modifier-error);color:var(--text-error);font-size:var(--font-ui-small)}.ppb-base-config-warning .svg-icon{width:16px;height:16px;flex-shrink:0}.ppb-base-selector-modal{max-width:600px}.ppb-base-modal-title{display:flex;align-items:center;gap:8px;margin-bottom:16px}.ppb-base-modal-title h2{margin:0}.ppb-base-modal-icon{display:flex;align-items:center;color:var(--interactive-accent)}.ppb-base-modal-icon svg{width:24px;height:24px}.ppb-base-modal-section{margin-bottom:16px}.ppb-base-modal-section h3{margin:0 0 12px;font-size:var(--font-ui-medium);color:var(--text-normal)}.ppb-base-modal-divider{display:flex;align-items:center;gap:12px;margin:20px 0;color:var(--text-muted);font-size:var(--font-ui-smaller);font-weight:var(--font-semibold);text-transform:uppercase;letter-spacing:.05em}.ppb-base-modal-divider:before,.ppb-base-modal-divider:after{content:"";flex:1;height:1px;background:var(--background-modifier-border)}.ppb-base-search{margin-bottom:8px}.ppb-base-search-input{width:100%;padding:8px 12px;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small)}.ppb-base-search-input:focus{border-color:var(--interactive-accent);outline:none;box-shadow:0 0 0 2px var(--interactive-accent-hover)}.ppb-base-file-list{max-height:200px;overflow-y:auto;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s)}.ppb-base-file-item{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;border-bottom:1px solid var(--background-modifier-border)}.ppb-base-file-item:last-child{border-bottom:none}.ppb-base-file-item:hover{background:var(--background-modifier-hover)}.ppb-base-file-icon{display:flex;color:var(--text-muted);flex-shrink:0}.ppb-base-file-icon svg{width:16px;height:16px}.ppb-base-file-info{display:flex;flex-direction:column;min-width:0}.ppb-base-file-name{font-size:var(--font-ui-small);font-weight:var(--font-medium);color:var(--text-normal)}.ppb-base-file-path{font-size:var(--font-ui-smaller);color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ppb-base-empty-list{padding:16px;text-align:center;color:var(--text-muted);font-size:var(--font-ui-small)}.ppb-base-filters h4{margin:0 0 8px;font-size:var(--font-ui-small);color:var(--text-muted)}.ppb-base-filter-list{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}.ppb-base-filter-row{display:flex;align-items:center;gap:6px}.ppb-base-filter-type{padding:4px 8px;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-smaller);min-width:110px}.ppb-base-filter-value{flex:1;padding:4px 8px;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-smaller)}.ppb-base-filter-remove{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:none;background:none;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-s);font-size:16px}.ppb-base-filter-remove:hover{color:var(--text-error);background:var(--background-modifier-hover)}.ppb-base-add-filter{font-size:var(--font-ui-smaller);color:var(--interactive-accent);background:none;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-s);padding:4px 12px;cursor:pointer;width:100%}.ppb-base-add-filter:hover{background:var(--background-modifier-hover)}.ppb-base-create-action{margin-top:16px;display:flex;justify-content:flex-end}.ppb-base-create-btn{padding:8px 24px}.ppb-academic-base .ppb-base-content .bases-header{display:none!important}.ppb-academic-grid .ppb-academic-base{min-height:200px}.ppb-native-shell{max-width:90rem;margin:0 auto;padding:24px;min-height:100vh;position:relative}.ppb-native-shell-header{margin-bottom:0;position:relative;z-index:20}.ppb-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:2rem}.ppb-header-left{display:flex;align-items:center;gap:1.5rem}.ppb-header-avatar{width:5rem;height:5rem;border-radius:9999px;border:2px solid white;overflow:hidden;background:#fff;box-shadow:0 4px 6px -1px #0000001a;flex-shrink:0}.ppb-header-avatar img{width:100%;height:100%;object-fit:cover}.ppb-header-info{display:flex;flex-direction:column;gap:.25rem}.ppb-header-name-row{display:flex;align-items:center;gap:.75rem}.ppb-header-name{font-size:1.25rem;font-weight:500;color:var(--text-normal);margin:0}.ppb-header-title{padding:.25rem .5rem;font-size:.75rem;font-weight:500;background:var(--background-secondary);color:var(--text-muted);border-radius:.375rem}.ppb-header-details{display:flex;flex-direction:column;gap:.25rem}.ppb-header-detail-row{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:var(--text-muted)}.ppb-header-right{display:flex;flex-direction:column;align-items:flex-end;gap:.75rem;height:5rem;justify-content:space-between}button.ppb-header-settings-btn{display:flex;align-items:center;gap:.25rem;height:2rem;padding:0 .75rem;font-size:.875rem;border:1px solid var(--background-modifier-border);border-radius:.375rem;background:transparent;color:var(--text-normal);box-shadow:unset;cursor:pointer;transition:border-color .2s}button.ppb-header-settings-btn:hover{border-color:var(--background-modifier-border)}button.ppb-header-settings-btn svg{flex-shrink:0}.ppb-header-tab-switcher{display:grid;grid-template-columns:repeat(3,1fr);width:12rem;background:var(--background-secondary);border-radius:.75rem;padding:.25rem}button.ppb-header-tab-btn{padding:.375rem .75rem;font-size:.875rem;font-weight:500;border-radius:.375rem;border:none;background:transparent;color:var(--text-muted);box-shadow:unset;cursor:pointer;transition:all .15s;text-align:center}button.ppb-header-tab-btn:hover{color:var(--text-normal)}button.ppb-header-tab-btn.ppb-header-tab-active{background:var(--background-primary);color:var(--text-normal);box-shadow:0 1px 2px #0000000d}.ppb-tab-container{display:none}.ppb-tab-container.ppb-tab-active{display:block}.ppb-tab-academic{container-type:inline-size}.ppb-academic-grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto;gap:24px}@container (max-width: 720px){.ppb-academic-grid{grid-template-columns:1fr}}.ppb-tab-projects{height:calc(100vh - 9rem)}.ppb-personal-grid,.ppb-personal-section{display:grid;grid-template-columns:1fr 1fr;gap:32px}.ppb-island{min-height:200px;overflow:hidden}.ppb-island-full-width{grid-column:1 / -1}.ppb-focus-heatmap{height:100%;overflow-y:auto}.ppb-focus-wrapper{display:flex;flex-direction:column;gap:16px;padding:12px}.ppb-focus-stats{display:flex;gap:8px}.ppb-focus-stat-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;padding:12px 8px;border-radius:var(--radius-m);background:var(--background-secondary);border:1px solid var(--background-modifier-border)}.ppb-focus-stat-icon{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--radius-s);background:var(--interactive-accent);color:var(--text-on-accent)}.ppb-focus-stat-icon svg{width:14px;height:14px}.ppb-focus-stat-value{font-size:var(--font-ui-large);font-weight:var(--font-bold);color:var(--text-normal);line-height:1}.ppb-focus-stat-label{font-size:var(--font-ui-smaller);color:var(--text-muted)}.ppb-focus-section-title{font-size:var(--font-ui-small);font-weight:var(--font-semibold);color:var(--text-muted);text-transform:uppercase;letter-spacing:.03em;margin-bottom:8px}.ppb-focus-tags-section{display:flex;flex-direction:column}.ppb-focus-tag-list{display:flex;flex-direction:column;gap:6px}.ppb-focus-tag-row{display:flex;align-items:center;gap:8px}.ppb-focus-tag-name{flex-shrink:0;width:80px;font-size:var(--font-ui-smaller);color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ppb-focus-tag-bar-bg{flex:1;height:6px;border-radius:3px;background:var(--background-modifier-hover);overflow:hidden}.ppb-focus-tag-bar{height:100%;border-radius:3px;background:var(--interactive-accent);transition:width .3s ease}.ppb-focus-tag-count{flex-shrink:0;width:28px;text-align:right;font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-normal)}.ppb-focus-heatmap-section{display:flex;flex-direction:column}.ppb-focus-heatmap-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:4px}.ppb-focus-heatmap-cell{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:6px 2px;border-radius:var(--radius-s);min-height:44px}.ppb-focus-heatmap-cell:not(.ppb-focus-heat-0) .ppb-focus-heatmap-label{color:var(--text-on-accent)}.ppb-focus-heatmap-label{font-size:9px;color:var(--text-faint);line-height:1;margin-bottom:2px}.ppb-focus-heatmap-count{font-size:var(--font-ui-smaller);font-weight:var(--font-semibold);line-height:1}.ppb-focus-heat-0{background:var(--background-modifier-hover)}.ppb-focus-heat-0 .ppb-focus-heatmap-count{color:var(--text-faint)}.ppb-focus-heat-1{background:color-mix(in srgb,var(--interactive-accent) 20%,var(--background-primary))}.ppb-focus-heat-1 .ppb-focus-heatmap-count{color:var(--interactive-accent)}.ppb-focus-heat-2{background:color-mix(in srgb,var(--interactive-accent) 40%,var(--background-primary))}.ppb-focus-heat-2 .ppb-focus-heatmap-count{color:var(--interactive-accent)}.ppb-focus-heat-3{background:color-mix(in srgb,var(--interactive-accent) 60%,var(--background-primary))}.ppb-focus-heat-3 .ppb-focus-heatmap-count{color:var(--text-on-accent)}.ppb-focus-heat-4{background:var(--interactive-accent)}.ppb-focus-heat-4 .ppb-focus-heatmap-count{color:var(--text-on-accent)}.ppb-focus-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:24px;text-align:center;gap:8px}.ppb-focus-empty-icon{width:48px;height:48px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-m);background:var(--background-modifier-hover);color:var(--text-muted)}.ppb-focus-empty-icon svg{width:24px;height:24px}.ppb-focus-empty-title{margin:0;font-size:var(--font-ui-medium);font-weight:var(--font-semibold);color:var(--text-normal)}.ppb-focus-empty-hint{margin:0;font-size:var(--font-ui-small);color:var(--text-muted)}.ppb-base-toggle-btn.is-active{color:var(--interactive-accent)}.ppb-focus-map{padding:12px}.ppb-focus-map-info{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;font-size:var(--font-ui-smaller);color:var(--text-muted)}.ppb-focus-map-tags{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ppb-focus-map-grid{display:grid;gap:8px;width:100%}.ppb-focus-map-week-header{font-size:var(--font-ui-smaller);color:var(--text-muted);text-align:center;padding:4px}.ppb-focus-map-month-label{font-size:var(--font-ui-smaller);color:var(--text-muted);display:flex;align-items:center;justify-content:flex-end;padding-right:8px}.ppb-focus-map-cell{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:8px 4px;border:1px solid var(--background-modifier-border);cursor:default;transition:transform .15s ease,box-shadow .15s ease}.ppb-focus-map-cell:hover{transform:scale(1.05)}.ppb-focus-map-cell-tag{font-size:var(--font-ui-smaller);font-weight:var(--font-medium);margin-bottom:2px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.ppb-focus-map-cell-pct{font-size:var(--font-ui-smaller)}.ppb-focus-map-cell-count{font-size:10px;opacity:.75;margin-top:2px}.ppb-focus-map-legend{display:flex;align-items:center;justify-content:space-between;margin-top:12px;padding:8px 12px;font-size:var(--font-ui-smaller);color:var(--text-muted);background:var(--background-secondary);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border)}.ppb-focus-map-legend-bar{display:flex;align-items:center;gap:6px}.ppb-focus-map-legend-swatches{display:flex;gap:3px}.ppb-focus-map-legend-swatch{width:12px;height:12px}.ppb-focus-map-loading{display:flex;align-items:center;justify-content:center;gap:8px;padding:32px;color:var(--text-muted);font-size:var(--font-ui-small)}.ppb-focus-map-spinner svg{animation:ppb-spin 1s linear infinite}.ppb-focus-map-error{display:flex;flex-direction:column;align-items:center;gap:8px;padding:32px;text-align:center;color:var(--text-error);font-size:var(--font-ui-small)}.ppb-focus-map-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;text-align:center;gap:4px}.ppb-focus-map-empty p{margin:0;color:var(--text-muted);font-size:var(--font-ui-small)}.ppb-focus-map-hint{font-size:var(--font-ui-smaller)!important}.ppb-focus-map-drilldown{padding:12px}.ppb-focus-map-drilldown-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.ppb-focus-map-drilldown-label{font-size:var(--font-ui-small);font-weight:var(--font-medium);color:var(--text-normal)}.ppb-focus-map-drilldown-back{flex-shrink:0}.ppb-focus-map-drilldown-content{min-height:100px}.ppb-overview{position:relative;padding:30px;height:100%;overflow:hidden;border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);container-type:inline-size}.ppb-overview-spark-wrap{position:absolute;top:40px;right:0;width:320px;height:160px;opacity:.3;transform:scale(1.1);pointer-events:none}.ppb-overview-sparkline{width:100%;height:100%;transform:scaleY(.75)}.ppb-overview-content{position:relative;z-index:1;display:flex;flex-direction:column;height:100%}.ppb-overview-title{margin:0 0 16px;font-size:20px;font-weight:var(--font-medium);color:var(--text-muted)}.ppb-overview-metric{display:flex;align-items:baseline;gap:12px;margin-bottom:4px}.ppb-overview-metric-value{font-size:3rem;font-weight:var(--font-bold);color:var(--text-normal);line-height:1}.ppb-overview-metric-growth{display:flex;align-items:center;gap:4px;font-size:var(--font-ui-smaller);color:var(--interactive-accent)}.ppb-overview-metric-growth svg{width:12px;height:12px}.ppb-overview-subtitle{margin:0;font-size:var(--font-ui-small);color:var(--text-muted)}.ppb-overview-stats{margin-top:auto;display:grid;grid-template-columns:repeat(4,1fr);gap:20px}@container (max-width: 400px){.ppb-overview-stats{grid-template-columns:repeat(2,1fr);gap:12px}}.ppb-overview-stat{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.ppb-overview-stat-icon{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--background-modifier-hover);color:var(--text-normal)}.ppb-overview-stat-icon svg{width:20px;height:20px}.ppb-overview-stat-info{display:flex;flex-direction:column}.ppb-overview-stat-label{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:1.4}.ppb-overview-stat-value{font-size:var(--font-ui-large);font-weight:var(--font-bold);color:var(--text-normal);line-height:1.2}.ppb-overview-loading,.ppb-overview-error{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:48px;text-align:center;color:var(--text-muted);font-size:var(--font-ui-small);height:100%}.ppb-overview-error{color:var(--text-error)}.ppb-overview-spinner svg{animation:ppb-spin 1s linear infinite}.ppb-overview-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-muted);font-size:var(--font-ui-small)}.ppb-overview-empty p{margin:0}.ppb-today-split{display:grid;grid-template-columns:1fr 1fr;gap:24px;height:100%;container-type:inline-size}@container (max-width: 480px){.ppb-today-split{grid-template-columns:1fr}}.ppb-today-split .bases-header{display:none!important}.ppb-today{display:grid;grid-template-columns:1fr 1fr;gap:24px;height:100%;container-type:inline-size}@container (max-width: 480px){.ppb-today{grid-template-columns:1fr}}.ppb-today--loading{display:flex}.ppb-today-loading,.ppb-today-error{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:48px;text-align:center;color:var(--text-muted);font-size:var(--font-ui-small);width:100%}.ppb-today-error{color:var(--text-error)}.ppb-today-spinner svg{animation:ppb-spin 1s linear infinite}.ppb-today-empty{display:flex;align-items:center;justify-content:center;width:100%;color:var(--text-muted);font-size:var(--font-ui-small)}.ppb-today-empty p{margin:0}.ppb-today-left{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);padding:26px 20px 37px;overflow:hidden;position:relative}.ppb-today-card-title{margin:0 0 16px;font-size:20px;font-weight:var(--font-medium)}.ppb-today-stats{display:flex;flex-direction:column;gap:12px;padding:19px 0}.ppb-today-stat-row{display:flex;align-items:center;justify-content:space-between}.ppb-today-stat-lhs{display:flex;align-items:center;gap:12px}.ppb-today-stat-icon{width:32px;height:32px;border-radius:var(--radius-s);display:flex;align-items:center;justify-content:center;flex-shrink:0}.ppb-today-stat-icon span{display:flex;align-items:center;justify-content:center}.ppb-today-stat-icon svg{width:16px;height:16px}.ppb-today-stat-label{font-size:var(--font-ui-small);color:var(--text-muted)}.ppb-today-stat-value{font-size:var(--font-ui-small);font-weight:var(--font-medium);color:var(--text-normal)}.ppb-today-right{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);padding:24px;overflow:hidden;position:relative;display:flex;flex-direction:column}.ppb-today-ticket-head{text-align:center;margin-bottom:16px}.ppb-today-ticket-brand{font-size:20px;font-weight:var(--font-bold);color:var(--text-normal)}.ppb-today-ticket-sub{font-size:var(--font-ui-smaller);color:var(--text-muted);margin-bottom:8px}.ppb-today-ticket-badge{display:inline-block;padding:2px 12px;border-radius:999px;font-size:var(--font-ui-smaller);font-weight:var(--font-medium);background:var(--background-modifier-hover);color:var(--text-normal)}.ppb-today-bars{display:flex;flex-direction:column;gap:12px;flex:1}.ppb-today-bar-group{display:flex;flex-direction:column;gap:4px}.ppb-today-bar-header{display:flex;justify-content:space-between;font-size:var(--font-ui-smaller);color:var(--text-muted)}.ppb-today-bar-pct{font-weight:var(--font-medium)}.ppb-today-bar-track{width:100%;height:8px;border-radius:4px;background:var(--background-modifier-hover);overflow:hidden}.ppb-today-bar-fill{height:100%;border-radius:4px;transition:width .4s ease}.ppb-today-divider{border-top:1px dashed var(--background-modifier-border);margin:16px 0}.ppb-today-focus-btn-wrap{text-align:center}.ppb-today-focus-btn{display:inline-flex;align-items:center;gap:8px;width:100%;justify-content:center;padding:10px 16px;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);cursor:pointer;transition:background .15s ease}.ppb-today-focus-btn:hover:not(:disabled){background:var(--background-modifier-hover)}.ppb-today-focus-btn:disabled{opacity:.6;cursor:not-allowed}.ppb-today-focus-btn svg{width:16px;height:16px}:root{--diff-selection-bg: #b3d7ff;--diff-gutter-insert-bg: #d6fedb;--diff-gutter-delete-bg: #fadde0;--diff-gutter-selected-bg: #fffce0;--diff-code-insert-bg: #eaffee;--diff-code-insert-edit-bg: #c0dc91;--diff-code-delete-bg: #fdeff0;--diff-code-delete-edit-bg: #f39ea2;--diff-code-selected-bg: #fffce0;--diff-omit-gutter-line: #cb2a1d}.theme-dark{--diff-selection-bg: rgba(56, 139, 253, .15);--diff-gutter-insert-bg: rgba(46, 160, 67, .15);--diff-gutter-delete-bg: rgba(248, 81, 73, .15);--diff-gutter-selected-bg: rgba(255, 255, 255, .05);--diff-code-insert-bg: rgba(46, 160, 67, .1);--diff-code-insert-edit-bg: rgba(46, 160, 67, .35);--diff-code-delete-bg: rgba(248, 81, 73, .1);--diff-code-delete-edit-bg: rgba(248, 81, 73, .35);--diff-code-selected-bg: rgba(255, 255, 255, .05);--diff-omit-gutter-line: #f85149}.institution-search-input{width:100%;padding:8px;margin-bottom:8px;border:1px solid var(--background-modifier-border);border-radius:4px}.search-container{margin-bottom:16px}.search-results{margin:16px 0;padding:12px;border:1px solid var(--background-modifier-border);border-radius:4px;background-color:var(--background-primary)}.search-results table{width:100%;border-collapse:collapse}.search-results th,.search-results td{padding:8px;border:1px solid var(--background-modifier-border)}.search-results th{background-color:var(--background-secondary);font-weight:700}.vertical-tab-nav-item[data-plugin-id=paperbell]:after{content:" 🎓"}.vertical-tab-nav-item-pro{right:var(--size-4-2);position:absolute}.vertical-tab-nav-item-pro:before{content:"PRO";font-size:var(--font-smallest);color:var(--text-faint);padding-left:var(--size-2-2);padding-right:var(--size-2-2);background-color:var(--background-secondary);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border)}.vertical-tab-nav-item[data-plugin-id=paperbell]{position:relative}.paperbell-replacements{margin-bottom:1em}.paperbell-replacement-item{display:flex;align-items:center;margin-bottom:.5em;padding:.5em;background-color:var(--background-secondary);border-radius:4px}.paperbell-replacement-fields{flex-grow:1;margin-right:.5em;display:flex;gap:.5em}.paperbell-replacement-fields input{flex-grow:1}.paperbell-replacement-buttons{display:flex;gap:.3em}.paperbell-replacement-item:first-child .paperbell-replacement-buttons .clickable-icon.clickable-icon-move-up[disabled]{pointer-events:none}.paperbell-replacement-item:last-child .paperbell-replacement-buttons .clickable-icon.clickable-icon-move-down[disabled]{pointer-events:none}.diff{background-color:var(--diff-background-color);border-collapse:collapse;color:var(--diff-text-color);table-layout:fixed;width:100%}.diff::-moz-selection{background-color:var(--diff-selection-bg);color:var(--diff-selection-text-color, var(--diff-text-color))}.diff::selection{background-color:var(--diff-selection-bg);color:var(--diff-selection-text-color, var(--diff-text-color))}.diff td{padding-bottom:0;padding-top:0;vertical-align:top}.diff-line{font-family:Consolas,Courier,monospace;font-family:var(--diff-font-family);line-height:1.5}.diff-gutter>a{color:inherit;display:block}.diff-gutter{cursor:pointer;padding:0 1ch;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none}.diff-gutter-insert{background-color:var(--diff-gutter-insert-bg);color:var(--diff-gutter-insert-text-color, var(--diff-text-color))}.diff-gutter-delete{background-color:var(--diff-gutter-delete-bg);color:var(--diff-gutter-delete-text-color, var(--diff-text-color))}.diff-gutter-omit{cursor:default}.diff-gutter-selected{background-color:var(--diff-gutter-selected-bg);color:var(--diff-gutter-selected-text-color, var(--diff-text-color))}.diff-code{word-wrap:break-word;padding:0 0 0 .5em;white-space:pre-wrap;word-break:break-all}.diff-code-edit{color:inherit}.diff-code-insert{background-color:var(--diff-code-insert-bg);color:var(--diff-code-insert-text-color, var(--diff-text-color))}.diff-code-insert .diff-code-edit{background-color:var(--diff-code-insert-edit-bg);color:var(--diff-code-insert-edit-text-color, var(--diff-text-color))}.diff-code-delete{background-color:var(--diff-code-delete-bg);color:var(--diff-code-delete-text-color, var(--diff-text-color))}.diff-code-delete .diff-code-edit{background-color:var(--diff-code-delete-edit-bg);color:var(--diff-code-delete-edit-text-color, var(--diff-text-color))}.diff-code-selected{background-color:var(--diff-code-selected-bg);color:var(--diff-code-selected-text-color, var(--diff-text-color))}.diff-widget-content{vertical-align:top}.diff-gutter-col{width:7ch}.diff-gutter-omit{height:0}.diff-gutter-omit:before{background-color:var(--diff-omit-gutter-line);content:" ";display:block;height:100%;margin-left:4.6ch;overflow:hidden;white-space:pre;width:2px}.diff-decoration{line-height:1.5;-webkit-user-select:none;-moz-user-select:none;user-select:none}.diff-decoration-content{font-family:Consolas,Courier,monospace;font-family:var(--diff-font-family);padding:0}.conflict-view{display:flex;flex-direction:column;height:100%;width:100%;padding:20px}.conflict-view-description{margin-bottom:16px;color:var(--text-muted)}.conflict-view-body{display:flex;flex:1;min-height:0;gap:12px}.conflict-view-sidebar{flex:0 0 300px;overflow-y:auto;border-right:1px solid var(--background-modifier-border);padding-right:12px}.conflict-view-detail{flex:1;overflow:auto;min-width:0}.conflict-view-detail-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-muted);font-style:italic}.conflict-view-detail-header{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;margin-bottom:8px;background-color:var(--background-secondary);border-radius:4px;gap:12px}.conflict-view-detail-path{flex:1;font-family:var(--font-monospace);font-size:var(--font-smaller);color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.conflict-view-detail-actions{display:flex;gap:12px;flex-shrink:0}.conflict-resolution-label{display:flex;align-items:center;gap:4px;white-space:nowrap;cursor:pointer;font-size:var(--font-small)}.conflict-view-section{margin-bottom:16px}.conflict-view-section h3{margin-bottom:8px;padding-bottom:5px;font-size:var(--font-small);border-bottom:1px solid var(--background-modifier-border)}.conflict-category-actions{margin-top:var(--size-4-2);margin-bottom:var(--size-4-2);display:flex;justify-content:flex-start;align-items:center;gap:var(--size-4-2)}.conflict-category-actions button{font-size:var(--font-smallest)}.conflict-file,.conflict-file-item{margin-bottom:4px;border:1px solid var(--background-modifier-border);border-radius:4px;transition:border-color .15s ease}.conflict-file-item.is-active{border-color:var(--interactive-accent)}.conflict-file-item.is-active .conflict-file-header{background-color:var(--background-modifier-hover)}.conflict-file-header{display:flex;justify-content:space-between;align-items:center;padding:6px 10px;cursor:pointer;background-color:var(--background-secondary);border-radius:3px}.conflict-file-path{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:var(--font-smaller)}.conflict-resolution-indicator{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-right:8px;background-color:var(--text-faint);transition:background-color .15s ease}.conflict-resolution-indicator[data-resolution=apply_update]{background-color:var(--interactive-accent)}.conflict-diff{padding:8px;overflow-x:auto;background-color:var(--background-primary);border-radius:4px}.conflict-file-preview{padding:10px;overflow:auto;background-color:var(--background-primary);border-radius:4px}.conflict-file-preview pre{margin:0;white-space:pre-wrap;word-break:break-all}.binary-file-notice{padding:10px;color:var(--text-muted);font-style:italic}.diff-split .diff-gutter-col{width:5ch}.conflict-view-footer{display:flex;justify-content:flex-end;gap:10px;margin-top:12px;padding-top:12px;border-top:1px solid var(--background-modifier-border)}.workspace-leaf-content.conflict-view-container[data-type^=ppb-conflict-view]{overflow:hidden;padding-bottom:0}.paperbell-landing-view{display:flex;flex-direction:column;height:100%;padding:0;overflow-y:auto}.ppb-wizard-wrapper{display:flex;flex-direction:column;height:100%;max-width:90%;margin:0 auto;padding:24px 32px;width:100%}.ppb-wizard-progress{display:flex;align-items:flex-start;justify-content:center;gap:0;margin-bottom:32px;padding:16px 0 8px;flex-shrink:0}.ppb-wizard-progress-step{display:flex;flex-direction:column;align-items:center;gap:6px}.ppb-wizard-progress-dot{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--font-ui-small);font-weight:600;border:2px solid var(--background-modifier-border);background-color:var(--background-primary);color:var(--text-muted);transition:all .3s ease;flex-shrink:0;--icon-size: 16px}.ppb-wizard-progress-dot.is-active{border-color:var(--interactive-accent);background-color:var(--interactive-accent);color:var(--text-on-accent);box-shadow:0 0 0 4px rgba(var(--interactive-accent-rgb, 72, 133, 237),.2)}.ppb-wizard-progress-dot.is-completed{border-color:var(--text-success, #28a745);background-color:var(--text-success, #28a745);color:#fff;cursor:pointer}.ppb-wizard-progress-dot.is-completed:hover{opacity:.85}.ppb-wizard-progress-line{width:48px;height:2px;background-color:var(--background-modifier-border);transition:background-color .3s ease;margin-top:15px;flex-shrink:0}.ppb-wizard-progress-line.is-completed{background-color:var(--text-success, #28a745)}.ppb-wizard-progress-label{font-size:var(--font-ui-smaller);color:var(--text-muted);text-align:center;max-width:60px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ppb-wizard-content{flex:1;overflow-y:auto;padding:0 20px;min-height:0}.ppb-wizard-step-enter{animation:ppb-step-enter .3s ease-out forwards}.ppb-wizard-step-enter-reverse{animation:ppb-step-enter-reverse .3s ease-out forwards}@keyframes ppb-step-enter{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:translate(0)}}@keyframes ppb-step-enter-reverse{0%{opacity:0;transform:translate(-30px)}to{opacity:1;transform:translate(0)}}.ppb-wizard-nav{display:flex;justify-content:space-between;align-items:center;padding:16px 0;border-top:1px solid var(--background-modifier-border);margin-top:24px;flex-shrink:0}.ppb-wizard-nav-left,.ppb-wizard-nav-right{display:flex;gap:8px}.ppb-wizard-nav-btn{display:flex;align-items:center;gap:6px;padding:8px 20px;border-radius:6px;font-weight:500;transition:all .2s ease;cursor:pointer;border:1px solid var(--background-modifier-border);background-color:var(--background-secondary);color:var(--text-normal)}.ppb-wizard-nav-btn:hover{background-color:var(--background-modifier-hover)}.ppb-wizard-nav-btn.mod-cta{border:none}.ppb-wizard-nav-icon{display:flex;align-items:center;--icon-size: 14px}.ppb-step-header{text-align:center;margin-bottom:24px}.ppb-step-header h2{margin:12px 0 8px;color:var(--text-normal);font-weight:700;font-size:1.5em}.ppb-step-header p{color:var(--text-muted);font-size:var(--font-ui-medium);line-height:1.5;max-width:600px;margin:0 auto}.ppb-step-header-icon{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:12px;background-color:var(--interactive-accent);color:var(--text-on-accent);--icon-size: 24px}.ppb-account-container{display:flex;flex-direction:column;align-items:center}.ppb-account-methods{display:flex;gap:16px;width:100%;max-width:700px;align-items:stretch}.ppb-account-method{flex:1;padding:24px;background-color:var(--background-secondary);border-radius:12px;border:1px solid var(--background-modifier-border);text-align:center;display:flex;flex-direction:column;align-items:center;gap:8px}.ppb-account-method h3{margin:0;font-size:1.1em}.ppb-account-method-desc{color:var(--text-muted);font-size:var(--font-ui-small);margin:0 0 8px}.ppb-account-method-icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background-color:var(--background-primary);border:2px solid var(--interactive-accent);color:var(--interactive-accent);--icon-size: 20px}.ppb-account-divider{display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-size:var(--font-ui-small);padding:0 4px;flex-shrink:0}.ppb-account-login-btn,.ppb-account-verify-btn{width:100%;padding:8px 16px;border-radius:6px;font-weight:500}.ppb-account-input-group{display:flex;flex-direction:column;gap:8px;width:100%}.ppb-account-input{width:100%;padding:8px 12px;border:1px solid var(--background-modifier-border);border-radius:6px;background-color:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small)}.ppb-account-input:focus{border-color:var(--interactive-accent);outline:none;box-shadow:0 0 0 2px rgba(var(--interactive-accent-rgb, 72, 133, 237),.2)}.ppb-account-error{color:var(--text-error, #dc3545);font-size:var(--font-ui-small);margin:4px 0 0}.ppb-account-link{font-size:var(--font-ui-small);color:var(--text-muted);margin-top:8px}.ppb-account-link a{color:var(--text-accent);text-decoration:none}.ppb-account-link a:hover{text-decoration:underline}.ppb-account-success{display:flex;flex-direction:column;align-items:center;gap:12px;padding:32px;background-color:var(--background-secondary);border-radius:12px;border:1px solid var(--text-success, #28a745);max-width:500px;width:100%}.ppb-account-success h3{margin:0;color:var(--text-success, #28a745)}.ppb-account-success-icon{width:64px;height:64px;border-radius:50%;background-color:var(--text-success, #28a745);color:#fff;display:flex;align-items:center;justify-content:center;--icon-size: 32px}.ppb-account-user-name{font-weight:600;color:var(--text-normal)}.ppb-account-license-info{color:var(--text-muted);font-size:var(--font-ui-small)}.ppb-account-checking{display:flex;flex-direction:column;align-items:center;gap:12px;padding:32px;color:var(--text-muted)}.ppb-account-spinner{animation:ppb-spin 1s linear infinite;--icon-size: 24px}@keyframes ppb-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ppb-complete-container{display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px;padding:32px 0}.ppb-complete-icon{color:var(--text-success, #28a745);--icon-size: 64px;animation:ppb-pop-in .5s ease-out}@keyframes ppb-pop-in{0%{transform:scale(0);opacity:0}60%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}.ppb-complete-container h2{margin:0;font-size:1.8em;color:var(--text-normal)}.ppb-complete-description{color:var(--text-muted);max-width:500px;line-height:1.5}.ppb-complete-checklist{width:100%;max-width:500px;text-align:left;background-color:var(--background-secondary);border-radius:12px;border:1px solid var(--background-modifier-border);overflow:hidden}.ppb-complete-checklist-item{display:flex;align-items:center;gap:12px;padding:14px 20px;border-bottom:1px solid var(--background-modifier-border)}.ppb-complete-checklist-item:last-child{border-bottom:none}.ppb-complete-checklist-icon{width:22px;height:22px;flex-shrink:0;--icon-size: 18px}.ppb-complete-checklist-icon.is-done{color:var(--text-success, #28a745)}.ppb-complete-checklist-icon.is-pending{color:var(--text-muted)}.ppb-complete-checklist-text{display:flex;flex-direction:column;gap:2px}.ppb-complete-checklist-label{font-weight:600;color:var(--text-normal)}.ppb-complete-checklist-detail{font-size:var(--font-ui-small);color:var(--text-muted)}.ppb-complete-note{color:var(--text-muted);font-size:var(--font-ui-small);max-width:500px;line-height:1.5;font-style:italic}.paperbell-landing-topbar{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-3);background-color:var(--background-secondary-alt);border-bottom:1px solid var(--background-modifier-border)}.paperbell-landing-title{margin:0;font-size:var(--font-ui-large)}.paperbell-landing-topbar-checkbox{margin:0!important;padding:8px 12px!important;background-color:var(--background-primary-alt)!important;border-radius:6px;border:1px solid var(--background-modifier-border)}.paperbell-landing-back-button{display:flex;align-items:center;gap:8px;background:none;border:none;cursor:pointer;color:var(--text-normal);padding:8px 12px;border-radius:6px;font-weight:500}.paperbell-landing-back-button:hover{background-color:var(--background-modifier-hover)}.paperbell-landing-progress{display:flex;flex-direction:column;align-items:flex-end;gap:5px}.paperbell-landing-progress-text{font-size:var(--font-ui-small);color:var(--text-muted)}.paperbell-landing-progress-bar{width:150px;height:8px;background-color:var(--background-modifier-border);border-radius:4px;overflow:hidden}.paperbell-landing-progress-inner{height:100%;background-color:var(--text-accent);border-radius:4px}.paperbell-landing-tab-content{padding:20px}.paperbell-landings-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:20px;margin-top:30px}.paperbell-landing-card{position:relative;display:flex;flex-direction:column;background-color:var(--background-secondary);border-radius:8px;padding:20px;transition:transform .2s ease,box-shadow .2s ease;border:1px solid var(--background-modifier-border);min-height:220px}.paperbell-landing-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-l)}.paperbell-landing-card-icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:8px;background-color:var(--interactive-accent);color:var(--text-on-accent);margin-bottom:15px;font-size:1.2em}.paperbell-landing-card h3{margin:0 0 10px;font-size:1.2em}.paperbell-landing-card p{color:var(--text-muted);margin-bottom:20px;font-size:.9em;flex-grow:1}.paperbell-landing-card-status{position:absolute;top:15px;right:15px;padding:6px 10px;border-radius:6px;font-size:.8em;font-weight:700;max-width:120px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.paperbell-landing-card-status.completed{background-color:var(--text-success);color:#fff}.paperbell-landing-card-status.pending{background-color:var(--text-muted);color:var(--background-primary)}.paperbell-landing-card-button{background-color:var(--interactive-accent);color:var(--text-on-accent);border:none;border-radius:4px;padding:8px 12px;cursor:pointer;font-weight:700;transition:background-color .2s ease;align-self:flex-start}.paperbell-landing-card-button:hover{background-color:var(--interactive-accent-hover)}.paperbell-landing-description{color:var(--text-muted);margin-bottom:20px;font-style:italic;padding-left:10px}.paperbell-landing-step{margin-bottom:25px;padding-bottom:15px;border-bottom:1px solid var(--background-modifier-border)}.paperbell-landing-step:last-child{border-bottom:none}.paperbell-landing-step-header{margin-bottom:10px}.paperbell-landing-step h3{margin-top:15px;margin-bottom:10px;font-size:1.2em;color:var(--text-accent)}.paperbell-landing-step-description{margin-bottom:15px;line-height:1.5}.paperbell-landing-toggle-images{background-color:var(--interactive-accent);color:var(--text-on-accent);border:none;border-radius:4px;padding:5px 10px;cursor:pointer;font-size:.9em;margin-bottom:10px}.paperbell-landing-images-container{margin-top:10px;transition:max-height .3s ease-in-out,opacity .3s ease-in-out;max-height:1000px;opacity:1;overflow:hidden}.paperbell-landing-images-container.collapsed{max-height:0;opacity:0;margin-top:0}.paperbell-landing-figure{margin-bottom:15px}.paperbell-landing-figure img{max-width:100%;border-radius:5px;border:1px solid var(--background-modifier-border)}.paperbell-landing-figure figcaption{text-align:center;font-style:italic;margin-top:5px;color:var(--text-muted)}.paperbell-landing-tab-content p{margin-bottom:15px;line-height:1.5}.paperbell-landing-tab-content a{color:var(--text-accent);text-decoration:none}.paperbell-landing-tab-content a:hover{text-decoration:underline}.paperbell-landing-tab-content ol,.paperbell-landing-tab-content ul{margin-left:20px;margin-bottom:15px}.paperbell-landing-tab-content li{margin-bottom:5px}.paperbell-landing-checkboxes{margin-top:30px;background-color:var(--background-secondary);border-radius:5px;padding:15px}.paperbell-landing-checkboxes h3{margin-top:0;margin-bottom:15px;color:var(--text-normal)}.paperbell-landing-checkbox{margin-top:10px;height:var(--input-height);padding:10px;background-color:var(--background-primary);border-radius:5px;display:flex;align-items:center}.paperbell-landing-checkbox input[type=checkbox]{margin-right:10px}.paperbell-landing-actions{display:flex;justify-content:flex-end;gap:10px}.paperbell-landing-actions button{padding:8px 16px}.paperbell-welcome-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:40px;text-align:center;max-width:900px;margin:0 auto;animation:fadeIn .8s ease-in-out}@keyframes fadeIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.paperbell-welcome-logo{font-size:60px;width:100px;height:100px;flex-shrink:0;background-color:var(--interactive-accent);color:var(--text-on-accent);border-radius:50%;display:flex;align-items:center;justify-content:center;margin-bottom:30px;box-shadow:0 8px 20px #00000026;animation:pulse 5s infinite ease-in-out;--icon-size: 48px}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}.paperbell-welcome-header{margin-bottom:40px}.paperbell-welcome-header h1{font-size:2.5em;color:var(--text-accent);margin-bottom:15px;font-weight:700}.paperbell-welcome-header p{font-size:1.2em;color:var(--text-muted);max-width:600px;margin:0 auto;line-height:1.5}.paperbell-welcome-features{display:flex;justify-content:center;gap:30px;margin-bottom:50px;flex-wrap:wrap}.paperbell-welcome-feature{width:220px;background-color:var(--background-secondary);border-radius:12px;padding:25px;transition:all .3s ease;border:1px solid var(--background-modifier-border);position:relative;animation:slideIn .5s ease-in-out forwards;animation-delay:calc(var(--animation-order) * .15s);opacity:0;transform:translateY(20px);height:200px;display:flex;flex-direction:column;align-items:center}.paperbell-welcome-feature:nth-child(1){--animation-order: 1}.paperbell-welcome-feature:nth-child(2){--animation-order: 2}.paperbell-welcome-feature:nth-child(3){--animation-order: 3}@keyframes slideIn{to{opacity:1;transform:translateY(0)}}.paperbell-welcome-feature:hover{transform:translateY(-8px);box-shadow:0 10px 20px #0000001a;border-color:var(--interactive-accent-hover)}.paperbell-welcome-feature-icon{font-size:30px;color:var(--interactive-accent);margin-bottom:20px;height:40px;width:40px;display:flex;align-items:center;justify-content:center;background-color:var(--background-primary);border-radius:50%;padding:10px;margin-top:-35px;border:2px solid var(--interactive-accent)}.paperbell-welcome-feature h3{margin:0 0 15px;color:var(--text-normal);font-weight:600;font-size:1.2em}.paperbell-welcome-feature p{color:var(--text-muted);font-size:.95em;line-height:1.5}.paperbell-welcome-actions{display:flex;gap:20px;margin-top:30px}.paperbell-welcome-actions button{padding:12px 24px;font-size:1.1em;border-radius:8px;transition:all .2s ease}.paperbell-welcome-start{background-color:var(--interactive-accent);color:var(--text-on-accent);font-weight:600;border:none;box-shadow:0 4px 8px #0000001a}.paperbell-welcome-start:hover{background-color:var(--interactive-accent-hover);transform:translateY(-2px);box-shadow:0 6px 12px #00000026}.paperbell-landing-card-status.enabled{background-color:var(--color-orange);color:#fff}.paperbell-landing-card-status.disabled{background-color:var(--color-red);color:#fff}.paperbell-landing-card-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:auto;padding-top:15px}.paperbell-landing-card-button.enable{background-color:var(--color-green);color:#fff;flex:1;min-width:90px;padding:8px 12px;border-radius:6px;font-weight:500}.paperbell-landing-card-button.enable:hover{background-color:var(--color-green-hover)}.paperbell-landing-card-button.settings{background-color:var(--color-blue);color:#fff;flex:1;min-width:90px;padding:8px 12px;border-radius:6px;font-weight:500}.paperbell-landing-card-button.settings:hover{background-color:var(--color-blue-hover)}.paperbell-landing-card-button.config{background-color:var(--interactive-accent);color:var(--text-on-accent);flex:1;min-width:90px;padding:8px 12px;border-radius:6px;font-weight:500}.paperbell-landing-card-button.config:hover{background-color:var(--interactive-accent-hover)}.paperbell-landing-status-container{display:flex;flex-direction:row;align-items:flex-end;gap:15px;min-width:200px}.paperbell-landing-status{padding:8px 16px;border-radius:8px;font-size:.95em;font-weight:600;text-align:center;min-width:120px;white-space:nowrap}.paperbell-landing-status.enabled{background-color:var(--color-orange);color:#fff}.paperbell-landing-status.disabled{background-color:var(--color-red);color:#fff}.paperbell-landing-status.completed{background-color:var(--color-green);color:#fff}.paperbell-landing-actions{display:flex;gap:8px;justify-content:flex-end}.paperbell-landing-actions:empty{display:none}.paperbell-landing-enable-btn,.paperbell-landing-settings-btn{padding:8px 16px;border-radius:6px;border:none;cursor:pointer;font-weight:500;transition:all .2s ease;min-width:90px;white-space:nowrap}.paperbell-landing-enable-btn{background-color:var(--color-green);color:#fff}.paperbell-landing-enable-btn:hover{background-color:var(--color-green-hover)}.paperbell-landing-settings-btn{background-color:var(--color-blue);color:#fff}.paperbell-landing-settings-btn:hover{background-color:var(--color-blue-hover)}.paperbell-landing-step-header{display:flex;justify-content:space-between;align-items:center}.paperbell-landing-step-settings-btn{background-color:var(--color-blue);color:#fff;border:none;border-radius:4px;padding:4px 8px;cursor:pointer;font-size:.85em;font-weight:500;transition:background-color .2s ease}.paperbell-landing-step-settings-btn:hover{background-color:var(--color-blue-hover)}:root{--color-red: #dc3545;--color-red-hover: #c82333;--color-green: #28a745;--color-green-hover: #218838;--color-orange: #fd7e14;--color-orange-hover: #e66500;--color-blue: #007bff;--color-blue-hover: #0056b3}.paperbell-license-info{display:flex;flex-direction:column;gap:var(--size-4-2);padding:var(--size-4-4);background-color:var(--setting-items-background);margin:var(--size-2-2);border-radius:var(--radius-m)}.paperbell-uri-info{margin:1em 0;padding:1em;background-color:var(--background-secondary-alt);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border)}.paperbell-uri-example{display:block;margin:.5em 0;padding:.5em;background-color:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);font-family:var(--font-monospace);font-size:.9em;word-break:break-all;color:var(--text-accent)}.paperbell-tabs-container{display:flex;gap:var(--size-4-2);flex-direction:column}.paperbell-tab-buttons{display:flex;gap:var(--size-4-2);background:var(--setting-items-background);width:fit-content;padding:var(--size-2-2) var(--size-4-2)}button.paperbell-tab-btn:not(.is-active){background-color:unset;box-shadow:none}.ppb-component-tabs{display:flex;gap:var(--size-4-1);border-bottom:1px solid var(--background-modifier-border);margin-bottom:var(--size-4-4);padding-bottom:var(--size-4-2)}.ppb-component-tab-btn{padding:var(--size-4-2) var(--size-4-4);border:none;background:transparent;cursor:pointer;font-size:var(--font-ui-small);color:var(--text-muted);border-radius:var(--radius-s);transition:all .15s ease}.ppb-component-tab-btn:hover{background:var(--background-modifier-hover);color:var(--text-normal)}.ppb-component-tab-btn.is-active{background:var(--interactive-accent);color:var(--text-on-accent)}.ppb-component-tab-content{min-height:200px}.ppb-component-section{margin-bottom:var(--size-4-6);padding:var(--size-4-4);background:var(--background-secondary);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border)}.ppb-component-header{margin-bottom:var(--size-4-3);padding-bottom:var(--size-4-2);border-bottom:1px solid var(--background-modifier-border)}.ppb-component-header h4{margin:0 0 var(--size-4-1) 0;padding:0;font-size:var(--font-ui-medium);font-weight:var(--font-semibold)}.ppb-component-desc{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.ppb-component-settings .setting-item{border-top:none;padding-top:var(--size-4-2);padding-bottom:var(--size-4-2)}.ppb-component-footer{margin-top:var(--size-4-6);padding-top:var(--size-4-4);border-top:1px solid var(--background-modifier-border)}.ppb-config-example{margin-top:var(--size-4-3);margin-bottom:var(--size-4-3);padding:var(--size-4-3);background:var(--background-primary);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);font-size:var(--font-ui-smaller)}.ppb-config-example-title{font-weight:var(--font-medium);margin-bottom:var(--size-4-2);color:var(--text-muted)}.ppb-config-example-list{margin:0;padding-left:var(--size-4-4);color:var(--text-muted)}.ppb-config-example-list li{margin-bottom:var(--size-4-1)}.ppb-config-example-list li code{background:var(--background-secondary);padding:2px 6px;border-radius:var(--radius-s);font-family:var(--font-monospace)}.ppb-tags-container{margin-bottom:var(--size-4-3)}.ppb-tags-list{display:flex;flex-wrap:wrap;gap:var(--size-4-2);padding:var(--size-4-3);background:var(--background-primary);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);min-height:40px}.ppb-tag-item{display:flex;align-items:center;gap:var(--size-4-1);padding:var(--size-4-1) var(--size-4-2);background:var(--interactive-accent);color:var(--text-on-accent);border-radius:var(--radius-s);font-size:var(--font-ui-smaller)}.ppb-tag-remove{background:transparent;border:none;color:var(--text-on-accent);cursor:pointer;padding:0 var(--size-4-1);font-size:var(--font-ui-medium);opacity:.7;transition:opacity .15s ease}.ppb-tag-remove:hover{opacity:1}.ppb-tags-empty{color:var(--text-muted);font-size:var(--font-ui-smaller);margin:0}.ppb-pomodoro-status-bar{font-family:var(--font-monospace, monospace);font-weight:500;transition:all .2s ease}.ppb-pomodoro-status-bar:hover{opacity:.8}.ppb-pomodoro-idle{color:var(--text-muted)}.ppb-pomodoro-running{color:var(--color-red);animation:ppb-pomodoro-pulse 2s infinite}.ppb-pomodoro-paused{color:var(--color-orange);opacity:.7}@keyframes ppb-pomodoro-pulse{0%,to{opacity:1}50%{opacity:.6}}.ppb-focus-button{position:relative;overflow:hidden}.ppb-focus-button:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s}.ppb-focus-button:hover:before{left:100%}.ppb-pomodoro-progress{position:relative;height:4px;background:var(--background-modifier-border);border-radius:2px;overflow:hidden}.ppb-pomodoro-progress-bar{height:100%;background:var(--interactive-accent);border-radius:2px;transition:width 1s ease}.ppb-pomodoro-progress-bar.work{background:var(--color-red)}.ppb-pomodoro-progress-bar.short-break{background:var(--color-green)}.ppb-pomodoro-progress-bar.long-break{background:var(--color-blue)}.ppb-session-indicator{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;border-radius:4px;font-size:.75em;font-weight:500}.ppb-session-indicator.work{background:rgba(var(--color-red-rgb),.1);color:var(--color-red)}.ppb-session-indicator.short-break{background:rgba(var(--color-green-rgb),.1);color:var(--color-green)}.ppb-session-indicator.long-break{background:rgba(var(--color-blue-rgb),.1);color:var(--color-blue)}.ppb-pomodoro-card{border:1px solid var(--background-modifier-border);border-radius:8px;padding:16px;background:var(--background-primary);transition:all .2s ease}.ppb-pomodoro-card:hover{border-color:var(--background-modifier-border-hover);box-shadow:0 2px 8px #0000001a}.ppb-pomodoro-card.active{border-color:var(--interactive-accent);box-shadow:0 0 0 1px var(--interactive-accent)}.ppb-pomodoro-time{font-family:var(--font-monospace, monospace);font-size:2em;font-weight:700;text-align:center;letter-spacing:.1em}.ppb-pomodoro-time.large{font-size:3em}.ppb-pomodoro-time.small{font-size:1.5em}.ppb-pomodoro-controls{display:flex;gap:8px;justify-content:center;align-items:center}.ppb-pomodoro-control-btn{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;border:1px solid var(--background-modifier-border);background:var(--background-primary);color:var(--text-normal);cursor:pointer;transition:all .2s ease}.ppb-pomodoro-control-btn:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover)}.ppb-pomodoro-control-btn.primary{background:var(--interactive-accent);color:var(--text-on-accent);border-color:var(--interactive-accent)}.ppb-pomodoro-control-btn.primary:hover{background:var(--interactive-accent-hover)}.ppb-pomodoro-control-btn:disabled{opacity:.5;cursor:not-allowed}.ppb-session-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(80px,1fr));gap:8px}.ppb-session-stat{text-align:center;padding:8px;border-radius:6px;background:var(--background-secondary)}.ppb-session-stat-value{font-size:1.2em;font-weight:600;color:var(--text-normal)}.ppb-session-stat-label{font-size:.8em;color:var(--text-muted);margin-top:2px}@media(max-width:768px){.ppb-pomodoro-time{font-size:1.8em}.ppb-pomodoro-time.large{font-size:2.5em}.ppb-pomodoro-controls{gap:6px}.ppb-pomodoro-control-btn{width:36px;height:36px}}.theme-dark .ppb-pomodoro-card{background:var(--background-primary-alt)}.theme-dark .ppb-pomodoro-progress{background:var(--background-modifier-border-focus)}@media(prefers-contrast:high){.ppb-pomodoro-status-bar{font-weight:700}.ppb-pomodoro-card{border-width:2px}.ppb-session-indicator{font-weight:700}}@media(prefers-reduced-motion:reduce){.ppb-pomodoro-running{animation:none}.ppb-focus-button:before{transition:none}.ppb-pomodoro-progress-bar{transition:none}*{transition:none!important}}.agent-output-shadow{height:100%}.agent-output-workspace{height:100%;overflow:hidden}.agent-panel{display:flex;height:100%;background:var(--background-primary);color:var(--text-normal);outline:none}.agent-panel-empty{justify-content:center;align-items:center}.agent-empty-message{text-align:center;color:var(--text-muted);padding:24px}.agent-empty-icon{font-size:2.5em;margin-bottom:12px;opacity:.6}.agent-empty-hint{font-size:.85em;color:var(--text-faint);margin-top:4px}.agent-panel-sidebar{width:220px;min-width:180px;border-right:1px solid var(--background-modifier-border);display:flex;flex-direction:column;overflow:hidden;background:var(--background-secondary);transition:width .2s ease,min-width .2s ease}.agent-sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--background-modifier-border);font-weight:600;font-size:.85em;gap:6px}.agent-sidebar-title{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;flex:1}.agent-sidebar-btn{background:none;border:none;color:var(--text-muted);cursor:pointer;padding:2px 6px;border-radius:4px;font-size:.85em;transition:background .15s,color .15s}.agent-sidebar-btn:hover{background:var(--background-modifier-hover);color:var(--text-normal)}.agent-sidebar-list{overflow-y:auto;flex:1}.agent-sidebar-list::-webkit-scrollbar{width:4px}.agent-sidebar-list::-webkit-scrollbar-thumb{background:var(--background-modifier-border);border-radius:2px}.agent-sidebar-list::-webkit-scrollbar-thumb:hover{background:var(--text-faint)}.agent-run-item{padding:8px 12px;cursor:pointer;border-bottom:1px solid var(--background-modifier-border-hover);border-left:3px solid transparent;transition:background .15s,border-color .15s}.agent-run-item:hover{background:var(--background-modifier-hover)}.agent-run-item.is-selected{background:var(--background-primary);border-left-color:var(--text-accent)}.agent-run-item-header{display:flex;align-items:center;gap:6px;margin-bottom:2px}.agent-run-name{font-size:.85em;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-run-item-meta{display:flex;align-items:center;gap:6px;font-size:.75em;color:var(--text-faint);padding-left:14px}.agent-run-file{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-run-event{padding:1px 4px;border-radius:3px;background:var(--background-modifier-hover);font-size:.9em}.agent-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.agent-status-running{background:var(--text-accent);animation:agent-pulse 1.5s infinite}.agent-status-completed{background:var(--text-success, #4caf50)}.agent-status-failed{background:var(--text-error)}.agent-status-queued{background:var(--text-muted)}.agent-status-cancelled{background:var(--text-faint)}.agent-status-pending{background:var(--text-warning, #ff9800);animation:agent-pulse 1.5s infinite}@keyframes agent-pulse{0%,to{opacity:1}50%{opacity:.4}}.agent-status-badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:.75em;font-weight:600;white-space:nowrap}.agent-status-badge.agent-status-running{background:rgba(var(--color-accent-rgb, 0, 122, 255),.15);color:var(--text-accent)}.agent-status-badge.agent-status-completed{background:#4caf5026;color:var(--text-success, #4caf50)}.agent-status-badge.agent-status-failed{background:#f4433626;color:var(--text-error)}.agent-status-badge.agent-status-queued{background:var(--background-modifier-hover);color:var(--text-muted)}.agent-status-badge.agent-status-cancelled{background:var(--background-modifier-hover);color:var(--text-faint)}.agent-status-badge.agent-status-pending{background:#ff980026;color:var(--text-warning, #ff9800)}.agent-panel-main{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.agent-panel-placeholder{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-muted);font-size:.9em}.agent-panel-toolbar{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;border-bottom:1px solid var(--background-modifier-border);gap:8px;flex-wrap:wrap;background:var(--background-primary)}.agent-toolbar-left{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.agent-toolbar-agent{font-size:.8em;color:var(--text-muted);padding:1px 6px;background:var(--background-modifier-hover);border-radius:4px}.agent-toolbar-file{font-size:.8em;color:var(--text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-toolbar-duration{font-size:.8em;color:var(--text-muted);font-variant-numeric:tabular-nums}.agent-toolbar-right{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.agent-toolbar-btn{background:none;border:1px solid var(--background-modifier-border);color:var(--text-muted);cursor:pointer;padding:2px 8px;border-radius:4px;font-size:.8em;transition:background .15s,color .15s,border-color .15s;white-space:nowrap}.agent-toolbar-btn:hover{background:var(--background-modifier-hover);color:var(--text-normal)}.agent-toolbar-btn.is-active{background:rgba(var(--color-accent-rgb, 0, 122, 255),.1);border-color:var(--text-accent);color:var(--text-accent)}.agent-rerun-btn{color:var(--text-accent);border-color:var(--text-accent)}.agent-rerun-btn:hover{background:rgba(var(--color-accent-rgb, 0, 122, 255),.1)}.agent-autoscroll-toggle{display:flex;align-items:center;gap:4px;font-size:.8em;color:var(--text-muted);cursor:pointer}.agent-autoscroll-toggle input{margin:0}.agent-cancel-btn{background:var(--text-error);color:#fff;border:none;padding:3px 10px;border-radius:4px;font-size:.8em;cursor:pointer;font-weight:500;transition:opacity .15s}.agent-cancel-btn:hover{opacity:.85}.agent-search-input{background:var(--background-primary-alt);border:1px solid var(--background-modifier-border);border-radius:4px;padding:2px 8px;font-size:.8em;color:var(--text-normal);width:140px;transition:border-color .15s,width .2s ease}.agent-search-input:focus{border-color:var(--text-accent);outline:none;width:180px}.agent-search-input::placeholder{color:var(--text-faint)}.agent-output-terminal{font-family:var(--font-monospace);font-size:13px;line-height:1.5;padding:12px;background:var(--background-primary-alt);overflow-y:auto;flex:1;white-space:pre-wrap;word-break:break-all}.agent-output-terminal::-webkit-scrollbar{width:6px}.agent-output-terminal::-webkit-scrollbar-track{background:transparent}.agent-output-terminal::-webkit-scrollbar-thumb{background:var(--background-modifier-border);border-radius:3px}.agent-output-terminal::-webkit-scrollbar-thumb:hover{background:var(--text-faint)}.agent-line{display:flex;min-height:1.5em;padding:0 4px;border-radius:2px;transition:background .1s}.agent-line:hover{background:rgba(var(--color-accent-rgb, 0, 122, 255),.04)}.agent-line-stderr{color:var(--text-error)}.agent-line-error{color:var(--text-error);font-weight:600;margin-top:8px;padding-top:8px;border-top:1px solid var(--background-modifier-border)}.agent-line-done{color:var(--text-success, #4caf50);margin-top:8px;padding-top:8px;border-top:1px solid var(--background-modifier-border)}.agent-line-pending{color:var(--text-warning, #ff9800);font-style:italic}.agent-line-ts{color:var(--text-faint);font-size:.8em;margin-right:8px;-webkit-user-select:none;user-select:none;flex-shrink:0;opacity:.7}.agent-cursor{animation:agent-blink 1s step-end infinite;color:var(--text-accent)}@keyframes agent-blink{0%,to{opacity:1}50%{opacity:0}}.agent-panel-sidebar.is-collapsed{width:40px;min-width:40px}.agent-panel-sidebar.is-collapsed .agent-sidebar-title,.agent-panel-sidebar.is-collapsed .agent-run-name,.agent-panel-sidebar.is-collapsed .agent-run-item-meta{display:none}.agent-panel-sidebar.is-collapsed .agent-run-item{padding:8px 4px;display:flex;justify-content:center;border-left-width:0}.agent-panel-sidebar.is-collapsed .agent-run-item-header{margin-bottom:0}.agent-panel-sidebar.is-collapsed .agent-sidebar-header{justify-content:center;padding:8px 4px}.agent-output-terminal.agent-no-wrap{white-space:pre;overflow-x:auto;word-break:normal}.agent-input-bar{display:flex;align-items:flex-end;gap:8px;padding:8px 12px;border-top:1px solid var(--background-modifier-border);background:var(--background-primary)}.agent-input-textarea{flex:1;min-height:36px;max-height:120px;padding:8px 12px;border:1px solid var(--background-modifier-border);border-radius:8px;background:var(--background-primary-alt);color:var(--text-normal);font-family:var(--font-interface);font-size:.9em;line-height:1.4;resize:none;overflow-y:auto;transition:border-color .15s}.agent-input-textarea:focus{border-color:var(--text-accent);outline:none}.agent-input-textarea::placeholder{color:var(--text-faint)}.agent-input-send{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:8px;background:var(--interactive-accent);color:var(--text-on-accent);cursor:pointer;flex-shrink:0;transition:opacity .15s}.agent-input-send:hover{opacity:.85}.agent-input-send:disabled{opacity:.4;cursor:default}.agent-empty-input-container{display:flex;flex-direction:column;align-items:center;gap:16px;width:100%;max-width:560px;padding:24px}.agent-empty-input-container p{color:var(--text-muted);font-size:.9em}.agent-empty-input-container .agent-input-bar{width:100%;border-top:none;padding:0}.agent-confirm-detail{font-size:.85em;color:var(--text-muted);margin:4px 0}.agent-confirm-buttons{display:flex;gap:8px;margin-top:8px}.agent-confirm-buttons button{padding:4px 12px;border-radius:4px;cursor:pointer;font-size:.85em} diff --git a/PaperBell/.obsidian/plugins/realclaudian/data.json b/PaperBell/.obsidian/plugins/realclaudian/data.json new file mode 100644 index 00000000..6d279ef8 --- /dev/null +++ b/PaperBell/.obsidian/plugins/realclaudian/data.json @@ -0,0 +1,12 @@ +{ + "tabManagerState": { + "openTabs": [ + { + "draftModel": "haiku", + "tabId": "tab-1780755174786-c9kbxdu", + "conversationId": null + } + ], + "activeTabId": "tab-1780755174786-c9kbxdu" + } +} \ No newline at end of file diff --git a/PaperBell/.obsidian/plugins/realclaudian/main.js b/PaperBell/.obsidian/plugins/realclaudian/main.js new file mode 100644 index 00000000..48dadac4 --- /dev/null +++ b/PaperBell/.obsidian/plugins/realclaudian/main.js @@ -0,0 +1,104023 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __typeError = (msg) => { + throw TypeError(msg); +}; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; +}; +var __commonJS = (cb2, mod) => function __require() { + return mod || (0, cb2[__getOwnPropNames(cb2)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); +var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); +var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); +var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value); +var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method); +var __privateWrapper = (obj, member, setter, getter) => ({ + set _(value) { + __privateSet(obj, member, value, setter); + }, + get _() { + return __privateGet(obj, member, getter); + } +}); + +// src/utils/path.ts +function getVaultPath(app) { + var _a5; + const basePath = (_a5 = app.vault.adapter) == null ? void 0 : _a5.basePath; + return typeof basePath === "string" ? basePath : null; +} +function getEnvValue(key) { + const hasKey = (name) => name in process.env && process.env[name] !== void 0; + if (hasKey(key)) { + return process.env[key]; + } + if (process.platform !== "win32") { + return void 0; + } + const upper = key.toUpperCase(); + if (hasKey(upper)) { + return process.env[upper]; + } + const lower = key.toLowerCase(); + if (hasKey(lower)) { + return process.env[lower]; + } + const matchKey = Object.keys(process.env).find((name) => name.toLowerCase() === key.toLowerCase()); + return matchKey ? process.env[matchKey] : void 0; +} +function expandEnvironmentVariables(value) { + if (!value.includes("%") && !value.includes("$") && !value.includes("!")) { + return value; + } + const isWindows2 = process.platform === "win32"; + let expanded = value; + expanded = expanded.replace(/%([A-Za-z_][A-Za-z0-9_]*(?:\([A-Za-z0-9_]+\))?[A-Za-z0-9_]*)%/g, (match, name) => { + const envValue = getEnvValue(name); + return envValue !== void 0 ? envValue : match; + }); + if (isWindows2) { + expanded = expanded.replace(/!([A-Za-z_][A-Za-z0-9_]*)!/g, (match, name) => { + const envValue = getEnvValue(name); + return envValue !== void 0 ? envValue : match; + }); + expanded = expanded.replace(/\$env:([A-Za-z_][A-Za-z0-9_]*)/gi, (match, name) => { + const envValue = getEnvValue(name); + return envValue !== void 0 ? envValue : match; + }); + } + expanded = expanded.replace(/\$([A-Za-z_][A-Za-z0-9_]*)|\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g, (match, name1, name2) => { + const key = name1 != null ? name1 : name2; + if (!key) return match; + const envValue = getEnvValue(key); + return envValue !== void 0 ? envValue : match; + }); + return expanded; +} +function expandHomePath(p) { + const expanded = expandEnvironmentVariables(p); + if (expanded === "~") { + return os2.homedir(); + } + if (expanded.startsWith("~/")) { + return path2.join(os2.homedir(), expanded.slice(2)); + } + if (expanded.startsWith("~\\")) { + return path2.join(os2.homedir(), expanded.slice(2)); + } + return expanded; +} +function stripSurroundingQuotes(value) { + if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) { + return value.slice(1, -1); + } + return value; +} +function parsePathEntries(pathValue) { + if (!pathValue) { + return []; + } + const delimiter = process.platform === "win32" ? ";" : ":"; + return pathValue.split(delimiter).map((segment) => stripSurroundingQuotes(segment.trim())).filter((segment) => { + if (!segment) return false; + const upper = segment.toUpperCase(); + return upper !== "$PATH" && upper !== "${PATH}" && upper !== "%PATH%"; + }).map((segment) => translateMsysPath(expandHomePath(segment))); +} +function isNvmBuiltInLatestAlias(alias) { + return NVM_LATEST_INSTALLED_ALIASES.has(alias); +} +function findMatchingNvmVersion(entries, resolvedAlias) { + if (isNvmBuiltInLatestAlias(resolvedAlias)) { + return entries[0]; + } + const version2 = resolvedAlias.replace(/^v/, ""); + return entries.find((entry) => { + const entryVersion = entry.slice(1); + return entryVersion === version2 || entryVersion.startsWith(version2 + "."); + }); +} +function resolveNvmAlias(nvmDir, alias, depth = 0) { + if (depth > 5) return null; + if (/^\d/.test(alias) || alias.startsWith("v")) return alias; + if (isNvmBuiltInLatestAlias(alias)) return alias; + try { + const aliasFile = path2.join(nvmDir, "alias", ...alias.split("/")); + const target = fs2.readFileSync(aliasFile, "utf8").trim(); + if (!target) return null; + return resolveNvmAlias(nvmDir, target, depth + 1); + } catch (e2) { + return null; + } +} +function resolveNvmDefaultBin(home) { + const nvmDir = process.env.NVM_DIR || path2.join(home, ".nvm"); + try { + const alias = fs2.readFileSync(path2.join(nvmDir, "alias", "default"), "utf8").trim(); + if (!alias) return null; + const resolved = resolveNvmAlias(nvmDir, alias); + if (!resolved) return null; + const versionsDir = path2.join(nvmDir, "versions", "node"); + const entries = fs2.readdirSync(versionsDir).filter((entry) => entry.startsWith("v")).sort((a, b2) => b2.localeCompare(a, void 0, { numeric: true })); + const matched = findMatchingNvmVersion(entries, resolved); + if (matched) { + const binDir = path2.join(versionsDir, matched, "bin"); + if (fs2.existsSync(binDir)) return binDir; + } + } catch (e2) { + } + return null; +} +function resolveRealPath(p) { + var _a5; + const realpathFn = (_a5 = fs2.realpathSync.native) != null ? _a5 : fs2.realpathSync; + try { + return realpathFn(p); + } catch (e2) { + const absolute = path2.resolve(p); + let current = absolute; + const suffix = []; + for (; ; ) { + try { + if (fs2.existsSync(current)) { + const resolvedExisting = realpathFn(current); + return suffix.length > 0 ? path2.join(resolvedExisting, ...suffix.reverse()) : resolvedExisting; + } + } catch (e4) { + } + const parent = path2.dirname(current); + if (parent === current) { + return absolute; + } + suffix.push(path2.basename(current)); + current = parent; + } + } +} +function translateMsysPath(value) { + var _a5; + if (process.platform !== "win32") { + return value; + } + const msysMatch = value.match(/^\/([a-zA-Z])(\/.*)?$/); + if (msysMatch) { + const driveLetter = msysMatch[1].toUpperCase(); + const restOfPath = (_a5 = msysMatch[2]) != null ? _a5 : ""; + return `${driveLetter}:${restOfPath.replace(/\//g, "\\")}`; + } + return value; +} +function normalizePathBeforeResolution(p) { + const expanded = expandHomePath(p); + return translateMsysPath(expanded); +} +function normalizeWindowsPathPrefix(value) { + if (process.platform !== "win32") { + return value; + } + const normalized = translateMsysPath(value); + if (normalized.startsWith("\\\\?\\UNC\\")) { + return `\\\\${normalized.slice("\\\\?\\UNC\\".length)}`; + } + if (normalized.startsWith("\\\\?\\")) { + return normalized.slice("\\\\?\\".length); + } + return normalized; +} +function normalizePathForFilesystem(value) { + if (!value || typeof value !== "string") { + return ""; + } + const expanded = normalizePathBeforeResolution(value); + const normalized = (() => { + try { + return process.platform === "win32" ? path2.win32.normalize(expanded) : path2.normalize(expanded); + } catch (e2) { + return expanded; + } + })(); + return normalizeWindowsPathPrefix(normalized); +} +function normalizePathForComparison(value) { + if (!value || typeof value !== "string") { + return ""; + } + const expanded = normalizePathBeforeResolution(value); + const normalized = (() => { + try { + return process.platform === "win32" ? path2.win32.normalize(expanded) : path2.normalize(expanded); + } catch (e2) { + return expanded; + } + })(); + const normalizedWithPrefix = normalizeWindowsPathPrefix(normalized).replace(/\\/g, "/").replace(/\/+$/, ""); + return process.platform === "win32" ? normalizedWithPrefix.toLowerCase() : normalizedWithPrefix; +} +function isPathWithinDirectory(candidatePath, directoryPath, relativeBasePath) { + if (!candidatePath || !directoryPath) { + return false; + } + const directoryReal = normalizePathForComparison(resolveRealPath(directoryPath)); + const normalizedCandidate = normalizePathForFilesystem(candidatePath); + if (!normalizedCandidate) { + return false; + } + const absCandidate = path2.isAbsolute(normalizedCandidate) ? normalizedCandidate : path2.resolve(relativeBasePath != null ? relativeBasePath : directoryPath, normalizedCandidate); + const resolvedCandidate = normalizePathForComparison(resolveRealPath(absCandidate)); + return resolvedCandidate === directoryReal || resolvedCandidate.startsWith(directoryReal + "/"); +} +function isPathWithinVault(candidatePath, vaultPath) { + return isPathWithinDirectory(candidatePath, vaultPath, vaultPath); +} +function normalizePathForVault(rawPath, vaultPath) { + if (!rawPath) return null; + const normalizedRaw = normalizePathForFilesystem(rawPath); + if (!normalizedRaw) return null; + if (vaultPath && isPathWithinVault(normalizedRaw, vaultPath)) { + const absolute = path2.isAbsolute(normalizedRaw) ? normalizedRaw : path2.resolve(vaultPath, normalizedRaw); + const relative4 = path2.relative(vaultPath, absolute); + return relative4 ? relative4.replace(/\\/g, "/") : null; + } + return normalizedRaw.replace(/\\/g, "/"); +} +var fs2, os2, path2, NVM_LATEST_INSTALLED_ALIASES; +var init_path = __esm({ + "src/utils/path.ts"() { + fs2 = __toESM(require("fs")); + os2 = __toESM(require("os")); + path2 = __toESM(require("path")); + NVM_LATEST_INSTALLED_ALIASES = /* @__PURE__ */ new Set(["node", "stable"]); + } +}); + +// src/utils/env.ts +var env_exports = {}; +__export(env_exports, { + MAX_CONTEXT_LIMIT: () => MAX_CONTEXT_LIMIT, + MIN_CONTEXT_LIMIT: () => MIN_CONTEXT_LIMIT, + cliPathRequiresNode: () => cliPathRequiresNode, + findNodeDirectory: () => findNodeDirectory, + findNodeExecutable: () => findNodeExecutable, + formatContextLimit: () => formatContextLimit, + getEnhancedPath: () => getEnhancedPath, + getHostnameKey: () => getHostnameKey, + getLegacyHostnameKey: () => getLegacyHostnameKey, + getMissingNodeError: () => getMissingNodeError, + migrateLegacyHostnameKeyedMap: () => migrateLegacyHostnameKeyedMap, + parseContextLimit: () => parseContextLimit, + parseEnvironmentVariables: () => parseEnvironmentVariables +}); +function getHomeDir() { + return process.env.HOME || process.env.USERPROFILE || ""; +} +function getAppProvidedCliPaths() { + if (process.platform === "darwin") { + const appBundleMatch = process.execPath.match(/^(.+?\.app)\//); + if (appBundleMatch) { + return [path4.join(appBundleMatch[1], "Contents", "MacOS")]; + } + return [path4.dirname(process.execPath)]; + } + if (process.platform === "win32") { + return [path4.dirname(process.execPath)]; + } + return []; +} +function getExtraBinaryPaths() { + const home = getHomeDir(); + if (isWindows) { + const paths = []; + const localAppData = process.env.LOCALAPPDATA; + const appData = process.env.APPDATA; + const programFiles = process.env.ProgramFiles || "C:\\Program Files"; + const programFilesX86 = process.env["ProgramFiles(x86)"] || "C:\\Program Files (x86)"; + const programData = process.env.ProgramData || "C:\\ProgramData"; + if (appData) { + paths.push(path4.join(appData, "npm")); + } + if (localAppData) { + paths.push(path4.join(localAppData, "Programs", "nodejs")); + paths.push(path4.join(localAppData, "Programs", "node")); + } + paths.push(path4.join(programFiles, "nodejs")); + paths.push(path4.join(programFilesX86, "nodejs")); + const nvmSymlink = process.env.NVM_SYMLINK; + if (nvmSymlink) { + paths.push(nvmSymlink); + } + const nvmHome = process.env.NVM_HOME; + if (nvmHome) { + paths.push(nvmHome); + } else if (appData) { + paths.push(path4.join(appData, "nvm")); + } + const voltaHome = process.env.VOLTA_HOME; + if (voltaHome) { + paths.push(path4.join(voltaHome, "bin")); + } else if (home) { + paths.push(path4.join(home, ".volta", "bin")); + } + const fnmMultishell = process.env.FNM_MULTISHELL_PATH; + if (fnmMultishell) { + paths.push(fnmMultishell); + } + const fnmDir = process.env.FNM_DIR; + if (fnmDir) { + paths.push(fnmDir); + } else if (localAppData) { + paths.push(path4.join(localAppData, "fnm")); + } + const chocolateyInstall = process.env.ChocolateyInstall; + if (chocolateyInstall) { + paths.push(path4.join(chocolateyInstall, "bin")); + } else { + paths.push(path4.join(programData, "chocolatey", "bin")); + } + const scoopDir = process.env.SCOOP; + if (scoopDir) { + paths.push(path4.join(scoopDir, "shims")); + paths.push(path4.join(scoopDir, "apps", "nodejs", "current", "bin")); + paths.push(path4.join(scoopDir, "apps", "nodejs", "current")); + } else if (home) { + paths.push(path4.join(home, "scoop", "shims")); + paths.push(path4.join(home, "scoop", "apps", "nodejs", "current", "bin")); + paths.push(path4.join(home, "scoop", "apps", "nodejs", "current")); + } + paths.push(path4.join(programFiles, "Docker", "Docker", "resources", "bin")); + if (home) { + paths.push(path4.join(home, ".local", "bin")); + paths.push(path4.join(home, ".bun", "bin")); + paths.push(path4.join(home, ".opencode", "bin")); + } + paths.push(...getAppProvidedCliPaths()); + return paths; + } else { + const paths = [ + "/usr/local/bin", + "/opt/homebrew/bin", + // macOS ARM Homebrew + "/usr/bin", + "/bin" + ]; + const voltaHome = process.env.VOLTA_HOME; + if (voltaHome) { + paths.push(path4.join(voltaHome, "bin")); + } + const asdfRoot = process.env.ASDF_DATA_DIR || process.env.ASDF_DIR; + if (asdfRoot) { + paths.push(path4.join(asdfRoot, "shims")); + paths.push(path4.join(asdfRoot, "bin")); + } + const fnmMultishell = process.env.FNM_MULTISHELL_PATH; + if (fnmMultishell) { + paths.push(fnmMultishell); + } + const fnmDir = process.env.FNM_DIR; + if (fnmDir) { + paths.push(fnmDir); + } + if (home) { + paths.push(path4.join(home, ".local", "bin")); + paths.push(path4.join(home, ".bun", "bin")); + paths.push(path4.join(home, ".opencode", "bin")); + paths.push(path4.join(home, ".docker", "bin")); + paths.push(path4.join(home, ".volta", "bin")); + paths.push(path4.join(home, ".asdf", "shims")); + paths.push(path4.join(home, ".asdf", "bin")); + paths.push(path4.join(home, ".fnm")); + const nvmBin = process.env.NVM_BIN; + if (nvmBin) { + paths.push(nvmBin); + } else { + const nvmDefault = resolveNvmDefaultBin(home); + if (nvmDefault) { + paths.push(nvmDefault); + } + } + } + paths.push(...getAppProvidedCliPaths()); + return paths; + } +} +function findNodeDirectory(additionalPaths) { + const searchPaths = getExtraBinaryPaths(); + const currentPath = process.env.PATH || ""; + const pathDirs = parsePathEntries(currentPath); + const additionalDirs = additionalPaths ? parsePathEntries(additionalPaths) : []; + const allPaths = [...additionalDirs, ...searchPaths, ...pathDirs]; + for (const dir of allPaths) { + if (!dir) continue; + try { + const nodePath2 = path4.join(dir, NODE_EXECUTABLE); + if (fs4.existsSync(nodePath2)) { + const stat = fs4.statSync(nodePath2); + if (stat.isFile()) { + return dir; + } + } + } catch (e2) { + } + } + return null; +} +function findNodeExecutable(additionalPaths) { + const nodeDir = findNodeDirectory(additionalPaths); + if (nodeDir) { + return path4.join(nodeDir, NODE_EXECUTABLE); + } + return null; +} +function cliPathRequiresNode(cliPath) { + const jsExtensions = [".js", ".mjs", ".cjs", ".ts", ".tsx", ".jsx"]; + const lower = cliPath.toLowerCase(); + if (jsExtensions.some((ext) => lower.endsWith(ext))) { + return true; + } + try { + if (!fs4.existsSync(cliPath)) { + return false; + } + const stat = fs4.statSync(cliPath); + if (!stat.isFile()) { + return false; + } + let fd = null; + try { + fd = fs4.openSync(cliPath, "r"); + const buffer = Buffer.alloc(200); + const bytesRead = fs4.readSync(fd, buffer, 0, buffer.length, 0); + const header = buffer.subarray(0, bytesRead).toString("utf8"); + if (!header.startsWith("#!")) return false; + const shebangLine = header.split(/\r?\n/)[0].toLowerCase(); + return shebangLine.includes("node"); + } finally { + if (fd !== null) { + try { + fs4.closeSync(fd); + } catch (e2) { + } + } + } + } catch (e2) { + return false; + } +} +function getMissingNodeError(cliPath, enhancedPath) { + if (!cliPathRequiresNode(cliPath)) { + return null; + } + const nodePath2 = findNodeExecutable(enhancedPath); + if (nodePath2) { + return null; + } + return "Claude Code CLI requires Node.js, but Node was not found on PATH. Install Node.js or use the native Claude Code binary, then restart Obsidian."; +} +function getEnhancedPath(additionalPaths, cliPath) { + const extraPaths = getExtraBinaryPaths().filter((p) => p); + const currentPath = process.env.PATH || ""; + const segments = []; + if (additionalPaths) { + segments.push(...parsePathEntries(additionalPaths)); + } + let cliDirHasNode = false; + if (cliPath) { + try { + const cliDir = path4.dirname(cliPath); + const nodeInCliDir = path4.join(cliDir, NODE_EXECUTABLE); + if (fs4.existsSync(nodeInCliDir)) { + const stat = fs4.statSync(nodeInCliDir); + if (stat.isFile()) { + segments.push(cliDir); + cliDirHasNode = true; + } + } + } catch (e2) { + } + } + if (cliPath && cliPathRequiresNode(cliPath) && !cliDirHasNode) { + const nodeDir = findNodeDirectory(); + if (nodeDir) { + segments.push(nodeDir); + } + } + segments.push(...extraPaths); + if (currentPath) { + segments.push(...parsePathEntries(currentPath)); + } + const seen = /* @__PURE__ */ new Set(); + const unique = segments.filter((p) => { + const normalized = isWindows ? p.toLowerCase() : p; + if (seen.has(normalized)) return false; + seen.add(normalized); + return true; + }); + return unique.join(PATH_SEPARATOR); +} +function parseEnvironmentVariables(input) { + const result = {}; + for (const line of input.split(/\r?\n/)) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith("#")) continue; + const normalized = trimmed.startsWith("export ") ? trimmed.slice(7) : trimmed; + const eqIndex = normalized.indexOf("="); + if (eqIndex > 0) { + const key = normalized.substring(0, eqIndex).trim(); + let value = normalized.substring(eqIndex + 1).trim(); + if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) { + value = value.slice(1, -1); + } + if (key) { + result[key] = value; + } + } + } + return result; +} +function getDeviceSettingsStorage() { + try { + return typeof window === "undefined" ? null : window.localStorage; + } catch (e2) { + return null; + } +} +function createOpaqueDeviceSettingsKey() { + var _a5; + const cryptoApi = typeof window === "undefined" ? null : window.crypto; + const randomUUID3 = (_a5 = cryptoApi == null ? void 0 : cryptoApi.randomUUID) == null ? void 0 : _a5.call(cryptoApi); + if (randomUUID3) { + return `device:${randomUUID3}`; + } + if (cryptoApi == null ? void 0 : cryptoApi.getRandomValues) { + const randomBytes = new Uint8Array(16); + cryptoApi.getRandomValues(randomBytes); + const entropy2 = Array.from(randomBytes, (byte) => byte.toString(16).padStart(2, "0")).join(""); + return `device:${Date.now().toString(36)}:${entropy2}`; + } + const entropy = Math.random().toString(36).slice(2); + return `device:${Date.now().toString(36)}:${entropy}`; +} +function getHostnameKey() { + var _a5; + if (cachedDeviceSettingsKey) { + return cachedDeviceSettingsKey; + } + const storage = getDeviceSettingsStorage(); + const stored = (_a5 = storage == null ? void 0 : storage.getItem(DEVICE_SETTINGS_STORAGE_KEY)) == null ? void 0 : _a5.trim(); + if (stored) { + cachedDeviceSettingsKey = stored; + return cachedDeviceSettingsKey; + } + cachedDeviceSettingsKey = createOpaqueDeviceSettingsKey(); + try { + storage == null ? void 0 : storage.setItem(DEVICE_SETTINGS_STORAGE_KEY, cachedDeviceSettingsKey); + } catch (e2) { + } + return cachedDeviceSettingsKey; +} +function getLegacyHostnameKey() { + try { + return os4.hostname(); + } catch (e2) { + return ""; + } +} +function migrateLegacyHostnameKeyedMap(entries, currentKey, legacyHostnameKey) { + if (!currentKey || !legacyHostnameKey || currentKey === legacyHostnameKey) { + return entries; + } + const hasCurrentEntry = Object.prototype.hasOwnProperty.call(entries, currentKey); + const hasLegacyEntry = Object.prototype.hasOwnProperty.call(entries, legacyHostnameKey); + if (!hasLegacyEntry) { + return entries; + } + const migrated = { ...entries }; + if (!hasCurrentEntry) { + migrated[currentKey] = entries[legacyHostnameKey]; + } + delete migrated[legacyHostnameKey]; + return migrated; +} +function parseContextLimit(input) { + var _a5; + const trimmed = input.trim().toLowerCase().replace(/,/g, ""); + if (!trimmed) return null; + const match = trimmed.match(/^(\d+(?:\.\d+)?)\s*(k|m)?$/); + if (!match) return null; + const value = parseFloat(match[1]); + const suffix = match[2]; + if (isNaN(value) || value <= 0) return null; + const MULTIPLIERS = { k: 1e3, m: 1e6 }; + const multiplier = suffix ? (_a5 = MULTIPLIERS[suffix]) != null ? _a5 : 1 : 1; + const result = Math.round(value * multiplier); + if (result < MIN_CONTEXT_LIMIT || result > MAX_CONTEXT_LIMIT) return null; + return result; +} +function formatContextLimit(tokens) { + if (tokens >= 1e6 && tokens % 1e6 === 0) { + return `${tokens / 1e6}m`; + } + if (tokens >= 1e3 && tokens % 1e3 === 0) { + return `${tokens / 1e3}k`; + } + return tokens.toLocaleString(); +} +var fs4, os4, path4, isWindows, PATH_SEPARATOR, NODE_EXECUTABLE, DEVICE_SETTINGS_STORAGE_KEY, cachedDeviceSettingsKey, MIN_CONTEXT_LIMIT, MAX_CONTEXT_LIMIT; +var init_env = __esm({ + "src/utils/env.ts"() { + fs4 = __toESM(require("fs")); + os4 = __toESM(require("os")); + path4 = __toESM(require("path")); + init_path(); + isWindows = process.platform === "win32"; + PATH_SEPARATOR = isWindows ? ";" : ":"; + NODE_EXECUTABLE = isWindows ? "node.exe" : "node"; + DEVICE_SETTINGS_STORAGE_KEY = "claudian.deviceSettingsKey"; + cachedDeviceSettingsKey = null; + MIN_CONTEXT_LIMIT = 1e3; + MAX_CONTEXT_LIMIT = 1e7; + } +}); + +// node_modules/zod/v4/core/core.js +// @__NO_SIDE_EFFECTS__ +function $constructor(name, initializer3, params) { + var _a5; + function init(inst, def) { + if (!inst._zod) { + Object.defineProperty(inst, "_zod", { + value: { + def, + constr: _2, + traits: /* @__PURE__ */ new Set() + }, + enumerable: false + }); + } + if (inst._zod.traits.has(name)) { + return; + } + inst._zod.traits.add(name); + initializer3(inst, def); + const proto = _2.prototype; + const keys = Object.keys(proto); + for (let i = 0; i < keys.length; i++) { + const k2 = keys[i]; + if (!(k2 in inst)) { + inst[k2] = proto[k2].bind(inst); + } + } + } + const Parent = (_a5 = params == null ? void 0 : params.Parent) != null ? _a5 : Object; + class Definition extends Parent { + } + Object.defineProperty(Definition, "name", { value: name }); + function _2(def) { + var _a7; + var _a6; + const inst = (params == null ? void 0 : params.Parent) ? new Definition() : this; + init(inst, def); + (_a7 = (_a6 = inst._zod).deferred) != null ? _a7 : _a6.deferred = []; + for (const fn of inst._zod.deferred) { + fn(); + } + return inst; + } + Object.defineProperty(_2, "init", { value: init }); + Object.defineProperty(_2, Symbol.hasInstance, { + value: (inst) => { + var _a6, _b3; + if ((params == null ? void 0 : params.Parent) && inst instanceof params.Parent) + return true; + return (_b3 = (_a6 = inst == null ? void 0 : inst._zod) == null ? void 0 : _a6.traits) == null ? void 0 : _b3.has(name); + } + }); + Object.defineProperty(_2, "name", { value: name }); + return _2; +} +function config(newConfig) { + if (newConfig) + Object.assign(globalConfig, newConfig); + return globalConfig; +} +var NEVER, $brand, $ZodAsyncError, $ZodEncodeError, globalConfig; +var init_core = __esm({ + "node_modules/zod/v4/core/core.js"() { + NEVER = Object.freeze({ + status: "aborted" + }); + $brand = /* @__PURE__ */ Symbol("zod_brand"); + $ZodAsyncError = class extends Error { + constructor() { + super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`); + } + }; + $ZodEncodeError = class extends Error { + constructor(name) { + super(`Encountered unidirectional transform during encode: ${name}`); + this.name = "ZodEncodeError"; + } + }; + globalConfig = {}; + } +}); + +// node_modules/zod/v4/core/util.js +var util_exports = {}; +__export(util_exports, { + BIGINT_FORMAT_RANGES: () => BIGINT_FORMAT_RANGES, + Class: () => Class, + NUMBER_FORMAT_RANGES: () => NUMBER_FORMAT_RANGES, + aborted: () => aborted, + allowsEval: () => allowsEval, + assert: () => assert, + assertEqual: () => assertEqual, + assertIs: () => assertIs, + assertNever: () => assertNever, + assertNotEqual: () => assertNotEqual, + assignProp: () => assignProp, + base64ToUint8Array: () => base64ToUint8Array, + base64urlToUint8Array: () => base64urlToUint8Array, + cached: () => cached, + captureStackTrace: () => captureStackTrace, + cleanEnum: () => cleanEnum, + cleanRegex: () => cleanRegex, + clone: () => clone, + cloneDef: () => cloneDef, + createTransparentProxy: () => createTransparentProxy, + defineLazy: () => defineLazy, + esc: () => esc, + escapeRegex: () => escapeRegex, + extend: () => extend, + finalizeIssue: () => finalizeIssue, + floatSafeRemainder: () => floatSafeRemainder2, + getElementAtPath: () => getElementAtPath, + getEnumValues: () => getEnumValues, + getLengthableOrigin: () => getLengthableOrigin, + getParsedType: () => getParsedType2, + getSizableOrigin: () => getSizableOrigin, + hexToUint8Array: () => hexToUint8Array, + isObject: () => isObject, + isPlainObject: () => isPlainObject2, + issue: () => issue, + joinValues: () => joinValues, + jsonStringifyReplacer: () => jsonStringifyReplacer, + merge: () => merge, + mergeDefs: () => mergeDefs, + normalizeParams: () => normalizeParams, + nullish: () => nullish, + numKeys: () => numKeys, + objectClone: () => objectClone, + omit: () => omit, + optionalKeys: () => optionalKeys, + parsedType: () => parsedType, + partial: () => partial, + pick: () => pick, + prefixIssues: () => prefixIssues, + primitiveTypes: () => primitiveTypes, + promiseAllObject: () => promiseAllObject, + propertyKeyTypes: () => propertyKeyTypes, + randomString: () => randomString, + required: () => required, + safeExtend: () => safeExtend, + shallowClone: () => shallowClone, + slugify: () => slugify, + stringifyPrimitive: () => stringifyPrimitive, + uint8ArrayToBase64: () => uint8ArrayToBase64, + uint8ArrayToBase64url: () => uint8ArrayToBase64url, + uint8ArrayToHex: () => uint8ArrayToHex, + unwrapMessage: () => unwrapMessage +}); +function assertEqual(val) { + return val; +} +function assertNotEqual(val) { + return val; +} +function assertIs(_arg) { +} +function assertNever(_x2) { + throw new Error("Unexpected value in exhaustive check"); +} +function assert(_2) { +} +function getEnumValues(entries) { + const numericValues = Object.values(entries).filter((v2) => typeof v2 === "number"); + const values = Object.entries(entries).filter(([k2, _2]) => numericValues.indexOf(+k2) === -1).map(([_2, v2]) => v2); + return values; +} +function joinValues(array2, separator = "|") { + return array2.map((val) => stringifyPrimitive(val)).join(separator); +} +function jsonStringifyReplacer(_2, value) { + if (typeof value === "bigint") + return value.toString(); + return value; +} +function cached(getter) { + const set2 = false; + return { + get value() { + if (!set2) { + const value = getter(); + Object.defineProperty(this, "value", { value }); + return value; + } + throw new Error("cached value already set"); + } + }; +} +function nullish(input) { + return input === null || input === void 0; +} +function cleanRegex(source) { + const start = source.startsWith("^") ? 1 : 0; + const end = source.endsWith("$") ? source.length - 1 : source.length; + return source.slice(start, end); +} +function floatSafeRemainder2(val, step) { + const valDecCount = (val.toString().split(".")[1] || "").length; + const stepString = step.toString(); + let stepDecCount = (stepString.split(".")[1] || "").length; + if (stepDecCount === 0 && /\d?e-\d?/.test(stepString)) { + const match = stepString.match(/\d?e-(\d?)/); + if (match == null ? void 0 : match[1]) { + stepDecCount = Number.parseInt(match[1]); + } + } + const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount; + const valInt = Number.parseInt(val.toFixed(decCount).replace(".", "")); + const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", "")); + return valInt % stepInt / 10 ** decCount; +} +function defineLazy(object3, key, getter) { + let value = void 0; + Object.defineProperty(object3, key, { + get() { + if (value === EVALUATING) { + return void 0; + } + if (value === void 0) { + value = EVALUATING; + value = getter(); + } + return value; + }, + set(v2) { + Object.defineProperty(object3, key, { + value: v2 + // configurable: true, + }); + }, + configurable: true + }); +} +function objectClone(obj) { + return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj)); +} +function assignProp(target, prop, value) { + Object.defineProperty(target, prop, { + value, + writable: true, + enumerable: true, + configurable: true + }); +} +function mergeDefs(...defs) { + const mergedDescriptors = {}; + for (const def of defs) { + const descriptors = Object.getOwnPropertyDescriptors(def); + Object.assign(mergedDescriptors, descriptors); + } + return Object.defineProperties({}, mergedDescriptors); +} +function cloneDef(schema) { + return mergeDefs(schema._zod.def); +} +function getElementAtPath(obj, path27) { + if (!path27) + return obj; + return path27.reduce((acc, key) => acc == null ? void 0 : acc[key], obj); +} +function promiseAllObject(promisesObj) { + const keys = Object.keys(promisesObj); + const promises2 = keys.map((key) => promisesObj[key]); + return Promise.all(promises2).then((results) => { + const resolvedObj = {}; + for (let i = 0; i < keys.length; i++) { + resolvedObj[keys[i]] = results[i]; + } + return resolvedObj; + }); +} +function randomString(length = 10) { + const chars = "abcdefghijklmnopqrstuvwxyz"; + let str = ""; + for (let i = 0; i < length; i++) { + str += chars[Math.floor(Math.random() * chars.length)]; + } + return str; +} +function esc(str) { + return JSON.stringify(str); +} +function slugify(input) { + return input.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, ""); +} +function isObject(data) { + return typeof data === "object" && data !== null && !Array.isArray(data); +} +function isPlainObject2(o2) { + if (isObject(o2) === false) + return false; + const ctor = o2.constructor; + if (ctor === void 0) + return true; + if (typeof ctor !== "function") + return true; + const prot = ctor.prototype; + if (isObject(prot) === false) + return false; + if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) { + return false; + } + return true; +} +function shallowClone(o2) { + if (isPlainObject2(o2)) + return { ...o2 }; + if (Array.isArray(o2)) + return [...o2]; + return o2; +} +function numKeys(data) { + let keyCount = 0; + for (const key in data) { + if (Object.prototype.hasOwnProperty.call(data, key)) { + keyCount++; + } + } + return keyCount; +} +function escapeRegex(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} +function clone(inst, def, params) { + const cl2 = new inst._zod.constr(def != null ? def : inst._zod.def); + if (!def || (params == null ? void 0 : params.parent)) + cl2._zod.parent = inst; + return cl2; +} +function normalizeParams(_params) { + const params = _params; + if (!params) + return {}; + if (typeof params === "string") + return { error: () => params }; + if ((params == null ? void 0 : params.message) !== void 0) { + if ((params == null ? void 0 : params.error) !== void 0) + throw new Error("Cannot specify both `message` and `error` params"); + params.error = params.message; + } + delete params.message; + if (typeof params.error === "string") + return { ...params, error: () => params.error }; + return params; +} +function createTransparentProxy(getter) { + let target; + return new Proxy({}, { + get(_2, prop, receiver) { + target != null ? target : target = getter(); + return Reflect.get(target, prop, receiver); + }, + set(_2, prop, value, receiver) { + target != null ? target : target = getter(); + return Reflect.set(target, prop, value, receiver); + }, + has(_2, prop) { + target != null ? target : target = getter(); + return Reflect.has(target, prop); + }, + deleteProperty(_2, prop) { + target != null ? target : target = getter(); + return Reflect.deleteProperty(target, prop); + }, + ownKeys(_2) { + target != null ? target : target = getter(); + return Reflect.ownKeys(target); + }, + getOwnPropertyDescriptor(_2, prop) { + target != null ? target : target = getter(); + return Reflect.getOwnPropertyDescriptor(target, prop); + }, + defineProperty(_2, prop, descriptor) { + target != null ? target : target = getter(); + return Reflect.defineProperty(target, prop, descriptor); + } + }); +} +function stringifyPrimitive(value) { + if (typeof value === "bigint") + return value.toString() + "n"; + if (typeof value === "string") + return `"${value}"`; + return `${value}`; +} +function optionalKeys(shape) { + return Object.keys(shape).filter((k2) => { + return shape[k2]._zod.optin === "optional" && shape[k2]._zod.optout === "optional"; + }); +} +function pick(schema, mask) { + const currDef = schema._zod.def; + const checks = currDef.checks; + const hasChecks = checks && checks.length > 0; + if (hasChecks) { + throw new Error(".pick() cannot be used on object schemas containing refinements"); + } + const def = mergeDefs(schema._zod.def, { + get shape() { + const newShape = {}; + for (const key in mask) { + if (!(key in currDef.shape)) { + throw new Error(`Unrecognized key: "${key}"`); + } + if (!mask[key]) + continue; + newShape[key] = currDef.shape[key]; + } + assignProp(this, "shape", newShape); + return newShape; + }, + checks: [] + }); + return clone(schema, def); +} +function omit(schema, mask) { + const currDef = schema._zod.def; + const checks = currDef.checks; + const hasChecks = checks && checks.length > 0; + if (hasChecks) { + throw new Error(".omit() cannot be used on object schemas containing refinements"); + } + const def = mergeDefs(schema._zod.def, { + get shape() { + const newShape = { ...schema._zod.def.shape }; + for (const key in mask) { + if (!(key in currDef.shape)) { + throw new Error(`Unrecognized key: "${key}"`); + } + if (!mask[key]) + continue; + delete newShape[key]; + } + assignProp(this, "shape", newShape); + return newShape; + }, + checks: [] + }); + return clone(schema, def); +} +function extend(schema, shape) { + if (!isPlainObject2(shape)) { + throw new Error("Invalid input to extend: expected a plain object"); + } + const checks = schema._zod.def.checks; + const hasChecks = checks && checks.length > 0; + if (hasChecks) { + const existingShape = schema._zod.def.shape; + for (const key in shape) { + if (Object.getOwnPropertyDescriptor(existingShape, key) !== void 0) { + throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead."); + } + } + } + const def = mergeDefs(schema._zod.def, { + get shape() { + const _shape = { ...schema._zod.def.shape, ...shape }; + assignProp(this, "shape", _shape); + return _shape; + } + }); + return clone(schema, def); +} +function safeExtend(schema, shape) { + if (!isPlainObject2(shape)) { + throw new Error("Invalid input to safeExtend: expected a plain object"); + } + const def = mergeDefs(schema._zod.def, { + get shape() { + const _shape = { ...schema._zod.def.shape, ...shape }; + assignProp(this, "shape", _shape); + return _shape; + } + }); + return clone(schema, def); +} +function merge(a, b2) { + const def = mergeDefs(a._zod.def, { + get shape() { + const _shape = { ...a._zod.def.shape, ...b2._zod.def.shape }; + assignProp(this, "shape", _shape); + return _shape; + }, + get catchall() { + return b2._zod.def.catchall; + }, + checks: [] + // delete existing checks + }); + return clone(a, def); +} +function partial(Class2, schema, mask) { + const currDef = schema._zod.def; + const checks = currDef.checks; + const hasChecks = checks && checks.length > 0; + if (hasChecks) { + throw new Error(".partial() cannot be used on object schemas containing refinements"); + } + const def = mergeDefs(schema._zod.def, { + get shape() { + const oldShape = schema._zod.def.shape; + const shape = { ...oldShape }; + if (mask) { + for (const key in mask) { + if (!(key in oldShape)) { + throw new Error(`Unrecognized key: "${key}"`); + } + if (!mask[key]) + continue; + shape[key] = Class2 ? new Class2({ + type: "optional", + innerType: oldShape[key] + }) : oldShape[key]; + } + } else { + for (const key in oldShape) { + shape[key] = Class2 ? new Class2({ + type: "optional", + innerType: oldShape[key] + }) : oldShape[key]; + } + } + assignProp(this, "shape", shape); + return shape; + }, + checks: [] + }); + return clone(schema, def); +} +function required(Class2, schema, mask) { + const def = mergeDefs(schema._zod.def, { + get shape() { + const oldShape = schema._zod.def.shape; + const shape = { ...oldShape }; + if (mask) { + for (const key in mask) { + if (!(key in shape)) { + throw new Error(`Unrecognized key: "${key}"`); + } + if (!mask[key]) + continue; + shape[key] = new Class2({ + type: "nonoptional", + innerType: oldShape[key] + }); + } + } else { + for (const key in oldShape) { + shape[key] = new Class2({ + type: "nonoptional", + innerType: oldShape[key] + }); + } + } + assignProp(this, "shape", shape); + return shape; + } + }); + return clone(schema, def); +} +function aborted(x2, startIndex = 0) { + var _a5; + if (x2.aborted === true) + return true; + for (let i = startIndex; i < x2.issues.length; i++) { + if (((_a5 = x2.issues[i]) == null ? void 0 : _a5.continue) !== true) { + return true; + } + } + return false; +} +function prefixIssues(path27, issues) { + return issues.map((iss) => { + var _a6; + var _a5; + (_a6 = (_a5 = iss).path) != null ? _a6 : _a5.path = []; + iss.path.unshift(path27); + return iss; + }); +} +function unwrapMessage(message) { + return typeof message === "string" ? message : message == null ? void 0 : message.message; +} +function finalizeIssue(iss, ctx, config2) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3; + const full = { ...iss, path: (_a5 = iss.path) != null ? _a5 : [] }; + if (!iss.message) { + const message = (_k3 = (_j = (_h2 = (_f2 = unwrapMessage((_d = (_c2 = (_b3 = iss.inst) == null ? void 0 : _b3._zod.def) == null ? void 0 : _c2.error) == null ? void 0 : _d.call(_c2, iss))) != null ? _f2 : unwrapMessage((_e2 = ctx == null ? void 0 : ctx.error) == null ? void 0 : _e2.call(ctx, iss))) != null ? _h2 : unwrapMessage((_g = config2.customError) == null ? void 0 : _g.call(config2, iss))) != null ? _j : unwrapMessage((_i = config2.localeError) == null ? void 0 : _i.call(config2, iss))) != null ? _k3 : "Invalid input"; + full.message = message; + } + delete full.inst; + delete full.continue; + if (!(ctx == null ? void 0 : ctx.reportInput)) { + delete full.input; + } + return full; +} +function getSizableOrigin(input) { + if (input instanceof Set) + return "set"; + if (input instanceof Map) + return "map"; + if (input instanceof File) + return "file"; + return "unknown"; +} +function getLengthableOrigin(input) { + if (Array.isArray(input)) + return "array"; + if (typeof input === "string") + return "string"; + return "unknown"; +} +function parsedType(data) { + const t11 = typeof data; + switch (t11) { + case "number": { + return Number.isNaN(data) ? "nan" : "number"; + } + case "object": { + if (data === null) { + return "null"; + } + if (Array.isArray(data)) { + return "array"; + } + const obj = data; + if (obj && Object.getPrototypeOf(obj) !== Object.prototype && "constructor" in obj && obj.constructor) { + return obj.constructor.name; + } + } + } + return t11; +} +function issue(...args) { + const [iss, input, inst] = args; + if (typeof iss === "string") { + return { + message: iss, + code: "custom", + input, + inst + }; + } + return { ...iss }; +} +function cleanEnum(obj) { + return Object.entries(obj).filter(([k2, _2]) => { + return Number.isNaN(Number.parseInt(k2, 10)); + }).map((el2) => el2[1]); +} +function base64ToUint8Array(base643) { + const binaryString = atob(base643); + const bytes = new Uint8Array(binaryString.length); + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return bytes; +} +function uint8ArrayToBase64(bytes) { + let binaryString = ""; + for (let i = 0; i < bytes.length; i++) { + binaryString += String.fromCharCode(bytes[i]); + } + return btoa(binaryString); +} +function base64urlToUint8Array(base64url3) { + const base643 = base64url3.replace(/-/g, "+").replace(/_/g, "/"); + const padding = "=".repeat((4 - base643.length % 4) % 4); + return base64ToUint8Array(base643 + padding); +} +function uint8ArrayToBase64url(bytes) { + return uint8ArrayToBase64(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, ""); +} +function hexToUint8Array(hex3) { + const cleanHex = hex3.replace(/^0x/, ""); + if (cleanHex.length % 2 !== 0) { + throw new Error("Invalid hex string length"); + } + const bytes = new Uint8Array(cleanHex.length / 2); + for (let i = 0; i < cleanHex.length; i += 2) { + bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16); + } + return bytes; +} +function uint8ArrayToHex(bytes) { + return Array.from(bytes).map((b2) => b2.toString(16).padStart(2, "0")).join(""); +} +var EVALUATING, captureStackTrace, allowsEval, getParsedType2, propertyKeyTypes, primitiveTypes, NUMBER_FORMAT_RANGES, BIGINT_FORMAT_RANGES, Class; +var init_util = __esm({ + "node_modules/zod/v4/core/util.js"() { + EVALUATING = /* @__PURE__ */ Symbol("evaluating"); + captureStackTrace = "captureStackTrace" in Error ? Error.captureStackTrace : (..._args) => { + }; + allowsEval = cached(() => { + var _a5; + if (typeof navigator !== "undefined" && ((_a5 = navigator == null ? void 0 : navigator.userAgent) == null ? void 0 : _a5.includes("Cloudflare"))) { + return false; + } + try { + const F4 = Function; + new F4(""); + return true; + } catch (_2) { + return false; + } + }); + getParsedType2 = (data) => { + const t11 = typeof data; + switch (t11) { + case "undefined": + return "undefined"; + case "string": + return "string"; + case "number": + return Number.isNaN(data) ? "nan" : "number"; + case "boolean": + return "boolean"; + case "function": + return "function"; + case "bigint": + return "bigint"; + case "symbol": + return "symbol"; + case "object": + if (Array.isArray(data)) { + return "array"; + } + if (data === null) { + return "null"; + } + if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") { + return "promise"; + } + if (typeof Map !== "undefined" && data instanceof Map) { + return "map"; + } + if (typeof Set !== "undefined" && data instanceof Set) { + return "set"; + } + if (typeof Date !== "undefined" && data instanceof Date) { + return "date"; + } + if (typeof File !== "undefined" && data instanceof File) { + return "file"; + } + return "object"; + default: + throw new Error(`Unknown data type: ${t11}`); + } + }; + propertyKeyTypes = /* @__PURE__ */ new Set(["string", "number", "symbol"]); + primitiveTypes = /* @__PURE__ */ new Set(["string", "number", "bigint", "boolean", "symbol", "undefined"]); + NUMBER_FORMAT_RANGES = { + safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER], + int32: [-2147483648, 2147483647], + uint32: [0, 4294967295], + float32: [-34028234663852886e22, 34028234663852886e22], + float64: [-Number.MAX_VALUE, Number.MAX_VALUE] + }; + BIGINT_FORMAT_RANGES = { + int64: [/* @__PURE__ */ BigInt("-9223372036854775808"), /* @__PURE__ */ BigInt("9223372036854775807")], + uint64: [/* @__PURE__ */ BigInt(0), /* @__PURE__ */ BigInt("18446744073709551615")] + }; + Class = class { + constructor(..._args) { + } + }; + } +}); + +// node_modules/zod/v4/core/errors.js +function flattenError(error48, mapper = (issue2) => issue2.message) { + const fieldErrors = {}; + const formErrors = []; + for (const sub of error48.issues) { + if (sub.path.length > 0) { + fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || []; + fieldErrors[sub.path[0]].push(mapper(sub)); + } else { + formErrors.push(mapper(sub)); + } + } + return { formErrors, fieldErrors }; +} +function formatError(error48, mapper = (issue2) => issue2.message) { + const fieldErrors = { _errors: [] }; + const processError = (error49) => { + for (const issue2 of error49.issues) { + if (issue2.code === "invalid_union" && issue2.errors.length) { + issue2.errors.map((issues) => processError({ issues })); + } else if (issue2.code === "invalid_key") { + processError({ issues: issue2.issues }); + } else if (issue2.code === "invalid_element") { + processError({ issues: issue2.issues }); + } else if (issue2.path.length === 0) { + fieldErrors._errors.push(mapper(issue2)); + } else { + let curr = fieldErrors; + let i = 0; + while (i < issue2.path.length) { + const el2 = issue2.path[i]; + const terminal = i === issue2.path.length - 1; + if (!terminal) { + curr[el2] = curr[el2] || { _errors: [] }; + } else { + curr[el2] = curr[el2] || { _errors: [] }; + curr[el2]._errors.push(mapper(issue2)); + } + curr = curr[el2]; + i++; + } + } + } + }; + processError(error48); + return fieldErrors; +} +function treeifyError(error48, mapper = (issue2) => issue2.message) { + const result = { errors: [] }; + const processError = (error49, path27 = []) => { + var _a6, _b4, _c2, _d; + var _a5, _b3; + for (const issue2 of error49.issues) { + if (issue2.code === "invalid_union" && issue2.errors.length) { + issue2.errors.map((issues) => processError({ issues }, issue2.path)); + } else if (issue2.code === "invalid_key") { + processError({ issues: issue2.issues }, issue2.path); + } else if (issue2.code === "invalid_element") { + processError({ issues: issue2.issues }, issue2.path); + } else { + const fullpath = [...path27, ...issue2.path]; + if (fullpath.length === 0) { + result.errors.push(mapper(issue2)); + continue; + } + let curr = result; + let i = 0; + while (i < fullpath.length) { + const el2 = fullpath[i]; + const terminal = i === fullpath.length - 1; + if (typeof el2 === "string") { + (_a6 = curr.properties) != null ? _a6 : curr.properties = {}; + (_b4 = (_a5 = curr.properties)[el2]) != null ? _b4 : _a5[el2] = { errors: [] }; + curr = curr.properties[el2]; + } else { + (_c2 = curr.items) != null ? _c2 : curr.items = []; + (_d = (_b3 = curr.items)[el2]) != null ? _d : _b3[el2] = { errors: [] }; + curr = curr.items[el2]; + } + if (terminal) { + curr.errors.push(mapper(issue2)); + } + i++; + } + } + } + }; + processError(error48); + return result; +} +function toDotPath(_path) { + const segs = []; + const path27 = _path.map((seg) => typeof seg === "object" ? seg.key : seg); + for (const seg of path27) { + if (typeof seg === "number") + segs.push(`[${seg}]`); + else if (typeof seg === "symbol") + segs.push(`[${JSON.stringify(String(seg))}]`); + else if (/[^\w$]/.test(seg)) + segs.push(`[${JSON.stringify(seg)}]`); + else { + if (segs.length) + segs.push("."); + segs.push(seg); + } + } + return segs.join(""); +} +function prettifyError(error48) { + var _a5; + const lines = []; + const issues = [...error48.issues].sort((a, b2) => { + var _a6, _b3; + return ((_a6 = a.path) != null ? _a6 : []).length - ((_b3 = b2.path) != null ? _b3 : []).length; + }); + for (const issue2 of issues) { + lines.push(`\u2716 ${issue2.message}`); + if ((_a5 = issue2.path) == null ? void 0 : _a5.length) + lines.push(` \u2192 at ${toDotPath(issue2.path)}`); + } + return lines.join("\n"); +} +var initializer, $ZodError, $ZodRealError; +var init_errors = __esm({ + "node_modules/zod/v4/core/errors.js"() { + init_core(); + init_util(); + initializer = (inst, def) => { + inst.name = "$ZodError"; + Object.defineProperty(inst, "_zod", { + value: inst._zod, + enumerable: false + }); + Object.defineProperty(inst, "issues", { + value: def, + enumerable: false + }); + inst.message = JSON.stringify(def, jsonStringifyReplacer, 2); + Object.defineProperty(inst, "toString", { + value: () => inst.message, + enumerable: false + }); + }; + $ZodError = $constructor("$ZodError", initializer); + $ZodRealError = $constructor("$ZodError", initializer, { Parent: Error }); + } +}); + +// node_modules/zod/v4/core/parse.js +var _parse, parse, _parseAsync, parseAsync, _safeParse, safeParse, _safeParseAsync, safeParseAsync, _encode, encode, _decode, decode, _encodeAsync, encodeAsync, _decodeAsync, decodeAsync, _safeEncode, safeEncode, _safeDecode, safeDecode, _safeEncodeAsync, safeEncodeAsync, _safeDecodeAsync, safeDecodeAsync; +var init_parse = __esm({ + "node_modules/zod/v4/core/parse.js"() { + init_core(); + init_errors(); + init_util(); + _parse = (_Err) => (schema, value, _ctx, _params) => { + var _a5; + const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false }; + const result = schema._zod.run({ value, issues: [] }, ctx); + if (result instanceof Promise) { + throw new $ZodAsyncError(); + } + if (result.issues.length) { + const e2 = new ((_a5 = _params == null ? void 0 : _params.Err) != null ? _a5 : _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))); + captureStackTrace(e2, _params == null ? void 0 : _params.callee); + throw e2; + } + return result.value; + }; + parse = /* @__PURE__ */ _parse($ZodRealError); + _parseAsync = (_Err) => async (schema, value, _ctx, params) => { + var _a5; + const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true }; + let result = schema._zod.run({ value, issues: [] }, ctx); + if (result instanceof Promise) + result = await result; + if (result.issues.length) { + const e2 = new ((_a5 = params == null ? void 0 : params.Err) != null ? _a5 : _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))); + captureStackTrace(e2, params == null ? void 0 : params.callee); + throw e2; + } + return result.value; + }; + parseAsync = /* @__PURE__ */ _parseAsync($ZodRealError); + _safeParse = (_Err) => (schema, value, _ctx) => { + const ctx = _ctx ? { ..._ctx, async: false } : { async: false }; + const result = schema._zod.run({ value, issues: [] }, ctx); + if (result instanceof Promise) { + throw new $ZodAsyncError(); + } + return result.issues.length ? { + success: false, + error: new (_Err != null ? _Err : $ZodError)(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) + } : { success: true, data: result.value }; + }; + safeParse = /* @__PURE__ */ _safeParse($ZodRealError); + _safeParseAsync = (_Err) => async (schema, value, _ctx) => { + const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true }; + let result = schema._zod.run({ value, issues: [] }, ctx); + if (result instanceof Promise) + result = await result; + return result.issues.length ? { + success: false, + error: new _Err(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) + } : { success: true, data: result.value }; + }; + safeParseAsync = /* @__PURE__ */ _safeParseAsync($ZodRealError); + _encode = (_Err) => (schema, value, _ctx) => { + const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; + return _parse(_Err)(schema, value, ctx); + }; + encode = /* @__PURE__ */ _encode($ZodRealError); + _decode = (_Err) => (schema, value, _ctx) => { + return _parse(_Err)(schema, value, _ctx); + }; + decode = /* @__PURE__ */ _decode($ZodRealError); + _encodeAsync = (_Err) => async (schema, value, _ctx) => { + const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; + return _parseAsync(_Err)(schema, value, ctx); + }; + encodeAsync = /* @__PURE__ */ _encodeAsync($ZodRealError); + _decodeAsync = (_Err) => async (schema, value, _ctx) => { + return _parseAsync(_Err)(schema, value, _ctx); + }; + decodeAsync = /* @__PURE__ */ _decodeAsync($ZodRealError); + _safeEncode = (_Err) => (schema, value, _ctx) => { + const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; + return _safeParse(_Err)(schema, value, ctx); + }; + safeEncode = /* @__PURE__ */ _safeEncode($ZodRealError); + _safeDecode = (_Err) => (schema, value, _ctx) => { + return _safeParse(_Err)(schema, value, _ctx); + }; + safeDecode = /* @__PURE__ */ _safeDecode($ZodRealError); + _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => { + const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; + return _safeParseAsync(_Err)(schema, value, ctx); + }; + safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync($ZodRealError); + _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => { + return _safeParseAsync(_Err)(schema, value, _ctx); + }; + safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync($ZodRealError); + } +}); + +// node_modules/zod/v4/core/regexes.js +var regexes_exports = {}; +__export(regexes_exports, { + base64: () => base64, + base64url: () => base64url, + bigint: () => bigint, + boolean: () => boolean, + browserEmail: () => browserEmail, + cidrv4: () => cidrv4, + cidrv6: () => cidrv6, + cuid: () => cuid, + cuid2: () => cuid2, + date: () => date, + datetime: () => datetime, + domain: () => domain, + duration: () => duration, + e164: () => e164, + email: () => email, + emoji: () => emoji, + extendedDuration: () => extendedDuration, + guid: () => guid, + hex: () => hex, + hostname: () => hostname2, + html5Email: () => html5Email, + idnEmail: () => idnEmail, + integer: () => integer, + ipv4: () => ipv4, + ipv6: () => ipv6, + ksuid: () => ksuid, + lowercase: () => lowercase, + mac: () => mac, + md5_base64: () => md5_base64, + md5_base64url: () => md5_base64url, + md5_hex: () => md5_hex, + nanoid: () => nanoid, + null: () => _null, + number: () => number, + rfc5322Email: () => rfc5322Email, + sha1_base64: () => sha1_base64, + sha1_base64url: () => sha1_base64url, + sha1_hex: () => sha1_hex, + sha256_base64: () => sha256_base64, + sha256_base64url: () => sha256_base64url, + sha256_hex: () => sha256_hex, + sha384_base64: () => sha384_base64, + sha384_base64url: () => sha384_base64url, + sha384_hex: () => sha384_hex, + sha512_base64: () => sha512_base64, + sha512_base64url: () => sha512_base64url, + sha512_hex: () => sha512_hex, + string: () => string, + time: () => time, + ulid: () => ulid, + undefined: () => _undefined, + unicodeEmail: () => unicodeEmail, + uppercase: () => uppercase, + uuid: () => uuid, + uuid4: () => uuid4, + uuid6: () => uuid6, + uuid7: () => uuid7, + xid: () => xid +}); +function emoji() { + return new RegExp(_emoji, "u"); +} +function timeSource(args) { + const hhmm = `(?:[01]\\d|2[0-3]):[0-5]\\d`; + const regex = typeof args.precision === "number" ? args.precision === -1 ? `${hhmm}` : args.precision === 0 ? `${hhmm}:[0-5]\\d` : `${hhmm}:[0-5]\\d\\.\\d{${args.precision}}` : `${hhmm}(?::[0-5]\\d(?:\\.\\d+)?)?`; + return regex; +} +function time(args) { + return new RegExp(`^${timeSource(args)}$`); +} +function datetime(args) { + const time4 = timeSource({ precision: args.precision }); + const opts = ["Z"]; + if (args.local) + opts.push(""); + if (args.offset) + opts.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`); + const timeRegex2 = `${time4}(?:${opts.join("|")})`; + return new RegExp(`^${dateSource}T(?:${timeRegex2})$`); +} +function fixedBase64(bodyLength, padding) { + return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`); +} +function fixedBase64url(length) { + return new RegExp(`^[A-Za-z0-9_-]{${length}}$`); +} +var cuid, cuid2, ulid, xid, ksuid, nanoid, duration, extendedDuration, guid, uuid, uuid4, uuid6, uuid7, email, html5Email, rfc5322Email, unicodeEmail, idnEmail, browserEmail, _emoji, ipv4, ipv6, mac, cidrv4, cidrv6, base64, base64url, hostname2, domain, e164, dateSource, date, string, bigint, integer, number, boolean, _null, _undefined, lowercase, uppercase, hex, md5_hex, md5_base64, md5_base64url, sha1_hex, sha1_base64, sha1_base64url, sha256_hex, sha256_base64, sha256_base64url, sha384_hex, sha384_base64, sha384_base64url, sha512_hex, sha512_base64, sha512_base64url; +var init_regexes = __esm({ + "node_modules/zod/v4/core/regexes.js"() { + init_util(); + cuid = /^[cC][^\s-]{8,}$/; + cuid2 = /^[0-9a-z]+$/; + ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/; + xid = /^[0-9a-vA-V]{20}$/; + ksuid = /^[A-Za-z0-9]{27}$/; + nanoid = /^[a-zA-Z0-9_-]{21}$/; + duration = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/; + extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/; + guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/; + uuid = (version2) => { + if (!version2) + return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/; + return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version2}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`); + }; + uuid4 = /* @__PURE__ */ uuid(4); + uuid6 = /* @__PURE__ */ uuid(6); + uuid7 = /* @__PURE__ */ uuid(7); + email = /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/; + html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; + rfc5322Email = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + unicodeEmail = /^[^\s@"]{1,64}@[^\s@]{1,255}$/u; + idnEmail = unicodeEmail; + browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; + _emoji = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`; + ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/; + ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/; + mac = (delimiter) => { + const escapedDelim = escapeRegex(delimiter != null ? delimiter : ":"); + return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`); + }; + cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/; + cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/; + base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/; + base64url = /^[A-Za-z0-9_-]*$/; + hostname2 = /^(?=.{1,253}\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\.?$/; + domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/; + e164 = /^\+[1-9]\d{6,14}$/; + dateSource = `(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`; + date = /* @__PURE__ */ new RegExp(`^${dateSource}$`); + string = (params) => { + var _a5, _b3; + const regex = params ? `[\\s\\S]{${(_a5 = params == null ? void 0 : params.minimum) != null ? _a5 : 0},${(_b3 = params == null ? void 0 : params.maximum) != null ? _b3 : ""}}` : `[\\s\\S]*`; + return new RegExp(`^${regex}$`); + }; + bigint = /^-?\d+n?$/; + integer = /^-?\d+$/; + number = /^-?\d+(?:\.\d+)?$/; + boolean = /^(?:true|false)$/i; + _null = /^null$/i; + _undefined = /^undefined$/i; + lowercase = /^[^A-Z]*$/; + uppercase = /^[^a-z]*$/; + hex = /^[0-9a-fA-F]*$/; + md5_hex = /^[0-9a-fA-F]{32}$/; + md5_base64 = /* @__PURE__ */ fixedBase64(22, "=="); + md5_base64url = /* @__PURE__ */ fixedBase64url(22); + sha1_hex = /^[0-9a-fA-F]{40}$/; + sha1_base64 = /* @__PURE__ */ fixedBase64(27, "="); + sha1_base64url = /* @__PURE__ */ fixedBase64url(27); + sha256_hex = /^[0-9a-fA-F]{64}$/; + sha256_base64 = /* @__PURE__ */ fixedBase64(43, "="); + sha256_base64url = /* @__PURE__ */ fixedBase64url(43); + sha384_hex = /^[0-9a-fA-F]{96}$/; + sha384_base64 = /* @__PURE__ */ fixedBase64(64, ""); + sha384_base64url = /* @__PURE__ */ fixedBase64url(64); + sha512_hex = /^[0-9a-fA-F]{128}$/; + sha512_base64 = /* @__PURE__ */ fixedBase64(86, "=="); + sha512_base64url = /* @__PURE__ */ fixedBase64url(86); + } +}); + +// node_modules/zod/v4/core/checks.js +function handleCheckPropertyResult(result, payload, property) { + if (result.issues.length) { + payload.issues.push(...prefixIssues(property, result.issues)); + } +} +var $ZodCheck, numericOriginMap, $ZodCheckLessThan, $ZodCheckGreaterThan, $ZodCheckMultipleOf, $ZodCheckNumberFormat, $ZodCheckBigIntFormat, $ZodCheckMaxSize, $ZodCheckMinSize, $ZodCheckSizeEquals, $ZodCheckMaxLength, $ZodCheckMinLength, $ZodCheckLengthEquals, $ZodCheckStringFormat, $ZodCheckRegex, $ZodCheckLowerCase, $ZodCheckUpperCase, $ZodCheckIncludes, $ZodCheckStartsWith, $ZodCheckEndsWith, $ZodCheckProperty, $ZodCheckMimeType, $ZodCheckOverwrite; +var init_checks = __esm({ + "node_modules/zod/v4/core/checks.js"() { + init_core(); + init_regexes(); + init_util(); + $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => { + var _a6, _b3; + var _a5; + (_a6 = inst._zod) != null ? _a6 : inst._zod = {}; + inst._zod.def = def; + (_b3 = (_a5 = inst._zod).onattach) != null ? _b3 : _a5.onattach = []; + }); + numericOriginMap = { + number: "number", + bigint: "bigint", + object: "date" + }; + $ZodCheckLessThan = /* @__PURE__ */ $constructor("$ZodCheckLessThan", (inst, def) => { + $ZodCheck.init(inst, def); + const origin = numericOriginMap[typeof def.value]; + inst._zod.onattach.push((inst2) => { + var _a5; + const bag = inst2._zod.bag; + const curr = (_a5 = def.inclusive ? bag.maximum : bag.exclusiveMaximum) != null ? _a5 : Number.POSITIVE_INFINITY; + if (def.value < curr) { + if (def.inclusive) + bag.maximum = def.value; + else + bag.exclusiveMaximum = def.value; + } + }); + inst._zod.check = (payload) => { + if (def.inclusive ? payload.value <= def.value : payload.value < def.value) { + return; + } + payload.issues.push({ + origin, + code: "too_big", + maximum: typeof def.value === "object" ? def.value.getTime() : def.value, + input: payload.value, + inclusive: def.inclusive, + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckGreaterThan = /* @__PURE__ */ $constructor("$ZodCheckGreaterThan", (inst, def) => { + $ZodCheck.init(inst, def); + const origin = numericOriginMap[typeof def.value]; + inst._zod.onattach.push((inst2) => { + var _a5; + const bag = inst2._zod.bag; + const curr = (_a5 = def.inclusive ? bag.minimum : bag.exclusiveMinimum) != null ? _a5 : Number.NEGATIVE_INFINITY; + if (def.value > curr) { + if (def.inclusive) + bag.minimum = def.value; + else + bag.exclusiveMinimum = def.value; + } + }); + inst._zod.check = (payload) => { + if (def.inclusive ? payload.value >= def.value : payload.value > def.value) { + return; + } + payload.issues.push({ + origin, + code: "too_small", + minimum: typeof def.value === "object" ? def.value.getTime() : def.value, + input: payload.value, + inclusive: def.inclusive, + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckMultipleOf = /* @__PURE__ */ $constructor("$ZodCheckMultipleOf", (inst, def) => { + $ZodCheck.init(inst, def); + inst._zod.onattach.push((inst2) => { + var _a6; + var _a5; + (_a6 = (_a5 = inst2._zod.bag).multipleOf) != null ? _a6 : _a5.multipleOf = def.value; + }); + inst._zod.check = (payload) => { + if (typeof payload.value !== typeof def.value) + throw new Error("Cannot mix number and bigint in multiple_of check."); + const isMultiple = typeof payload.value === "bigint" ? payload.value % def.value === BigInt(0) : floatSafeRemainder2(payload.value, def.value) === 0; + if (isMultiple) + return; + payload.issues.push({ + origin: typeof payload.value, + code: "not_multiple_of", + divisor: def.value, + input: payload.value, + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckNumberFormat = /* @__PURE__ */ $constructor("$ZodCheckNumberFormat", (inst, def) => { + var _a5; + $ZodCheck.init(inst, def); + def.format = def.format || "float64"; + const isInt = (_a5 = def.format) == null ? void 0 : _a5.includes("int"); + const origin = isInt ? "int" : "number"; + const [minimum, maximum] = NUMBER_FORMAT_RANGES[def.format]; + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + bag.format = def.format; + bag.minimum = minimum; + bag.maximum = maximum; + if (isInt) + bag.pattern = integer; + }); + inst._zod.check = (payload) => { + const input = payload.value; + if (isInt) { + if (!Number.isInteger(input)) { + payload.issues.push({ + expected: origin, + format: def.format, + code: "invalid_type", + continue: false, + input, + inst + }); + return; + } + if (!Number.isSafeInteger(input)) { + if (input > 0) { + payload.issues.push({ + input, + code: "too_big", + maximum: Number.MAX_SAFE_INTEGER, + note: "Integers must be within the safe integer range.", + inst, + origin, + inclusive: true, + continue: !def.abort + }); + } else { + payload.issues.push({ + input, + code: "too_small", + minimum: Number.MIN_SAFE_INTEGER, + note: "Integers must be within the safe integer range.", + inst, + origin, + inclusive: true, + continue: !def.abort + }); + } + return; + } + } + if (input < minimum) { + payload.issues.push({ + origin: "number", + input, + code: "too_small", + minimum, + inclusive: true, + inst, + continue: !def.abort + }); + } + if (input > maximum) { + payload.issues.push({ + origin: "number", + input, + code: "too_big", + maximum, + inclusive: true, + inst, + continue: !def.abort + }); + } + }; + }); + $ZodCheckBigIntFormat = /* @__PURE__ */ $constructor("$ZodCheckBigIntFormat", (inst, def) => { + $ZodCheck.init(inst, def); + const [minimum, maximum] = BIGINT_FORMAT_RANGES[def.format]; + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + bag.format = def.format; + bag.minimum = minimum; + bag.maximum = maximum; + }); + inst._zod.check = (payload) => { + const input = payload.value; + if (input < minimum) { + payload.issues.push({ + origin: "bigint", + input, + code: "too_small", + minimum, + inclusive: true, + inst, + continue: !def.abort + }); + } + if (input > maximum) { + payload.issues.push({ + origin: "bigint", + input, + code: "too_big", + maximum, + inclusive: true, + inst, + continue: !def.abort + }); + } + }; + }); + $ZodCheckMaxSize = /* @__PURE__ */ $constructor("$ZodCheckMaxSize", (inst, def) => { + var _a6; + var _a5; + $ZodCheck.init(inst, def); + (_a6 = (_a5 = inst._zod.def).when) != null ? _a6 : _a5.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.size !== void 0; + }; + inst._zod.onattach.push((inst2) => { + var _a7; + const curr = (_a7 = inst2._zod.bag.maximum) != null ? _a7 : Number.POSITIVE_INFINITY; + if (def.maximum < curr) + inst2._zod.bag.maximum = def.maximum; + }); + inst._zod.check = (payload) => { + const input = payload.value; + const size = input.size; + if (size <= def.maximum) + return; + payload.issues.push({ + origin: getSizableOrigin(input), + code: "too_big", + maximum: def.maximum, + inclusive: true, + input, + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckMinSize = /* @__PURE__ */ $constructor("$ZodCheckMinSize", (inst, def) => { + var _a6; + var _a5; + $ZodCheck.init(inst, def); + (_a6 = (_a5 = inst._zod.def).when) != null ? _a6 : _a5.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.size !== void 0; + }; + inst._zod.onattach.push((inst2) => { + var _a7; + const curr = (_a7 = inst2._zod.bag.minimum) != null ? _a7 : Number.NEGATIVE_INFINITY; + if (def.minimum > curr) + inst2._zod.bag.minimum = def.minimum; + }); + inst._zod.check = (payload) => { + const input = payload.value; + const size = input.size; + if (size >= def.minimum) + return; + payload.issues.push({ + origin: getSizableOrigin(input), + code: "too_small", + minimum: def.minimum, + inclusive: true, + input, + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckSizeEquals = /* @__PURE__ */ $constructor("$ZodCheckSizeEquals", (inst, def) => { + var _a6; + var _a5; + $ZodCheck.init(inst, def); + (_a6 = (_a5 = inst._zod.def).when) != null ? _a6 : _a5.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.size !== void 0; + }; + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + bag.minimum = def.size; + bag.maximum = def.size; + bag.size = def.size; + }); + inst._zod.check = (payload) => { + const input = payload.value; + const size = input.size; + if (size === def.size) + return; + const tooBig = size > def.size; + payload.issues.push({ + origin: getSizableOrigin(input), + ...tooBig ? { code: "too_big", maximum: def.size } : { code: "too_small", minimum: def.size }, + inclusive: true, + exact: true, + input: payload.value, + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckMaxLength = /* @__PURE__ */ $constructor("$ZodCheckMaxLength", (inst, def) => { + var _a6; + var _a5; + $ZodCheck.init(inst, def); + (_a6 = (_a5 = inst._zod.def).when) != null ? _a6 : _a5.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.length !== void 0; + }; + inst._zod.onattach.push((inst2) => { + var _a7; + const curr = (_a7 = inst2._zod.bag.maximum) != null ? _a7 : Number.POSITIVE_INFINITY; + if (def.maximum < curr) + inst2._zod.bag.maximum = def.maximum; + }); + inst._zod.check = (payload) => { + const input = payload.value; + const length = input.length; + if (length <= def.maximum) + return; + const origin = getLengthableOrigin(input); + payload.issues.push({ + origin, + code: "too_big", + maximum: def.maximum, + inclusive: true, + input, + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckMinLength = /* @__PURE__ */ $constructor("$ZodCheckMinLength", (inst, def) => { + var _a6; + var _a5; + $ZodCheck.init(inst, def); + (_a6 = (_a5 = inst._zod.def).when) != null ? _a6 : _a5.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.length !== void 0; + }; + inst._zod.onattach.push((inst2) => { + var _a7; + const curr = (_a7 = inst2._zod.bag.minimum) != null ? _a7 : Number.NEGATIVE_INFINITY; + if (def.minimum > curr) + inst2._zod.bag.minimum = def.minimum; + }); + inst._zod.check = (payload) => { + const input = payload.value; + const length = input.length; + if (length >= def.minimum) + return; + const origin = getLengthableOrigin(input); + payload.issues.push({ + origin, + code: "too_small", + minimum: def.minimum, + inclusive: true, + input, + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckLengthEquals = /* @__PURE__ */ $constructor("$ZodCheckLengthEquals", (inst, def) => { + var _a6; + var _a5; + $ZodCheck.init(inst, def); + (_a6 = (_a5 = inst._zod.def).when) != null ? _a6 : _a5.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.length !== void 0; + }; + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + bag.minimum = def.length; + bag.maximum = def.length; + bag.length = def.length; + }); + inst._zod.check = (payload) => { + const input = payload.value; + const length = input.length; + if (length === def.length) + return; + const origin = getLengthableOrigin(input); + const tooBig = length > def.length; + payload.issues.push({ + origin, + ...tooBig ? { code: "too_big", maximum: def.length } : { code: "too_small", minimum: def.length }, + inclusive: true, + exact: true, + input: payload.value, + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckStringFormat = /* @__PURE__ */ $constructor("$ZodCheckStringFormat", (inst, def) => { + var _a6, _b4; + var _a5, _b3; + $ZodCheck.init(inst, def); + inst._zod.onattach.push((inst2) => { + var _a7; + const bag = inst2._zod.bag; + bag.format = def.format; + if (def.pattern) { + (_a7 = bag.patterns) != null ? _a7 : bag.patterns = /* @__PURE__ */ new Set(); + bag.patterns.add(def.pattern); + } + }); + if (def.pattern) + (_a6 = (_a5 = inst._zod).check) != null ? _a6 : _a5.check = (payload) => { + def.pattern.lastIndex = 0; + if (def.pattern.test(payload.value)) + return; + payload.issues.push({ + origin: "string", + code: "invalid_format", + format: def.format, + input: payload.value, + ...def.pattern ? { pattern: def.pattern.toString() } : {}, + inst, + continue: !def.abort + }); + }; + else + (_b4 = (_b3 = inst._zod).check) != null ? _b4 : _b3.check = () => { + }; + }); + $ZodCheckRegex = /* @__PURE__ */ $constructor("$ZodCheckRegex", (inst, def) => { + $ZodCheckStringFormat.init(inst, def); + inst._zod.check = (payload) => { + def.pattern.lastIndex = 0; + if (def.pattern.test(payload.value)) + return; + payload.issues.push({ + origin: "string", + code: "invalid_format", + format: "regex", + input: payload.value, + pattern: def.pattern.toString(), + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckLowerCase = /* @__PURE__ */ $constructor("$ZodCheckLowerCase", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = lowercase; + $ZodCheckStringFormat.init(inst, def); + }); + $ZodCheckUpperCase = /* @__PURE__ */ $constructor("$ZodCheckUpperCase", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = uppercase; + $ZodCheckStringFormat.init(inst, def); + }); + $ZodCheckIncludes = /* @__PURE__ */ $constructor("$ZodCheckIncludes", (inst, def) => { + $ZodCheck.init(inst, def); + const escapedRegex = escapeRegex(def.includes); + const pattern = new RegExp(typeof def.position === "number" ? `^.{${def.position}}${escapedRegex}` : escapedRegex); + def.pattern = pattern; + inst._zod.onattach.push((inst2) => { + var _a5; + const bag = inst2._zod.bag; + (_a5 = bag.patterns) != null ? _a5 : bag.patterns = /* @__PURE__ */ new Set(); + bag.patterns.add(pattern); + }); + inst._zod.check = (payload) => { + if (payload.value.includes(def.includes, def.position)) + return; + payload.issues.push({ + origin: "string", + code: "invalid_format", + format: "includes", + includes: def.includes, + input: payload.value, + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckStartsWith = /* @__PURE__ */ $constructor("$ZodCheckStartsWith", (inst, def) => { + var _a5; + $ZodCheck.init(inst, def); + const pattern = new RegExp(`^${escapeRegex(def.prefix)}.*`); + (_a5 = def.pattern) != null ? _a5 : def.pattern = pattern; + inst._zod.onattach.push((inst2) => { + var _a6; + const bag = inst2._zod.bag; + (_a6 = bag.patterns) != null ? _a6 : bag.patterns = /* @__PURE__ */ new Set(); + bag.patterns.add(pattern); + }); + inst._zod.check = (payload) => { + if (payload.value.startsWith(def.prefix)) + return; + payload.issues.push({ + origin: "string", + code: "invalid_format", + format: "starts_with", + prefix: def.prefix, + input: payload.value, + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckEndsWith = /* @__PURE__ */ $constructor("$ZodCheckEndsWith", (inst, def) => { + var _a5; + $ZodCheck.init(inst, def); + const pattern = new RegExp(`.*${escapeRegex(def.suffix)}$`); + (_a5 = def.pattern) != null ? _a5 : def.pattern = pattern; + inst._zod.onattach.push((inst2) => { + var _a6; + const bag = inst2._zod.bag; + (_a6 = bag.patterns) != null ? _a6 : bag.patterns = /* @__PURE__ */ new Set(); + bag.patterns.add(pattern); + }); + inst._zod.check = (payload) => { + if (payload.value.endsWith(def.suffix)) + return; + payload.issues.push({ + origin: "string", + code: "invalid_format", + format: "ends_with", + suffix: def.suffix, + input: payload.value, + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckProperty = /* @__PURE__ */ $constructor("$ZodCheckProperty", (inst, def) => { + $ZodCheck.init(inst, def); + inst._zod.check = (payload) => { + const result = def.schema._zod.run({ + value: payload.value[def.property], + issues: [] + }, {}); + if (result instanceof Promise) { + return result.then((result2) => handleCheckPropertyResult(result2, payload, def.property)); + } + handleCheckPropertyResult(result, payload, def.property); + return; + }; + }); + $ZodCheckMimeType = /* @__PURE__ */ $constructor("$ZodCheckMimeType", (inst, def) => { + $ZodCheck.init(inst, def); + const mimeSet = new Set(def.mime); + inst._zod.onattach.push((inst2) => { + inst2._zod.bag.mime = def.mime; + }); + inst._zod.check = (payload) => { + if (mimeSet.has(payload.value.type)) + return; + payload.issues.push({ + code: "invalid_value", + values: def.mime, + input: payload.value.type, + inst, + continue: !def.abort + }); + }; + }); + $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (inst, def) => { + $ZodCheck.init(inst, def); + inst._zod.check = (payload) => { + payload.value = def.tx(payload.value); + }; + }); + } +}); + +// node_modules/zod/v4/core/doc.js +var Doc; +var init_doc = __esm({ + "node_modules/zod/v4/core/doc.js"() { + Doc = class { + constructor(args = []) { + this.content = []; + this.indent = 0; + if (this) + this.args = args; + } + indented(fn) { + this.indent += 1; + fn(this); + this.indent -= 1; + } + write(arg) { + if (typeof arg === "function") { + arg(this, { execution: "sync" }); + arg(this, { execution: "async" }); + return; + } + const content = arg; + const lines = content.split("\n").filter((x2) => x2); + const minIndent = Math.min(...lines.map((x2) => x2.length - x2.trimStart().length)); + const dedented = lines.map((x2) => x2.slice(minIndent)).map((x2) => " ".repeat(this.indent * 2) + x2); + for (const line of dedented) { + this.content.push(line); + } + } + compile() { + var _a5; + const F4 = Function; + const args = this == null ? void 0 : this.args; + const content = (_a5 = this == null ? void 0 : this.content) != null ? _a5 : [``]; + const lines = [...content.map((x2) => ` ${x2}`)]; + return new F4(...args, lines.join("\n")); + } + }; + } +}); + +// node_modules/zod/v4/core/versions.js +var version; +var init_versions = __esm({ + "node_modules/zod/v4/core/versions.js"() { + version = { + major: 4, + minor: 3, + patch: 6 + }; + } +}); + +// node_modules/zod/v4/core/schemas.js +function isValidBase64(data) { + if (data === "") + return true; + if (data.length % 4 !== 0) + return false; + try { + atob(data); + return true; + } catch (e2) { + return false; + } +} +function isValidBase64URL(data) { + if (!base64url.test(data)) + return false; + const base643 = data.replace(/[-_]/g, (c) => c === "-" ? "+" : "/"); + const padded = base643.padEnd(Math.ceil(base643.length / 4) * 4, "="); + return isValidBase64(padded); +} +function isValidJWT2(token, algorithm = null) { + try { + const tokensParts = token.split("."); + if (tokensParts.length !== 3) + return false; + const [header] = tokensParts; + if (!header) + return false; + const parsedHeader = JSON.parse(atob(header)); + if ("typ" in parsedHeader && (parsedHeader == null ? void 0 : parsedHeader.typ) !== "JWT") + return false; + if (!parsedHeader.alg) + return false; + if (algorithm && (!("alg" in parsedHeader) || parsedHeader.alg !== algorithm)) + return false; + return true; + } catch (e2) { + return false; + } +} +function handleArrayResult(result, final, index) { + if (result.issues.length) { + final.issues.push(...prefixIssues(index, result.issues)); + } + final.value[index] = result.value; +} +function handlePropertyResult(result, final, key, input, isOptionalOut) { + if (result.issues.length) { + if (isOptionalOut && !(key in input)) { + return; + } + final.issues.push(...prefixIssues(key, result.issues)); + } + if (result.value === void 0) { + if (key in input) { + final.value[key] = void 0; + } + } else { + final.value[key] = result.value; + } +} +function normalizeDef(def) { + var _a5, _b3, _c2, _d; + const keys = Object.keys(def.shape); + for (const k2 of keys) { + if (!((_d = (_c2 = (_b3 = (_a5 = def.shape) == null ? void 0 : _a5[k2]) == null ? void 0 : _b3._zod) == null ? void 0 : _c2.traits) == null ? void 0 : _d.has("$ZodType"))) { + throw new Error(`Invalid element at key "${k2}": expected a Zod schema`); + } + } + const okeys = optionalKeys(def.shape); + return { + ...def, + keys, + keySet: new Set(keys), + numKeys: keys.length, + optionalKeys: new Set(okeys) + }; +} +function handleCatchall(proms, input, payload, ctx, def, inst) { + const unrecognized = []; + const keySet = def.keySet; + const _catchall = def.catchall._zod; + const t11 = _catchall.def.type; + const isOptionalOut = _catchall.optout === "optional"; + for (const key in input) { + if (keySet.has(key)) + continue; + if (t11 === "never") { + unrecognized.push(key); + continue; + } + const r = _catchall.run({ value: input[key], issues: [] }, ctx); + if (r instanceof Promise) { + proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input, isOptionalOut))); + } else { + handlePropertyResult(r, payload, key, input, isOptionalOut); + } + } + if (unrecognized.length) { + payload.issues.push({ + code: "unrecognized_keys", + keys: unrecognized, + input, + inst + }); + } + if (!proms.length) + return payload; + return Promise.all(proms).then(() => { + return payload; + }); +} +function handleUnionResults(results, final, inst, ctx) { + for (const result of results) { + if (result.issues.length === 0) { + final.value = result.value; + return final; + } + } + const nonaborted = results.filter((r) => !aborted(r)); + if (nonaborted.length === 1) { + final.value = nonaborted[0].value; + return nonaborted[0]; + } + final.issues.push({ + code: "invalid_union", + input: final.value, + inst, + errors: results.map((result) => result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) + }); + return final; +} +function handleExclusiveUnionResults(results, final, inst, ctx) { + const successes = results.filter((r) => r.issues.length === 0); + if (successes.length === 1) { + final.value = successes[0].value; + return final; + } + if (successes.length === 0) { + final.issues.push({ + code: "invalid_union", + input: final.value, + inst, + errors: results.map((result) => result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) + }); + } else { + final.issues.push({ + code: "invalid_union", + input: final.value, + inst, + errors: [], + inclusive: false + }); + } + return final; +} +function mergeValues2(a, b2) { + if (a === b2) { + return { valid: true, data: a }; + } + if (a instanceof Date && b2 instanceof Date && +a === +b2) { + return { valid: true, data: a }; + } + if (isPlainObject2(a) && isPlainObject2(b2)) { + const bKeys = Object.keys(b2); + const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1); + const newObj = { ...a, ...b2 }; + for (const key of sharedKeys) { + const sharedValue = mergeValues2(a[key], b2[key]); + if (!sharedValue.valid) { + return { + valid: false, + mergeErrorPath: [key, ...sharedValue.mergeErrorPath] + }; + } + newObj[key] = sharedValue.data; + } + return { valid: true, data: newObj }; + } + if (Array.isArray(a) && Array.isArray(b2)) { + if (a.length !== b2.length) { + return { valid: false, mergeErrorPath: [] }; + } + const newArray = []; + for (let index = 0; index < a.length; index++) { + const itemA = a[index]; + const itemB = b2[index]; + const sharedValue = mergeValues2(itemA, itemB); + if (!sharedValue.valid) { + return { + valid: false, + mergeErrorPath: [index, ...sharedValue.mergeErrorPath] + }; + } + newArray.push(sharedValue.data); + } + return { valid: true, data: newArray }; + } + return { valid: false, mergeErrorPath: [] }; +} +function handleIntersectionResults(result, left, right) { + const unrecKeys = /* @__PURE__ */ new Map(); + let unrecIssue; + for (const iss of left.issues) { + if (iss.code === "unrecognized_keys") { + unrecIssue != null ? unrecIssue : unrecIssue = iss; + for (const k2 of iss.keys) { + if (!unrecKeys.has(k2)) + unrecKeys.set(k2, {}); + unrecKeys.get(k2).l = true; + } + } else { + result.issues.push(iss); + } + } + for (const iss of right.issues) { + if (iss.code === "unrecognized_keys") { + for (const k2 of iss.keys) { + if (!unrecKeys.has(k2)) + unrecKeys.set(k2, {}); + unrecKeys.get(k2).r = true; + } + } else { + result.issues.push(iss); + } + } + const bothKeys = [...unrecKeys].filter(([, f9]) => f9.l && f9.r).map(([k2]) => k2); + if (bothKeys.length && unrecIssue) { + result.issues.push({ ...unrecIssue, keys: bothKeys }); + } + if (aborted(result)) + return result; + const merged = mergeValues2(left.value, right.value); + if (!merged.valid) { + throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(merged.mergeErrorPath)}`); + } + result.value = merged.data; + return result; +} +function handleTupleResult(result, final, index) { + if (result.issues.length) { + final.issues.push(...prefixIssues(index, result.issues)); + } + final.value[index] = result.value; +} +function handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) { + if (keyResult.issues.length) { + if (propertyKeyTypes.has(typeof key)) { + final.issues.push(...prefixIssues(key, keyResult.issues)); + } else { + final.issues.push({ + code: "invalid_key", + origin: "map", + input, + inst, + issues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config())) + }); + } + } + if (valueResult.issues.length) { + if (propertyKeyTypes.has(typeof key)) { + final.issues.push(...prefixIssues(key, valueResult.issues)); + } else { + final.issues.push({ + origin: "map", + code: "invalid_element", + input, + inst, + key, + issues: valueResult.issues.map((iss) => finalizeIssue(iss, ctx, config())) + }); + } + } + final.value.set(keyResult.value, valueResult.value); +} +function handleSetResult(result, final) { + if (result.issues.length) { + final.issues.push(...result.issues); + } + final.value.add(result.value); +} +function handleOptionalResult(result, input) { + if (result.issues.length && input === void 0) { + return { issues: [], value: void 0 }; + } + return result; +} +function handleDefaultResult(payload, def) { + if (payload.value === void 0) { + payload.value = def.defaultValue; + } + return payload; +} +function handleNonOptionalResult(payload, inst) { + if (!payload.issues.length && payload.value === void 0) { + payload.issues.push({ + code: "invalid_type", + expected: "nonoptional", + input: payload.value, + inst + }); + } + return payload; +} +function handlePipeResult(left, next, ctx) { + if (left.issues.length) { + left.aborted = true; + return left; + } + return next._zod.run({ value: left.value, issues: left.issues }, ctx); +} +function handleCodecAResult(result, def, ctx) { + if (result.issues.length) { + result.aborted = true; + return result; + } + const direction = ctx.direction || "forward"; + if (direction === "forward") { + const transformed = def.transform(result.value, result); + if (transformed instanceof Promise) { + return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx)); + } + return handleCodecTxResult(result, transformed, def.out, ctx); + } else { + const transformed = def.reverseTransform(result.value, result); + if (transformed instanceof Promise) { + return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx)); + } + return handleCodecTxResult(result, transformed, def.in, ctx); + } +} +function handleCodecTxResult(left, value, nextSchema, ctx) { + if (left.issues.length) { + left.aborted = true; + return left; + } + return nextSchema._zod.run({ value, issues: left.issues }, ctx); +} +function handleReadonlyResult(payload) { + payload.value = Object.freeze(payload.value); + return payload; +} +function handleRefineResult(result, payload, input, inst) { + var _a5; + if (!result) { + const _iss = { + code: "custom", + input, + inst, + // incorporates params.error into issue reporting + path: [...(_a5 = inst._zod.def.path) != null ? _a5 : []], + // incorporates params.error into issue reporting + continue: !inst._zod.def.abort + // params: inst._zod.def.params, + }; + if (inst._zod.def.params) + _iss.params = inst._zod.def.params; + payload.issues.push(issue(_iss)); + } +} +var $ZodType, $ZodString, $ZodStringFormat, $ZodGUID, $ZodUUID, $ZodEmail, $ZodURL, $ZodEmoji, $ZodNanoID, $ZodCUID, $ZodCUID2, $ZodULID, $ZodXID, $ZodKSUID, $ZodISODateTime, $ZodISODate, $ZodISOTime, $ZodISODuration, $ZodIPv4, $ZodIPv6, $ZodMAC, $ZodCIDRv4, $ZodCIDRv6, $ZodBase64, $ZodBase64URL, $ZodE164, $ZodJWT, $ZodCustomStringFormat, $ZodNumber, $ZodNumberFormat, $ZodBoolean, $ZodBigInt, $ZodBigIntFormat, $ZodSymbol, $ZodUndefined, $ZodNull, $ZodAny, $ZodUnknown, $ZodNever, $ZodVoid, $ZodDate, $ZodArray, $ZodObject, $ZodObjectJIT, $ZodUnion, $ZodXor, $ZodDiscriminatedUnion, $ZodIntersection, $ZodTuple, $ZodRecord, $ZodMap, $ZodSet, $ZodEnum, $ZodLiteral, $ZodFile, $ZodTransform, $ZodOptional, $ZodExactOptional, $ZodNullable, $ZodDefault, $ZodPrefault, $ZodNonOptional, $ZodSuccess, $ZodCatch, $ZodNaN, $ZodPipe, $ZodCodec, $ZodReadonly, $ZodTemplateLiteral, $ZodFunction, $ZodPromise, $ZodLazy, $ZodCustom; +var init_schemas = __esm({ + "node_modules/zod/v4/core/schemas.js"() { + init_checks(); + init_core(); + init_doc(); + init_parse(); + init_regexes(); + init_util(); + init_versions(); + init_util(); + $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => { + var _a6, _b3, _c2; + var _a5; + inst != null ? inst : inst = {}; + inst._zod.def = def; + inst._zod.bag = inst._zod.bag || {}; + inst._zod.version = version; + const checks = [...(_a6 = inst._zod.def.checks) != null ? _a6 : []]; + if (inst._zod.traits.has("$ZodCheck")) { + checks.unshift(inst); + } + for (const ch2 of checks) { + for (const fn of ch2._zod.onattach) { + fn(inst); + } + } + if (checks.length === 0) { + (_b3 = (_a5 = inst._zod).deferred) != null ? _b3 : _a5.deferred = []; + (_c2 = inst._zod.deferred) == null ? void 0 : _c2.push(() => { + inst._zod.run = inst._zod.parse; + }); + } else { + const runChecks = (payload, checks2, ctx) => { + let isAborted2 = aborted(payload); + let asyncResult; + for (const ch2 of checks2) { + if (ch2._zod.def.when) { + const shouldRun = ch2._zod.def.when(payload); + if (!shouldRun) + continue; + } else if (isAborted2) { + continue; + } + const currLen = payload.issues.length; + const _2 = ch2._zod.check(payload); + if (_2 instanceof Promise && (ctx == null ? void 0 : ctx.async) === false) { + throw new $ZodAsyncError(); + } + if (asyncResult || _2 instanceof Promise) { + asyncResult = (asyncResult != null ? asyncResult : Promise.resolve()).then(async () => { + await _2; + const nextLen = payload.issues.length; + if (nextLen === currLen) + return; + if (!isAborted2) + isAborted2 = aborted(payload, currLen); + }); + } else { + const nextLen = payload.issues.length; + if (nextLen === currLen) + continue; + if (!isAborted2) + isAborted2 = aborted(payload, currLen); + } + } + if (asyncResult) { + return asyncResult.then(() => { + return payload; + }); + } + return payload; + }; + const handleCanaryResult = (canary, payload, ctx) => { + if (aborted(canary)) { + canary.aborted = true; + return canary; + } + const checkResult = runChecks(payload, checks, ctx); + if (checkResult instanceof Promise) { + if (ctx.async === false) + throw new $ZodAsyncError(); + return checkResult.then((checkResult2) => inst._zod.parse(checkResult2, ctx)); + } + return inst._zod.parse(checkResult, ctx); + }; + inst._zod.run = (payload, ctx) => { + if (ctx.skipChecks) { + return inst._zod.parse(payload, ctx); + } + if (ctx.direction === "backward") { + const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true }); + if (canary instanceof Promise) { + return canary.then((canary2) => { + return handleCanaryResult(canary2, payload, ctx); + }); + } + return handleCanaryResult(canary, payload, ctx); + } + const result = inst._zod.parse(payload, ctx); + if (result instanceof Promise) { + if (ctx.async === false) + throw new $ZodAsyncError(); + return result.then((result2) => runChecks(result2, checks, ctx)); + } + return runChecks(result, checks, ctx); + }; + } + defineLazy(inst, "~standard", () => ({ + validate: (value) => { + var _a7; + try { + const r = safeParse(inst, value); + return r.success ? { value: r.data } : { issues: (_a7 = r.error) == null ? void 0 : _a7.issues }; + } catch (_2) { + return safeParseAsync(inst, value).then((r) => { + var _a8; + return r.success ? { value: r.data } : { issues: (_a8 = r.error) == null ? void 0 : _a8.issues }; + }); + } + }, + vendor: "zod", + version: 1 + })); + }); + $ZodString = /* @__PURE__ */ $constructor("$ZodString", (inst, def) => { + var _a5, _b3, _c2; + $ZodType.init(inst, def); + inst._zod.pattern = (_c2 = [...(_b3 = (_a5 = inst == null ? void 0 : inst._zod.bag) == null ? void 0 : _a5.patterns) != null ? _b3 : []].pop()) != null ? _c2 : string(inst._zod.bag); + inst._zod.parse = (payload, _2) => { + if (def.coerce) + try { + payload.value = String(payload.value); + } catch (_6) { + } + if (typeof payload.value === "string") + return payload; + payload.issues.push({ + expected: "string", + code: "invalid_type", + input: payload.value, + inst + }); + return payload; + }; + }); + $ZodStringFormat = /* @__PURE__ */ $constructor("$ZodStringFormat", (inst, def) => { + $ZodCheckStringFormat.init(inst, def); + $ZodString.init(inst, def); + }); + $ZodGUID = /* @__PURE__ */ $constructor("$ZodGUID", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = guid; + $ZodStringFormat.init(inst, def); + }); + $ZodUUID = /* @__PURE__ */ $constructor("$ZodUUID", (inst, def) => { + var _a5, _b3; + if (def.version) { + const versionMap = { + v1: 1, + v2: 2, + v3: 3, + v4: 4, + v5: 5, + v6: 6, + v7: 7, + v8: 8 + }; + const v2 = versionMap[def.version]; + if (v2 === void 0) + throw new Error(`Invalid UUID version: "${def.version}"`); + (_a5 = def.pattern) != null ? _a5 : def.pattern = uuid(v2); + } else + (_b3 = def.pattern) != null ? _b3 : def.pattern = uuid(); + $ZodStringFormat.init(inst, def); + }); + $ZodEmail = /* @__PURE__ */ $constructor("$ZodEmail", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = email; + $ZodStringFormat.init(inst, def); + }); + $ZodURL = /* @__PURE__ */ $constructor("$ZodURL", (inst, def) => { + $ZodStringFormat.init(inst, def); + inst._zod.check = (payload) => { + try { + const trimmed = payload.value.trim(); + const url2 = new URL(trimmed); + if (def.hostname) { + def.hostname.lastIndex = 0; + if (!def.hostname.test(url2.hostname)) { + payload.issues.push({ + code: "invalid_format", + format: "url", + note: "Invalid hostname", + pattern: def.hostname.source, + input: payload.value, + inst, + continue: !def.abort + }); + } + } + if (def.protocol) { + def.protocol.lastIndex = 0; + if (!def.protocol.test(url2.protocol.endsWith(":") ? url2.protocol.slice(0, -1) : url2.protocol)) { + payload.issues.push({ + code: "invalid_format", + format: "url", + note: "Invalid protocol", + pattern: def.protocol.source, + input: payload.value, + inst, + continue: !def.abort + }); + } + } + if (def.normalize) { + payload.value = url2.href; + } else { + payload.value = trimmed; + } + return; + } catch (_2) { + payload.issues.push({ + code: "invalid_format", + format: "url", + input: payload.value, + inst, + continue: !def.abort + }); + } + }; + }); + $ZodEmoji = /* @__PURE__ */ $constructor("$ZodEmoji", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = emoji(); + $ZodStringFormat.init(inst, def); + }); + $ZodNanoID = /* @__PURE__ */ $constructor("$ZodNanoID", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = nanoid; + $ZodStringFormat.init(inst, def); + }); + $ZodCUID = /* @__PURE__ */ $constructor("$ZodCUID", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = cuid; + $ZodStringFormat.init(inst, def); + }); + $ZodCUID2 = /* @__PURE__ */ $constructor("$ZodCUID2", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = cuid2; + $ZodStringFormat.init(inst, def); + }); + $ZodULID = /* @__PURE__ */ $constructor("$ZodULID", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = ulid; + $ZodStringFormat.init(inst, def); + }); + $ZodXID = /* @__PURE__ */ $constructor("$ZodXID", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = xid; + $ZodStringFormat.init(inst, def); + }); + $ZodKSUID = /* @__PURE__ */ $constructor("$ZodKSUID", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = ksuid; + $ZodStringFormat.init(inst, def); + }); + $ZodISODateTime = /* @__PURE__ */ $constructor("$ZodISODateTime", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = datetime(def); + $ZodStringFormat.init(inst, def); + }); + $ZodISODate = /* @__PURE__ */ $constructor("$ZodISODate", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = date; + $ZodStringFormat.init(inst, def); + }); + $ZodISOTime = /* @__PURE__ */ $constructor("$ZodISOTime", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = time(def); + $ZodStringFormat.init(inst, def); + }); + $ZodISODuration = /* @__PURE__ */ $constructor("$ZodISODuration", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = duration; + $ZodStringFormat.init(inst, def); + }); + $ZodIPv4 = /* @__PURE__ */ $constructor("$ZodIPv4", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = ipv4; + $ZodStringFormat.init(inst, def); + inst._zod.bag.format = `ipv4`; + }); + $ZodIPv6 = /* @__PURE__ */ $constructor("$ZodIPv6", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = ipv6; + $ZodStringFormat.init(inst, def); + inst._zod.bag.format = `ipv6`; + inst._zod.check = (payload) => { + try { + new URL(`http://[${payload.value}]`); + } catch (e2) { + payload.issues.push({ + code: "invalid_format", + format: "ipv6", + input: payload.value, + inst, + continue: !def.abort + }); + } + }; + }); + $ZodMAC = /* @__PURE__ */ $constructor("$ZodMAC", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = mac(def.delimiter); + $ZodStringFormat.init(inst, def); + inst._zod.bag.format = `mac`; + }); + $ZodCIDRv4 = /* @__PURE__ */ $constructor("$ZodCIDRv4", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = cidrv4; + $ZodStringFormat.init(inst, def); + }); + $ZodCIDRv6 = /* @__PURE__ */ $constructor("$ZodCIDRv6", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = cidrv6; + $ZodStringFormat.init(inst, def); + inst._zod.check = (payload) => { + const parts = payload.value.split("/"); + try { + if (parts.length !== 2) + throw new Error(); + const [address, prefix] = parts; + if (!prefix) + throw new Error(); + const prefixNum = Number(prefix); + if (`${prefixNum}` !== prefix) + throw new Error(); + if (prefixNum < 0 || prefixNum > 128) + throw new Error(); + new URL(`http://[${address}]`); + } catch (e2) { + payload.issues.push({ + code: "invalid_format", + format: "cidrv6", + input: payload.value, + inst, + continue: !def.abort + }); + } + }; + }); + $ZodBase64 = /* @__PURE__ */ $constructor("$ZodBase64", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = base64; + $ZodStringFormat.init(inst, def); + inst._zod.bag.contentEncoding = "base64"; + inst._zod.check = (payload) => { + if (isValidBase64(payload.value)) + return; + payload.issues.push({ + code: "invalid_format", + format: "base64", + input: payload.value, + inst, + continue: !def.abort + }); + }; + }); + $ZodBase64URL = /* @__PURE__ */ $constructor("$ZodBase64URL", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = base64url; + $ZodStringFormat.init(inst, def); + inst._zod.bag.contentEncoding = "base64url"; + inst._zod.check = (payload) => { + if (isValidBase64URL(payload.value)) + return; + payload.issues.push({ + code: "invalid_format", + format: "base64url", + input: payload.value, + inst, + continue: !def.abort + }); + }; + }); + $ZodE164 = /* @__PURE__ */ $constructor("$ZodE164", (inst, def) => { + var _a5; + (_a5 = def.pattern) != null ? _a5 : def.pattern = e164; + $ZodStringFormat.init(inst, def); + }); + $ZodJWT = /* @__PURE__ */ $constructor("$ZodJWT", (inst, def) => { + $ZodStringFormat.init(inst, def); + inst._zod.check = (payload) => { + if (isValidJWT2(payload.value, def.alg)) + return; + payload.issues.push({ + code: "invalid_format", + format: "jwt", + input: payload.value, + inst, + continue: !def.abort + }); + }; + }); + $ZodCustomStringFormat = /* @__PURE__ */ $constructor("$ZodCustomStringFormat", (inst, def) => { + $ZodStringFormat.init(inst, def); + inst._zod.check = (payload) => { + if (def.fn(payload.value)) + return; + payload.issues.push({ + code: "invalid_format", + format: def.format, + input: payload.value, + inst, + continue: !def.abort + }); + }; + }); + $ZodNumber = /* @__PURE__ */ $constructor("$ZodNumber", (inst, def) => { + var _a5; + $ZodType.init(inst, def); + inst._zod.pattern = (_a5 = inst._zod.bag.pattern) != null ? _a5 : number; + inst._zod.parse = (payload, _ctx) => { + if (def.coerce) + try { + payload.value = Number(payload.value); + } catch (_2) { + } + const input = payload.value; + if (typeof input === "number" && !Number.isNaN(input) && Number.isFinite(input)) { + return payload; + } + const received = typeof input === "number" ? Number.isNaN(input) ? "NaN" : !Number.isFinite(input) ? "Infinity" : void 0 : void 0; + payload.issues.push({ + expected: "number", + code: "invalid_type", + input, + inst, + ...received ? { received } : {} + }); + return payload; + }; + }); + $ZodNumberFormat = /* @__PURE__ */ $constructor("$ZodNumberFormat", (inst, def) => { + $ZodCheckNumberFormat.init(inst, def); + $ZodNumber.init(inst, def); + }); + $ZodBoolean = /* @__PURE__ */ $constructor("$ZodBoolean", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.pattern = boolean; + inst._zod.parse = (payload, _ctx) => { + if (def.coerce) + try { + payload.value = Boolean(payload.value); + } catch (_2) { + } + const input = payload.value; + if (typeof input === "boolean") + return payload; + payload.issues.push({ + expected: "boolean", + code: "invalid_type", + input, + inst + }); + return payload; + }; + }); + $ZodBigInt = /* @__PURE__ */ $constructor("$ZodBigInt", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.pattern = bigint; + inst._zod.parse = (payload, _ctx) => { + if (def.coerce) + try { + payload.value = BigInt(payload.value); + } catch (_2) { + } + if (typeof payload.value === "bigint") + return payload; + payload.issues.push({ + expected: "bigint", + code: "invalid_type", + input: payload.value, + inst + }); + return payload; + }; + }); + $ZodBigIntFormat = /* @__PURE__ */ $constructor("$ZodBigIntFormat", (inst, def) => { + $ZodCheckBigIntFormat.init(inst, def); + $ZodBigInt.init(inst, def); + }); + $ZodSymbol = /* @__PURE__ */ $constructor("$ZodSymbol", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (typeof input === "symbol") + return payload; + payload.issues.push({ + expected: "symbol", + code: "invalid_type", + input, + inst + }); + return payload; + }; + }); + $ZodUndefined = /* @__PURE__ */ $constructor("$ZodUndefined", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.pattern = _undefined; + inst._zod.values = /* @__PURE__ */ new Set([void 0]); + inst._zod.optin = "optional"; + inst._zod.optout = "optional"; + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (typeof input === "undefined") + return payload; + payload.issues.push({ + expected: "undefined", + code: "invalid_type", + input, + inst + }); + return payload; + }; + }); + $ZodNull = /* @__PURE__ */ $constructor("$ZodNull", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.pattern = _null; + inst._zod.values = /* @__PURE__ */ new Set([null]); + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (input === null) + return payload; + payload.issues.push({ + expected: "null", + code: "invalid_type", + input, + inst + }); + return payload; + }; + }); + $ZodAny = /* @__PURE__ */ $constructor("$ZodAny", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload) => payload; + }); + $ZodUnknown = /* @__PURE__ */ $constructor("$ZodUnknown", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload) => payload; + }); + $ZodNever = /* @__PURE__ */ $constructor("$ZodNever", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, _ctx) => { + payload.issues.push({ + expected: "never", + code: "invalid_type", + input: payload.value, + inst + }); + return payload; + }; + }); + $ZodVoid = /* @__PURE__ */ $constructor("$ZodVoid", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (typeof input === "undefined") + return payload; + payload.issues.push({ + expected: "void", + code: "invalid_type", + input, + inst + }); + return payload; + }; + }); + $ZodDate = /* @__PURE__ */ $constructor("$ZodDate", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, _ctx) => { + if (def.coerce) { + try { + payload.value = new Date(payload.value); + } catch (_err) { + } + } + const input = payload.value; + const isDate = input instanceof Date; + const isValidDate = isDate && !Number.isNaN(input.getTime()); + if (isValidDate) + return payload; + payload.issues.push({ + expected: "date", + code: "invalid_type", + input, + ...isDate ? { received: "Invalid Date" } : {}, + inst + }); + return payload; + }; + }); + $ZodArray = /* @__PURE__ */ $constructor("$ZodArray", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + if (!Array.isArray(input)) { + payload.issues.push({ + expected: "array", + code: "invalid_type", + input, + inst + }); + return payload; + } + payload.value = Array(input.length); + const proms = []; + for (let i = 0; i < input.length; i++) { + const item = input[i]; + const result = def.element._zod.run({ + value: item, + issues: [] + }, ctx); + if (result instanceof Promise) { + proms.push(result.then((result2) => handleArrayResult(result2, payload, i))); + } else { + handleArrayResult(result, payload, i); + } + } + if (proms.length) { + return Promise.all(proms).then(() => payload); + } + return payload; + }; + }); + $ZodObject = /* @__PURE__ */ $constructor("$ZodObject", (inst, def) => { + $ZodType.init(inst, def); + const desc = Object.getOwnPropertyDescriptor(def, "shape"); + if (!(desc == null ? void 0 : desc.get)) { + const sh2 = def.shape; + Object.defineProperty(def, "shape", { + get: () => { + const newSh = { ...sh2 }; + Object.defineProperty(def, "shape", { + value: newSh + }); + return newSh; + } + }); + } + const _normalized = cached(() => normalizeDef(def)); + defineLazy(inst._zod, "propValues", () => { + var _a5; + const shape = def.shape; + const propValues = {}; + for (const key in shape) { + const field = shape[key]._zod; + if (field.values) { + (_a5 = propValues[key]) != null ? _a5 : propValues[key] = /* @__PURE__ */ new Set(); + for (const v2 of field.values) + propValues[key].add(v2); + } + } + return propValues; + }); + const isObject2 = isObject; + const catchall = def.catchall; + let value; + inst._zod.parse = (payload, ctx) => { + value != null ? value : value = _normalized.value; + const input = payload.value; + if (!isObject2(input)) { + payload.issues.push({ + expected: "object", + code: "invalid_type", + input, + inst + }); + return payload; + } + payload.value = {}; + const proms = []; + const shape = value.shape; + for (const key of value.keys) { + const el2 = shape[key]; + const isOptionalOut = el2._zod.optout === "optional"; + const r = el2._zod.run({ value: input[key], issues: [] }, ctx); + if (r instanceof Promise) { + proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input, isOptionalOut))); + } else { + handlePropertyResult(r, payload, key, input, isOptionalOut); + } + } + if (!catchall) { + return proms.length ? Promise.all(proms).then(() => payload) : payload; + } + return handleCatchall(proms, input, payload, ctx, _normalized.value, inst); + }; + }); + $ZodObjectJIT = /* @__PURE__ */ $constructor("$ZodObjectJIT", (inst, def) => { + $ZodObject.init(inst, def); + const superParse = inst._zod.parse; + const _normalized = cached(() => normalizeDef(def)); + const generateFastpass = (shape) => { + var _a5; + const doc = new Doc(["shape", "payload", "ctx"]); + const normalized = _normalized.value; + const parseStr = (key) => { + const k2 = esc(key); + return `shape[${k2}]._zod.run({ value: input[${k2}], issues: [] }, ctx)`; + }; + doc.write(`const input = payload.value;`); + const ids = /* @__PURE__ */ Object.create(null); + let counter = 0; + for (const key of normalized.keys) { + ids[key] = `key_${counter++}`; + } + doc.write(`const newResult = {};`); + for (const key of normalized.keys) { + const id = ids[key]; + const k2 = esc(key); + const schema = shape[key]; + const isOptionalOut = ((_a5 = schema == null ? void 0 : schema._zod) == null ? void 0 : _a5.optout) === "optional"; + doc.write(`const ${id} = ${parseStr(key)};`); + if (isOptionalOut) { + doc.write(` + if (${id}.issues.length) { + if (${k2} in input) { + payload.issues = payload.issues.concat(${id}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${k2}, ...iss.path] : [${k2}] + }))); + } + } + + if (${id}.value === undefined) { + if (${k2} in input) { + newResult[${k2}] = undefined; + } + } else { + newResult[${k2}] = ${id}.value; + } + + `); + } else { + doc.write(` + if (${id}.issues.length) { + payload.issues = payload.issues.concat(${id}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${k2}, ...iss.path] : [${k2}] + }))); + } + + if (${id}.value === undefined) { + if (${k2} in input) { + newResult[${k2}] = undefined; + } + } else { + newResult[${k2}] = ${id}.value; + } + + `); + } + } + doc.write(`payload.value = newResult;`); + doc.write(`return payload;`); + const fn = doc.compile(); + return (payload, ctx) => fn(shape, payload, ctx); + }; + let fastpass; + const isObject2 = isObject; + const jit = !globalConfig.jitless; + const allowsEval2 = allowsEval; + const fastEnabled = jit && allowsEval2.value; + const catchall = def.catchall; + let value; + inst._zod.parse = (payload, ctx) => { + value != null ? value : value = _normalized.value; + const input = payload.value; + if (!isObject2(input)) { + payload.issues.push({ + expected: "object", + code: "invalid_type", + input, + inst + }); + return payload; + } + if (jit && fastEnabled && (ctx == null ? void 0 : ctx.async) === false && ctx.jitless !== true) { + if (!fastpass) + fastpass = generateFastpass(def.shape); + payload = fastpass(payload, ctx); + if (!catchall) + return payload; + return handleCatchall([], input, payload, ctx, value, inst); + } + return superParse(payload, ctx); + }; + }); + $ZodUnion = /* @__PURE__ */ $constructor("$ZodUnion", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "optin", () => def.options.some((o2) => o2._zod.optin === "optional") ? "optional" : void 0); + defineLazy(inst._zod, "optout", () => def.options.some((o2) => o2._zod.optout === "optional") ? "optional" : void 0); + defineLazy(inst._zod, "values", () => { + if (def.options.every((o2) => o2._zod.values)) { + return new Set(def.options.flatMap((option) => Array.from(option._zod.values))); + } + return void 0; + }); + defineLazy(inst._zod, "pattern", () => { + if (def.options.every((o2) => o2._zod.pattern)) { + const patterns = def.options.map((o2) => o2._zod.pattern); + return new RegExp(`^(${patterns.map((p) => cleanRegex(p.source)).join("|")})$`); + } + return void 0; + }); + const single = def.options.length === 1; + const first = def.options[0]._zod.run; + inst._zod.parse = (payload, ctx) => { + if (single) { + return first(payload, ctx); + } + let async = false; + const results = []; + for (const option of def.options) { + const result = option._zod.run({ + value: payload.value, + issues: [] + }, ctx); + if (result instanceof Promise) { + results.push(result); + async = true; + } else { + if (result.issues.length === 0) + return result; + results.push(result); + } + } + if (!async) + return handleUnionResults(results, payload, inst, ctx); + return Promise.all(results).then((results2) => { + return handleUnionResults(results2, payload, inst, ctx); + }); + }; + }); + $ZodXor = /* @__PURE__ */ $constructor("$ZodXor", (inst, def) => { + $ZodUnion.init(inst, def); + def.inclusive = false; + const single = def.options.length === 1; + const first = def.options[0]._zod.run; + inst._zod.parse = (payload, ctx) => { + if (single) { + return first(payload, ctx); + } + let async = false; + const results = []; + for (const option of def.options) { + const result = option._zod.run({ + value: payload.value, + issues: [] + }, ctx); + if (result instanceof Promise) { + results.push(result); + async = true; + } else { + results.push(result); + } + } + if (!async) + return handleExclusiveUnionResults(results, payload, inst, ctx); + return Promise.all(results).then((results2) => { + return handleExclusiveUnionResults(results2, payload, inst, ctx); + }); + }; + }); + $ZodDiscriminatedUnion = /* @__PURE__ */ $constructor("$ZodDiscriminatedUnion", (inst, def) => { + def.inclusive = false; + $ZodUnion.init(inst, def); + const _super = inst._zod.parse; + defineLazy(inst._zod, "propValues", () => { + const propValues = {}; + for (const option of def.options) { + const pv2 = option._zod.propValues; + if (!pv2 || Object.keys(pv2).length === 0) + throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(option)}"`); + for (const [k2, v2] of Object.entries(pv2)) { + if (!propValues[k2]) + propValues[k2] = /* @__PURE__ */ new Set(); + for (const val of v2) { + propValues[k2].add(val); + } + } + } + return propValues; + }); + const disc = cached(() => { + var _a5; + const opts = def.options; + const map2 = /* @__PURE__ */ new Map(); + for (const o2 of opts) { + const values = (_a5 = o2._zod.propValues) == null ? void 0 : _a5[def.discriminator]; + if (!values || values.size === 0) + throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(o2)}"`); + for (const v2 of values) { + if (map2.has(v2)) { + throw new Error(`Duplicate discriminator value "${String(v2)}"`); + } + map2.set(v2, o2); + } + } + return map2; + }); + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + if (!isObject(input)) { + payload.issues.push({ + code: "invalid_type", + expected: "object", + input, + inst + }); + return payload; + } + const opt = disc.value.get(input == null ? void 0 : input[def.discriminator]); + if (opt) { + return opt._zod.run(payload, ctx); + } + if (def.unionFallback) { + return _super(payload, ctx); + } + payload.issues.push({ + code: "invalid_union", + errors: [], + note: "No matching discriminator", + discriminator: def.discriminator, + input, + path: [def.discriminator], + inst + }); + return payload; + }; + }); + $ZodIntersection = /* @__PURE__ */ $constructor("$ZodIntersection", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + const left = def.left._zod.run({ value: input, issues: [] }, ctx); + const right = def.right._zod.run({ value: input, issues: [] }, ctx); + const async = left instanceof Promise || right instanceof Promise; + if (async) { + return Promise.all([left, right]).then(([left2, right2]) => { + return handleIntersectionResults(payload, left2, right2); + }); + } + return handleIntersectionResults(payload, left, right); + }; + }); + $ZodTuple = /* @__PURE__ */ $constructor("$ZodTuple", (inst, def) => { + $ZodType.init(inst, def); + const items = def.items; + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + if (!Array.isArray(input)) { + payload.issues.push({ + input, + inst, + expected: "tuple", + code: "invalid_type" + }); + return payload; + } + payload.value = []; + const proms = []; + const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== "optional"); + const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex; + if (!def.rest) { + const tooBig = input.length > items.length; + const tooSmall = input.length < optStart - 1; + if (tooBig || tooSmall) { + payload.issues.push({ + ...tooBig ? { code: "too_big", maximum: items.length, inclusive: true } : { code: "too_small", minimum: items.length }, + input, + inst, + origin: "array" + }); + return payload; + } + } + let i = -1; + for (const item of items) { + i++; + if (i >= input.length) { + if (i >= optStart) + continue; + } + const result = item._zod.run({ + value: input[i], + issues: [] + }, ctx); + if (result instanceof Promise) { + proms.push(result.then((result2) => handleTupleResult(result2, payload, i))); + } else { + handleTupleResult(result, payload, i); + } + } + if (def.rest) { + const rest = input.slice(items.length); + for (const el2 of rest) { + i++; + const result = def.rest._zod.run({ + value: el2, + issues: [] + }, ctx); + if (result instanceof Promise) { + proms.push(result.then((result2) => handleTupleResult(result2, payload, i))); + } else { + handleTupleResult(result, payload, i); + } + } + } + if (proms.length) + return Promise.all(proms).then(() => payload); + return payload; + }; + }); + $ZodRecord = /* @__PURE__ */ $constructor("$ZodRecord", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + if (!isPlainObject2(input)) { + payload.issues.push({ + expected: "record", + code: "invalid_type", + input, + inst + }); + return payload; + } + const proms = []; + const values = def.keyType._zod.values; + if (values) { + payload.value = {}; + const recordKeys = /* @__PURE__ */ new Set(); + for (const key of values) { + if (typeof key === "string" || typeof key === "number" || typeof key === "symbol") { + recordKeys.add(typeof key === "number" ? key.toString() : key); + const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx); + if (result instanceof Promise) { + proms.push(result.then((result2) => { + if (result2.issues.length) { + payload.issues.push(...prefixIssues(key, result2.issues)); + } + payload.value[key] = result2.value; + })); + } else { + if (result.issues.length) { + payload.issues.push(...prefixIssues(key, result.issues)); + } + payload.value[key] = result.value; + } + } + } + let unrecognized; + for (const key in input) { + if (!recordKeys.has(key)) { + unrecognized = unrecognized != null ? unrecognized : []; + unrecognized.push(key); + } + } + if (unrecognized && unrecognized.length > 0) { + payload.issues.push({ + code: "unrecognized_keys", + input, + inst, + keys: unrecognized + }); + } + } else { + payload.value = {}; + for (const key of Reflect.ownKeys(input)) { + if (key === "__proto__") + continue; + let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx); + if (keyResult instanceof Promise) { + throw new Error("Async schemas not supported in object keys currently"); + } + const checkNumericKey = typeof key === "string" && number.test(key) && keyResult.issues.length; + if (checkNumericKey) { + const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx); + if (retryResult instanceof Promise) { + throw new Error("Async schemas not supported in object keys currently"); + } + if (retryResult.issues.length === 0) { + keyResult = retryResult; + } + } + if (keyResult.issues.length) { + if (def.mode === "loose") { + payload.value[key] = input[key]; + } else { + payload.issues.push({ + code: "invalid_key", + origin: "record", + issues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config())), + input: key, + path: [key], + inst + }); + } + continue; + } + const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx); + if (result instanceof Promise) { + proms.push(result.then((result2) => { + if (result2.issues.length) { + payload.issues.push(...prefixIssues(key, result2.issues)); + } + payload.value[keyResult.value] = result2.value; + })); + } else { + if (result.issues.length) { + payload.issues.push(...prefixIssues(key, result.issues)); + } + payload.value[keyResult.value] = result.value; + } + } + } + if (proms.length) { + return Promise.all(proms).then(() => payload); + } + return payload; + }; + }); + $ZodMap = /* @__PURE__ */ $constructor("$ZodMap", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + if (!(input instanceof Map)) { + payload.issues.push({ + expected: "map", + code: "invalid_type", + input, + inst + }); + return payload; + } + const proms = []; + payload.value = /* @__PURE__ */ new Map(); + for (const [key, value] of input) { + const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx); + const valueResult = def.valueType._zod.run({ value, issues: [] }, ctx); + if (keyResult instanceof Promise || valueResult instanceof Promise) { + proms.push(Promise.all([keyResult, valueResult]).then(([keyResult2, valueResult2]) => { + handleMapResult(keyResult2, valueResult2, payload, key, input, inst, ctx); + })); + } else { + handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx); + } + } + if (proms.length) + return Promise.all(proms).then(() => payload); + return payload; + }; + }); + $ZodSet = /* @__PURE__ */ $constructor("$ZodSet", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + if (!(input instanceof Set)) { + payload.issues.push({ + input, + inst, + expected: "set", + code: "invalid_type" + }); + return payload; + } + const proms = []; + payload.value = /* @__PURE__ */ new Set(); + for (const item of input) { + const result = def.valueType._zod.run({ value: item, issues: [] }, ctx); + if (result instanceof Promise) { + proms.push(result.then((result2) => handleSetResult(result2, payload))); + } else + handleSetResult(result, payload); + } + if (proms.length) + return Promise.all(proms).then(() => payload); + return payload; + }; + }); + $ZodEnum = /* @__PURE__ */ $constructor("$ZodEnum", (inst, def) => { + $ZodType.init(inst, def); + const values = getEnumValues(def.entries); + const valuesSet = new Set(values); + inst._zod.values = valuesSet; + inst._zod.pattern = new RegExp(`^(${values.filter((k2) => propertyKeyTypes.has(typeof k2)).map((o2) => typeof o2 === "string" ? escapeRegex(o2) : o2.toString()).join("|")})$`); + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (valuesSet.has(input)) { + return payload; + } + payload.issues.push({ + code: "invalid_value", + values, + input, + inst + }); + return payload; + }; + }); + $ZodLiteral = /* @__PURE__ */ $constructor("$ZodLiteral", (inst, def) => { + $ZodType.init(inst, def); + if (def.values.length === 0) { + throw new Error("Cannot create literal schema with no valid values"); + } + const values = new Set(def.values); + inst._zod.values = values; + inst._zod.pattern = new RegExp(`^(${def.values.map((o2) => typeof o2 === "string" ? escapeRegex(o2) : o2 ? escapeRegex(o2.toString()) : String(o2)).join("|")})$`); + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (values.has(input)) { + return payload; + } + payload.issues.push({ + code: "invalid_value", + values: def.values, + input, + inst + }); + return payload; + }; + }); + $ZodFile = /* @__PURE__ */ $constructor("$ZodFile", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (input instanceof File) + return payload; + payload.issues.push({ + expected: "file", + code: "invalid_type", + input, + inst + }); + return payload; + }; + }); + $ZodTransform = /* @__PURE__ */ $constructor("$ZodTransform", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + throw new $ZodEncodeError(inst.constructor.name); + } + const _out = def.transform(payload.value, payload); + if (ctx.async) { + const output = _out instanceof Promise ? _out : Promise.resolve(_out); + return output.then((output2) => { + payload.value = output2; + return payload; + }); + } + if (_out instanceof Promise) { + throw new $ZodAsyncError(); + } + payload.value = _out; + return payload; + }; + }); + $ZodOptional = /* @__PURE__ */ $constructor("$ZodOptional", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.optin = "optional"; + inst._zod.optout = "optional"; + defineLazy(inst._zod, "values", () => { + return def.innerType._zod.values ? /* @__PURE__ */ new Set([...def.innerType._zod.values, void 0]) : void 0; + }); + defineLazy(inst._zod, "pattern", () => { + const pattern = def.innerType._zod.pattern; + return pattern ? new RegExp(`^(${cleanRegex(pattern.source)})?$`) : void 0; + }); + inst._zod.parse = (payload, ctx) => { + if (def.innerType._zod.optin === "optional") { + const result = def.innerType._zod.run(payload, ctx); + if (result instanceof Promise) + return result.then((r) => handleOptionalResult(r, payload.value)); + return handleOptionalResult(result, payload.value); + } + if (payload.value === void 0) { + return payload; + } + return def.innerType._zod.run(payload, ctx); + }; + }); + $ZodExactOptional = /* @__PURE__ */ $constructor("$ZodExactOptional", (inst, def) => { + $ZodOptional.init(inst, def); + defineLazy(inst._zod, "values", () => def.innerType._zod.values); + defineLazy(inst._zod, "pattern", () => def.innerType._zod.pattern); + inst._zod.parse = (payload, ctx) => { + return def.innerType._zod.run(payload, ctx); + }; + }); + $ZodNullable = /* @__PURE__ */ $constructor("$ZodNullable", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "optin", () => def.innerType._zod.optin); + defineLazy(inst._zod, "optout", () => def.innerType._zod.optout); + defineLazy(inst._zod, "pattern", () => { + const pattern = def.innerType._zod.pattern; + return pattern ? new RegExp(`^(${cleanRegex(pattern.source)}|null)$`) : void 0; + }); + defineLazy(inst._zod, "values", () => { + return def.innerType._zod.values ? /* @__PURE__ */ new Set([...def.innerType._zod.values, null]) : void 0; + }); + inst._zod.parse = (payload, ctx) => { + if (payload.value === null) + return payload; + return def.innerType._zod.run(payload, ctx); + }; + }); + $ZodDefault = /* @__PURE__ */ $constructor("$ZodDefault", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.optin = "optional"; + defineLazy(inst._zod, "values", () => def.innerType._zod.values); + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + return def.innerType._zod.run(payload, ctx); + } + if (payload.value === void 0) { + payload.value = def.defaultValue; + return payload; + } + const result = def.innerType._zod.run(payload, ctx); + if (result instanceof Promise) { + return result.then((result2) => handleDefaultResult(result2, def)); + } + return handleDefaultResult(result, def); + }; + }); + $ZodPrefault = /* @__PURE__ */ $constructor("$ZodPrefault", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.optin = "optional"; + defineLazy(inst._zod, "values", () => def.innerType._zod.values); + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + return def.innerType._zod.run(payload, ctx); + } + if (payload.value === void 0) { + payload.value = def.defaultValue; + } + return def.innerType._zod.run(payload, ctx); + }; + }); + $ZodNonOptional = /* @__PURE__ */ $constructor("$ZodNonOptional", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "values", () => { + const v2 = def.innerType._zod.values; + return v2 ? new Set([...v2].filter((x2) => x2 !== void 0)) : void 0; + }); + inst._zod.parse = (payload, ctx) => { + const result = def.innerType._zod.run(payload, ctx); + if (result instanceof Promise) { + return result.then((result2) => handleNonOptionalResult(result2, inst)); + } + return handleNonOptionalResult(result, inst); + }; + }); + $ZodSuccess = /* @__PURE__ */ $constructor("$ZodSuccess", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + throw new $ZodEncodeError("ZodSuccess"); + } + const result = def.innerType._zod.run(payload, ctx); + if (result instanceof Promise) { + return result.then((result2) => { + payload.value = result2.issues.length === 0; + return payload; + }); + } + payload.value = result.issues.length === 0; + return payload; + }; + }); + $ZodCatch = /* @__PURE__ */ $constructor("$ZodCatch", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "optin", () => def.innerType._zod.optin); + defineLazy(inst._zod, "optout", () => def.innerType._zod.optout); + defineLazy(inst._zod, "values", () => def.innerType._zod.values); + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + return def.innerType._zod.run(payload, ctx); + } + const result = def.innerType._zod.run(payload, ctx); + if (result instanceof Promise) { + return result.then((result2) => { + payload.value = result2.value; + if (result2.issues.length) { + payload.value = def.catchValue({ + ...payload, + error: { + issues: result2.issues.map((iss) => finalizeIssue(iss, ctx, config())) + }, + input: payload.value + }); + payload.issues = []; + } + return payload; + }); + } + payload.value = result.value; + if (result.issues.length) { + payload.value = def.catchValue({ + ...payload, + error: { + issues: result.issues.map((iss) => finalizeIssue(iss, ctx, config())) + }, + input: payload.value + }); + payload.issues = []; + } + return payload; + }; + }); + $ZodNaN = /* @__PURE__ */ $constructor("$ZodNaN", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, _ctx) => { + if (typeof payload.value !== "number" || !Number.isNaN(payload.value)) { + payload.issues.push({ + input: payload.value, + inst, + expected: "nan", + code: "invalid_type" + }); + return payload; + } + return payload; + }; + }); + $ZodPipe = /* @__PURE__ */ $constructor("$ZodPipe", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "values", () => def.in._zod.values); + defineLazy(inst._zod, "optin", () => def.in._zod.optin); + defineLazy(inst._zod, "optout", () => def.out._zod.optout); + defineLazy(inst._zod, "propValues", () => def.in._zod.propValues); + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + const right = def.out._zod.run(payload, ctx); + if (right instanceof Promise) { + return right.then((right2) => handlePipeResult(right2, def.in, ctx)); + } + return handlePipeResult(right, def.in, ctx); + } + const left = def.in._zod.run(payload, ctx); + if (left instanceof Promise) { + return left.then((left2) => handlePipeResult(left2, def.out, ctx)); + } + return handlePipeResult(left, def.out, ctx); + }; + }); + $ZodCodec = /* @__PURE__ */ $constructor("$ZodCodec", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "values", () => def.in._zod.values); + defineLazy(inst._zod, "optin", () => def.in._zod.optin); + defineLazy(inst._zod, "optout", () => def.out._zod.optout); + defineLazy(inst._zod, "propValues", () => def.in._zod.propValues); + inst._zod.parse = (payload, ctx) => { + const direction = ctx.direction || "forward"; + if (direction === "forward") { + const left = def.in._zod.run(payload, ctx); + if (left instanceof Promise) { + return left.then((left2) => handleCodecAResult(left2, def, ctx)); + } + return handleCodecAResult(left, def, ctx); + } else { + const right = def.out._zod.run(payload, ctx); + if (right instanceof Promise) { + return right.then((right2) => handleCodecAResult(right2, def, ctx)); + } + return handleCodecAResult(right, def, ctx); + } + }; + }); + $ZodReadonly = /* @__PURE__ */ $constructor("$ZodReadonly", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "propValues", () => def.innerType._zod.propValues); + defineLazy(inst._zod, "values", () => def.innerType._zod.values); + defineLazy(inst._zod, "optin", () => { + var _a5, _b3; + return (_b3 = (_a5 = def.innerType) == null ? void 0 : _a5._zod) == null ? void 0 : _b3.optin; + }); + defineLazy(inst._zod, "optout", () => { + var _a5, _b3; + return (_b3 = (_a5 = def.innerType) == null ? void 0 : _a5._zod) == null ? void 0 : _b3.optout; + }); + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + return def.innerType._zod.run(payload, ctx); + } + const result = def.innerType._zod.run(payload, ctx); + if (result instanceof Promise) { + return result.then(handleReadonlyResult); + } + return handleReadonlyResult(result); + }; + }); + $ZodTemplateLiteral = /* @__PURE__ */ $constructor("$ZodTemplateLiteral", (inst, def) => { + $ZodType.init(inst, def); + const regexParts = []; + for (const part of def.parts) { + if (typeof part === "object" && part !== null) { + if (!part._zod.pattern) { + throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`); + } + const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern; + if (!source) + throw new Error(`Invalid template literal part: ${part._zod.traits}`); + const start = source.startsWith("^") ? 1 : 0; + const end = source.endsWith("$") ? source.length - 1 : source.length; + regexParts.push(source.slice(start, end)); + } else if (part === null || primitiveTypes.has(typeof part)) { + regexParts.push(escapeRegex(`${part}`)); + } else { + throw new Error(`Invalid template literal part: ${part}`); + } + } + inst._zod.pattern = new RegExp(`^${regexParts.join("")}$`); + inst._zod.parse = (payload, _ctx) => { + var _a5; + if (typeof payload.value !== "string") { + payload.issues.push({ + input: payload.value, + inst, + expected: "string", + code: "invalid_type" + }); + return payload; + } + inst._zod.pattern.lastIndex = 0; + if (!inst._zod.pattern.test(payload.value)) { + payload.issues.push({ + input: payload.value, + inst, + code: "invalid_format", + format: (_a5 = def.format) != null ? _a5 : "template_literal", + pattern: inst._zod.pattern.source + }); + return payload; + } + return payload; + }; + }); + $ZodFunction = /* @__PURE__ */ $constructor("$ZodFunction", (inst, def) => { + $ZodType.init(inst, def); + inst._def = def; + inst._zod.def = def; + inst.implement = (func) => { + if (typeof func !== "function") { + throw new Error("implement() must be called with a function"); + } + return function(...args) { + const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args; + const result = Reflect.apply(func, this, parsedArgs); + if (inst._def.output) { + return parse(inst._def.output, result); + } + return result; + }; + }; + inst.implementAsync = (func) => { + if (typeof func !== "function") { + throw new Error("implementAsync() must be called with a function"); + } + return async function(...args) { + const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args; + const result = await Reflect.apply(func, this, parsedArgs); + if (inst._def.output) { + return await parseAsync(inst._def.output, result); + } + return result; + }; + }; + inst._zod.parse = (payload, _ctx) => { + if (typeof payload.value !== "function") { + payload.issues.push({ + code: "invalid_type", + expected: "function", + input: payload.value, + inst + }); + return payload; + } + const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === "promise"; + if (hasPromiseOutput) { + payload.value = inst.implementAsync(payload.value); + } else { + payload.value = inst.implement(payload.value); + } + return payload; + }; + inst.input = (...args) => { + const F4 = inst.constructor; + if (Array.isArray(args[0])) { + return new F4({ + type: "function", + input: new $ZodTuple({ + type: "tuple", + items: args[0], + rest: args[1] + }), + output: inst._def.output + }); + } + return new F4({ + type: "function", + input: args[0], + output: inst._def.output + }); + }; + inst.output = (output) => { + const F4 = inst.constructor; + return new F4({ + type: "function", + input: inst._def.input, + output + }); + }; + return inst; + }); + $ZodPromise = /* @__PURE__ */ $constructor("$ZodPromise", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx)); + }; + }); + $ZodLazy = /* @__PURE__ */ $constructor("$ZodLazy", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "innerType", () => def.getter()); + defineLazy(inst._zod, "pattern", () => { + var _a5, _b3; + return (_b3 = (_a5 = inst._zod.innerType) == null ? void 0 : _a5._zod) == null ? void 0 : _b3.pattern; + }); + defineLazy(inst._zod, "propValues", () => { + var _a5, _b3; + return (_b3 = (_a5 = inst._zod.innerType) == null ? void 0 : _a5._zod) == null ? void 0 : _b3.propValues; + }); + defineLazy(inst._zod, "optin", () => { + var _a5, _b3, _c2; + return (_c2 = (_b3 = (_a5 = inst._zod.innerType) == null ? void 0 : _a5._zod) == null ? void 0 : _b3.optin) != null ? _c2 : void 0; + }); + defineLazy(inst._zod, "optout", () => { + var _a5, _b3, _c2; + return (_c2 = (_b3 = (_a5 = inst._zod.innerType) == null ? void 0 : _a5._zod) == null ? void 0 : _b3.optout) != null ? _c2 : void 0; + }); + inst._zod.parse = (payload, ctx) => { + const inner = inst._zod.innerType; + return inner._zod.run(payload, ctx); + }; + }); + $ZodCustom = /* @__PURE__ */ $constructor("$ZodCustom", (inst, def) => { + $ZodCheck.init(inst, def); + $ZodType.init(inst, def); + inst._zod.parse = (payload, _2) => { + return payload; + }; + inst._zod.check = (payload) => { + const input = payload.value; + const r = def.fn(input); + if (r instanceof Promise) { + return r.then((r2) => handleRefineResult(r2, payload, input, inst)); + } + handleRefineResult(r, payload, input, inst); + return; + }; + }); + } +}); + +// node_modules/zod/v4/locales/ar.js +function ar_default() { + return { + localeError: error() + }; +} +var error; +var init_ar = __esm({ + "node_modules/zod/v4/locales/ar.js"() { + init_util(); + error = () => { + const Sizable = { + string: { unit: "\u062D\u0631\u0641", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, + file: { unit: "\u0628\u0627\u064A\u062A", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, + array: { unit: "\u0639\u0646\u0635\u0631", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, + set: { unit: "\u0639\u0646\u0635\u0631", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u0645\u062F\u062E\u0644", + email: "\u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A", + url: "\u0631\u0627\u0628\u0637", + emoji: "\u0625\u064A\u0645\u0648\u062C\u064A", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u062A\u0627\u0631\u064A\u062E \u0648\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO", + date: "\u062A\u0627\u0631\u064A\u062E \u0628\u0645\u0639\u064A\u0627\u0631 ISO", + time: "\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO", + duration: "\u0645\u062F\u0629 \u0628\u0645\u0639\u064A\u0627\u0631 ISO", + ipv4: "\u0639\u0646\u0648\u0627\u0646 IPv4", + ipv6: "\u0639\u0646\u0648\u0627\u0646 IPv6", + cidrv4: "\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv4", + cidrv6: "\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv6", + base64: "\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64-encoded", + base64url: "\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64url-encoded", + json_string: "\u0646\u064E\u0635 \u0639\u0644\u0649 \u0647\u064A\u0626\u0629 JSON", + e164: "\u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0628\u0645\u0639\u064A\u0627\u0631 E.164", + jwt: "JWT", + template_literal: "\u0645\u062F\u062E\u0644" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 instanceof ${issue2.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`; + } + return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${stringifyPrimitive(issue2.values[0])}`; + return `\u0627\u062E\u062A\u064A\u0627\u0631 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062A\u0648\u0642\u0639 \u0627\u0646\u062A\u0642\u0627\u0621 \u0623\u062D\u062F \u0647\u0630\u0647 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A: ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return ` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${(_c2 = issue2.origin) != null ? _c2 : "\u0627\u0644\u0642\u064A\u0645\u0629"} ${adj} ${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\u0639\u0646\u0635\u0631"}`; + return `\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${(_e2 = issue2.origin) != null ? _e2 : "\u0627\u0644\u0642\u064A\u0645\u0629"} ${adj} ${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue2.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue2.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0628\u062F\u0623 \u0628\u0640 "${issue2.prefix}"`; + if (_issue.format === "ends_with") + return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0646\u062A\u0647\u064A \u0628\u0640 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u062A\u0636\u0645\u0651\u064E\u0646 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0637\u0627\u0628\u0642 \u0627\u0644\u0646\u0645\u0637 ${_issue.pattern}`; + return `${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format} \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644`; + } + case "not_multiple_of": + return `\u0631\u0642\u0645 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646 \u0645\u0636\u0627\u0639\u0641\u0627\u062A ${issue2.divisor}`; + case "unrecognized_keys": + return `\u0645\u0639\u0631\u0641${issue2.keys.length > 1 ? "\u0627\u062A" : ""} \u063A\u0631\u064A\u0628${issue2.keys.length > 1 ? "\u0629" : ""}: ${joinValues(issue2.keys, "\u060C ")}`; + case "invalid_key": + return `\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue2.origin}`; + case "invalid_union": + return "\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644"; + case "invalid_element": + return `\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue2.origin}`; + default: + return "\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644"; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/az.js +function az_default() { + return { + localeError: error2() + }; +} +var error2; +var init_az = __esm({ + "node_modules/zod/v4/locales/az.js"() { + init_util(); + error2 = () => { + const Sizable = { + string: { unit: "simvol", verb: "olmal\u0131d\u0131r" }, + file: { unit: "bayt", verb: "olmal\u0131d\u0131r" }, + array: { unit: "element", verb: "olmal\u0131d\u0131r" }, + set: { unit: "element", verb: "olmal\u0131d\u0131r" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "input", + email: "email address", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO datetime", + date: "ISO date", + time: "ISO time", + duration: "ISO duration", + ipv4: "IPv4 address", + ipv6: "IPv6 address", + cidrv4: "IPv4 range", + cidrv6: "IPv6 range", + base64: "base64-encoded string", + base64url: "base64url-encoded string", + json_string: "JSON string", + e164: "E.164 number", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n instanceof ${issue2.expected}, daxil olan ${received}`; + } + return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${expected}, daxil olan ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${stringifyPrimitive(issue2.values[0])}`; + return `Yanl\u0131\u015F se\xE7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${(_c2 = issue2.origin) != null ? _c2 : "d\u0259y\u0259r"} ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "element"}`; + return `\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${(_e2 = issue2.origin) != null ? _e2 : "d\u0259y\u0259r"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + return `\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Yanl\u0131\u015F m\u0259tn: "${_issue.prefix}" il\u0259 ba\u015Flamal\u0131d\u0131r`; + if (_issue.format === "ends_with") + return `Yanl\u0131\u015F m\u0259tn: "${_issue.suffix}" il\u0259 bitm\u0259lidir`; + if (_issue.format === "includes") + return `Yanl\u0131\u015F m\u0259tn: "${_issue.includes}" daxil olmal\u0131d\u0131r`; + if (_issue.format === "regex") + return `Yanl\u0131\u015F m\u0259tn: ${_issue.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`; + return `Yanl\u0131\u015F ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `Yanl\u0131\u015F \u0259d\u0259d: ${issue2.divisor} il\u0259 b\xF6l\xFCn\u0259 bil\u0259n olmal\u0131d\u0131r`; + case "unrecognized_keys": + return `Tan\u0131nmayan a\xE7ar${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} daxilind\u0259 yanl\u0131\u015F a\xE7ar`; + case "invalid_union": + return "Yanl\u0131\u015F d\u0259y\u0259r"; + case "invalid_element": + return `${issue2.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`; + default: + return `Yanl\u0131\u015F d\u0259y\u0259r`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/be.js +function getBelarusianPlural(count, one, few, many) { + const absCount = Math.abs(count); + const lastDigit = absCount % 10; + const lastTwoDigits = absCount % 100; + if (lastTwoDigits >= 11 && lastTwoDigits <= 19) { + return many; + } + if (lastDigit === 1) { + return one; + } + if (lastDigit >= 2 && lastDigit <= 4) { + return few; + } + return many; +} +function be_default() { + return { + localeError: error3() + }; +} +var error3; +var init_be = __esm({ + "node_modules/zod/v4/locales/be.js"() { + init_util(); + error3 = () => { + const Sizable = { + string: { + unit: { + one: "\u0441\u0456\u043C\u0432\u0430\u043B", + few: "\u0441\u0456\u043C\u0432\u0430\u043B\u044B", + many: "\u0441\u0456\u043C\u0432\u0430\u043B\u0430\u045E" + }, + verb: "\u043C\u0435\u0446\u044C" + }, + array: { + unit: { + one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", + few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B", + many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E" + }, + verb: "\u043C\u0435\u0446\u044C" + }, + set: { + unit: { + one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", + few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B", + many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E" + }, + verb: "\u043C\u0435\u0446\u044C" + }, + file: { + unit: { + one: "\u0431\u0430\u0439\u0442", + few: "\u0431\u0430\u0439\u0442\u044B", + many: "\u0431\u0430\u0439\u0442\u0430\u045E" + }, + verb: "\u043C\u0435\u0446\u044C" + } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u0443\u0432\u043E\u0434", + email: "email \u0430\u0434\u0440\u0430\u0441", + url: "URL", + emoji: "\u044D\u043C\u043E\u0434\u0437\u0456", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0434\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441", + date: "ISO \u0434\u0430\u0442\u0430", + time: "ISO \u0447\u0430\u0441", + duration: "ISO \u043F\u0440\u0430\u0446\u044F\u0433\u043B\u0430\u0441\u0446\u044C", + ipv4: "IPv4 \u0430\u0434\u0440\u0430\u0441", + ipv6: "IPv6 \u0430\u0434\u0440\u0430\u0441", + cidrv4: "IPv4 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D", + cidrv6: "IPv6 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D", + base64: "\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64", + base64url: "\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64url", + json_string: "JSON \u0440\u0430\u0434\u043E\u043A", + e164: "\u043D\u0443\u043C\u0430\u0440 E.164", + jwt: "JWT", + template_literal: "\u0443\u0432\u043E\u0434" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u043B\u0456\u043A", + array: "\u043C\u0430\u0441\u0456\u045E" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F instanceof ${issue2.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`; + } + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F ${stringifyPrimitive(issue2.values[0])}`; + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0432\u0430\u0440\u044B\u044F\u043D\u0442: \u0447\u0430\u043A\u0430\u045E\u0441\u044F \u0430\u0434\u0437\u0456\u043D \u0437 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + const maxValue = Number(issue2.maximum); + const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many); + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${(_c2 = issue2.origin) != null ? _c2 : "\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue2.maximum.toString()} ${unit}`; + } + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${(_d = issue2.origin) != null ? _d : "\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + const minValue = Number(issue2.minimum); + const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many); + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue2.minimum.toString()} ${unit}`; + } + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u043F\u0430\u0447\u044B\u043D\u0430\u0446\u0446\u0430 \u0437 "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u0430\u043A\u0430\u043D\u0447\u0432\u0430\u0446\u0446\u0430 \u043D\u0430 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u043C\u044F\u0448\u0447\u0430\u0446\u044C "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0430\u0434\u043F\u0430\u0432\u044F\u0434\u0430\u0446\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`; + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${(_e2 = FormatDictionary[_issue.format]) != null ? _e2 : issue2.format}`; + } + case "not_multiple_of": + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043B\u0456\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0431\u044B\u0446\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue2.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${issue2.keys.length > 1 ? "\u043A\u043B\u044E\u0447\u044B" : "\u043A\u043B\u044E\u0447"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${issue2.origin}`; + case "invalid_union": + return "\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434"; + case "invalid_element": + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u0430\u0435 \u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435 \u045E ${issue2.origin}`; + default: + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/bg.js +function bg_default() { + return { + localeError: error4() + }; +} +var error4; +var init_bg = __esm({ + "node_modules/zod/v4/locales/bg.js"() { + init_util(); + error4 = () => { + const Sizable = { + string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }, + file: { unit: "\u0431\u0430\u0439\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }, + array: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }, + set: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u0432\u0445\u043E\u0434", + email: "\u0438\u043C\u0435\u0439\u043B \u0430\u0434\u0440\u0435\u0441", + url: "URL", + emoji: "\u0435\u043C\u043E\u0434\u0436\u0438", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0432\u0440\u0435\u043C\u0435", + date: "ISO \u0434\u0430\u0442\u0430", + time: "ISO \u0432\u0440\u0435\u043C\u0435", + duration: "ISO \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442", + ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441", + ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441", + cidrv4: "IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", + cidrv6: "IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", + base64: "base64-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437", + base64url: "base64url-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437", + json_string: "JSON \u043D\u0438\u0437", + e164: "E.164 \u043D\u043E\u043C\u0435\u0440", + jwt: "JWT", + template_literal: "\u0432\u0445\u043E\u0434" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0447\u0438\u0441\u043B\u043E", + array: "\u043C\u0430\u0441\u0438\u0432" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D instanceof ${issue2.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`; + } + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${stringifyPrimitive(issue2.values[0])}`; + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u043E\u043F\u0446\u0438\u044F: \u043E\u0447\u0430\u043A\u0432\u0430\u043D\u043E \u0435\u0434\u043D\u043E \u043E\u0442 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${(_c2 = issue2.origin) != null ? _c2 : "\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430"}`; + return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${(_e2 = issue2.origin) != null ? _e2 : "\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u0432\u0430 \u0441 "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u0432\u044A\u0440\u0448\u0432\u0430 \u0441 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0432\u0430 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0441\u044A\u0432\u043F\u0430\u0434\u0430 \u0441 ${_issue.pattern}`; + let invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D"; + if (_issue.format === "emoji") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E"; + if (_issue.format === "datetime") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E"; + if (_issue.format === "date") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430"; + if (_issue.format === "time") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E"; + if (_issue.format === "duration") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430"; + return `${invalid_adj} ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E \u0447\u0438\u0441\u043B\u043E: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043A\u0440\u0430\u0442\u043D\u043E \u043D\u0430 ${issue2.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u0430\u0437\u043F\u043E\u0437\u043D\u0430\u0442${issue2.keys.length > 1 ? "\u0438" : ""} \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u043E\u0432\u0435" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043A\u043B\u044E\u0447 \u0432 ${issue2.origin}`; + case "invalid_union": + return "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434"; + case "invalid_element": + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u0432 ${issue2.origin}`; + default: + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ca.js +function ca_default() { + return { + localeError: error5() + }; +} +var error5; +var init_ca = __esm({ + "node_modules/zod/v4/locales/ca.js"() { + init_util(); + error5 = () => { + const Sizable = { + string: { unit: "car\xE0cters", verb: "contenir" }, + file: { unit: "bytes", verb: "contenir" }, + array: { unit: "elements", verb: "contenir" }, + set: { unit: "elements", verb: "contenir" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "entrada", + email: "adre\xE7a electr\xF2nica", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "data i hora ISO", + date: "data ISO", + time: "hora ISO", + duration: "durada ISO", + ipv4: "adre\xE7a IPv4", + ipv6: "adre\xE7a IPv6", + cidrv4: "rang IPv4", + cidrv6: "rang IPv6", + base64: "cadena codificada en base64", + base64url: "cadena codificada en base64url", + json_string: "cadena JSON", + e164: "n\xFAmero E.164", + jwt: "JWT", + template_literal: "entrada" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Tipus inv\xE0lid: s'esperava instanceof ${issue2.expected}, s'ha rebut ${received}`; + } + return `Tipus inv\xE0lid: s'esperava ${expected}, s'ha rebut ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Valor inv\xE0lid: s'esperava ${stringifyPrimitive(issue2.values[0])}`; + return `Opci\xF3 inv\xE0lida: s'esperava una de ${joinValues(issue2.values, " o ")}`; + case "too_big": { + const adj = issue2.inclusive ? "com a m\xE0xim" : "menys de"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Massa gran: s'esperava que ${(_c2 = issue2.origin) != null ? _c2 : "el valor"} contingu\xE9s ${adj} ${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elements"}`; + return `Massa gran: s'esperava que ${(_e2 = issue2.origin) != null ? _e2 : "el valor"} fos ${adj} ${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? "com a m\xEDnim" : "m\xE9s de"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Massa petit: s'esperava que ${issue2.origin} contingu\xE9s ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Massa petit: s'esperava que ${issue2.origin} fos ${adj} ${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Format inv\xE0lid: ha de comen\xE7ar amb "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Format inv\xE0lid: ha d'acabar amb "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Format inv\xE0lid: ha d'incloure "${_issue.includes}"`; + if (_issue.format === "regex") + return `Format inv\xE0lid: ha de coincidir amb el patr\xF3 ${_issue.pattern}`; + return `Format inv\xE0lid per a ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `N\xFAmero inv\xE0lid: ha de ser m\xFAltiple de ${issue2.divisor}`; + case "unrecognized_keys": + return `Clau${issue2.keys.length > 1 ? "s" : ""} no reconeguda${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Clau inv\xE0lida a ${issue2.origin}`; + case "invalid_union": + return "Entrada inv\xE0lida"; + // Could also be "Tipus d'unió invàlid" but "Entrada invàlida" is more general + case "invalid_element": + return `Element inv\xE0lid a ${issue2.origin}`; + default: + return `Entrada inv\xE0lida`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/cs.js +function cs_default() { + return { + localeError: error6() + }; +} +var error6; +var init_cs = __esm({ + "node_modules/zod/v4/locales/cs.js"() { + init_util(); + error6 = () => { + const Sizable = { + string: { unit: "znak\u016F", verb: "m\xEDt" }, + file: { unit: "bajt\u016F", verb: "m\xEDt" }, + array: { unit: "prvk\u016F", verb: "m\xEDt" }, + set: { unit: "prvk\u016F", verb: "m\xEDt" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "regul\xE1rn\xED v\xFDraz", + email: "e-mailov\xE1 adresa", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "datum a \u010Das ve form\xE1tu ISO", + date: "datum ve form\xE1tu ISO", + time: "\u010Das ve form\xE1tu ISO", + duration: "doba trv\xE1n\xED ISO", + ipv4: "IPv4 adresa", + ipv6: "IPv6 adresa", + cidrv4: "rozsah IPv4", + cidrv6: "rozsah IPv6", + base64: "\u0159et\u011Bzec zak\xF3dovan\xFD ve form\xE1tu base64", + base64url: "\u0159et\u011Bzec zak\xF3dovan\xFD ve form\xE1tu base64url", + json_string: "\u0159et\u011Bzec ve form\xE1tu JSON", + e164: "\u010D\xEDslo E.164", + jwt: "JWT", + template_literal: "vstup" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u010D\xEDslo", + string: "\u0159et\u011Bzec", + function: "funkce", + array: "pole" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no instanceof ${issue2.expected}, obdr\u017Eeno ${received}`; + } + return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${expected}, obdr\u017Eeno ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${stringifyPrimitive(issue2.values[0])}`; + return `Neplatn\xE1 mo\u017Enost: o\u010Dek\xE1v\xE1na jedna z hodnot ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${(_c2 = issue2.origin) != null ? _c2 : "hodnota"} mus\xED m\xEDt ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "prvk\u016F"}`; + } + return `Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${(_e2 = issue2.origin) != null ? _e2 : "hodnota"} mus\xED b\xFDt ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${(_f2 = issue2.origin) != null ? _f2 : "hodnota"} mus\xED m\xEDt ${adj}${issue2.minimum.toString()} ${(_g = sizing.unit) != null ? _g : "prvk\u016F"}`; + } + return `Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${(_h2 = issue2.origin) != null ? _h2 : "hodnota"} mus\xED b\xFDt ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Neplatn\xFD \u0159et\u011Bzec: mus\xED za\u010D\xEDnat na "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Neplatn\xFD \u0159et\u011Bzec: mus\xED kon\u010Dit na "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Neplatn\xFD \u0159et\u011Bzec: mus\xED obsahovat "${_issue.includes}"`; + if (_issue.format === "regex") + return `Neplatn\xFD \u0159et\u011Bzec: mus\xED odpov\xEDdat vzoru ${_issue.pattern}`; + return `Neplatn\xFD form\xE1t ${(_i = FormatDictionary[_issue.format]) != null ? _i : issue2.format}`; + } + case "not_multiple_of": + return `Neplatn\xE9 \u010D\xEDslo: mus\xED b\xFDt n\xE1sobkem ${issue2.divisor}`; + case "unrecognized_keys": + return `Nezn\xE1m\xE9 kl\xED\u010De: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Neplatn\xFD kl\xED\u010D v ${issue2.origin}`; + case "invalid_union": + return "Neplatn\xFD vstup"; + case "invalid_element": + return `Neplatn\xE1 hodnota v ${issue2.origin}`; + default: + return `Neplatn\xFD vstup`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/da.js +function da_default() { + return { + localeError: error7() + }; +} +var error7; +var init_da = __esm({ + "node_modules/zod/v4/locales/da.js"() { + init_util(); + error7 = () => { + const Sizable = { + string: { unit: "tegn", verb: "havde" }, + file: { unit: "bytes", verb: "havde" }, + array: { unit: "elementer", verb: "indeholdt" }, + set: { unit: "elementer", verb: "indeholdt" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "input", + email: "e-mailadresse", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO dato- og klokkesl\xE6t", + date: "ISO-dato", + time: "ISO-klokkesl\xE6t", + duration: "ISO-varighed", + ipv4: "IPv4-omr\xE5de", + ipv6: "IPv6-omr\xE5de", + cidrv4: "IPv4-spektrum", + cidrv6: "IPv6-spektrum", + base64: "base64-kodet streng", + base64url: "base64url-kodet streng", + json_string: "JSON-streng", + e164: "E.164-nummer", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN", + string: "streng", + number: "tal", + boolean: "boolean", + array: "liste", + object: "objekt", + set: "s\xE6t", + file: "fil" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Ugyldigt input: forventede instanceof ${issue2.expected}, fik ${received}`; + } + return `Ugyldigt input: forventede ${expected}, fik ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ugyldig v\xE6rdi: forventede ${stringifyPrimitive(issue2.values[0])}`; + return `Ugyldigt valg: forventede en af f\xF8lgende ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + const origin = (_c2 = TypeDictionary[issue2.origin]) != null ? _c2 : issue2.origin; + if (sizing) + return `For stor: forventede ${origin != null ? origin : "value"} ${sizing.verb} ${adj} ${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elementer"}`; + return `For stor: forventede ${origin != null ? origin : "value"} havde ${adj} ${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + const origin = (_e2 = TypeDictionary[issue2.origin]) != null ? _e2 : issue2.origin; + if (sizing) { + return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; + } + return `For lille: forventede ${origin} havde ${adj} ${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Ugyldig streng: skal starte med "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Ugyldig streng: skal ende med "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Ugyldig streng: skal indeholde "${_issue.includes}"`; + if (_issue.format === "regex") + return `Ugyldig streng: skal matche m\xF8nsteret ${_issue.pattern}`; + return `Ugyldig ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `Ugyldigt tal: skal v\xE6re deleligt med ${issue2.divisor}`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Ukendte n\xF8gler" : "Ukendt n\xF8gle"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ugyldig n\xF8gle i ${issue2.origin}`; + case "invalid_union": + return "Ugyldigt input: matcher ingen af de tilladte typer"; + case "invalid_element": + return `Ugyldig v\xE6rdi i ${issue2.origin}`; + default: + return `Ugyldigt input`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/de.js +function de_default2() { + return { + localeError: error8() + }; +} +var error8; +var init_de = __esm({ + "node_modules/zod/v4/locales/de.js"() { + init_util(); + error8 = () => { + const Sizable = { + string: { unit: "Zeichen", verb: "zu haben" }, + file: { unit: "Bytes", verb: "zu haben" }, + array: { unit: "Elemente", verb: "zu haben" }, + set: { unit: "Elemente", verb: "zu haben" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "Eingabe", + email: "E-Mail-Adresse", + url: "URL", + emoji: "Emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO-Datum und -Uhrzeit", + date: "ISO-Datum", + time: "ISO-Uhrzeit", + duration: "ISO-Dauer", + ipv4: "IPv4-Adresse", + ipv6: "IPv6-Adresse", + cidrv4: "IPv4-Bereich", + cidrv6: "IPv6-Bereich", + base64: "Base64-codierter String", + base64url: "Base64-URL-codierter String", + json_string: "JSON-String", + e164: "E.164-Nummer", + jwt: "JWT", + template_literal: "Eingabe" + }; + const TypeDictionary = { + nan: "NaN", + number: "Zahl", + array: "Array" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Ung\xFCltige Eingabe: erwartet instanceof ${issue2.expected}, erhalten ${received}`; + } + return `Ung\xFCltige Eingabe: erwartet ${expected}, erhalten ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ung\xFCltige Eingabe: erwartet ${stringifyPrimitive(issue2.values[0])}`; + return `Ung\xFCltige Option: erwartet eine von ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Zu gro\xDF: erwartet, dass ${(_c2 = issue2.origin) != null ? _c2 : "Wert"} ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "Elemente"} hat`; + return `Zu gro\xDF: erwartet, dass ${(_e2 = issue2.origin) != null ? _e2 : "Wert"} ${adj}${issue2.maximum.toString()} ist`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Zu klein: erwartet, dass ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} hat`; + } + return `Zu klein: erwartet, dass ${issue2.origin} ${adj}${issue2.minimum.toString()} ist`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Ung\xFCltiger String: muss mit "${_issue.prefix}" beginnen`; + if (_issue.format === "ends_with") + return `Ung\xFCltiger String: muss mit "${_issue.suffix}" enden`; + if (_issue.format === "includes") + return `Ung\xFCltiger String: muss "${_issue.includes}" enthalten`; + if (_issue.format === "regex") + return `Ung\xFCltiger String: muss dem Muster ${_issue.pattern} entsprechen`; + return `Ung\xFCltig: ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `Ung\xFCltige Zahl: muss ein Vielfaches von ${issue2.divisor} sein`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Unbekannte Schl\xFCssel" : "Unbekannter Schl\xFCssel"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ung\xFCltiger Schl\xFCssel in ${issue2.origin}`; + case "invalid_union": + return "Ung\xFCltige Eingabe"; + case "invalid_element": + return `Ung\xFCltiger Wert in ${issue2.origin}`; + default: + return `Ung\xFCltige Eingabe`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/en.js +function en_default3() { + return { + localeError: error9() + }; +} +var error9; +var init_en = __esm({ + "node_modules/zod/v4/locales/en.js"() { + init_util(); + error9 = () => { + const Sizable = { + string: { unit: "characters", verb: "to have" }, + file: { unit: "bytes", verb: "to have" }, + array: { unit: "items", verb: "to have" }, + set: { unit: "items", verb: "to have" }, + map: { unit: "entries", verb: "to have" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "input", + email: "email address", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO datetime", + date: "ISO date", + time: "ISO time", + duration: "ISO duration", + ipv4: "IPv4 address", + ipv6: "IPv6 address", + mac: "MAC address", + cidrv4: "IPv4 range", + cidrv6: "IPv6 range", + base64: "base64-encoded string", + base64url: "base64url-encoded string", + json_string: "JSON string", + e164: "E.164 number", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + // Compatibility: "nan" -> "NaN" for display + nan: "NaN" + // All other type names omitted - they fall back to raw values via ?? operator + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + return `Invalid input: expected ${expected}, received ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Invalid input: expected ${stringifyPrimitive(issue2.values[0])}`; + return `Invalid option: expected one of ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Too big: expected ${(_c2 = issue2.origin) != null ? _c2 : "value"} to have ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elements"}`; + return `Too big: expected ${(_e2 = issue2.origin) != null ? _e2 : "value"} to be ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Too small: expected ${issue2.origin} to have ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Too small: expected ${issue2.origin} to be ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Invalid string: must start with "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Invalid string: must end with "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Invalid string: must include "${_issue.includes}"`; + if (_issue.format === "regex") + return `Invalid string: must match pattern ${_issue.pattern}`; + return `Invalid ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `Invalid number: must be a multiple of ${issue2.divisor}`; + case "unrecognized_keys": + return `Unrecognized key${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Invalid key in ${issue2.origin}`; + case "invalid_union": + return "Invalid input"; + case "invalid_element": + return `Invalid value in ${issue2.origin}`; + default: + return `Invalid input`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/eo.js +function eo_default() { + return { + localeError: error10() + }; +} +var error10; +var init_eo = __esm({ + "node_modules/zod/v4/locales/eo.js"() { + init_util(); + error10 = () => { + const Sizable = { + string: { unit: "karaktrojn", verb: "havi" }, + file: { unit: "bajtojn", verb: "havi" }, + array: { unit: "elementojn", verb: "havi" }, + set: { unit: "elementojn", verb: "havi" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "enigo", + email: "retadreso", + url: "URL", + emoji: "emo\u011Dio", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO-datotempo", + date: "ISO-dato", + time: "ISO-tempo", + duration: "ISO-da\u016Dro", + ipv4: "IPv4-adreso", + ipv6: "IPv6-adreso", + cidrv4: "IPv4-rango", + cidrv6: "IPv6-rango", + base64: "64-ume kodita karaktraro", + base64url: "URL-64-ume kodita karaktraro", + json_string: "JSON-karaktraro", + e164: "E.164-nombro", + jwt: "JWT", + template_literal: "enigo" + }; + const TypeDictionary = { + nan: "NaN", + number: "nombro", + array: "tabelo", + null: "senvalora" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Nevalida enigo: atendi\u011Dis instanceof ${issue2.expected}, ricevi\u011Dis ${received}`; + } + return `Nevalida enigo: atendi\u011Dis ${expected}, ricevi\u011Dis ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Nevalida enigo: atendi\u011Dis ${stringifyPrimitive(issue2.values[0])}`; + return `Nevalida opcio: atendi\u011Dis unu el ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Tro granda: atendi\u011Dis ke ${(_c2 = issue2.origin) != null ? _c2 : "valoro"} havu ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elementojn"}`; + return `Tro granda: atendi\u011Dis ke ${(_e2 = issue2.origin) != null ? _e2 : "valoro"} havu ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Tro malgranda: atendi\u011Dis ke ${issue2.origin} havu ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Tro malgranda: atendi\u011Dis ke ${issue2.origin} estu ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Nevalida karaktraro: devas komenci\u011Di per "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Nevalida karaktraro: devas fini\u011Di per "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Nevalida karaktraro: devas inkluzivi "${_issue.includes}"`; + if (_issue.format === "regex") + return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`; + return `Nevalida ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `Nevalida nombro: devas esti oblo de ${issue2.divisor}`; + case "unrecognized_keys": + return `Nekonata${issue2.keys.length > 1 ? "j" : ""} \u015Dlosilo${issue2.keys.length > 1 ? "j" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Nevalida \u015Dlosilo en ${issue2.origin}`; + case "invalid_union": + return "Nevalida enigo"; + case "invalid_element": + return `Nevalida valoro en ${issue2.origin}`; + default: + return `Nevalida enigo`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/es.js +function es_default2() { + return { + localeError: error11() + }; +} +var error11; +var init_es = __esm({ + "node_modules/zod/v4/locales/es.js"() { + init_util(); + error11 = () => { + const Sizable = { + string: { unit: "caracteres", verb: "tener" }, + file: { unit: "bytes", verb: "tener" }, + array: { unit: "elementos", verb: "tener" }, + set: { unit: "elementos", verb: "tener" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "entrada", + email: "direcci\xF3n de correo electr\xF3nico", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "fecha y hora ISO", + date: "fecha ISO", + time: "hora ISO", + duration: "duraci\xF3n ISO", + ipv4: "direcci\xF3n IPv4", + ipv6: "direcci\xF3n IPv6", + cidrv4: "rango IPv4", + cidrv6: "rango IPv6", + base64: "cadena codificada en base64", + base64url: "URL codificada en base64", + json_string: "cadena JSON", + e164: "n\xFAmero E.164", + jwt: "JWT", + template_literal: "entrada" + }; + const TypeDictionary = { + nan: "NaN", + string: "texto", + number: "n\xFAmero", + boolean: "booleano", + array: "arreglo", + object: "objeto", + set: "conjunto", + file: "archivo", + date: "fecha", + bigint: "n\xFAmero grande", + symbol: "s\xEDmbolo", + undefined: "indefinido", + null: "nulo", + function: "funci\xF3n", + map: "mapa", + record: "registro", + tuple: "tupla", + enum: "enumeraci\xF3n", + union: "uni\xF3n", + literal: "literal", + promise: "promesa", + void: "vac\xEDo", + never: "nunca", + unknown: "desconocido", + any: "cualquiera" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Entrada inv\xE1lida: se esperaba instanceof ${issue2.expected}, recibido ${received}`; + } + return `Entrada inv\xE1lida: se esperaba ${expected}, recibido ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Entrada inv\xE1lida: se esperaba ${stringifyPrimitive(issue2.values[0])}`; + return `Opci\xF3n inv\xE1lida: se esperaba una de ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + const origin = (_c2 = TypeDictionary[issue2.origin]) != null ? _c2 : issue2.origin; + if (sizing) + return `Demasiado grande: se esperaba que ${origin != null ? origin : "valor"} tuviera ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elementos"}`; + return `Demasiado grande: se esperaba que ${origin != null ? origin : "valor"} fuera ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + const origin = (_e2 = TypeDictionary[issue2.origin]) != null ? _e2 : issue2.origin; + if (sizing) { + return `Demasiado peque\xF1o: se esperaba que ${origin} tuviera ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Demasiado peque\xF1o: se esperaba que ${origin} fuera ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Cadena inv\xE1lida: debe comenzar con "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Cadena inv\xE1lida: debe terminar en "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Cadena inv\xE1lida: debe incluir "${_issue.includes}"`; + if (_issue.format === "regex") + return `Cadena inv\xE1lida: debe coincidir con el patr\xF3n ${_issue.pattern}`; + return `Inv\xE1lido ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `N\xFAmero inv\xE1lido: debe ser m\xFAltiplo de ${issue2.divisor}`; + case "unrecognized_keys": + return `Llave${issue2.keys.length > 1 ? "s" : ""} desconocida${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Llave inv\xE1lida en ${(_g = TypeDictionary[issue2.origin]) != null ? _g : issue2.origin}`; + case "invalid_union": + return "Entrada inv\xE1lida"; + case "invalid_element": + return `Valor inv\xE1lido en ${(_h2 = TypeDictionary[issue2.origin]) != null ? _h2 : issue2.origin}`; + default: + return `Entrada inv\xE1lida`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/fa.js +function fa_default() { + return { + localeError: error12() + }; +} +var error12; +var init_fa = __esm({ + "node_modules/zod/v4/locales/fa.js"() { + init_util(); + error12 = () => { + const Sizable = { + string: { unit: "\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, + file: { unit: "\u0628\u0627\u06CC\u062A", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, + array: { unit: "\u0622\u06CC\u062A\u0645", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, + set: { unit: "\u0622\u06CC\u062A\u0645", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u0648\u0631\u0648\u062F\u06CC", + email: "\u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644", + url: "URL", + emoji: "\u0627\u06CC\u0645\u0648\u062C\u06CC", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u062A\u0627\u0631\u06CC\u062E \u0648 \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", + date: "\u062A\u0627\u0631\u06CC\u062E \u0627\u06CC\u0632\u0648", + time: "\u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", + duration: "\u0645\u062F\u062A \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", + ipv4: "IPv4 \u0622\u062F\u0631\u0633", + ipv6: "IPv6 \u0622\u062F\u0631\u0633", + cidrv4: "IPv4 \u062F\u0627\u0645\u0646\u0647", + cidrv6: "IPv6 \u062F\u0627\u0645\u0646\u0647", + base64: "base64-encoded \u0631\u0634\u062A\u0647", + base64url: "base64url-encoded \u0631\u0634\u062A\u0647", + json_string: "JSON \u0631\u0634\u062A\u0647", + e164: "E.164 \u0639\u062F\u062F", + jwt: "JWT", + template_literal: "\u0648\u0631\u0648\u062F\u06CC" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0639\u062F\u062F", + array: "\u0622\u0631\u0627\u06CC\u0647" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A instanceof ${issue2.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`; + } + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`; + } + case "invalid_value": + if (issue2.values.length === 1) { + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${stringifyPrimitive(issue2.values[0])} \u0645\u06CC\u200C\u0628\u0648\u062F`; + } + return `\u06AF\u0632\u06CC\u0646\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A \u06CC\u06A9\u06CC \u0627\u0632 ${joinValues(issue2.values, "|")} \u0645\u06CC\u200C\u0628\u0648\u062F`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${(_c2 = issue2.origin) != null ? _c2 : "\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\u0639\u0646\u0635\u0631"} \u0628\u0627\u0634\u062F`; + } + return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${(_e2 = issue2.origin) != null ? _e2 : "\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} \u0628\u0627\u0634\u062F`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0628\u0627\u0634\u062F`; + } + return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} \u0628\u0627\u0634\u062F`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${_issue.prefix}" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`; + } + if (_issue.format === "ends_with") { + return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${_issue.suffix}" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`; + } + if (_issue.format === "includes") { + return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 "${_issue.includes}" \u0628\u0627\u0634\u062F`; + } + if (_issue.format === "regex") { + return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \u0627\u0644\u06AF\u0648\u06CC ${_issue.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`; + } + return `${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format} \u0646\u0627\u0645\u0639\u062A\u0628\u0631`; + } + case "not_multiple_of": + return `\u0639\u062F\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0645\u0636\u0631\u0628 ${issue2.divisor} \u0628\u0627\u0634\u062F`; + case "unrecognized_keys": + return `\u06A9\u0644\u06CC\u062F${issue2.keys.length > 1 ? "\u0647\u0627\u06CC" : ""} \u0646\u0627\u0634\u0646\u0627\u0633: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${issue2.origin}`; + case "invalid_union": + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`; + case "invalid_element": + return `\u0645\u0642\u062F\u0627\u0631 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u062F\u0631 ${issue2.origin}`; + default: + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/fi.js +function fi_default() { + return { + localeError: error13() + }; +} +var error13; +var init_fi = __esm({ + "node_modules/zod/v4/locales/fi.js"() { + init_util(); + error13 = () => { + const Sizable = { + string: { unit: "merkki\xE4", subject: "merkkijonon" }, + file: { unit: "tavua", subject: "tiedoston" }, + array: { unit: "alkiota", subject: "listan" }, + set: { unit: "alkiota", subject: "joukon" }, + number: { unit: "", subject: "luvun" }, + bigint: { unit: "", subject: "suuren kokonaisluvun" }, + int: { unit: "", subject: "kokonaisluvun" }, + date: { unit: "", subject: "p\xE4iv\xE4m\xE4\xE4r\xE4n" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "s\xE4\xE4nn\xF6llinen lauseke", + email: "s\xE4hk\xF6postiosoite", + url: "URL-osoite", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO-aikaleima", + date: "ISO-p\xE4iv\xE4m\xE4\xE4r\xE4", + time: "ISO-aika", + duration: "ISO-kesto", + ipv4: "IPv4-osoite", + ipv6: "IPv6-osoite", + cidrv4: "IPv4-alue", + cidrv6: "IPv6-alue", + base64: "base64-koodattu merkkijono", + base64url: "base64url-koodattu merkkijono", + json_string: "JSON-merkkijono", + e164: "E.164-luku", + jwt: "JWT", + template_literal: "templaattimerkkijono" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + var _a5, _b3, _c2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Virheellinen tyyppi: odotettiin instanceof ${issue2.expected}, oli ${received}`; + } + return `Virheellinen tyyppi: odotettiin ${expected}, oli ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Virheellinen sy\xF6te: t\xE4ytyy olla ${stringifyPrimitive(issue2.values[0])}`; + return `Virheellinen valinta: t\xE4ytyy olla yksi seuraavista: ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Liian suuri: ${sizing.subject} t\xE4ytyy olla ${adj}${issue2.maximum.toString()} ${sizing.unit}`.trim(); + } + return `Liian suuri: arvon t\xE4ytyy olla ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Liian pieni: ${sizing.subject} t\xE4ytyy olla ${adj}${issue2.minimum.toString()} ${sizing.unit}`.trim(); + } + return `Liian pieni: arvon t\xE4ytyy olla ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Virheellinen sy\xF6te: t\xE4ytyy alkaa "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Virheellinen sy\xF6te: t\xE4ytyy loppua "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Virheellinen sy\xF6te: t\xE4ytyy sis\xE4lt\xE4\xE4 "${_issue.includes}"`; + if (_issue.format === "regex") { + return `Virheellinen sy\xF6te: t\xE4ytyy vastata s\xE4\xE4nn\xF6llist\xE4 lauseketta ${_issue.pattern}`; + } + return `Virheellinen ${(_c2 = FormatDictionary[_issue.format]) != null ? _c2 : issue2.format}`; + } + case "not_multiple_of": + return `Virheellinen luku: t\xE4ytyy olla luvun ${issue2.divisor} monikerta`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Tuntemattomat avaimet" : "Tuntematon avain"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return "Virheellinen avain tietueessa"; + case "invalid_union": + return "Virheellinen unioni"; + case "invalid_element": + return "Virheellinen arvo joukossa"; + default: + return `Virheellinen sy\xF6te`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/fr.js +function fr_default2() { + return { + localeError: error14() + }; +} +var error14; +var init_fr = __esm({ + "node_modules/zod/v4/locales/fr.js"() { + init_util(); + error14 = () => { + const Sizable = { + string: { unit: "caract\xE8res", verb: "avoir" }, + file: { unit: "octets", verb: "avoir" }, + array: { unit: "\xE9l\xE9ments", verb: "avoir" }, + set: { unit: "\xE9l\xE9ments", verb: "avoir" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "entr\xE9e", + email: "adresse e-mail", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "date et heure ISO", + date: "date ISO", + time: "heure ISO", + duration: "dur\xE9e ISO", + ipv4: "adresse IPv4", + ipv6: "adresse IPv6", + cidrv4: "plage IPv4", + cidrv6: "plage IPv6", + base64: "cha\xEEne encod\xE9e en base64", + base64url: "cha\xEEne encod\xE9e en base64url", + json_string: "cha\xEEne JSON", + e164: "num\xE9ro E.164", + jwt: "JWT", + template_literal: "entr\xE9e" + }; + const TypeDictionary = { + nan: "NaN", + number: "nombre", + array: "tableau" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Entr\xE9e invalide : instanceof ${issue2.expected} attendu, ${received} re\xE7u`; + } + return `Entr\xE9e invalide : ${expected} attendu, ${received} re\xE7u`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Entr\xE9e invalide : ${stringifyPrimitive(issue2.values[0])} attendu`; + return `Option invalide : une valeur parmi ${joinValues(issue2.values, "|")} attendue`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Trop grand : ${(_c2 = issue2.origin) != null ? _c2 : "valeur"} doit ${sizing.verb} ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\xE9l\xE9ment(s)"}`; + return `Trop grand : ${(_e2 = issue2.origin) != null ? _e2 : "valeur"} doit \xEAtre ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Trop petit : ${issue2.origin} doit ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Trop petit : ${issue2.origin} doit \xEAtre ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Cha\xEEne invalide : doit commencer par "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Cha\xEEne invalide : doit se terminer par "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Cha\xEEne invalide : doit inclure "${_issue.includes}"`; + if (_issue.format === "regex") + return `Cha\xEEne invalide : doit correspondre au mod\xE8le ${_issue.pattern}`; + return `${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format} invalide`; + } + case "not_multiple_of": + return `Nombre invalide : doit \xEAtre un multiple de ${issue2.divisor}`; + case "unrecognized_keys": + return `Cl\xE9${issue2.keys.length > 1 ? "s" : ""} non reconnue${issue2.keys.length > 1 ? "s" : ""} : ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Cl\xE9 invalide dans ${issue2.origin}`; + case "invalid_union": + return "Entr\xE9e invalide"; + case "invalid_element": + return `Valeur invalide dans ${issue2.origin}`; + default: + return `Entr\xE9e invalide`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/fr-CA.js +function fr_CA_default() { + return { + localeError: error15() + }; +} +var error15; +var init_fr_CA = __esm({ + "node_modules/zod/v4/locales/fr-CA.js"() { + init_util(); + error15 = () => { + const Sizable = { + string: { unit: "caract\xE8res", verb: "avoir" }, + file: { unit: "octets", verb: "avoir" }, + array: { unit: "\xE9l\xE9ments", verb: "avoir" }, + set: { unit: "\xE9l\xE9ments", verb: "avoir" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "entr\xE9e", + email: "adresse courriel", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "date-heure ISO", + date: "date ISO", + time: "heure ISO", + duration: "dur\xE9e ISO", + ipv4: "adresse IPv4", + ipv6: "adresse IPv6", + cidrv4: "plage IPv4", + cidrv6: "plage IPv6", + base64: "cha\xEEne encod\xE9e en base64", + base64url: "cha\xEEne encod\xE9e en base64url", + json_string: "cha\xEEne JSON", + e164: "num\xE9ro E.164", + jwt: "JWT", + template_literal: "entr\xE9e" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Entr\xE9e invalide : attendu instanceof ${issue2.expected}, re\xE7u ${received}`; + } + return `Entr\xE9e invalide : attendu ${expected}, re\xE7u ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Entr\xE9e invalide : attendu ${stringifyPrimitive(issue2.values[0])}`; + return `Option invalide : attendu l'une des valeurs suivantes ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "\u2264" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Trop grand : attendu que ${(_c2 = issue2.origin) != null ? _c2 : "la valeur"} ait ${adj}${issue2.maximum.toString()} ${sizing.unit}`; + return `Trop grand : attendu que ${(_d = issue2.origin) != null ? _d : "la valeur"} soit ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? "\u2265" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Trop petit : attendu que ${issue2.origin} ait ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Trop petit : attendu que ${issue2.origin} soit ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Cha\xEEne invalide : doit commencer par "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Cha\xEEne invalide : doit se terminer par "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Cha\xEEne invalide : doit inclure "${_issue.includes}"`; + if (_issue.format === "regex") + return `Cha\xEEne invalide : doit correspondre au motif ${_issue.pattern}`; + return `${(_e2 = FormatDictionary[_issue.format]) != null ? _e2 : issue2.format} invalide`; + } + case "not_multiple_of": + return `Nombre invalide : doit \xEAtre un multiple de ${issue2.divisor}`; + case "unrecognized_keys": + return `Cl\xE9${issue2.keys.length > 1 ? "s" : ""} non reconnue${issue2.keys.length > 1 ? "s" : ""} : ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Cl\xE9 invalide dans ${issue2.origin}`; + case "invalid_union": + return "Entr\xE9e invalide"; + case "invalid_element": + return `Valeur invalide dans ${issue2.origin}`; + default: + return `Entr\xE9e invalide`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/he.js +function he_default() { + return { + localeError: error16() + }; +} +var error16; +var init_he = __esm({ + "node_modules/zod/v4/locales/he.js"() { + init_util(); + error16 = () => { + const TypeNames = { + string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA", gender: "f" }, + number: { label: "\u05DE\u05E1\u05E4\u05E8", gender: "m" }, + boolean: { label: "\u05E2\u05E8\u05DA \u05D1\u05D5\u05DC\u05D9\u05D0\u05E0\u05D9", gender: "m" }, + bigint: { label: "BigInt", gender: "m" }, + date: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA", gender: "m" }, + array: { label: "\u05DE\u05E2\u05E8\u05DA", gender: "m" }, + object: { label: "\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8", gender: "m" }, + null: { label: "\u05E2\u05E8\u05DA \u05E8\u05D9\u05E7 (null)", gender: "m" }, + undefined: { label: "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05DE\u05D5\u05D2\u05D3\u05E8 (undefined)", gender: "m" }, + symbol: { label: "\u05E1\u05D9\u05DE\u05D1\u05D5\u05DC (Symbol)", gender: "m" }, + function: { label: "\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4", gender: "f" }, + map: { label: "\u05DE\u05E4\u05D4 (Map)", gender: "f" }, + set: { label: "\u05E7\u05D1\u05D5\u05E6\u05D4 (Set)", gender: "f" }, + file: { label: "\u05E7\u05D5\u05D1\u05E5", gender: "m" }, + promise: { label: "Promise", gender: "m" }, + NaN: { label: "NaN", gender: "m" }, + unknown: { label: "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05D9\u05D3\u05D5\u05E2", gender: "m" }, + value: { label: "\u05E2\u05E8\u05DA", gender: "m" } + }; + const Sizable = { + string: { unit: "\u05EA\u05D5\u05D5\u05D9\u05DD", shortLabel: "\u05E7\u05E6\u05E8", longLabel: "\u05D0\u05E8\u05D5\u05DA" }, + file: { unit: "\u05D1\u05D9\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" }, + array: { unit: "\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" }, + set: { unit: "\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" }, + number: { unit: "", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" } + // no unit + }; + const typeEntry = (t11) => t11 ? TypeNames[t11] : void 0; + const typeLabel = (t11) => { + const e2 = typeEntry(t11); + if (e2) + return e2.label; + return t11 != null ? t11 : TypeNames.unknown.label; + }; + const withDefinite = (t11) => `\u05D4${typeLabel(t11)}`; + const verbFor = (t11) => { + var _a5; + const e2 = typeEntry(t11); + const gender = (_a5 = e2 == null ? void 0 : e2.gender) != null ? _a5 : "m"; + return gender === "f" ? "\u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05D9\u05D5\u05EA" : "\u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA"; + }; + const getSizing = (origin) => { + var _a5; + if (!origin) + return null; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + }; + const FormatDictionary = { + regex: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + email: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC", gender: "f" }, + url: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA \u05E8\u05E9\u05EA", gender: "f" }, + emoji: { label: "\u05D0\u05D9\u05DE\u05D5\u05D2'\u05D9", gender: "m" }, + uuid: { label: "UUID", gender: "m" }, + nanoid: { label: "nanoid", gender: "m" }, + guid: { label: "GUID", gender: "m" }, + cuid: { label: "cuid", gender: "m" }, + cuid2: { label: "cuid2", gender: "m" }, + ulid: { label: "ULID", gender: "m" }, + xid: { label: "XID", gender: "m" }, + ksuid: { label: "KSUID", gender: "m" }, + datetime: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA \u05D5\u05D6\u05DE\u05DF ISO", gender: "m" }, + date: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA ISO", gender: "m" }, + time: { label: "\u05D6\u05DE\u05DF ISO", gender: "m" }, + duration: { label: "\u05DE\u05E9\u05DA \u05D6\u05DE\u05DF ISO", gender: "m" }, + ipv4: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA IPv4", gender: "f" }, + ipv6: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA IPv6", gender: "f" }, + cidrv4: { label: "\u05D8\u05D5\u05D5\u05D7 IPv4", gender: "m" }, + cidrv6: { label: "\u05D8\u05D5\u05D5\u05D7 IPv6", gender: "m" }, + base64: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64", gender: "f" }, + base64url: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64 \u05DC\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05E8\u05E9\u05EA", gender: "f" }, + json_string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA JSON", gender: "f" }, + e164: { label: "\u05DE\u05E1\u05E4\u05E8 E.164", gender: "m" }, + jwt: { label: "JWT", gender: "m" }, + ends_with: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + includes: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + lowercase: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + starts_with: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + uppercase: { label: "\u05E7\u05DC\u05D8", gender: "m" } + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m, _n, _o, _p, _q3, _r, _s, _t, _u2; + switch (issue2.code) { + case "invalid_type": { + const expectedKey = issue2.expected; + const expected = (_a5 = TypeDictionary[expectedKey != null ? expectedKey : ""]) != null ? _a5 : typeLabel(expectedKey); + const receivedType = parsedType(issue2.input); + const received = (_d = (_c2 = TypeDictionary[receivedType]) != null ? _c2 : (_b3 = TypeNames[receivedType]) == null ? void 0 : _b3.label) != null ? _d : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA instanceof ${issue2.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`; + } + return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`; + } + case "invalid_value": { + if (issue2.values.length === 1) { + return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05E2\u05E8\u05DA \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA ${stringifyPrimitive(issue2.values[0])}`; + } + const stringified = issue2.values.map((v2) => stringifyPrimitive(v2)); + if (issue2.values.length === 2) { + return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${stringified[0]} \u05D0\u05D5 ${stringified[1]}`; + } + const lastValue = stringified[stringified.length - 1]; + const restValues = stringified.slice(0, -1).join(", "); + return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${restValues} \u05D0\u05D5 ${lastValue}`; + } + case "too_big": { + const sizing = getSizing(issue2.origin); + const subject = withDefinite((_e2 = issue2.origin) != null ? _e2 : "value"); + if (issue2.origin === "string") { + return `${(_f2 = sizing == null ? void 0 : sizing.longLabel) != null ? _f2 : "\u05D0\u05E8\u05D5\u05DA"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue2.maximum.toString()} ${(_g = sizing == null ? void 0 : sizing.unit) != null ? _g : ""} ${issue2.inclusive ? "\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA" : "\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8"}`.trim(); + } + if (issue2.origin === "number") { + const comparison = issue2.inclusive ? `\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue2.maximum}` : `\u05E7\u05D8\u05DF \u05DE-${issue2.maximum}`; + return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`; + } + if (issue2.origin === "array" || issue2.origin === "set") { + const verb = issue2.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA"; + const comparison = issue2.inclusive ? `${issue2.maximum} ${(_h2 = sizing == null ? void 0 : sizing.unit) != null ? _h2 : ""} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA` : `\u05E4\u05D7\u05D5\u05EA \u05DE-${issue2.maximum} ${(_i = sizing == null ? void 0 : sizing.unit) != null ? _i : ""}`; + return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim(); + } + const adj = issue2.inclusive ? "<=" : "<"; + const be2 = verbFor((_j = issue2.origin) != null ? _j : "value"); + if (sizing == null ? void 0 : sizing.unit) { + return `${sizing.longLabel} \u05DE\u05D3\u05D9: ${subject} ${be2} ${adj}${issue2.maximum.toString()} ${sizing.unit}`; + } + return `${(_k3 = sizing == null ? void 0 : sizing.longLabel) != null ? _k3 : "\u05D2\u05D3\u05D5\u05DC"} \u05DE\u05D3\u05D9: ${subject} ${be2} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const sizing = getSizing(issue2.origin); + const subject = withDefinite((_l2 = issue2.origin) != null ? _l2 : "value"); + if (issue2.origin === "string") { + return `${(_m = sizing == null ? void 0 : sizing.shortLabel) != null ? _m : "\u05E7\u05E6\u05E8"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue2.minimum.toString()} ${(_n = sizing == null ? void 0 : sizing.unit) != null ? _n : ""} ${issue2.inclusive ? "\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8" : "\u05DC\u05E4\u05D7\u05D5\u05EA"}`.trim(); + } + if (issue2.origin === "number") { + const comparison = issue2.inclusive ? `\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue2.minimum}` : `\u05D2\u05D3\u05D5\u05DC \u05DE-${issue2.minimum}`; + return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`; + } + if (issue2.origin === "array" || issue2.origin === "set") { + const verb = issue2.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA"; + if (issue2.minimum === 1 && issue2.inclusive) { + const singularPhrase = issue2.origin === "set" ? "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3" : "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3"; + return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${singularPhrase}`; + } + const comparison = issue2.inclusive ? `${issue2.minimum} ${(_o = sizing == null ? void 0 : sizing.unit) != null ? _o : ""} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8` : `\u05D9\u05D5\u05EA\u05E8 \u05DE-${issue2.minimum} ${(_p = sizing == null ? void 0 : sizing.unit) != null ? _p : ""}`; + return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim(); + } + const adj = issue2.inclusive ? ">=" : ">"; + const be2 = verbFor((_q3 = issue2.origin) != null ? _q3 : "value"); + if (sizing == null ? void 0 : sizing.unit) { + return `${sizing.shortLabel} \u05DE\u05D3\u05D9: ${subject} ${be2} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `${(_r = sizing == null ? void 0 : sizing.shortLabel) != null ? _r : "\u05E7\u05D8\u05DF"} \u05DE\u05D3\u05D9: ${subject} ${be2} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ${_issue.pattern}`; + const nounEntry = FormatDictionary[_issue.format]; + const noun = (_s = nounEntry == null ? void 0 : nounEntry.label) != null ? _s : _issue.format; + const gender = (_t = nounEntry == null ? void 0 : nounEntry.gender) != null ? _t : "m"; + const adjective = gender === "f" ? "\u05EA\u05E7\u05D9\u05E0\u05D4" : "\u05EA\u05E7\u05D9\u05DF"; + return `${noun} \u05DC\u05D0 ${adjective}`; + } + case "not_multiple_of": + return `\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ${issue2.divisor}`; + case "unrecognized_keys": + return `\u05DE\u05E4\u05EA\u05D7${issue2.keys.length > 1 ? "\u05D5\u05EA" : ""} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${issue2.keys.length > 1 ? "\u05D9\u05DD" : "\u05D4"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": { + return `\u05E9\u05D3\u05D4 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8`; + } + case "invalid_union": + return "\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF"; + case "invalid_element": { + const place = withDefinite((_u2 = issue2.origin) != null ? _u2 : "array"); + return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${place}`; + } + default: + return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/hu.js +function hu_default() { + return { + localeError: error17() + }; +} +var error17; +var init_hu = __esm({ + "node_modules/zod/v4/locales/hu.js"() { + init_util(); + error17 = () => { + const Sizable = { + string: { unit: "karakter", verb: "legyen" }, + file: { unit: "byte", verb: "legyen" }, + array: { unit: "elem", verb: "legyen" }, + set: { unit: "elem", verb: "legyen" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "bemenet", + email: "email c\xEDm", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO id\u0151b\xE9lyeg", + date: "ISO d\xE1tum", + time: "ISO id\u0151", + duration: "ISO id\u0151intervallum", + ipv4: "IPv4 c\xEDm", + ipv6: "IPv6 c\xEDm", + cidrv4: "IPv4 tartom\xE1ny", + cidrv6: "IPv6 tartom\xE1ny", + base64: "base64-k\xF3dolt string", + base64url: "base64url-k\xF3dolt string", + json_string: "JSON string", + e164: "E.164 sz\xE1m", + jwt: "JWT", + template_literal: "bemenet" + }; + const TypeDictionary = { + nan: "NaN", + number: "sz\xE1m", + array: "t\xF6mb" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k instanceof ${issue2.expected}, a kapott \xE9rt\xE9k ${received}`; + } + return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${expected}, a kapott \xE9rt\xE9k ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${stringifyPrimitive(issue2.values[0])}`; + return `\xC9rv\xE9nytelen opci\xF3: valamelyik \xE9rt\xE9k v\xE1rt ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `T\xFAl nagy: ${(_c2 = issue2.origin) != null ? _c2 : "\xE9rt\xE9k"} m\xE9rete t\xFAl nagy ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elem"}`; + return `T\xFAl nagy: a bemeneti \xE9rt\xE9k ${(_e2 = issue2.origin) != null ? _e2 : "\xE9rt\xE9k"} t\xFAl nagy: ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${issue2.origin} m\xE9rete t\xFAl kicsi ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${issue2.origin} t\xFAl kicsi ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\xC9rv\xE9nytelen string: "${_issue.prefix}" \xE9rt\xE9kkel kell kezd\u0151dnie`; + if (_issue.format === "ends_with") + return `\xC9rv\xE9nytelen string: "${_issue.suffix}" \xE9rt\xE9kkel kell v\xE9gz\u0151dnie`; + if (_issue.format === "includes") + return `\xC9rv\xE9nytelen string: "${_issue.includes}" \xE9rt\xE9ket kell tartalmaznia`; + if (_issue.format === "regex") + return `\xC9rv\xE9nytelen string: ${_issue.pattern} mint\xE1nak kell megfelelnie`; + return `\xC9rv\xE9nytelen ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `\xC9rv\xE9nytelen sz\xE1m: ${issue2.divisor} t\xF6bbsz\xF6r\xF6s\xE9nek kell lennie`; + case "unrecognized_keys": + return `Ismeretlen kulcs${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\xC9rv\xE9nytelen kulcs ${issue2.origin}`; + case "invalid_union": + return "\xC9rv\xE9nytelen bemenet"; + case "invalid_element": + return `\xC9rv\xE9nytelen \xE9rt\xE9k: ${issue2.origin}`; + default: + return `\xC9rv\xE9nytelen bemenet`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/hy.js +function getArmenianPlural(count, one, many) { + return Math.abs(count) === 1 ? one : many; +} +function withDefiniteArticle(word) { + if (!word) + return ""; + const vowels = ["\u0561", "\u0565", "\u0568", "\u056B", "\u0578", "\u0578\u0582", "\u0585"]; + const lastChar = word[word.length - 1]; + return word + (vowels.includes(lastChar) ? "\u0576" : "\u0568"); +} +function hy_default() { + return { + localeError: error18() + }; +} +var error18; +var init_hy = __esm({ + "node_modules/zod/v4/locales/hy.js"() { + init_util(); + error18 = () => { + const Sizable = { + string: { + unit: { + one: "\u0576\u0577\u0561\u0576", + many: "\u0576\u0577\u0561\u0576\u0576\u0565\u0580" + }, + verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" + }, + file: { + unit: { + one: "\u0562\u0561\u0575\u0569", + many: "\u0562\u0561\u0575\u0569\u0565\u0580" + }, + verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" + }, + array: { + unit: { + one: "\u057F\u0561\u0580\u0580", + many: "\u057F\u0561\u0580\u0580\u0565\u0580" + }, + verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" + }, + set: { + unit: { + one: "\u057F\u0561\u0580\u0580", + many: "\u057F\u0561\u0580\u0580\u0565\u0580" + }, + verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" + } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u0574\u0578\u0582\u057F\u0584", + email: "\u0567\u056C. \u0570\u0561\u057D\u0581\u0565", + url: "URL", + emoji: "\u0567\u0574\u0578\u057B\u056B", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E \u0587 \u056A\u0561\u0574", + date: "ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E", + time: "ISO \u056A\u0561\u0574", + duration: "ISO \u057F\u0587\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576", + ipv4: "IPv4 \u0570\u0561\u057D\u0581\u0565", + ipv6: "IPv6 \u0570\u0561\u057D\u0581\u0565", + cidrv4: "IPv4 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584", + cidrv6: "IPv6 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584", + base64: "base64 \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572", + base64url: "base64url \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572", + json_string: "JSON \u057F\u0578\u0572", + e164: "E.164 \u0570\u0561\u0574\u0561\u0580", + jwt: "JWT", + template_literal: "\u0574\u0578\u0582\u057F\u0584" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0569\u056B\u057E", + array: "\u0566\u0561\u0576\u0563\u057E\u0561\u056E" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 instanceof ${issue2.expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`; + } + return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${stringifyPrimitive(issue2.values[1])}`; + return `\u054D\u056D\u0561\u056C \u057F\u0561\u0580\u0562\u0565\u0580\u0561\u056F\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 \u0570\u0565\u057F\u0587\u0575\u0561\u056C\u0576\u0565\u0580\u056B\u0581 \u0574\u0565\u056F\u0568\u055D ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + const maxValue = Number(issue2.maximum); + const unit = getArmenianPlural(maxValue, sizing.unit.one, sizing.unit.many); + return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle((_c2 = issue2.origin) != null ? _c2 : "\u0561\u0580\u056A\u0565\u0584")} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue2.maximum.toString()} ${unit}`; + } + return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle((_d = issue2.origin) != null ? _d : "\u0561\u0580\u056A\u0565\u0584")} \u056C\u056B\u0576\u056B ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + const minValue = Number(issue2.minimum); + const unit = getArmenianPlural(minValue, sizing.unit.one, sizing.unit.many); + return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin)} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue2.minimum.toString()} ${unit}`; + } + return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin)} \u056C\u056B\u0576\u056B ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057D\u056F\u057D\u057E\u056B "${_issue.prefix}"-\u0578\u057E`; + if (_issue.format === "ends_with") + return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0561\u057E\u0561\u0580\u057F\u057E\u056B "${_issue.suffix}"-\u0578\u057E`; + if (_issue.format === "includes") + return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057A\u0561\u0580\u0578\u0582\u0576\u0561\u056F\u056B "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0570\u0561\u0574\u0561\u057A\u0561\u057F\u0561\u057D\u056D\u0561\u0576\u056B ${_issue.pattern} \u0571\u0587\u0561\u0579\u0561\u0583\u056B\u0576`; + return `\u054D\u056D\u0561\u056C ${(_e2 = FormatDictionary[_issue.format]) != null ? _e2 : issue2.format}`; + } + case "not_multiple_of": + return `\u054D\u056D\u0561\u056C \u0569\u056B\u057E\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0562\u0561\u0566\u0574\u0561\u057A\u0561\u057F\u056B\u056F \u056C\u056B\u0576\u056B ${issue2.divisor}-\u056B`; + case "unrecognized_keys": + return `\u0549\u0573\u0561\u0576\u0561\u0579\u057E\u0561\u056E \u0562\u0561\u0576\u0561\u056C\u056B${issue2.keys.length > 1 ? "\u0576\u0565\u0580" : ""}. ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u054D\u056D\u0561\u056C \u0562\u0561\u0576\u0561\u056C\u056B ${withDefiniteArticle(issue2.origin)}-\u0578\u0582\u0574`; + case "invalid_union": + return "\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574"; + case "invalid_element": + return `\u054D\u056D\u0561\u056C \u0561\u0580\u056A\u0565\u0584 ${withDefiniteArticle(issue2.origin)}-\u0578\u0582\u0574`; + default: + return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/id.js +function id_default() { + return { + localeError: error19() + }; +} +var error19; +var init_id = __esm({ + "node_modules/zod/v4/locales/id.js"() { + init_util(); + error19 = () => { + const Sizable = { + string: { unit: "karakter", verb: "memiliki" }, + file: { unit: "byte", verb: "memiliki" }, + array: { unit: "item", verb: "memiliki" }, + set: { unit: "item", verb: "memiliki" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "input", + email: "alamat email", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "tanggal dan waktu format ISO", + date: "tanggal format ISO", + time: "jam format ISO", + duration: "durasi format ISO", + ipv4: "alamat IPv4", + ipv6: "alamat IPv6", + cidrv4: "rentang alamat IPv4", + cidrv6: "rentang alamat IPv6", + base64: "string dengan enkode base64", + base64url: "string dengan enkode base64url", + json_string: "string JSON", + e164: "angka E.164", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Input tidak valid: diharapkan instanceof ${issue2.expected}, diterima ${received}`; + } + return `Input tidak valid: diharapkan ${expected}, diterima ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Input tidak valid: diharapkan ${stringifyPrimitive(issue2.values[0])}`; + return `Pilihan tidak valid: diharapkan salah satu dari ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Terlalu besar: diharapkan ${(_c2 = issue2.origin) != null ? _c2 : "value"} memiliki ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elemen"}`; + return `Terlalu besar: diharapkan ${(_e2 = issue2.origin) != null ? _e2 : "value"} menjadi ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Terlalu kecil: diharapkan ${issue2.origin} memiliki ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Terlalu kecil: diharapkan ${issue2.origin} menjadi ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `String tidak valid: harus dimulai dengan "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `String tidak valid: harus berakhir dengan "${_issue.suffix}"`; + if (_issue.format === "includes") + return `String tidak valid: harus menyertakan "${_issue.includes}"`; + if (_issue.format === "regex") + return `String tidak valid: harus sesuai pola ${_issue.pattern}`; + return `${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format} tidak valid`; + } + case "not_multiple_of": + return `Angka tidak valid: harus kelipatan dari ${issue2.divisor}`; + case "unrecognized_keys": + return `Kunci tidak dikenali ${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Kunci tidak valid di ${issue2.origin}`; + case "invalid_union": + return "Input tidak valid"; + case "invalid_element": + return `Nilai tidak valid di ${issue2.origin}`; + default: + return `Input tidak valid`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/is.js +function is_default() { + return { + localeError: error20() + }; +} +var error20; +var init_is = __esm({ + "node_modules/zod/v4/locales/is.js"() { + init_util(); + error20 = () => { + const Sizable = { + string: { unit: "stafi", verb: "a\xF0 hafa" }, + file: { unit: "b\xE6ti", verb: "a\xF0 hafa" }, + array: { unit: "hluti", verb: "a\xF0 hafa" }, + set: { unit: "hluti", verb: "a\xF0 hafa" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "gildi", + email: "netfang", + url: "vefsl\xF3\xF0", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO dagsetning og t\xEDmi", + date: "ISO dagsetning", + time: "ISO t\xEDmi", + duration: "ISO t\xEDmalengd", + ipv4: "IPv4 address", + ipv6: "IPv6 address", + cidrv4: "IPv4 range", + cidrv6: "IPv6 range", + base64: "base64-encoded strengur", + base64url: "base64url-encoded strengur", + json_string: "JSON strengur", + e164: "E.164 t\xF6lugildi", + jwt: "JWT", + template_literal: "gildi" + }; + const TypeDictionary = { + nan: "NaN", + number: "n\xFAmer", + array: "fylki" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Rangt gildi: \xDE\xFA sl\xF3st inn ${received} \xFEar sem \xE1 a\xF0 vera instanceof ${issue2.expected}`; + } + return `Rangt gildi: \xDE\xFA sl\xF3st inn ${received} \xFEar sem \xE1 a\xF0 vera ${expected}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Rangt gildi: gert r\xE1\xF0 fyrir ${stringifyPrimitive(issue2.values[0])}`; + return `\xD3gilt val: m\xE1 vera eitt af eftirfarandi ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${(_c2 = issue2.origin) != null ? _c2 : "gildi"} hafi ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "hluti"}`; + return `Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${(_e2 = issue2.origin) != null ? _e2 : "gildi"} s\xE9 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin} hafi ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin} s\xE9 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\xD3gildur strengur: ver\xF0ur a\xF0 byrja \xE1 "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\xD3gildur strengur: ver\xF0ur a\xF0 enda \xE1 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\xD3gildur strengur: ver\xF0ur a\xF0 innihalda "${_issue.includes}"`; + if (_issue.format === "regex") + return `\xD3gildur strengur: ver\xF0ur a\xF0 fylgja mynstri ${_issue.pattern}`; + return `Rangt ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `R\xF6ng tala: ver\xF0ur a\xF0 vera margfeldi af ${issue2.divisor}`; + case "unrecognized_keys": + return `\xD3\xFEekkt ${issue2.keys.length > 1 ? "ir lyklar" : "ur lykill"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Rangur lykill \xED ${issue2.origin}`; + case "invalid_union": + return "Rangt gildi"; + case "invalid_element": + return `Rangt gildi \xED ${issue2.origin}`; + default: + return `Rangt gildi`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/it.js +function it_default() { + return { + localeError: error21() + }; +} +var error21; +var init_it = __esm({ + "node_modules/zod/v4/locales/it.js"() { + init_util(); + error21 = () => { + const Sizable = { + string: { unit: "caratteri", verb: "avere" }, + file: { unit: "byte", verb: "avere" }, + array: { unit: "elementi", verb: "avere" }, + set: { unit: "elementi", verb: "avere" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "input", + email: "indirizzo email", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "data e ora ISO", + date: "data ISO", + time: "ora ISO", + duration: "durata ISO", + ipv4: "indirizzo IPv4", + ipv6: "indirizzo IPv6", + cidrv4: "intervallo IPv4", + cidrv6: "intervallo IPv6", + base64: "stringa codificata in base64", + base64url: "URL codificata in base64", + json_string: "stringa JSON", + e164: "numero E.164", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN", + number: "numero", + array: "vettore" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Input non valido: atteso instanceof ${issue2.expected}, ricevuto ${received}`; + } + return `Input non valido: atteso ${expected}, ricevuto ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Input non valido: atteso ${stringifyPrimitive(issue2.values[0])}`; + return `Opzione non valida: atteso uno tra ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Troppo grande: ${(_c2 = issue2.origin) != null ? _c2 : "valore"} deve avere ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elementi"}`; + return `Troppo grande: ${(_e2 = issue2.origin) != null ? _e2 : "valore"} deve essere ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Troppo piccolo: ${issue2.origin} deve avere ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Troppo piccolo: ${issue2.origin} deve essere ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Stringa non valida: deve iniziare con "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Stringa non valida: deve terminare con "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Stringa non valida: deve includere "${_issue.includes}"`; + if (_issue.format === "regex") + return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`; + return `Invalid ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `Numero non valido: deve essere un multiplo di ${issue2.divisor}`; + case "unrecognized_keys": + return `Chiav${issue2.keys.length > 1 ? "i" : "e"} non riconosciut${issue2.keys.length > 1 ? "e" : "a"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Chiave non valida in ${issue2.origin}`; + case "invalid_union": + return "Input non valido"; + case "invalid_element": + return `Valore non valido in ${issue2.origin}`; + default: + return `Input non valido`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ja.js +function ja_default2() { + return { + localeError: error22() + }; +} +var error22; +var init_ja = __esm({ + "node_modules/zod/v4/locales/ja.js"() { + init_util(); + error22 = () => { + const Sizable = { + string: { unit: "\u6587\u5B57", verb: "\u3067\u3042\u308B" }, + file: { unit: "\u30D0\u30A4\u30C8", verb: "\u3067\u3042\u308B" }, + array: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" }, + set: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u5165\u529B\u5024", + email: "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9", + url: "URL", + emoji: "\u7D75\u6587\u5B57", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO\u65E5\u6642", + date: "ISO\u65E5\u4ED8", + time: "ISO\u6642\u523B", + duration: "ISO\u671F\u9593", + ipv4: "IPv4\u30A2\u30C9\u30EC\u30B9", + ipv6: "IPv6\u30A2\u30C9\u30EC\u30B9", + cidrv4: "IPv4\u7BC4\u56F2", + cidrv6: "IPv6\u7BC4\u56F2", + base64: "base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217", + base64url: "base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217", + json_string: "JSON\u6587\u5B57\u5217", + e164: "E.164\u756A\u53F7", + jwt: "JWT", + template_literal: "\u5165\u529B\u5024" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u6570\u5024", + array: "\u914D\u5217" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u7121\u52B9\u306A\u5165\u529B: instanceof ${issue2.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`; + } + return `\u7121\u52B9\u306A\u5165\u529B: ${expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u7121\u52B9\u306A\u5165\u529B: ${stringifyPrimitive(issue2.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`; + return `\u7121\u52B9\u306A\u9078\u629E: ${joinValues(issue2.values, "\u3001")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + case "too_big": { + const adj = issue2.inclusive ? "\u4EE5\u4E0B\u3067\u3042\u308B" : "\u3088\u308A\u5C0F\u3055\u3044"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u5927\u304D\u3059\u304E\u308B\u5024: ${(_c2 = issue2.origin) != null ? _c2 : "\u5024"}\u306F${issue2.maximum.toString()}${(_d = sizing.unit) != null ? _d : "\u8981\u7D20"}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + return `\u5927\u304D\u3059\u304E\u308B\u5024: ${(_e2 = issue2.origin) != null ? _e2 : "\u5024"}\u306F${issue2.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + } + case "too_small": { + const adj = issue2.inclusive ? "\u4EE5\u4E0A\u3067\u3042\u308B" : "\u3088\u308A\u5927\u304D\u3044"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue2.origin}\u306F${issue2.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue2.origin}\u306F${issue2.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.prefix}"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + if (_issue.format === "ends_with") + return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.suffix}"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + if (_issue.format === "includes") + return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.includes}"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + if (_issue.format === "regex") + return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + return `\u7121\u52B9\u306A${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `\u7121\u52B9\u306A\u6570\u5024: ${issue2.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + case "unrecognized_keys": + return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue2.keys.length > 1 ? "\u7FA4" : ""}: ${joinValues(issue2.keys, "\u3001")}`; + case "invalid_key": + return `${issue2.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`; + case "invalid_union": + return "\u7121\u52B9\u306A\u5165\u529B"; + case "invalid_element": + return `${issue2.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`; + default: + return `\u7121\u52B9\u306A\u5165\u529B`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ka.js +function ka_default() { + return { + localeError: error23() + }; +} +var error23; +var init_ka = __esm({ + "node_modules/zod/v4/locales/ka.js"() { + init_util(); + error23 = () => { + const Sizable = { + string: { unit: "\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }, + file: { unit: "\u10D1\u10D0\u10D8\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }, + array: { unit: "\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }, + set: { unit: "\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0", + email: "\u10D4\u10DA-\u10E4\u10DD\u10E1\u10E2\u10D8\u10E1 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8", + url: "URL", + emoji: "\u10D4\u10DB\u10DD\u10EF\u10D8", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8-\u10D3\u10E0\u10DD", + date: "\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8", + time: "\u10D3\u10E0\u10DD", + duration: "\u10EE\u10D0\u10DC\u10D2\u10E0\u10EB\u10DA\u10D8\u10D5\u10DD\u10D1\u10D0", + ipv4: "IPv4 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8", + ipv6: "IPv6 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8", + cidrv4: "IPv4 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8", + cidrv6: "IPv6 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8", + base64: "base64-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8", + base64url: "base64url-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8", + json_string: "JSON \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8", + e164: "E.164 \u10DC\u10DD\u10DB\u10D4\u10E0\u10D8", + jwt: "JWT", + template_literal: "\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u10E0\u10D8\u10EA\u10EE\u10D5\u10D8", + string: "\u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8", + boolean: "\u10D1\u10E3\u10DA\u10D4\u10D0\u10DC\u10D8", + function: "\u10E4\u10E3\u10DC\u10E5\u10EA\u10D8\u10D0", + array: "\u10DB\u10D0\u10E1\u10D8\u10D5\u10D8" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 instanceof ${issue2.expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`; + } + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${stringifyPrimitive(issue2.values[0])}`; + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D0\u10E0\u10D8\u10D0\u10DC\u10E2\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8\u10D0 \u10D4\u10E0\u10D7-\u10D4\u10E0\u10D7\u10D8 ${joinValues(issue2.values, "|")}-\u10D3\u10D0\u10DC`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${(_c2 = issue2.origin) != null ? _c2 : "\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit}`; + return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${(_d = issue2.origin) != null ? _d : "\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10EC\u10E7\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 "${_issue.prefix}"-\u10D8\u10D7`; + } + if (_issue.format === "ends_with") + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10DB\u10D7\u10D0\u10D5\u10E0\u10D3\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 "${_issue.suffix}"-\u10D8\u10D7`; + if (_issue.format === "includes") + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1 "${_issue.includes}"-\u10E1`; + if (_issue.format === "regex") + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D4\u10E1\u10D0\u10D1\u10D0\u10DB\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \u10E8\u10D0\u10D1\u10DA\u10DD\u10DC\u10E1 ${_issue.pattern}`; + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 ${(_e2 = FormatDictionary[_issue.format]) != null ? _e2 : issue2.format}`; + } + case "not_multiple_of": + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E0\u10D8\u10EA\u10EE\u10D5\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10E7\u10DD\u10E1 ${issue2.divisor}-\u10D8\u10E1 \u10EF\u10D4\u10E0\u10D0\u10D3\u10D8`; + case "unrecognized_keys": + return `\u10E3\u10EA\u10DC\u10DD\u10D1\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1${issue2.keys.length > 1 ? "\u10D4\u10D1\u10D8" : "\u10D8"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1\u10D8 ${issue2.origin}-\u10E8\u10D8`; + case "invalid_union": + return "\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0"; + case "invalid_element": + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0 ${issue2.origin}-\u10E8\u10D8`; + default: + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/km.js +function km_default() { + return { + localeError: error24() + }; +} +var error24; +var init_km = __esm({ + "node_modules/zod/v4/locales/km.js"() { + init_util(); + error24 = () => { + const Sizable = { + string: { unit: "\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, + file: { unit: "\u1794\u17C3", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, + array: { unit: "\u1792\u17B6\u178F\u17BB", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, + set: { unit: "\u1792\u17B6\u178F\u17BB", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B", + email: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793\u17A2\u17CA\u17B8\u1798\u17C2\u179B", + url: "URL", + emoji: "\u179F\u1789\u17D2\u1789\u17B6\u17A2\u17B6\u179A\u1798\u17D2\u1798\u178E\u17CD", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 \u1793\u17B7\u1784\u1798\u17C9\u17C4\u1784 ISO", + date: "\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 ISO", + time: "\u1798\u17C9\u17C4\u1784 ISO", + duration: "\u179A\u1799\u17C8\u1796\u17C1\u179B ISO", + ipv4: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4", + ipv6: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6", + cidrv4: "\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4", + cidrv6: "\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6", + base64: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64", + base64url: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64url", + json_string: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A JSON", + e164: "\u179B\u17C1\u1781 E.164", + jwt: "JWT", + template_literal: "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u179B\u17C1\u1781", + array: "\u17A2\u17B6\u179A\u17C1 (Array)", + null: "\u1782\u17D2\u1798\u17B6\u1793\u178F\u1798\u17D2\u179B\u17C3 (null)" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A instanceof ${issue2.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`; + } + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${stringifyPrimitive(issue2.values[0])}`; + return `\u1787\u1798\u17D2\u179A\u17BE\u179F\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1787\u17B6\u1798\u17BD\u1799\u1780\u17D2\u1793\u17BB\u1784\u1785\u17C6\u178E\u17C4\u1798 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${(_c2 = issue2.origin) != null ? _c2 : "\u178F\u1798\u17D2\u179B\u17C3"} ${adj} ${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\u1792\u17B6\u178F\u17BB"}`; + return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${(_e2 = issue2.origin) != null ? _e2 : "\u178F\u1798\u17D2\u179B\u17C3"} ${adj} ${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin} ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin} ${adj} ${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798\u178A\u17C4\u1799 "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1794\u1789\u17D2\u1785\u1794\u17CB\u178A\u17C4\u1799 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1798\u17B6\u1793 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1795\u17D2\u1782\u17BC\u1795\u17D2\u1782\u1784\u1793\u17B9\u1784\u1791\u1798\u17D2\u179A\u1784\u17CB\u178A\u17C2\u179B\u1794\u17B6\u1793\u1780\u17C6\u178E\u178F\u17CB ${_issue.pattern}`; + return `\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `\u179B\u17C1\u1781\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1787\u17B6\u1796\u17A0\u17BB\u1782\u17BB\u178E\u1793\u17C3 ${issue2.divisor}`; + case "unrecognized_keys": + return `\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u179F\u17C4\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue2.origin}`; + case "invalid_union": + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`; + case "invalid_element": + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue2.origin}`; + default: + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/kh.js +function kh_default() { + return km_default(); +} +var init_kh = __esm({ + "node_modules/zod/v4/locales/kh.js"() { + init_km(); + } +}); + +// node_modules/zod/v4/locales/ko.js +function ko_default2() { + return { + localeError: error25() + }; +} +var error25; +var init_ko = __esm({ + "node_modules/zod/v4/locales/ko.js"() { + init_util(); + error25 = () => { + const Sizable = { + string: { unit: "\uBB38\uC790", verb: "to have" }, + file: { unit: "\uBC14\uC774\uD2B8", verb: "to have" }, + array: { unit: "\uAC1C", verb: "to have" }, + set: { unit: "\uAC1C", verb: "to have" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\uC785\uB825", + email: "\uC774\uBA54\uC77C \uC8FC\uC18C", + url: "URL", + emoji: "\uC774\uBAA8\uC9C0", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \uB0A0\uC9DC\uC2DC\uAC04", + date: "ISO \uB0A0\uC9DC", + time: "ISO \uC2DC\uAC04", + duration: "ISO \uAE30\uAC04", + ipv4: "IPv4 \uC8FC\uC18C", + ipv6: "IPv6 \uC8FC\uC18C", + cidrv4: "IPv4 \uBC94\uC704", + cidrv6: "IPv6 \uBC94\uC704", + base64: "base64 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4", + base64url: "base64url \uC778\uCF54\uB529 \uBB38\uC790\uC5F4", + json_string: "JSON \uBB38\uC790\uC5F4", + e164: "E.164 \uBC88\uD638", + jwt: "JWT", + template_literal: "\uC785\uB825" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 instanceof ${issue2.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`; + } + return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${stringifyPrimitive(issue2.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`; + return `\uC798\uBABB\uB41C \uC635\uC158: ${joinValues(issue2.values, "\uB610\uB294 ")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`; + case "too_big": { + const adj = issue2.inclusive ? "\uC774\uD558" : "\uBBF8\uB9CC"; + const suffix = adj === "\uBBF8\uB9CC" ? "\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4" : "\uC5EC\uC57C \uD569\uB2C8\uB2E4"; + const sizing = getSizing(issue2.origin); + const unit = (_c2 = sizing == null ? void 0 : sizing.unit) != null ? _c2 : "\uC694\uC18C"; + if (sizing) + return `${(_d = issue2.origin) != null ? _d : "\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue2.maximum.toString()}${unit} ${adj}${suffix}`; + return `${(_e2 = issue2.origin) != null ? _e2 : "\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue2.maximum.toString()} ${adj}${suffix}`; + } + case "too_small": { + const adj = issue2.inclusive ? "\uC774\uC0C1" : "\uCD08\uACFC"; + const suffix = adj === "\uC774\uC0C1" ? "\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4" : "\uC5EC\uC57C \uD569\uB2C8\uB2E4"; + const sizing = getSizing(issue2.origin); + const unit = (_f2 = sizing == null ? void 0 : sizing.unit) != null ? _f2 : "\uC694\uC18C"; + if (sizing) { + return `${(_g = issue2.origin) != null ? _g : "\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue2.minimum.toString()}${unit} ${adj}${suffix}`; + } + return `${(_h2 = issue2.origin) != null ? _h2 : "\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue2.minimum.toString()} ${adj}${suffix}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.prefix}"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`; + } + if (_issue.format === "ends_with") + return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.suffix}"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`; + if (_issue.format === "includes") + return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.includes}"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`; + if (_issue.format === "regex") + return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${_issue.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`; + return `\uC798\uBABB\uB41C ${(_i = FormatDictionary[_issue.format]) != null ? _i : issue2.format}`; + } + case "not_multiple_of": + return `\uC798\uBABB\uB41C \uC22B\uC790: ${issue2.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`; + case "unrecognized_keys": + return `\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\uC798\uBABB\uB41C \uD0A4: ${issue2.origin}`; + case "invalid_union": + return `\uC798\uBABB\uB41C \uC785\uB825`; + case "invalid_element": + return `\uC798\uBABB\uB41C \uAC12: ${issue2.origin}`; + default: + return `\uC798\uBABB\uB41C \uC785\uB825`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/lt.js +function getUnitTypeFromNumber(number5) { + const abs = Math.abs(number5); + const last = abs % 10; + const last2 = abs % 100; + if (last2 >= 11 && last2 <= 19 || last === 0) + return "many"; + if (last === 1) + return "one"; + return "few"; +} +function lt_default() { + return { + localeError: error26() + }; +} +var capitalizeFirstCharacter, error26; +var init_lt = __esm({ + "node_modules/zod/v4/locales/lt.js"() { + init_util(); + capitalizeFirstCharacter = (text) => { + return text.charAt(0).toUpperCase() + text.slice(1); + }; + error26 = () => { + const Sizable = { + string: { + unit: { + one: "simbolis", + few: "simboliai", + many: "simboli\u0173" + }, + verb: { + smaller: { + inclusive: "turi b\u016Bti ne ilgesn\u0117 kaip", + notInclusive: "turi b\u016Bti trumpesn\u0117 kaip" + }, + bigger: { + inclusive: "turi b\u016Bti ne trumpesn\u0117 kaip", + notInclusive: "turi b\u016Bti ilgesn\u0117 kaip" + } + } + }, + file: { + unit: { + one: "baitas", + few: "baitai", + many: "bait\u0173" + }, + verb: { + smaller: { + inclusive: "turi b\u016Bti ne didesnis kaip", + notInclusive: "turi b\u016Bti ma\u017Eesnis kaip" + }, + bigger: { + inclusive: "turi b\u016Bti ne ma\u017Eesnis kaip", + notInclusive: "turi b\u016Bti didesnis kaip" + } + } + }, + array: { + unit: { + one: "element\u0105", + few: "elementus", + many: "element\u0173" + }, + verb: { + smaller: { + inclusive: "turi tur\u0117ti ne daugiau kaip", + notInclusive: "turi tur\u0117ti ma\u017Eiau kaip" + }, + bigger: { + inclusive: "turi tur\u0117ti ne ma\u017Eiau kaip", + notInclusive: "turi tur\u0117ti daugiau kaip" + } + } + }, + set: { + unit: { + one: "element\u0105", + few: "elementus", + many: "element\u0173" + }, + verb: { + smaller: { + inclusive: "turi tur\u0117ti ne daugiau kaip", + notInclusive: "turi tur\u0117ti ma\u017Eiau kaip" + }, + bigger: { + inclusive: "turi tur\u0117ti ne ma\u017Eiau kaip", + notInclusive: "turi tur\u0117ti daugiau kaip" + } + } + } + }; + function getSizing(origin, unitType, inclusive, targetShouldBe) { + var _a5; + const result = (_a5 = Sizable[origin]) != null ? _a5 : null; + if (result === null) + return result; + return { + unit: result.unit[unitType], + verb: result.verb[targetShouldBe][inclusive ? "inclusive" : "notInclusive"] + }; + } + const FormatDictionary = { + regex: "\u012Fvestis", + email: "el. pa\u0161to adresas", + url: "URL", + emoji: "jaustukas", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO data ir laikas", + date: "ISO data", + time: "ISO laikas", + duration: "ISO trukm\u0117", + ipv4: "IPv4 adresas", + ipv6: "IPv6 adresas", + cidrv4: "IPv4 tinklo prefiksas (CIDR)", + cidrv6: "IPv6 tinklo prefiksas (CIDR)", + base64: "base64 u\u017Ekoduota eilut\u0117", + base64url: "base64url u\u017Ekoduota eilut\u0117", + json_string: "JSON eilut\u0117", + e164: "E.164 numeris", + jwt: "JWT", + template_literal: "\u012Fvestis" + }; + const TypeDictionary = { + nan: "NaN", + number: "skai\u010Dius", + bigint: "sveikasis skai\u010Dius", + string: "eilut\u0117", + boolean: "login\u0117 reik\u0161m\u0117", + undefined: "neapibr\u0117\u017Eta reik\u0161m\u0117", + function: "funkcija", + symbol: "simbolis", + array: "masyvas", + object: "objektas", + null: "nulin\u0117 reik\u0161m\u0117" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m, _n, _o; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Gautas tipas ${received}, o tik\u0117tasi - instanceof ${issue2.expected}`; + } + return `Gautas tipas ${received}, o tik\u0117tasi - ${expected}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Privalo b\u016Bti ${stringifyPrimitive(issue2.values[0])}`; + return `Privalo b\u016Bti vienas i\u0161 ${joinValues(issue2.values, "|")} pasirinkim\u0173`; + case "too_big": { + const origin = (_c2 = TypeDictionary[issue2.origin]) != null ? _c2 : issue2.origin; + const sizing = getSizing(issue2.origin, getUnitTypeFromNumber(Number(issue2.maximum)), (_d = issue2.inclusive) != null ? _d : false, "smaller"); + if (sizing == null ? void 0 : sizing.verb) + return `${capitalizeFirstCharacter((_e2 = origin != null ? origin : issue2.origin) != null ? _e2 : "reik\u0161m\u0117")} ${sizing.verb} ${issue2.maximum.toString()} ${(_f2 = sizing.unit) != null ? _f2 : "element\u0173"}`; + const adj = issue2.inclusive ? "ne didesnis kaip" : "ma\u017Eesnis kaip"; + return `${capitalizeFirstCharacter((_g = origin != null ? origin : issue2.origin) != null ? _g : "reik\u0161m\u0117")} turi b\u016Bti ${adj} ${issue2.maximum.toString()} ${sizing == null ? void 0 : sizing.unit}`; + } + case "too_small": { + const origin = (_h2 = TypeDictionary[issue2.origin]) != null ? _h2 : issue2.origin; + const sizing = getSizing(issue2.origin, getUnitTypeFromNumber(Number(issue2.minimum)), (_i = issue2.inclusive) != null ? _i : false, "bigger"); + if (sizing == null ? void 0 : sizing.verb) + return `${capitalizeFirstCharacter((_j = origin != null ? origin : issue2.origin) != null ? _j : "reik\u0161m\u0117")} ${sizing.verb} ${issue2.minimum.toString()} ${(_k3 = sizing.unit) != null ? _k3 : "element\u0173"}`; + const adj = issue2.inclusive ? "ne ma\u017Eesnis kaip" : "didesnis kaip"; + return `${capitalizeFirstCharacter((_l2 = origin != null ? origin : issue2.origin) != null ? _l2 : "reik\u0161m\u0117")} turi b\u016Bti ${adj} ${issue2.minimum.toString()} ${sizing == null ? void 0 : sizing.unit}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Eilut\u0117 privalo prasid\u0117ti "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Eilut\u0117 privalo pasibaigti "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Eilut\u0117 privalo \u012Ftraukti "${_issue.includes}"`; + if (_issue.format === "regex") + return `Eilut\u0117 privalo atitikti ${_issue.pattern}`; + return `Neteisingas ${(_m = FormatDictionary[_issue.format]) != null ? _m : issue2.format}`; + } + case "not_multiple_of": + return `Skai\u010Dius privalo b\u016Bti ${issue2.divisor} kartotinis.`; + case "unrecognized_keys": + return `Neatpa\u017Eint${issue2.keys.length > 1 ? "i" : "as"} rakt${issue2.keys.length > 1 ? "ai" : "as"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return "Rastas klaidingas raktas"; + case "invalid_union": + return "Klaidinga \u012Fvestis"; + case "invalid_element": { + const origin = (_n = TypeDictionary[issue2.origin]) != null ? _n : issue2.origin; + return `${capitalizeFirstCharacter((_o = origin != null ? origin : issue2.origin) != null ? _o : "reik\u0161m\u0117")} turi klaiding\u0105 \u012Fvest\u012F`; + } + default: + return "Klaidinga \u012Fvestis"; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/mk.js +function mk_default() { + return { + localeError: error27() + }; +} +var error27; +var init_mk = __esm({ + "node_modules/zod/v4/locales/mk.js"() { + init_util(); + error27 = () => { + const Sizable = { + string: { unit: "\u0437\u043D\u0430\u0446\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, + file: { unit: "\u0431\u0430\u0458\u0442\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, + array: { unit: "\u0441\u0442\u0430\u0432\u043A\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, + set: { unit: "\u0441\u0442\u0430\u0432\u043A\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u0432\u043D\u0435\u0441", + email: "\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0430 \u0435-\u043F\u043E\u0448\u0442\u0430", + url: "URL", + emoji: "\u0435\u043C\u043E\u045F\u0438", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0434\u0430\u0442\u0443\u043C \u0438 \u0432\u0440\u0435\u043C\u0435", + date: "ISO \u0434\u0430\u0442\u0443\u043C", + time: "ISO \u0432\u0440\u0435\u043C\u0435", + duration: "ISO \u0432\u0440\u0435\u043C\u0435\u0442\u0440\u0430\u0435\u045A\u0435", + ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441\u0430", + ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441\u0430", + cidrv4: "IPv4 \u043E\u043F\u0441\u0435\u0433", + cidrv6: "IPv6 \u043E\u043F\u0441\u0435\u0433", + base64: "base64-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430", + base64url: "base64url-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430", + json_string: "JSON \u043D\u0438\u0437\u0430", + e164: "E.164 \u0431\u0440\u043E\u0458", + jwt: "JWT", + template_literal: "\u0432\u043D\u0435\u0441" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0431\u0440\u043E\u0458", + array: "\u043D\u0438\u0437\u0430" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 instanceof ${issue2.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`; + } + return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Invalid input: expected ${stringifyPrimitive(issue2.values[0])}`; + return `\u0413\u0440\u0435\u0448\u0430\u043D\u0430 \u043E\u043F\u0446\u0438\u0458\u0430: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 \u0435\u0434\u043D\u0430 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${(_c2 = issue2.origin) != null ? _c2 : "\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0438"}`; + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${(_e2 = issue2.origin) != null ? _e2 : "\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u043D\u0443\u0432\u0430 \u0441\u043E "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u0432\u0440\u0448\u0443\u0432\u0430 \u0441\u043E "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0432\u043A\u043B\u0443\u0447\u0443\u0432\u0430 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u043E\u0434\u0433\u043E\u0430\u0440\u0430 \u043D\u0430 \u043F\u0430\u0442\u0435\u0440\u043D\u043E\u0442 ${_issue.pattern}`; + return `Invalid ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `\u0413\u0440\u0435\u0448\u0435\u043D \u0431\u0440\u043E\u0458: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u0435\u043B\u0438\u0432 \u0441\u043E ${issue2.divisor}`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D\u0438 \u043A\u043B\u0443\u0447\u0435\u0432\u0438" : "\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D \u043A\u043B\u0443\u0447"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${issue2.origin}`; + case "invalid_union": + return "\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441"; + case "invalid_element": + return `\u0413\u0440\u0435\u0448\u043D\u0430 \u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442 \u0432\u043E ${issue2.origin}`; + default: + return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ms.js +function ms_default() { + return { + localeError: error28() + }; +} +var error28; +var init_ms = __esm({ + "node_modules/zod/v4/locales/ms.js"() { + init_util(); + error28 = () => { + const Sizable = { + string: { unit: "aksara", verb: "mempunyai" }, + file: { unit: "bait", verb: "mempunyai" }, + array: { unit: "elemen", verb: "mempunyai" }, + set: { unit: "elemen", verb: "mempunyai" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "input", + email: "alamat e-mel", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "tarikh masa ISO", + date: "tarikh ISO", + time: "masa ISO", + duration: "tempoh ISO", + ipv4: "alamat IPv4", + ipv6: "alamat IPv6", + cidrv4: "julat IPv4", + cidrv6: "julat IPv6", + base64: "string dikodkan base64", + base64url: "string dikodkan base64url", + json_string: "string JSON", + e164: "nombor E.164", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN", + number: "nombor" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Input tidak sah: dijangka instanceof ${issue2.expected}, diterima ${received}`; + } + return `Input tidak sah: dijangka ${expected}, diterima ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Input tidak sah: dijangka ${stringifyPrimitive(issue2.values[0])}`; + return `Pilihan tidak sah: dijangka salah satu daripada ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Terlalu besar: dijangka ${(_c2 = issue2.origin) != null ? _c2 : "nilai"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elemen"}`; + return `Terlalu besar: dijangka ${(_e2 = issue2.origin) != null ? _e2 : "nilai"} adalah ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Terlalu kecil: dijangka ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Terlalu kecil: dijangka ${issue2.origin} adalah ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `String tidak sah: mesti bermula dengan "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `String tidak sah: mesti berakhir dengan "${_issue.suffix}"`; + if (_issue.format === "includes") + return `String tidak sah: mesti mengandungi "${_issue.includes}"`; + if (_issue.format === "regex") + return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`; + return `${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format} tidak sah`; + } + case "not_multiple_of": + return `Nombor tidak sah: perlu gandaan ${issue2.divisor}`; + case "unrecognized_keys": + return `Kunci tidak dikenali: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Kunci tidak sah dalam ${issue2.origin}`; + case "invalid_union": + return "Input tidak sah"; + case "invalid_element": + return `Nilai tidak sah dalam ${issue2.origin}`; + default: + return `Input tidak sah`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/nl.js +function nl_default() { + return { + localeError: error29() + }; +} +var error29; +var init_nl = __esm({ + "node_modules/zod/v4/locales/nl.js"() { + init_util(); + error29 = () => { + const Sizable = { + string: { unit: "tekens", verb: "heeft" }, + file: { unit: "bytes", verb: "heeft" }, + array: { unit: "elementen", verb: "heeft" }, + set: { unit: "elementen", verb: "heeft" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "invoer", + email: "emailadres", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO datum en tijd", + date: "ISO datum", + time: "ISO tijd", + duration: "ISO duur", + ipv4: "IPv4-adres", + ipv6: "IPv6-adres", + cidrv4: "IPv4-bereik", + cidrv6: "IPv6-bereik", + base64: "base64-gecodeerde tekst", + base64url: "base64 URL-gecodeerde tekst", + json_string: "JSON string", + e164: "E.164-nummer", + jwt: "JWT", + template_literal: "invoer" + }; + const TypeDictionary = { + nan: "NaN", + number: "getal" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Ongeldige invoer: verwacht instanceof ${issue2.expected}, ontving ${received}`; + } + return `Ongeldige invoer: verwacht ${expected}, ontving ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ongeldige invoer: verwacht ${stringifyPrimitive(issue2.values[0])}`; + return `Ongeldige optie: verwacht \xE9\xE9n van ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + const longName = issue2.origin === "date" ? "laat" : issue2.origin === "string" ? "lang" : "groot"; + if (sizing) + return `Te ${longName}: verwacht dat ${(_c2 = issue2.origin) != null ? _c2 : "waarde"} ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elementen"} ${sizing.verb}`; + return `Te ${longName}: verwacht dat ${(_e2 = issue2.origin) != null ? _e2 : "waarde"} ${adj}${issue2.maximum.toString()} is`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + const shortName = issue2.origin === "date" ? "vroeg" : issue2.origin === "string" ? "kort" : "klein"; + if (sizing) { + return `Te ${shortName}: verwacht dat ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} ${sizing.verb}`; + } + return `Te ${shortName}: verwacht dat ${issue2.origin} ${adj}${issue2.minimum.toString()} is`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Ongeldige tekst: moet met "${_issue.prefix}" beginnen`; + } + if (_issue.format === "ends_with") + return `Ongeldige tekst: moet op "${_issue.suffix}" eindigen`; + if (_issue.format === "includes") + return `Ongeldige tekst: moet "${_issue.includes}" bevatten`; + if (_issue.format === "regex") + return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`; + return `Ongeldig: ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `Ongeldig getal: moet een veelvoud van ${issue2.divisor} zijn`; + case "unrecognized_keys": + return `Onbekende key${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ongeldige key in ${issue2.origin}`; + case "invalid_union": + return "Ongeldige invoer"; + case "invalid_element": + return `Ongeldige waarde in ${issue2.origin}`; + default: + return `Ongeldige invoer`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/no.js +function no_default() { + return { + localeError: error30() + }; +} +var error30; +var init_no = __esm({ + "node_modules/zod/v4/locales/no.js"() { + init_util(); + error30 = () => { + const Sizable = { + string: { unit: "tegn", verb: "\xE5 ha" }, + file: { unit: "bytes", verb: "\xE5 ha" }, + array: { unit: "elementer", verb: "\xE5 inneholde" }, + set: { unit: "elementer", verb: "\xE5 inneholde" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "input", + email: "e-postadresse", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO dato- og klokkeslett", + date: "ISO-dato", + time: "ISO-klokkeslett", + duration: "ISO-varighet", + ipv4: "IPv4-omr\xE5de", + ipv6: "IPv6-omr\xE5de", + cidrv4: "IPv4-spekter", + cidrv6: "IPv6-spekter", + base64: "base64-enkodet streng", + base64url: "base64url-enkodet streng", + json_string: "JSON-streng", + e164: "E.164-nummer", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN", + number: "tall", + array: "liste" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Ugyldig input: forventet instanceof ${issue2.expected}, fikk ${received}`; + } + return `Ugyldig input: forventet ${expected}, fikk ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ugyldig verdi: forventet ${stringifyPrimitive(issue2.values[0])}`; + return `Ugyldig valg: forventet en av ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `For stor(t): forventet ${(_c2 = issue2.origin) != null ? _c2 : "value"} til \xE5 ha ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elementer"}`; + return `For stor(t): forventet ${(_e2 = issue2.origin) != null ? _e2 : "value"} til \xE5 ha ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `For lite(n): forventet ${issue2.origin} til \xE5 ha ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `For lite(n): forventet ${issue2.origin} til \xE5 ha ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Ugyldig streng: m\xE5 starte med "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Ugyldig streng: m\xE5 ende med "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Ugyldig streng: m\xE5 inneholde "${_issue.includes}"`; + if (_issue.format === "regex") + return `Ugyldig streng: m\xE5 matche m\xF8nsteret ${_issue.pattern}`; + return `Ugyldig ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `Ugyldig tall: m\xE5 v\xE6re et multiplum av ${issue2.divisor}`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Ukjente n\xF8kler" : "Ukjent n\xF8kkel"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ugyldig n\xF8kkel i ${issue2.origin}`; + case "invalid_union": + return "Ugyldig input"; + case "invalid_element": + return `Ugyldig verdi i ${issue2.origin}`; + default: + return `Ugyldig input`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ota.js +function ota_default() { + return { + localeError: error31() + }; +} +var error31; +var init_ota = __esm({ + "node_modules/zod/v4/locales/ota.js"() { + init_util(); + error31 = () => { + const Sizable = { + string: { unit: "harf", verb: "olmal\u0131d\u0131r" }, + file: { unit: "bayt", verb: "olmal\u0131d\u0131r" }, + array: { unit: "unsur", verb: "olmal\u0131d\u0131r" }, + set: { unit: "unsur", verb: "olmal\u0131d\u0131r" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "giren", + email: "epostag\xE2h", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO heng\xE2m\u0131", + date: "ISO tarihi", + time: "ISO zaman\u0131", + duration: "ISO m\xFCddeti", + ipv4: "IPv4 ni\u015F\xE2n\u0131", + ipv6: "IPv6 ni\u015F\xE2n\u0131", + cidrv4: "IPv4 menzili", + cidrv6: "IPv6 menzili", + base64: "base64-\u015Fifreli metin", + base64url: "base64url-\u015Fifreli metin", + json_string: "JSON metin", + e164: "E.164 say\u0131s\u0131", + jwt: "JWT", + template_literal: "giren" + }; + const TypeDictionary = { + nan: "NaN", + number: "numara", + array: "saf", + null: "gayb" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `F\xE2sit giren: umulan instanceof ${issue2.expected}, al\u0131nan ${received}`; + } + return `F\xE2sit giren: umulan ${expected}, al\u0131nan ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `F\xE2sit giren: umulan ${stringifyPrimitive(issue2.values[0])}`; + return `F\xE2sit tercih: m\xFBteberler ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Fazla b\xFCy\xFCk: ${(_c2 = issue2.origin) != null ? _c2 : "value"}, ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elements"} sahip olmal\u0131yd\u0131.`; + return `Fazla b\xFCy\xFCk: ${(_e2 = issue2.origin) != null ? _e2 : "value"}, ${adj}${issue2.maximum.toString()} olmal\u0131yd\u0131.`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Fazla k\xFC\xE7\xFCk: ${issue2.origin}, ${adj}${issue2.minimum.toString()} ${sizing.unit} sahip olmal\u0131yd\u0131.`; + } + return `Fazla k\xFC\xE7\xFCk: ${issue2.origin}, ${adj}${issue2.minimum.toString()} olmal\u0131yd\u0131.`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `F\xE2sit metin: "${_issue.prefix}" ile ba\u015Flamal\u0131.`; + if (_issue.format === "ends_with") + return `F\xE2sit metin: "${_issue.suffix}" ile bitmeli.`; + if (_issue.format === "includes") + return `F\xE2sit metin: "${_issue.includes}" ihtiv\xE2 etmeli.`; + if (_issue.format === "regex") + return `F\xE2sit metin: ${_issue.pattern} nak\u015F\u0131na uymal\u0131.`; + return `F\xE2sit ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `F\xE2sit say\u0131: ${issue2.divisor} kat\u0131 olmal\u0131yd\u0131.`; + case "unrecognized_keys": + return `Tan\u0131nmayan anahtar ${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} i\xE7in tan\u0131nmayan anahtar var.`; + case "invalid_union": + return "Giren tan\u0131namad\u0131."; + case "invalid_element": + return `${issue2.origin} i\xE7in tan\u0131nmayan k\u0131ymet var.`; + default: + return `K\u0131ymet tan\u0131namad\u0131.`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ps.js +function ps_default() { + return { + localeError: error32() + }; +} +var error32; +var init_ps = __esm({ + "node_modules/zod/v4/locales/ps.js"() { + init_util(); + error32 = () => { + const Sizable = { + string: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" }, + file: { unit: "\u0628\u0627\u06CC\u067C\u0633", verb: "\u0648\u0644\u0631\u064A" }, + array: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" }, + set: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u0648\u0631\u0648\u062F\u064A", + email: "\u0628\u0631\u06CC\u069A\u0646\u0627\u0644\u06CC\u06A9", + url: "\u06CC\u0648 \u0622\u0631 \u0627\u0644", + emoji: "\u0627\u06CC\u0645\u0648\u062C\u064A", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u0646\u06CC\u067C\u0647 \u0627\u0648 \u0648\u062E\u062A", + date: "\u0646\u06D0\u067C\u0647", + time: "\u0648\u062E\u062A", + duration: "\u0645\u0648\u062F\u0647", + ipv4: "\u062F IPv4 \u067E\u062A\u0647", + ipv6: "\u062F IPv6 \u067E\u062A\u0647", + cidrv4: "\u062F IPv4 \u0633\u0627\u062D\u0647", + cidrv6: "\u062F IPv6 \u0633\u0627\u062D\u0647", + base64: "base64-encoded \u0645\u062A\u0646", + base64url: "base64url-encoded \u0645\u062A\u0646", + json_string: "JSON \u0645\u062A\u0646", + e164: "\u062F E.164 \u0634\u0645\u06D0\u0631\u0647", + jwt: "JWT", + template_literal: "\u0648\u0631\u0648\u062F\u064A" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0639\u062F\u062F", + array: "\u0627\u0631\u06D0" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F instanceof ${issue2.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`; + } + return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`; + } + case "invalid_value": + if (issue2.values.length === 1) { + return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${stringifyPrimitive(issue2.values[0])} \u0648\u0627\u06CC`; + } + return `\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${joinValues(issue2.values, "|")} \u0685\u062E\u0647 \u0648\u0627\u06CC`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${(_c2 = issue2.origin) != null ? _c2 : "\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\u0639\u0646\u0635\u0631\u0648\u0646\u0647"} \u0648\u0644\u0631\u064A`; + } + return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${(_e2 = issue2.origin) != null ? _e2 : "\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} \u0648\u064A`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0648\u0644\u0631\u064A`; + } + return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} \u0648\u064A`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${_issue.prefix}" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`; + } + if (_issue.format === "ends_with") { + return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${_issue.suffix}" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`; + } + if (_issue.format === "includes") { + return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F "${_issue.includes}" \u0648\u0644\u0631\u064A`; + } + if (_issue.format === "regex") { + return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${_issue.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`; + } + return `${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`; + } + case "not_multiple_of": + return `\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${issue2.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`; + case "unrecognized_keys": + return `\u0646\u0627\u0633\u0645 ${issue2.keys.length > 1 ? "\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647" : "\u06A9\u0644\u06CC\u0689"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${issue2.origin} \u06A9\u06D0`; + case "invalid_union": + return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`; + case "invalid_element": + return `\u0646\u0627\u0633\u0645 \u0639\u0646\u0635\u0631 \u067E\u0647 ${issue2.origin} \u06A9\u06D0`; + default: + return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/pl.js +function pl_default() { + return { + localeError: error33() + }; +} +var error33; +var init_pl = __esm({ + "node_modules/zod/v4/locales/pl.js"() { + init_util(); + error33 = () => { + const Sizable = { + string: { unit: "znak\xF3w", verb: "mie\u0107" }, + file: { unit: "bajt\xF3w", verb: "mie\u0107" }, + array: { unit: "element\xF3w", verb: "mie\u0107" }, + set: { unit: "element\xF3w", verb: "mie\u0107" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "wyra\u017Cenie", + email: "adres email", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "data i godzina w formacie ISO", + date: "data w formacie ISO", + time: "godzina w formacie ISO", + duration: "czas trwania ISO", + ipv4: "adres IPv4", + ipv6: "adres IPv6", + cidrv4: "zakres IPv4", + cidrv6: "zakres IPv6", + base64: "ci\u0105g znak\xF3w zakodowany w formacie base64", + base64url: "ci\u0105g znak\xF3w zakodowany w formacie base64url", + json_string: "ci\u0105g znak\xF3w w formacie JSON", + e164: "liczba E.164", + jwt: "JWT", + template_literal: "wej\u015Bcie" + }; + const TypeDictionary = { + nan: "NaN", + number: "liczba", + array: "tablica" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano instanceof ${issue2.expected}, otrzymano ${received}`; + } + return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${expected}, otrzymano ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${stringifyPrimitive(issue2.values[0])}`; + return `Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${(_c2 = issue2.origin) != null ? _c2 : "warto\u015B\u0107"} b\u0119dzie mie\u0107 ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "element\xF3w"}`; + } + return `Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${(_e2 = issue2.origin) != null ? _e2 : "warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${(_f2 = issue2.origin) != null ? _f2 : "warto\u015B\u0107"} b\u0119dzie mie\u0107 ${adj}${issue2.minimum.toString()} ${(_g = sizing.unit) != null ? _g : "element\xF3w"}`; + } + return `Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${(_h2 = issue2.origin) != null ? _h2 : "warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zaczyna\u0107 si\u0119 od "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi ko\u0144czy\u0107 si\u0119 na "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zawiera\u0107 "${_issue.includes}"`; + if (_issue.format === "regex") + return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi odpowiada\u0107 wzorcowi ${_issue.pattern}`; + return `Nieprawid\u0142ow(y/a/e) ${(_i = FormatDictionary[_issue.format]) != null ? _i : issue2.format}`; + } + case "not_multiple_of": + return `Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${issue2.divisor}`; + case "unrecognized_keys": + return `Nierozpoznane klucze${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Nieprawid\u0142owy klucz w ${issue2.origin}`; + case "invalid_union": + return "Nieprawid\u0142owe dane wej\u015Bciowe"; + case "invalid_element": + return `Nieprawid\u0142owa warto\u015B\u0107 w ${issue2.origin}`; + default: + return `Nieprawid\u0142owe dane wej\u015Bciowe`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/pt.js +function pt_default2() { + return { + localeError: error34() + }; +} +var error34; +var init_pt = __esm({ + "node_modules/zod/v4/locales/pt.js"() { + init_util(); + error34 = () => { + const Sizable = { + string: { unit: "caracteres", verb: "ter" }, + file: { unit: "bytes", verb: "ter" }, + array: { unit: "itens", verb: "ter" }, + set: { unit: "itens", verb: "ter" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "padr\xE3o", + email: "endere\xE7o de e-mail", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "data e hora ISO", + date: "data ISO", + time: "hora ISO", + duration: "dura\xE7\xE3o ISO", + ipv4: "endere\xE7o IPv4", + ipv6: "endere\xE7o IPv6", + cidrv4: "faixa de IPv4", + cidrv6: "faixa de IPv6", + base64: "texto codificado em base64", + base64url: "URL codificada em base64", + json_string: "texto JSON", + e164: "n\xFAmero E.164", + jwt: "JWT", + template_literal: "entrada" + }; + const TypeDictionary = { + nan: "NaN", + number: "n\xFAmero", + null: "nulo" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Tipo inv\xE1lido: esperado instanceof ${issue2.expected}, recebido ${received}`; + } + return `Tipo inv\xE1lido: esperado ${expected}, recebido ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Entrada inv\xE1lida: esperado ${stringifyPrimitive(issue2.values[0])}`; + return `Op\xE7\xE3o inv\xE1lida: esperada uma das ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Muito grande: esperado que ${(_c2 = issue2.origin) != null ? _c2 : "valor"} tivesse ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elementos"}`; + return `Muito grande: esperado que ${(_e2 = issue2.origin) != null ? _e2 : "valor"} fosse ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Muito pequeno: esperado que ${issue2.origin} tivesse ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Muito pequeno: esperado que ${issue2.origin} fosse ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Texto inv\xE1lido: deve come\xE7ar com "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Texto inv\xE1lido: deve terminar com "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Texto inv\xE1lido: deve incluir "${_issue.includes}"`; + if (_issue.format === "regex") + return `Texto inv\xE1lido: deve corresponder ao padr\xE3o ${_issue.pattern}`; + return `${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format} inv\xE1lido`; + } + case "not_multiple_of": + return `N\xFAmero inv\xE1lido: deve ser m\xFAltiplo de ${issue2.divisor}`; + case "unrecognized_keys": + return `Chave${issue2.keys.length > 1 ? "s" : ""} desconhecida${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Chave inv\xE1lida em ${issue2.origin}`; + case "invalid_union": + return "Entrada inv\xE1lida"; + case "invalid_element": + return `Valor inv\xE1lido em ${issue2.origin}`; + default: + return `Campo inv\xE1lido`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ru.js +function getRussianPlural(count, one, few, many) { + const absCount = Math.abs(count); + const lastDigit = absCount % 10; + const lastTwoDigits = absCount % 100; + if (lastTwoDigits >= 11 && lastTwoDigits <= 19) { + return many; + } + if (lastDigit === 1) { + return one; + } + if (lastDigit >= 2 && lastDigit <= 4) { + return few; + } + return many; +} +function ru_default2() { + return { + localeError: error35() + }; +} +var error35; +var init_ru = __esm({ + "node_modules/zod/v4/locales/ru.js"() { + init_util(); + error35 = () => { + const Sizable = { + string: { + unit: { + one: "\u0441\u0438\u043C\u0432\u043E\u043B", + few: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", + many: "\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432" + }, + verb: "\u0438\u043C\u0435\u0442\u044C" + }, + file: { + unit: { + one: "\u0431\u0430\u0439\u0442", + few: "\u0431\u0430\u0439\u0442\u0430", + many: "\u0431\u0430\u0439\u0442" + }, + verb: "\u0438\u043C\u0435\u0442\u044C" + }, + array: { + unit: { + one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", + few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430", + many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432" + }, + verb: "\u0438\u043C\u0435\u0442\u044C" + }, + set: { + unit: { + one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", + few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430", + many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432" + }, + verb: "\u0438\u043C\u0435\u0442\u044C" + } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u0432\u0432\u043E\u0434", + email: "email \u0430\u0434\u0440\u0435\u0441", + url: "URL", + emoji: "\u044D\u043C\u043E\u0434\u0437\u0438", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F", + date: "ISO \u0434\u0430\u0442\u0430", + time: "ISO \u0432\u0440\u0435\u043C\u044F", + duration: "ISO \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C", + ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441", + ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441", + cidrv4: "IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", + cidrv6: "IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", + base64: "\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64", + base64url: "\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64url", + json_string: "JSON \u0441\u0442\u0440\u043E\u043A\u0430", + e164: "\u043D\u043E\u043C\u0435\u0440 E.164", + jwt: "JWT", + template_literal: "\u0432\u0432\u043E\u0434" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0447\u0438\u0441\u043B\u043E", + array: "\u043C\u0430\u0441\u0441\u0438\u0432" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C instanceof ${issue2.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`; + } + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${stringifyPrimitive(issue2.values[0])}`; + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u0437 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + const maxValue = Number(issue2.maximum); + const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many); + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${(_c2 = issue2.origin) != null ? _c2 : "\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue2.maximum.toString()} ${unit}`; + } + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${(_d = issue2.origin) != null ? _d : "\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + const minValue = Number(issue2.minimum); + const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many); + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue2.minimum.toString()} ${unit}`; + } + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`; + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${(_e2 = FormatDictionary[_issue.format]) != null ? _e2 : issue2.format}`; + } + case "not_multiple_of": + return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E: \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue2.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${issue2.keys.length > 1 ? "\u044B\u0435" : "\u044B\u0439"} \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u0438" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${issue2.origin}`; + case "invalid_union": + return "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435"; + case "invalid_element": + return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 ${issue2.origin}`; + default: + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/sl.js +function sl_default() { + return { + localeError: error36() + }; +} +var error36; +var init_sl = __esm({ + "node_modules/zod/v4/locales/sl.js"() { + init_util(); + error36 = () => { + const Sizable = { + string: { unit: "znakov", verb: "imeti" }, + file: { unit: "bajtov", verb: "imeti" }, + array: { unit: "elementov", verb: "imeti" }, + set: { unit: "elementov", verb: "imeti" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "vnos", + email: "e-po\u0161tni naslov", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO datum in \u010Das", + date: "ISO datum", + time: "ISO \u010Das", + duration: "ISO trajanje", + ipv4: "IPv4 naslov", + ipv6: "IPv6 naslov", + cidrv4: "obseg IPv4", + cidrv6: "obseg IPv6", + base64: "base64 kodiran niz", + base64url: "base64url kodiran niz", + json_string: "JSON niz", + e164: "E.164 \u0161tevilka", + jwt: "JWT", + template_literal: "vnos" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0161tevilo", + array: "tabela" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Neveljaven vnos: pri\u010Dakovano instanceof ${issue2.expected}, prejeto ${received}`; + } + return `Neveljaven vnos: pri\u010Dakovano ${expected}, prejeto ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Neveljaven vnos: pri\u010Dakovano ${stringifyPrimitive(issue2.values[0])}`; + return `Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Preveliko: pri\u010Dakovano, da bo ${(_c2 = issue2.origin) != null ? _c2 : "vrednost"} imelo ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "elementov"}`; + return `Preveliko: pri\u010Dakovano, da bo ${(_e2 = issue2.origin) != null ? _e2 : "vrednost"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Premajhno: pri\u010Dakovano, da bo ${issue2.origin} imelo ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Premajhno: pri\u010Dakovano, da bo ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Neveljaven niz: mora se za\u010Deti z "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Neveljaven niz: mora se kon\u010Dati z "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Neveljaven niz: mora vsebovati "${_issue.includes}"`; + if (_issue.format === "regex") + return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`; + return `Neveljaven ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${issue2.divisor}`; + case "unrecognized_keys": + return `Neprepoznan${issue2.keys.length > 1 ? "i klju\u010Di" : " klju\u010D"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Neveljaven klju\u010D v ${issue2.origin}`; + case "invalid_union": + return "Neveljaven vnos"; + case "invalid_element": + return `Neveljavna vrednost v ${issue2.origin}`; + default: + return "Neveljaven vnos"; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/sv.js +function sv_default() { + return { + localeError: error37() + }; +} +var error37; +var init_sv = __esm({ + "node_modules/zod/v4/locales/sv.js"() { + init_util(); + error37 = () => { + const Sizable = { + string: { unit: "tecken", verb: "att ha" }, + file: { unit: "bytes", verb: "att ha" }, + array: { unit: "objekt", verb: "att inneh\xE5lla" }, + set: { unit: "objekt", verb: "att inneh\xE5lla" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "regulj\xE4rt uttryck", + email: "e-postadress", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO-datum och tid", + date: "ISO-datum", + time: "ISO-tid", + duration: "ISO-varaktighet", + ipv4: "IPv4-intervall", + ipv6: "IPv6-intervall", + cidrv4: "IPv4-spektrum", + cidrv6: "IPv6-spektrum", + base64: "base64-kodad str\xE4ng", + base64url: "base64url-kodad str\xE4ng", + json_string: "JSON-str\xE4ng", + e164: "E.164-nummer", + jwt: "JWT", + template_literal: "mall-literal" + }; + const TypeDictionary = { + nan: "NaN", + number: "antal", + array: "lista" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Ogiltig inmatning: f\xF6rv\xE4ntat instanceof ${issue2.expected}, fick ${received}`; + } + return `Ogiltig inmatning: f\xF6rv\xE4ntat ${expected}, fick ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ogiltig inmatning: f\xF6rv\xE4ntat ${stringifyPrimitive(issue2.values[0])}`; + return `Ogiltigt val: f\xF6rv\xE4ntade en av ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `F\xF6r stor(t): f\xF6rv\xE4ntade ${(_c2 = issue2.origin) != null ? _c2 : "v\xE4rdet"} att ha ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "element"}`; + } + return `F\xF6r stor(t): f\xF6rv\xE4ntat ${(_e2 = issue2.origin) != null ? _e2 : "v\xE4rdet"} att ha ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `F\xF6r lite(t): f\xF6rv\xE4ntade ${(_f2 = issue2.origin) != null ? _f2 : "v\xE4rdet"} att ha ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `F\xF6r lite(t): f\xF6rv\xE4ntade ${(_g = issue2.origin) != null ? _g : "v\xE4rdet"} att ha ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Ogiltig str\xE4ng: m\xE5ste b\xF6rja med "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Ogiltig str\xE4ng: m\xE5ste sluta med "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Ogiltig str\xE4ng: m\xE5ste inneh\xE5lla "${_issue.includes}"`; + if (_issue.format === "regex") + return `Ogiltig str\xE4ng: m\xE5ste matcha m\xF6nstret "${_issue.pattern}"`; + return `Ogiltig(t) ${(_h2 = FormatDictionary[_issue.format]) != null ? _h2 : issue2.format}`; + } + case "not_multiple_of": + return `Ogiltigt tal: m\xE5ste vara en multipel av ${issue2.divisor}`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Ok\xE4nda nycklar" : "Ok\xE4nd nyckel"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ogiltig nyckel i ${(_i = issue2.origin) != null ? _i : "v\xE4rdet"}`; + case "invalid_union": + return "Ogiltig input"; + case "invalid_element": + return `Ogiltigt v\xE4rde i ${(_j = issue2.origin) != null ? _j : "v\xE4rdet"}`; + default: + return `Ogiltig input`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ta.js +function ta_default() { + return { + localeError: error38() + }; +} +var error38; +var init_ta = __esm({ + "node_modules/zod/v4/locales/ta.js"() { + init_util(); + error38 = () => { + const Sizable = { + string: { unit: "\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, + file: { unit: "\u0BAA\u0BC8\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, + array: { unit: "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, + set: { unit: "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1", + email: "\u0BAE\u0BBF\u0BA9\u0BCD\u0BA9\u0B9E\u0BCD\u0B9A\u0BB2\u0BCD \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0BA4\u0BC7\u0BA4\u0BBF \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD", + date: "ISO \u0BA4\u0BC7\u0BA4\u0BBF", + time: "ISO \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD", + duration: "ISO \u0B95\u0BBE\u0BB2 \u0B85\u0BB3\u0BB5\u0BC1", + ipv4: "IPv4 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", + ipv6: "IPv6 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", + cidrv4: "IPv4 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1", + cidrv6: "IPv6 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1", + base64: "base64-encoded \u0B9A\u0BB0\u0BAE\u0BCD", + base64url: "base64url-encoded \u0B9A\u0BB0\u0BAE\u0BCD", + json_string: "JSON \u0B9A\u0BB0\u0BAE\u0BCD", + e164: "E.164 \u0B8E\u0BA3\u0BCD", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0B8E\u0BA3\u0BCD", + array: "\u0B85\u0BA3\u0BBF", + null: "\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 instanceof ${issue2.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`; + } + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${stringifyPrimitive(issue2.values[0])}`; + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${joinValues(issue2.values, "|")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${(_c2 = issue2.origin) != null ? _c2 : "\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD"} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${(_e2 = issue2.origin) != null ? _e2 : "\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${adj}${issue2.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin} ${adj}${issue2.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.prefix}" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + if (_issue.format === "ends_with") + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.suffix}" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + if (_issue.format === "includes") + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.includes}" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + if (_issue.format === "regex") + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${_issue.pattern} \u0BAE\u0BC1\u0BB1\u0BC8\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B9F\u0BA9\u0BCD \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${issue2.divisor} \u0B87\u0BA9\u0BCD \u0BAA\u0BB2\u0BAE\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + case "unrecognized_keys": + return `\u0B85\u0B9F\u0BC8\u0BAF\u0BBE\u0BB3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0BB5\u0BBF\u0B9A\u0BC8${issue2.keys.length > 1 ? "\u0B95\u0BB3\u0BCD" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0B9A\u0BC8`; + case "invalid_union": + return "\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1"; + case "invalid_element": + return `${issue2.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1`; + default: + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/th.js +function th_default() { + return { + localeError: error39() + }; +} +var error39; +var init_th = __esm({ + "node_modules/zod/v4/locales/th.js"() { + init_util(); + error39 = () => { + const Sizable = { + string: { unit: "\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, + file: { unit: "\u0E44\u0E1A\u0E15\u0E4C", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, + array: { unit: "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, + set: { unit: "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19", + email: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E2D\u0E35\u0E40\u0E21\u0E25", + url: "URL", + emoji: "\u0E2D\u0E34\u0E42\u0E21\u0E08\u0E34", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", + date: "\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E41\u0E1A\u0E1A ISO", + time: "\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", + duration: "\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", + ipv4: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv4", + ipv6: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv6", + cidrv4: "\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv4", + cidrv6: "\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv6", + base64: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64", + base64url: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A URL", + json_string: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A JSON", + e164: "\u0E40\u0E1A\u0E2D\u0E23\u0E4C\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (E.164)", + jwt: "\u0E42\u0E17\u0E40\u0E04\u0E19 JWT", + template_literal: "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02", + array: "\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E23\u0E22\u0E4C (Array)", + null: "\u0E44\u0E21\u0E48\u0E21\u0E35\u0E04\u0E48\u0E32 (null)" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 instanceof ${issue2.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`; + } + return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${stringifyPrimitive(issue2.values[0])}`; + return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19" : "\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${(_c2 = issue2.origin) != null ? _c2 : "\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23"}`; + return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${(_e2 = issue2.origin) != null ? _e2 : "\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? "\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22" : "\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E25\u0E07\u0E17\u0E49\u0E32\u0E22\u0E14\u0E49\u0E27\u0E22 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 "${_issue.includes}" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`; + if (_issue.format === "regex") + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 ${_issue.pattern}`; + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E32\u0E23\u0E14\u0E49\u0E27\u0E22 ${issue2.divisor} \u0E44\u0E14\u0E49\u0E25\u0E07\u0E15\u0E31\u0E27`; + case "unrecognized_keys": + return `\u0E1E\u0E1A\u0E04\u0E35\u0E22\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue2.origin}`; + case "invalid_union": + return "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E39\u0E40\u0E19\u0E35\u0E22\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49"; + case "invalid_element": + return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue2.origin}`; + default: + return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/tr.js +function tr_default() { + return { + localeError: error40() + }; +} +var error40; +var init_tr = __esm({ + "node_modules/zod/v4/locales/tr.js"() { + init_util(); + error40 = () => { + const Sizable = { + string: { unit: "karakter", verb: "olmal\u0131" }, + file: { unit: "bayt", verb: "olmal\u0131" }, + array: { unit: "\xF6\u011Fe", verb: "olmal\u0131" }, + set: { unit: "\xF6\u011Fe", verb: "olmal\u0131" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "girdi", + email: "e-posta adresi", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO tarih ve saat", + date: "ISO tarih", + time: "ISO saat", + duration: "ISO s\xFCre", + ipv4: "IPv4 adresi", + ipv6: "IPv6 adresi", + cidrv4: "IPv4 aral\u0131\u011F\u0131", + cidrv6: "IPv6 aral\u0131\u011F\u0131", + base64: "base64 ile \u015Fifrelenmi\u015F metin", + base64url: "base64url ile \u015Fifrelenmi\u015F metin", + json_string: "JSON dizesi", + e164: "E.164 say\u0131s\u0131", + jwt: "JWT", + template_literal: "\u015Eablon dizesi" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Ge\xE7ersiz de\u011Fer: beklenen instanceof ${issue2.expected}, al\u0131nan ${received}`; + } + return `Ge\xE7ersiz de\u011Fer: beklenen ${expected}, al\u0131nan ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ge\xE7ersiz de\u011Fer: beklenen ${stringifyPrimitive(issue2.values[0])}`; + return `Ge\xE7ersiz se\xE7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\xC7ok b\xFCy\xFCk: beklenen ${(_c2 = issue2.origin) != null ? _c2 : "de\u011Fer"} ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\xF6\u011Fe"}`; + return `\xC7ok b\xFCy\xFCk: beklenen ${(_e2 = issue2.origin) != null ? _e2 : "de\u011Fer"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\xC7ok k\xFC\xE7\xFCk: beklenen ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + return `\xC7ok k\xFC\xE7\xFCk: beklenen ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Ge\xE7ersiz metin: "${_issue.prefix}" ile ba\u015Flamal\u0131`; + if (_issue.format === "ends_with") + return `Ge\xE7ersiz metin: "${_issue.suffix}" ile bitmeli`; + if (_issue.format === "includes") + return `Ge\xE7ersiz metin: "${_issue.includes}" i\xE7ermeli`; + if (_issue.format === "regex") + return `Ge\xE7ersiz metin: ${_issue.pattern} desenine uymal\u0131`; + return `Ge\xE7ersiz ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `Ge\xE7ersiz say\u0131: ${issue2.divisor} ile tam b\xF6l\xFCnebilmeli`; + case "unrecognized_keys": + return `Tan\u0131nmayan anahtar${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} i\xE7inde ge\xE7ersiz anahtar`; + case "invalid_union": + return "Ge\xE7ersiz de\u011Fer"; + case "invalid_element": + return `${issue2.origin} i\xE7inde ge\xE7ersiz de\u011Fer`; + default: + return `Ge\xE7ersiz de\u011Fer`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/uk.js +function uk_default() { + return { + localeError: error41() + }; +} +var error41; +var init_uk = __esm({ + "node_modules/zod/v4/locales/uk.js"() { + init_util(); + error41 = () => { + const Sizable = { + string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, + file: { unit: "\u0431\u0430\u0439\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, + array: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, + set: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456", + email: "\u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u043F\u043E\u0448\u0442\u0438", + url: "URL", + emoji: "\u0435\u043C\u043E\u0434\u0437\u0456", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u0434\u0430\u0442\u0430 \u0442\u0430 \u0447\u0430\u0441 ISO", + date: "\u0434\u0430\u0442\u0430 ISO", + time: "\u0447\u0430\u0441 ISO", + duration: "\u0442\u0440\u0438\u0432\u0430\u043B\u0456\u0441\u0442\u044C ISO", + ipv4: "\u0430\u0434\u0440\u0435\u0441\u0430 IPv4", + ipv6: "\u0430\u0434\u0440\u0435\u0441\u0430 IPv6", + cidrv4: "\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv4", + cidrv6: "\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv6", + base64: "\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64", + base64url: "\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64url", + json_string: "\u0440\u044F\u0434\u043E\u043A JSON", + e164: "\u043D\u043E\u043C\u0435\u0440 E.164", + jwt: "JWT", + template_literal: "\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0447\u0438\u0441\u043B\u043E", + array: "\u043C\u0430\u0441\u0438\u0432" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F instanceof ${issue2.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`; + } + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${stringifyPrimitive(issue2.values[0])}`; + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430 \u043E\u043F\u0446\u0456\u044F: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u0435 \u0437 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${(_c2 = issue2.origin) != null ? _c2 : "\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432"}`; + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${(_e2 = issue2.origin) != null ? _e2 : "\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} \u0431\u0443\u0434\u0435 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin} \u0431\u0443\u0434\u0435 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0437\u0430\u043A\u0456\u043D\u0447\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043D\u0430 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0456\u0441\u0442\u0438\u0442\u0438 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`; + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0447\u0438\u0441\u043B\u043E: \u043F\u043E\u0432\u0438\u043D\u043D\u043E \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C ${issue2.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u0456" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${issue2.origin}`; + case "invalid_union": + return "\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456"; + case "invalid_element": + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443 ${issue2.origin}`; + default: + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ua.js +function ua_default() { + return uk_default(); +} +var init_ua = __esm({ + "node_modules/zod/v4/locales/ua.js"() { + init_uk(); + } +}); + +// node_modules/zod/v4/locales/ur.js +function ur_default() { + return { + localeError: error42() + }; +} +var error42; +var init_ur = __esm({ + "node_modules/zod/v4/locales/ur.js"() { + init_util(); + error42 = () => { + const Sizable = { + string: { unit: "\u062D\u0631\u0648\u0641", verb: "\u06C1\u0648\u0646\u0627" }, + file: { unit: "\u0628\u0627\u0626\u0679\u0633", verb: "\u06C1\u0648\u0646\u0627" }, + array: { unit: "\u0622\u0626\u0679\u0645\u0632", verb: "\u06C1\u0648\u0646\u0627" }, + set: { unit: "\u0622\u0626\u0679\u0645\u0632", verb: "\u06C1\u0648\u0646\u0627" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u0627\u0646 \u067E\u0679", + email: "\u0627\u06CC \u0645\u06CC\u0644 \u0627\u06CC\u0688\u0631\u06CC\u0633", + url: "\u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644", + emoji: "\u0627\u06CC\u0645\u0648\u062C\u06CC", + uuid: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", + uuidv4: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 4", + uuidv6: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 6", + nanoid: "\u0646\u06CC\u0646\u0648 \u0622\u0626\u06CC \u0688\u06CC", + guid: "\u062C\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", + cuid: "\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", + cuid2: "\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC 2", + ulid: "\u06CC\u0648 \u0627\u06CC\u0644 \u0622\u0626\u06CC \u0688\u06CC", + xid: "\u0627\u06CC\u06A9\u0633 \u0622\u0626\u06CC \u0688\u06CC", + ksuid: "\u06A9\u06D2 \u0627\u06CC\u0633 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", + datetime: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0688\u06CC\u0679 \u0679\u0627\u0626\u0645", + date: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u062A\u0627\u0631\u06CC\u062E", + time: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0648\u0642\u062A", + duration: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0645\u062F\u062A", + ipv4: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0627\u06CC\u0688\u0631\u06CC\u0633", + ipv6: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0627\u06CC\u0688\u0631\u06CC\u0633", + cidrv4: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0631\u06CC\u0646\u062C", + cidrv6: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0631\u06CC\u0646\u062C", + base64: "\u0628\u06CC\u0633 64 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF", + base64url: "\u0628\u06CC\u0633 64 \u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF", + json_string: "\u062C\u06D2 \u0627\u06CC\u0633 \u0627\u0648 \u0627\u06CC\u0646 \u0633\u0679\u0631\u0646\u06AF", + e164: "\u0627\u06CC 164 \u0646\u0645\u0628\u0631", + jwt: "\u062C\u06D2 \u0688\u0628\u0644\u06CC\u0648 \u0679\u06CC", + template_literal: "\u0627\u0646 \u067E\u0679" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0646\u0645\u0628\u0631", + array: "\u0622\u0631\u06D2", + null: "\u0646\u0644" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: instanceof ${issue2.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`; + } + return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${stringifyPrimitive(issue2.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + return `\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${joinValues(issue2.values, "|")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${(_c2 = issue2.origin) != null ? _c2 : "\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u06D2 ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\u0639\u0646\u0627\u0635\u0631"} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`; + return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${(_e2 = issue2.origin) != null ? _e2 : "\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u0627 ${adj}${issue2.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue2.origin} \u06A9\u06D2 ${adj}${issue2.minimum.toString()} ${sizing.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`; + } + return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue2.origin} \u06A9\u0627 ${adj}${issue2.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.prefix}" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + } + if (_issue.format === "ends_with") + return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.suffix}" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + if (_issue.format === "includes") + return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.includes}" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + if (_issue.format === "regex") + return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${_issue.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + return `\u063A\u0644\u0637 ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${issue2.divisor} \u06A9\u0627 \u0645\u0636\u0627\u0639\u0641 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + case "unrecognized_keys": + return `\u063A\u06CC\u0631 \u062A\u0633\u0644\u06CC\u0645 \u0634\u062F\u06C1 \u06A9\u06CC${issue2.keys.length > 1 ? "\u0632" : ""}: ${joinValues(issue2.keys, "\u060C ")}`; + case "invalid_key": + return `${issue2.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`; + case "invalid_union": + return "\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679"; + case "invalid_element": + return `${issue2.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`; + default: + return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/uz.js +function uz_default() { + return { + localeError: error43() + }; +} +var error43; +var init_uz = __esm({ + "node_modules/zod/v4/locales/uz.js"() { + init_util(); + error43 = () => { + const Sizable = { + string: { unit: "belgi", verb: "bo\u2018lishi kerak" }, + file: { unit: "bayt", verb: "bo\u2018lishi kerak" }, + array: { unit: "element", verb: "bo\u2018lishi kerak" }, + set: { unit: "element", verb: "bo\u2018lishi kerak" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "kirish", + email: "elektron pochta manzili", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO sana va vaqti", + date: "ISO sana", + time: "ISO vaqt", + duration: "ISO davomiylik", + ipv4: "IPv4 manzil", + ipv6: "IPv6 manzil", + mac: "MAC manzil", + cidrv4: "IPv4 diapazon", + cidrv6: "IPv6 diapazon", + base64: "base64 kodlangan satr", + base64url: "base64url kodlangan satr", + json_string: "JSON satr", + e164: "E.164 raqam", + jwt: "JWT", + template_literal: "kirish" + }; + const TypeDictionary = { + nan: "NaN", + number: "raqam", + array: "massiv" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Noto\u2018g\u2018ri kirish: kutilgan instanceof ${issue2.expected}, qabul qilingan ${received}`; + } + return `Noto\u2018g\u2018ri kirish: kutilgan ${expected}, qabul qilingan ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Noto\u2018g\u2018ri kirish: kutilgan ${stringifyPrimitive(issue2.values[0])}`; + return `Noto\u2018g\u2018ri variant: quyidagilardan biri kutilgan ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Juda katta: kutilgan ${(_c2 = issue2.origin) != null ? _c2 : "qiymat"} ${adj}${issue2.maximum.toString()} ${sizing.unit} ${sizing.verb}`; + return `Juda katta: kutilgan ${(_d = issue2.origin) != null ? _d : "qiymat"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Juda kichik: kutilgan ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} ${sizing.verb}`; + } + return `Juda kichik: kutilgan ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Noto\u2018g\u2018ri satr: "${_issue.prefix}" bilan boshlanishi kerak`; + if (_issue.format === "ends_with") + return `Noto\u2018g\u2018ri satr: "${_issue.suffix}" bilan tugashi kerak`; + if (_issue.format === "includes") + return `Noto\u2018g\u2018ri satr: "${_issue.includes}" ni o\u2018z ichiga olishi kerak`; + if (_issue.format === "regex") + return `Noto\u2018g\u2018ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`; + return `Noto\u2018g\u2018ri ${(_e2 = FormatDictionary[_issue.format]) != null ? _e2 : issue2.format}`; + } + case "not_multiple_of": + return `Noto\u2018g\u2018ri raqam: ${issue2.divisor} ning karralisi bo\u2018lishi kerak`; + case "unrecognized_keys": + return `Noma\u2019lum kalit${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} dagi kalit noto\u2018g\u2018ri`; + case "invalid_union": + return "Noto\u2018g\u2018ri kirish"; + case "invalid_element": + return `${issue2.origin} da noto\u2018g\u2018ri qiymat`; + default: + return `Noto\u2018g\u2018ri kirish`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/vi.js +function vi_default() { + return { + localeError: error44() + }; +} +var error44; +var init_vi = __esm({ + "node_modules/zod/v4/locales/vi.js"() { + init_util(); + error44 = () => { + const Sizable = { + string: { unit: "k\xFD t\u1EF1", verb: "c\xF3" }, + file: { unit: "byte", verb: "c\xF3" }, + array: { unit: "ph\u1EA7n t\u1EED", verb: "c\xF3" }, + set: { unit: "ph\u1EA7n t\u1EED", verb: "c\xF3" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u0111\u1EA7u v\xE0o", + email: "\u0111\u1ECBa ch\u1EC9 email", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ng\xE0y gi\u1EDD ISO", + date: "ng\xE0y ISO", + time: "gi\u1EDD ISO", + duration: "kho\u1EA3ng th\u1EDDi gian ISO", + ipv4: "\u0111\u1ECBa ch\u1EC9 IPv4", + ipv6: "\u0111\u1ECBa ch\u1EC9 IPv6", + cidrv4: "d\u1EA3i IPv4", + cidrv6: "d\u1EA3i IPv6", + base64: "chu\u1ED7i m\xE3 h\xF3a base64", + base64url: "chu\u1ED7i m\xE3 h\xF3a base64url", + json_string: "chu\u1ED7i JSON", + e164: "s\u1ED1 E.164", + jwt: "JWT", + template_literal: "\u0111\u1EA7u v\xE0o" + }; + const TypeDictionary = { + nan: "NaN", + number: "s\u1ED1", + array: "m\u1EA3ng" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i instanceof ${issue2.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`; + } + return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${stringifyPrimitive(issue2.values[0])}`; + return `T\xF9y ch\u1ECDn kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i m\u1ED9t trong c\xE1c gi\xE1 tr\u1ECB ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${(_c2 = issue2.origin) != null ? _c2 : "gi\xE1 tr\u1ECB"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "ph\u1EA7n t\u1EED"}`; + return `Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${(_e2 = issue2.origin) != null ? _e2 : "gi\xE1 tr\u1ECB"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\xFAc b\u1EB1ng "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m "${_issue.includes}"`; + if (_issue.format === "regex") + return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${_issue.pattern}`; + return `${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format} kh\xF4ng h\u1EE3p l\u1EC7`; + } + case "not_multiple_of": + return `S\u1ED1 kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i l\xE0 b\u1ED9i s\u1ED1 c\u1EE7a ${issue2.divisor}`; + case "unrecognized_keys": + return `Kh\xF3a kh\xF4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Kh\xF3a kh\xF4ng h\u1EE3p l\u1EC7 trong ${issue2.origin}`; + case "invalid_union": + return "\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7"; + case "invalid_element": + return `Gi\xE1 tr\u1ECB kh\xF4ng h\u1EE3p l\u1EC7 trong ${issue2.origin}`; + default: + return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/zh-CN.js +function zh_CN_default2() { + return { + localeError: error45() + }; +} +var error45; +var init_zh_CN = __esm({ + "node_modules/zod/v4/locales/zh-CN.js"() { + init_util(); + error45 = () => { + const Sizable = { + string: { unit: "\u5B57\u7B26", verb: "\u5305\u542B" }, + file: { unit: "\u5B57\u8282", verb: "\u5305\u542B" }, + array: { unit: "\u9879", verb: "\u5305\u542B" }, + set: { unit: "\u9879", verb: "\u5305\u542B" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u8F93\u5165", + email: "\u7535\u5B50\u90AE\u4EF6", + url: "URL", + emoji: "\u8868\u60C5\u7B26\u53F7", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO\u65E5\u671F\u65F6\u95F4", + date: "ISO\u65E5\u671F", + time: "ISO\u65F6\u95F4", + duration: "ISO\u65F6\u957F", + ipv4: "IPv4\u5730\u5740", + ipv6: "IPv6\u5730\u5740", + cidrv4: "IPv4\u7F51\u6BB5", + cidrv6: "IPv6\u7F51\u6BB5", + base64: "base64\u7F16\u7801\u5B57\u7B26\u4E32", + base64url: "base64url\u7F16\u7801\u5B57\u7B26\u4E32", + json_string: "JSON\u5B57\u7B26\u4E32", + e164: "E.164\u53F7\u7801", + jwt: "JWT", + template_literal: "\u8F93\u5165" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u6570\u5B57", + array: "\u6570\u7EC4", + null: "\u7A7A\u503C(null)" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B instanceof ${issue2.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`; + } + return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${stringifyPrimitive(issue2.values[0])}`; + return `\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${(_c2 = issue2.origin) != null ? _c2 : "\u503C"} ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\u4E2A\u5143\u7D20"}`; + return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${(_e2 = issue2.origin) != null ? _e2 : "\u503C"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${_issue.prefix}" \u5F00\u5934`; + if (_issue.format === "ends_with") + return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${_issue.suffix}" \u7ED3\u5C3E`; + if (_issue.format === "includes") + return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${_issue.pattern}`; + return `\u65E0\u6548${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${issue2.divisor} \u7684\u500D\u6570`; + case "unrecognized_keys": + return `\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`; + case "invalid_union": + return "\u65E0\u6548\u8F93\u5165"; + case "invalid_element": + return `${issue2.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`; + default: + return `\u65E0\u6548\u8F93\u5165`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/zh-TW.js +function zh_TW_default2() { + return { + localeError: error46() + }; +} +var error46; +var init_zh_TW = __esm({ + "node_modules/zod/v4/locales/zh-TW.js"() { + init_util(); + error46 = () => { + const Sizable = { + string: { unit: "\u5B57\u5143", verb: "\u64C1\u6709" }, + file: { unit: "\u4F4D\u5143\u7D44", verb: "\u64C1\u6709" }, + array: { unit: "\u9805\u76EE", verb: "\u64C1\u6709" }, + set: { unit: "\u9805\u76EE", verb: "\u64C1\u6709" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u8F38\u5165", + email: "\u90F5\u4EF6\u5730\u5740", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u65E5\u671F\u6642\u9593", + date: "ISO \u65E5\u671F", + time: "ISO \u6642\u9593", + duration: "ISO \u671F\u9593", + ipv4: "IPv4 \u4F4D\u5740", + ipv6: "IPv6 \u4F4D\u5740", + cidrv4: "IPv4 \u7BC4\u570D", + cidrv6: "IPv6 \u7BC4\u570D", + base64: "base64 \u7DE8\u78BC\u5B57\u4E32", + base64url: "base64url \u7DE8\u78BC\u5B57\u4E32", + json_string: "JSON \u5B57\u4E32", + e164: "E.164 \u6578\u503C", + jwt: "JWT", + template_literal: "\u8F38\u5165" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA instanceof ${issue2.expected}\uFF0C\u4F46\u6536\u5230 ${received}`; + } + return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${expected}\uFF0C\u4F46\u6536\u5230 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${stringifyPrimitive(issue2.values[0])}`; + return `\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${(_c2 = issue2.origin) != null ? _c2 : "\u503C"} \u61C9\u70BA ${adj}${issue2.maximum.toString()} ${(_d = sizing.unit) != null ? _d : "\u500B\u5143\u7D20"}`; + return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${(_e2 = issue2.origin) != null ? _e2 : "\u503C"} \u61C9\u70BA ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue2.origin} \u61C9\u70BA ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue2.origin} \u61C9\u70BA ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${_issue.prefix}" \u958B\u982D`; + } + if (_issue.format === "ends_with") + return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${_issue.suffix}" \u7D50\u5C3E`; + if (_issue.format === "includes") + return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${_issue.pattern}`; + return `\u7121\u6548\u7684 ${(_f2 = FormatDictionary[_issue.format]) != null ? _f2 : issue2.format}`; + } + case "not_multiple_of": + return `\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${issue2.divisor} \u7684\u500D\u6578`; + case "unrecognized_keys": + return `\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${issue2.keys.length > 1 ? "\u5011" : ""}\uFF1A${joinValues(issue2.keys, "\u3001")}`; + case "invalid_key": + return `${issue2.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`; + case "invalid_union": + return "\u7121\u6548\u7684\u8F38\u5165\u503C"; + case "invalid_element": + return `${issue2.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`; + default: + return `\u7121\u6548\u7684\u8F38\u5165\u503C`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/yo.js +function yo_default() { + return { + localeError: error47() + }; +} +var error47; +var init_yo = __esm({ + "node_modules/zod/v4/locales/yo.js"() { + init_util(); + error47 = () => { + const Sizable = { + string: { unit: "\xE0mi", verb: "n\xED" }, + file: { unit: "bytes", verb: "n\xED" }, + array: { unit: "nkan", verb: "n\xED" }, + set: { unit: "nkan", verb: "n\xED" } + }; + function getSizing(origin) { + var _a5; + return (_a5 = Sizable[origin]) != null ? _a5 : null; + } + const FormatDictionary = { + regex: "\u1EB9\u0300r\u1ECD \xECb\xE1w\u1ECDl\xE9", + email: "\xE0d\xEDr\u1EB9\u0301s\xEC \xECm\u1EB9\u0301l\xEC", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\xE0k\xF3k\xF2 ISO", + date: "\u1ECDj\u1ECD\u0301 ISO", + time: "\xE0k\xF3k\xF2 ISO", + duration: "\xE0k\xF3k\xF2 t\xF3 p\xE9 ISO", + ipv4: "\xE0d\xEDr\u1EB9\u0301s\xEC IPv4", + ipv6: "\xE0d\xEDr\u1EB9\u0301s\xEC IPv6", + cidrv4: "\xE0gb\xE8gb\xE8 IPv4", + cidrv6: "\xE0gb\xE8gb\xE8 IPv6", + base64: "\u1ECD\u0300r\u1ECD\u0300 t\xED a k\u1ECD\u0301 n\xED base64", + base64url: "\u1ECD\u0300r\u1ECD\u0300 base64url", + json_string: "\u1ECD\u0300r\u1ECD\u0300 JSON", + e164: "n\u1ECD\u0301mb\xE0 E.164", + jwt: "JWT", + template_literal: "\u1EB9\u0300r\u1ECD \xECb\xE1w\u1ECDl\xE9" + }; + const TypeDictionary = { + nan: "NaN", + number: "n\u1ECD\u0301mb\xE0", + array: "akop\u1ECD" + }; + return (issue2) => { + var _a5, _b3, _c2, _d; + switch (issue2.code) { + case "invalid_type": { + const expected = (_a5 = TypeDictionary[issue2.expected]) != null ? _a5 : issue2.expected; + const receivedType = parsedType(issue2.input); + const received = (_b3 = TypeDictionary[receivedType]) != null ? _b3 : receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi instanceof ${issue2.expected}, \xE0m\u1ECD\u0300 a r\xED ${received}`; + } + return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${expected}, \xE0m\u1ECD\u0300 a r\xED ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${stringifyPrimitive(issue2.values[0])}`; + return `\xC0\u1E63\xE0y\xE0n a\u1E63\xEC\u1E63e: yan \u1ECD\u0300kan l\xE1ra ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${(_c2 = issue2.origin) != null ? _c2 : "iye"} ${sizing.verb} ${adj}${issue2.maximum} ${sizing.unit}`; + return `T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 ${adj}${issue2.maximum}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum} ${sizing.unit}`; + return `K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 ${adj}${issue2.minimum}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u1EB9\u0300r\u1EB9\u0300 p\u1EB9\u0300l\xFA "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 par\xED p\u1EB9\u0300l\xFA "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 n\xED "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\xE1 \xE0p\u1EB9\u1EB9r\u1EB9 mu ${_issue.pattern}`; + return `A\u1E63\xEC\u1E63e: ${(_d = FormatDictionary[_issue.format]) != null ? _d : issue2.format}`; + } + case "not_multiple_of": + return `N\u1ECD\u0301mb\xE0 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 j\u1EB9\u0301 \xE8y\xE0 p\xEDp\xEDn ti ${issue2.divisor}`; + case "unrecognized_keys": + return `B\u1ECDt\xECn\xEC \xE0\xECm\u1ECD\u0300: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `B\u1ECDt\xECn\xEC a\u1E63\xEC\u1E63e n\xEDn\xFA ${issue2.origin}`; + case "invalid_union": + return "\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e"; + case "invalid_element": + return `Iye a\u1E63\xEC\u1E63e n\xEDn\xFA ${issue2.origin}`; + default: + return "\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e"; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/index.js +var locales_exports = {}; +__export(locales_exports, { + ar: () => ar_default, + az: () => az_default, + be: () => be_default, + bg: () => bg_default, + ca: () => ca_default, + cs: () => cs_default, + da: () => da_default, + de: () => de_default2, + en: () => en_default3, + eo: () => eo_default, + es: () => es_default2, + fa: () => fa_default, + fi: () => fi_default, + fr: () => fr_default2, + frCA: () => fr_CA_default, + he: () => he_default, + hu: () => hu_default, + hy: () => hy_default, + id: () => id_default, + is: () => is_default, + it: () => it_default, + ja: () => ja_default2, + ka: () => ka_default, + kh: () => kh_default, + km: () => km_default, + ko: () => ko_default2, + lt: () => lt_default, + mk: () => mk_default, + ms: () => ms_default, + nl: () => nl_default, + no: () => no_default, + ota: () => ota_default, + pl: () => pl_default, + ps: () => ps_default, + pt: () => pt_default2, + ru: () => ru_default2, + sl: () => sl_default, + sv: () => sv_default, + ta: () => ta_default, + th: () => th_default, + tr: () => tr_default, + ua: () => ua_default, + uk: () => uk_default, + ur: () => ur_default, + uz: () => uz_default, + vi: () => vi_default, + yo: () => yo_default, + zhCN: () => zh_CN_default2, + zhTW: () => zh_TW_default2 +}); +var init_locales = __esm({ + "node_modules/zod/v4/locales/index.js"() { + init_ar(); + init_az(); + init_be(); + init_bg(); + init_ca(); + init_cs(); + init_da(); + init_de(); + init_en(); + init_eo(); + init_es(); + init_fa(); + init_fi(); + init_fr(); + init_fr_CA(); + init_he(); + init_hu(); + init_hy(); + init_id(); + init_is(); + init_it(); + init_ja(); + init_ka(); + init_kh(); + init_km(); + init_ko(); + init_lt(); + init_mk(); + init_ms(); + init_nl(); + init_no(); + init_ota(); + init_ps(); + init_pl(); + init_pt(); + init_ru(); + init_sl(); + init_sv(); + init_ta(); + init_th(); + init_tr(); + init_ua(); + init_uk(); + init_ur(); + init_uz(); + init_vi(); + init_zh_CN(); + init_zh_TW(); + init_yo(); + } +}); + +// node_modules/zod/v4/core/registries.js +function registry() { + return new $ZodRegistry(); +} +var _a3, $output, $input, $ZodRegistry, _a4, globalRegistry; +var init_registries = __esm({ + "node_modules/zod/v4/core/registries.js"() { + $output = /* @__PURE__ */ Symbol("ZodOutput"); + $input = /* @__PURE__ */ Symbol("ZodInput"); + $ZodRegistry = class { + constructor() { + this._map = /* @__PURE__ */ new WeakMap(); + this._idmap = /* @__PURE__ */ new Map(); + } + add(schema, ..._meta) { + const meta3 = _meta[0]; + this._map.set(schema, meta3); + if (meta3 && typeof meta3 === "object" && "id" in meta3) { + this._idmap.set(meta3.id, schema); + } + return this; + } + clear() { + this._map = /* @__PURE__ */ new WeakMap(); + this._idmap = /* @__PURE__ */ new Map(); + return this; + } + remove(schema) { + const meta3 = this._map.get(schema); + if (meta3 && typeof meta3 === "object" && "id" in meta3) { + this._idmap.delete(meta3.id); + } + this._map.delete(schema); + return this; + } + get(schema) { + var _a5; + const p = schema._zod.parent; + if (p) { + const pm2 = { ...(_a5 = this.get(p)) != null ? _a5 : {} }; + delete pm2.id; + const f9 = { ...pm2, ...this._map.get(schema) }; + return Object.keys(f9).length ? f9 : void 0; + } + return this._map.get(schema); + } + has(schema) { + return this._map.has(schema); + } + }; + (_a4 = (_a3 = globalThis).__zod_globalRegistry) != null ? _a4 : _a3.__zod_globalRegistry = registry(); + globalRegistry = globalThis.__zod_globalRegistry; + } +}); + +// node_modules/zod/v4/core/api.js +// @__NO_SIDE_EFFECTS__ +function _string(Class2, params) { + return new Class2({ + type: "string", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedString(Class2, params) { + return new Class2({ + type: "string", + coerce: true, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _email(Class2, params) { + return new Class2({ + type: "string", + format: "email", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _guid(Class2, params) { + return new Class2({ + type: "string", + format: "guid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uuid(Class2, params) { + return new Class2({ + type: "string", + format: "uuid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uuidv4(Class2, params) { + return new Class2({ + type: "string", + format: "uuid", + check: "string_format", + abort: false, + version: "v4", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uuidv6(Class2, params) { + return new Class2({ + type: "string", + format: "uuid", + check: "string_format", + abort: false, + version: "v6", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uuidv7(Class2, params) { + return new Class2({ + type: "string", + format: "uuid", + check: "string_format", + abort: false, + version: "v7", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _url(Class2, params) { + return new Class2({ + type: "string", + format: "url", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _emoji2(Class2, params) { + return new Class2({ + type: "string", + format: "emoji", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _nanoid(Class2, params) { + return new Class2({ + type: "string", + format: "nanoid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _cuid(Class2, params) { + return new Class2({ + type: "string", + format: "cuid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _cuid2(Class2, params) { + return new Class2({ + type: "string", + format: "cuid2", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _ulid(Class2, params) { + return new Class2({ + type: "string", + format: "ulid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _xid(Class2, params) { + return new Class2({ + type: "string", + format: "xid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _ksuid(Class2, params) { + return new Class2({ + type: "string", + format: "ksuid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _ipv4(Class2, params) { + return new Class2({ + type: "string", + format: "ipv4", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _ipv6(Class2, params) { + return new Class2({ + type: "string", + format: "ipv6", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _mac(Class2, params) { + return new Class2({ + type: "string", + format: "mac", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _cidrv4(Class2, params) { + return new Class2({ + type: "string", + format: "cidrv4", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _cidrv6(Class2, params) { + return new Class2({ + type: "string", + format: "cidrv6", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _base64(Class2, params) { + return new Class2({ + type: "string", + format: "base64", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _base64url(Class2, params) { + return new Class2({ + type: "string", + format: "base64url", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _e164(Class2, params) { + return new Class2({ + type: "string", + format: "e164", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _jwt(Class2, params) { + return new Class2({ + type: "string", + format: "jwt", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _isoDateTime(Class2, params) { + return new Class2({ + type: "string", + format: "datetime", + check: "string_format", + offset: false, + local: false, + precision: null, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _isoDate(Class2, params) { + return new Class2({ + type: "string", + format: "date", + check: "string_format", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _isoTime(Class2, params) { + return new Class2({ + type: "string", + format: "time", + check: "string_format", + precision: null, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _isoDuration(Class2, params) { + return new Class2({ + type: "string", + format: "duration", + check: "string_format", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _number(Class2, params) { + return new Class2({ + type: "number", + checks: [], + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedNumber(Class2, params) { + return new Class2({ + type: "number", + coerce: true, + checks: [], + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _int(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "safeint", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _float32(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "float32", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _float64(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "float64", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _int32(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "int32", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uint32(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "uint32", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _boolean(Class2, params) { + return new Class2({ + type: "boolean", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedBoolean(Class2, params) { + return new Class2({ + type: "boolean", + coerce: true, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _bigint(Class2, params) { + return new Class2({ + type: "bigint", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedBigint(Class2, params) { + return new Class2({ + type: "bigint", + coerce: true, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _int64(Class2, params) { + return new Class2({ + type: "bigint", + check: "bigint_format", + abort: false, + format: "int64", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uint64(Class2, params) { + return new Class2({ + type: "bigint", + check: "bigint_format", + abort: false, + format: "uint64", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _symbol(Class2, params) { + return new Class2({ + type: "symbol", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _undefined2(Class2, params) { + return new Class2({ + type: "undefined", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _null2(Class2, params) { + return new Class2({ + type: "null", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _any(Class2) { + return new Class2({ + type: "any" + }); +} +// @__NO_SIDE_EFFECTS__ +function _unknown(Class2) { + return new Class2({ + type: "unknown" + }); +} +// @__NO_SIDE_EFFECTS__ +function _never(Class2, params) { + return new Class2({ + type: "never", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _void(Class2, params) { + return new Class2({ + type: "void", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _date(Class2, params) { + return new Class2({ + type: "date", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedDate(Class2, params) { + return new Class2({ + type: "date", + coerce: true, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _nan(Class2, params) { + return new Class2({ + type: "nan", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _lt(value, params) { + return new $ZodCheckLessThan({ + check: "less_than", + ...normalizeParams(params), + value, + inclusive: false + }); +} +// @__NO_SIDE_EFFECTS__ +function _lte(value, params) { + return new $ZodCheckLessThan({ + check: "less_than", + ...normalizeParams(params), + value, + inclusive: true + }); +} +// @__NO_SIDE_EFFECTS__ +function _gt(value, params) { + return new $ZodCheckGreaterThan({ + check: "greater_than", + ...normalizeParams(params), + value, + inclusive: false + }); +} +// @__NO_SIDE_EFFECTS__ +function _gte(value, params) { + return new $ZodCheckGreaterThan({ + check: "greater_than", + ...normalizeParams(params), + value, + inclusive: true + }); +} +// @__NO_SIDE_EFFECTS__ +function _positive(params) { + return /* @__PURE__ */ _gt(0, params); +} +// @__NO_SIDE_EFFECTS__ +function _negative(params) { + return /* @__PURE__ */ _lt(0, params); +} +// @__NO_SIDE_EFFECTS__ +function _nonpositive(params) { + return /* @__PURE__ */ _lte(0, params); +} +// @__NO_SIDE_EFFECTS__ +function _nonnegative(params) { + return /* @__PURE__ */ _gte(0, params); +} +// @__NO_SIDE_EFFECTS__ +function _multipleOf(value, params) { + return new $ZodCheckMultipleOf({ + check: "multiple_of", + ...normalizeParams(params), + value + }); +} +// @__NO_SIDE_EFFECTS__ +function _maxSize(maximum, params) { + return new $ZodCheckMaxSize({ + check: "max_size", + ...normalizeParams(params), + maximum + }); +} +// @__NO_SIDE_EFFECTS__ +function _minSize(minimum, params) { + return new $ZodCheckMinSize({ + check: "min_size", + ...normalizeParams(params), + minimum + }); +} +// @__NO_SIDE_EFFECTS__ +function _size(size, params) { + return new $ZodCheckSizeEquals({ + check: "size_equals", + ...normalizeParams(params), + size + }); +} +// @__NO_SIDE_EFFECTS__ +function _maxLength(maximum, params) { + const ch2 = new $ZodCheckMaxLength({ + check: "max_length", + ...normalizeParams(params), + maximum + }); + return ch2; +} +// @__NO_SIDE_EFFECTS__ +function _minLength(minimum, params) { + return new $ZodCheckMinLength({ + check: "min_length", + ...normalizeParams(params), + minimum + }); +} +// @__NO_SIDE_EFFECTS__ +function _length(length, params) { + return new $ZodCheckLengthEquals({ + check: "length_equals", + ...normalizeParams(params), + length + }); +} +// @__NO_SIDE_EFFECTS__ +function _regex(pattern, params) { + return new $ZodCheckRegex({ + check: "string_format", + format: "regex", + ...normalizeParams(params), + pattern + }); +} +// @__NO_SIDE_EFFECTS__ +function _lowercase(params) { + return new $ZodCheckLowerCase({ + check: "string_format", + format: "lowercase", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uppercase(params) { + return new $ZodCheckUpperCase({ + check: "string_format", + format: "uppercase", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _includes(includes, params) { + return new $ZodCheckIncludes({ + check: "string_format", + format: "includes", + ...normalizeParams(params), + includes + }); +} +// @__NO_SIDE_EFFECTS__ +function _startsWith(prefix, params) { + return new $ZodCheckStartsWith({ + check: "string_format", + format: "starts_with", + ...normalizeParams(params), + prefix + }); +} +// @__NO_SIDE_EFFECTS__ +function _endsWith(suffix, params) { + return new $ZodCheckEndsWith({ + check: "string_format", + format: "ends_with", + ...normalizeParams(params), + suffix + }); +} +// @__NO_SIDE_EFFECTS__ +function _property(property, schema, params) { + return new $ZodCheckProperty({ + check: "property", + property, + schema, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _mime(types, params) { + return new $ZodCheckMimeType({ + check: "mime_type", + mime: types, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _overwrite(tx) { + return new $ZodCheckOverwrite({ + check: "overwrite", + tx + }); +} +// @__NO_SIDE_EFFECTS__ +function _normalize(form) { + return /* @__PURE__ */ _overwrite((input) => input.normalize(form)); +} +// @__NO_SIDE_EFFECTS__ +function _trim() { + return /* @__PURE__ */ _overwrite((input) => input.trim()); +} +// @__NO_SIDE_EFFECTS__ +function _toLowerCase() { + return /* @__PURE__ */ _overwrite((input) => input.toLowerCase()); +} +// @__NO_SIDE_EFFECTS__ +function _toUpperCase() { + return /* @__PURE__ */ _overwrite((input) => input.toUpperCase()); +} +// @__NO_SIDE_EFFECTS__ +function _slugify() { + return /* @__PURE__ */ _overwrite((input) => slugify(input)); +} +// @__NO_SIDE_EFFECTS__ +function _array(Class2, element, params) { + return new Class2({ + type: "array", + element, + // get element() { + // return element; + // }, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _union(Class2, options, params) { + return new Class2({ + type: "union", + options, + ...normalizeParams(params) + }); +} +function _xor(Class2, options, params) { + return new Class2({ + type: "union", + options, + inclusive: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _discriminatedUnion(Class2, discriminator, options, params) { + return new Class2({ + type: "union", + options, + discriminator, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _intersection(Class2, left, right) { + return new Class2({ + type: "intersection", + left, + right + }); +} +// @__NO_SIDE_EFFECTS__ +function _tuple(Class2, items, _paramsOrRest, _params) { + const hasRest = _paramsOrRest instanceof $ZodType; + const params = hasRest ? _params : _paramsOrRest; + const rest = hasRest ? _paramsOrRest : null; + return new Class2({ + type: "tuple", + items, + rest, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _record(Class2, keyType, valueType, params) { + return new Class2({ + type: "record", + keyType, + valueType, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _map(Class2, keyType, valueType, params) { + return new Class2({ + type: "map", + keyType, + valueType, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _set(Class2, valueType, params) { + return new Class2({ + type: "set", + valueType, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _enum(Class2, values, params) { + const entries = Array.isArray(values) ? Object.fromEntries(values.map((v2) => [v2, v2])) : values; + return new Class2({ + type: "enum", + entries, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _nativeEnum(Class2, entries, params) { + return new Class2({ + type: "enum", + entries, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _literal(Class2, value, params) { + return new Class2({ + type: "literal", + values: Array.isArray(value) ? value : [value], + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _file(Class2, params) { + return new Class2({ + type: "file", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _transform(Class2, fn) { + return new Class2({ + type: "transform", + transform: fn + }); +} +// @__NO_SIDE_EFFECTS__ +function _optional(Class2, innerType) { + return new Class2({ + type: "optional", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _nullable(Class2, innerType) { + return new Class2({ + type: "nullable", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _default(Class2, innerType, defaultValue) { + return new Class2({ + type: "default", + innerType, + get defaultValue() { + return typeof defaultValue === "function" ? defaultValue() : shallowClone(defaultValue); + } + }); +} +// @__NO_SIDE_EFFECTS__ +function _nonoptional(Class2, innerType, params) { + return new Class2({ + type: "nonoptional", + innerType, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _success(Class2, innerType) { + return new Class2({ + type: "success", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _catch(Class2, innerType, catchValue) { + return new Class2({ + type: "catch", + innerType, + catchValue: typeof catchValue === "function" ? catchValue : () => catchValue + }); +} +// @__NO_SIDE_EFFECTS__ +function _pipe(Class2, in_, out) { + return new Class2({ + type: "pipe", + in: in_, + out + }); +} +// @__NO_SIDE_EFFECTS__ +function _readonly(Class2, innerType) { + return new Class2({ + type: "readonly", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _templateLiteral(Class2, parts, params) { + return new Class2({ + type: "template_literal", + parts, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _lazy(Class2, getter) { + return new Class2({ + type: "lazy", + getter + }); +} +// @__NO_SIDE_EFFECTS__ +function _promise(Class2, innerType) { + return new Class2({ + type: "promise", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _custom(Class2, fn, _params) { + var _a5; + const norm = normalizeParams(_params); + (_a5 = norm.abort) != null ? _a5 : norm.abort = true; + const schema = new Class2({ + type: "custom", + check: "custom", + fn, + ...norm + }); + return schema; +} +// @__NO_SIDE_EFFECTS__ +function _refine(Class2, fn, _params) { + const schema = new Class2({ + type: "custom", + check: "custom", + fn, + ...normalizeParams(_params) + }); + return schema; +} +// @__NO_SIDE_EFFECTS__ +function _superRefine(fn) { + const ch2 = /* @__PURE__ */ _check((payload) => { + payload.addIssue = (issue2) => { + var _a5, _b3, _c2, _d; + if (typeof issue2 === "string") { + payload.issues.push(issue(issue2, payload.value, ch2._zod.def)); + } else { + const _issue = issue2; + if (_issue.fatal) + _issue.continue = false; + (_a5 = _issue.code) != null ? _a5 : _issue.code = "custom"; + (_b3 = _issue.input) != null ? _b3 : _issue.input = payload.value; + (_c2 = _issue.inst) != null ? _c2 : _issue.inst = ch2; + (_d = _issue.continue) != null ? _d : _issue.continue = !ch2._zod.def.abort; + payload.issues.push(issue(_issue)); + } + }; + return fn(payload.value, payload); + }); + return ch2; +} +// @__NO_SIDE_EFFECTS__ +function _check(fn, params) { + const ch2 = new $ZodCheck({ + check: "custom", + ...normalizeParams(params) + }); + ch2._zod.check = fn; + return ch2; +} +// @__NO_SIDE_EFFECTS__ +function describe(description) { + const ch2 = new $ZodCheck({ check: "describe" }); + ch2._zod.onattach = [ + (inst) => { + var _a5; + const existing = (_a5 = globalRegistry.get(inst)) != null ? _a5 : {}; + globalRegistry.add(inst, { ...existing, description }); + } + ]; + ch2._zod.check = () => { + }; + return ch2; +} +// @__NO_SIDE_EFFECTS__ +function meta(metadata) { + const ch2 = new $ZodCheck({ check: "meta" }); + ch2._zod.onattach = [ + (inst) => { + var _a5; + const existing = (_a5 = globalRegistry.get(inst)) != null ? _a5 : {}; + globalRegistry.add(inst, { ...existing, ...metadata }); + } + ]; + ch2._zod.check = () => { + }; + return ch2; +} +// @__NO_SIDE_EFFECTS__ +function _stringbool(Classes, _params) { + var _a5, _b3, _c2, _d, _e2; + const params = normalizeParams(_params); + let truthyArray = (_a5 = params.truthy) != null ? _a5 : ["true", "1", "yes", "on", "y", "enabled"]; + let falsyArray = (_b3 = params.falsy) != null ? _b3 : ["false", "0", "no", "off", "n", "disabled"]; + if (params.case !== "sensitive") { + truthyArray = truthyArray.map((v2) => typeof v2 === "string" ? v2.toLowerCase() : v2); + falsyArray = falsyArray.map((v2) => typeof v2 === "string" ? v2.toLowerCase() : v2); + } + const truthySet = new Set(truthyArray); + const falsySet = new Set(falsyArray); + const _Codec = (_c2 = Classes.Codec) != null ? _c2 : $ZodCodec; + const _Boolean = (_d = Classes.Boolean) != null ? _d : $ZodBoolean; + const _String = (_e2 = Classes.String) != null ? _e2 : $ZodString; + const stringSchema = new _String({ type: "string", error: params.error }); + const booleanSchema = new _Boolean({ type: "boolean", error: params.error }); + const codec2 = new _Codec({ + type: "pipe", + in: stringSchema, + out: booleanSchema, + transform: ((input, payload) => { + let data = input; + if (params.case !== "sensitive") + data = data.toLowerCase(); + if (truthySet.has(data)) { + return true; + } else if (falsySet.has(data)) { + return false; + } else { + payload.issues.push({ + code: "invalid_value", + expected: "stringbool", + values: [...truthySet, ...falsySet], + input: payload.value, + inst: codec2, + continue: false + }); + return {}; + } + }), + reverseTransform: ((input, _payload) => { + if (input === true) { + return truthyArray[0] || "true"; + } else { + return falsyArray[0] || "false"; + } + }), + error: params.error + }); + return codec2; +} +// @__NO_SIDE_EFFECTS__ +function _stringFormat(Class2, format, fnOrRegex, _params = {}) { + const params = normalizeParams(_params); + const def = { + ...normalizeParams(_params), + check: "string_format", + type: "string", + format, + fn: typeof fnOrRegex === "function" ? fnOrRegex : (val) => fnOrRegex.test(val), + ...params + }; + if (fnOrRegex instanceof RegExp) { + def.pattern = fnOrRegex; + } + const inst = new Class2(def); + return inst; +} +var TimePrecision; +var init_api = __esm({ + "node_modules/zod/v4/core/api.js"() { + init_checks(); + init_registries(); + init_schemas(); + init_util(); + TimePrecision = { + Any: null, + Minute: -1, + Second: 0, + Millisecond: 3, + Microsecond: 6 + }; + } +}); + +// node_modules/zod/v4/core/to-json-schema.js +function initializeContext(params) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i; + let target = (_a5 = params == null ? void 0 : params.target) != null ? _a5 : "draft-2020-12"; + if (target === "draft-4") + target = "draft-04"; + if (target === "draft-7") + target = "draft-07"; + return { + processors: (_b3 = params.processors) != null ? _b3 : {}, + metadataRegistry: (_c2 = params == null ? void 0 : params.metadata) != null ? _c2 : globalRegistry, + target, + unrepresentable: (_d = params == null ? void 0 : params.unrepresentable) != null ? _d : "throw", + override: (_e2 = params == null ? void 0 : params.override) != null ? _e2 : (() => { + }), + io: (_f2 = params == null ? void 0 : params.io) != null ? _f2 : "output", + counter: 0, + seen: /* @__PURE__ */ new Map(), + cycles: (_g = params == null ? void 0 : params.cycles) != null ? _g : "ref", + reused: (_h2 = params == null ? void 0 : params.reused) != null ? _h2 : "inline", + external: (_i = params == null ? void 0 : params.external) != null ? _i : void 0 + }; +} +function process2(schema, ctx, _params = { path: [], schemaPath: [] }) { + var _a6, _b3, _c2; + var _a5; + const def = schema._zod.def; + const seen = ctx.seen.get(schema); + if (seen) { + seen.count++; + const isCycle = _params.schemaPath.includes(schema); + if (isCycle) { + seen.cycle = _params.path; + } + return seen.schema; + } + const result = { schema: {}, count: 1, cycle: void 0, path: _params.path }; + ctx.seen.set(schema, result); + const overrideSchema = (_b3 = (_a6 = schema._zod).toJSONSchema) == null ? void 0 : _b3.call(_a6); + if (overrideSchema) { + result.schema = overrideSchema; + } else { + const params = { + ..._params, + schemaPath: [..._params.schemaPath, schema], + path: _params.path + }; + if (schema._zod.processJSONSchema) { + schema._zod.processJSONSchema(ctx, result.schema, params); + } else { + const _json = result.schema; + const processor = ctx.processors[def.type]; + if (!processor) { + throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`); + } + processor(schema, ctx, _json, params); + } + const parent = schema._zod.parent; + if (parent) { + if (!result.ref) + result.ref = parent; + process2(parent, ctx, params); + ctx.seen.get(parent).isParent = true; + } + } + const meta3 = ctx.metadataRegistry.get(schema); + if (meta3) + Object.assign(result.schema, meta3); + if (ctx.io === "input" && isTransforming(schema)) { + delete result.schema.examples; + delete result.schema.default; + } + if (ctx.io === "input" && result.schema._prefault) + (_c2 = (_a5 = result.schema).default) != null ? _c2 : _a5.default = result.schema._prefault; + delete result.schema._prefault; + const _result = ctx.seen.get(schema); + return _result.schema; +} +function extractDefs(ctx, schema) { + var _a5, _b3, _c2, _d; + const root = ctx.seen.get(schema); + if (!root) + throw new Error("Unprocessed schema. This is a bug in Zod."); + const idToSchema = /* @__PURE__ */ new Map(); + for (const entry of ctx.seen.entries()) { + const id = (_a5 = ctx.metadataRegistry.get(entry[0])) == null ? void 0 : _a5.id; + if (id) { + const existing = idToSchema.get(id); + if (existing && existing !== entry[0]) { + throw new Error(`Duplicate schema id "${id}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`); + } + idToSchema.set(id, entry[0]); + } + } + const makeURI = (entry) => { + var _a6, _b4, _c3, _d2, _e2; + const defsSegment = ctx.target === "draft-2020-12" ? "$defs" : "definitions"; + if (ctx.external) { + const externalId = (_a6 = ctx.external.registry.get(entry[0])) == null ? void 0 : _a6.id; + const uriGenerator = (_b4 = ctx.external.uri) != null ? _b4 : ((id2) => id2); + if (externalId) { + return { ref: uriGenerator(externalId) }; + } + const id = (_d2 = (_c3 = entry[1].defId) != null ? _c3 : entry[1].schema.id) != null ? _d2 : `schema${ctx.counter++}`; + entry[1].defId = id; + return { defId: id, ref: `${uriGenerator("__shared")}#/${defsSegment}/${id}` }; + } + if (entry[1] === root) { + return { ref: "#" }; + } + const uriPrefix = `#`; + const defUriPrefix = `${uriPrefix}/${defsSegment}/`; + const defId = (_e2 = entry[1].schema.id) != null ? _e2 : `__schema${ctx.counter++}`; + return { defId, ref: defUriPrefix + defId }; + }; + const extractToDef = (entry) => { + if (entry[1].schema.$ref) { + return; + } + const seen = entry[1]; + const { ref, defId } = makeURI(entry); + seen.def = { ...seen.schema }; + if (defId) + seen.defId = defId; + const schema2 = seen.schema; + for (const key in schema2) { + delete schema2[key]; + } + schema2.$ref = ref; + }; + if (ctx.cycles === "throw") { + for (const entry of ctx.seen.entries()) { + const seen = entry[1]; + if (seen.cycle) { + throw new Error(`Cycle detected: #/${(_b3 = seen.cycle) == null ? void 0 : _b3.join("/")}/ + +Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`); + } + } + } + for (const entry of ctx.seen.entries()) { + const seen = entry[1]; + if (schema === entry[0]) { + extractToDef(entry); + continue; + } + if (ctx.external) { + const ext = (_c2 = ctx.external.registry.get(entry[0])) == null ? void 0 : _c2.id; + if (schema !== entry[0] && ext) { + extractToDef(entry); + continue; + } + } + const id = (_d = ctx.metadataRegistry.get(entry[0])) == null ? void 0 : _d.id; + if (id) { + extractToDef(entry); + continue; + } + if (seen.cycle) { + extractToDef(entry); + continue; + } + if (seen.count > 1) { + if (ctx.reused === "ref") { + extractToDef(entry); + continue; + } + } + } +} +function finalize(ctx, schema) { + var _a5, _b3, _c2, _d, _e2; + const root = ctx.seen.get(schema); + if (!root) + throw new Error("Unprocessed schema. This is a bug in Zod."); + const flattenRef = (zodSchema) => { + var _a6, _b4, _c3; + const seen = ctx.seen.get(zodSchema); + if (seen.ref === null) + return; + const schema2 = (_a6 = seen.def) != null ? _a6 : seen.schema; + const _cached = { ...schema2 }; + const ref = seen.ref; + seen.ref = null; + if (ref) { + flattenRef(ref); + const refSeen = ctx.seen.get(ref); + const refSchema = refSeen.schema; + if (refSchema.$ref && (ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0")) { + schema2.allOf = (_b4 = schema2.allOf) != null ? _b4 : []; + schema2.allOf.push(refSchema); + } else { + Object.assign(schema2, refSchema); + } + Object.assign(schema2, _cached); + const isParentRef = zodSchema._zod.parent === ref; + if (isParentRef) { + for (const key in schema2) { + if (key === "$ref" || key === "allOf") + continue; + if (!(key in _cached)) { + delete schema2[key]; + } + } + } + if (refSchema.$ref && refSeen.def) { + for (const key in schema2) { + if (key === "$ref" || key === "allOf") + continue; + if (key in refSeen.def && JSON.stringify(schema2[key]) === JSON.stringify(refSeen.def[key])) { + delete schema2[key]; + } + } + } + } + const parent = zodSchema._zod.parent; + if (parent && parent !== ref) { + flattenRef(parent); + const parentSeen = ctx.seen.get(parent); + if (parentSeen == null ? void 0 : parentSeen.schema.$ref) { + schema2.$ref = parentSeen.schema.$ref; + if (parentSeen.def) { + for (const key in schema2) { + if (key === "$ref" || key === "allOf") + continue; + if (key in parentSeen.def && JSON.stringify(schema2[key]) === JSON.stringify(parentSeen.def[key])) { + delete schema2[key]; + } + } + } + } + } + ctx.override({ + zodSchema, + jsonSchema: schema2, + path: (_c3 = seen.path) != null ? _c3 : [] + }); + }; + for (const entry of [...ctx.seen.entries()].reverse()) { + flattenRef(entry[0]); + } + const result = {}; + if (ctx.target === "draft-2020-12") { + result.$schema = "https://json-schema.org/draft/2020-12/schema"; + } else if (ctx.target === "draft-07") { + result.$schema = "http://json-schema.org/draft-07/schema#"; + } else if (ctx.target === "draft-04") { + result.$schema = "http://json-schema.org/draft-04/schema#"; + } else if (ctx.target === "openapi-3.0") { + } else { + } + if ((_a5 = ctx.external) == null ? void 0 : _a5.uri) { + const id = (_b3 = ctx.external.registry.get(schema)) == null ? void 0 : _b3.id; + if (!id) + throw new Error("Schema is missing an `id` property"); + result.$id = ctx.external.uri(id); + } + Object.assign(result, (_c2 = root.def) != null ? _c2 : root.schema); + const defs = (_e2 = (_d = ctx.external) == null ? void 0 : _d.defs) != null ? _e2 : {}; + for (const entry of ctx.seen.entries()) { + const seen = entry[1]; + if (seen.def && seen.defId) { + defs[seen.defId] = seen.def; + } + } + if (ctx.external) { + } else { + if (Object.keys(defs).length > 0) { + if (ctx.target === "draft-2020-12") { + result.$defs = defs; + } else { + result.definitions = defs; + } + } + } + try { + const finalized = JSON.parse(JSON.stringify(result)); + Object.defineProperty(finalized, "~standard", { + value: { + ...schema["~standard"], + jsonSchema: { + input: createStandardJSONSchemaMethod(schema, "input", ctx.processors), + output: createStandardJSONSchemaMethod(schema, "output", ctx.processors) + } + }, + enumerable: false, + writable: false + }); + return finalized; + } catch (_err) { + throw new Error("Error converting schema to JSON."); + } +} +function isTransforming(_schema, _ctx) { + const ctx = _ctx != null ? _ctx : { seen: /* @__PURE__ */ new Set() }; + if (ctx.seen.has(_schema)) + return false; + ctx.seen.add(_schema); + const def = _schema._zod.def; + if (def.type === "transform") + return true; + if (def.type === "array") + return isTransforming(def.element, ctx); + if (def.type === "set") + return isTransforming(def.valueType, ctx); + if (def.type === "lazy") + return isTransforming(def.getter(), ctx); + if (def.type === "promise" || def.type === "optional" || def.type === "nonoptional" || def.type === "nullable" || def.type === "readonly" || def.type === "default" || def.type === "prefault") { + return isTransforming(def.innerType, ctx); + } + if (def.type === "intersection") { + return isTransforming(def.left, ctx) || isTransforming(def.right, ctx); + } + if (def.type === "record" || def.type === "map") { + return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx); + } + if (def.type === "pipe") { + return isTransforming(def.in, ctx) || isTransforming(def.out, ctx); + } + if (def.type === "object") { + for (const key in def.shape) { + if (isTransforming(def.shape[key], ctx)) + return true; + } + return false; + } + if (def.type === "union") { + for (const option of def.options) { + if (isTransforming(option, ctx)) + return true; + } + return false; + } + if (def.type === "tuple") { + for (const item of def.items) { + if (isTransforming(item, ctx)) + return true; + } + if (def.rest && isTransforming(def.rest, ctx)) + return true; + return false; + } + return false; +} +var createToJSONSchemaMethod, createStandardJSONSchemaMethod; +var init_to_json_schema = __esm({ + "node_modules/zod/v4/core/to-json-schema.js"() { + init_registries(); + createToJSONSchemaMethod = (schema, processors = {}) => (params) => { + const ctx = initializeContext({ ...params, processors }); + process2(schema, ctx); + extractDefs(ctx, schema); + return finalize(ctx, schema); + }; + createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => { + const { libraryOptions, target } = params != null ? params : {}; + const ctx = initializeContext({ ...libraryOptions != null ? libraryOptions : {}, target, io, processors }); + process2(schema, ctx); + extractDefs(ctx, schema); + return finalize(ctx, schema); + }; + } +}); + +// node_modules/zod/v4/core/json-schema-processors.js +function toJSONSchema(input, params) { + if ("_idmap" in input) { + const registry2 = input; + const ctx2 = initializeContext({ ...params, processors: allProcessors }); + const defs = {}; + for (const entry of registry2._idmap.entries()) { + const [_2, schema] = entry; + process2(schema, ctx2); + } + const schemas = {}; + const external = { + registry: registry2, + uri: params == null ? void 0 : params.uri, + defs + }; + ctx2.external = external; + for (const entry of registry2._idmap.entries()) { + const [key, schema] = entry; + extractDefs(ctx2, schema); + schemas[key] = finalize(ctx2, schema); + } + if (Object.keys(defs).length > 0) { + const defsSegment = ctx2.target === "draft-2020-12" ? "$defs" : "definitions"; + schemas.__shared = { + [defsSegment]: defs + }; + } + return { schemas }; + } + const ctx = initializeContext({ ...params, processors: allProcessors }); + process2(input, ctx); + extractDefs(ctx, input); + return finalize(ctx, input); +} +var formatMap, stringProcessor, numberProcessor, booleanProcessor, bigintProcessor, symbolProcessor, nullProcessor, undefinedProcessor, voidProcessor, neverProcessor, anyProcessor, unknownProcessor, dateProcessor, enumProcessor, literalProcessor, nanProcessor, templateLiteralProcessor, fileProcessor, successProcessor, customProcessor, functionProcessor, transformProcessor, mapProcessor, setProcessor, arrayProcessor, objectProcessor, unionProcessor, intersectionProcessor, tupleProcessor, recordProcessor, nullableProcessor, nonoptionalProcessor, defaultProcessor, prefaultProcessor, catchProcessor, pipeProcessor, readonlyProcessor, promiseProcessor, optionalProcessor, lazyProcessor, allProcessors; +var init_json_schema_processors = __esm({ + "node_modules/zod/v4/core/json-schema-processors.js"() { + init_to_json_schema(); + init_util(); + formatMap = { + guid: "uuid", + url: "uri", + datetime: "date-time", + json_string: "json-string", + regex: "" + // do not set + }; + stringProcessor = (schema, ctx, _json, _params) => { + var _a5; + const json2 = _json; + json2.type = "string"; + const { minimum, maximum, format, patterns, contentEncoding } = schema._zod.bag; + if (typeof minimum === "number") + json2.minLength = minimum; + if (typeof maximum === "number") + json2.maxLength = maximum; + if (format) { + json2.format = (_a5 = formatMap[format]) != null ? _a5 : format; + if (json2.format === "") + delete json2.format; + if (format === "time") { + delete json2.format; + } + } + if (contentEncoding) + json2.contentEncoding = contentEncoding; + if (patterns && patterns.size > 0) { + const regexes = [...patterns]; + if (regexes.length === 1) + json2.pattern = regexes[0].source; + else if (regexes.length > 1) { + json2.allOf = [ + ...regexes.map((regex) => ({ + ...ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0" ? { type: "string" } : {}, + pattern: regex.source + })) + ]; + } + } + }; + numberProcessor = (schema, ctx, _json, _params) => { + const json2 = _json; + const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag; + if (typeof format === "string" && format.includes("int")) + json2.type = "integer"; + else + json2.type = "number"; + if (typeof exclusiveMinimum === "number") { + if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") { + json2.minimum = exclusiveMinimum; + json2.exclusiveMinimum = true; + } else { + json2.exclusiveMinimum = exclusiveMinimum; + } + } + if (typeof minimum === "number") { + json2.minimum = minimum; + if (typeof exclusiveMinimum === "number" && ctx.target !== "draft-04") { + if (exclusiveMinimum >= minimum) + delete json2.minimum; + else + delete json2.exclusiveMinimum; + } + } + if (typeof exclusiveMaximum === "number") { + if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") { + json2.maximum = exclusiveMaximum; + json2.exclusiveMaximum = true; + } else { + json2.exclusiveMaximum = exclusiveMaximum; + } + } + if (typeof maximum === "number") { + json2.maximum = maximum; + if (typeof exclusiveMaximum === "number" && ctx.target !== "draft-04") { + if (exclusiveMaximum <= maximum) + delete json2.maximum; + else + delete json2.exclusiveMaximum; + } + } + if (typeof multipleOf === "number") + json2.multipleOf = multipleOf; + }; + booleanProcessor = (_schema, _ctx, json2, _params) => { + json2.type = "boolean"; + }; + bigintProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("BigInt cannot be represented in JSON Schema"); + } + }; + symbolProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Symbols cannot be represented in JSON Schema"); + } + }; + nullProcessor = (_schema, ctx, json2, _params) => { + if (ctx.target === "openapi-3.0") { + json2.type = "string"; + json2.nullable = true; + json2.enum = [null]; + } else { + json2.type = "null"; + } + }; + undefinedProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Undefined cannot be represented in JSON Schema"); + } + }; + voidProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Void cannot be represented in JSON Schema"); + } + }; + neverProcessor = (_schema, _ctx, json2, _params) => { + json2.not = {}; + }; + anyProcessor = (_schema, _ctx, _json, _params) => { + }; + unknownProcessor = (_schema, _ctx, _json, _params) => { + }; + dateProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Date cannot be represented in JSON Schema"); + } + }; + enumProcessor = (schema, _ctx, json2, _params) => { + const def = schema._zod.def; + const values = getEnumValues(def.entries); + if (values.every((v2) => typeof v2 === "number")) + json2.type = "number"; + if (values.every((v2) => typeof v2 === "string")) + json2.type = "string"; + json2.enum = values; + }; + literalProcessor = (schema, ctx, json2, _params) => { + const def = schema._zod.def; + const vals = []; + for (const val of def.values) { + if (val === void 0) { + if (ctx.unrepresentable === "throw") { + throw new Error("Literal `undefined` cannot be represented in JSON Schema"); + } else { + } + } else if (typeof val === "bigint") { + if (ctx.unrepresentable === "throw") { + throw new Error("BigInt literals cannot be represented in JSON Schema"); + } else { + vals.push(Number(val)); + } + } else { + vals.push(val); + } + } + if (vals.length === 0) { + } else if (vals.length === 1) { + const val = vals[0]; + json2.type = val === null ? "null" : typeof val; + if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") { + json2.enum = [val]; + } else { + json2.const = val; + } + } else { + if (vals.every((v2) => typeof v2 === "number")) + json2.type = "number"; + if (vals.every((v2) => typeof v2 === "string")) + json2.type = "string"; + if (vals.every((v2) => typeof v2 === "boolean")) + json2.type = "boolean"; + if (vals.every((v2) => v2 === null)) + json2.type = "null"; + json2.enum = vals; + } + }; + nanProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("NaN cannot be represented in JSON Schema"); + } + }; + templateLiteralProcessor = (schema, _ctx, json2, _params) => { + const _json = json2; + const pattern = schema._zod.pattern; + if (!pattern) + throw new Error("Pattern not found in template literal"); + _json.type = "string"; + _json.pattern = pattern.source; + }; + fileProcessor = (schema, _ctx, json2, _params) => { + const _json = json2; + const file2 = { + type: "string", + format: "binary", + contentEncoding: "binary" + }; + const { minimum, maximum, mime } = schema._zod.bag; + if (minimum !== void 0) + file2.minLength = minimum; + if (maximum !== void 0) + file2.maxLength = maximum; + if (mime) { + if (mime.length === 1) { + file2.contentMediaType = mime[0]; + Object.assign(_json, file2); + } else { + Object.assign(_json, file2); + _json.anyOf = mime.map((m4) => ({ contentMediaType: m4 })); + } + } else { + Object.assign(_json, file2); + } + }; + successProcessor = (_schema, _ctx, json2, _params) => { + json2.type = "boolean"; + }; + customProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Custom types cannot be represented in JSON Schema"); + } + }; + functionProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Function types cannot be represented in JSON Schema"); + } + }; + transformProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Transforms cannot be represented in JSON Schema"); + } + }; + mapProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Map cannot be represented in JSON Schema"); + } + }; + setProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Set cannot be represented in JSON Schema"); + } + }; + arrayProcessor = (schema, ctx, _json, params) => { + const json2 = _json; + const def = schema._zod.def; + const { minimum, maximum } = schema._zod.bag; + if (typeof minimum === "number") + json2.minItems = minimum; + if (typeof maximum === "number") + json2.maxItems = maximum; + json2.type = "array"; + json2.items = process2(def.element, ctx, { ...params, path: [...params.path, "items"] }); + }; + objectProcessor = (schema, ctx, _json, params) => { + var _a5; + const json2 = _json; + const def = schema._zod.def; + json2.type = "object"; + json2.properties = {}; + const shape = def.shape; + for (const key in shape) { + json2.properties[key] = process2(shape[key], ctx, { + ...params, + path: [...params.path, "properties", key] + }); + } + const allKeys = new Set(Object.keys(shape)); + const requiredKeys = new Set([...allKeys].filter((key) => { + const v2 = def.shape[key]._zod; + if (ctx.io === "input") { + return v2.optin === void 0; + } else { + return v2.optout === void 0; + } + })); + if (requiredKeys.size > 0) { + json2.required = Array.from(requiredKeys); + } + if (((_a5 = def.catchall) == null ? void 0 : _a5._zod.def.type) === "never") { + json2.additionalProperties = false; + } else if (!def.catchall) { + if (ctx.io === "output") + json2.additionalProperties = false; + } else if (def.catchall) { + json2.additionalProperties = process2(def.catchall, ctx, { + ...params, + path: [...params.path, "additionalProperties"] + }); + } + }; + unionProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + const isExclusive = def.inclusive === false; + const options = def.options.map((x2, i) => process2(x2, ctx, { + ...params, + path: [...params.path, isExclusive ? "oneOf" : "anyOf", i] + })); + if (isExclusive) { + json2.oneOf = options; + } else { + json2.anyOf = options; + } + }; + intersectionProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + const a = process2(def.left, ctx, { + ...params, + path: [...params.path, "allOf", 0] + }); + const b2 = process2(def.right, ctx, { + ...params, + path: [...params.path, "allOf", 1] + }); + const isSimpleIntersection = (val) => "allOf" in val && Object.keys(val).length === 1; + const allOf = [ + ...isSimpleIntersection(a) ? a.allOf : [a], + ...isSimpleIntersection(b2) ? b2.allOf : [b2] + ]; + json2.allOf = allOf; + }; + tupleProcessor = (schema, ctx, _json, params) => { + const json2 = _json; + const def = schema._zod.def; + json2.type = "array"; + const prefixPath = ctx.target === "draft-2020-12" ? "prefixItems" : "items"; + const restPath = ctx.target === "draft-2020-12" ? "items" : ctx.target === "openapi-3.0" ? "items" : "additionalItems"; + const prefixItems = def.items.map((x2, i) => process2(x2, ctx, { + ...params, + path: [...params.path, prefixPath, i] + })); + const rest = def.rest ? process2(def.rest, ctx, { + ...params, + path: [...params.path, restPath, ...ctx.target === "openapi-3.0" ? [def.items.length] : []] + }) : null; + if (ctx.target === "draft-2020-12") { + json2.prefixItems = prefixItems; + if (rest) { + json2.items = rest; + } + } else if (ctx.target === "openapi-3.0") { + json2.items = { + anyOf: prefixItems + }; + if (rest) { + json2.items.anyOf.push(rest); + } + json2.minItems = prefixItems.length; + if (!rest) { + json2.maxItems = prefixItems.length; + } + } else { + json2.items = prefixItems; + if (rest) { + json2.additionalItems = rest; + } + } + const { minimum, maximum } = schema._zod.bag; + if (typeof minimum === "number") + json2.minItems = minimum; + if (typeof maximum === "number") + json2.maxItems = maximum; + }; + recordProcessor = (schema, ctx, _json, params) => { + const json2 = _json; + const def = schema._zod.def; + json2.type = "object"; + const keyType = def.keyType; + const keyBag = keyType._zod.bag; + const patterns = keyBag == null ? void 0 : keyBag.patterns; + if (def.mode === "loose" && patterns && patterns.size > 0) { + const valueSchema = process2(def.valueType, ctx, { + ...params, + path: [...params.path, "patternProperties", "*"] + }); + json2.patternProperties = {}; + for (const pattern of patterns) { + json2.patternProperties[pattern.source] = valueSchema; + } + } else { + if (ctx.target === "draft-07" || ctx.target === "draft-2020-12") { + json2.propertyNames = process2(def.keyType, ctx, { + ...params, + path: [...params.path, "propertyNames"] + }); + } + json2.additionalProperties = process2(def.valueType, ctx, { + ...params, + path: [...params.path, "additionalProperties"] + }); + } + const keyValues = keyType._zod.values; + if (keyValues) { + const validKeyValues = [...keyValues].filter((v2) => typeof v2 === "string" || typeof v2 === "number"); + if (validKeyValues.length > 0) { + json2.required = validKeyValues; + } + } + }; + nullableProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + const inner = process2(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + if (ctx.target === "openapi-3.0") { + seen.ref = def.innerType; + json2.nullable = true; + } else { + json2.anyOf = [inner, { type: "null" }]; + } + }; + nonoptionalProcessor = (schema, ctx, _json, params) => { + const def = schema._zod.def; + process2(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; + }; + defaultProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + process2(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; + json2.default = JSON.parse(JSON.stringify(def.defaultValue)); + }; + prefaultProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + process2(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; + if (ctx.io === "input") + json2._prefault = JSON.parse(JSON.stringify(def.defaultValue)); + }; + catchProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + process2(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; + let catchValue; + try { + catchValue = def.catchValue(void 0); + } catch (e2) { + throw new Error("Dynamic catch values are not supported in JSON Schema"); + } + json2.default = catchValue; + }; + pipeProcessor = (schema, ctx, _json, params) => { + const def = schema._zod.def; + const innerType = ctx.io === "input" ? def.in._zod.def.type === "transform" ? def.out : def.in : def.out; + process2(innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = innerType; + }; + readonlyProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + process2(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; + json2.readOnly = true; + }; + promiseProcessor = (schema, ctx, _json, params) => { + const def = schema._zod.def; + process2(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; + }; + optionalProcessor = (schema, ctx, _json, params) => { + const def = schema._zod.def; + process2(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; + }; + lazyProcessor = (schema, ctx, _json, params) => { + const innerType = schema._zod.innerType; + process2(innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = innerType; + }; + allProcessors = { + string: stringProcessor, + number: numberProcessor, + boolean: booleanProcessor, + bigint: bigintProcessor, + symbol: symbolProcessor, + null: nullProcessor, + undefined: undefinedProcessor, + void: voidProcessor, + never: neverProcessor, + any: anyProcessor, + unknown: unknownProcessor, + date: dateProcessor, + enum: enumProcessor, + literal: literalProcessor, + nan: nanProcessor, + template_literal: templateLiteralProcessor, + file: fileProcessor, + success: successProcessor, + custom: customProcessor, + function: functionProcessor, + transform: transformProcessor, + map: mapProcessor, + set: setProcessor, + array: arrayProcessor, + object: objectProcessor, + union: unionProcessor, + intersection: intersectionProcessor, + tuple: tupleProcessor, + record: recordProcessor, + nullable: nullableProcessor, + nonoptional: nonoptionalProcessor, + default: defaultProcessor, + prefault: prefaultProcessor, + catch: catchProcessor, + pipe: pipeProcessor, + readonly: readonlyProcessor, + promise: promiseProcessor, + optional: optionalProcessor, + lazy: lazyProcessor + }; + } +}); + +// node_modules/zod/v4/core/json-schema-generator.js +var JSONSchemaGenerator; +var init_json_schema_generator = __esm({ + "node_modules/zod/v4/core/json-schema-generator.js"() { + init_json_schema_processors(); + init_to_json_schema(); + JSONSchemaGenerator = class { + /** @deprecated Access via ctx instead */ + get metadataRegistry() { + return this.ctx.metadataRegistry; + } + /** @deprecated Access via ctx instead */ + get target() { + return this.ctx.target; + } + /** @deprecated Access via ctx instead */ + get unrepresentable() { + return this.ctx.unrepresentable; + } + /** @deprecated Access via ctx instead */ + get override() { + return this.ctx.override; + } + /** @deprecated Access via ctx instead */ + get io() { + return this.ctx.io; + } + /** @deprecated Access via ctx instead */ + get counter() { + return this.ctx.counter; + } + set counter(value) { + this.ctx.counter = value; + } + /** @deprecated Access via ctx instead */ + get seen() { + return this.ctx.seen; + } + constructor(params) { + var _a5; + let normalizedTarget = (_a5 = params == null ? void 0 : params.target) != null ? _a5 : "draft-2020-12"; + if (normalizedTarget === "draft-4") + normalizedTarget = "draft-04"; + if (normalizedTarget === "draft-7") + normalizedTarget = "draft-07"; + this.ctx = initializeContext({ + processors: allProcessors, + target: normalizedTarget, + ...(params == null ? void 0 : params.metadata) && { metadata: params.metadata }, + ...(params == null ? void 0 : params.unrepresentable) && { unrepresentable: params.unrepresentable }, + ...(params == null ? void 0 : params.override) && { override: params.override }, + ...(params == null ? void 0 : params.io) && { io: params.io } + }); + } + /** + * Process a schema to prepare it for JSON Schema generation. + * This must be called before emit(). + */ + process(schema, _params = { path: [], schemaPath: [] }) { + return process2(schema, this.ctx, _params); + } + /** + * Emit the final JSON Schema after processing. + * Must call process() first. + */ + emit(schema, _params) { + if (_params) { + if (_params.cycles) + this.ctx.cycles = _params.cycles; + if (_params.reused) + this.ctx.reused = _params.reused; + if (_params.external) + this.ctx.external = _params.external; + } + extractDefs(this.ctx, schema); + const result = finalize(this.ctx, schema); + const { "~standard": _2, ...plainResult } = result; + return plainResult; + } + }; + } +}); + +// node_modules/zod/v4/core/json-schema.js +var json_schema_exports = {}; +var init_json_schema = __esm({ + "node_modules/zod/v4/core/json-schema.js"() { + } +}); + +// node_modules/zod/v4/core/index.js +var core_exports2 = {}; +__export(core_exports2, { + $ZodAny: () => $ZodAny, + $ZodArray: () => $ZodArray, + $ZodAsyncError: () => $ZodAsyncError, + $ZodBase64: () => $ZodBase64, + $ZodBase64URL: () => $ZodBase64URL, + $ZodBigInt: () => $ZodBigInt, + $ZodBigIntFormat: () => $ZodBigIntFormat, + $ZodBoolean: () => $ZodBoolean, + $ZodCIDRv4: () => $ZodCIDRv4, + $ZodCIDRv6: () => $ZodCIDRv6, + $ZodCUID: () => $ZodCUID, + $ZodCUID2: () => $ZodCUID2, + $ZodCatch: () => $ZodCatch, + $ZodCheck: () => $ZodCheck, + $ZodCheckBigIntFormat: () => $ZodCheckBigIntFormat, + $ZodCheckEndsWith: () => $ZodCheckEndsWith, + $ZodCheckGreaterThan: () => $ZodCheckGreaterThan, + $ZodCheckIncludes: () => $ZodCheckIncludes, + $ZodCheckLengthEquals: () => $ZodCheckLengthEquals, + $ZodCheckLessThan: () => $ZodCheckLessThan, + $ZodCheckLowerCase: () => $ZodCheckLowerCase, + $ZodCheckMaxLength: () => $ZodCheckMaxLength, + $ZodCheckMaxSize: () => $ZodCheckMaxSize, + $ZodCheckMimeType: () => $ZodCheckMimeType, + $ZodCheckMinLength: () => $ZodCheckMinLength, + $ZodCheckMinSize: () => $ZodCheckMinSize, + $ZodCheckMultipleOf: () => $ZodCheckMultipleOf, + $ZodCheckNumberFormat: () => $ZodCheckNumberFormat, + $ZodCheckOverwrite: () => $ZodCheckOverwrite, + $ZodCheckProperty: () => $ZodCheckProperty, + $ZodCheckRegex: () => $ZodCheckRegex, + $ZodCheckSizeEquals: () => $ZodCheckSizeEquals, + $ZodCheckStartsWith: () => $ZodCheckStartsWith, + $ZodCheckStringFormat: () => $ZodCheckStringFormat, + $ZodCheckUpperCase: () => $ZodCheckUpperCase, + $ZodCodec: () => $ZodCodec, + $ZodCustom: () => $ZodCustom, + $ZodCustomStringFormat: () => $ZodCustomStringFormat, + $ZodDate: () => $ZodDate, + $ZodDefault: () => $ZodDefault, + $ZodDiscriminatedUnion: () => $ZodDiscriminatedUnion, + $ZodE164: () => $ZodE164, + $ZodEmail: () => $ZodEmail, + $ZodEmoji: () => $ZodEmoji, + $ZodEncodeError: () => $ZodEncodeError, + $ZodEnum: () => $ZodEnum, + $ZodError: () => $ZodError, + $ZodExactOptional: () => $ZodExactOptional, + $ZodFile: () => $ZodFile, + $ZodFunction: () => $ZodFunction, + $ZodGUID: () => $ZodGUID, + $ZodIPv4: () => $ZodIPv4, + $ZodIPv6: () => $ZodIPv6, + $ZodISODate: () => $ZodISODate, + $ZodISODateTime: () => $ZodISODateTime, + $ZodISODuration: () => $ZodISODuration, + $ZodISOTime: () => $ZodISOTime, + $ZodIntersection: () => $ZodIntersection, + $ZodJWT: () => $ZodJWT, + $ZodKSUID: () => $ZodKSUID, + $ZodLazy: () => $ZodLazy, + $ZodLiteral: () => $ZodLiteral, + $ZodMAC: () => $ZodMAC, + $ZodMap: () => $ZodMap, + $ZodNaN: () => $ZodNaN, + $ZodNanoID: () => $ZodNanoID, + $ZodNever: () => $ZodNever, + $ZodNonOptional: () => $ZodNonOptional, + $ZodNull: () => $ZodNull, + $ZodNullable: () => $ZodNullable, + $ZodNumber: () => $ZodNumber, + $ZodNumberFormat: () => $ZodNumberFormat, + $ZodObject: () => $ZodObject, + $ZodObjectJIT: () => $ZodObjectJIT, + $ZodOptional: () => $ZodOptional, + $ZodPipe: () => $ZodPipe, + $ZodPrefault: () => $ZodPrefault, + $ZodPromise: () => $ZodPromise, + $ZodReadonly: () => $ZodReadonly, + $ZodRealError: () => $ZodRealError, + $ZodRecord: () => $ZodRecord, + $ZodRegistry: () => $ZodRegistry, + $ZodSet: () => $ZodSet, + $ZodString: () => $ZodString, + $ZodStringFormat: () => $ZodStringFormat, + $ZodSuccess: () => $ZodSuccess, + $ZodSymbol: () => $ZodSymbol, + $ZodTemplateLiteral: () => $ZodTemplateLiteral, + $ZodTransform: () => $ZodTransform, + $ZodTuple: () => $ZodTuple, + $ZodType: () => $ZodType, + $ZodULID: () => $ZodULID, + $ZodURL: () => $ZodURL, + $ZodUUID: () => $ZodUUID, + $ZodUndefined: () => $ZodUndefined, + $ZodUnion: () => $ZodUnion, + $ZodUnknown: () => $ZodUnknown, + $ZodVoid: () => $ZodVoid, + $ZodXID: () => $ZodXID, + $ZodXor: () => $ZodXor, + $brand: () => $brand, + $constructor: () => $constructor, + $input: () => $input, + $output: () => $output, + Doc: () => Doc, + JSONSchema: () => json_schema_exports, + JSONSchemaGenerator: () => JSONSchemaGenerator, + NEVER: () => NEVER, + TimePrecision: () => TimePrecision, + _any: () => _any, + _array: () => _array, + _base64: () => _base64, + _base64url: () => _base64url, + _bigint: () => _bigint, + _boolean: () => _boolean, + _catch: () => _catch, + _check: () => _check, + _cidrv4: () => _cidrv4, + _cidrv6: () => _cidrv6, + _coercedBigint: () => _coercedBigint, + _coercedBoolean: () => _coercedBoolean, + _coercedDate: () => _coercedDate, + _coercedNumber: () => _coercedNumber, + _coercedString: () => _coercedString, + _cuid: () => _cuid, + _cuid2: () => _cuid2, + _custom: () => _custom, + _date: () => _date, + _decode: () => _decode, + _decodeAsync: () => _decodeAsync, + _default: () => _default, + _discriminatedUnion: () => _discriminatedUnion, + _e164: () => _e164, + _email: () => _email, + _emoji: () => _emoji2, + _encode: () => _encode, + _encodeAsync: () => _encodeAsync, + _endsWith: () => _endsWith, + _enum: () => _enum, + _file: () => _file, + _float32: () => _float32, + _float64: () => _float64, + _gt: () => _gt, + _gte: () => _gte, + _guid: () => _guid, + _includes: () => _includes, + _int: () => _int, + _int32: () => _int32, + _int64: () => _int64, + _intersection: () => _intersection, + _ipv4: () => _ipv4, + _ipv6: () => _ipv6, + _isoDate: () => _isoDate, + _isoDateTime: () => _isoDateTime, + _isoDuration: () => _isoDuration, + _isoTime: () => _isoTime, + _jwt: () => _jwt, + _ksuid: () => _ksuid, + _lazy: () => _lazy, + _length: () => _length, + _literal: () => _literal, + _lowercase: () => _lowercase, + _lt: () => _lt, + _lte: () => _lte, + _mac: () => _mac, + _map: () => _map, + _max: () => _lte, + _maxLength: () => _maxLength, + _maxSize: () => _maxSize, + _mime: () => _mime, + _min: () => _gte, + _minLength: () => _minLength, + _minSize: () => _minSize, + _multipleOf: () => _multipleOf, + _nan: () => _nan, + _nanoid: () => _nanoid, + _nativeEnum: () => _nativeEnum, + _negative: () => _negative, + _never: () => _never, + _nonnegative: () => _nonnegative, + _nonoptional: () => _nonoptional, + _nonpositive: () => _nonpositive, + _normalize: () => _normalize, + _null: () => _null2, + _nullable: () => _nullable, + _number: () => _number, + _optional: () => _optional, + _overwrite: () => _overwrite, + _parse: () => _parse, + _parseAsync: () => _parseAsync, + _pipe: () => _pipe, + _positive: () => _positive, + _promise: () => _promise, + _property: () => _property, + _readonly: () => _readonly, + _record: () => _record, + _refine: () => _refine, + _regex: () => _regex, + _safeDecode: () => _safeDecode, + _safeDecodeAsync: () => _safeDecodeAsync, + _safeEncode: () => _safeEncode, + _safeEncodeAsync: () => _safeEncodeAsync, + _safeParse: () => _safeParse, + _safeParseAsync: () => _safeParseAsync, + _set: () => _set, + _size: () => _size, + _slugify: () => _slugify, + _startsWith: () => _startsWith, + _string: () => _string, + _stringFormat: () => _stringFormat, + _stringbool: () => _stringbool, + _success: () => _success, + _superRefine: () => _superRefine, + _symbol: () => _symbol, + _templateLiteral: () => _templateLiteral, + _toLowerCase: () => _toLowerCase, + _toUpperCase: () => _toUpperCase, + _transform: () => _transform, + _trim: () => _trim, + _tuple: () => _tuple, + _uint32: () => _uint32, + _uint64: () => _uint64, + _ulid: () => _ulid, + _undefined: () => _undefined2, + _union: () => _union, + _unknown: () => _unknown, + _uppercase: () => _uppercase, + _url: () => _url, + _uuid: () => _uuid, + _uuidv4: () => _uuidv4, + _uuidv6: () => _uuidv6, + _uuidv7: () => _uuidv7, + _void: () => _void, + _xid: () => _xid, + _xor: () => _xor, + clone: () => clone, + config: () => config, + createStandardJSONSchemaMethod: () => createStandardJSONSchemaMethod, + createToJSONSchemaMethod: () => createToJSONSchemaMethod, + decode: () => decode, + decodeAsync: () => decodeAsync, + describe: () => describe, + encode: () => encode, + encodeAsync: () => encodeAsync, + extractDefs: () => extractDefs, + finalize: () => finalize, + flattenError: () => flattenError, + formatError: () => formatError, + globalConfig: () => globalConfig, + globalRegistry: () => globalRegistry, + initializeContext: () => initializeContext, + isValidBase64: () => isValidBase64, + isValidBase64URL: () => isValidBase64URL, + isValidJWT: () => isValidJWT2, + locales: () => locales_exports, + meta: () => meta, + parse: () => parse, + parseAsync: () => parseAsync, + prettifyError: () => prettifyError, + process: () => process2, + regexes: () => regexes_exports, + registry: () => registry, + safeDecode: () => safeDecode, + safeDecodeAsync: () => safeDecodeAsync, + safeEncode: () => safeEncode, + safeEncodeAsync: () => safeEncodeAsync, + safeParse: () => safeParse, + safeParseAsync: () => safeParseAsync, + toDotPath: () => toDotPath, + toJSONSchema: () => toJSONSchema, + treeifyError: () => treeifyError, + util: () => util_exports, + version: () => version +}); +var init_core2 = __esm({ + "node_modules/zod/v4/core/index.js"() { + init_core(); + init_parse(); + init_errors(); + init_schemas(); + init_checks(); + init_versions(); + init_util(); + init_regexes(); + init_locales(); + init_registries(); + init_doc(); + init_api(); + init_to_json_schema(); + init_json_schema_processors(); + init_json_schema_generator(); + init_json_schema(); + } +}); + +// node_modules/zod/v4/classic/checks.js +var checks_exports2 = {}; +__export(checks_exports2, { + endsWith: () => _endsWith, + gt: () => _gt, + gte: () => _gte, + includes: () => _includes, + length: () => _length, + lowercase: () => _lowercase, + lt: () => _lt, + lte: () => _lte, + maxLength: () => _maxLength, + maxSize: () => _maxSize, + mime: () => _mime, + minLength: () => _minLength, + minSize: () => _minSize, + multipleOf: () => _multipleOf, + negative: () => _negative, + nonnegative: () => _nonnegative, + nonpositive: () => _nonpositive, + normalize: () => _normalize, + overwrite: () => _overwrite, + positive: () => _positive, + property: () => _property, + regex: () => _regex, + size: () => _size, + slugify: () => _slugify, + startsWith: () => _startsWith, + toLowerCase: () => _toLowerCase, + toUpperCase: () => _toUpperCase, + trim: () => _trim, + uppercase: () => _uppercase +}); +var init_checks2 = __esm({ + "node_modules/zod/v4/classic/checks.js"() { + init_core2(); + } +}); + +// node_modules/zod/v4/classic/iso.js +var iso_exports2 = {}; +__export(iso_exports2, { + ZodISODate: () => ZodISODate, + ZodISODateTime: () => ZodISODateTime, + ZodISODuration: () => ZodISODuration, + ZodISOTime: () => ZodISOTime, + date: () => date4, + datetime: () => datetime3, + duration: () => duration3, + time: () => time3 +}); +function datetime3(params) { + return _isoDateTime(ZodISODateTime, params); +} +function date4(params) { + return _isoDate(ZodISODate, params); +} +function time3(params) { + return _isoTime(ZodISOTime, params); +} +function duration3(params) { + return _isoDuration(ZodISODuration, params); +} +var ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration; +var init_iso = __esm({ + "node_modules/zod/v4/classic/iso.js"() { + init_core2(); + init_schemas2(); + ZodISODateTime = /* @__PURE__ */ $constructor("ZodISODateTime", (inst, def) => { + $ZodISODateTime.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodISODate = /* @__PURE__ */ $constructor("ZodISODate", (inst, def) => { + $ZodISODate.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodISOTime = /* @__PURE__ */ $constructor("ZodISOTime", (inst, def) => { + $ZodISOTime.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodISODuration = /* @__PURE__ */ $constructor("ZodISODuration", (inst, def) => { + $ZodISODuration.init(inst, def); + ZodStringFormat.init(inst, def); + }); + } +}); + +// node_modules/zod/v4/classic/errors.js +var initializer2, ZodError2, ZodRealError; +var init_errors2 = __esm({ + "node_modules/zod/v4/classic/errors.js"() { + init_core2(); + init_core2(); + init_util(); + initializer2 = (inst, issues) => { + $ZodError.init(inst, issues); + inst.name = "ZodError"; + Object.defineProperties(inst, { + format: { + value: (mapper) => formatError(inst, mapper) + // enumerable: false, + }, + flatten: { + value: (mapper) => flattenError(inst, mapper) + // enumerable: false, + }, + addIssue: { + value: (issue2) => { + inst.issues.push(issue2); + inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2); + } + // enumerable: false, + }, + addIssues: { + value: (issues2) => { + inst.issues.push(...issues2); + inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2); + } + // enumerable: false, + }, + isEmpty: { + get() { + return inst.issues.length === 0; + } + // enumerable: false, + } + }); + }; + ZodError2 = $constructor("ZodError", initializer2); + ZodRealError = $constructor("ZodError", initializer2, { + Parent: Error + }); + } +}); + +// node_modules/zod/v4/classic/parse.js +var parse2, parseAsync2, safeParse3, safeParseAsync2, encode2, decode2, encodeAsync2, decodeAsync2, safeEncode2, safeDecode2, safeEncodeAsync2, safeDecodeAsync2; +var init_parse2 = __esm({ + "node_modules/zod/v4/classic/parse.js"() { + init_core2(); + init_errors2(); + parse2 = /* @__PURE__ */ _parse(ZodRealError); + parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError); + safeParse3 = /* @__PURE__ */ _safeParse(ZodRealError); + safeParseAsync2 = /* @__PURE__ */ _safeParseAsync(ZodRealError); + encode2 = /* @__PURE__ */ _encode(ZodRealError); + decode2 = /* @__PURE__ */ _decode(ZodRealError); + encodeAsync2 = /* @__PURE__ */ _encodeAsync(ZodRealError); + decodeAsync2 = /* @__PURE__ */ _decodeAsync(ZodRealError); + safeEncode2 = /* @__PURE__ */ _safeEncode(ZodRealError); + safeDecode2 = /* @__PURE__ */ _safeDecode(ZodRealError); + safeEncodeAsync2 = /* @__PURE__ */ _safeEncodeAsync(ZodRealError); + safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError); + } +}); + +// node_modules/zod/v4/classic/schemas.js +var schemas_exports3 = {}; +__export(schemas_exports3, { + ZodAny: () => ZodAny2, + ZodArray: () => ZodArray2, + ZodBase64: () => ZodBase64, + ZodBase64URL: () => ZodBase64URL, + ZodBigInt: () => ZodBigInt2, + ZodBigIntFormat: () => ZodBigIntFormat, + ZodBoolean: () => ZodBoolean2, + ZodCIDRv4: () => ZodCIDRv4, + ZodCIDRv6: () => ZodCIDRv6, + ZodCUID: () => ZodCUID, + ZodCUID2: () => ZodCUID2, + ZodCatch: () => ZodCatch2, + ZodCodec: () => ZodCodec, + ZodCustom: () => ZodCustom, + ZodCustomStringFormat: () => ZodCustomStringFormat, + ZodDate: () => ZodDate2, + ZodDefault: () => ZodDefault2, + ZodDiscriminatedUnion: () => ZodDiscriminatedUnion2, + ZodE164: () => ZodE164, + ZodEmail: () => ZodEmail, + ZodEmoji: () => ZodEmoji, + ZodEnum: () => ZodEnum2, + ZodExactOptional: () => ZodExactOptional, + ZodFile: () => ZodFile, + ZodFunction: () => ZodFunction2, + ZodGUID: () => ZodGUID, + ZodIPv4: () => ZodIPv4, + ZodIPv6: () => ZodIPv6, + ZodIntersection: () => ZodIntersection2, + ZodJWT: () => ZodJWT, + ZodKSUID: () => ZodKSUID, + ZodLazy: () => ZodLazy2, + ZodLiteral: () => ZodLiteral2, + ZodMAC: () => ZodMAC, + ZodMap: () => ZodMap2, + ZodNaN: () => ZodNaN2, + ZodNanoID: () => ZodNanoID, + ZodNever: () => ZodNever2, + ZodNonOptional: () => ZodNonOptional, + ZodNull: () => ZodNull2, + ZodNullable: () => ZodNullable2, + ZodNumber: () => ZodNumber2, + ZodNumberFormat: () => ZodNumberFormat, + ZodObject: () => ZodObject2, + ZodOptional: () => ZodOptional2, + ZodPipe: () => ZodPipe, + ZodPrefault: () => ZodPrefault, + ZodPromise: () => ZodPromise2, + ZodReadonly: () => ZodReadonly2, + ZodRecord: () => ZodRecord2, + ZodSet: () => ZodSet2, + ZodString: () => ZodString2, + ZodStringFormat: () => ZodStringFormat, + ZodSuccess: () => ZodSuccess, + ZodSymbol: () => ZodSymbol2, + ZodTemplateLiteral: () => ZodTemplateLiteral, + ZodTransform: () => ZodTransform, + ZodTuple: () => ZodTuple2, + ZodType: () => ZodType2, + ZodULID: () => ZodULID, + ZodURL: () => ZodURL, + ZodUUID: () => ZodUUID, + ZodUndefined: () => ZodUndefined2, + ZodUnion: () => ZodUnion2, + ZodUnknown: () => ZodUnknown2, + ZodVoid: () => ZodVoid2, + ZodXID: () => ZodXID, + ZodXor: () => ZodXor, + _ZodString: () => _ZodString, + _default: () => _default2, + _function: () => _function, + any: () => any, + array: () => array, + base64: () => base642, + base64url: () => base64url2, + bigint: () => bigint3, + boolean: () => boolean3, + catch: () => _catch2, + check: () => check, + cidrv4: () => cidrv42, + cidrv6: () => cidrv62, + codec: () => codec, + cuid: () => cuid3, + cuid2: () => cuid22, + custom: () => custom, + date: () => date5, + describe: () => describe2, + discriminatedUnion: () => discriminatedUnion, + e164: () => e1642, + email: () => email2, + emoji: () => emoji2, + enum: () => _enum2, + exactOptional: () => exactOptional, + file: () => file, + float32: () => float32, + float64: () => float64, + function: () => _function, + guid: () => guid2, + hash: () => hash, + hex: () => hex2, + hostname: () => hostname3, + httpUrl: () => httpUrl, + instanceof: () => _instanceof, + int: () => int, + int32: () => int32, + int64: () => int64, + intersection: () => intersection, + ipv4: () => ipv42, + ipv6: () => ipv62, + json: () => json, + jwt: () => jwt, + keyof: () => keyof, + ksuid: () => ksuid2, + lazy: () => lazy, + literal: () => literal, + looseObject: () => looseObject, + looseRecord: () => looseRecord, + mac: () => mac2, + map: () => map, + meta: () => meta2, + nan: () => nan, + nanoid: () => nanoid2, + nativeEnum: () => nativeEnum, + never: () => never, + nonoptional: () => nonoptional, + null: () => _null3, + nullable: () => nullable, + nullish: () => nullish2, + number: () => number3, + object: () => object2, + optional: () => optional, + partialRecord: () => partialRecord, + pipe: () => pipe, + prefault: () => prefault, + preprocess: () => preprocess, + promise: () => promise, + readonly: () => readonly, + record: () => record, + refine: () => refine, + set: () => set, + strictObject: () => strictObject, + string: () => string3, + stringFormat: () => stringFormat, + stringbool: () => stringbool, + success: () => success, + superRefine: () => superRefine, + symbol: () => symbol, + templateLiteral: () => templateLiteral, + transform: () => transform, + tuple: () => tuple, + uint32: () => uint32, + uint64: () => uint64, + ulid: () => ulid2, + undefined: () => _undefined3, + union: () => union, + unknown: () => unknown, + url: () => url, + uuid: () => uuid2, + uuidv4: () => uuidv4, + uuidv6: () => uuidv6, + uuidv7: () => uuidv7, + void: () => _void2, + xid: () => xid2, + xor: () => xor +}); +function string3(params) { + return _string(ZodString2, params); +} +function email2(params) { + return _email(ZodEmail, params); +} +function guid2(params) { + return _guid(ZodGUID, params); +} +function uuid2(params) { + return _uuid(ZodUUID, params); +} +function uuidv4(params) { + return _uuidv4(ZodUUID, params); +} +function uuidv6(params) { + return _uuidv6(ZodUUID, params); +} +function uuidv7(params) { + return _uuidv7(ZodUUID, params); +} +function url(params) { + return _url(ZodURL, params); +} +function httpUrl(params) { + return _url(ZodURL, { + protocol: /^https?$/, + hostname: regexes_exports.domain, + ...util_exports.normalizeParams(params) + }); +} +function emoji2(params) { + return _emoji2(ZodEmoji, params); +} +function nanoid2(params) { + return _nanoid(ZodNanoID, params); +} +function cuid3(params) { + return _cuid(ZodCUID, params); +} +function cuid22(params) { + return _cuid2(ZodCUID2, params); +} +function ulid2(params) { + return _ulid(ZodULID, params); +} +function xid2(params) { + return _xid(ZodXID, params); +} +function ksuid2(params) { + return _ksuid(ZodKSUID, params); +} +function ipv42(params) { + return _ipv4(ZodIPv4, params); +} +function mac2(params) { + return _mac(ZodMAC, params); +} +function ipv62(params) { + return _ipv6(ZodIPv6, params); +} +function cidrv42(params) { + return _cidrv4(ZodCIDRv4, params); +} +function cidrv62(params) { + return _cidrv6(ZodCIDRv6, params); +} +function base642(params) { + return _base64(ZodBase64, params); +} +function base64url2(params) { + return _base64url(ZodBase64URL, params); +} +function e1642(params) { + return _e164(ZodE164, params); +} +function jwt(params) { + return _jwt(ZodJWT, params); +} +function stringFormat(format, fnOrRegex, _params = {}) { + return _stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params); +} +function hostname3(_params) { + return _stringFormat(ZodCustomStringFormat, "hostname", regexes_exports.hostname, _params); +} +function hex2(_params) { + return _stringFormat(ZodCustomStringFormat, "hex", regexes_exports.hex, _params); +} +function hash(alg, params) { + var _a5; + const enc = (_a5 = params == null ? void 0 : params.enc) != null ? _a5 : "hex"; + const format = `${alg}_${enc}`; + const regex = regexes_exports[format]; + if (!regex) + throw new Error(`Unrecognized hash format: ${format}`); + return _stringFormat(ZodCustomStringFormat, format, regex, params); +} +function number3(params) { + return _number(ZodNumber2, params); +} +function int(params) { + return _int(ZodNumberFormat, params); +} +function float32(params) { + return _float32(ZodNumberFormat, params); +} +function float64(params) { + return _float64(ZodNumberFormat, params); +} +function int32(params) { + return _int32(ZodNumberFormat, params); +} +function uint32(params) { + return _uint32(ZodNumberFormat, params); +} +function boolean3(params) { + return _boolean(ZodBoolean2, params); +} +function bigint3(params) { + return _bigint(ZodBigInt2, params); +} +function int64(params) { + return _int64(ZodBigIntFormat, params); +} +function uint64(params) { + return _uint64(ZodBigIntFormat, params); +} +function symbol(params) { + return _symbol(ZodSymbol2, params); +} +function _undefined3(params) { + return _undefined2(ZodUndefined2, params); +} +function _null3(params) { + return _null2(ZodNull2, params); +} +function any() { + return _any(ZodAny2); +} +function unknown() { + return _unknown(ZodUnknown2); +} +function never(params) { + return _never(ZodNever2, params); +} +function _void2(params) { + return _void(ZodVoid2, params); +} +function date5(params) { + return _date(ZodDate2, params); +} +function array(element, params) { + return _array(ZodArray2, element, params); +} +function keyof(schema) { + const shape = schema._zod.def.shape; + return _enum2(Object.keys(shape)); +} +function object2(shape, params) { + const def = { + type: "object", + shape: shape != null ? shape : {}, + ...util_exports.normalizeParams(params) + }; + return new ZodObject2(def); +} +function strictObject(shape, params) { + return new ZodObject2({ + type: "object", + shape, + catchall: never(), + ...util_exports.normalizeParams(params) + }); +} +function looseObject(shape, params) { + return new ZodObject2({ + type: "object", + shape, + catchall: unknown(), + ...util_exports.normalizeParams(params) + }); +} +function union(options, params) { + return new ZodUnion2({ + type: "union", + options, + ...util_exports.normalizeParams(params) + }); +} +function xor(options, params) { + return new ZodXor({ + type: "union", + options, + inclusive: false, + ...util_exports.normalizeParams(params) + }); +} +function discriminatedUnion(discriminator, options, params) { + return new ZodDiscriminatedUnion2({ + type: "union", + options, + discriminator, + ...util_exports.normalizeParams(params) + }); +} +function intersection(left, right) { + return new ZodIntersection2({ + type: "intersection", + left, + right + }); +} +function tuple(items, _paramsOrRest, _params) { + const hasRest = _paramsOrRest instanceof $ZodType; + const params = hasRest ? _params : _paramsOrRest; + const rest = hasRest ? _paramsOrRest : null; + return new ZodTuple2({ + type: "tuple", + items, + rest, + ...util_exports.normalizeParams(params) + }); +} +function record(keyType, valueType, params) { + return new ZodRecord2({ + type: "record", + keyType, + valueType, + ...util_exports.normalizeParams(params) + }); +} +function partialRecord(keyType, valueType, params) { + const k2 = clone(keyType); + k2._zod.values = void 0; + return new ZodRecord2({ + type: "record", + keyType: k2, + valueType, + ...util_exports.normalizeParams(params) + }); +} +function looseRecord(keyType, valueType, params) { + return new ZodRecord2({ + type: "record", + keyType, + valueType, + mode: "loose", + ...util_exports.normalizeParams(params) + }); +} +function map(keyType, valueType, params) { + return new ZodMap2({ + type: "map", + keyType, + valueType, + ...util_exports.normalizeParams(params) + }); +} +function set(valueType, params) { + return new ZodSet2({ + type: "set", + valueType, + ...util_exports.normalizeParams(params) + }); +} +function _enum2(values, params) { + const entries = Array.isArray(values) ? Object.fromEntries(values.map((v2) => [v2, v2])) : values; + return new ZodEnum2({ + type: "enum", + entries, + ...util_exports.normalizeParams(params) + }); +} +function nativeEnum(entries, params) { + return new ZodEnum2({ + type: "enum", + entries, + ...util_exports.normalizeParams(params) + }); +} +function literal(value, params) { + return new ZodLiteral2({ + type: "literal", + values: Array.isArray(value) ? value : [value], + ...util_exports.normalizeParams(params) + }); +} +function file(params) { + return _file(ZodFile, params); +} +function transform(fn) { + return new ZodTransform({ + type: "transform", + transform: fn + }); +} +function optional(innerType) { + return new ZodOptional2({ + type: "optional", + innerType + }); +} +function exactOptional(innerType) { + return new ZodExactOptional({ + type: "optional", + innerType + }); +} +function nullable(innerType) { + return new ZodNullable2({ + type: "nullable", + innerType + }); +} +function nullish2(innerType) { + return optional(nullable(innerType)); +} +function _default2(innerType, defaultValue) { + return new ZodDefault2({ + type: "default", + innerType, + get defaultValue() { + return typeof defaultValue === "function" ? defaultValue() : util_exports.shallowClone(defaultValue); + } + }); +} +function prefault(innerType, defaultValue) { + return new ZodPrefault({ + type: "prefault", + innerType, + get defaultValue() { + return typeof defaultValue === "function" ? defaultValue() : util_exports.shallowClone(defaultValue); + } + }); +} +function nonoptional(innerType, params) { + return new ZodNonOptional({ + type: "nonoptional", + innerType, + ...util_exports.normalizeParams(params) + }); +} +function success(innerType) { + return new ZodSuccess({ + type: "success", + innerType + }); +} +function _catch2(innerType, catchValue) { + return new ZodCatch2({ + type: "catch", + innerType, + catchValue: typeof catchValue === "function" ? catchValue : () => catchValue + }); +} +function nan(params) { + return _nan(ZodNaN2, params); +} +function pipe(in_, out) { + return new ZodPipe({ + type: "pipe", + in: in_, + out + // ...util.normalizeParams(params), + }); +} +function codec(in_, out, params) { + return new ZodCodec({ + type: "pipe", + in: in_, + out, + transform: params.decode, + reverseTransform: params.encode + }); +} +function readonly(innerType) { + return new ZodReadonly2({ + type: "readonly", + innerType + }); +} +function templateLiteral(parts, params) { + return new ZodTemplateLiteral({ + type: "template_literal", + parts, + ...util_exports.normalizeParams(params) + }); +} +function lazy(getter) { + return new ZodLazy2({ + type: "lazy", + getter + }); +} +function promise(innerType) { + return new ZodPromise2({ + type: "promise", + innerType + }); +} +function _function(params) { + var _a5, _b3; + return new ZodFunction2({ + type: "function", + input: Array.isArray(params == null ? void 0 : params.input) ? tuple(params == null ? void 0 : params.input) : (_a5 = params == null ? void 0 : params.input) != null ? _a5 : array(unknown()), + output: (_b3 = params == null ? void 0 : params.output) != null ? _b3 : unknown() + }); +} +function check(fn) { + const ch2 = new $ZodCheck({ + check: "custom" + // ...util.normalizeParams(params), + }); + ch2._zod.check = fn; + return ch2; +} +function custom(fn, _params) { + return _custom(ZodCustom, fn != null ? fn : (() => true), _params); +} +function refine(fn, _params = {}) { + return _refine(ZodCustom, fn, _params); +} +function superRefine(fn) { + return _superRefine(fn); +} +function _instanceof(cls, params = {}) { + const inst = new ZodCustom({ + type: "custom", + check: "custom", + fn: (data) => data instanceof cls, + abort: true, + ...util_exports.normalizeParams(params) + }); + inst._zod.bag.Class = cls; + inst._zod.check = (payload) => { + var _a5; + if (!(payload.value instanceof cls)) { + payload.issues.push({ + code: "invalid_type", + expected: cls.name, + input: payload.value, + inst, + path: [...(_a5 = inst._zod.def.path) != null ? _a5 : []] + }); + } + }; + return inst; +} +function json(params) { + const jsonSchema = lazy(() => { + return union([string3(params), number3(), boolean3(), _null3(), array(jsonSchema), record(string3(), jsonSchema)]); + }); + return jsonSchema; +} +function preprocess(fn, schema) { + return pipe(transform(fn), schema); +} +var ZodType2, _ZodString, ZodString2, ZodStringFormat, ZodEmail, ZodGUID, ZodUUID, ZodURL, ZodEmoji, ZodNanoID, ZodCUID, ZodCUID2, ZodULID, ZodXID, ZodKSUID, ZodIPv4, ZodMAC, ZodIPv6, ZodCIDRv4, ZodCIDRv6, ZodBase64, ZodBase64URL, ZodE164, ZodJWT, ZodCustomStringFormat, ZodNumber2, ZodNumberFormat, ZodBoolean2, ZodBigInt2, ZodBigIntFormat, ZodSymbol2, ZodUndefined2, ZodNull2, ZodAny2, ZodUnknown2, ZodNever2, ZodVoid2, ZodDate2, ZodArray2, ZodObject2, ZodUnion2, ZodXor, ZodDiscriminatedUnion2, ZodIntersection2, ZodTuple2, ZodRecord2, ZodMap2, ZodSet2, ZodEnum2, ZodLiteral2, ZodFile, ZodTransform, ZodOptional2, ZodExactOptional, ZodNullable2, ZodDefault2, ZodPrefault, ZodNonOptional, ZodSuccess, ZodCatch2, ZodNaN2, ZodPipe, ZodCodec, ZodReadonly2, ZodTemplateLiteral, ZodLazy2, ZodPromise2, ZodFunction2, ZodCustom, describe2, meta2, stringbool; +var init_schemas2 = __esm({ + "node_modules/zod/v4/classic/schemas.js"() { + init_core2(); + init_core2(); + init_json_schema_processors(); + init_to_json_schema(); + init_checks2(); + init_iso(); + init_parse2(); + ZodType2 = /* @__PURE__ */ $constructor("ZodType", (inst, def) => { + $ZodType.init(inst, def); + Object.assign(inst["~standard"], { + jsonSchema: { + input: createStandardJSONSchemaMethod(inst, "input"), + output: createStandardJSONSchemaMethod(inst, "output") + } + }); + inst.toJSONSchema = createToJSONSchemaMethod(inst, {}); + inst.def = def; + inst.type = def.type; + Object.defineProperty(inst, "_def", { value: def }); + inst.check = (...checks) => { + var _a5; + return inst.clone(util_exports.mergeDefs(def, { + checks: [ + ...(_a5 = def.checks) != null ? _a5 : [], + ...checks.map((ch2) => typeof ch2 === "function" ? { _zod: { check: ch2, def: { check: "custom" }, onattach: [] } } : ch2) + ] + }), { + parent: true + }); + }; + inst.with = inst.check; + inst.clone = (def2, params) => clone(inst, def2, params); + inst.brand = () => inst; + inst.register = ((reg, meta3) => { + reg.add(inst, meta3); + return inst; + }); + inst.parse = (data, params) => parse2(inst, data, params, { callee: inst.parse }); + inst.safeParse = (data, params) => safeParse3(inst, data, params); + inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync }); + inst.safeParseAsync = async (data, params) => safeParseAsync2(inst, data, params); + inst.spa = inst.safeParseAsync; + inst.encode = (data, params) => encode2(inst, data, params); + inst.decode = (data, params) => decode2(inst, data, params); + inst.encodeAsync = async (data, params) => encodeAsync2(inst, data, params); + inst.decodeAsync = async (data, params) => decodeAsync2(inst, data, params); + inst.safeEncode = (data, params) => safeEncode2(inst, data, params); + inst.safeDecode = (data, params) => safeDecode2(inst, data, params); + inst.safeEncodeAsync = async (data, params) => safeEncodeAsync2(inst, data, params); + inst.safeDecodeAsync = async (data, params) => safeDecodeAsync2(inst, data, params); + inst.refine = (check2, params) => inst.check(refine(check2, params)); + inst.superRefine = (refinement) => inst.check(superRefine(refinement)); + inst.overwrite = (fn) => inst.check(_overwrite(fn)); + inst.optional = () => optional(inst); + inst.exactOptional = () => exactOptional(inst); + inst.nullable = () => nullable(inst); + inst.nullish = () => optional(nullable(inst)); + inst.nonoptional = (params) => nonoptional(inst, params); + inst.array = () => array(inst); + inst.or = (arg) => union([inst, arg]); + inst.and = (arg) => intersection(inst, arg); + inst.transform = (tx) => pipe(inst, transform(tx)); + inst.default = (def2) => _default2(inst, def2); + inst.prefault = (def2) => prefault(inst, def2); + inst.catch = (params) => _catch2(inst, params); + inst.pipe = (target) => pipe(inst, target); + inst.readonly = () => readonly(inst); + inst.describe = (description) => { + const cl2 = inst.clone(); + globalRegistry.add(cl2, { description }); + return cl2; + }; + Object.defineProperty(inst, "description", { + get() { + var _a5; + return (_a5 = globalRegistry.get(inst)) == null ? void 0 : _a5.description; + }, + configurable: true + }); + inst.meta = (...args) => { + if (args.length === 0) { + return globalRegistry.get(inst); + } + const cl2 = inst.clone(); + globalRegistry.add(cl2, args[0]); + return cl2; + }; + inst.isOptional = () => inst.safeParse(void 0).success; + inst.isNullable = () => inst.safeParse(null).success; + inst.apply = (fn) => fn(inst); + return inst; + }); + _ZodString = /* @__PURE__ */ $constructor("_ZodString", (inst, def) => { + var _a5, _b3, _c2; + $ZodString.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => stringProcessor(inst, ctx, json2, params); + const bag = inst._zod.bag; + inst.format = (_a5 = bag.format) != null ? _a5 : null; + inst.minLength = (_b3 = bag.minimum) != null ? _b3 : null; + inst.maxLength = (_c2 = bag.maximum) != null ? _c2 : null; + inst.regex = (...args) => inst.check(_regex(...args)); + inst.includes = (...args) => inst.check(_includes(...args)); + inst.startsWith = (...args) => inst.check(_startsWith(...args)); + inst.endsWith = (...args) => inst.check(_endsWith(...args)); + inst.min = (...args) => inst.check(_minLength(...args)); + inst.max = (...args) => inst.check(_maxLength(...args)); + inst.length = (...args) => inst.check(_length(...args)); + inst.nonempty = (...args) => inst.check(_minLength(1, ...args)); + inst.lowercase = (params) => inst.check(_lowercase(params)); + inst.uppercase = (params) => inst.check(_uppercase(params)); + inst.trim = () => inst.check(_trim()); + inst.normalize = (...args) => inst.check(_normalize(...args)); + inst.toLowerCase = () => inst.check(_toLowerCase()); + inst.toUpperCase = () => inst.check(_toUpperCase()); + inst.slugify = () => inst.check(_slugify()); + }); + ZodString2 = /* @__PURE__ */ $constructor("ZodString", (inst, def) => { + $ZodString.init(inst, def); + _ZodString.init(inst, def); + inst.email = (params) => inst.check(_email(ZodEmail, params)); + inst.url = (params) => inst.check(_url(ZodURL, params)); + inst.jwt = (params) => inst.check(_jwt(ZodJWT, params)); + inst.emoji = (params) => inst.check(_emoji2(ZodEmoji, params)); + inst.guid = (params) => inst.check(_guid(ZodGUID, params)); + inst.uuid = (params) => inst.check(_uuid(ZodUUID, params)); + inst.uuidv4 = (params) => inst.check(_uuidv4(ZodUUID, params)); + inst.uuidv6 = (params) => inst.check(_uuidv6(ZodUUID, params)); + inst.uuidv7 = (params) => inst.check(_uuidv7(ZodUUID, params)); + inst.nanoid = (params) => inst.check(_nanoid(ZodNanoID, params)); + inst.guid = (params) => inst.check(_guid(ZodGUID, params)); + inst.cuid = (params) => inst.check(_cuid(ZodCUID, params)); + inst.cuid2 = (params) => inst.check(_cuid2(ZodCUID2, params)); + inst.ulid = (params) => inst.check(_ulid(ZodULID, params)); + inst.base64 = (params) => inst.check(_base64(ZodBase64, params)); + inst.base64url = (params) => inst.check(_base64url(ZodBase64URL, params)); + inst.xid = (params) => inst.check(_xid(ZodXID, params)); + inst.ksuid = (params) => inst.check(_ksuid(ZodKSUID, params)); + inst.ipv4 = (params) => inst.check(_ipv4(ZodIPv4, params)); + inst.ipv6 = (params) => inst.check(_ipv6(ZodIPv6, params)); + inst.cidrv4 = (params) => inst.check(_cidrv4(ZodCIDRv4, params)); + inst.cidrv6 = (params) => inst.check(_cidrv6(ZodCIDRv6, params)); + inst.e164 = (params) => inst.check(_e164(ZodE164, params)); + inst.datetime = (params) => inst.check(datetime3(params)); + inst.date = (params) => inst.check(date4(params)); + inst.time = (params) => inst.check(time3(params)); + inst.duration = (params) => inst.check(duration3(params)); + }); + ZodStringFormat = /* @__PURE__ */ $constructor("ZodStringFormat", (inst, def) => { + $ZodStringFormat.init(inst, def); + _ZodString.init(inst, def); + }); + ZodEmail = /* @__PURE__ */ $constructor("ZodEmail", (inst, def) => { + $ZodEmail.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodGUID = /* @__PURE__ */ $constructor("ZodGUID", (inst, def) => { + $ZodGUID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodUUID = /* @__PURE__ */ $constructor("ZodUUID", (inst, def) => { + $ZodUUID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodURL = /* @__PURE__ */ $constructor("ZodURL", (inst, def) => { + $ZodURL.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodEmoji = /* @__PURE__ */ $constructor("ZodEmoji", (inst, def) => { + $ZodEmoji.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodNanoID = /* @__PURE__ */ $constructor("ZodNanoID", (inst, def) => { + $ZodNanoID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodCUID = /* @__PURE__ */ $constructor("ZodCUID", (inst, def) => { + $ZodCUID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodCUID2 = /* @__PURE__ */ $constructor("ZodCUID2", (inst, def) => { + $ZodCUID2.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodULID = /* @__PURE__ */ $constructor("ZodULID", (inst, def) => { + $ZodULID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodXID = /* @__PURE__ */ $constructor("ZodXID", (inst, def) => { + $ZodXID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodKSUID = /* @__PURE__ */ $constructor("ZodKSUID", (inst, def) => { + $ZodKSUID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodIPv4 = /* @__PURE__ */ $constructor("ZodIPv4", (inst, def) => { + $ZodIPv4.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodMAC = /* @__PURE__ */ $constructor("ZodMAC", (inst, def) => { + $ZodMAC.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodIPv6 = /* @__PURE__ */ $constructor("ZodIPv6", (inst, def) => { + $ZodIPv6.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodCIDRv4 = /* @__PURE__ */ $constructor("ZodCIDRv4", (inst, def) => { + $ZodCIDRv4.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodCIDRv6 = /* @__PURE__ */ $constructor("ZodCIDRv6", (inst, def) => { + $ZodCIDRv6.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodBase64 = /* @__PURE__ */ $constructor("ZodBase64", (inst, def) => { + $ZodBase64.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodBase64URL = /* @__PURE__ */ $constructor("ZodBase64URL", (inst, def) => { + $ZodBase64URL.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodE164 = /* @__PURE__ */ $constructor("ZodE164", (inst, def) => { + $ZodE164.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodJWT = /* @__PURE__ */ $constructor("ZodJWT", (inst, def) => { + $ZodJWT.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodCustomStringFormat = /* @__PURE__ */ $constructor("ZodCustomStringFormat", (inst, def) => { + $ZodCustomStringFormat.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodNumber2 = /* @__PURE__ */ $constructor("ZodNumber", (inst, def) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i; + $ZodNumber.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => numberProcessor(inst, ctx, json2, params); + inst.gt = (value, params) => inst.check(_gt(value, params)); + inst.gte = (value, params) => inst.check(_gte(value, params)); + inst.min = (value, params) => inst.check(_gte(value, params)); + inst.lt = (value, params) => inst.check(_lt(value, params)); + inst.lte = (value, params) => inst.check(_lte(value, params)); + inst.max = (value, params) => inst.check(_lte(value, params)); + inst.int = (params) => inst.check(int(params)); + inst.safe = (params) => inst.check(int(params)); + inst.positive = (params) => inst.check(_gt(0, params)); + inst.nonnegative = (params) => inst.check(_gte(0, params)); + inst.negative = (params) => inst.check(_lt(0, params)); + inst.nonpositive = (params) => inst.check(_lte(0, params)); + inst.multipleOf = (value, params) => inst.check(_multipleOf(value, params)); + inst.step = (value, params) => inst.check(_multipleOf(value, params)); + inst.finite = () => inst; + const bag = inst._zod.bag; + inst.minValue = (_c2 = Math.max((_a5 = bag.minimum) != null ? _a5 : Number.NEGATIVE_INFINITY, (_b3 = bag.exclusiveMinimum) != null ? _b3 : Number.NEGATIVE_INFINITY)) != null ? _c2 : null; + inst.maxValue = (_f2 = Math.min((_d = bag.maximum) != null ? _d : Number.POSITIVE_INFINITY, (_e2 = bag.exclusiveMaximum) != null ? _e2 : Number.POSITIVE_INFINITY)) != null ? _f2 : null; + inst.isInt = ((_g = bag.format) != null ? _g : "").includes("int") || Number.isSafeInteger((_h2 = bag.multipleOf) != null ? _h2 : 0.5); + inst.isFinite = true; + inst.format = (_i = bag.format) != null ? _i : null; + }); + ZodNumberFormat = /* @__PURE__ */ $constructor("ZodNumberFormat", (inst, def) => { + $ZodNumberFormat.init(inst, def); + ZodNumber2.init(inst, def); + }); + ZodBoolean2 = /* @__PURE__ */ $constructor("ZodBoolean", (inst, def) => { + $ZodBoolean.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => booleanProcessor(inst, ctx, json2, params); + }); + ZodBigInt2 = /* @__PURE__ */ $constructor("ZodBigInt", (inst, def) => { + var _a5, _b3, _c2; + $ZodBigInt.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => bigintProcessor(inst, ctx, json2, params); + inst.gte = (value, params) => inst.check(_gte(value, params)); + inst.min = (value, params) => inst.check(_gte(value, params)); + inst.gt = (value, params) => inst.check(_gt(value, params)); + inst.gte = (value, params) => inst.check(_gte(value, params)); + inst.min = (value, params) => inst.check(_gte(value, params)); + inst.lt = (value, params) => inst.check(_lt(value, params)); + inst.lte = (value, params) => inst.check(_lte(value, params)); + inst.max = (value, params) => inst.check(_lte(value, params)); + inst.positive = (params) => inst.check(_gt(BigInt(0), params)); + inst.negative = (params) => inst.check(_lt(BigInt(0), params)); + inst.nonpositive = (params) => inst.check(_lte(BigInt(0), params)); + inst.nonnegative = (params) => inst.check(_gte(BigInt(0), params)); + inst.multipleOf = (value, params) => inst.check(_multipleOf(value, params)); + const bag = inst._zod.bag; + inst.minValue = (_a5 = bag.minimum) != null ? _a5 : null; + inst.maxValue = (_b3 = bag.maximum) != null ? _b3 : null; + inst.format = (_c2 = bag.format) != null ? _c2 : null; + }); + ZodBigIntFormat = /* @__PURE__ */ $constructor("ZodBigIntFormat", (inst, def) => { + $ZodBigIntFormat.init(inst, def); + ZodBigInt2.init(inst, def); + }); + ZodSymbol2 = /* @__PURE__ */ $constructor("ZodSymbol", (inst, def) => { + $ZodSymbol.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => symbolProcessor(inst, ctx, json2, params); + }); + ZodUndefined2 = /* @__PURE__ */ $constructor("ZodUndefined", (inst, def) => { + $ZodUndefined.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => undefinedProcessor(inst, ctx, json2, params); + }); + ZodNull2 = /* @__PURE__ */ $constructor("ZodNull", (inst, def) => { + $ZodNull.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => nullProcessor(inst, ctx, json2, params); + }); + ZodAny2 = /* @__PURE__ */ $constructor("ZodAny", (inst, def) => { + $ZodAny.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => anyProcessor(inst, ctx, json2, params); + }); + ZodUnknown2 = /* @__PURE__ */ $constructor("ZodUnknown", (inst, def) => { + $ZodUnknown.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => unknownProcessor(inst, ctx, json2, params); + }); + ZodNever2 = /* @__PURE__ */ $constructor("ZodNever", (inst, def) => { + $ZodNever.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => neverProcessor(inst, ctx, json2, params); + }); + ZodVoid2 = /* @__PURE__ */ $constructor("ZodVoid", (inst, def) => { + $ZodVoid.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => voidProcessor(inst, ctx, json2, params); + }); + ZodDate2 = /* @__PURE__ */ $constructor("ZodDate", (inst, def) => { + $ZodDate.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => dateProcessor(inst, ctx, json2, params); + inst.min = (value, params) => inst.check(_gte(value, params)); + inst.max = (value, params) => inst.check(_lte(value, params)); + const c = inst._zod.bag; + inst.minDate = c.minimum ? new Date(c.minimum) : null; + inst.maxDate = c.maximum ? new Date(c.maximum) : null; + }); + ZodArray2 = /* @__PURE__ */ $constructor("ZodArray", (inst, def) => { + $ZodArray.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => arrayProcessor(inst, ctx, json2, params); + inst.element = def.element; + inst.min = (minLength, params) => inst.check(_minLength(minLength, params)); + inst.nonempty = (params) => inst.check(_minLength(1, params)); + inst.max = (maxLength, params) => inst.check(_maxLength(maxLength, params)); + inst.length = (len, params) => inst.check(_length(len, params)); + inst.unwrap = () => inst.element; + }); + ZodObject2 = /* @__PURE__ */ $constructor("ZodObject", (inst, def) => { + $ZodObjectJIT.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => objectProcessor(inst, ctx, json2, params); + util_exports.defineLazy(inst, "shape", () => { + return def.shape; + }); + inst.keyof = () => _enum2(Object.keys(inst._zod.def.shape)); + inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall }); + inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() }); + inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() }); + inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() }); + inst.strip = () => inst.clone({ ...inst._zod.def, catchall: void 0 }); + inst.extend = (incoming) => { + return util_exports.extend(inst, incoming); + }; + inst.safeExtend = (incoming) => { + return util_exports.safeExtend(inst, incoming); + }; + inst.merge = (other) => util_exports.merge(inst, other); + inst.pick = (mask) => util_exports.pick(inst, mask); + inst.omit = (mask) => util_exports.omit(inst, mask); + inst.partial = (...args) => util_exports.partial(ZodOptional2, inst, args[0]); + inst.required = (...args) => util_exports.required(ZodNonOptional, inst, args[0]); + }); + ZodUnion2 = /* @__PURE__ */ $constructor("ZodUnion", (inst, def) => { + $ZodUnion.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => unionProcessor(inst, ctx, json2, params); + inst.options = def.options; + }); + ZodXor = /* @__PURE__ */ $constructor("ZodXor", (inst, def) => { + ZodUnion2.init(inst, def); + $ZodXor.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => unionProcessor(inst, ctx, json2, params); + inst.options = def.options; + }); + ZodDiscriminatedUnion2 = /* @__PURE__ */ $constructor("ZodDiscriminatedUnion", (inst, def) => { + ZodUnion2.init(inst, def); + $ZodDiscriminatedUnion.init(inst, def); + }); + ZodIntersection2 = /* @__PURE__ */ $constructor("ZodIntersection", (inst, def) => { + $ZodIntersection.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => intersectionProcessor(inst, ctx, json2, params); + }); + ZodTuple2 = /* @__PURE__ */ $constructor("ZodTuple", (inst, def) => { + $ZodTuple.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => tupleProcessor(inst, ctx, json2, params); + inst.rest = (rest) => inst.clone({ + ...inst._zod.def, + rest + }); + }); + ZodRecord2 = /* @__PURE__ */ $constructor("ZodRecord", (inst, def) => { + $ZodRecord.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => recordProcessor(inst, ctx, json2, params); + inst.keyType = def.keyType; + inst.valueType = def.valueType; + }); + ZodMap2 = /* @__PURE__ */ $constructor("ZodMap", (inst, def) => { + $ZodMap.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => mapProcessor(inst, ctx, json2, params); + inst.keyType = def.keyType; + inst.valueType = def.valueType; + inst.min = (...args) => inst.check(_minSize(...args)); + inst.nonempty = (params) => inst.check(_minSize(1, params)); + inst.max = (...args) => inst.check(_maxSize(...args)); + inst.size = (...args) => inst.check(_size(...args)); + }); + ZodSet2 = /* @__PURE__ */ $constructor("ZodSet", (inst, def) => { + $ZodSet.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => setProcessor(inst, ctx, json2, params); + inst.min = (...args) => inst.check(_minSize(...args)); + inst.nonempty = (params) => inst.check(_minSize(1, params)); + inst.max = (...args) => inst.check(_maxSize(...args)); + inst.size = (...args) => inst.check(_size(...args)); + }); + ZodEnum2 = /* @__PURE__ */ $constructor("ZodEnum", (inst, def) => { + $ZodEnum.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => enumProcessor(inst, ctx, json2, params); + inst.enum = def.entries; + inst.options = Object.values(def.entries); + const keys = new Set(Object.keys(def.entries)); + inst.extract = (values, params) => { + const newEntries = {}; + for (const value of values) { + if (keys.has(value)) { + newEntries[value] = def.entries[value]; + } else + throw new Error(`Key ${value} not found in enum`); + } + return new ZodEnum2({ + ...def, + checks: [], + ...util_exports.normalizeParams(params), + entries: newEntries + }); + }; + inst.exclude = (values, params) => { + const newEntries = { ...def.entries }; + for (const value of values) { + if (keys.has(value)) { + delete newEntries[value]; + } else + throw new Error(`Key ${value} not found in enum`); + } + return new ZodEnum2({ + ...def, + checks: [], + ...util_exports.normalizeParams(params), + entries: newEntries + }); + }; + }); + ZodLiteral2 = /* @__PURE__ */ $constructor("ZodLiteral", (inst, def) => { + $ZodLiteral.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => literalProcessor(inst, ctx, json2, params); + inst.values = new Set(def.values); + Object.defineProperty(inst, "value", { + get() { + if (def.values.length > 1) { + throw new Error("This schema contains multiple valid literal values. Use `.values` instead."); + } + return def.values[0]; + } + }); + }); + ZodFile = /* @__PURE__ */ $constructor("ZodFile", (inst, def) => { + $ZodFile.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => fileProcessor(inst, ctx, json2, params); + inst.min = (size, params) => inst.check(_minSize(size, params)); + inst.max = (size, params) => inst.check(_maxSize(size, params)); + inst.mime = (types, params) => inst.check(_mime(Array.isArray(types) ? types : [types], params)); + }); + ZodTransform = /* @__PURE__ */ $constructor("ZodTransform", (inst, def) => { + $ZodTransform.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => transformProcessor(inst, ctx, json2, params); + inst._zod.parse = (payload, _ctx) => { + if (_ctx.direction === "backward") { + throw new $ZodEncodeError(inst.constructor.name); + } + payload.addIssue = (issue2) => { + var _a5, _b3, _c2; + if (typeof issue2 === "string") { + payload.issues.push(util_exports.issue(issue2, payload.value, def)); + } else { + const _issue = issue2; + if (_issue.fatal) + _issue.continue = false; + (_a5 = _issue.code) != null ? _a5 : _issue.code = "custom"; + (_b3 = _issue.input) != null ? _b3 : _issue.input = payload.value; + (_c2 = _issue.inst) != null ? _c2 : _issue.inst = inst; + payload.issues.push(util_exports.issue(_issue)); + } + }; + const output = def.transform(payload.value, payload); + if (output instanceof Promise) { + return output.then((output2) => { + payload.value = output2; + return payload; + }); + } + payload.value = output; + return payload; + }; + }); + ZodOptional2 = /* @__PURE__ */ $constructor("ZodOptional", (inst, def) => { + $ZodOptional.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => optionalProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodExactOptional = /* @__PURE__ */ $constructor("ZodExactOptional", (inst, def) => { + $ZodExactOptional.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => optionalProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodNullable2 = /* @__PURE__ */ $constructor("ZodNullable", (inst, def) => { + $ZodNullable.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => nullableProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodDefault2 = /* @__PURE__ */ $constructor("ZodDefault", (inst, def) => { + $ZodDefault.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => defaultProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + inst.removeDefault = inst.unwrap; + }); + ZodPrefault = /* @__PURE__ */ $constructor("ZodPrefault", (inst, def) => { + $ZodPrefault.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => prefaultProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodNonOptional = /* @__PURE__ */ $constructor("ZodNonOptional", (inst, def) => { + $ZodNonOptional.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => nonoptionalProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodSuccess = /* @__PURE__ */ $constructor("ZodSuccess", (inst, def) => { + $ZodSuccess.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => successProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodCatch2 = /* @__PURE__ */ $constructor("ZodCatch", (inst, def) => { + $ZodCatch.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => catchProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + inst.removeCatch = inst.unwrap; + }); + ZodNaN2 = /* @__PURE__ */ $constructor("ZodNaN", (inst, def) => { + $ZodNaN.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => nanProcessor(inst, ctx, json2, params); + }); + ZodPipe = /* @__PURE__ */ $constructor("ZodPipe", (inst, def) => { + $ZodPipe.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => pipeProcessor(inst, ctx, json2, params); + inst.in = def.in; + inst.out = def.out; + }); + ZodCodec = /* @__PURE__ */ $constructor("ZodCodec", (inst, def) => { + ZodPipe.init(inst, def); + $ZodCodec.init(inst, def); + }); + ZodReadonly2 = /* @__PURE__ */ $constructor("ZodReadonly", (inst, def) => { + $ZodReadonly.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => readonlyProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodTemplateLiteral = /* @__PURE__ */ $constructor("ZodTemplateLiteral", (inst, def) => { + $ZodTemplateLiteral.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => templateLiteralProcessor(inst, ctx, json2, params); + }); + ZodLazy2 = /* @__PURE__ */ $constructor("ZodLazy", (inst, def) => { + $ZodLazy.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => lazyProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.getter(); + }); + ZodPromise2 = /* @__PURE__ */ $constructor("ZodPromise", (inst, def) => { + $ZodPromise.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => promiseProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodFunction2 = /* @__PURE__ */ $constructor("ZodFunction", (inst, def) => { + $ZodFunction.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => functionProcessor(inst, ctx, json2, params); + }); + ZodCustom = /* @__PURE__ */ $constructor("ZodCustom", (inst, def) => { + $ZodCustom.init(inst, def); + ZodType2.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => customProcessor(inst, ctx, json2, params); + }); + describe2 = describe; + meta2 = meta; + stringbool = (...args) => _stringbool({ + Codec: ZodCodec, + Boolean: ZodBoolean2, + String: ZodString2 + }, ...args); + } +}); + +// node_modules/zod/v4/classic/compat.js +var ZodIssueCode2, ZodFirstPartyTypeKind2; +var init_compat = __esm({ + "node_modules/zod/v4/classic/compat.js"() { + init_core2(); + init_core2(); + ZodIssueCode2 = { + invalid_type: "invalid_type", + too_big: "too_big", + too_small: "too_small", + invalid_format: "invalid_format", + not_multiple_of: "not_multiple_of", + unrecognized_keys: "unrecognized_keys", + invalid_union: "invalid_union", + invalid_key: "invalid_key", + invalid_element: "invalid_element", + invalid_value: "invalid_value", + custom: "custom" + }; + /* @__PURE__ */ (function(ZodFirstPartyTypeKind3) { + })(ZodFirstPartyTypeKind2 || (ZodFirstPartyTypeKind2 = {})); + } +}); + +// node_modules/zod/v4/classic/from-json-schema.js +var z; +var init_from_json_schema = __esm({ + "node_modules/zod/v4/classic/from-json-schema.js"() { + init_registries(); + init_checks2(); + init_iso(); + init_schemas2(); + z = { + ...schemas_exports3, + ...checks_exports2, + iso: iso_exports2 + }; + } +}); + +// node_modules/zod/v4/classic/coerce.js +var coerce_exports2 = {}; +__export(coerce_exports2, { + bigint: () => bigint4, + boolean: () => boolean4, + date: () => date6, + number: () => number4, + string: () => string4 +}); +function string4(params) { + return _coercedString(ZodString2, params); +} +function number4(params) { + return _coercedNumber(ZodNumber2, params); +} +function boolean4(params) { + return _coercedBoolean(ZodBoolean2, params); +} +function bigint4(params) { + return _coercedBigint(ZodBigInt2, params); +} +function date6(params) { + return _coercedDate(ZodDate2, params); +} +var init_coerce = __esm({ + "node_modules/zod/v4/classic/coerce.js"() { + init_core2(); + init_schemas2(); + } +}); + +// node_modules/zod/v4/classic/external.js +var init_external = __esm({ + "node_modules/zod/v4/classic/external.js"() { + init_core2(); + init_schemas2(); + init_checks2(); + init_errors2(); + init_parse2(); + init_compat(); + init_core2(); + init_en(); + init_core2(); + init_json_schema_processors(); + init_from_json_schema(); + init_locales(); + init_iso(); + init_iso(); + init_coerce(); + config(en_default3()); + } +}); + +// node_modules/zod/v4/classic/index.js +var init_classic = __esm({ + "node_modules/zod/v4/classic/index.js"() { + init_external(); + init_external(); + } +}); + +// node_modules/zod/v4/index.js +var init_v4 = __esm({ + "node_modules/zod/v4/index.js"() { + init_classic(); + init_classic(); + } +}); + +// node_modules/@modelcontextprotocol/sdk/dist/esm/types.js +var LATEST_PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS, RELATED_TASK_META_KEY, JSONRPC_VERSION, AssertObjectSchema, ProgressTokenSchema, CursorSchema, TaskCreationParamsSchema, TaskMetadataSchema, RelatedTaskMetadataSchema, RequestMetaSchema, BaseRequestParamsSchema, TaskAugmentedRequestParamsSchema, isTaskAugmentedRequestParams, RequestSchema, NotificationsParamsSchema, NotificationSchema, ResultSchema, RequestIdSchema, JSONRPCRequestSchema, isJSONRPCRequest, JSONRPCNotificationSchema, isJSONRPCNotification, JSONRPCResultResponseSchema, isJSONRPCResultResponse, ErrorCode, JSONRPCErrorResponseSchema, isJSONRPCErrorResponse, JSONRPCMessageSchema, JSONRPCResponseSchema, EmptyResultSchema, CancelledNotificationParamsSchema, CancelledNotificationSchema, IconSchema, IconsSchema, BaseMetadataSchema, ImplementationSchema, FormElicitationCapabilitySchema, ElicitationCapabilitySchema, ClientTasksCapabilitySchema, ServerTasksCapabilitySchema, ClientCapabilitiesSchema, InitializeRequestParamsSchema, InitializeRequestSchema, ServerCapabilitiesSchema, InitializeResultSchema, InitializedNotificationSchema, isInitializedNotification, PingRequestSchema, ProgressSchema, ProgressNotificationParamsSchema, ProgressNotificationSchema, PaginatedRequestParamsSchema, PaginatedRequestSchema, PaginatedResultSchema, TaskStatusSchema, TaskSchema, CreateTaskResultSchema, TaskStatusNotificationParamsSchema, TaskStatusNotificationSchema, GetTaskRequestSchema, GetTaskResultSchema, GetTaskPayloadRequestSchema, GetTaskPayloadResultSchema, ListTasksRequestSchema, ListTasksResultSchema, CancelTaskRequestSchema, CancelTaskResultSchema, ResourceContentsSchema, TextResourceContentsSchema, Base64Schema, BlobResourceContentsSchema, RoleSchema, AnnotationsSchema, ResourceSchema, ResourceTemplateSchema, ListResourcesRequestSchema, ListResourcesResultSchema, ListResourceTemplatesRequestSchema, ListResourceTemplatesResultSchema, ResourceRequestParamsSchema, ReadResourceRequestParamsSchema, ReadResourceRequestSchema, ReadResourceResultSchema, ResourceListChangedNotificationSchema, SubscribeRequestParamsSchema, SubscribeRequestSchema, UnsubscribeRequestParamsSchema, UnsubscribeRequestSchema, ResourceUpdatedNotificationParamsSchema, ResourceUpdatedNotificationSchema, PromptArgumentSchema, PromptSchema, ListPromptsRequestSchema, ListPromptsResultSchema, GetPromptRequestParamsSchema, GetPromptRequestSchema, TextContentSchema, ImageContentSchema, AudioContentSchema, ToolUseContentSchema, EmbeddedResourceSchema, ResourceLinkSchema, ContentBlockSchema, PromptMessageSchema, GetPromptResultSchema, PromptListChangedNotificationSchema, ToolAnnotationsSchema, ToolExecutionSchema, ToolSchema, ListToolsRequestSchema, ListToolsResultSchema, CallToolResultSchema, CompatibilityCallToolResultSchema, CallToolRequestParamsSchema, CallToolRequestSchema, ToolListChangedNotificationSchema, ListChangedOptionsBaseSchema, LoggingLevelSchema, SetLevelRequestParamsSchema, SetLevelRequestSchema, LoggingMessageNotificationParamsSchema, LoggingMessageNotificationSchema, ModelHintSchema, ModelPreferencesSchema, ToolChoiceSchema, ToolResultContentSchema, SamplingContentSchema, SamplingMessageContentBlockSchema, SamplingMessageSchema, CreateMessageRequestParamsSchema, CreateMessageRequestSchema, CreateMessageResultSchema, CreateMessageResultWithToolsSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema, UntitledSingleSelectEnumSchemaSchema, TitledSingleSelectEnumSchemaSchema, LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema, EnumSchemaSchema, PrimitiveSchemaDefinitionSchema, ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema, ElicitRequestParamsSchema, ElicitRequestSchema, ElicitationCompleteNotificationParamsSchema, ElicitationCompleteNotificationSchema, ElicitResultSchema, ResourceTemplateReferenceSchema, PromptReferenceSchema, CompleteRequestParamsSchema, CompleteRequestSchema, CompleteResultSchema, RootSchema, ListRootsRequestSchema, ListRootsResultSchema, RootsListChangedNotificationSchema, ClientRequestSchema, ClientNotificationSchema, ClientResultSchema, ServerRequestSchema, ServerNotificationSchema, ServerResultSchema, McpError, UrlElicitationRequiredError; +var init_types = __esm({ + "node_modules/@modelcontextprotocol/sdk/dist/esm/types.js"() { + init_v4(); + LATEST_PROTOCOL_VERSION = "2025-11-25"; + SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION, "2025-06-18", "2025-03-26", "2024-11-05", "2024-10-07"]; + RELATED_TASK_META_KEY = "io.modelcontextprotocol/related-task"; + JSONRPC_VERSION = "2.0"; + AssertObjectSchema = custom((v2) => v2 !== null && (typeof v2 === "object" || typeof v2 === "function")); + ProgressTokenSchema = union([string3(), number3().int()]); + CursorSchema = string3(); + TaskCreationParamsSchema = looseObject({ + /** + * Requested duration in milliseconds to retain task from creation. + */ + ttl: number3().optional(), + /** + * Time in milliseconds to wait between task status requests. + */ + pollInterval: number3().optional() + }); + TaskMetadataSchema = object2({ + ttl: number3().optional() + }); + RelatedTaskMetadataSchema = object2({ + taskId: string3() + }); + RequestMetaSchema = looseObject({ + /** + * If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications. + */ + progressToken: ProgressTokenSchema.optional(), + /** + * If specified, this request is related to the provided task. + */ + [RELATED_TASK_META_KEY]: RelatedTaskMetadataSchema.optional() + }); + BaseRequestParamsSchema = object2({ + /** + * See [General fields: `_meta`](/specification/draft/basic/index#meta) for notes on `_meta` usage. + */ + _meta: RequestMetaSchema.optional() + }); + TaskAugmentedRequestParamsSchema = BaseRequestParamsSchema.extend({ + /** + * If specified, the caller is requesting task-augmented execution for this request. + * The request will return a CreateTaskResult immediately, and the actual result can be + * retrieved later via tasks/result. + * + * Task augmentation is subject to capability negotiation - receivers MUST declare support + * for task augmentation of specific request types in their capabilities. + */ + task: TaskMetadataSchema.optional() + }); + isTaskAugmentedRequestParams = (value) => TaskAugmentedRequestParamsSchema.safeParse(value).success; + RequestSchema = object2({ + method: string3(), + params: BaseRequestParamsSchema.loose().optional() + }); + NotificationsParamsSchema = object2({ + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: RequestMetaSchema.optional() + }); + NotificationSchema = object2({ + method: string3(), + params: NotificationsParamsSchema.loose().optional() + }); + ResultSchema = looseObject({ + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: RequestMetaSchema.optional() + }); + RequestIdSchema = union([string3(), number3().int()]); + JSONRPCRequestSchema = object2({ + jsonrpc: literal(JSONRPC_VERSION), + id: RequestIdSchema, + ...RequestSchema.shape + }).strict(); + isJSONRPCRequest = (value) => JSONRPCRequestSchema.safeParse(value).success; + JSONRPCNotificationSchema = object2({ + jsonrpc: literal(JSONRPC_VERSION), + ...NotificationSchema.shape + }).strict(); + isJSONRPCNotification = (value) => JSONRPCNotificationSchema.safeParse(value).success; + JSONRPCResultResponseSchema = object2({ + jsonrpc: literal(JSONRPC_VERSION), + id: RequestIdSchema, + result: ResultSchema + }).strict(); + isJSONRPCResultResponse = (value) => JSONRPCResultResponseSchema.safeParse(value).success; + (function(ErrorCode2) { + ErrorCode2[ErrorCode2["ConnectionClosed"] = -32e3] = "ConnectionClosed"; + ErrorCode2[ErrorCode2["RequestTimeout"] = -32001] = "RequestTimeout"; + ErrorCode2[ErrorCode2["ParseError"] = -32700] = "ParseError"; + ErrorCode2[ErrorCode2["InvalidRequest"] = -32600] = "InvalidRequest"; + ErrorCode2[ErrorCode2["MethodNotFound"] = -32601] = "MethodNotFound"; + ErrorCode2[ErrorCode2["InvalidParams"] = -32602] = "InvalidParams"; + ErrorCode2[ErrorCode2["InternalError"] = -32603] = "InternalError"; + ErrorCode2[ErrorCode2["UrlElicitationRequired"] = -32042] = "UrlElicitationRequired"; + })(ErrorCode || (ErrorCode = {})); + JSONRPCErrorResponseSchema = object2({ + jsonrpc: literal(JSONRPC_VERSION), + id: RequestIdSchema.optional(), + error: object2({ + /** + * The error type that occurred. + */ + code: number3().int(), + /** + * A short description of the error. The message SHOULD be limited to a concise single sentence. + */ + message: string3(), + /** + * Additional information about the error. The value of this member is defined by the sender (e.g. detailed error information, nested errors etc.). + */ + data: unknown().optional() + }) + }).strict(); + isJSONRPCErrorResponse = (value) => JSONRPCErrorResponseSchema.safeParse(value).success; + JSONRPCMessageSchema = union([ + JSONRPCRequestSchema, + JSONRPCNotificationSchema, + JSONRPCResultResponseSchema, + JSONRPCErrorResponseSchema + ]); + JSONRPCResponseSchema = union([JSONRPCResultResponseSchema, JSONRPCErrorResponseSchema]); + EmptyResultSchema = ResultSchema.strict(); + CancelledNotificationParamsSchema = NotificationsParamsSchema.extend({ + /** + * The ID of the request to cancel. + * + * This MUST correspond to the ID of a request previously issued in the same direction. + */ + requestId: RequestIdSchema.optional(), + /** + * An optional string describing the reason for the cancellation. This MAY be logged or presented to the user. + */ + reason: string3().optional() + }); + CancelledNotificationSchema = NotificationSchema.extend({ + method: literal("notifications/cancelled"), + params: CancelledNotificationParamsSchema + }); + IconSchema = object2({ + /** + * URL or data URI for the icon. + */ + src: string3(), + /** + * Optional MIME type for the icon. + */ + mimeType: string3().optional(), + /** + * Optional array of strings that specify sizes at which the icon can be used. + * Each string should be in WxH format (e.g., `"48x48"`, `"96x96"`) or `"any"` for scalable formats like SVG. + * + * If not provided, the client should assume that the icon can be used at any size. + */ + sizes: array(string3()).optional(), + /** + * Optional specifier for the theme this icon is designed for. `light` indicates + * the icon is designed to be used with a light background, and `dark` indicates + * the icon is designed to be used with a dark background. + * + * If not provided, the client should assume the icon can be used with any theme. + */ + theme: _enum2(["light", "dark"]).optional() + }); + IconsSchema = object2({ + /** + * Optional set of sized icons that the client can display in a user interface. + * + * Clients that support rendering icons MUST support at least the following MIME types: + * - `image/png` - PNG images (safe, universal compatibility) + * - `image/jpeg` (and `image/jpg`) - JPEG images (safe, universal compatibility) + * + * Clients that support rendering icons SHOULD also support: + * - `image/svg+xml` - SVG images (scalable but requires security precautions) + * - `image/webp` - WebP images (modern, efficient format) + */ + icons: array(IconSchema).optional() + }); + BaseMetadataSchema = object2({ + /** Intended for programmatic or logical use, but used as a display name in past specs or fallback */ + name: string3(), + /** + * Intended for UI and end-user contexts — optimized to be human-readable and easily understood, + * even by those unfamiliar with domain-specific terminology. + * + * If not provided, the name should be used for display (except for Tool, + * where `annotations.title` should be given precedence over using `name`, + * if present). + */ + title: string3().optional() + }); + ImplementationSchema = BaseMetadataSchema.extend({ + ...BaseMetadataSchema.shape, + ...IconsSchema.shape, + version: string3(), + /** + * An optional URL of the website for this implementation. + */ + websiteUrl: string3().optional(), + /** + * An optional human-readable description of what this implementation does. + * + * This can be used by clients or servers to provide context about their purpose + * and capabilities. For example, a server might describe the types of resources + * or tools it provides, while a client might describe its intended use case. + */ + description: string3().optional() + }); + FormElicitationCapabilitySchema = intersection(object2({ + applyDefaults: boolean3().optional() + }), record(string3(), unknown())); + ElicitationCapabilitySchema = preprocess((value) => { + if (value && typeof value === "object" && !Array.isArray(value)) { + if (Object.keys(value).length === 0) { + return { form: {} }; + } + } + return value; + }, intersection(object2({ + form: FormElicitationCapabilitySchema.optional(), + url: AssertObjectSchema.optional() + }), record(string3(), unknown()).optional())); + ClientTasksCapabilitySchema = looseObject({ + /** + * Present if the client supports listing tasks. + */ + list: AssertObjectSchema.optional(), + /** + * Present if the client supports cancelling tasks. + */ + cancel: AssertObjectSchema.optional(), + /** + * Capabilities for task creation on specific request types. + */ + requests: looseObject({ + /** + * Task support for sampling requests. + */ + sampling: looseObject({ + createMessage: AssertObjectSchema.optional() + }).optional(), + /** + * Task support for elicitation requests. + */ + elicitation: looseObject({ + create: AssertObjectSchema.optional() + }).optional() + }).optional() + }); + ServerTasksCapabilitySchema = looseObject({ + /** + * Present if the server supports listing tasks. + */ + list: AssertObjectSchema.optional(), + /** + * Present if the server supports cancelling tasks. + */ + cancel: AssertObjectSchema.optional(), + /** + * Capabilities for task creation on specific request types. + */ + requests: looseObject({ + /** + * Task support for tool requests. + */ + tools: looseObject({ + call: AssertObjectSchema.optional() + }).optional() + }).optional() + }); + ClientCapabilitiesSchema = object2({ + /** + * Experimental, non-standard capabilities that the client supports. + */ + experimental: record(string3(), AssertObjectSchema).optional(), + /** + * Present if the client supports sampling from an LLM. + */ + sampling: object2({ + /** + * Present if the client supports context inclusion via includeContext parameter. + * If not declared, servers SHOULD only use `includeContext: "none"` (or omit it). + */ + context: AssertObjectSchema.optional(), + /** + * Present if the client supports tool use via tools and toolChoice parameters. + */ + tools: AssertObjectSchema.optional() + }).optional(), + /** + * Present if the client supports eliciting user input. + */ + elicitation: ElicitationCapabilitySchema.optional(), + /** + * Present if the client supports listing roots. + */ + roots: object2({ + /** + * Whether the client supports issuing notifications for changes to the roots list. + */ + listChanged: boolean3().optional() + }).optional(), + /** + * Present if the client supports task creation. + */ + tasks: ClientTasksCapabilitySchema.optional(), + /** + * Extensions that the client supports. Keys are extension identifiers (vendor-prefix/extension-name). + */ + extensions: record(string3(), AssertObjectSchema).optional() + }); + InitializeRequestParamsSchema = BaseRequestParamsSchema.extend({ + /** + * The latest version of the Model Context Protocol that the client supports. The client MAY decide to support older versions as well. + */ + protocolVersion: string3(), + capabilities: ClientCapabilitiesSchema, + clientInfo: ImplementationSchema + }); + InitializeRequestSchema = RequestSchema.extend({ + method: literal("initialize"), + params: InitializeRequestParamsSchema + }); + ServerCapabilitiesSchema = object2({ + /** + * Experimental, non-standard capabilities that the server supports. + */ + experimental: record(string3(), AssertObjectSchema).optional(), + /** + * Present if the server supports sending log messages to the client. + */ + logging: AssertObjectSchema.optional(), + /** + * Present if the server supports sending completions to the client. + */ + completions: AssertObjectSchema.optional(), + /** + * Present if the server offers any prompt templates. + */ + prompts: object2({ + /** + * Whether this server supports issuing notifications for changes to the prompt list. + */ + listChanged: boolean3().optional() + }).optional(), + /** + * Present if the server offers any resources to read. + */ + resources: object2({ + /** + * Whether this server supports clients subscribing to resource updates. + */ + subscribe: boolean3().optional(), + /** + * Whether this server supports issuing notifications for changes to the resource list. + */ + listChanged: boolean3().optional() + }).optional(), + /** + * Present if the server offers any tools to call. + */ + tools: object2({ + /** + * Whether this server supports issuing notifications for changes to the tool list. + */ + listChanged: boolean3().optional() + }).optional(), + /** + * Present if the server supports task creation. + */ + tasks: ServerTasksCapabilitySchema.optional(), + /** + * Extensions that the server supports. Keys are extension identifiers (vendor-prefix/extension-name). + */ + extensions: record(string3(), AssertObjectSchema).optional() + }); + InitializeResultSchema = ResultSchema.extend({ + /** + * The version of the Model Context Protocol that the server wants to use. This may not match the version that the client requested. If the client cannot support this version, it MUST disconnect. + */ + protocolVersion: string3(), + capabilities: ServerCapabilitiesSchema, + serverInfo: ImplementationSchema, + /** + * Instructions describing how to use the server and its features. + * + * This can be used by clients to improve the LLM's understanding of available tools, resources, etc. It can be thought of like a "hint" to the model. For example, this information MAY be added to the system prompt. + */ + instructions: string3().optional() + }); + InitializedNotificationSchema = NotificationSchema.extend({ + method: literal("notifications/initialized"), + params: NotificationsParamsSchema.optional() + }); + isInitializedNotification = (value) => InitializedNotificationSchema.safeParse(value).success; + PingRequestSchema = RequestSchema.extend({ + method: literal("ping"), + params: BaseRequestParamsSchema.optional() + }); + ProgressSchema = object2({ + /** + * The progress thus far. This should increase every time progress is made, even if the total is unknown. + */ + progress: number3(), + /** + * Total number of items to process (or total progress required), if known. + */ + total: optional(number3()), + /** + * An optional message describing the current progress. + */ + message: optional(string3()) + }); + ProgressNotificationParamsSchema = object2({ + ...NotificationsParamsSchema.shape, + ...ProgressSchema.shape, + /** + * The progress token which was given in the initial request, used to associate this notification with the request that is proceeding. + */ + progressToken: ProgressTokenSchema + }); + ProgressNotificationSchema = NotificationSchema.extend({ + method: literal("notifications/progress"), + params: ProgressNotificationParamsSchema + }); + PaginatedRequestParamsSchema = BaseRequestParamsSchema.extend({ + /** + * An opaque token representing the current pagination position. + * If provided, the server should return results starting after this cursor. + */ + cursor: CursorSchema.optional() + }); + PaginatedRequestSchema = RequestSchema.extend({ + params: PaginatedRequestParamsSchema.optional() + }); + PaginatedResultSchema = ResultSchema.extend({ + /** + * An opaque token representing the pagination position after the last returned result. + * If present, there may be more results available. + */ + nextCursor: CursorSchema.optional() + }); + TaskStatusSchema = _enum2(["working", "input_required", "completed", "failed", "cancelled"]); + TaskSchema = object2({ + taskId: string3(), + status: TaskStatusSchema, + /** + * Time in milliseconds to keep task results available after completion. + * If null, the task has unlimited lifetime until manually cleaned up. + */ + ttl: union([number3(), _null3()]), + /** + * ISO 8601 timestamp when the task was created. + */ + createdAt: string3(), + /** + * ISO 8601 timestamp when the task was last updated. + */ + lastUpdatedAt: string3(), + pollInterval: optional(number3()), + /** + * Optional diagnostic message for failed tasks or other status information. + */ + statusMessage: optional(string3()) + }); + CreateTaskResultSchema = ResultSchema.extend({ + task: TaskSchema + }); + TaskStatusNotificationParamsSchema = NotificationsParamsSchema.merge(TaskSchema); + TaskStatusNotificationSchema = NotificationSchema.extend({ + method: literal("notifications/tasks/status"), + params: TaskStatusNotificationParamsSchema + }); + GetTaskRequestSchema = RequestSchema.extend({ + method: literal("tasks/get"), + params: BaseRequestParamsSchema.extend({ + taskId: string3() + }) + }); + GetTaskResultSchema = ResultSchema.merge(TaskSchema); + GetTaskPayloadRequestSchema = RequestSchema.extend({ + method: literal("tasks/result"), + params: BaseRequestParamsSchema.extend({ + taskId: string3() + }) + }); + GetTaskPayloadResultSchema = ResultSchema.loose(); + ListTasksRequestSchema = PaginatedRequestSchema.extend({ + method: literal("tasks/list") + }); + ListTasksResultSchema = PaginatedResultSchema.extend({ + tasks: array(TaskSchema) + }); + CancelTaskRequestSchema = RequestSchema.extend({ + method: literal("tasks/cancel"), + params: BaseRequestParamsSchema.extend({ + taskId: string3() + }) + }); + CancelTaskResultSchema = ResultSchema.merge(TaskSchema); + ResourceContentsSchema = object2({ + /** + * The URI of this resource. + */ + uri: string3(), + /** + * The MIME type of this resource, if known. + */ + mimeType: optional(string3()), + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: record(string3(), unknown()).optional() + }); + TextResourceContentsSchema = ResourceContentsSchema.extend({ + /** + * The text of the item. This must only be set if the item can actually be represented as text (not binary data). + */ + text: string3() + }); + Base64Schema = string3().refine((val) => { + try { + atob(val); + return true; + } catch (e2) { + return false; + } + }, { message: "Invalid Base64 string" }); + BlobResourceContentsSchema = ResourceContentsSchema.extend({ + /** + * A base64-encoded string representing the binary data of the item. + */ + blob: Base64Schema + }); + RoleSchema = _enum2(["user", "assistant"]); + AnnotationsSchema = object2({ + /** + * Intended audience(s) for the resource. + */ + audience: array(RoleSchema).optional(), + /** + * Importance hint for the resource, from 0 (least) to 1 (most). + */ + priority: number3().min(0).max(1).optional(), + /** + * ISO 8601 timestamp for the most recent modification. + */ + lastModified: iso_exports2.datetime({ offset: true }).optional() + }); + ResourceSchema = object2({ + ...BaseMetadataSchema.shape, + ...IconsSchema.shape, + /** + * The URI of this resource. + */ + uri: string3(), + /** + * A description of what this resource represents. + * + * This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a "hint" to the model. + */ + description: optional(string3()), + /** + * The MIME type of this resource, if known. + */ + mimeType: optional(string3()), + /** + * The size of the raw resource content, in bytes (i.e., before base64 encoding or any tokenization), if known. + * + * This can be used by Hosts to display file sizes and estimate context window usage. + */ + size: optional(number3()), + /** + * Optional annotations for the client. + */ + annotations: AnnotationsSchema.optional(), + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: optional(looseObject({})) + }); + ResourceTemplateSchema = object2({ + ...BaseMetadataSchema.shape, + ...IconsSchema.shape, + /** + * A URI template (according to RFC 6570) that can be used to construct resource URIs. + */ + uriTemplate: string3(), + /** + * A description of what this template is for. + * + * This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a "hint" to the model. + */ + description: optional(string3()), + /** + * The MIME type for all resources that match this template. This should only be included if all resources matching this template have the same type. + */ + mimeType: optional(string3()), + /** + * Optional annotations for the client. + */ + annotations: AnnotationsSchema.optional(), + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: optional(looseObject({})) + }); + ListResourcesRequestSchema = PaginatedRequestSchema.extend({ + method: literal("resources/list") + }); + ListResourcesResultSchema = PaginatedResultSchema.extend({ + resources: array(ResourceSchema) + }); + ListResourceTemplatesRequestSchema = PaginatedRequestSchema.extend({ + method: literal("resources/templates/list") + }); + ListResourceTemplatesResultSchema = PaginatedResultSchema.extend({ + resourceTemplates: array(ResourceTemplateSchema) + }); + ResourceRequestParamsSchema = BaseRequestParamsSchema.extend({ + /** + * The URI of the resource to read. The URI can use any protocol; it is up to the server how to interpret it. + * + * @format uri + */ + uri: string3() + }); + ReadResourceRequestParamsSchema = ResourceRequestParamsSchema; + ReadResourceRequestSchema = RequestSchema.extend({ + method: literal("resources/read"), + params: ReadResourceRequestParamsSchema + }); + ReadResourceResultSchema = ResultSchema.extend({ + contents: array(union([TextResourceContentsSchema, BlobResourceContentsSchema])) + }); + ResourceListChangedNotificationSchema = NotificationSchema.extend({ + method: literal("notifications/resources/list_changed"), + params: NotificationsParamsSchema.optional() + }); + SubscribeRequestParamsSchema = ResourceRequestParamsSchema; + SubscribeRequestSchema = RequestSchema.extend({ + method: literal("resources/subscribe"), + params: SubscribeRequestParamsSchema + }); + UnsubscribeRequestParamsSchema = ResourceRequestParamsSchema; + UnsubscribeRequestSchema = RequestSchema.extend({ + method: literal("resources/unsubscribe"), + params: UnsubscribeRequestParamsSchema + }); + ResourceUpdatedNotificationParamsSchema = NotificationsParamsSchema.extend({ + /** + * The URI of the resource that has been updated. This might be a sub-resource of the one that the client actually subscribed to. + */ + uri: string3() + }); + ResourceUpdatedNotificationSchema = NotificationSchema.extend({ + method: literal("notifications/resources/updated"), + params: ResourceUpdatedNotificationParamsSchema + }); + PromptArgumentSchema = object2({ + /** + * The name of the argument. + */ + name: string3(), + /** + * A human-readable description of the argument. + */ + description: optional(string3()), + /** + * Whether this argument must be provided. + */ + required: optional(boolean3()) + }); + PromptSchema = object2({ + ...BaseMetadataSchema.shape, + ...IconsSchema.shape, + /** + * An optional description of what this prompt provides + */ + description: optional(string3()), + /** + * A list of arguments to use for templating the prompt. + */ + arguments: optional(array(PromptArgumentSchema)), + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: optional(looseObject({})) + }); + ListPromptsRequestSchema = PaginatedRequestSchema.extend({ + method: literal("prompts/list") + }); + ListPromptsResultSchema = PaginatedResultSchema.extend({ + prompts: array(PromptSchema) + }); + GetPromptRequestParamsSchema = BaseRequestParamsSchema.extend({ + /** + * The name of the prompt or prompt template. + */ + name: string3(), + /** + * Arguments to use for templating the prompt. + */ + arguments: record(string3(), string3()).optional() + }); + GetPromptRequestSchema = RequestSchema.extend({ + method: literal("prompts/get"), + params: GetPromptRequestParamsSchema + }); + TextContentSchema = object2({ + type: literal("text"), + /** + * The text content of the message. + */ + text: string3(), + /** + * Optional annotations for the client. + */ + annotations: AnnotationsSchema.optional(), + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: record(string3(), unknown()).optional() + }); + ImageContentSchema = object2({ + type: literal("image"), + /** + * The base64-encoded image data. + */ + data: Base64Schema, + /** + * The MIME type of the image. Different providers may support different image types. + */ + mimeType: string3(), + /** + * Optional annotations for the client. + */ + annotations: AnnotationsSchema.optional(), + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: record(string3(), unknown()).optional() + }); + AudioContentSchema = object2({ + type: literal("audio"), + /** + * The base64-encoded audio data. + */ + data: Base64Schema, + /** + * The MIME type of the audio. Different providers may support different audio types. + */ + mimeType: string3(), + /** + * Optional annotations for the client. + */ + annotations: AnnotationsSchema.optional(), + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: record(string3(), unknown()).optional() + }); + ToolUseContentSchema = object2({ + type: literal("tool_use"), + /** + * The name of the tool to invoke. + * Must match a tool name from the request's tools array. + */ + name: string3(), + /** + * Unique identifier for this tool call. + * Used to correlate with ToolResultContent in subsequent messages. + */ + id: string3(), + /** + * Arguments to pass to the tool. + * Must conform to the tool's inputSchema. + */ + input: record(string3(), unknown()), + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: record(string3(), unknown()).optional() + }); + EmbeddedResourceSchema = object2({ + type: literal("resource"), + resource: union([TextResourceContentsSchema, BlobResourceContentsSchema]), + /** + * Optional annotations for the client. + */ + annotations: AnnotationsSchema.optional(), + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: record(string3(), unknown()).optional() + }); + ResourceLinkSchema = ResourceSchema.extend({ + type: literal("resource_link") + }); + ContentBlockSchema = union([ + TextContentSchema, + ImageContentSchema, + AudioContentSchema, + ResourceLinkSchema, + EmbeddedResourceSchema + ]); + PromptMessageSchema = object2({ + role: RoleSchema, + content: ContentBlockSchema + }); + GetPromptResultSchema = ResultSchema.extend({ + /** + * An optional description for the prompt. + */ + description: string3().optional(), + messages: array(PromptMessageSchema) + }); + PromptListChangedNotificationSchema = NotificationSchema.extend({ + method: literal("notifications/prompts/list_changed"), + params: NotificationsParamsSchema.optional() + }); + ToolAnnotationsSchema = object2({ + /** + * A human-readable title for the tool. + */ + title: string3().optional(), + /** + * If true, the tool does not modify its environment. + * + * Default: false + */ + readOnlyHint: boolean3().optional(), + /** + * If true, the tool may perform destructive updates to its environment. + * If false, the tool performs only additive updates. + * + * (This property is meaningful only when `readOnlyHint == false`) + * + * Default: true + */ + destructiveHint: boolean3().optional(), + /** + * If true, calling the tool repeatedly with the same arguments + * will have no additional effect on the its environment. + * + * (This property is meaningful only when `readOnlyHint == false`) + * + * Default: false + */ + idempotentHint: boolean3().optional(), + /** + * If true, this tool may interact with an "open world" of external + * entities. If false, the tool's domain of interaction is closed. + * For example, the world of a web search tool is open, whereas that + * of a memory tool is not. + * + * Default: true + */ + openWorldHint: boolean3().optional() + }); + ToolExecutionSchema = object2({ + /** + * Indicates the tool's preference for task-augmented execution. + * - "required": Clients MUST invoke the tool as a task + * - "optional": Clients MAY invoke the tool as a task or normal request + * - "forbidden": Clients MUST NOT attempt to invoke the tool as a task + * + * If not present, defaults to "forbidden". + */ + taskSupport: _enum2(["required", "optional", "forbidden"]).optional() + }); + ToolSchema = object2({ + ...BaseMetadataSchema.shape, + ...IconsSchema.shape, + /** + * A human-readable description of the tool. + */ + description: string3().optional(), + /** + * A JSON Schema 2020-12 object defining the expected parameters for the tool. + * Must have type: 'object' at the root level per MCP spec. + */ + inputSchema: object2({ + type: literal("object"), + properties: record(string3(), AssertObjectSchema).optional(), + required: array(string3()).optional() + }).catchall(unknown()), + /** + * An optional JSON Schema 2020-12 object defining the structure of the tool's output + * returned in the structuredContent field of a CallToolResult. + * Must have type: 'object' at the root level per MCP spec. + */ + outputSchema: object2({ + type: literal("object"), + properties: record(string3(), AssertObjectSchema).optional(), + required: array(string3()).optional() + }).catchall(unknown()).optional(), + /** + * Optional additional tool information. + */ + annotations: ToolAnnotationsSchema.optional(), + /** + * Execution-related properties for this tool. + */ + execution: ToolExecutionSchema.optional(), + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: record(string3(), unknown()).optional() + }); + ListToolsRequestSchema = PaginatedRequestSchema.extend({ + method: literal("tools/list") + }); + ListToolsResultSchema = PaginatedResultSchema.extend({ + tools: array(ToolSchema) + }); + CallToolResultSchema = ResultSchema.extend({ + /** + * A list of content objects that represent the result of the tool call. + * + * If the Tool does not define an outputSchema, this field MUST be present in the result. + * For backwards compatibility, this field is always present, but it may be empty. + */ + content: array(ContentBlockSchema).default([]), + /** + * An object containing structured tool output. + * + * If the Tool defines an outputSchema, this field MUST be present in the result, and contain a JSON object that matches the schema. + */ + structuredContent: record(string3(), unknown()).optional(), + /** + * Whether the tool call ended in an error. + * + * If not set, this is assumed to be false (the call was successful). + * + * Any errors that originate from the tool SHOULD be reported inside the result + * object, with `isError` set to true, _not_ as an MCP protocol-level error + * response. Otherwise, the LLM would not be able to see that an error occurred + * and self-correct. + * + * However, any errors in _finding_ the tool, an error indicating that the + * server does not support tool calls, or any other exceptional conditions, + * should be reported as an MCP error response. + */ + isError: boolean3().optional() + }); + CompatibilityCallToolResultSchema = CallToolResultSchema.or(ResultSchema.extend({ + toolResult: unknown() + })); + CallToolRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({ + /** + * The name of the tool to call. + */ + name: string3(), + /** + * Arguments to pass to the tool. + */ + arguments: record(string3(), unknown()).optional() + }); + CallToolRequestSchema = RequestSchema.extend({ + method: literal("tools/call"), + params: CallToolRequestParamsSchema + }); + ToolListChangedNotificationSchema = NotificationSchema.extend({ + method: literal("notifications/tools/list_changed"), + params: NotificationsParamsSchema.optional() + }); + ListChangedOptionsBaseSchema = object2({ + /** + * If true, the list will be refreshed automatically when a list changed notification is received. + * The callback will be called with the updated list. + * + * If false, the callback will be called with null items, allowing manual refresh. + * + * @default true + */ + autoRefresh: boolean3().default(true), + /** + * Debounce time in milliseconds for list changed notification processing. + * + * Multiple notifications received within this timeframe will only trigger one refresh. + * Set to 0 to disable debouncing. + * + * @default 300 + */ + debounceMs: number3().int().nonnegative().default(300) + }); + LoggingLevelSchema = _enum2(["debug", "info", "notice", "warning", "error", "critical", "alert", "emergency"]); + SetLevelRequestParamsSchema = BaseRequestParamsSchema.extend({ + /** + * The level of logging that the client wants to receive from the server. The server should send all logs at this level and higher (i.e., more severe) to the client as notifications/logging/message. + */ + level: LoggingLevelSchema + }); + SetLevelRequestSchema = RequestSchema.extend({ + method: literal("logging/setLevel"), + params: SetLevelRequestParamsSchema + }); + LoggingMessageNotificationParamsSchema = NotificationsParamsSchema.extend({ + /** + * The severity of this log message. + */ + level: LoggingLevelSchema, + /** + * An optional name of the logger issuing this message. + */ + logger: string3().optional(), + /** + * The data to be logged, such as a string message or an object. Any JSON serializable type is allowed here. + */ + data: unknown() + }); + LoggingMessageNotificationSchema = NotificationSchema.extend({ + method: literal("notifications/message"), + params: LoggingMessageNotificationParamsSchema + }); + ModelHintSchema = object2({ + /** + * A hint for a model name. + */ + name: string3().optional() + }); + ModelPreferencesSchema = object2({ + /** + * Optional hints to use for model selection. + */ + hints: array(ModelHintSchema).optional(), + /** + * How much to prioritize cost when selecting a model. + */ + costPriority: number3().min(0).max(1).optional(), + /** + * How much to prioritize sampling speed (latency) when selecting a model. + */ + speedPriority: number3().min(0).max(1).optional(), + /** + * How much to prioritize intelligence and capabilities when selecting a model. + */ + intelligencePriority: number3().min(0).max(1).optional() + }); + ToolChoiceSchema = object2({ + /** + * Controls when tools are used: + * - "auto": Model decides whether to use tools (default) + * - "required": Model MUST use at least one tool before completing + * - "none": Model MUST NOT use any tools + */ + mode: _enum2(["auto", "required", "none"]).optional() + }); + ToolResultContentSchema = object2({ + type: literal("tool_result"), + toolUseId: string3().describe("The unique identifier for the corresponding tool call."), + content: array(ContentBlockSchema).default([]), + structuredContent: object2({}).loose().optional(), + isError: boolean3().optional(), + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: record(string3(), unknown()).optional() + }); + SamplingContentSchema = discriminatedUnion("type", [TextContentSchema, ImageContentSchema, AudioContentSchema]); + SamplingMessageContentBlockSchema = discriminatedUnion("type", [ + TextContentSchema, + ImageContentSchema, + AudioContentSchema, + ToolUseContentSchema, + ToolResultContentSchema + ]); + SamplingMessageSchema = object2({ + role: RoleSchema, + content: union([SamplingMessageContentBlockSchema, array(SamplingMessageContentBlockSchema)]), + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: record(string3(), unknown()).optional() + }); + CreateMessageRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({ + messages: array(SamplingMessageSchema), + /** + * The server's preferences for which model to select. The client MAY modify or omit this request. + */ + modelPreferences: ModelPreferencesSchema.optional(), + /** + * An optional system prompt the server wants to use for sampling. The client MAY modify or omit this prompt. + */ + systemPrompt: string3().optional(), + /** + * A request to include context from one or more MCP servers (including the caller), to be attached to the prompt. + * The client MAY ignore this request. + * + * Default is "none". Values "thisServer" and "allServers" are soft-deprecated. Servers SHOULD only use these values if the client + * declares ClientCapabilities.sampling.context. These values may be removed in future spec releases. + */ + includeContext: _enum2(["none", "thisServer", "allServers"]).optional(), + temperature: number3().optional(), + /** + * The requested maximum number of tokens to sample (to prevent runaway completions). + * + * The client MAY choose to sample fewer tokens than the requested maximum. + */ + maxTokens: number3().int(), + stopSequences: array(string3()).optional(), + /** + * Optional metadata to pass through to the LLM provider. The format of this metadata is provider-specific. + */ + metadata: AssertObjectSchema.optional(), + /** + * Tools that the model may use during generation. + * The client MUST return an error if this field is provided but ClientCapabilities.sampling.tools is not declared. + */ + tools: array(ToolSchema).optional(), + /** + * Controls how the model uses tools. + * The client MUST return an error if this field is provided but ClientCapabilities.sampling.tools is not declared. + * Default is `{ mode: "auto" }`. + */ + toolChoice: ToolChoiceSchema.optional() + }); + CreateMessageRequestSchema = RequestSchema.extend({ + method: literal("sampling/createMessage"), + params: CreateMessageRequestParamsSchema + }); + CreateMessageResultSchema = ResultSchema.extend({ + /** + * The name of the model that generated the message. + */ + model: string3(), + /** + * The reason why sampling stopped, if known. + * + * Standard values: + * - "endTurn": Natural end of the assistant's turn + * - "stopSequence": A stop sequence was encountered + * - "maxTokens": Maximum token limit was reached + * + * This field is an open string to allow for provider-specific stop reasons. + */ + stopReason: optional(_enum2(["endTurn", "stopSequence", "maxTokens"]).or(string3())), + role: RoleSchema, + /** + * Response content. Single content block (text, image, or audio). + */ + content: SamplingContentSchema + }); + CreateMessageResultWithToolsSchema = ResultSchema.extend({ + /** + * The name of the model that generated the message. + */ + model: string3(), + /** + * The reason why sampling stopped, if known. + * + * Standard values: + * - "endTurn": Natural end of the assistant's turn + * - "stopSequence": A stop sequence was encountered + * - "maxTokens": Maximum token limit was reached + * - "toolUse": The model wants to use one or more tools + * + * This field is an open string to allow for provider-specific stop reasons. + */ + stopReason: optional(_enum2(["endTurn", "stopSequence", "maxTokens", "toolUse"]).or(string3())), + role: RoleSchema, + /** + * Response content. May be a single block or array. May include ToolUseContent if stopReason is "toolUse". + */ + content: union([SamplingMessageContentBlockSchema, array(SamplingMessageContentBlockSchema)]) + }); + BooleanSchemaSchema = object2({ + type: literal("boolean"), + title: string3().optional(), + description: string3().optional(), + default: boolean3().optional() + }); + StringSchemaSchema = object2({ + type: literal("string"), + title: string3().optional(), + description: string3().optional(), + minLength: number3().optional(), + maxLength: number3().optional(), + format: _enum2(["email", "uri", "date", "date-time"]).optional(), + default: string3().optional() + }); + NumberSchemaSchema = object2({ + type: _enum2(["number", "integer"]), + title: string3().optional(), + description: string3().optional(), + minimum: number3().optional(), + maximum: number3().optional(), + default: number3().optional() + }); + UntitledSingleSelectEnumSchemaSchema = object2({ + type: literal("string"), + title: string3().optional(), + description: string3().optional(), + enum: array(string3()), + default: string3().optional() + }); + TitledSingleSelectEnumSchemaSchema = object2({ + type: literal("string"), + title: string3().optional(), + description: string3().optional(), + oneOf: array(object2({ + const: string3(), + title: string3() + })), + default: string3().optional() + }); + LegacyTitledEnumSchemaSchema = object2({ + type: literal("string"), + title: string3().optional(), + description: string3().optional(), + enum: array(string3()), + enumNames: array(string3()).optional(), + default: string3().optional() + }); + SingleSelectEnumSchemaSchema = union([UntitledSingleSelectEnumSchemaSchema, TitledSingleSelectEnumSchemaSchema]); + UntitledMultiSelectEnumSchemaSchema = object2({ + type: literal("array"), + title: string3().optional(), + description: string3().optional(), + minItems: number3().optional(), + maxItems: number3().optional(), + items: object2({ + type: literal("string"), + enum: array(string3()) + }), + default: array(string3()).optional() + }); + TitledMultiSelectEnumSchemaSchema = object2({ + type: literal("array"), + title: string3().optional(), + description: string3().optional(), + minItems: number3().optional(), + maxItems: number3().optional(), + items: object2({ + anyOf: array(object2({ + const: string3(), + title: string3() + })) + }), + default: array(string3()).optional() + }); + MultiSelectEnumSchemaSchema = union([UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema]); + EnumSchemaSchema = union([LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema]); + PrimitiveSchemaDefinitionSchema = union([EnumSchemaSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema]); + ElicitRequestFormParamsSchema = TaskAugmentedRequestParamsSchema.extend({ + /** + * The elicitation mode. + * + * Optional for backward compatibility. Clients MUST treat missing mode as "form". + */ + mode: literal("form").optional(), + /** + * The message to present to the user describing what information is being requested. + */ + message: string3(), + /** + * A restricted subset of JSON Schema. + * Only top-level properties are allowed, without nesting. + */ + requestedSchema: object2({ + type: literal("object"), + properties: record(string3(), PrimitiveSchemaDefinitionSchema), + required: array(string3()).optional() + }) + }); + ElicitRequestURLParamsSchema = TaskAugmentedRequestParamsSchema.extend({ + /** + * The elicitation mode. + */ + mode: literal("url"), + /** + * The message to present to the user explaining why the interaction is needed. + */ + message: string3(), + /** + * The ID of the elicitation, which must be unique within the context of the server. + * The client MUST treat this ID as an opaque value. + */ + elicitationId: string3(), + /** + * The URL that the user should navigate to. + */ + url: string3().url() + }); + ElicitRequestParamsSchema = union([ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema]); + ElicitRequestSchema = RequestSchema.extend({ + method: literal("elicitation/create"), + params: ElicitRequestParamsSchema + }); + ElicitationCompleteNotificationParamsSchema = NotificationsParamsSchema.extend({ + /** + * The ID of the elicitation that completed. + */ + elicitationId: string3() + }); + ElicitationCompleteNotificationSchema = NotificationSchema.extend({ + method: literal("notifications/elicitation/complete"), + params: ElicitationCompleteNotificationParamsSchema + }); + ElicitResultSchema = ResultSchema.extend({ + /** + * The user action in response to the elicitation. + * - "accept": User submitted the form/confirmed the action + * - "decline": User explicitly decline the action + * - "cancel": User dismissed without making an explicit choice + */ + action: _enum2(["accept", "decline", "cancel"]), + /** + * The submitted form data, only present when action is "accept". + * Contains values matching the requested schema. + * Per MCP spec, content is "typically omitted" for decline/cancel actions. + * We normalize null to undefined for leniency while maintaining type compatibility. + */ + content: preprocess((val) => val === null ? void 0 : val, record(string3(), union([string3(), number3(), boolean3(), array(string3())])).optional()) + }); + ResourceTemplateReferenceSchema = object2({ + type: literal("ref/resource"), + /** + * The URI or URI template of the resource. + */ + uri: string3() + }); + PromptReferenceSchema = object2({ + type: literal("ref/prompt"), + /** + * The name of the prompt or prompt template + */ + name: string3() + }); + CompleteRequestParamsSchema = BaseRequestParamsSchema.extend({ + ref: union([PromptReferenceSchema, ResourceTemplateReferenceSchema]), + /** + * The argument's information + */ + argument: object2({ + /** + * The name of the argument + */ + name: string3(), + /** + * The value of the argument to use for completion matching. + */ + value: string3() + }), + context: object2({ + /** + * Previously-resolved variables in a URI template or prompt. + */ + arguments: record(string3(), string3()).optional() + }).optional() + }); + CompleteRequestSchema = RequestSchema.extend({ + method: literal("completion/complete"), + params: CompleteRequestParamsSchema + }); + CompleteResultSchema = ResultSchema.extend({ + completion: looseObject({ + /** + * An array of completion values. Must not exceed 100 items. + */ + values: array(string3()).max(100), + /** + * The total number of completion options available. This can exceed the number of values actually sent in the response. + */ + total: optional(number3().int()), + /** + * Indicates whether there are additional completion options beyond those provided in the current response, even if the exact total is unknown. + */ + hasMore: optional(boolean3()) + }) + }); + RootSchema = object2({ + /** + * The URI identifying the root. This *must* start with file:// for now. + */ + uri: string3().startsWith("file://"), + /** + * An optional name for the root. + */ + name: string3().optional(), + /** + * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields) + * for notes on _meta usage. + */ + _meta: record(string3(), unknown()).optional() + }); + ListRootsRequestSchema = RequestSchema.extend({ + method: literal("roots/list"), + params: BaseRequestParamsSchema.optional() + }); + ListRootsResultSchema = ResultSchema.extend({ + roots: array(RootSchema) + }); + RootsListChangedNotificationSchema = NotificationSchema.extend({ + method: literal("notifications/roots/list_changed"), + params: NotificationsParamsSchema.optional() + }); + ClientRequestSchema = union([ + PingRequestSchema, + InitializeRequestSchema, + CompleteRequestSchema, + SetLevelRequestSchema, + GetPromptRequestSchema, + ListPromptsRequestSchema, + ListResourcesRequestSchema, + ListResourceTemplatesRequestSchema, + ReadResourceRequestSchema, + SubscribeRequestSchema, + UnsubscribeRequestSchema, + CallToolRequestSchema, + ListToolsRequestSchema, + GetTaskRequestSchema, + GetTaskPayloadRequestSchema, + ListTasksRequestSchema, + CancelTaskRequestSchema + ]); + ClientNotificationSchema = union([ + CancelledNotificationSchema, + ProgressNotificationSchema, + InitializedNotificationSchema, + RootsListChangedNotificationSchema, + TaskStatusNotificationSchema + ]); + ClientResultSchema = union([ + EmptyResultSchema, + CreateMessageResultSchema, + CreateMessageResultWithToolsSchema, + ElicitResultSchema, + ListRootsResultSchema, + GetTaskResultSchema, + ListTasksResultSchema, + CreateTaskResultSchema + ]); + ServerRequestSchema = union([ + PingRequestSchema, + CreateMessageRequestSchema, + ElicitRequestSchema, + ListRootsRequestSchema, + GetTaskRequestSchema, + GetTaskPayloadRequestSchema, + ListTasksRequestSchema, + CancelTaskRequestSchema + ]); + ServerNotificationSchema = union([ + CancelledNotificationSchema, + ProgressNotificationSchema, + LoggingMessageNotificationSchema, + ResourceUpdatedNotificationSchema, + ResourceListChangedNotificationSchema, + ToolListChangedNotificationSchema, + PromptListChangedNotificationSchema, + TaskStatusNotificationSchema, + ElicitationCompleteNotificationSchema + ]); + ServerResultSchema = union([ + EmptyResultSchema, + InitializeResultSchema, + CompleteResultSchema, + GetPromptResultSchema, + ListPromptsResultSchema, + ListResourcesResultSchema, + ListResourceTemplatesResultSchema, + ReadResourceResultSchema, + CallToolResultSchema, + ListToolsResultSchema, + GetTaskResultSchema, + ListTasksResultSchema, + CreateTaskResultSchema + ]); + McpError = class _McpError extends Error { + constructor(code, message, data) { + super(`MCP error ${code}: ${message}`); + this.code = code; + this.data = data; + this.name = "McpError"; + } + /** + * Factory method to create the appropriate error type based on the error code and data + */ + static fromError(code, message, data) { + if (code === ErrorCode.UrlElicitationRequired && data) { + const errorData = data; + if (errorData.elicitations) { + return new UrlElicitationRequiredError(errorData.elicitations, message); + } + } + return new _McpError(code, message, data); + } + }; + UrlElicitationRequiredError = class extends McpError { + constructor(elicitations, message = `URL elicitation${elicitations.length > 1 ? "s" : ""} required`) { + super(ErrorCode.UrlElicitationRequired, message, { + elicitations + }); + } + get elicitations() { + var _a5, _b3; + return (_b3 = (_a5 = this.data) == null ? void 0 : _a5.elicitations) != null ? _b3 : []; + } + }; + } +}); + +// node_modules/ajv/dist/compile/codegen/code.js +var require_code = __commonJS({ + "node_modules/ajv/dist/compile/codegen/code.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = void 0; + var _CodeOrName = class { + }; + exports._CodeOrName = _CodeOrName; + exports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i; + var Name = class extends _CodeOrName { + constructor(s2) { + super(); + if (!exports.IDENTIFIER.test(s2)) + throw new Error("CodeGen: name must be a valid identifier"); + this.str = s2; + } + toString() { + return this.str; + } + emptyStr() { + return false; + } + get names() { + return { [this.str]: 1 }; + } + }; + exports.Name = Name; + var _Code = class extends _CodeOrName { + constructor(code) { + super(); + this._items = typeof code === "string" ? [code] : code; + } + toString() { + return this.str; + } + emptyStr() { + if (this._items.length > 1) + return false; + const item = this._items[0]; + return item === "" || item === '""'; + } + get str() { + var _a5; + return (_a5 = this._str) !== null && _a5 !== void 0 ? _a5 : this._str = this._items.reduce((s2, c) => `${s2}${c}`, ""); + } + get names() { + var _a5; + return (_a5 = this._names) !== null && _a5 !== void 0 ? _a5 : this._names = this._items.reduce((names, c) => { + if (c instanceof Name) + names[c.str] = (names[c.str] || 0) + 1; + return names; + }, {}); + } + }; + exports._Code = _Code; + exports.nil = new _Code(""); + function _2(strs, ...args) { + const code = [strs[0]]; + let i = 0; + while (i < args.length) { + addCodeArg(code, args[i]); + code.push(strs[++i]); + } + return new _Code(code); + } + exports._ = _2; + var plus = new _Code("+"); + function str(strs, ...args) { + const expr = [safeStringify(strs[0])]; + let i = 0; + while (i < args.length) { + expr.push(plus); + addCodeArg(expr, args[i]); + expr.push(plus, safeStringify(strs[++i])); + } + optimize(expr); + return new _Code(expr); + } + exports.str = str; + function addCodeArg(code, arg) { + if (arg instanceof _Code) + code.push(...arg._items); + else if (arg instanceof Name) + code.push(arg); + else + code.push(interpolate(arg)); + } + exports.addCodeArg = addCodeArg; + function optimize(expr) { + let i = 1; + while (i < expr.length - 1) { + if (expr[i] === plus) { + const res = mergeExprItems(expr[i - 1], expr[i + 1]); + if (res !== void 0) { + expr.splice(i - 1, 3, res); + continue; + } + expr[i++] = "+"; + } + i++; + } + } + function mergeExprItems(a, b2) { + if (b2 === '""') + return a; + if (a === '""') + return b2; + if (typeof a == "string") { + if (b2 instanceof Name || a[a.length - 1] !== '"') + return; + if (typeof b2 != "string") + return `${a.slice(0, -1)}${b2}"`; + if (b2[0] === '"') + return a.slice(0, -1) + b2.slice(1); + return; + } + if (typeof b2 == "string" && b2[0] === '"' && !(a instanceof Name)) + return `"${a}${b2.slice(1)}`; + return; + } + function strConcat(c12, c2) { + return c2.emptyStr() ? c12 : c12.emptyStr() ? c2 : str`${c12}${c2}`; + } + exports.strConcat = strConcat; + function interpolate(x2) { + return typeof x2 == "number" || typeof x2 == "boolean" || x2 === null ? x2 : safeStringify(Array.isArray(x2) ? x2.join(",") : x2); + } + function stringify2(x2) { + return new _Code(safeStringify(x2)); + } + exports.stringify = stringify2; + function safeStringify(x2) { + return JSON.stringify(x2).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029"); + } + exports.safeStringify = safeStringify; + function getProperty(key) { + return typeof key == "string" && exports.IDENTIFIER.test(key) ? new _Code(`.${key}`) : _2`[${key}]`; + } + exports.getProperty = getProperty; + function getEsmExportName(key) { + if (typeof key == "string" && exports.IDENTIFIER.test(key)) { + return new _Code(`${key}`); + } + throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`); + } + exports.getEsmExportName = getEsmExportName; + function regexpCode(rx) { + return new _Code(rx.toString()); + } + exports.regexpCode = regexpCode; + } +}); + +// node_modules/ajv/dist/compile/codegen/scope.js +var require_scope = __commonJS({ + "node_modules/ajv/dist/compile/codegen/scope.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = void 0; + var code_1 = require_code(); + var ValueError = class extends Error { + constructor(name) { + super(`CodeGen: "code" for ${name} not defined`); + this.value = name.value; + } + }; + var UsedValueState; + (function(UsedValueState2) { + UsedValueState2[UsedValueState2["Started"] = 0] = "Started"; + UsedValueState2[UsedValueState2["Completed"] = 1] = "Completed"; + })(UsedValueState || (exports.UsedValueState = UsedValueState = {})); + exports.varKinds = { + const: new code_1.Name("const"), + let: new code_1.Name("let"), + var: new code_1.Name("var") + }; + var Scope2 = class { + constructor({ prefixes, parent } = {}) { + this._names = {}; + this._prefixes = prefixes; + this._parent = parent; + } + toName(nameOrPrefix) { + return nameOrPrefix instanceof code_1.Name ? nameOrPrefix : this.name(nameOrPrefix); + } + name(prefix) { + return new code_1.Name(this._newName(prefix)); + } + _newName(prefix) { + const ng = this._names[prefix] || this._nameGroup(prefix); + return `${prefix}${ng.index++}`; + } + _nameGroup(prefix) { + var _a5, _b3; + if (((_b3 = (_a5 = this._parent) === null || _a5 === void 0 ? void 0 : _a5._prefixes) === null || _b3 === void 0 ? void 0 : _b3.has(prefix)) || this._prefixes && !this._prefixes.has(prefix)) { + throw new Error(`CodeGen: prefix "${prefix}" is not allowed in this scope`); + } + return this._names[prefix] = { prefix, index: 0 }; + } + }; + exports.Scope = Scope2; + var ValueScopeName = class extends code_1.Name { + constructor(prefix, nameStr) { + super(nameStr); + this.prefix = prefix; + } + setValue(value, { property, itemIndex }) { + this.value = value; + this.scopePath = (0, code_1._)`.${new code_1.Name(property)}[${itemIndex}]`; + } + }; + exports.ValueScopeName = ValueScopeName; + var line = (0, code_1._)`\n`; + var ValueScope = class extends Scope2 { + constructor(opts) { + super(opts); + this._values = {}; + this._scope = opts.scope; + this.opts = { ...opts, _n: opts.lines ? line : code_1.nil }; + } + get() { + return this._scope; + } + name(prefix) { + return new ValueScopeName(prefix, this._newName(prefix)); + } + value(nameOrPrefix, value) { + var _a5; + if (value.ref === void 0) + throw new Error("CodeGen: ref must be passed in value"); + const name = this.toName(nameOrPrefix); + const { prefix } = name; + const valueKey = (_a5 = value.key) !== null && _a5 !== void 0 ? _a5 : value.ref; + let vs = this._values[prefix]; + if (vs) { + const _name = vs.get(valueKey); + if (_name) + return _name; + } else { + vs = this._values[prefix] = /* @__PURE__ */ new Map(); + } + vs.set(valueKey, name); + const s2 = this._scope[prefix] || (this._scope[prefix] = []); + const itemIndex = s2.length; + s2[itemIndex] = value.ref; + name.setValue(value, { property: prefix, itemIndex }); + return name; + } + getValue(prefix, keyOrRef) { + const vs = this._values[prefix]; + if (!vs) + return; + return vs.get(keyOrRef); + } + scopeRefs(scopeName, values = this._values) { + return this._reduceValues(values, (name) => { + if (name.scopePath === void 0) + throw new Error(`CodeGen: name "${name}" has no value`); + return (0, code_1._)`${scopeName}${name.scopePath}`; + }); + } + scopeCode(values = this._values, usedValues, getCode) { + return this._reduceValues(values, (name) => { + if (name.value === void 0) + throw new Error(`CodeGen: name "${name}" has no value`); + return name.value.code; + }, usedValues, getCode); + } + _reduceValues(values, valueCode, usedValues = {}, getCode) { + let code = code_1.nil; + for (const prefix in values) { + const vs = values[prefix]; + if (!vs) + continue; + const nameSet = usedValues[prefix] = usedValues[prefix] || /* @__PURE__ */ new Map(); + vs.forEach((name) => { + if (nameSet.has(name)) + return; + nameSet.set(name, UsedValueState.Started); + let c = valueCode(name); + if (c) { + const def = this.opts.es5 ? exports.varKinds.var : exports.varKinds.const; + code = (0, code_1._)`${code}${def} ${name} = ${c};${this.opts._n}`; + } else if (c = getCode === null || getCode === void 0 ? void 0 : getCode(name)) { + code = (0, code_1._)`${code}${c}${this.opts._n}`; + } else { + throw new ValueError(name); + } + nameSet.set(name, UsedValueState.Completed); + }); + } + return code; + } + }; + exports.ValueScope = ValueScope; + } +}); + +// node_modules/ajv/dist/compile/codegen/index.js +var require_codegen = __commonJS({ + "node_modules/ajv/dist/compile/codegen/index.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = void 0; + var code_1 = require_code(); + var scope_1 = require_scope(); + var code_2 = require_code(); + Object.defineProperty(exports, "_", { enumerable: true, get: function() { + return code_2._; + } }); + Object.defineProperty(exports, "str", { enumerable: true, get: function() { + return code_2.str; + } }); + Object.defineProperty(exports, "strConcat", { enumerable: true, get: function() { + return code_2.strConcat; + } }); + Object.defineProperty(exports, "nil", { enumerable: true, get: function() { + return code_2.nil; + } }); + Object.defineProperty(exports, "getProperty", { enumerable: true, get: function() { + return code_2.getProperty; + } }); + Object.defineProperty(exports, "stringify", { enumerable: true, get: function() { + return code_2.stringify; + } }); + Object.defineProperty(exports, "regexpCode", { enumerable: true, get: function() { + return code_2.regexpCode; + } }); + Object.defineProperty(exports, "Name", { enumerable: true, get: function() { + return code_2.Name; + } }); + var scope_2 = require_scope(); + Object.defineProperty(exports, "Scope", { enumerable: true, get: function() { + return scope_2.Scope; + } }); + Object.defineProperty(exports, "ValueScope", { enumerable: true, get: function() { + return scope_2.ValueScope; + } }); + Object.defineProperty(exports, "ValueScopeName", { enumerable: true, get: function() { + return scope_2.ValueScopeName; + } }); + Object.defineProperty(exports, "varKinds", { enumerable: true, get: function() { + return scope_2.varKinds; + } }); + exports.operators = { + GT: new code_1._Code(">"), + GTE: new code_1._Code(">="), + LT: new code_1._Code("<"), + LTE: new code_1._Code("<="), + EQ: new code_1._Code("==="), + NEQ: new code_1._Code("!=="), + NOT: new code_1._Code("!"), + OR: new code_1._Code("||"), + AND: new code_1._Code("&&"), + ADD: new code_1._Code("+") + }; + var Node = class { + optimizeNodes() { + return this; + } + optimizeNames(_names, _constants) { + return this; + } + }; + var Def = class extends Node { + constructor(varKind, name, rhs) { + super(); + this.varKind = varKind; + this.name = name; + this.rhs = rhs; + } + render({ es5, _n }) { + const varKind = es5 ? scope_1.varKinds.var : this.varKind; + const rhs = this.rhs === void 0 ? "" : ` = ${this.rhs}`; + return `${varKind} ${this.name}${rhs};` + _n; + } + optimizeNames(names, constants) { + if (!names[this.name.str]) + return; + if (this.rhs) + this.rhs = optimizeExpr(this.rhs, names, constants); + return this; + } + get names() { + return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {}; + } + }; + var Assign = class extends Node { + constructor(lhs, rhs, sideEffects) { + super(); + this.lhs = lhs; + this.rhs = rhs; + this.sideEffects = sideEffects; + } + render({ _n }) { + return `${this.lhs} = ${this.rhs};` + _n; + } + optimizeNames(names, constants) { + if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects) + return; + this.rhs = optimizeExpr(this.rhs, names, constants); + return this; + } + get names() { + const names = this.lhs instanceof code_1.Name ? {} : { ...this.lhs.names }; + return addExprNames(names, this.rhs); + } + }; + var AssignOp = class extends Assign { + constructor(lhs, op, rhs, sideEffects) { + super(lhs, rhs, sideEffects); + this.op = op; + } + render({ _n }) { + return `${this.lhs} ${this.op}= ${this.rhs};` + _n; + } + }; + var Label = class extends Node { + constructor(label) { + super(); + this.label = label; + this.names = {}; + } + render({ _n }) { + return `${this.label}:` + _n; + } + }; + var Break = class extends Node { + constructor(label) { + super(); + this.label = label; + this.names = {}; + } + render({ _n }) { + const label = this.label ? ` ${this.label}` : ""; + return `break${label};` + _n; + } + }; + var Throw = class extends Node { + constructor(error48) { + super(); + this.error = error48; + } + render({ _n }) { + return `throw ${this.error};` + _n; + } + get names() { + return this.error.names; + } + }; + var AnyCode = class extends Node { + constructor(code) { + super(); + this.code = code; + } + render({ _n }) { + return `${this.code};` + _n; + } + optimizeNodes() { + return `${this.code}` ? this : void 0; + } + optimizeNames(names, constants) { + this.code = optimizeExpr(this.code, names, constants); + return this; + } + get names() { + return this.code instanceof code_1._CodeOrName ? this.code.names : {}; + } + }; + var ParentNode = class extends Node { + constructor(nodes = []) { + super(); + this.nodes = nodes; + } + render(opts) { + return this.nodes.reduce((code, n10) => code + n10.render(opts), ""); + } + optimizeNodes() { + const { nodes } = this; + let i = nodes.length; + while (i--) { + const n10 = nodes[i].optimizeNodes(); + if (Array.isArray(n10)) + nodes.splice(i, 1, ...n10); + else if (n10) + nodes[i] = n10; + else + nodes.splice(i, 1); + } + return nodes.length > 0 ? this : void 0; + } + optimizeNames(names, constants) { + const { nodes } = this; + let i = nodes.length; + while (i--) { + const n10 = nodes[i]; + if (n10.optimizeNames(names, constants)) + continue; + subtractNames(names, n10.names); + nodes.splice(i, 1); + } + return nodes.length > 0 ? this : void 0; + } + get names() { + return this.nodes.reduce((names, n10) => addNames(names, n10.names), {}); + } + }; + var BlockNode = class extends ParentNode { + render(opts) { + return "{" + opts._n + super.render(opts) + "}" + opts._n; + } + }; + var Root = class extends ParentNode { + }; + var Else = class extends BlockNode { + }; + Else.kind = "else"; + var If = class _If extends BlockNode { + constructor(condition, nodes) { + super(nodes); + this.condition = condition; + } + render(opts) { + let code = `if(${this.condition})` + super.render(opts); + if (this.else) + code += "else " + this.else.render(opts); + return code; + } + optimizeNodes() { + super.optimizeNodes(); + const cond = this.condition; + if (cond === true) + return this.nodes; + let e2 = this.else; + if (e2) { + const ns = e2.optimizeNodes(); + e2 = this.else = Array.isArray(ns) ? new Else(ns) : ns; + } + if (e2) { + if (cond === false) + return e2 instanceof _If ? e2 : e2.nodes; + if (this.nodes.length) + return this; + return new _If(not(cond), e2 instanceof _If ? [e2] : e2.nodes); + } + if (cond === false || !this.nodes.length) + return void 0; + return this; + } + optimizeNames(names, constants) { + var _a5; + this.else = (_a5 = this.else) === null || _a5 === void 0 ? void 0 : _a5.optimizeNames(names, constants); + if (!(super.optimizeNames(names, constants) || this.else)) + return; + this.condition = optimizeExpr(this.condition, names, constants); + return this; + } + get names() { + const names = super.names; + addExprNames(names, this.condition); + if (this.else) + addNames(names, this.else.names); + return names; + } + }; + If.kind = "if"; + var For = class extends BlockNode { + }; + For.kind = "for"; + var ForLoop = class extends For { + constructor(iteration) { + super(); + this.iteration = iteration; + } + render(opts) { + return `for(${this.iteration})` + super.render(opts); + } + optimizeNames(names, constants) { + if (!super.optimizeNames(names, constants)) + return; + this.iteration = optimizeExpr(this.iteration, names, constants); + return this; + } + get names() { + return addNames(super.names, this.iteration.names); + } + }; + var ForRange = class extends For { + constructor(varKind, name, from, to) { + super(); + this.varKind = varKind; + this.name = name; + this.from = from; + this.to = to; + } + render(opts) { + const varKind = opts.es5 ? scope_1.varKinds.var : this.varKind; + const { name, from, to } = this; + return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts); + } + get names() { + const names = addExprNames(super.names, this.from); + return addExprNames(names, this.to); + } + }; + var ForIter = class extends For { + constructor(loop, varKind, name, iterable) { + super(); + this.loop = loop; + this.varKind = varKind; + this.name = name; + this.iterable = iterable; + } + render(opts) { + return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts); + } + optimizeNames(names, constants) { + if (!super.optimizeNames(names, constants)) + return; + this.iterable = optimizeExpr(this.iterable, names, constants); + return this; + } + get names() { + return addNames(super.names, this.iterable.names); + } + }; + var Func = class extends BlockNode { + constructor(name, args, async) { + super(); + this.name = name; + this.args = args; + this.async = async; + } + render(opts) { + const _async = this.async ? "async " : ""; + return `${_async}function ${this.name}(${this.args})` + super.render(opts); + } + }; + Func.kind = "func"; + var Return = class extends ParentNode { + render(opts) { + return "return " + super.render(opts); + } + }; + Return.kind = "return"; + var Try = class extends BlockNode { + render(opts) { + let code = "try" + super.render(opts); + if (this.catch) + code += this.catch.render(opts); + if (this.finally) + code += this.finally.render(opts); + return code; + } + optimizeNodes() { + var _a5, _b3; + super.optimizeNodes(); + (_a5 = this.catch) === null || _a5 === void 0 ? void 0 : _a5.optimizeNodes(); + (_b3 = this.finally) === null || _b3 === void 0 ? void 0 : _b3.optimizeNodes(); + return this; + } + optimizeNames(names, constants) { + var _a5, _b3; + super.optimizeNames(names, constants); + (_a5 = this.catch) === null || _a5 === void 0 ? void 0 : _a5.optimizeNames(names, constants); + (_b3 = this.finally) === null || _b3 === void 0 ? void 0 : _b3.optimizeNames(names, constants); + return this; + } + get names() { + const names = super.names; + if (this.catch) + addNames(names, this.catch.names); + if (this.finally) + addNames(names, this.finally.names); + return names; + } + }; + var Catch = class extends BlockNode { + constructor(error48) { + super(); + this.error = error48; + } + render(opts) { + return `catch(${this.error})` + super.render(opts); + } + }; + Catch.kind = "catch"; + var Finally = class extends BlockNode { + render(opts) { + return "finally" + super.render(opts); + } + }; + Finally.kind = "finally"; + var CodeGen = class { + constructor(extScope, opts = {}) { + this._values = {}; + this._blockStarts = []; + this._constants = {}; + this.opts = { ...opts, _n: opts.lines ? "\n" : "" }; + this._extScope = extScope; + this._scope = new scope_1.Scope({ parent: extScope }); + this._nodes = [new Root()]; + } + toString() { + return this._root.render(this.opts); + } + // returns unique name in the internal scope + name(prefix) { + return this._scope.name(prefix); + } + // reserves unique name in the external scope + scopeName(prefix) { + return this._extScope.name(prefix); + } + // reserves unique name in the external scope and assigns value to it + scopeValue(prefixOrName, value) { + const name = this._extScope.value(prefixOrName, value); + const vs = this._values[name.prefix] || (this._values[name.prefix] = /* @__PURE__ */ new Set()); + vs.add(name); + return name; + } + getScopeValue(prefix, keyOrRef) { + return this._extScope.getValue(prefix, keyOrRef); + } + // return code that assigns values in the external scope to the names that are used internally + // (same names that were returned by gen.scopeName or gen.scopeValue) + scopeRefs(scopeName) { + return this._extScope.scopeRefs(scopeName, this._values); + } + scopeCode() { + return this._extScope.scopeCode(this._values); + } + _def(varKind, nameOrPrefix, rhs, constant) { + const name = this._scope.toName(nameOrPrefix); + if (rhs !== void 0 && constant) + this._constants[name.str] = rhs; + this._leafNode(new Def(varKind, name, rhs)); + return name; + } + // `const` declaration (`var` in es5 mode) + const(nameOrPrefix, rhs, _constant) { + return this._def(scope_1.varKinds.const, nameOrPrefix, rhs, _constant); + } + // `let` declaration with optional assignment (`var` in es5 mode) + let(nameOrPrefix, rhs, _constant) { + return this._def(scope_1.varKinds.let, nameOrPrefix, rhs, _constant); + } + // `var` declaration with optional assignment + var(nameOrPrefix, rhs, _constant) { + return this._def(scope_1.varKinds.var, nameOrPrefix, rhs, _constant); + } + // assignment code + assign(lhs, rhs, sideEffects) { + return this._leafNode(new Assign(lhs, rhs, sideEffects)); + } + // `+=` code + add(lhs, rhs) { + return this._leafNode(new AssignOp(lhs, exports.operators.ADD, rhs)); + } + // appends passed SafeExpr to code or executes Block + code(c) { + if (typeof c == "function") + c(); + else if (c !== code_1.nil) + this._leafNode(new AnyCode(c)); + return this; + } + // returns code for object literal for the passed argument list of key-value pairs + object(...keyValues) { + const code = ["{"]; + for (const [key, value] of keyValues) { + if (code.length > 1) + code.push(","); + code.push(key); + if (key !== value || this.opts.es5) { + code.push(":"); + (0, code_1.addCodeArg)(code, value); + } + } + code.push("}"); + return new code_1._Code(code); + } + // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed) + if(condition, thenBody, elseBody) { + this._blockNode(new If(condition)); + if (thenBody && elseBody) { + this.code(thenBody).else().code(elseBody).endIf(); + } else if (thenBody) { + this.code(thenBody).endIf(); + } else if (elseBody) { + throw new Error('CodeGen: "else" body without "then" body'); + } + return this; + } + // `else if` clause - invalid without `if` or after `else` clauses + elseIf(condition) { + return this._elseNode(new If(condition)); + } + // `else` clause - only valid after `if` or `else if` clauses + else() { + return this._elseNode(new Else()); + } + // end `if` statement (needed if gen.if was used only with condition) + endIf() { + return this._endBlockNode(If, Else); + } + _for(node, forBody) { + this._blockNode(node); + if (forBody) + this.code(forBody).endFor(); + return this; + } + // a generic `for` clause (or statement if `forBody` is passed) + for(iteration, forBody) { + return this._for(new ForLoop(iteration), forBody); + } + // `for` statement for a range of values + forRange(nameOrPrefix, from, to, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.let) { + const name = this._scope.toName(nameOrPrefix); + return this._for(new ForRange(varKind, name, from, to), () => forBody(name)); + } + // `for-of` statement (in es5 mode replace with a normal for loop) + forOf(nameOrPrefix, iterable, forBody, varKind = scope_1.varKinds.const) { + const name = this._scope.toName(nameOrPrefix); + if (this.opts.es5) { + const arr = iterable instanceof code_1.Name ? iterable : this.var("_arr", iterable); + return this.forRange("_i", 0, (0, code_1._)`${arr}.length`, (i) => { + this.var(name, (0, code_1._)`${arr}[${i}]`); + forBody(name); + }); + } + return this._for(new ForIter("of", varKind, name, iterable), () => forBody(name)); + } + // `for-in` statement. + // With option `ownProperties` replaced with a `for-of` loop for object keys + forIn(nameOrPrefix, obj, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.const) { + if (this.opts.ownProperties) { + return this.forOf(nameOrPrefix, (0, code_1._)`Object.keys(${obj})`, forBody); + } + const name = this._scope.toName(nameOrPrefix); + return this._for(new ForIter("in", varKind, name, obj), () => forBody(name)); + } + // end `for` loop + endFor() { + return this._endBlockNode(For); + } + // `label` statement + label(label) { + return this._leafNode(new Label(label)); + } + // `break` statement + break(label) { + return this._leafNode(new Break(label)); + } + // `return` statement + return(value) { + const node = new Return(); + this._blockNode(node); + this.code(value); + if (node.nodes.length !== 1) + throw new Error('CodeGen: "return" should have one node'); + return this._endBlockNode(Return); + } + // `try` statement + try(tryBody, catchCode, finallyCode) { + if (!catchCode && !finallyCode) + throw new Error('CodeGen: "try" without "catch" and "finally"'); + const node = new Try(); + this._blockNode(node); + this.code(tryBody); + if (catchCode) { + const error48 = this.name("e"); + this._currNode = node.catch = new Catch(error48); + catchCode(error48); + } + if (finallyCode) { + this._currNode = node.finally = new Finally(); + this.code(finallyCode); + } + return this._endBlockNode(Catch, Finally); + } + // `throw` statement + throw(error48) { + return this._leafNode(new Throw(error48)); + } + // start self-balancing block + block(body, nodeCount) { + this._blockStarts.push(this._nodes.length); + if (body) + this.code(body).endBlock(nodeCount); + return this; + } + // end the current self-balancing block + endBlock(nodeCount) { + const len = this._blockStarts.pop(); + if (len === void 0) + throw new Error("CodeGen: not in self-balancing block"); + const toClose = this._nodes.length - len; + if (toClose < 0 || nodeCount !== void 0 && toClose !== nodeCount) { + throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`); + } + this._nodes.length = len; + return this; + } + // `function` heading (or definition if funcBody is passed) + func(name, args = code_1.nil, async, funcBody) { + this._blockNode(new Func(name, args, async)); + if (funcBody) + this.code(funcBody).endFunc(); + return this; + } + // end function definition + endFunc() { + return this._endBlockNode(Func); + } + optimize(n10 = 1) { + while (n10-- > 0) { + this._root.optimizeNodes(); + this._root.optimizeNames(this._root.names, this._constants); + } + } + _leafNode(node) { + this._currNode.nodes.push(node); + return this; + } + _blockNode(node) { + this._currNode.nodes.push(node); + this._nodes.push(node); + } + _endBlockNode(N12, N22) { + const n10 = this._currNode; + if (n10 instanceof N12 || N22 && n10 instanceof N22) { + this._nodes.pop(); + return this; + } + throw new Error(`CodeGen: not in block "${N22 ? `${N12.kind}/${N22.kind}` : N12.kind}"`); + } + _elseNode(node) { + const n10 = this._currNode; + if (!(n10 instanceof If)) { + throw new Error('CodeGen: "else" without "if"'); + } + this._currNode = n10.else = node; + return this; + } + get _root() { + return this._nodes[0]; + } + get _currNode() { + const ns = this._nodes; + return ns[ns.length - 1]; + } + set _currNode(node) { + const ns = this._nodes; + ns[ns.length - 1] = node; + } + }; + exports.CodeGen = CodeGen; + function addNames(names, from) { + for (const n10 in from) + names[n10] = (names[n10] || 0) + (from[n10] || 0); + return names; + } + function addExprNames(names, from) { + return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names; + } + function optimizeExpr(expr, names, constants) { + if (expr instanceof code_1.Name) + return replaceName(expr); + if (!canOptimize(expr)) + return expr; + return new code_1._Code(expr._items.reduce((items, c) => { + if (c instanceof code_1.Name) + c = replaceName(c); + if (c instanceof code_1._Code) + items.push(...c._items); + else + items.push(c); + return items; + }, [])); + function replaceName(n10) { + const c = constants[n10.str]; + if (c === void 0 || names[n10.str] !== 1) + return n10; + delete names[n10.str]; + return c; + } + function canOptimize(e2) { + return e2 instanceof code_1._Code && e2._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== void 0); + } + } + function subtractNames(names, from) { + for (const n10 in from) + names[n10] = (names[n10] || 0) - (from[n10] || 0); + } + function not(x2) { + return typeof x2 == "boolean" || typeof x2 == "number" || x2 === null ? !x2 : (0, code_1._)`!${par(x2)}`; + } + exports.not = not; + var andCode = mappend(exports.operators.AND); + function and(...args) { + return args.reduce(andCode); + } + exports.and = and; + var orCode = mappend(exports.operators.OR); + function or(...args) { + return args.reduce(orCode); + } + exports.or = or; + function mappend(op) { + return (x2, y2) => x2 === code_1.nil ? y2 : y2 === code_1.nil ? x2 : (0, code_1._)`${par(x2)} ${op} ${par(y2)}`; + } + function par(x2) { + return x2 instanceof code_1.Name ? x2 : (0, code_1._)`(${x2})`; + } + } +}); + +// node_modules/ajv/dist/compile/util.js +var require_util = __commonJS({ + "node_modules/ajv/dist/compile/util.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = void 0; + var codegen_1 = require_codegen(); + var code_1 = require_code(); + function toHash(arr) { + const hash2 = {}; + for (const item of arr) + hash2[item] = true; + return hash2; + } + exports.toHash = toHash; + function alwaysValidSchema(it, schema) { + if (typeof schema == "boolean") + return schema; + if (Object.keys(schema).length === 0) + return true; + checkUnknownRules(it, schema); + return !schemaHasRules(schema, it.self.RULES.all); + } + exports.alwaysValidSchema = alwaysValidSchema; + function checkUnknownRules(it, schema = it.schema) { + const { opts, self: self2 } = it; + if (!opts.strictSchema) + return; + if (typeof schema === "boolean") + return; + const rules = self2.RULES.keywords; + for (const key in schema) { + if (!rules[key]) + checkStrictMode(it, `unknown keyword: "${key}"`); + } + } + exports.checkUnknownRules = checkUnknownRules; + function schemaHasRules(schema, rules) { + if (typeof schema == "boolean") + return !schema; + for (const key in schema) + if (rules[key]) + return true; + return false; + } + exports.schemaHasRules = schemaHasRules; + function schemaHasRulesButRef(schema, RULES) { + if (typeof schema == "boolean") + return !schema; + for (const key in schema) + if (key !== "$ref" && RULES.all[key]) + return true; + return false; + } + exports.schemaHasRulesButRef = schemaHasRulesButRef; + function schemaRefOrVal({ topSchemaRef, schemaPath }, schema, keyword, $data) { + if (!$data) { + if (typeof schema == "number" || typeof schema == "boolean") + return schema; + if (typeof schema == "string") + return (0, codegen_1._)`${schema}`; + } + return (0, codegen_1._)`${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`; + } + exports.schemaRefOrVal = schemaRefOrVal; + function unescapeFragment(str) { + return unescapeJsonPointer(decodeURIComponent(str)); + } + exports.unescapeFragment = unescapeFragment; + function escapeFragment(str) { + return encodeURIComponent(escapeJsonPointer(str)); + } + exports.escapeFragment = escapeFragment; + function escapeJsonPointer(str) { + if (typeof str == "number") + return `${str}`; + return str.replace(/~/g, "~0").replace(/\//g, "~1"); + } + exports.escapeJsonPointer = escapeJsonPointer; + function unescapeJsonPointer(str) { + return str.replace(/~1/g, "/").replace(/~0/g, "~"); + } + exports.unescapeJsonPointer = unescapeJsonPointer; + function eachItem(xs, f9) { + if (Array.isArray(xs)) { + for (const x2 of xs) + f9(x2); + } else { + f9(xs); + } + } + exports.eachItem = eachItem; + function makeMergeEvaluated({ mergeNames, mergeToName, mergeValues: mergeValues3, resultToName }) { + return (gen, from, to, toName) => { + const res = to === void 0 ? from : to instanceof codegen_1.Name ? (from instanceof codegen_1.Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to) : from instanceof codegen_1.Name ? (mergeToName(gen, to, from), from) : mergeValues3(from, to); + return toName === codegen_1.Name && !(res instanceof codegen_1.Name) ? resultToName(gen, res) : res; + }; + } + exports.mergeEvaluated = { + props: makeMergeEvaluated({ + mergeNames: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true && ${from} !== undefined`, () => { + gen.if((0, codegen_1._)`${from} === true`, () => gen.assign(to, true), () => gen.assign(to, (0, codegen_1._)`${to} || {}`).code((0, codegen_1._)`Object.assign(${to}, ${from})`)); + }), + mergeToName: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true`, () => { + if (from === true) { + gen.assign(to, true); + } else { + gen.assign(to, (0, codegen_1._)`${to} || {}`); + setEvaluated(gen, to, from); + } + }), + mergeValues: (from, to) => from === true ? true : { ...from, ...to }, + resultToName: evaluatedPropsToName + }), + items: makeMergeEvaluated({ + mergeNames: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true && ${from} !== undefined`, () => gen.assign(to, (0, codegen_1._)`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)), + mergeToName: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true`, () => gen.assign(to, from === true ? true : (0, codegen_1._)`${to} > ${from} ? ${to} : ${from}`)), + mergeValues: (from, to) => from === true ? true : Math.max(from, to), + resultToName: (gen, items) => gen.var("items", items) + }) + }; + function evaluatedPropsToName(gen, ps) { + if (ps === true) + return gen.var("props", true); + const props = gen.var("props", (0, codegen_1._)`{}`); + if (ps !== void 0) + setEvaluated(gen, props, ps); + return props; + } + exports.evaluatedPropsToName = evaluatedPropsToName; + function setEvaluated(gen, props, ps) { + Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._)`${props}${(0, codegen_1.getProperty)(p)}`, true)); + } + exports.setEvaluated = setEvaluated; + var snippets = {}; + function useFunc(gen, f9) { + return gen.scopeValue("func", { + ref: f9, + code: snippets[f9.code] || (snippets[f9.code] = new code_1._Code(f9.code)) + }); + } + exports.useFunc = useFunc; + var Type; + (function(Type2) { + Type2[Type2["Num"] = 0] = "Num"; + Type2[Type2["Str"] = 1] = "Str"; + })(Type || (exports.Type = Type = {})); + function getErrorPath(dataProp, dataPropType, jsPropertySyntax) { + if (dataProp instanceof codegen_1.Name) { + const isNumber = dataPropType === Type.Num; + return jsPropertySyntax ? isNumber ? (0, codegen_1._)`"[" + ${dataProp} + "]"` : (0, codegen_1._)`"['" + ${dataProp} + "']"` : isNumber ? (0, codegen_1._)`"/" + ${dataProp}` : (0, codegen_1._)`"/" + ${dataProp}.replace(/~/g, "~0").replace(/\\//g, "~1")`; + } + return jsPropertySyntax ? (0, codegen_1.getProperty)(dataProp).toString() : "/" + escapeJsonPointer(dataProp); + } + exports.getErrorPath = getErrorPath; + function checkStrictMode(it, msg, mode = it.opts.strictSchema) { + if (!mode) + return; + msg = `strict mode: ${msg}`; + if (mode === true) + throw new Error(msg); + it.self.logger.warn(msg); + } + exports.checkStrictMode = checkStrictMode; + } +}); + +// node_modules/ajv/dist/compile/names.js +var require_names = __commonJS({ + "node_modules/ajv/dist/compile/names.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var names = { + // validation function arguments + data: new codegen_1.Name("data"), + // data passed to validation function + // args passed from referencing schema + valCxt: new codegen_1.Name("valCxt"), + // validation/data context - should not be used directly, it is destructured to the names below + instancePath: new codegen_1.Name("instancePath"), + parentData: new codegen_1.Name("parentData"), + parentDataProperty: new codegen_1.Name("parentDataProperty"), + rootData: new codegen_1.Name("rootData"), + // root data - same as the data passed to the first/top validation function + dynamicAnchors: new codegen_1.Name("dynamicAnchors"), + // used to support recursiveRef and dynamicRef + // function scoped variables + vErrors: new codegen_1.Name("vErrors"), + // null or array of validation errors + errors: new codegen_1.Name("errors"), + // counter of validation errors + this: new codegen_1.Name("this"), + // "globals" + self: new codegen_1.Name("self"), + scope: new codegen_1.Name("scope"), + // JTD serialize/parse name for JSON string and position + json: new codegen_1.Name("json"), + jsonPos: new codegen_1.Name("jsonPos"), + jsonLen: new codegen_1.Name("jsonLen"), + jsonPart: new codegen_1.Name("jsonPart") + }; + exports.default = names; + } +}); + +// node_modules/ajv/dist/compile/errors.js +var require_errors = __commonJS({ + "node_modules/ajv/dist/compile/errors.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = void 0; + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var names_1 = require_names(); + exports.keywordError = { + message: ({ keyword }) => (0, codegen_1.str)`must pass "${keyword}" keyword validation` + }; + exports.keyword$DataError = { + message: ({ keyword, schemaType }) => schemaType ? (0, codegen_1.str)`"${keyword}" keyword must be ${schemaType} ($data)` : (0, codegen_1.str)`"${keyword}" keyword is invalid ($data)` + }; + function reportError(cxt, error48 = exports.keywordError, errorPaths, overrideAllErrors) { + const { it } = cxt; + const { gen, compositeRule, allErrors } = it; + const errObj = errorObjectCode(cxt, error48, errorPaths); + if (overrideAllErrors !== null && overrideAllErrors !== void 0 ? overrideAllErrors : compositeRule || allErrors) { + addError(gen, errObj); + } else { + returnErrors(it, (0, codegen_1._)`[${errObj}]`); + } + } + exports.reportError = reportError; + function reportExtraError(cxt, error48 = exports.keywordError, errorPaths) { + const { it } = cxt; + const { gen, compositeRule, allErrors } = it; + const errObj = errorObjectCode(cxt, error48, errorPaths); + addError(gen, errObj); + if (!(compositeRule || allErrors)) { + returnErrors(it, names_1.default.vErrors); + } + } + exports.reportExtraError = reportExtraError; + function resetErrorsCount(gen, errsCount) { + gen.assign(names_1.default.errors, errsCount); + gen.if((0, codegen_1._)`${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._)`${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null))); + } + exports.resetErrorsCount = resetErrorsCount; + function extendErrors({ gen, keyword, schemaValue, data, errsCount, it }) { + if (errsCount === void 0) + throw new Error("ajv implementation error"); + const err = gen.name("err"); + gen.forRange("i", errsCount, names_1.default.errors, (i) => { + gen.const(err, (0, codegen_1._)`${names_1.default.vErrors}[${i}]`); + gen.if((0, codegen_1._)`${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._)`${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath))); + gen.assign((0, codegen_1._)`${err}.schemaPath`, (0, codegen_1.str)`${it.errSchemaPath}/${keyword}`); + if (it.opts.verbose) { + gen.assign((0, codegen_1._)`${err}.schema`, schemaValue); + gen.assign((0, codegen_1._)`${err}.data`, data); + } + }); + } + exports.extendErrors = extendErrors; + function addError(gen, errObj) { + const err = gen.const("err", errObj); + gen.if((0, codegen_1._)`${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._)`[${err}]`), (0, codegen_1._)`${names_1.default.vErrors}.push(${err})`); + gen.code((0, codegen_1._)`${names_1.default.errors}++`); + } + function returnErrors(it, errs) { + const { gen, validateName, schemaEnv } = it; + if (schemaEnv.$async) { + gen.throw((0, codegen_1._)`new ${it.ValidationError}(${errs})`); + } else { + gen.assign((0, codegen_1._)`${validateName}.errors`, errs); + gen.return(false); + } + } + var E2 = { + keyword: new codegen_1.Name("keyword"), + schemaPath: new codegen_1.Name("schemaPath"), + // also used in JTD errors + params: new codegen_1.Name("params"), + propertyName: new codegen_1.Name("propertyName"), + message: new codegen_1.Name("message"), + schema: new codegen_1.Name("schema"), + parentSchema: new codegen_1.Name("parentSchema") + }; + function errorObjectCode(cxt, error48, errorPaths) { + const { createErrors } = cxt.it; + if (createErrors === false) + return (0, codegen_1._)`{}`; + return errorObject(cxt, error48, errorPaths); + } + function errorObject(cxt, error48, errorPaths = {}) { + const { gen, it } = cxt; + const keyValues = [ + errorInstancePath(it, errorPaths), + errorSchemaPath(cxt, errorPaths) + ]; + extraErrorProps(cxt, error48, keyValues); + return gen.object(...keyValues); + } + function errorInstancePath({ errorPath }, { instancePath }) { + const instPath = instancePath ? (0, codegen_1.str)`${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}` : errorPath; + return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)]; + } + function errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) { + let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str)`${errSchemaPath}/${keyword}`; + if (schemaPath) { + schPath = (0, codegen_1.str)`${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`; + } + return [E2.schemaPath, schPath]; + } + function extraErrorProps(cxt, { params, message }, keyValues) { + const { keyword, data, schemaValue, it } = cxt; + const { opts, propertyName, topSchemaRef, schemaPath } = it; + keyValues.push([E2.keyword, keyword], [E2.params, typeof params == "function" ? params(cxt) : params || (0, codegen_1._)`{}`]); + if (opts.messages) { + keyValues.push([E2.message, typeof message == "function" ? message(cxt) : message]); + } + if (opts.verbose) { + keyValues.push([E2.schema, schemaValue], [E2.parentSchema, (0, codegen_1._)`${topSchemaRef}${schemaPath}`], [names_1.default.data, data]); + } + if (propertyName) + keyValues.push([E2.propertyName, propertyName]); + } + } +}); + +// node_modules/ajv/dist/compile/validate/boolSchema.js +var require_boolSchema = __commonJS({ + "node_modules/ajv/dist/compile/validate/boolSchema.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.boolOrEmptySchema = exports.topBoolOrEmptySchema = void 0; + var errors_1 = require_errors(); + var codegen_1 = require_codegen(); + var names_1 = require_names(); + var boolError = { + message: "boolean schema is false" + }; + function topBoolOrEmptySchema(it) { + const { gen, schema, validateName } = it; + if (schema === false) { + falseSchemaError(it, false); + } else if (typeof schema == "object" && schema.$async === true) { + gen.return(names_1.default.data); + } else { + gen.assign((0, codegen_1._)`${validateName}.errors`, null); + gen.return(true); + } + } + exports.topBoolOrEmptySchema = topBoolOrEmptySchema; + function boolOrEmptySchema(it, valid) { + const { gen, schema } = it; + if (schema === false) { + gen.var(valid, false); + falseSchemaError(it); + } else { + gen.var(valid, true); + } + } + exports.boolOrEmptySchema = boolOrEmptySchema; + function falseSchemaError(it, overrideAllErrors) { + const { gen, data } = it; + const cxt = { + gen, + keyword: "false schema", + data, + schema: false, + schemaCode: false, + schemaValue: false, + params: {}, + it + }; + (0, errors_1.reportError)(cxt, boolError, void 0, overrideAllErrors); + } + } +}); + +// node_modules/ajv/dist/compile/rules.js +var require_rules = __commonJS({ + "node_modules/ajv/dist/compile/rules.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.getRules = exports.isJSONType = void 0; + var _jsonTypes = ["string", "number", "integer", "boolean", "null", "object", "array"]; + var jsonTypes = new Set(_jsonTypes); + function isJSONType(x2) { + return typeof x2 == "string" && jsonTypes.has(x2); + } + exports.isJSONType = isJSONType; + function getRules() { + const groups = { + number: { type: "number", rules: [] }, + string: { type: "string", rules: [] }, + array: { type: "array", rules: [] }, + object: { type: "object", rules: [] } + }; + return { + types: { ...groups, integer: true, boolean: true, null: true }, + rules: [{ rules: [] }, groups.number, groups.string, groups.array, groups.object], + post: { rules: [] }, + all: {}, + keywords: {} + }; + } + exports.getRules = getRules; + } +}); + +// node_modules/ajv/dist/compile/validate/applicability.js +var require_applicability = __commonJS({ + "node_modules/ajv/dist/compile/validate/applicability.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = void 0; + function schemaHasRulesForType({ schema, self: self2 }, type) { + const group = self2.RULES.types[type]; + return group && group !== true && shouldUseGroup(schema, group); + } + exports.schemaHasRulesForType = schemaHasRulesForType; + function shouldUseGroup(schema, group) { + return group.rules.some((rule) => shouldUseRule(schema, rule)); + } + exports.shouldUseGroup = shouldUseGroup; + function shouldUseRule(schema, rule) { + var _a5; + return schema[rule.keyword] !== void 0 || ((_a5 = rule.definition.implements) === null || _a5 === void 0 ? void 0 : _a5.some((kwd) => schema[kwd] !== void 0)); + } + exports.shouldUseRule = shouldUseRule; + } +}); + +// node_modules/ajv/dist/compile/validate/dataType.js +var require_dataType = __commonJS({ + "node_modules/ajv/dist/compile/validate/dataType.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = void 0; + var rules_1 = require_rules(); + var applicability_1 = require_applicability(); + var errors_1 = require_errors(); + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var DataType; + (function(DataType2) { + DataType2[DataType2["Correct"] = 0] = "Correct"; + DataType2[DataType2["Wrong"] = 1] = "Wrong"; + })(DataType || (exports.DataType = DataType = {})); + function getSchemaTypes(schema) { + const types = getJSONTypes(schema.type); + const hasNull = types.includes("null"); + if (hasNull) { + if (schema.nullable === false) + throw new Error("type: null contradicts nullable: false"); + } else { + if (!types.length && schema.nullable !== void 0) { + throw new Error('"nullable" cannot be used without "type"'); + } + if (schema.nullable === true) + types.push("null"); + } + return types; + } + exports.getSchemaTypes = getSchemaTypes; + function getJSONTypes(ts) { + const types = Array.isArray(ts) ? ts : ts ? [ts] : []; + if (types.every(rules_1.isJSONType)) + return types; + throw new Error("type must be JSONType or JSONType[]: " + types.join(",")); + } + exports.getJSONTypes = getJSONTypes; + function coerceAndCheckDataType(it, types) { + const { gen, data, opts } = it; + const coerceTo = coerceToTypes(types, opts.coerceTypes); + const checkTypes = types.length > 0 && !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0])); + if (checkTypes) { + const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong); + gen.if(wrongType, () => { + if (coerceTo.length) + coerceData(it, types, coerceTo); + else + reportTypeError(it); + }); + } + return checkTypes; + } + exports.coerceAndCheckDataType = coerceAndCheckDataType; + var COERCIBLE = /* @__PURE__ */ new Set(["string", "number", "integer", "boolean", "null"]); + function coerceToTypes(types, coerceTypes) { + return coerceTypes ? types.filter((t11) => COERCIBLE.has(t11) || coerceTypes === "array" && t11 === "array") : []; + } + function coerceData(it, types, coerceTo) { + const { gen, data, opts } = it; + const dataType = gen.let("dataType", (0, codegen_1._)`typeof ${data}`); + const coerced = gen.let("coerced", (0, codegen_1._)`undefined`); + if (opts.coerceTypes === "array") { + gen.if((0, codegen_1._)`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen.assign(data, (0, codegen_1._)`${data}[0]`).assign(dataType, (0, codegen_1._)`typeof ${data}`).if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))); + } + gen.if((0, codegen_1._)`${coerced} !== undefined`); + for (const t11 of coerceTo) { + if (COERCIBLE.has(t11) || t11 === "array" && opts.coerceTypes === "array") { + coerceSpecificType(t11); + } + } + gen.else(); + reportTypeError(it); + gen.endIf(); + gen.if((0, codegen_1._)`${coerced} !== undefined`, () => { + gen.assign(data, coerced); + assignParentData(it, coerced); + }); + function coerceSpecificType(t11) { + switch (t11) { + case "string": + gen.elseIf((0, codegen_1._)`${dataType} == "number" || ${dataType} == "boolean"`).assign(coerced, (0, codegen_1._)`"" + ${data}`).elseIf((0, codegen_1._)`${data} === null`).assign(coerced, (0, codegen_1._)`""`); + return; + case "number": + gen.elseIf((0, codegen_1._)`${dataType} == "boolean" || ${data} === null + || (${dataType} == "string" && ${data} && ${data} == +${data})`).assign(coerced, (0, codegen_1._)`+${data}`); + return; + case "integer": + gen.elseIf((0, codegen_1._)`${dataType} === "boolean" || ${data} === null + || (${dataType} === "string" && ${data} && ${data} == +${data} && !(${data} % 1))`).assign(coerced, (0, codegen_1._)`+${data}`); + return; + case "boolean": + gen.elseIf((0, codegen_1._)`${data} === "false" || ${data} === 0 || ${data} === null`).assign(coerced, false).elseIf((0, codegen_1._)`${data} === "true" || ${data} === 1`).assign(coerced, true); + return; + case "null": + gen.elseIf((0, codegen_1._)`${data} === "" || ${data} === 0 || ${data} === false`); + gen.assign(coerced, null); + return; + case "array": + gen.elseIf((0, codegen_1._)`${dataType} === "string" || ${dataType} === "number" + || ${dataType} === "boolean" || ${data} === null`).assign(coerced, (0, codegen_1._)`[${data}]`); + } + } + } + function assignParentData({ gen, parentData, parentDataProperty }, expr) { + gen.if((0, codegen_1._)`${parentData} !== undefined`, () => gen.assign((0, codegen_1._)`${parentData}[${parentDataProperty}]`, expr)); + } + function checkDataType(dataType, data, strictNums, correct = DataType.Correct) { + const EQ2 = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ; + let cond; + switch (dataType) { + case "null": + return (0, codegen_1._)`${data} ${EQ2} null`; + case "array": + cond = (0, codegen_1._)`Array.isArray(${data})`; + break; + case "object": + cond = (0, codegen_1._)`${data} && typeof ${data} == "object" && !Array.isArray(${data})`; + break; + case "integer": + cond = numCond((0, codegen_1._)`!(${data} % 1) && !isNaN(${data})`); + break; + case "number": + cond = numCond(); + break; + default: + return (0, codegen_1._)`typeof ${data} ${EQ2} ${dataType}`; + } + return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond); + function numCond(_cond = codegen_1.nil) { + return (0, codegen_1.and)((0, codegen_1._)`typeof ${data} == "number"`, _cond, strictNums ? (0, codegen_1._)`isFinite(${data})` : codegen_1.nil); + } + } + exports.checkDataType = checkDataType; + function checkDataTypes(dataTypes, data, strictNums, correct) { + if (dataTypes.length === 1) { + return checkDataType(dataTypes[0], data, strictNums, correct); + } + let cond; + const types = (0, util_1.toHash)(dataTypes); + if (types.array && types.object) { + const notObj = (0, codegen_1._)`typeof ${data} != "object"`; + cond = types.null ? notObj : (0, codegen_1._)`!${data} || ${notObj}`; + delete types.null; + delete types.array; + delete types.object; + } else { + cond = codegen_1.nil; + } + if (types.number) + delete types.integer; + for (const t11 in types) + cond = (0, codegen_1.and)(cond, checkDataType(t11, data, strictNums, correct)); + return cond; + } + exports.checkDataTypes = checkDataTypes; + var typeError = { + message: ({ schema }) => `must be ${schema}`, + params: ({ schema, schemaValue }) => typeof schema == "string" ? (0, codegen_1._)`{type: ${schema}}` : (0, codegen_1._)`{type: ${schemaValue}}` + }; + function reportTypeError(it) { + const cxt = getTypeErrorContext(it); + (0, errors_1.reportError)(cxt, typeError); + } + exports.reportTypeError = reportTypeError; + function getTypeErrorContext(it) { + const { gen, data, schema } = it; + const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, "type"); + return { + gen, + keyword: "type", + data, + schema: schema.type, + schemaCode, + schemaValue: schemaCode, + parentSchema: schema, + params: {}, + it + }; + } + } +}); + +// node_modules/ajv/dist/compile/validate/defaults.js +var require_defaults = __commonJS({ + "node_modules/ajv/dist/compile/validate/defaults.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.assignDefaults = void 0; + var codegen_1 = require_codegen(); + var util_1 = require_util(); + function assignDefaults(it, ty) { + const { properties, items } = it.schema; + if (ty === "object" && properties) { + for (const key in properties) { + assignDefault(it, key, properties[key].default); + } + } else if (ty === "array" && Array.isArray(items)) { + items.forEach((sch, i) => assignDefault(it, i, sch.default)); + } + } + exports.assignDefaults = assignDefaults; + function assignDefault(it, prop, defaultValue) { + const { gen, compositeRule, data, opts } = it; + if (defaultValue === void 0) + return; + const childData = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(prop)}`; + if (compositeRule) { + (0, util_1.checkStrictMode)(it, `default is ignored for: ${childData}`); + return; + } + let condition = (0, codegen_1._)`${childData} === undefined`; + if (opts.useDefaults === "empty") { + condition = (0, codegen_1._)`${condition} || ${childData} === null || ${childData} === ""`; + } + gen.if(condition, (0, codegen_1._)`${childData} = ${(0, codegen_1.stringify)(defaultValue)}`); + } + } +}); + +// node_modules/ajv/dist/vocabularies/code.js +var require_code2 = __commonJS({ + "node_modules/ajv/dist/vocabularies/code.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = void 0; + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var names_1 = require_names(); + var util_2 = require_util(); + function checkReportMissingProp(cxt, prop) { + const { gen, data, it } = cxt; + gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => { + cxt.setParams({ missingProperty: (0, codegen_1._)`${prop}` }, true); + cxt.error(); + }); + } + exports.checkReportMissingProp = checkReportMissingProp; + function checkMissingProp({ gen, data, it: { opts } }, properties, missing) { + return (0, codegen_1.or)(...properties.map((prop) => (0, codegen_1.and)(noPropertyInData(gen, data, prop, opts.ownProperties), (0, codegen_1._)`${missing} = ${prop}`))); + } + exports.checkMissingProp = checkMissingProp; + function reportMissingProp(cxt, missing) { + cxt.setParams({ missingProperty: missing }, true); + cxt.error(); + } + exports.reportMissingProp = reportMissingProp; + function hasPropFunc(gen) { + return gen.scopeValue("func", { + // eslint-disable-next-line @typescript-eslint/unbound-method + ref: Object.prototype.hasOwnProperty, + code: (0, codegen_1._)`Object.prototype.hasOwnProperty` + }); + } + exports.hasPropFunc = hasPropFunc; + function isOwnProperty(gen, data, property) { + return (0, codegen_1._)`${hasPropFunc(gen)}.call(${data}, ${property})`; + } + exports.isOwnProperty = isOwnProperty; + function propertyInData(gen, data, property, ownProperties) { + const cond = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(property)} !== undefined`; + return ownProperties ? (0, codegen_1._)`${cond} && ${isOwnProperty(gen, data, property)}` : cond; + } + exports.propertyInData = propertyInData; + function noPropertyInData(gen, data, property, ownProperties) { + const cond = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(property)} === undefined`; + return ownProperties ? (0, codegen_1.or)(cond, (0, codegen_1.not)(isOwnProperty(gen, data, property))) : cond; + } + exports.noPropertyInData = noPropertyInData; + function allSchemaProperties(schemaMap) { + return schemaMap ? Object.keys(schemaMap).filter((p) => p !== "__proto__") : []; + } + exports.allSchemaProperties = allSchemaProperties; + function schemaProperties(it, schemaMap) { + return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p])); + } + exports.schemaProperties = schemaProperties; + function callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) { + const dataAndSchema = passSchema ? (0, codegen_1._)`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data; + const valCxt = [ + [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)], + [names_1.default.parentData, it.parentData], + [names_1.default.parentDataProperty, it.parentDataProperty], + [names_1.default.rootData, names_1.default.rootData] + ]; + if (it.opts.dynamicRef) + valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]); + const args = (0, codegen_1._)`${dataAndSchema}, ${gen.object(...valCxt)}`; + return context !== codegen_1.nil ? (0, codegen_1._)`${func}.call(${context}, ${args})` : (0, codegen_1._)`${func}(${args})`; + } + exports.callValidateCode = callValidateCode; + var newRegExp = (0, codegen_1._)`new RegExp`; + function usePattern({ gen, it: { opts } }, pattern) { + const u = opts.unicodeRegExp ? "u" : ""; + const { regExp } = opts.code; + const rx = regExp(pattern, u); + return gen.scopeValue("pattern", { + key: rx.toString(), + ref: rx, + code: (0, codegen_1._)`${regExp.code === "new RegExp" ? newRegExp : (0, util_2.useFunc)(gen, regExp)}(${pattern}, ${u})` + }); + } + exports.usePattern = usePattern; + function validateArray(cxt) { + const { gen, data, keyword, it } = cxt; + const valid = gen.name("valid"); + if (it.allErrors) { + const validArr = gen.let("valid", true); + validateItems(() => gen.assign(validArr, false)); + return validArr; + } + gen.var(valid, true); + validateItems(() => gen.break()); + return valid; + function validateItems(notValid) { + const len = gen.const("len", (0, codegen_1._)`${data}.length`); + gen.forRange("i", 0, len, (i) => { + cxt.subschema({ + keyword, + dataProp: i, + dataPropType: util_1.Type.Num + }, valid); + gen.if((0, codegen_1.not)(valid), notValid); + }); + } + } + exports.validateArray = validateArray; + function validateUnion(cxt) { + const { gen, schema, keyword, it } = cxt; + if (!Array.isArray(schema)) + throw new Error("ajv implementation error"); + const alwaysValid = schema.some((sch) => (0, util_1.alwaysValidSchema)(it, sch)); + if (alwaysValid && !it.opts.unevaluated) + return; + const valid = gen.let("valid", false); + const schValid = gen.name("_valid"); + gen.block(() => schema.forEach((_sch, i) => { + const schCxt = cxt.subschema({ + keyword, + schemaProp: i, + compositeRule: true + }, schValid); + gen.assign(valid, (0, codegen_1._)`${valid} || ${schValid}`); + const merged = cxt.mergeValidEvaluated(schCxt, schValid); + if (!merged) + gen.if((0, codegen_1.not)(valid)); + })); + cxt.result(valid, () => cxt.reset(), () => cxt.error(true)); + } + exports.validateUnion = validateUnion; + } +}); + +// node_modules/ajv/dist/compile/validate/keyword.js +var require_keyword = __commonJS({ + "node_modules/ajv/dist/compile/validate/keyword.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = void 0; + var codegen_1 = require_codegen(); + var names_1 = require_names(); + var code_1 = require_code2(); + var errors_1 = require_errors(); + function macroKeywordCode(cxt, def) { + const { gen, keyword, schema, parentSchema, it } = cxt; + const macroSchema = def.macro.call(it.self, schema, parentSchema, it); + const schemaRef = useKeyword(gen, keyword, macroSchema); + if (it.opts.validateSchema !== false) + it.self.validateSchema(macroSchema, true); + const valid = gen.name("valid"); + cxt.subschema({ + schema: macroSchema, + schemaPath: codegen_1.nil, + errSchemaPath: `${it.errSchemaPath}/${keyword}`, + topSchemaRef: schemaRef, + compositeRule: true + }, valid); + cxt.pass(valid, () => cxt.error(true)); + } + exports.macroKeywordCode = macroKeywordCode; + function funcKeywordCode(cxt, def) { + var _a5; + const { gen, keyword, schema, parentSchema, $data, it } = cxt; + checkAsyncKeyword(it, def); + const validate = !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate; + const validateRef = useKeyword(gen, keyword, validate); + const valid = gen.let("valid"); + cxt.block$data(valid, validateKeyword); + cxt.ok((_a5 = def.valid) !== null && _a5 !== void 0 ? _a5 : valid); + function validateKeyword() { + if (def.errors === false) { + assignValid(); + if (def.modifying) + modifyData(cxt); + reportErrs(() => cxt.error()); + } else { + const ruleErrs = def.async ? validateAsync() : validateSync(); + if (def.modifying) + modifyData(cxt); + reportErrs(() => addErrs(cxt, ruleErrs)); + } + } + function validateAsync() { + const ruleErrs = gen.let("ruleErrs", null); + gen.try(() => assignValid((0, codegen_1._)`await `), (e2) => gen.assign(valid, false).if((0, codegen_1._)`${e2} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1._)`${e2}.errors`), () => gen.throw(e2))); + return ruleErrs; + } + function validateSync() { + const validateErrs = (0, codegen_1._)`${validateRef}.errors`; + gen.assign(validateErrs, null); + assignValid(codegen_1.nil); + return validateErrs; + } + function assignValid(_await = def.async ? (0, codegen_1._)`await ` : codegen_1.nil) { + const passCxt = it.opts.passContext ? names_1.default.this : names_1.default.self; + const passSchema = !("compile" in def && !$data || def.schema === false); + gen.assign(valid, (0, codegen_1._)`${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying); + } + function reportErrs(errors) { + var _a6; + gen.if((0, codegen_1.not)((_a6 = def.valid) !== null && _a6 !== void 0 ? _a6 : valid), errors); + } + } + exports.funcKeywordCode = funcKeywordCode; + function modifyData(cxt) { + const { gen, data, it } = cxt; + gen.if(it.parentData, () => gen.assign(data, (0, codegen_1._)`${it.parentData}[${it.parentDataProperty}]`)); + } + function addErrs(cxt, errs) { + const { gen } = cxt; + gen.if((0, codegen_1._)`Array.isArray(${errs})`, () => { + gen.assign(names_1.default.vErrors, (0, codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`).assign(names_1.default.errors, (0, codegen_1._)`${names_1.default.vErrors}.length`); + (0, errors_1.extendErrors)(cxt); + }, () => cxt.error()); + } + function checkAsyncKeyword({ schemaEnv }, def) { + if (def.async && !schemaEnv.$async) + throw new Error("async keyword in sync schema"); + } + function useKeyword(gen, keyword, result) { + if (result === void 0) + throw new Error(`keyword "${keyword}" failed to compile`); + return gen.scopeValue("keyword", typeof result == "function" ? { ref: result } : { ref: result, code: (0, codegen_1.stringify)(result) }); + } + function validSchemaType(schema, schemaType, allowUndefined = false) { + return !schemaType.length || schemaType.some((st) => st === "array" ? Array.isArray(schema) : st === "object" ? schema && typeof schema == "object" && !Array.isArray(schema) : typeof schema == st || allowUndefined && typeof schema == "undefined"); + } + exports.validSchemaType = validSchemaType; + function validateKeywordUsage({ schema, opts, self: self2, errSchemaPath }, def, keyword) { + if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) { + throw new Error("ajv implementation error"); + } + const deps = def.dependencies; + if (deps === null || deps === void 0 ? void 0 : deps.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) { + throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(",")}`); + } + if (def.validateSchema) { + const valid = def.validateSchema(schema[keyword]); + if (!valid) { + const msg = `keyword "${keyword}" value is invalid at path "${errSchemaPath}": ` + self2.errorsText(def.validateSchema.errors); + if (opts.validateSchema === "log") + self2.logger.error(msg); + else + throw new Error(msg); + } + } + } + exports.validateKeywordUsage = validateKeywordUsage; + } +}); + +// node_modules/ajv/dist/compile/validate/subschema.js +var require_subschema = __commonJS({ + "node_modules/ajv/dist/compile/validate/subschema.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = void 0; + var codegen_1 = require_codegen(); + var util_1 = require_util(); + function getSubschema(it, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }) { + if (keyword !== void 0 && schema !== void 0) { + throw new Error('both "keyword" and "schema" passed, only one allowed'); + } + if (keyword !== void 0) { + const sch = it.schema[keyword]; + return schemaProp === void 0 ? { + schema: sch, + schemaPath: (0, codegen_1._)`${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}`, + errSchemaPath: `${it.errSchemaPath}/${keyword}` + } : { + schema: sch[schemaProp], + schemaPath: (0, codegen_1._)`${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}${(0, codegen_1.getProperty)(schemaProp)}`, + errSchemaPath: `${it.errSchemaPath}/${keyword}/${(0, util_1.escapeFragment)(schemaProp)}` + }; + } + if (schema !== void 0) { + if (schemaPath === void 0 || errSchemaPath === void 0 || topSchemaRef === void 0) { + throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"'); + } + return { + schema, + schemaPath, + topSchemaRef, + errSchemaPath + }; + } + throw new Error('either "keyword" or "schema" must be passed'); + } + exports.getSubschema = getSubschema; + function extendSubschemaData(subschema, it, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }) { + if (data !== void 0 && dataProp !== void 0) { + throw new Error('both "data" and "dataProp" passed, only one allowed'); + } + const { gen } = it; + if (dataProp !== void 0) { + const { errorPath, dataPathArr, opts } = it; + const nextData = gen.let("data", (0, codegen_1._)`${it.data}${(0, codegen_1.getProperty)(dataProp)}`, true); + dataContextProps(nextData); + subschema.errorPath = (0, codegen_1.str)`${errorPath}${(0, util_1.getErrorPath)(dataProp, dpType, opts.jsPropertySyntax)}`; + subschema.parentDataProperty = (0, codegen_1._)`${dataProp}`; + subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]; + } + if (data !== void 0) { + const nextData = data instanceof codegen_1.Name ? data : gen.let("data", data, true); + dataContextProps(nextData); + if (propertyName !== void 0) + subschema.propertyName = propertyName; + } + if (dataTypes) + subschema.dataTypes = dataTypes; + function dataContextProps(_nextData) { + subschema.data = _nextData; + subschema.dataLevel = it.dataLevel + 1; + subschema.dataTypes = []; + it.definedProperties = /* @__PURE__ */ new Set(); + subschema.parentData = it.data; + subschema.dataNames = [...it.dataNames, _nextData]; + } + } + exports.extendSubschemaData = extendSubschemaData; + function extendSubschemaMode(subschema, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }) { + if (compositeRule !== void 0) + subschema.compositeRule = compositeRule; + if (createErrors !== void 0) + subschema.createErrors = createErrors; + if (allErrors !== void 0) + subschema.allErrors = allErrors; + subschema.jtdDiscriminator = jtdDiscriminator; + subschema.jtdMetadata = jtdMetadata; + } + exports.extendSubschemaMode = extendSubschemaMode; + } +}); + +// node_modules/fast-deep-equal/index.js +var require_fast_deep_equal = __commonJS({ + "node_modules/fast-deep-equal/index.js"(exports, module2) { + "use strict"; + module2.exports = function equal(a, b2) { + if (a === b2) return true; + if (a && b2 && typeof a == "object" && typeof b2 == "object") { + if (a.constructor !== b2.constructor) return false; + var length, i, keys; + if (Array.isArray(a)) { + length = a.length; + if (length != b2.length) return false; + for (i = length; i-- !== 0; ) + if (!equal(a[i], b2[i])) return false; + return true; + } + if (a.constructor === RegExp) return a.source === b2.source && a.flags === b2.flags; + if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b2.valueOf(); + if (a.toString !== Object.prototype.toString) return a.toString() === b2.toString(); + keys = Object.keys(a); + length = keys.length; + if (length !== Object.keys(b2).length) return false; + for (i = length; i-- !== 0; ) + if (!Object.prototype.hasOwnProperty.call(b2, keys[i])) return false; + for (i = length; i-- !== 0; ) { + var key = keys[i]; + if (!equal(a[key], b2[key])) return false; + } + return true; + } + return a !== a && b2 !== b2; + }; + } +}); + +// node_modules/json-schema-traverse/index.js +var require_json_schema_traverse = __commonJS({ + "node_modules/json-schema-traverse/index.js"(exports, module2) { + "use strict"; + var traverse = module2.exports = function(schema, opts, cb2) { + if (typeof opts == "function") { + cb2 = opts; + opts = {}; + } + cb2 = opts.cb || cb2; + var pre = typeof cb2 == "function" ? cb2 : cb2.pre || function() { + }; + var post = cb2.post || function() { + }; + _traverse(opts, pre, post, schema, "", schema); + }; + traverse.keywords = { + additionalItems: true, + items: true, + contains: true, + additionalProperties: true, + propertyNames: true, + not: true, + if: true, + then: true, + else: true + }; + traverse.arrayKeywords = { + items: true, + allOf: true, + anyOf: true, + oneOf: true + }; + traverse.propsKeywords = { + $defs: true, + definitions: true, + properties: true, + patternProperties: true, + dependencies: true + }; + traverse.skipKeywords = { + default: true, + enum: true, + const: true, + required: true, + maximum: true, + minimum: true, + exclusiveMaximum: true, + exclusiveMinimum: true, + multipleOf: true, + maxLength: true, + minLength: true, + pattern: true, + format: true, + maxItems: true, + minItems: true, + uniqueItems: true, + maxProperties: true, + minProperties: true + }; + function _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { + if (schema && typeof schema == "object" && !Array.isArray(schema)) { + pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); + for (var key in schema) { + var sch = schema[key]; + if (Array.isArray(sch)) { + if (key in traverse.arrayKeywords) { + for (var i = 0; i < sch.length; i++) + _traverse(opts, pre, post, sch[i], jsonPtr + "/" + key + "/" + i, rootSchema, jsonPtr, key, schema, i); + } + } else if (key in traverse.propsKeywords) { + if (sch && typeof sch == "object") { + for (var prop in sch) + _traverse(opts, pre, post, sch[prop], jsonPtr + "/" + key + "/" + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop); + } + } else if (key in traverse.keywords || opts.allKeys && !(key in traverse.skipKeywords)) { + _traverse(opts, pre, post, sch, jsonPtr + "/" + key, rootSchema, jsonPtr, key, schema); + } + } + post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); + } + } + function escapeJsonPtr(str) { + return str.replace(/~/g, "~0").replace(/\//g, "~1"); + } + } +}); + +// node_modules/ajv/dist/compile/resolve.js +var require_resolve = __commonJS({ + "node_modules/ajv/dist/compile/resolve.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = void 0; + var util_1 = require_util(); + var equal = require_fast_deep_equal(); + var traverse = require_json_schema_traverse(); + var SIMPLE_INLINED = /* @__PURE__ */ new Set([ + "type", + "format", + "pattern", + "maxLength", + "minLength", + "maxProperties", + "minProperties", + "maxItems", + "minItems", + "maximum", + "minimum", + "uniqueItems", + "multipleOf", + "required", + "enum", + "const" + ]); + function inlineRef(schema, limit = true) { + if (typeof schema == "boolean") + return true; + if (limit === true) + return !hasRef(schema); + if (!limit) + return false; + return countKeys(schema) <= limit; + } + exports.inlineRef = inlineRef; + var REF_KEYWORDS = /* @__PURE__ */ new Set([ + "$ref", + "$recursiveRef", + "$recursiveAnchor", + "$dynamicRef", + "$dynamicAnchor" + ]); + function hasRef(schema) { + for (const key in schema) { + if (REF_KEYWORDS.has(key)) + return true; + const sch = schema[key]; + if (Array.isArray(sch) && sch.some(hasRef)) + return true; + if (typeof sch == "object" && hasRef(sch)) + return true; + } + return false; + } + function countKeys(schema) { + let count = 0; + for (const key in schema) { + if (key === "$ref") + return Infinity; + count++; + if (SIMPLE_INLINED.has(key)) + continue; + if (typeof schema[key] == "object") { + (0, util_1.eachItem)(schema[key], (sch) => count += countKeys(sch)); + } + if (count === Infinity) + return Infinity; + } + return count; + } + function getFullPath(resolver, id = "", normalize3) { + if (normalize3 !== false) + id = normalizeId(id); + const p = resolver.parse(id); + return _getFullPath(resolver, p); + } + exports.getFullPath = getFullPath; + function _getFullPath(resolver, p) { + const serialized = resolver.serialize(p); + return serialized.split("#")[0] + "#"; + } + exports._getFullPath = _getFullPath; + var TRAILING_SLASH_HASH = /#\/?$/; + function normalizeId(id) { + return id ? id.replace(TRAILING_SLASH_HASH, "") : ""; + } + exports.normalizeId = normalizeId; + function resolveUrl(resolver, baseId, id) { + id = normalizeId(id); + return resolver.resolve(baseId, id); + } + exports.resolveUrl = resolveUrl; + var ANCHOR = /^[a-z_][-a-z0-9._]*$/i; + function getSchemaRefs(schema, baseId) { + if (typeof schema == "boolean") + return {}; + const { schemaId, uriResolver } = this.opts; + const schId = normalizeId(schema[schemaId] || baseId); + const baseIds = { "": schId }; + const pathPrefix = getFullPath(uriResolver, schId, false); + const localRefs = {}; + const schemaRefs = /* @__PURE__ */ new Set(); + traverse(schema, { allKeys: true }, (sch, jsonPtr, _2, parentJsonPtr) => { + if (parentJsonPtr === void 0) + return; + const fullPath = pathPrefix + jsonPtr; + let innerBaseId = baseIds[parentJsonPtr]; + if (typeof sch[schemaId] == "string") + innerBaseId = addRef.call(this, sch[schemaId]); + addAnchor.call(this, sch.$anchor); + addAnchor.call(this, sch.$dynamicAnchor); + baseIds[jsonPtr] = innerBaseId; + function addRef(ref) { + const _resolve = this.opts.uriResolver.resolve; + ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref); + if (schemaRefs.has(ref)) + throw ambiguos(ref); + schemaRefs.add(ref); + let schOrRef = this.refs[ref]; + if (typeof schOrRef == "string") + schOrRef = this.refs[schOrRef]; + if (typeof schOrRef == "object") { + checkAmbiguosRef(sch, schOrRef.schema, ref); + } else if (ref !== normalizeId(fullPath)) { + if (ref[0] === "#") { + checkAmbiguosRef(sch, localRefs[ref], ref); + localRefs[ref] = sch; + } else { + this.refs[ref] = fullPath; + } + } + return ref; + } + function addAnchor(anchor) { + if (typeof anchor == "string") { + if (!ANCHOR.test(anchor)) + throw new Error(`invalid anchor "${anchor}"`); + addRef.call(this, `#${anchor}`); + } + } + }); + return localRefs; + function checkAmbiguosRef(sch1, sch2, ref) { + if (sch2 !== void 0 && !equal(sch1, sch2)) + throw ambiguos(ref); + } + function ambiguos(ref) { + return new Error(`reference "${ref}" resolves to more than one schema`); + } + } + exports.getSchemaRefs = getSchemaRefs; + } +}); + +// node_modules/ajv/dist/compile/validate/index.js +var require_validate = __commonJS({ + "node_modules/ajv/dist/compile/validate/index.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.getData = exports.KeywordCxt = exports.validateFunctionCode = void 0; + var boolSchema_1 = require_boolSchema(); + var dataType_1 = require_dataType(); + var applicability_1 = require_applicability(); + var dataType_2 = require_dataType(); + var defaults_1 = require_defaults(); + var keyword_1 = require_keyword(); + var subschema_1 = require_subschema(); + var codegen_1 = require_codegen(); + var names_1 = require_names(); + var resolve_1 = require_resolve(); + var util_1 = require_util(); + var errors_1 = require_errors(); + function validateFunctionCode(it) { + if (isSchemaObj(it)) { + checkKeywords(it); + if (schemaCxtHasRules(it)) { + topSchemaObjCode(it); + return; + } + } + validateFunction(it, () => (0, boolSchema_1.topBoolOrEmptySchema)(it)); + } + exports.validateFunctionCode = validateFunctionCode; + function validateFunction({ gen, validateName, schema, schemaEnv, opts }, body) { + if (opts.code.es5) { + gen.func(validateName, (0, codegen_1._)`${names_1.default.data}, ${names_1.default.valCxt}`, schemaEnv.$async, () => { + gen.code((0, codegen_1._)`"use strict"; ${funcSourceUrl(schema, opts)}`); + destructureValCxtES5(gen, opts); + gen.code(body); + }); + } else { + gen.func(validateName, (0, codegen_1._)`${names_1.default.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () => gen.code(funcSourceUrl(schema, opts)).code(body)); + } + } + function destructureValCxt(opts) { + return (0, codegen_1._)`{${names_1.default.instancePath}="", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef ? (0, codegen_1._)`, ${names_1.default.dynamicAnchors}={}` : codegen_1.nil}}={}`; + } + function destructureValCxtES5(gen, opts) { + gen.if(names_1.default.valCxt, () => { + gen.var(names_1.default.instancePath, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.instancePath}`); + gen.var(names_1.default.parentData, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.parentData}`); + gen.var(names_1.default.parentDataProperty, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.parentDataProperty}`); + gen.var(names_1.default.rootData, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.rootData}`); + if (opts.dynamicRef) + gen.var(names_1.default.dynamicAnchors, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`); + }, () => { + gen.var(names_1.default.instancePath, (0, codegen_1._)`""`); + gen.var(names_1.default.parentData, (0, codegen_1._)`undefined`); + gen.var(names_1.default.parentDataProperty, (0, codegen_1._)`undefined`); + gen.var(names_1.default.rootData, names_1.default.data); + if (opts.dynamicRef) + gen.var(names_1.default.dynamicAnchors, (0, codegen_1._)`{}`); + }); + } + function topSchemaObjCode(it) { + const { schema, opts, gen } = it; + validateFunction(it, () => { + if (opts.$comment && schema.$comment) + commentKeyword(it); + checkNoDefault(it); + gen.let(names_1.default.vErrors, null); + gen.let(names_1.default.errors, 0); + if (opts.unevaluated) + resetEvaluated(it); + typeAndKeywords(it); + returnResults(it); + }); + return; + } + function resetEvaluated(it) { + const { gen, validateName } = it; + it.evaluated = gen.const("evaluated", (0, codegen_1._)`${validateName}.evaluated`); + gen.if((0, codegen_1._)`${it.evaluated}.dynamicProps`, () => gen.assign((0, codegen_1._)`${it.evaluated}.props`, (0, codegen_1._)`undefined`)); + gen.if((0, codegen_1._)`${it.evaluated}.dynamicItems`, () => gen.assign((0, codegen_1._)`${it.evaluated}.items`, (0, codegen_1._)`undefined`)); + } + function funcSourceUrl(schema, opts) { + const schId = typeof schema == "object" && schema[opts.schemaId]; + return schId && (opts.code.source || opts.code.process) ? (0, codegen_1._)`/*# sourceURL=${schId} */` : codegen_1.nil; + } + function subschemaCode(it, valid) { + if (isSchemaObj(it)) { + checkKeywords(it); + if (schemaCxtHasRules(it)) { + subSchemaObjCode(it, valid); + return; + } + } + (0, boolSchema_1.boolOrEmptySchema)(it, valid); + } + function schemaCxtHasRules({ schema, self: self2 }) { + if (typeof schema == "boolean") + return !schema; + for (const key in schema) + if (self2.RULES.all[key]) + return true; + return false; + } + function isSchemaObj(it) { + return typeof it.schema != "boolean"; + } + function subSchemaObjCode(it, valid) { + const { schema, gen, opts } = it; + if (opts.$comment && schema.$comment) + commentKeyword(it); + updateContext(it); + checkAsyncSchema(it); + const errsCount = gen.const("_errs", names_1.default.errors); + typeAndKeywords(it, errsCount); + gen.var(valid, (0, codegen_1._)`${errsCount} === ${names_1.default.errors}`); + } + function checkKeywords(it) { + (0, util_1.checkUnknownRules)(it); + checkRefsAndKeywords(it); + } + function typeAndKeywords(it, errsCount) { + if (it.opts.jtd) + return schemaKeywords(it, [], false, errsCount); + const types = (0, dataType_1.getSchemaTypes)(it.schema); + const checkedTypes = (0, dataType_1.coerceAndCheckDataType)(it, types); + schemaKeywords(it, types, !checkedTypes, errsCount); + } + function checkRefsAndKeywords(it) { + const { schema, errSchemaPath, opts, self: self2 } = it; + if (schema.$ref && opts.ignoreKeywordsWithRef && (0, util_1.schemaHasRulesButRef)(schema, self2.RULES)) { + self2.logger.warn(`$ref: keywords ignored in schema at path "${errSchemaPath}"`); + } + } + function checkNoDefault(it) { + const { schema, opts } = it; + if (schema.default !== void 0 && opts.useDefaults && opts.strictSchema) { + (0, util_1.checkStrictMode)(it, "default is ignored in the schema root"); + } + } + function updateContext(it) { + const schId = it.schema[it.opts.schemaId]; + if (schId) + it.baseId = (0, resolve_1.resolveUrl)(it.opts.uriResolver, it.baseId, schId); + } + function checkAsyncSchema(it) { + if (it.schema.$async && !it.schemaEnv.$async) + throw new Error("async schema in sync schema"); + } + function commentKeyword({ gen, schemaEnv, schema, errSchemaPath, opts }) { + const msg = schema.$comment; + if (opts.$comment === true) { + gen.code((0, codegen_1._)`${names_1.default.self}.logger.log(${msg})`); + } else if (typeof opts.$comment == "function") { + const schemaPath = (0, codegen_1.str)`${errSchemaPath}/$comment`; + const rootName = gen.scopeValue("root", { ref: schemaEnv.root }); + gen.code((0, codegen_1._)`${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`); + } + } + function returnResults(it) { + const { gen, schemaEnv, validateName, ValidationError, opts } = it; + if (schemaEnv.$async) { + gen.if((0, codegen_1._)`${names_1.default.errors} === 0`, () => gen.return(names_1.default.data), () => gen.throw((0, codegen_1._)`new ${ValidationError}(${names_1.default.vErrors})`)); + } else { + gen.assign((0, codegen_1._)`${validateName}.errors`, names_1.default.vErrors); + if (opts.unevaluated) + assignEvaluated(it); + gen.return((0, codegen_1._)`${names_1.default.errors} === 0`); + } + } + function assignEvaluated({ gen, evaluated, props, items }) { + if (props instanceof codegen_1.Name) + gen.assign((0, codegen_1._)`${evaluated}.props`, props); + if (items instanceof codegen_1.Name) + gen.assign((0, codegen_1._)`${evaluated}.items`, items); + } + function schemaKeywords(it, types, typeErrors, errsCount) { + const { gen, schema, data, allErrors, opts, self: self2 } = it; + const { RULES } = self2; + if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES))) { + gen.block(() => keywordCode(it, "$ref", RULES.all.$ref.definition)); + return; + } + if (!opts.jtd) + checkStrictTypes(it, types); + gen.block(() => { + for (const group of RULES.rules) + groupKeywords(group); + groupKeywords(RULES.post); + }); + function groupKeywords(group) { + if (!(0, applicability_1.shouldUseGroup)(schema, group)) + return; + if (group.type) { + gen.if((0, dataType_2.checkDataType)(group.type, data, opts.strictNumbers)); + iterateKeywords(it, group); + if (types.length === 1 && types[0] === group.type && typeErrors) { + gen.else(); + (0, dataType_2.reportTypeError)(it); + } + gen.endIf(); + } else { + iterateKeywords(it, group); + } + if (!allErrors) + gen.if((0, codegen_1._)`${names_1.default.errors} === ${errsCount || 0}`); + } + } + function iterateKeywords(it, group) { + const { gen, schema, opts: { useDefaults } } = it; + if (useDefaults) + (0, defaults_1.assignDefaults)(it, group.type); + gen.block(() => { + for (const rule of group.rules) { + if ((0, applicability_1.shouldUseRule)(schema, rule)) { + keywordCode(it, rule.keyword, rule.definition, group.type); + } + } + }); + } + function checkStrictTypes(it, types) { + if (it.schemaEnv.meta || !it.opts.strictTypes) + return; + checkContextTypes(it, types); + if (!it.opts.allowUnionTypes) + checkMultipleTypes(it, types); + checkKeywordTypes(it, it.dataTypes); + } + function checkContextTypes(it, types) { + if (!types.length) + return; + if (!it.dataTypes.length) { + it.dataTypes = types; + return; + } + types.forEach((t11) => { + if (!includesType(it.dataTypes, t11)) { + strictTypesError(it, `type "${t11}" not allowed by context "${it.dataTypes.join(",")}"`); + } + }); + narrowSchemaTypes(it, types); + } + function checkMultipleTypes(it, ts) { + if (ts.length > 1 && !(ts.length === 2 && ts.includes("null"))) { + strictTypesError(it, "use allowUnionTypes to allow union type keyword"); + } + } + function checkKeywordTypes(it, ts) { + const rules = it.self.RULES.all; + for (const keyword in rules) { + const rule = rules[keyword]; + if (typeof rule == "object" && (0, applicability_1.shouldUseRule)(it.schema, rule)) { + const { type } = rule.definition; + if (type.length && !type.some((t11) => hasApplicableType(ts, t11))) { + strictTypesError(it, `missing type "${type.join(",")}" for keyword "${keyword}"`); + } + } + } + } + function hasApplicableType(schTs, kwdT) { + return schTs.includes(kwdT) || kwdT === "number" && schTs.includes("integer"); + } + function includesType(ts, t11) { + return ts.includes(t11) || t11 === "integer" && ts.includes("number"); + } + function narrowSchemaTypes(it, withTypes) { + const ts = []; + for (const t11 of it.dataTypes) { + if (includesType(withTypes, t11)) + ts.push(t11); + else if (withTypes.includes("integer") && t11 === "number") + ts.push("integer"); + } + it.dataTypes = ts; + } + function strictTypesError(it, msg) { + const schemaPath = it.schemaEnv.baseId + it.errSchemaPath; + msg += ` at "${schemaPath}" (strictTypes)`; + (0, util_1.checkStrictMode)(it, msg, it.opts.strictTypes); + } + var KeywordCxt = class { + constructor(it, def, keyword) { + (0, keyword_1.validateKeywordUsage)(it, def, keyword); + this.gen = it.gen; + this.allErrors = it.allErrors; + this.keyword = keyword; + this.data = it.data; + this.schema = it.schema[keyword]; + this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data; + this.schemaValue = (0, util_1.schemaRefOrVal)(it, this.schema, keyword, this.$data); + this.schemaType = def.schemaType; + this.parentSchema = it.schema; + this.params = {}; + this.it = it; + this.def = def; + if (this.$data) { + this.schemaCode = it.gen.const("vSchema", getData(this.$data, it)); + } else { + this.schemaCode = this.schemaValue; + if (!(0, keyword_1.validSchemaType)(this.schema, def.schemaType, def.allowUndefined)) { + throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`); + } + } + if ("code" in def ? def.trackErrors : def.errors !== false) { + this.errsCount = it.gen.const("_errs", names_1.default.errors); + } + } + result(condition, successAction, failAction) { + this.failResult((0, codegen_1.not)(condition), successAction, failAction); + } + failResult(condition, successAction, failAction) { + this.gen.if(condition); + if (failAction) + failAction(); + else + this.error(); + if (successAction) { + this.gen.else(); + successAction(); + if (this.allErrors) + this.gen.endIf(); + } else { + if (this.allErrors) + this.gen.endIf(); + else + this.gen.else(); + } + } + pass(condition, failAction) { + this.failResult((0, codegen_1.not)(condition), void 0, failAction); + } + fail(condition) { + if (condition === void 0) { + this.error(); + if (!this.allErrors) + this.gen.if(false); + return; + } + this.gen.if(condition); + this.error(); + if (this.allErrors) + this.gen.endIf(); + else + this.gen.else(); + } + fail$data(condition) { + if (!this.$data) + return this.fail(condition); + const { schemaCode } = this; + this.fail((0, codegen_1._)`${schemaCode} !== undefined && (${(0, codegen_1.or)(this.invalid$data(), condition)})`); + } + error(append, errorParams, errorPaths) { + if (errorParams) { + this.setParams(errorParams); + this._error(append, errorPaths); + this.setParams({}); + return; + } + this._error(append, errorPaths); + } + _error(append, errorPaths) { + ; + (append ? errors_1.reportExtraError : errors_1.reportError)(this, this.def.error, errorPaths); + } + $dataError() { + (0, errors_1.reportError)(this, this.def.$dataError || errors_1.keyword$DataError); + } + reset() { + if (this.errsCount === void 0) + throw new Error('add "trackErrors" to keyword definition'); + (0, errors_1.resetErrorsCount)(this.gen, this.errsCount); + } + ok(cond) { + if (!this.allErrors) + this.gen.if(cond); + } + setParams(obj, assign) { + if (assign) + Object.assign(this.params, obj); + else + this.params = obj; + } + block$data(valid, codeBlock, $dataValid = codegen_1.nil) { + this.gen.block(() => { + this.check$data(valid, $dataValid); + codeBlock(); + }); + } + check$data(valid = codegen_1.nil, $dataValid = codegen_1.nil) { + if (!this.$data) + return; + const { gen, schemaCode, schemaType, def } = this; + gen.if((0, codegen_1.or)((0, codegen_1._)`${schemaCode} === undefined`, $dataValid)); + if (valid !== codegen_1.nil) + gen.assign(valid, true); + if (schemaType.length || def.validateSchema) { + gen.elseIf(this.invalid$data()); + this.$dataError(); + if (valid !== codegen_1.nil) + gen.assign(valid, false); + } + gen.else(); + } + invalid$data() { + const { gen, schemaCode, schemaType, def, it } = this; + return (0, codegen_1.or)(wrong$DataType(), invalid$DataSchema()); + function wrong$DataType() { + if (schemaType.length) { + if (!(schemaCode instanceof codegen_1.Name)) + throw new Error("ajv implementation error"); + const st = Array.isArray(schemaType) ? schemaType : [schemaType]; + return (0, codegen_1._)`${(0, dataType_2.checkDataTypes)(st, schemaCode, it.opts.strictNumbers, dataType_2.DataType.Wrong)}`; + } + return codegen_1.nil; + } + function invalid$DataSchema() { + if (def.validateSchema) { + const validateSchemaRef = gen.scopeValue("validate$data", { ref: def.validateSchema }); + return (0, codegen_1._)`!${validateSchemaRef}(${schemaCode})`; + } + return codegen_1.nil; + } + } + subschema(appl, valid) { + const subschema = (0, subschema_1.getSubschema)(this.it, appl); + (0, subschema_1.extendSubschemaData)(subschema, this.it, appl); + (0, subschema_1.extendSubschemaMode)(subschema, appl); + const nextContext = { ...this.it, ...subschema, items: void 0, props: void 0 }; + subschemaCode(nextContext, valid); + return nextContext; + } + mergeEvaluated(schemaCxt, toName) { + const { it, gen } = this; + if (!it.opts.unevaluated) + return; + if (it.props !== true && schemaCxt.props !== void 0) { + it.props = util_1.mergeEvaluated.props(gen, schemaCxt.props, it.props, toName); + } + if (it.items !== true && schemaCxt.items !== void 0) { + it.items = util_1.mergeEvaluated.items(gen, schemaCxt.items, it.items, toName); + } + } + mergeValidEvaluated(schemaCxt, valid) { + const { it, gen } = this; + if (it.opts.unevaluated && (it.props !== true || it.items !== true)) { + gen.if(valid, () => this.mergeEvaluated(schemaCxt, codegen_1.Name)); + return true; + } + } + }; + exports.KeywordCxt = KeywordCxt; + function keywordCode(it, keyword, def, ruleType) { + const cxt = new KeywordCxt(it, def, keyword); + if ("code" in def) { + def.code(cxt, ruleType); + } else if (cxt.$data && def.validate) { + (0, keyword_1.funcKeywordCode)(cxt, def); + } else if ("macro" in def) { + (0, keyword_1.macroKeywordCode)(cxt, def); + } else if (def.compile || def.validate) { + (0, keyword_1.funcKeywordCode)(cxt, def); + } + } + var JSON_POINTER = /^\/(?:[^~]|~0|~1)*$/; + var RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/; + function getData($data, { dataLevel, dataNames, dataPathArr }) { + let jsonPointer; + let data; + if ($data === "") + return names_1.default.rootData; + if ($data[0] === "/") { + if (!JSON_POINTER.test($data)) + throw new Error(`Invalid JSON-pointer: ${$data}`); + jsonPointer = $data; + data = names_1.default.rootData; + } else { + const matches = RELATIVE_JSON_POINTER.exec($data); + if (!matches) + throw new Error(`Invalid JSON-pointer: ${$data}`); + const up = +matches[1]; + jsonPointer = matches[2]; + if (jsonPointer === "#") { + if (up >= dataLevel) + throw new Error(errorMsg("property/index", up)); + return dataPathArr[dataLevel - up]; + } + if (up > dataLevel) + throw new Error(errorMsg("data", up)); + data = dataNames[dataLevel - up]; + if (!jsonPointer) + return data; + } + let expr = data; + const segments = jsonPointer.split("/"); + for (const segment of segments) { + if (segment) { + data = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)((0, util_1.unescapeJsonPointer)(segment))}`; + expr = (0, codegen_1._)`${expr} && ${data}`; + } + } + return expr; + function errorMsg(pointerType, up) { + return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`; + } + } + exports.getData = getData; + } +}); + +// node_modules/ajv/dist/runtime/validation_error.js +var require_validation_error = __commonJS({ + "node_modules/ajv/dist/runtime/validation_error.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var ValidationError = class extends Error { + constructor(errors) { + super("validation failed"); + this.errors = errors; + this.ajv = this.validation = true; + } + }; + exports.default = ValidationError; + } +}); + +// node_modules/ajv/dist/compile/ref_error.js +var require_ref_error = __commonJS({ + "node_modules/ajv/dist/compile/ref_error.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var resolve_1 = require_resolve(); + var MissingRefError = class extends Error { + constructor(resolver, baseId, ref, msg) { + super(msg || `can't resolve reference ${ref} from id ${baseId}`); + this.missingRef = (0, resolve_1.resolveUrl)(resolver, baseId, ref); + this.missingSchema = (0, resolve_1.normalizeId)((0, resolve_1.getFullPath)(resolver, this.missingRef)); + } + }; + exports.default = MissingRefError; + } +}); + +// node_modules/ajv/dist/compile/index.js +var require_compile = __commonJS({ + "node_modules/ajv/dist/compile/index.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = void 0; + var codegen_1 = require_codegen(); + var validation_error_1 = require_validation_error(); + var names_1 = require_names(); + var resolve_1 = require_resolve(); + var util_1 = require_util(); + var validate_1 = require_validate(); + var SchemaEnv = class { + constructor(env) { + var _a5; + this.refs = {}; + this.dynamicAnchors = {}; + let schema; + if (typeof env.schema == "object") + schema = env.schema; + this.schema = env.schema; + this.schemaId = env.schemaId; + this.root = env.root || this; + this.baseId = (_a5 = env.baseId) !== null && _a5 !== void 0 ? _a5 : (0, resolve_1.normalizeId)(schema === null || schema === void 0 ? void 0 : schema[env.schemaId || "$id"]); + this.schemaPath = env.schemaPath; + this.localRefs = env.localRefs; + this.meta = env.meta; + this.$async = schema === null || schema === void 0 ? void 0 : schema.$async; + this.refs = {}; + } + }; + exports.SchemaEnv = SchemaEnv; + function compileSchema(sch) { + const _sch = getCompilingSchema.call(this, sch); + if (_sch) + return _sch; + const rootId = (0, resolve_1.getFullPath)(this.opts.uriResolver, sch.root.baseId); + const { es5, lines } = this.opts.code; + const { ownProperties } = this.opts; + const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties }); + let _ValidationError; + if (sch.$async) { + _ValidationError = gen.scopeValue("Error", { + ref: validation_error_1.default, + code: (0, codegen_1._)`require("ajv/dist/runtime/validation_error").default` + }); + } + const validateName = gen.scopeName("validate"); + sch.validateName = validateName; + const schemaCxt = { + gen, + allErrors: this.opts.allErrors, + data: names_1.default.data, + parentData: names_1.default.parentData, + parentDataProperty: names_1.default.parentDataProperty, + dataNames: [names_1.default.data], + dataPathArr: [codegen_1.nil], + // TODO can its length be used as dataLevel if nil is removed? + dataLevel: 0, + dataTypes: [], + definedProperties: /* @__PURE__ */ new Set(), + topSchemaRef: gen.scopeValue("schema", this.opts.code.source === true ? { ref: sch.schema, code: (0, codegen_1.stringify)(sch.schema) } : { ref: sch.schema }), + validateName, + ValidationError: _ValidationError, + schema: sch.schema, + schemaEnv: sch, + rootId, + baseId: sch.baseId || rootId, + schemaPath: codegen_1.nil, + errSchemaPath: sch.schemaPath || (this.opts.jtd ? "" : "#"), + errorPath: (0, codegen_1._)`""`, + opts: this.opts, + self: this + }; + let sourceCode; + try { + this._compilations.add(sch); + (0, validate_1.validateFunctionCode)(schemaCxt); + gen.optimize(this.opts.code.optimize); + const validateCode = gen.toString(); + sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`; + if (this.opts.code.process) + sourceCode = this.opts.code.process(sourceCode, sch); + const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode); + const validate = makeValidate(this, this.scope.get()); + this.scope.value(validateName, { ref: validate }); + validate.errors = null; + validate.schema = sch.schema; + validate.schemaEnv = sch; + if (sch.$async) + validate.$async = true; + if (this.opts.code.source === true) { + validate.source = { validateName, validateCode, scopeValues: gen._values }; + } + if (this.opts.unevaluated) { + const { props, items } = schemaCxt; + validate.evaluated = { + props: props instanceof codegen_1.Name ? void 0 : props, + items: items instanceof codegen_1.Name ? void 0 : items, + dynamicProps: props instanceof codegen_1.Name, + dynamicItems: items instanceof codegen_1.Name + }; + if (validate.source) + validate.source.evaluated = (0, codegen_1.stringify)(validate.evaluated); + } + sch.validate = validate; + return sch; + } catch (e2) { + delete sch.validate; + delete sch.validateName; + if (sourceCode) + this.logger.error("Error compiling schema, function code:", sourceCode); + throw e2; + } finally { + this._compilations.delete(sch); + } + } + exports.compileSchema = compileSchema; + function resolveRef(root, baseId, ref) { + var _a5; + ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref); + const schOrFunc = root.refs[ref]; + if (schOrFunc) + return schOrFunc; + let _sch = resolve8.call(this, root, ref); + if (_sch === void 0) { + const schema = (_a5 = root.localRefs) === null || _a5 === void 0 ? void 0 : _a5[ref]; + const { schemaId } = this.opts; + if (schema) + _sch = new SchemaEnv({ schema, schemaId, root, baseId }); + } + if (_sch === void 0) + return; + return root.refs[ref] = inlineOrCompile.call(this, _sch); + } + exports.resolveRef = resolveRef; + function inlineOrCompile(sch) { + if ((0, resolve_1.inlineRef)(sch.schema, this.opts.inlineRefs)) + return sch.schema; + return sch.validate ? sch : compileSchema.call(this, sch); + } + function getCompilingSchema(schEnv) { + for (const sch of this._compilations) { + if (sameSchemaEnv(sch, schEnv)) + return sch; + } + } + exports.getCompilingSchema = getCompilingSchema; + function sameSchemaEnv(s1, s2) { + return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId; + } + function resolve8(root, ref) { + let sch; + while (typeof (sch = this.refs[ref]) == "string") + ref = sch; + return sch || this.schemas[ref] || resolveSchema.call(this, root, ref); + } + function resolveSchema(root, ref) { + const p = this.opts.uriResolver.parse(ref); + const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p); + let baseId = (0, resolve_1.getFullPath)(this.opts.uriResolver, root.baseId, void 0); + if (Object.keys(root.schema).length > 0 && refPath === baseId) { + return getJsonPointer.call(this, p, root); + } + const id = (0, resolve_1.normalizeId)(refPath); + const schOrRef = this.refs[id] || this.schemas[id]; + if (typeof schOrRef == "string") { + const sch = resolveSchema.call(this, root, schOrRef); + if (typeof (sch === null || sch === void 0 ? void 0 : sch.schema) !== "object") + return; + return getJsonPointer.call(this, p, sch); + } + if (typeof (schOrRef === null || schOrRef === void 0 ? void 0 : schOrRef.schema) !== "object") + return; + if (!schOrRef.validate) + compileSchema.call(this, schOrRef); + if (id === (0, resolve_1.normalizeId)(ref)) { + const { schema } = schOrRef; + const { schemaId } = this.opts; + const schId = schema[schemaId]; + if (schId) + baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId); + return new SchemaEnv({ schema, schemaId, root, baseId }); + } + return getJsonPointer.call(this, p, schOrRef); + } + exports.resolveSchema = resolveSchema; + var PREVENT_SCOPE_CHANGE = /* @__PURE__ */ new Set([ + "properties", + "patternProperties", + "enum", + "dependencies", + "definitions" + ]); + function getJsonPointer(parsedRef, { baseId, schema, root }) { + var _a5; + if (((_a5 = parsedRef.fragment) === null || _a5 === void 0 ? void 0 : _a5[0]) !== "/") + return; + for (const part of parsedRef.fragment.slice(1).split("/")) { + if (typeof schema === "boolean") + return; + const partSchema = schema[(0, util_1.unescapeFragment)(part)]; + if (partSchema === void 0) + return; + schema = partSchema; + const schId = typeof schema === "object" && schema[this.opts.schemaId]; + if (!PREVENT_SCOPE_CHANGE.has(part) && schId) { + baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId); + } + } + let env; + if (typeof schema != "boolean" && schema.$ref && !(0, util_1.schemaHasRulesButRef)(schema, this.RULES)) { + const $ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schema.$ref); + env = resolveSchema.call(this, root, $ref); + } + const { schemaId } = this.opts; + env = env || new SchemaEnv({ schema, schemaId, root, baseId }); + if (env.schema !== env.root.schema) + return env; + return void 0; + } + } +}); + +// node_modules/ajv/dist/refs/data.json +var require_data = __commonJS({ + "node_modules/ajv/dist/refs/data.json"(exports, module2) { + module2.exports = { + $id: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#", + description: "Meta-schema for $data reference (JSON AnySchema extension proposal)", + type: "object", + required: ["$data"], + properties: { + $data: { + type: "string", + anyOf: [{ format: "relative-json-pointer" }, { format: "json-pointer" }] + } + }, + additionalProperties: false + }; + } +}); + +// node_modules/fast-uri/lib/utils.js +var require_utils = __commonJS({ + "node_modules/fast-uri/lib/utils.js"(exports, module2) { + "use strict"; + var isUUID = RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu); + var isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u); + var isHexPair = RegExp.prototype.test.bind(/^[\da-f]{2}$/iu); + var isUnreserved = RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu); + var isPathCharacter = RegExp.prototype.test.bind(/^[\da-z\-._~!$&'()*+,;=:@/]$/iu); + function stringArrayToHexStripped(input) { + let acc = ""; + let code = 0; + let i = 0; + for (i = 0; i < input.length; i++) { + code = input[i].charCodeAt(0); + if (code === 48) { + continue; + } + if (!(code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102)) { + return ""; + } + acc += input[i]; + break; + } + for (i += 1; i < input.length; i++) { + code = input[i].charCodeAt(0); + if (!(code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102)) { + return ""; + } + acc += input[i]; + } + return acc; + } + var nonSimpleDomain = RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u); + function consumeIsZone(buffer) { + buffer.length = 0; + return true; + } + function consumeHextets(buffer, address, output) { + if (buffer.length) { + const hex3 = stringArrayToHexStripped(buffer); + if (hex3 !== "") { + address.push(hex3); + } else { + output.error = true; + return false; + } + buffer.length = 0; + } + return true; + } + function getIPV6(input) { + let tokenCount = 0; + const output = { error: false, address: "", zone: "" }; + const address = []; + const buffer = []; + let endipv6Encountered = false; + let endIpv6 = false; + let consume = consumeHextets; + for (let i = 0; i < input.length; i++) { + const cursor = input[i]; + if (cursor === "[" || cursor === "]") { + continue; + } + if (cursor === ":") { + if (endipv6Encountered === true) { + endIpv6 = true; + } + if (!consume(buffer, address, output)) { + break; + } + if (++tokenCount > 7) { + output.error = true; + break; + } + if (i > 0 && input[i - 1] === ":") { + endipv6Encountered = true; + } + address.push(":"); + continue; + } else if (cursor === "%") { + if (!consume(buffer, address, output)) { + break; + } + consume = consumeIsZone; + } else { + buffer.push(cursor); + continue; + } + } + if (buffer.length) { + if (consume === consumeIsZone) { + output.zone = buffer.join(""); + } else if (endIpv6) { + address.push(buffer.join("")); + } else { + address.push(stringArrayToHexStripped(buffer)); + } + } + output.address = address.join(""); + return output; + } + function normalizeIPv6(host) { + if (findToken(host, ":") < 2) { + return { host, isIPV6: false }; + } + const ipv63 = getIPV6(host); + if (!ipv63.error) { + let newHost = ipv63.address; + let escapedHost = ipv63.address; + if (ipv63.zone) { + newHost += "%" + ipv63.zone; + escapedHost += "%25" + ipv63.zone; + } + return { host: newHost, isIPV6: true, escapedHost }; + } else { + return { host, isIPV6: false }; + } + } + function findToken(str, token) { + let ind = 0; + for (let i = 0; i < str.length; i++) { + if (str[i] === token) ind++; + } + return ind; + } + function removeDotSegments(path27) { + let input = path27; + const output = []; + let nextSlash = -1; + let len = 0; + while (len = input.length) { + if (len === 1) { + if (input === ".") { + break; + } else if (input === "/") { + output.push("/"); + break; + } else { + output.push(input); + break; + } + } else if (len === 2) { + if (input[0] === ".") { + if (input[1] === ".") { + break; + } else if (input[1] === "/") { + input = input.slice(2); + continue; + } + } else if (input[0] === "/") { + if (input[1] === "." || input[1] === "/") { + output.push("/"); + break; + } + } + } else if (len === 3) { + if (input === "/..") { + if (output.length !== 0) { + output.pop(); + } + output.push("/"); + break; + } + } + if (input[0] === ".") { + if (input[1] === ".") { + if (input[2] === "/") { + input = input.slice(3); + continue; + } + } else if (input[1] === "/") { + input = input.slice(2); + continue; + } + } else if (input[0] === "/") { + if (input[1] === ".") { + if (input[2] === "/") { + input = input.slice(2); + continue; + } else if (input[2] === ".") { + if (input[3] === "/") { + input = input.slice(3); + if (output.length !== 0) { + output.pop(); + } + continue; + } + } + } + } + if ((nextSlash = input.indexOf("/", 1)) === -1) { + output.push(input); + break; + } else { + output.push(input.slice(0, nextSlash)); + input = input.slice(nextSlash); + } + } + return output.join(""); + } + var HOST_DELIMS = { "@": "%40", "/": "%2F", "?": "%3F", "#": "%23", ":": "%3A" }; + var HOST_DELIM_RE = /[@/?#:]/g; + var HOST_DELIM_NO_COLON_RE = /[@/?#]/g; + function reescapeHostDelimiters(host, isIP) { + const re2 = isIP ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE; + re2.lastIndex = 0; + return host.replace(re2, (ch2) => HOST_DELIMS[ch2]); + } + function normalizePercentEncoding(input, decodeUnreserved = false) { + if (input.indexOf("%") === -1) { + return input; + } + let output = ""; + for (let i = 0; i < input.length; i++) { + if (input[i] === "%" && i + 2 < input.length) { + const hex3 = input.slice(i + 1, i + 3); + if (isHexPair(hex3)) { + const normalizedHex = hex3.toUpperCase(); + const decoded = String.fromCharCode(parseInt(normalizedHex, 16)); + if (decodeUnreserved && isUnreserved(decoded)) { + output += decoded; + } else { + output += "%" + normalizedHex; + } + i += 2; + continue; + } + } + output += input[i]; + } + return output; + } + function normalizePathEncoding(input) { + let output = ""; + for (let i = 0; i < input.length; i++) { + if (input[i] === "%" && i + 2 < input.length) { + const hex3 = input.slice(i + 1, i + 3); + if (isHexPair(hex3)) { + const normalizedHex = hex3.toUpperCase(); + const decoded = String.fromCharCode(parseInt(normalizedHex, 16)); + if (decoded !== "." && isUnreserved(decoded)) { + output += decoded; + } else { + output += "%" + normalizedHex; + } + i += 2; + continue; + } + } + if (isPathCharacter(input[i])) { + output += input[i]; + } else { + output += escape(input[i]); + } + } + return output; + } + function escapePreservingEscapes(input) { + let output = ""; + for (let i = 0; i < input.length; i++) { + if (input[i] === "%" && i + 2 < input.length) { + const hex3 = input.slice(i + 1, i + 3); + if (isHexPair(hex3)) { + output += "%" + hex3.toUpperCase(); + i += 2; + continue; + } + } + output += escape(input[i]); + } + return output; + } + function recomposeAuthority(component) { + const uriTokens = []; + if (component.userinfo !== void 0) { + uriTokens.push(component.userinfo); + uriTokens.push("@"); + } + if (component.host !== void 0) { + let host = unescape(component.host); + if (!isIPv4(host)) { + const ipV6res = normalizeIPv6(host); + if (ipV6res.isIPV6 === true) { + host = `[${ipV6res.escapedHost}]`; + } else { + host = reescapeHostDelimiters(host, false); + } + } + uriTokens.push(host); + } + if (typeof component.port === "number" || typeof component.port === "string") { + uriTokens.push(":"); + uriTokens.push(String(component.port)); + } + return uriTokens.length ? uriTokens.join("") : void 0; + } + module2.exports = { + nonSimpleDomain, + recomposeAuthority, + reescapeHostDelimiters, + normalizePercentEncoding, + normalizePathEncoding, + escapePreservingEscapes, + removeDotSegments, + isIPv4, + isUUID, + normalizeIPv6, + stringArrayToHexStripped + }; + } +}); + +// node_modules/fast-uri/lib/schemes.js +var require_schemes = __commonJS({ + "node_modules/fast-uri/lib/schemes.js"(exports, module2) { + "use strict"; + var { isUUID } = require_utils(); + var URN_REG = /([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu; + var supportedSchemeNames = ( + /** @type {const} */ + [ + "http", + "https", + "ws", + "wss", + "urn", + "urn:uuid" + ] + ); + function isValidSchemeName(name) { + return supportedSchemeNames.indexOf( + /** @type {*} */ + name + ) !== -1; + } + function wsIsSecure(wsComponent) { + if (wsComponent.secure === true) { + return true; + } else if (wsComponent.secure === false) { + return false; + } else if (wsComponent.scheme) { + return wsComponent.scheme.length === 3 && (wsComponent.scheme[0] === "w" || wsComponent.scheme[0] === "W") && (wsComponent.scheme[1] === "s" || wsComponent.scheme[1] === "S") && (wsComponent.scheme[2] === "s" || wsComponent.scheme[2] === "S"); + } else { + return false; + } + } + function httpParse(component) { + if (!component.host) { + component.error = component.error || "HTTP URIs must have a host."; + } + return component; + } + function httpSerialize(component) { + const secure = String(component.scheme).toLowerCase() === "https"; + if (component.port === (secure ? 443 : 80) || component.port === "") { + component.port = void 0; + } + if (!component.path) { + component.path = "/"; + } + return component; + } + function wsParse(wsComponent) { + wsComponent.secure = wsIsSecure(wsComponent); + wsComponent.resourceName = (wsComponent.path || "/") + (wsComponent.query ? "?" + wsComponent.query : ""); + wsComponent.path = void 0; + wsComponent.query = void 0; + return wsComponent; + } + function wsSerialize(wsComponent) { + if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === "") { + wsComponent.port = void 0; + } + if (typeof wsComponent.secure === "boolean") { + wsComponent.scheme = wsComponent.secure ? "wss" : "ws"; + wsComponent.secure = void 0; + } + if (wsComponent.resourceName) { + const [path27, query] = wsComponent.resourceName.split("?"); + wsComponent.path = path27 && path27 !== "/" ? path27 : void 0; + wsComponent.query = query; + wsComponent.resourceName = void 0; + } + wsComponent.fragment = void 0; + return wsComponent; + } + function urnParse(urnComponent, options) { + if (!urnComponent.path) { + urnComponent.error = "URN can not be parsed"; + return urnComponent; + } + const matches = urnComponent.path.match(URN_REG); + if (matches) { + const scheme = options.scheme || urnComponent.scheme || "urn"; + urnComponent.nid = matches[1].toLowerCase(); + urnComponent.nss = matches[2]; + const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`; + const schemeHandler = getSchemeHandler(urnScheme); + urnComponent.path = void 0; + if (schemeHandler) { + urnComponent = schemeHandler.parse(urnComponent, options); + } + } else { + urnComponent.error = urnComponent.error || "URN can not be parsed."; + } + return urnComponent; + } + function urnSerialize(urnComponent, options) { + if (urnComponent.nid === void 0) { + throw new Error("URN without nid cannot be serialized"); + } + const scheme = options.scheme || urnComponent.scheme || "urn"; + const nid = urnComponent.nid.toLowerCase(); + const urnScheme = `${scheme}:${options.nid || nid}`; + const schemeHandler = getSchemeHandler(urnScheme); + if (schemeHandler) { + urnComponent = schemeHandler.serialize(urnComponent, options); + } + const uriComponent = urnComponent; + const nss = urnComponent.nss; + uriComponent.path = `${nid || options.nid}:${nss}`; + options.skipEscape = true; + return uriComponent; + } + function urnuuidParse(urnComponent, options) { + const uuidComponent = urnComponent; + uuidComponent.uuid = uuidComponent.nss; + uuidComponent.nss = void 0; + if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) { + uuidComponent.error = uuidComponent.error || "UUID is not valid."; + } + return uuidComponent; + } + function urnuuidSerialize(uuidComponent) { + const urnComponent = uuidComponent; + urnComponent.nss = (uuidComponent.uuid || "").toLowerCase(); + return urnComponent; + } + var http2 = ( + /** @type {SchemeHandler} */ + { + scheme: "http", + domainHost: true, + parse: httpParse, + serialize: httpSerialize + } + ); + var https2 = ( + /** @type {SchemeHandler} */ + { + scheme: "https", + domainHost: http2.domainHost, + parse: httpParse, + serialize: httpSerialize + } + ); + var ws = ( + /** @type {SchemeHandler} */ + { + scheme: "ws", + domainHost: true, + parse: wsParse, + serialize: wsSerialize + } + ); + var wss = ( + /** @type {SchemeHandler} */ + { + scheme: "wss", + domainHost: ws.domainHost, + parse: ws.parse, + serialize: ws.serialize + } + ); + var urn = ( + /** @type {SchemeHandler} */ + { + scheme: "urn", + parse: urnParse, + serialize: urnSerialize, + skipNormalize: true + } + ); + var urnuuid = ( + /** @type {SchemeHandler} */ + { + scheme: "urn:uuid", + parse: urnuuidParse, + serialize: urnuuidSerialize, + skipNormalize: true + } + ); + var SCHEMES = ( + /** @type {Record} */ + { + http: http2, + https: https2, + ws, + wss, + urn, + "urn:uuid": urnuuid + } + ); + Object.setPrototypeOf(SCHEMES, null); + function getSchemeHandler(scheme) { + return scheme && (SCHEMES[ + /** @type {SchemeName} */ + scheme + ] || SCHEMES[ + /** @type {SchemeName} */ + scheme.toLowerCase() + ]) || void 0; + } + module2.exports = { + wsIsSecure, + SCHEMES, + isValidSchemeName, + getSchemeHandler + }; + } +}); + +// node_modules/fast-uri/index.js +var require_fast_uri = __commonJS({ + "node_modules/fast-uri/index.js"(exports, module2) { + "use strict"; + var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, escapePreservingEscapes, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require_utils(); + var { SCHEMES, getSchemeHandler } = require_schemes(); + function normalize3(uri, options) { + if (typeof uri === "string") { + uri = /** @type {T} */ + normalizeString(uri, options); + } else if (typeof uri === "object") { + uri = /** @type {T} */ + parse4(serialize(uri, options), options); + } + return uri; + } + function resolve8(baseURI, relativeURI, options) { + const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" }; + const resolved = resolveComponent(parse4(baseURI, schemelessOptions), parse4(relativeURI, schemelessOptions), schemelessOptions, true); + schemelessOptions.skipEscape = true; + return serialize(resolved, schemelessOptions); + } + function resolveComponent(base, relative4, options, skipNormalization) { + const target = {}; + if (!skipNormalization) { + base = parse4(serialize(base, options), options); + relative4 = parse4(serialize(relative4, options), options); + } + options = options || {}; + if (!options.tolerant && relative4.scheme) { + target.scheme = relative4.scheme; + target.userinfo = relative4.userinfo; + target.host = relative4.host; + target.port = relative4.port; + target.path = removeDotSegments(relative4.path || ""); + target.query = relative4.query; + } else { + if (relative4.userinfo !== void 0 || relative4.host !== void 0 || relative4.port !== void 0) { + target.userinfo = relative4.userinfo; + target.host = relative4.host; + target.port = relative4.port; + target.path = removeDotSegments(relative4.path || ""); + target.query = relative4.query; + } else { + if (!relative4.path) { + target.path = base.path; + if (relative4.query !== void 0) { + target.query = relative4.query; + } else { + target.query = base.query; + } + } else { + if (relative4.path[0] === "/") { + target.path = removeDotSegments(relative4.path); + } else { + if ((base.userinfo !== void 0 || base.host !== void 0 || base.port !== void 0) && !base.path) { + target.path = "/" + relative4.path; + } else if (!base.path) { + target.path = relative4.path; + } else { + target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative4.path; + } + target.path = removeDotSegments(target.path); + } + target.query = relative4.query; + } + target.userinfo = base.userinfo; + target.host = base.host; + target.port = base.port; + } + target.scheme = base.scheme; + } + target.fragment = relative4.fragment; + return target; + } + function equal(uriA, uriB, options) { + const normalizedA = normalizeComparableURI(uriA, options); + const normalizedB = normalizeComparableURI(uriB, options); + return normalizedA !== void 0 && normalizedB !== void 0 && normalizedA.toLowerCase() === normalizedB.toLowerCase(); + } + function serialize(cmpts, opts) { + const component = { + host: cmpts.host, + scheme: cmpts.scheme, + userinfo: cmpts.userinfo, + port: cmpts.port, + path: cmpts.path, + query: cmpts.query, + nid: cmpts.nid, + nss: cmpts.nss, + uuid: cmpts.uuid, + fragment: cmpts.fragment, + reference: cmpts.reference, + resourceName: cmpts.resourceName, + secure: cmpts.secure, + error: "" + }; + const options = Object.assign({}, opts); + const uriTokens = []; + const schemeHandler = getSchemeHandler(options.scheme || component.scheme); + if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options); + if (component.path !== void 0) { + if (!options.skipEscape) { + component.path = escapePreservingEscapes(component.path); + if (component.scheme !== void 0) { + component.path = component.path.split("%3A").join(":"); + } + } else { + component.path = normalizePercentEncoding(component.path); + } + } + if (options.reference !== "suffix" && component.scheme) { + uriTokens.push(component.scheme, ":"); + } + const authority = recomposeAuthority(component); + if (authority !== void 0) { + if (options.reference !== "suffix") { + uriTokens.push("//"); + } + uriTokens.push(authority); + if (component.path && component.path[0] !== "/") { + uriTokens.push("/"); + } + } + if (component.path !== void 0) { + let s2 = component.path; + if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { + s2 = removeDotSegments(s2); + } + if (authority === void 0 && s2[0] === "/" && s2[1] === "/") { + s2 = "/%2F" + s2.slice(2); + } + uriTokens.push(s2); + } + if (component.query !== void 0) { + uriTokens.push("?", component.query); + } + if (component.fragment !== void 0) { + uriTokens.push("#", component.fragment); + } + return uriTokens.join(""); + } + var URI_PARSE = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u; + function getParseError(parsed, matches) { + if (matches[2] !== void 0 && parsed.path && parsed.path[0] !== "/") { + return 'URI path must start with "/" when authority is present.'; + } + if (typeof parsed.port === "number" && (parsed.port < 0 || parsed.port > 65535)) { + return "URI port is malformed."; + } + return void 0; + } + function parseWithStatus(uri, opts) { + const options = Object.assign({}, opts); + const parsed = { + scheme: void 0, + userinfo: void 0, + host: "", + port: void 0, + path: "", + query: void 0, + fragment: void 0 + }; + let malformedAuthorityOrPort = false; + let isIP = false; + if (options.reference === "suffix") { + if (options.scheme) { + uri = options.scheme + ":" + uri; + } else { + uri = "//" + uri; + } + } + const matches = uri.match(URI_PARSE); + if (matches) { + parsed.scheme = matches[1]; + parsed.userinfo = matches[3]; + parsed.host = matches[4]; + parsed.port = parseInt(matches[5], 10); + parsed.path = matches[6] || ""; + parsed.query = matches[7]; + parsed.fragment = matches[8]; + if (isNaN(parsed.port)) { + parsed.port = matches[5]; + } + const parseError = getParseError(parsed, matches); + if (parseError !== void 0) { + parsed.error = parsed.error || parseError; + malformedAuthorityOrPort = true; + } + if (parsed.host) { + const ipv4result = isIPv4(parsed.host); + if (ipv4result === false) { + const ipv6result = normalizeIPv6(parsed.host); + parsed.host = ipv6result.host.toLowerCase(); + isIP = ipv6result.isIPV6; + } else { + isIP = true; + } + } + if (parsed.scheme === void 0 && parsed.userinfo === void 0 && parsed.host === void 0 && parsed.port === void 0 && parsed.query === void 0 && !parsed.path) { + parsed.reference = "same-document"; + } else if (parsed.scheme === void 0) { + parsed.reference = "relative"; + } else if (parsed.fragment === void 0) { + parsed.reference = "absolute"; + } else { + parsed.reference = "uri"; + } + if (options.reference && options.reference !== "suffix" && options.reference !== parsed.reference) { + parsed.error = parsed.error || "URI is not a " + options.reference + " reference."; + } + const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme); + if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { + if (parsed.host && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP === false && nonSimpleDomain(parsed.host)) { + try { + parsed.host = URL.domainToASCII(parsed.host.toLowerCase()); + } catch (e2) { + parsed.error = parsed.error || "Host's domain name can not be converted to ASCII: " + e2; + } + } + } + if (!schemeHandler || schemeHandler && !schemeHandler.skipNormalize) { + if (uri.indexOf("%") !== -1) { + if (parsed.scheme !== void 0) { + parsed.scheme = unescape(parsed.scheme); + } + if (parsed.host !== void 0) { + parsed.host = reescapeHostDelimiters(unescape(parsed.host), isIP); + } + } + if (parsed.path) { + parsed.path = normalizePathEncoding(parsed.path); + } + if (parsed.fragment) { + try { + parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment)); + } catch (e2) { + parsed.error = parsed.error || "URI malformed"; + } + } + } + if (schemeHandler && schemeHandler.parse) { + schemeHandler.parse(parsed, options); + } + } else { + parsed.error = parsed.error || "URI can not be parsed."; + } + return { parsed, malformedAuthorityOrPort }; + } + function parse4(uri, opts) { + return parseWithStatus(uri, opts).parsed; + } + function normalizeString(uri, opts) { + return normalizeStringWithStatus(uri, opts).normalized; + } + function normalizeStringWithStatus(uri, opts) { + const { parsed, malformedAuthorityOrPort } = parseWithStatus(uri, opts); + return { + normalized: malformedAuthorityOrPort ? uri : serialize(parsed, opts), + malformedAuthorityOrPort + }; + } + function normalizeComparableURI(uri, opts) { + if (typeof uri === "string") { + const { normalized, malformedAuthorityOrPort } = normalizeStringWithStatus(uri, opts); + return malformedAuthorityOrPort ? void 0 : normalized; + } + if (typeof uri === "object") { + return serialize(uri, opts); + } + } + var fastUri = { + SCHEMES, + normalize: normalize3, + resolve: resolve8, + resolveComponent, + equal, + serialize, + parse: parse4 + }; + module2.exports = fastUri; + module2.exports.default = fastUri; + module2.exports.fastUri = fastUri; + } +}); + +// node_modules/ajv/dist/runtime/uri.js +var require_uri = __commonJS({ + "node_modules/ajv/dist/runtime/uri.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var uri = require_fast_uri(); + uri.code = 'require("ajv/dist/runtime/uri").default'; + exports.default = uri; + } +}); + +// node_modules/ajv/dist/core.js +var require_core = __commonJS({ + "node_modules/ajv/dist/core.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0; + var validate_1 = require_validate(); + Object.defineProperty(exports, "KeywordCxt", { enumerable: true, get: function() { + return validate_1.KeywordCxt; + } }); + var codegen_1 = require_codegen(); + Object.defineProperty(exports, "_", { enumerable: true, get: function() { + return codegen_1._; + } }); + Object.defineProperty(exports, "str", { enumerable: true, get: function() { + return codegen_1.str; + } }); + Object.defineProperty(exports, "stringify", { enumerable: true, get: function() { + return codegen_1.stringify; + } }); + Object.defineProperty(exports, "nil", { enumerable: true, get: function() { + return codegen_1.nil; + } }); + Object.defineProperty(exports, "Name", { enumerable: true, get: function() { + return codegen_1.Name; + } }); + Object.defineProperty(exports, "CodeGen", { enumerable: true, get: function() { + return codegen_1.CodeGen; + } }); + var validation_error_1 = require_validation_error(); + var ref_error_1 = require_ref_error(); + var rules_1 = require_rules(); + var compile_1 = require_compile(); + var codegen_2 = require_codegen(); + var resolve_1 = require_resolve(); + var dataType_1 = require_dataType(); + var util_1 = require_util(); + var $dataRefSchema = require_data(); + var uri_1 = require_uri(); + var defaultRegExp = (str, flags) => new RegExp(str, flags); + defaultRegExp.code = "new RegExp"; + var META_IGNORE_OPTIONS = ["removeAdditional", "useDefaults", "coerceTypes"]; + var EXT_SCOPE_NAMES = /* @__PURE__ */ new Set([ + "validate", + "serialize", + "parse", + "wrapper", + "root", + "schema", + "keyword", + "pattern", + "formats", + "validate$data", + "func", + "obj", + "Error" + ]); + var removedOptions = { + errorDataPath: "", + format: "`validateFormats: false` can be used instead.", + nullable: '"nullable" keyword is supported by default.', + jsonPointers: "Deprecated jsPropertySyntax can be used instead.", + extendRefs: "Deprecated ignoreKeywordsWithRef can be used instead.", + missingRefs: "Pass empty schema with $id that should be ignored to ajv.addSchema.", + processCode: "Use option `code: {process: (code, schemaEnv: object) => string}`", + sourceCode: "Use option `code: {source: true}`", + strictDefaults: "It is default now, see option `strict`.", + strictKeywords: "It is default now, see option `strict`.", + uniqueItems: '"uniqueItems" keyword is always validated.', + unknownFormats: "Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).", + cache: "Map is used as cache, schema object as key.", + serialize: "Map is used as cache, schema object as key.", + ajvErrors: "It is default now." + }; + var deprecatedOptions = { + ignoreKeywordsWithRef: "", + jsPropertySyntax: "", + unicode: '"minLength"/"maxLength" account for unicode characters by default.' + }; + var MAX_EXPRESSION = 200; + function requiredOptions(o2) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _j, _k3, _l2, _m, _o, _p, _q3, _r, _s, _t, _u2, _v2, _w3, _x2, _y2, _z3, _02; + const s2 = o2.strict; + const _optz = (_a5 = o2.code) === null || _a5 === void 0 ? void 0 : _a5.optimize; + const optimize = _optz === true || _optz === void 0 ? 1 : _optz || 0; + const regExp = (_c2 = (_b3 = o2.code) === null || _b3 === void 0 ? void 0 : _b3.regExp) !== null && _c2 !== void 0 ? _c2 : defaultRegExp; + const uriResolver = (_d = o2.uriResolver) !== null && _d !== void 0 ? _d : uri_1.default; + return { + strictSchema: (_f2 = (_e2 = o2.strictSchema) !== null && _e2 !== void 0 ? _e2 : s2) !== null && _f2 !== void 0 ? _f2 : true, + strictNumbers: (_h2 = (_g = o2.strictNumbers) !== null && _g !== void 0 ? _g : s2) !== null && _h2 !== void 0 ? _h2 : true, + strictTypes: (_k3 = (_j = o2.strictTypes) !== null && _j !== void 0 ? _j : s2) !== null && _k3 !== void 0 ? _k3 : "log", + strictTuples: (_m = (_l2 = o2.strictTuples) !== null && _l2 !== void 0 ? _l2 : s2) !== null && _m !== void 0 ? _m : "log", + strictRequired: (_p = (_o = o2.strictRequired) !== null && _o !== void 0 ? _o : s2) !== null && _p !== void 0 ? _p : false, + code: o2.code ? { ...o2.code, optimize, regExp } : { optimize, regExp }, + loopRequired: (_q3 = o2.loopRequired) !== null && _q3 !== void 0 ? _q3 : MAX_EXPRESSION, + loopEnum: (_r = o2.loopEnum) !== null && _r !== void 0 ? _r : MAX_EXPRESSION, + meta: (_s = o2.meta) !== null && _s !== void 0 ? _s : true, + messages: (_t = o2.messages) !== null && _t !== void 0 ? _t : true, + inlineRefs: (_u2 = o2.inlineRefs) !== null && _u2 !== void 0 ? _u2 : true, + schemaId: (_v2 = o2.schemaId) !== null && _v2 !== void 0 ? _v2 : "$id", + addUsedSchema: (_w3 = o2.addUsedSchema) !== null && _w3 !== void 0 ? _w3 : true, + validateSchema: (_x2 = o2.validateSchema) !== null && _x2 !== void 0 ? _x2 : true, + validateFormats: (_y2 = o2.validateFormats) !== null && _y2 !== void 0 ? _y2 : true, + unicodeRegExp: (_z3 = o2.unicodeRegExp) !== null && _z3 !== void 0 ? _z3 : true, + int32range: (_02 = o2.int32range) !== null && _02 !== void 0 ? _02 : true, + uriResolver + }; + } + var Ajv2 = class { + constructor(opts = {}) { + this.schemas = {}; + this.refs = {}; + this.formats = {}; + this._compilations = /* @__PURE__ */ new Set(); + this._loading = {}; + this._cache = /* @__PURE__ */ new Map(); + opts = this.opts = { ...opts, ...requiredOptions(opts) }; + const { es5, lines } = this.opts.code; + this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines }); + this.logger = getLogger(opts.logger); + const formatOpt = opts.validateFormats; + opts.validateFormats = false; + this.RULES = (0, rules_1.getRules)(); + checkOptions.call(this, removedOptions, opts, "NOT SUPPORTED"); + checkOptions.call(this, deprecatedOptions, opts, "DEPRECATED", "warn"); + this._metaOpts = getMetaSchemaOptions.call(this); + if (opts.formats) + addInitialFormats.call(this); + this._addVocabularies(); + this._addDefaultMetaSchema(); + if (opts.keywords) + addInitialKeywords.call(this, opts.keywords); + if (typeof opts.meta == "object") + this.addMetaSchema(opts.meta); + addInitialSchemas.call(this); + opts.validateFormats = formatOpt; + } + _addVocabularies() { + this.addKeyword("$async"); + } + _addDefaultMetaSchema() { + const { $data, meta: meta3, schemaId } = this.opts; + let _dataRefSchema = $dataRefSchema; + if (schemaId === "id") { + _dataRefSchema = { ...$dataRefSchema }; + _dataRefSchema.id = _dataRefSchema.$id; + delete _dataRefSchema.$id; + } + if (meta3 && $data) + this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false); + } + defaultMeta() { + const { meta: meta3, schemaId } = this.opts; + return this.opts.defaultMeta = typeof meta3 == "object" ? meta3[schemaId] || meta3 : void 0; + } + validate(schemaKeyRef, data) { + let v2; + if (typeof schemaKeyRef == "string") { + v2 = this.getSchema(schemaKeyRef); + if (!v2) + throw new Error(`no schema with key or ref "${schemaKeyRef}"`); + } else { + v2 = this.compile(schemaKeyRef); + } + const valid = v2(data); + if (!("$async" in v2)) + this.errors = v2.errors; + return valid; + } + compile(schema, _meta) { + const sch = this._addSchema(schema, _meta); + return sch.validate || this._compileSchemaEnv(sch); + } + compileAsync(schema, meta3) { + if (typeof this.opts.loadSchema != "function") { + throw new Error("options.loadSchema should be a function"); + } + const { loadSchema } = this.opts; + return runCompileAsync.call(this, schema, meta3); + async function runCompileAsync(_schema, _meta) { + await loadMetaSchema.call(this, _schema.$schema); + const sch = this._addSchema(_schema, _meta); + return sch.validate || _compileAsync.call(this, sch); + } + async function loadMetaSchema($ref) { + if ($ref && !this.getSchema($ref)) { + await runCompileAsync.call(this, { $ref }, true); + } + } + async function _compileAsync(sch) { + try { + return this._compileSchemaEnv(sch); + } catch (e2) { + if (!(e2 instanceof ref_error_1.default)) + throw e2; + checkLoaded.call(this, e2); + await loadMissingSchema.call(this, e2.missingSchema); + return _compileAsync.call(this, sch); + } + } + function checkLoaded({ missingSchema: ref, missingRef }) { + if (this.refs[ref]) { + throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`); + } + } + async function loadMissingSchema(ref) { + const _schema = await _loadSchema.call(this, ref); + if (!this.refs[ref]) + await loadMetaSchema.call(this, _schema.$schema); + if (!this.refs[ref]) + this.addSchema(_schema, ref, meta3); + } + async function _loadSchema(ref) { + const p = this._loading[ref]; + if (p) + return p; + try { + return await (this._loading[ref] = loadSchema(ref)); + } finally { + delete this._loading[ref]; + } + } + } + // Adds schema to the instance + addSchema(schema, key, _meta, _validateSchema = this.opts.validateSchema) { + if (Array.isArray(schema)) { + for (const sch of schema) + this.addSchema(sch, void 0, _meta, _validateSchema); + return this; + } + let id; + if (typeof schema === "object") { + const { schemaId } = this.opts; + id = schema[schemaId]; + if (id !== void 0 && typeof id != "string") { + throw new Error(`schema ${schemaId} must be string`); + } + } + key = (0, resolve_1.normalizeId)(key || id); + this._checkUnique(key); + this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true); + return this; + } + // Add schema that will be used to validate other schemas + // options in META_IGNORE_OPTIONS are alway set to false + addMetaSchema(schema, key, _validateSchema = this.opts.validateSchema) { + this.addSchema(schema, key, true, _validateSchema); + return this; + } + // Validate schema against its meta-schema + validateSchema(schema, throwOrLogError) { + if (typeof schema == "boolean") + return true; + let $schema; + $schema = schema.$schema; + if ($schema !== void 0 && typeof $schema != "string") { + throw new Error("$schema must be a string"); + } + $schema = $schema || this.opts.defaultMeta || this.defaultMeta(); + if (!$schema) { + this.logger.warn("meta-schema not available"); + this.errors = null; + return true; + } + const valid = this.validate($schema, schema); + if (!valid && throwOrLogError) { + const message = "schema is invalid: " + this.errorsText(); + if (this.opts.validateSchema === "log") + this.logger.error(message); + else + throw new Error(message); + } + return valid; + } + // Get compiled schema by `key` or `ref`. + // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id) + getSchema(keyRef) { + let sch; + while (typeof (sch = getSchEnv.call(this, keyRef)) == "string") + keyRef = sch; + if (sch === void 0) { + const { schemaId } = this.opts; + const root = new compile_1.SchemaEnv({ schema: {}, schemaId }); + sch = compile_1.resolveSchema.call(this, root, keyRef); + if (!sch) + return; + this.refs[keyRef] = sch; + } + return sch.validate || this._compileSchemaEnv(sch); + } + // Remove cached schema(s). + // If no parameter is passed all schemas but meta-schemas are removed. + // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed. + // Even if schema is referenced by other schemas it still can be removed as other schemas have local references. + removeSchema(schemaKeyRef) { + if (schemaKeyRef instanceof RegExp) { + this._removeAllSchemas(this.schemas, schemaKeyRef); + this._removeAllSchemas(this.refs, schemaKeyRef); + return this; + } + switch (typeof schemaKeyRef) { + case "undefined": + this._removeAllSchemas(this.schemas); + this._removeAllSchemas(this.refs); + this._cache.clear(); + return this; + case "string": { + const sch = getSchEnv.call(this, schemaKeyRef); + if (typeof sch == "object") + this._cache.delete(sch.schema); + delete this.schemas[schemaKeyRef]; + delete this.refs[schemaKeyRef]; + return this; + } + case "object": { + const cacheKey = schemaKeyRef; + this._cache.delete(cacheKey); + let id = schemaKeyRef[this.opts.schemaId]; + if (id) { + id = (0, resolve_1.normalizeId)(id); + delete this.schemas[id]; + delete this.refs[id]; + } + return this; + } + default: + throw new Error("ajv.removeSchema: invalid parameter"); + } + } + // add "vocabulary" - a collection of keywords + addVocabulary(definitions) { + for (const def of definitions) + this.addKeyword(def); + return this; + } + addKeyword(kwdOrDef, def) { + let keyword; + if (typeof kwdOrDef == "string") { + keyword = kwdOrDef; + if (typeof def == "object") { + this.logger.warn("these parameters are deprecated, see docs for addKeyword"); + def.keyword = keyword; + } + } else if (typeof kwdOrDef == "object" && def === void 0) { + def = kwdOrDef; + keyword = def.keyword; + if (Array.isArray(keyword) && !keyword.length) { + throw new Error("addKeywords: keyword must be string or non-empty array"); + } + } else { + throw new Error("invalid addKeywords parameters"); + } + checkKeyword.call(this, keyword, def); + if (!def) { + (0, util_1.eachItem)(keyword, (kwd) => addRule.call(this, kwd)); + return this; + } + keywordMetaschema.call(this, def); + const definition = { + ...def, + type: (0, dataType_1.getJSONTypes)(def.type), + schemaType: (0, dataType_1.getJSONTypes)(def.schemaType) + }; + (0, util_1.eachItem)(keyword, definition.type.length === 0 ? (k2) => addRule.call(this, k2, definition) : (k2) => definition.type.forEach((t11) => addRule.call(this, k2, definition, t11))); + return this; + } + getKeyword(keyword) { + const rule = this.RULES.all[keyword]; + return typeof rule == "object" ? rule.definition : !!rule; + } + // Remove keyword + removeKeyword(keyword) { + const { RULES } = this; + delete RULES.keywords[keyword]; + delete RULES.all[keyword]; + for (const group of RULES.rules) { + const i = group.rules.findIndex((rule) => rule.keyword === keyword); + if (i >= 0) + group.rules.splice(i, 1); + } + return this; + } + // Add format + addFormat(name, format) { + if (typeof format == "string") + format = new RegExp(format); + this.formats[name] = format; + return this; + } + errorsText(errors = this.errors, { separator = ", ", dataVar = "data" } = {}) { + if (!errors || errors.length === 0) + return "No errors"; + return errors.map((e2) => `${dataVar}${e2.instancePath} ${e2.message}`).reduce((text, msg) => text + separator + msg); + } + $dataMetaSchema(metaSchema, keywordsJsonPointers) { + const rules = this.RULES.all; + metaSchema = JSON.parse(JSON.stringify(metaSchema)); + for (const jsonPointer of keywordsJsonPointers) { + const segments = jsonPointer.split("/").slice(1); + let keywords = metaSchema; + for (const seg of segments) + keywords = keywords[seg]; + for (const key in rules) { + const rule = rules[key]; + if (typeof rule != "object") + continue; + const { $data } = rule.definition; + const schema = keywords[key]; + if ($data && schema) + keywords[key] = schemaOrData(schema); + } + } + return metaSchema; + } + _removeAllSchemas(schemas, regex) { + for (const keyRef in schemas) { + const sch = schemas[keyRef]; + if (!regex || regex.test(keyRef)) { + if (typeof sch == "string") { + delete schemas[keyRef]; + } else if (sch && !sch.meta) { + this._cache.delete(sch.schema); + delete schemas[keyRef]; + } + } + } + } + _addSchema(schema, meta3, baseId, validateSchema = this.opts.validateSchema, addSchema = this.opts.addUsedSchema) { + let id; + const { schemaId } = this.opts; + if (typeof schema == "object") { + id = schema[schemaId]; + } else { + if (this.opts.jtd) + throw new Error("schema must be object"); + else if (typeof schema != "boolean") + throw new Error("schema must be object or boolean"); + } + let sch = this._cache.get(schema); + if (sch !== void 0) + return sch; + baseId = (0, resolve_1.normalizeId)(id || baseId); + const localRefs = resolve_1.getSchemaRefs.call(this, schema, baseId); + sch = new compile_1.SchemaEnv({ schema, schemaId, meta: meta3, baseId, localRefs }); + this._cache.set(sch.schema, sch); + if (addSchema && !baseId.startsWith("#")) { + if (baseId) + this._checkUnique(baseId); + this.refs[baseId] = sch; + } + if (validateSchema) + this.validateSchema(schema, true); + return sch; + } + _checkUnique(id) { + if (this.schemas[id] || this.refs[id]) { + throw new Error(`schema with key or id "${id}" already exists`); + } + } + _compileSchemaEnv(sch) { + if (sch.meta) + this._compileMetaSchema(sch); + else + compile_1.compileSchema.call(this, sch); + if (!sch.validate) + throw new Error("ajv implementation error"); + return sch.validate; + } + _compileMetaSchema(sch) { + const currentOpts = this.opts; + this.opts = this._metaOpts; + try { + compile_1.compileSchema.call(this, sch); + } finally { + this.opts = currentOpts; + } + } + }; + Ajv2.ValidationError = validation_error_1.default; + Ajv2.MissingRefError = ref_error_1.default; + exports.default = Ajv2; + function checkOptions(checkOpts, options, msg, log = "error") { + for (const key in checkOpts) { + const opt = key; + if (opt in options) + this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`); + } + } + function getSchEnv(keyRef) { + keyRef = (0, resolve_1.normalizeId)(keyRef); + return this.schemas[keyRef] || this.refs[keyRef]; + } + function addInitialSchemas() { + const optsSchemas = this.opts.schemas; + if (!optsSchemas) + return; + if (Array.isArray(optsSchemas)) + this.addSchema(optsSchemas); + else + for (const key in optsSchemas) + this.addSchema(optsSchemas[key], key); + } + function addInitialFormats() { + for (const name in this.opts.formats) { + const format = this.opts.formats[name]; + if (format) + this.addFormat(name, format); + } + } + function addInitialKeywords(defs) { + if (Array.isArray(defs)) { + this.addVocabulary(defs); + return; + } + this.logger.warn("keywords option as map is deprecated, pass array"); + for (const keyword in defs) { + const def = defs[keyword]; + if (!def.keyword) + def.keyword = keyword; + this.addKeyword(def); + } + } + function getMetaSchemaOptions() { + const metaOpts = { ...this.opts }; + for (const opt of META_IGNORE_OPTIONS) + delete metaOpts[opt]; + return metaOpts; + } + var noLogs = { log() { + }, warn() { + }, error() { + } }; + function getLogger(logger) { + if (logger === false) + return noLogs; + if (logger === void 0) + return console; + if (logger.log && logger.warn && logger.error) + return logger; + throw new Error("logger must implement log, warn and error methods"); + } + var KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i; + function checkKeyword(keyword, def) { + const { RULES } = this; + (0, util_1.eachItem)(keyword, (kwd) => { + if (RULES.keywords[kwd]) + throw new Error(`Keyword ${kwd} is already defined`); + if (!KEYWORD_NAME.test(kwd)) + throw new Error(`Keyword ${kwd} has invalid name`); + }); + if (!def) + return; + if (def.$data && !("code" in def || "validate" in def)) { + throw new Error('$data keyword must have "code" or "validate" function'); + } + } + function addRule(keyword, definition, dataType) { + var _a5; + const post = definition === null || definition === void 0 ? void 0 : definition.post; + if (dataType && post) + throw new Error('keyword with "post" flag cannot have "type"'); + const { RULES } = this; + let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t11 }) => t11 === dataType); + if (!ruleGroup) { + ruleGroup = { type: dataType, rules: [] }; + RULES.rules.push(ruleGroup); + } + RULES.keywords[keyword] = true; + if (!definition) + return; + const rule = { + keyword, + definition: { + ...definition, + type: (0, dataType_1.getJSONTypes)(definition.type), + schemaType: (0, dataType_1.getJSONTypes)(definition.schemaType) + } + }; + if (definition.before) + addBeforeRule.call(this, ruleGroup, rule, definition.before); + else + ruleGroup.rules.push(rule); + RULES.all[keyword] = rule; + (_a5 = definition.implements) === null || _a5 === void 0 ? void 0 : _a5.forEach((kwd) => this.addKeyword(kwd)); + } + function addBeforeRule(ruleGroup, rule, before) { + const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before); + if (i >= 0) { + ruleGroup.rules.splice(i, 0, rule); + } else { + ruleGroup.rules.push(rule); + this.logger.warn(`rule ${before} is not defined`); + } + } + function keywordMetaschema(def) { + let { metaSchema } = def; + if (metaSchema === void 0) + return; + if (def.$data && this.opts.$data) + metaSchema = schemaOrData(metaSchema); + def.validateSchema = this.compile(metaSchema, true); + } + var $dataRef = { + $ref: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#" + }; + function schemaOrData(schema) { + return { anyOf: [schema, $dataRef] }; + } + } +}); + +// node_modules/ajv/dist/vocabularies/core/id.js +var require_id = __commonJS({ + "node_modules/ajv/dist/vocabularies/core/id.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var def = { + keyword: "id", + code() { + throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID'); + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/core/ref.js +var require_ref = __commonJS({ + "node_modules/ajv/dist/vocabularies/core/ref.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.callRef = exports.getValidate = void 0; + var ref_error_1 = require_ref_error(); + var code_1 = require_code2(); + var codegen_1 = require_codegen(); + var names_1 = require_names(); + var compile_1 = require_compile(); + var util_1 = require_util(); + var def = { + keyword: "$ref", + schemaType: "string", + code(cxt) { + const { gen, schema: $ref, it } = cxt; + const { baseId, schemaEnv: env, validateName, opts, self: self2 } = it; + const { root } = env; + if (($ref === "#" || $ref === "#/") && baseId === root.baseId) + return callRootRef(); + const schOrEnv = compile_1.resolveRef.call(self2, root, baseId, $ref); + if (schOrEnv === void 0) + throw new ref_error_1.default(it.opts.uriResolver, baseId, $ref); + if (schOrEnv instanceof compile_1.SchemaEnv) + return callValidate(schOrEnv); + return inlineRefSchema(schOrEnv); + function callRootRef() { + if (env === root) + return callRef(cxt, validateName, env, env.$async); + const rootName = gen.scopeValue("root", { ref: root }); + return callRef(cxt, (0, codegen_1._)`${rootName}.validate`, root, root.$async); + } + function callValidate(sch) { + const v2 = getValidate(cxt, sch); + callRef(cxt, v2, sch, sch.$async); + } + function inlineRefSchema(sch) { + const schName = gen.scopeValue("schema", opts.code.source === true ? { ref: sch, code: (0, codegen_1.stringify)(sch) } : { ref: sch }); + const valid = gen.name("valid"); + const schCxt = cxt.subschema({ + schema: sch, + dataTypes: [], + schemaPath: codegen_1.nil, + topSchemaRef: schName, + errSchemaPath: $ref + }, valid); + cxt.mergeEvaluated(schCxt); + cxt.ok(valid); + } + } + }; + function getValidate(cxt, sch) { + const { gen } = cxt; + return sch.validate ? gen.scopeValue("validate", { ref: sch.validate }) : (0, codegen_1._)`${gen.scopeValue("wrapper", { ref: sch })}.validate`; + } + exports.getValidate = getValidate; + function callRef(cxt, v2, sch, $async) { + const { gen, it } = cxt; + const { allErrors, schemaEnv: env, opts } = it; + const passCxt = opts.passContext ? names_1.default.this : codegen_1.nil; + if ($async) + callAsyncRef(); + else + callSyncRef(); + function callAsyncRef() { + if (!env.$async) + throw new Error("async schema referenced by sync schema"); + const valid = gen.let("valid"); + gen.try(() => { + gen.code((0, codegen_1._)`await ${(0, code_1.callValidateCode)(cxt, v2, passCxt)}`); + addEvaluatedFrom(v2); + if (!allErrors) + gen.assign(valid, true); + }, (e2) => { + gen.if((0, codegen_1._)`!(${e2} instanceof ${it.ValidationError})`, () => gen.throw(e2)); + addErrorsFrom(e2); + if (!allErrors) + gen.assign(valid, false); + }); + cxt.ok(valid); + } + function callSyncRef() { + cxt.result((0, code_1.callValidateCode)(cxt, v2, passCxt), () => addEvaluatedFrom(v2), () => addErrorsFrom(v2)); + } + function addErrorsFrom(source) { + const errs = (0, codegen_1._)`${source}.errors`; + gen.assign(names_1.default.vErrors, (0, codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`); + gen.assign(names_1.default.errors, (0, codegen_1._)`${names_1.default.vErrors}.length`); + } + function addEvaluatedFrom(source) { + var _a5; + if (!it.opts.unevaluated) + return; + const schEvaluated = (_a5 = sch === null || sch === void 0 ? void 0 : sch.validate) === null || _a5 === void 0 ? void 0 : _a5.evaluated; + if (it.props !== true) { + if (schEvaluated && !schEvaluated.dynamicProps) { + if (schEvaluated.props !== void 0) { + it.props = util_1.mergeEvaluated.props(gen, schEvaluated.props, it.props); + } + } else { + const props = gen.var("props", (0, codegen_1._)`${source}.evaluated.props`); + it.props = util_1.mergeEvaluated.props(gen, props, it.props, codegen_1.Name); + } + } + if (it.items !== true) { + if (schEvaluated && !schEvaluated.dynamicItems) { + if (schEvaluated.items !== void 0) { + it.items = util_1.mergeEvaluated.items(gen, schEvaluated.items, it.items); + } + } else { + const items = gen.var("items", (0, codegen_1._)`${source}.evaluated.items`); + it.items = util_1.mergeEvaluated.items(gen, items, it.items, codegen_1.Name); + } + } + } + } + exports.callRef = callRef; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/core/index.js +var require_core2 = __commonJS({ + "node_modules/ajv/dist/vocabularies/core/index.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var id_1 = require_id(); + var ref_1 = require_ref(); + var core = [ + "$schema", + "$id", + "$defs", + "$vocabulary", + { keyword: "$comment" }, + "definitions", + id_1.default, + ref_1.default + ]; + exports.default = core; + } +}); + +// node_modules/ajv/dist/vocabularies/validation/limitNumber.js +var require_limitNumber = __commonJS({ + "node_modules/ajv/dist/vocabularies/validation/limitNumber.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var ops = codegen_1.operators; + var KWDs = { + maximum: { okStr: "<=", ok: ops.LTE, fail: ops.GT }, + minimum: { okStr: ">=", ok: ops.GTE, fail: ops.LT }, + exclusiveMaximum: { okStr: "<", ok: ops.LT, fail: ops.GTE }, + exclusiveMinimum: { okStr: ">", ok: ops.GT, fail: ops.LTE } + }; + var error48 = { + message: ({ keyword, schemaCode }) => (0, codegen_1.str)`must be ${KWDs[keyword].okStr} ${schemaCode}`, + params: ({ keyword, schemaCode }) => (0, codegen_1._)`{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}` + }; + var def = { + keyword: Object.keys(KWDs), + type: "number", + schemaType: "number", + $data: true, + error: error48, + code(cxt) { + const { keyword, data, schemaCode } = cxt; + cxt.fail$data((0, codegen_1._)`${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`); + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/validation/multipleOf.js +var require_multipleOf = __commonJS({ + "node_modules/ajv/dist/vocabularies/validation/multipleOf.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var error48 = { + message: ({ schemaCode }) => (0, codegen_1.str)`must be multiple of ${schemaCode}`, + params: ({ schemaCode }) => (0, codegen_1._)`{multipleOf: ${schemaCode}}` + }; + var def = { + keyword: "multipleOf", + type: "number", + schemaType: "number", + $data: true, + error: error48, + code(cxt) { + const { gen, data, schemaCode, it } = cxt; + const prec = it.opts.multipleOfPrecision; + const res = gen.let("res"); + const invalid = prec ? (0, codegen_1._)`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}` : (0, codegen_1._)`${res} !== parseInt(${res})`; + cxt.fail$data((0, codegen_1._)`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`); + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/runtime/ucs2length.js +var require_ucs2length = __commonJS({ + "node_modules/ajv/dist/runtime/ucs2length.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + function ucs2length(str) { + const len = str.length; + let length = 0; + let pos = 0; + let value; + while (pos < len) { + length++; + value = str.charCodeAt(pos++); + if (value >= 55296 && value <= 56319 && pos < len) { + value = str.charCodeAt(pos); + if ((value & 64512) === 56320) + pos++; + } + } + return length; + } + exports.default = ucs2length; + ucs2length.code = 'require("ajv/dist/runtime/ucs2length").default'; + } +}); + +// node_modules/ajv/dist/vocabularies/validation/limitLength.js +var require_limitLength = __commonJS({ + "node_modules/ajv/dist/vocabularies/validation/limitLength.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var ucs2length_1 = require_ucs2length(); + var error48 = { + message({ keyword, schemaCode }) { + const comp = keyword === "maxLength" ? "more" : "fewer"; + return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} characters`; + }, + params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}` + }; + var def = { + keyword: ["maxLength", "minLength"], + type: "string", + schemaType: "number", + $data: true, + error: error48, + code(cxt) { + const { keyword, data, schemaCode, it } = cxt; + const op = keyword === "maxLength" ? codegen_1.operators.GT : codegen_1.operators.LT; + const len = it.opts.unicode === false ? (0, codegen_1._)`${data}.length` : (0, codegen_1._)`${(0, util_1.useFunc)(cxt.gen, ucs2length_1.default)}(${data})`; + cxt.fail$data((0, codegen_1._)`${len} ${op} ${schemaCode}`); + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/validation/pattern.js +var require_pattern = __commonJS({ + "node_modules/ajv/dist/vocabularies/validation/pattern.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var code_1 = require_code2(); + var util_1 = require_util(); + var codegen_1 = require_codegen(); + var error48 = { + message: ({ schemaCode }) => (0, codegen_1.str)`must match pattern "${schemaCode}"`, + params: ({ schemaCode }) => (0, codegen_1._)`{pattern: ${schemaCode}}` + }; + var def = { + keyword: "pattern", + type: "string", + schemaType: "string", + $data: true, + error: error48, + code(cxt) { + const { gen, data, $data, schema, schemaCode, it } = cxt; + const u = it.opts.unicodeRegExp ? "u" : ""; + if ($data) { + const { regExp } = it.opts.code; + const regExpCode = regExp.code === "new RegExp" ? (0, codegen_1._)`new RegExp` : (0, util_1.useFunc)(gen, regExp); + const valid = gen.let("valid"); + gen.try(() => gen.assign(valid, (0, codegen_1._)`${regExpCode}(${schemaCode}, ${u}).test(${data})`), () => gen.assign(valid, false)); + cxt.fail$data((0, codegen_1._)`!${valid}`); + } else { + const regExp = (0, code_1.usePattern)(cxt, schema); + cxt.fail$data((0, codegen_1._)`!${regExp}.test(${data})`); + } + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/validation/limitProperties.js +var require_limitProperties = __commonJS({ + "node_modules/ajv/dist/vocabularies/validation/limitProperties.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var error48 = { + message({ keyword, schemaCode }) { + const comp = keyword === "maxProperties" ? "more" : "fewer"; + return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} properties`; + }, + params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}` + }; + var def = { + keyword: ["maxProperties", "minProperties"], + type: "object", + schemaType: "number", + $data: true, + error: error48, + code(cxt) { + const { keyword, data, schemaCode } = cxt; + const op = keyword === "maxProperties" ? codegen_1.operators.GT : codegen_1.operators.LT; + cxt.fail$data((0, codegen_1._)`Object.keys(${data}).length ${op} ${schemaCode}`); + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/validation/required.js +var require_required = __commonJS({ + "node_modules/ajv/dist/vocabularies/validation/required.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var code_1 = require_code2(); + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var error48 = { + message: ({ params: { missingProperty } }) => (0, codegen_1.str)`must have required property '${missingProperty}'`, + params: ({ params: { missingProperty } }) => (0, codegen_1._)`{missingProperty: ${missingProperty}}` + }; + var def = { + keyword: "required", + type: "object", + schemaType: "array", + $data: true, + error: error48, + code(cxt) { + const { gen, schema, schemaCode, data, $data, it } = cxt; + const { opts } = it; + if (!$data && schema.length === 0) + return; + const useLoop = schema.length >= opts.loopRequired; + if (it.allErrors) + allErrorsMode(); + else + exitOnErrorMode(); + if (opts.strictRequired) { + const props = cxt.parentSchema.properties; + const { definedProperties } = cxt.it; + for (const requiredKey of schema) { + if ((props === null || props === void 0 ? void 0 : props[requiredKey]) === void 0 && !definedProperties.has(requiredKey)) { + const schemaPath = it.schemaEnv.baseId + it.errSchemaPath; + const msg = `required property "${requiredKey}" is not defined at "${schemaPath}" (strictRequired)`; + (0, util_1.checkStrictMode)(it, msg, it.opts.strictRequired); + } + } + } + function allErrorsMode() { + if (useLoop || $data) { + cxt.block$data(codegen_1.nil, loopAllRequired); + } else { + for (const prop of schema) { + (0, code_1.checkReportMissingProp)(cxt, prop); + } + } + } + function exitOnErrorMode() { + const missing = gen.let("missing"); + if (useLoop || $data) { + const valid = gen.let("valid", true); + cxt.block$data(valid, () => loopUntilMissing(missing, valid)); + cxt.ok(valid); + } else { + gen.if((0, code_1.checkMissingProp)(cxt, schema, missing)); + (0, code_1.reportMissingProp)(cxt, missing); + gen.else(); + } + } + function loopAllRequired() { + gen.forOf("prop", schemaCode, (prop) => { + cxt.setParams({ missingProperty: prop }); + gen.if((0, code_1.noPropertyInData)(gen, data, prop, opts.ownProperties), () => cxt.error()); + }); + } + function loopUntilMissing(missing, valid) { + cxt.setParams({ missingProperty: missing }); + gen.forOf(missing, schemaCode, () => { + gen.assign(valid, (0, code_1.propertyInData)(gen, data, missing, opts.ownProperties)); + gen.if((0, codegen_1.not)(valid), () => { + cxt.error(); + gen.break(); + }); + }, codegen_1.nil); + } + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/validation/limitItems.js +var require_limitItems = __commonJS({ + "node_modules/ajv/dist/vocabularies/validation/limitItems.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var error48 = { + message({ keyword, schemaCode }) { + const comp = keyword === "maxItems" ? "more" : "fewer"; + return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} items`; + }, + params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}` + }; + var def = { + keyword: ["maxItems", "minItems"], + type: "array", + schemaType: "number", + $data: true, + error: error48, + code(cxt) { + const { keyword, data, schemaCode } = cxt; + const op = keyword === "maxItems" ? codegen_1.operators.GT : codegen_1.operators.LT; + cxt.fail$data((0, codegen_1._)`${data}.length ${op} ${schemaCode}`); + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/runtime/equal.js +var require_equal = __commonJS({ + "node_modules/ajv/dist/runtime/equal.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var equal = require_fast_deep_equal(); + equal.code = 'require("ajv/dist/runtime/equal").default'; + exports.default = equal; + } +}); + +// node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +var require_uniqueItems = __commonJS({ + "node_modules/ajv/dist/vocabularies/validation/uniqueItems.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var dataType_1 = require_dataType(); + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var equal_1 = require_equal(); + var error48 = { + message: ({ params: { i, j } }) => (0, codegen_1.str)`must NOT have duplicate items (items ## ${j} and ${i} are identical)`, + params: ({ params: { i, j } }) => (0, codegen_1._)`{i: ${i}, j: ${j}}` + }; + var def = { + keyword: "uniqueItems", + type: "array", + schemaType: "boolean", + $data: true, + error: error48, + code(cxt) { + const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt; + if (!$data && !schema) + return; + const valid = gen.let("valid"); + const itemTypes = parentSchema.items ? (0, dataType_1.getSchemaTypes)(parentSchema.items) : []; + cxt.block$data(valid, validateUniqueItems, (0, codegen_1._)`${schemaCode} === false`); + cxt.ok(valid); + function validateUniqueItems() { + const i = gen.let("i", (0, codegen_1._)`${data}.length`); + const j = gen.let("j"); + cxt.setParams({ i, j }); + gen.assign(valid, true); + gen.if((0, codegen_1._)`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j)); + } + function canOptimize() { + return itemTypes.length > 0 && !itemTypes.some((t11) => t11 === "object" || t11 === "array"); + } + function loopN(i, j) { + const item = gen.name("item"); + const wrongType = (0, dataType_1.checkDataTypes)(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong); + const indices = gen.const("indices", (0, codegen_1._)`{}`); + gen.for((0, codegen_1._)`;${i}--;`, () => { + gen.let(item, (0, codegen_1._)`${data}[${i}]`); + gen.if(wrongType, (0, codegen_1._)`continue`); + if (itemTypes.length > 1) + gen.if((0, codegen_1._)`typeof ${item} == "string"`, (0, codegen_1._)`${item} += "_"`); + gen.if((0, codegen_1._)`typeof ${indices}[${item}] == "number"`, () => { + gen.assign(j, (0, codegen_1._)`${indices}[${item}]`); + cxt.error(); + gen.assign(valid, false).break(); + }).code((0, codegen_1._)`${indices}[${item}] = ${i}`); + }); + } + function loopN2(i, j) { + const eql = (0, util_1.useFunc)(gen, equal_1.default); + const outer = gen.name("outer"); + gen.label(outer).for((0, codegen_1._)`;${i}--;`, () => gen.for((0, codegen_1._)`${j} = ${i}; ${j}--;`, () => gen.if((0, codegen_1._)`${eql}(${data}[${i}], ${data}[${j}])`, () => { + cxt.error(); + gen.assign(valid, false).break(outer); + }))); + } + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/validation/const.js +var require_const = __commonJS({ + "node_modules/ajv/dist/vocabularies/validation/const.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var equal_1 = require_equal(); + var error48 = { + message: "must be equal to constant", + params: ({ schemaCode }) => (0, codegen_1._)`{allowedValue: ${schemaCode}}` + }; + var def = { + keyword: "const", + $data: true, + error: error48, + code(cxt) { + const { gen, data, $data, schemaCode, schema } = cxt; + if ($data || schema && typeof schema == "object") { + cxt.fail$data((0, codegen_1._)`!${(0, util_1.useFunc)(gen, equal_1.default)}(${data}, ${schemaCode})`); + } else { + cxt.fail((0, codegen_1._)`${schema} !== ${data}`); + } + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/validation/enum.js +var require_enum = __commonJS({ + "node_modules/ajv/dist/vocabularies/validation/enum.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var equal_1 = require_equal(); + var error48 = { + message: "must be equal to one of the allowed values", + params: ({ schemaCode }) => (0, codegen_1._)`{allowedValues: ${schemaCode}}` + }; + var def = { + keyword: "enum", + schemaType: "array", + $data: true, + error: error48, + code(cxt) { + const { gen, data, $data, schema, schemaCode, it } = cxt; + if (!$data && schema.length === 0) + throw new Error("enum must have non-empty array"); + const useLoop = schema.length >= it.opts.loopEnum; + let eql; + const getEql = () => eql !== null && eql !== void 0 ? eql : eql = (0, util_1.useFunc)(gen, equal_1.default); + let valid; + if (useLoop || $data) { + valid = gen.let("valid"); + cxt.block$data(valid, loopEnum); + } else { + if (!Array.isArray(schema)) + throw new Error("ajv implementation error"); + const vSchema = gen.const("vSchema", schemaCode); + valid = (0, codegen_1.or)(...schema.map((_x2, i) => equalCode(vSchema, i))); + } + cxt.pass(valid); + function loopEnum() { + gen.assign(valid, false); + gen.forOf("v", schemaCode, (v2) => gen.if((0, codegen_1._)`${getEql()}(${data}, ${v2})`, () => gen.assign(valid, true).break())); + } + function equalCode(vSchema, i) { + const sch = schema[i]; + return typeof sch === "object" && sch !== null ? (0, codegen_1._)`${getEql()}(${data}, ${vSchema}[${i}])` : (0, codegen_1._)`${data} === ${sch}`; + } + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/validation/index.js +var require_validation = __commonJS({ + "node_modules/ajv/dist/vocabularies/validation/index.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var limitNumber_1 = require_limitNumber(); + var multipleOf_1 = require_multipleOf(); + var limitLength_1 = require_limitLength(); + var pattern_1 = require_pattern(); + var limitProperties_1 = require_limitProperties(); + var required_1 = require_required(); + var limitItems_1 = require_limitItems(); + var uniqueItems_1 = require_uniqueItems(); + var const_1 = require_const(); + var enum_1 = require_enum(); + var validation = [ + // number + limitNumber_1.default, + multipleOf_1.default, + // string + limitLength_1.default, + pattern_1.default, + // object + limitProperties_1.default, + required_1.default, + // array + limitItems_1.default, + uniqueItems_1.default, + // any + { keyword: "type", schemaType: ["string", "array"] }, + { keyword: "nullable", schemaType: "boolean" }, + const_1.default, + enum_1.default + ]; + exports.default = validation; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +var require_additionalItems = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.validateAdditionalItems = void 0; + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var error48 = { + message: ({ params: { len } }) => (0, codegen_1.str)`must NOT have more than ${len} items`, + params: ({ params: { len } }) => (0, codegen_1._)`{limit: ${len}}` + }; + var def = { + keyword: "additionalItems", + type: "array", + schemaType: ["boolean", "object"], + before: "uniqueItems", + error: error48, + code(cxt) { + const { parentSchema, it } = cxt; + const { items } = parentSchema; + if (!Array.isArray(items)) { + (0, util_1.checkStrictMode)(it, '"additionalItems" is ignored when "items" is not an array of schemas'); + return; + } + validateAdditionalItems(cxt, items); + } + }; + function validateAdditionalItems(cxt, items) { + const { gen, schema, data, keyword, it } = cxt; + it.items = true; + const len = gen.const("len", (0, codegen_1._)`${data}.length`); + if (schema === false) { + cxt.setParams({ len: items.length }); + cxt.pass((0, codegen_1._)`${len} <= ${items.length}`); + } else if (typeof schema == "object" && !(0, util_1.alwaysValidSchema)(it, schema)) { + const valid = gen.var("valid", (0, codegen_1._)`${len} <= ${items.length}`); + gen.if((0, codegen_1.not)(valid), () => validateItems(valid)); + cxt.ok(valid); + } + function validateItems(valid) { + gen.forRange("i", items.length, len, (i) => { + cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid); + if (!it.allErrors) + gen.if((0, codegen_1.not)(valid), () => gen.break()); + }); + } + } + exports.validateAdditionalItems = validateAdditionalItems; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/items.js +var require_items = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/items.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.validateTuple = void 0; + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var code_1 = require_code2(); + var def = { + keyword: "items", + type: "array", + schemaType: ["object", "array", "boolean"], + before: "uniqueItems", + code(cxt) { + const { schema, it } = cxt; + if (Array.isArray(schema)) + return validateTuple(cxt, "additionalItems", schema); + it.items = true; + if ((0, util_1.alwaysValidSchema)(it, schema)) + return; + cxt.ok((0, code_1.validateArray)(cxt)); + } + }; + function validateTuple(cxt, extraItems, schArr = cxt.schema) { + const { gen, parentSchema, data, keyword, it } = cxt; + checkStrictTuple(parentSchema); + if (it.opts.unevaluated && schArr.length && it.items !== true) { + it.items = util_1.mergeEvaluated.items(gen, schArr.length, it.items); + } + const valid = gen.name("valid"); + const len = gen.const("len", (0, codegen_1._)`${data}.length`); + schArr.forEach((sch, i) => { + if ((0, util_1.alwaysValidSchema)(it, sch)) + return; + gen.if((0, codegen_1._)`${len} > ${i}`, () => cxt.subschema({ + keyword, + schemaProp: i, + dataProp: i + }, valid)); + cxt.ok(valid); + }); + function checkStrictTuple(sch) { + const { opts, errSchemaPath } = it; + const l2 = schArr.length; + const fullTuple = l2 === sch.minItems && (l2 === sch.maxItems || sch[extraItems] === false); + if (opts.strictTuples && !fullTuple) { + const msg = `"${keyword}" is ${l2}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path "${errSchemaPath}"`; + (0, util_1.checkStrictMode)(it, msg, opts.strictTuples); + } + } + } + exports.validateTuple = validateTuple; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +var require_prefixItems = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/prefixItems.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var items_1 = require_items(); + var def = { + keyword: "prefixItems", + type: "array", + schemaType: ["array"], + before: "uniqueItems", + code: (cxt) => (0, items_1.validateTuple)(cxt, "items") + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/items2020.js +var require_items2020 = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/items2020.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var code_1 = require_code2(); + var additionalItems_1 = require_additionalItems(); + var error48 = { + message: ({ params: { len } }) => (0, codegen_1.str)`must NOT have more than ${len} items`, + params: ({ params: { len } }) => (0, codegen_1._)`{limit: ${len}}` + }; + var def = { + keyword: "items", + type: "array", + schemaType: ["object", "boolean"], + before: "uniqueItems", + error: error48, + code(cxt) { + const { schema, parentSchema, it } = cxt; + const { prefixItems } = parentSchema; + it.items = true; + if ((0, util_1.alwaysValidSchema)(it, schema)) + return; + if (prefixItems) + (0, additionalItems_1.validateAdditionalItems)(cxt, prefixItems); + else + cxt.ok((0, code_1.validateArray)(cxt)); + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/contains.js +var require_contains = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/contains.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var error48 = { + message: ({ params: { min, max } }) => max === void 0 ? (0, codegen_1.str)`must contain at least ${min} valid item(s)` : (0, codegen_1.str)`must contain at least ${min} and no more than ${max} valid item(s)`, + params: ({ params: { min, max } }) => max === void 0 ? (0, codegen_1._)`{minContains: ${min}}` : (0, codegen_1._)`{minContains: ${min}, maxContains: ${max}}` + }; + var def = { + keyword: "contains", + type: "array", + schemaType: ["object", "boolean"], + before: "uniqueItems", + trackErrors: true, + error: error48, + code(cxt) { + const { gen, schema, parentSchema, data, it } = cxt; + let min; + let max; + const { minContains, maxContains } = parentSchema; + if (it.opts.next) { + min = minContains === void 0 ? 1 : minContains; + max = maxContains; + } else { + min = 1; + } + const len = gen.const("len", (0, codegen_1._)`${data}.length`); + cxt.setParams({ min, max }); + if (max === void 0 && min === 0) { + (0, util_1.checkStrictMode)(it, `"minContains" == 0 without "maxContains": "contains" keyword ignored`); + return; + } + if (max !== void 0 && min > max) { + (0, util_1.checkStrictMode)(it, `"minContains" > "maxContains" is always invalid`); + cxt.fail(); + return; + } + if ((0, util_1.alwaysValidSchema)(it, schema)) { + let cond = (0, codegen_1._)`${len} >= ${min}`; + if (max !== void 0) + cond = (0, codegen_1._)`${cond} && ${len} <= ${max}`; + cxt.pass(cond); + return; + } + it.items = true; + const valid = gen.name("valid"); + if (max === void 0 && min === 1) { + validateItems(valid, () => gen.if(valid, () => gen.break())); + } else if (min === 0) { + gen.let(valid, true); + if (max !== void 0) + gen.if((0, codegen_1._)`${data}.length > 0`, validateItemsWithCount); + } else { + gen.let(valid, false); + validateItemsWithCount(); + } + cxt.result(valid, () => cxt.reset()); + function validateItemsWithCount() { + const schValid = gen.name("_valid"); + const count = gen.let("count", 0); + validateItems(schValid, () => gen.if(schValid, () => checkLimits(count))); + } + function validateItems(_valid, block) { + gen.forRange("i", 0, len, (i) => { + cxt.subschema({ + keyword: "contains", + dataProp: i, + dataPropType: util_1.Type.Num, + compositeRule: true + }, _valid); + block(); + }); + } + function checkLimits(count) { + gen.code((0, codegen_1._)`${count}++`); + if (max === void 0) { + gen.if((0, codegen_1._)`${count} >= ${min}`, () => gen.assign(valid, true).break()); + } else { + gen.if((0, codegen_1._)`${count} > ${max}`, () => gen.assign(valid, false).break()); + if (min === 1) + gen.assign(valid, true); + else + gen.if((0, codegen_1._)`${count} >= ${min}`, () => gen.assign(valid, true)); + } + } + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/dependencies.js +var require_dependencies = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/dependencies.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = void 0; + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var code_1 = require_code2(); + exports.error = { + message: ({ params: { property, depsCount, deps } }) => { + const property_ies = depsCount === 1 ? "property" : "properties"; + return (0, codegen_1.str)`must have ${property_ies} ${deps} when property ${property} is present`; + }, + params: ({ params: { property, depsCount, deps, missingProperty } }) => (0, codegen_1._)`{property: ${property}, + missingProperty: ${missingProperty}, + depsCount: ${depsCount}, + deps: ${deps}}` + // TODO change to reference + }; + var def = { + keyword: "dependencies", + type: "object", + schemaType: "object", + error: exports.error, + code(cxt) { + const [propDeps, schDeps] = splitDependencies(cxt); + validatePropertyDeps(cxt, propDeps); + validateSchemaDeps(cxt, schDeps); + } + }; + function splitDependencies({ schema }) { + const propertyDeps = {}; + const schemaDeps = {}; + for (const key in schema) { + if (key === "__proto__") + continue; + const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps; + deps[key] = schema[key]; + } + return [propertyDeps, schemaDeps]; + } + function validatePropertyDeps(cxt, propertyDeps = cxt.schema) { + const { gen, data, it } = cxt; + if (Object.keys(propertyDeps).length === 0) + return; + const missing = gen.let("missing"); + for (const prop in propertyDeps) { + const deps = propertyDeps[prop]; + if (deps.length === 0) + continue; + const hasProperty = (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties); + cxt.setParams({ + property: prop, + depsCount: deps.length, + deps: deps.join(", ") + }); + if (it.allErrors) { + gen.if(hasProperty, () => { + for (const depProp of deps) { + (0, code_1.checkReportMissingProp)(cxt, depProp); + } + }); + } else { + gen.if((0, codegen_1._)`${hasProperty} && (${(0, code_1.checkMissingProp)(cxt, deps, missing)})`); + (0, code_1.reportMissingProp)(cxt, missing); + gen.else(); + } + } + } + exports.validatePropertyDeps = validatePropertyDeps; + function validateSchemaDeps(cxt, schemaDeps = cxt.schema) { + const { gen, data, keyword, it } = cxt; + const valid = gen.name("valid"); + for (const prop in schemaDeps) { + if ((0, util_1.alwaysValidSchema)(it, schemaDeps[prop])) + continue; + gen.if( + (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), + () => { + const schCxt = cxt.subschema({ keyword, schemaProp: prop }, valid); + cxt.mergeValidEvaluated(schCxt, valid); + }, + () => gen.var(valid, true) + // TODO var + ); + cxt.ok(valid); + } + } + exports.validateSchemaDeps = validateSchemaDeps; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +var require_propertyNames = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/propertyNames.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var error48 = { + message: "property name must be valid", + params: ({ params }) => (0, codegen_1._)`{propertyName: ${params.propertyName}}` + }; + var def = { + keyword: "propertyNames", + type: "object", + schemaType: ["object", "boolean"], + error: error48, + code(cxt) { + const { gen, schema, data, it } = cxt; + if ((0, util_1.alwaysValidSchema)(it, schema)) + return; + const valid = gen.name("valid"); + gen.forIn("key", data, (key) => { + cxt.setParams({ propertyName: key }); + cxt.subschema({ + keyword: "propertyNames", + data: key, + dataTypes: ["string"], + propertyName: key, + compositeRule: true + }, valid); + gen.if((0, codegen_1.not)(valid), () => { + cxt.error(true); + if (!it.allErrors) + gen.break(); + }); + }); + cxt.ok(valid); + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +var require_additionalProperties = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var code_1 = require_code2(); + var codegen_1 = require_codegen(); + var names_1 = require_names(); + var util_1 = require_util(); + var error48 = { + message: "must NOT have additional properties", + params: ({ params }) => (0, codegen_1._)`{additionalProperty: ${params.additionalProperty}}` + }; + var def = { + keyword: "additionalProperties", + type: ["object"], + schemaType: ["boolean", "object"], + allowUndefined: true, + trackErrors: true, + error: error48, + code(cxt) { + const { gen, schema, parentSchema, data, errsCount, it } = cxt; + if (!errsCount) + throw new Error("ajv implementation error"); + const { allErrors, opts } = it; + it.props = true; + if (opts.removeAdditional !== "all" && (0, util_1.alwaysValidSchema)(it, schema)) + return; + const props = (0, code_1.allSchemaProperties)(parentSchema.properties); + const patProps = (0, code_1.allSchemaProperties)(parentSchema.patternProperties); + checkAdditionalProperties(); + cxt.ok((0, codegen_1._)`${errsCount} === ${names_1.default.errors}`); + function checkAdditionalProperties() { + gen.forIn("key", data, (key) => { + if (!props.length && !patProps.length) + additionalPropertyCode(key); + else + gen.if(isAdditional(key), () => additionalPropertyCode(key)); + }); + } + function isAdditional(key) { + let definedProp; + if (props.length > 8) { + const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, "properties"); + definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key); + } else if (props.length) { + definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._)`${key} === ${p}`)); + } else { + definedProp = codegen_1.nil; + } + if (patProps.length) { + definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._)`${(0, code_1.usePattern)(cxt, p)}.test(${key})`)); + } + return (0, codegen_1.not)(definedProp); + } + function deleteAdditional(key) { + gen.code((0, codegen_1._)`delete ${data}[${key}]`); + } + function additionalPropertyCode(key) { + if (opts.removeAdditional === "all" || opts.removeAdditional && schema === false) { + deleteAdditional(key); + return; + } + if (schema === false) { + cxt.setParams({ additionalProperty: key }); + cxt.error(); + if (!allErrors) + gen.break(); + return; + } + if (typeof schema == "object" && !(0, util_1.alwaysValidSchema)(it, schema)) { + const valid = gen.name("valid"); + if (opts.removeAdditional === "failing") { + applyAdditionalSchema(key, valid, false); + gen.if((0, codegen_1.not)(valid), () => { + cxt.reset(); + deleteAdditional(key); + }); + } else { + applyAdditionalSchema(key, valid); + if (!allErrors) + gen.if((0, codegen_1.not)(valid), () => gen.break()); + } + } + } + function applyAdditionalSchema(key, valid, errors) { + const subschema = { + keyword: "additionalProperties", + dataProp: key, + dataPropType: util_1.Type.Str + }; + if (errors === false) { + Object.assign(subschema, { + compositeRule: true, + createErrors: false, + allErrors: false + }); + } + cxt.subschema(subschema, valid); + } + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/properties.js +var require_properties = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/properties.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var validate_1 = require_validate(); + var code_1 = require_code2(); + var util_1 = require_util(); + var additionalProperties_1 = require_additionalProperties(); + var def = { + keyword: "properties", + type: "object", + schemaType: "object", + code(cxt) { + const { gen, schema, parentSchema, data, it } = cxt; + if (it.opts.removeAdditional === "all" && parentSchema.additionalProperties === void 0) { + additionalProperties_1.default.code(new validate_1.KeywordCxt(it, additionalProperties_1.default, "additionalProperties")); + } + const allProps = (0, code_1.allSchemaProperties)(schema); + for (const prop of allProps) { + it.definedProperties.add(prop); + } + if (it.opts.unevaluated && allProps.length && it.props !== true) { + it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props); + } + const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p])); + if (properties.length === 0) + return; + const valid = gen.name("valid"); + for (const prop of properties) { + if (hasDefault(prop)) { + applyPropertySchema(prop); + } else { + gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties)); + applyPropertySchema(prop); + if (!it.allErrors) + gen.else().var(valid, true); + gen.endIf(); + } + cxt.it.definedProperties.add(prop); + cxt.ok(valid); + } + function hasDefault(prop) { + return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== void 0; + } + function applyPropertySchema(prop) { + cxt.subschema({ + keyword: "properties", + schemaProp: prop, + dataProp: prop + }, valid); + } + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +var require_patternProperties = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/patternProperties.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var code_1 = require_code2(); + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var util_2 = require_util(); + var def = { + keyword: "patternProperties", + type: "object", + schemaType: "object", + code(cxt) { + const { gen, schema, data, parentSchema, it } = cxt; + const { opts } = it; + const patterns = (0, code_1.allSchemaProperties)(schema); + const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p])); + if (patterns.length === 0 || alwaysValidPatterns.length === patterns.length && (!it.opts.unevaluated || it.props === true)) { + return; + } + const checkProperties = opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties; + const valid = gen.name("valid"); + if (it.props !== true && !(it.props instanceof codegen_1.Name)) { + it.props = (0, util_2.evaluatedPropsToName)(gen, it.props); + } + const { props } = it; + validatePatternProperties(); + function validatePatternProperties() { + for (const pat of patterns) { + if (checkProperties) + checkMatchingProperties(pat); + if (it.allErrors) { + validateProperties(pat); + } else { + gen.var(valid, true); + validateProperties(pat); + gen.if(valid); + } + } + } + function checkMatchingProperties(pat) { + for (const prop in checkProperties) { + if (new RegExp(pat).test(prop)) { + (0, util_1.checkStrictMode)(it, `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`); + } + } + } + function validateProperties(pat) { + gen.forIn("key", data, (key) => { + gen.if((0, codegen_1._)`${(0, code_1.usePattern)(cxt, pat)}.test(${key})`, () => { + const alwaysValid = alwaysValidPatterns.includes(pat); + if (!alwaysValid) { + cxt.subschema({ + keyword: "patternProperties", + schemaProp: pat, + dataProp: key, + dataPropType: util_2.Type.Str + }, valid); + } + if (it.opts.unevaluated && props !== true) { + gen.assign((0, codegen_1._)`${props}[${key}]`, true); + } else if (!alwaysValid && !it.allErrors) { + gen.if((0, codegen_1.not)(valid), () => gen.break()); + } + }); + }); + } + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/not.js +var require_not = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/not.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var util_1 = require_util(); + var def = { + keyword: "not", + schemaType: ["object", "boolean"], + trackErrors: true, + code(cxt) { + const { gen, schema, it } = cxt; + if ((0, util_1.alwaysValidSchema)(it, schema)) { + cxt.fail(); + return; + } + const valid = gen.name("valid"); + cxt.subschema({ + keyword: "not", + compositeRule: true, + createErrors: false, + allErrors: false + }, valid); + cxt.failResult(valid, () => cxt.reset(), () => cxt.error()); + }, + error: { message: "must NOT be valid" } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/anyOf.js +var require_anyOf = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/anyOf.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var code_1 = require_code2(); + var def = { + keyword: "anyOf", + schemaType: "array", + trackErrors: true, + code: code_1.validateUnion, + error: { message: "must match a schema in anyOf" } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/oneOf.js +var require_oneOf = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/oneOf.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var error48 = { + message: "must match exactly one schema in oneOf", + params: ({ params }) => (0, codegen_1._)`{passingSchemas: ${params.passing}}` + }; + var def = { + keyword: "oneOf", + schemaType: "array", + trackErrors: true, + error: error48, + code(cxt) { + const { gen, schema, parentSchema, it } = cxt; + if (!Array.isArray(schema)) + throw new Error("ajv implementation error"); + if (it.opts.discriminator && parentSchema.discriminator) + return; + const schArr = schema; + const valid = gen.let("valid", false); + const passing = gen.let("passing", null); + const schValid = gen.name("_valid"); + cxt.setParams({ passing }); + gen.block(validateOneOf); + cxt.result(valid, () => cxt.reset(), () => cxt.error(true)); + function validateOneOf() { + schArr.forEach((sch, i) => { + let schCxt; + if ((0, util_1.alwaysValidSchema)(it, sch)) { + gen.var(schValid, true); + } else { + schCxt = cxt.subschema({ + keyword: "oneOf", + schemaProp: i, + compositeRule: true + }, schValid); + } + if (i > 0) { + gen.if((0, codegen_1._)`${schValid} && ${valid}`).assign(valid, false).assign(passing, (0, codegen_1._)`[${passing}, ${i}]`).else(); + } + gen.if(schValid, () => { + gen.assign(valid, true); + gen.assign(passing, i); + if (schCxt) + cxt.mergeEvaluated(schCxt, codegen_1.Name); + }); + }); + } + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/allOf.js +var require_allOf = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/allOf.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var util_1 = require_util(); + var def = { + keyword: "allOf", + schemaType: "array", + code(cxt) { + const { gen, schema, it } = cxt; + if (!Array.isArray(schema)) + throw new Error("ajv implementation error"); + const valid = gen.name("valid"); + schema.forEach((sch, i) => { + if ((0, util_1.alwaysValidSchema)(it, sch)) + return; + const schCxt = cxt.subschema({ keyword: "allOf", schemaProp: i }, valid); + cxt.ok(valid); + cxt.mergeEvaluated(schCxt); + }); + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/if.js +var require_if = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/if.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var util_1 = require_util(); + var error48 = { + message: ({ params }) => (0, codegen_1.str)`must match "${params.ifClause}" schema`, + params: ({ params }) => (0, codegen_1._)`{failingKeyword: ${params.ifClause}}` + }; + var def = { + keyword: "if", + schemaType: ["object", "boolean"], + trackErrors: true, + error: error48, + code(cxt) { + const { gen, parentSchema, it } = cxt; + if (parentSchema.then === void 0 && parentSchema.else === void 0) { + (0, util_1.checkStrictMode)(it, '"if" without "then" and "else" is ignored'); + } + const hasThen = hasSchema(it, "then"); + const hasElse = hasSchema(it, "else"); + if (!hasThen && !hasElse) + return; + const valid = gen.let("valid", true); + const schValid = gen.name("_valid"); + validateIf(); + cxt.reset(); + if (hasThen && hasElse) { + const ifClause = gen.let("ifClause"); + cxt.setParams({ ifClause }); + gen.if(schValid, validateClause("then", ifClause), validateClause("else", ifClause)); + } else if (hasThen) { + gen.if(schValid, validateClause("then")); + } else { + gen.if((0, codegen_1.not)(schValid), validateClause("else")); + } + cxt.pass(valid, () => cxt.error(true)); + function validateIf() { + const schCxt = cxt.subschema({ + keyword: "if", + compositeRule: true, + createErrors: false, + allErrors: false + }, schValid); + cxt.mergeEvaluated(schCxt); + } + function validateClause(keyword, ifClause) { + return () => { + const schCxt = cxt.subschema({ keyword }, schValid); + gen.assign(valid, schValid); + cxt.mergeValidEvaluated(schCxt, valid); + if (ifClause) + gen.assign(ifClause, (0, codegen_1._)`${keyword}`); + else + cxt.setParams({ ifClause: keyword }); + }; + } + } + }; + function hasSchema(it, keyword) { + const schema = it.schema[keyword]; + return schema !== void 0 && !(0, util_1.alwaysValidSchema)(it, schema); + } + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/thenElse.js +var require_thenElse = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/thenElse.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var util_1 = require_util(); + var def = { + keyword: ["then", "else"], + schemaType: ["object", "boolean"], + code({ keyword, parentSchema, it }) { + if (parentSchema.if === void 0) + (0, util_1.checkStrictMode)(it, `"${keyword}" without "if" is ignored`); + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/applicator/index.js +var require_applicator = __commonJS({ + "node_modules/ajv/dist/vocabularies/applicator/index.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var additionalItems_1 = require_additionalItems(); + var prefixItems_1 = require_prefixItems(); + var items_1 = require_items(); + var items2020_1 = require_items2020(); + var contains_1 = require_contains(); + var dependencies_1 = require_dependencies(); + var propertyNames_1 = require_propertyNames(); + var additionalProperties_1 = require_additionalProperties(); + var properties_1 = require_properties(); + var patternProperties_1 = require_patternProperties(); + var not_1 = require_not(); + var anyOf_1 = require_anyOf(); + var oneOf_1 = require_oneOf(); + var allOf_1 = require_allOf(); + var if_1 = require_if(); + var thenElse_1 = require_thenElse(); + function getApplicator(draft2020 = false) { + const applicator = [ + // any + not_1.default, + anyOf_1.default, + oneOf_1.default, + allOf_1.default, + if_1.default, + thenElse_1.default, + // object + propertyNames_1.default, + additionalProperties_1.default, + dependencies_1.default, + properties_1.default, + patternProperties_1.default + ]; + if (draft2020) + applicator.push(prefixItems_1.default, items2020_1.default); + else + applicator.push(additionalItems_1.default, items_1.default); + applicator.push(contains_1.default); + return applicator; + } + exports.default = getApplicator; + } +}); + +// node_modules/ajv/dist/vocabularies/format/format.js +var require_format = __commonJS({ + "node_modules/ajv/dist/vocabularies/format/format.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var error48 = { + message: ({ schemaCode }) => (0, codegen_1.str)`must match format "${schemaCode}"`, + params: ({ schemaCode }) => (0, codegen_1._)`{format: ${schemaCode}}` + }; + var def = { + keyword: "format", + type: ["number", "string"], + schemaType: "string", + $data: true, + error: error48, + code(cxt, ruleType) { + const { gen, data, $data, schema, schemaCode, it } = cxt; + const { opts, errSchemaPath, schemaEnv, self: self2 } = it; + if (!opts.validateFormats) + return; + if ($data) + validate$DataFormat(); + else + validateFormat(); + function validate$DataFormat() { + const fmts = gen.scopeValue("formats", { + ref: self2.formats, + code: opts.code.formats + }); + const fDef = gen.const("fDef", (0, codegen_1._)`${fmts}[${schemaCode}]`); + const fType = gen.let("fType"); + const format = gen.let("format"); + gen.if((0, codegen_1._)`typeof ${fDef} == "object" && !(${fDef} instanceof RegExp)`, () => gen.assign(fType, (0, codegen_1._)`${fDef}.type || "string"`).assign(format, (0, codegen_1._)`${fDef}.validate`), () => gen.assign(fType, (0, codegen_1._)`"string"`).assign(format, fDef)); + cxt.fail$data((0, codegen_1.or)(unknownFmt(), invalidFmt())); + function unknownFmt() { + if (opts.strictSchema === false) + return codegen_1.nil; + return (0, codegen_1._)`${schemaCode} && !${format}`; + } + function invalidFmt() { + const callFormat = schemaEnv.$async ? (0, codegen_1._)`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))` : (0, codegen_1._)`${format}(${data})`; + const validData = (0, codegen_1._)`(typeof ${format} == "function" ? ${callFormat} : ${format}.test(${data}))`; + return (0, codegen_1._)`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`; + } + } + function validateFormat() { + const formatDef = self2.formats[schema]; + if (!formatDef) { + unknownFormat(); + return; + } + if (formatDef === true) + return; + const [fmtType, format, fmtRef] = getFormat(formatDef); + if (fmtType === ruleType) + cxt.pass(validCondition()); + function unknownFormat() { + if (opts.strictSchema === false) { + self2.logger.warn(unknownMsg()); + return; + } + throw new Error(unknownMsg()); + function unknownMsg() { + return `unknown format "${schema}" ignored in schema at path "${errSchemaPath}"`; + } + } + function getFormat(fmtDef) { + const code = fmtDef instanceof RegExp ? (0, codegen_1.regexpCode)(fmtDef) : opts.code.formats ? (0, codegen_1._)`${opts.code.formats}${(0, codegen_1.getProperty)(schema)}` : void 0; + const fmt = gen.scopeValue("formats", { key: schema, ref: fmtDef, code }); + if (typeof fmtDef == "object" && !(fmtDef instanceof RegExp)) { + return [fmtDef.type || "string", fmtDef.validate, (0, codegen_1._)`${fmt}.validate`]; + } + return ["string", fmtDef, fmt]; + } + function validCondition() { + if (typeof formatDef == "object" && !(formatDef instanceof RegExp) && formatDef.async) { + if (!schemaEnv.$async) + throw new Error("async format in sync schema"); + return (0, codegen_1._)`await ${fmtRef}(${data})`; + } + return typeof format == "function" ? (0, codegen_1._)`${fmtRef}(${data})` : (0, codegen_1._)`${fmtRef}.test(${data})`; + } + } + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/vocabularies/format/index.js +var require_format2 = __commonJS({ + "node_modules/ajv/dist/vocabularies/format/index.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var format_1 = require_format(); + var format = [format_1.default]; + exports.default = format; + } +}); + +// node_modules/ajv/dist/vocabularies/metadata.js +var require_metadata = __commonJS({ + "node_modules/ajv/dist/vocabularies/metadata.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.contentVocabulary = exports.metadataVocabulary = void 0; + exports.metadataVocabulary = [ + "title", + "description", + "default", + "deprecated", + "readOnly", + "writeOnly", + "examples" + ]; + exports.contentVocabulary = [ + "contentMediaType", + "contentEncoding", + "contentSchema" + ]; + } +}); + +// node_modules/ajv/dist/vocabularies/draft7.js +var require_draft7 = __commonJS({ + "node_modules/ajv/dist/vocabularies/draft7.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var core_1 = require_core2(); + var validation_1 = require_validation(); + var applicator_1 = require_applicator(); + var format_1 = require_format2(); + var metadata_1 = require_metadata(); + var draft7Vocabularies = [ + core_1.default, + validation_1.default, + (0, applicator_1.default)(), + format_1.default, + metadata_1.metadataVocabulary, + metadata_1.contentVocabulary + ]; + exports.default = draft7Vocabularies; + } +}); + +// node_modules/ajv/dist/vocabularies/discriminator/types.js +var require_types = __commonJS({ + "node_modules/ajv/dist/vocabularies/discriminator/types.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.DiscrError = void 0; + var DiscrError; + (function(DiscrError2) { + DiscrError2["Tag"] = "tag"; + DiscrError2["Mapping"] = "mapping"; + })(DiscrError || (exports.DiscrError = DiscrError = {})); + } +}); + +// node_modules/ajv/dist/vocabularies/discriminator/index.js +var require_discriminator = __commonJS({ + "node_modules/ajv/dist/vocabularies/discriminator/index.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var codegen_1 = require_codegen(); + var types_1 = require_types(); + var compile_1 = require_compile(); + var ref_error_1 = require_ref_error(); + var util_1 = require_util(); + var error48 = { + message: ({ params: { discrError, tagName } }) => discrError === types_1.DiscrError.Tag ? `tag "${tagName}" must be string` : `value of tag "${tagName}" must be in oneOf`, + params: ({ params: { discrError, tag, tagName } }) => (0, codegen_1._)`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}` + }; + var def = { + keyword: "discriminator", + type: "object", + schemaType: "object", + error: error48, + code(cxt) { + const { gen, data, schema, parentSchema, it } = cxt; + const { oneOf } = parentSchema; + if (!it.opts.discriminator) { + throw new Error("discriminator: requires discriminator option"); + } + const tagName = schema.propertyName; + if (typeof tagName != "string") + throw new Error("discriminator: requires propertyName"); + if (schema.mapping) + throw new Error("discriminator: mapping is not supported"); + if (!oneOf) + throw new Error("discriminator: requires oneOf keyword"); + const valid = gen.let("valid", false); + const tag = gen.const("tag", (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(tagName)}`); + gen.if((0, codegen_1._)`typeof ${tag} == "string"`, () => validateMapping(), () => cxt.error(false, { discrError: types_1.DiscrError.Tag, tag, tagName })); + cxt.ok(valid); + function validateMapping() { + const mapping = getMapping(); + gen.if(false); + for (const tagValue in mapping) { + gen.elseIf((0, codegen_1._)`${tag} === ${tagValue}`); + gen.assign(valid, applyTagSchema(mapping[tagValue])); + } + gen.else(); + cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag, tagName }); + gen.endIf(); + } + function applyTagSchema(schemaProp) { + const _valid = gen.name("valid"); + const schCxt = cxt.subschema({ keyword: "oneOf", schemaProp }, _valid); + cxt.mergeEvaluated(schCxt, codegen_1.Name); + return _valid; + } + function getMapping() { + var _a5; + const oneOfMapping = {}; + const topRequired = hasRequired(parentSchema); + let tagRequired = true; + for (let i = 0; i < oneOf.length; i++) { + let sch = oneOf[i]; + if ((sch === null || sch === void 0 ? void 0 : sch.$ref) && !(0, util_1.schemaHasRulesButRef)(sch, it.self.RULES)) { + const ref = sch.$ref; + sch = compile_1.resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref); + if (sch instanceof compile_1.SchemaEnv) + sch = sch.schema; + if (sch === void 0) + throw new ref_error_1.default(it.opts.uriResolver, it.baseId, ref); + } + const propSch = (_a5 = sch === null || sch === void 0 ? void 0 : sch.properties) === null || _a5 === void 0 ? void 0 : _a5[tagName]; + if (typeof propSch != "object") { + throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${tagName}"`); + } + tagRequired = tagRequired && (topRequired || hasRequired(sch)); + addMappings(propSch, i); + } + if (!tagRequired) + throw new Error(`discriminator: "${tagName}" must be required`); + return oneOfMapping; + function hasRequired({ required: required2 }) { + return Array.isArray(required2) && required2.includes(tagName); + } + function addMappings(sch, i) { + if (sch.const) { + addMapping(sch.const, i); + } else if (sch.enum) { + for (const tagValue of sch.enum) { + addMapping(tagValue, i); + } + } else { + throw new Error(`discriminator: "properties/${tagName}" must have "const" or "enum"`); + } + } + function addMapping(tagValue, i) { + if (typeof tagValue != "string" || tagValue in oneOfMapping) { + throw new Error(`discriminator: "${tagName}" values must be unique strings`); + } + oneOfMapping[tagValue] = i; + } + } + } + }; + exports.default = def; + } +}); + +// node_modules/ajv/dist/refs/json-schema-draft-07.json +var require_json_schema_draft_07 = __commonJS({ + "node_modules/ajv/dist/refs/json-schema-draft-07.json"(exports, module2) { + module2.exports = { + $schema: "http://json-schema.org/draft-07/schema#", + $id: "http://json-schema.org/draft-07/schema#", + title: "Core schema meta-schema", + definitions: { + schemaArray: { + type: "array", + minItems: 1, + items: { $ref: "#" } + }, + nonNegativeInteger: { + type: "integer", + minimum: 0 + }, + nonNegativeIntegerDefault0: { + allOf: [{ $ref: "#/definitions/nonNegativeInteger" }, { default: 0 }] + }, + simpleTypes: { + enum: ["array", "boolean", "integer", "null", "number", "object", "string"] + }, + stringArray: { + type: "array", + items: { type: "string" }, + uniqueItems: true, + default: [] + } + }, + type: ["object", "boolean"], + properties: { + $id: { + type: "string", + format: "uri-reference" + }, + $schema: { + type: "string", + format: "uri" + }, + $ref: { + type: "string", + format: "uri-reference" + }, + $comment: { + type: "string" + }, + title: { + type: "string" + }, + description: { + type: "string" + }, + default: true, + readOnly: { + type: "boolean", + default: false + }, + examples: { + type: "array", + items: true + }, + multipleOf: { + type: "number", + exclusiveMinimum: 0 + }, + maximum: { + type: "number" + }, + exclusiveMaximum: { + type: "number" + }, + minimum: { + type: "number" + }, + exclusiveMinimum: { + type: "number" + }, + maxLength: { $ref: "#/definitions/nonNegativeInteger" }, + minLength: { $ref: "#/definitions/nonNegativeIntegerDefault0" }, + pattern: { + type: "string", + format: "regex" + }, + additionalItems: { $ref: "#" }, + items: { + anyOf: [{ $ref: "#" }, { $ref: "#/definitions/schemaArray" }], + default: true + }, + maxItems: { $ref: "#/definitions/nonNegativeInteger" }, + minItems: { $ref: "#/definitions/nonNegativeIntegerDefault0" }, + uniqueItems: { + type: "boolean", + default: false + }, + contains: { $ref: "#" }, + maxProperties: { $ref: "#/definitions/nonNegativeInteger" }, + minProperties: { $ref: "#/definitions/nonNegativeIntegerDefault0" }, + required: { $ref: "#/definitions/stringArray" }, + additionalProperties: { $ref: "#" }, + definitions: { + type: "object", + additionalProperties: { $ref: "#" }, + default: {} + }, + properties: { + type: "object", + additionalProperties: { $ref: "#" }, + default: {} + }, + patternProperties: { + type: "object", + additionalProperties: { $ref: "#" }, + propertyNames: { format: "regex" }, + default: {} + }, + dependencies: { + type: "object", + additionalProperties: { + anyOf: [{ $ref: "#" }, { $ref: "#/definitions/stringArray" }] + } + }, + propertyNames: { $ref: "#" }, + const: true, + enum: { + type: "array", + items: true, + minItems: 1, + uniqueItems: true + }, + type: { + anyOf: [ + { $ref: "#/definitions/simpleTypes" }, + { + type: "array", + items: { $ref: "#/definitions/simpleTypes" }, + minItems: 1, + uniqueItems: true + } + ] + }, + format: { type: "string" }, + contentMediaType: { type: "string" }, + contentEncoding: { type: "string" }, + if: { $ref: "#" }, + then: { $ref: "#" }, + else: { $ref: "#" }, + allOf: { $ref: "#/definitions/schemaArray" }, + anyOf: { $ref: "#/definitions/schemaArray" }, + oneOf: { $ref: "#/definitions/schemaArray" }, + not: { $ref: "#" } + }, + default: true + }; + } +}); + +// node_modules/ajv/dist/ajv.js +var require_ajv = __commonJS({ + "node_modules/ajv/dist/ajv.js"(exports, module2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv = void 0; + var core_1 = require_core(); + var draft7_1 = require_draft7(); + var discriminator_1 = require_discriminator(); + var draft7MetaSchema = require_json_schema_draft_07(); + var META_SUPPORT_DATA = ["/properties"]; + var META_SCHEMA_ID = "http://json-schema.org/draft-07/schema"; + var Ajv2 = class extends core_1.default { + _addVocabularies() { + super._addVocabularies(); + draft7_1.default.forEach((v2) => this.addVocabulary(v2)); + if (this.opts.discriminator) + this.addKeyword(discriminator_1.default); + } + _addDefaultMetaSchema() { + super._addDefaultMetaSchema(); + if (!this.opts.meta) + return; + const metaSchema = this.opts.$data ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA) : draft7MetaSchema; + this.addMetaSchema(metaSchema, META_SCHEMA_ID, false); + this.refs["http://json-schema.org/schema"] = META_SCHEMA_ID; + } + defaultMeta() { + return this.opts.defaultMeta = super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : void 0); + } + }; + exports.Ajv = Ajv2; + module2.exports = exports = Ajv2; + module2.exports.Ajv = Ajv2; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = Ajv2; + var validate_1 = require_validate(); + Object.defineProperty(exports, "KeywordCxt", { enumerable: true, get: function() { + return validate_1.KeywordCxt; + } }); + var codegen_1 = require_codegen(); + Object.defineProperty(exports, "_", { enumerable: true, get: function() { + return codegen_1._; + } }); + Object.defineProperty(exports, "str", { enumerable: true, get: function() { + return codegen_1.str; + } }); + Object.defineProperty(exports, "stringify", { enumerable: true, get: function() { + return codegen_1.stringify; + } }); + Object.defineProperty(exports, "nil", { enumerable: true, get: function() { + return codegen_1.nil; + } }); + Object.defineProperty(exports, "Name", { enumerable: true, get: function() { + return codegen_1.Name; + } }); + Object.defineProperty(exports, "CodeGen", { enumerable: true, get: function() { + return codegen_1.CodeGen; + } }); + var validation_error_1 = require_validation_error(); + Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function() { + return validation_error_1.default; + } }); + var ref_error_1 = require_ref_error(); + Object.defineProperty(exports, "MissingRefError", { enumerable: true, get: function() { + return ref_error_1.default; + } }); + } +}); + +// node_modules/ajv-formats/dist/formats.js +var require_formats = __commonJS({ + "node_modules/ajv-formats/dist/formats.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.formatNames = exports.fastFormats = exports.fullFormats = void 0; + function fmtDef(validate, compare) { + return { validate, compare }; + } + exports.fullFormats = { + // date: http://tools.ietf.org/html/rfc3339#section-5.6 + date: fmtDef(date7, compareDate), + // date-time: http://tools.ietf.org/html/rfc3339#section-5.6 + time: fmtDef(getTime(true), compareTime), + "date-time": fmtDef(getDateTime(true), compareDateTime), + "iso-time": fmtDef(getTime(), compareIsoTime), + "iso-date-time": fmtDef(getDateTime(), compareIsoDateTime), + // duration: https://tools.ietf.org/html/rfc3339#appendix-A + duration: /^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/, + uri, + "uri-reference": /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i, + // uri-template: https://tools.ietf.org/html/rfc6570 + "uri-template": /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i, + // For the source: https://gist.github.com/dperini/729294 + // For test cases: https://mathiasbynens.be/demo/url-regex + url: /^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu, + email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i, + hostname: /^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i, + // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html + ipv4: /^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/, + ipv6: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i, + regex, + // uuid: http://tools.ietf.org/html/rfc4122 + uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i, + // JSON-pointer: https://tools.ietf.org/html/rfc6901 + // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A + "json-pointer": /^(?:\/(?:[^~/]|~0|~1)*)*$/, + "json-pointer-uri-fragment": /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i, + // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00 + "relative-json-pointer": /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/, + // the following formats are used by the openapi specification: https://spec.openapis.org/oas/v3.0.0#data-types + // byte: https://github.com/miguelmota/is-base64 + byte, + // signed 32 bit integer + int32: { type: "number", validate: validateInt32 }, + // signed 64 bit integer + int64: { type: "number", validate: validateInt64 }, + // C-type float + float: { type: "number", validate: validateNumber }, + // C-type double + double: { type: "number", validate: validateNumber }, + // hint to the UI to hide input strings + password: true, + // unchecked string payload + binary: true + }; + exports.fastFormats = { + ...exports.fullFormats, + date: fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\d$/, compareDate), + time: fmtDef(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, compareTime), + "date-time": fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, compareDateTime), + "iso-time": fmtDef(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, compareIsoTime), + "iso-date-time": fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, compareIsoDateTime), + // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js + uri: /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i, + "uri-reference": /^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i, + // email (sources from jsen validator): + // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363 + // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'wilful violation') + email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i + }; + exports.formatNames = Object.keys(exports.fullFormats); + function isLeapYear(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); + } + var DATE = /^(\d\d\d\d)-(\d\d)-(\d\d)$/; + var DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + function date7(str) { + const matches = DATE.exec(str); + if (!matches) + return false; + const year = +matches[1]; + const month = +matches[2]; + const day = +matches[3]; + return month >= 1 && month <= 12 && day >= 1 && day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month]); + } + function compareDate(d12, d2) { + if (!(d12 && d2)) + return void 0; + if (d12 > d2) + return 1; + if (d12 < d2) + return -1; + return 0; + } + var TIME = /^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i; + function getTime(strictTimeZone) { + return function time4(str) { + const matches = TIME.exec(str); + if (!matches) + return false; + const hr = +matches[1]; + const min = +matches[2]; + const sec = +matches[3]; + const tz = matches[4]; + const tzSign = matches[5] === "-" ? -1 : 1; + const tzH = +(matches[6] || 0); + const tzM = +(matches[7] || 0); + if (tzH > 23 || tzM > 59 || strictTimeZone && !tz) + return false; + if (hr <= 23 && min <= 59 && sec < 60) + return true; + const utcMin = min - tzM * tzSign; + const utcHr = hr - tzH * tzSign - (utcMin < 0 ? 1 : 0); + return (utcHr === 23 || utcHr === -1) && (utcMin === 59 || utcMin === -1) && sec < 61; + }; + } + function compareTime(s1, s2) { + if (!(s1 && s2)) + return void 0; + const t12 = (/* @__PURE__ */ new Date("2020-01-01T" + s1)).valueOf(); + const t22 = (/* @__PURE__ */ new Date("2020-01-01T" + s2)).valueOf(); + if (!(t12 && t22)) + return void 0; + return t12 - t22; + } + function compareIsoTime(t12, t22) { + if (!(t12 && t22)) + return void 0; + const a1 = TIME.exec(t12); + const a2 = TIME.exec(t22); + if (!(a1 && a2)) + return void 0; + t12 = a1[1] + a1[2] + a1[3]; + t22 = a2[1] + a2[2] + a2[3]; + if (t12 > t22) + return 1; + if (t12 < t22) + return -1; + return 0; + } + var DATE_TIME_SEPARATOR = /t|\s/i; + function getDateTime(strictTimeZone) { + const time4 = getTime(strictTimeZone); + return function date_time(str) { + const dateTime = str.split(DATE_TIME_SEPARATOR); + return dateTime.length === 2 && date7(dateTime[0]) && time4(dateTime[1]); + }; + } + function compareDateTime(dt1, dt2) { + if (!(dt1 && dt2)) + return void 0; + const d12 = new Date(dt1).valueOf(); + const d2 = new Date(dt2).valueOf(); + if (!(d12 && d2)) + return void 0; + return d12 - d2; + } + function compareIsoDateTime(dt1, dt2) { + if (!(dt1 && dt2)) + return void 0; + const [d12, t12] = dt1.split(DATE_TIME_SEPARATOR); + const [d2, t22] = dt2.split(DATE_TIME_SEPARATOR); + const res = compareDate(d12, d2); + if (res === void 0) + return void 0; + return res || compareTime(t12, t22); + } + var NOT_URI_FRAGMENT = /\/|:/; + var URI = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i; + function uri(str) { + return NOT_URI_FRAGMENT.test(str) && URI.test(str); + } + var BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm; + function byte(str) { + BYTE.lastIndex = 0; + return BYTE.test(str); + } + var MIN_INT32 = -(2 ** 31); + var MAX_INT32 = 2 ** 31 - 1; + function validateInt32(value) { + return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32; + } + function validateInt64(value) { + return Number.isInteger(value); + } + function validateNumber() { + return true; + } + var Z_ANCHOR = /[^\\]\\Z/; + function regex(str) { + if (Z_ANCHOR.test(str)) + return false; + try { + new RegExp(str); + return true; + } catch (e2) { + return false; + } + } + } +}); + +// node_modules/ajv-formats/dist/limit.js +var require_limit = __commonJS({ + "node_modules/ajv-formats/dist/limit.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.formatLimitDefinition = void 0; + var ajv_1 = require_ajv(); + var codegen_1 = require_codegen(); + var ops = codegen_1.operators; + var KWDs = { + formatMaximum: { okStr: "<=", ok: ops.LTE, fail: ops.GT }, + formatMinimum: { okStr: ">=", ok: ops.GTE, fail: ops.LT }, + formatExclusiveMaximum: { okStr: "<", ok: ops.LT, fail: ops.GTE }, + formatExclusiveMinimum: { okStr: ">", ok: ops.GT, fail: ops.LTE } + }; + var error48 = { + message: ({ keyword, schemaCode }) => (0, codegen_1.str)`should be ${KWDs[keyword].okStr} ${schemaCode}`, + params: ({ keyword, schemaCode }) => (0, codegen_1._)`{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}` + }; + exports.formatLimitDefinition = { + keyword: Object.keys(KWDs), + type: "string", + schemaType: "string", + $data: true, + error: error48, + code(cxt) { + const { gen, data, schemaCode, keyword, it } = cxt; + const { opts, self: self2 } = it; + if (!opts.validateFormats) + return; + const fCxt = new ajv_1.KeywordCxt(it, self2.RULES.all.format.definition, "format"); + if (fCxt.$data) + validate$DataFormat(); + else + validateFormat(); + function validate$DataFormat() { + const fmts = gen.scopeValue("formats", { + ref: self2.formats, + code: opts.code.formats + }); + const fmt = gen.const("fmt", (0, codegen_1._)`${fmts}[${fCxt.schemaCode}]`); + cxt.fail$data((0, codegen_1.or)((0, codegen_1._)`typeof ${fmt} != "object"`, (0, codegen_1._)`${fmt} instanceof RegExp`, (0, codegen_1._)`typeof ${fmt}.compare != "function"`, compareCode(fmt))); + } + function validateFormat() { + const format = fCxt.schema; + const fmtDef = self2.formats[format]; + if (!fmtDef || fmtDef === true) + return; + if (typeof fmtDef != "object" || fmtDef instanceof RegExp || typeof fmtDef.compare != "function") { + throw new Error(`"${keyword}": format "${format}" does not define "compare" function`); + } + const fmt = gen.scopeValue("formats", { + key: format, + ref: fmtDef, + code: opts.code.formats ? (0, codegen_1._)`${opts.code.formats}${(0, codegen_1.getProperty)(format)}` : void 0 + }); + cxt.fail$data(compareCode(fmt)); + } + function compareCode(fmt) { + return (0, codegen_1._)`${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword].fail} 0`; + } + }, + dependencies: ["format"] + }; + var formatLimitPlugin = (ajv) => { + ajv.addKeyword(exports.formatLimitDefinition); + return ajv; + }; + exports.default = formatLimitPlugin; + } +}); + +// node_modules/ajv-formats/dist/index.js +var require_dist = __commonJS({ + "node_modules/ajv-formats/dist/index.js"(exports, module2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var formats_1 = require_formats(); + var limit_1 = require_limit(); + var codegen_1 = require_codegen(); + var fullName = new codegen_1.Name("fullFormats"); + var fastName = new codegen_1.Name("fastFormats"); + var formatsPlugin = (ajv, opts = { keywords: true }) => { + if (Array.isArray(opts)) { + addFormats(ajv, opts, formats_1.fullFormats, fullName); + return ajv; + } + const [formats, exportName] = opts.mode === "fast" ? [formats_1.fastFormats, fastName] : [formats_1.fullFormats, fullName]; + const list = opts.formats || formats_1.formatNames; + addFormats(ajv, list, formats, exportName); + if (opts.keywords) + (0, limit_1.default)(ajv); + return ajv; + }; + formatsPlugin.get = (name, mode = "full") => { + const formats = mode === "fast" ? formats_1.fastFormats : formats_1.fullFormats; + const f9 = formats[name]; + if (!f9) + throw new Error(`Unknown format "${name}"`); + return f9; + }; + function addFormats(ajv, list, fs29, exportName) { + var _a5; + var _b3; + (_a5 = (_b3 = ajv.opts.code).formats) !== null && _a5 !== void 0 ? _a5 : _b3.formats = (0, codegen_1._)`require("ajv-formats/dist/formats").${exportName}`; + for (const f9 of list) + ajv.addFormat(f9, fs29[f9]); + } + module2.exports = exports = formatsPlugin; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = formatsPlugin; + } +}); + +// node_modules/isexe/windows.js +var require_windows = __commonJS({ + "node_modules/isexe/windows.js"(exports, module2) { + module2.exports = isexe; + isexe.sync = sync; + var fs29 = require("fs"); + function checkPathExt(path27, options) { + var pathext = options.pathExt !== void 0 ? options.pathExt : process.env.PATHEXT; + if (!pathext) { + return true; + } + pathext = pathext.split(";"); + if (pathext.indexOf("") !== -1) { + return true; + } + for (var i = 0; i < pathext.length; i++) { + var p = pathext[i].toLowerCase(); + if (p && path27.substr(-p.length).toLowerCase() === p) { + return true; + } + } + return false; + } + function checkStat(stat, path27, options) { + if (!stat.isSymbolicLink() && !stat.isFile()) { + return false; + } + return checkPathExt(path27, options); + } + function isexe(path27, options, cb2) { + fs29.stat(path27, function(er, stat) { + cb2(er, er ? false : checkStat(stat, path27, options)); + }); + } + function sync(path27, options) { + return checkStat(fs29.statSync(path27), path27, options); + } + } +}); + +// node_modules/isexe/mode.js +var require_mode = __commonJS({ + "node_modules/isexe/mode.js"(exports, module2) { + module2.exports = isexe; + isexe.sync = sync; + var fs29 = require("fs"); + function isexe(path27, options, cb2) { + fs29.stat(path27, function(er, stat) { + cb2(er, er ? false : checkStat(stat, options)); + }); + } + function sync(path27, options) { + return checkStat(fs29.statSync(path27), options); + } + function checkStat(stat, options) { + return stat.isFile() && checkMode(stat, options); + } + function checkMode(stat, options) { + var mod = stat.mode; + var uid = stat.uid; + var gid = stat.gid; + var myUid = options.uid !== void 0 ? options.uid : process.getuid && process.getuid(); + var myGid = options.gid !== void 0 ? options.gid : process.getgid && process.getgid(); + var u = parseInt("100", 8); + var g2 = parseInt("010", 8); + var o2 = parseInt("001", 8); + var ug = u | g2; + var ret = mod & o2 || mod & g2 && gid === myGid || mod & u && uid === myUid || mod & ug && myUid === 0; + return ret; + } + } +}); + +// node_modules/isexe/index.js +var require_isexe = __commonJS({ + "node_modules/isexe/index.js"(exports, module2) { + var fs29 = require("fs"); + var core; + if (process.platform === "win32" || global.TESTING_WINDOWS) { + core = require_windows(); + } else { + core = require_mode(); + } + module2.exports = isexe; + isexe.sync = sync; + function isexe(path27, options, cb2) { + if (typeof options === "function") { + cb2 = options; + options = {}; + } + if (!cb2) { + if (typeof Promise !== "function") { + throw new TypeError("callback not provided"); + } + return new Promise(function(resolve8, reject) { + isexe(path27, options || {}, function(er, is) { + if (er) { + reject(er); + } else { + resolve8(is); + } + }); + }); + } + core(path27, options || {}, function(er, is) { + if (er) { + if (er.code === "EACCES" || options && options.ignoreErrors) { + er = null; + is = false; + } + } + cb2(er, is); + }); + } + function sync(path27, options) { + try { + return core.sync(path27, options || {}); + } catch (er) { + if (options && options.ignoreErrors || er.code === "EACCES") { + return false; + } else { + throw er; + } + } + } + } +}); + +// node_modules/which/which.js +var require_which = __commonJS({ + "node_modules/which/which.js"(exports, module2) { + var isWindows2 = process.platform === "win32" || process.env.OSTYPE === "cygwin" || process.env.OSTYPE === "msys"; + var path27 = require("path"); + var COLON = isWindows2 ? ";" : ":"; + var isexe = require_isexe(); + var getNotFoundError = (cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: "ENOENT" }); + var getPathInfo = (cmd, opt) => { + const colon = opt.colon || COLON; + const pathEnv = cmd.match(/\//) || isWindows2 && cmd.match(/\\/) ? [""] : [ + // windows always checks the cwd first + ...isWindows2 ? [process.cwd()] : [], + ...(opt.path || process.env.PATH || /* istanbul ignore next: very unusual */ + "").split(colon) + ]; + const pathExtExe = isWindows2 ? opt.pathExt || process.env.PATHEXT || ".EXE;.CMD;.BAT;.COM" : ""; + const pathExt = isWindows2 ? pathExtExe.split(colon) : [""]; + if (isWindows2) { + if (cmd.indexOf(".") !== -1 && pathExt[0] !== "") + pathExt.unshift(""); + } + return { + pathEnv, + pathExt, + pathExtExe + }; + }; + var which = (cmd, opt, cb2) => { + if (typeof opt === "function") { + cb2 = opt; + opt = {}; + } + if (!opt) + opt = {}; + const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt); + const found = []; + const step = (i) => new Promise((resolve8, reject) => { + if (i === pathEnv.length) + return opt.all && found.length ? resolve8(found) : reject(getNotFoundError(cmd)); + const ppRaw = pathEnv[i]; + const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw; + const pCmd = path27.join(pathPart, cmd); + const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd; + resolve8(subStep(p, i, 0)); + }); + const subStep = (p, i, ii) => new Promise((resolve8, reject) => { + if (ii === pathExt.length) + return resolve8(step(i + 1)); + const ext = pathExt[ii]; + isexe(p + ext, { pathExt: pathExtExe }, (er, is) => { + if (!er && is) { + if (opt.all) + found.push(p + ext); + else + return resolve8(p + ext); + } + return resolve8(subStep(p, i, ii + 1)); + }); + }); + return cb2 ? step(0).then((res) => cb2(null, res), cb2) : step(0); + }; + var whichSync = (cmd, opt) => { + opt = opt || {}; + const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt); + const found = []; + for (let i = 0; i < pathEnv.length; i++) { + const ppRaw = pathEnv[i]; + const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw; + const pCmd = path27.join(pathPart, cmd); + const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd; + for (let j = 0; j < pathExt.length; j++) { + const cur = p + pathExt[j]; + try { + const is = isexe.sync(cur, { pathExt: pathExtExe }); + if (is) { + if (opt.all) + found.push(cur); + else + return cur; + } + } catch (ex) { + } + } + } + if (opt.all && found.length) + return found; + if (opt.nothrow) + return null; + throw getNotFoundError(cmd); + }; + module2.exports = which; + which.sync = whichSync; + } +}); + +// node_modules/path-key/index.js +var require_path_key = __commonJS({ + "node_modules/path-key/index.js"(exports, module2) { + "use strict"; + var pathKey = (options = {}) => { + const environment = options.env || process.env; + const platform = options.platform || process.platform; + if (platform !== "win32") { + return "PATH"; + } + return Object.keys(environment).reverse().find((key) => key.toUpperCase() === "PATH") || "Path"; + }; + module2.exports = pathKey; + module2.exports.default = pathKey; + } +}); + +// node_modules/cross-spawn/lib/util/resolveCommand.js +var require_resolveCommand = __commonJS({ + "node_modules/cross-spawn/lib/util/resolveCommand.js"(exports, module2) { + "use strict"; + var path27 = require("path"); + var which = require_which(); + var getPathKey = require_path_key(); + function resolveCommandAttempt(parsed, withoutPathExt) { + const env = parsed.options.env || process.env; + const cwd = process.cwd(); + const hasCustomCwd = parsed.options.cwd != null; + const shouldSwitchCwd = hasCustomCwd && process.chdir !== void 0 && !process.chdir.disabled; + if (shouldSwitchCwd) { + try { + process.chdir(parsed.options.cwd); + } catch (err) { + } + } + let resolved; + try { + resolved = which.sync(parsed.command, { + path: env[getPathKey({ env })], + pathExt: withoutPathExt ? path27.delimiter : void 0 + }); + } catch (e2) { + } finally { + if (shouldSwitchCwd) { + process.chdir(cwd); + } + } + if (resolved) { + resolved = path27.resolve(hasCustomCwd ? parsed.options.cwd : "", resolved); + } + return resolved; + } + function resolveCommand(parsed) { + return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true); + } + module2.exports = resolveCommand; + } +}); + +// node_modules/cross-spawn/lib/util/escape.js +var require_escape = __commonJS({ + "node_modules/cross-spawn/lib/util/escape.js"(exports, module2) { + "use strict"; + var metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g; + function escapeCommand(arg) { + arg = arg.replace(metaCharsRegExp, "^$1"); + return arg; + } + function escapeArgument(arg, doubleEscapeMetaChars) { + arg = `${arg}`; + arg = arg.replace(/(?=(\\+?)?)\1"/g, '$1$1\\"'); + arg = arg.replace(/(?=(\\+?)?)\1$/, "$1$1"); + arg = `"${arg}"`; + arg = arg.replace(metaCharsRegExp, "^$1"); + if (doubleEscapeMetaChars) { + arg = arg.replace(metaCharsRegExp, "^$1"); + } + return arg; + } + module2.exports.command = escapeCommand; + module2.exports.argument = escapeArgument; + } +}); + +// node_modules/shebang-regex/index.js +var require_shebang_regex = __commonJS({ + "node_modules/shebang-regex/index.js"(exports, module2) { + "use strict"; + module2.exports = /^#!(.*)/; + } +}); + +// node_modules/shebang-command/index.js +var require_shebang_command = __commonJS({ + "node_modules/shebang-command/index.js"(exports, module2) { + "use strict"; + var shebangRegex = require_shebang_regex(); + module2.exports = (string5 = "") => { + const match = string5.match(shebangRegex); + if (!match) { + return null; + } + const [path27, argument] = match[0].replace(/#! ?/, "").split(" "); + const binary = path27.split("/").pop(); + if (binary === "env") { + return argument; + } + return argument ? `${binary} ${argument}` : binary; + }; + } +}); + +// node_modules/cross-spawn/lib/util/readShebang.js +var require_readShebang = __commonJS({ + "node_modules/cross-spawn/lib/util/readShebang.js"(exports, module2) { + "use strict"; + var fs29 = require("fs"); + var shebangCommand = require_shebang_command(); + function readShebang(command) { + const size = 150; + const buffer = Buffer.alloc(size); + let fd; + try { + fd = fs29.openSync(command, "r"); + fs29.readSync(fd, buffer, 0, size, 0); + fs29.closeSync(fd); + } catch (e2) { + } + return shebangCommand(buffer.toString()); + } + module2.exports = readShebang; + } +}); + +// node_modules/cross-spawn/lib/parse.js +var require_parse = __commonJS({ + "node_modules/cross-spawn/lib/parse.js"(exports, module2) { + "use strict"; + var path27 = require("path"); + var resolveCommand = require_resolveCommand(); + var escape2 = require_escape(); + var readShebang = require_readShebang(); + var isWin = process.platform === "win32"; + var isExecutableRegExp = /\.(?:com|exe)$/i; + var isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i; + function detectShebang(parsed) { + parsed.file = resolveCommand(parsed); + const shebang = parsed.file && readShebang(parsed.file); + if (shebang) { + parsed.args.unshift(parsed.file); + parsed.command = shebang; + return resolveCommand(parsed); + } + return parsed.file; + } + function parseNonShell(parsed) { + if (!isWin) { + return parsed; + } + const commandFile = detectShebang(parsed); + const needsShell = !isExecutableRegExp.test(commandFile); + if (parsed.options.forceShell || needsShell) { + const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile); + parsed.command = path27.normalize(parsed.command); + parsed.command = escape2.command(parsed.command); + parsed.args = parsed.args.map((arg) => escape2.argument(arg, needsDoubleEscapeMetaChars)); + const shellCommand = [parsed.command].concat(parsed.args).join(" "); + parsed.args = ["/d", "/s", "/c", `"${shellCommand}"`]; + parsed.command = process.env.comspec || "cmd.exe"; + parsed.options.windowsVerbatimArguments = true; + } + return parsed; + } + function parse4(command, args, options) { + if (args && !Array.isArray(args)) { + options = args; + args = null; + } + args = args ? args.slice(0) : []; + options = Object.assign({}, options); + const parsed = { + command, + args, + options, + file: void 0, + original: { + command, + args + } + }; + return options.shell ? parsed : parseNonShell(parsed); + } + module2.exports = parse4; + } +}); + +// node_modules/cross-spawn/lib/enoent.js +var require_enoent = __commonJS({ + "node_modules/cross-spawn/lib/enoent.js"(exports, module2) { + "use strict"; + var isWin = process.platform === "win32"; + function notFoundError(original, syscall) { + return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), { + code: "ENOENT", + errno: "ENOENT", + syscall: `${syscall} ${original.command}`, + path: original.command, + spawnargs: original.args + }); + } + function hookChildProcess(cp, parsed) { + if (!isWin) { + return; + } + const originalEmit = cp.emit; + cp.emit = function(name, arg1) { + if (name === "exit") { + const err = verifyENOENT(arg1, parsed); + if (err) { + return originalEmit.call(cp, "error", err); + } + } + return originalEmit.apply(cp, arguments); + }; + } + function verifyENOENT(status, parsed) { + if (isWin && status === 1 && !parsed.file) { + return notFoundError(parsed.original, "spawn"); + } + return null; + } + function verifyENOENTSync(status, parsed) { + if (isWin && status === 1 && !parsed.file) { + return notFoundError(parsed.original, "spawnSync"); + } + return null; + } + module2.exports = { + hookChildProcess, + verifyENOENT, + verifyENOENTSync, + notFoundError + }; + } +}); + +// node_modules/cross-spawn/index.js +var require_cross_spawn = __commonJS({ + "node_modules/cross-spawn/index.js"(exports, module2) { + "use strict"; + var cp = require("child_process"); + var parse4 = require_parse(); + var enoent = require_enoent(); + function spawn6(command, args, options) { + const parsed = parse4(command, args, options); + const spawned = cp.spawn(parsed.command, parsed.args, parsed.options); + enoent.hookChildProcess(spawned, parsed); + return spawned; + } + function spawnSync2(command, args, options) { + const parsed = parse4(command, args, options); + const result = cp.spawnSync(parsed.command, parsed.args, parsed.options); + result.error = result.error || enoent.verifyENOENTSync(result.status, parsed); + return result; + } + module2.exports = spawn6; + module2.exports.spawn = spawn6; + module2.exports.sync = spawnSync2; + module2.exports._parse = parse4; + module2.exports._enoent = enoent; + } +}); + +// node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.js +function normalizeHeaders(headers) { + if (!headers) + return {}; + if (headers instanceof Headers) { + return Object.fromEntries(headers.entries()); + } + if (Array.isArray(headers)) { + return Object.fromEntries(headers); + } + return { ...headers }; +} +function createFetchWithInit(baseFetch = fetch, baseInit) { + if (!baseInit) { + return baseFetch; + } + return async (url2, init) => { + const mergedInit = { + ...baseInit, + ...init, + // Headers need special handling - merge instead of replace + headers: (init == null ? void 0 : init.headers) ? { ...normalizeHeaders(baseInit.headers), ...normalizeHeaders(init.headers) } : baseInit.headers + }; + return baseFetch(url2, mergedInit); + }; +} +var init_transport = __esm({ + "node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.js"() { + } +}); + +// node_modules/pkce-challenge/dist/index.browser.js +async function getRandomValues(size) { + return (await crypto).getRandomValues(new Uint8Array(size)); +} +async function random(size) { + const mask = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~"; + const evenDistCutoff = Math.pow(2, 8) - Math.pow(2, 8) % mask.length; + let result = ""; + while (result.length < size) { + const randomBytes = await getRandomValues(size - result.length); + for (const randomByte of randomBytes) { + if (randomByte < evenDistCutoff) { + result += mask[randomByte % mask.length]; + } + } + } + return result; +} +async function generateVerifier(length) { + return await random(length); +} +async function generateChallenge(code_verifier) { + const buffer = await (await crypto).subtle.digest("SHA-256", new TextEncoder().encode(code_verifier)); + return btoa(String.fromCharCode(...new Uint8Array(buffer))).replace(/\//g, "_").replace(/\+/g, "-").replace(/=/g, ""); +} +async function pkceChallenge(length) { + if (!length) + length = 43; + if (length < 43 || length > 128) { + throw `Expected a length between 43 and 128. Received ${length}.`; + } + const verifier = await generateVerifier(length); + const challenge = await generateChallenge(verifier); + return { + code_verifier: verifier, + code_challenge: challenge + }; +} +var crypto; +var init_index_browser = __esm({ + "node_modules/pkce-challenge/dist/index.browser.js"() { + crypto = globalThis.crypto; + } +}); + +// node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js +var SafeUrlSchema, OAuthProtectedResourceMetadataSchema, OAuthMetadataSchema, OpenIdProviderMetadataSchema, OpenIdProviderDiscoveryMetadataSchema, OAuthTokensSchema, OAuthErrorResponseSchema, OptionalSafeUrlSchema, OAuthClientMetadataSchema, OAuthClientInformationSchema, OAuthClientInformationFullSchema, OAuthClientRegistrationErrorSchema, OAuthTokenRevocationRequestSchema; +var init_auth = __esm({ + "node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js"() { + init_v4(); + SafeUrlSchema = url().superRefine((val, ctx) => { + if (!URL.canParse(val)) { + ctx.addIssue({ + code: ZodIssueCode2.custom, + message: "URL must be parseable", + fatal: true + }); + return NEVER; + } + }).refine((url2) => { + const u = new URL(url2); + return u.protocol !== "javascript:" && u.protocol !== "data:" && u.protocol !== "vbscript:"; + }, { message: "URL cannot use javascript:, data:, or vbscript: scheme" }); + OAuthProtectedResourceMetadataSchema = looseObject({ + resource: string3().url(), + authorization_servers: array(SafeUrlSchema).optional(), + jwks_uri: string3().url().optional(), + scopes_supported: array(string3()).optional(), + bearer_methods_supported: array(string3()).optional(), + resource_signing_alg_values_supported: array(string3()).optional(), + resource_name: string3().optional(), + resource_documentation: string3().optional(), + resource_policy_uri: string3().url().optional(), + resource_tos_uri: string3().url().optional(), + tls_client_certificate_bound_access_tokens: boolean3().optional(), + authorization_details_types_supported: array(string3()).optional(), + dpop_signing_alg_values_supported: array(string3()).optional(), + dpop_bound_access_tokens_required: boolean3().optional() + }); + OAuthMetadataSchema = looseObject({ + issuer: string3(), + authorization_endpoint: SafeUrlSchema, + token_endpoint: SafeUrlSchema, + registration_endpoint: SafeUrlSchema.optional(), + scopes_supported: array(string3()).optional(), + response_types_supported: array(string3()), + response_modes_supported: array(string3()).optional(), + grant_types_supported: array(string3()).optional(), + token_endpoint_auth_methods_supported: array(string3()).optional(), + token_endpoint_auth_signing_alg_values_supported: array(string3()).optional(), + service_documentation: SafeUrlSchema.optional(), + revocation_endpoint: SafeUrlSchema.optional(), + revocation_endpoint_auth_methods_supported: array(string3()).optional(), + revocation_endpoint_auth_signing_alg_values_supported: array(string3()).optional(), + introspection_endpoint: string3().optional(), + introspection_endpoint_auth_methods_supported: array(string3()).optional(), + introspection_endpoint_auth_signing_alg_values_supported: array(string3()).optional(), + code_challenge_methods_supported: array(string3()).optional(), + client_id_metadata_document_supported: boolean3().optional() + }); + OpenIdProviderMetadataSchema = looseObject({ + issuer: string3(), + authorization_endpoint: SafeUrlSchema, + token_endpoint: SafeUrlSchema, + userinfo_endpoint: SafeUrlSchema.optional(), + jwks_uri: SafeUrlSchema, + registration_endpoint: SafeUrlSchema.optional(), + scopes_supported: array(string3()).optional(), + response_types_supported: array(string3()), + response_modes_supported: array(string3()).optional(), + grant_types_supported: array(string3()).optional(), + acr_values_supported: array(string3()).optional(), + subject_types_supported: array(string3()), + id_token_signing_alg_values_supported: array(string3()), + id_token_encryption_alg_values_supported: array(string3()).optional(), + id_token_encryption_enc_values_supported: array(string3()).optional(), + userinfo_signing_alg_values_supported: array(string3()).optional(), + userinfo_encryption_alg_values_supported: array(string3()).optional(), + userinfo_encryption_enc_values_supported: array(string3()).optional(), + request_object_signing_alg_values_supported: array(string3()).optional(), + request_object_encryption_alg_values_supported: array(string3()).optional(), + request_object_encryption_enc_values_supported: array(string3()).optional(), + token_endpoint_auth_methods_supported: array(string3()).optional(), + token_endpoint_auth_signing_alg_values_supported: array(string3()).optional(), + display_values_supported: array(string3()).optional(), + claim_types_supported: array(string3()).optional(), + claims_supported: array(string3()).optional(), + service_documentation: string3().optional(), + claims_locales_supported: array(string3()).optional(), + ui_locales_supported: array(string3()).optional(), + claims_parameter_supported: boolean3().optional(), + request_parameter_supported: boolean3().optional(), + request_uri_parameter_supported: boolean3().optional(), + require_request_uri_registration: boolean3().optional(), + op_policy_uri: SafeUrlSchema.optional(), + op_tos_uri: SafeUrlSchema.optional(), + client_id_metadata_document_supported: boolean3().optional() + }); + OpenIdProviderDiscoveryMetadataSchema = object2({ + ...OpenIdProviderMetadataSchema.shape, + ...OAuthMetadataSchema.pick({ + code_challenge_methods_supported: true + }).shape + }); + OAuthTokensSchema = object2({ + access_token: string3(), + id_token: string3().optional(), + // Optional for OAuth 2.1, but necessary in OpenID Connect + token_type: string3(), + expires_in: coerce_exports2.number().optional(), + scope: string3().optional(), + refresh_token: string3().optional() + }).strip(); + OAuthErrorResponseSchema = object2({ + error: string3(), + error_description: string3().optional(), + error_uri: string3().optional() + }); + OptionalSafeUrlSchema = SafeUrlSchema.optional().or(literal("").transform(() => void 0)); + OAuthClientMetadataSchema = object2({ + redirect_uris: array(SafeUrlSchema), + token_endpoint_auth_method: string3().optional(), + grant_types: array(string3()).optional(), + response_types: array(string3()).optional(), + client_name: string3().optional(), + client_uri: SafeUrlSchema.optional(), + logo_uri: OptionalSafeUrlSchema, + scope: string3().optional(), + contacts: array(string3()).optional(), + tos_uri: OptionalSafeUrlSchema, + policy_uri: string3().optional(), + jwks_uri: SafeUrlSchema.optional(), + jwks: any().optional(), + software_id: string3().optional(), + software_version: string3().optional(), + software_statement: string3().optional() + }).strip(); + OAuthClientInformationSchema = object2({ + client_id: string3(), + client_secret: string3().optional(), + client_id_issued_at: number3().optional(), + client_secret_expires_at: number3().optional() + }).strip(); + OAuthClientInformationFullSchema = OAuthClientMetadataSchema.merge(OAuthClientInformationSchema); + OAuthClientRegistrationErrorSchema = object2({ + error: string3(), + error_description: string3().optional() + }).strip(); + OAuthTokenRevocationRequestSchema = object2({ + token: string3(), + token_type_hint: string3().optional() + }).strip(); + } +}); + +// node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth-utils.js +function resourceUrlFromServerUrl(url2) { + const resourceURL = typeof url2 === "string" ? new URL(url2) : new URL(url2.href); + resourceURL.hash = ""; + return resourceURL; +} +function checkResourceAllowed({ requestedResource, configuredResource }) { + const requested = typeof requestedResource === "string" ? new URL(requestedResource) : new URL(requestedResource.href); + const configured = typeof configuredResource === "string" ? new URL(configuredResource) : new URL(configuredResource.href); + if (requested.origin !== configured.origin) { + return false; + } + if (requested.pathname.length < configured.pathname.length) { + return false; + } + const requestedPath = requested.pathname.endsWith("/") ? requested.pathname : requested.pathname + "/"; + const configuredPath = configured.pathname.endsWith("/") ? configured.pathname : configured.pathname + "/"; + return requestedPath.startsWith(configuredPath); +} +var init_auth_utils = __esm({ + "node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth-utils.js"() { + } +}); + +// node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/errors.js +var OAuthError, InvalidRequestError, InvalidClientError, InvalidGrantError, UnauthorizedClientError, UnsupportedGrantTypeError, InvalidScopeError, AccessDeniedError, ServerError, TemporarilyUnavailableError, UnsupportedResponseTypeError, UnsupportedTokenTypeError, InvalidTokenError, MethodNotAllowedError, TooManyRequestsError, InvalidClientMetadataError, InsufficientScopeError, InvalidTargetError, OAUTH_ERRORS; +var init_errors3 = __esm({ + "node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/errors.js"() { + OAuthError = class extends Error { + constructor(message, errorUri) { + super(message); + this.errorUri = errorUri; + this.name = this.constructor.name; + } + /** + * Converts the error to a standard OAuth error response object + */ + toResponseObject() { + const response = { + error: this.errorCode, + error_description: this.message + }; + if (this.errorUri) { + response.error_uri = this.errorUri; + } + return response; + } + get errorCode() { + return this.constructor.errorCode; + } + }; + InvalidRequestError = class extends OAuthError { + }; + InvalidRequestError.errorCode = "invalid_request"; + InvalidClientError = class extends OAuthError { + }; + InvalidClientError.errorCode = "invalid_client"; + InvalidGrantError = class extends OAuthError { + }; + InvalidGrantError.errorCode = "invalid_grant"; + UnauthorizedClientError = class extends OAuthError { + }; + UnauthorizedClientError.errorCode = "unauthorized_client"; + UnsupportedGrantTypeError = class extends OAuthError { + }; + UnsupportedGrantTypeError.errorCode = "unsupported_grant_type"; + InvalidScopeError = class extends OAuthError { + }; + InvalidScopeError.errorCode = "invalid_scope"; + AccessDeniedError = class extends OAuthError { + }; + AccessDeniedError.errorCode = "access_denied"; + ServerError = class extends OAuthError { + }; + ServerError.errorCode = "server_error"; + TemporarilyUnavailableError = class extends OAuthError { + }; + TemporarilyUnavailableError.errorCode = "temporarily_unavailable"; + UnsupportedResponseTypeError = class extends OAuthError { + }; + UnsupportedResponseTypeError.errorCode = "unsupported_response_type"; + UnsupportedTokenTypeError = class extends OAuthError { + }; + UnsupportedTokenTypeError.errorCode = "unsupported_token_type"; + InvalidTokenError = class extends OAuthError { + }; + InvalidTokenError.errorCode = "invalid_token"; + MethodNotAllowedError = class extends OAuthError { + }; + MethodNotAllowedError.errorCode = "method_not_allowed"; + TooManyRequestsError = class extends OAuthError { + }; + TooManyRequestsError.errorCode = "too_many_requests"; + InvalidClientMetadataError = class extends OAuthError { + }; + InvalidClientMetadataError.errorCode = "invalid_client_metadata"; + InsufficientScopeError = class extends OAuthError { + }; + InsufficientScopeError.errorCode = "insufficient_scope"; + InvalidTargetError = class extends OAuthError { + }; + InvalidTargetError.errorCode = "invalid_target"; + OAUTH_ERRORS = { + [InvalidRequestError.errorCode]: InvalidRequestError, + [InvalidClientError.errorCode]: InvalidClientError, + [InvalidGrantError.errorCode]: InvalidGrantError, + [UnauthorizedClientError.errorCode]: UnauthorizedClientError, + [UnsupportedGrantTypeError.errorCode]: UnsupportedGrantTypeError, + [InvalidScopeError.errorCode]: InvalidScopeError, + [AccessDeniedError.errorCode]: AccessDeniedError, + [ServerError.errorCode]: ServerError, + [TemporarilyUnavailableError.errorCode]: TemporarilyUnavailableError, + [UnsupportedResponseTypeError.errorCode]: UnsupportedResponseTypeError, + [UnsupportedTokenTypeError.errorCode]: UnsupportedTokenTypeError, + [InvalidTokenError.errorCode]: InvalidTokenError, + [MethodNotAllowedError.errorCode]: MethodNotAllowedError, + [TooManyRequestsError.errorCode]: TooManyRequestsError, + [InvalidClientMetadataError.errorCode]: InvalidClientMetadataError, + [InsufficientScopeError.errorCode]: InsufficientScopeError, + [InvalidTargetError.errorCode]: InvalidTargetError + }; + } +}); + +// node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js +function isClientAuthMethod(method) { + return ["client_secret_basic", "client_secret_post", "none"].includes(method); +} +function selectClientAuthMethod(clientInformation, supportedMethods) { + const hasClientSecret = clientInformation.client_secret !== void 0; + if ("token_endpoint_auth_method" in clientInformation && clientInformation.token_endpoint_auth_method && isClientAuthMethod(clientInformation.token_endpoint_auth_method) && (supportedMethods.length === 0 || supportedMethods.includes(clientInformation.token_endpoint_auth_method))) { + return clientInformation.token_endpoint_auth_method; + } + if (supportedMethods.length === 0) { + return hasClientSecret ? "client_secret_basic" : "none"; + } + if (hasClientSecret && supportedMethods.includes("client_secret_basic")) { + return "client_secret_basic"; + } + if (hasClientSecret && supportedMethods.includes("client_secret_post")) { + return "client_secret_post"; + } + if (supportedMethods.includes("none")) { + return "none"; + } + return hasClientSecret ? "client_secret_post" : "none"; +} +function applyClientAuthentication(method, clientInformation, headers, params) { + const { client_id, client_secret } = clientInformation; + switch (method) { + case "client_secret_basic": + applyBasicAuth(client_id, client_secret, headers); + return; + case "client_secret_post": + applyPostAuth(client_id, client_secret, params); + return; + case "none": + applyPublicAuth(client_id, params); + return; + default: + throw new Error(`Unsupported client authentication method: ${method}`); + } +} +function applyBasicAuth(clientId, clientSecret, headers) { + if (!clientSecret) { + throw new Error("client_secret_basic authentication requires a client_secret"); + } + const credentials = btoa(`${clientId}:${clientSecret}`); + headers.set("Authorization", `Basic ${credentials}`); +} +function applyPostAuth(clientId, clientSecret, params) { + params.set("client_id", clientId); + if (clientSecret) { + params.set("client_secret", clientSecret); + } +} +function applyPublicAuth(clientId, params) { + params.set("client_id", clientId); +} +async function parseErrorResponse(input) { + const statusCode = input instanceof Response ? input.status : void 0; + const body = input instanceof Response ? await input.text() : input; + try { + const result = OAuthErrorResponseSchema.parse(JSON.parse(body)); + const { error: error48, error_description, error_uri } = result; + const errorClass = OAUTH_ERRORS[error48] || ServerError; + return new errorClass(error_description || "", error_uri); + } catch (error48) { + const errorMessage = `${statusCode ? `HTTP ${statusCode}: ` : ""}Invalid OAuth error response: ${error48}. Raw body: ${body}`; + return new ServerError(errorMessage); + } +} +async function auth(provider, options) { + var _a5, _b3; + try { + return await authInternal(provider, options); + } catch (error48) { + if (error48 instanceof InvalidClientError || error48 instanceof UnauthorizedClientError) { + await ((_a5 = provider.invalidateCredentials) == null ? void 0 : _a5.call(provider, "all")); + return await authInternal(provider, options); + } else if (error48 instanceof InvalidGrantError) { + await ((_b3 = provider.invalidateCredentials) == null ? void 0 : _b3.call(provider, "tokens")); + return await authInternal(provider, options); + } + throw error48; + } +} +async function authInternal(provider, { serverUrl, authorizationCode, scope, resourceMetadataUrl, fetchFn }) { + var _a5, _b3, _c2, _d, _e2, _f2; + const cachedState = await ((_a5 = provider.discoveryState) == null ? void 0 : _a5.call(provider)); + let resourceMetadata; + let authorizationServerUrl; + let metadata; + let effectiveResourceMetadataUrl = resourceMetadataUrl; + if (!effectiveResourceMetadataUrl && (cachedState == null ? void 0 : cachedState.resourceMetadataUrl)) { + effectiveResourceMetadataUrl = new URL(cachedState.resourceMetadataUrl); + } + if (cachedState == null ? void 0 : cachedState.authorizationServerUrl) { + authorizationServerUrl = cachedState.authorizationServerUrl; + resourceMetadata = cachedState.resourceMetadata; + metadata = (_b3 = cachedState.authorizationServerMetadata) != null ? _b3 : await discoverAuthorizationServerMetadata(authorizationServerUrl, { fetchFn }); + if (!resourceMetadata) { + try { + resourceMetadata = await discoverOAuthProtectedResourceMetadata(serverUrl, { resourceMetadataUrl: effectiveResourceMetadataUrl }, fetchFn); + } catch (e2) { + } + } + if (metadata !== cachedState.authorizationServerMetadata || resourceMetadata !== cachedState.resourceMetadata) { + await ((_c2 = provider.saveDiscoveryState) == null ? void 0 : _c2.call(provider, { + authorizationServerUrl: String(authorizationServerUrl), + resourceMetadataUrl: effectiveResourceMetadataUrl == null ? void 0 : effectiveResourceMetadataUrl.toString(), + resourceMetadata, + authorizationServerMetadata: metadata + })); + } + } else { + const serverInfo = await discoverOAuthServerInfo(serverUrl, { resourceMetadataUrl: effectiveResourceMetadataUrl, fetchFn }); + authorizationServerUrl = serverInfo.authorizationServerUrl; + metadata = serverInfo.authorizationServerMetadata; + resourceMetadata = serverInfo.resourceMetadata; + await ((_d = provider.saveDiscoveryState) == null ? void 0 : _d.call(provider, { + authorizationServerUrl: String(authorizationServerUrl), + resourceMetadataUrl: effectiveResourceMetadataUrl == null ? void 0 : effectiveResourceMetadataUrl.toString(), + resourceMetadata, + authorizationServerMetadata: metadata + })); + } + const resource = await selectResourceURL(serverUrl, provider, resourceMetadata); + const resolvedScope = scope || ((_e2 = resourceMetadata == null ? void 0 : resourceMetadata.scopes_supported) == null ? void 0 : _e2.join(" ")) || provider.clientMetadata.scope; + let clientInformation = await Promise.resolve(provider.clientInformation()); + if (!clientInformation) { + if (authorizationCode !== void 0) { + throw new Error("Existing OAuth client information is required when exchanging an authorization code"); + } + const supportsUrlBasedClientId = (metadata == null ? void 0 : metadata.client_id_metadata_document_supported) === true; + const clientMetadataUrl = provider.clientMetadataUrl; + if (clientMetadataUrl && !isHttpsUrl(clientMetadataUrl)) { + throw new InvalidClientMetadataError(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${clientMetadataUrl}`); + } + const shouldUseUrlBasedClientId = supportsUrlBasedClientId && clientMetadataUrl; + if (shouldUseUrlBasedClientId) { + clientInformation = { + client_id: clientMetadataUrl + }; + await ((_f2 = provider.saveClientInformation) == null ? void 0 : _f2.call(provider, clientInformation)); + } else { + if (!provider.saveClientInformation) { + throw new Error("OAuth client information must be saveable for dynamic registration"); + } + const fullInformation = await registerClient(authorizationServerUrl, { + metadata, + clientMetadata: provider.clientMetadata, + scope: resolvedScope, + fetchFn + }); + await provider.saveClientInformation(fullInformation); + clientInformation = fullInformation; + } + } + const nonInteractiveFlow = !provider.redirectUrl; + if (authorizationCode !== void 0 || nonInteractiveFlow) { + const tokens2 = await fetchToken(provider, authorizationServerUrl, { + metadata, + resource, + authorizationCode, + fetchFn + }); + await provider.saveTokens(tokens2); + return "AUTHORIZED"; + } + const tokens = await provider.tokens(); + if (tokens == null ? void 0 : tokens.refresh_token) { + try { + const newTokens = await refreshAuthorization(authorizationServerUrl, { + metadata, + clientInformation, + refreshToken: tokens.refresh_token, + resource, + addClientAuthentication: provider.addClientAuthentication, + fetchFn + }); + await provider.saveTokens(newTokens); + return "AUTHORIZED"; + } catch (error48) { + if (!(error48 instanceof OAuthError) || error48 instanceof ServerError) { + } else { + throw error48; + } + } + } + const state = provider.state ? await provider.state() : void 0; + const { authorizationUrl, codeVerifier } = await startAuthorization(authorizationServerUrl, { + metadata, + clientInformation, + state, + redirectUrl: provider.redirectUrl, + scope: resolvedScope, + resource + }); + await provider.saveCodeVerifier(codeVerifier); + await provider.redirectToAuthorization(authorizationUrl); + return "REDIRECT"; +} +function isHttpsUrl(value) { + if (!value) + return false; + try { + const url2 = new URL(value); + return url2.protocol === "https:" && url2.pathname !== "/"; + } catch (e2) { + return false; + } +} +async function selectResourceURL(serverUrl, provider, resourceMetadata) { + const defaultResource = resourceUrlFromServerUrl(serverUrl); + if (provider.validateResourceURL) { + return await provider.validateResourceURL(defaultResource, resourceMetadata == null ? void 0 : resourceMetadata.resource); + } + if (!resourceMetadata) { + return void 0; + } + if (!checkResourceAllowed({ requestedResource: defaultResource, configuredResource: resourceMetadata.resource })) { + throw new Error(`Protected resource ${resourceMetadata.resource} does not match expected ${defaultResource} (or origin)`); + } + return new URL(resourceMetadata.resource); +} +function extractWWWAuthenticateParams(res) { + const authenticateHeader = res.headers.get("WWW-Authenticate"); + if (!authenticateHeader) { + return {}; + } + const [type, scheme] = authenticateHeader.split(" "); + if (type.toLowerCase() !== "bearer" || !scheme) { + return {}; + } + const resourceMetadataMatch = extractFieldFromWwwAuth(res, "resource_metadata") || void 0; + let resourceMetadataUrl; + if (resourceMetadataMatch) { + try { + resourceMetadataUrl = new URL(resourceMetadataMatch); + } catch (e2) { + } + } + const scope = extractFieldFromWwwAuth(res, "scope") || void 0; + const error48 = extractFieldFromWwwAuth(res, "error") || void 0; + return { + resourceMetadataUrl, + scope, + error: error48 + }; +} +function extractFieldFromWwwAuth(response, fieldName) { + const wwwAuthHeader = response.headers.get("WWW-Authenticate"); + if (!wwwAuthHeader) { + return null; + } + const pattern = new RegExp(`${fieldName}=(?:"([^"]+)"|([^\\s,]+))`); + const match = wwwAuthHeader.match(pattern); + if (match) { + return match[1] || match[2]; + } + return null; +} +async function discoverOAuthProtectedResourceMetadata(serverUrl, opts, fetchFn = fetch) { + var _a5, _b3; + const response = await discoverMetadataWithFallback(serverUrl, "oauth-protected-resource", fetchFn, { + protocolVersion: opts == null ? void 0 : opts.protocolVersion, + metadataUrl: opts == null ? void 0 : opts.resourceMetadataUrl + }); + if (!response || response.status === 404) { + await ((_a5 = response == null ? void 0 : response.body) == null ? void 0 : _a5.cancel()); + throw new Error(`Resource server does not implement OAuth 2.0 Protected Resource Metadata.`); + } + if (!response.ok) { + await ((_b3 = response.body) == null ? void 0 : _b3.cancel()); + throw new Error(`HTTP ${response.status} trying to load well-known OAuth protected resource metadata.`); + } + return OAuthProtectedResourceMetadataSchema.parse(await response.json()); +} +async function fetchWithCorsRetry(url2, headers, fetchFn = fetch) { + try { + return await fetchFn(url2, { headers }); + } catch (error48) { + if (error48 instanceof TypeError) { + if (headers) { + return fetchWithCorsRetry(url2, void 0, fetchFn); + } else { + return void 0; + } + } + throw error48; + } +} +function buildWellKnownPath(wellKnownPrefix, pathname = "", options = {}) { + if (pathname.endsWith("/")) { + pathname = pathname.slice(0, -1); + } + return options.prependPathname ? `${pathname}/.well-known/${wellKnownPrefix}` : `/.well-known/${wellKnownPrefix}${pathname}`; +} +async function tryMetadataDiscovery(url2, protocolVersion, fetchFn = fetch) { + const headers = { + "MCP-Protocol-Version": protocolVersion + }; + return await fetchWithCorsRetry(url2, headers, fetchFn); +} +function shouldAttemptFallback(response, pathname) { + return !response || response.status >= 400 && response.status < 500 && pathname !== "/"; +} +async function discoverMetadataWithFallback(serverUrl, wellKnownType, fetchFn, opts) { + var _a5, _b3; + const issuer = new URL(serverUrl); + const protocolVersion = (_a5 = opts == null ? void 0 : opts.protocolVersion) != null ? _a5 : LATEST_PROTOCOL_VERSION; + let url2; + if (opts == null ? void 0 : opts.metadataUrl) { + url2 = new URL(opts.metadataUrl); + } else { + const wellKnownPath = buildWellKnownPath(wellKnownType, issuer.pathname); + url2 = new URL(wellKnownPath, (_b3 = opts == null ? void 0 : opts.metadataServerUrl) != null ? _b3 : issuer); + url2.search = issuer.search; + } + let response = await tryMetadataDiscovery(url2, protocolVersion, fetchFn); + if (!(opts == null ? void 0 : opts.metadataUrl) && shouldAttemptFallback(response, issuer.pathname)) { + const rootUrl = new URL(`/.well-known/${wellKnownType}`, issuer); + response = await tryMetadataDiscovery(rootUrl, protocolVersion, fetchFn); + } + return response; +} +function buildDiscoveryUrls(authorizationServerUrl) { + const url2 = typeof authorizationServerUrl === "string" ? new URL(authorizationServerUrl) : authorizationServerUrl; + const hasPath = url2.pathname !== "/"; + const urlsToTry = []; + if (!hasPath) { + urlsToTry.push({ + url: new URL("/.well-known/oauth-authorization-server", url2.origin), + type: "oauth" + }); + urlsToTry.push({ + url: new URL(`/.well-known/openid-configuration`, url2.origin), + type: "oidc" + }); + return urlsToTry; + } + let pathname = url2.pathname; + if (pathname.endsWith("/")) { + pathname = pathname.slice(0, -1); + } + urlsToTry.push({ + url: new URL(`/.well-known/oauth-authorization-server${pathname}`, url2.origin), + type: "oauth" + }); + urlsToTry.push({ + url: new URL(`/.well-known/openid-configuration${pathname}`, url2.origin), + type: "oidc" + }); + urlsToTry.push({ + url: new URL(`${pathname}/.well-known/openid-configuration`, url2.origin), + type: "oidc" + }); + return urlsToTry; +} +async function discoverAuthorizationServerMetadata(authorizationServerUrl, { fetchFn = fetch, protocolVersion = LATEST_PROTOCOL_VERSION } = {}) { + var _a5; + const headers = { + "MCP-Protocol-Version": protocolVersion, + Accept: "application/json" + }; + const urlsToTry = buildDiscoveryUrls(authorizationServerUrl); + for (const { url: endpointUrl, type } of urlsToTry) { + const response = await fetchWithCorsRetry(endpointUrl, headers, fetchFn); + if (!response) { + continue; + } + if (!response.ok) { + await ((_a5 = response.body) == null ? void 0 : _a5.cancel()); + if (response.status >= 400 && response.status < 500) { + continue; + } + throw new Error(`HTTP ${response.status} trying to load ${type === "oauth" ? "OAuth" : "OpenID provider"} metadata from ${endpointUrl}`); + } + if (type === "oauth") { + return OAuthMetadataSchema.parse(await response.json()); + } else { + return OpenIdProviderDiscoveryMetadataSchema.parse(await response.json()); + } + } + return void 0; +} +async function discoverOAuthServerInfo(serverUrl, opts) { + let resourceMetadata; + let authorizationServerUrl; + try { + resourceMetadata = await discoverOAuthProtectedResourceMetadata(serverUrl, { resourceMetadataUrl: opts == null ? void 0 : opts.resourceMetadataUrl }, opts == null ? void 0 : opts.fetchFn); + if (resourceMetadata.authorization_servers && resourceMetadata.authorization_servers.length > 0) { + authorizationServerUrl = resourceMetadata.authorization_servers[0]; + } + } catch (e2) { + } + if (!authorizationServerUrl) { + authorizationServerUrl = String(new URL("/", serverUrl)); + } + const authorizationServerMetadata = await discoverAuthorizationServerMetadata(authorizationServerUrl, { fetchFn: opts == null ? void 0 : opts.fetchFn }); + return { + authorizationServerUrl, + authorizationServerMetadata, + resourceMetadata + }; +} +async function startAuthorization(authorizationServerUrl, { metadata, clientInformation, redirectUrl, scope, state, resource }) { + let authorizationUrl; + if (metadata) { + authorizationUrl = new URL(metadata.authorization_endpoint); + if (!metadata.response_types_supported.includes(AUTHORIZATION_CODE_RESPONSE_TYPE)) { + throw new Error(`Incompatible auth server: does not support response type ${AUTHORIZATION_CODE_RESPONSE_TYPE}`); + } + if (metadata.code_challenge_methods_supported && !metadata.code_challenge_methods_supported.includes(AUTHORIZATION_CODE_CHALLENGE_METHOD)) { + throw new Error(`Incompatible auth server: does not support code challenge method ${AUTHORIZATION_CODE_CHALLENGE_METHOD}`); + } + } else { + authorizationUrl = new URL("/authorize", authorizationServerUrl); + } + const challenge = await pkceChallenge(); + const codeVerifier = challenge.code_verifier; + const codeChallenge = challenge.code_challenge; + authorizationUrl.searchParams.set("response_type", AUTHORIZATION_CODE_RESPONSE_TYPE); + authorizationUrl.searchParams.set("client_id", clientInformation.client_id); + authorizationUrl.searchParams.set("code_challenge", codeChallenge); + authorizationUrl.searchParams.set("code_challenge_method", AUTHORIZATION_CODE_CHALLENGE_METHOD); + authorizationUrl.searchParams.set("redirect_uri", String(redirectUrl)); + if (state) { + authorizationUrl.searchParams.set("state", state); + } + if (scope) { + authorizationUrl.searchParams.set("scope", scope); + } + if (scope == null ? void 0 : scope.includes("offline_access")) { + authorizationUrl.searchParams.append("prompt", "consent"); + } + if (resource) { + authorizationUrl.searchParams.set("resource", resource.href); + } + return { authorizationUrl, codeVerifier }; +} +function prepareAuthorizationCodeRequest(authorizationCode, codeVerifier, redirectUri) { + return new URLSearchParams({ + grant_type: "authorization_code", + code: authorizationCode, + code_verifier: codeVerifier, + redirect_uri: String(redirectUri) + }); +} +async function executeTokenRequest(authorizationServerUrl, { metadata, tokenRequestParams, clientInformation, addClientAuthentication, resource, fetchFn }) { + var _a5; + const tokenUrl = (metadata == null ? void 0 : metadata.token_endpoint) ? new URL(metadata.token_endpoint) : new URL("/token", authorizationServerUrl); + const headers = new Headers({ + "Content-Type": "application/x-www-form-urlencoded", + Accept: "application/json" + }); + if (resource) { + tokenRequestParams.set("resource", resource.href); + } + if (addClientAuthentication) { + await addClientAuthentication(headers, tokenRequestParams, tokenUrl, metadata); + } else if (clientInformation) { + const supportedMethods = (_a5 = metadata == null ? void 0 : metadata.token_endpoint_auth_methods_supported) != null ? _a5 : []; + const authMethod = selectClientAuthMethod(clientInformation, supportedMethods); + applyClientAuthentication(authMethod, clientInformation, headers, tokenRequestParams); + } + const response = await (fetchFn != null ? fetchFn : fetch)(tokenUrl, { + method: "POST", + headers, + body: tokenRequestParams + }); + if (!response.ok) { + throw await parseErrorResponse(response); + } + return OAuthTokensSchema.parse(await response.json()); +} +async function refreshAuthorization(authorizationServerUrl, { metadata, clientInformation, refreshToken, resource, addClientAuthentication, fetchFn }) { + const tokenRequestParams = new URLSearchParams({ + grant_type: "refresh_token", + refresh_token: refreshToken + }); + const tokens = await executeTokenRequest(authorizationServerUrl, { + metadata, + tokenRequestParams, + clientInformation, + addClientAuthentication, + resource, + fetchFn + }); + return { refresh_token: refreshToken, ...tokens }; +} +async function fetchToken(provider, authorizationServerUrl, { metadata, resource, authorizationCode, fetchFn } = {}) { + const scope = provider.clientMetadata.scope; + let tokenRequestParams; + if (provider.prepareTokenRequest) { + tokenRequestParams = await provider.prepareTokenRequest(scope); + } + if (!tokenRequestParams) { + if (!authorizationCode) { + throw new Error("Either provider.prepareTokenRequest() or authorizationCode is required"); + } + if (!provider.redirectUrl) { + throw new Error("redirectUrl is required for authorization_code flow"); + } + const codeVerifier = await provider.codeVerifier(); + tokenRequestParams = prepareAuthorizationCodeRequest(authorizationCode, codeVerifier, provider.redirectUrl); + } + const clientInformation = await provider.clientInformation(); + return executeTokenRequest(authorizationServerUrl, { + metadata, + tokenRequestParams, + clientInformation: clientInformation != null ? clientInformation : void 0, + addClientAuthentication: provider.addClientAuthentication, + resource, + fetchFn + }); +} +async function registerClient(authorizationServerUrl, { metadata, clientMetadata, scope, fetchFn }) { + let registrationUrl; + if (metadata) { + if (!metadata.registration_endpoint) { + throw new Error("Incompatible auth server: does not support dynamic client registration"); + } + registrationUrl = new URL(metadata.registration_endpoint); + } else { + registrationUrl = new URL("/register", authorizationServerUrl); + } + const response = await (fetchFn != null ? fetchFn : fetch)(registrationUrl, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + ...clientMetadata, + ...scope !== void 0 ? { scope } : {} + }) + }); + if (!response.ok) { + throw await parseErrorResponse(response); + } + return OAuthClientInformationFullSchema.parse(await response.json()); +} +var UnauthorizedError, AUTHORIZATION_CODE_RESPONSE_TYPE, AUTHORIZATION_CODE_CHALLENGE_METHOD; +var init_auth2 = __esm({ + "node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js"() { + init_index_browser(); + init_types(); + init_auth(); + init_auth(); + init_auth_utils(); + init_errors3(); + UnauthorizedError = class extends Error { + constructor(message) { + super(message != null ? message : "Unauthorized"); + } + }; + AUTHORIZATION_CODE_RESPONSE_TYPE = "code"; + AUTHORIZATION_CODE_CHALLENGE_METHOD = "S256"; + } +}); + +// node_modules/eventsource-parser/dist/index.js +function noop(_arg) { +} +function createParser(callbacks) { + if (typeof callbacks == "function") + throw new TypeError( + "`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?" + ); + const { onEvent = noop, onError = noop, onRetry = noop, onComment } = callbacks; + let incompleteLine = "", isFirstChunk = true, id, data = "", eventType = ""; + function feed(newChunk) { + const chunk = isFirstChunk ? newChunk.replace(/^\xEF\xBB\xBF/, "") : newChunk, [complete, incomplete] = splitLines(`${incompleteLine}${chunk}`); + for (const line of complete) + parseLine(line); + incompleteLine = incomplete, isFirstChunk = false; + } + function parseLine(line) { + if (line === "") { + dispatchEvent(); + return; + } + if (line.startsWith(":")) { + onComment && onComment(line.slice(line.startsWith(": ") ? 2 : 1)); + return; + } + const fieldSeparatorIndex = line.indexOf(":"); + if (fieldSeparatorIndex !== -1) { + const field = line.slice(0, fieldSeparatorIndex), offset = line[fieldSeparatorIndex + 1] === " " ? 2 : 1, value = line.slice(fieldSeparatorIndex + offset); + processField(field, value, line); + return; + } + processField(line, "", line); + } + function processField(field, value, line) { + switch (field) { + case "event": + eventType = value; + break; + case "data": + data = `${data}${value} +`; + break; + case "id": + id = value.includes("\0") ? void 0 : value; + break; + case "retry": + /^\d+$/.test(value) ? onRetry(parseInt(value, 10)) : onError( + new ParseError(`Invalid \`retry\` value: "${value}"`, { + type: "invalid-retry", + value, + line + }) + ); + break; + default: + onError( + new ParseError( + `Unknown field "${field.length > 20 ? `${field.slice(0, 20)}\u2026` : field}"`, + { type: "unknown-field", field, value, line } + ) + ); + break; + } + } + function dispatchEvent() { + data.length > 0 && onEvent({ + id, + event: eventType || void 0, + // If the data buffer's last character is a U+000A LINE FEED (LF) character, + // then remove the last character from the data buffer. + data: data.endsWith(` +`) ? data.slice(0, -1) : data + }), id = void 0, data = "", eventType = ""; + } + function reset(options = {}) { + incompleteLine && options.consume && parseLine(incompleteLine), isFirstChunk = true, id = void 0, data = "", eventType = "", incompleteLine = ""; + } + return { feed, reset }; +} +function splitLines(chunk) { + const lines = []; + let incompleteLine = "", searchIndex = 0; + for (; searchIndex < chunk.length; ) { + const crIndex = chunk.indexOf("\r", searchIndex), lfIndex = chunk.indexOf(` +`, searchIndex); + let lineEnd = -1; + if (crIndex !== -1 && lfIndex !== -1 ? lineEnd = Math.min(crIndex, lfIndex) : crIndex !== -1 ? crIndex === chunk.length - 1 ? lineEnd = -1 : lineEnd = crIndex : lfIndex !== -1 && (lineEnd = lfIndex), lineEnd === -1) { + incompleteLine = chunk.slice(searchIndex); + break; + } else { + const line = chunk.slice(searchIndex, lineEnd); + lines.push(line), searchIndex = lineEnd + 1, chunk[searchIndex - 1] === "\r" && chunk[searchIndex] === ` +` && searchIndex++; + } + } + return [lines, incompleteLine]; +} +var ParseError; +var init_dist = __esm({ + "node_modules/eventsource-parser/dist/index.js"() { + ParseError = class extends Error { + constructor(message, options) { + super(message), this.name = "ParseError", this.type = options.type, this.field = options.field, this.value = options.value, this.line = options.line; + } + }; + } +}); + +// node_modules/eventsource/dist/index.js +function syntaxError(message) { + const DomException = globalThis.DOMException; + return typeof DomException == "function" ? new DomException(message, "SyntaxError") : new SyntaxError(message); +} +function flattenError2(err) { + return err instanceof Error ? "errors" in err && Array.isArray(err.errors) ? err.errors.map(flattenError2).join(", ") : "cause" in err && err.cause instanceof Error ? `${err}: ${flattenError2(err.cause)}` : err.message : `${err}`; +} +function inspectableError(err) { + return { + type: err.type, + message: err.message, + code: err.code, + defaultPrevented: err.defaultPrevented, + cancelable: err.cancelable, + timeStamp: err.timeStamp + }; +} +function getBaseURL() { + const doc = "document" in globalThis ? globalThis.document : void 0; + return doc && typeof doc == "object" && "baseURI" in doc && typeof doc.baseURI == "string" ? doc.baseURI : void 0; +} +var ErrorEvent, __typeError2, __accessCheck2, __privateGet2, __privateAdd2, __privateSet2, __privateMethod2, _readyState, _url2, _redirectUrl, _withCredentials, _fetch, _reconnectInterval, _reconnectTimer, _lastEventId, _controller, _parser, _onError, _onMessage, _onOpen, _EventSource_instances, connect_fn, _onFetchResponse, _onFetchError, getRequestOptions_fn, _onEvent, _onRetryChange, failConnection_fn, scheduleReconnect_fn, _reconnect, EventSource; +var init_dist2 = __esm({ + "node_modules/eventsource/dist/index.js"() { + init_dist(); + ErrorEvent = class extends Event { + /** + * Constructs a new `ErrorEvent` instance. This is typically not called directly, + * but rather emitted by the `EventSource` object when an error occurs. + * + * @param type - The type of the event (should be "error") + * @param errorEventInitDict - Optional properties to include in the error event + */ + constructor(type, errorEventInitDict) { + var _a5, _b3; + super(type), this.code = (_a5 = errorEventInitDict == null ? void 0 : errorEventInitDict.code) != null ? _a5 : void 0, this.message = (_b3 = errorEventInitDict == null ? void 0 : errorEventInitDict.message) != null ? _b3 : void 0; + } + /** + * Node.js "hides" the `message` and `code` properties of the `ErrorEvent` instance, + * when it is `console.log`'ed. This makes it harder to debug errors. To ease debugging, + * we explicitly include the properties in the `inspect` method. + * + * This is automatically called by Node.js when you `console.log` an instance of this class. + * + * @param _depth - The current depth + * @param options - The options passed to `util.inspect` + * @param inspect - The inspect function to use (prevents having to import it from `util`) + * @returns A string representation of the error + */ + [/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")](_depth, options, inspect) { + return inspect(inspectableError(this), options); + } + /** + * Deno "hides" the `message` and `code` properties of the `ErrorEvent` instance, + * when it is `console.log`'ed. This makes it harder to debug errors. To ease debugging, + * we explicitly include the properties in the `inspect` method. + * + * This is automatically called by Deno when you `console.log` an instance of this class. + * + * @param inspect - The inspect function to use (prevents having to import it from `util`) + * @param options - The options passed to `Deno.inspect` + * @returns A string representation of the error + */ + [/* @__PURE__ */ Symbol.for("Deno.customInspect")](inspect, options) { + return inspect(inspectableError(this), options); + } + }; + __typeError2 = (msg) => { + throw TypeError(msg); + }; + __accessCheck2 = (obj, member, msg) => member.has(obj) || __typeError2("Cannot " + msg); + __privateGet2 = (obj, member, getter) => (__accessCheck2(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); + __privateAdd2 = (obj, member, value) => member.has(obj) ? __typeError2("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value); + __privateSet2 = (obj, member, value, setter) => (__accessCheck2(obj, member, "write to private field"), member.set(obj, value), value); + __privateMethod2 = (obj, member, method) => (__accessCheck2(obj, member, "access private method"), method); + EventSource = class extends EventTarget { + constructor(url2, eventSourceInitDict) { + var _a5, _b3; + super(), __privateAdd2(this, _EventSource_instances), this.CONNECTING = 0, this.OPEN = 1, this.CLOSED = 2, __privateAdd2(this, _readyState), __privateAdd2(this, _url2), __privateAdd2(this, _redirectUrl), __privateAdd2(this, _withCredentials), __privateAdd2(this, _fetch), __privateAdd2(this, _reconnectInterval), __privateAdd2(this, _reconnectTimer), __privateAdd2(this, _lastEventId, null), __privateAdd2(this, _controller), __privateAdd2(this, _parser), __privateAdd2(this, _onError, null), __privateAdd2(this, _onMessage, null), __privateAdd2(this, _onOpen, null), __privateAdd2(this, _onFetchResponse, async (response) => { + var _a22; + __privateGet2(this, _parser).reset(); + const { body, redirected, status, headers } = response; + if (status === 204) { + __privateMethod2(this, _EventSource_instances, failConnection_fn).call(this, "Server sent HTTP 204, not reconnecting", 204), this.close(); + return; + } + if (redirected ? __privateSet2(this, _redirectUrl, new URL(response.url)) : __privateSet2(this, _redirectUrl, void 0), status !== 200) { + __privateMethod2(this, _EventSource_instances, failConnection_fn).call(this, `Non-200 status code (${status})`, status); + return; + } + if (!(headers.get("content-type") || "").startsWith("text/event-stream")) { + __privateMethod2(this, _EventSource_instances, failConnection_fn).call(this, 'Invalid content type, expected "text/event-stream"', status); + return; + } + if (__privateGet2(this, _readyState) === this.CLOSED) + return; + __privateSet2(this, _readyState, this.OPEN); + const openEvent = new Event("open"); + if ((_a22 = __privateGet2(this, _onOpen)) == null || _a22.call(this, openEvent), this.dispatchEvent(openEvent), typeof body != "object" || !body || !("getReader" in body)) { + __privateMethod2(this, _EventSource_instances, failConnection_fn).call(this, "Invalid response body, expected a web ReadableStream", status), this.close(); + return; + } + const decoder = new TextDecoder(), reader = body.getReader(); + let open = true; + do { + const { done, value } = await reader.read(); + value && __privateGet2(this, _parser).feed(decoder.decode(value, { stream: !done })), done && (open = false, __privateGet2(this, _parser).reset(), __privateMethod2(this, _EventSource_instances, scheduleReconnect_fn).call(this)); + } while (open); + }), __privateAdd2(this, _onFetchError, (err) => { + __privateSet2(this, _controller, void 0), !(err.name === "AbortError" || err.type === "aborted") && __privateMethod2(this, _EventSource_instances, scheduleReconnect_fn).call(this, flattenError2(err)); + }), __privateAdd2(this, _onEvent, (event) => { + typeof event.id == "string" && __privateSet2(this, _lastEventId, event.id); + const messageEvent = new MessageEvent(event.event || "message", { + data: event.data, + origin: __privateGet2(this, _redirectUrl) ? __privateGet2(this, _redirectUrl).origin : __privateGet2(this, _url2).origin, + lastEventId: event.id || "" + }); + __privateGet2(this, _onMessage) && (!event.event || event.event === "message") && __privateGet2(this, _onMessage).call(this, messageEvent), this.dispatchEvent(messageEvent); + }), __privateAdd2(this, _onRetryChange, (value) => { + __privateSet2(this, _reconnectInterval, value); + }), __privateAdd2(this, _reconnect, () => { + __privateSet2(this, _reconnectTimer, void 0), __privateGet2(this, _readyState) === this.CONNECTING && __privateMethod2(this, _EventSource_instances, connect_fn).call(this); + }); + try { + if (url2 instanceof URL) + __privateSet2(this, _url2, url2); + else if (typeof url2 == "string") + __privateSet2(this, _url2, new URL(url2, getBaseURL())); + else + throw new Error("Invalid URL"); + } catch (e2) { + throw syntaxError("An invalid or illegal string was specified"); + } + __privateSet2(this, _parser, createParser({ + onEvent: __privateGet2(this, _onEvent), + onRetry: __privateGet2(this, _onRetryChange) + })), __privateSet2(this, _readyState, this.CONNECTING), __privateSet2(this, _reconnectInterval, 3e3), __privateSet2(this, _fetch, (_a5 = eventSourceInitDict == null ? void 0 : eventSourceInitDict.fetch) != null ? _a5 : globalThis.fetch), __privateSet2(this, _withCredentials, (_b3 = eventSourceInitDict == null ? void 0 : eventSourceInitDict.withCredentials) != null ? _b3 : false), __privateMethod2(this, _EventSource_instances, connect_fn).call(this); + } + /** + * Returns the state of this EventSource object's connection. It can have the values described below. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/readyState) + * + * Note: typed as `number` instead of `0 | 1 | 2` for compatibility with the `EventSource` interface, + * defined in the TypeScript `dom` library. + * + * @public + */ + get readyState() { + return __privateGet2(this, _readyState); + } + /** + * Returns the URL providing the event stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/url) + * + * @public + */ + get url() { + return __privateGet2(this, _url2).href; + } + /** + * Returns true if the credentials mode for connection requests to the URL providing the event stream is set to "include", and false otherwise. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/withCredentials) + */ + get withCredentials() { + return __privateGet2(this, _withCredentials); + } + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/error_event) */ + get onerror() { + return __privateGet2(this, _onError); + } + set onerror(value) { + __privateSet2(this, _onError, value); + } + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/message_event) */ + get onmessage() { + return __privateGet2(this, _onMessage); + } + set onmessage(value) { + __privateSet2(this, _onMessage, value); + } + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/open_event) */ + get onopen() { + return __privateGet2(this, _onOpen); + } + set onopen(value) { + __privateSet2(this, _onOpen, value); + } + addEventListener(type, listener, options) { + const listen = listener; + super.addEventListener(type, listen, options); + } + removeEventListener(type, listener, options) { + const listen = listener; + super.removeEventListener(type, listen, options); + } + /** + * Aborts any instances of the fetch algorithm started for this EventSource object, and sets the readyState attribute to CLOSED. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/close) + * + * @public + */ + close() { + __privateGet2(this, _reconnectTimer) && clearTimeout(__privateGet2(this, _reconnectTimer)), __privateGet2(this, _readyState) !== this.CLOSED && (__privateGet2(this, _controller) && __privateGet2(this, _controller).abort(), __privateSet2(this, _readyState, this.CLOSED), __privateSet2(this, _controller, void 0)); + } + }; + _readyState = /* @__PURE__ */ new WeakMap(), _url2 = /* @__PURE__ */ new WeakMap(), _redirectUrl = /* @__PURE__ */ new WeakMap(), _withCredentials = /* @__PURE__ */ new WeakMap(), _fetch = /* @__PURE__ */ new WeakMap(), _reconnectInterval = /* @__PURE__ */ new WeakMap(), _reconnectTimer = /* @__PURE__ */ new WeakMap(), _lastEventId = /* @__PURE__ */ new WeakMap(), _controller = /* @__PURE__ */ new WeakMap(), _parser = /* @__PURE__ */ new WeakMap(), _onError = /* @__PURE__ */ new WeakMap(), _onMessage = /* @__PURE__ */ new WeakMap(), _onOpen = /* @__PURE__ */ new WeakMap(), _EventSource_instances = /* @__PURE__ */ new WeakSet(), /** + * Connect to the given URL and start receiving events + * + * @internal + */ + connect_fn = function() { + __privateSet2(this, _readyState, this.CONNECTING), __privateSet2(this, _controller, new AbortController()), __privateGet2(this, _fetch)(__privateGet2(this, _url2), __privateMethod2(this, _EventSource_instances, getRequestOptions_fn).call(this)).then(__privateGet2(this, _onFetchResponse)).catch(__privateGet2(this, _onFetchError)); + }, _onFetchResponse = /* @__PURE__ */ new WeakMap(), _onFetchError = /* @__PURE__ */ new WeakMap(), /** + * Get request options for the `fetch()` request + * + * @returns The request options + * @internal + */ + getRequestOptions_fn = function() { + var _a5; + const init = { + // [spec] Let `corsAttributeState` be `Anonymous`… + // [spec] …will have their mode set to "cors"… + mode: "cors", + redirect: "follow", + headers: { Accept: "text/event-stream", ...__privateGet2(this, _lastEventId) ? { "Last-Event-ID": __privateGet2(this, _lastEventId) } : void 0 }, + cache: "no-store", + signal: (_a5 = __privateGet2(this, _controller)) == null ? void 0 : _a5.signal + }; + return "window" in globalThis && (init.credentials = this.withCredentials ? "include" : "same-origin"), init; + }, _onEvent = /* @__PURE__ */ new WeakMap(), _onRetryChange = /* @__PURE__ */ new WeakMap(), /** + * Handles the process referred to in the EventSource specification as "failing a connection". + * + * @param error - The error causing the connection to fail + * @param code - The HTTP status code, if available + * @internal + */ + failConnection_fn = function(message, code) { + var _a5; + __privateGet2(this, _readyState) !== this.CLOSED && __privateSet2(this, _readyState, this.CLOSED); + const errorEvent = new ErrorEvent("error", { code, message }); + (_a5 = __privateGet2(this, _onError)) == null || _a5.call(this, errorEvent), this.dispatchEvent(errorEvent); + }, /** + * Schedules a reconnection attempt against the EventSource endpoint. + * + * @param message - The error causing the connection to fail + * @param code - The HTTP status code, if available + * @internal + */ + scheduleReconnect_fn = function(message, code) { + var _a5; + if (__privateGet2(this, _readyState) === this.CLOSED) + return; + __privateSet2(this, _readyState, this.CONNECTING); + const errorEvent = new ErrorEvent("error", { code, message }); + (_a5 = __privateGet2(this, _onError)) == null || _a5.call(this, errorEvent), this.dispatchEvent(errorEvent), __privateSet2(this, _reconnectTimer, setTimeout(__privateGet2(this, _reconnect), __privateGet2(this, _reconnectInterval))); + }, _reconnect = /* @__PURE__ */ new WeakMap(), /** + * ReadyState representing an EventSource currently trying to connect + * + * @public + */ + EventSource.CONNECTING = 0, /** + * ReadyState representing an EventSource connection that is open (eg connected) + * + * @public + */ + EventSource.OPEN = 1, /** + * ReadyState representing an EventSource connection that is closed (eg disconnected) + * + * @public + */ + EventSource.CLOSED = 2; + } +}); + +// node_modules/@modelcontextprotocol/sdk/dist/esm/client/sse.js +var sse_exports = {}; +__export(sse_exports, { + SSEClientTransport: () => SSEClientTransport, + SseError: () => SseError +}); +var SseError, SSEClientTransport; +var init_sse = __esm({ + "node_modules/@modelcontextprotocol/sdk/dist/esm/client/sse.js"() { + init_dist2(); + init_transport(); + init_types(); + init_auth2(); + SseError = class extends Error { + constructor(code, message, event) { + super(`SSE error: ${message}`); + this.code = code; + this.event = event; + } + }; + SSEClientTransport = class { + constructor(url2, opts) { + this._url = url2; + this._resourceMetadataUrl = void 0; + this._scope = void 0; + this._eventSourceInit = opts == null ? void 0 : opts.eventSourceInit; + this._requestInit = opts == null ? void 0 : opts.requestInit; + this._authProvider = opts == null ? void 0 : opts.authProvider; + this._fetch = opts == null ? void 0 : opts.fetch; + this._fetchWithInit = createFetchWithInit(opts == null ? void 0 : opts.fetch, opts == null ? void 0 : opts.requestInit); + } + async _authThenStart() { + var _a5; + if (!this._authProvider) { + throw new UnauthorizedError("No auth provider"); + } + let result; + try { + result = await auth(this._authProvider, { + serverUrl: this._url, + resourceMetadataUrl: this._resourceMetadataUrl, + scope: this._scope, + fetchFn: this._fetchWithInit + }); + } catch (error48) { + (_a5 = this.onerror) == null ? void 0 : _a5.call(this, error48); + throw error48; + } + if (result !== "AUTHORIZED") { + throw new UnauthorizedError(); + } + return await this._startOrAuth(); + } + async _commonHeaders() { + var _a5; + const headers = {}; + if (this._authProvider) { + const tokens = await this._authProvider.tokens(); + if (tokens) { + headers["Authorization"] = `Bearer ${tokens.access_token}`; + } + } + if (this._protocolVersion) { + headers["mcp-protocol-version"] = this._protocolVersion; + } + const extraHeaders = normalizeHeaders((_a5 = this._requestInit) == null ? void 0 : _a5.headers); + return new Headers({ + ...headers, + ...extraHeaders + }); + } + _startOrAuth() { + var _a5, _b3, _c2; + const fetchImpl = (_c2 = (_b3 = (_a5 = this == null ? void 0 : this._eventSourceInit) == null ? void 0 : _a5.fetch) != null ? _b3 : this._fetch) != null ? _c2 : fetch; + return new Promise((resolve8, reject) => { + this._eventSource = new EventSource(this._url.href, { + ...this._eventSourceInit, + fetch: async (url2, init) => { + const headers = await this._commonHeaders(); + headers.set("Accept", "text/event-stream"); + const response = await fetchImpl(url2, { + ...init, + headers + }); + if (response.status === 401 && response.headers.has("www-authenticate")) { + const { resourceMetadataUrl, scope } = extractWWWAuthenticateParams(response); + this._resourceMetadataUrl = resourceMetadataUrl; + this._scope = scope; + } + return response; + } + }); + this._abortController = new AbortController(); + this._eventSource.onerror = (event) => { + var _a6; + if (event.code === 401 && this._authProvider) { + this._authThenStart().then(resolve8, reject); + return; + } + const error48 = new SseError(event.code, event.message, event); + reject(error48); + (_a6 = this.onerror) == null ? void 0 : _a6.call(this, error48); + }; + this._eventSource.onopen = () => { + }; + this._eventSource.addEventListener("endpoint", (event) => { + var _a6; + const messageEvent = event; + try { + this._endpoint = new URL(messageEvent.data, this._url); + if (this._endpoint.origin !== this._url.origin) { + throw new Error(`Endpoint origin does not match connection origin: ${this._endpoint.origin}`); + } + } catch (error48) { + reject(error48); + (_a6 = this.onerror) == null ? void 0 : _a6.call(this, error48); + void this.close(); + return; + } + resolve8(); + }); + this._eventSource.onmessage = (event) => { + var _a6, _b4; + const messageEvent = event; + let message; + try { + message = JSONRPCMessageSchema.parse(JSON.parse(messageEvent.data)); + } catch (error48) { + (_a6 = this.onerror) == null ? void 0 : _a6.call(this, error48); + return; + } + (_b4 = this.onmessage) == null ? void 0 : _b4.call(this, message); + }; + }); + } + async start() { + if (this._eventSource) { + throw new Error("SSEClientTransport already started! If using Client class, note that connect() calls start() automatically."); + } + return await this._startOrAuth(); + } + /** + * Call this method after the user has finished authorizing via their user agent and is redirected back to the MCP client application. This will exchange the authorization code for an access token, enabling the next connection attempt to successfully auth. + */ + async finishAuth(authorizationCode) { + if (!this._authProvider) { + throw new UnauthorizedError("No auth provider"); + } + const result = await auth(this._authProvider, { + serverUrl: this._url, + authorizationCode, + resourceMetadataUrl: this._resourceMetadataUrl, + scope: this._scope, + fetchFn: this._fetchWithInit + }); + if (result !== "AUTHORIZED") { + throw new UnauthorizedError("Failed to authorize"); + } + } + async close() { + var _a5, _b3, _c2; + (_a5 = this._abortController) == null ? void 0 : _a5.abort(); + (_b3 = this._eventSource) == null ? void 0 : _b3.close(); + (_c2 = this.onclose) == null ? void 0 : _c2.call(this); + } + async send(message) { + var _a5, _b3, _c2, _d; + if (!this._endpoint) { + throw new Error("Not connected"); + } + try { + const headers = await this._commonHeaders(); + headers.set("content-type", "application/json"); + const init = { + ...this._requestInit, + method: "POST", + headers, + body: JSON.stringify(message), + signal: (_a5 = this._abortController) == null ? void 0 : _a5.signal + }; + const response = await ((_b3 = this._fetch) != null ? _b3 : fetch)(this._endpoint, init); + if (!response.ok) { + const text = await response.text().catch(() => null); + if (response.status === 401 && this._authProvider) { + const { resourceMetadataUrl, scope } = extractWWWAuthenticateParams(response); + this._resourceMetadataUrl = resourceMetadataUrl; + this._scope = scope; + const result = await auth(this._authProvider, { + serverUrl: this._url, + resourceMetadataUrl: this._resourceMetadataUrl, + scope: this._scope, + fetchFn: this._fetchWithInit + }); + if (result !== "AUTHORIZED") { + throw new UnauthorizedError(); + } + return this.send(message); + } + throw new Error(`Error POSTing to endpoint (HTTP ${response.status}): ${text}`); + } + await ((_c2 = response.body) == null ? void 0 : _c2.cancel()); + } catch (error48) { + (_d = this.onerror) == null ? void 0 : _d.call(this, error48); + throw error48; + } + } + setProtocolVersion(version2) { + this._protocolVersion = version2; + } + }; + } +}); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => ClaudianPlugin +}); +module.exports = __toCommonJS(main_exports); + +// src/utils/electronCompat.ts +function isAbortSignalLike(target) { + if (!target || typeof target !== "object") return false; + const t11 = target; + return typeof t11.aborted === "boolean" && typeof t11.addEventListener === "function" && typeof t11.removeEventListener === "function"; +} +function patchSetMaxListenersForElectron() { + const events = require("events"); + if (events.setMaxListeners.__electronPatched) return; + const original = events.setMaxListeners; + const patched = function patchedSetMaxListeners(...args) { + try { + return Reflect.apply(original, this, args); + } catch (error48) { + const eventTargets = args.slice(1); + if (eventTargets.length > 0 && eventTargets.every(isAbortSignalLike)) { + return; + } + throw error48; + } + }; + patched.__electronPatched = true; + events.setMaxListeners = patched; +} + +// src/core/providers/types.ts +var DEFAULT_CHAT_PROVIDER_ID = "claude"; + +// src/core/providers/ProviderRegistry.ts +var ProviderRegistry = class { + static register(providerId, registration) { + this.registrations[providerId] = registration; + } + static getProviderRegistration(providerId) { + const registration = this.registrations[providerId]; + if (!registration) { + throw new Error(`Provider "${providerId}" is not registered.`); + } + return registration; + } + static createChatRuntime(options) { + var _a5; + const providerId = (_a5 = options.providerId) != null ? _a5 : DEFAULT_CHAT_PROVIDER_ID; + return this.getProviderRegistration(providerId).createRuntime(options); + } + static createTitleGenerationService(plugin, providerId) { + if (!providerId) { + return new RoutedTitleGenerationService(plugin); + } + return this.getProviderRegistration(providerId).createTitleGenerationService(plugin); + } + static resolveTitleGenerationProviderId(settings11) { + const titleModel = typeof settings11.titleGenerationModel === "string" ? settings11.titleGenerationModel.trim() : ""; + if (!titleModel) { + return DEFAULT_CHAT_PROVIDER_ID; + } + return this.resolveProviderForModel(titleModel, settings11, { + fallbackProviderId: DEFAULT_CHAT_PROVIDER_ID + }); + } + static createInstructionRefineService(plugin, providerId = DEFAULT_CHAT_PROVIDER_ID) { + return this.getProviderRegistration(providerId).createInstructionRefineService(plugin); + } + static createInlineEditService(plugin, providerId = DEFAULT_CHAT_PROVIDER_ID) { + return this.getProviderRegistration(providerId).createInlineEditService(plugin); + } + static getConversationHistoryService(providerId = DEFAULT_CHAT_PROVIDER_ID) { + return this.getProviderRegistration(providerId).historyService; + } + static getTaskResultInterpreter(providerId = DEFAULT_CHAT_PROVIDER_ID) { + return this.getProviderRegistration(providerId).taskResultInterpreter; + } + static getSubagentLifecycleAdapter(providerId = DEFAULT_CHAT_PROVIDER_ID) { + var _a5; + return (_a5 = this.getProviderRegistration(providerId).subagentLifecycleAdapter) != null ? _a5 : null; + } + static getCapabilities(providerId = DEFAULT_CHAT_PROVIDER_ID) { + return this.getProviderRegistration(providerId).capabilities; + } + static getEnvironmentKeyPatterns(providerId) { + var _a5; + return (_a5 = this.getProviderRegistration(providerId).environmentKeyPatterns) != null ? _a5 : []; + } + static getChatUIConfig(providerId = DEFAULT_CHAT_PROVIDER_ID) { + return this.getProviderRegistration(providerId).chatUIConfig; + } + static getSettingsReconciler(providerId = DEFAULT_CHAT_PROVIDER_ID) { + return this.getProviderRegistration(providerId).settingsReconciler; + } + static getRegisteredProviderIds() { + return Object.keys(this.registrations); + } + static getEnabledProviderIds(settings11) { + return this.getRegisteredProviderIds().filter((providerId) => this.getProviderRegistration(providerId).isEnabled(settings11)).sort((a, b2) => this.getProviderRegistration(a).blankTabOrder - this.getProviderRegistration(b2).blankTabOrder); + } + static getProviderDisplayName(providerId) { + return this.getProviderRegistration(providerId).displayName; + } + static isEnabled(providerId, settings11) { + return this.getProviderRegistration(providerId).isEnabled(settings11); + } + static resolveSettingsProviderId(settings11) { + var _a5; + const current = settings11.settingsProvider; + if (typeof current === "string") { + const currentProvider = current; + if (this.getRegisteredProviderIds().includes(currentProvider) && this.isEnabled(currentProvider, settings11)) { + return currentProvider; + } + } + if (this.isEnabled(DEFAULT_CHAT_PROVIDER_ID, settings11)) { + return DEFAULT_CHAT_PROVIDER_ID; + } + return (_a5 = this.getEnabledProviderIds(settings11)[0]) != null ? _a5 : DEFAULT_CHAT_PROVIDER_ID; + } + static resolveProviderForModel(model, settings11 = {}, options = {}) { + const providerIds = options.onlyEnabledProviders ? this.getEnabledProviderIds(settings11) : this.getRegisteredProviderIds(); + const fallbackProviderId = options.fallbackProviderId && (!options.onlyEnabledProviders || this.isEnabled(options.fallbackProviderId, settings11)) ? options.fallbackProviderId : options.onlyEnabledProviders ? this.resolveSettingsProviderId(settings11) : DEFAULT_CHAT_PROVIDER_ID; + for (const providerId of providerIds) { + if (providerId === fallbackProviderId) { + continue; + } + if (this.getChatUIConfig(providerId).ownsModel(model, settings11)) { + return providerId; + } + } + return fallbackProviderId; + } + static getCustomModelIds(envVars) { + const ids = /* @__PURE__ */ new Set(); + for (const providerId of this.getRegisteredProviderIds()) { + for (const modelId of this.getChatUIConfig(providerId).getCustomModelIds(envVars)) { + ids.add(modelId); + } + } + return ids; + } +}; +ProviderRegistry.registrations = {}; +var RoutedTitleGenerationService = class { + constructor(plugin) { + this.plugin = plugin; + this.activeGenerations = /* @__PURE__ */ new Map(); + } + async generateTitle(conversationId, userMessage, callback) { + const providerId = ProviderRegistry.resolveTitleGenerationProviderId( + this.plugin.settings + ); + const service = ProviderRegistry.createTitleGenerationService(this.plugin, providerId); + const generation = { service }; + const previous = this.activeGenerations.get(conversationId); + this.activeGenerations.set(conversationId, generation); + previous == null ? void 0 : previous.service.cancel(); + try { + await service.generateTitle(conversationId, userMessage, async (convId, result) => { + if (this.activeGenerations.get(conversationId) !== generation) { + return; + } + await callback(convId, result); + }); + } finally { + if (this.activeGenerations.get(conversationId) === generation) { + this.activeGenerations.delete(conversationId); + } + } + } + cancel() { + const services = new Set( + [...this.activeGenerations.values()].map((generation) => generation.service) + ); + this.activeGenerations.clear(); + for (const service of services) { + service.cancel(); + } + } +}; + +// src/core/storage/HomeFileAdapter.ts +var fs = __toESM(require("fs")); +var os = __toESM(require("os")); +var path = __toESM(require("path")); +var HomeFileAdapter = class { + constructor(root = os.homedir()) { + this.root = root; + } + resolve(relativePath) { + return path.join(this.root, relativePath); + } + async exists(p) { + try { + await fs.promises.access(this.resolve(p)); + return true; + } catch (e2) { + return false; + } + } + async read(p) { + return fs.promises.readFile(this.resolve(p), "utf-8"); + } + async write(p, content) { + const full = this.resolve(p); + await fs.promises.mkdir(path.dirname(full), { recursive: true }); + await fs.promises.writeFile(full, content, "utf-8"); + } + async delete(p) { + try { + await fs.promises.unlink(this.resolve(p)); + } catch (err) { + if (err.code !== "ENOENT") throw err; + } + } + async deleteFolder(p) { + try { + await fs.promises.rmdir(this.resolve(p)); + } catch (e2) { + } + } + async listFolders(folder) { + const full = this.resolve(folder); + try { + const entries = await fs.promises.readdir(full, { withFileTypes: true }); + return entries.filter((e2) => e2.isDirectory()).map((e2) => `${folder}/${e2.name}`); + } catch (e2) { + return []; + } + } + async ensureFolder(p) { + await fs.promises.mkdir(this.resolve(p), { recursive: true }); + } +}; + +// src/core/providers/ProviderWorkspaceRegistry.ts +var ProviderWorkspaceRegistry = class { + static register(providerId, registration) { + this.registrations[providerId] = registration; + } + static getWorkspaceRegistration(providerId) { + const registration = this.registrations[providerId]; + if (!registration) { + throw new Error(`Provider workspace "${providerId}" is not registered.`); + } + return registration; + } + static async initializeAll(plugin) { + const providerIds = Object.keys(this.registrations); + const storage = plugin.storage; + const vaultAdapter = storage.getAdapter(); + const homeAdapter = new HomeFileAdapter(); + for (const providerId of providerIds) { + this.services[providerId] = await this.getWorkspaceRegistration(providerId).initialize({ + plugin, + storage, + vaultAdapter, + homeAdapter + }); + } + } + static setServices(providerId, services) { + if (services) { + this.services[providerId] = services; + } else { + delete this.services[providerId]; + } + } + static clear() { + this.services = {}; + } + static getServices(providerId) { + var _a5; + return (_a5 = this.services[providerId]) != null ? _a5 : null; + } + static requireServices(providerId) { + const services = this.getServices(providerId); + if (!services) { + throw new Error(`Provider workspace "${providerId}" is not initialized.`); + } + return services; + } + static getCommandCatalog(providerId) { + var _a5, _b3; + return (_b3 = (_a5 = this.getServices(providerId)) == null ? void 0 : _a5.commandCatalog) != null ? _b3 : null; + } + static getAgentMentionProvider(providerId) { + var _a5, _b3; + return (_b3 = (_a5 = this.getServices(providerId)) == null ? void 0 : _a5.agentMentionProvider) != null ? _b3 : null; + } + static async refreshAgentMentions(providerId) { + var _a5, _b3; + await ((_b3 = (_a5 = this.getServices(providerId)) == null ? void 0 : _a5.refreshAgentMentions) == null ? void 0 : _b3.call(_a5)); + } + static getCliResolver(providerId) { + var _a5, _b3; + return (_b3 = (_a5 = this.getServices(providerId)) == null ? void 0 : _a5.cliResolver) != null ? _b3 : null; + } + static getRuntimeCommandLoader(providerId) { + var _a5, _b3; + return (_b3 = (_a5 = this.getServices(providerId)) == null ? void 0 : _a5.runtimeCommandLoader) != null ? _b3 : null; + } + static getTabWarmupPolicy(providerId) { + var _a5, _b3; + return (_b3 = (_a5 = this.getServices(providerId)) == null ? void 0 : _a5.tabWarmupPolicy) != null ? _b3 : null; + } + static getMcpServerManager(providerId) { + var _a5, _b3; + return (_b3 = (_a5 = this.getServices(providerId)) == null ? void 0 : _a5.mcpServerManager) != null ? _b3 : null; + } + static getSettingsTabRenderer(providerId) { + var _a5, _b3; + return (_b3 = (_a5 = this.getServices(providerId)) == null ? void 0 : _a5.settingsTabRenderer) != null ? _b3 : null; + } +}; +ProviderWorkspaceRegistry.registrations = {}; +ProviderWorkspaceRegistry.services = {}; + +// src/utils/mcp.ts +function extractMcpMentions(text, validNames) { + const mentions = /* @__PURE__ */ new Set(); + const regex = /@([a-zA-Z0-9._-]+)(?!\/)/g; + let match; + while ((match = regex.exec(text)) !== null) { + const name = match[1]; + if (validNames.has(name)) { + mentions.add(name); + } + } + return mentions; +} +function transformMcpMentions(text, validNames) { + if (validNames.size === 0) return text; + const sortedNames = Array.from(validNames).sort((a, b2) => b2.length - a.length); + const escapedNames = sortedNames.map(escapeRegExp).join("|"); + const pattern = new RegExp( + `@(${escapedNames})(?! MCP)(?!/)(?![a-zA-Z0-9_-])(?!\\.[a-zA-Z0-9_-])`, + "g" + ); + return text.replace(pattern, "@$1 MCP"); +} +function escapeRegExp(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} +function parseCommand(command, providedArgs) { + if (providedArgs && providedArgs.length > 0) { + return { cmd: command, args: providedArgs }; + } + const parts = splitCommandString(command); + if (parts.length === 0) { + return { cmd: "", args: [] }; + } + return { cmd: parts[0], args: parts.slice(1) }; +} +function splitCommandString(cmdStr) { + const parts = []; + let current = ""; + let inQuote = false; + let quoteChar = ""; + for (let i = 0; i < cmdStr.length; i++) { + const char = cmdStr[i]; + if ((char === '"' || char === "'") && !inQuote) { + inQuote = true; + quoteChar = char; + continue; + } + if (char === quoteChar && inQuote) { + inQuote = false; + quoteChar = ""; + continue; + } + if (/\s/.test(char) && !inQuote) { + if (current) { + parts.push(current); + current = ""; + } + continue; + } + current += char; + } + if (current) { + parts.push(current); + } + return parts; +} + +// src/core/mcp/McpServerManager.ts +var McpServerManager = class { + constructor(storage) { + this.servers = []; + this.storage = storage; + } + async loadServers() { + this.servers = await this.storage.load(); + } + getServers() { + return this.servers; + } + getEnabledCount() { + return this.servers.filter((s2) => s2.enabled).length; + } + /** + * Get servers to include in SDK options. + * + * A server is included if: + * - It is enabled AND + * - Either context-saving is disabled OR the server is @-mentioned + * + * @param mentionedNames Set of server names that were @-mentioned in the prompt + */ + getActiveServers(mentionedNames) { + const result = {}; + for (const server of this.servers) { + if (!server.enabled) continue; + if (server.contextSaving && !mentionedNames.has(server.name)) { + continue; + } + result[server.name] = server.config; + } + return result; + } + /** + * Get disabled MCP tools formatted for SDK disallowedTools option. + * + * Only returns disabled tools from servers that would be active (same filter as getActiveServers). + * + * @param mentionedNames Set of server names that were @-mentioned in the prompt + */ + getDisallowedMcpTools(mentionedNames) { + return this.collectDisallowedTools( + (s2) => !s2.contextSaving || mentionedNames.has(s2.name) + ); + } + /** + * Get all disabled MCP tools from ALL enabled servers (ignoring @-mentions). + * + * Used for persistent queries to pre-register all disabled tools upfront, + * so @-mentioning servers doesn't require cold start. + */ + getAllDisallowedMcpTools() { + return this.collectDisallowedTools().sort(); + } + collectDisallowedTools(filter) { + const disallowed = /* @__PURE__ */ new Set(); + for (const server of this.servers) { + if (!server.enabled) continue; + if (filter && !filter(server)) continue; + if (!server.disabledTools || server.disabledTools.length === 0) continue; + for (const tool of server.disabledTools) { + const normalized = tool.trim(); + if (!normalized) continue; + disallowed.add(`mcp__${server.name}__${normalized}`); + } + } + return Array.from(disallowed); + } + hasServers() { + return this.servers.length > 0; + } + getContextSavingServers() { + return this.servers.filter((s2) => s2.enabled && s2.contextSaving); + } + getContextSavingNames() { + return new Set(this.getContextSavingServers().map((s2) => s2.name)); + } + /** Only matches against enabled servers with context-saving mode. */ + extractMentions(text) { + return extractMcpMentions(text, this.getContextSavingNames()); + } + /** + * Appends " MCP" after each valid @mention. Applied to API requests only, not shown in UI. + */ + transformMentions(text) { + return transformMcpMentions(text, this.getContextSavingNames()); + } +}; + +// src/providers/claude/app/ClaudeWorkspaceServices.ts +init_path(); + +// src/providers/claude/agents/AgentManager.ts +var fs3 = __toESM(require("fs")); +var os3 = __toESM(require("os")); +var path3 = __toESM(require("path")); + +// src/utils/frontmatter.ts +var import_obsidian = require("obsidian"); +var FRONTMATTER_PATTERN = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/; +var VALID_KEY_PATTERN = /^[\w-]+$/; +function isValidKey(key) { + return key.length > 0 && VALID_KEY_PATTERN.test(key); +} +function unquote(value) { + if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) { + return value.slice(1, -1); + } + return value; +} +function parseScalarValue(rawValue) { + const value = rawValue.trim(); + if (value === "true") return true; + if (value === "false") return false; + if (value === "null" || value === "") return null; + if (!Number.isNaN(Number(value))) return Number(value); + if (value.startsWith("[") && value.endsWith("]")) { + return value.slice(1, -1).split(",").map((item) => item.trim()).filter(Boolean).map((item) => unquote(item)); + } + return unquote(value); +} +function parseFrontmatterFallback(yamlContent) { + const result = {}; + const lines = yamlContent.split(/\r?\n/); + let currentListKey = null; + let currentList = []; + function flushList() { + if (!currentListKey) return; + result[currentListKey] = currentList; + currentListKey = null; + currentList = []; + } + let pendingBareKey = null; + for (const line of lines) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith("#")) continue; + if (currentListKey) { + if (trimmed.startsWith("- ")) { + currentList.push(parseScalarValue(trimmed.slice(2))); + continue; + } + flushList(); + } + if (pendingBareKey) { + if (trimmed.startsWith("- ")) { + currentListKey = pendingBareKey; + currentList = []; + pendingBareKey = null; + currentList.push(parseScalarValue(trimmed.slice(2))); + continue; + } + result[pendingBareKey] = ""; + pendingBareKey = null; + } + const colonIndex = trimmed.indexOf(": "); + if (colonIndex === -1) { + if (trimmed.endsWith(":")) { + const key2 = trimmed.slice(0, -1).trim(); + if (isValidKey(key2)) { + pendingBareKey = key2; + } + } + continue; + } + const key = trimmed.slice(0, colonIndex).trim(); + if (!isValidKey(key)) continue; + result[key] = parseScalarValue(trimmed.slice(colonIndex + 2)); + } + if (pendingBareKey) { + result[pendingBareKey] = ""; + } + flushList(); + return result; +} +function parseFrontmatter(content) { + const match = content.match(FRONTMATTER_PATTERN); + if (!match) return null; + try { + const parsed = (0, import_obsidian.parseYaml)(match[1]); + if (parsed !== null && parsed !== void 0 && typeof parsed !== "object") { + return null; + } + return { + frontmatter: parsed != null ? parsed : {}, + body: match[2] + }; + } catch (e2) { + const fallbackParsed = parseFrontmatterFallback(match[1]); + if (Object.keys(fallbackParsed).length > 0) { + return { + frontmatter: fallbackParsed, + body: match[2] + }; + } + return null; + } +} +function extractString(fm2, key) { + const val = fm2[key]; + if (typeof val === "string" && val.length > 0) return val; + if (Array.isArray(val) && val.length > 0 && val.every((v2) => typeof v2 === "string")) { + return val.map((v2) => `[${v2}]`).join(" "); + } + return void 0; +} +function normalizeStringArray(val) { + if (val === void 0 || val === null) return void 0; + if (Array.isArray(val)) { + return val.map((v2) => String(v2).trim()).filter(Boolean); + } + if (typeof val === "string") { + const trimmed = val.trim(); + if (!trimmed) return void 0; + return trimmed.split(",").map((s2) => s2.trim()).filter(Boolean); + } + return void 0; +} +function extractStringArray(fm2, key) { + return normalizeStringArray(fm2[key]); +} +function extractBoolean(fm2, key) { + const val = fm2[key]; + if (typeof val === "boolean") return val; + return void 0; +} +function isRecord(value) { + return value != null && typeof value === "object" && !Array.isArray(value); +} +var MAX_SLUG_LENGTH = 64; +var SLUG_PATTERN = /^[a-z0-9-]+$/; +var YAML_RESERVED_WORDS = /* @__PURE__ */ new Set(["true", "false", "null", "yes", "no", "on", "off"]); +function validateSlugName(name, label) { + if (!name) { + return `${label} name is required`; + } + if (name.length > MAX_SLUG_LENGTH) { + return `${label} name must be ${MAX_SLUG_LENGTH} characters or fewer`; + } + if (!SLUG_PATTERN.test(name)) { + return `${label} name can only contain lowercase letters, numbers, and hyphens`; + } + if (YAML_RESERVED_WORDS.has(name)) { + return `${label} name cannot be a YAML reserved word (true, false, null, yes, no, on, off)`; + } + return null; +} + +// src/providers/claude/types/agent.ts +var AGENT_PERMISSION_MODES = ["default", "acceptEdits", "auto", "dontAsk", "bypassPermissions", "plan", "delegate"]; + +// src/providers/claude/agents/AgentStorage.ts +var KNOWN_AGENT_KEYS = /* @__PURE__ */ new Set([ + "name", + "description", + "tools", + "disallowedTools", + "model", + "skills", + "permissionMode", + "hooks" +]); +function parseAgentFile(content) { + const parsed = parseFrontmatter(content); + if (!parsed) return null; + const { frontmatter: fm2, body } = parsed; + const name = fm2.name; + const description = fm2.description; + if (typeof name !== "string" || !name.trim()) return null; + if (typeof description !== "string" || !description.trim()) return null; + const tools = fm2.tools; + const disallowedTools = fm2.disallowedTools; + if (tools !== void 0 && !isStringOrArray(tools)) return null; + if (disallowedTools !== void 0 && !isStringOrArray(disallowedTools)) return null; + const model = typeof fm2.model === "string" ? fm2.model : void 0; + const extra = {}; + for (const key of Object.keys(fm2)) { + if (!KNOWN_AGENT_KEYS.has(key)) { + extra[key] = fm2[key]; + } + } + const frontmatter = { + name, + description, + tools, + disallowedTools, + model, + skills: extractStringArray(fm2, "skills"), + permissionMode: typeof fm2.permissionMode === "string" ? fm2.permissionMode : void 0, + hooks: isRecord(fm2.hooks) ? fm2.hooks : void 0, + extraFrontmatter: Object.keys(extra).length > 0 ? extra : void 0 + }; + return { frontmatter, body: body.trim() }; +} +function isStringOrArray(value) { + return typeof value === "string" || Array.isArray(value); +} +function parseToolsList(tools) { + return normalizeStringArray(tools); +} +function parsePermissionMode(mode) { + if (!mode) return void 0; + const trimmed = mode.trim(); + if (AGENT_PERMISSION_MODES.includes(trimmed)) { + return trimmed; + } + return void 0; +} +var VALID_MODELS = ["sonnet", "opus", "haiku", "inherit"]; +function parseModel(model) { + if (!model) return "inherit"; + const normalized = model.toLowerCase().trim(); + if (VALID_MODELS.includes(normalized)) { + return normalized; + } + return "inherit"; +} +function buildAgentFromFrontmatter(frontmatter, body, meta3) { + return { + id: meta3.id, + name: frontmatter.name, + description: frontmatter.description, + prompt: body, + tools: parseToolsList(frontmatter.tools), + disallowedTools: parseToolsList(frontmatter.disallowedTools), + model: parseModel(frontmatter.model), + source: meta3.source, + filePath: meta3.filePath, + pluginName: meta3.pluginName, + skills: frontmatter.skills, + permissionMode: parsePermissionMode(frontmatter.permissionMode), + hooks: frontmatter.hooks, + extraFrontmatter: frontmatter.extraFrontmatter + }; +} + +// src/providers/claude/agents/AgentManager.ts +var GLOBAL_AGENTS_DIR = path3.join(os3.homedir(), ".claude", "agents"); +var VAULT_AGENTS_DIR = ".claude/agents"; +var PLUGIN_AGENTS_DIR = "agents"; +var FALLBACK_BUILTIN_AGENT_NAMES = ["Explore", "Plan", "Bash", "general-purpose"]; +var BUILTIN_AGENT_DESCRIPTIONS = { + "Explore": "Fast codebase exploration and search", + "Plan": "Implementation planning and architecture", + "Bash": "Command execution specialist", + "general-purpose": "Multi-step tasks and complex workflows" +}; +function makeBuiltinAgent(name) { + var _a5; + return { + id: name, + name: name.replace(/-/g, " ").replace(/\b\w/g, (l2) => l2.toUpperCase()), + description: (_a5 = BUILTIN_AGENT_DESCRIPTIONS[name]) != null ? _a5 : "", + prompt: "", + // Built-in — prompt managed by SDK + source: "builtin" + }; +} +function normalizePluginName(name) { + return name.toLowerCase().replace(/\s+/g, "-"); +} +var AgentManager = class { + constructor(vaultPath, pluginManager) { + this.agents = []; + this.builtinAgentNames = FALLBACK_BUILTIN_AGENT_NAMES; + this.vaultPath = vaultPath; + this.pluginManager = pluginManager; + } + /** Built-in agents are those from init that are NOT loaded from files. */ + setBuiltinAgentNames(names) { + this.builtinAgentNames = names; + const fileAgentIds = new Set( + this.agents.filter((a) => a.source !== "builtin").map((a) => a.id) + ); + this.agents = [ + ...names.filter((n10) => !fileAgentIds.has(n10)).map(makeBuiltinAgent), + ...this.agents.filter((a) => a.source !== "builtin") + ]; + } + async loadAgents() { + this.agents = []; + for (const name of this.builtinAgentNames) { + this.addAgent(makeBuiltinAgent(name)); + } + try { + this.loadPluginAgents(); + } catch (e2) { + } + try { + this.loadVaultAgents(); + } catch (e2) { + } + try { + this.loadGlobalAgents(); + } catch (e2) { + } + } + getAvailableAgents() { + return [...this.agents]; + } + getAgentById(id) { + return this.agents.find((a) => a.id === id); + } + /** Used for @-mention filtering in the chat input. */ + searchAgents(query) { + const q = query.toLowerCase(); + return this.agents.filter( + (a) => a.name.toLowerCase().includes(q) || a.id.toLowerCase().includes(q) || a.description.toLowerCase().includes(q) + ); + } + loadPluginAgents() { + for (const plugin of this.pluginManager.getPlugins()) { + if (!plugin.enabled) continue; + const agentsDir = path3.join(plugin.installPath, PLUGIN_AGENTS_DIR); + if (!fs3.existsSync(agentsDir)) continue; + this.loadAgentsFromFiles( + this.listMarkdownFiles(agentsDir), + (filePath) => this.parsePluginAgentFromFile(filePath, plugin.name) + ); + } + } + loadVaultAgents() { + this.loadAgentsFromDirectory(path3.join(this.vaultPath, VAULT_AGENTS_DIR), "vault"); + } + loadGlobalAgents() { + this.loadAgentsFromDirectory(GLOBAL_AGENTS_DIR, "global"); + } + loadAgentsFromDirectory(dir, source) { + if (!fs3.existsSync(dir)) return; + this.loadAgentsFromFiles( + this.listMarkdownFiles(dir), + (filePath) => this.parseAgentFromFile(filePath, source) + ); + } + listMarkdownFiles(dir) { + const files = []; + try { + const entries = fs3.readdirSync(dir, { withFileTypes: true }); + for (const entry of entries) { + if (entry.isFile() && entry.name.endsWith(".md")) { + files.push(path3.join(dir, entry.name)); + } + } + } catch (e2) { + } + return files; + } + parsePluginAgentFromFile(filePath, pluginName) { + return this.parseAgentDefinition( + filePath, + (agentName) => `${normalizePluginName(pluginName)}:${agentName}`, + (frontmatter, body, id) => buildAgentFromFrontmatter(frontmatter, body, { + id, + source: "plugin", + pluginName, + filePath + }) + ); + } + parseAgentFromFile(filePath, source) { + return this.parseAgentDefinition( + filePath, + (agentName) => agentName, + (frontmatter, body, id) => buildAgentFromFrontmatter(frontmatter, body, { + id, + source, + filePath + }) + ); + } + loadAgentsFromFiles(filePaths, loadAgent) { + for (const filePath of filePaths) { + this.addAgent(loadAgent(filePath)); + } + } + addAgent(agent) { + if (!agent) { + return; + } + if (this.agents.some((existing) => existing.id === agent.id)) { + return; + } + this.agents.push(agent); + } + parseAgentDefinition(filePath, buildId, buildAgent) { + try { + const content = fs3.readFileSync(filePath, "utf-8"); + const parsed = parseAgentFile(content); + if (!parsed) { + return null; + } + const { frontmatter, body } = parsed; + return buildAgent(frontmatter, body, buildId(frontmatter.name)); + } catch (e2) { + return null; + } + } +}; + +// src/utils/slashCommand.ts +function extractFirstParagraph(content) { + const paragraph = content.split(/\n\s*\n/).find((p) => p.trim()); + if (!paragraph) return void 0; + return paragraph.trim().replace(/\n/g, " "); +} +function validateCommandName(name) { + return validateSlugName(name, "Command"); +} +function isSkill(cmd) { + if (cmd.kind) return cmd.kind === "skill"; + return cmd.id.startsWith("skill-"); +} +function parsedToSlashCommand(parsed, identity) { + return { + ...identity, + description: parsed.description, + argumentHint: parsed.argumentHint, + allowedTools: parsed.allowedTools, + model: parsed.model, + content: parsed.promptContent, + disableModelInvocation: parsed.disableModelInvocation, + userInvocable: parsed.userInvocable, + context: parsed.context, + agent: parsed.agent, + hooks: parsed.hooks + }; +} +function parseSlashCommandContent(content) { + var _a5, _b3, _c2, _d; + const parsed = parseFrontmatter(content); + if (!parsed) { + return { promptContent: content }; + } + const fm2 = parsed.frontmatter; + return { + // Existing fields — support both kebab-case (file format) and camelCase + description: extractString(fm2, "description"), + argumentHint: (_a5 = extractString(fm2, "argument-hint")) != null ? _a5 : extractString(fm2, "argumentHint"), + allowedTools: (_b3 = extractStringArray(fm2, "allowed-tools")) != null ? _b3 : extractStringArray(fm2, "allowedTools"), + model: extractString(fm2, "model"), + promptContent: parsed.body, + // Skill fields — kebab-case preferred (CC file format), camelCase for backwards compat + disableModelInvocation: (_c2 = extractBoolean(fm2, "disable-model-invocation")) != null ? _c2 : extractBoolean(fm2, "disableModelInvocation"), + userInvocable: (_d = extractBoolean(fm2, "user-invocable")) != null ? _d : extractBoolean(fm2, "userInvocable"), + context: extractString(fm2, "context") === "fork" ? "fork" : void 0, + agent: extractString(fm2, "agent"), + hooks: isRecord(fm2.hooks) ? fm2.hooks : void 0 + }; +} +function normalizeArgumentHint(hint) { + if (!hint) return hint; + if (hint.includes("[") || hint.includes("<")) return hint; + return `[${hint}]`; +} +function yamlString(value) { + if (value.includes(":") || value.includes("#") || value.includes("\n") || value.startsWith(" ") || value.endsWith(" ") || value.startsWith("[") || value.startsWith("{")) { + return `"${value.replace(/"/g, '\\"')}"`; + } + return value; +} +function serializeCommand(cmd) { + const parsed = parseSlashCommandContent(cmd.content); + return serializeSlashCommandMarkdown(cmd, parsed.promptContent); +} +function serializeSlashCommandMarkdown(cmd, body) { + const lines = ["---"]; + if (cmd.name) { + lines.push(`name: ${cmd.name}`); + } + if (cmd.description) { + lines.push(`description: ${yamlString(cmd.description)}`); + } + if (cmd.argumentHint) { + lines.push(`argument-hint: ${yamlString(cmd.argumentHint)}`); + } + if (cmd.allowedTools && cmd.allowedTools.length > 0) { + lines.push("allowed-tools:"); + for (const tool of cmd.allowedTools) { + lines.push(` - ${yamlString(tool)}`); + } + } + if (cmd.model) { + lines.push(`model: ${cmd.model}`); + } + if (cmd.disableModelInvocation !== void 0) { + lines.push(`disable-model-invocation: ${cmd.disableModelInvocation}`); + } + if (cmd.userInvocable !== void 0) { + lines.push(`user-invocable: ${cmd.userInvocable}`); + } + if (cmd.context) { + lines.push(`context: ${cmd.context}`); + } + if (cmd.agent) { + lines.push(`agent: ${cmd.agent}`); + } + if (cmd.hooks !== void 0) { + lines.push(`hooks: ${JSON.stringify(cmd.hooks)}`); + } + if (lines.length === 1) { + lines.push(""); + } + lines.push("---"); + lines.push(body); + return lines.join("\n"); +} + +// src/providers/claude/commands/ClaudeCommandCatalog.ts +function slashCommandToEntry(cmd) { + var _a5; + const skill = isSkill(cmd); + return { + id: cmd.id, + providerId: "claude", + kind: skill ? "skill" : "command", + name: cmd.name, + description: cmd.description, + content: cmd.content, + argumentHint: cmd.argumentHint, + allowedTools: cmd.allowedTools, + model: cmd.model, + disableModelInvocation: cmd.disableModelInvocation, + userInvocable: cmd.userInvocable, + context: cmd.context, + agent: cmd.agent, + hooks: cmd.hooks, + scope: cmd.source === "sdk" ? "runtime" : "vault", + source: (_a5 = cmd.source) != null ? _a5 : "user", + isEditable: cmd.source !== "sdk", + isDeletable: cmd.source !== "sdk", + displayPrefix: "/", + insertPrefix: "/" + }; +} +function entryToSlashCommand(entry) { + return { + id: entry.id, + name: entry.name, + description: entry.description, + content: entry.content, + argumentHint: entry.argumentHint, + allowedTools: entry.allowedTools, + model: entry.model, + disableModelInvocation: entry.disableModelInvocation, + userInvocable: entry.userInvocable, + context: entry.context, + agent: entry.agent, + hooks: entry.hooks, + source: entry.source, + kind: entry.kind + }; +} +var BUILTIN_HIDDEN_COMMANDS = /* @__PURE__ */ new Set([ + "context", + "cost", + "debug", + "extra-usage", + "heapdump", + "init", + "insights", + "loop", + "schedule", + "security-review", + "simplify", + "update-config" +]); +var ClaudeCommandCatalog = class { + constructor(commandStorage, skillStorage, probe) { + this.commandStorage = commandStorage; + this.skillStorage = skillStorage; + this.probe = probe; + this.sdkCommands = []; + this.probePromise = null; + } + setRuntimeCommands(commands) { + this.sdkCommands = commands; + } + async listDropdownEntries(context) { + void context; + if (this.sdkCommands.length === 0 && this.probe) { + await this.ensureProbed(); + } + const runtimeEntries = this.sdkCommands.filter((cmd) => !BUILTIN_HIDDEN_COMMANDS.has(cmd.name.toLowerCase())).map(slashCommandToEntry); + if (runtimeEntries.length > 0) { + return runtimeEntries; + } + return this.listVaultEntries(); + } + /** Probe the SDK for commands. Deduplicates concurrent calls. */ + async ensureProbed() { + if (!this.probe) return; + if (!this.probePromise) { + this.probePromise = this.probe().then((commands) => { + if (this.sdkCommands.length === 0 && commands.length > 0) { + this.sdkCommands = commands; + } + }).catch(() => { + }).finally(() => { + this.probePromise = null; + }); + } + await this.probePromise; + } + async listVaultEntries() { + const commands = await this.commandStorage.loadAll(); + const skills = await this.skillStorage.loadAll(); + return [...commands, ...skills].map(slashCommandToEntry); + } + async saveVaultEntry(entry) { + const cmd = entryToSlashCommand(entry); + if (entry.kind === "skill") { + await this.skillStorage.save(cmd); + } else { + await this.commandStorage.save(cmd); + } + } + async deleteVaultEntry(entry) { + if (entry.kind === "skill") { + await this.skillStorage.delete(entry.id); + } else { + await this.commandStorage.delete(entry.id); + } + } + getDropdownConfig() { + return { + providerId: "claude", + triggerChars: ["/"], + builtInPrefix: "/", + skillPrefix: "/", + commandPrefix: "/" + }; + } + async refresh() { + } +}; + +// node_modules/@anthropic-ai/claude-agent-sdk/sdk.mjs +var import_node_module = require("node:module"); +var import_child_process = require("child_process"); +var import_crypto = require("crypto"); +var import_fs = require("fs"); +var import_promises = require("fs/promises"); +var import_module = require("module"); +var import_os = require("os"); +var import_path = require("path"); +var import_readline = require("readline"); +var import_url = require("url"); +var import_events = require("events"); +var import_child_process2 = require("child_process"); +var import_fs2 = require("fs"); +var import_readline2 = require("readline"); +var import_os2 = require("os"); +var import_path2 = require("path"); +var import_crypto2 = require("crypto"); +var import_path3 = require("path"); +var import_async_hooks = require("async_hooks"); +var import_promises2 = require("fs/promises"); +var import_crypto3 = require("crypto"); +var import_promises3 = require("fs/promises"); +var import_fs3 = require("fs"); +var import_process = require("process"); +var import_crypto4 = require("crypto"); +var import_promises4 = require("fs/promises"); +var import_path4 = require("path"); +var s = __toESM(require("fs"), 1); +var import_promises5 = require("fs/promises"); +var import_fs4 = require("fs"); +var import_path5 = require("path"); +var import_fs5 = require("fs"); +var import_promises6 = require("fs/promises"); +var import_events2 = require("events"); +var import_fs6 = require("fs"); +var import_promises7 = require("fs/promises"); +var import_path6 = require("path"); +var import_child_process3 = require("child_process"); +var import_util = require("util"); +var import_child_process4 = require("child_process"); +var import_path7 = require("path"); +var import_promises8 = require("fs/promises"); +var import_path8 = require("path"); +var import_fs7 = require("fs"); +var import_promises9 = require("fs/promises"); +var import_path9 = require("path"); +var import_crypto5 = require("crypto"); +var import_path10 = require("path"); +var import_promises10 = require("fs/promises"); +var import_path11 = require("path"); +var import_crypto6 = require("crypto"); +var import_os3 = require("os"); +var import_path12 = require("path"); +var import_path13 = require("path"); +var import_path14 = require("path"); +var import_node_path = __toESM(require("node:path"), 1); +var import_node_os = __toESM(require("node:os"), 1); +var import_node_process = __toESM(require("node:process"), 1); +var import_path15 = require("path"); +var import_promises11 = require("fs/promises"); +var import_os4 = require("os"); +var import_path16 = require("path"); +var import_os5 = require("os"); +var import_child_process5 = require("child_process"); +var import_fs8 = require("fs"); +var import_path17 = require("path"); +var import_path18 = require("path"); +var n_ = Object.create; +var { getPrototypeOf: r_, defineProperty: OG, getOwnPropertyNames: o_ } = Object; +var t_ = Object.prototype.hasOwnProperty; +function a_($) { + return this[$]; +} +var s_; +var e_; +var DG = ($, Q, J) => { + var Y = $ != null && typeof $ === "object"; + if (Y) { + var X = Q ? s_ != null ? s_ : s_ = /* @__PURE__ */ new WeakMap() : e_ != null ? e_ : e_ = /* @__PURE__ */ new WeakMap(), W = X.get($); + if (W) return W; + } + J = $ != null ? n_(r_($)) : {}; + let G = Q || !$ || !$.__esModule ? OG(J, "default", { value: $, enumerable: true }) : J; + for (let U of o_($)) if (!t_.call(G, U)) OG(G, U, { get: a_.bind($, U), enumerable: true }); + if (Y) X.set($, G); + return G; +}; +var I = ($, Q) => () => (Q || $((Q = { exports: {} }).exports, Q), Q.exports); +var $k = ($) => $; +function Qk($, Q) { + this[$] = $k.bind(null, Q); +} +var M4 = ($, Q) => { + for (var J in Q) OG($, J, { get: Q[J], enumerable: true, configurable: true, set: Qk.bind(Q, J) }); +}; +var v6 = (0, import_node_module.createRequire)(__filename); +var Xk = Symbol.dispose || /* @__PURE__ */ Symbol.for("Symbol.dispose"); +var Yk = Symbol.asyncDispose || /* @__PURE__ */ Symbol.for("Symbol.asyncDispose"); +var Z$ = ($, Q, J) => { + if (Q != null) { + if (typeof Q !== "object" && typeof Q !== "function") throw TypeError('Object expected to be assigned to "using" declaration'); + var Y; + if (J) Y = Q[Yk]; + if (Y === void 0) Y = Q[Xk]; + if (typeof Y !== "function") throw TypeError("Object not disposable"); + $.push([J, Y, Q]); + } else if (J) $.push([J]); + return Q; +}; +var M$ = ($, Q, J) => { + var Y = typeof SuppressedError === "function" ? SuppressedError : function(G, U, H, q) { + return q = Error(H), q.name = "SuppressedError", q.error = G, q.suppressed = U, q; + }, X = (G) => Q = J ? new Y(G, Q, "An error was suppressed during disposal") : (J = true, G), W = (G) => { + while (G = $.pop()) try { + var U = G[1] && G[1].call(G[2]); + if (G[0]) return Promise.resolve(U).then(W, (H) => (X(H), W())); + } catch (H) { + X(H); + } + if (J) throw Q; + }; + return W(); +}; +var j2 = I((M2) => { + Object.defineProperty(M2, "__esModule", { value: true }); + M2._globalThis = void 0; + M2._globalThis = typeof globalThis === "object" ? globalThis : global; +}); +var A2 = I((B0) => { + var px = B0 && B0.__createBinding || (Object.create ? function($, Q, J, Y) { + if (Y === void 0) Y = J; + Object.defineProperty($, Y, { enumerable: true, get: function() { + return Q[J]; + } }); + } : function($, Q, J, Y) { + if (Y === void 0) Y = J; + $[Y] = Q[J]; + }), dx = B0 && B0.__exportStar || function($, Q) { + for (var J in $) if (J !== "default" && !Object.prototype.hasOwnProperty.call(Q, J)) px(Q, $, J); + }; + Object.defineProperty(B0, "__esModule", { value: true }); + dx(j2(), B0); +}); +var I2 = I((z0) => { + var ix = z0 && z0.__createBinding || (Object.create ? function($, Q, J, Y) { + if (Y === void 0) Y = J; + Object.defineProperty($, Y, { enumerable: true, get: function() { + return Q[J]; + } }); + } : function($, Q, J, Y) { + if (Y === void 0) Y = J; + $[Y] = Q[J]; + }), nx = z0 && z0.__exportStar || function($, Q) { + for (var J in $) if (J !== "default" && !Object.prototype.hasOwnProperty.call(Q, J)) ix(Q, $, J); + }; + Object.defineProperty(z0, "__esModule", { value: true }); + nx(A2(), z0); +}); +var bU = I((R2) => { + Object.defineProperty(R2, "__esModule", { value: true }); + R2.VERSION = void 0; + R2.VERSION = "1.9.0"; +}); +var S2 = I((_2) => { + Object.defineProperty(_2, "__esModule", { value: true }); + _2.isCompatible = _2._makeCompatibilityCheck = void 0; + var rx = bU(), E2 = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/; + function b2($) { + let Q = /* @__PURE__ */ new Set([$]), J = /* @__PURE__ */ new Set(), Y = $.match(E2); + if (!Y) return () => false; + let X = { major: +Y[1], minor: +Y[2], patch: +Y[3], prerelease: Y[4] }; + if (X.prerelease != null) return function(H) { + return H === $; + }; + function W(U) { + return J.add(U), false; + } + function G(U) { + return Q.add(U), true; + } + return function(H) { + if (Q.has(H)) return true; + if (J.has(H)) return false; + let q = H.match(E2); + if (!q) return W(H); + let V = { major: +q[1], minor: +q[2], patch: +q[3], prerelease: q[4] }; + if (V.prerelease != null) return W(H); + if (X.major !== V.major) return W(H); + if (X.major === 0) { + if (X.minor === V.minor && X.patch <= V.patch) return G(H); + return W(H); + } + if (X.minor <= V.minor) return G(H); + return W(H); + }; + } + _2._makeCompatibilityCheck = b2; + _2.isCompatible = b2(rx.VERSION); +}); +var N0 = I((v2) => { + Object.defineProperty(v2, "__esModule", { value: true }); + v2.unregisterGlobal = v2.getGlobal = v2.registerGlobal = void 0; + var tx = I2(), R8 = bU(), ax = S2(), sx = R8.VERSION.split(".")[0], uQ = /* @__PURE__ */ Symbol.for(`opentelemetry.js.api.${sx}`), mQ = tx._globalThis; + function ex($, Q, J, Y = false) { + var X; + let W = mQ[uQ] = (X = mQ[uQ]) !== null && X !== void 0 ? X : { version: R8.VERSION }; + if (!Y && W[$]) { + let G = Error(`@opentelemetry/api: Attempted duplicate registration of API: ${$}`); + return J.error(G.stack || G.message), false; + } + if (W.version !== R8.VERSION) { + let G = Error(`@opentelemetry/api: Registration of version v${W.version} for ${$} does not match previously registered API v${R8.VERSION}`); + return J.error(G.stack || G.message), false; + } + return W[$] = Q, J.debug(`@opentelemetry/api: Registered a global for ${$} v${R8.VERSION}.`), true; + } + v2.registerGlobal = ex; + function $y($) { + var Q, J; + let Y = (Q = mQ[uQ]) === null || Q === void 0 ? void 0 : Q.version; + if (!Y || !(0, ax.isCompatible)(Y)) return; + return (J = mQ[uQ]) === null || J === void 0 ? void 0 : J[$]; + } + v2.getGlobal = $y; + function Qy($, Q) { + Q.debug(`@opentelemetry/api: Unregistering a global for ${$} v${R8.VERSION}.`); + let J = mQ[uQ]; + if (J) delete J[$]; + } + v2.unregisterGlobal = Qy; +}); +var f2 = I((x2) => { + Object.defineProperty(x2, "__esModule", { value: true }); + x2.DiagComponentLogger = void 0; + var Yy = N0(); + class T2 { + constructor($) { + this._namespace = $.namespace || "DiagComponentLogger"; + } + debug(...$) { + return lQ("debug", this._namespace, $); + } + error(...$) { + return lQ("error", this._namespace, $); + } + info(...$) { + return lQ("info", this._namespace, $); + } + warn(...$) { + return lQ("warn", this._namespace, $); + } + verbose(...$) { + return lQ("verbose", this._namespace, $); + } + } + x2.DiagComponentLogger = T2; + function lQ($, Q, J) { + let Y = (0, Yy.getGlobal)("diag"); + if (!Y) return; + return J.unshift(Q), Y[$](...J); + } +}); +var wX = I((g2) => { + Object.defineProperty(g2, "__esModule", { value: true }); + g2.DiagLogLevel = void 0; + var Wy; + (function($) { + $[$.NONE = 0] = "NONE", $[$.ERROR = 30] = "ERROR", $[$.WARN = 50] = "WARN", $[$.INFO = 60] = "INFO", $[$.DEBUG = 70] = "DEBUG", $[$.VERBOSE = 80] = "VERBOSE", $[$.ALL = 9999] = "ALL"; + })(Wy = g2.DiagLogLevel || (g2.DiagLogLevel = {})); +}); +var m2 = I((h2) => { + Object.defineProperty(h2, "__esModule", { value: true }); + h2.createLogLevelDiagLogger = void 0; + var u4 = wX(); + function Gy($, Q) { + if ($ < u4.DiagLogLevel.NONE) $ = u4.DiagLogLevel.NONE; + else if ($ > u4.DiagLogLevel.ALL) $ = u4.DiagLogLevel.ALL; + Q = Q || {}; + function J(Y, X) { + let W = Q[Y]; + if (typeof W === "function" && $ >= X) return W.bind(Q); + return function() { + }; + } + return { error: J("error", u4.DiagLogLevel.ERROR), warn: J("warn", u4.DiagLogLevel.WARN), info: J("info", u4.DiagLogLevel.INFO), debug: J("debug", u4.DiagLogLevel.DEBUG), verbose: J("verbose", u4.DiagLogLevel.VERBOSE) }; + } + h2.createLogLevelDiagLogger = Gy; +}); +var w0 = I((c2) => { + Object.defineProperty(c2, "__esModule", { value: true }); + c2.DiagAPI = void 0; + var Uy = f2(), Hy = m2(), l2 = wX(), OX = N0(), Ky = "diag"; + class kU { + constructor() { + function $(Y) { + return function(...X) { + let W = (0, OX.getGlobal)("diag"); + if (!W) return; + return W[Y](...X); + }; + } + let Q = this, J = (Y, X = { logLevel: l2.DiagLogLevel.INFO }) => { + var W, G, U; + if (Y === Q) { + let V = Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation"); + return Q.error((W = V.stack) !== null && W !== void 0 ? W : V.message), false; + } + if (typeof X === "number") X = { logLevel: X }; + let H = (0, OX.getGlobal)("diag"), q = (0, Hy.createLogLevelDiagLogger)((G = X.logLevel) !== null && G !== void 0 ? G : l2.DiagLogLevel.INFO, Y); + if (H && !X.suppressOverrideMessage) { + let V = (U = Error().stack) !== null && U !== void 0 ? U : ""; + H.warn(`Current logger will be overwritten from ${V}`), q.warn(`Current logger will overwrite one already registered from ${V}`); + } + return (0, OX.registerGlobal)("diag", q, Q, true); + }; + Q.setLogger = J, Q.disable = () => { + (0, OX.unregisterGlobal)(Ky, Q); + }, Q.createComponentLogger = (Y) => { + return new Uy.DiagComponentLogger(Y); + }, Q.verbose = $("verbose"), Q.debug = $("debug"), Q.info = $("info"), Q.warn = $("warn"), Q.error = $("error"); + } + static instance() { + if (!this._instance) this._instance = new kU(); + return this._instance; + } + } + c2.DiagAPI = kU; +}); +var n2 = I((d2) => { + Object.defineProperty(d2, "__esModule", { value: true }); + d2.BaggageImpl = void 0; + class P8 { + constructor($) { + this._entries = $ ? new Map($) : /* @__PURE__ */ new Map(); + } + getEntry($) { + let Q = this._entries.get($); + if (!Q) return; + return Object.assign({}, Q); + } + getAllEntries() { + return Array.from(this._entries.entries()).map(([$, Q]) => [$, Q]); + } + setEntry($, Q) { + let J = new P8(this._entries); + return J._entries.set($, Q), J; + } + removeEntry($) { + let Q = new P8(this._entries); + return Q._entries.delete($), Q; + } + removeEntries(...$) { + let Q = new P8(this._entries); + for (let J of $) Q._entries.delete(J); + return Q; + } + clear() { + return new P8(); + } + } + d2.BaggageImpl = P8; +}); +var t2 = I((r2) => { + Object.defineProperty(r2, "__esModule", { value: true }); + r2.baggageEntryMetadataSymbol = void 0; + r2.baggageEntryMetadataSymbol = /* @__PURE__ */ Symbol("BaggageEntryMetadata"); +}); +var SU = I((a2) => { + Object.defineProperty(a2, "__esModule", { value: true }); + a2.baggageEntryMetadataFromString = a2.createBaggage = void 0; + var qy = w0(), Vy = n2(), By = t2(), zy = qy.DiagAPI.instance(); + function Ny($ = {}) { + return new Vy.BaggageImpl(new Map(Object.entries($))); + } + a2.createBaggage = Ny; + function wy($) { + if (typeof $ !== "string") zy.error(`Cannot create baggage metadata from unknown type: ${typeof $}`), $ = ""; + return { __TYPE__: By.baggageEntryMetadataSymbol, toString() { + return $; + } }; + } + a2.baggageEntryMetadataFromString = wy; +}); +var cQ = I((e2) => { + Object.defineProperty(e2, "__esModule", { value: true }); + e2.ROOT_CONTEXT = e2.createContextKey = void 0; + function Dy($) { + return Symbol.for($); + } + e2.createContextKey = Dy; + class DX { + constructor($) { + let Q = this; + Q._currentContext = $ ? new Map($) : /* @__PURE__ */ new Map(), Q.getValue = (J) => Q._currentContext.get(J), Q.setValue = (J, Y) => { + let X = new DX(Q._currentContext); + return X._currentContext.set(J, Y), X; + }, Q.deleteValue = (J) => { + let Y = new DX(Q._currentContext); + return Y._currentContext.delete(J), Y; + }; + } + } + e2.ROOT_CONTEXT = new DX(); +}); +var YD = I((JD) => { + Object.defineProperty(JD, "__esModule", { value: true }); + JD.DiagConsoleLogger = void 0; + var vU = [{ n: "error", c: "error" }, { n: "warn", c: "warn" }, { n: "info", c: "info" }, { n: "debug", c: "debug" }, { n: "verbose", c: "trace" }]; + class QD { + constructor() { + function $(Q) { + return function(...J) { + if (console) { + let Y = console[Q]; + if (typeof Y !== "function") Y = console.log; + if (typeof Y === "function") return Y.apply(console, J); + } + }; + } + for (let Q = 0; Q < vU.length; Q++) this[vU[Q].n] = $(vU[Q].c); + } + } + JD.DiagConsoleLogger = QD; +}); +var mU = I((WD) => { + Object.defineProperty(WD, "__esModule", { value: true }); + WD.createNoopMeter = WD.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = WD.NOOP_OBSERVABLE_GAUGE_METRIC = WD.NOOP_OBSERVABLE_COUNTER_METRIC = WD.NOOP_UP_DOWN_COUNTER_METRIC = WD.NOOP_HISTOGRAM_METRIC = WD.NOOP_GAUGE_METRIC = WD.NOOP_COUNTER_METRIC = WD.NOOP_METER = WD.NoopObservableUpDownCounterMetric = WD.NoopObservableGaugeMetric = WD.NoopObservableCounterMetric = WD.NoopObservableMetric = WD.NoopHistogramMetric = WD.NoopGaugeMetric = WD.NoopUpDownCounterMetric = WD.NoopCounterMetric = WD.NoopMetric = WD.NoopMeter = void 0; + class CU { + constructor() { + } + createGauge($, Q) { + return WD.NOOP_GAUGE_METRIC; + } + createHistogram($, Q) { + return WD.NOOP_HISTOGRAM_METRIC; + } + createCounter($, Q) { + return WD.NOOP_COUNTER_METRIC; + } + createUpDownCounter($, Q) { + return WD.NOOP_UP_DOWN_COUNTER_METRIC; + } + createObservableGauge($, Q) { + return WD.NOOP_OBSERVABLE_GAUGE_METRIC; + } + createObservableCounter($, Q) { + return WD.NOOP_OBSERVABLE_COUNTER_METRIC; + } + createObservableUpDownCounter($, Q) { + return WD.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC; + } + addBatchObservableCallback($, Q) { + } + removeBatchObservableCallback($) { + } + } + WD.NoopMeter = CU; + class E8 { + } + WD.NoopMetric = E8; + class TU extends E8 { + add($, Q) { + } + } + WD.NoopCounterMetric = TU; + class xU extends E8 { + add($, Q) { + } + } + WD.NoopUpDownCounterMetric = xU; + class yU extends E8 { + record($, Q) { + } + } + WD.NoopGaugeMetric = yU; + class fU extends E8 { + record($, Q) { + } + } + WD.NoopHistogramMetric = fU; + class pQ { + addCallback($) { + } + removeCallback($) { + } + } + WD.NoopObservableMetric = pQ; + class gU extends pQ { + } + WD.NoopObservableCounterMetric = gU; + class hU extends pQ { + } + WD.NoopObservableGaugeMetric = hU; + class uU extends pQ { + } + WD.NoopObservableUpDownCounterMetric = uU; + WD.NOOP_METER = new CU(); + WD.NOOP_COUNTER_METRIC = new TU(); + WD.NOOP_GAUGE_METRIC = new yU(); + WD.NOOP_HISTOGRAM_METRIC = new fU(); + WD.NOOP_UP_DOWN_COUNTER_METRIC = new xU(); + WD.NOOP_OBSERVABLE_COUNTER_METRIC = new gU(); + WD.NOOP_OBSERVABLE_GAUGE_METRIC = new hU(); + WD.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new uU(); + function Zy() { + return WD.NOOP_METER; + } + WD.createNoopMeter = Zy; +}); +var OD = I((wD) => { + Object.defineProperty(wD, "__esModule", { value: true }); + wD.ValueType = void 0; + var ky; + (function($) { + $[$.INT = 0] = "INT", $[$.DOUBLE = 1] = "DOUBLE"; + })(ky = wD.ValueType || (wD.ValueType = {})); +}); +var cU = I((DD) => { + Object.defineProperty(DD, "__esModule", { value: true }); + DD.defaultTextMapSetter = DD.defaultTextMapGetter = void 0; + DD.defaultTextMapGetter = { get($, Q) { + if ($ == null) return; + return $[Q]; + }, keys($) { + if ($ == null) return []; + return Object.keys($); + } }; + DD.defaultTextMapSetter = { set($, Q, J) { + if ($ == null) return; + $[Q] = J; + } }; +}); +var jD = I((MD) => { + Object.defineProperty(MD, "__esModule", { value: true }); + MD.NoopContextManager = void 0; + var vy = cQ(); + class ZD { + active() { + return vy.ROOT_CONTEXT; + } + with($, Q, J, ...Y) { + return Q.call(J, ...Y); + } + bind($, Q) { + return Q; + } + enable() { + return this; + } + disable() { + return this; + } + } + MD.NoopContextManager = ZD; +}); +var dQ = I((ID) => { + Object.defineProperty(ID, "__esModule", { value: true }); + ID.ContextAPI = void 0; + var Cy = jD(), pU = N0(), AD = w0(), dU = "context", Ty = new Cy.NoopContextManager(); + class iU { + constructor() { + } + static getInstance() { + if (!this._instance) this._instance = new iU(); + return this._instance; + } + setGlobalContextManager($) { + return (0, pU.registerGlobal)(dU, $, AD.DiagAPI.instance()); + } + active() { + return this._getContextManager().active(); + } + with($, Q, J, ...Y) { + return this._getContextManager().with($, Q, J, ...Y); + } + bind($, Q) { + return this._getContextManager().bind($, Q); + } + _getContextManager() { + return (0, pU.getGlobal)(dU) || Ty; + } + disable() { + this._getContextManager().disable(), (0, pU.unregisterGlobal)(dU, AD.DiagAPI.instance()); + } + } + ID.ContextAPI = iU; +}); +var rU = I((PD) => { + Object.defineProperty(PD, "__esModule", { value: true }); + PD.TraceFlags = void 0; + var xy; + (function($) { + $[$.NONE = 0] = "NONE", $[$.SAMPLED = 1] = "SAMPLED"; + })(xy = PD.TraceFlags || (PD.TraceFlags = {})); +}); +var FX = I((ED) => { + Object.defineProperty(ED, "__esModule", { value: true }); + ED.INVALID_SPAN_CONTEXT = ED.INVALID_TRACEID = ED.INVALID_SPANID = void 0; + var yy = rU(); + ED.INVALID_SPANID = "0000000000000000"; + ED.INVALID_TRACEID = "00000000000000000000000000000000"; + ED.INVALID_SPAN_CONTEXT = { traceId: ED.INVALID_TRACEID, spanId: ED.INVALID_SPANID, traceFlags: yy.TraceFlags.NONE }; +}); +var ZX = I((vD) => { + Object.defineProperty(vD, "__esModule", { value: true }); + vD.NonRecordingSpan = void 0; + var fy = FX(); + class SD { + constructor($ = fy.INVALID_SPAN_CONTEXT) { + this._spanContext = $; + } + spanContext() { + return this._spanContext; + } + setAttribute($, Q) { + return this; + } + setAttributes($) { + return this; + } + addEvent($, Q) { + return this; + } + addLink($) { + return this; + } + addLinks($) { + return this; + } + setStatus($) { + return this; + } + updateName($) { + return this; + } + end($) { + } + isRecording() { + return false; + } + recordException($, Q) { + } + } + vD.NonRecordingSpan = SD; +}); +var aU = I((xD) => { + Object.defineProperty(xD, "__esModule", { value: true }); + xD.getSpanContext = xD.setSpanContext = xD.deleteSpan = xD.setSpan = xD.getActiveSpan = xD.getSpan = void 0; + var gy = cQ(), hy = ZX(), uy = dQ(), oU = (0, gy.createContextKey)("OpenTelemetry Context Key SPAN"); + function tU($) { + return $.getValue(oU) || void 0; + } + xD.getSpan = tU; + function my() { + return tU(uy.ContextAPI.getInstance().active()); + } + xD.getActiveSpan = my; + function TD($, Q) { + return $.setValue(oU, Q); + } + xD.setSpan = TD; + function ly($) { + return $.deleteValue(oU); + } + xD.deleteSpan = ly; + function cy($, Q) { + return TD($, new hy.NonRecordingSpan(Q)); + } + xD.setSpanContext = cy; + function py($) { + var Q; + return (Q = tU($)) === null || Q === void 0 ? void 0 : Q.spanContext(); + } + xD.getSpanContext = py; +}); +var MX = I((uD) => { + Object.defineProperty(uD, "__esModule", { value: true }); + uD.wrapSpanContext = uD.isSpanContextValid = uD.isValidSpanId = uD.isValidTraceId = void 0; + var fD = FX(), ty = ZX(), ay = /^([0-9a-f]{32})$/i, sy = /^[0-9a-f]{16}$/i; + function gD($) { + return ay.test($) && $ !== fD.INVALID_TRACEID; + } + uD.isValidTraceId = gD; + function hD($) { + return sy.test($) && $ !== fD.INVALID_SPANID; + } + uD.isValidSpanId = hD; + function ey($) { + return gD($.traceId) && hD($.spanId); + } + uD.isSpanContextValid = ey; + function $f($) { + return new ty.NonRecordingSpan($); + } + uD.wrapSpanContext = $f; +}); +var $H = I((pD) => { + Object.defineProperty(pD, "__esModule", { value: true }); + pD.NoopTracer = void 0; + var Yf = dQ(), lD = aU(), sU = ZX(), Wf = MX(), eU = Yf.ContextAPI.getInstance(); + class cD { + startSpan($, Q, J = eU.active()) { + if (Boolean(Q === null || Q === void 0 ? void 0 : Q.root)) return new sU.NonRecordingSpan(); + let X = J && (0, lD.getSpanContext)(J); + if (Gf(X) && (0, Wf.isSpanContextValid)(X)) return new sU.NonRecordingSpan(X); + else return new sU.NonRecordingSpan(); + } + startActiveSpan($, Q, J, Y) { + let X, W, G; + if (arguments.length < 2) return; + else if (arguments.length === 2) G = Q; + else if (arguments.length === 3) X = Q, G = J; + else X = Q, W = J, G = Y; + let U = W !== null && W !== void 0 ? W : eU.active(), H = this.startSpan($, X, U), q = (0, lD.setSpan)(U, H); + return eU.with(q, G, void 0, H); + } + } + pD.NoopTracer = cD; + function Gf($) { + return typeof $ === "object" && typeof $.spanId === "string" && typeof $.traceId === "string" && typeof $.traceFlags === "number"; + } +}); +var QH = I((nD) => { + Object.defineProperty(nD, "__esModule", { value: true }); + nD.ProxyTracer = void 0; + var Uf = $H(), Hf = new Uf.NoopTracer(); + class iD { + constructor($, Q, J, Y) { + this._provider = $, this.name = Q, this.version = J, this.options = Y; + } + startSpan($, Q, J) { + return this._getTracer().startSpan($, Q, J); + } + startActiveSpan($, Q, J, Y) { + let X = this._getTracer(); + return Reflect.apply(X.startActiveSpan, X, arguments); + } + _getTracer() { + if (this._delegate) return this._delegate; + let $ = this._provider.getDelegateTracer(this.name, this.version, this.options); + if (!$) return Hf; + return this._delegate = $, this._delegate; + } + } + nD.ProxyTracer = iD; +}); +var sD = I((tD) => { + Object.defineProperty(tD, "__esModule", { value: true }); + tD.NoopTracerProvider = void 0; + var Kf = $H(); + class oD { + getTracer($, Q, J) { + return new Kf.NoopTracer(); + } + } + tD.NoopTracerProvider = oD; +}); +var JH = I(($F) => { + Object.defineProperty($F, "__esModule", { value: true }); + $F.ProxyTracerProvider = void 0; + var qf = QH(), Vf = sD(), Bf = new Vf.NoopTracerProvider(); + class eD { + getTracer($, Q, J) { + var Y; + return (Y = this.getDelegateTracer($, Q, J)) !== null && Y !== void 0 ? Y : new qf.ProxyTracer(this, $, Q, J); + } + getDelegate() { + var $; + return ($ = this._delegate) !== null && $ !== void 0 ? $ : Bf; + } + setDelegate($) { + this._delegate = $; + } + getDelegateTracer($, Q, J) { + var Y; + return (Y = this._delegate) === null || Y === void 0 ? void 0 : Y.getTracer($, Q, J); + } + } + $F.ProxyTracerProvider = eD; +}); +var XF = I((JF) => { + Object.defineProperty(JF, "__esModule", { value: true }); + JF.SamplingDecision = void 0; + var zf; + (function($) { + $[$.NOT_RECORD = 0] = "NOT_RECORD", $[$.RECORD = 1] = "RECORD", $[$.RECORD_AND_SAMPLED = 2] = "RECORD_AND_SAMPLED"; + })(zf = JF.SamplingDecision || (JF.SamplingDecision = {})); +}); +var WF = I((YF) => { + Object.defineProperty(YF, "__esModule", { value: true }); + YF.SpanKind = void 0; + var Nf; + (function($) { + $[$.INTERNAL = 0] = "INTERNAL", $[$.SERVER = 1] = "SERVER", $[$.CLIENT = 2] = "CLIENT", $[$.PRODUCER = 3] = "PRODUCER", $[$.CONSUMER = 4] = "CONSUMER"; + })(Nf = YF.SpanKind || (YF.SpanKind = {})); +}); +var UF = I((GF) => { + Object.defineProperty(GF, "__esModule", { value: true }); + GF.SpanStatusCode = void 0; + var wf; + (function($) { + $[$.UNSET = 0] = "UNSET", $[$.OK = 1] = "OK", $[$.ERROR = 2] = "ERROR"; + })(wf = GF.SpanStatusCode || (GF.SpanStatusCode = {})); +}); +var qF = I((HF) => { + Object.defineProperty(HF, "__esModule", { value: true }); + HF.validateValue = HF.validateKey = void 0; + var GH = "[_0-9a-z-*/]", Of = `[a-z]${GH}{0,255}`, Df = `[a-z0-9]${GH}{0,240}@[a-z]${GH}{0,13}`, Ff = new RegExp(`^(?:${Of}|${Df})$`), Zf = /^[ -~]{0,255}[!-~]$/, Mf = /,|=/; + function Lf($) { + return Ff.test($); + } + HF.validateKey = Lf; + function jf($) { + return Zf.test($) && !Mf.test($); + } + HF.validateValue = jf; +}); +var DF = I((wF) => { + Object.defineProperty(wF, "__esModule", { value: true }); + wF.TraceStateImpl = void 0; + var VF = qF(), BF = 32, If = 512, zF = ",", NF = "="; + class UH { + constructor($) { + if (this._internalState = /* @__PURE__ */ new Map(), $) this._parse($); + } + set($, Q) { + let J = this._clone(); + if (J._internalState.has($)) J._internalState.delete($); + return J._internalState.set($, Q), J; + } + unset($) { + let Q = this._clone(); + return Q._internalState.delete($), Q; + } + get($) { + return this._internalState.get($); + } + serialize() { + return this._keys().reduce(($, Q) => { + return $.push(Q + NF + this.get(Q)), $; + }, []).join(zF); + } + _parse($) { + if ($.length > If) return; + if (this._internalState = $.split(zF).reverse().reduce((Q, J) => { + let Y = J.trim(), X = Y.indexOf(NF); + if (X !== -1) { + let W = Y.slice(0, X), G = Y.slice(X + 1, J.length); + if ((0, VF.validateKey)(W) && (0, VF.validateValue)(G)) Q.set(W, G); + } + return Q; + }, /* @__PURE__ */ new Map()), this._internalState.size > BF) this._internalState = new Map(Array.from(this._internalState.entries()).reverse().slice(0, BF)); + } + _keys() { + return Array.from(this._internalState.keys()).reverse(); + } + _clone() { + let $ = new UH(); + return $._internalState = new Map(this._internalState), $; + } + } + wF.TraceStateImpl = UH; +}); +var MF = I((FF) => { + Object.defineProperty(FF, "__esModule", { value: true }); + FF.createTraceState = void 0; + var Rf = DF(); + function Pf($) { + return new Rf.TraceStateImpl($); + } + FF.createTraceState = Pf; +}); +var AF = I((LF) => { + Object.defineProperty(LF, "__esModule", { value: true }); + LF.context = void 0; + var Ef = dQ(); + LF.context = Ef.ContextAPI.getInstance(); +}); +var PF = I((IF) => { + Object.defineProperty(IF, "__esModule", { value: true }); + IF.diag = void 0; + var bf = w0(); + IF.diag = bf.DiagAPI.instance(); +}); +var _F = I((EF) => { + Object.defineProperty(EF, "__esModule", { value: true }); + EF.NOOP_METER_PROVIDER = EF.NoopMeterProvider = void 0; + var _f2 = mU(); + class HH { + getMeter($, Q, J) { + return _f2.NOOP_METER; + } + } + EF.NoopMeterProvider = HH; + EF.NOOP_METER_PROVIDER = new HH(); +}); +var CF = I((SF) => { + Object.defineProperty(SF, "__esModule", { value: true }); + SF.MetricsAPI = void 0; + var Sf = _F(), KH = N0(), kF = w0(), qH = "metrics"; + class VH { + constructor() { + } + static getInstance() { + if (!this._instance) this._instance = new VH(); + return this._instance; + } + setGlobalMeterProvider($) { + return (0, KH.registerGlobal)(qH, $, kF.DiagAPI.instance()); + } + getMeterProvider() { + return (0, KH.getGlobal)(qH) || Sf.NOOP_METER_PROVIDER; + } + getMeter($, Q, J) { + return this.getMeterProvider().getMeter($, Q, J); + } + disable() { + (0, KH.unregisterGlobal)(qH, kF.DiagAPI.instance()); + } + } + SF.MetricsAPI = VH; +}); +var yF = I((TF) => { + Object.defineProperty(TF, "__esModule", { value: true }); + TF.metrics = void 0; + var vf = CF(); + TF.metrics = vf.MetricsAPI.getInstance(); +}); +var uF = I((gF) => { + Object.defineProperty(gF, "__esModule", { value: true }); + gF.NoopTextMapPropagator = void 0; + class fF { + inject($, Q) { + } + extract($, Q) { + return $; + } + fields() { + return []; + } + } + gF.NoopTextMapPropagator = fF; +}); +var pF = I((lF) => { + Object.defineProperty(lF, "__esModule", { value: true }); + lF.deleteBaggage = lF.setBaggage = lF.getActiveBaggage = lF.getBaggage = void 0; + var Cf = dQ(), Tf = cQ(), BH = (0, Tf.createContextKey)("OpenTelemetry Baggage Key"); + function mF($) { + return $.getValue(BH) || void 0; + } + lF.getBaggage = mF; + function xf() { + return mF(Cf.ContextAPI.getInstance().active()); + } + lF.getActiveBaggage = xf; + function yf($, Q) { + return $.setValue(BH, Q); + } + lF.setBaggage = yf; + function ff($) { + return $.deleteValue(BH); + } + lF.deleteBaggage = ff; +}); +var oF = I((nF) => { + Object.defineProperty(nF, "__esModule", { value: true }); + nF.PropagationAPI = void 0; + var zH = N0(), mf = uF(), dF = cU(), LX = pF(), lf = SU(), iF = w0(), NH = "propagation", cf = new mf.NoopTextMapPropagator(); + class wH { + constructor() { + this.createBaggage = lf.createBaggage, this.getBaggage = LX.getBaggage, this.getActiveBaggage = LX.getActiveBaggage, this.setBaggage = LX.setBaggage, this.deleteBaggage = LX.deleteBaggage; + } + static getInstance() { + if (!this._instance) this._instance = new wH(); + return this._instance; + } + setGlobalPropagator($) { + return (0, zH.registerGlobal)(NH, $, iF.DiagAPI.instance()); + } + inject($, Q, J = dF.defaultTextMapSetter) { + return this._getGlobalPropagator().inject($, Q, J); + } + extract($, Q, J = dF.defaultTextMapGetter) { + return this._getGlobalPropagator().extract($, Q, J); + } + fields() { + return this._getGlobalPropagator().fields(); + } + disable() { + (0, zH.unregisterGlobal)(NH, iF.DiagAPI.instance()); + } + _getGlobalPropagator() { + return (0, zH.getGlobal)(NH) || cf; + } + } + nF.PropagationAPI = wH; +}); +var sF = I((tF) => { + Object.defineProperty(tF, "__esModule", { value: true }); + tF.propagation = void 0; + var pf = oF(); + tF.propagation = pf.PropagationAPI.getInstance(); +}); +var YZ = I((JZ) => { + Object.defineProperty(JZ, "__esModule", { value: true }); + JZ.TraceAPI = void 0; + var OH = N0(), eF = JH(), $Z = MX(), b8 = aU(), QZ = w0(), DH = "trace"; + class FH { + constructor() { + this._proxyTracerProvider = new eF.ProxyTracerProvider(), this.wrapSpanContext = $Z.wrapSpanContext, this.isSpanContextValid = $Z.isSpanContextValid, this.deleteSpan = b8.deleteSpan, this.getSpan = b8.getSpan, this.getActiveSpan = b8.getActiveSpan, this.getSpanContext = b8.getSpanContext, this.setSpan = b8.setSpan, this.setSpanContext = b8.setSpanContext; + } + static getInstance() { + if (!this._instance) this._instance = new FH(); + return this._instance; + } + setGlobalTracerProvider($) { + let Q = (0, OH.registerGlobal)(DH, this._proxyTracerProvider, QZ.DiagAPI.instance()); + if (Q) this._proxyTracerProvider.setDelegate($); + return Q; + } + getTracerProvider() { + return (0, OH.getGlobal)(DH) || this._proxyTracerProvider; + } + getTracer($, Q) { + return this.getTracerProvider().getTracer($, Q); + } + disable() { + (0, OH.unregisterGlobal)(DH, QZ.DiagAPI.instance()), this._proxyTracerProvider = new eF.ProxyTracerProvider(); + } + } + JZ.TraceAPI = FH; +}); +var UZ = I((WZ) => { + Object.defineProperty(WZ, "__esModule", { value: true }); + WZ.trace = void 0; + var df = YZ(); + WZ.trace = df.TraceAPI.getInstance(); +}); +var wZ = I((F$) => { + Object.defineProperty(F$, "__esModule", { value: true }); + F$.trace = F$.propagation = F$.metrics = F$.diag = F$.context = F$.INVALID_SPAN_CONTEXT = F$.INVALID_TRACEID = F$.INVALID_SPANID = F$.isValidSpanId = F$.isValidTraceId = F$.isSpanContextValid = F$.createTraceState = F$.TraceFlags = F$.SpanStatusCode = F$.SpanKind = F$.SamplingDecision = F$.ProxyTracerProvider = F$.ProxyTracer = F$.defaultTextMapSetter = F$.defaultTextMapGetter = F$.ValueType = F$.createNoopMeter = F$.DiagLogLevel = F$.DiagConsoleLogger = F$.ROOT_CONTEXT = F$.createContextKey = F$.baggageEntryMetadataFromString = void 0; + var nf = SU(); + Object.defineProperty(F$, "baggageEntryMetadataFromString", { enumerable: true, get: function() { + return nf.baggageEntryMetadataFromString; + } }); + var HZ = cQ(); + Object.defineProperty(F$, "createContextKey", { enumerable: true, get: function() { + return HZ.createContextKey; + } }); + Object.defineProperty(F$, "ROOT_CONTEXT", { enumerable: true, get: function() { + return HZ.ROOT_CONTEXT; + } }); + var rf = YD(); + Object.defineProperty(F$, "DiagConsoleLogger", { enumerable: true, get: function() { + return rf.DiagConsoleLogger; + } }); + var of = wX(); + Object.defineProperty(F$, "DiagLogLevel", { enumerable: true, get: function() { + return of.DiagLogLevel; + } }); + var tf = mU(); + Object.defineProperty(F$, "createNoopMeter", { enumerable: true, get: function() { + return tf.createNoopMeter; + } }); + var af = OD(); + Object.defineProperty(F$, "ValueType", { enumerable: true, get: function() { + return af.ValueType; + } }); + var KZ = cU(); + Object.defineProperty(F$, "defaultTextMapGetter", { enumerable: true, get: function() { + return KZ.defaultTextMapGetter; + } }); + Object.defineProperty(F$, "defaultTextMapSetter", { enumerable: true, get: function() { + return KZ.defaultTextMapSetter; + } }); + var sf = QH(); + Object.defineProperty(F$, "ProxyTracer", { enumerable: true, get: function() { + return sf.ProxyTracer; + } }); + var ef = JH(); + Object.defineProperty(F$, "ProxyTracerProvider", { enumerable: true, get: function() { + return ef.ProxyTracerProvider; + } }); + var $g = XF(); + Object.defineProperty(F$, "SamplingDecision", { enumerable: true, get: function() { + return $g.SamplingDecision; + } }); + var Qg = WF(); + Object.defineProperty(F$, "SpanKind", { enumerable: true, get: function() { + return Qg.SpanKind; + } }); + var Jg = UF(); + Object.defineProperty(F$, "SpanStatusCode", { enumerable: true, get: function() { + return Jg.SpanStatusCode; + } }); + var Xg = rU(); + Object.defineProperty(F$, "TraceFlags", { enumerable: true, get: function() { + return Xg.TraceFlags; + } }); + var Yg = MF(); + Object.defineProperty(F$, "createTraceState", { enumerable: true, get: function() { + return Yg.createTraceState; + } }); + var ZH = MX(); + Object.defineProperty(F$, "isSpanContextValid", { enumerable: true, get: function() { + return ZH.isSpanContextValid; + } }); + Object.defineProperty(F$, "isValidTraceId", { enumerable: true, get: function() { + return ZH.isValidTraceId; + } }); + Object.defineProperty(F$, "isValidSpanId", { enumerable: true, get: function() { + return ZH.isValidSpanId; + } }); + var MH = FX(); + Object.defineProperty(F$, "INVALID_SPANID", { enumerable: true, get: function() { + return MH.INVALID_SPANID; + } }); + Object.defineProperty(F$, "INVALID_TRACEID", { enumerable: true, get: function() { + return MH.INVALID_TRACEID; + } }); + Object.defineProperty(F$, "INVALID_SPAN_CONTEXT", { enumerable: true, get: function() { + return MH.INVALID_SPAN_CONTEXT; + } }); + var qZ = AF(); + Object.defineProperty(F$, "context", { enumerable: true, get: function() { + return qZ.context; + } }); + var VZ = PF(); + Object.defineProperty(F$, "diag", { enumerable: true, get: function() { + return VZ.diag; + } }); + var BZ = yF(); + Object.defineProperty(F$, "metrics", { enumerable: true, get: function() { + return BZ.metrics; + } }); + var zZ = sF(); + Object.defineProperty(F$, "propagation", { enumerable: true, get: function() { + return zZ.propagation; + } }); + var NZ = UZ(); + Object.defineProperty(F$, "trace", { enumerable: true, get: function() { + return NZ.trace; + } }); + F$.default = { context: qZ.context, diag: VZ.diag, metrics: BZ.metrics, propagation: zZ.propagation, trace: NZ.trace }; +}); +var IJ = I((wj) => { + Object.defineProperty(wj, "__esModule", { value: true }); + wj.regexpCode = wj.getEsmExportName = wj.getProperty = wj.safeStringify = wj.stringify = wj.strConcat = wj.addCodeArg = wj.str = wj._ = wj.nil = wj._Code = wj.Name = wj.IDENTIFIER = wj._CodeOrName = void 0; + class BW { + } + wj._CodeOrName = BW; + wj.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i; + class K9 extends BW { + constructor($) { + super(); + if (!wj.IDENTIFIER.test($)) throw Error("CodeGen: name must be a valid identifier"); + this.str = $; + } + toString() { + return this.str; + } + emptyStr() { + return false; + } + get names() { + return { [this.str]: 1 }; + } + } + wj.Name = K9; + class B4 extends BW { + constructor($) { + super(); + this._items = typeof $ === "string" ? [$] : $; + } + toString() { + return this.str; + } + emptyStr() { + if (this._items.length > 1) return false; + let $ = this._items[0]; + return $ === "" || $ === '""'; + } + get str() { + var $; + return ($ = this._str) !== null && $ !== void 0 ? $ : this._str = this._items.reduce((Q, J) => `${Q}${J}`, ""); + } + get names() { + var $; + return ($ = this._names) !== null && $ !== void 0 ? $ : this._names = this._items.reduce((Q, J) => { + if (J instanceof K9) Q[J.str] = (Q[J.str] || 0) + 1; + return Q; + }, {}); + } + } + wj._Code = B4; + wj.nil = new B4(""); + function zj($, ...Q) { + let J = [$[0]], Y = 0; + while (Y < Q.length) UB(J, Q[Y]), J.push($[++Y]); + return new B4(J); + } + wj._ = zj; + var GB = new B4("+"); + function Nj($, ...Q) { + let J = [AJ($[0])], Y = 0; + while (Y < Q.length) J.push(GB), UB(J, Q[Y]), J.push(GB, AJ($[++Y])); + return Lp(J), new B4(J); + } + wj.str = Nj; + function UB($, Q) { + if (Q instanceof B4) $.push(...Q._items); + else if (Q instanceof K9) $.push(Q); + else $.push(Ip(Q)); + } + wj.addCodeArg = UB; + function Lp($) { + let Q = 1; + while (Q < $.length - 1) { + if ($[Q] === GB) { + let J = jp($[Q - 1], $[Q + 1]); + if (J !== void 0) { + $.splice(Q - 1, 3, J); + continue; + } + $[Q++] = "+"; + } + Q++; + } + } + function jp($, Q) { + if (Q === '""') return $; + if ($ === '""') return Q; + if (typeof $ == "string") { + if (Q instanceof K9 || $[$.length - 1] !== '"') return; + if (typeof Q != "string") return `${$.slice(0, -1)}${Q}"`; + if (Q[0] === '"') return $.slice(0, -1) + Q.slice(1); + return; + } + if (typeof Q == "string" && Q[0] === '"' && !($ instanceof K9)) return `"${$}${Q.slice(1)}`; + return; + } + function Ap($, Q) { + return Q.emptyStr() ? $ : $.emptyStr() ? Q : Nj`${$}${Q}`; + } + wj.strConcat = Ap; + function Ip($) { + return typeof $ == "number" || typeof $ == "boolean" || $ === null ? $ : AJ(Array.isArray($) ? $.join(",") : $); + } + function Rp($) { + return new B4(AJ($)); + } + wj.stringify = Rp; + function AJ($) { + return JSON.stringify($).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029"); + } + wj.safeStringify = AJ; + function Pp($) { + return typeof $ == "string" && wj.IDENTIFIER.test($) ? new B4(`.${$}`) : zj`[${$}]`; + } + wj.getProperty = Pp; + function Ep($) { + if (typeof $ == "string" && wj.IDENTIFIER.test($)) return new B4(`${$}`); + throw Error(`CodeGen: invalid export name: ${$}, use explicit $id name mapping`); + } + wj.getEsmExportName = Ep; + function bp($) { + return new B4($.toString()); + } + wj.regexpCode = bp; +}); +var VB = I((Zj) => { + Object.defineProperty(Zj, "__esModule", { value: true }); + Zj.ValueScope = Zj.ValueScopeName = Zj.Scope = Zj.varKinds = Zj.UsedValueState = void 0; + var E6 = IJ(); + class Dj extends Error { + constructor($) { + super(`CodeGen: "code" for ${$} not defined`); + this.value = $.value; + } + } + var NW; + (function($) { + $[$.Started = 0] = "Started", $[$.Completed = 1] = "Completed"; + })(NW || (Zj.UsedValueState = NW = {})); + Zj.varKinds = { const: new E6.Name("const"), let: new E6.Name("let"), var: new E6.Name("var") }; + class KB { + constructor({ prefixes: $, parent: Q } = {}) { + this._names = {}, this._prefixes = $, this._parent = Q; + } + toName($) { + return $ instanceof E6.Name ? $ : this.name($); + } + name($) { + return new E6.Name(this._newName($)); + } + _newName($) { + let Q = this._names[$] || this._nameGroup($); + return `${$}${Q.index++}`; + } + _nameGroup($) { + var Q, J; + if (((J = (Q = this._parent) === null || Q === void 0 ? void 0 : Q._prefixes) === null || J === void 0 ? void 0 : J.has($)) || this._prefixes && !this._prefixes.has($)) throw Error(`CodeGen: prefix "${$}" is not allowed in this scope`); + return this._names[$] = { prefix: $, index: 0 }; + } + } + Zj.Scope = KB; + class qB extends E6.Name { + constructor($, Q) { + super(Q); + this.prefix = $; + } + setValue($, { property: Q, itemIndex: J }) { + this.value = $, this.scopePath = E6._`.${new E6.Name(Q)}[${J}]`; + } + } + Zj.ValueScopeName = qB; + var mp = E6._`\n`; + class Fj extends KB { + constructor($) { + super($); + this._values = {}, this._scope = $.scope, this.opts = { ...$, _n: $.lines ? mp : E6.nil }; + } + get() { + return this._scope; + } + name($) { + return new qB($, this._newName($)); + } + value($, Q) { + var J; + if (Q.ref === void 0) throw Error("CodeGen: ref must be passed in value"); + let Y = this.toName($), { prefix: X } = Y, W = (J = Q.key) !== null && J !== void 0 ? J : Q.ref, G = this._values[X]; + if (G) { + let q = G.get(W); + if (q) return q; + } else G = this._values[X] = /* @__PURE__ */ new Map(); + G.set(W, Y); + let U = this._scope[X] || (this._scope[X] = []), H = U.length; + return U[H] = Q.ref, Y.setValue(Q, { property: X, itemIndex: H }), Y; + } + getValue($, Q) { + let J = this._values[$]; + if (!J) return; + return J.get(Q); + } + scopeRefs($, Q = this._values) { + return this._reduceValues(Q, (J) => { + if (J.scopePath === void 0) throw Error(`CodeGen: name "${J}" has no value`); + return E6._`${$}${J.scopePath}`; + }); + } + scopeCode($ = this._values, Q, J) { + return this._reduceValues($, (Y) => { + if (Y.value === void 0) throw Error(`CodeGen: name "${Y}" has no value`); + return Y.value.code; + }, Q, J); + } + _reduceValues($, Q, J = {}, Y) { + let X = E6.nil; + for (let W in $) { + let G = $[W]; + if (!G) continue; + let U = J[W] = J[W] || /* @__PURE__ */ new Map(); + G.forEach((H) => { + if (U.has(H)) return; + U.set(H, NW.Started); + let q = Q(H); + if (q) { + let V = this.opts.es5 ? Zj.varKinds.var : Zj.varKinds.const; + X = E6._`${X}${V} ${H} = ${q};${this.opts._n}`; + } else if (q = Y === null || Y === void 0 ? void 0 : Y(H)) X = E6._`${X}${q}${this.opts._n}`; + else throw new Dj(H); + U.set(H, NW.Completed); + }); + } + return X; + } + } + Zj.ValueScope = Fj; +}); +var Q$ = I((b6) => { + Object.defineProperty(b6, "__esModule", { value: true }); + b6.or = b6.and = b6.not = b6.CodeGen = b6.operators = b6.varKinds = b6.ValueScopeName = b6.ValueScope = b6.Scope = b6.Name = b6.regexpCode = b6.stringify = b6.getProperty = b6.nil = b6.strConcat = b6.str = b6._ = void 0; + var K$ = IJ(), z4 = VB(), x1 = IJ(); + Object.defineProperty(b6, "_", { enumerable: true, get: function() { + return x1._; + } }); + Object.defineProperty(b6, "str", { enumerable: true, get: function() { + return x1.str; + } }); + Object.defineProperty(b6, "strConcat", { enumerable: true, get: function() { + return x1.strConcat; + } }); + Object.defineProperty(b6, "nil", { enumerable: true, get: function() { + return x1.nil; + } }); + Object.defineProperty(b6, "getProperty", { enumerable: true, get: function() { + return x1.getProperty; + } }); + Object.defineProperty(b6, "stringify", { enumerable: true, get: function() { + return x1.stringify; + } }); + Object.defineProperty(b6, "regexpCode", { enumerable: true, get: function() { + return x1.regexpCode; + } }); + Object.defineProperty(b6, "Name", { enumerable: true, get: function() { + return x1.Name; + } }); + var MW = VB(); + Object.defineProperty(b6, "Scope", { enumerable: true, get: function() { + return MW.Scope; + } }); + Object.defineProperty(b6, "ValueScope", { enumerable: true, get: function() { + return MW.ValueScope; + } }); + Object.defineProperty(b6, "ValueScopeName", { enumerable: true, get: function() { + return MW.ValueScopeName; + } }); + Object.defineProperty(b6, "varKinds", { enumerable: true, get: function() { + return MW.varKinds; + } }); + b6.operators = { GT: new K$._Code(">"), GTE: new K$._Code(">="), LT: new K$._Code("<"), LTE: new K$._Code("<="), EQ: new K$._Code("==="), NEQ: new K$._Code("!=="), NOT: new K$._Code("!"), OR: new K$._Code("||"), AND: new K$._Code("&&"), ADD: new K$._Code("+") }; + class y1 { + optimizeNodes() { + return this; + } + optimizeNames($, Q) { + return this; + } + } + class Lj extends y1 { + constructor($, Q, J) { + super(); + this.varKind = $, this.name = Q, this.rhs = J; + } + render({ es5: $, _n: Q }) { + let J = $ ? z4.varKinds.var : this.varKind, Y = this.rhs === void 0 ? "" : ` = ${this.rhs}`; + return `${J} ${this.name}${Y};` + Q; + } + optimizeNames($, Q) { + if (!$[this.name.str]) return; + if (this.rhs) this.rhs = V9(this.rhs, $, Q); + return this; + } + get names() { + return this.rhs instanceof K$._CodeOrName ? this.rhs.names : {}; + } + } + class NB extends y1 { + constructor($, Q, J) { + super(); + this.lhs = $, this.rhs = Q, this.sideEffects = J; + } + render({ _n: $ }) { + return `${this.lhs} = ${this.rhs};` + $; + } + optimizeNames($, Q) { + if (this.lhs instanceof K$.Name && !$[this.lhs.str] && !this.sideEffects) return; + return this.rhs = V9(this.rhs, $, Q), this; + } + get names() { + let $ = this.lhs instanceof K$.Name ? {} : { ...this.lhs.names }; + return ZW($, this.rhs); + } + } + class jj extends NB { + constructor($, Q, J, Y) { + super($, J, Y); + this.op = Q; + } + render({ _n: $ }) { + return `${this.lhs} ${this.op}= ${this.rhs};` + $; + } + } + class Aj extends y1 { + constructor($) { + super(); + this.label = $, this.names = {}; + } + render({ _n: $ }) { + return `${this.label}:` + $; + } + } + class Ij extends y1 { + constructor($) { + super(); + this.label = $, this.names = {}; + } + render({ _n: $ }) { + return `break${this.label ? ` ${this.label}` : ""};` + $; + } + } + class Rj extends y1 { + constructor($) { + super(); + this.error = $; + } + render({ _n: $ }) { + return `throw ${this.error};` + $; + } + get names() { + return this.error.names; + } + } + class Pj extends y1 { + constructor($) { + super(); + this.code = $; + } + render({ _n: $ }) { + return `${this.code};` + $; + } + optimizeNodes() { + return `${this.code}` ? this : void 0; + } + optimizeNames($, Q) { + return this.code = V9(this.code, $, Q), this; + } + get names() { + return this.code instanceof K$._CodeOrName ? this.code.names : {}; + } + } + class LW extends y1 { + constructor($ = []) { + super(); + this.nodes = $; + } + render($) { + return this.nodes.reduce((Q, J) => Q + J.render($), ""); + } + optimizeNodes() { + let { nodes: $ } = this, Q = $.length; + while (Q--) { + let J = $[Q].optimizeNodes(); + if (Array.isArray(J)) $.splice(Q, 1, ...J); + else if (J) $[Q] = J; + else $.splice(Q, 1); + } + return $.length > 0 ? this : void 0; + } + optimizeNames($, Q) { + let { nodes: J } = this, Y = J.length; + while (Y--) { + let X = J[Y]; + if (X.optimizeNames($, Q)) continue; + dp($, X.names), J.splice(Y, 1); + } + return J.length > 0 ? this : void 0; + } + get names() { + return this.nodes.reduce(($, Q) => v0($, Q.names), {}); + } + } + class f1 extends LW { + render($) { + return "{" + $._n + super.render($) + "}" + $._n; + } + } + class Ej extends LW { + } + class RJ extends f1 { + } + RJ.kind = "else"; + class e4 extends f1 { + constructor($, Q) { + super(Q); + this.condition = $; + } + render($) { + let Q = `if(${this.condition})` + super.render($); + if (this.else) Q += "else " + this.else.render($); + return Q; + } + optimizeNodes() { + super.optimizeNodes(); + let $ = this.condition; + if ($ === true) return this.nodes; + let Q = this.else; + if (Q) { + let J = Q.optimizeNodes(); + Q = this.else = Array.isArray(J) ? new RJ(J) : J; + } + if (Q) { + if ($ === false) return Q instanceof e4 ? Q : Q.nodes; + if (this.nodes.length) return this; + return new e4(vj($), Q instanceof e4 ? [Q] : Q.nodes); + } + if ($ === false || !this.nodes.length) return; + return this; + } + optimizeNames($, Q) { + var J; + if (this.else = (J = this.else) === null || J === void 0 ? void 0 : J.optimizeNames($, Q), !(super.optimizeNames($, Q) || this.else)) return; + return this.condition = V9(this.condition, $, Q), this; + } + get names() { + let $ = super.names; + if (ZW($, this.condition), this.else) v0($, this.else.names); + return $; + } + } + e4.kind = "if"; + class q9 extends f1 { + } + q9.kind = "for"; + class bj extends q9 { + constructor($) { + super(); + this.iteration = $; + } + render($) { + return `for(${this.iteration})` + super.render($); + } + optimizeNames($, Q) { + if (!super.optimizeNames($, Q)) return; + return this.iteration = V9(this.iteration, $, Q), this; + } + get names() { + return v0(super.names, this.iteration.names); + } + } + class _j extends q9 { + constructor($, Q, J, Y) { + super(); + this.varKind = $, this.name = Q, this.from = J, this.to = Y; + } + render($) { + let Q = $.es5 ? z4.varKinds.var : this.varKind, { name: J, from: Y, to: X } = this; + return `for(${Q} ${J}=${Y}; ${J}<${X}; ${J}++)` + super.render($); + } + get names() { + let $ = ZW(super.names, this.from); + return ZW($, this.to); + } + } + class BB extends q9 { + constructor($, Q, J, Y) { + super(); + this.loop = $, this.varKind = Q, this.name = J, this.iterable = Y; + } + render($) { + return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render($); + } + optimizeNames($, Q) { + if (!super.optimizeNames($, Q)) return; + return this.iterable = V9(this.iterable, $, Q), this; + } + get names() { + return v0(super.names, this.iterable.names); + } + } + class wW extends f1 { + constructor($, Q, J) { + super(); + this.name = $, this.args = Q, this.async = J; + } + render($) { + return `${this.async ? "async " : ""}function ${this.name}(${this.args})` + super.render($); + } + } + wW.kind = "func"; + class OW extends LW { + render($) { + return "return " + super.render($); + } + } + OW.kind = "return"; + class kj extends f1 { + render($) { + let Q = "try" + super.render($); + if (this.catch) Q += this.catch.render($); + if (this.finally) Q += this.finally.render($); + return Q; + } + optimizeNodes() { + var $, Q; + return super.optimizeNodes(), ($ = this.catch) === null || $ === void 0 || $.optimizeNodes(), (Q = this.finally) === null || Q === void 0 || Q.optimizeNodes(), this; + } + optimizeNames($, Q) { + var J, Y; + return super.optimizeNames($, Q), (J = this.catch) === null || J === void 0 || J.optimizeNames($, Q), (Y = this.finally) === null || Y === void 0 || Y.optimizeNames($, Q), this; + } + get names() { + let $ = super.names; + if (this.catch) v0($, this.catch.names); + if (this.finally) v0($, this.finally.names); + return $; + } + } + class DW extends f1 { + constructor($) { + super(); + this.error = $; + } + render($) { + return `catch(${this.error})` + super.render($); + } + } + DW.kind = "catch"; + class FW extends f1 { + render($) { + return "finally" + super.render($); + } + } + FW.kind = "finally"; + class Sj { + constructor($, Q = {}) { + this._values = {}, this._blockStarts = [], this._constants = {}, this.opts = { ...Q, _n: Q.lines ? ` +` : "" }, this._extScope = $, this._scope = new z4.Scope({ parent: $ }), this._nodes = [new Ej()]; + } + toString() { + return this._root.render(this.opts); + } + name($) { + return this._scope.name($); + } + scopeName($) { + return this._extScope.name($); + } + scopeValue($, Q) { + let J = this._extScope.value($, Q); + return (this._values[J.prefix] || (this._values[J.prefix] = /* @__PURE__ */ new Set())).add(J), J; + } + getScopeValue($, Q) { + return this._extScope.getValue($, Q); + } + scopeRefs($) { + return this._extScope.scopeRefs($, this._values); + } + scopeCode() { + return this._extScope.scopeCode(this._values); + } + _def($, Q, J, Y) { + let X = this._scope.toName(Q); + if (J !== void 0 && Y) this._constants[X.str] = J; + return this._leafNode(new Lj($, X, J)), X; + } + const($, Q, J) { + return this._def(z4.varKinds.const, $, Q, J); + } + let($, Q, J) { + return this._def(z4.varKinds.let, $, Q, J); + } + var($, Q, J) { + return this._def(z4.varKinds.var, $, Q, J); + } + assign($, Q, J) { + return this._leafNode(new NB($, Q, J)); + } + add($, Q) { + return this._leafNode(new jj($, b6.operators.ADD, Q)); + } + code($) { + if (typeof $ == "function") $(); + else if ($ !== K$.nil) this._leafNode(new Pj($)); + return this; + } + object(...$) { + let Q = ["{"]; + for (let [J, Y] of $) { + if (Q.length > 1) Q.push(","); + if (Q.push(J), J !== Y || this.opts.es5) Q.push(":"), (0, K$.addCodeArg)(Q, Y); + } + return Q.push("}"), new K$._Code(Q); + } + if($, Q, J) { + if (this._blockNode(new e4($)), Q && J) this.code(Q).else().code(J).endIf(); + else if (Q) this.code(Q).endIf(); + else if (J) throw Error('CodeGen: "else" body without "then" body'); + return this; + } + elseIf($) { + return this._elseNode(new e4($)); + } + else() { + return this._elseNode(new RJ()); + } + endIf() { + return this._endBlockNode(e4, RJ); + } + _for($, Q) { + if (this._blockNode($), Q) this.code(Q).endFor(); + return this; + } + for($, Q) { + return this._for(new bj($), Q); + } + forRange($, Q, J, Y, X = this.opts.es5 ? z4.varKinds.var : z4.varKinds.let) { + let W = this._scope.toName($); + return this._for(new _j(X, W, Q, J), () => Y(W)); + } + forOf($, Q, J, Y = z4.varKinds.const) { + let X = this._scope.toName($); + if (this.opts.es5) { + let W = Q instanceof K$.Name ? Q : this.var("_arr", Q); + return this.forRange("_i", 0, K$._`${W}.length`, (G) => { + this.var(X, K$._`${W}[${G}]`), J(X); + }); + } + return this._for(new BB("of", Y, X, Q), () => J(X)); + } + forIn($, Q, J, Y = this.opts.es5 ? z4.varKinds.var : z4.varKinds.const) { + if (this.opts.ownProperties) return this.forOf($, K$._`Object.keys(${Q})`, J); + let X = this._scope.toName($); + return this._for(new BB("in", Y, X, Q), () => J(X)); + } + endFor() { + return this._endBlockNode(q9); + } + label($) { + return this._leafNode(new Aj($)); + } + break($) { + return this._leafNode(new Ij($)); + } + return($) { + let Q = new OW(); + if (this._blockNode(Q), this.code($), Q.nodes.length !== 1) throw Error('CodeGen: "return" should have one node'); + return this._endBlockNode(OW); + } + try($, Q, J) { + if (!Q && !J) throw Error('CodeGen: "try" without "catch" and "finally"'); + let Y = new kj(); + if (this._blockNode(Y), this.code($), Q) { + let X = this.name("e"); + this._currNode = Y.catch = new DW(X), Q(X); + } + if (J) this._currNode = Y.finally = new FW(), this.code(J); + return this._endBlockNode(DW, FW); + } + throw($) { + return this._leafNode(new Rj($)); + } + block($, Q) { + if (this._blockStarts.push(this._nodes.length), $) this.code($).endBlock(Q); + return this; + } + endBlock($) { + let Q = this._blockStarts.pop(); + if (Q === void 0) throw Error("CodeGen: not in self-balancing block"); + let J = this._nodes.length - Q; + if (J < 0 || $ !== void 0 && J !== $) throw Error(`CodeGen: wrong number of nodes: ${J} vs ${$} expected`); + return this._nodes.length = Q, this; + } + func($, Q = K$.nil, J, Y) { + if (this._blockNode(new wW($, Q, J)), Y) this.code(Y).endFunc(); + return this; + } + endFunc() { + return this._endBlockNode(wW); + } + optimize($ = 1) { + while ($-- > 0) this._root.optimizeNodes(), this._root.optimizeNames(this._root.names, this._constants); + } + _leafNode($) { + return this._currNode.nodes.push($), this; + } + _blockNode($) { + this._currNode.nodes.push($), this._nodes.push($); + } + _endBlockNode($, Q) { + let J = this._currNode; + if (J instanceof $ || Q && J instanceof Q) return this._nodes.pop(), this; + throw Error(`CodeGen: not in block "${Q ? `${$.kind}/${Q.kind}` : $.kind}"`); + } + _elseNode($) { + let Q = this._currNode; + if (!(Q instanceof e4)) throw Error('CodeGen: "else" without "if"'); + return this._currNode = Q.else = $, this; + } + get _root() { + return this._nodes[0]; + } + get _currNode() { + let $ = this._nodes; + return $[$.length - 1]; + } + set _currNode($) { + let Q = this._nodes; + Q[Q.length - 1] = $; + } + } + b6.CodeGen = Sj; + function v0($, Q) { + for (let J in Q) $[J] = ($[J] || 0) + (Q[J] || 0); + return $; + } + function ZW($, Q) { + return Q instanceof K$._CodeOrName ? v0($, Q.names) : $; + } + function V9($, Q, J) { + if ($ instanceof K$.Name) return Y($); + if (!X($)) return $; + return new K$._Code($._items.reduce((W, G) => { + if (G instanceof K$.Name) G = Y(G); + if (G instanceof K$._Code) W.push(...G._items); + else W.push(G); + return W; + }, [])); + function Y(W) { + let G = J[W.str]; + if (G === void 0 || Q[W.str] !== 1) return W; + return delete Q[W.str], G; + } + function X(W) { + return W instanceof K$._Code && W._items.some((G) => G instanceof K$.Name && Q[G.str] === 1 && J[G.str] !== void 0); + } + } + function dp($, Q) { + for (let J in Q) $[J] = ($[J] || 0) - (Q[J] || 0); + } + function vj($) { + return typeof $ == "boolean" || typeof $ == "number" || $ === null ? !$ : K$._`!${zB($)}`; + } + b6.not = vj; + var ip = Cj(b6.operators.AND); + function np(...$) { + return $.reduce(ip); + } + b6.and = np; + var rp = Cj(b6.operators.OR); + function op(...$) { + return $.reduce(rp); + } + b6.or = op; + function Cj($) { + return (Q, J) => Q === K$.nil ? J : J === K$.nil ? Q : K$._`${zB(Q)} ${$} ${zB(J)}`; + } + function zB($) { + return $ instanceof K$.Name ? $ : K$._`(${$})`; + } +}); +var q$ = I((lj) => { + Object.defineProperty(lj, "__esModule", { value: true }); + lj.checkStrictMode = lj.getErrorPath = lj.Type = lj.useFunc = lj.setEvaluated = lj.evaluatedPropsToName = lj.mergeEvaluated = lj.eachItem = lj.unescapeJsonPointer = lj.escapeJsonPointer = lj.escapeFragment = lj.unescapeFragment = lj.schemaRefOrVal = lj.schemaHasRulesButRef = lj.schemaHasRules = lj.checkUnknownRules = lj.alwaysValidSchema = lj.toHash = void 0; + var P$ = Q$(), ep = IJ(); + function $d($) { + let Q = {}; + for (let J of $) Q[J] = true; + return Q; + } + lj.toHash = $d; + function Qd($, Q) { + if (typeof Q == "boolean") return Q; + if (Object.keys(Q).length === 0) return true; + return fj($, Q), !gj(Q, $.self.RULES.all); + } + lj.alwaysValidSchema = Qd; + function fj($, Q = $.schema) { + let { opts: J, self: Y } = $; + if (!J.strictSchema) return; + if (typeof Q === "boolean") return; + let X = Y.RULES.keywords; + for (let W in Q) if (!X[W]) mj($, `unknown keyword: "${W}"`); + } + lj.checkUnknownRules = fj; + function gj($, Q) { + if (typeof $ == "boolean") return !$; + for (let J in $) if (Q[J]) return true; + return false; + } + lj.schemaHasRules = gj; + function Jd($, Q) { + if (typeof $ == "boolean") return !$; + for (let J in $) if (J !== "$ref" && Q.all[J]) return true; + return false; + } + lj.schemaHasRulesButRef = Jd; + function Xd({ topSchemaRef: $, schemaPath: Q }, J, Y, X) { + if (!X) { + if (typeof J == "number" || typeof J == "boolean") return J; + if (typeof J == "string") return P$._`${J}`; + } + return P$._`${$}${Q}${(0, P$.getProperty)(Y)}`; + } + lj.schemaRefOrVal = Xd; + function Yd($) { + return hj(decodeURIComponent($)); + } + lj.unescapeFragment = Yd; + function Wd($) { + return encodeURIComponent(OB($)); + } + lj.escapeFragment = Wd; + function OB($) { + if (typeof $ == "number") return `${$}`; + return $.replace(/~/g, "~0").replace(/\//g, "~1"); + } + lj.escapeJsonPointer = OB; + function hj($) { + return $.replace(/~1/g, "/").replace(/~0/g, "~"); + } + lj.unescapeJsonPointer = hj; + function Gd($, Q) { + if (Array.isArray($)) for (let J of $) Q(J); + else Q($); + } + lj.eachItem = Gd; + function xj({ mergeNames: $, mergeToName: Q, mergeValues: J, resultToName: Y }) { + return (X, W, G, U) => { + let H = G === void 0 ? W : G instanceof P$.Name ? (W instanceof P$.Name ? $(X, W, G) : Q(X, W, G), G) : W instanceof P$.Name ? (Q(X, G, W), W) : J(W, G); + return U === P$.Name && !(H instanceof P$.Name) ? Y(X, H) : H; + }; + } + lj.mergeEvaluated = { props: xj({ mergeNames: ($, Q, J) => $.if(P$._`${J} !== true && ${Q} !== undefined`, () => { + $.if(P$._`${Q} === true`, () => $.assign(J, true), () => $.assign(J, P$._`${J} || {}`).code(P$._`Object.assign(${J}, ${Q})`)); + }), mergeToName: ($, Q, J) => $.if(P$._`${J} !== true`, () => { + if (Q === true) $.assign(J, true); + else $.assign(J, P$._`${J} || {}`), DB($, J, Q); + }), mergeValues: ($, Q) => $ === true ? true : { ...$, ...Q }, resultToName: uj }), items: xj({ mergeNames: ($, Q, J) => $.if(P$._`${J} !== true && ${Q} !== undefined`, () => $.assign(J, P$._`${Q} === true ? true : ${J} > ${Q} ? ${J} : ${Q}`)), mergeToName: ($, Q, J) => $.if(P$._`${J} !== true`, () => $.assign(J, Q === true ? true : P$._`${J} > ${Q} ? ${J} : ${Q}`)), mergeValues: ($, Q) => $ === true ? true : Math.max($, Q), resultToName: ($, Q) => $.var("items", Q) }) }; + function uj($, Q) { + if (Q === true) return $.var("props", true); + let J = $.var("props", P$._`{}`); + if (Q !== void 0) DB($, J, Q); + return J; + } + lj.evaluatedPropsToName = uj; + function DB($, Q, J) { + Object.keys(J).forEach((Y) => $.assign(P$._`${Q}${(0, P$.getProperty)(Y)}`, true)); + } + lj.setEvaluated = DB; + var yj = {}; + function Ud($, Q) { + return $.scopeValue("func", { ref: Q, code: yj[Q.code] || (yj[Q.code] = new ep._Code(Q.code)) }); + } + lj.useFunc = Ud; + var wB; + (function($) { + $[$.Num = 0] = "Num", $[$.Str = 1] = "Str"; + })(wB || (lj.Type = wB = {})); + function Hd($, Q, J) { + if ($ instanceof P$.Name) { + let Y = Q === wB.Num; + return J ? Y ? P$._`"[" + ${$} + "]"` : P$._`"['" + ${$} + "']"` : Y ? P$._`"/" + ${$}` : P$._`"/" + ${$}.replace(/~/g, "~0").replace(/\\//g, "~1")`; + } + return J ? (0, P$.getProperty)($).toString() : "/" + OB($); + } + lj.getErrorPath = Hd; + function mj($, Q, J = $.opts.strictSchema) { + if (!J) return; + if (Q = `strict mode: ${Q}`, J === true) throw Error(Q); + $.self.logger.warn(Q); + } + lj.checkStrictMode = mj; +}); +var $1 = I((pj) => { + Object.defineProperty(pj, "__esModule", { value: true }); + var q6 = Q$(), Pd = { data: new q6.Name("data"), valCxt: new q6.Name("valCxt"), instancePath: new q6.Name("instancePath"), parentData: new q6.Name("parentData"), parentDataProperty: new q6.Name("parentDataProperty"), rootData: new q6.Name("rootData"), dynamicAnchors: new q6.Name("dynamicAnchors"), vErrors: new q6.Name("vErrors"), errors: new q6.Name("errors"), this: new q6.Name("this"), self: new q6.Name("self"), scope: new q6.Name("scope"), json: new q6.Name("json"), jsonPos: new q6.Name("jsonPos"), jsonLen: new q6.Name("jsonLen"), jsonPart: new q6.Name("jsonPart") }; + pj.default = Pd; +}); +var PJ = I((rj) => { + Object.defineProperty(rj, "__esModule", { value: true }); + rj.extendErrors = rj.resetErrorsCount = rj.reportExtraError = rj.reportError = rj.keyword$DataError = rj.keywordError = void 0; + var V$ = Q$(), AW = q$(), O6 = $1(); + rj.keywordError = { message: ({ keyword: $ }) => V$.str`must pass "${$}" keyword validation` }; + rj.keyword$DataError = { message: ({ keyword: $, schemaType: Q }) => Q ? V$.str`"${$}" keyword must be ${Q} ($data)` : V$.str`"${$}" keyword is invalid ($data)` }; + function bd($, Q = rj.keywordError, J, Y) { + let { it: X } = $, { gen: W, compositeRule: G, allErrors: U } = X, H = nj($, Q, J); + if (Y !== null && Y !== void 0 ? Y : G || U) dj(W, H); + else ij(X, V$._`[${H}]`); + } + rj.reportError = bd; + function _d($, Q = rj.keywordError, J) { + let { it: Y } = $, { gen: X, compositeRule: W, allErrors: G } = Y, U = nj($, Q, J); + if (dj(X, U), !(W || G)) ij(Y, O6.default.vErrors); + } + rj.reportExtraError = _d; + function kd($, Q) { + $.assign(O6.default.errors, Q), $.if(V$._`${O6.default.vErrors} !== null`, () => $.if(Q, () => $.assign(V$._`${O6.default.vErrors}.length`, Q), () => $.assign(O6.default.vErrors, null))); + } + rj.resetErrorsCount = kd; + function Sd({ gen: $, keyword: Q, schemaValue: J, data: Y, errsCount: X, it: W }) { + if (X === void 0) throw Error("ajv implementation error"); + let G = $.name("err"); + $.forRange("i", X, O6.default.errors, (U) => { + if ($.const(G, V$._`${O6.default.vErrors}[${U}]`), $.if(V$._`${G}.instancePath === undefined`, () => $.assign(V$._`${G}.instancePath`, (0, V$.strConcat)(O6.default.instancePath, W.errorPath))), $.assign(V$._`${G}.schemaPath`, V$.str`${W.errSchemaPath}/${Q}`), W.opts.verbose) $.assign(V$._`${G}.schema`, J), $.assign(V$._`${G}.data`, Y); + }); + } + rj.extendErrors = Sd; + function dj($, Q) { + let J = $.const("err", Q); + $.if(V$._`${O6.default.vErrors} === null`, () => $.assign(O6.default.vErrors, V$._`[${J}]`), V$._`${O6.default.vErrors}.push(${J})`), $.code(V$._`${O6.default.errors}++`); + } + function ij($, Q) { + let { gen: J, validateName: Y, schemaEnv: X } = $; + if (X.$async) J.throw(V$._`new ${$.ValidationError}(${Q})`); + else J.assign(V$._`${Y}.errors`, Q), J.return(false); + } + var C0 = { keyword: new V$.Name("keyword"), schemaPath: new V$.Name("schemaPath"), params: new V$.Name("params"), propertyName: new V$.Name("propertyName"), message: new V$.Name("message"), schema: new V$.Name("schema"), parentSchema: new V$.Name("parentSchema") }; + function nj($, Q, J) { + let { createErrors: Y } = $.it; + if (Y === false) return V$._`{}`; + return vd($, Q, J); + } + function vd($, Q, J = {}) { + let { gen: Y, it: X } = $, W = [Cd(X, J), Td($, J)]; + return xd($, Q, W), Y.object(...W); + } + function Cd({ errorPath: $ }, { instancePath: Q }) { + let J = Q ? V$.str`${$}${(0, AW.getErrorPath)(Q, AW.Type.Str)}` : $; + return [O6.default.instancePath, (0, V$.strConcat)(O6.default.instancePath, J)]; + } + function Td({ keyword: $, it: { errSchemaPath: Q } }, { schemaPath: J, parentSchema: Y }) { + let X = Y ? Q : V$.str`${Q}/${$}`; + if (J) X = V$.str`${X}${(0, AW.getErrorPath)(J, AW.Type.Str)}`; + return [C0.schemaPath, X]; + } + function xd($, { params: Q, message: J }, Y) { + let { keyword: X, data: W, schemaValue: G, it: U } = $, { opts: H, propertyName: q, topSchemaRef: V, schemaPath: B } = U; + if (Y.push([C0.keyword, X], [C0.params, typeof Q == "function" ? Q($) : Q || V$._`{}`]), H.messages) Y.push([C0.message, typeof J == "function" ? J($) : J]); + if (H.verbose) Y.push([C0.schema, G], [C0.parentSchema, V$._`${V}${B}`], [O6.default.data, W]); + if (q) Y.push([C0.propertyName, q]); + } +}); +var ej = I((aj) => { + Object.defineProperty(aj, "__esModule", { value: true }); + aj.boolOrEmptySchema = aj.topBoolOrEmptySchema = void 0; + var ud = PJ(), md = Q$(), ld = $1(), cd = { message: "boolean schema is false" }; + function pd($) { + let { gen: Q, schema: J, validateName: Y } = $; + if (J === false) tj($, false); + else if (typeof J == "object" && J.$async === true) Q.return(ld.default.data); + else Q.assign(md._`${Y}.errors`, null), Q.return(true); + } + aj.topBoolOrEmptySchema = pd; + function dd($, Q) { + let { gen: J, schema: Y } = $; + if (Y === false) J.var(Q, false), tj($); + else J.var(Q, true); + } + aj.boolOrEmptySchema = dd; + function tj($, Q) { + let { gen: J, data: Y } = $, X = { gen: J, keyword: "false schema", data: Y, schema: false, schemaCode: false, schemaValue: false, params: {}, it: $ }; + (0, ud.reportError)(X, cd, void 0, Q); + } +}); +var ZB = I(($A) => { + Object.defineProperty($A, "__esModule", { value: true }); + $A.getRules = $A.isJSONType = void 0; + var nd = ["string", "number", "integer", "boolean", "null", "object", "array"], rd = new Set(nd); + function od($) { + return typeof $ == "string" && rd.has($); + } + $A.isJSONType = od; + function td() { + let $ = { number: { type: "number", rules: [] }, string: { type: "string", rules: [] }, array: { type: "array", rules: [] }, object: { type: "object", rules: [] } }; + return { types: { ...$, integer: true, boolean: true, null: true }, rules: [{ rules: [] }, $.number, $.string, $.array, $.object], post: { rules: [] }, all: {}, keywords: {} }; + } + $A.getRules = td; +}); +var MB = I((YA) => { + Object.defineProperty(YA, "__esModule", { value: true }); + YA.shouldUseRule = YA.shouldUseGroup = YA.schemaHasRulesForType = void 0; + function sd({ schema: $, self: Q }, J) { + let Y = Q.RULES.types[J]; + return Y && Y !== true && JA($, Y); + } + YA.schemaHasRulesForType = sd; + function JA($, Q) { + return Q.rules.some((J) => XA($, J)); + } + YA.shouldUseGroup = JA; + function XA($, Q) { + var J; + return $[Q.keyword] !== void 0 || ((J = Q.definition.implements) === null || J === void 0 ? void 0 : J.some((Y) => $[Y] !== void 0)); + } + YA.shouldUseRule = XA; +}); +var EJ = I((KA) => { + Object.defineProperty(KA, "__esModule", { value: true }); + KA.reportTypeError = KA.checkDataTypes = KA.checkDataType = KA.coerceAndCheckDataType = KA.getJSONTypes = KA.getSchemaTypes = KA.DataType = void 0; + var Qi = ZB(), Ji = MB(), Xi = PJ(), $$ = Q$(), GA = q$(), B9; + (function($) { + $[$.Correct = 0] = "Correct", $[$.Wrong = 1] = "Wrong"; + })(B9 || (KA.DataType = B9 = {})); + function Yi($) { + let Q = UA($.type); + if (Q.includes("null")) { + if ($.nullable === false) throw Error("type: null contradicts nullable: false"); + } else { + if (!Q.length && $.nullable !== void 0) throw Error('"nullable" cannot be used without "type"'); + if ($.nullable === true) Q.push("null"); + } + return Q; + } + KA.getSchemaTypes = Yi; + function UA($) { + let Q = Array.isArray($) ? $ : $ ? [$] : []; + if (Q.every(Qi.isJSONType)) return Q; + throw Error("type must be JSONType or JSONType[]: " + Q.join(",")); + } + KA.getJSONTypes = UA; + function Wi($, Q) { + let { gen: J, data: Y, opts: X } = $, W = Gi(Q, X.coerceTypes), G = Q.length > 0 && !(W.length === 0 && Q.length === 1 && (0, Ji.schemaHasRulesForType)($, Q[0])); + if (G) { + let U = jB(Q, Y, X.strictNumbers, B9.Wrong); + J.if(U, () => { + if (W.length) Ui($, Q, W); + else AB($); + }); + } + return G; + } + KA.coerceAndCheckDataType = Wi; + var HA = /* @__PURE__ */ new Set(["string", "number", "integer", "boolean", "null"]); + function Gi($, Q) { + return Q ? $.filter((J) => HA.has(J) || Q === "array" && J === "array") : []; + } + function Ui($, Q, J) { + let { gen: Y, data: X, opts: W } = $, G = Y.let("dataType", $$._`typeof ${X}`), U = Y.let("coerced", $$._`undefined`); + if (W.coerceTypes === "array") Y.if($$._`${G} == 'object' && Array.isArray(${X}) && ${X}.length == 1`, () => Y.assign(X, $$._`${X}[0]`).assign(G, $$._`typeof ${X}`).if(jB(Q, X, W.strictNumbers), () => Y.assign(U, X))); + Y.if($$._`${U} !== undefined`); + for (let q of J) if (HA.has(q) || q === "array" && W.coerceTypes === "array") H(q); + Y.else(), AB($), Y.endIf(), Y.if($$._`${U} !== undefined`, () => { + Y.assign(X, U), Hi($, U); + }); + function H(q) { + switch (q) { + case "string": + Y.elseIf($$._`${G} == "number" || ${G} == "boolean"`).assign(U, $$._`"" + ${X}`).elseIf($$._`${X} === null`).assign(U, $$._`""`); + return; + case "number": + Y.elseIf($$._`${G} == "boolean" || ${X} === null + || (${G} == "string" && ${X} && ${X} == +${X})`).assign(U, $$._`+${X}`); + return; + case "integer": + Y.elseIf($$._`${G} === "boolean" || ${X} === null + || (${G} === "string" && ${X} && ${X} == +${X} && !(${X} % 1))`).assign(U, $$._`+${X}`); + return; + case "boolean": + Y.elseIf($$._`${X} === "false" || ${X} === 0 || ${X} === null`).assign(U, false).elseIf($$._`${X} === "true" || ${X} === 1`).assign(U, true); + return; + case "null": + Y.elseIf($$._`${X} === "" || ${X} === 0 || ${X} === false`), Y.assign(U, null); + return; + case "array": + Y.elseIf($$._`${G} === "string" || ${G} === "number" + || ${G} === "boolean" || ${X} === null`).assign(U, $$._`[${X}]`); + } + } + } + function Hi({ gen: $, parentData: Q, parentDataProperty: J }, Y) { + $.if($$._`${Q} !== undefined`, () => $.assign($$._`${Q}[${J}]`, Y)); + } + function LB($, Q, J, Y = B9.Correct) { + let X = Y === B9.Correct ? $$.operators.EQ : $$.operators.NEQ, W; + switch ($) { + case "null": + return $$._`${Q} ${X} null`; + case "array": + W = $$._`Array.isArray(${Q})`; + break; + case "object": + W = $$._`${Q} && typeof ${Q} == "object" && !Array.isArray(${Q})`; + break; + case "integer": + W = G($$._`!(${Q} % 1) && !isNaN(${Q})`); + break; + case "number": + W = G(); + break; + default: + return $$._`typeof ${Q} ${X} ${$}`; + } + return Y === B9.Correct ? W : (0, $$.not)(W); + function G(U = $$.nil) { + return (0, $$.and)($$._`typeof ${Q} == "number"`, U, J ? $$._`isFinite(${Q})` : $$.nil); + } + } + KA.checkDataType = LB; + function jB($, Q, J, Y) { + if ($.length === 1) return LB($[0], Q, J, Y); + let X, W = (0, GA.toHash)($); + if (W.array && W.object) { + let G = $$._`typeof ${Q} != "object"`; + X = W.null ? G : $$._`!${Q} || ${G}`, delete W.null, delete W.array, delete W.object; + } else X = $$.nil; + if (W.number) delete W.integer; + for (let G in W) X = (0, $$.and)(X, LB(G, Q, J, Y)); + return X; + } + KA.checkDataTypes = jB; + var Ki = { message: ({ schema: $ }) => `must be ${$}`, params: ({ schema: $, schemaValue: Q }) => typeof $ == "string" ? $$._`{type: ${$}}` : $$._`{type: ${Q}}` }; + function AB($) { + let Q = qi($); + (0, Xi.reportError)(Q, Ki); + } + KA.reportTypeError = AB; + function qi($) { + let { gen: Q, data: J, schema: Y } = $, X = (0, GA.schemaRefOrVal)($, Y, "type"); + return { gen: Q, keyword: "type", data: J, schema: Y.type, schemaCode: X, schemaValue: X, parentSchema: Y, params: {}, it: $ }; + } +}); +var NA = I((BA) => { + Object.defineProperty(BA, "__esModule", { value: true }); + BA.assignDefaults = void 0; + var z9 = Q$(), Di = q$(); + function Fi($, Q) { + let { properties: J, items: Y } = $.schema; + if (Q === "object" && J) for (let X in J) VA($, X, J[X].default); + else if (Q === "array" && Array.isArray(Y)) Y.forEach((X, W) => VA($, W, X.default)); + } + BA.assignDefaults = Fi; + function VA($, Q, J) { + let { gen: Y, compositeRule: X, data: W, opts: G } = $; + if (J === void 0) return; + let U = z9._`${W}${(0, z9.getProperty)(Q)}`; + if (X) { + (0, Di.checkStrictMode)($, `default is ignored for: ${U}`); + return; + } + let H = z9._`${U} === undefined`; + if (G.useDefaults === "empty") H = z9._`${H} || ${U} === null || ${U} === ""`; + Y.if(H, z9._`${U} = ${(0, z9.stringify)(J)}`); + } +}); +var $4 = I((DA) => { + Object.defineProperty(DA, "__esModule", { value: true }); + DA.validateUnion = DA.validateArray = DA.usePattern = DA.callValidateCode = DA.schemaProperties = DA.allSchemaProperties = DA.noPropertyInData = DA.propertyInData = DA.isOwnProperty = DA.hasPropFunc = DA.reportMissingProp = DA.checkMissingProp = DA.checkReportMissingProp = void 0; + var v$ = Q$(), IB = q$(), g1 = $1(), Zi = q$(); + function Mi($, Q) { + let { gen: J, data: Y, it: X } = $; + J.if(PB(J, Y, Q, X.opts.ownProperties), () => { + $.setParams({ missingProperty: v$._`${Q}` }, true), $.error(); + }); + } + DA.checkReportMissingProp = Mi; + function Li({ gen: $, data: Q, it: { opts: J } }, Y, X) { + return (0, v$.or)(...Y.map((W) => (0, v$.and)(PB($, Q, W, J.ownProperties), v$._`${X} = ${W}`))); + } + DA.checkMissingProp = Li; + function ji($, Q) { + $.setParams({ missingProperty: Q }, true), $.error(); + } + DA.reportMissingProp = ji; + function wA($) { + return $.scopeValue("func", { ref: Object.prototype.hasOwnProperty, code: v$._`Object.prototype.hasOwnProperty` }); + } + DA.hasPropFunc = wA; + function RB($, Q, J) { + return v$._`${wA($)}.call(${Q}, ${J})`; + } + DA.isOwnProperty = RB; + function Ai($, Q, J, Y) { + let X = v$._`${Q}${(0, v$.getProperty)(J)} !== undefined`; + return Y ? v$._`${X} && ${RB($, Q, J)}` : X; + } + DA.propertyInData = Ai; + function PB($, Q, J, Y) { + let X = v$._`${Q}${(0, v$.getProperty)(J)} === undefined`; + return Y ? (0, v$.or)(X, (0, v$.not)(RB($, Q, J))) : X; + } + DA.noPropertyInData = PB; + function OA($) { + return $ ? Object.keys($).filter((Q) => Q !== "__proto__") : []; + } + DA.allSchemaProperties = OA; + function Ii($, Q) { + return OA(Q).filter((J) => !(0, IB.alwaysValidSchema)($, Q[J])); + } + DA.schemaProperties = Ii; + function Ri({ schemaCode: $, data: Q, it: { gen: J, topSchemaRef: Y, schemaPath: X, errorPath: W }, it: G }, U, H, q) { + let V = q ? v$._`${$}, ${Q}, ${Y}${X}` : Q, B = [[g1.default.instancePath, (0, v$.strConcat)(g1.default.instancePath, W)], [g1.default.parentData, G.parentData], [g1.default.parentDataProperty, G.parentDataProperty], [g1.default.rootData, g1.default.rootData]]; + if (G.opts.dynamicRef) B.push([g1.default.dynamicAnchors, g1.default.dynamicAnchors]); + let z4 = v$._`${V}, ${J.object(...B)}`; + return H !== v$.nil ? v$._`${U}.call(${H}, ${z4})` : v$._`${U}(${z4})`; + } + DA.callValidateCode = Ri; + var Pi = v$._`new RegExp`; + function Ei({ gen: $, it: { opts: Q } }, J) { + let Y = Q.unicodeRegExp ? "u" : "", { regExp: X } = Q.code, W = X(J, Y); + return $.scopeValue("pattern", { key: W.toString(), ref: W, code: v$._`${X.code === "new RegExp" ? Pi : (0, Zi.useFunc)($, X)}(${J}, ${Y})` }); + } + DA.usePattern = Ei; + function bi($) { + let { gen: Q, data: J, keyword: Y, it: X } = $, W = Q.name("valid"); + if (X.allErrors) { + let U = Q.let("valid", true); + return G(() => Q.assign(U, false)), U; + } + return Q.var(W, true), G(() => Q.break()), W; + function G(U) { + let H = Q.const("len", v$._`${J}.length`); + Q.forRange("i", 0, H, (q) => { + $.subschema({ keyword: Y, dataProp: q, dataPropType: IB.Type.Num }, W), Q.if((0, v$.not)(W), U); + }); + } + } + DA.validateArray = bi; + function _i($) { + let { gen: Q, schema: J, keyword: Y, it: X } = $; + if (!Array.isArray(J)) throw Error("ajv implementation error"); + if (J.some((H) => (0, IB.alwaysValidSchema)(X, H)) && !X.opts.unevaluated) return; + let G = Q.let("valid", false), U = Q.name("_valid"); + Q.block(() => J.forEach((H, q) => { + let V = $.subschema({ keyword: Y, schemaProp: q, compositeRule: true }, U); + if (Q.assign(G, v$._`${G} || ${U}`), !$.mergeValidEvaluated(V, U)) Q.if((0, v$.not)(G)); + })), $.result(G, () => $.reset(), () => $.error(true)); + } + DA.validateUnion = _i; +}); +var AA = I((LA) => { + Object.defineProperty(LA, "__esModule", { value: true }); + LA.validateKeywordUsage = LA.validSchemaType = LA.funcKeywordCode = LA.macroKeywordCode = void 0; + var D6 = Q$(), T0 = $1(), li = $4(), ci = PJ(); + function pi($, Q) { + let { gen: J, keyword: Y, schema: X, parentSchema: W, it: G } = $, U = Q.macro.call(G.self, X, W, G), H = MA(J, Y, U); + if (G.opts.validateSchema !== false) G.self.validateSchema(U, true); + let q = J.name("valid"); + $.subschema({ schema: U, schemaPath: D6.nil, errSchemaPath: `${G.errSchemaPath}/${Y}`, topSchemaRef: H, compositeRule: true }, q), $.pass(q, () => $.error(true)); + } + LA.macroKeywordCode = pi; + function di($, Q) { + var J; + let { gen: Y, keyword: X, schema: W, parentSchema: G, $data: U, it: H } = $; + ni(H, Q); + let q = !U && Q.compile ? Q.compile.call(H.self, W, G, H) : Q.validate, V = MA(Y, X, q), B = Y.let("valid"); + $.block$data(B, z4), $.ok((J = Q.valid) !== null && J !== void 0 ? J : B); + function z4() { + if (Q.errors === false) { + if (O(), Q.modifying) ZA($); + D(() => $.error()); + } else { + let M = Q.async ? N() : w(); + if (Q.modifying) ZA($); + D(() => ii($, M)); + } + } + function N() { + let M = Y.let("ruleErrs", null); + return Y.try(() => O(D6._`await `), (j) => Y.assign(B, false).if(D6._`${j} instanceof ${H.ValidationError}`, () => Y.assign(M, D6._`${j}.errors`), () => Y.throw(j))), M; + } + function w() { + let M = D6._`${V}.errors`; + return Y.assign(M, null), O(D6.nil), M; + } + function O(M = Q.async ? D6._`await ` : D6.nil) { + let j = H.opts.passContext ? T0.default.this : T0.default.self, A = !("compile" in Q && !U || Q.schema === false); + Y.assign(B, D6._`${M}${(0, li.callValidateCode)($, V, j, A)}`, Q.modifying); + } + function D(M) { + var j; + Y.if((0, D6.not)((j = Q.valid) !== null && j !== void 0 ? j : B), M); + } + } + LA.funcKeywordCode = di; + function ZA($) { + let { gen: Q, data: J, it: Y } = $; + Q.if(Y.parentData, () => Q.assign(J, D6._`${Y.parentData}[${Y.parentDataProperty}]`)); + } + function ii($, Q) { + let { gen: J } = $; + J.if(D6._`Array.isArray(${Q})`, () => { + J.assign(T0.default.vErrors, D6._`${T0.default.vErrors} === null ? ${Q} : ${T0.default.vErrors}.concat(${Q})`).assign(T0.default.errors, D6._`${T0.default.vErrors}.length`), (0, ci.extendErrors)($); + }, () => $.error()); + } + function ni({ schemaEnv: $ }, Q) { + if (Q.async && !$.$async) throw Error("async keyword in sync schema"); + } + function MA($, Q, J) { + if (J === void 0) throw Error(`keyword "${Q}" failed to compile`); + return $.scopeValue("keyword", typeof J == "function" ? { ref: J } : { ref: J, code: (0, D6.stringify)(J) }); + } + function ri($, Q, J = false) { + return !Q.length || Q.some((Y) => Y === "array" ? Array.isArray($) : Y === "object" ? $ && typeof $ == "object" && !Array.isArray($) : typeof $ == Y || J && typeof $ > "u"); + } + LA.validSchemaType = ri; + function oi({ schema: $, opts: Q, self: J, errSchemaPath: Y }, X, W) { + if (Array.isArray(X.keyword) ? !X.keyword.includes(W) : X.keyword !== W) throw Error("ajv implementation error"); + let G = X.dependencies; + if (G === null || G === void 0 ? void 0 : G.some((U) => !Object.prototype.hasOwnProperty.call($, U))) throw Error(`parent schema must have dependencies of ${W}: ${G.join(",")}`); + if (X.validateSchema) { + if (!X.validateSchema($[W])) { + let H = `keyword "${W}" value is invalid at path "${Y}": ` + J.errorsText(X.validateSchema.errors); + if (Q.validateSchema === "log") J.logger.error(H); + else throw Error(H); + } + } + } + LA.validateKeywordUsage = oi; +}); +var EA = I((RA) => { + Object.defineProperty(RA, "__esModule", { value: true }); + RA.extendSubschemaMode = RA.extendSubschemaData = RA.getSubschema = void 0; + var E4 = Q$(), IA = q$(); + function ei($, { keyword: Q, schemaProp: J, schema: Y, schemaPath: X, errSchemaPath: W, topSchemaRef: G }) { + if (Q !== void 0 && Y !== void 0) throw Error('both "keyword" and "schema" passed, only one allowed'); + if (Q !== void 0) { + let U = $.schema[Q]; + return J === void 0 ? { schema: U, schemaPath: E4._`${$.schemaPath}${(0, E4.getProperty)(Q)}`, errSchemaPath: `${$.errSchemaPath}/${Q}` } : { schema: U[J], schemaPath: E4._`${$.schemaPath}${(0, E4.getProperty)(Q)}${(0, E4.getProperty)(J)}`, errSchemaPath: `${$.errSchemaPath}/${Q}/${(0, IA.escapeFragment)(J)}` }; + } + if (Y !== void 0) { + if (X === void 0 || W === void 0 || G === void 0) throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"'); + return { schema: Y, schemaPath: X, topSchemaRef: G, errSchemaPath: W }; + } + throw Error('either "keyword" or "schema" must be passed'); + } + RA.getSubschema = ei; + function $n($, Q, { dataProp: J, dataPropType: Y, data: X, dataTypes: W, propertyName: G }) { + if (X !== void 0 && J !== void 0) throw Error('both "data" and "dataProp" passed, only one allowed'); + let { gen: U } = Q; + if (J !== void 0) { + let { errorPath: q, dataPathArr: V, opts: B } = Q, z4 = U.let("data", E4._`${Q.data}${(0, E4.getProperty)(J)}`, true); + H(z4), $.errorPath = E4.str`${q}${(0, IA.getErrorPath)(J, Y, B.jsPropertySyntax)}`, $.parentDataProperty = E4._`${J}`, $.dataPathArr = [...V, $.parentDataProperty]; + } + if (X !== void 0) { + let q = X instanceof E4.Name ? X : U.let("data", X, true); + if (H(q), G !== void 0) $.propertyName = G; + } + if (W) $.dataTypes = W; + function H(q) { + $.data = q, $.dataLevel = Q.dataLevel + 1, $.dataTypes = [], Q.definedProperties = /* @__PURE__ */ new Set(), $.parentData = Q.data, $.dataNames = [...Q.dataNames, q]; + } + } + RA.extendSubschemaData = $n; + function Qn($, { jtdDiscriminator: Q, jtdMetadata: J, compositeRule: Y, createErrors: X, allErrors: W }) { + if (Y !== void 0) $.compositeRule = Y; + if (X !== void 0) $.createErrors = X; + if (W !== void 0) $.allErrors = W; + $.jtdDiscriminator = Q, $.jtdMetadata = J; + } + RA.extendSubschemaMode = Qn; +}); +var EB = I((Ew$, bA) => { + bA.exports = function $(Q, J) { + if (Q === J) return true; + if (Q && J && typeof Q == "object" && typeof J == "object") { + if (Q.constructor !== J.constructor) return false; + var Y, X, W; + if (Array.isArray(Q)) { + if (Y = Q.length, Y != J.length) return false; + for (X = Y; X-- !== 0; ) if (!$(Q[X], J[X])) return false; + return true; + } + if (Q.constructor === RegExp) return Q.source === J.source && Q.flags === J.flags; + if (Q.valueOf !== Object.prototype.valueOf) return Q.valueOf() === J.valueOf(); + if (Q.toString !== Object.prototype.toString) return Q.toString() === J.toString(); + if (W = Object.keys(Q), Y = W.length, Y !== Object.keys(J).length) return false; + for (X = Y; X-- !== 0; ) if (!Object.prototype.hasOwnProperty.call(J, W[X])) return false; + for (X = Y; X-- !== 0; ) { + var G = W[X]; + if (!$(Q[G], J[G])) return false; + } + return true; + } + return Q !== Q && J !== J; + }; +}); +var kA = I((bw$, _A) => { + var h1 = _A.exports = function($, Q, J) { + if (typeof Q == "function") J = Q, Q = {}; + J = Q.cb || J; + var Y = typeof J == "function" ? J : J.pre || function() { + }, X = J.post || function() { + }; + IW(Q, Y, X, $, "", $); + }; + h1.keywords = { additionalItems: true, items: true, contains: true, additionalProperties: true, propertyNames: true, not: true, if: true, then: true, else: true }; + h1.arrayKeywords = { items: true, allOf: true, anyOf: true, oneOf: true }; + h1.propsKeywords = { $defs: true, definitions: true, properties: true, patternProperties: true, dependencies: true }; + h1.skipKeywords = { default: true, enum: true, const: true, required: true, maximum: true, minimum: true, exclusiveMaximum: true, exclusiveMinimum: true, multipleOf: true, maxLength: true, minLength: true, pattern: true, format: true, maxItems: true, minItems: true, uniqueItems: true, maxProperties: true, minProperties: true }; + function IW($, Q, J, Y, X, W, G, U, H, q) { + if (Y && typeof Y == "object" && !Array.isArray(Y)) { + Q(Y, X, W, G, U, H, q); + for (var V in Y) { + var B = Y[V]; + if (Array.isArray(B)) { + if (V in h1.arrayKeywords) for (var z4 = 0; z4 < B.length; z4++) IW($, Q, J, B[z4], X + "/" + V + "/" + z4, W, X, V, Y, z4); + } else if (V in h1.propsKeywords) { + if (B && typeof B == "object") for (var N in B) IW($, Q, J, B[N], X + "/" + V + "/" + Yn(N), W, X, V, Y, N); + } else if (V in h1.keywords || $.allKeys && !(V in h1.skipKeywords)) IW($, Q, J, B, X + "/" + V, W, X, V, Y); + } + J(Y, X, W, G, U, H, q); + } + } + function Yn($) { + return $.replace(/~/g, "~0").replace(/\//g, "~1"); + } +}); +var bJ = I((TA) => { + Object.defineProperty(TA, "__esModule", { value: true }); + TA.getSchemaRefs = TA.resolveUrl = TA.normalizeId = TA._getFullPath = TA.getFullPath = TA.inlineRef = void 0; + var Wn = q$(), Gn = EB(), Un = kA(), Hn = /* @__PURE__ */ new Set(["type", "format", "pattern", "maxLength", "minLength", "maxProperties", "minProperties", "maxItems", "minItems", "maximum", "minimum", "uniqueItems", "multipleOf", "required", "enum", "const"]); + function Kn($, Q = true) { + if (typeof $ == "boolean") return true; + if (Q === true) return !bB($); + if (!Q) return false; + return SA($) <= Q; + } + TA.inlineRef = Kn; + var qn = /* @__PURE__ */ new Set(["$ref", "$recursiveRef", "$recursiveAnchor", "$dynamicRef", "$dynamicAnchor"]); + function bB($) { + for (let Q in $) { + if (qn.has(Q)) return true; + let J = $[Q]; + if (Array.isArray(J) && J.some(bB)) return true; + if (typeof J == "object" && bB(J)) return true; + } + return false; + } + function SA($) { + let Q = 0; + for (let J in $) { + if (J === "$ref") return 1 / 0; + if (Q++, Hn.has(J)) continue; + if (typeof $[J] == "object") (0, Wn.eachItem)($[J], (Y) => Q += SA(Y)); + if (Q === 1 / 0) return 1 / 0; + } + return Q; + } + function vA($, Q = "", J) { + if (J !== false) Q = N9(Q); + let Y = $.parse(Q); + return CA($, Y); + } + TA.getFullPath = vA; + function CA($, Q) { + return $.serialize(Q).split("#")[0] + "#"; + } + TA._getFullPath = CA; + var Vn = /#\/?$/; + function N9($) { + return $ ? $.replace(Vn, "") : ""; + } + TA.normalizeId = N9; + function Bn($, Q, J) { + return J = N9(J), $.resolve(Q, J); + } + TA.resolveUrl = Bn; + var zn = /^[a-z_][-a-z0-9._]*$/i; + function Nn($, Q) { + if (typeof $ == "boolean") return {}; + let { schemaId: J, uriResolver: Y } = this.opts, X = N9($[J] || Q), W = { "": X }, G = vA(Y, X, false), U = {}, H = /* @__PURE__ */ new Set(); + return Un($, { allKeys: true }, (B, z4, N, w) => { + if (w === void 0) return; + let O = G + z4, D = W[w]; + if (typeof B[J] == "string") D = M.call(this, B[J]); + j.call(this, B.$anchor), j.call(this, B.$dynamicAnchor), W[z4] = D; + function M(A) { + let S = this.opts.uriResolver.resolve; + if (A = N9(D ? S(D, A) : A), H.has(A)) throw V(A); + H.add(A); + let u = this.refs[A]; + if (typeof u == "string") u = this.refs[u]; + if (typeof u == "object") q(B, u.schema, A); + else if (A !== N9(O)) if (A[0] === "#") q(B, U[A], A), U[A] = B; + else this.refs[A] = O; + return A; + } + function j(A) { + if (typeof A == "string") { + if (!zn.test(A)) throw Error(`invalid anchor "${A}"`); + M.call(this, `#${A}`); + } + } + }), U; + function q(B, z4, N) { + if (z4 !== void 0 && !Gn(B, z4)) throw V(N); + } + function V(B) { + return Error(`reference "${B}" resolves to more than one schema`); + } + } + TA.getSchemaRefs = Nn; +}); +var SJ = I((tA) => { + Object.defineProperty(tA, "__esModule", { value: true }); + tA.getData = tA.KeywordCxt = tA.validateFunctionCode = void 0; + var uA = ej(), yA = EJ(), kB = MB(), RW = EJ(), Mn = NA(), kJ = AA(), _B2 = EA(), p = Q$(), a = $1(), Ln = bJ(), Q1 = q$(), _J2 = PJ(); + function jn($) { + if (cA($)) { + if (pA($), lA($)) { + Rn($); + return; + } + } + mA($, () => (0, uA.topBoolOrEmptySchema)($)); + } + tA.validateFunctionCode = jn; + function mA({ gen: $, validateName: Q, schema: J, schemaEnv: Y, opts: X }, W) { + if (X.code.es5) $.func(Q, p._`${a.default.data}, ${a.default.valCxt}`, Y.$async, () => { + $.code(p._`"use strict"; ${fA(J, X)}`), In($, X), $.code(W); + }); + else $.func(Q, p._`${a.default.data}, ${An(X)}`, Y.$async, () => $.code(fA(J, X)).code(W)); + } + function An($) { + return p._`{${a.default.instancePath}="", ${a.default.parentData}, ${a.default.parentDataProperty}, ${a.default.rootData}=${a.default.data}${$.dynamicRef ? p._`, ${a.default.dynamicAnchors}={}` : p.nil}}={}`; + } + function In($, Q) { + $.if(a.default.valCxt, () => { + if ($.var(a.default.instancePath, p._`${a.default.valCxt}.${a.default.instancePath}`), $.var(a.default.parentData, p._`${a.default.valCxt}.${a.default.parentData}`), $.var(a.default.parentDataProperty, p._`${a.default.valCxt}.${a.default.parentDataProperty}`), $.var(a.default.rootData, p._`${a.default.valCxt}.${a.default.rootData}`), Q.dynamicRef) $.var(a.default.dynamicAnchors, p._`${a.default.valCxt}.${a.default.dynamicAnchors}`); + }, () => { + if ($.var(a.default.instancePath, p._`""`), $.var(a.default.parentData, p._`undefined`), $.var(a.default.parentDataProperty, p._`undefined`), $.var(a.default.rootData, a.default.data), Q.dynamicRef) $.var(a.default.dynamicAnchors, p._`{}`); + }); + } + function Rn($) { + let { schema: Q, opts: J, gen: Y } = $; + mA($, () => { + if (J.$comment && Q.$comment) iA($); + if (kn($), Y.let(a.default.vErrors, null), Y.let(a.default.errors, 0), J.unevaluated) Pn($); + dA($), Cn($); + }); + return; + } + function Pn($) { + let { gen: Q, validateName: J } = $; + $.evaluated = Q.const("evaluated", p._`${J}.evaluated`), Q.if(p._`${$.evaluated}.dynamicProps`, () => Q.assign(p._`${$.evaluated}.props`, p._`undefined`)), Q.if(p._`${$.evaluated}.dynamicItems`, () => Q.assign(p._`${$.evaluated}.items`, p._`undefined`)); + } + function fA($, Q) { + let J = typeof $ == "object" && $[Q.schemaId]; + return J && (Q.code.source || Q.code.process) ? p._`/*# sourceURL=${J} */` : p.nil; + } + function En($, Q) { + if (cA($)) { + if (pA($), lA($)) { + bn($, Q); + return; + } + } + (0, uA.boolOrEmptySchema)($, Q); + } + function lA({ schema: $, self: Q }) { + if (typeof $ == "boolean") return !$; + for (let J in $) if (Q.RULES.all[J]) return true; + return false; + } + function cA($) { + return typeof $.schema != "boolean"; + } + function bn($, Q) { + let { schema: J, gen: Y, opts: X } = $; + if (X.$comment && J.$comment) iA($); + Sn($), vn($); + let W = Y.const("_errs", a.default.errors); + dA($, W), Y.var(Q, p._`${W} === ${a.default.errors}`); + } + function pA($) { + (0, Q1.checkUnknownRules)($), _n($); + } + function dA($, Q) { + if ($.opts.jtd) return gA($, [], false, Q); + let J = (0, yA.getSchemaTypes)($.schema), Y = (0, yA.coerceAndCheckDataType)($, J); + gA($, J, !Y, Q); + } + function _n($) { + let { schema: Q, errSchemaPath: J, opts: Y, self: X } = $; + if (Q.$ref && Y.ignoreKeywordsWithRef && (0, Q1.schemaHasRulesButRef)(Q, X.RULES)) X.logger.warn(`$ref: keywords ignored in schema at path "${J}"`); + } + function kn($) { + let { schema: Q, opts: J } = $; + if (Q.default !== void 0 && J.useDefaults && J.strictSchema) (0, Q1.checkStrictMode)($, "default is ignored in the schema root"); + } + function Sn($) { + let Q = $.schema[$.opts.schemaId]; + if (Q) $.baseId = (0, Ln.resolveUrl)($.opts.uriResolver, $.baseId, Q); + } + function vn($) { + if ($.schema.$async && !$.schemaEnv.$async) throw Error("async schema in sync schema"); + } + function iA({ gen: $, schemaEnv: Q, schema: J, errSchemaPath: Y, opts: X }) { + let W = J.$comment; + if (X.$comment === true) $.code(p._`${a.default.self}.logger.log(${W})`); + else if (typeof X.$comment == "function") { + let G = p.str`${Y}/$comment`, U = $.scopeValue("root", { ref: Q.root }); + $.code(p._`${a.default.self}.opts.$comment(${W}, ${G}, ${U}.schema)`); + } + } + function Cn($) { + let { gen: Q, schemaEnv: J, validateName: Y, ValidationError: X, opts: W } = $; + if (J.$async) Q.if(p._`${a.default.errors} === 0`, () => Q.return(a.default.data), () => Q.throw(p._`new ${X}(${a.default.vErrors})`)); + else { + if (Q.assign(p._`${Y}.errors`, a.default.vErrors), W.unevaluated) Tn($); + Q.return(p._`${a.default.errors} === 0`); + } + } + function Tn({ gen: $, evaluated: Q, props: J, items: Y }) { + if (J instanceof p.Name) $.assign(p._`${Q}.props`, J); + if (Y instanceof p.Name) $.assign(p._`${Q}.items`, Y); + } + function gA($, Q, J, Y) { + let { gen: X, schema: W, data: G, allErrors: U, opts: H, self: q } = $, { RULES: V } = q; + if (W.$ref && (H.ignoreKeywordsWithRef || !(0, Q1.schemaHasRulesButRef)(W, V))) { + X.block(() => rA($, "$ref", V.all.$ref.definition)); + return; + } + if (!H.jtd) xn($, Q); + X.block(() => { + for (let z4 of V.rules) B(z4); + B(V.post); + }); + function B(z4) { + if (!(0, kB.shouldUseGroup)(W, z4)) return; + if (z4.type) { + if (X.if((0, RW.checkDataType)(z4.type, G, H.strictNumbers)), hA($, z4), Q.length === 1 && Q[0] === z4.type && J) X.else(), (0, RW.reportTypeError)($); + X.endIf(); + } else hA($, z4); + if (!U) X.if(p._`${a.default.errors} === ${Y || 0}`); + } + } + function hA($, Q) { + let { gen: J, schema: Y, opts: { useDefaults: X } } = $; + if (X) (0, Mn.assignDefaults)($, Q.type); + J.block(() => { + for (let W of Q.rules) if ((0, kB.shouldUseRule)(Y, W)) rA($, W.keyword, W.definition, Q.type); + }); + } + function xn($, Q) { + if ($.schemaEnv.meta || !$.opts.strictTypes) return; + if (yn($, Q), !$.opts.allowUnionTypes) fn($, Q); + gn($, $.dataTypes); + } + function yn($, Q) { + if (!Q.length) return; + if (!$.dataTypes.length) { + $.dataTypes = Q; + return; + } + Q.forEach((J) => { + if (!nA($.dataTypes, J)) SB($, `type "${J}" not allowed by context "${$.dataTypes.join(",")}"`); + }), un($, Q); + } + function fn($, Q) { + if (Q.length > 1 && !(Q.length === 2 && Q.includes("null"))) SB($, "use allowUnionTypes to allow union type keyword"); + } + function gn($, Q) { + let J = $.self.RULES.all; + for (let Y in J) { + let X = J[Y]; + if (typeof X == "object" && (0, kB.shouldUseRule)($.schema, X)) { + let { type: W } = X.definition; + if (W.length && !W.some((G) => hn(Q, G))) SB($, `missing type "${W.join(",")}" for keyword "${Y}"`); + } + } + } + function hn($, Q) { + return $.includes(Q) || Q === "number" && $.includes("integer"); + } + function nA($, Q) { + return $.includes(Q) || Q === "integer" && $.includes("number"); + } + function un($, Q) { + let J = []; + for (let Y of $.dataTypes) if (nA(Q, Y)) J.push(Y); + else if (Q.includes("integer") && Y === "number") J.push("integer"); + $.dataTypes = J; + } + function SB($, Q) { + let J = $.schemaEnv.baseId + $.errSchemaPath; + Q += ` at "${J}" (strictTypes)`, (0, Q1.checkStrictMode)($, Q, $.opts.strictTypes); + } + class vB { + constructor($, Q, J) { + if ((0, kJ.validateKeywordUsage)($, Q, J), this.gen = $.gen, this.allErrors = $.allErrors, this.keyword = J, this.data = $.data, this.schema = $.schema[J], this.$data = Q.$data && $.opts.$data && this.schema && this.schema.$data, this.schemaValue = (0, Q1.schemaRefOrVal)($, this.schema, J, this.$data), this.schemaType = Q.schemaType, this.parentSchema = $.schema, this.params = {}, this.it = $, this.def = Q, this.$data) this.schemaCode = $.gen.const("vSchema", oA(this.$data, $)); + else if (this.schemaCode = this.schemaValue, !(0, kJ.validSchemaType)(this.schema, Q.schemaType, Q.allowUndefined)) throw Error(`${J} value must be ${JSON.stringify(Q.schemaType)}`); + if ("code" in Q ? Q.trackErrors : Q.errors !== false) this.errsCount = $.gen.const("_errs", a.default.errors); + } + result($, Q, J) { + this.failResult((0, p.not)($), Q, J); + } + failResult($, Q, J) { + if (this.gen.if($), J) J(); + else this.error(); + if (Q) { + if (this.gen.else(), Q(), this.allErrors) this.gen.endIf(); + } else if (this.allErrors) this.gen.endIf(); + else this.gen.else(); + } + pass($, Q) { + this.failResult((0, p.not)($), void 0, Q); + } + fail($) { + if ($ === void 0) { + if (this.error(), !this.allErrors) this.gen.if(false); + return; + } + if (this.gen.if($), this.error(), this.allErrors) this.gen.endIf(); + else this.gen.else(); + } + fail$data($) { + if (!this.$data) return this.fail($); + let { schemaCode: Q } = this; + this.fail(p._`${Q} !== undefined && (${(0, p.or)(this.invalid$data(), $)})`); + } + error($, Q, J) { + if (Q) { + this.setParams(Q), this._error($, J), this.setParams({}); + return; + } + this._error($, J); + } + _error($, Q) { + ($ ? _J2.reportExtraError : _J2.reportError)(this, this.def.error, Q); + } + $dataError() { + (0, _J2.reportError)(this, this.def.$dataError || _J2.keyword$DataError); + } + reset() { + if (this.errsCount === void 0) throw Error('add "trackErrors" to keyword definition'); + (0, _J2.resetErrorsCount)(this.gen, this.errsCount); + } + ok($) { + if (!this.allErrors) this.gen.if($); + } + setParams($, Q) { + if (Q) Object.assign(this.params, $); + else this.params = $; + } + block$data($, Q, J = p.nil) { + this.gen.block(() => { + this.check$data($, J), Q(); + }); + } + check$data($ = p.nil, Q = p.nil) { + if (!this.$data) return; + let { gen: J, schemaCode: Y, schemaType: X, def: W } = this; + if (J.if((0, p.or)(p._`${Y} === undefined`, Q)), $ !== p.nil) J.assign($, true); + if (X.length || W.validateSchema) { + if (J.elseIf(this.invalid$data()), this.$dataError(), $ !== p.nil) J.assign($, false); + } + J.else(); + } + invalid$data() { + let { gen: $, schemaCode: Q, schemaType: J, def: Y, it: X } = this; + return (0, p.or)(W(), G()); + function W() { + if (J.length) { + if (!(Q instanceof p.Name)) throw Error("ajv implementation error"); + let U = Array.isArray(J) ? J : [J]; + return p._`${(0, RW.checkDataTypes)(U, Q, X.opts.strictNumbers, RW.DataType.Wrong)}`; + } + return p.nil; + } + function G() { + if (Y.validateSchema) { + let U = $.scopeValue("validate$data", { ref: Y.validateSchema }); + return p._`!${U}(${Q})`; + } + return p.nil; + } + } + subschema($, Q) { + let J = (0, _B2.getSubschema)(this.it, $); + (0, _B2.extendSubschemaData)(J, this.it, $), (0, _B2.extendSubschemaMode)(J, $); + let Y = { ...this.it, ...J, items: void 0, props: void 0 }; + return En(Y, Q), Y; + } + mergeEvaluated($, Q) { + let { it: J, gen: Y } = this; + if (!J.opts.unevaluated) return; + if (J.props !== true && $.props !== void 0) J.props = Q1.mergeEvaluated.props(Y, $.props, J.props, Q); + if (J.items !== true && $.items !== void 0) J.items = Q1.mergeEvaluated.items(Y, $.items, J.items, Q); + } + mergeValidEvaluated($, Q) { + let { it: J, gen: Y } = this; + if (J.opts.unevaluated && (J.props !== true || J.items !== true)) return Y.if(Q, () => this.mergeEvaluated($, p.Name)), true; + } + } + tA.KeywordCxt = vB; + function rA($, Q, J, Y) { + let X = new vB($, J, Q); + if ("code" in J) J.code(X, Y); + else if (X.$data && J.validate) (0, kJ.funcKeywordCode)(X, J); + else if ("macro" in J) (0, kJ.macroKeywordCode)(X, J); + else if (J.compile || J.validate) (0, kJ.funcKeywordCode)(X, J); + } + var mn = /^\/(?:[^~]|~0|~1)*$/, ln = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/; + function oA($, { dataLevel: Q, dataNames: J, dataPathArr: Y }) { + let X, W; + if ($ === "") return a.default.rootData; + if ($[0] === "/") { + if (!mn.test($)) throw Error(`Invalid JSON-pointer: ${$}`); + X = $, W = a.default.rootData; + } else { + let q = ln.exec($); + if (!q) throw Error(`Invalid JSON-pointer: ${$}`); + let V = +q[1]; + if (X = q[2], X === "#") { + if (V >= Q) throw Error(H("property/index", V)); + return Y[Q - V]; + } + if (V > Q) throw Error(H("data", V)); + if (W = J[Q - V], !X) return W; + } + let G = W, U = X.split("/"); + for (let q of U) if (q) W = p._`${W}${(0, p.getProperty)((0, Q1.unescapeJsonPointer)(q))}`, G = p._`${G} && ${W}`; + return G; + function H(q, V) { + return `Cannot access ${q} ${V} levels up, current level is ${Q}`; + } + } + tA.getData = oA; +}); +var PW = I((eA) => { + Object.defineProperty(eA, "__esModule", { value: true }); + class sA extends Error { + constructor($) { + super("validation failed"); + this.errors = $, this.ajv = this.validation = true; + } + } + eA.default = sA; +}); +var vJ = I((QI) => { + Object.defineProperty(QI, "__esModule", { value: true }); + var CB = bJ(); + class $I extends Error { + constructor($, Q, J, Y) { + super(Y || `can't resolve reference ${J} from id ${Q}`); + this.missingRef = (0, CB.resolveUrl)($, Q, J), this.missingSchema = (0, CB.normalizeId)((0, CB.getFullPath)($, this.missingRef)); + } + } + QI.default = $I; +}); +var bW = I((YI) => { + Object.defineProperty(YI, "__esModule", { value: true }); + YI.resolveSchema = YI.getCompilingSchema = YI.resolveRef = YI.compileSchema = YI.SchemaEnv = void 0; + var N4 = Q$(), rn = PW(), x0 = $1(), w4 = bJ(), JI = q$(), on = SJ(); + class CJ { + constructor($) { + var Q; + this.refs = {}, this.dynamicAnchors = {}; + let J; + if (typeof $.schema == "object") J = $.schema; + this.schema = $.schema, this.schemaId = $.schemaId, this.root = $.root || this, this.baseId = (Q = $.baseId) !== null && Q !== void 0 ? Q : (0, w4.normalizeId)(J === null || J === void 0 ? void 0 : J[$.schemaId || "$id"]), this.schemaPath = $.schemaPath, this.localRefs = $.localRefs, this.meta = $.meta, this.$async = J === null || J === void 0 ? void 0 : J.$async, this.refs = {}; + } + } + YI.SchemaEnv = CJ; + function xB($) { + let Q = XI.call(this, $); + if (Q) return Q; + let J = (0, w4.getFullPath)(this.opts.uriResolver, $.root.baseId), { es5: Y, lines: X } = this.opts.code, { ownProperties: W } = this.opts, G = new N4.CodeGen(this.scope, { es5: Y, lines: X, ownProperties: W }), U; + if ($.$async) U = G.scopeValue("Error", { ref: rn.default, code: N4._`require("ajv/dist/runtime/validation_error").default` }); + let H = G.scopeName("validate"); + $.validateName = H; + let q = { gen: G, allErrors: this.opts.allErrors, data: x0.default.data, parentData: x0.default.parentData, parentDataProperty: x0.default.parentDataProperty, dataNames: [x0.default.data], dataPathArr: [N4.nil], dataLevel: 0, dataTypes: [], definedProperties: /* @__PURE__ */ new Set(), topSchemaRef: G.scopeValue("schema", this.opts.code.source === true ? { ref: $.schema, code: (0, N4.stringify)($.schema) } : { ref: $.schema }), validateName: H, ValidationError: U, schema: $.schema, schemaEnv: $, rootId: J, baseId: $.baseId || J, schemaPath: N4.nil, errSchemaPath: $.schemaPath || (this.opts.jtd ? "" : "#"), errorPath: N4._`""`, opts: this.opts, self: this }, V; + try { + this._compilations.add($), (0, on.validateFunctionCode)(q), G.optimize(this.opts.code.optimize); + let B = G.toString(); + if (V = `${G.scopeRefs(x0.default.scope)}return ${B}`, this.opts.code.process) V = this.opts.code.process(V, $); + let N = Function(`${x0.default.self}`, `${x0.default.scope}`, V)(this, this.scope.get()); + if (this.scope.value(H, { ref: N }), N.errors = null, N.schema = $.schema, N.schemaEnv = $, $.$async) N.$async = true; + if (this.opts.code.source === true) N.source = { validateName: H, validateCode: B, scopeValues: G._values }; + if (this.opts.unevaluated) { + let { props: w, items: O } = q; + if (N.evaluated = { props: w instanceof N4.Name ? void 0 : w, items: O instanceof N4.Name ? void 0 : O, dynamicProps: w instanceof N4.Name, dynamicItems: O instanceof N4.Name }, N.source) N.source.evaluated = (0, N4.stringify)(N.evaluated); + } + return $.validate = N, $; + } catch (B) { + if (delete $.validate, delete $.validateName, V) this.logger.error("Error compiling schema, function code:", V); + throw B; + } finally { + this._compilations.delete($); + } + } + YI.compileSchema = xB; + function tn($, Q, J) { + var Y; + J = (0, w4.resolveUrl)(this.opts.uriResolver, Q, J); + let X = $.refs[J]; + if (X) return X; + let W = en.call(this, $, J); + if (W === void 0) { + let G = (Y = $.localRefs) === null || Y === void 0 ? void 0 : Y[J], { schemaId: U } = this.opts; + if (G) W = new CJ({ schema: G, schemaId: U, root: $, baseId: Q }); + } + if (W === void 0) return; + return $.refs[J] = an.call(this, W); + } + YI.resolveRef = tn; + function an($) { + if ((0, w4.inlineRef)($.schema, this.opts.inlineRefs)) return $.schema; + return $.validate ? $ : xB.call(this, $); + } + function XI($) { + for (let Q of this._compilations) if (sn(Q, $)) return Q; + } + YI.getCompilingSchema = XI; + function sn($, Q) { + return $.schema === Q.schema && $.root === Q.root && $.baseId === Q.baseId; + } + function en($, Q) { + let J; + while (typeof (J = this.refs[Q]) == "string") Q = J; + return J || this.schemas[Q] || EW.call(this, $, Q); + } + function EW($, Q) { + let J = this.opts.uriResolver.parse(Q), Y = (0, w4._getFullPath)(this.opts.uriResolver, J), X = (0, w4.getFullPath)(this.opts.uriResolver, $.baseId, void 0); + if (Object.keys($.schema).length > 0 && Y === X) return TB.call(this, J, $); + let W = (0, w4.normalizeId)(Y), G = this.refs[W] || this.schemas[W]; + if (typeof G == "string") { + let U = EW.call(this, $, G); + if (typeof (U === null || U === void 0 ? void 0 : U.schema) !== "object") return; + return TB.call(this, J, U); + } + if (typeof (G === null || G === void 0 ? void 0 : G.schema) !== "object") return; + if (!G.validate) xB.call(this, G); + if (W === (0, w4.normalizeId)(Q)) { + let { schema: U } = G, { schemaId: H } = this.opts, q = U[H]; + if (q) X = (0, w4.resolveUrl)(this.opts.uriResolver, X, q); + return new CJ({ schema: U, schemaId: H, root: $, baseId: X }); + } + return TB.call(this, J, G); + } + YI.resolveSchema = EW; + var $r = /* @__PURE__ */ new Set(["properties", "patternProperties", "enum", "dependencies", "definitions"]); + function TB($, { baseId: Q, schema: J, root: Y }) { + var X; + if (((X = $.fragment) === null || X === void 0 ? void 0 : X[0]) !== "/") return; + for (let U of $.fragment.slice(1).split("/")) { + if (typeof J === "boolean") return; + let H = J[(0, JI.unescapeFragment)(U)]; + if (H === void 0) return; + J = H; + let q = typeof J === "object" && J[this.opts.schemaId]; + if (!$r.has(U) && q) Q = (0, w4.resolveUrl)(this.opts.uriResolver, Q, q); + } + let W; + if (typeof J != "boolean" && J.$ref && !(0, JI.schemaHasRulesButRef)(J, this.RULES)) { + let U = (0, w4.resolveUrl)(this.opts.uriResolver, Q, J.$ref); + W = EW.call(this, Y, U); + } + let { schemaId: G } = this.opts; + if (W = W || new CJ({ schema: J, schemaId: G, root: Y, baseId: Q }), W.schema !== W.root.schema) return W; + return; + } +}); +var GI = I((Tw$, Wr) => { + Wr.exports = { $id: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#", description: "Meta-schema for $data reference (JSON AnySchema extension proposal)", type: "object", required: ["$data"], properties: { $data: { type: "string", anyOf: [{ format: "relative-json-pointer" }, { format: "json-pointer" }] } }, additionalProperties: false }; +}); +var gB = I((xw$, BI) => { + var Gr = RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu), HI = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u), yB = RegExp.prototype.test.bind(/^[\da-f]{2}$/iu), KI = RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu), Ur = RegExp.prototype.test.bind(/^[\da-z\-._~!$&'()*+,;=:@/]$/iu); + function fB($) { + let Q = "", J = 0, Y = 0; + for (Y = 0; Y < $.length; Y++) { + if (J = $[Y].charCodeAt(0), J === 48) continue; + if (!(J >= 48 && J <= 57 || J >= 65 && J <= 70 || J >= 97 && J <= 102)) return ""; + Q += $[Y]; + break; + } + for (Y += 1; Y < $.length; Y++) { + if (J = $[Y].charCodeAt(0), !(J >= 48 && J <= 57 || J >= 65 && J <= 70 || J >= 97 && J <= 102)) return ""; + Q += $[Y]; + } + return Q; + } + var Hr = RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u); + function UI($) { + return $.length = 0, true; + } + function Kr($, Q, J) { + if ($.length) { + let Y = fB($); + if (Y !== "") Q.push(Y); + else return J.error = true, false; + $.length = 0; + } + return true; + } + function qr($) { + let Q = 0, J = { error: false, address: "", zone: "" }, Y = [], X = [], W = false, G = false, U = Kr; + for (let H = 0; H < $.length; H++) { + let q = $[H]; + if (q === "[" || q === "]") continue; + if (q === ":") { + if (W === true) G = true; + if (!U(X, Y, J)) break; + if (++Q > 7) { + J.error = true; + break; + } + if (H > 0 && $[H - 1] === ":") W = true; + Y.push(":"); + continue; + } else if (q === "%") { + if (!U(X, Y, J)) break; + U = UI; + } else { + X.push(q); + continue; + } + } + if (X.length) if (U === UI) J.zone = X.join(""); + else if (G) Y.push(X.join("")); + else Y.push(fB(X)); + return J.address = Y.join(""), J; + } + function qI($) { + if (Vr($, ":") < 2) return { host: $, isIPV6: false }; + let Q = qr($); + if (!Q.error) { + let { address: J, address: Y } = Q; + if (Q.zone) J += "%" + Q.zone, Y += "%25" + Q.zone; + return { host: J, isIPV6: true, escapedHost: Y }; + } else return { host: $, isIPV6: false }; + } + function Vr($, Q) { + let J = 0; + for (let Y = 0; Y < $.length; Y++) if ($[Y] === Q) J++; + return J; + } + function Br($) { + let Q = $, J = [], Y = -1, X = 0; + while (X = Q.length) { + if (X === 1) if (Q === ".") break; + else if (Q === "/") { + J.push("/"); + break; + } else { + J.push(Q); + break; + } + else if (X === 2) { + if (Q[0] === ".") { + if (Q[1] === ".") break; + else if (Q[1] === "/") { + Q = Q.slice(2); + continue; + } + } else if (Q[0] === "/") { + if (Q[1] === "." || Q[1] === "/") { + J.push("/"); + break; + } + } + } else if (X === 3) { + if (Q === "/..") { + if (J.length !== 0) J.pop(); + J.push("/"); + break; + } + } + if (Q[0] === ".") { + if (Q[1] === ".") { + if (Q[2] === "/") { + Q = Q.slice(3); + continue; + } + } else if (Q[1] === "/") { + Q = Q.slice(2); + continue; + } + } else if (Q[0] === "/") { + if (Q[1] === ".") { + if (Q[2] === "/") { + Q = Q.slice(2); + continue; + } else if (Q[2] === ".") { + if (Q[3] === "/") { + if (Q = Q.slice(3), J.length !== 0) J.pop(); + continue; + } + } + } + } + if ((Y = Q.indexOf("/", 1)) === -1) { + J.push(Q); + break; + } else J.push(Q.slice(0, Y)), Q = Q.slice(Y); + } + return J.join(""); + } + var zr = { "@": "%40", "/": "%2F", "?": "%3F", "#": "%23", ":": "%3A" }, Nr = /[@/?#:]/g, wr = /[@/?#]/g; + function VI($, Q) { + let J = Q ? wr : Nr; + return J.lastIndex = 0, $.replace(J, (Y) => zr[Y]); + } + function Or($, Q = false) { + if ($.indexOf("%") === -1) return $; + let J = ""; + for (let Y = 0; Y < $.length; Y++) { + if ($[Y] === "%" && Y + 2 < $.length) { + let X = $.slice(Y + 1, Y + 3); + if (yB(X)) { + let W = X.toUpperCase(), G = String.fromCharCode(parseInt(W, 16)); + if (Q && KI(G)) J += G; + else J += "%" + W; + Y += 2; + continue; + } + } + J += $[Y]; + } + return J; + } + function Dr($) { + let Q = ""; + for (let J = 0; J < $.length; J++) { + if ($[J] === "%" && J + 2 < $.length) { + let Y = $.slice(J + 1, J + 3); + if (yB(Y)) { + let X = Y.toUpperCase(), W = String.fromCharCode(parseInt(X, 16)); + if (W !== "." && KI(W)) Q += W; + else Q += "%" + X; + J += 2; + continue; + } + } + if (Ur($[J])) Q += $[J]; + else Q += escape($[J]); + } + return Q; + } + function Fr($) { + let Q = ""; + for (let J = 0; J < $.length; J++) { + if ($[J] === "%" && J + 2 < $.length) { + let Y = $.slice(J + 1, J + 3); + if (yB(Y)) { + Q += "%" + Y.toUpperCase(), J += 2; + continue; + } + } + Q += escape($[J]); + } + return Q; + } + function Zr($) { + let Q = []; + if ($.userinfo !== void 0) Q.push($.userinfo), Q.push("@"); + if ($.host !== void 0) { + let J = unescape($.host); + if (!HI(J)) { + let Y = qI(J); + if (Y.isIPV6 === true) J = `[${Y.escapedHost}]`; + else J = VI(J, false); + } + Q.push(J); + } + if (typeof $.port === "number" || typeof $.port === "string") Q.push(":"), Q.push(String($.port)); + return Q.length ? Q.join("") : void 0; + } + BI.exports = { nonSimpleDomain: Hr, recomposeAuthority: Zr, reescapeHostDelimiters: VI, normalizePercentEncoding: Or, normalizePathEncoding: Dr, escapePreservingEscapes: Fr, removeDotSegments: Br, isIPv4: HI, isUUID: Gr, normalizeIPv6: qI, stringArrayToHexStripped: fB }; +}); +var DI = I((yw$, OI) => { + var { isUUID: Mr } = gB(), Lr = /([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu, jr = ["http", "https", "ws", "wss", "urn", "urn:uuid"]; + function Ar($) { + return jr.indexOf($) !== -1; + } + function hB($) { + if ($.secure === true) return true; + else if ($.secure === false) return false; + else if ($.scheme) return $.scheme.length === 3 && ($.scheme[0] === "w" || $.scheme[0] === "W") && ($.scheme[1] === "s" || $.scheme[1] === "S") && ($.scheme[2] === "s" || $.scheme[2] === "S"); + else return false; + } + function zI($) { + if (!$.host) $.error = $.error || "HTTP URIs must have a host."; + return $; + } + function NI($) { + let Q = String($.scheme).toLowerCase() === "https"; + if ($.port === (Q ? 443 : 80) || $.port === "") $.port = void 0; + if (!$.path) $.path = "/"; + return $; + } + function Ir($) { + return $.secure = hB($), $.resourceName = ($.path || "/") + ($.query ? "?" + $.query : ""), $.path = void 0, $.query = void 0, $; + } + function Rr($) { + if ($.port === (hB($) ? 443 : 80) || $.port === "") $.port = void 0; + if (typeof $.secure === "boolean") $.scheme = $.secure ? "wss" : "ws", $.secure = void 0; + if ($.resourceName) { + let [Q, J] = $.resourceName.split("?"); + $.path = Q && Q !== "/" ? Q : void 0, $.query = J, $.resourceName = void 0; + } + return $.fragment = void 0, $; + } + function Pr($, Q) { + if (!$.path) return $.error = "URN can not be parsed", $; + let J = $.path.match(Lr); + if (J) { + let Y = Q.scheme || $.scheme || "urn"; + $.nid = J[1].toLowerCase(), $.nss = J[2]; + let X = `${Y}:${Q.nid || $.nid}`, W = uB(X); + if ($.path = void 0, W) $ = W.parse($, Q); + } else $.error = $.error || "URN can not be parsed."; + return $; + } + function Er($, Q) { + if ($.nid === void 0) throw Error("URN without nid cannot be serialized"); + let J = Q.scheme || $.scheme || "urn", Y = $.nid.toLowerCase(), X = `${J}:${Q.nid || Y}`, W = uB(X); + if (W) $ = W.serialize($, Q); + let G = $, U = $.nss; + return G.path = `${Y || Q.nid}:${U}`, Q.skipEscape = true, G; + } + function br($, Q) { + let J = $; + if (J.uuid = J.nss, J.nss = void 0, !Q.tolerant && (!J.uuid || !Mr(J.uuid))) J.error = J.error || "UUID is not valid."; + return J; + } + function _r($) { + let Q = $; + return Q.nss = ($.uuid || "").toLowerCase(), Q; + } + var wI = { scheme: "http", domainHost: true, parse: zI, serialize: NI }, kr = { scheme: "https", domainHost: wI.domainHost, parse: zI, serialize: NI }, _W2 = { scheme: "ws", domainHost: true, parse: Ir, serialize: Rr }, Sr = { scheme: "wss", domainHost: _W2.domainHost, parse: _W2.parse, serialize: _W2.serialize }, vr = { scheme: "urn", parse: Pr, serialize: Er, skipNormalize: true }, Cr = { scheme: "urn:uuid", parse: br, serialize: _r, skipNormalize: true }, kW = { http: wI, https: kr, ws: _W2, wss: Sr, urn: vr, "urn:uuid": Cr }; + Object.setPrototypeOf(kW, null); + function uB($) { + return $ && (kW[$] || kW[$.toLowerCase()]) || void 0; + } + OI.exports = { wsIsSecure: hB, SCHEMES: kW, isValidSchemeName: Ar, getSchemeHandler: uB }; +}); +var AI = I((fw$, SW) => { + var { normalizeIPv6: Tr, removeDotSegments: TJ, recomposeAuthority: xr, normalizePercentEncoding: yr, normalizePathEncoding: fr, escapePreservingEscapes: gr, reescapeHostDelimiters: hr, isIPv4: ur, nonSimpleDomain: mr } = gB(), { SCHEMES: lr, getSchemeHandler: ZI } = DI(); + function cr($, Q) { + if (typeof $ === "string") $ = rr($, Q); + else if (typeof $ === "object") $ = w9(y0($, Q), Q); + return $; + } + function pr($, Q, J) { + let Y = J ? Object.assign({ scheme: "null" }, J) : { scheme: "null" }, X = MI(w9($, Y), w9(Q, Y), Y, true); + return Y.skipEscape = true, y0(X, Y); + } + function MI($, Q, J, Y) { + let X = {}; + if (!Y) $ = w9(y0($, J), J), Q = w9(y0(Q, J), J); + if (J = J || {}, !J.tolerant && Q.scheme) X.scheme = Q.scheme, X.userinfo = Q.userinfo, X.host = Q.host, X.port = Q.port, X.path = TJ(Q.path || ""), X.query = Q.query; + else { + if (Q.userinfo !== void 0 || Q.host !== void 0 || Q.port !== void 0) X.userinfo = Q.userinfo, X.host = Q.host, X.port = Q.port, X.path = TJ(Q.path || ""), X.query = Q.query; + else { + if (!Q.path) if (X.path = $.path, Q.query !== void 0) X.query = Q.query; + else X.query = $.query; + else { + if (Q.path[0] === "/") X.path = TJ(Q.path); + else { + if (($.userinfo !== void 0 || $.host !== void 0 || $.port !== void 0) && !$.path) X.path = "/" + Q.path; + else if (!$.path) X.path = Q.path; + else X.path = $.path.slice(0, $.path.lastIndexOf("/") + 1) + Q.path; + X.path = TJ(X.path); + } + X.query = Q.query; + } + X.userinfo = $.userinfo, X.host = $.host, X.port = $.port; + } + X.scheme = $.scheme; + } + return X.fragment = Q.fragment, X; + } + function dr($, Q, J) { + let Y = FI($, J), X = FI(Q, J); + return Y !== void 0 && X !== void 0 && Y.toLowerCase() === X.toLowerCase(); + } + function y0($, Q) { + let J = { host: $.host, scheme: $.scheme, userinfo: $.userinfo, port: $.port, path: $.path, query: $.query, nid: $.nid, nss: $.nss, uuid: $.uuid, fragment: $.fragment, reference: $.reference, resourceName: $.resourceName, secure: $.secure, error: "" }, Y = Object.assign({}, Q), X = [], W = ZI(Y.scheme || J.scheme); + if (W && W.serialize) W.serialize(J, Y); + if (J.path !== void 0) if (!Y.skipEscape) { + if (J.path = gr(J.path), J.scheme !== void 0) J.path = J.path.split("%3A").join(":"); + } else J.path = yr(J.path); + if (Y.reference !== "suffix" && J.scheme) X.push(J.scheme, ":"); + let G = xr(J); + if (G !== void 0) { + if (Y.reference !== "suffix") X.push("//"); + if (X.push(G), J.path && J.path[0] !== "/") X.push("/"); + } + if (J.path !== void 0) { + let U = J.path; + if (!Y.absolutePath && (!W || !W.absolutePath)) U = TJ(U); + if (G === void 0 && U[0] === "/" && U[1] === "/") U = "/%2F" + U.slice(2); + X.push(U); + } + if (J.query !== void 0) X.push("?", J.query); + if (J.fragment !== void 0) X.push("#", J.fragment); + return X.join(""); + } + var ir = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u; + function nr($, Q) { + if (Q[2] !== void 0 && $.path && $.path[0] !== "/") return 'URI path must start with "/" when authority is present.'; + if (typeof $.port === "number" && ($.port < 0 || $.port > 65535)) return "URI port is malformed."; + return; + } + function LI($, Q) { + let J = Object.assign({}, Q), Y = { scheme: void 0, userinfo: void 0, host: "", port: void 0, path: "", query: void 0, fragment: void 0 }, X = false, W = false; + if (J.reference === "suffix") if (J.scheme) $ = J.scheme + ":" + $; + else $ = "//" + $; + let G = $.match(ir); + if (G) { + if (Y.scheme = G[1], Y.userinfo = G[3], Y.host = G[4], Y.port = parseInt(G[5], 10), Y.path = G[6] || "", Y.query = G[7], Y.fragment = G[8], isNaN(Y.port)) Y.port = G[5]; + let U = nr(Y, G); + if (U !== void 0) Y.error = Y.error || U, X = true; + if (Y.host) if (ur(Y.host) === false) { + let V = Tr(Y.host); + Y.host = V.host.toLowerCase(), W = V.isIPV6; + } else W = true; + if (Y.scheme === void 0 && Y.userinfo === void 0 && Y.host === void 0 && Y.port === void 0 && Y.query === void 0 && !Y.path) Y.reference = "same-document"; + else if (Y.scheme === void 0) Y.reference = "relative"; + else if (Y.fragment === void 0) Y.reference = "absolute"; + else Y.reference = "uri"; + if (J.reference && J.reference !== "suffix" && J.reference !== Y.reference) Y.error = Y.error || "URI is not a " + J.reference + " reference."; + let H = ZI(J.scheme || Y.scheme); + if (!J.unicodeSupport && (!H || !H.unicodeSupport)) { + if (Y.host && (J.domainHost || H && H.domainHost) && W === false && mr(Y.host)) try { + Y.host = URL.domainToASCII(Y.host.toLowerCase()); + } catch (q) { + Y.error = Y.error || "Host's domain name can not be converted to ASCII: " + q; + } + } + if (!H || H && !H.skipNormalize) { + if ($.indexOf("%") !== -1) { + if (Y.scheme !== void 0) Y.scheme = unescape(Y.scheme); + if (Y.host !== void 0) Y.host = hr(unescape(Y.host), W); + } + if (Y.path) Y.path = fr(Y.path); + if (Y.fragment) try { + Y.fragment = encodeURI(decodeURIComponent(Y.fragment)); + } catch (e2) { + Y.error = Y.error || "URI malformed"; + } + } + if (H && H.parse) H.parse(Y, J); + } else Y.error = Y.error || "URI can not be parsed."; + return { parsed: Y, malformedAuthorityOrPort: X }; + } + function w9($, Q) { + return LI($, Q).parsed; + } + function rr($, Q) { + return jI($, Q).normalized; + } + function jI($, Q) { + let { parsed: J, malformedAuthorityOrPort: Y } = LI($, Q); + return { normalized: Y ? $ : y0(J, Q), malformedAuthorityOrPort: Y }; + } + function FI($, Q) { + if (typeof $ === "string") { + let { normalized: J, malformedAuthorityOrPort: Y } = jI($, Q); + return Y ? void 0 : J; + } + if (typeof $ === "object") return y0($, Q); + } + var mB = { SCHEMES: lr, normalize: cr, resolve: pr, resolveComponent: MI, equal: dr, serialize: y0, parse: w9 }; + SW.exports = mB; + SW.exports.default = mB; + SW.exports.fastUri = mB; +}); +var PI = I((RI) => { + Object.defineProperty(RI, "__esModule", { value: true }); + var II = AI(); + II.code = 'require("ajv/dist/runtime/uri").default'; + RI.default = II; +}); +var TI = I((J1) => { + Object.defineProperty(J1, "__esModule", { value: true }); + J1.CodeGen = J1.Name = J1.nil = J1.stringify = J1.str = J1._ = J1.KeywordCxt = void 0; + var tr = SJ(); + Object.defineProperty(J1, "KeywordCxt", { enumerable: true, get: function() { + return tr.KeywordCxt; + } }); + var O9 = Q$(); + Object.defineProperty(J1, "_", { enumerable: true, get: function() { + return O9._; + } }); + Object.defineProperty(J1, "str", { enumerable: true, get: function() { + return O9.str; + } }); + Object.defineProperty(J1, "stringify", { enumerable: true, get: function() { + return O9.stringify; + } }); + Object.defineProperty(J1, "nil", { enumerable: true, get: function() { + return O9.nil; + } }); + Object.defineProperty(J1, "Name", { enumerable: true, get: function() { + return O9.Name; + } }); + Object.defineProperty(J1, "CodeGen", { enumerable: true, get: function() { + return O9.CodeGen; + } }); + var ar = PW(), SI = vJ(), sr = ZB(), xJ = bW(), er = Q$(), yJ = bJ(), vW = EJ(), cB = q$(), EI = GI(), $o = PI(), vI = ($, Q) => new RegExp($, Q); + vI.code = "new RegExp"; + var Qo = ["removeAdditional", "useDefaults", "coerceTypes"], Jo = /* @__PURE__ */ new Set(["validate", "serialize", "parse", "wrapper", "root", "schema", "keyword", "pattern", "formats", "validate$data", "func", "obj", "Error"]), Xo = { errorDataPath: "", format: "`validateFormats: false` can be used instead.", nullable: '"nullable" keyword is supported by default.', jsonPointers: "Deprecated jsPropertySyntax can be used instead.", extendRefs: "Deprecated ignoreKeywordsWithRef can be used instead.", missingRefs: "Pass empty schema with $id that should be ignored to ajv.addSchema.", processCode: "Use option `code: {process: (code, schemaEnv: object) => string}`", sourceCode: "Use option `code: {source: true}`", strictDefaults: "It is default now, see option `strict`.", strictKeywords: "It is default now, see option `strict`.", uniqueItems: '"uniqueItems" keyword is always validated.', unknownFormats: "Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).", cache: "Map is used as cache, schema object as key.", serialize: "Map is used as cache, schema object as key.", ajvErrors: "It is default now." }, Yo = { ignoreKeywordsWithRef: "", jsPropertySyntax: "", unicode: '"minLength"/"maxLength" account for unicode characters by default.' }, bI = 200; + function Wo($) { + var Q, J, Y, X, W, G, U, H, q, V, B, z4, N, w, O, D, M, j, A, S, u, G$, h$, e$, m6; + let F6 = $.strict, a1 = (Q = $.code) === null || Q === void 0 ? void 0 : Q.optimize, i0 = a1 === true || a1 === void 0 ? 1 : a1 || 0, k4 = (Y = (J = $.code) === null || J === void 0 ? void 0 : J.regExp) !== null && Y !== void 0 ? Y : vI, S9 = (X = $.uriResolver) !== null && X !== void 0 ? X : $o.default; + return { strictSchema: (G = (W = $.strictSchema) !== null && W !== void 0 ? W : F6) !== null && G !== void 0 ? G : true, strictNumbers: (H = (U = $.strictNumbers) !== null && U !== void 0 ? U : F6) !== null && H !== void 0 ? H : true, strictTypes: (V = (q = $.strictTypes) !== null && q !== void 0 ? q : F6) !== null && V !== void 0 ? V : "log", strictTuples: (z4 = (B = $.strictTuples) !== null && B !== void 0 ? B : F6) !== null && z4 !== void 0 ? z4 : "log", strictRequired: (w = (N = $.strictRequired) !== null && N !== void 0 ? N : F6) !== null && w !== void 0 ? w : false, code: $.code ? { ...$.code, optimize: i0, regExp: k4 } : { optimize: i0, regExp: k4 }, loopRequired: (O = $.loopRequired) !== null && O !== void 0 ? O : bI, loopEnum: (D = $.loopEnum) !== null && D !== void 0 ? D : bI, meta: (M = $.meta) !== null && M !== void 0 ? M : true, messages: (j = $.messages) !== null && j !== void 0 ? j : true, inlineRefs: (A = $.inlineRefs) !== null && A !== void 0 ? A : true, schemaId: (S = $.schemaId) !== null && S !== void 0 ? S : "$id", addUsedSchema: (u = $.addUsedSchema) !== null && u !== void 0 ? u : true, validateSchema: (G$ = $.validateSchema) !== null && G$ !== void 0 ? G$ : true, validateFormats: (h$ = $.validateFormats) !== null && h$ !== void 0 ? h$ : true, unicodeRegExp: (e$ = $.unicodeRegExp) !== null && e$ !== void 0 ? e$ : true, int32range: (m6 = $.int32range) !== null && m6 !== void 0 ? m6 : true, uriResolver: S9 }; + } + class CW { + constructor($ = {}) { + this.schemas = {}, this.refs = {}, this.formats = {}, this._compilations = /* @__PURE__ */ new Set(), this._loading = {}, this._cache = /* @__PURE__ */ new Map(), $ = this.opts = { ...$, ...Wo($) }; + let { es5: Q, lines: J } = this.opts.code; + this.scope = new er.ValueScope({ scope: {}, prefixes: Jo, es5: Q, lines: J }), this.logger = Vo($.logger); + let Y = $.validateFormats; + if ($.validateFormats = false, this.RULES = (0, sr.getRules)(), _I.call(this, Xo, $, "NOT SUPPORTED"), _I.call(this, Yo, $, "DEPRECATED", "warn"), this._metaOpts = Ko.call(this), $.formats) Uo.call(this); + if (this._addVocabularies(), this._addDefaultMetaSchema(), $.keywords) Ho.call(this, $.keywords); + if (typeof $.meta == "object") this.addMetaSchema($.meta); + Go.call(this), $.validateFormats = Y; + } + _addVocabularies() { + this.addKeyword("$async"); + } + _addDefaultMetaSchema() { + let { $data: $, meta: Q, schemaId: J } = this.opts, Y = EI; + if (J === "id") Y = { ...EI }, Y.id = Y.$id, delete Y.$id; + if (Q && $) this.addMetaSchema(Y, Y[J], false); + } + defaultMeta() { + let { meta: $, schemaId: Q } = this.opts; + return this.opts.defaultMeta = typeof $ == "object" ? $[Q] || $ : void 0; + } + validate($, Q) { + let J; + if (typeof $ == "string") { + if (J = this.getSchema($), !J) throw Error(`no schema with key or ref "${$}"`); + } else J = this.compile($); + let Y = J(Q); + if (!("$async" in J)) this.errors = J.errors; + return Y; + } + compile($, Q) { + let J = this._addSchema($, Q); + return J.validate || this._compileSchemaEnv(J); + } + compileAsync($, Q) { + if (typeof this.opts.loadSchema != "function") throw Error("options.loadSchema should be a function"); + let { loadSchema: J } = this.opts; + return Y.call(this, $, Q); + async function Y(q, V) { + await X.call(this, q.$schema); + let B = this._addSchema(q, V); + return B.validate || W.call(this, B); + } + async function X(q) { + if (q && !this.getSchema(q)) await Y.call(this, { $ref: q }, true); + } + async function W(q) { + try { + return this._compileSchemaEnv(q); + } catch (V) { + if (!(V instanceof SI.default)) throw V; + return G.call(this, V), await U.call(this, V.missingSchema), W.call(this, q); + } + } + function G({ missingSchema: q, missingRef: V }) { + if (this.refs[q]) throw Error(`AnySchema ${q} is loaded but ${V} cannot be resolved`); + } + async function U(q) { + let V = await H.call(this, q); + if (!this.refs[q]) await X.call(this, V.$schema); + if (!this.refs[q]) this.addSchema(V, q, Q); + } + async function H(q) { + let V = this._loading[q]; + if (V) return V; + try { + return await (this._loading[q] = J(q)); + } finally { + delete this._loading[q]; + } + } + } + addSchema($, Q, J, Y = this.opts.validateSchema) { + if (Array.isArray($)) { + for (let W of $) this.addSchema(W, void 0, J, Y); + return this; + } + let X; + if (typeof $ === "object") { + let { schemaId: W } = this.opts; + if (X = $[W], X !== void 0 && typeof X != "string") throw Error(`schema ${W} must be string`); + } + return Q = (0, yJ.normalizeId)(Q || X), this._checkUnique(Q), this.schemas[Q] = this._addSchema($, J, Q, Y, true), this; + } + addMetaSchema($, Q, J = this.opts.validateSchema) { + return this.addSchema($, Q, true, J), this; + } + validateSchema($, Q) { + if (typeof $ == "boolean") return true; + let J; + if (J = $.$schema, J !== void 0 && typeof J != "string") throw Error("$schema must be a string"); + if (J = J || this.opts.defaultMeta || this.defaultMeta(), !J) return this.logger.warn("meta-schema not available"), this.errors = null, true; + let Y = this.validate(J, $); + if (!Y && Q) { + let X = "schema is invalid: " + this.errorsText(); + if (this.opts.validateSchema === "log") this.logger.error(X); + else throw Error(X); + } + return Y; + } + getSchema($) { + let Q; + while (typeof (Q = kI.call(this, $)) == "string") $ = Q; + if (Q === void 0) { + let { schemaId: J } = this.opts, Y = new xJ.SchemaEnv({ schema: {}, schemaId: J }); + if (Q = xJ.resolveSchema.call(this, Y, $), !Q) return; + this.refs[$] = Q; + } + return Q.validate || this._compileSchemaEnv(Q); + } + removeSchema($) { + if ($ instanceof RegExp) return this._removeAllSchemas(this.schemas, $), this._removeAllSchemas(this.refs, $), this; + switch (typeof $) { + case "undefined": + return this._removeAllSchemas(this.schemas), this._removeAllSchemas(this.refs), this._cache.clear(), this; + case "string": { + let Q = kI.call(this, $); + if (typeof Q == "object") this._cache.delete(Q.schema); + return delete this.schemas[$], delete this.refs[$], this; + } + case "object": { + let Q = $; + this._cache.delete(Q); + let J = $[this.opts.schemaId]; + if (J) J = (0, yJ.normalizeId)(J), delete this.schemas[J], delete this.refs[J]; + return this; + } + default: + throw Error("ajv.removeSchema: invalid parameter"); + } + } + addVocabulary($) { + for (let Q of $) this.addKeyword(Q); + return this; + } + addKeyword($, Q) { + let J; + if (typeof $ == "string") { + if (J = $, typeof Q == "object") this.logger.warn("these parameters are deprecated, see docs for addKeyword"), Q.keyword = J; + } else if (typeof $ == "object" && Q === void 0) { + if (Q = $, J = Q.keyword, Array.isArray(J) && !J.length) throw Error("addKeywords: keyword must be string or non-empty array"); + } else throw Error("invalid addKeywords parameters"); + if (zo.call(this, J, Q), !Q) return (0, cB.eachItem)(J, (X) => lB.call(this, X)), this; + wo.call(this, Q); + let Y = { ...Q, type: (0, vW.getJSONTypes)(Q.type), schemaType: (0, vW.getJSONTypes)(Q.schemaType) }; + return (0, cB.eachItem)(J, Y.type.length === 0 ? (X) => lB.call(this, X, Y) : (X) => Y.type.forEach((W) => lB.call(this, X, Y, W))), this; + } + getKeyword($) { + let Q = this.RULES.all[$]; + return typeof Q == "object" ? Q.definition : !!Q; + } + removeKeyword($) { + let { RULES: Q } = this; + delete Q.keywords[$], delete Q.all[$]; + for (let J of Q.rules) { + let Y = J.rules.findIndex((X) => X.keyword === $); + if (Y >= 0) J.rules.splice(Y, 1); + } + return this; + } + addFormat($, Q) { + if (typeof Q == "string") Q = new RegExp(Q); + return this.formats[$] = Q, this; + } + errorsText($ = this.errors, { separator: Q = ", ", dataVar: J = "data" } = {}) { + if (!$ || $.length === 0) return "No errors"; + return $.map((Y) => `${J}${Y.instancePath} ${Y.message}`).reduce((Y, X) => Y + Q + X); + } + $dataMetaSchema($, Q) { + let J = this.RULES.all; + $ = JSON.parse(JSON.stringify($)); + for (let Y of Q) { + let X = Y.split("/").slice(1), W = $; + for (let G of X) W = W[G]; + for (let G in J) { + let U = J[G]; + if (typeof U != "object") continue; + let { $data: H } = U.definition, q = W[G]; + if (H && q) W[G] = CI(q); + } + } + return $; + } + _removeAllSchemas($, Q) { + for (let J in $) { + let Y = $[J]; + if (!Q || Q.test(J)) { + if (typeof Y == "string") delete $[J]; + else if (Y && !Y.meta) this._cache.delete(Y.schema), delete $[J]; + } + } + } + _addSchema($, Q, J, Y = this.opts.validateSchema, X = this.opts.addUsedSchema) { + let W, { schemaId: G } = this.opts; + if (typeof $ == "object") W = $[G]; + else if (this.opts.jtd) throw Error("schema must be object"); + else if (typeof $ != "boolean") throw Error("schema must be object or boolean"); + let U = this._cache.get($); + if (U !== void 0) return U; + J = (0, yJ.normalizeId)(W || J); + let H = yJ.getSchemaRefs.call(this, $, J); + if (U = new xJ.SchemaEnv({ schema: $, schemaId: G, meta: Q, baseId: J, localRefs: H }), this._cache.set(U.schema, U), X && !J.startsWith("#")) { + if (J) this._checkUnique(J); + this.refs[J] = U; + } + if (Y) this.validateSchema($, true); + return U; + } + _checkUnique($) { + if (this.schemas[$] || this.refs[$]) throw Error(`schema with key or id "${$}" already exists`); + } + _compileSchemaEnv($) { + if ($.meta) this._compileMetaSchema($); + else xJ.compileSchema.call(this, $); + if (!$.validate) throw Error("ajv implementation error"); + return $.validate; + } + _compileMetaSchema($) { + let Q = this.opts; + this.opts = this._metaOpts; + try { + xJ.compileSchema.call(this, $); + } finally { + this.opts = Q; + } + } + } + CW.ValidationError = ar.default; + CW.MissingRefError = SI.default; + J1.default = CW; + function _I($, Q, J, Y = "error") { + for (let X in $) { + let W = X; + if (W in Q) this.logger[Y](`${J}: option ${X}. ${$[W]}`); + } + } + function kI($) { + return $ = (0, yJ.normalizeId)($), this.schemas[$] || this.refs[$]; + } + function Go() { + let $ = this.opts.schemas; + if (!$) return; + if (Array.isArray($)) this.addSchema($); + else for (let Q in $) this.addSchema($[Q], Q); + } + function Uo() { + for (let $ in this.opts.formats) { + let Q = this.opts.formats[$]; + if (Q) this.addFormat($, Q); + } + } + function Ho($) { + if (Array.isArray($)) { + this.addVocabulary($); + return; + } + this.logger.warn("keywords option as map is deprecated, pass array"); + for (let Q in $) { + let J = $[Q]; + if (!J.keyword) J.keyword = Q; + this.addKeyword(J); + } + } + function Ko() { + let $ = { ...this.opts }; + for (let Q of Qo) delete $[Q]; + return $; + } + var qo = { log() { + }, warn() { + }, error() { + } }; + function Vo($) { + if ($ === false) return qo; + if ($ === void 0) return console; + if ($.log && $.warn && $.error) return $; + throw Error("logger must implement log, warn and error methods"); + } + var Bo = /^[a-z_$][a-z0-9_$:-]*$/i; + function zo($, Q) { + let { RULES: J } = this; + if ((0, cB.eachItem)($, (Y) => { + if (J.keywords[Y]) throw Error(`Keyword ${Y} is already defined`); + if (!Bo.test(Y)) throw Error(`Keyword ${Y} has invalid name`); + }), !Q) return; + if (Q.$data && !("code" in Q || "validate" in Q)) throw Error('$data keyword must have "code" or "validate" function'); + } + function lB($, Q, J) { + var Y; + let X = Q === null || Q === void 0 ? void 0 : Q.post; + if (J && X) throw Error('keyword with "post" flag cannot have "type"'); + let { RULES: W } = this, G = X ? W.post : W.rules.find(({ type: H }) => H === J); + if (!G) G = { type: J, rules: [] }, W.rules.push(G); + if (W.keywords[$] = true, !Q) return; + let U = { keyword: $, definition: { ...Q, type: (0, vW.getJSONTypes)(Q.type), schemaType: (0, vW.getJSONTypes)(Q.schemaType) } }; + if (Q.before) No.call(this, G, U, Q.before); + else G.rules.push(U); + W.all[$] = U, (Y = Q.implements) === null || Y === void 0 || Y.forEach((H) => this.addKeyword(H)); + } + function No($, Q, J) { + let Y = $.rules.findIndex((X) => X.keyword === J); + if (Y >= 0) $.rules.splice(Y, 0, Q); + else $.rules.push(Q), this.logger.warn(`rule ${J} is not defined`); + } + function wo($) { + let { metaSchema: Q } = $; + if (Q === void 0) return; + if ($.$data && this.opts.$data) Q = CI(Q); + $.validateSchema = this.compile(Q, true); + } + var Oo = { $ref: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#" }; + function CI($) { + return { anyOf: [$, Oo] }; + } +}); +var yI = I((xI) => { + Object.defineProperty(xI, "__esModule", { value: true }); + var Zo = { keyword: "id", code() { + throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID'); + } }; + xI.default = Zo; +}); +var lI = I((uI) => { + Object.defineProperty(uI, "__esModule", { value: true }); + uI.callRef = uI.getValidate = void 0; + var Lo = vJ(), fI = $4(), _6 = Q$(), D9 = $1(), gI = bW(), TW = q$(), jo = { keyword: "$ref", schemaType: "string", code($) { + let { gen: Q, schema: J, it: Y } = $, { baseId: X, schemaEnv: W, validateName: G, opts: U, self: H } = Y, { root: q } = W; + if ((J === "#" || J === "#/") && X === q.baseId) return B(); + let V = gI.resolveRef.call(H, q, X, J); + if (V === void 0) throw new Lo.default(Y.opts.uriResolver, X, J); + if (V instanceof gI.SchemaEnv) return z4(V); + return N(V); + function B() { + if (W === q) return xW($, G, W, W.$async); + let w = Q.scopeValue("root", { ref: q }); + return xW($, _6._`${w}.validate`, q, q.$async); + } + function z4(w) { + let O = hI($, w); + xW($, O, w, w.$async); + } + function N(w) { + let O = Q.scopeValue("schema", U.code.source === true ? { ref: w, code: (0, _6.stringify)(w) } : { ref: w }), D = Q.name("valid"), M = $.subschema({ schema: w, dataTypes: [], schemaPath: _6.nil, topSchemaRef: O, errSchemaPath: J }, D); + $.mergeEvaluated(M), $.ok(D); + } + } }; + function hI($, Q) { + let { gen: J } = $; + return Q.validate ? J.scopeValue("validate", { ref: Q.validate }) : _6._`${J.scopeValue("wrapper", { ref: Q })}.validate`; + } + uI.getValidate = hI; + function xW($, Q, J, Y) { + let { gen: X, it: W } = $, { allErrors: G, schemaEnv: U, opts: H } = W, q = H.passContext ? D9.default.this : _6.nil; + if (Y) V(); + else B(); + function V() { + if (!U.$async) throw Error("async schema referenced by sync schema"); + let w = X.let("valid"); + X.try(() => { + if (X.code(_6._`await ${(0, fI.callValidateCode)($, Q, q)}`), N(Q), !G) X.assign(w, true); + }, (O) => { + if (X.if(_6._`!(${O} instanceof ${W.ValidationError})`, () => X.throw(O)), z4(O), !G) X.assign(w, false); + }), $.ok(w); + } + function B() { + $.result((0, fI.callValidateCode)($, Q, q), () => N(Q), () => z4(Q)); + } + function z4(w) { + let O = _6._`${w}.errors`; + X.assign(D9.default.vErrors, _6._`${D9.default.vErrors} === null ? ${O} : ${D9.default.vErrors}.concat(${O})`), X.assign(D9.default.errors, _6._`${D9.default.vErrors}.length`); + } + function N(w) { + var O; + if (!W.opts.unevaluated) return; + let D = (O = J === null || J === void 0 ? void 0 : J.validate) === null || O === void 0 ? void 0 : O.evaluated; + if (W.props !== true) if (D && !D.dynamicProps) { + if (D.props !== void 0) W.props = TW.mergeEvaluated.props(X, D.props, W.props); + } else { + let M = X.var("props", _6._`${w}.evaluated.props`); + W.props = TW.mergeEvaluated.props(X, M, W.props, _6.Name); + } + if (W.items !== true) if (D && !D.dynamicItems) { + if (D.items !== void 0) W.items = TW.mergeEvaluated.items(X, D.items, W.items); + } else { + let M = X.var("items", _6._`${w}.evaluated.items`); + W.items = TW.mergeEvaluated.items(X, M, W.items, _6.Name); + } + } + } + uI.callRef = xW; + uI.default = jo; +}); +var pI = I((cI) => { + Object.defineProperty(cI, "__esModule", { value: true }); + var Ro = yI(), Po = lI(), Eo = ["$schema", "$id", "$defs", "$vocabulary", { keyword: "$comment" }, "definitions", Ro.default, Po.default]; + cI.default = Eo; +}); +var iI = I((dI) => { + Object.defineProperty(dI, "__esModule", { value: true }); + var yW = Q$(), u1 = yW.operators, fW = { maximum: { okStr: "<=", ok: u1.LTE, fail: u1.GT }, minimum: { okStr: ">=", ok: u1.GTE, fail: u1.LT }, exclusiveMaximum: { okStr: "<", ok: u1.LT, fail: u1.GTE }, exclusiveMinimum: { okStr: ">", ok: u1.GT, fail: u1.LTE } }, _o = { message: ({ keyword: $, schemaCode: Q }) => yW.str`must be ${fW[$].okStr} ${Q}`, params: ({ keyword: $, schemaCode: Q }) => yW._`{comparison: ${fW[$].okStr}, limit: ${Q}}` }, ko = { keyword: Object.keys(fW), type: "number", schemaType: "number", $data: true, error: _o, code($) { + let { keyword: Q, data: J, schemaCode: Y } = $; + $.fail$data(yW._`${J} ${fW[Q].fail} ${Y} || isNaN(${J})`); + } }; + dI.default = ko; +}); +var rI = I((nI) => { + Object.defineProperty(nI, "__esModule", { value: true }); + var fJ = Q$(), vo = { message: ({ schemaCode: $ }) => fJ.str`must be multiple of ${$}`, params: ({ schemaCode: $ }) => fJ._`{multipleOf: ${$}}` }, Co = { keyword: "multipleOf", type: "number", schemaType: "number", $data: true, error: vo, code($) { + let { gen: Q, data: J, schemaCode: Y, it: X } = $, W = X.opts.multipleOfPrecision, G = Q.let("res"), U = W ? fJ._`Math.abs(Math.round(${G}) - ${G}) > 1e-${W}` : fJ._`${G} !== parseInt(${G})`; + $.fail$data(fJ._`(${Y} === 0 || (${G} = ${J}/${Y}, ${U}))`); + } }; + nI.default = Co; +}); +var aI = I((tI) => { + Object.defineProperty(tI, "__esModule", { value: true }); + function oI($) { + let Q = $.length, J = 0, Y = 0, X; + while (Y < Q) if (J++, X = $.charCodeAt(Y++), X >= 55296 && X <= 56319 && Y < Q) { + if (X = $.charCodeAt(Y), (X & 64512) === 56320) Y++; + } + return J; + } + tI.default = oI; + oI.code = 'require("ajv/dist/runtime/ucs2length").default'; +}); +var eI = I((sI) => { + Object.defineProperty(sI, "__esModule", { value: true }); + var f0 = Q$(), yo = q$(), fo = aI(), go = { message({ keyword: $, schemaCode: Q }) { + let J = $ === "maxLength" ? "more" : "fewer"; + return f0.str`must NOT have ${J} than ${Q} characters`; + }, params: ({ schemaCode: $ }) => f0._`{limit: ${$}}` }, ho = { keyword: ["maxLength", "minLength"], type: "string", schemaType: "number", $data: true, error: go, code($) { + let { keyword: Q, data: J, schemaCode: Y, it: X } = $, W = Q === "maxLength" ? f0.operators.GT : f0.operators.LT, G = X.opts.unicode === false ? f0._`${J}.length` : f0._`${(0, yo.useFunc)($.gen, fo.default)}(${J})`; + $.fail$data(f0._`${G} ${W} ${Y}`); + } }; + sI.default = ho; +}); +var QR = I(($R) => { + Object.defineProperty($R, "__esModule", { value: true }); + var mo = $4(), lo = q$(), F9 = Q$(), co = { message: ({ schemaCode: $ }) => F9.str`must match pattern "${$}"`, params: ({ schemaCode: $ }) => F9._`{pattern: ${$}}` }, po = { keyword: "pattern", type: "string", schemaType: "string", $data: true, error: co, code($) { + let { gen: Q, data: J, $data: Y, schema: X, schemaCode: W, it: G } = $, U = G.opts.unicodeRegExp ? "u" : ""; + if (Y) { + let { regExp: H } = G.opts.code, q = H.code === "new RegExp" ? F9._`new RegExp` : (0, lo.useFunc)(Q, H), V = Q.let("valid"); + Q.try(() => Q.assign(V, F9._`${q}(${W}, ${U}).test(${J})`), () => Q.assign(V, false)), $.fail$data(F9._`!${V}`); + } else { + let H = (0, mo.usePattern)($, X); + $.fail$data(F9._`!${H}.test(${J})`); + } + } }; + $R.default = po; +}); +var XR = I((JR) => { + Object.defineProperty(JR, "__esModule", { value: true }); + var gJ = Q$(), no = { message({ keyword: $, schemaCode: Q }) { + let J = $ === "maxProperties" ? "more" : "fewer"; + return gJ.str`must NOT have ${J} than ${Q} properties`; + }, params: ({ schemaCode: $ }) => gJ._`{limit: ${$}}` }, ro = { keyword: ["maxProperties", "minProperties"], type: "object", schemaType: "number", $data: true, error: no, code($) { + let { keyword: Q, data: J, schemaCode: Y } = $, X = Q === "maxProperties" ? gJ.operators.GT : gJ.operators.LT; + $.fail$data(gJ._`Object.keys(${J}).length ${X} ${Y}`); + } }; + JR.default = ro; +}); +var WR = I((YR) => { + Object.defineProperty(YR, "__esModule", { value: true }); + var hJ = $4(), uJ = Q$(), to = q$(), ao = { message: ({ params: { missingProperty: $ } }) => uJ.str`must have required property '${$}'`, params: ({ params: { missingProperty: $ } }) => uJ._`{missingProperty: ${$}}` }, so = { keyword: "required", type: "object", schemaType: "array", $data: true, error: ao, code($) { + let { gen: Q, schema: J, schemaCode: Y, data: X, $data: W, it: G } = $, { opts: U } = G; + if (!W && J.length === 0) return; + let H = J.length >= U.loopRequired; + if (G.allErrors) q(); + else V(); + if (U.strictRequired) { + let N = $.parentSchema.properties, { definedProperties: w } = $.it; + for (let O of J) if ((N === null || N === void 0 ? void 0 : N[O]) === void 0 && !w.has(O)) { + let D = G.schemaEnv.baseId + G.errSchemaPath, M = `required property "${O}" is not defined at "${D}" (strictRequired)`; + (0, to.checkStrictMode)(G, M, G.opts.strictRequired); + } + } + function q() { + if (H || W) $.block$data(uJ.nil, B); + else for (let N of J) (0, hJ.checkReportMissingProp)($, N); + } + function V() { + let N = Q.let("missing"); + if (H || W) { + let w = Q.let("valid", true); + $.block$data(w, () => z4(N, w)), $.ok(w); + } else Q.if((0, hJ.checkMissingProp)($, J, N)), (0, hJ.reportMissingProp)($, N), Q.else(); + } + function B() { + Q.forOf("prop", Y, (N) => { + $.setParams({ missingProperty: N }), Q.if((0, hJ.noPropertyInData)(Q, X, N, U.ownProperties), () => $.error()); + }); + } + function z4(N, w) { + $.setParams({ missingProperty: N }), Q.forOf(N, Y, () => { + Q.assign(w, (0, hJ.propertyInData)(Q, X, N, U.ownProperties)), Q.if((0, uJ.not)(w), () => { + $.error(), Q.break(); + }); + }, uJ.nil); + } + } }; + YR.default = so; +}); +var UR = I((GR) => { + Object.defineProperty(GR, "__esModule", { value: true }); + var mJ = Q$(), $t = { message({ keyword: $, schemaCode: Q }) { + let J = $ === "maxItems" ? "more" : "fewer"; + return mJ.str`must NOT have ${J} than ${Q} items`; + }, params: ({ schemaCode: $ }) => mJ._`{limit: ${$}}` }, Qt = { keyword: ["maxItems", "minItems"], type: "array", schemaType: "number", $data: true, error: $t, code($) { + let { keyword: Q, data: J, schemaCode: Y } = $, X = Q === "maxItems" ? mJ.operators.GT : mJ.operators.LT; + $.fail$data(mJ._`${J}.length ${X} ${Y}`); + } }; + GR.default = Qt; +}); +var gW = I((KR) => { + Object.defineProperty(KR, "__esModule", { value: true }); + var HR = EB(); + HR.code = 'require("ajv/dist/runtime/equal").default'; + KR.default = HR; +}); +var VR = I((qR) => { + Object.defineProperty(qR, "__esModule", { value: true }); + var pB = EJ(), Y6 = Q$(), Yt = q$(), Wt = gW(), Gt = { message: ({ params: { i: $, j: Q } }) => Y6.str`must NOT have duplicate items (items ## ${Q} and ${$} are identical)`, params: ({ params: { i: $, j: Q } }) => Y6._`{i: ${$}, j: ${Q}}` }, Ut = { keyword: "uniqueItems", type: "array", schemaType: "boolean", $data: true, error: Gt, code($) { + let { gen: Q, data: J, $data: Y, schema: X, parentSchema: W, schemaCode: G, it: U } = $; + if (!Y && !X) return; + let H = Q.let("valid"), q = W.items ? (0, pB.getSchemaTypes)(W.items) : []; + $.block$data(H, V, Y6._`${G} === false`), $.ok(H); + function V() { + let w = Q.let("i", Y6._`${J}.length`), O = Q.let("j"); + $.setParams({ i: w, j: O }), Q.assign(H, true), Q.if(Y6._`${w} > 1`, () => (B() ? z4 : N)(w, O)); + } + function B() { + return q.length > 0 && !q.some((w) => w === "object" || w === "array"); + } + function z4(w, O) { + let D = Q.name("item"), M = (0, pB.checkDataTypes)(q, D, U.opts.strictNumbers, pB.DataType.Wrong), j = Q.const("indices", Y6._`{}`); + Q.for(Y6._`;${w}--;`, () => { + if (Q.let(D, Y6._`${J}[${w}]`), Q.if(M, Y6._`continue`), q.length > 1) Q.if(Y6._`typeof ${D} == "string"`, Y6._`${D} += "_"`); + Q.if(Y6._`typeof ${j}[${D}] == "number"`, () => { + Q.assign(O, Y6._`${j}[${D}]`), $.error(), Q.assign(H, false).break(); + }).code(Y6._`${j}[${D}] = ${w}`); + }); + } + function N(w, O) { + let D = (0, Yt.useFunc)(Q, Wt.default), M = Q.name("outer"); + Q.label(M).for(Y6._`;${w}--;`, () => Q.for(Y6._`${O} = ${w}; ${O}--;`, () => Q.if(Y6._`${D}(${J}[${w}], ${J}[${O}])`, () => { + $.error(), Q.assign(H, false).break(M); + }))); + } + } }; + qR.default = Ut; +}); +var zR = I((BR) => { + Object.defineProperty(BR, "__esModule", { value: true }); + var dB = Q$(), Kt = q$(), qt = gW(), Vt = { message: "must be equal to constant", params: ({ schemaCode: $ }) => dB._`{allowedValue: ${$}}` }, Bt = { keyword: "const", $data: true, error: Vt, code($) { + let { gen: Q, data: J, $data: Y, schemaCode: X, schema: W } = $; + if (Y || W && typeof W == "object") $.fail$data(dB._`!${(0, Kt.useFunc)(Q, qt.default)}(${J}, ${X})`); + else $.fail(dB._`${W} !== ${J}`); + } }; + BR.default = Bt; +}); +var wR = I((NR) => { + Object.defineProperty(NR, "__esModule", { value: true }); + var lJ = Q$(), Nt = q$(), wt = gW(), Ot = { message: "must be equal to one of the allowed values", params: ({ schemaCode: $ }) => lJ._`{allowedValues: ${$}}` }, Dt = { keyword: "enum", schemaType: "array", $data: true, error: Ot, code($) { + let { gen: Q, data: J, $data: Y, schema: X, schemaCode: W, it: G } = $; + if (!Y && X.length === 0) throw Error("enum must have non-empty array"); + let U = X.length >= G.opts.loopEnum, H, q = () => H !== null && H !== void 0 ? H : H = (0, Nt.useFunc)(Q, wt.default), V; + if (U || Y) V = Q.let("valid"), $.block$data(V, B); + else { + if (!Array.isArray(X)) throw Error("ajv implementation error"); + let N = Q.const("vSchema", W); + V = (0, lJ.or)(...X.map((w, O) => z4(N, O))); + } + $.pass(V); + function B() { + Q.assign(V, false), Q.forOf("v", W, (N) => Q.if(lJ._`${q()}(${J}, ${N})`, () => Q.assign(V, true).break())); + } + function z4(N, w) { + let O = X[w]; + return typeof O === "object" && O !== null ? lJ._`${q()}(${J}, ${N}[${w}])` : lJ._`${J} === ${O}`; + } + } }; + NR.default = Dt; +}); +var DR = I((OR) => { + Object.defineProperty(OR, "__esModule", { value: true }); + var Zt = iI(), Mt = rI(), Lt = eI(), jt = QR(), At = XR(), It = WR(), Rt = UR(), Pt = VR(), Et = zR(), bt = wR(), _t = [Zt.default, Mt.default, Lt.default, jt.default, At.default, It.default, Rt.default, Pt.default, { keyword: "type", schemaType: ["string", "array"] }, { keyword: "nullable", schemaType: "boolean" }, Et.default, bt.default]; + OR.default = _t; +}); +var nB = I((ZR) => { + Object.defineProperty(ZR, "__esModule", { value: true }); + ZR.validateAdditionalItems = void 0; + var g0 = Q$(), iB = q$(), St = { message: ({ params: { len: $ } }) => g0.str`must NOT have more than ${$} items`, params: ({ params: { len: $ } }) => g0._`{limit: ${$}}` }, vt = { keyword: "additionalItems", type: "array", schemaType: ["boolean", "object"], before: "uniqueItems", error: St, code($) { + let { parentSchema: Q, it: J } = $, { items: Y } = Q; + if (!Array.isArray(Y)) { + (0, iB.checkStrictMode)(J, '"additionalItems" is ignored when "items" is not an array of schemas'); + return; + } + FR($, Y); + } }; + function FR($, Q) { + let { gen: J, schema: Y, data: X, keyword: W, it: G } = $; + G.items = true; + let U = J.const("len", g0._`${X}.length`); + if (Y === false) $.setParams({ len: Q.length }), $.pass(g0._`${U} <= ${Q.length}`); + else if (typeof Y == "object" && !(0, iB.alwaysValidSchema)(G, Y)) { + let q = J.var("valid", g0._`${U} <= ${Q.length}`); + J.if((0, g0.not)(q), () => H(q)), $.ok(q); + } + function H(q) { + J.forRange("i", Q.length, U, (V) => { + if ($.subschema({ keyword: W, dataProp: V, dataPropType: iB.Type.Num }, q), !G.allErrors) J.if((0, g0.not)(q), () => J.break()); + }); + } + } + ZR.validateAdditionalItems = FR; + ZR.default = vt; +}); +var rB = I((AR) => { + Object.defineProperty(AR, "__esModule", { value: true }); + AR.validateTuple = void 0; + var LR = Q$(), hW = q$(), Tt = $4(), xt = { keyword: "items", type: "array", schemaType: ["object", "array", "boolean"], before: "uniqueItems", code($) { + let { schema: Q, it: J } = $; + if (Array.isArray(Q)) return jR($, "additionalItems", Q); + if (J.items = true, (0, hW.alwaysValidSchema)(J, Q)) return; + $.ok((0, Tt.validateArray)($)); + } }; + function jR($, Q, J = $.schema) { + let { gen: Y, parentSchema: X, data: W, keyword: G, it: U } = $; + if (V(X), U.opts.unevaluated && J.length && U.items !== true) U.items = hW.mergeEvaluated.items(Y, J.length, U.items); + let H = Y.name("valid"), q = Y.const("len", LR._`${W}.length`); + J.forEach((B, z4) => { + if ((0, hW.alwaysValidSchema)(U, B)) return; + Y.if(LR._`${q} > ${z4}`, () => $.subschema({ keyword: G, schemaProp: z4, dataProp: z4 }, H)), $.ok(H); + }); + function V(B) { + let { opts: z4, errSchemaPath: N } = U, w = J.length, O = w === B.minItems && (w === B.maxItems || B[Q] === false); + if (z4.strictTuples && !O) { + let D = `"${G}" is ${w}-tuple, but minItems or maxItems/${Q} are not specified or different at path "${N}"`; + (0, hW.checkStrictMode)(U, D, z4.strictTuples); + } + } + } + AR.validateTuple = jR; + AR.default = xt; +}); +var PR = I((RR) => { + Object.defineProperty(RR, "__esModule", { value: true }); + var ft = rB(), gt = { keyword: "prefixItems", type: "array", schemaType: ["array"], before: "uniqueItems", code: ($) => (0, ft.validateTuple)($, "items") }; + RR.default = gt; +}); +var _R = I((bR) => { + Object.defineProperty(bR, "__esModule", { value: true }); + var ER = Q$(), ut = q$(), mt = $4(), lt = nB(), ct = { message: ({ params: { len: $ } }) => ER.str`must NOT have more than ${$} items`, params: ({ params: { len: $ } }) => ER._`{limit: ${$}}` }, pt = { keyword: "items", type: "array", schemaType: ["object", "boolean"], before: "uniqueItems", error: ct, code($) { + let { schema: Q, parentSchema: J, it: Y } = $, { prefixItems: X } = J; + if (Y.items = true, (0, ut.alwaysValidSchema)(Y, Q)) return; + if (X) (0, lt.validateAdditionalItems)($, X); + else $.ok((0, mt.validateArray)($)); + } }; + bR.default = pt; +}); +var SR = I((kR) => { + Object.defineProperty(kR, "__esModule", { value: true }); + var Q4 = Q$(), uW = q$(), it = { message: ({ params: { min: $, max: Q } }) => Q === void 0 ? Q4.str`must contain at least ${$} valid item(s)` : Q4.str`must contain at least ${$} and no more than ${Q} valid item(s)`, params: ({ params: { min: $, max: Q } }) => Q === void 0 ? Q4._`{minContains: ${$}}` : Q4._`{minContains: ${$}, maxContains: ${Q}}` }, nt = { keyword: "contains", type: "array", schemaType: ["object", "boolean"], before: "uniqueItems", trackErrors: true, error: it, code($) { + let { gen: Q, schema: J, parentSchema: Y, data: X, it: W } = $, G, U, { minContains: H, maxContains: q } = Y; + if (W.opts.next) G = H === void 0 ? 1 : H, U = q; + else G = 1; + let V = Q.const("len", Q4._`${X}.length`); + if ($.setParams({ min: G, max: U }), U === void 0 && G === 0) { + (0, uW.checkStrictMode)(W, '"minContains" == 0 without "maxContains": "contains" keyword ignored'); + return; + } + if (U !== void 0 && G > U) { + (0, uW.checkStrictMode)(W, '"minContains" > "maxContains" is always invalid'), $.fail(); + return; + } + if ((0, uW.alwaysValidSchema)(W, J)) { + let O = Q4._`${V} >= ${G}`; + if (U !== void 0) O = Q4._`${O} && ${V} <= ${U}`; + $.pass(O); + return; + } + W.items = true; + let B = Q.name("valid"); + if (U === void 0 && G === 1) N(B, () => Q.if(B, () => Q.break())); + else if (G === 0) { + if (Q.let(B, true), U !== void 0) Q.if(Q4._`${X}.length > 0`, z4); + } else Q.let(B, false), z4(); + $.result(B, () => $.reset()); + function z4() { + let O = Q.name("_valid"), D = Q.let("count", 0); + N(O, () => Q.if(O, () => w(D))); + } + function N(O, D) { + Q.forRange("i", 0, V, (M) => { + $.subschema({ keyword: "contains", dataProp: M, dataPropType: uW.Type.Num, compositeRule: true }, O), D(); + }); + } + function w(O) { + if (Q.code(Q4._`${O}++`), U === void 0) Q.if(Q4._`${O} >= ${G}`, () => Q.assign(B, true).break()); + else if (Q.if(Q4._`${O} > ${U}`, () => Q.assign(B, false).break()), G === 1) Q.assign(B, true); + else Q.if(Q4._`${O} >= ${G}`, () => Q.assign(B, true)); + } + } }; + kR.default = nt; +}); +var fR = I((TR) => { + Object.defineProperty(TR, "__esModule", { value: true }); + TR.validateSchemaDeps = TR.validatePropertyDeps = TR.error = void 0; + var oB = Q$(), ot = q$(), cJ = $4(); + TR.error = { message: ({ params: { property: $, depsCount: Q, deps: J } }) => { + let Y = Q === 1 ? "property" : "properties"; + return oB.str`must have ${Y} ${J} when property ${$} is present`; + }, params: ({ params: { property: $, depsCount: Q, deps: J, missingProperty: Y } }) => oB._`{property: ${$}, + missingProperty: ${Y}, + depsCount: ${Q}, + deps: ${J}}` }; + var tt = { keyword: "dependencies", type: "object", schemaType: "object", error: TR.error, code($) { + let [Q, J] = at($); + vR($, Q), CR($, J); + } }; + function at({ schema: $ }) { + let Q = {}, J = {}; + for (let Y in $) { + if (Y === "__proto__") continue; + let X = Array.isArray($[Y]) ? Q : J; + X[Y] = $[Y]; + } + return [Q, J]; + } + function vR($, Q = $.schema) { + let { gen: J, data: Y, it: X } = $; + if (Object.keys(Q).length === 0) return; + let W = J.let("missing"); + for (let G in Q) { + let U = Q[G]; + if (U.length === 0) continue; + let H = (0, cJ.propertyInData)(J, Y, G, X.opts.ownProperties); + if ($.setParams({ property: G, depsCount: U.length, deps: U.join(", ") }), X.allErrors) J.if(H, () => { + for (let q of U) (0, cJ.checkReportMissingProp)($, q); + }); + else J.if(oB._`${H} && (${(0, cJ.checkMissingProp)($, U, W)})`), (0, cJ.reportMissingProp)($, W), J.else(); + } + } + TR.validatePropertyDeps = vR; + function CR($, Q = $.schema) { + let { gen: J, data: Y, keyword: X, it: W } = $, G = J.name("valid"); + for (let U in Q) { + if ((0, ot.alwaysValidSchema)(W, Q[U])) continue; + J.if((0, cJ.propertyInData)(J, Y, U, W.opts.ownProperties), () => { + let H = $.subschema({ keyword: X, schemaProp: U }, G); + $.mergeValidEvaluated(H, G); + }, () => J.var(G, true)), $.ok(G); + } + } + TR.validateSchemaDeps = CR; + TR.default = tt; +}); +var uR = I((hR) => { + Object.defineProperty(hR, "__esModule", { value: true }); + var gR = Q$(), $a = q$(), Qa = { message: "property name must be valid", params: ({ params: $ }) => gR._`{propertyName: ${$.propertyName}}` }, Ja = { keyword: "propertyNames", type: "object", schemaType: ["object", "boolean"], error: Qa, code($) { + let { gen: Q, schema: J, data: Y, it: X } = $; + if ((0, $a.alwaysValidSchema)(X, J)) return; + let W = Q.name("valid"); + Q.forIn("key", Y, (G) => { + $.setParams({ propertyName: G }), $.subschema({ keyword: "propertyNames", data: G, dataTypes: ["string"], propertyName: G, compositeRule: true }, W), Q.if((0, gR.not)(W), () => { + if ($.error(true), !X.allErrors) Q.break(); + }); + }), $.ok(W); + } }; + hR.default = Ja; +}); +var tB = I((mR) => { + Object.defineProperty(mR, "__esModule", { value: true }); + var mW = $4(), O4 = Q$(), Ya = $1(), lW = q$(), Wa = { message: "must NOT have additional properties", params: ({ params: $ }) => O4._`{additionalProperty: ${$.additionalProperty}}` }, Ga = { keyword: "additionalProperties", type: ["object"], schemaType: ["boolean", "object"], allowUndefined: true, trackErrors: true, error: Wa, code($) { + let { gen: Q, schema: J, parentSchema: Y, data: X, errsCount: W, it: G } = $; + if (!W) throw Error("ajv implementation error"); + let { allErrors: U, opts: H } = G; + if (G.props = true, H.removeAdditional !== "all" && (0, lW.alwaysValidSchema)(G, J)) return; + let q = (0, mW.allSchemaProperties)(Y.properties), V = (0, mW.allSchemaProperties)(Y.patternProperties); + B(), $.ok(O4._`${W} === ${Ya.default.errors}`); + function B() { + Q.forIn("key", X, (D) => { + if (!q.length && !V.length) w(D); + else Q.if(z4(D), () => w(D)); + }); + } + function z4(D) { + let M; + if (q.length > 8) { + let j = (0, lW.schemaRefOrVal)(G, Y.properties, "properties"); + M = (0, mW.isOwnProperty)(Q, j, D); + } else if (q.length) M = (0, O4.or)(...q.map((j) => O4._`${D} === ${j}`)); + else M = O4.nil; + if (V.length) M = (0, O4.or)(M, ...V.map((j) => O4._`${(0, mW.usePattern)($, j)}.test(${D})`)); + return (0, O4.not)(M); + } + function N(D) { + Q.code(O4._`delete ${X}[${D}]`); + } + function w(D) { + if (H.removeAdditional === "all" || H.removeAdditional && J === false) { + N(D); + return; + } + if (J === false) { + if ($.setParams({ additionalProperty: D }), $.error(), !U) Q.break(); + return; + } + if (typeof J == "object" && !(0, lW.alwaysValidSchema)(G, J)) { + let M = Q.name("valid"); + if (H.removeAdditional === "failing") O(D, M, false), Q.if((0, O4.not)(M), () => { + $.reset(), N(D); + }); + else if (O(D, M), !U) Q.if((0, O4.not)(M), () => Q.break()); + } + } + function O(D, M, j) { + let A = { keyword: "additionalProperties", dataProp: D, dataPropType: lW.Type.Str }; + if (j === false) Object.assign(A, { compositeRule: true, createErrors: false, allErrors: false }); + $.subschema(A, M); + } + } }; + mR.default = Ga; +}); +var dR = I((pR) => { + Object.defineProperty(pR, "__esModule", { value: true }); + var Ha = SJ(), lR = $4(), aB = q$(), cR = tB(), Ka = { keyword: "properties", type: "object", schemaType: "object", code($) { + let { gen: Q, schema: J, parentSchema: Y, data: X, it: W } = $; + if (W.opts.removeAdditional === "all" && Y.additionalProperties === void 0) cR.default.code(new Ha.KeywordCxt(W, cR.default, "additionalProperties")); + let G = (0, lR.allSchemaProperties)(J); + for (let B of G) W.definedProperties.add(B); + if (W.opts.unevaluated && G.length && W.props !== true) W.props = aB.mergeEvaluated.props(Q, (0, aB.toHash)(G), W.props); + let U = G.filter((B) => !(0, aB.alwaysValidSchema)(W, J[B])); + if (U.length === 0) return; + let H = Q.name("valid"); + for (let B of U) { + if (q(B)) V(B); + else { + if (Q.if((0, lR.propertyInData)(Q, X, B, W.opts.ownProperties)), V(B), !W.allErrors) Q.else().var(H, true); + Q.endIf(); + } + $.it.definedProperties.add(B), $.ok(H); + } + function q(B) { + return W.opts.useDefaults && !W.compositeRule && J[B].default !== void 0; + } + function V(B) { + $.subschema({ keyword: "properties", schemaProp: B, dataProp: B }, H); + } + } }; + pR.default = Ka; +}); +var tR = I((oR) => { + Object.defineProperty(oR, "__esModule", { value: true }); + var iR = $4(), cW = Q$(), nR = q$(), rR = q$(), Va = { keyword: "patternProperties", type: "object", schemaType: "object", code($) { + let { gen: Q, schema: J, data: Y, parentSchema: X, it: W } = $, { opts: G } = W, U = (0, iR.allSchemaProperties)(J), H = U.filter((O) => (0, nR.alwaysValidSchema)(W, J[O])); + if (U.length === 0 || H.length === U.length && (!W.opts.unevaluated || W.props === true)) return; + let q = G.strictSchema && !G.allowMatchingProperties && X.properties, V = Q.name("valid"); + if (W.props !== true && !(W.props instanceof cW.Name)) W.props = (0, rR.evaluatedPropsToName)(Q, W.props); + let { props: B } = W; + z4(); + function z4() { + for (let O of U) { + if (q) N(O); + if (W.allErrors) w(O); + else Q.var(V, true), w(O), Q.if(V); + } + } + function N(O) { + for (let D in q) if (new RegExp(O).test(D)) (0, nR.checkStrictMode)(W, `property ${D} matches pattern ${O} (use allowMatchingProperties)`); + } + function w(O) { + Q.forIn("key", Y, (D) => { + Q.if(cW._`${(0, iR.usePattern)($, O)}.test(${D})`, () => { + let M = H.includes(O); + if (!M) $.subschema({ keyword: "patternProperties", schemaProp: O, dataProp: D, dataPropType: rR.Type.Str }, V); + if (W.opts.unevaluated && B !== true) Q.assign(cW._`${B}[${D}]`, true); + else if (!M && !W.allErrors) Q.if((0, cW.not)(V), () => Q.break()); + }); + }); + } + } }; + oR.default = Va; +}); +var sR = I((aR) => { + Object.defineProperty(aR, "__esModule", { value: true }); + var za = q$(), Na = { keyword: "not", schemaType: ["object", "boolean"], trackErrors: true, code($) { + let { gen: Q, schema: J, it: Y } = $; + if ((0, za.alwaysValidSchema)(Y, J)) { + $.fail(); + return; + } + let X = Q.name("valid"); + $.subschema({ keyword: "not", compositeRule: true, createErrors: false, allErrors: false }, X), $.failResult(X, () => $.reset(), () => $.error()); + }, error: { message: "must NOT be valid" } }; + aR.default = Na; +}); +var $P = I((eR) => { + Object.defineProperty(eR, "__esModule", { value: true }); + var Oa = $4(), Da = { keyword: "anyOf", schemaType: "array", trackErrors: true, code: Oa.validateUnion, error: { message: "must match a schema in anyOf" } }; + eR.default = Da; +}); +var JP = I((QP) => { + Object.defineProperty(QP, "__esModule", { value: true }); + var pW = Q$(), Za = q$(), Ma = { message: "must match exactly one schema in oneOf", params: ({ params: $ }) => pW._`{passingSchemas: ${$.passing}}` }, La = { keyword: "oneOf", schemaType: "array", trackErrors: true, error: Ma, code($) { + let { gen: Q, schema: J, parentSchema: Y, it: X } = $; + if (!Array.isArray(J)) throw Error("ajv implementation error"); + if (X.opts.discriminator && Y.discriminator) return; + let W = J, G = Q.let("valid", false), U = Q.let("passing", null), H = Q.name("_valid"); + $.setParams({ passing: U }), Q.block(q), $.result(G, () => $.reset(), () => $.error(true)); + function q() { + W.forEach((V, B) => { + let z4; + if ((0, Za.alwaysValidSchema)(X, V)) Q.var(H, true); + else z4 = $.subschema({ keyword: "oneOf", schemaProp: B, compositeRule: true }, H); + if (B > 0) Q.if(pW._`${H} && ${G}`).assign(G, false).assign(U, pW._`[${U}, ${B}]`).else(); + Q.if(H, () => { + if (Q.assign(G, true), Q.assign(U, B), z4) $.mergeEvaluated(z4, pW.Name); + }); + }); + } + } }; + QP.default = La; +}); +var YP = I((XP) => { + Object.defineProperty(XP, "__esModule", { value: true }); + var Aa = q$(), Ia = { keyword: "allOf", schemaType: "array", code($) { + let { gen: Q, schema: J, it: Y } = $; + if (!Array.isArray(J)) throw Error("ajv implementation error"); + let X = Q.name("valid"); + J.forEach((W, G) => { + if ((0, Aa.alwaysValidSchema)(Y, W)) return; + let U = $.subschema({ keyword: "allOf", schemaProp: G }, X); + $.ok(X), $.mergeEvaluated(U); + }); + } }; + XP.default = Ia; +}); +var HP = I((UP) => { + Object.defineProperty(UP, "__esModule", { value: true }); + var dW = Q$(), GP = q$(), Pa = { message: ({ params: $ }) => dW.str`must match "${$.ifClause}" schema`, params: ({ params: $ }) => dW._`{failingKeyword: ${$.ifClause}}` }, Ea = { keyword: "if", schemaType: ["object", "boolean"], trackErrors: true, error: Pa, code($) { + let { gen: Q, parentSchema: J, it: Y } = $; + if (J.then === void 0 && J.else === void 0) (0, GP.checkStrictMode)(Y, '"if" without "then" and "else" is ignored'); + let X = WP(Y, "then"), W = WP(Y, "else"); + if (!X && !W) return; + let G = Q.let("valid", true), U = Q.name("_valid"); + if (H(), $.reset(), X && W) { + let V = Q.let("ifClause"); + $.setParams({ ifClause: V }), Q.if(U, q("then", V), q("else", V)); + } else if (X) Q.if(U, q("then")); + else Q.if((0, dW.not)(U), q("else")); + $.pass(G, () => $.error(true)); + function H() { + let V = $.subschema({ keyword: "if", compositeRule: true, createErrors: false, allErrors: false }, U); + $.mergeEvaluated(V); + } + function q(V, B) { + return () => { + let z4 = $.subschema({ keyword: V }, U); + if (Q.assign(G, U), $.mergeValidEvaluated(z4, G), B) Q.assign(B, dW._`${V}`); + else $.setParams({ ifClause: V }); + }; + } + } }; + function WP($, Q) { + let J = $.schema[Q]; + return J !== void 0 && !(0, GP.alwaysValidSchema)($, J); + } + UP.default = Ea; +}); +var qP = I((KP) => { + Object.defineProperty(KP, "__esModule", { value: true }); + var _a5 = q$(), ka = { keyword: ["then", "else"], schemaType: ["object", "boolean"], code({ keyword: $, parentSchema: Q, it: J }) { + if (Q.if === void 0) (0, _a5.checkStrictMode)(J, `"${$}" without "if" is ignored`); + } }; + KP.default = ka; +}); +var BP = I((VP) => { + Object.defineProperty(VP, "__esModule", { value: true }); + var va = nB(), Ca = PR(), Ta = rB(), xa = _R(), ya = SR(), fa = fR(), ga = uR(), ha = tB(), ua = dR(), ma = tR(), la = sR(), ca = $P(), pa = JP(), da = YP(), ia = HP(), na = qP(); + function ra($ = false) { + let Q = [la.default, ca.default, pa.default, da.default, ia.default, na.default, ga.default, ha.default, fa.default, ua.default, ma.default]; + if ($) Q.push(Ca.default, xa.default); + else Q.push(va.default, Ta.default); + return Q.push(ya.default), Q; + } + VP.default = ra; +}); +var NP = I((zP) => { + Object.defineProperty(zP, "__esModule", { value: true }); + var p$ = Q$(), ta = { message: ({ schemaCode: $ }) => p$.str`must match format "${$}"`, params: ({ schemaCode: $ }) => p$._`{format: ${$}}` }, aa = { keyword: "format", type: ["number", "string"], schemaType: "string", $data: true, error: ta, code($, Q) { + let { gen: J, data: Y, $data: X, schema: W, schemaCode: G, it: U } = $, { opts: H, errSchemaPath: q, schemaEnv: V, self: B } = U; + if (!H.validateFormats) return; + if (X) z4(); + else N(); + function z4() { + let w = J.scopeValue("formats", { ref: B.formats, code: H.code.formats }), O = J.const("fDef", p$._`${w}[${G}]`), D = J.let("fType"), M = J.let("format"); + J.if(p$._`typeof ${O} == "object" && !(${O} instanceof RegExp)`, () => J.assign(D, p$._`${O}.type || "string"`).assign(M, p$._`${O}.validate`), () => J.assign(D, p$._`"string"`).assign(M, O)), $.fail$data((0, p$.or)(j(), A())); + function j() { + if (H.strictSchema === false) return p$.nil; + return p$._`${G} && !${M}`; + } + function A() { + let S = V.$async ? p$._`(${O}.async ? await ${M}(${Y}) : ${M}(${Y}))` : p$._`${M}(${Y})`, u = p$._`(typeof ${M} == "function" ? ${S} : ${M}.test(${Y}))`; + return p$._`${M} && ${M} !== true && ${D} === ${Q} && !${u}`; + } + } + function N() { + let w = B.formats[W]; + if (!w) { + j(); + return; + } + if (w === true) return; + let [O, D, M] = A(w); + if (O === Q) $.pass(S()); + function j() { + if (H.strictSchema === false) { + B.logger.warn(u()); + return; + } + throw Error(u()); + function u() { + return `unknown format "${W}" ignored in schema at path "${q}"`; + } + } + function A(u) { + let G$ = u instanceof RegExp ? (0, p$.regexpCode)(u) : H.code.formats ? p$._`${H.code.formats}${(0, p$.getProperty)(W)}` : void 0, h$ = J.scopeValue("formats", { key: W, ref: u, code: G$ }); + if (typeof u == "object" && !(u instanceof RegExp)) return [u.type || "string", u.validate, p$._`${h$}.validate`]; + return ["string", u, h$]; + } + function S() { + if (typeof w == "object" && !(w instanceof RegExp) && w.async) { + if (!V.$async) throw Error("async format in sync schema"); + return p$._`await ${M}(${Y})`; + } + return typeof D == "function" ? p$._`${M}(${Y})` : p$._`${M}.test(${Y})`; + } + } + } }; + zP.default = aa; +}); +var OP = I((wP) => { + Object.defineProperty(wP, "__esModule", { value: true }); + var ea = NP(), $s = [ea.default]; + wP.default = $s; +}); +var ZP = I((DP) => { + Object.defineProperty(DP, "__esModule", { value: true }); + DP.contentVocabulary = DP.metadataVocabulary = void 0; + DP.metadataVocabulary = ["title", "description", "default", "deprecated", "readOnly", "writeOnly", "examples"]; + DP.contentVocabulary = ["contentMediaType", "contentEncoding", "contentSchema"]; +}); +var jP = I((LP) => { + Object.defineProperty(LP, "__esModule", { value: true }); + var Xs = pI(), Ys = DR(), Ws = BP(), Gs = OP(), MP = ZP(), Us = [Xs.default, Ys.default, (0, Ws.default)(), Gs.default, MP.metadataVocabulary, MP.contentVocabulary]; + LP.default = Us; +}); +var PP = I((IP) => { + Object.defineProperty(IP, "__esModule", { value: true }); + IP.DiscrError = void 0; + var AP; + (function($) { + $.Tag = "tag", $.Mapping = "mapping"; + })(AP || (IP.DiscrError = AP = {})); +}); +var _P = I((bP) => { + Object.defineProperty(bP, "__esModule", { value: true }); + var Z9 = Q$(), sB = PP(), EP = bW(), Ks = vJ(), qs = q$(), Vs = { message: ({ params: { discrError: $, tagName: Q } }) => $ === sB.DiscrError.Tag ? `tag "${Q}" must be string` : `value of tag "${Q}" must be in oneOf`, params: ({ params: { discrError: $, tag: Q, tagName: J } }) => Z9._`{error: ${$}, tag: ${J}, tagValue: ${Q}}` }, Bs = { keyword: "discriminator", type: "object", schemaType: "object", error: Vs, code($) { + let { gen: Q, data: J, schema: Y, parentSchema: X, it: W } = $, { oneOf: G } = X; + if (!W.opts.discriminator) throw Error("discriminator: requires discriminator option"); + let U = Y.propertyName; + if (typeof U != "string") throw Error("discriminator: requires propertyName"); + if (Y.mapping) throw Error("discriminator: mapping is not supported"); + if (!G) throw Error("discriminator: requires oneOf keyword"); + let H = Q.let("valid", false), q = Q.const("tag", Z9._`${J}${(0, Z9.getProperty)(U)}`); + Q.if(Z9._`typeof ${q} == "string"`, () => V(), () => $.error(false, { discrError: sB.DiscrError.Tag, tag: q, tagName: U })), $.ok(H); + function V() { + let N = z4(); + Q.if(false); + for (let w in N) Q.elseIf(Z9._`${q} === ${w}`), Q.assign(H, B(N[w])); + Q.else(), $.error(false, { discrError: sB.DiscrError.Mapping, tag: q, tagName: U }), Q.endIf(); + } + function B(N) { + let w = Q.name("valid"), O = $.subschema({ keyword: "oneOf", schemaProp: N }, w); + return $.mergeEvaluated(O, Z9.Name), w; + } + function z4() { + var N; + let w = {}, O = M(X), D = true; + for (let S = 0; S < G.length; S++) { + let u = G[S]; + if ((u === null || u === void 0 ? void 0 : u.$ref) && !(0, qs.schemaHasRulesButRef)(u, W.self.RULES)) { + let h$ = u.$ref; + if (u = EP.resolveRef.call(W.self, W.schemaEnv.root, W.baseId, h$), u instanceof EP.SchemaEnv) u = u.schema; + if (u === void 0) throw new Ks.default(W.opts.uriResolver, W.baseId, h$); + } + let G$ = (N = u === null || u === void 0 ? void 0 : u.properties) === null || N === void 0 ? void 0 : N[U]; + if (typeof G$ != "object") throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${U}"`); + D = D && (O || M(u)), j(G$, S); + } + if (!D) throw Error(`discriminator: "${U}" must be required`); + return w; + function M({ required: S }) { + return Array.isArray(S) && S.includes(U); + } + function j(S, u) { + if (S.const) A(S.const, u); + else if (S.enum) for (let G$ of S.enum) A(G$, u); + else throw Error(`discriminator: "properties/${U}" must have "const" or "enum"`); + } + function A(S, u) { + if (typeof S != "string" || S in w) throw Error(`discriminator: "${U}" values must be unique strings`); + w[S] = u; + } + } + } }; + bP.default = Bs; +}); +var kP = I((SO$, Ns) => { + Ns.exports = { $schema: "http://json-schema.org/draft-07/schema#", $id: "http://json-schema.org/draft-07/schema#", title: "Core schema meta-schema", definitions: { schemaArray: { type: "array", minItems: 1, items: { $ref: "#" } }, nonNegativeInteger: { type: "integer", minimum: 0 }, nonNegativeIntegerDefault0: { allOf: [{ $ref: "#/definitions/nonNegativeInteger" }, { default: 0 }] }, simpleTypes: { enum: ["array", "boolean", "integer", "null", "number", "object", "string"] }, stringArray: { type: "array", items: { type: "string" }, uniqueItems: true, default: [] } }, type: ["object", "boolean"], properties: { $id: { type: "string", format: "uri-reference" }, $schema: { type: "string", format: "uri" }, $ref: { type: "string", format: "uri-reference" }, $comment: { type: "string" }, title: { type: "string" }, description: { type: "string" }, default: true, readOnly: { type: "boolean", default: false }, examples: { type: "array", items: true }, multipleOf: { type: "number", exclusiveMinimum: 0 }, maximum: { type: "number" }, exclusiveMaximum: { type: "number" }, minimum: { type: "number" }, exclusiveMinimum: { type: "number" }, maxLength: { $ref: "#/definitions/nonNegativeInteger" }, minLength: { $ref: "#/definitions/nonNegativeIntegerDefault0" }, pattern: { type: "string", format: "regex" }, additionalItems: { $ref: "#" }, items: { anyOf: [{ $ref: "#" }, { $ref: "#/definitions/schemaArray" }], default: true }, maxItems: { $ref: "#/definitions/nonNegativeInteger" }, minItems: { $ref: "#/definitions/nonNegativeIntegerDefault0" }, uniqueItems: { type: "boolean", default: false }, contains: { $ref: "#" }, maxProperties: { $ref: "#/definitions/nonNegativeInteger" }, minProperties: { $ref: "#/definitions/nonNegativeIntegerDefault0" }, required: { $ref: "#/definitions/stringArray" }, additionalProperties: { $ref: "#" }, definitions: { type: "object", additionalProperties: { $ref: "#" }, default: {} }, properties: { type: "object", additionalProperties: { $ref: "#" }, default: {} }, patternProperties: { type: "object", additionalProperties: { $ref: "#" }, propertyNames: { format: "regex" }, default: {} }, dependencies: { type: "object", additionalProperties: { anyOf: [{ $ref: "#" }, { $ref: "#/definitions/stringArray" }] } }, propertyNames: { $ref: "#" }, const: true, enum: { type: "array", items: true, minItems: 1, uniqueItems: true }, type: { anyOf: [{ $ref: "#/definitions/simpleTypes" }, { type: "array", items: { $ref: "#/definitions/simpleTypes" }, minItems: 1, uniqueItems: true }] }, format: { type: "string" }, contentMediaType: { type: "string" }, contentEncoding: { type: "string" }, if: { $ref: "#" }, then: { $ref: "#" }, else: { $ref: "#" }, allOf: { $ref: "#/definitions/schemaArray" }, anyOf: { $ref: "#/definitions/schemaArray" }, oneOf: { $ref: "#/definitions/schemaArray" }, not: { $ref: "#" } }, default: true }; +}); +var $z = I((k6, eB) => { + Object.defineProperty(k6, "__esModule", { value: true }); + k6.MissingRefError = k6.ValidationError = k6.CodeGen = k6.Name = k6.nil = k6.stringify = k6.str = k6._ = k6.KeywordCxt = k6.Ajv = void 0; + var ws = TI(), Os = jP(), Ds = _P(), SP = kP(), Fs = ["/properties"], iW = "http://json-schema.org/draft-07/schema"; + class pJ extends ws.default { + _addVocabularies() { + if (super._addVocabularies(), Os.default.forEach(($) => this.addVocabulary($)), this.opts.discriminator) this.addKeyword(Ds.default); + } + _addDefaultMetaSchema() { + if (super._addDefaultMetaSchema(), !this.opts.meta) return; + let $ = this.opts.$data ? this.$dataMetaSchema(SP, Fs) : SP; + this.addMetaSchema($, iW, false), this.refs["http://json-schema.org/schema"] = iW; + } + defaultMeta() { + return this.opts.defaultMeta = super.defaultMeta() || (this.getSchema(iW) ? iW : void 0); + } + } + k6.Ajv = pJ; + eB.exports = k6 = pJ; + eB.exports.Ajv = pJ; + Object.defineProperty(k6, "__esModule", { value: true }); + k6.default = pJ; + var Zs = SJ(); + Object.defineProperty(k6, "KeywordCxt", { enumerable: true, get: function() { + return Zs.KeywordCxt; + } }); + var M9 = Q$(); + Object.defineProperty(k6, "_", { enumerable: true, get: function() { + return M9._; + } }); + Object.defineProperty(k6, "str", { enumerable: true, get: function() { + return M9.str; + } }); + Object.defineProperty(k6, "stringify", { enumerable: true, get: function() { + return M9.stringify; + } }); + Object.defineProperty(k6, "nil", { enumerable: true, get: function() { + return M9.nil; + } }); + Object.defineProperty(k6, "Name", { enumerable: true, get: function() { + return M9.Name; + } }); + Object.defineProperty(k6, "CodeGen", { enumerable: true, get: function() { + return M9.CodeGen; + } }); + var Ms = PW(); + Object.defineProperty(k6, "ValidationError", { enumerable: true, get: function() { + return Ms.default; + } }); + var Ls = vJ(); + Object.defineProperty(k6, "MissingRefError", { enumerable: true, get: function() { + return Ls.default; + } }); +}); +var mP = I((hP) => { + Object.defineProperty(hP, "__esModule", { value: true }); + hP.formatNames = hP.fastFormats = hP.fullFormats = void 0; + function b4($, Q) { + return { validate: $, compare: Q }; + } + hP.fullFormats = { date: b4(xP, Yz), time: b4(Jz(true), Wz), "date-time": b4(vP(true), fP), "iso-time": b4(Jz(), yP), "iso-date-time": b4(vP(), gP), duration: /^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/, uri: _s, "uri-reference": /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i, "uri-template": /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i, url: /^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu, email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i, hostname: /^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i, ipv4: /^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/, ipv6: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i, regex: ys, uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i, "json-pointer": /^(?:\/(?:[^~/]|~0|~1)*)*$/, "json-pointer-uri-fragment": /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i, "relative-json-pointer": /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/, byte: ks, int32: { type: "number", validate: Cs }, int64: { type: "number", validate: Ts }, float: { type: "number", validate: TP }, double: { type: "number", validate: TP }, password: true, binary: true }; + hP.fastFormats = { ...hP.fullFormats, date: b4(/^\d\d\d\d-[0-1]\d-[0-3]\d$/, Yz), time: b4(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, Wz), "date-time": b4(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, fP), "iso-time": b4(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, yP), "iso-date-time": b4(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, gP), uri: /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i, "uri-reference": /^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i, email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i }; + hP.formatNames = Object.keys(hP.fullFormats); + function Is($) { + return $ % 4 === 0 && ($ % 100 !== 0 || $ % 400 === 0); + } + var Rs = /^(\d\d\d\d)-(\d\d)-(\d\d)$/, Ps = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + function xP($) { + let Q = Rs.exec($); + if (!Q) return false; + let J = +Q[1], Y = +Q[2], X = +Q[3]; + return Y >= 1 && Y <= 12 && X >= 1 && X <= (Y === 2 && Is(J) ? 29 : Ps[Y]); + } + function Yz($, Q) { + if (!($ && Q)) return; + if ($ > Q) return 1; + if ($ < Q) return -1; + return 0; + } + var Qz = /^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i; + function Jz($) { + return function(J) { + let Y = Qz.exec(J); + if (!Y) return false; + let X = +Y[1], W = +Y[2], G = +Y[3], U = Y[4], H = Y[5] === "-" ? -1 : 1, q = +(Y[6] || 0), V = +(Y[7] || 0); + if (q > 23 || V > 59 || $ && !U) return false; + if (X <= 23 && W <= 59 && G < 60) return true; + let B = W - V * H, z4 = X - q * H - (B < 0 ? 1 : 0); + return (z4 === 23 || z4 === -1) && (B === 59 || B === -1) && G < 61; + }; + } + function Wz($, Q) { + if (!($ && Q)) return; + let J = (/* @__PURE__ */ new Date("2020-01-01T" + $)).valueOf(), Y = (/* @__PURE__ */ new Date("2020-01-01T" + Q)).valueOf(); + if (!(J && Y)) return; + return J - Y; + } + function yP($, Q) { + if (!($ && Q)) return; + let J = Qz.exec($), Y = Qz.exec(Q); + if (!(J && Y)) return; + if ($ = J[1] + J[2] + J[3], Q = Y[1] + Y[2] + Y[3], $ > Q) return 1; + if ($ < Q) return -1; + return 0; + } + var Xz = /t|\s/i; + function vP($) { + let Q = Jz($); + return function(Y) { + let X = Y.split(Xz); + return X.length === 2 && xP(X[0]) && Q(X[1]); + }; + } + function fP($, Q) { + if (!($ && Q)) return; + let J = new Date($).valueOf(), Y = new Date(Q).valueOf(); + if (!(J && Y)) return; + return J - Y; + } + function gP($, Q) { + if (!($ && Q)) return; + let [J, Y] = $.split(Xz), [X, W] = Q.split(Xz), G = Yz(J, X); + if (G === void 0) return; + return G || Wz(Y, W); + } + var Es = /\/|:/, bs = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i; + function _s($) { + return Es.test($) && bs.test($); + } + var CP = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm; + function ks($) { + return CP.lastIndex = 0, CP.test($); + } + var Ss = -2147483648, vs = 2147483647; + function Cs($) { + return Number.isInteger($) && $ <= vs && $ >= Ss; + } + function Ts($) { + return Number.isInteger($); + } + function TP() { + return true; + } + var xs = /[^\\]\\Z/; + function ys($) { + if (xs.test($)) return false; + try { + return new RegExp($), true; + } catch (Q) { + return false; + } + } +}); +var cP = I((lP) => { + Object.defineProperty(lP, "__esModule", { value: true }); + lP.formatLimitDefinition = void 0; + var gs = $z(), D4 = Q$(), m1 = D4.operators, nW = { formatMaximum: { okStr: "<=", ok: m1.LTE, fail: m1.GT }, formatMinimum: { okStr: ">=", ok: m1.GTE, fail: m1.LT }, formatExclusiveMaximum: { okStr: "<", ok: m1.LT, fail: m1.GTE }, formatExclusiveMinimum: { okStr: ">", ok: m1.GT, fail: m1.LTE } }, hs = { message: ({ keyword: $, schemaCode: Q }) => D4.str`should be ${nW[$].okStr} ${Q}`, params: ({ keyword: $, schemaCode: Q }) => D4._`{comparison: ${nW[$].okStr}, limit: ${Q}}` }; + lP.formatLimitDefinition = { keyword: Object.keys(nW), type: "string", schemaType: "string", $data: true, error: hs, code($) { + let { gen: Q, data: J, schemaCode: Y, keyword: X, it: W } = $, { opts: G, self: U } = W; + if (!G.validateFormats) return; + let H = new gs.KeywordCxt(W, U.RULES.all.format.definition, "format"); + if (H.$data) q(); + else V(); + function q() { + let z4 = Q.scopeValue("formats", { ref: U.formats, code: G.code.formats }), N = Q.const("fmt", D4._`${z4}[${H.schemaCode}]`); + $.fail$data((0, D4.or)(D4._`typeof ${N} != "object"`, D4._`${N} instanceof RegExp`, D4._`typeof ${N}.compare != "function"`, B(N))); + } + function V() { + let z4 = H.schema, N = U.formats[z4]; + if (!N || N === true) return; + if (typeof N != "object" || N instanceof RegExp || typeof N.compare != "function") throw Error(`"${X}": format "${z4}" does not define "compare" function`); + let w = Q.scopeValue("formats", { key: z4, ref: N, code: G.code.formats ? D4._`${G.code.formats}${(0, D4.getProperty)(z4)}` : void 0 }); + $.fail$data(B(w)); + } + function B(z4) { + return D4._`${z4}.compare(${J}, ${Y}) ${nW[X].fail} 0`; + } + }, dependencies: ["format"] }; + var us = ($) => { + return $.addKeyword(lP.formatLimitDefinition), $; + }; + lP.default = us; +}); +var nP = I((dJ, iP) => { + Object.defineProperty(dJ, "__esModule", { value: true }); + var L9 = mP(), ls = cP(), Hz = Q$(), pP = new Hz.Name("fullFormats"), cs = new Hz.Name("fastFormats"), Kz = ($, Q = { keywords: true }) => { + if (Array.isArray(Q)) return dP($, Q, L9.fullFormats, pP), $; + let [J, Y] = Q.mode === "fast" ? [L9.fastFormats, cs] : [L9.fullFormats, pP], X = Q.formats || L9.formatNames; + if (dP($, X, J, Y), Q.keywords) (0, ls.default)($); + return $; + }; + Kz.get = ($, Q = "full") => { + let Y = (Q === "fast" ? L9.fastFormats : L9.fullFormats)[$]; + if (!Y) throw Error(`Unknown format "${$}"`); + return Y; + }; + function dP($, Q, J, Y) { + var X, W; + (X = (W = $.opts.code).formats) !== null && X !== void 0 || (W.formats = Hz._`require("ajv-formats/dist/formats").${Y}`); + for (let G of Q) $.addFormat(G, J[G]); + } + iP.exports = dJ = Kz; + Object.defineProperty(dJ, "__esModule", { value: true }); + dJ.default = Kz; +}); +var Gk = 50; +function g9($ = Gk) { + let Q = new AbortController(); + return (0, import_events.setMaxListeners)($, Q.signal), Q; +} +function K5($, Q, J) { + return new Promise((Y, X) => { + var _a5, _b3; + if (Q == null ? void 0 : Q.aborted) { + if ((J == null ? void 0 : J.throwOnAbort) || (J == null ? void 0 : J.abortError)) X((_b3 = (_a5 = J.abortError) == null ? void 0 : _a5.call(J)) != null ? _b3 : Error("aborted")); + else Y(); + return; + } + let W = setTimeout((U, H, q) => { + U == null ? void 0 : U.removeEventListener("abort", H), q(); + }, $, Q, G, Y); + function G() { + var _a6, _b4; + if (clearTimeout(W), (J == null ? void 0 : J.throwOnAbort) || (J == null ? void 0 : J.abortError)) X((_b4 = (_a6 = J.abortError) == null ? void 0 : _a6.call(J)) != null ? _b4 : Error("aborted")); + else Y(); + } + if (Q == null ? void 0 : Q.addEventListener("abort", G, { once: true }), J == null ? void 0 : J.unref) W.unref(); + }); +} +function Uk($, Q) { + $(Error(Q)); +} +function v4($, Q, J) { + let Y, X = new Promise((W, G) => { + var _a5; + if (Y = setTimeout(Uk, Q, G, J), typeof Y === "object") (_a5 = Y.unref) == null ? void 0 : _a5.call(Y); + }); + return Promise.race([$, X]).finally(() => { + if (Y !== void 0) clearTimeout(Y); + }); +} +var r0 = ["PreToolUse", "PostToolUse", "PostToolUseFailure", "PostToolBatch", "Notification", "UserPromptSubmit", "UserPromptExpansion", "SessionStart", "SessionEnd", "Stop", "StopFailure", "SubagentStart", "SubagentStop", "PreCompact", "PostCompact", "PermissionRequest", "PermissionDenied", "Setup", "TeammateIdle", "TaskCreated", "TaskCompleted", "Elicitation", "ElicitationResult", "ConfigChange", "WorktreeCreate", "WorktreeRemove", "InstructionsLoaded", "CwdChanged", "FileChanged", "MessageDisplay"]; +var W6 = class extends Error { +}; +function V5() { + return process.versions.bun !== void 0; +} +function R$($) { + if (!$) return false; + if (typeof $ === "boolean") return $; + let Q = String($).toLowerCase().trim(); + return ["1", "true", "yes", "on"].includes(Q); +} +function U1() { + let $ = /* @__PURE__ */ new Set(); + return { subscribe(Q) { + return $.add(Q), () => { + $.delete(Q); + }; + }, emit(...Q) { + let J; + for (let Y of $) try { + Y(...Q); + } catch (X) { + (J != null ? J : J = []).push(X); + } + if (J) throw J.length === 1 ? J[0] : AggregateError(J, "Signal listener(s) threw"); + }, clear() { + $.clear(); + } }; +} +var Dk = typeof global == "object" && global && global.Object === Object && global; +var B5 = Dk; +var Fk = typeof self == "object" && self && self.Object === Object && self; +var Zk = B5 || Fk || Function("return this")(); +var l6 = Zk; +var Mk = l6.Symbol; +var c6 = Mk; +var XN = Object.prototype; +var Lk = XN.hasOwnProperty; +var jk = XN.toString; +var u9 = c6 ? c6.toStringTag : void 0; +function Ak($) { + var Q = Lk.call($, u9), J = $[u9]; + try { + $[u9] = void 0; + var Y = true; + } catch (W) { + } + var X = jk.call($); + if (Y) if (Q) $[u9] = J; + else delete $[u9]; + return X; +} +var YN = Ak; +var Ik = Object.prototype; +var Rk = Ik.toString; +function Pk($) { + return Rk.call($); +} +var WN = Pk; +var Ek = "[object Null]"; +var bk = "[object Undefined]"; +var GN = c6 ? c6.toStringTag : void 0; +function _k($) { + if ($ == null) return $ === void 0 ? bk : Ek; + return GN && GN in Object($) ? YN($) : WN($); +} +var L4 = _k; +function kk($) { + var Q = typeof $; + return $ != null && (Q == "object" || Q == "function"); +} +var $6 = kk; +var Sk = "[object AsyncFunction]"; +var vk = "[object Function]"; +var Ck = "[object GeneratorFunction]"; +var Tk = "[object Proxy]"; +function xk($) { + if (!$6($)) return false; + var Q = L4($); + return Q == vk || Q == Ck || Q == Sk || Q == Tk; +} +var o0 = xk; +var yk = l6["__core-js_shared__"]; +var z5 = yk; +var UN = (function() { + var $ = /[^.]+$/.exec(z5 && z5.keys && z5.keys.IE_PROTO || ""); + return $ ? "Symbol(src)_1." + $ : ""; +})(); +function fk($) { + return !!UN && UN in $; +} +var HN = fk; +var gk = Function.prototype; +var hk = gk.toString; +function uk($) { + if ($ != null) { + try { + return hk.call($); + } catch (Q) { + } + try { + return $ + ""; + } catch (Q) { + } + } + return ""; +} +var KN = uk; +var mk = /[\\^$.*+?()[\]{}|]/g; +var lk = /^\[object .+?Constructor\]$/; +var ck = Function.prototype; +var pk = Object.prototype; +var dk = ck.toString; +var ik = pk.hasOwnProperty; +var nk = RegExp("^" + dk.call(ik).replace(mk, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"); +function rk($) { + if (!$6($) || HN($)) return false; + var Q = o0($) ? nk : lk; + return Q.test(KN($)); +} +var qN = rk; +function ok($, Q) { + return $ == null ? void 0 : $[Q]; +} +var VN = ok; +function tk($, Q) { + var J = VN($, Q); + return qN(J) ? J : void 0; +} +var t0 = tk; +var ak = t0(Object, "create"); +var C4 = ak; +function sk() { + this.__data__ = C4 ? C4(null) : {}, this.size = 0; +} +var BN = sk; +function ek($) { + var Q = this.has($) && delete this.__data__[$]; + return this.size -= Q ? 1 : 0, Q; +} +var zN = ek; +var $S = "__lodash_hash_undefined__"; +var QS = Object.prototype; +var JS = QS.hasOwnProperty; +function XS($) { + var Q = this.__data__; + if (C4) { + var J = Q[$]; + return J === $S ? void 0 : J; + } + return JS.call(Q, $) ? Q[$] : void 0; +} +var NN = XS; +var YS = Object.prototype; +var WS = YS.hasOwnProperty; +function GS($) { + var Q = this.__data__; + return C4 ? Q[$] !== void 0 : WS.call(Q, $); +} +var wN = GS; +var US = "__lodash_hash_undefined__"; +function HS($, Q) { + var J = this.__data__; + return this.size += this.has($) ? 0 : 1, J[$] = C4 && Q === void 0 ? US : Q, this; +} +var ON = HS; +function a0($) { + var Q = -1, J = $ == null ? 0 : $.length; + this.clear(); + while (++Q < J) { + var Y = $[Q]; + this.set(Y[0], Y[1]); + } +} +a0.prototype.clear = BN; +a0.prototype.delete = zN; +a0.prototype.get = NN; +a0.prototype.has = wN; +a0.prototype.set = ON; +var ZG = a0; +function KS() { + this.__data__ = [], this.size = 0; +} +var DN = KS; +function qS($, Q) { + return $ === Q || $ !== $ && Q !== Q; +} +var H1 = qS; +function VS($, Q) { + var J = $.length; + while (J--) if (H1($[J][0], Q)) return J; + return -1; +} +var K1 = VS; +var BS = Array.prototype; +var zS = BS.splice; +function NS($) { + var Q = this.__data__, J = K1(Q, $); + if (J < 0) return false; + var Y = Q.length - 1; + if (J == Y) Q.pop(); + else zS.call(Q, J, 1); + return --this.size, true; +} +var FN = NS; +function wS($) { + var Q = this.__data__, J = K1(Q, $); + return J < 0 ? void 0 : Q[J][1]; +} +var ZN = wS; +function OS($) { + return K1(this.__data__, $) > -1; +} +var MN = OS; +function DS($, Q) { + var J = this.__data__, Y = K1(J, $); + if (Y < 0) ++this.size, J.push([$, Q]); + else J[Y][1] = Q; + return this; +} +var LN = DS; +function s0($) { + var Q = -1, J = $ == null ? 0 : $.length; + this.clear(); + while (++Q < J) { + var Y = $[Q]; + this.set(Y[0], Y[1]); + } +} +s0.prototype.clear = DN; +s0.prototype.delete = FN; +s0.prototype.get = ZN; +s0.prototype.has = MN; +s0.prototype.set = LN; +var q1 = s0; +var FS = t0(l6, "Map"); +var N5 = FS; +function ZS() { + this.size = 0, this.__data__ = { hash: new ZG(), map: new (N5 || q1)(), string: new ZG() }; +} +var jN = ZS; +function MS($) { + var Q = typeof $; + return Q == "string" || Q == "number" || Q == "symbol" || Q == "boolean" ? $ !== "__proto__" : $ === null; +} +var AN = MS; +function LS($, Q) { + var J = $.__data__; + return AN(Q) ? J[typeof Q == "string" ? "string" : "hash"] : J.map; +} +var V1 = LS; +function jS($) { + var Q = V1(this, $).delete($); + return this.size -= Q ? 1 : 0, Q; +} +var IN = jS; +function AS($) { + return V1(this, $).get($); +} +var RN = AS; +function IS($) { + return V1(this, $).has($); +} +var PN = IS; +function RS($, Q) { + var J = V1(this, $), Y = J.size; + return J.set($, Q), this.size += J.size == Y ? 0 : 1, this; +} +var EN = RS; +function e0($) { + var Q = -1, J = $ == null ? 0 : $.length; + this.clear(); + while (++Q < J) { + var Y = $[Q]; + this.set(Y[0], Y[1]); + } +} +e0.prototype.clear = jN; +e0.prototype.delete = IN; +e0.prototype.get = RN; +e0.prototype.has = PN; +e0.prototype.set = EN; +var m9 = e0; +var PS = "Expected a function"; +function MG($, Q) { + if (typeof $ != "function" || Q != null && typeof Q != "function") throw TypeError(PS); + var J = function() { + var Y = arguments, X = Q ? Q.apply(this, Y) : Y[0], W = J.cache; + if (W.has(X)) return W.get(X); + var G = $.apply(this, Y); + return J.cache = W.set(X, G) || W, G; + }; + return J.cache = new (MG.Cache || m9)(), J; +} +MG.Cache = m9; +var C$ = MG; +var p6 = C$(() => { + var _a5; + return ((_a5 = process.env.CLAUDE_CONFIG_DIR) != null ? _a5 : (0, import_path2.join)((0, import_os2.homedir)(), ".claude")).normalize("NFC"); +}, () => process.env.CLAUDE_CONFIG_DIR); +var h0$ = C$(() => R$(process.env.CLAUDE_CODE_SUPERVISED)); +function y($, Q, J, Y, X) { + if (Y === "m") throw TypeError("Private method is not writable"); + if (Y === "a" && !X) throw TypeError("Private accessor was defined without a setter"); + if (typeof Q === "function" ? $ !== Q || !X : !Q.has($)) throw TypeError("Cannot write private member to an object whose class did not declare it"); + return Y === "a" ? X.call($, J) : X ? X.value = J : Q.set($, J), J; +} +function Z($, Q, J, Y) { + if (J === "a" && !Y) throw TypeError("Private accessor was defined without a getter"); + if (typeof Q === "function" ? $ !== Q || !Y : !Q.has($)) throw TypeError("Cannot read private member from an object whose class did not declare it"); + return J === "m" ? Y : J === "a" ? Y.call($) : Y ? Y.value : Q.get($); +} +var LG = function() { + let { crypto: $ } = globalThis; + if ($ == null ? void 0 : $.randomUUID) return LG = $.randomUUID.bind($), $.randomUUID(); + let Q = new Uint8Array(1), J = $ ? () => $.getRandomValues(Q)[0] : () => Math.random() * 255 & 255; + return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (Y) => (+Y ^ J() & 15 >> +Y / 4).toString(16)); +}; +function T4($) { + return typeof $ === "object" && $ !== null && ("name" in $ && $.name === "AbortError" || "message" in $ && String($.message).includes("FetchRequestCanceledException")); +} +var l9 = ($) => { + if ($ instanceof Error) return $; + if (typeof $ === "object" && $ !== null) { + try { + if (Object.prototype.toString.call($) === "[object Error]") { + let Q = Error($.message, $.cause ? { cause: $.cause } : {}); + if ($.stack) Q.stack = $.stack; + if ($.cause && !Q.cause) Q.cause = $.cause; + if ($.name) Q.name = $.name; + return Q; + } + } catch (e2) { + } + try { + return Error(JSON.stringify($)); + } catch (e2) { + } + } + return Error($); +}; +var g = class extends Error { +}; +var n$ = class _n$ extends g { + constructor($, Q, J, Y, X) { + super(`${_n$.makeMessage($, Q, J)}`); + this.status = $, this.headers = Y, this.requestID = Y == null ? void 0 : Y.get("request-id"), this.error = Q, this.type = X != null ? X : null; + } + static makeMessage($, Q, J) { + let Y = (Q == null ? void 0 : Q.message) ? typeof Q.message === "string" ? Q.message : JSON.stringify(Q.message) : Q ? JSON.stringify(Q) : J; + if ($ && Y) return `${$} ${Y}`; + if ($) return `${$} status code (no body)`; + if (Y) return Y; + return "(no status code or body)"; + } + static generate($, Q, J, Y) { + var _a5; + if (!$ || !Y) return new e1({ message: J, cause: l9(Q) }); + let X = Q, W = (_a5 = X == null ? void 0 : X.error) == null ? void 0 : _a5.type; + if ($ === 400) return new p9($, X, J, Y, W); + if ($ === 401) return new d9($, X, J, Y, W); + if ($ === 403) return new i9($, X, J, Y, W); + if ($ === 404) return new n9($, X, J, Y, W); + if ($ === 409) return new r9($, X, J, Y, W); + if ($ === 422) return new o9($, X, J, Y, W); + if ($ === 429) return new t9($, X, J, Y, W); + if ($ >= 500) return new a9($, X, J, Y, W); + return new _n$($, X, J, Y, W); + } +}; +var Q6 = class extends n$ { + constructor({ message: $ } = {}) { + super(void 0, void 0, $ || "Request was aborted.", void 0); + } +}; +var e1 = class extends n$ { + constructor({ message: $, cause: Q }) { + super(void 0, void 0, $ || "Connection error.", void 0); + if (Q) this.cause = Q; + } +}; +var c9 = class extends e1 { + constructor({ message: $ } = {}) { + super({ message: $ != null ? $ : "Request timed out." }); + } +}; +var p9 = class extends n$ { +}; +var d9 = class extends n$ { +}; +var i9 = class extends n$ { +}; +var n9 = class extends n$ { +}; +var r9 = class extends n$ { +}; +var o9 = class extends n$ { +}; +var t9 = class extends n$ { +}; +var a9 = class extends n$ { +}; +var kS = /^[a-z][a-z0-9+.-]*:/i; +var bN = ($) => { + return kS.test($); +}; +var jG = ($) => (jG = Array.isArray, jG($)); +var AG = jG; +function w5($) { + if (typeof $ !== "object") return {}; + return $ != null ? $ : {}; +} +function IG($) { + if (!$) return true; + for (let Q in $) return false; + return true; +} +function _N($, Q) { + return Object.prototype.hasOwnProperty.call($, Q); +} +var kN = ($, Q) => { + if (typeof Q !== "number" || !Number.isInteger(Q)) throw new g(`${$} must be an integer`); + if (Q < 0) throw new g(`${$} must be a positive integer`); + return Q; +}; +var O5 = ($) => { + try { + return JSON.parse($); + } catch (Q) { + return; + } +}; +var SN = ($) => new Promise((Q) => setTimeout(Q, $)); +var d6 = "0.94.0"; +var xN = () => { + return typeof window < "u" && typeof window.document < "u" && typeof navigator < "u"; +}; +function SS() { + if (typeof Deno < "u" && Deno.build != null) return "deno"; + if (typeof EdgeRuntime < "u") return "edge"; + if (Object.prototype.toString.call(typeof globalThis.process < "u" ? globalThis.process : 0) === "[object process]") return "node"; + return "unknown"; +} +var vS = () => { + var _a5, _b3, _c2, _d, _e2; + let $ = SS(); + if ($ === "deno") return { "X-Stainless-Lang": "js", "X-Stainless-Package-Version": d6, "X-Stainless-OS": CN(Deno.build.os), "X-Stainless-Arch": vN(Deno.build.arch), "X-Stainless-Runtime": "deno", "X-Stainless-Runtime-Version": typeof Deno.version === "string" ? Deno.version : (_b3 = (_a5 = Deno.version) == null ? void 0 : _a5.deno) != null ? _b3 : "unknown" }; + if (typeof EdgeRuntime < "u") return { "X-Stainless-Lang": "js", "X-Stainless-Package-Version": d6, "X-Stainless-OS": "Unknown", "X-Stainless-Arch": `other:${EdgeRuntime}`, "X-Stainless-Runtime": "edge", "X-Stainless-Runtime-Version": globalThis.process.version }; + if ($ === "node") return { "X-Stainless-Lang": "js", "X-Stainless-Package-Version": d6, "X-Stainless-OS": CN((_c2 = globalThis.process.platform) != null ? _c2 : "unknown"), "X-Stainless-Arch": vN((_d = globalThis.process.arch) != null ? _d : "unknown"), "X-Stainless-Runtime": "node", "X-Stainless-Runtime-Version": (_e2 = globalThis.process.version) != null ? _e2 : "unknown" }; + let Q = CS(); + if (Q) return { "X-Stainless-Lang": "js", "X-Stainless-Package-Version": d6, "X-Stainless-OS": "Unknown", "X-Stainless-Arch": "unknown", "X-Stainless-Runtime": `browser:${Q.browser}`, "X-Stainless-Runtime-Version": Q.version }; + return { "X-Stainless-Lang": "js", "X-Stainless-Package-Version": d6, "X-Stainless-OS": "Unknown", "X-Stainless-Arch": "unknown", "X-Stainless-Runtime": "unknown", "X-Stainless-Runtime-Version": "unknown" }; +}; +function CS() { + if (typeof navigator > "u" || !navigator) return null; + let $ = [{ key: "edge", pattern: /Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, { key: "ie", pattern: /MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, { key: "ie", pattern: /Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/ }, { key: "chrome", pattern: /Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, { key: "firefox", pattern: /Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, { key: "safari", pattern: /(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/ }]; + for (let { key: Q, pattern: J } of $) { + let Y = J.exec(navigator.userAgent); + if (Y) { + let X = Y[1] || 0, W = Y[2] || 0, G = Y[3] || 0; + return { browser: Q, version: `${X}.${W}.${G}` }; + } + } + return null; +} +var vN = ($) => { + if ($ === "x32") return "x32"; + if ($ === "x86_64" || $ === "x64") return "x64"; + if ($ === "arm") return "arm"; + if ($ === "aarch64" || $ === "arm64") return "arm64"; + if ($) return `other:${$}`; + return "unknown"; +}; +var CN = ($) => { + if ($ = $.toLowerCase(), $.includes("ios")) return "iOS"; + if ($ === "android") return "Android"; + if ($ === "darwin") return "MacOS"; + if ($ === "win32") return "Windows"; + if ($ === "freebsd") return "FreeBSD"; + if ($ === "openbsd") return "OpenBSD"; + if ($ === "linux") return "Linux"; + if ($) return `Other:${$}`; + return "Unknown"; +}; +var TN; +var s9 = () => { + return TN != null ? TN : TN = vS(); +}; +function yN() { + if (typeof fetch < "u") return fetch; + throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`"); +} +function RG(...$) { + let Q = globalThis.ReadableStream; + if (typeof Q > "u") throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`"); + return new Q(...$); +} +function D5($) { + let Q = Symbol.asyncIterator in $ ? $[Symbol.asyncIterator]() : $[Symbol.iterator](); + return RG({ start() { + }, async pull(J) { + let { done: Y, value: X } = await Q.next(); + if (Y) J.close(); + else J.enqueue(X); + }, async cancel() { + var _a5; + await ((_a5 = Q.return) == null ? void 0 : _a5.call(Q)); + } }); +} +function e9($) { + if ($[Symbol.asyncIterator]) return $; + let Q = $.getReader(); + return { async next() { + try { + let J = await Q.read(); + if (J == null ? void 0 : J.done) Q.releaseLock(); + return J; + } catch (J) { + throw Q.releaseLock(), J; + } + }, async return() { + let J = Q.cancel(); + return Q.releaseLock(), await J, { done: true, value: void 0 }; + }, [Symbol.asyncIterator]() { + return this; + } }; +} +async function fN($) { + var _a5, _b3; + if ($ === null || typeof $ !== "object") return; + if ($[Symbol.asyncIterator]) { + await ((_b3 = (_a5 = $[Symbol.asyncIterator]()).return) == null ? void 0 : _b3.call(_a5)); + return; + } + let Q = $.getReader(), J = Q.cancel(); + Q.releaseLock(), await J; +} +var gN = ({ headers: $, body: Q }) => { + return { bodyHeaders: { "content-type": "application/json" }, body: JSON.stringify(Q) }; +}; +function hN($) { + return Object.entries($).filter(([Q, J]) => typeof J < "u").map(([Q, J]) => { + if (typeof J === "string" || typeof J === "number" || typeof J === "boolean") return `${encodeURIComponent(Q)}=${encodeURIComponent(J)}`; + if (J === null) return `${encodeURIComponent(Q)}=`; + throw new g(`Cannot stringify type ${typeof J}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`); + }).join("&"); +} +var mN = "urn:ietf:params:oauth:grant-type:jwt-bearer"; +var lN = "refresh_token"; +var F5 = "/v1/oauth/token"; +var $0 = "oauth-2025-04-20"; +var cN = "oidc-federation-2026-04-01"; +var pN = 120; +var $8 = 30; +var dN = 5; +var uN = 1048576; +function Z5($) { + if (!$) return; + let Q; + try { + Q = new URL($); + } catch (Y) { + throw new O$(`Invalid token endpoint base URL "${$}": ${Y}`); + } + if (Q.protocol === "https:") return; + let J = Q.hostname.toLowerCase().replace(/^\[|\]$/g, ""); + if (Q.protocol === "http:" && (J === "localhost" || J === "127.0.0.1" || J === "::1")) return; + throw new O$(`Refusing to send credential over non-https token endpoint "${$}"`); +} +async function M5($, Q) { + let J = await fS($), Y; + try { + Y = JSON.parse(J); + } catch (e2) { + throw new O$(`Token endpoint returned non-JSON response (status ${$.status})`, $.status, Z6(J), Q); + } + if (!Y.access_token) throw new O$(`Token endpoint response missing access_token: ${JSON.stringify(Z6(Y))}`, $.status, Z6(Y), Q); + if (Y.token_type && Y.token_type.toLowerCase() !== "bearer") throw new O$(`Token endpoint response: unsupported token_type "${Y.token_type}" (want Bearer)`, $.status, Z6(Y), Q); + return Y; +} +var PG = 2e3; +var yS = /* @__PURE__ */ new Set(["error", "error_description", "error_uri"]); +function Z6($) { + if ($ == null) return $; + if (typeof $ === "string") { + let Q; + try { + Q = JSON.parse($); + } catch (e2) { + if ($.length <= PG) return $; + return $.slice(0, PG) + `... <${$.length - PG} more chars>`; + } + return JSON.stringify(Z6(Q)); + } + if (typeof $ === "object" && !Array.isArray($)) { + let Q = {}; + for (let [J, Y] of Object.entries($)) if (yS.has(J)) Q[J] = Y; + return Q; + } + return null; +} +async function L5($, Q = (J) => console.warn(`anthropic-sdk: ${J}`)) { + if (typeof process > "u" || process.platform === "win32") return; + let J = await import("node:fs"), Y = $, X; + try { + Y = await J.promises.realpath($), X = await J.promises.stat(Y); + } catch (e2) { + return; + } + let W = X.mode & 511; + if (W & 18) throw new O$(`Credentials file at ${Y} is group/world-writable (mode 0o${W.toString(8)}); this allows other local users to plant tokens. Run \`chmod 600 ${Y}\`.`); + if (W & 36) throw new O$(`Credentials file at ${Y} is group/world-readable (mode 0o${W.toString(8)}); run \`chmod 600 ${Y}\` before retrying.`); + if (typeof process.getuid === "function" && X.uid !== process.getuid()) Q(`credentials file at ${Y} is owned by uid ${X.uid} (current process uid ${process.getuid()}); verify this is intentional.`); +} +async function j5($, Q) { + let J = await import("node:fs"), X = (await import("node:path")).dirname($); + await J.promises.mkdir(X, { recursive: true, mode: 448 }); + let W = `${$}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`; + try { + let G = await J.promises.open(W, "w", 384); + try { + await G.writeFile(JSON.stringify(Q, null, 2)), await G.sync(); + } finally { + await G.close(); + } + await J.promises.rename(W, $); + } catch (G) { + throw await J.promises.unlink(W).catch(() => { + }), G; + } + try { + let G = await J.promises.open(X, "r"); + try { + await G.sync(); + } finally { + await G.close(); + } + } catch (e2) { + } +} +async function fS($) { + if (!$.body) return ""; + let Q = $.body.getReader(), J = [], Y = 0; + for (; ; ) { + let { done: W, value: G } = await Q.read(); + if (W) break; + if (Y + G.length > uN) { + let U = uN - Y; + if (U > 0) J.push(G.subarray(0, U)); + await Q.cancel(); + break; + } + J.push(G), Y += G.length; + } + let X; + if (J.length === 1) X = J[0]; + else { + X = new Uint8Array(J.reduce((G, U) => G + U.length, 0)); + let W = 0; + for (let G of J) X.set(G, W), W += G.length; + } + return new TextDecoder("utf-8").decode(X); +} +var O$ = class extends g { + constructor($, Q = null, J = null, Y = null) { + super($); + this.statusCode = Q, this.body = J, this.requestId = Y; + } +}; +function Y4() { + return Math.floor(Date.now() / 1e3); +} +var EG = class { + constructor($, Q) { + this.cached = null, this.pendingRefresh = null, this.nextForce = false, this.lastAdvisoryError = 0, this.provider = $, this.onAdvisoryRefreshError = Q; + } + async getToken() { + let $ = this.nextForce; + this.nextForce = false; + let Q = this.cached; + if ($ || Q == null) return (await this.refresh($)).token; + if (Q.expiresAt == null) return Q.token; + let J = Q.expiresAt - Y4(); + if (J > pN) return Q.token; + if (J > $8) return this.backgroundRefresh(), Q.token; + return (await this.refresh()).token; + } + invalidate() { + this.cached = null, this.nextForce = true; + } + refresh($ = false) { + if (this.pendingRefresh && !$) return this.pendingRefresh; + return this.doRefresh($); + } + backgroundRefresh() { + if (this.pendingRefresh) return; + if (Y4() - this.lastAdvisoryError < dN) return; + this.doRefresh().catch(($) => { + var _a5; + this.lastAdvisoryError = Y4(), (_a5 = this.onAdvisoryRefreshError) == null ? void 0 : _a5.call(this, $); + }); + } + doRefresh($ = false) { + return this.pendingRefresh = this.provider($ ? { forceRefresh: true } : void 0).then((Q) => { + return this.cached = Q, this.pendingRefresh = null, Q; + }, (Q) => { + throw this.pendingRefresh = null, Q; + }), this.pendingRefresh; + } +}; +var w$ = ($) => { + var _a5, _b3, _c2, _d, _e2; + if (typeof globalThis.process < "u") return ((_b3 = (_a5 = globalThis.process.env) == null ? void 0 : _a5[$]) == null ? void 0 : _b3.trim()) || void 0; + if (typeof globalThis.Deno < "u") return ((_e2 = (_d = (_c2 = globalThis.Deno.env) == null ? void 0 : _c2.get) == null ? void 0 : _d.call(_c2, $)) == null ? void 0 : _e2.trim()) || void 0; + return; +}; +function rN($) { + let Q = 0; + for (let X of $) Q += X.length; + let J = new Uint8Array(Q), Y = 0; + for (let X of $) J.set(X, Y), Y += X.length; + return J; +} +var iN; +function Q8($) { + let Q; + return (iN != null ? iN : (Q = new globalThis.TextEncoder(), iN = Q.encode.bind(Q)))($); +} +var nN; +function bG($) { + let Q; + return (nN != null ? nN : (Q = new globalThis.TextDecoder(), nN = Q.decode.bind(Q)))($); +} +var I5 = { off: 0, error: 200, warn: 300, info: 400, debug: 500 }; +var _G = ($, Q, J) => { + if (!$) return; + if (_N(I5, $)) return $; + m$(J).warn(`${Q} was set to ${JSON.stringify($)}, expected one of ${JSON.stringify(Object.keys(I5))}`); + return; +}; +function $Q() { +} +function A5($, Q, J) { + if (!Q || I5[$] > I5[J]) return $Q; + else return Q[$].bind(Q); +} +var gS = { error: $Q, warn: $Q, info: $Q, debug: $Q }; +var oN = /* @__PURE__ */ new WeakMap(); +function m$($) { + var _a5; + let Q = $.logger, J = (_a5 = $.logLevel) != null ? _a5 : "off"; + if (!Q) return gS; + let Y = oN.get(Q); + if (Y && Y[0] === J) return Y[1]; + let X = { error: A5("error", Q, J), warn: A5("warn", Q, J), info: A5("info", Q, J), debug: A5("debug", Q, J) }; + return oN.set(Q, [J, X]), X; +} +var x4 = ($) => { + if ($.options) $.options = { ...$.options }, delete $.options.headers; + if ($.headers) $.headers = Object.fromEntries(($.headers instanceof Headers ? [...$.headers] : Object.entries($.headers)).map(([Q, J]) => [Q, Q.toLowerCase() === "x-api-key" || Q.toLowerCase() === "authorization" || Q.toLowerCase() === "cookie" || Q.toLowerCase() === "set-cookie" ? "***" : J])); + if ("retryOfRequestLogID" in $) { + if ($.retryOfRequestLogID) $.retryOf = $.retryOfRequestLogID; + delete $.retryOfRequestLogID; + } + return $; +}; +var R5 = "1.0"; +var hS = /^[A-Za-z0-9_.-]+$/; +function tN($) { + if (!$) throw Error("profile name is empty"); + if ($ === "." || $ === "..") throw Error(`profile name "${$}" is not allowed`); + if ($.includes("/") || $.includes("\\")) throw Error(`profile name "${$}" must not contain path separators`); + if (!hS.test($)) throw Error(`profile name "${$}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`); +} +var aN = async ($) => { + var _a5, _b3, _c2, _d, _e2, _f2; + var Q, J; + let Y = await kG(); + if (Y === null) return null; + let X = $ != null ? $ : await eN(); + if (X === null) return null; + tN(X); + let W = await import("node:fs"), U = (await import("node:path")).join(Y, "configs", `${X}.json`), H; + try { + H = await W.promises.readFile(U, "utf-8"); + } catch (B) { + if ((B == null ? void 0 : B.code) !== "ENOENT") throw Error(`failed to read config file ${U}: ${B}`); + H = null; + } + if (H === null) { + let B = w$("ANTHROPIC_ORGANIZATION_ID"), z4 = w$("ANTHROPIC_IDENTITY_TOKEN_FILE"), N = w$("ANTHROPIC_FEDERATION_RULE_ID"); + if (N && B) return { fromFile: false, config: { organization_id: B, workspace_id: w$("ANTHROPIC_WORKSPACE_ID"), base_url: w$("ANTHROPIC_BASE_URL"), authentication: { type: "oidc_federation", federation_rule_id: N, service_account_id: w$("ANTHROPIC_SERVICE_ACCOUNT_ID"), identity_token: z4 ? { source: "file", path: z4 } : void 0, scope: w$("ANTHROPIC_SCOPE") } } }; + return null; + } + let q; + try { + q = JSON.parse(H); + } catch (B) { + throw Error(`failed to parse config file ${U}: ${B}`); + } + if (!q.authentication) throw Error(`config file ${U} is missing "authentication"`); + let V = q.authentication.type; + if (V !== "oidc_federation" && V !== "user_oauth") throw Error(`authentication.type "${V}" is not a known authentication type`); + if ((_a5 = q.organization_id) != null ? _a5 : q.organization_id = w$("ANTHROPIC_ORGANIZATION_ID"), (_b3 = q.workspace_id) != null ? _b3 : q.workspace_id = w$("ANTHROPIC_WORKSPACE_ID"), (_c2 = q.base_url) != null ? _c2 : q.base_url = w$("ANTHROPIC_BASE_URL"), (_d = (Q = q.authentication).scope) != null ? _d : Q.scope = w$("ANTHROPIC_SCOPE"), q.authentication.type === "oidc_federation") { + if (!q.authentication.identity_token) { + let B = w$("ANTHROPIC_IDENTITY_TOKEN_FILE"); + if (B) q.authentication.identity_token = { source: "file", path: B }; + } + if (!q.authentication.federation_rule_id) q.authentication.federation_rule_id = (_e2 = w$("ANTHROPIC_FEDERATION_RULE_ID")) != null ? _e2 : ""; + (_f2 = (J = q.authentication).service_account_id) != null ? _f2 : J.service_account_id = w$("ANTHROPIC_SERVICE_ACCOUNT_ID"); + } + return { config: q, fromFile: true }; +}; +var sN = async ($, Q) => { + if ($ == null ? void 0 : $.authentication.credentials_path) return $.authentication.credentials_path; + let J = await kG(); + if (!J) return null; + let Y = Q != null ? Q : await eN(); + if (!Y) return null; + return tN(Y), (await import("node:path")).join(J, "credentials", `${Y}.json`); +}; +var kG = async () => { + if (!uS()) return null; + let $ = await import("node:path"), Q = w$("ANTHROPIC_CONFIG_DIR"); + if (Q) return Q; + if (s9()["X-Stainless-OS"] === "Windows") { + let W = w$("APPDATA"); + if (W) return $.join(W, "Anthropic"); + let G = w$("USERPROFILE"); + if (G) return $.join(G, "AppData", "Roaming", "Anthropic"); + return null; + } + let Y = w$("XDG_CONFIG_HOME"); + if (Y) return $.join(Y, "anthropic"); + let X = w$("HOME"); + if (X) return $.join(X, ".config", "anthropic"); + return null; +}; +var uS = () => { + let $ = s9()["X-Stainless-Runtime"]; + return $ === "node" || $ === "deno"; +}; +var eN = async () => { + let $ = await kG(); + if (!$) return null; + let Q = w$("ANTHROPIC_PROFILE"); + if (Q) return Q; + let J = await import("node:fs"), X = (await import("node:path")).join($, "active_config"); + try { + return (await J.promises.readFile(X, "utf-8")).trim() || "default"; + } catch (W) { + if ((W == null ? void 0 : W.code) !== "ENOENT") throw Error(`failed to read ${X}: ${W}`); + return "default"; + } +}; +function SG($) { + if (!$) throw new g("Identity token file path is empty"); + return async () => { + let Q = await import("node:fs"), J; + try { + J = await Q.promises.readFile($, "utf-8"); + } catch (X) { + throw new g(`Failed to read identity token file at ${$}: ${X}`); + } + let Y = J.trim(); + if (!Y) throw new g(`Identity token file at ${$} is empty`); + return Y; + }; +} +function $w($) { + if (!$) throw new g("Identity token value is empty"); + return () => $; +} +function Qw($) { + return async () => { + Z5($.baseURL); + let Q = await $.identityTokenProvider(); + if (Q.length > 16384) throw new O$(`Identity token is ${Math.ceil(Q.length / 1024)} KiB, exceeds the 16 KiB assertion limit`); + let J = { grant_type: mN, assertion: Q, federation_rule_id: $.federationRuleId, organization_id: $.organizationId }; + if ($.serviceAccountId) J.service_account_id = $.serviceAccountId; + if ($.workspaceId) J.workspace_id = $.workspaceId; + let Y = `${$.baseURL}${F5}`, X; + try { + X = await $.fetch(Y, { method: "POST", headers: { "Content-Type": "application/json", "anthropic-beta": `${$0},${cN}`, "User-Agent": $.userAgent || `anthropic-sdk-typescript/${d6} oidcFederationProvider` }, body: JSON.stringify(J) }); + } catch (H) { + throw new O$(`Failed to reach token endpoint ${Y}: ${H}`); + } + let W = X.headers.get("Request-Id"); + if (!X.ok) { + let H = await X.text().catch(() => ""), q = Z6(H), V = ""; + if (X.status === 401) V = ` Ensure your federation rule matches your identity token. ${$.workspaceId ? "" : "If your federation rule is scoped to multiple workspaces, set the ANTHROPIC_WORKSPACE_ID environment variable, the 'workspace_id' config key, or the `workspaceId` option. "}View your authentication events in the Workload identity page of Claude Console for more details.`; + throw new O$(`Token exchange failed with status ${X.status}${W ? ` (request-id ${W})` : ""}: ${q}${V}`, X.status, q, W); + } + let G = await M5(X, W), U = Number(G.expires_in); + if (!Number.isFinite(U)) throw new O$(`Token endpoint response missing required fields: ${JSON.stringify(Z6(G))}`, X.status, Z6(G), W); + return { token: G.access_token, expiresAt: Y4() + U }; + }; +} +function Jw($) { + return async (Q) => { + let J = await import("node:fs"); + await L5($.credentialsPath, $.onSafetyWarning); + let Y; + try { + Y = await J.promises.readFile($.credentialsPath, "utf-8"); + } catch (D) { + throw new O$(`Credentials file not found at ${$.credentialsPath}: ${D}`); + } + let X; + try { + X = JSON.parse(Y); + } catch (D) { + throw new O$(`Credentials file at ${$.credentialsPath} is not valid JSON: ${D}`); + } + let W = X.access_token; + if (!W) throw new O$(`Credentials file at ${$.credentialsPath} must include 'access_token'`); + let G = X.expires_at; + if (!(Q == null ? void 0 : Q.forceRefresh) && (G == null || Y4() < G - $8)) return { token: W, expiresAt: G != null ? G : null }; + let U = X.refresh_token; + if (!$.clientId || !U) throw new O$(`Access token at ${$.credentialsPath} has expired and no refresh is available (client_id ${$.clientId ? "set" : "empty"}, refresh_token ${U ? "set" : "empty"})`); + Z5($.baseURL); + let H = { grant_type: lN, refresh_token: U, client_id: $.clientId }, q = `${$.baseURL}${F5}`, V; + try { + V = await $.fetch(q, { method: "POST", headers: { "Content-Type": "application/json", "anthropic-beta": $0, "User-Agent": $.userAgent || `anthropic-sdk-typescript/${d6} userOAuthProvider` }, body: JSON.stringify(H) }); + } catch (D) { + throw new O$(`User OAuth refresh failed to reach token endpoint: ${D}`); + } + let B = V.headers.get("Request-Id"); + if (!V.ok) { + let D = await V.text().catch(() => ""); + throw new O$(`User OAuth refresh failed (HTTP ${V.status}): ${Z6(D)}`, V.status, Z6(D), B); + } + let z4 = await M5(V, B), N = Number(z4.expires_in); + if (!Number.isFinite(N)) throw new O$(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(Z6(z4))}`, V.status, Z6(z4), B); + let w = Y4() + N, O = z4.refresh_token || U; + return await j5($.credentialsPath, { ...X, version: R5, type: "oauth_token", access_token: z4.access_token, expires_at: w, refresh_token: O }), { token: z4.access_token, expiresAt: w }; + }; +} +function vG($, Q) { + var _a5; + let J = (_a5 = $.authentication.credentials_path) != null ? _a5 : null, Y = ($.base_url || Q.baseURL).replace(/\/+$/, ""), X = mS($, J, Y, Q), W = {}; + if ($.workspace_id && $.authentication.type === "user_oauth") W["anthropic-workspace-id"] = $.workspace_id; + return { provider: X, extraHeaders: W, baseURL: $.base_url || void 0 }; +} +async function Xw($, Q) { + var _a5; + let J = await aN(Q); + if (!J) return null; + let { config: Y, fromFile: X } = J, W = Y.authentication.credentials_path || !X ? Y : { ...Y, authentication: { ...Y.authentication, credentials_path: (_a5 = await sN(Y, Q)) != null ? _a5 : void 0 } }; + return vG(W, $); +} +function mS($, Q, J, Y) { + switch ($.authentication.type) { + case "oidc_federation": { + let X = $.authentication, W = lS(X); + if (!W) throw new O$("oidc_federation config requires an identity token (set authentication.identity_token, ANTHROPIC_IDENTITY_TOKEN_FILE, or ANTHROPIC_IDENTITY_TOKEN)"); + if (!X.federation_rule_id) throw new O$("oidc_federation config requires 'federation_rule_id'. Set it in authentication.federation_rule_id in your profile, or via ANTHROPIC_FEDERATION_RULE_ID (profile takes precedence)."); + if (!$.organization_id) throw new O$("oidc_federation config requires organization_id (set ANTHROPIC_ORGANIZATION_ID or config.organization_id)"); + let G = Qw({ identityTokenProvider: W, federationRuleId: X.federation_rule_id, organizationId: $.organization_id, serviceAccountId: X.service_account_id, workspaceId: $.workspace_id, baseURL: J, fetch: Y.fetch, userAgent: Y.userAgent }); + if (Q) return cS(G, Q, Y.onCacheWriteError, Y.onSafetyWarning); + return G; + } + case "user_oauth": { + if (!Q) throw new O$("user_oauth config requires authentication.credentials_path (or load via a profile so it defaults to /credentials/.json)"); + return Jw({ credentialsPath: Q, clientId: $.authentication.client_id, baseURL: J, fetch: Y.fetch, userAgent: Y.userAgent, onSafetyWarning: Y.onSafetyWarning }); + } + default: { + let X = $.authentication.type; + throw new O$(`authentication.type "${X}" is not a known authentication type`); + } + } +} +function lS($) { + if ($.identity_token) { + let Y = $.identity_token.source; + if (Y !== "file") throw new O$(`identity_token.source "${Y}" is not supported by this SDK version (only "file")`); + if (!$.identity_token.path) throw new O$('identity_token.source "file" requires a non-empty path'); + return SG($.identity_token.path); + } + let Q = w$("ANTHROPIC_IDENTITY_TOKEN_FILE"); + if (Q) return SG(Q); + let J = w$("ANTHROPIC_IDENTITY_TOKEN"); + if (J) return $w(J); + return null; +} +function cS($, Q, J, Y) { + return async (X) => { + let W = await import("node:fs"); + await L5(Q, Y); + let G; + try { + let H = await W.promises.readFile(Q, "utf-8"); + G = JSON.parse(H); + let q = G == null ? void 0 : G.access_token; + if (q && !(X == null ? void 0 : X.forceRefresh)) { + let V = G == null ? void 0 : G.expires_at; + if (V == null || Y4() < V - $8) return { token: q, expiresAt: V != null ? V : null }; + } + } catch (H) { + if ((H == null ? void 0 : H.code) !== "ENOENT" && !(H instanceof SyntaxError)) J == null ? void 0 : J(H); + } + let U = await $(X); + try { + await j5(Q, { ...G != null ? G : {}, version: R5, type: "oauth_token", access_token: U.token, expires_at: U.expiresAt }); + } catch (H) { + J == null ? void 0 : J(H); + } + return U; + }; +} +var C6; +var T6; +var B1 = class { + constructor() { + C6.set(this, void 0), T6.set(this, void 0), y(this, C6, new Uint8Array(), "f"), y(this, T6, null, "f"); + } + decode($) { + if ($ == null) return []; + let Q = $ instanceof ArrayBuffer ? new Uint8Array($) : typeof $ === "string" ? Q8($) : $; + y(this, C6, rN([Z(this, C6, "f"), Q]), "f"); + let J = [], Y; + while ((Y = pS(Z(this, C6, "f"), Z(this, T6, "f"))) != null) { + if (Y.carriage && Z(this, T6, "f") == null) { + y(this, T6, Y.index, "f"); + continue; + } + if (Z(this, T6, "f") != null && (Y.index !== Z(this, T6, "f") + 1 || Y.carriage)) { + J.push(bG(Z(this, C6, "f").subarray(0, Z(this, T6, "f") - 1))), y(this, C6, Z(this, C6, "f").subarray(Z(this, T6, "f")), "f"), y(this, T6, null, "f"); + continue; + } + let X = Z(this, T6, "f") !== null ? Y.preceding - 1 : Y.preceding, W = bG(Z(this, C6, "f").subarray(0, X)); + J.push(W), y(this, C6, Z(this, C6, "f").subarray(Y.index), "f"), y(this, T6, null, "f"); + } + return J; + } + flush() { + if (!Z(this, C6, "f").length) return []; + return this.decode(` +`); + } +}; +C6 = /* @__PURE__ */ new WeakMap(), T6 = /* @__PURE__ */ new WeakMap(); +B1.NEWLINE_CHARS = /* @__PURE__ */ new Set([` +`, "\r"]); +B1.NEWLINE_REGEXP = /\r\n|[\n\r]/g; +function pS($, Q) { + for (let X = Q != null ? Q : 0; X < $.length; X++) { + if ($[X] === 10) return { preceding: X, index: X + 1, carriage: false }; + if ($[X] === 13) return { preceding: X, index: X + 1, carriage: true }; + } + return null; +} +function Yw($) { + for (let Y = 0; Y < $.length - 1; Y++) { + if ($[Y] === 10 && $[Y + 1] === 10) return Y + 2; + if ($[Y] === 13 && $[Y + 1] === 13) return Y + 2; + if ($[Y] === 13 && $[Y + 1] === 10 && Y + 3 < $.length && $[Y + 2] === 13 && $[Y + 3] === 10) return Y + 4; + } + return -1; +} +var QQ; +var x6 = class _x6 { + constructor($, Q, J) { + this.iterator = $, QQ.set(this, void 0), this.controller = Q, y(this, QQ, J, "f"); + } + static fromSSEResponse($, Q, J) { + let Y = false, X = J ? m$(J) : console; + async function* W() { + var _a5, _b3; + if (Y) throw new g("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); + Y = true; + let G = false; + try { + for await (let U of dS($, Q)) { + if (U.event === "completion") try { + yield JSON.parse(U.data); + } catch (H) { + throw X.error("Could not parse message into JSON:", U.data), X.error("From chunk:", U.raw), H; + } + if (U.event === "message_start" || U.event === "message_delta" || U.event === "message_stop" || U.event === "content_block_start" || U.event === "content_block_delta" || U.event === "content_block_stop" || U.event === "message" || U.event === "user.message" || U.event === "user.interrupt" || U.event === "user.tool_confirmation" || U.event === "user.custom_tool_result" || U.event === "agent.message" || U.event === "agent.thinking" || U.event === "agent.tool_use" || U.event === "agent.tool_result" || U.event === "agent.mcp_tool_use" || U.event === "agent.mcp_tool_result" || U.event === "agent.custom_tool_use" || U.event === "agent.thread_context_compacted" || U.event === "session.status_running" || U.event === "session.status_idle" || U.event === "session.status_rescheduled" || U.event === "session.status_terminated" || U.event === "session.error" || U.event === "session.deleted" || U.event === "span.model_request_start" || U.event === "span.model_request_end") try { + yield JSON.parse(U.data); + } catch (H) { + throw X.error("Could not parse message into JSON:", U.data), X.error("From chunk:", U.raw), H; + } + if (U.event === "ping") continue; + if (U.event === "error") { + let H = (_a5 = O5(U.data)) != null ? _a5 : U.data, q = (_b3 = H == null ? void 0 : H.error) == null ? void 0 : _b3.type; + throw new n$(void 0, H, void 0, $.headers, q); + } + } + G = true; + } catch (U) { + if (T4(U)) return; + throw U; + } finally { + if (!G) Q.abort(); + } + } + return new _x6(W, Q, J); + } + static fromReadableStream($, Q, J) { + let Y = false; + async function* X() { + let G = new B1(), U = e9($); + for await (let H of U) for (let q of G.decode(H)) yield q; + for (let H of G.flush()) yield H; + } + async function* W() { + if (Y) throw new g("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); + Y = true; + let G = false; + try { + for await (let U of X()) { + if (G) continue; + if (U) yield JSON.parse(U); + } + G = true; + } catch (U) { + if (T4(U)) return; + throw U; + } finally { + if (!G) Q.abort(); + } + } + return new _x6(W, Q, J); + } + [(QQ = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { + return this.iterator(); + } + tee() { + let $ = [], Q = [], J = this.iterator(), Y = (X) => { + return { next: () => { + if (X.length === 0) { + let W = J.next(); + $.push(W), Q.push(W); + } + return X.shift(); + } }; + }; + return [new _x6(() => Y($), this.controller, Z(this, QQ, "f")), new _x6(() => Y(Q), this.controller, Z(this, QQ, "f"))]; + } + toReadableStream() { + let $ = this, Q; + return RG({ async start() { + Q = $[Symbol.asyncIterator](); + }, async pull(J) { + try { + let { value: Y, done: X } = await Q.next(); + if (X) return J.close(); + let W = Q8(JSON.stringify(Y) + ` +`); + J.enqueue(W); + } catch (Y) { + J.error(Y); + } + }, async cancel() { + var _a5; + await ((_a5 = Q.return) == null ? void 0 : _a5.call(Q)); + } }); + } +}; +async function* dS($, Q) { + if (!$.body) { + if (Q.abort(), typeof globalThis.navigator < "u" && globalThis.navigator.product === "ReactNative") throw new g("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api"); + throw new g("Attempted to iterate over a response with no body"); + } + let J = new Ww(), Y = new B1(), X = e9($.body); + for await (let W of iS(X)) for (let G of Y.decode(W)) { + let U = J.decode(G); + if (U) yield U; + } + for (let W of Y.flush()) { + let G = J.decode(W); + if (G) yield G; + } +} +async function* iS($) { + let Q = new Uint8Array(); + for await (let J of $) { + if (J == null) continue; + let Y = J instanceof ArrayBuffer ? new Uint8Array(J) : typeof J === "string" ? Q8(J) : J, X = new Uint8Array(Q.length + Y.length); + X.set(Q), X.set(Y, Q.length), Q = X; + let W; + while ((W = Yw(Q)) !== -1) yield Q.slice(0, W), Q = Q.slice(W); + } + if (Q.length > 0) yield Q; +} +var Ww = class { + constructor() { + this.event = null, this.data = [], this.chunks = []; + } + decode($) { + if ($.endsWith("\r")) $ = $.substring(0, $.length - 1); + if (!$) { + if (!this.event && !this.data.length) return null; + let X = { event: this.event, data: this.data.join(` +`), raw: this.chunks }; + return this.event = null, this.data = [], this.chunks = [], X; + } + if (this.chunks.push($), $.startsWith(":")) return null; + let [Q, J, Y] = nS($, ":"); + if (Y.startsWith(" ")) Y = Y.substring(1); + if (Q === "event") this.event = Y; + else if (Q === "data") this.data.push(Y); + return null; + } +}; +function nS($, Q) { + let J = $.indexOf(Q); + if (J !== -1) return [$.substring(0, J), Q, $.substring(J + Q.length)]; + return [$, "", ""]; +} +async function P5($, Q) { + let { response: J, requestLogID: Y, retryOfRequestLogID: X, startTime: W } = Q, G = await (async () => { + var _a5, _b3; + if (Q.options.stream) { + if (m$($).debug("response", J.status, J.url, J.headers, J.body), Q.options.__streamClass) return Q.options.__streamClass.fromSSEResponse(J, Q.controller); + return x6.fromSSEResponse(J, Q.controller); + } + if (J.status === 204) return null; + if (Q.options.__binaryResponse) return J; + let H = (_b3 = (_a5 = J.headers.get("content-type")) == null ? void 0 : _a5.split(";")[0]) == null ? void 0 : _b3.trim(); + if ((H == null ? void 0 : H.includes("application/json")) || (H == null ? void 0 : H.endsWith("+json"))) { + if (J.headers.get("content-length") === "0") return; + let z4 = await J.json(); + return CG(z4, J); + } + return await J.text(); + })(); + return m$($).debug(`[${Y}] response parsed`, x4({ retryOfRequestLogID: X, url: J.url, status: J.status, body: G, durationMs: Date.now() - W })), G; +} +function CG($, Q) { + if (!$ || typeof $ !== "object" || Array.isArray($)) return $; + return Object.defineProperty($, "_request_id", { value: Q.headers.get("request-id"), enumerable: false }); +} +var JQ; +var Q0 = class _Q0 extends Promise { + constructor($, Q, J = P5) { + super((Y) => { + Y(null); + }); + this.responsePromise = Q, this.parseResponse = J, JQ.set(this, void 0), y(this, JQ, $, "f"); + } + _thenUnwrap($) { + return new _Q0(Z(this, JQ, "f"), this.responsePromise, async (Q, J) => CG($(await this.parseResponse(Q, J), J), J.response)); + } + asResponse() { + return this.responsePromise.then(($) => $.response); + } + async withResponse() { + let [$, Q] = await Promise.all([this.parse(), this.asResponse()]); + return { data: $, response: Q, request_id: Q.headers.get("request-id") }; + } + parse() { + if (!this.parsedPromise) this.parsedPromise = this.responsePromise.then(($) => this.parseResponse(Z(this, JQ, "f"), $)); + return this.parsedPromise; + } + then($, Q) { + return this.parse().then($, Q); + } + catch($) { + return this.parse().catch($); + } + finally($) { + return this.parse().finally($); + } +}; +JQ = /* @__PURE__ */ new WeakMap(); +var E5; +var TG = class { + constructor($, Q, J, Y) { + E5.set(this, void 0), y(this, E5, $, "f"), this.options = Y, this.response = Q, this.body = J; + } + hasNextPage() { + if (!this.getPaginatedItems().length) return false; + return this.nextPageRequestOptions() != null; + } + async getNextPage() { + let $ = this.nextPageRequestOptions(); + if (!$) throw new g("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`."); + return await Z(this, E5, "f").requestAPIList(this.constructor, $); + } + async *iterPages() { + let $ = this; + yield $; + while ($.hasNextPage()) $ = await $.getNextPage(), yield $; + } + async *[(E5 = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { + for await (let $ of this.iterPages()) for (let Q of $.getPaginatedItems()) yield Q; + } +}; +var b5 = class extends Q0 { + constructor($, Q, J) { + super($, Q, async (Y, X) => new J(Y, X.response, await P5(Y, X), X.options)); + } + async *[Symbol.asyncIterator]() { + let $ = await this; + for await (let Q of $) yield Q; + } +}; +var W4 = class extends TG { + constructor($, Q, J, Y) { + super($, Q, J, Y); + this.data = J.data || [], this.has_more = J.has_more || false, this.first_id = J.first_id || null, this.last_id = J.last_id || null; + } + getPaginatedItems() { + var _a5; + return (_a5 = this.data) != null ? _a5 : []; + } + hasNextPage() { + if (this.has_more === false) return false; + return super.hasNextPage(); + } + nextPageRequestOptions() { + var _a5; + if ((_a5 = this.options.query) == null ? void 0 : _a5.before_id) { + let Q = this.first_id; + if (!Q) return null; + return { ...this.options, query: { ...w5(this.options.query), before_id: Q } }; + } + let $ = this.last_id; + if (!$) return null; + return { ...this.options, query: { ...w5(this.options.query), after_id: $ } }; + } +}; +var D$ = class extends TG { + constructor($, Q, J, Y) { + super($, Q, J, Y); + this.data = J.data || [], this.next_page = J.next_page || null; + } + getPaginatedItems() { + var _a5; + return (_a5 = this.data) != null ? _a5 : []; + } + nextPageRequestOptions() { + let $ = this.next_page; + if (!$) return null; + return { ...this.options, query: { ...w5(this.options.query), page: $ } }; + } +}; +var yG = () => { + var _a5; + if (typeof File > "u") { + let { process: $ } = globalThis, Q = typeof ((_a5 = $ == null ? void 0 : $.versions) == null ? void 0 : _a5.node) === "string" && parseInt($.versions.node.split(".")) < 20; + throw Error("`File` is not defined as a global, which is required for file uploads." + (Q ? " Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`." : "")); + } +}; +function J0($, Q, J) { + return yG(), new File($, Q != null ? Q : "unknown_file", J); +} +function XQ($, Q) { + let J = typeof $ === "object" && $ !== null && ("name" in $ && $.name && String($.name) || "url" in $ && $.url && String($.url) || "filename" in $ && $.filename && String($.filename) || "path" in $ && $.path && String($.path)) || ""; + return Q ? J.split(/[\\/]/).pop() || void 0 : J; +} +var fG = ($) => $ != null && typeof $ === "object" && typeof $[Symbol.asyncIterator] === "function"; +var J8 = async ($, Q, J = true) => { + return { ...$, body: await tS($.body, Q, J) }; +}; +var Gw = /* @__PURE__ */ new WeakMap(); +function oS($) { + let Q = typeof $ === "function" ? $ : $.fetch, J = Gw.get(Q); + if (J) return J; + let Y = (async () => { + try { + let X = "Response" in Q ? Q.Response : (await Q("data:,")).constructor, W = new FormData(); + if (W.toString() === await new X(W).text()) return false; + return true; + } catch (e2) { + return true; + } + })(); + return Gw.set(Q, Y), Y; +} +var tS = async ($, Q, J = true) => { + if (!await oS(Q)) throw TypeError("The provided fetch function does not support file uploads with the current global FormData class."); + let Y = new FormData(); + return await Promise.all(Object.entries($ || {}).map(([X, W]) => xG(Y, X, W, J))), Y; +}; +var aS = ($) => $ instanceof Blob && "name" in $; +var xG = async ($, Q, J, Y) => { + if (J === void 0) return; + if (J == null) throw TypeError(`Received null for "${Q}"; to pass null in FormData, you must use the string 'null'`); + if (typeof J === "string" || typeof J === "number" || typeof J === "boolean") $.append(Q, String(J)); + else if (J instanceof Response) { + let X = {}, W = J.headers.get("Content-Type"); + if (W) X = { type: W }; + $.append(Q, J0([await J.blob()], XQ(J, Y), X)); + } else if (fG(J)) $.append(Q, J0([await new Response(D5(J)).blob()], XQ(J, Y))); + else if (aS(J)) $.append(Q, J0([J], XQ(J, Y), { type: J.type })); + else if (Array.isArray(J)) await Promise.all(J.map((X) => xG($, Q + "[]", X, Y))); + else if (typeof J === "object") await Promise.all(Object.entries(J).map(([X, W]) => xG($, `${Q}[${X}]`, W, Y))); + else throw TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${J} instead`); +}; +var Uw = ($) => $ != null && typeof $ === "object" && typeof $.size === "number" && typeof $.type === "string" && typeof $.text === "function" && typeof $.slice === "function" && typeof $.arrayBuffer === "function"; +var sS = ($) => $ != null && typeof $ === "object" && typeof $.name === "string" && typeof $.lastModified === "number" && Uw($); +var eS = ($) => $ != null && typeof $ === "object" && typeof $.url === "string" && typeof $.blob === "function"; +async function _5($, Q, J) { + if (yG(), $ = await $, Q || (Q = XQ($, true)), sS($)) { + if ($ instanceof File && Q == null && J == null) return $; + return J0([await $.arrayBuffer()], Q != null ? Q : $.name, { type: $.type, lastModified: $.lastModified, ...J }); + } + if (eS($)) { + let X = await $.blob(); + return Q || (Q = new URL($.url).pathname.split(/[\\/]/).pop()), J0(await gG(X), Q, J); + } + let Y = await gG($); + if (!(J == null ? void 0 : J.type)) { + let X = Y.find((W) => typeof W === "object" && "type" in W && W.type); + if (typeof X === "string") J = { ...J, type: X }; + } + return J0(Y, Q, J); +} +async function gG($) { + var _a5; + let Q = []; + if (typeof $ === "string" || ArrayBuffer.isView($) || $ instanceof ArrayBuffer) Q.push($); + else if (Uw($)) Q.push($ instanceof Blob ? $ : await $.arrayBuffer()); + else if (fG($)) for await (let J of $) Q.push(...await gG(J)); + else { + let J = (_a5 = $ == null ? void 0 : $.constructor) == null ? void 0 : _a5.name; + throw Error(`Unexpected data type: ${typeof $}${J ? `; constructor: ${J}` : ""}${$v($)}`); + } + return Q; +} +function $v($) { + if (typeof $ !== "object" || $ === null) return ""; + return `; props: [${Object.getOwnPropertyNames($).map((J) => `"${J}"`).join(", ")}]`; +} +var t = class { + constructor($) { + this._client = $; + } +}; +var Hw = /* @__PURE__ */ Symbol.for("brand.privateNullableHeaders"); +function* Jv($) { + if (!$) return; + if (Hw in $) { + let { values: Y, nulls: X } = $; + yield* Y.entries(); + for (let W of X) yield [W, null]; + return; + } + let Q = false, J; + if ($ instanceof Headers) J = $.entries(); + else if (AG($)) J = $; + else Q = true, J = Object.entries($ != null ? $ : {}); + for (let Y of J) { + let X = Y[0]; + if (typeof X !== "string") throw TypeError("expected header name to be a string"); + let W = AG(Y[1]) ? Y[1] : [Y[1]], G = false; + for (let U of W) { + if (U === void 0) continue; + if (Q && !G) G = true, yield [X, null]; + yield [X, U]; + } + } +} +var R = ($) => { + let Q = new Headers(), J = /* @__PURE__ */ new Set(); + for (let Y of $) { + let X = /* @__PURE__ */ new Set(); + for (let [W, G] of Jv(Y)) { + let U = W.toLowerCase(); + if (!X.has(U)) Q.delete(W), X.add(U); + if (G === null) Q.delete(W), J.add(U); + else Q.append(W, G), J.delete(U); + } + } + return { [Hw]: true, values: Q, nulls: J }; +}; +function qw($) { + return $.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g, encodeURIComponent); +} +var Kw = Object.freeze(/* @__PURE__ */ Object.create(null)); +var Xv = ($ = qw) => function(J, ...Y) { + if (J.length === 1) return J[0]; + let X = false, W = [], G = J.reduce((V, B, z4) => { + var _a5, _b3, _c2; + if (/[?#]/.test(B)) X = true; + let N = Y[z4], w = (X ? encodeURIComponent : $)("" + N); + if (z4 !== Y.length && (N == null || typeof N === "object" && N.toString === ((_c2 = Object.getPrototypeOf((_b3 = Object.getPrototypeOf((_a5 = N.hasOwnProperty) != null ? _a5 : Kw)) != null ? _b3 : Kw)) == null ? void 0 : _c2.toString))) w = N + "", W.push({ start: V.length + B.length, length: w.length, error: `Value of type ${Object.prototype.toString.call(N).slice(8, -1)} is not a valid path parameter` }); + return V + B + (z4 === Y.length ? "" : w); + }, ""), U = G.split(/[?#]/, 1)[0], H = /(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi, q; + while ((q = H.exec(U)) !== null) W.push({ start: q.index, length: q[0].length, error: `Value "${q[0]}" can't be safely passed as a path parameter` }); + if (W.sort((V, B) => V.start - B.start), W.length > 0) { + let V = 0, B = W.reduce((z4, N) => { + let w = " ".repeat(N.start - V), O = "^".repeat(N.length); + return V = N.start + N.length, z4 + w + O; + }, ""); + throw new g(`Path parameters result in path with invalid segments: +${W.map((z4) => z4.error).join(` +`)} +${G} +${B}`); + } + return G; +}; +var T = Xv(qw); +var YQ = class extends t { + create($, Q) { + let { betas: J, ...Y } = $; + return this._client.post("/v1/environments?beta=true", { body: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "managed-agents-2026-04-01"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + retrieve($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.get(T`/v1/environments/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + update($, Q, J) { + let { betas: Y, ...X } = Q; + return this._client.post(T`/v1/environments/${$}?beta=true`, { body: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + list($ = {}, Q) { + let { betas: J, ...Y } = $ != null ? $ : {}; + return this._client.getAPIList("/v1/environments?beta=true", D$, { query: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "managed-agents-2026-04-01"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + delete($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.delete(T`/v1/environments/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + archive($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.post(T`/v1/environments/${$}/archive?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } +}; +var WQ = /* @__PURE__ */ Symbol("anthropic.sdk.stainlessHelper"); +function k5($) { + return typeof $ === "object" && $ !== null && WQ in $; +} +function hG($, Q) { + let J = /* @__PURE__ */ new Set(); + if ($) { + for (let Y of $) if (k5(Y)) J.add(Y[WQ]); + } + if (Q) for (let Y of Q) { + if (k5(Y)) J.add(Y[WQ]); + if (Array.isArray(Y.content)) { + for (let X of Y.content) if (k5(X)) J.add(X[WQ]); + } + } + return Array.from(J); +} +function S5($, Q) { + let J = hG($, Q); + if (J.length === 0) return {}; + return { "x-stainless-helper": J.join(", ") }; +} +function Vw($) { + if (k5($)) return { "x-stainless-helper": $[WQ] }; + return {}; +} +var GQ = class extends t { + list($ = {}, Q) { + let { betas: J, ...Y } = $ != null ? $ : {}; + return this._client.getAPIList("/v1/files?beta=true", W4, { query: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "files-api-2025-04-14"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + delete($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.delete(T`/v1/files/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "files-api-2025-04-14"].toString() }, J == null ? void 0 : J.headers]) }); + } + download($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.get(T`/v1/files/${$}/content?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "files-api-2025-04-14"].toString(), Accept: "application/binary" }, J == null ? void 0 : J.headers]), __binaryResponse: true }); + } + retrieveMetadata($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.get(T`/v1/files/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "files-api-2025-04-14"].toString() }, J == null ? void 0 : J.headers]) }); + } + upload($, Q) { + let { betas: J, ...Y } = $; + return this._client.post("/v1/files?beta=true", J8({ body: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "files-api-2025-04-14"].toString() }, Vw(Y.file), Q == null ? void 0 : Q.headers]) }, this._client)); + } +}; +var UQ = class extends t { + retrieve($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.get(T`/v1/models/${$}?beta=true`, { ...J, headers: R([{ ...(Y == null ? void 0 : Y.toString()) != null ? { "anthropic-beta": Y == null ? void 0 : Y.toString() } : void 0 }, J == null ? void 0 : J.headers]) }); + } + list($ = {}, Q) { + let { betas: J, ...Y } = $ != null ? $ : {}; + return this._client.getAPIList("/v1/models?beta=true", W4, { query: Y, ...Q, headers: R([{ ...(J == null ? void 0 : J.toString()) != null ? { "anthropic-beta": J == null ? void 0 : J.toString() } : void 0 }, Q == null ? void 0 : Q.headers]) }); + } +}; +var HQ = class extends t { + create($, Q) { + let { betas: J, ...Y } = $; + return this._client.post("/v1/user_profiles?beta=true", { body: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "user-profiles-2026-03-24"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + retrieve($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.get(T`/v1/user_profiles/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "user-profiles-2026-03-24"].toString() }, J == null ? void 0 : J.headers]) }); + } + update($, Q, J) { + let { betas: Y, ...X } = Q; + return this._client.post(T`/v1/user_profiles/${$}?beta=true`, { body: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "user-profiles-2026-03-24"].toString() }, J == null ? void 0 : J.headers]) }); + } + list($ = {}, Q) { + let { betas: J, ...Y } = $ != null ? $ : {}; + return this._client.getAPIList("/v1/user_profiles?beta=true", D$, { query: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "user-profiles-2026-03-24"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + createEnrollmentURL($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.post(T`/v1/user_profiles/${$}/enrollment_url?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "user-profiles-2026-03-24"].toString() }, J == null ? void 0 : J.headers]) }); + } +}; +var KQ = class extends t { + list($, Q = {}, J) { + let { betas: Y, ...X } = Q != null ? Q : {}; + return this._client.getAPIList(T`/v1/agents/${$}/versions?beta=true`, D$, { query: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } +}; +var X8 = class extends t { + constructor() { + super(...arguments); + this.versions = new KQ(this._client); + } + create($, Q) { + let { betas: J, ...Y } = $; + return this._client.post("/v1/agents?beta=true", { body: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "managed-agents-2026-04-01"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + retrieve($, Q = {}, J) { + let { betas: Y, ...X } = Q != null ? Q : {}; + return this._client.get(T`/v1/agents/${$}?beta=true`, { query: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + update($, Q, J) { + let { betas: Y, ...X } = Q; + return this._client.post(T`/v1/agents/${$}?beta=true`, { body: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + list($ = {}, Q) { + let { betas: J, ...Y } = $ != null ? $ : {}; + return this._client.getAPIList("/v1/agents?beta=true", D$, { query: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "managed-agents-2026-04-01"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + archive($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.post(T`/v1/agents/${$}/archive?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } +}; +X8.Versions = KQ; +var qQ = class extends t { + create($, Q, J) { + let { view: Y, betas: X, ...W } = Q; + return this._client.post(T`/v1/memory_stores/${$}/memories?beta=true`, { query: { view: Y }, body: W, ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + retrieve($, Q, J) { + let { memory_store_id: Y, betas: X, ...W } = Q; + return this._client.get(T`/v1/memory_stores/${Y}/memories/${$}?beta=true`, { query: W, ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + update($, Q, J) { + let { memory_store_id: Y, view: X, betas: W, ...G } = Q; + return this._client.post(T`/v1/memory_stores/${Y}/memories/${$}?beta=true`, { query: { view: X }, body: G, ...J, headers: R([{ "anthropic-beta": [...W != null ? W : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + list($, Q = {}, J) { + let { betas: Y, ...X } = Q != null ? Q : {}; + return this._client.getAPIList(T`/v1/memory_stores/${$}/memories?beta=true`, D$, { query: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + delete($, Q, J) { + let { memory_store_id: Y, expected_content_sha256: X, betas: W } = Q; + return this._client.delete(T`/v1/memory_stores/${Y}/memories/${$}?beta=true`, { query: { expected_content_sha256: X }, ...J, headers: R([{ "anthropic-beta": [...W != null ? W : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } +}; +var VQ = class extends t { + retrieve($, Q, J) { + let { memory_store_id: Y, betas: X, ...W } = Q; + return this._client.get(T`/v1/memory_stores/${Y}/memory_versions/${$}?beta=true`, { query: W, ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + list($, Q = {}, J) { + let { betas: Y, ...X } = Q != null ? Q : {}; + return this._client.getAPIList(T`/v1/memory_stores/${$}/memory_versions?beta=true`, D$, { query: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + redact($, Q, J) { + let { memory_store_id: Y, betas: X } = Q; + return this._client.post(T`/v1/memory_stores/${Y}/memory_versions/${$}/redact?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } +}; +var X0 = class extends t { + constructor() { + super(...arguments); + this.memories = new qQ(this._client), this.memoryVersions = new VQ(this._client); + } + create($, Q) { + let { betas: J, ...Y } = $; + return this._client.post("/v1/memory_stores?beta=true", { body: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "managed-agents-2026-04-01"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + retrieve($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.get(T`/v1/memory_stores/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + update($, Q, J) { + let { betas: Y, ...X } = Q; + return this._client.post(T`/v1/memory_stores/${$}?beta=true`, { body: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + list($ = {}, Q) { + let { betas: J, ...Y } = $ != null ? $ : {}; + return this._client.getAPIList("/v1/memory_stores?beta=true", D$, { query: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "managed-agents-2026-04-01"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + delete($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.delete(T`/v1/memory_stores/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + archive($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.post(T`/v1/memory_stores/${$}/archive?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } +}; +X0.Memories = qQ; +X0.MemoryVersions = VQ; +var Y8 = class _Y8 { + constructor($, Q) { + this.iterator = $, this.controller = Q; + } + async *decoder() { + let $ = new B1(); + for await (let Q of this.iterator) for (let J of $.decode(Q)) yield JSON.parse(J); + for (let Q of $.flush()) yield JSON.parse(Q); + } + [Symbol.asyncIterator]() { + return this.decoder(); + } + static fromResponse($, Q) { + if (!$.body) { + if (Q.abort(), typeof globalThis.navigator < "u" && globalThis.navigator.product === "ReactNative") throw new g("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api"); + throw new g("Attempted to iterate over a response with no body"); + } + return new _Y8(e9($.body), Q); + } +}; +var BQ = class extends t { + create($, Q) { + let { betas: J, ...Y } = $; + return this._client.post("/v1/messages/batches?beta=true", { body: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "message-batches-2024-09-24"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + retrieve($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.get(T`/v1/messages/batches/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "message-batches-2024-09-24"].toString() }, J == null ? void 0 : J.headers]) }); + } + list($ = {}, Q) { + let { betas: J, ...Y } = $ != null ? $ : {}; + return this._client.getAPIList("/v1/messages/batches?beta=true", W4, { query: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "message-batches-2024-09-24"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + delete($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.delete(T`/v1/messages/batches/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "message-batches-2024-09-24"].toString() }, J == null ? void 0 : J.headers]) }); + } + cancel($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.post(T`/v1/messages/batches/${$}/cancel?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "message-batches-2024-09-24"].toString() }, J == null ? void 0 : J.headers]) }); + } + async results($, Q = {}, J) { + let Y = await this.retrieve($); + if (!Y.results_url) throw new g(`No batch \`results_url\`; Has it finished processing? ${Y.processing_status} - ${Y.id}`); + let { betas: X } = Q != null ? Q : {}; + return this._client.get(Y.results_url, { ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "message-batches-2024-09-24"].toString(), Accept: "application/binary" }, J == null ? void 0 : J.headers]), stream: true, __binaryResponse: true })._thenUnwrap((W, G) => Y8.fromResponse(G.response, G.controller)); + } +}; +var v5 = { "claude-opus-4-20250514": 8192, "claude-opus-4-0": 8192, "claude-4-opus-20250514": 8192, "anthropic.claude-opus-4-20250514-v1:0": 8192, "claude-opus-4@20250514": 8192, "claude-opus-4-1-20250805": 8192, "anthropic.claude-opus-4-1-20250805-v1:0": 8192, "claude-opus-4-1@20250805": 8192 }; +function Bw($) { + var _a5, _b3; + return (_b3 = $ == null ? void 0 : $.output_format) != null ? _b3 : (_a5 = $ == null ? void 0 : $.output_config) == null ? void 0 : _a5.format; +} +function uG($, Q, J) { + let Y = Bw(Q); + if (!Q || !("parse" in (Y != null ? Y : {}))) return { ...$, content: $.content.map((X) => { + if (X.type === "text") { + let W = Object.defineProperty({ ...X }, "parsed_output", { value: null, enumerable: false }); + return Object.defineProperty(W, "parsed", { get() { + return J.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."), null; + }, enumerable: false }); + } + return X; + }), parsed_output: null }; + return mG($, Q, J); +} +function mG($, Q, J) { + let Y = null, X = $.content.map((W) => { + if (W.type === "text") { + let G = Nv(Q, W.text); + if (Y === null) Y = G; + let U = Object.defineProperty({ ...W }, "parsed_output", { value: G, enumerable: false }); + return Object.defineProperty(U, "parsed", { get() { + return J.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."), G; + }, enumerable: false }); + } + return W; + }); + return { ...$, content: X, parsed_output: Y }; +} +function Nv($, Q) { + let J = Bw($); + if ((J == null ? void 0 : J.type) !== "json_schema") return null; + try { + if ("parse" in J) return J.parse(Q); + return JSON.parse(Q); + } catch (Y) { + throw new g(`Failed to parse structured output: ${Y}`); + } +} +var wv = ($) => { + let Q = 0, J = []; + while (Q < $.length) { + let Y = $[Q]; + if (Y === "\\") { + Q++; + continue; + } + if (Y === "{") { + J.push({ type: "brace", value: "{" }), Q++; + continue; + } + if (Y === "}") { + J.push({ type: "brace", value: "}" }), Q++; + continue; + } + if (Y === "[") { + J.push({ type: "paren", value: "[" }), Q++; + continue; + } + if (Y === "]") { + J.push({ type: "paren", value: "]" }), Q++; + continue; + } + if (Y === ":") { + J.push({ type: "separator", value: ":" }), Q++; + continue; + } + if (Y === ",") { + J.push({ type: "delimiter", value: "," }), Q++; + continue; + } + if (Y === '"') { + let U = "", H = false; + Y = $[++Q]; + while (Y !== '"') { + if (Q === $.length) { + H = true; + break; + } + if (Y === "\\") { + if (Q++, Q === $.length) { + H = true; + break; + } + U += Y + $[Q], Y = $[++Q]; + } else U += Y, Y = $[++Q]; + } + if (Y = $[++Q], !H) J.push({ type: "string", value: U }); + continue; + } + if (Y && /\s/.test(Y)) { + Q++; + continue; + } + let W = /[0-9]/; + if (Y && W.test(Y) || Y === "-" || Y === ".") { + let U = ""; + if (Y === "-") U += Y, Y = $[++Q]; + while (Y && W.test(Y) || Y === ".") U += Y, Y = $[++Q]; + J.push({ type: "number", value: U }); + continue; + } + let G = /[a-z]/i; + if (Y && G.test(Y)) { + let U = ""; + while (Y && G.test(Y)) { + if (Q === $.length) break; + U += Y, Y = $[++Q]; + } + if (U == "true" || U == "false" || U === "null") J.push({ type: "name", value: U }); + else { + Q++; + continue; + } + continue; + } + Q++; + } + return J; +}; +var W8 = ($) => { + if ($.length === 0) return $; + let Q = $[$.length - 1]; + switch (Q.type) { + case "separator": + return $ = $.slice(0, $.length - 1), W8($); + break; + case "number": + let J = Q.value[Q.value.length - 1]; + if (J === "." || J === "-") return $ = $.slice(0, $.length - 1), W8($); + case "string": + let Y = $[$.length - 2]; + if ((Y == null ? void 0 : Y.type) === "delimiter") return $ = $.slice(0, $.length - 1), W8($); + else if ((Y == null ? void 0 : Y.type) === "brace" && Y.value === "{") return $ = $.slice(0, $.length - 1), W8($); + break; + case "delimiter": + return $ = $.slice(0, $.length - 1), W8($); + break; + } + return $; +}; +var Ov = ($) => { + let Q = []; + if ($.map((J) => { + if (J.type === "brace") if (J.value === "{") Q.push("}"); + else Q.splice(Q.lastIndexOf("}"), 1); + if (J.type === "paren") if (J.value === "[") Q.push("]"); + else Q.splice(Q.lastIndexOf("]"), 1); + }), Q.length > 0) Q.reverse().map((J) => { + if (J === "}") $.push({ type: "brace", value: "}" }); + else if (J === "]") $.push({ type: "paren", value: "]" }); + }); + return $; +}; +var Dv = ($) => { + let Q = ""; + return $.map((J) => { + switch (J.type) { + case "string": + Q += '"' + J.value + '"'; + break; + default: + Q += J.value; + break; + } + }), Q; +}; +var C5 = ($) => JSON.parse(Dv(Ov(W8(wv($))))); +var i6; +var z1; +var G8; +var zQ; +var T5; +var NQ; +var wQ; +var x5; +var OQ; +var y4; +var DQ; +var y5; +var f5; +var Y0; +var g5; +var h5; +var FQ; +var lG; +var zw; +var u5; +var cG; +var pG; +var dG; +var Nw; +var ww = "__json_buf"; +function Ow($) { + return $.type === "tool_use" || $.type === "server_tool_use" || $.type === "mcp_tool_use"; +} +var ZQ = class _ZQ { + constructor($, Q) { + var _a5; + i6.add(this), this.messages = [], this.receivedMessages = [], z1.set(this, void 0), G8.set(this, null), this.controller = new AbortController(), zQ.set(this, void 0), T5.set(this, () => { + }), NQ.set(this, () => { + }), wQ.set(this, void 0), x5.set(this, () => { + }), OQ.set(this, () => { + }), y4.set(this, {}), DQ.set(this, false), y5.set(this, false), f5.set(this, false), Y0.set(this, false), g5.set(this, void 0), h5.set(this, void 0), FQ.set(this, void 0), u5.set(this, (J) => { + if (y(this, y5, true, "f"), T4(J)) J = new Q6(); + if (J instanceof Q6) return y(this, f5, true, "f"), this._emit("abort", J); + if (J instanceof g) return this._emit("error", J); + if (J instanceof Error) { + let Y = new g(J.message); + return Y.cause = J, this._emit("error", Y); + } + return this._emit("error", new g(String(J))); + }), y(this, zQ, new Promise((J, Y) => { + y(this, T5, J, "f"), y(this, NQ, Y, "f"); + }), "f"), y(this, wQ, new Promise((J, Y) => { + y(this, x5, J, "f"), y(this, OQ, Y, "f"); + }), "f"), Z(this, zQ, "f").catch(() => { + }), Z(this, wQ, "f").catch(() => { + }), y(this, G8, $, "f"), y(this, FQ, (_a5 = Q == null ? void 0 : Q.logger) != null ? _a5 : console, "f"); + } + get response() { + return Z(this, g5, "f"); + } + get request_id() { + return Z(this, h5, "f"); + } + async withResponse() { + y(this, Y0, true, "f"); + let $ = await Z(this, zQ, "f"); + if (!$) throw Error("Could not resolve a `Response` object"); + return { data: this, response: $, request_id: $.headers.get("request-id") }; + } + static fromReadableStream($) { + let Q = new _ZQ(null); + return Q._run(() => Q._fromReadableStream($)), Q; + } + static createMessage($, Q, J, { logger: Y } = {}) { + let X = new _ZQ(Q, { logger: Y }); + for (let W of Q.messages) X._addMessageParam(W); + return y(X, G8, { ...Q, stream: true }, "f"), X._run(() => X._createMessage($, { ...Q, stream: true }, { ...J, headers: { ...J == null ? void 0 : J.headers, "X-Stainless-Helper-Method": "stream" } })), X; + } + _run($) { + $().then(() => { + this._emitFinal(), this._emit("end"); + }, Z(this, u5, "f")); + } + _addMessageParam($) { + this.messages.push($); + } + _addMessage($, Q = true) { + if (this.receivedMessages.push($), Q) this._emit("message", $); + } + async _createMessage($, Q, J) { + var _a5; + let Y = J == null ? void 0 : J.signal, X; + if (Y) { + if (Y.aborted) this.controller.abort(); + X = this.controller.abort.bind(this.controller), Y.addEventListener("abort", X); + } + try { + Z(this, i6, "m", cG).call(this); + let { response: W, data: G } = await $.create({ ...Q, stream: true }, { ...J, signal: this.controller.signal }).withResponse(); + this._connected(W); + for await (let U of G) Z(this, i6, "m", pG).call(this, U); + if ((_a5 = G.controller.signal) == null ? void 0 : _a5.aborted) throw new Q6(); + Z(this, i6, "m", dG).call(this); + } finally { + if (Y && X) Y.removeEventListener("abort", X); + } + } + _connected($) { + if (this.ended) return; + y(this, g5, $, "f"), y(this, h5, $ == null ? void 0 : $.headers.get("request-id"), "f"), Z(this, T5, "f").call(this, $), this._emit("connect"); + } + get ended() { + return Z(this, DQ, "f"); + } + get errored() { + return Z(this, y5, "f"); + } + get aborted() { + return Z(this, f5, "f"); + } + abort() { + this.controller.abort(); + } + on($, Q) { + return (Z(this, y4, "f")[$] || (Z(this, y4, "f")[$] = [])).push({ listener: Q }), this; + } + off($, Q) { + let J = Z(this, y4, "f")[$]; + if (!J) return this; + let Y = J.findIndex((X) => X.listener === Q); + if (Y >= 0) J.splice(Y, 1); + return this; + } + once($, Q) { + return (Z(this, y4, "f")[$] || (Z(this, y4, "f")[$] = [])).push({ listener: Q, once: true }), this; + } + emitted($) { + return new Promise((Q, J) => { + if (y(this, Y0, true, "f"), $ !== "error") this.once("error", J); + this.once($, Q); + }); + } + async done() { + y(this, Y0, true, "f"), await Z(this, wQ, "f"); + } + get currentMessage() { + return Z(this, z1, "f"); + } + async finalMessage() { + return await this.done(), Z(this, i6, "m", lG).call(this); + } + async finalText() { + return await this.done(), Z(this, i6, "m", zw).call(this); + } + _emit($, ...Q) { + if (Z(this, DQ, "f")) return; + if ($ === "end") y(this, DQ, true, "f"), Z(this, x5, "f").call(this); + let J = Z(this, y4, "f")[$]; + if (J) Z(this, y4, "f")[$] = J.filter((Y) => !Y.once), J.forEach(({ listener: Y }) => Y(...Q)); + if ($ === "abort") { + let Y = Q[0]; + if (!Z(this, Y0, "f") && !(J == null ? void 0 : J.length)) Promise.reject(Y); + Z(this, NQ, "f").call(this, Y), Z(this, OQ, "f").call(this, Y), this._emit("end"); + return; + } + if ($ === "error") { + let Y = Q[0]; + if (!Z(this, Y0, "f") && !(J == null ? void 0 : J.length)) Promise.reject(Y); + Z(this, NQ, "f").call(this, Y), Z(this, OQ, "f").call(this, Y), this._emit("end"); + } + } + _emitFinal() { + if (this.receivedMessages.at(-1)) this._emit("finalMessage", Z(this, i6, "m", lG).call(this)); + } + async _fromReadableStream($, Q) { + var _a5; + let J = Q == null ? void 0 : Q.signal, Y; + if (J) { + if (J.aborted) this.controller.abort(); + Y = this.controller.abort.bind(this.controller), J.addEventListener("abort", Y); + } + try { + Z(this, i6, "m", cG).call(this), this._connected(null); + let X = x6.fromReadableStream($, this.controller); + for await (let W of X) Z(this, i6, "m", pG).call(this, W); + if ((_a5 = X.controller.signal) == null ? void 0 : _a5.aborted) throw new Q6(); + Z(this, i6, "m", dG).call(this); + } finally { + if (J && Y) J.removeEventListener("abort", Y); + } + } + [(z1 = /* @__PURE__ */ new WeakMap(), G8 = /* @__PURE__ */ new WeakMap(), zQ = /* @__PURE__ */ new WeakMap(), T5 = /* @__PURE__ */ new WeakMap(), NQ = /* @__PURE__ */ new WeakMap(), wQ = /* @__PURE__ */ new WeakMap(), x5 = /* @__PURE__ */ new WeakMap(), OQ = /* @__PURE__ */ new WeakMap(), y4 = /* @__PURE__ */ new WeakMap(), DQ = /* @__PURE__ */ new WeakMap(), y5 = /* @__PURE__ */ new WeakMap(), f5 = /* @__PURE__ */ new WeakMap(), Y0 = /* @__PURE__ */ new WeakMap(), g5 = /* @__PURE__ */ new WeakMap(), h5 = /* @__PURE__ */ new WeakMap(), FQ = /* @__PURE__ */ new WeakMap(), u5 = /* @__PURE__ */ new WeakMap(), i6 = /* @__PURE__ */ new WeakSet(), lG = function() { + if (this.receivedMessages.length === 0) throw new g("stream ended without producing a Message with role=assistant"); + return this.receivedMessages.at(-1); + }, zw = function() { + if (this.receivedMessages.length === 0) throw new g("stream ended without producing a Message with role=assistant"); + let Q = this.receivedMessages.at(-1).content.filter((J) => J.type === "text").map((J) => J.text); + if (Q.length === 0) throw new g("stream ended without producing a content block with type=text"); + return Q.join(" "); + }, cG = function() { + if (this.ended) return; + y(this, z1, void 0, "f"); + }, pG = function(Q) { + var _a5; + if (this.ended) return; + let J = Z(this, i6, "m", Nw).call(this, Q); + switch (this._emit("streamEvent", Q, J), Q.type) { + case "content_block_delta": { + let Y = J.content.at(-1); + switch (Q.delta.type) { + case "text_delta": { + if (Y.type === "text") this._emit("text", Q.delta.text, Y.text || ""); + break; + } + case "citations_delta": { + if (Y.type === "text") this._emit("citation", Q.delta.citation, (_a5 = Y.citations) != null ? _a5 : []); + break; + } + case "input_json_delta": { + if (Ow(Y) && Y.input) this._emit("inputJson", Q.delta.partial_json, Y.input); + break; + } + case "thinking_delta": { + if (Y.type === "thinking") this._emit("thinking", Q.delta.thinking, Y.thinking); + break; + } + case "signature_delta": { + if (Y.type === "thinking") this._emit("signature", Y.signature); + break; + } + case "compaction_delta": { + if (Y.type === "compaction" && Y.content) this._emit("compaction", Y.content); + break; + } + default: + Dw(Q.delta); + } + break; + } + case "message_stop": { + this._addMessageParam(J), this._addMessage(uG(J, Z(this, G8, "f"), { logger: Z(this, FQ, "f") }), true); + break; + } + case "content_block_stop": { + this._emit("contentBlock", J.content.at(-1)); + break; + } + case "message_start": { + y(this, z1, J, "f"); + break; + } + case "content_block_start": + case "message_delta": + break; + } + }, dG = function() { + if (this.ended) throw new g("stream has ended, this shouldn't happen"); + let Q = Z(this, z1, "f"); + if (!Q) throw new g("request ended without sending any chunks"); + return y(this, z1, void 0, "f"), uG(Q, Z(this, G8, "f"), { logger: Z(this, FQ, "f") }); + }, Nw = function(Q) { + var _a5; + let J = Z(this, z1, "f"); + if (Q.type === "message_start") { + if (J) throw new g(`Unexpected event order, got ${Q.type} before receiving "message_stop"`); + return Q.message; + } + if (!J) throw new g(`Unexpected event order, got ${Q.type} before "message_start"`); + switch (Q.type) { + case "message_stop": + return J; + case "message_delta": + if (J.container = Q.delta.container, J.stop_reason = Q.delta.stop_reason, J.stop_sequence = Q.delta.stop_sequence, J.usage.output_tokens = Q.usage.output_tokens, J.context_management = Q.context_management, Q.usage.input_tokens != null) J.usage.input_tokens = Q.usage.input_tokens; + if (Q.usage.cache_creation_input_tokens != null) J.usage.cache_creation_input_tokens = Q.usage.cache_creation_input_tokens; + if (Q.usage.cache_read_input_tokens != null) J.usage.cache_read_input_tokens = Q.usage.cache_read_input_tokens; + if (Q.usage.server_tool_use != null) J.usage.server_tool_use = Q.usage.server_tool_use; + if (Q.usage.iterations != null) J.usage.iterations = Q.usage.iterations; + return J; + case "content_block_start": + return J.content.push(Q.content_block), J; + case "content_block_delta": { + let Y = J.content.at(Q.index); + switch (Q.delta.type) { + case "text_delta": { + if ((Y == null ? void 0 : Y.type) === "text") J.content[Q.index] = { ...Y, text: (Y.text || "") + Q.delta.text }; + break; + } + case "citations_delta": { + if ((Y == null ? void 0 : Y.type) === "text") J.content[Q.index] = { ...Y, citations: [...(_a5 = Y.citations) != null ? _a5 : [], Q.delta.citation] }; + break; + } + case "input_json_delta": { + if (Y && Ow(Y)) { + let X = Y[ww] || ""; + X += Q.delta.partial_json; + let W = { ...Y }; + if (Object.defineProperty(W, ww, { value: X, enumerable: false, writable: true }), X) try { + W.input = C5(X); + } catch (G) { + let U = new g(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${G}. JSON: ${X}`); + Z(this, u5, "f").call(this, U); + } + J.content[Q.index] = W; + } + break; + } + case "thinking_delta": { + if ((Y == null ? void 0 : Y.type) === "thinking") J.content[Q.index] = { ...Y, thinking: Y.thinking + Q.delta.thinking }; + break; + } + case "signature_delta": { + if ((Y == null ? void 0 : Y.type) === "thinking") J.content[Q.index] = { ...Y, signature: Q.delta.signature }; + break; + } + case "compaction_delta": { + if ((Y == null ? void 0 : Y.type) === "compaction") J.content[Q.index] = { ...Y, content: (Y.content || "") + Q.delta.content }; + break; + } + default: + Dw(Q.delta); + } + return J; + } + case "content_block_stop": + return J; + } + }, Symbol.asyncIterator)]() { + let $ = [], Q = [], J = false; + return this.on("streamEvent", (Y) => { + let X = Q.shift(); + if (X) X.resolve(Y); + else $.push(Y); + }), this.on("end", () => { + J = true; + for (let Y of Q) Y.resolve(void 0); + Q.length = 0; + }), this.on("abort", (Y) => { + J = true; + for (let X of Q) X.reject(Y); + Q.length = 0; + }), this.on("error", (Y) => { + J = true; + for (let X of Q) X.reject(Y); + Q.length = 0; + }), { next: async () => { + if (!$.length) { + if (J) return { value: void 0, done: true }; + return new Promise((X, W) => Q.push({ resolve: X, reject: W })).then((X) => X ? { value: X, done: false } : { value: void 0, done: true }); + } + return { value: $.shift(), done: false }; + }, return: async () => { + return this.abort(), { value: void 0, done: true }; + } }; + } + toReadableStream() { + return new x6(this[Symbol.asyncIterator].bind(this), this.controller).toReadableStream(); + } +}; +function Dw($) { +} +var U8 = class extends Error { + constructor($) { + let Q = typeof $ === "string" ? $ : $.map((J) => { + if (J.type === "text") return J.text; + return `[${J.type}]`; + }).join(" "); + super(Q); + this.name = "ToolError", this.content = $; + } +}; +var Fw = 1e5; +var Zw = `You have been working on the task described above but have not yet completed it. Write a continuation summary that will allow you (or another instance of yourself) to resume work efficiently in a future context window where the conversation history will be replaced with this summary. Your summary should be structured, concise, and actionable. Include: +1. Task Overview +The user's core request and success criteria +Any clarifications or constraints they specified +2. Current State +What has been completed so far +Files created, modified, or analyzed (with paths if relevant) +Key outputs or artifacts produced +3. Important Discoveries +Technical constraints or requirements uncovered +Decisions made and their rationale +Errors encountered and how they were resolved +What approaches were tried that didn't work (and why) +4. Next Steps +Specific actions needed to complete the task +Any blockers or open questions to resolve +Priority order if multiple steps remain +5. Context to Preserve +User preferences or style requirements +Domain-specific details that aren't obvious +Any promises made to the user +Be concise but complete\u2014err on the side of including information that would prevent duplicate work or repeated mistakes. Write in a way that enables immediate resumption of the task. +Wrap your summary in tags.`; +var MQ; +var H8; +var W0; +var r$; +var M6; +var y6; +var f4; +var N1; +var LQ; +var Mw; +var iG; +function Lw() { + let $, Q; + return { promise: new Promise((Y, X) => { + $ = Y, Q = X; + }), resolve: $, reject: Q }; +} +var jQ = class { + constructor($, Q, J) { + var _a5; + MQ.add(this), this.client = $, H8.set(this, false), W0.set(this, false), r$.set(this, void 0), M6.set(this, void 0), y6.set(this, void 0), f4.set(this, void 0), N1.set(this, void 0), LQ.set(this, 0), y(this, r$, { params: { ...Q, messages: structuredClone(Q.messages) } }, "f"); + let X = ["BetaToolRunner", ...hG(Q.tools, Q.messages)].join(", "); + if (y(this, M6, { ...J, headers: R([{ "x-stainless-helper": X }, J == null ? void 0 : J.headers]) }, "f"), y(this, N1, Lw(), "f"), (_a5 = Q.compactionControl) == null ? void 0 : _a5.enabled) console.warn('Anthropic: The `compactionControl` parameter is deprecated and will be removed in a future version. Use server-side compaction instead by passing `edits: [{ type: "compact_20260112" }]` in the params passed to `toolRunner()`. See https://platform.claude.com/docs/en/build-with-claude/compaction'); + } + async *[(H8 = /* @__PURE__ */ new WeakMap(), W0 = /* @__PURE__ */ new WeakMap(), r$ = /* @__PURE__ */ new WeakMap(), M6 = /* @__PURE__ */ new WeakMap(), y6 = /* @__PURE__ */ new WeakMap(), f4 = /* @__PURE__ */ new WeakMap(), N1 = /* @__PURE__ */ new WeakMap(), LQ = /* @__PURE__ */ new WeakMap(), MQ = /* @__PURE__ */ new WeakSet(), Mw = async function() { + var _a5, _b3, _c2, _d, _e2, _f2; + let Q = Z(this, r$, "f").params.compactionControl; + if (!Q || !Q.enabled) return false; + let J = 0; + if (Z(this, y6, "f") !== void 0) try { + let H = await Z(this, y6, "f"); + J = H.usage.input_tokens + ((_a5 = H.usage.cache_creation_input_tokens) != null ? _a5 : 0) + ((_b3 = H.usage.cache_read_input_tokens) != null ? _b3 : 0) + H.usage.output_tokens; + } catch (e2) { + return false; + } + let Y = (_c2 = Q.contextTokenThreshold) != null ? _c2 : Fw; + if (J < Y) return false; + let X = (_d = Q.model) != null ? _d : Z(this, r$, "f").params.model, W = (_e2 = Q.summaryPrompt) != null ? _e2 : Zw, G = Z(this, r$, "f").params.messages; + if (G[G.length - 1].role === "assistant") { + let H = G[G.length - 1]; + if (Array.isArray(H.content)) { + let q = H.content.filter((V) => V.type !== "tool_use"); + if (q.length === 0) G.pop(); + else H.content = q; + } + } + let U = await this.client.beta.messages.create({ model: X, messages: [...G, { role: "user", content: [{ type: "text", text: W }] }], max_tokens: Z(this, r$, "f").params.max_tokens }, { signal: Z(this, M6, "f").signal, headers: R([Z(this, M6, "f").headers, { "x-stainless-helper": "compaction" }]) }); + if (((_f2 = U.content[0]) == null ? void 0 : _f2.type) !== "text") throw new g("Expected text response for compaction"); + return Z(this, r$, "f").params.messages = [{ role: "user", content: U.content }], true; + }, Symbol.asyncIterator)]() { + var $; + if (Z(this, H8, "f")) throw new g("Cannot iterate over a consumed stream"); + y(this, H8, true, "f"), y(this, W0, true, "f"), y(this, f4, void 0, "f"); + try { + while (true) { + let Q; + try { + if (Z(this, r$, "f").params.max_iterations && Z(this, LQ, "f") >= Z(this, r$, "f").params.max_iterations) break; + y(this, W0, false, "f"), y(this, f4, void 0, "f"), y(this, LQ, ($ = Z(this, LQ, "f"), $++, $), "f"), y(this, y6, void 0, "f"); + let { max_iterations: J, compactionControl: Y, ...X } = Z(this, r$, "f").params; + if (X.stream) Q = this.client.beta.messages.stream({ ...X }, Z(this, M6, "f")), y(this, y6, Q.finalMessage(), "f"), Z(this, y6, "f").catch(() => { + }), yield Q; + else y(this, y6, this.client.beta.messages.create({ ...X, stream: false }, Z(this, M6, "f")), "f"), yield Z(this, y6, "f"); + if (!await Z(this, MQ, "m", Mw).call(this)) { + if (!Z(this, W0, "f")) { + let { role: U, content: H } = await Z(this, y6, "f"); + Z(this, r$, "f").params.messages.push({ role: U, content: H }); + } + let G = await Z(this, MQ, "m", iG).call(this, Z(this, r$, "f").params.messages.at(-1)); + if (G) Z(this, r$, "f").params.messages.push(G); + else if (!Z(this, W0, "f")) break; + } + } finally { + if (Q) Q.abort(); + } + } + if (!Z(this, y6, "f")) throw new g("ToolRunner concluded without a message from the server"); + Z(this, N1, "f").resolve(await Z(this, y6, "f")); + } catch (Q) { + throw y(this, H8, false, "f"), Z(this, N1, "f").promise.catch(() => { + }), Z(this, N1, "f").reject(Q), y(this, N1, Lw(), "f"), Q; + } + } + setMessagesParams($) { + if (typeof $ === "function") Z(this, r$, "f").params = $(Z(this, r$, "f").params); + else Z(this, r$, "f").params = $; + y(this, W0, true, "f"), y(this, f4, void 0, "f"); + } + setRequestOptions($) { + if (typeof $ === "function") y(this, M6, $(Z(this, M6, "f")), "f"); + else y(this, M6, { ...Z(this, M6, "f"), ...$ }, "f"); + } + async generateToolResponse($ = Z(this, M6, "f").signal) { + var _a5; + let Q = (_a5 = await Z(this, y6, "f")) != null ? _a5 : this.params.messages.at(-1); + if (!Q) return null; + return Z(this, MQ, "m", iG).call(this, Q, $); + } + done() { + return Z(this, N1, "f").promise; + } + async runUntilDone() { + if (!Z(this, H8, "f")) for await (let $ of this) ; + return this.done(); + } + get params() { + return Z(this, r$, "f").params; + } + pushMessages(...$) { + this.setMessagesParams((Q) => ({ ...Q, messages: [...Q.messages, ...$] })); + } + then($, Q) { + return this.runUntilDone().then($, Q); + } +}; +iG = async function(Q, J = Z(this, M6, "f").signal) { + if (Z(this, f4, "f") !== void 0) return Z(this, f4, "f"); + return y(this, f4, Fv(Z(this, r$, "f").params, Q, { ...Z(this, M6, "f"), signal: J }), "f"), Z(this, f4, "f"); +}; +async function Fv($, Q = $.messages.at(-1), J) { + if (!Q || Q.role !== "assistant" || !Q.content || typeof Q.content === "string") return null; + let Y = Q.content.filter((W) => W.type === "tool_use"); + if (Y.length === 0) return null; + return { role: "user", content: await Promise.all(Y.map(async (W) => { + let G = $.tools.find((U) => ("name" in U ? U.name : U.mcp_server_name) === W.name); + if (!G || !("run" in G)) return { type: "tool_result", tool_use_id: W.id, content: `Error: Tool '${W.name}' not found`, is_error: true }; + try { + let U = W.input; + if ("parse" in G && G.parse) U = G.parse(U); + let H = await G.run(U, { toolUseBlock: W, signal: J == null ? void 0 : J.signal }); + return { type: "tool_result", tool_use_id: W.id, content: H }; + } catch (U) { + return { type: "tool_result", tool_use_id: W.id, content: U instanceof U8 ? U.content : `Error: ${U instanceof Error ? U.message : String(U)}`, is_error: true }; + } + })) }; +} +var jw = { "claude-1.3": "November 6th, 2024", "claude-1.3-100k": "November 6th, 2024", "claude-instant-1.1": "November 6th, 2024", "claude-instant-1.1-100k": "November 6th, 2024", "claude-instant-1.2": "November 6th, 2024", "claude-3-sonnet-20240229": "July 21st, 2025", "claude-3-opus-20240229": "January 5th, 2026", "claude-2.1": "July 21st, 2025", "claude-2.0": "July 21st, 2025", "claude-3-7-sonnet-latest": "February 19th, 2026", "claude-3-7-sonnet-20250219": "February 19th, 2026" }; +var Zv = ["claude-mythos-preview", "claude-opus-4-6"]; +var w1 = class extends t { + constructor() { + super(...arguments); + this.batches = new BQ(this._client); + } + create($, Q) { + var _a5, _b3; + let J = Aw($), { betas: Y, ...X } = J; + if (X.model in jw) console.warn(`The model '${X.model}' is deprecated and will reach end-of-life on ${jw[X.model]} +Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); + if (Zv.includes(X.model) && X.thinking && X.thinking.type === "enabled") console.warn(`Using Claude with ${X.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`); + let W = this._client._options.timeout; + if (!X.stream && W == null) { + let U = (_a5 = v5[X.model]) != null ? _a5 : void 0; + W = this._client.calculateNonstreamingTimeout(X.max_tokens, U); + } + let G = S5(X.tools, X.messages); + return this._client.post("/v1/messages?beta=true", { body: X, timeout: W != null ? W : 6e5, ...Q, headers: R([{ ...(Y == null ? void 0 : Y.toString()) != null ? { "anthropic-beta": Y == null ? void 0 : Y.toString() } : void 0 }, G, Q == null ? void 0 : Q.headers]), stream: (_b3 = J.stream) != null ? _b3 : false }); + } + parse($, Q) { + var _a5; + return Q = { ...Q, headers: R([{ "anthropic-beta": [...(_a5 = $.betas) != null ? _a5 : [], "structured-outputs-2025-12-15"].toString() }, Q == null ? void 0 : Q.headers]) }, this.create($, Q).then((J) => { + var _a6; + return mG(J, $, { logger: (_a6 = this._client.logger) != null ? _a6 : console }); + }); + } + stream($, Q) { + return ZQ.createMessage(this, $, Q); + } + countTokens($, Q) { + let J = Aw($), { betas: Y, ...X } = J; + return this._client.post("/v1/messages/count_tokens?beta=true", { body: X, ...Q, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "token-counting-2024-11-01"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + toolRunner($, Q) { + return new jQ(this._client, $, Q); + } +}; +function Aw($) { + var _a5; + if (!$.output_format) return $; + if ((_a5 = $.output_config) == null ? void 0 : _a5.format) throw new g("Both output_format and output_config.format were provided. Please use only output_config.format (output_format is deprecated)."); + let { output_format: Q, ...J } = $; + return { ...J, output_config: { ...$.output_config, format: Q } }; +} +w1.Batches = BQ; +w1.BetaToolRunner = jQ; +w1.ToolError = U8; +var AQ = class extends t { + list($, Q = {}, J) { + let { betas: Y, ...X } = Q != null ? Q : {}; + return this._client.getAPIList(T`/v1/sessions/${$}/events?beta=true`, D$, { query: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + send($, Q, J) { + let { betas: Y, ...X } = Q; + return this._client.post(T`/v1/sessions/${$}/events?beta=true`, { body: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + stream($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.get(T`/v1/sessions/${$}/events/stream?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]), stream: true }); + } +}; +var IQ = class extends t { + retrieve($, Q, J) { + let { session_id: Y, betas: X } = Q; + return this._client.get(T`/v1/sessions/${Y}/resources/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + update($, Q, J) { + let { session_id: Y, betas: X, ...W } = Q; + return this._client.post(T`/v1/sessions/${Y}/resources/${$}?beta=true`, { body: W, ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + list($, Q = {}, J) { + let { betas: Y, ...X } = Q != null ? Q : {}; + return this._client.getAPIList(T`/v1/sessions/${$}/resources?beta=true`, D$, { query: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + delete($, Q, J) { + let { session_id: Y, betas: X } = Q; + return this._client.delete(T`/v1/sessions/${Y}/resources/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + add($, Q, J) { + let { betas: Y, ...X } = Q; + return this._client.post(T`/v1/sessions/${$}/resources?beta=true`, { body: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } +}; +var G0 = class extends t { + constructor() { + super(...arguments); + this.events = new AQ(this._client), this.resources = new IQ(this._client); + } + create($, Q) { + let { betas: J, ...Y } = $; + return this._client.post("/v1/sessions?beta=true", { body: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "managed-agents-2026-04-01"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + retrieve($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.get(T`/v1/sessions/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + update($, Q, J) { + let { betas: Y, ...X } = Q; + return this._client.post(T`/v1/sessions/${$}?beta=true`, { body: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + list($ = {}, Q) { + let { betas: J, ...Y } = $ != null ? $ : {}; + return this._client.getAPIList("/v1/sessions?beta=true", D$, { query: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "managed-agents-2026-04-01"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + delete($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.delete(T`/v1/sessions/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + archive($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.post(T`/v1/sessions/${$}/archive?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } +}; +G0.Events = AQ; +G0.Resources = IQ; +var RQ = class extends t { + create($, Q = {}, J) { + let { betas: Y, ...X } = Q != null ? Q : {}; + return this._client.post(T`/v1/skills/${$}/versions?beta=true`, J8({ body: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "skills-2025-10-02"].toString() }, J == null ? void 0 : J.headers]) }, this._client)); + } + retrieve($, Q, J) { + let { skill_id: Y, betas: X } = Q; + return this._client.get(T`/v1/skills/${Y}/versions/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "skills-2025-10-02"].toString() }, J == null ? void 0 : J.headers]) }); + } + list($, Q = {}, J) { + let { betas: Y, ...X } = Q != null ? Q : {}; + return this._client.getAPIList(T`/v1/skills/${$}/versions?beta=true`, D$, { query: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "skills-2025-10-02"].toString() }, J == null ? void 0 : J.headers]) }); + } + delete($, Q, J) { + let { skill_id: Y, betas: X } = Q; + return this._client.delete(T`/v1/skills/${Y}/versions/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "skills-2025-10-02"].toString() }, J == null ? void 0 : J.headers]) }); + } +}; +var K8 = class extends t { + constructor() { + super(...arguments); + this.versions = new RQ(this._client); + } + create($ = {}, Q) { + let { betas: J, ...Y } = $ != null ? $ : {}; + return this._client.post("/v1/skills?beta=true", J8({ body: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "skills-2025-10-02"].toString() }, Q == null ? void 0 : Q.headers]) }, this._client, false)); + } + retrieve($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.get(T`/v1/skills/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "skills-2025-10-02"].toString() }, J == null ? void 0 : J.headers]) }); + } + list($ = {}, Q) { + let { betas: J, ...Y } = $ != null ? $ : {}; + return this._client.getAPIList("/v1/skills?beta=true", D$, { query: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "skills-2025-10-02"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + delete($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.delete(T`/v1/skills/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "skills-2025-10-02"].toString() }, J == null ? void 0 : J.headers]) }); + } +}; +K8.Versions = RQ; +var PQ = class extends t { + create($, Q, J) { + let { betas: Y, ...X } = Q; + return this._client.post(T`/v1/vaults/${$}/credentials?beta=true`, { body: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + retrieve($, Q, J) { + let { vault_id: Y, betas: X } = Q; + return this._client.get(T`/v1/vaults/${Y}/credentials/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + update($, Q, J) { + let { vault_id: Y, betas: X, ...W } = Q; + return this._client.post(T`/v1/vaults/${Y}/credentials/${$}?beta=true`, { body: W, ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + list($, Q = {}, J) { + let { betas: Y, ...X } = Q != null ? Q : {}; + return this._client.getAPIList(T`/v1/vaults/${$}/credentials?beta=true`, D$, { query: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + delete($, Q, J) { + let { vault_id: Y, betas: X } = Q; + return this._client.delete(T`/v1/vaults/${Y}/credentials/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + archive($, Q, J) { + let { vault_id: Y, betas: X } = Q; + return this._client.post(T`/v1/vaults/${Y}/credentials/${$}/archive?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...X != null ? X : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } +}; +var q8 = class extends t { + constructor() { + super(...arguments); + this.credentials = new PQ(this._client); + } + create($, Q) { + let { betas: J, ...Y } = $; + return this._client.post("/v1/vaults?beta=true", { body: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "managed-agents-2026-04-01"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + retrieve($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.get(T`/v1/vaults/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + update($, Q, J) { + let { betas: Y, ...X } = Q; + return this._client.post(T`/v1/vaults/${$}?beta=true`, { body: X, ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + list($ = {}, Q) { + let { betas: J, ...Y } = $ != null ? $ : {}; + return this._client.getAPIList("/v1/vaults?beta=true", D$, { query: Y, ...Q, headers: R([{ "anthropic-beta": [...J != null ? J : [], "managed-agents-2026-04-01"].toString() }, Q == null ? void 0 : Q.headers]) }); + } + delete($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.delete(T`/v1/vaults/${$}?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } + archive($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.post(T`/v1/vaults/${$}/archive?beta=true`, { ...J, headers: R([{ "anthropic-beta": [...Y != null ? Y : [], "managed-agents-2026-04-01"].toString() }, J == null ? void 0 : J.headers]) }); + } +}; +q8.Credentials = PQ; +var G6 = class extends t { + constructor() { + super(...arguments); + this.models = new UQ(this._client), this.messages = new w1(this._client), this.agents = new X8(this._client), this.environments = new YQ(this._client), this.sessions = new G0(this._client), this.vaults = new q8(this._client), this.memoryStores = new X0(this._client), this.files = new GQ(this._client), this.skills = new K8(this._client), this.userProfiles = new HQ(this._client); + } +}; +G6.Models = UQ; +G6.Messages = w1; +G6.Agents = X8; +G6.Environments = YQ; +G6.Sessions = G0; +G6.Vaults = q8; +G6.MemoryStores = X0; +G6.Files = GQ; +G6.Skills = K8; +G6.UserProfiles = HQ; +var V8 = class extends t { + create($, Q) { + var _a5, _b3; + let { betas: J, ...Y } = $; + return this._client.post("/v1/complete", { body: Y, timeout: (_a5 = this._client._options.timeout) != null ? _a5 : 6e5, ...Q, headers: R([{ ...(J == null ? void 0 : J.toString()) != null ? { "anthropic-beta": J == null ? void 0 : J.toString() } : void 0 }, Q == null ? void 0 : Q.headers]), stream: (_b3 = $.stream) != null ? _b3 : false }); + } +}; +function Iw($) { + var _a5; + return (_a5 = $ == null ? void 0 : $.output_config) == null ? void 0 : _a5.format; +} +function nG($, Q, J) { + let Y = Iw(Q); + if (!Q || !("parse" in (Y != null ? Y : {}))) return { ...$, content: $.content.map((X) => { + if (X.type === "text") return Object.defineProperty({ ...X }, "parsed_output", { value: null, enumerable: false }); + return X; + }), parsed_output: null }; + return rG($, Q, J); +} +function rG($, Q, J) { + let Y = null, X = $.content.map((W) => { + if (W.type === "text") { + let G = bv(Q, W.text); + if (Y === null) Y = G; + return Object.defineProperty({ ...W }, "parsed_output", { value: G, enumerable: false }); + } + return W; + }); + return { ...$, content: X, parsed_output: Y }; +} +function bv($, Q) { + let J = Iw($); + if ((J == null ? void 0 : J.type) !== "json_schema") return null; + try { + if ("parse" in J) return J.parse(Q); + return JSON.parse(Q); + } catch (Y) { + throw new g(`Failed to parse structured output: ${Y}`); + } +} +var n6; +var O1; +var B8; +var EQ; +var m5; +var bQ; +var _Q; +var l5; +var kQ; +var g4; +var SQ; +var c5; +var p5; +var U0; +var d5; +var i5; +var vQ; +var oG; +var Rw; +var tG; +var aG; +var sG; +var eG; +var Pw; +var Ew = "__json_buf"; +function bw($) { + return $.type === "tool_use" || $.type === "server_tool_use"; +} +var CQ = class _CQ { + constructor($, Q) { + var _a5; + n6.add(this), this.messages = [], this.receivedMessages = [], O1.set(this, void 0), B8.set(this, null), this.controller = new AbortController(), EQ.set(this, void 0), m5.set(this, () => { + }), bQ.set(this, () => { + }), _Q.set(this, void 0), l5.set(this, () => { + }), kQ.set(this, () => { + }), g4.set(this, {}), SQ.set(this, false), c5.set(this, false), p5.set(this, false), U0.set(this, false), d5.set(this, void 0), i5.set(this, void 0), vQ.set(this, void 0), tG.set(this, (J) => { + if (y(this, c5, true, "f"), T4(J)) J = new Q6(); + if (J instanceof Q6) return y(this, p5, true, "f"), this._emit("abort", J); + if (J instanceof g) return this._emit("error", J); + if (J instanceof Error) { + let Y = new g(J.message); + return Y.cause = J, this._emit("error", Y); + } + return this._emit("error", new g(String(J))); + }), y(this, EQ, new Promise((J, Y) => { + y(this, m5, J, "f"), y(this, bQ, Y, "f"); + }), "f"), y(this, _Q, new Promise((J, Y) => { + y(this, l5, J, "f"), y(this, kQ, Y, "f"); + }), "f"), Z(this, EQ, "f").catch(() => { + }), Z(this, _Q, "f").catch(() => { + }), y(this, B8, $, "f"), y(this, vQ, (_a5 = Q == null ? void 0 : Q.logger) != null ? _a5 : console, "f"); + } + get response() { + return Z(this, d5, "f"); + } + get request_id() { + return Z(this, i5, "f"); + } + async withResponse() { + y(this, U0, true, "f"); + let $ = await Z(this, EQ, "f"); + if (!$) throw Error("Could not resolve a `Response` object"); + return { data: this, response: $, request_id: $.headers.get("request-id") }; + } + static fromReadableStream($) { + let Q = new _CQ(null); + return Q._run(() => Q._fromReadableStream($)), Q; + } + static createMessage($, Q, J, { logger: Y } = {}) { + let X = new _CQ(Q, { logger: Y }); + for (let W of Q.messages) X._addMessageParam(W); + return y(X, B8, { ...Q, stream: true }, "f"), X._run(() => X._createMessage($, { ...Q, stream: true }, { ...J, headers: { ...J == null ? void 0 : J.headers, "X-Stainless-Helper-Method": "stream" } })), X; + } + _run($) { + $().then(() => { + this._emitFinal(), this._emit("end"); + }, Z(this, tG, "f")); + } + _addMessageParam($) { + this.messages.push($); + } + _addMessage($, Q = true) { + if (this.receivedMessages.push($), Q) this._emit("message", $); + } + async _createMessage($, Q, J) { + var _a5; + let Y = J == null ? void 0 : J.signal, X; + if (Y) { + if (Y.aborted) this.controller.abort(); + X = this.controller.abort.bind(this.controller), Y.addEventListener("abort", X); + } + try { + Z(this, n6, "m", aG).call(this); + let { response: W, data: G } = await $.create({ ...Q, stream: true }, { ...J, signal: this.controller.signal }).withResponse(); + this._connected(W); + for await (let U of G) Z(this, n6, "m", sG).call(this, U); + if ((_a5 = G.controller.signal) == null ? void 0 : _a5.aborted) throw new Q6(); + Z(this, n6, "m", eG).call(this); + } finally { + if (Y && X) Y.removeEventListener("abort", X); + } + } + _connected($) { + if (this.ended) return; + y(this, d5, $, "f"), y(this, i5, $ == null ? void 0 : $.headers.get("request-id"), "f"), Z(this, m5, "f").call(this, $), this._emit("connect"); + } + get ended() { + return Z(this, SQ, "f"); + } + get errored() { + return Z(this, c5, "f"); + } + get aborted() { + return Z(this, p5, "f"); + } + abort() { + this.controller.abort(); + } + on($, Q) { + return (Z(this, g4, "f")[$] || (Z(this, g4, "f")[$] = [])).push({ listener: Q }), this; + } + off($, Q) { + let J = Z(this, g4, "f")[$]; + if (!J) return this; + let Y = J.findIndex((X) => X.listener === Q); + if (Y >= 0) J.splice(Y, 1); + return this; + } + once($, Q) { + return (Z(this, g4, "f")[$] || (Z(this, g4, "f")[$] = [])).push({ listener: Q, once: true }), this; + } + emitted($) { + return new Promise((Q, J) => { + if (y(this, U0, true, "f"), $ !== "error") this.once("error", J); + this.once($, Q); + }); + } + async done() { + y(this, U0, true, "f"), await Z(this, _Q, "f"); + } + get currentMessage() { + return Z(this, O1, "f"); + } + async finalMessage() { + return await this.done(), Z(this, n6, "m", oG).call(this); + } + async finalText() { + return await this.done(), Z(this, n6, "m", Rw).call(this); + } + _emit($, ...Q) { + if (Z(this, SQ, "f")) return; + if ($ === "end") y(this, SQ, true, "f"), Z(this, l5, "f").call(this); + let J = Z(this, g4, "f")[$]; + if (J) Z(this, g4, "f")[$] = J.filter((Y) => !Y.once), J.forEach(({ listener: Y }) => Y(...Q)); + if ($ === "abort") { + let Y = Q[0]; + if (!Z(this, U0, "f") && !(J == null ? void 0 : J.length)) Promise.reject(Y); + Z(this, bQ, "f").call(this, Y), Z(this, kQ, "f").call(this, Y), this._emit("end"); + return; + } + if ($ === "error") { + let Y = Q[0]; + if (!Z(this, U0, "f") && !(J == null ? void 0 : J.length)) Promise.reject(Y); + Z(this, bQ, "f").call(this, Y), Z(this, kQ, "f").call(this, Y), this._emit("end"); + } + } + _emitFinal() { + if (this.receivedMessages.at(-1)) this._emit("finalMessage", Z(this, n6, "m", oG).call(this)); + } + async _fromReadableStream($, Q) { + var _a5; + let J = Q == null ? void 0 : Q.signal, Y; + if (J) { + if (J.aborted) this.controller.abort(); + Y = this.controller.abort.bind(this.controller), J.addEventListener("abort", Y); + } + try { + Z(this, n6, "m", aG).call(this), this._connected(null); + let X = x6.fromReadableStream($, this.controller); + for await (let W of X) Z(this, n6, "m", sG).call(this, W); + if ((_a5 = X.controller.signal) == null ? void 0 : _a5.aborted) throw new Q6(); + Z(this, n6, "m", eG).call(this); + } finally { + if (J && Y) J.removeEventListener("abort", Y); + } + } + [(O1 = /* @__PURE__ */ new WeakMap(), B8 = /* @__PURE__ */ new WeakMap(), EQ = /* @__PURE__ */ new WeakMap(), m5 = /* @__PURE__ */ new WeakMap(), bQ = /* @__PURE__ */ new WeakMap(), _Q = /* @__PURE__ */ new WeakMap(), l5 = /* @__PURE__ */ new WeakMap(), kQ = /* @__PURE__ */ new WeakMap(), g4 = /* @__PURE__ */ new WeakMap(), SQ = /* @__PURE__ */ new WeakMap(), c5 = /* @__PURE__ */ new WeakMap(), p5 = /* @__PURE__ */ new WeakMap(), U0 = /* @__PURE__ */ new WeakMap(), d5 = /* @__PURE__ */ new WeakMap(), i5 = /* @__PURE__ */ new WeakMap(), vQ = /* @__PURE__ */ new WeakMap(), tG = /* @__PURE__ */ new WeakMap(), n6 = /* @__PURE__ */ new WeakSet(), oG = function() { + if (this.receivedMessages.length === 0) throw new g("stream ended without producing a Message with role=assistant"); + return this.receivedMessages.at(-1); + }, Rw = function() { + if (this.receivedMessages.length === 0) throw new g("stream ended without producing a Message with role=assistant"); + let Q = this.receivedMessages.at(-1).content.filter((J) => J.type === "text").map((J) => J.text); + if (Q.length === 0) throw new g("stream ended without producing a content block with type=text"); + return Q.join(" "); + }, aG = function() { + if (this.ended) return; + y(this, O1, void 0, "f"); + }, sG = function(Q) { + var _a5; + if (this.ended) return; + let J = Z(this, n6, "m", Pw).call(this, Q); + switch (this._emit("streamEvent", Q, J), Q.type) { + case "content_block_delta": { + let Y = J.content.at(-1); + switch (Q.delta.type) { + case "text_delta": { + if (Y.type === "text") this._emit("text", Q.delta.text, Y.text || ""); + break; + } + case "citations_delta": { + if (Y.type === "text") this._emit("citation", Q.delta.citation, (_a5 = Y.citations) != null ? _a5 : []); + break; + } + case "input_json_delta": { + if (bw(Y) && Y.input) this._emit("inputJson", Q.delta.partial_json, Y.input); + break; + } + case "thinking_delta": { + if (Y.type === "thinking") this._emit("thinking", Q.delta.thinking, Y.thinking); + break; + } + case "signature_delta": { + if (Y.type === "thinking") this._emit("signature", Y.signature); + break; + } + default: + _w(Q.delta); + } + break; + } + case "message_stop": { + this._addMessageParam(J), this._addMessage(nG(J, Z(this, B8, "f"), { logger: Z(this, vQ, "f") }), true); + break; + } + case "content_block_stop": { + this._emit("contentBlock", J.content.at(-1)); + break; + } + case "message_start": { + y(this, O1, J, "f"); + break; + } + case "content_block_start": + case "message_delta": + break; + } + }, eG = function() { + if (this.ended) throw new g("stream has ended, this shouldn't happen"); + let Q = Z(this, O1, "f"); + if (!Q) throw new g("request ended without sending any chunks"); + return y(this, O1, void 0, "f"), nG(Q, Z(this, B8, "f"), { logger: Z(this, vQ, "f") }); + }, Pw = function(Q) { + var _a5; + let J = Z(this, O1, "f"); + if (Q.type === "message_start") { + if (J) throw new g(`Unexpected event order, got ${Q.type} before receiving "message_stop"`); + return Q.message; + } + if (!J) throw new g(`Unexpected event order, got ${Q.type} before "message_start"`); + switch (Q.type) { + case "message_stop": + return J; + case "message_delta": + if (J.stop_reason = Q.delta.stop_reason, J.stop_sequence = Q.delta.stop_sequence, J.usage.output_tokens = Q.usage.output_tokens, Q.usage.input_tokens != null) J.usage.input_tokens = Q.usage.input_tokens; + if (Q.usage.cache_creation_input_tokens != null) J.usage.cache_creation_input_tokens = Q.usage.cache_creation_input_tokens; + if (Q.usage.cache_read_input_tokens != null) J.usage.cache_read_input_tokens = Q.usage.cache_read_input_tokens; + if (Q.usage.server_tool_use != null) J.usage.server_tool_use = Q.usage.server_tool_use; + return J; + case "content_block_start": + return J.content.push({ ...Q.content_block }), J; + case "content_block_delta": { + let Y = J.content.at(Q.index); + switch (Q.delta.type) { + case "text_delta": { + if ((Y == null ? void 0 : Y.type) === "text") J.content[Q.index] = { ...Y, text: (Y.text || "") + Q.delta.text }; + break; + } + case "citations_delta": { + if ((Y == null ? void 0 : Y.type) === "text") J.content[Q.index] = { ...Y, citations: [...(_a5 = Y.citations) != null ? _a5 : [], Q.delta.citation] }; + break; + } + case "input_json_delta": { + if (Y && bw(Y)) { + let X = Y[Ew] || ""; + X += Q.delta.partial_json; + let W = { ...Y }; + if (Object.defineProperty(W, Ew, { value: X, enumerable: false, writable: true }), X) W.input = C5(X); + J.content[Q.index] = W; + } + break; + } + case "thinking_delta": { + if ((Y == null ? void 0 : Y.type) === "thinking") J.content[Q.index] = { ...Y, thinking: Y.thinking + Q.delta.thinking }; + break; + } + case "signature_delta": { + if ((Y == null ? void 0 : Y.type) === "thinking") J.content[Q.index] = { ...Y, signature: Q.delta.signature }; + break; + } + default: + _w(Q.delta); + } + return J; + } + case "content_block_stop": + return J; + } + }, Symbol.asyncIterator)]() { + let $ = [], Q = [], J = false; + return this.on("streamEvent", (Y) => { + let X = Q.shift(); + if (X) X.resolve(Y); + else $.push(Y); + }), this.on("end", () => { + J = true; + for (let Y of Q) Y.resolve(void 0); + Q.length = 0; + }), this.on("abort", (Y) => { + J = true; + for (let X of Q) X.reject(Y); + Q.length = 0; + }), this.on("error", (Y) => { + J = true; + for (let X of Q) X.reject(Y); + Q.length = 0; + }), { next: async () => { + if (!$.length) { + if (J) return { value: void 0, done: true }; + return new Promise((X, W) => Q.push({ resolve: X, reject: W })).then((X) => X ? { value: X, done: false } : { value: void 0, done: true }); + } + return { value: $.shift(), done: false }; + }, return: async () => { + return this.abort(), { value: void 0, done: true }; + } }; + } + toReadableStream() { + return new x6(this[Symbol.asyncIterator].bind(this), this.controller).toReadableStream(); + } +}; +function _w($) { +} +var TQ = class extends t { + create($, Q) { + return this._client.post("/v1/messages/batches", { body: $, ...Q }); + } + retrieve($, Q) { + return this._client.get(T`/v1/messages/batches/${$}`, Q); + } + list($ = {}, Q) { + return this._client.getAPIList("/v1/messages/batches", W4, { query: $, ...Q }); + } + delete($, Q) { + return this._client.delete(T`/v1/messages/batches/${$}`, Q); + } + cancel($, Q) { + return this._client.post(T`/v1/messages/batches/${$}/cancel`, Q); + } + async results($, Q) { + let J = await this.retrieve($); + if (!J.results_url) throw new g(`No batch \`results_url\`; Has it finished processing? ${J.processing_status} - ${J.id}`); + return this._client.get(J.results_url, { ...Q, headers: R([{ Accept: "application/binary" }, Q == null ? void 0 : Q.headers]), stream: true, __binaryResponse: true })._thenUnwrap((Y, X) => Y8.fromResponse(X.response, X.controller)); + } +}; +var H0 = class extends t { + constructor() { + super(...arguments); + this.batches = new TQ(this._client); + } + create($, Q) { + var _a5, _b3; + if ($.model in kw) console.warn(`The model '${$.model}' is deprecated and will reach end-of-life on ${kw[$.model]} +Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); + if (kv.includes($.model) && $.thinking && $.thinking.type === "enabled") console.warn(`Using Claude with ${$.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`); + let J = this._client._options.timeout; + if (!$.stream && J == null) { + let X = (_a5 = v5[$.model]) != null ? _a5 : void 0; + J = this._client.calculateNonstreamingTimeout($.max_tokens, X); + } + let Y = S5($.tools, $.messages); + return this._client.post("/v1/messages", { body: $, timeout: J != null ? J : 6e5, ...Q, headers: R([Y, Q == null ? void 0 : Q.headers]), stream: (_b3 = $.stream) != null ? _b3 : false }); + } + parse($, Q) { + return this.create($, Q).then((J) => { + var _a5; + return rG(J, $, { logger: (_a5 = this._client.logger) != null ? _a5 : console }); + }); + } + stream($, Q) { + var _a5; + return CQ.createMessage(this, $, Q, { logger: (_a5 = this._client.logger) != null ? _a5 : console }); + } + countTokens($, Q) { + return this._client.post("/v1/messages/count_tokens", { body: $, ...Q }); + } +}; +var kw = { "claude-1.3": "November 6th, 2024", "claude-1.3-100k": "November 6th, 2024", "claude-instant-1.1": "November 6th, 2024", "claude-instant-1.1-100k": "November 6th, 2024", "claude-instant-1.2": "November 6th, 2024", "claude-3-sonnet-20240229": "July 21st, 2025", "claude-3-opus-20240229": "January 5th, 2026", "claude-2.1": "July 21st, 2025", "claude-2.0": "July 21st, 2025", "claude-3-7-sonnet-latest": "February 19th, 2026", "claude-3-7-sonnet-20250219": "February 19th, 2026", "claude-3-5-haiku-latest": "February 19th, 2026", "claude-3-5-haiku-20241022": "February 19th, 2026", "claude-opus-4-0": "June 15th, 2026", "claude-opus-4-20250514": "June 15th, 2026", "claude-sonnet-4-0": "June 15th, 2026", "claude-sonnet-4-20250514": "June 15th, 2026" }; +var kv = ["claude-mythos-preview", "claude-opus-4-6"]; +H0.Batches = TQ; +var z8 = class extends t { + retrieve($, Q = {}, J) { + let { betas: Y } = Q != null ? Q : {}; + return this._client.get(T`/v1/models/${$}`, { ...J, headers: R([{ ...(Y == null ? void 0 : Y.toString()) != null ? { "anthropic-beta": Y == null ? void 0 : Y.toString() } : void 0 }, J == null ? void 0 : J.headers]) }); + } + list($ = {}, Q) { + let { betas: J, ...Y } = $ != null ? $ : {}; + return this._client.getAPIList("/v1/models", W4, { query: Y, ...Q, headers: R([{ ...(J == null ? void 0 : J.toString()) != null ? { "anthropic-beta": J == null ? void 0 : J.toString() } : void 0 }, Q == null ? void 0 : Q.headers]) }); + } +}; +var $U; +var QU; +var n5; +var Sw; +var vw = "\\n\\nHuman:"; +var Cw = "\\n\\nAssistant:"; +var f$ = class { + get credentials() { + return this._authState.provider; + } + constructor({ baseURL: $ = w$("ANTHROPIC_BASE_URL"), apiKey: Q, authToken: J, ...Y } = {}) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j; + if ($U.add(this), this._requestAuthFlags = /* @__PURE__ */ new WeakMap(), n5.set(this, void 0), Q === void 0) Q = Y.profile != null ? null : (_a5 = w$("ANTHROPIC_API_KEY")) != null ? _a5 : null; + if (J === void 0) J = Y.profile != null ? null : (_b3 = w$("ANTHROPIC_AUTH_TOKEN")) != null ? _b3 : null; + if (Y.profile != null && (Y.credentials != null || Y.config != null)) throw TypeError("Pass at most one of `profile`, `credentials`, or `config`."); + let X = { apiKey: Q, authToken: J, ...Y, baseURL: $ || "https://api.anthropic.com" }; + if (!X.dangerouslyAllowBrowser && xN()) throw new g(`It looks like you're running in a browser-like environment. + +This is disabled by default, as it risks exposing your secret API credentials to attackers. +If you understand the risks and have appropriate mitigations in place, +you can set the \`dangerouslyAllowBrowser\` option to \`true\`, e.g., + +new Anthropic({ apiKey, dangerouslyAllowBrowser: true }); +`); + this.baseURL = X.baseURL, this._baseURLIsExplicit = (_c2 = Y.__baseURLIsExplicit) != null ? _c2 : !!$, this.timeout = (_d = X.timeout) != null ? _d : QU.DEFAULT_TIMEOUT, this.logger = (_e2 = X.logger) != null ? _e2 : console; + let W = "warn"; + this.logLevel = W, this.logLevel = (_g = (_f2 = _G(X.logLevel, "ClientOptions.logLevel", this)) != null ? _f2 : _G(w$("ANTHROPIC_LOG"), "process.env['ANTHROPIC_LOG']", this)) != null ? _g : W, this.fetchOptions = X.fetchOptions, this.maxRetries = (_h2 = X.maxRetries) != null ? _h2 : 2, this.fetch = (_i = X.fetch) != null ? _i : yN(), y(this, n5, gN, "f"); + let G = w$("ANTHROPIC_CUSTOM_HEADERS"); + if (G) { + let H = {}; + for (let q of G.split(` +`)) { + let V = q.indexOf(":"); + if (V >= 0) H[q.substring(0, V).trim()] = q.substring(V + 1).trim(); + } + X.defaultHeaders = { ...H, ...X.defaultHeaders }; + } + let U = Y.__auth; + if (delete X.__auth, delete X.__baseURLIsExplicit, this._options = X, this.apiKey = typeof Q === "string" ? Q : null, this.authToken = J, U) { + if (this._authState = U, !this._baseURLIsExplicit && U.baseURL) this.baseURL = U.baseURL; + } else if (this._authState = { provider: null, tokenCache: null, resolution: null, error: null, extraHeaders: {} }, this.apiKey == null && this.authToken == null) { + let H = (_j = X.credentials) != null ? _j : null; + if (H) this._authState.provider = H, this._authState.tokenCache = this._makeTokenCache(H); + else if (X.config != null) { + let q = vG(X.config, this._credentialResolverOptions()); + this._authState.provider = q.provider, this._authState.tokenCache = this._makeTokenCache(q.provider), this._authState.extraHeaders = q.extraHeaders, this._applyCredentialBaseURL(q.baseURL); + } else if (X.profile != null) this._authState.resolution = this._resolveDefaultCredentials(X.profile); + else this._authState.resolution = this._resolveDefaultCredentials(); + } + } + _applyCredentialBaseURL($) { + if (!$) return; + let Q = $.replace(/\/+$/, ""); + if (this._authState.baseURL = Q, !this._baseURLIsExplicit) this.baseURL = Q; + } + _credentialResolverOptions() { + return { baseURL: this.baseURL, fetch: this.fetch, userAgent: this.getUserAgent(), onCacheWriteError: ($) => { + m$(this).debug("credential cache write failed (best-effort)", $); + }, onSafetyWarning: ($) => { + m$(this).warn($); + } }; + } + _makeTokenCache($) { + return new EG($, (Q) => { + m$(this).debug("advisory token refresh failed; serving cached token", Q); + }); + } + withOptions($) { + let Q = "credentials" in $ || "config" in $ || "profile" in $, J = "apiKey" in $ || "authToken" in $ || Q, Y = { ...this._options, ...this._baseURLIsExplicit ? { baseURL: this.baseURL } : {}, maxRetries: this.maxRetries, timeout: this.timeout, logger: this.logger, logLevel: this.logLevel, fetch: this.fetch, fetchOptions: this.fetchOptions, apiKey: this.apiKey, authToken: this.authToken, credentials: this.credentials, ...Q ? { credentials: void 0, config: void 0, profile: void 0 } : {}, ...$, __auth: J ? void 0 : this._authState, __baseURLIsExplicit: "baseURL" in $ ? true : this._baseURLIsExplicit }; + return new this.constructor(Y); + } + async _resolveDefaultCredentials($) { + try { + let Q = await Xw(this._credentialResolverOptions(), $); + if (Q) this._authState.provider = Q.provider, this._authState.tokenCache = this._makeTokenCache(Q.provider), this._authState.extraHeaders = Q.extraHeaders, this._applyCredentialBaseURL(Q.baseURL); + else if ($ != null) throw new g(`Profile "${$}" could not be resolved (no /configs/${$}.json found).`); + } catch (Q) { + this._authState.error = Q; + } finally { + this._authState.resolution = null; + } + } + defaultQuery() { + return this._options.defaultQuery; + } + validateHeaders({ values: $, nulls: Q }) { + if ($.get("x-api-key") || $.get("authorization")) return; + if (this._authState.error) throw this._authState.error; + if (this._authState.tokenCache || this._authState.resolution) return; + if (this.apiKey && $.get("x-api-key")) return; + if (Q.has("x-api-key")) return; + if (this.authToken && $.get("authorization")) return; + if (Q.has("authorization")) return; + throw Error('Could not resolve authentication method. Expected one of apiKey, authToken, credentials, config, or profile to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted'); + } + _authFlags($) { + let Q = this._requestAuthFlags.get($); + if (!Q) Q = { usedTokenCache: false, didRefreshFor401: false }, this._requestAuthFlags.set($, Q); + return Q; + } + async authHeaders($) { + if (this._authState.resolution) await this._authState.resolution; + if (this._authState.error) return; + if (this._authState.tokenCache && this.apiKey == null) { + let Q = await this._authState.tokenCache.getToken(); + return this._authFlags($).usedTokenCache = true, R([{ Authorization: `Bearer ${Q}` }]); + } + return R([await this.apiKeyAuth($), await this.bearerAuth($)]); + } + async apiKeyAuth($) { + if (this.apiKey == null) return; + return R([{ "X-Api-Key": this.apiKey }]); + } + async bearerAuth($) { + if (this.authToken == null) return; + return R([{ Authorization: `Bearer ${this.authToken}` }]); + } + stringifyQuery($) { + return hN($); + } + getUserAgent() { + return `${this.constructor.name}/JS ${d6}`; + } + defaultIdempotencyKey() { + return `stainless-node-retry-${LG()}`; + } + makeStatusError($, Q, J, Y) { + return n$.generate($, Q, J, Y); + } + buildURL($, Q, J) { + let Y = !Z(this, $U, "m", Sw).call(this) && J || this.baseURL, X = bN($) ? new URL($) : new URL(Y + (Y.endsWith("/") && $.startsWith("/") ? $.slice(1) : $)), W = this.defaultQuery(), G = Object.fromEntries(X.searchParams); + if (!IG(W) || !IG(G)) Q = { ...G, ...W, ...Q }; + if (typeof Q === "object" && Q && !Array.isArray(Q)) X.search = this.stringifyQuery(Q); + return X.toString(); + } + _calculateNonstreamingTimeout($) { + if (3600 * $ / 128e3 > 600) throw new g("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details"); + return 6e5; + } + async prepareOptions($) { + } + async prepareRequest($, { url: Q, options: J }) { + var _a5, _b3; + if (this._authState.tokenCache && this.apiKey == null) { + let Y = $.headers instanceof Headers ? $.headers : new Headers($.headers); + for (let [W, G] of Object.entries(this._authState.extraHeaders)) if (!Y.has(W)) Y.set(W, G); + if (!((_b3 = (_a5 = Y.get("anthropic-beta")) == null ? void 0 : _a5.split(",").map((W) => W.trim())) == null ? void 0 : _b3.includes($0))) Y.append("anthropic-beta", $0); + $.headers = Y; + } + } + get($, Q) { + return this.methodRequest("get", $, Q); + } + post($, Q) { + return this.methodRequest("post", $, Q); + } + patch($, Q) { + return this.methodRequest("patch", $, Q); + } + put($, Q) { + return this.methodRequest("put", $, Q); + } + delete($, Q) { + return this.methodRequest("delete", $, Q); + } + methodRequest($, Q, J) { + return this.request(Promise.resolve(J).then((Y) => { + return { method: $, path: Q, ...Y }; + })); + } + request($, Q = null) { + return new Q0(this, this.makeRequest($, Q, void 0)); + } + async makeRequest($, Q, J) { + var _a5, _b3, _c2; + let Y = await $, X = (_a5 = Y.maxRetries) != null ? _a5 : this.maxRetries; + if (Q == null) Q = X, this._requestAuthFlags.delete(Y); + await this.prepareOptions(Y); + let { req: W, url: G, timeout: U } = await this.buildRequest(Y, { retryCount: X - Q }); + await this.prepareRequest(W, { url: G, options: Y }); + let H = "log_" + (Math.random() * 16777216 | 0).toString(16).padStart(6, "0"), q = J === void 0 ? "" : `, retryOf: ${J}`, V = Date.now(); + if (m$(this).debug(`[${H}] sending request`, x4({ retryOfRequestLogID: J, method: Y.method, url: G, options: Y, headers: W.headers })), (_b3 = Y.signal) == null ? void 0 : _b3.aborted) throw new Q6(); + let B = new AbortController(), z4 = await this.fetchWithTimeout(G, W, U, B).catch(l9), N = Date.now(); + if (z4 instanceof globalThis.Error) { + let D = `retrying, ${Q} attempts remaining`; + if ((_c2 = Y.signal) == null ? void 0 : _c2.aborted) throw new Q6(); + let M = T4(z4) || /timed? ?out/i.test(String(z4) + ("cause" in z4 ? String(z4.cause) : "")); + if (Q) return m$(this).info(`[${H}] connection ${M ? "timed out" : "failed"} - ${D}`), m$(this).debug(`[${H}] connection ${M ? "timed out" : "failed"} (${D})`, x4({ retryOfRequestLogID: J, url: G, durationMs: N - V, message: z4.message })), this.retryRequest(Y, Q, J != null ? J : H); + if (m$(this).info(`[${H}] connection ${M ? "timed out" : "failed"} - error; no more retries left`), m$(this).debug(`[${H}] connection ${M ? "timed out" : "failed"} (error; no more retries left)`, x4({ retryOfRequestLogID: J, url: G, durationMs: N - V, message: z4.message })), M) throw new c9(); + throw new e1({ cause: z4 }); + } + let w = [...z4.headers.entries()].filter(([D]) => D === "request-id").map(([D, M]) => ", " + D + ": " + JSON.stringify(M)).join(""), O = `[${H}${q}${w}] ${W.method} ${G} ${z4.ok ? "succeeded" : "failed"} with status ${z4.status} in ${N - V}ms`; + if (!z4.ok) { + let D = await this.shouldRetry(z4, Y); + if (Q && D) { + let G$ = `retrying, ${Q} attempts remaining`; + return await fN(z4.body), m$(this).info(`${O} - ${G$}`), m$(this).debug(`[${H}] response error (${G$})`, x4({ retryOfRequestLogID: J, url: z4.url, status: z4.status, headers: z4.headers, durationMs: N - V })), this.retryRequest(Y, Q, J != null ? J : H, z4.headers); + } + let M = D ? "error; no more retries left" : "error; not retryable"; + m$(this).info(`${O} - ${M}`); + let j = await z4.text().catch((G$) => l9(G$).message), A = O5(j), S = A ? void 0 : j; + throw m$(this).debug(`[${H}] response error (${M})`, x4({ retryOfRequestLogID: J, url: z4.url, status: z4.status, headers: z4.headers, message: S, durationMs: Date.now() - V })), this.makeStatusError(z4.status, A, S, z4.headers); + } + return m$(this).info(O), m$(this).debug(`[${H}] response start`, x4({ retryOfRequestLogID: J, url: z4.url, status: z4.status, headers: z4.headers, durationMs: N - V })), { response: z4, options: Y, controller: B, requestLogID: H, retryOfRequestLogID: J, startTime: V }; + } + getAPIList($, Q, J) { + return this.requestAPIList(Q, J && "then" in J ? J.then((Y) => ({ method: "get", path: $, ...Y })) : { method: "get", path: $, ...J }); + } + requestAPIList($, Q) { + let J = this.makeRequest(Q, null, void 0); + return new b5(this, J, $); + } + async fetchWithTimeout($, Q, J, Y) { + let { signal: X, method: W, ...G } = Q || {}, U = this._makeAbort(Y); + if (X) X.addEventListener("abort", U, { once: true }); + let H = setTimeout(U, J), q = globalThis.ReadableStream && G.body instanceof globalThis.ReadableStream || typeof G.body === "object" && G.body !== null && Symbol.asyncIterator in G.body, V = { signal: Y.signal, ...q ? { duplex: "half" } : {}, method: "GET", ...G }; + if (W) V.method = W.toUpperCase(); + try { + return await this.fetch.call(void 0, $, V); + } finally { + clearTimeout(H); + } + } + async shouldRetry($, Q) { + let J = this._authFlags(Q); + if ($.status === 401 && this._authState.tokenCache && J.usedTokenCache && !J.didRefreshFor401) return J.didRefreshFor401 = true, this._authState.tokenCache.invalidate(), true; + let Y = $.headers.get("x-should-retry"); + if (Y === "true") return true; + if (Y === "false") return false; + if ($.status === 408) return true; + if ($.status === 409) return true; + if ($.status === 429) return true; + if ($.status >= 500) return true; + return false; + } + async retryRequest($, Q, J, Y) { + var _a5; + let X, W = Y == null ? void 0 : Y.get("retry-after-ms"); + if (W) { + let U = parseFloat(W); + if (!Number.isNaN(U)) X = U; + } + let G = Y == null ? void 0 : Y.get("retry-after"); + if (G && !X) { + let U = parseFloat(G); + if (!Number.isNaN(U)) X = U * 1e3; + else X = Date.parse(G) - Date.now(); + } + if (X === void 0) { + let U = (_a5 = $.maxRetries) != null ? _a5 : this.maxRetries; + X = this.calculateDefaultRetryTimeoutMillis(Q, U); + } + return await SN(X), this.makeRequest($, Q - 1, J); + } + calculateDefaultRetryTimeoutMillis($, Q) { + let X = Q - $, W = Math.min(0.5 * Math.pow(2, X), 8), G = 1 - Math.random() * 0.25; + return W * G * 1e3; + } + calculateNonstreamingTimeout($, Q) { + if (36e5 * $ / 128e3 > 6e5 || Q != null && $ > Q) throw new g("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details"); + return 6e5; + } + async buildRequest($, { retryCount: Q = 0 } = {}) { + var _a5, _b3, _c2; + let J = { ...$ }, { method: Y, path: X, query: W, defaultBaseURL: G } = J; + if (this._authState.resolution) await this._authState.resolution; + if (!this._baseURLIsExplicit && this._authState.baseURL && this.baseURL !== this._authState.baseURL) this.baseURL = this._authState.baseURL; + let U = this.buildURL(X, W, G); + if ("timeout" in J) kN("timeout", J.timeout); + J.timeout = (_a5 = J.timeout) != null ? _a5 : this.timeout; + let { bodyHeaders: H, body: q } = this.buildBody({ options: J }), V = await this.buildHeaders({ options: $, method: Y, bodyHeaders: H, retryCount: Q }); + return { req: { method: Y, headers: V, ...J.signal && { signal: J.signal }, ...globalThis.ReadableStream && q instanceof globalThis.ReadableStream && { duplex: "half" }, ...q && { body: q }, ...(_b3 = this.fetchOptions) != null ? _b3 : {}, ...(_c2 = J.fetchOptions) != null ? _c2 : {} }, url: U, timeout: J.timeout }; + } + async buildHeaders({ options: $, method: Q, bodyHeaders: J, retryCount: Y }) { + let X = {}; + if (this.idempotencyHeader && Q !== "get") { + if (!$.idempotencyKey) $.idempotencyKey = this.defaultIdempotencyKey(); + X[this.idempotencyHeader] = $.idempotencyKey; + } + let W = R([X, { Accept: "application/json", "User-Agent": this.getUserAgent(), "X-Stainless-Retry-Count": String(Y), ...$.timeout ? { "X-Stainless-Timeout": String(Math.trunc($.timeout / 1e3)) } : {}, ...s9(), ...this._options.dangerouslyAllowBrowser ? { "anthropic-dangerous-direct-browser-access": "true" } : void 0, "anthropic-version": "2023-06-01" }, await this.authHeaders($), this._options.defaultHeaders, J, $.headers]); + return this.validateHeaders(W), W.values; + } + _makeAbort($) { + return () => $.abort(); + } + buildBody({ options: { body: $, headers: Q } }) { + if (!$) return { bodyHeaders: void 0, body: void 0 }; + let J = R([Q]); + if (ArrayBuffer.isView($) || $ instanceof ArrayBuffer || $ instanceof DataView || typeof $ === "string" && J.values.has("content-type") || globalThis.Blob && $ instanceof globalThis.Blob || $ instanceof FormData || $ instanceof URLSearchParams || globalThis.ReadableStream && $ instanceof globalThis.ReadableStream) return { bodyHeaders: void 0, body: $ }; + else if (typeof $ === "object" && (Symbol.asyncIterator in $ || Symbol.iterator in $ && "next" in $ && typeof $.next === "function")) return { bodyHeaders: void 0, body: D5($) }; + else if (typeof $ === "object" && J.values.get("content-type") === "application/x-www-form-urlencoded") return { bodyHeaders: { "content-type": "application/x-www-form-urlencoded" }, body: this.stringifyQuery($) }; + else return Z(this, n5, "f").call(this, { body: $, headers: J }); + } +}; +QU = f$, n5 = /* @__PURE__ */ new WeakMap(), $U = /* @__PURE__ */ new WeakSet(), Sw = function() { + return this.baseURL !== "https://api.anthropic.com"; +}; +f$.Anthropic = QU; +f$.HUMAN_PROMPT = vw; +f$.AI_PROMPT = Cw; +f$.DEFAULT_TIMEOUT = 6e5; +f$.AnthropicError = g; +f$.APIError = n$; +f$.APIConnectionError = e1; +f$.APIConnectionTimeoutError = c9; +f$.APIUserAbortError = Q6; +f$.NotFoundError = n9; +f$.ConflictError = r9; +f$.RateLimitError = t9; +f$.BadRequestError = p9; +f$.AuthenticationError = d9; +f$.InternalServerError = a9; +f$.PermissionDeniedError = i9; +f$.UnprocessableEntityError = o9; +f$.toFile = _5; +var K0 = class extends f$ { + constructor() { + super(...arguments); + this.completions = new V8(this), this.messages = new H0(this), this.models = new z8(this), this.beta = new G6(this); + } +}; +K0.Completions = V8; +K0.Messages = H0; +K0.Models = z8; +K0.Beta = G6; +function j4($) { + return $ instanceof Error ? $ : Error(String($)); +} +function N8($) { + return $ instanceof Error ? $.message : String($); +} +function o$($) { + if ($ && typeof $ === "object" && "code" in $ && typeof $.code === "string") return $.code; + return; +} +function D1($) { + return o$($) === "ENOENT"; +} +function JU($) { + return o$($) === "EISDIR"; +} +function Tw($) { + let Q = o$($); + return Q === "ENOENT" || Q === "EACCES" || Q === "EPERM" || Q === "ENOTDIR" || Q === "ELOOP" || Q === "EROFS"; +} +var yv = /* @__PURE__ */ new Set(["EXDEV", "EPERM", "EEXIST", "EBUSY"]); +var fv = /* @__PURE__ */ new Set(["ENOSPC", "EIO", "EDQUOT", "EFBIG"]); +async function xw($, Q, J) { + var _a5; + let Y = `${$}.tmp.${(0, import_crypto3.randomBytes)(4).toString("hex")}`; + try { + await (0, import_promises3.writeFile)(Y, Q, { encoding: "utf8", mode: J }); + try { + await (0, import_promises3.rename)(Y, $); + } catch (X) { + let W = o$(X); + if (W !== void 0 && yv.has(W)) { + try { + await (0, import_promises3.copyFile)(Y, $); + } catch (G) { + if (fv.has((_a5 = o$(G)) != null ? _a5 : "")) await (0, import_promises3.unlink)($).catch(() => { + }); + throw G; + } + await (0, import_promises3.unlink)(Y).catch(() => { + }); + } else throw X; + } + } catch (X) { + throw await (0, import_promises3.unlink)(Y).catch(() => { + }), X; + } +} +var gw = class { + read($) { + return (0, import_promises2.readFile)($, "utf8"); + } + readBytes($) { + return (0, import_promises2.readFile)($); + } + write($, Q, J) { + return (0, import_promises2.writeFile)($, Q, { encoding: "utf8", mode: J }); + } + async mkdir($) { + try { + await (0, import_promises2.mkdir)($, { recursive: true }); + } catch (Q) { + if (o$(Q) !== "EEXIST") throw Q; + } + } + atomicWrite($, Q, J) { + return xw($, Q, J); + } + delete($) { + return (0, import_promises2.unlink)($); + } + list($) { + return (0, import_promises2.readdir)($); + } + append($, Q, J) { + return (0, import_promises2.appendFile)($, Q, { encoding: "utf8", mode: J }); + } + writeExclusive($, Q) { + return (0, import_promises2.writeFile)($, Q, { encoding: "utf8", flag: "wx" }); + } + writeBytes($, Q) { + return (0, import_promises2.writeFile)($, Q); + } + async stat($) { + return { mtimeMs: (await (0, import_promises2.stat)($)).mtimeMs }; + } + async listEntries($) { + return (await (0, import_promises2.readdir)($, { withFileTypes: true })).map((J) => ({ name: J.name, isDirectory: J.isDirectory(), isFile: J.isFile() })); + } +}; +var cv = new import_async_hooks.AsyncLocalStorage(); +function w8() { + var _a5; + return (_a5 = cv.getStore()) != null ? _a5 : new gw(); +} +var q0; +var O8 = null; +function uw() { + if (O8) return O8; + if (!R$(process.env.DEBUG_CLAUDE_AGENT_SDK)) return q0 = null, O8 = Promise.resolve(), O8; + let $ = (0, import_path3.join)(p6(), "debug"); + return q0 = (0, import_path3.join)($, `sdk-${(0, import_crypto2.randomUUID)()}.txt`), process.stderr.write(`SDK debug logs: ${q0} +`), O8 = w8().mkdir($).catch(() => { + }), O8; +} +function mw() { + return uw(), q0 != null ? q0 : null; +} +function L6($) { + if (q0 === null) return; + let J = `${(/* @__PURE__ */ new Date()).toISOString()} ${$} +`; + uw().then(() => { + if (q0) w8().append(q0, J).catch(() => { + }); + }); +} +function dv() { + this.__data__ = new q1(), this.size = 0; +} +var lw = dv; +function iv($) { + var Q = this.__data__, J = Q.delete($); + return this.size = Q.size, J; +} +var cw = iv; +function nv($) { + return this.__data__.get($); +} +var pw = nv; +function rv($) { + return this.__data__.has($); +} +var dw = rv; +var ov = 200; +function tv($, Q) { + var J = this.__data__; + if (J instanceof q1) { + var Y = J.__data__; + if (!N5 || Y.length < ov - 1) return Y.push([$, Q]), this.size = ++J.size, this; + J = this.__data__ = new m9(Y); + } + return J.set($, Q), this.size = J.size, this; +} +var iw = tv; +function D8($) { + var Q = this.__data__ = new q1($); + this.size = Q.size; +} +D8.prototype.clear = lw; +D8.prototype.delete = cw; +D8.prototype.get = pw; +D8.prototype.has = dw; +D8.prototype.set = iw; +var nw = D8; +var av = (function() { + try { + var $ = t0(Object, "defineProperty"); + return $({}, "", {}), $; + } catch (Q) { + } +})(); +var F8 = av; +function sv($, Q, J) { + if (Q == "__proto__" && F8) F8($, Q, { configurable: true, enumerable: true, value: J, writable: true }); + else $[Q] = J; +} +var Z8 = sv; +var ev = Object.prototype; +var $C = ev.hasOwnProperty; +function QC($, Q, J) { + var Y = $[Q]; + if (!($C.call($, Q) && H1(Y, J)) || J === void 0 && !(Q in $)) Z8($, Q, J); +} +var r5 = QC; +function JC($, Q, J, Y) { + var X = !J; + J || (J = {}); + var W = -1, G = Q.length; + while (++W < G) { + var U = Q[W], H = Y ? Y(J[U], $[U], U, J, $) : void 0; + if (H === void 0) H = $[U]; + if (X) Z8(J, U, H); + else r5(J, U, H); + } + return J; +} +var rw = JC; +function XC($, Q) { + var J = -1, Y = Array($); + while (++J < $) Y[J] = Q(J); + return Y; +} +var ow = XC; +function YC($) { + return $ != null && typeof $ == "object"; +} +var r6 = YC; +var WC = "[object Arguments]"; +function GC($) { + return r6($) && L4($) == WC; +} +var WU = GC; +var tw = Object.prototype; +var UC = tw.hasOwnProperty; +var HC = tw.propertyIsEnumerable; +var KC = WU(/* @__PURE__ */ (function() { + return arguments; +})()) ? WU : function($) { + return r6($) && UC.call($, "callee") && !HC.call($, "callee"); +}; +var h4 = KC; +var qC = Array.isArray; +var B6 = qC; +var t5 = {}; +M4(t5, { default: () => xQ }); +function VC() { + return false; +} +var aw = VC; +var $O = typeof t5 == "object" && t5 && !t5.nodeType && t5; +var sw = $O && typeof o5 == "object" && o5 && !o5.nodeType && o5; +var BC = sw && sw.exports === $O; +var ew = BC ? l6.Buffer : void 0; +var zC = ew ? ew.isBuffer : void 0; +var NC = zC || aw; +var xQ = NC; +var wC = 9007199254740991; +var OC = /^(?:0|[1-9]\d*)$/; +function DC($, Q) { + var J = typeof $; + return Q = Q == null ? wC : Q, !!Q && (J == "number" || J != "symbol" && OC.test($)) && ($ > -1 && $ % 1 == 0 && $ < Q); +} +var F1 = DC; +var FC = 9007199254740991; +function ZC($) { + return typeof $ == "number" && $ > -1 && $ % 1 == 0 && $ <= FC; +} +var M8 = ZC; +var MC = "[object Arguments]"; +var LC = "[object Array]"; +var jC = "[object Boolean]"; +var AC = "[object Date]"; +var IC = "[object Error]"; +var RC = "[object Function]"; +var PC = "[object Map]"; +var EC = "[object Number]"; +var bC = "[object Object]"; +var _C = "[object RegExp]"; +var kC = "[object Set]"; +var SC = "[object String]"; +var vC = "[object WeakMap]"; +var CC = "[object ArrayBuffer]"; +var TC = "[object DataView]"; +var xC = "[object Float32Array]"; +var yC = "[object Float64Array]"; +var fC = "[object Int8Array]"; +var gC = "[object Int16Array]"; +var hC = "[object Int32Array]"; +var uC = "[object Uint8Array]"; +var mC = "[object Uint8ClampedArray]"; +var lC = "[object Uint16Array]"; +var cC = "[object Uint32Array]"; +var k$ = {}; +k$[xC] = k$[yC] = k$[fC] = k$[gC] = k$[hC] = k$[uC] = k$[mC] = k$[lC] = k$[cC] = true; +k$[MC] = k$[LC] = k$[CC] = k$[jC] = k$[TC] = k$[AC] = k$[IC] = k$[RC] = k$[PC] = k$[EC] = k$[bC] = k$[_C] = k$[kC] = k$[SC] = k$[vC] = false; +function pC($) { + return r6($) && M8($.length) && !!k$[L4($)]; +} +var QO = pC; +function dC($) { + return function(Q) { + return $(Q); + }; +} +var JO = dC; +var s5 = {}; +M4(s5, { default: () => e5 }); +var XO = typeof s5 == "object" && s5 && !s5.nodeType && s5; +var yQ = XO && typeof a5 == "object" && a5 && !a5.nodeType && a5; +var iC = yQ && yQ.exports === XO; +var GU = iC && B5.process; +var nC = (function() { + try { + var $ = yQ && yQ.require && yQ.require("util").types; + if ($) return $; + return GU && GU.binding && GU.binding("util"); + } catch (Q) { + } +})(); +var e5 = nC; +var YO = e5 && e5.isTypedArray; +var rC = YO ? JO(YO) : QO; +var $X = rC; +var oC = Object.prototype; +var tC = oC.hasOwnProperty; +function aC($, Q) { + var J = B6($), Y = !J && h4($), X = !J && !Y && xQ($), W = !J && !Y && !X && $X($), G = J || Y || X || W, U = G ? ow($.length, String) : [], H = U.length; + for (var q in $) if ((Q || tC.call($, q)) && !(G && (q == "length" || X && (q == "offset" || q == "parent") || W && (q == "buffer" || q == "byteLength" || q == "byteOffset") || F1(q, H)))) U.push(q); + return U; +} +var WO = aC; +var sC = Object.prototype; +function eC($) { + var Q = $ && $.constructor, J = typeof Q == "function" && Q.prototype || sC; + return $ === J; +} +var QX = eC; +function $T($, Q) { + return function(J) { + return $(Q(J)); + }; +} +var GO = $T; +function QT($) { + return $ != null && M8($.length) && !o0($); +} +var L8 = QT; +function JT($) { + var Q = []; + if ($ != null) for (var J in Object($)) Q.push(J); + return Q; +} +var UO = JT; +var XT = Object.prototype; +var YT = XT.hasOwnProperty; +function WT($) { + if (!$6($)) return UO($); + var Q = QX($), J = []; + for (var Y in $) if (!(Y == "constructor" && (Q || !YT.call($, Y)))) J.push(Y); + return J; +} +var HO = WT; +function GT($) { + return L8($) ? WO($, true) : HO($); +} +var JX = GT; +var YX = {}; +M4(YX, { default: () => UU }); +var BO = typeof YX == "object" && YX && !YX.nodeType && YX; +var KO = BO && typeof XX == "object" && XX && !XX.nodeType && XX; +var UT = KO && KO.exports === BO; +var qO = UT ? l6.Buffer : void 0; +var VO = qO ? qO.allocUnsafe : void 0; +function HT($, Q) { + if (Q) return $.slice(); + var J = $.length, Y = VO ? VO(J) : new $.constructor(J); + return $.copy(Y), Y; +} +var UU = HT; +function KT($, Q) { + var J = -1, Y = $.length; + Q || (Q = Array(Y)); + while (++J < Y) Q[J] = $[J]; + return Q; +} +var zO = KT; +function qT($, Q) { + var J = -1, Y = Q.length, X = $.length; + while (++J < Y) $[X + J] = Q[J]; + return $; +} +var NO = qT; +var VT = GO(Object.getPrototypeOf, Object); +var WX = VT; +var BT = l6.Uint8Array; +var HU = BT; +function zT($) { + var Q = new $.constructor($.byteLength); + return new HU(Q).set(new HU($)), Q; +} +var wO = zT; +function NT($, Q) { + var J = Q ? wO($.buffer) : $.buffer; + return new $.constructor(J, $.byteOffset, $.length); +} +var OO = NT; +var DO = Object.create; +var wT = /* @__PURE__ */ (function() { + function $() { + } + return function(Q) { + if (!$6(Q)) return {}; + if (DO) return DO(Q); + $.prototype = Q; + var J = new $(); + return $.prototype = void 0, J; + }; +})(); +var FO = wT; +function OT($) { + return typeof $.constructor == "function" && !QX($) ? FO(WX($)) : {}; +} +var ZO = OT; +var DT = "[object Symbol]"; +function FT($) { + return typeof $ == "symbol" || r6($) && L4($) == DT; +} +var j8 = FT; +var ZT = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; +var MT = /^\w*$/; +function LT($, Q) { + if (B6($)) return false; + var J = typeof $; + if (J == "number" || J == "symbol" || J == "boolean" || $ == null || j8($)) return true; + return MT.test($) || !ZT.test($) || Q != null && $ in Object(Q); +} +var MO = LT; +var jT = 500; +function AT($) { + var Q = C$($, function(Y) { + if (J.size === jT) J.clear(); + return Y; + }), J = Q.cache; + return Q; +} +var LO = AT; +var IT = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; +var RT = /\\(\\)?/g; +var PT = LO(function($) { + var Q = []; + if ($.charCodeAt(0) === 46) Q.push(""); + return $.replace(IT, function(J, Y, X, W) { + Q.push(X ? W.replace(RT, "$1") : Y || J); + }), Q; +}); +var jO = PT; +function ET($, Q) { + var J = -1, Y = $ == null ? 0 : $.length, X = Array(Y); + while (++J < Y) X[J] = Q($[J], J, $); + return X; +} +var AO = ET; +var bT = 1 / 0; +var IO = c6 ? c6.prototype : void 0; +var RO = IO ? IO.toString : void 0; +function PO($) { + if (typeof $ == "string") return $; + if (B6($)) return AO($, PO) + ""; + if (j8($)) return RO ? RO.call($) : ""; + var Q = $ + ""; + return Q == "0" && 1 / $ == -bT ? "-0" : Q; +} +var EO = PO; +function _T($) { + return $ == null ? "" : EO($); +} +var bO = _T; +function kT($, Q) { + if (B6($)) return $; + return MO($, Q) ? [$] : jO(bO($)); +} +var Z1 = kT; +var ST = 1 / 0; +function vT($) { + if (typeof $ == "string" || j8($)) return $; + var Q = $ + ""; + return Q == "0" && 1 / $ == -ST ? "-0" : Q; +} +var A8 = vT; +function CT($, Q) { + Q = Z1(Q, $); + var J = 0, Y = Q.length; + while ($ != null && J < Y) $ = $[A8(Q[J++])]; + return J && J == Y ? $ : void 0; +} +var _O = CT; +function TT($, Q) { + return $ != null && Q in Object($); +} +var kO = TT; +function xT($, Q, J) { + Q = Z1(Q, $); + var Y = -1, X = Q.length, W = false; + while (++Y < X) { + var G = A8(Q[Y]); + if (!(W = $ != null && J($, G))) break; + $ = $[G]; + } + if (W || ++Y != X) return W; + return X = $ == null ? 0 : $.length, !!X && M8(X) && F1(G, X) && (B6($) || h4($)); +} +var SO = xT; +function yT($, Q) { + return $ != null && SO($, Q, kO); +} +var vO = yT; +function fT($) { + return $; +} +var GX = fT; +function uO() { + return { sent: /* @__PURE__ */ new Set(), rejected: /* @__PURE__ */ new Set() }; +} +var mT = { renderTarget: "ink", workspace: "local", canDrive: true, transcriptSource: "local-jsonl", remote: null }; +function lT() { + let $ = ""; + if (typeof process < "u" && typeof process.cwd === "function" && typeof import_fs3.realpathSync === "function") { + let J = (0, import_process.cwd)(); + try { + $ = (0, import_fs3.realpathSync)(J).normalize("NFC"); + } catch (e2) { + $ = J.normalize("NFC"); + } + } + return { originalCwd: $, projectRoot: $, totalCostUSD: 0, totalAPIDuration: 0, totalAPIDurationWithoutRetries: 0, totalToolDuration: 0, startTime: Date.now(), lastInteractionTime: Date.now(), totalLinesAdded: 0, totalLinesRemoved: 0, hasUnknownModelCost: false, cwd: $, modelUsage: {}, mainLoopModelOverride: void 0, refusalFallbackOccurred: false, replConfigArgv: [], initialMainLoopModel: void 0, modelStrings: null, isInteractive: false, attacherCaps: null, hasStreamingInput: false, modelOverrideOptOutForSession: false, kairosActive: false, rendererMode: void 0, strictToolResultPairing: false, memoryToggledOff: false, teamMemoryServerStatus: void 0, sdkAgentProgressSummariesEnabled: false, userMsgOptIn: false, clientType: "cli", sessionSource: void 0, sessionStartType: "fresh", questionPreviewFormat: void 0, sessionIngressToken: void 0, oauthTokenFromFd: void 0, oauthScopesFromFd: void 0, apiKeyFromFd: void 0, gatewayAuth: null, gatewayRefreshInFlight: null, flagSettingsPath: void 0, flagSettingsExpectedContent: void 0, flagSettingsInline: null, parentManagedSettings: null, allowedSettingSources: ["userSettings", "projectSettings", "localSettings", "flagSettings", "policySettings"], meter: null, sessionCounter: null, locCounter: null, prCounter: null, commitCounter: null, costCounter: null, tokenCounter: null, codeEditToolDecisionCounter: null, activeTimeCounter: null, statsStore: null, sessionId: (0, import_crypto4.randomUUID)(), parentSessionId: void 0, loggerProvider: null, eventLogger: null, meterProvider: null, tracerProvider: null, cachedTelemetryResource: null, agentColorMap: /* @__PURE__ */ new Map(), agentColorIndex: 0, lastAPIRequest: null, lastCancelledAPIMessageId: null, lastAPIRequestMessages: null, lastClassifierRequests: null, cachedClaudeMdContent: null, inMemoryErrorLog: [], inlinePlugins: [], inlinePluginUrls: [], syncedPluginDirs: [], chromeFlagOverride: void 0, useCoworkPlugins: false, disableSlashCommands: false, sessionBypassPermissionsMode: false, scheduledTasksEnabled: false, sessionPrResolved: false, sessionCronTasks: [], loopChainStartedAt: /* @__PURE__ */ Object.create(null), sessionCreatedTeams: /* @__PURE__ */ new Set(), sessionTrustAccepted: false, sessionPersistenceDisabled: false, hasExitedPlanMode: false, needsPlanModeExitAttachment: false, needsAutoModeExitAttachment: false, lspRecommendationShownThisSession: false, initJsonSchema: null, registeredHooks: null, planSlugCache: /* @__PURE__ */ new Map(), teleportedSessionInfo: null, invokedSkills: /* @__PURE__ */ new Map(), slowOperations: [], sdkBetas: void 0, sdkOAuthTokenRefreshCallback: null, hostAuthTokenRefreshCallback: null, mainThreadAgentType: void 0, mainThreadAgentHooks: void 0, sessionSkillAllowlist: void 0, caps: mT, replBridgeActive: false, directConnectServerUrl: void 0, mcpConnectNonBlocking: false, strictMcpConfig: false, activeRoutine: void 0, systemPromptSectionCache: /* @__PURE__ */ new Map(), lastEmittedDate: null, additionalDirectoriesForClaudeMd: [], allowedChannels: [], activeInputs: /* @__PURE__ */ new Map(), hasDevChannels: false, sessionProjectDir: null, promptCache1hAllowlist: null, stickyBetas: uO(), thinkingTypeOverrides: /* @__PURE__ */ new Map(), inferenceProfileBackingModels: /* @__PURE__ */ new Map(), promptId: null, promptIndex: 0, lastMainRequestId: void 0, lastMainThreadCacheTtlMs: null, lastApiCompletionTimestamp: null, pendingPostCompaction: false }; +} +var cT = lT(); +var pT = () => { + return; +}; +function VU() { + var _a5, _b3; + return (_b3 = (_a5 = pT()) == null ? void 0 : _a5.sessionId) != null ? _b3 : cT.sessionId; +} +var dT = U1(); +var W3$ = dT.subscribe; +var iT = U1(); +var G3$ = iT.subscribe; +var nT = U1(); +var U3$ = nT.subscribe; +var rT = U1(); +var H3$ = rT.subscribe; +var oT = U1(); +var K3$ = oT.subscribe; +function lO({ writeFn: $, flushIntervalMs: Q = 1e3, maxBufferSize: J = 100, maxBufferBytes: Y = 1 / 0, immediateMode: X = false }) { + let W = [], G = 0, U = null, H = null; + function q() { + if (U) clearTimeout(U), U = null; + } + function V(w) { + try { + $(w); + } catch (e2) { + } + } + function B() { + if (H) V(H.join("")), H = null; + if (W.length === 0) return; + V(W.join("")), W = [], G = 0, q(); + } + function z4() { + if (!U) U = setTimeout(B, Q); + } + function N() { + if (H) { + H.push(...W), W = [], G = 0, q(); + return; + } + let w = W; + W = [], G = 0, q(), H = w, setImmediate(() => { + let O = H; + if (H = null, O) V(O.join("")); + }); + } + return { write(w) { + if (X) { + V(w); + return; + } + if (W.push(w), G += w.length, z4(), W.length >= J || G >= Y) N(); + }, flush: B, dispose() { + B(); + } }; +} +function tT($) { + if (typeof $ === "function") return $; + if (Symbol.asyncDispose in $) return () => $[Symbol.asyncDispose](); + return () => $[Symbol.dispose](); +} +var _X; +var cO = class { + constructor() { + __privateAdd(this, _X, /* @__PURE__ */ new Set()); + } + register($) { + let Q = tT($); + __privateGet(this, _X).add(Q); + let J = () => { + __privateGet(this, _X).delete(Q); + }; + return Object.assign(J, { [Symbol.dispose]: J }); + } + async drain() { + let $ = Array.from(__privateGet(this, _X)); + __privateGet(this, _X).clear(), await Promise.all($.map(async (Q) => Q())); + } + async [Symbol.asyncDispose]() { + await this.drain(); + } + get sizeForTesting() { + return __privateGet(this, _X).size; + } +}; +_X = new WeakMap(); +var aT = new cO(); +function pO($) { + return aT.register($); +} +var dO = C$(($) => { + if (!$ || $.trim() === "") return null; + let Q = $.split(",").map((W) => W.trim()).filter(Boolean); + if (Q.length === 0) return null; + let J = Q.some((W) => W.startsWith("!")), Y = Q.some((W) => !W.startsWith("!")); + if (J && Y) return null; + let X = Q.map((W) => W.replace(/^!/, "").toLowerCase()); + return { include: J ? [] : X, exclude: J ? X : [], isExclusive: J }; +}); +function sT($) { + let Q = [], J = $.match(/^MCP server ["']([^"']+)["']/); + if (J && J[1]) Q.push("mcp"), Q.push(J[1].toLowerCase()); + else { + let W = $.match(/^([^:[]+):/); + if (W && W[1]) Q.push(W[1].trim().toLowerCase()); + } + let Y = $.match(/^\[([^\]]+)]/); + if (Y && Y[1]) Q.push(Y[1].trim().toLowerCase()); + if ($.toLowerCase().includes("1p event:")) Q.push("1p"); + let X = $.match(/:\s*([^:]+?)(?:\s+(?:type|mode|status|event))?:/); + if (X && X[1]) { + let W = X[1].trim().toLowerCase(); + if (W.length < 30 && !W.includes(" ")) Q.push(W); + } + return Array.from(new Set(Q)); +} +function eT($, Q) { + if (!Q) return true; + if ($.length === 0) return false; + if (Q.isExclusive) return !$.some((J) => Q.exclude.includes(J)); + else return $.some((J) => Q.include.includes(J)); +} +function iO($, Q) { + if (!Q) return true; + let J = sT($); + return eT(J, Q); +} +var qx = { cwd() { + return process.cwd(); +}, existsSync($) { + let J = []; + try { + const Q = Z$(J, E$`fs.existsSync(${$})`, 0); + return s.existsSync($); + } catch (Y) { + var X = Y, W = 1; + } finally { + M$(J, X, W); + } +}, async stat($) { + return (0, import_promises5.stat)($); +}, async readdir($) { + return (0, import_promises5.readdir)($, { withFileTypes: true }); +}, async unlink($) { + return (0, import_promises5.unlink)($); +}, async rmdir($) { + return (0, import_promises5.rmdir)($); +}, async rm($, Q) { + return (0, import_promises5.rm)($, Q); +}, async mkdir($, Q) { + try { + await (0, import_promises5.mkdir)($, { recursive: true, ...Q }); + } catch (J) { + if (o$(J) !== "EEXIST") throw J; + } +}, async readFile($, Q) { + return (0, import_promises5.readFile)($, { encoding: Q.encoding }); +}, async rename($, Q) { + return (0, import_promises5.rename)($, Q); +}, statSync($) { + let J = []; + try { + const Q = Z$(J, E$`fs.statSync(${$})`, 0); + return s.statSync($); + } catch (Y) { + var X = Y, W = 1; + } finally { + M$(J, X, W); + } +}, lstatSync($) { + let J = []; + try { + const Q = Z$(J, E$`fs.lstatSync(${$})`, 0); + return s.lstatSync($); + } catch (Y) { + var X = Y, W = 1; + } finally { + M$(J, X, W); + } +}, readFileSync($, Q) { + let Y = []; + try { + const J = Z$(Y, E$`fs.readFileSync(${$})`, 0); + return s.readFileSync($, { encoding: Q.encoding }); + } catch (X) { + var W = X, G = 1; + } finally { + M$(Y, W, G); + } +}, readFileBytesSync($) { + let J = []; + try { + const Q = Z$(J, E$`fs.readFileBytesSync(${$})`, 0); + return s.readFileSync($); + } catch (Y) { + var X = Y, W = 1; + } finally { + M$(J, X, W); + } +}, readSync($, Q) { + let X = []; + try { + const J = Z$(X, E$`fs.readSync(${$}, ${Q.length} bytes)`, 0); + let Y = void 0; + try { + Y = s.openSync($, "r"); + let H = Buffer.alloc(Q.length), q = s.readSync(Y, H, 0, Q.length, 0); + return { buffer: H, bytesRead: q }; + } finally { + if (Y) s.closeSync(Y); + } + } catch (W) { + var G = W, U = 1; + } finally { + M$(X, G, U); + } +}, appendFileSync($, Q, J) { + let X = []; + try { + const Y = Z$(X, E$`fs.appendFileSync(${$}, ${Q.length} chars)`, 0); + if ((J == null ? void 0 : J.mode) !== void 0) try { + let H = s.openSync($, "ax", J.mode); + try { + s.appendFileSync(H, Q); + } finally { + s.closeSync(H); + } + return; + } catch (H) { + if (o$(H) !== "EEXIST") throw H; + } + s.appendFileSync($, Q); + } catch (W) { + var G = W, U = 1; + } finally { + M$(X, G, U); + } +}, copyFileSync($, Q) { + let Y = []; + try { + const J = Z$(Y, E$`fs.copyFileSync(${$} → ${Q})`, 0); + s.copyFileSync($, Q); + } catch (X) { + var W = X, G = 1; + } finally { + M$(Y, W, G); + } +}, unlinkSync($) { + let J = []; + try { + const Q = Z$(J, E$`fs.unlinkSync(${$})`, 0); + s.unlinkSync($); + } catch (Y) { + var X = Y, W = 1; + } finally { + M$(J, X, W); + } +}, renameSync($, Q) { + let Y = []; + try { + const J = Z$(Y, E$`fs.renameSync(${$} → ${Q})`, 0); + s.renameSync($, Q); + } catch (X) { + var W = X, G = 1; + } finally { + M$(Y, W, G); + } +}, linkSync($, Q) { + let Y = []; + try { + const J = Z$(Y, E$`fs.linkSync(${$} → ${Q})`, 0); + s.linkSync($, Q); + } catch (X) { + var W = X, G = 1; + } finally { + M$(Y, W, G); + } +}, symlinkSync($, Q, J) { + let X = []; + try { + const Y = Z$(X, E$`fs.symlinkSync(${$} → ${Q})`, 0); + s.symlinkSync($, Q, J); + } catch (W) { + var G = W, U = 1; + } finally { + M$(X, G, U); + } +}, readlinkSync($) { + let J = []; + try { + const Q = Z$(J, E$`fs.readlinkSync(${$})`, 0); + return s.readlinkSync($); + } catch (Y) { + var X = Y, W = 1; + } finally { + M$(J, X, W); + } +}, realpathSync($) { + let J = []; + try { + const Q = Z$(J, E$`fs.realpathSync(${$})`, 0); + return s.realpathSync($).normalize("NFC"); + } catch (Y) { + var X = Y, W = 1; + } finally { + M$(J, X, W); + } +}, mkdirSync($, Q) { + let X = []; + try { + const J = Z$(X, E$`fs.mkdirSync(${$})`, 0); + let Y = { recursive: true }; + if ((Q == null ? void 0 : Q.mode) !== void 0) Y.mode = Q.mode; + try { + s.mkdirSync($, Y); + } catch (H) { + if (o$(H) !== "EEXIST") throw H; + } + } catch (W) { + var G = W, U = 1; + } finally { + M$(X, G, U); + } +}, readdirSync($) { + let J = []; + try { + const Q = Z$(J, E$`fs.readdirSync(${$})`, 0); + return s.readdirSync($, { withFileTypes: true }); + } catch (Y) { + var X = Y, W = 1; + } finally { + M$(J, X, W); + } +}, readdirStringSync($) { + let J = []; + try { + const Q = Z$(J, E$`fs.readdirStringSync(${$})`, 0); + return s.readdirSync($); + } catch (Y) { + var X = Y, W = 1; + } finally { + M$(J, X, W); + } +}, isDirEmptySync($) { + let Y = []; + try { + const Q = Z$(Y, E$`fs.isDirEmptySync(${$})`, 0); + let J = this.readdirSync($); + return J.length === 0; + } catch (X) { + var W = X, G = 1; + } finally { + M$(Y, W, G); + } +}, rmdirSync($) { + let J = []; + try { + const Q = Z$(J, E$`fs.rmdirSync(${$})`, 0); + s.rmdirSync($); + } catch (Y) { + var X = Y, W = 1; + } finally { + M$(J, X, W); + } +}, rmSync($, Q) { + let Y = []; + try { + const J = Z$(Y, E$`fs.rmSync(${$})`, 0); + s.rmSync($, Q); + } catch (X) { + var W = X, G = 1; + } finally { + M$(Y, W, G); + } +}, createWriteStream($) { + return s.createWriteStream($); +}, async readFileBytes($, Q) { + if (Q === void 0) return (0, import_promises5.readFile)($); + let J = await (0, import_promises5.open)($, "r"); + try { + let { size: Y } = await J.stat(), X = Math.min(Y, Q), W = Buffer.allocUnsafe(X), G = 0; + while (G < X) { + let { bytesRead: U } = await J.read(W, G, X - G, G); + if (U === 0) break; + G += U; + } + return G < X ? W.subarray(0, G) : W; + } finally { + await J.close(); + } +} }; +var Vx = qx; +function l$() { + return Vx; +} +function Bx($, Q) { + if ($.destroyed) return; + $.write(Q); +} +function eO($) { + Bx(process.stderr, $); +} +function zU($) { + return $.charAt(0).toUpperCase() + $.slice(1); +} +var b3$ = typeof String.prototype.isWellFormed === "function" ? Function.prototype.call.bind(String.prototype.isWellFormed) : void 0; +var _3$ = typeof String.prototype.toWellFormed === "function" ? Function.prototype.call.bind(String.prototype.toWellFormed) : void 0; +var zx = /api[_-]?key|secret|token|password|passwd|credential|bearer|authorization|auth[_-]?header|cookie|session[_-]?(?:id|key)|connection[_-]?string|(?:private|ssh|encryption|signing|access|deploy|master|license)[_-]?key|client[_-]?secret/i; +var J2 = "[^\\s,;&}\\])]+"; +var X2 = `\\[REDACTED\\]|"[^"]*"|'[^']*'|(?:Bearer|Basic)\\s+(?:\\[REDACTED\\]|${J2})|${J2}`; +var Nx = ["sk", "ant", "api"].join("-"); +var wx = [{ id: "url-userinfo", source: ":\\/\\/([^/@\\s]+)@", confidence: "low" }, { id: "gcp-service-account", source: "\\b([a-z0-9-]+@[a-z0-9-]+\\.iam\\.gserviceaccount\\.com)\\b", flags: "i", confidence: "low" }, { id: "loose-anthropic-key", source: "\\b(sk-ant-?[\\w-]{10,})", confidence: "low" }, { id: "http-auth-scheme", source: "\\b(?:Bearer|Basic)\\s+([A-Za-z0-9+/=._~-]{20,})", flags: "i", confidence: "low" }, { id: "loose-jwt", source: "\\b(eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,})", confidence: "low" }, { id: "sensitive-assign", source: `(?:${zx.source})[\\w.-]*["']?\\s*[=:]\\s*(${X2})`, flags: "i", confidence: "low" }, { id: "cloud-env-var", source: `\\b(?:AWS|GOOGLE|GCP|GCLOUD|AZURE)_\\w+\\s*[=:]\\s*(${X2})`, flags: "i", confidence: "low" }, { id: "aws-access-token", source: "\\b((?:A3T[A-Z0-9]|AKIA|ASIA|ABIA|ACCA)[A-Z2-7]{16})\\b", confidence: "high" }, { id: "gcp-api-key", source: `\\b(AIza[\\w-]{35})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "azure-ad-client-secret", source: `(?:^|[\\\\'"\\x60\\s>=:(,)])([a-zA-Z0-9_~.]{3}\\dQ~[a-zA-Z0-9_~.-]{31,34})(?:$|[\\\\'"\\x60\\s<),])`, confidence: "high" }, { id: "digitalocean-pat", source: `\\b(dop_v1_[a-f0-9]{64})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "digitalocean-access-token", source: `\\b(doo_v1_[a-f0-9]{64})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "anthropic-api-key", source: `\\b(${Nx}03-[a-zA-Z0-9_\\-]{93}AA)(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "anthropic-admin-api-key", source: `\\b(sk-ant-admin01-[a-zA-Z0-9_\\-]{93}AA)(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "openai-api-key", source: `\\b(sk-(?:proj|svcacct|admin)-(?:[A-Za-z0-9_-]{74}|[A-Za-z0-9_-]{58})T3BlbkFJ(?:[A-Za-z0-9_-]{74}|[A-Za-z0-9_-]{58})\\b|sk-[a-zA-Z0-9]{20}T3BlbkFJ[a-zA-Z0-9]{20})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "huggingface-access-token", source: `\\b(hf_[a-zA-Z]{34})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "github-pat", source: "ghp_[0-9a-zA-Z]{36}", confidence: "high" }, { id: "github-fine-grained-pat", source: "github_pat_\\w{82}", confidence: "high" }, { id: "github-app-token", source: "(?:ghu|ghs)_[0-9a-zA-Z]{36}", confidence: "high" }, { id: "github-oauth", source: "gho_[0-9a-zA-Z]{36}", confidence: "high" }, { id: "github-refresh-token", source: "ghr_[0-9a-zA-Z]{36}", confidence: "high" }, { id: "gitlab-pat", source: "glpat-[\\w-]{20}", confidence: "high" }, { id: "gitlab-deploy-token", source: "gldt-[0-9a-zA-Z_\\-]{20}", confidence: "high" }, { id: "slack-bot-token", source: "xoxb-[0-9]{10,13}-[0-9]{10,13}[a-zA-Z0-9-]*", confidence: "high" }, { id: "slack-user-token", source: "xox[pe](?:-[0-9]{10,13}){3}-[a-zA-Z0-9-]{28,34}", confidence: "high" }, { id: "slack-app-token", source: "xapp-\\d-[A-Z0-9]+-\\d+-[a-z0-9]+", flags: "i", confidence: "high" }, { id: "twilio-api-key", source: "SK[0-9a-fA-F]{32}", confidence: "high" }, { id: "sendgrid-api-token", source: `\\b(SG\\.[a-zA-Z0-9=_\\-.]{66})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "npm-access-token", source: `\\b(npm_[a-zA-Z0-9]{36})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "pypi-upload-token", source: "pypi-AgEIcHlwaS5vcmc[\\w-]{50,1000}", confidence: "high" }, { id: "databricks-api-token", source: `\\b(dapi[a-f0-9]{32}(?:-\\d)?)(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "hashicorp-tf-api-token", source: "[a-zA-Z0-9]{14}\\.atlasv1\\.[a-zA-Z0-9\\-_=]{60,70}", confidence: "high" }, { id: "pulumi-api-token", source: `\\b(pul-[a-f0-9]{40})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "postman-api-token", source: `\\b(PMAK-[a-fA-F0-9]{24}-[a-fA-F0-9]{34})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "grafana-api-key", source: `\\b(eyJrIjoi[A-Za-z0-9+/]{70,400}={0,3})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "grafana-cloud-api-token", source: `\\b(glc_[A-Za-z0-9+/]{32,400}={0,3})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "grafana-service-account-token", source: `\\b(glsa_[A-Za-z0-9]{32}_[A-Fa-f0-9]{8})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "sentry-user-token", source: `\\b(sntryu_[a-f0-9]{64})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "sentry-org-token", source: "\\bsntrys_eyJpYXQiO[a-zA-Z0-9+/]{10,200}(?:LCJyZWdpb25fdXJs|InJlZ2lvbl91cmwi|cmVnaW9uX3VybCI6)[a-zA-Z0-9+/]{10,200}={0,2}_[a-zA-Z0-9+/]{43}", confidence: "high" }, { id: "stripe-access-token", source: `\\b((?:sk|rk)_(?:test|live|prod)_[a-zA-Z0-9]{10,99})(?:[\\x60'"\\s;]|\\\\[nr]|$)`, confidence: "high" }, { id: "shopify-access-token", source: "shpat_[a-fA-F0-9]{32}", confidence: "high" }, { id: "shopify-shared-secret", source: "shpss_[a-fA-F0-9]{32}", confidence: "high" }, { id: "private-key", source: "-----BEGIN[ A-Z0-9_-]{0,100}PRIVATE KEY(?: BLOCK)?-----[\\s\\S-]{64,}?-----END[ A-Z0-9_-]{0,100}PRIVATE KEY(?: BLOCK)?-----", flags: "i", confidence: "high" }]; +var Y2 = null; +function Ox($) { + return wx.map((Q) => { + var _a5, _b3; + return { id: Q.id, confidence: Q.confidence, re: new RegExp(Q.source, $ ? ((_a5 = Q.flags) != null ? _a5 : "").replace("g", "") + "g" : (_b3 = Q.flags) != null ? _b3 : "") }; + }); +} +function W2($) { + Y2 != null ? Y2 : Y2 = Ox(true); + for (let Q of Y2) $ = $.replace(Q.re, (J, Y) => { + if (typeof Y !== "string") return "[REDACTED]"; + let X = Y.length >= 2 && (Y[0] === '"' || Y[0] === "'") && Y.at(-1) === Y[0] ? Y[0] : "", W = J.lastIndexOf(Y); + return `${J.slice(0, W)}${X}[REDACTED]${X}${J.slice(W + Y.length)}`; + }); + return $; +} +var DU = { verbose: 0, debug: 1, info: 2, warn: 3, error: 4 }; +var Mx = C$(() => { + var _a5; + let $ = (_a5 = process.env.CLAUDE_CODE_DEBUG_LOG_LEVEL) == null ? void 0 : _a5.toLowerCase().trim(); + if ($ && Object.hasOwn(DU, $)) return $; + return "debug"; +}); +var Lx = false; +function qX() { + return typeof process < "u" && Array.isArray(process.argv) ? process.argv : []; +} +var FU = C$(() => { + let $ = qX(); + return Lx || R$(process.env.DEBUG) || R$(process.env.DEBUG_SDK) || $.includes("--debug") || $.includes("-d") || K2() || $.some((Q) => Q.startsWith("--debug=")) || q2() !== null; +}); +var jx = C$(() => { + let $ = qX().find((J) => J.startsWith("--debug=")); + if (!$) return null; + let Q = $.substring(8); + return dO(Q); +}); +var K2 = C$(() => { + let $ = qX(); + return $.includes("--debug-to-stderr") || $.includes("-d2e"); +}); +var q2 = C$(() => { + let $ = qX(); + for (let Q = 0; Q < $.length; Q++) { + let J = $[Q]; + if (J.startsWith("--debug-file=")) return J.substring(13); + if (J === "--debug-file" && Q + 1 < $.length) return $[Q + 1]; + } + return null; +}); +function Ax($) { + if (!FU()) return false; + if (typeof process > "u" || typeof process.versions > "u" || typeof process.versions.node > "u") return false; + let Q = jx(); + return iO($, Q); +} +var Ix = false; +var Rx = 10485760; +var KX = null; +var NU = Promise.resolve(); +var gQ = -1; +var wU = false; +var ZU = null; +async function V2($, Q, J = Rx) { + if (gQ < 0) gQ = await (0, import_promises4.stat)($).then((Y) => Y.size).catch(() => 0); + else gQ += Q; + if (gQ <= J || wU) return; + wU = true; + try { + let Y = $.endsWith(".txt") ? `${$.slice(0, -4)}.1.txt` : `${$}.1`; + try { + await (0, import_promises4.rename)($, Y); + } catch (X) { + if (!D1(X)) await (0, import_promises4.unlink)(Y).catch(() => { + }), await (0, import_promises4.rename)($, Y).catch(() => (0, import_promises4.unlink)($).catch(() => { + })); + } + gQ = 0; + } finally { + wU = false; + } +} +function B2($) { + return ZU = (0, import_path4.join)($, `${VU()}.txt`), ZU; +} +async function Px($, Q, J, Y) { + if ($) await (0, import_promises4.mkdir)(Q, { recursive: true }).catch(() => { + }); + let X = J; + try { + await (0, import_promises4.appendFile)(J, Y); + } catch (W) { + if (!JU(W)) throw W; + X = B2(J), await (0, import_promises4.appendFile)(X, Y); + } + await V2(X, Buffer.byteLength(Y)).catch(MU), N2(); +} +function MU() { +} +function Ex() { + if (!KX) { + let $ = null; + KX = lO({ writeFn: (Q) => { + let J = z2(), Y = (0, import_path4.dirname)(J), X = $ !== Y; + if ($ = Y, FU()) { + if (X) try { + l$().mkdirSync(Y); + } catch (e2) { + } + let W = J; + try { + l$().appendFileSync(J, Q); + } catch (G) { + if (!JU(G)) throw G; + W = B2(J), l$().appendFileSync(W, Q); + } + V2(W, Buffer.byteLength(Q)).catch(MU), N2(); + return; + } + NU = NU.then(Px.bind(null, X, Y, J, Q)).catch(MU); + }, flushIntervalMs: 1e3, maxBufferSize: 100, immediateMode: FU() }), pO(async () => { + KX == null ? void 0 : KX.dispose(), await NU; + }); + } + return KX; +} +function X$($, { level: Q } = { level: "debug" }) { + if (DU[Q] < DU[Mx()]) return; + if (!Ax($)) return; + if (Ix && $.includes(` +`)) $ = B$($); + let Y = `${(/* @__PURE__ */ new Date()).toISOString()} [${Q.toUpperCase()}] ${W2($.trim())} +`; + if (K2()) { + eO(Y); + return; + } + Ex().write(Y); +} +function z2() { + var _a5, _b3, _c2; + return (_c2 = (_b3 = (_a5 = q2()) != null ? _a5 : ZU) != null ? _b3 : process.env.CLAUDE_CODE_DEBUG_LOGS_DIR) != null ? _c2 : (0, import_path4.join)(p6(), "debug", `${VU()}.txt`); +} +var N2 = C$(async () => { + try { + let $ = z2(), Q = (0, import_path4.dirname)($), J = (0, import_path4.join)(Q, "latest"); + await (0, import_promises4.unlink)(J).catch(() => { + }), await (0, import_promises4.symlink)($, J); + } catch (e2) { + } +}); +var a3$ = (() => { + let $ = process.env.CLAUDE_CODE_SLOW_OPERATION_THRESHOLD_MS; + if ($ !== void 0) { + let Q = Number($); + if (!Number.isNaN(Q) && Q >= 0) return Q; + } + return 1 / 0; +})(); +var bx = { [Symbol.dispose]() { +} }; +function _x() { + return bx; +} +var E$ = _x; +function B$($, Q, J) { + let X = []; + try { + const Y = Z$(X, E$`JSON.stringify(${$})`, 0); + return JSON.stringify($, Q, J); + } catch (W) { + var G = W, U = 1; + } finally { + M$(X, G, U); + } +} +var d$ = ($, Q) => { + let Y = []; + try { + const J = Z$(Y, E$`JSON.parse(${$})`, 0); + return typeof Q > "u" ? JSON.parse($) : JSON.parse($, Q); + } catch (X) { + var W = X, G = 1; + } finally { + M$(Y, W, G); + } +}; +function kx($) { + let Q = $.trim(); + return Q.startsWith("{") && Q.endsWith("}"); +} +function O2($, Q) { + let J = { ...$ }; + if (Q) { + let Y = Q.enabled === true && Q.failIfUnavailable === void 0 ? { ...Q, failIfUnavailable: true } : Q, X = J.settings; + if (X && !kx(X)) throw Error("Cannot use both a settings file path and the sandbox option. Include the sandbox configuration in your settings file instead."); + let W = { sandbox: Y }; + if (X) try { + W = { ...d$(X), sandbox: Y }; + } catch (e2) { + } + J.settings = B$(W); + } + return J; +} +var Tx = 2e3; +var VX = /* @__PURE__ */ new Set(); +var D2 = false; +function xx() { + for (let $ of VX) if (!$.killed) if (process.platform === "win32") try { + $.stdin.end(); + } catch (e2) { + } + else $.kill("SIGTERM"); +} +function yx($) { + if (VX.add($), !D2) D2 = true, process.on("exit", xx); +} +var jU = class { + constructor($) { + __publicField(this, "options"); + __publicField(this, "process"); + __publicField(this, "processStdin"); + __publicField(this, "processStdout"); + __publicField(this, "ready", false); + __publicField(this, "abortController"); + __publicField(this, "exitError"); + __publicField(this, "exitListeners", []); + __publicField(this, "abortHandler"); + __publicField(this, "forwardedAbort", g9()); + __publicField(this, "pendingWrites", []); + __publicField(this, "pendingEndInput", false); + __publicField(this, "spawnResolve"); + __publicField(this, "spawnReject"); + __publicField(this, "spawnPromise"); + this.options = $; + if (this.abortController = $.abortController || g9(), $.deferSpawn) this.spawnPromise = new Promise((Q, J) => { + this.spawnResolve = Q, this.spawnReject = J; + }), this.spawnPromise.catch(() => { + }); + else this.initialize(); + } + spawn() { + var _a5; + try { + this.initialize(); + } catch (Q) { + throw this.spawnAbort(j4(Q)), Q; + } + let $ = this.pendingWrites; + if (this.pendingWrites = [], this.spawnResolve) this.spawnResolve(), this.spawnResolve = void 0, this.spawnReject = void 0; + for (let Q of $) this.write(Q); + if (this.pendingEndInput) this.pendingEndInput = false, (_a5 = this.processStdin) == null ? void 0 : _a5.end(); + } + spawnAbort($) { + if (this.spawnReject) this.spawnReject($), this.spawnReject = void 0, this.spawnResolve = void 0, this.pendingWrites = []; + } + updateEnv($) { + if (this.options.env) Object.assign(this.options.env, $); + else this.options.env = { ...$ }; + } + updateResume($) { + this.options.resume = $; + } + getDefaultExecutable() { + return V5() ? "bun" : "node"; + } + spawnLocalProcess($) { + let { command: Q, args: J, cwd: Y, env: X, signal: W } = $, G = R$(X.DEBUG_CLAUDE_AGENT_SDK) || this.options.stderr ? "pipe" : "ignore", U = (0, import_child_process2.spawn)(Q, J, { cwd: Y, stdio: ["pipe", "pipe", G], signal: W, env: X, windowsHide: true }); + if (R$(X.DEBUG_CLAUDE_AGENT_SDK) || this.options.stderr) U.stderr.on("data", (q) => { + let V = q.toString(); + if (L6(V), this.options.stderr) this.options.stderr(V); + }); + return { stdin: U.stdin, stdout: U.stdout, get killed() { + return U.killed; + }, get exitCode() { + return U.exitCode; + }, kill: U.kill.bind(U), on: U.on.bind(U), once: U.once.bind(U), off: U.off.bind(U) }; + } + initialize() { + try { + let { additionalDirectories: $ = [], agent: Q, betas: J, cwd: Y, executable: X = this.getDefaultExecutable(), executableArgs: W = [], extraArgs: G = {}, pathToClaudeCodeExecutable: U, env: H = { ...process.env }, thinkingConfig: q, maxTurns: V, maxBudgetUsd: B, taskBudget: z4, model: N, fallbackModel: w, jsonSchema: O, permissionMode: D, allowDangerouslySkipPermissions: M, permissionPromptToolName: j, continueConversation: A, resume: S, settingSources: u, skills: G$, disallowedTools: h$ = [], tools: e$, mcpServers: m6, strictMcpConfig: F6, canUseTool: a1, includePartialMessages: i0, plugins: k4, sandbox: S9 } = this.options, { allowedTools: W1 = [] } = this.options; + if (G$ !== void 0) { + let u$ = G$ === "all" ? ["Skill"] : G$.map((S4) => `Skill(${S4})`), s$ = new Set(W1); + W1 = [...W1, ...u$.filter((S4) => !s$.has(S4))]; + } + let i = ["--output-format", "stream-json", "--verbose", "--input-format", "stream-json"]; + if (q) { + switch (q.type) { + case "enabled": + if (q.budgetTokens === void 0) i.push("--thinking", "adaptive"); + else i.push("--max-thinking-tokens", q.budgetTokens.toString()); + break; + case "disabled": + i.push("--thinking", "disabled"); + break; + case "adaptive": + i.push("--thinking", "adaptive"); + break; + } + if (q.type !== "disabled" && q.display) i.push("--thinking-display", q.display); + } + if (this.options.effort) i.push("--effort", this.options.effort); + if (V) i.push("--max-turns", V.toString()); + if (B !== void 0) i.push("--max-budget-usd", B.toString()); + if (z4) i.push("--task-budget", z4.total.toString()); + if (N) i.push("--model", N); + if (Q) i.push("--agent", Q); + if (J && J.length > 0) i.push("--betas", J.join(",")); + if (O) i.push("--json-schema", B$(O)); + if (this.options.debugFile) i.push("--debug-file", this.options.debugFile); + else if (this.options.debug) i.push("--debug"); + if (!this.options.debugFile && !this.options.spawnClaudeCodeProcess) { + let u$ = mw(); + if (u$) i.push("--debug-file", u$); + } + if (a1) { + if (j) throw Error("canUseTool callback cannot be used with permissionPromptToolName. Please use one or the other."); + i.push("--permission-prompt-tool", "stdio"); + } else if (j) i.push("--permission-prompt-tool", j); + if (A) i.push("--continue"); + if (S) i.push("--resume", S); + if (this.options.assistant) i.push("--assistant"); + if (this.options.channels && this.options.channels.length > 0) i.push("--channels", ...this.options.channels); + if (W1.length > 0) i.push("--allowedTools", W1.join(",")); + if (h$.length > 0) i.push("--disallowedTools", h$.join(",")); + if (e$ !== void 0) if (Array.isArray(e$)) if (e$.length === 0) i.push("--tools", ""); + else i.push("--tools", e$.join(",")); + else i.push("--tools", "default"); + if (m6 && Object.keys(m6).length > 0) i.push("--mcp-config", B$({ mcpServers: m6 })); + if (u !== void 0) i.push(`--setting-sources=${u.join(",")}`); + if (F6) i.push("--strict-mcp-config"); + if (D) i.push("--permission-mode", D); + if (M) i.push("--allow-dangerously-skip-permissions"); + if (w) { + if (N && w === N) throw Error("Fallback model cannot be the same as the main model. Please specify a different model for fallbackModel option."); + i.push("--fallback-model", w); + } + if (this.options.includeHookEvents) i.push("--include-hook-events"); + if (i0) i.push("--include-partial-messages"); + if (this.options.sessionMirror) i.push("--session-mirror"); + for (let u$ of $) i.push("--add-dir", u$); + if (k4 && k4.length > 0) for (let u$ of k4) if (u$.type === "local") i.push("--plugin-dir", u$.path); + else throw Error(`Unsupported plugin type: ${u$.type}`); + if (this.options.forkSession) i.push("--fork-session"); + if (this.options.resumeSessionAt) i.push("--resume-session-at", this.options.resumeSessionAt); + if (this.options.sessionId) i.push("--session-id", this.options.sessionId); + if (this.options.persistSession === false) i.push("--no-session-persistence"); + if (this.options.managedSettings) i.push("--managed-settings", this.options.managedSettings); + let G5 = { ...G != null ? G : {} }; + if (this.options.settings) G5.settings = this.options.settings; + let U5 = O2(G5, S9); + for (let [u$, s$] of Object.entries(U5)) if (s$ === null) i.push(`--${u$}`); + else i.push(`--${u$}`, s$); + if (!H.CLAUDE_CODE_ENTRYPOINT) H.CLAUDE_CODE_ENTRYPOINT = "sdk-ts"; + if (delete H.NODE_OPTIONS, R$(H.DEBUG_CLAUDE_AGENT_SDK)) H.DEBUG = "1"; + else delete H.DEBUG; + let v9 = fx(U), C9 = v9 ? U : X, T9 = v9 ? [...W, ...i] : [...W, U, ...i], H5 = { command: C9, args: T9, cwd: Y, env: H, signal: this.forwardedAbort.signal }; + if (this.options.spawnClaudeCodeProcess) L6(`Spawning Claude Code (custom): ${C9} ${T9.join(" ")}`), this.process = this.options.spawnClaudeCodeProcess(H5); + else L6(`Spawning Claude Code: ${C9} ${T9.join(" ")}`), this.process = this.spawnLocalProcess(H5); + if (this.processStdin = this.process.stdin, this.processStdout = this.process.stdout, yx(this.process), this.abortHandler = () => this.close(), this.abortController.signal.addEventListener("abort", this.abortHandler), this.abortController.signal.aborted) this.close(); + this.process.on("error", (u$) => { + if (this.ready = false, this.abortController.signal.aborted) this.exitError = new W6("Claude Code process aborted by user"); + else if (Tw(u$)) { + let s$ = gx(U, v9); + this.exitError = ReferenceError(s$), L6(this.exitError.message); + } else this.exitError = Error(`Failed to spawn Claude Code process: ${u$.message}`), L6(this.exitError.message); + }), this.process.on("exit", (u$, s$) => { + if (this.ready = false, this.abortController.signal.aborted) this.exitError = new W6("Claude Code process aborted by user"); + else { + let S4 = this.getProcessExitError(u$, s$); + if (S4) this.exitError = S4, L6(S4.message); + } + }), this.ready = !this.abortController.signal.aborted; + } catch ($) { + throw this.ready = false, $; + } + } + getProcessExitError($, Q) { + if ($ !== 0 && $ !== null) return Error(`Claude Code process exited with code ${$}`); + else if (Q) return Error(`Claude Code process terminated by signal ${Q}`); + return; + } + write($) { + var _a5, _b3; + if (this.abortController.signal.aborted) throw new W6("Operation aborted"); + if (this.spawnResolve) { + this.pendingWrites.push($); + return; + } + if (!this.ready || !this.processStdin) throw Error("ProcessTransport is not ready for writing"); + if (this.processStdin.writableEnded) { + L6("[ProcessTransport] Dropping write to ended stdin stream"); + return; + } + if (((_a5 = this.process) == null ? void 0 : _a5.killed) || ((_b3 = this.process) == null ? void 0 : _b3.exitCode) !== null) throw Error("Cannot write to terminated process"); + if (this.exitError) throw Error(`Cannot write to process that exited with error: ${this.exitError.message}`); + L6(`[ProcessTransport] Writing to stdin: ${$.substring(0, 100)}`); + try { + if (!this.processStdin.write($)) L6("[ProcessTransport] Write buffer full, data queued"); + } catch (Q) { + throw this.ready = false, Error(`Failed to write to process stdin: ${N8(Q)}`); + } + } + [Symbol.dispose]() { + this.close(); + } + close() { + var _a5; + if (this.spawnAbort(this.abortController.signal.aborted ? new W6("Claude Code process aborted by user") : Error("Query closed before spawn")), this.processStdin) this.processStdin.end(), this.processStdin = void 0; + if (this.abortHandler) this.abortController.signal.removeEventListener("abort", this.abortHandler), this.abortHandler = void 0; + for (let { handler: J } of this.exitListeners) (_a5 = this.process) == null ? void 0 : _a5.off("exit", J); + this.exitListeners = []; + let $ = () => { + if (this.abortController.signal.aborted) this.forwardedAbort.abort(this.abortController.signal.reason); + }, Q = this.process; + if (Q && !Q.killed && Q.exitCode === null) { + const processKillTimer = setTimeout((J, Y) => { + if (J.exitCode !== null) { + Y(); + return; + } + if (process.platform === "win32") { + const windowsForceKillTimer = setTimeout((X, W) => { + if (X.exitCode === null) X.kill("SIGKILL"); + W(); + }, 5e3, J, Y); + windowsForceKillTimer.unref?.(); + return; + } + J.kill("SIGTERM"); + const forceKillTimer = setTimeout((X) => { + if (X.exitCode === null) X.kill("SIGKILL"); + }, 5e3, J); + forceKillTimer.unref?.(); + Y(); + }, Tx, Q, $); + processKillTimer.unref?.(); + Q.once("exit", () => VX.delete(Q)); + } + else if (Q) VX.delete(Q), $(); + this.ready = false; + } + isReady() { + return this.ready; + } + async *readMessages() { + if (this.spawnPromise) await this.spawnPromise, this.spawnPromise = void 0; + if (!this.processStdout) throw Error("ProcessTransport output stream not available"); + if (this.exitError) throw this.exitError; + let $ = (0, import_readline2.createInterface)({ input: this.processStdout }), Q = this.process ? (() => { + let J = this.process, Y = () => $.close(); + return J.on("error", Y), () => J.off("error", Y); + })() : void 0; + if (this.exitError) $.close(); + try { + for await (let J of $) if (J.trim()) { + let Y; + try { + Y = d$(J); + } catch (X) { + L6(`Non-JSON stdout: ${J}`); + continue; + } + yield Y; + } + if (this.exitError) throw this.exitError; + await this.waitForExit(); + } catch (J) { + throw J; + } finally { + Q == null ? void 0 : Q(), $.close(); + } + } + endInput() { + if (this.spawnResolve) { + this.pendingEndInput = true; + return; + } + if (this.processStdin) this.processStdin.end(); + } + getInputStream() { + return this.processStdin; + } + onExit($) { + if (!this.process) return () => { + }; + let Q = (J, Y) => { + let X = this.getProcessExitError(J, Y); + $(X); + }; + return this.process.on("exit", Q), this.exitListeners.push({ callback: $, handler: Q }), () => { + if (this.process) this.process.off("exit", Q); + let J = this.exitListeners.findIndex((Y) => Y.handler === Q); + if (J !== -1) this.exitListeners.splice(J, 1); + }; + } + async waitForExit() { + if (!this.process) { + if (this.exitError) throw this.exitError; + return; + } + if (this.process.exitCode !== null || this.process.killed || this.exitError) { + if (this.exitError) throw this.exitError; + return; + } + return new Promise(($, Q) => { + let J = (X, W) => { + if (this.abortController.signal.aborted) { + Q(new W6("Operation aborted")); + return; + } + let G = this.getProcessExitError(X, W); + if (G) Q(G); + else $(); + }; + this.process.once("exit", J); + let Y = (X) => { + this.process.off("exit", J), Q(X); + }; + this.process.once("error", Y), this.process.once("exit", () => { + this.process.off("error", Y); + }); + }); + } +}; +function fx($) { + return ![".js", ".mjs", ".tsx", ".ts", ".jsx"].some((J) => $.endsWith(J)); +} +function gx($, Q) { + if ((0, import_fs2.existsSync)($)) return Q ? `Claude Code native binary at ${$} exists but failed to launch.` : `Claude Code executable at ${$} exists but failed to launch.`; + return Q ? `Claude Code native binary not found at ${$}. Please ensure Claude Code is installed via native installer or specify a valid path with options.pathToClaudeCodeExecutable.` : `Claude Code executable not found at ${$}. Is options.pathToClaudeCodeExecutable set?`; +} +var I8 = "@anthropic-ai/claude-agent-sdk"; +function ux() { + var _a5, _b3; + if (process.platform !== "linux") return false; + let $ = typeof ((_a5 = process.report) == null ? void 0 : _a5.getReport) === "function" ? process.report.getReport() : null; + return $ != null && ((_b3 = $.header) == null ? void 0 : _b3.glibcVersionRuntime) === void 0; +} +function F2($, Q = process.platform, J = process.arch, Y = import_fs5.existsSync, X = ux()) { + let G = Q === "win32" ? ".exe" : "", H = (Q === "android" ? [`${I8}-linux-${J}-android`] : Q === "linux" ? X ? [`${I8}-linux-${J}-musl`, `${I8}-linux-${J}`] : [`${I8}-linux-${J}`, `${I8}-linux-${J}-musl`] : [`${I8}-${Q}-${J}`]).map((q) => `${q}/claude${G}`); + for (let q of H) try { + let V = $(q); + if (Y(V)) return V; + } catch (e2) { + } + return null; +} +var hQ = class { + constructor($) { + __publicField(this, "returned"); + __publicField(this, "queue", []); + __publicField(this, "readResolve"); + __publicField(this, "readReject"); + __publicField(this, "isDone", false); + __publicField(this, "hasError"); + __publicField(this, "started", false); + this.returned = $; + } + [Symbol.asyncIterator]() { + if (this.started) throw Error("Stream can only be iterated once"); + return this.started = true, this; + } + next() { + if (this.queue.length > 0) return Promise.resolve({ done: false, value: this.queue.shift() }); + if (this.isDone) return Promise.resolve({ done: true, value: void 0 }); + if (this.hasError) return Promise.reject(this.hasError); + return new Promise(($, Q) => { + this.readResolve = $, this.readReject = Q; + }); + } + enqueue($) { + if (this.readResolve) { + let Q = this.readResolve; + this.readResolve = void 0, this.readReject = void 0, Q({ done: false, value: $ }); + } else this.queue.push($); + } + done() { + if (this.isDone = true, this.readResolve) { + let $ = this.readResolve; + this.readResolve = void 0, this.readReject = void 0, $({ done: true, value: void 0 }); + } + } + error($) { + if (this.hasError = $, this.readReject) { + let Q = this.readReject; + this.readResolve = void 0, this.readReject = void 0, Q($); + } + } + return() { + if (this.isDone = true, this.returned) this.returned(); + return Promise.resolve({ done: true, value: void 0 }); + } +}; +function mx() { + return { eventQueue: [], sink: null }; +} +var lx = mx(); +function BX($, Q) { + let J = lx; + if (J.sink === null) { + J.eventQueue.push({ eventName: $, metadata: Q, async: false }); + return; + } + J.sink.logEvent($, Q); +} +function AU($) { + BX("tengu_feature_ok", { feature_name: $ }); +} +function IU($, Q, J) { + BX("tengu_feature_bad", { feature_name: $, error_code: Q, ...J }); +} +async function I4($, Q, J) { + var _a5; + try { + let Y = await Q(); + return AU($), Y; + } catch (Y) { + throw IU($, (_a5 = J == null ? void 0 : J(Y)) != null ? _a5 : "error"), Y; + } +} +var RU = class { + constructor($) { + __publicField(this, "sendMcpMessage"); + __publicField(this, "isClosed", false); + __publicField(this, "onclose"); + __publicField(this, "onerror"); + __publicField(this, "onmessage"); + this.sendMcpMessage = $; + } + async start() { + } + async send($) { + if (this.isClosed) throw Error("Transport is closed"); + this.sendMcpMessage($); + } + async close() { + var _a5; + if (this.isClosed) return; + this.isClosed = true, (_a5 = this.onclose) == null ? void 0 : _a5.call(this); + } +}; +var PU = class { + constructor($, Q, J, Y, X, W = /* @__PURE__ */ new Map(), G, U, H, q, V) { + __publicField(this, "transport"); + __publicField(this, "isSingleUserTurn"); + __publicField(this, "canUseTool"); + __publicField(this, "hooks"); + __publicField(this, "abortController"); + __publicField(this, "jsonSchema"); + __publicField(this, "initConfig"); + __publicField(this, "onElicitation"); + __publicField(this, "getOAuthToken"); + __publicField(this, "getHostAuthToken"); + __publicField(this, "pendingControlResponses", /* @__PURE__ */ new Map()); + __publicField(this, "cleanupPerformed", false); + __publicField(this, "sdkMessages"); + __publicField(this, "inputStream", new hQ()); + __publicField(this, "initialization"); + __publicField(this, "cancelControllers", /* @__PURE__ */ new Map()); + __publicField(this, "hookCallbacks", /* @__PURE__ */ new Map()); + __publicField(this, "nextCallbackId", 0); + __publicField(this, "sdkMcpTransports", /* @__PURE__ */ new Map()); + __publicField(this, "sdkMcpServerInstances", /* @__PURE__ */ new Map()); + __publicField(this, "pendingMcpResponses", /* @__PURE__ */ new Map()); + __publicField(this, "firstResultReceivedResolve"); + __publicField(this, "firstResultReceived", false); + __publicField(this, "lastErrorResultText"); + __publicField(this, "transcriptMirrorBatcher"); + __publicField(this, "cleanupCallbacks", []); + __publicField(this, "cleanupPromise"); + this.transport = $; + this.isSingleUserTurn = Q; + this.canUseTool = J; + this.hooks = Y; + this.abortController = X; + this.jsonSchema = G; + this.initConfig = U; + this.onElicitation = H; + this.getOAuthToken = q; + this.getHostAuthToken = V; + for (let [B, z4] of W) this.connectSdkMcpServer(B, z4); + this.sdkMessages = this.readSdkMessages(), this.readMessages(), this.initialization = this.initialize(), this.initialization.catch(() => { + }); + } + setIsSingleUserTurn($) { + this.isSingleUserTurn = $; + } + setTranscriptMirrorBatcher($) { + this.transcriptMirrorBatcher = $; + } + reportMirrorError($, Q) { + let J = { type: "system", subtype: "mirror_error", error: Q, key: $, uuid: (0, import_crypto4.randomUUID)(), session_id: $.sessionId }; + this.inputStream.enqueue(J); + } + addCleanupCallback($) { + if (this.cleanupPerformed) $(); + else this.cleanupCallbacks.push($); + } + isClosed() { + return this.cleanupPerformed; + } + hasBidirectionalNeeds() { + return this.sdkMcpTransports.size > 0 || this.hooks !== void 0 && Object.keys(this.hooks).length > 0 || this.canUseTool !== void 0 || this.onElicitation !== void 0 || this.getOAuthToken !== void 0 || this.getHostAuthToken !== void 0; + } + setError($) { + this.inputStream.error($); + } + async stopTask($) { + await this.request({ subtype: "stop_task", task_id: $ }); + } + async backgroundTasks($) { + var _a5; + return (_a5 = (await this.request({ subtype: "background_tasks", tool_use_id: $ })).response.backgrounded) != null ? _a5 : true; + } + close() { + this.cleanup(); + } + cleanup($) { + if (this.cleanupPromise) return this.cleanupPromise; + return this.cleanupPerformed = true, this.cleanupPromise = this.performCleanup($), this.cleanupPromise; + } + async performCleanup($) { + for (let Q of this.cleanupCallbacks) try { + Q(); + } catch (e2) { + } + if (this.cleanupCallbacks = [], this.transcriptMirrorBatcher) try { + await this.transcriptMirrorBatcher.flush(); + } catch (e2) { + } + try { + for (let J of this.cancelControllers.values()) J.abort(); + this.cancelControllers.clear(), this.transport.close(); + let Q = $ != null ? $ : Error("Query closed before response received"); + for (let { reject: J } of this.pendingControlResponses.values()) J(Q); + this.pendingControlResponses.clear(); + for (let { reject: J } of this.pendingMcpResponses.values()) J(Q); + this.pendingMcpResponses.clear(), this.hookCallbacks.clear(); + for (let J of this.sdkMcpTransports.values()) J.close().catch(() => { + }); + if (this.sdkMcpTransports.clear(), $) this.inputStream.error($); + else this.inputStream.done(); + } catch (Q) { + } + } + next(...[$]) { + return this.sdkMessages.next(...[$]); + } + async return($) { + return await this.cleanup(), this.sdkMessages.return($); + } + async throw($) { + return await this.cleanup(), this.sdkMessages.throw($); + } + [Symbol.asyncIterator]() { + return this.sdkMessages; + } + async [Symbol.asyncDispose]() { + await this.cleanup(); + } + async readMessages() { + var _a5; + try { + for await (let $ of this.transport.readMessages()) { + if ($.type === "control_response") { + let Q = this.pendingControlResponses.get($.response.request_id); + if (Q) Q.handler($.response); + continue; + } else if ($.type === "control_request") { + this.handleControlRequest($); + continue; + } else if ($.type === "control_cancel_request") { + this.handleControlCancelRequest($); + continue; + } else if ($.type === "keep_alive") continue; + else if ($.type === "transcript_mirror") { + (_a5 = this.transcriptMirrorBatcher) == null ? void 0 : _a5.enqueue($.filePath, $.entries); + continue; + } + if ($.type === "system" && ($.subtype === "post_turn_summary" || $.subtype === "task_summary")) { + this.inputStream.enqueue($); + continue; + } + if ($.type === "result") { + if (this.transcriptMirrorBatcher) await this.transcriptMirrorBatcher.flush(); + if (this.lastErrorResultText = $.is_error ? $.subtype === "success" ? $.result : $.errors.join("; ") : void 0, this.firstResultReceived = true, this.firstResultReceivedResolve) this.firstResultReceivedResolve(); + if (this.isSingleUserTurn) X$("[Query.readMessages] First result received for single-turn query, closing stdin"), this.transport.endInput(); + } else if (!($.type === "system" && $.subtype === "session_state_changed")) this.lastErrorResultText = void 0; + this.inputStream.enqueue($); + } + if (this.transcriptMirrorBatcher) await this.transcriptMirrorBatcher.flush(); + if (this.firstResultReceivedResolve) this.firstResultReceivedResolve(); + this.inputStream.done(), this.cleanup(); + } catch ($) { + if (this.transcriptMirrorBatcher) await this.transcriptMirrorBatcher.flush(); + if (this.firstResultReceivedResolve) this.firstResultReceivedResolve(); + if (this.lastErrorResultText !== void 0 && !($ instanceof W6)) { + let Q = Error(`Claude Code returned an error result: ${this.lastErrorResultText}`); + X$(`[Query.readMessages] Replacing exit error with result text. Original: ${N8($)}`), this.inputStream.error(Q), this.cleanup(Q); + return; + } + this.inputStream.error($), this.cleanup($); + } + } + async handleControlRequest($) { + let Q = new AbortController(); + this.cancelControllers.set($.request_id, Q); + try { + let J = await this.processControlRequest($, Q.signal); + if (this.cleanupPerformed) return; + let Y = { type: "control_response", response: { subtype: "success", request_id: $.request_id, response: J } }; + await Promise.resolve(this.transport.write(B$(Y) + ` +`)); + } catch (J) { + if (this.cleanupPerformed) return; + let Y = { type: "control_response", response: { subtype: "error", request_id: $.request_id, error: N8(J) } }; + try { + await Promise.resolve(this.transport.write(B$(Y) + ` +`)); + } catch (X) { + X$(`[Query.handleControlRequest] Error-response write failed: ${N8(X)}`, { level: "error" }); + } + } finally { + this.cancelControllers.delete($.request_id); + } + } + handleControlCancelRequest($) { + let Q = this.cancelControllers.get($.request_id); + if (Q) Q.abort(), this.cancelControllers.delete($.request_id); + } + async processControlRequest($, Q) { + var _a5, _b3; + if ($.request.subtype === "can_use_tool") { + if (!this.canUseTool) throw Error("canUseTool callback is not provided."); + return { ...await this.canUseTool($.request.tool_name, $.request.input, { signal: Q, suggestions: $.request.permission_suggestions, blockedPath: $.request.blocked_path, decisionReason: $.request.decision_reason, title: $.request.title, displayName: $.request.display_name, description: $.request.description, toolUseID: $.request.tool_use_id, agentID: $.request.agent_id }), toolUseID: $.request.tool_use_id }; + } else if ($.request.subtype === "hook_callback") return await this.handleHookCallbacks($.request.callback_id, $.request.input, $.request.tool_use_id, Q); + else if ($.request.subtype === "mcp_message") { + let J = $.request, Y = this.sdkMcpTransports.get(J.server_name); + if (!Y) throw Error(`SDK MCP server not found: ${J.server_name}`); + if ("method" in J.message && "id" in J.message && J.message.id !== null) return { mcp_response: await this.handleMcpControlRequest(J.server_name, J, Y) }; + else { + if (Y.onmessage) Y.onmessage(J.message); + return { mcp_response: { jsonrpc: "2.0", result: {}, id: 0 } }; + } + } else if ($.request.subtype === "elicitation") { + let J = $.request; + if (this.onElicitation) return await this.onElicitation({ serverName: J.mcp_server_name, message: J.message, mode: J.mode, url: J.url, elicitationId: J.elicitation_id, requestedSchema: J.requested_schema, title: J.title, displayName: J.display_name, description: J.description }, { signal: Q }); + return { action: "decline" }; + } else if ($.request.subtype === "oauth_token_refresh") { + if (!this.getOAuthToken) throw Error("getOAuthToken callback is not provided."); + return { accessToken: (_a5 = await this.getOAuthToken({ signal: Q })) != null ? _a5 : null }; + } else if ($.request.subtype === "host_auth_token_refresh") { + if (!this.getHostAuthToken) throw Error("getHostAuthToken callback is not provided."); + return { authToken: (_b3 = await this.getHostAuthToken({ signal: Q })) != null ? _b3 : null }; + } + throw Error("Unsupported control request subtype: " + $.request.subtype); + } + async *readSdkMessages() { + try { + for await (let $ of this.inputStream) yield $; + } finally { + await this.cleanup(); + } + } + async initialize() { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m, _n; + let $; + if (this.hooks) { + $ = {}; + for (let [X, W] of Object.entries(this.hooks)) if (W.length > 0) $[X] = W.map((G) => { + let U = []; + for (let H of G.hooks) { + let q = `hook_${this.nextCallbackId++}`; + this.hookCallbacks.set(q, H), U.push(q); + } + return { matcher: G.matcher, hookCallbackIds: U, timeout: G.timeout }; + }); + } + let Q = this.sdkMcpTransports.size > 0 ? Array.from(this.sdkMcpTransports.keys()) : void 0, J = { subtype: "initialize", hooks: $, sdkMcpServers: Q, jsonSchema: this.jsonSchema, systemPrompt: typeof ((_a5 = this.initConfig) == null ? void 0 : _a5.systemPrompt) === "string" ? [this.initConfig.systemPrompt] : (_b3 = this.initConfig) == null ? void 0 : _b3.systemPrompt, appendSystemPrompt: (_c2 = this.initConfig) == null ? void 0 : _c2.appendSystemPrompt, planModeInstructions: (_d = this.initConfig) == null ? void 0 : _d.planModeInstructions, appendSubagentSystemPrompt: (_e2 = this.initConfig) == null ? void 0 : _e2.appendSubagentSystemPrompt, toolAliases: (_f2 = this.initConfig) == null ? void 0 : _f2.toolAliases, excludeDynamicSections: (_g = this.initConfig) == null ? void 0 : _g.excludeDynamicSections, agents: (_h2 = this.initConfig) == null ? void 0 : _h2.agents, title: (_i = this.initConfig) == null ? void 0 : _i.title, skills: Array.isArray((_j = this.initConfig) == null ? void 0 : _j.skills) ? this.initConfig.skills : void 0, webSearchIsolationExemptMcpServers: (_k3 = this.initConfig) == null ? void 0 : _k3.webSearchIsolationExemptMcpServers, promptSuggestions: (_l2 = this.initConfig) == null ? void 0 : _l2.promptSuggestions, agentProgressSummaries: (_m = this.initConfig) == null ? void 0 : _m.agentProgressSummaries, forwardSubagentText: (_n = this.initConfig) == null ? void 0 : _n.forwardSubagentText }; + return (await this.request(J)).response; + } + async interrupt() { + return I4("sdk_interrupt", async () => { + await this.request({ subtype: "interrupt" }); + }); + } + async setPermissionMode($) { + await this.request({ subtype: "set_permission_mode", mode: $ }); + } + async setModel($) { + await this.request({ subtype: "set_model", model: $ }); + } + async setMaxThinkingTokens($) { + await this.request({ subtype: "set_max_thinking_tokens", max_thinking_tokens: $ }); + } + async applyFlagSettings($) { + return I4("sdk_apply_flag_settings", async () => { + await this.request({ subtype: "apply_flag_settings", settings: $ }); + }); + } + async getSettings() { + return (await this.request({ subtype: "get_settings" })).response; + } + async rewindFiles($, Q) { + return I4("sdk_rewind_files", async () => { + return (await this.request({ subtype: "rewind_files", user_message_id: $, dry_run: Q == null ? void 0 : Q.dryRun })).response; + }); + } + async cancelAsyncMessage($) { + return (await this.request({ subtype: "cancel_async_message", message_uuid: $ })).response.cancelled; + } + async seedReadState($, Q) { + await this.request({ subtype: "seed_read_state", path: $, mtime: Q }); + } + async enableRemoteControl($, Q) { + return (await this.request({ subtype: "remote_control", enabled: $, ...Q !== void 0 && { name: Q } })).response; + } + async submitFeedback($, Q) { + return (await this.request({ subtype: "submit_feedback", description: $, surface: Q == null ? void 0 : Q.surface })).response; + } + async generateSessionTitle($, Q) { + return I4("sdk_session_title_generate", async () => { + return (await this.request({ subtype: "generate_session_title", description: $, persist: Q == null ? void 0 : Q.persist })).response.title; + }); + } + async askSideQuestion($) { + return I4("sdk_side_question", async () => { + var _a5; + let J = (await this.request({ subtype: "side_question", question: $ })).response; + return J.response === null ? null : { response: J.response, synthetic: (_a5 = J.synthetic) != null ? _a5 : false }; + }); + } + async launchUltrareview($, Q) { + var _a5; + return (await this.request({ subtype: "ultrareview_launch", args: $, confirm: (_a5 = Q == null ? void 0 : Q.confirm) != null ? _a5 : false })).response; + } + async messageRated($) { + var _a5; + await this.request({ subtype: "message_rated", messageUuid: $.messageUuid, sentiment: $.sentiment, surface: $.surface, cleared: (_a5 = $.cleared) != null ? _a5 : false }); + } + processPendingPermissionRequests($) { + for (let Q of $) if (Q.request.subtype === "can_use_tool") this.handleControlRequest(Q).catch(() => { + }); + } + request($) { + let Q = Math.random().toString(36).substring(2, 15), J = { request_id: Q, type: "control_request", request: $ }; + return new Promise((Y, X) => { + this.pendingControlResponses.set(Q, { handler: (W) => { + if (this.pendingControlResponses.delete(Q), W.subtype === "success") Y(W); + else if (X(Error(W.error)), W.pending_permission_requests) this.processPendingPermissionRequests(W.pending_permission_requests); + }, reject: X }), Promise.resolve(this.transport.write(B$(J) + ` +`)).catch((W) => { + this.pendingControlResponses.delete(Q), X(W); + }); + }); + } + initializationResult() { + return this.initialization; + } + async supportedCommands() { + return (await this.initialization).commands; + } + async supportedModels() { + return (await this.initialization).models; + } + async supportedAgents() { + return (await this.initialization).agents; + } + async reconnectMcpServer($) { + await this.request({ subtype: "mcp_reconnect", serverName: $ }); + } + async toggleMcpServer($, Q) { + return I4("sdk_mcp_toggle_server", async () => { + await this.request({ subtype: "mcp_toggle", serverName: $, enabled: Q }); + }); + } + async enableChannel($) { + return I4("sdk_mcp_enable_channel", async () => { + await this.request({ subtype: "channel_enable", serverName: $ }); + }); + } + async mcpAuthenticate($, Q) { + return (await this.request({ subtype: "mcp_authenticate", serverName: $, redirectUri: Q })).response; + } + async mcpClearAuth($) { + return (await this.request({ subtype: "mcp_clear_auth", serverName: $ })).response; + } + async mcpSubmitOAuthCallbackUrl($, Q) { + return (await this.request({ subtype: "mcp_oauth_callback_url", serverName: $, callbackUrl: Q })).response; + } + async claudeAuthenticate($) { + return (await this.request({ subtype: "claude_authenticate", loginWithClaudeAi: $ })).response; + } + async claudeOAuthCallback($, Q) { + return (await this.request({ subtype: "claude_oauth_callback", authorizationCode: $, state: Q })).response; + } + async claudeOAuthWaitForCompletion() { + return (await this.request({ subtype: "claude_oauth_wait_for_completion" })).response; + } + async mcpServerStatus() { + return (await this.request({ subtype: "mcp_status" })).response.mcpServers; + } + async getContextUsage() { + return (await this.request({ subtype: "get_context_usage" })).response; + } + async readFile($, Q) { + try { + return (await this.request({ subtype: "read_file", path: $, max_bytes: Q == null ? void 0 : Q.maxBytes, encoding: Q == null ? void 0 : Q.encoding })).response; + } catch (e2) { + return null; + } + } + async reloadPlugins() { + return I4("sdk_reload_plugins", async () => { + return (await this.request({ subtype: "reload_plugins" })).response; + }); + } + async setMcpServers($) { + return I4("sdk_mcp_set_servers", async () => { + let Q = {}, J = {}; + for (let [U, H] of Object.entries($)) if (H.type === "sdk" && "instance" in H) Q[U] = H.instance; + else J[U] = H; + let Y = new Set(this.sdkMcpServerInstances.keys()), X = new Set(Object.keys(Q)); + for (let U of Y) if (!X.has(U)) await this.disconnectSdkMcpServer(U); + for (let [U, H] of Object.entries(Q)) if (!Y.has(U)) this.connectSdkMcpServer(U, H); + let W = {}; + for (let U of Object.keys(Q)) W[U] = { type: "sdk", name: U }; + return (await this.request({ subtype: "mcp_set_servers", servers: { ...J, ...W } })).response; + }); + } + async accountInfo() { + return (await this.initialization).account; + } + async streamInput($) { + var _a5; + X$("[Query.streamInput] Starting to process input stream"); + try { + let Q = 0; + for await (let J of $) { + if (Q++, X$(`[Query.streamInput] Processing message ${Q}: ${J.type}`), (_a5 = this.abortController) == null ? void 0 : _a5.signal.aborted) break; + await Promise.resolve(this.transport.write(B$(J) + ` +`)); + } + if (X$(`[Query.streamInput] Finished processing ${Q} messages from input stream`), Q > 0 && this.hasBidirectionalNeeds()) X$("[Query.streamInput] Has bidirectional needs, waiting for first result"), await this.waitForFirstResult(); + X$("[Query] Calling transport.endInput() to close stdin to CLI process"), this.transport.endInput(); + } catch (Q) { + if (!(Q instanceof W6)) throw Q; + } + } + waitForFirstResult() { + if (this.firstResultReceived) return X$("[Query.waitForFirstResult] Result already received, returning immediately"), Promise.resolve(); + return new Promise(($) => { + var _a5, _b3; + if ((_a5 = this.abortController) == null ? void 0 : _a5.signal.aborted) { + $(); + return; + } + (_b3 = this.abortController) == null ? void 0 : _b3.signal.addEventListener("abort", () => $(), { once: true }), this.firstResultReceivedResolve = $; + }); + } + handleHookCallbacks($, Q, J, Y) { + let X = this.hookCallbacks.get($); + if (!X) throw Error(`No hook callback found for ID: ${$}`); + return X(Q, J, { signal: Y }); + } + connectSdkMcpServer($, Q) { + let J = new RU((Y) => this.sendMcpServerMessageToCli($, Y)); + this.sdkMcpTransports.set($, J), this.sdkMcpServerInstances.set($, Q), Q.connect(J).catch((Y) => { + if (this.sdkMcpTransports.get($) === J) this.sdkMcpTransports.delete($); + if (this.sdkMcpServerInstances.get($) === Q) this.sdkMcpServerInstances.delete($); + X$(`[Query.connectSdkMcpServer] Failed to connect MCP server '${$}': ${Y}`, { level: "error" }); + }); + } + async disconnectSdkMcpServer($) { + let Q = this.sdkMcpTransports.get($); + if (Q) await Q.close(), this.sdkMcpTransports.delete($); + this.sdkMcpServerInstances.delete($); + } + sendMcpServerMessageToCli($, Q) { + if ("id" in Q && Q.id !== null && Q.id !== void 0) { + let Y = `${$}:${Q.id}`, X = this.pendingMcpResponses.get(Y); + if (X) { + X.resolve(Q), this.pendingMcpResponses.delete(Y); + return; + } + } + let J = { type: "control_request", request_id: (0, import_crypto4.randomUUID)(), request: { subtype: "mcp_message", server_name: $, message: Q } }; + Promise.resolve(this.transport.write(B$(J) + ` +`)).catch((Y) => { + X$(`[Query.sendMcpServerMessageToCli] Transport write failed: ${Y}`, { level: "error" }); + }); + } + handleMcpControlRequest($, Q, J) { + let Y = "id" in Q.message ? Q.message.id : null, X = `${$}:${Y}`; + return new Promise((W, G) => { + let U = () => { + this.pendingMcpResponses.delete(X); + }, H = (V) => { + U(), W(V); + }, q = (V) => { + U(), G(V); + }; + if (this.pendingMcpResponses.set(X, { resolve: H, reject: q }), J.onmessage) J.onmessage(Q.message); + else { + U(), G(Error("No message handler registered")); + return; + } + }); + } +}; +var zX = 500; +var NX = 1048576; +var cx = [200, 800]; +var EU = class { + constructor($, Q = 6e4, J, Y = zX, X = NX, W = cx) { + __publicField(this, "send"); + __publicField(this, "sendTimeoutMs"); + __publicField(this, "onError"); + __publicField(this, "maxPendingEntries"); + __publicField(this, "maxPendingBytes"); + __publicField(this, "backoffMs"); + __publicField(this, "pending", []); + __publicField(this, "pendingEntries", 0); + __publicField(this, "pendingBytes", 0); + __publicField(this, "flushPromise", null); + this.send = $; + this.sendTimeoutMs = Q; + this.onError = J; + this.maxPendingEntries = Y; + this.maxPendingBytes = X; + this.backoffMs = W; + } + enqueue($, Q) { + let J = B$(Q).length; + if (this.pending.push({ filePath: $, entries: Q, bytes: J }), this.pendingEntries += Q.length, this.pendingBytes += J, this.pendingEntries > this.maxPendingEntries || this.pendingBytes > this.maxPendingBytes) this.flushPromise = this.drain(), this.flushPromise.catch(() => { + }); + } + async flush() { + let $ = this.drain(); + if (this.flushPromise = $, await $, this.flushPromise === $) this.flushPromise = null; + } + async drain() { + let $ = this.flushPromise, Q = this.pending.splice(0); + if (this.pendingEntries = 0, this.pendingBytes = 0, $) await $; + if (Q.length === 0) return; + await this.doFlush(Q); + } + async doFlush($) { + var _a5; + let Q = /* @__PURE__ */ new Map(); + for (let Y of $) { + let X = Q.get(Y.filePath); + if (X) X.push(...Y.entries); + else Q.set(Y.filePath, Y.entries.slice()); + } + let J = this.backoffMs.length + 1; + for (let [Y, X] of Q) { + let W = `SessionStore.append() timed out after ${this.sendTimeoutMs}ms for ${Y}`, G, U = 1; + for (; U <= J; U++) try { + await v4(this.send(Y, X), this.sendTimeoutMs, W), G = void 0; + break; + } catch (H) { + if (G = j4(H), G.message === W) break; + let q = this.backoffMs[U - 1]; + if (q === void 0) break; + await K5(q); + } + if (G) { + X$(`[TranscriptMirrorBatcher] flush failed for ${Y} after ${U} attempt(s): ${G}`, { level: "error" }); + try { + (_a5 = this.onError) == null ? void 0 : _a5.call(this, Y, G); + } catch (H) { + X$(`[TranscriptMirrorBatcher] onError callback threw: ${H}`, { level: "error" }); + } + } + } + } +}; +var qG = DG(wZ(), 1); +var Og = (0, import_util.promisify)(import_child_process3.execFile); +function jH($) { + let Q = 0; + for (let J = 0; J < $.length; J++) Q = (Q << 5) - Q + $.charCodeAt(J) | 0; + return Q; +} +var Mg = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; +function L$($) { + if (typeof $ !== "string") return null; + return Mg.test($) ? $ : null; +} +async function rQ($, Q) { + let J = (0, import_fs6.createWriteStream)($, { mode: 384 }); + try { + for (let Y of Q) if (!J.write(JSON.stringify(Y) + ` +`)) await (0, import_events2.once)(J, "drain"); + J.end(), await (0, import_events2.once)(J, "finish"); + } catch (Y) { + throw J.destroy(), Y; + } +} +var _8 = 200; +function Lg($) { + return Math.abs(jH($)).toString(36); +} +function F0($) { + let Q = $.replace(/[^a-zA-Z0-9]/g, "-"); + if (Q.length <= _8) return Q; + return `${Q.slice(0, _8)}-${Lg($)}`; +} +var AX = Buffer.from('{"type":"attribution-snapshot"'); +var Pg = Buffer.from('{"type":"system"'); +var nQ = 10; +var Eg = Buffer.from([nQ]); +function CH($, Q) { + let J = 0; + for (let Y of $) J += +!!Q(Y); + return J; +} +function bX($) { + return [...new Set($)]; +} +function Uh() { + return "prod"; +} +var Hh = "user:inference"; +var nZ = "user:profile"; +var Kh = "org:create_api_key"; +var qh = [Kh, nZ]; +var Vh = [nZ, Hh, "user:sessions:claude_code", "user:mcp_servers", "user:file_upload", ...[]]; +var GH$ = bX([...qh, ...Vh]); +var iZ = { BASE_API_URL: "https://api.anthropic.com", CONSOLE_AUTHORIZE_URL: "https://platform.claude.com/oauth/authorize", CLAUDE_AI_AUTHORIZE_URL: "https://claude.com/cai/oauth/authorize", CLAUDE_AI_ORIGIN: "https://claude.ai", TOKEN_URL: "https://platform.claude.com/v1/oauth/token", API_KEY_URL: "https://api.anthropic.com/api/oauth/claude_cli/create_api_key", ROLES_URL: "https://api.anthropic.com/api/oauth/claude_cli/roles", CONSOLE_SUCCESS_URL: "https://platform.claude.com/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code", CLAUDEAI_SUCCESS_URL: "https://platform.claude.com/oauth/code/success?app=claude-code", MANUAL_REDIRECT_URL: "https://platform.claude.com/oauth/code/callback", CLIENT_ID: "9d1c250a-e61b-44d9-88ed-5944d1962f5e", OAUTH_FILE_SUFFIX: "", MCP_PROXY_URL: "https://mcp-proxy.anthropic.com", MCP_PROXY_PATH: "/v1/mcp/{server_id}" }; +var Bh = void 0; +function zh() { + var _a5, _b3, _c2, _d, _e2, _f2; + let $ = (_b3 = (_a5 = process.env.CLAUDE_LOCAL_OAUTH_API_BASE) == null ? void 0 : _a5.replace(/\/$/, "")) != null ? _b3 : "http://localhost:8000", Q = (_d = (_c2 = process.env.CLAUDE_LOCAL_OAUTH_APPS_BASE) == null ? void 0 : _c2.replace(/\/$/, "")) != null ? _d : "http://localhost:4000", J = (_f2 = (_e2 = process.env.CLAUDE_LOCAL_OAUTH_CONSOLE_BASE) == null ? void 0 : _e2.replace(/\/$/, "")) != null ? _f2 : "http://localhost:3000"; + return { BASE_API_URL: $, CONSOLE_AUTHORIZE_URL: `${J}/oauth/authorize`, CLAUDE_AI_AUTHORIZE_URL: `${Q}/oauth/authorize`, CLAUDE_AI_ORIGIN: Q, TOKEN_URL: `${$}/v1/oauth/token`, API_KEY_URL: `${$}/api/oauth/claude_cli/create_api_key`, ROLES_URL: `${$}/api/oauth/claude_cli/roles`, CONSOLE_SUCCESS_URL: `${J}/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code`, CLAUDEAI_SUCCESS_URL: `${J}/oauth/code/success?app=claude-code`, MANUAL_REDIRECT_URL: `${J}/oauth/code/callback`, CLIENT_ID: "22422756-60c9-4084-8eb7-27705fd5cf9a", OAUTH_FILE_SUFFIX: "-local-oauth", MCP_PROXY_URL: "http://localhost:8205", MCP_PROXY_PATH: "/v1/toolbox/shttp/mcp/{server_id}" }; +} +var Nh = ["https://beacon.claude-ai.staging.ant.dev", "https://claude.fedstart.com", "https://claude-staging.fedstart.com"]; +function rZ() { + let $ = (() => { + switch (Uh()) { + case "local": + return zh(); + case "staging": + return Bh != null ? Bh : iZ; + case "prod": + return iZ; + } + })(), Q = process.env.CLAUDE_CODE_CUSTOM_OAUTH_URL; + if (Q) { + let Y = Q.replace(/\/$/, ""); + if (!Nh.includes(Y)) throw Error("CLAUDE_CODE_CUSTOM_OAUTH_URL is not an approved endpoint."); + $ = { ...$, BASE_API_URL: Y, CONSOLE_AUTHORIZE_URL: `${Y}/oauth/authorize`, CLAUDE_AI_AUTHORIZE_URL: `${Y}/oauth/authorize`, CLAUDE_AI_ORIGIN: Y, TOKEN_URL: `${Y}/v1/oauth/token`, API_KEY_URL: `${Y}/api/oauth/claude_cli/create_api_key`, ROLES_URL: `${Y}/api/oauth/claude_cli/roles`, CONSOLE_SUCCESS_URL: `${Y}/oauth/code/success?app=claude-code`, CLAUDEAI_SUCCESS_URL: `${Y}/oauth/code/success?app=claude-code`, MANUAL_REDIRECT_URL: `${Y}/oauth/code/callback`, OAUTH_FILE_SUFFIX: "-custom-oauth" }; + } + let J = process.env.CLAUDE_CODE_OAUTH_CLIENT_ID; + if (J) $ = { ...$, CLIENT_ID: J }; + return $; +} +var oZ = "-credentials"; +function tZ($ = "") { + let Q = process.env.CLAUDE_SECURESTORAGE_CONFIG_DIR, J = Q !== void 0 ? !Q : !process.env.CLAUDE_CONFIG_DIR, Y = Q !== void 0 ? Q.normalize("NFC") : p6(), X = J ? "" : `-${(0, import_crypto6.createHash)("sha256").update(Y).digest("hex").substring(0, 8)}`; + return `Claude Code${rZ().OAUTH_FILE_SUFFIX}${$}${X}`; +} +var Dh = /^[a-zA-Z0-9._-]+$/; +function aZ() { + if (process.platform === "win32") return "claude-code-user"; + let $; + try { + $ = process.env.USER || (0, import_os3.userInfo)().username; + } catch (e2) { + $ = "claude-code-user"; + } + if (!Dh.test($)) return "claude-code-user"; + return $; +} +var U$; +(function($) { + $.assertEqual = (X) => { + }; + function Q(X) { + } + $.assertIs = Q; + function J(X) { + throw Error(); + } + $.assertNever = J, $.arrayToEnum = (X) => { + let W = {}; + for (let G of X) W[G] = G; + return W; + }, $.getValidEnumValues = (X) => { + let W = $.objectKeys(X).filter((U) => typeof X[X[U]] !== "number"), G = {}; + for (let U of W) G[U] = X[U]; + return $.objectValues(G); + }, $.objectValues = (X) => { + return $.objectKeys(X).map(function(W) { + return X[W]; + }); + }, $.objectKeys = typeof Object.keys === "function" ? (X) => Object.keys(X) : (X) => { + let W = []; + for (let G in X) if (Object.prototype.hasOwnProperty.call(X, G)) W.push(G); + return W; + }, $.find = (X, W) => { + for (let G of X) if (W(G)) return G; + return; + }, $.isInteger = typeof Number.isInteger === "function" ? (X) => Number.isInteger(X) : (X) => typeof X === "number" && Number.isFinite(X) && Math.floor(X) === X; + function Y(X, W = " | ") { + return X.map((G) => typeof G === "string" ? `'${G}'` : G).join(W); + } + $.joinValues = Y, $.jsonStringifyReplacer = (X, W) => { + if (typeof W === "bigint") return W.toString(); + return W; + }; +})(U$ || (U$ = {})); +var sZ; +(function($) { + $.mergeShapes = (Q, J) => { + return { ...Q, ...J }; + }; +})(sZ || (sZ = {})); +var C = U$.arrayToEnum(["string", "nan", "number", "integer", "float", "boolean", "date", "bigint", "symbol", "function", "undefined", "null", "array", "object", "unknown", "promise", "void", "never", "map", "set"]); +var l4 = ($) => { + switch (typeof $) { + case "undefined": + return C.undefined; + case "string": + return C.string; + case "number": + return Number.isNaN($) ? C.nan : C.number; + case "boolean": + return C.boolean; + case "function": + return C.function; + case "bigint": + return C.bigint; + case "symbol": + return C.symbol; + case "object": + if (Array.isArray($)) return C.array; + if ($ === null) return C.null; + if ($.then && typeof $.then === "function" && $.catch && typeof $.catch === "function") return C.promise; + if (typeof Map < "u" && $ instanceof Map) return C.map; + if (typeof Set < "u" && $ instanceof Set) return C.set; + if (typeof Date < "u" && $ instanceof Date) return C.date; + return C.object; + default: + return C.unknown; + } +}; +var E = U$.arrayToEnum(["invalid_type", "invalid_literal", "custom", "invalid_union", "invalid_union_discriminator", "invalid_enum_value", "unrecognized_keys", "invalid_arguments", "invalid_return_type", "invalid_date", "invalid_string", "too_small", "too_big", "invalid_intersection_types", "not_multiple_of", "not_finite"]); +var f6 = class _f6 extends Error { + get errors() { + return this.issues; + } + constructor($) { + super(); + this.issues = [], this.addIssue = (J) => { + this.issues = [...this.issues, J]; + }, this.addIssues = (J = []) => { + this.issues = [...this.issues, ...J]; + }; + let Q = new.target.prototype; + if (Object.setPrototypeOf) Object.setPrototypeOf(this, Q); + else this.__proto__ = Q; + this.name = "ZodError", this.issues = $; + } + format($) { + let Q = $ || function(X) { + return X.message; + }, J = { _errors: [] }, Y = (X) => { + for (let W of X.issues) if (W.code === "invalid_union") W.unionErrors.map(Y); + else if (W.code === "invalid_return_type") Y(W.returnTypeError); + else if (W.code === "invalid_arguments") Y(W.argumentsError); + else if (W.path.length === 0) J._errors.push(Q(W)); + else { + let G = J, U = 0; + while (U < W.path.length) { + let H = W.path[U]; + if (U !== W.path.length - 1) G[H] = G[H] || { _errors: [] }; + else G[H] = G[H] || { _errors: [] }, G[H]._errors.push(Q(W)); + G = G[H], U++; + } + } + }; + return Y(this), J; + } + static assert($) { + if (!($ instanceof _f6)) throw Error(`Not a ZodError: ${$}`); + } + toString() { + return this.message; + } + get message() { + return JSON.stringify(this.issues, U$.jsonStringifyReplacer, 2); + } + get isEmpty() { + return this.issues.length === 0; + } + flatten($ = (Q) => Q.message) { + let Q = {}, J = []; + for (let Y of this.issues) if (Y.path.length > 0) { + let X = Y.path[0]; + Q[X] = Q[X] || [], Q[X].push($(Y)); + } else J.push($(Y)); + return { formErrors: J, fieldErrors: Q }; + } + get formErrors() { + return this.flatten(); + } +}; +f6.create = ($) => { + return new f6($); +}; +var Fh = ($, Q) => { + let J; + switch ($.code) { + case E.invalid_type: + if ($.received === C.undefined) J = "Required"; + else J = `Expected ${$.expected}, received ${$.received}`; + break; + case E.invalid_literal: + J = `Invalid literal value, expected ${JSON.stringify($.expected, U$.jsonStringifyReplacer)}`; + break; + case E.unrecognized_keys: + J = `Unrecognized key(s) in object: ${U$.joinValues($.keys, ", ")}`; + break; + case E.invalid_union: + J = "Invalid input"; + break; + case E.invalid_union_discriminator: + J = `Invalid discriminator value. Expected ${U$.joinValues($.options)}`; + break; + case E.invalid_enum_value: + J = `Invalid enum value. Expected ${U$.joinValues($.options)}, received '${$.received}'`; + break; + case E.invalid_arguments: + J = "Invalid function arguments"; + break; + case E.invalid_return_type: + J = "Invalid function return type"; + break; + case E.invalid_date: + J = "Invalid date"; + break; + case E.invalid_string: + if (typeof $.validation === "object") if ("includes" in $.validation) { + if (J = `Invalid input: must include "${$.validation.includes}"`, typeof $.validation.position === "number") J = `${J} at one or more positions greater than or equal to ${$.validation.position}`; + } else if ("startsWith" in $.validation) J = `Invalid input: must start with "${$.validation.startsWith}"`; + else if ("endsWith" in $.validation) J = `Invalid input: must end with "${$.validation.endsWith}"`; + else U$.assertNever($.validation); + else if ($.validation !== "regex") J = `Invalid ${$.validation}`; + else J = "Invalid"; + break; + case E.too_small: + if ($.type === "array") J = `Array must contain ${$.exact ? "exactly" : $.inclusive ? "at least" : "more than"} ${$.minimum} element(s)`; + else if ($.type === "string") J = `String must contain ${$.exact ? "exactly" : $.inclusive ? "at least" : "over"} ${$.minimum} character(s)`; + else if ($.type === "number") J = `Number must be ${$.exact ? "exactly equal to " : $.inclusive ? "greater than or equal to " : "greater than "}${$.minimum}`; + else if ($.type === "bigint") J = `Number must be ${$.exact ? "exactly equal to " : $.inclusive ? "greater than or equal to " : "greater than "}${$.minimum}`; + else if ($.type === "date") J = `Date must be ${$.exact ? "exactly equal to " : $.inclusive ? "greater than or equal to " : "greater than "}${new Date(Number($.minimum))}`; + else J = "Invalid input"; + break; + case E.too_big: + if ($.type === "array") J = `Array must contain ${$.exact ? "exactly" : $.inclusive ? "at most" : "less than"} ${$.maximum} element(s)`; + else if ($.type === "string") J = `String must contain ${$.exact ? "exactly" : $.inclusive ? "at most" : "under"} ${$.maximum} character(s)`; + else if ($.type === "number") J = `Number must be ${$.exact ? "exactly" : $.inclusive ? "less than or equal to" : "less than"} ${$.maximum}`; + else if ($.type === "bigint") J = `BigInt must be ${$.exact ? "exactly" : $.inclusive ? "less than or equal to" : "less than"} ${$.maximum}`; + else if ($.type === "date") J = `Date must be ${$.exact ? "exactly" : $.inclusive ? "smaller than or equal to" : "smaller than"} ${new Date(Number($.maximum))}`; + else J = "Invalid input"; + break; + case E.custom: + J = "Invalid input"; + break; + case E.invalid_intersection_types: + J = "Intersection results could not be merged"; + break; + case E.not_multiple_of: + J = `Number must be a multiple of ${$.multipleOf}`; + break; + case E.not_finite: + J = "Number must be finite"; + break; + default: + J = Q.defaultError, U$.assertNever($); + } + return { message: J }; +}; +var j1 = Fh; +var Zh = j1; +function tQ() { + return Zh; +} +var _X2 = ($) => { + let { data: Q, path: J, errorMaps: Y, issueData: X } = $, W = [...J, ...X.path || []], G = { ...X, path: W }; + if (X.message !== void 0) return { ...X, path: W, message: X.message }; + let U = "", H = Y.filter((q) => !!q).slice().reverse(); + for (let q of H) U = q(G, { data: Q, defaultError: U }).message; + return { ...X, path: W, message: U }; +}; +function f($, Q) { + let J = tQ(), Y = _X2({ issueData: Q, data: $.data, path: $.path, errorMaps: [$.common.contextualErrorMap, $.schemaErrorMap, J, J === j1 ? void 0 : j1].filter((X) => !!X) }); + $.common.issues.push(Y); +} +var U6 = class _U6 { + constructor() { + this.value = "valid"; + } + dirty() { + if (this.value === "valid") this.value = "dirty"; + } + abort() { + if (this.value !== "aborted") this.value = "aborted"; + } + static mergeArray($, Q) { + let J = []; + for (let Y of Q) { + if (Y.status === "aborted") return n; + if (Y.status === "dirty") $.dirty(); + J.push(Y.value); + } + return { status: $.value, value: J }; + } + static async mergeObjectAsync($, Q) { + let J = []; + for (let Y of Q) { + let X = await Y.key, W = await Y.value; + J.push({ key: X, value: W }); + } + return _U6.mergeObjectSync($, J); + } + static mergeObjectSync($, Q) { + let J = {}; + for (let Y of Q) { + let { key: X, value: W } = Y; + if (X.status === "aborted") return n; + if (W.status === "aborted") return n; + if (X.status === "dirty") $.dirty(); + if (W.status === "dirty") $.dirty(); + if (X.value !== "__proto__" && (typeof W.value < "u" || Y.alwaysSet)) J[X.value] = W.value; + } + return { status: $.value, value: J }; + } +}; +var n = Object.freeze({ status: "aborted" }); +var v8 = ($) => ({ status: "dirty", value: $ }); +var z6 = ($) => ({ status: "valid", value: $ }); +var TH = ($) => $.status === "aborted"; +var xH = ($) => $.status === "dirty"; +var Z0 = ($) => $.status === "valid"; +var aQ = ($) => typeof Promise < "u" && $ instanceof Promise; +var m; +(function($) { + $.errToObj = (Q) => typeof Q === "string" ? { message: Q } : Q || {}, $.toString = (Q) => typeof Q === "string" ? Q : Q == null ? void 0 : Q.message; +})(m || (m = {})); +var H4 = class { + constructor($, Q, J, Y) { + this._cachedPath = [], this.parent = $, this.data = Q, this._path = J, this._key = Y; + } + get path() { + if (!this._cachedPath.length) if (Array.isArray(this._key)) this._cachedPath.push(...this._path, ...this._key); + else this._cachedPath.push(...this._path, this._key); + return this._cachedPath; + } +}; +var eZ = ($, Q) => { + if (Z0(Q)) return { success: true, data: Q.value }; + else { + if (!$.common.issues.length) throw Error("Validation failed but no issues detected."); + return { success: false, get error() { + if (this._error) return this._error; + let J = new f6($.common.issues); + return this._error = J, this._error; + } }; + } +}; +function e($) { + if (!$) return {}; + let { errorMap: Q, invalid_type_error: J, required_error: Y, description: X } = $; + if (Q && (J || Y)) throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`); + if (Q) return { errorMap: Q, description: X }; + return { errorMap: (G, U) => { + var _a5, _b3; + let { message: H } = $; + if (G.code === "invalid_enum_value") return { message: H != null ? H : U.defaultError }; + if (typeof U.data > "u") return { message: (_a5 = H != null ? H : Y) != null ? _a5 : U.defaultError }; + if (G.code !== "invalid_type") return { message: U.defaultError }; + return { message: (_b3 = H != null ? H : J) != null ? _b3 : U.defaultError }; + }, description: X }; +} +var Y$ = class { + get description() { + return this._def.description; + } + _getType($) { + return l4($.data); + } + _getOrReturnCtx($, Q) { + return Q || { common: $.parent.common, data: $.data, parsedType: l4($.data), schemaErrorMap: this._def.errorMap, path: $.path, parent: $.parent }; + } + _processInputParams($) { + return { status: new U6(), ctx: { common: $.parent.common, data: $.data, parsedType: l4($.data), schemaErrorMap: this._def.errorMap, path: $.path, parent: $.parent } }; + } + _parseSync($) { + let Q = this._parse($); + if (aQ(Q)) throw Error("Synchronous parse encountered promise."); + return Q; + } + _parseAsync($) { + let Q = this._parse($); + return Promise.resolve(Q); + } + parse($, Q) { + let J = this.safeParse($, Q); + if (J.success) return J.data; + throw J.error; + } + safeParse($, Q) { + var _a5; + let J = { common: { issues: [], async: (_a5 = Q == null ? void 0 : Q.async) != null ? _a5 : false, contextualErrorMap: Q == null ? void 0 : Q.errorMap }, path: (Q == null ? void 0 : Q.path) || [], schemaErrorMap: this._def.errorMap, parent: null, data: $, parsedType: l4($) }, Y = this._parseSync({ data: $, path: J.path, parent: J }); + return eZ(J, Y); + } + "~validate"($) { + var _a5, _b3; + let Q = { common: { issues: [], async: !!this["~standard"].async }, path: [], schemaErrorMap: this._def.errorMap, parent: null, data: $, parsedType: l4($) }; + if (!this["~standard"].async) try { + let J = this._parseSync({ data: $, path: [], parent: Q }); + return Z0(J) ? { value: J.value } : { issues: Q.common.issues }; + } catch (J) { + if ((_b3 = (_a5 = J == null ? void 0 : J.message) == null ? void 0 : _a5.toLowerCase()) == null ? void 0 : _b3.includes("encountered")) this["~standard"].async = true; + Q.common = { issues: [], async: true }; + } + return this._parseAsync({ data: $, path: [], parent: Q }).then((J) => Z0(J) ? { value: J.value } : { issues: Q.common.issues }); + } + async parseAsync($, Q) { + let J = await this.safeParseAsync($, Q); + if (J.success) return J.data; + throw J.error; + } + async safeParseAsync($, Q) { + let J = { common: { issues: [], contextualErrorMap: Q == null ? void 0 : Q.errorMap, async: true }, path: (Q == null ? void 0 : Q.path) || [], schemaErrorMap: this._def.errorMap, parent: null, data: $, parsedType: l4($) }, Y = this._parse({ data: $, path: J.path, parent: J }), X = await (aQ(Y) ? Y : Promise.resolve(Y)); + return eZ(J, X); + } + refine($, Q) { + let J = (Y) => { + if (typeof Q === "string" || typeof Q > "u") return { message: Q }; + else if (typeof Q === "function") return Q(Y); + else return Q; + }; + return this._refinement((Y, X) => { + let W = $(Y), G = () => X.addIssue({ code: E.custom, ...J(Y) }); + if (typeof Promise < "u" && W instanceof Promise) return W.then((U) => { + if (!U) return G(), false; + else return true; + }); + if (!W) return G(), false; + else return true; + }); + } + refinement($, Q) { + return this._refinement((J, Y) => { + if (!$(J)) return Y.addIssue(typeof Q === "function" ? Q(J, Y) : Q), false; + else return true; + }); + } + _refinement($) { + return new P4({ schema: this, typeName: _.ZodEffects, effect: { type: "refinement", refinement: $ } }); + } + superRefine($) { + return this._refinement($); + } + constructor($) { + this.spa = this.safeParseAsync, this._def = $, this.parse = this.parse.bind(this), this.safeParse = this.safeParse.bind(this), this.parseAsync = this.parseAsync.bind(this), this.safeParseAsync = this.safeParseAsync.bind(this), this.spa = this.spa.bind(this), this.refine = this.refine.bind(this), this.refinement = this.refinement.bind(this), this.superRefine = this.superRefine.bind(this), this.optional = this.optional.bind(this), this.nullable = this.nullable.bind(this), this.nullish = this.nullish.bind(this), this.array = this.array.bind(this), this.promise = this.promise.bind(this), this.or = this.or.bind(this), this.and = this.and.bind(this), this.transform = this.transform.bind(this), this.brand = this.brand.bind(this), this.default = this.default.bind(this), this.catch = this.catch.bind(this), this.describe = this.describe.bind(this), this.pipe = this.pipe.bind(this), this.readonly = this.readonly.bind(this), this.isNullable = this.isNullable.bind(this), this.isOptional = this.isOptional.bind(this), this["~standard"] = { version: 1, vendor: "zod", validate: (Q) => this["~validate"](Q) }; + } + optional() { + return o6.create(this, this._def); + } + nullable() { + return A1.create(this, this._def); + } + nullish() { + return this.nullable().optional(); + } + array() { + return R4.create(this); + } + promise() { + return f8.create(this, this._def); + } + or($) { + return J7.create([this, $], this._def); + } + and($) { + return X7.create(this, $, this._def); + } + transform($) { + return new P4({ ...e(this._def), schema: this, typeName: _.ZodEffects, effect: { type: "transform", transform: $ } }); + } + default($) { + let Q = typeof $ === "function" ? $ : () => $; + return new U7({ ...e(this._def), innerType: this, defaultValue: Q, typeName: _.ZodDefault }); + } + brand() { + return new hH({ typeName: _.ZodBranded, type: this, ...e(this._def) }); + } + catch($) { + let Q = typeof $ === "function" ? $ : () => $; + return new H7({ ...e(this._def), innerType: this, catchValue: Q, typeName: _.ZodCatch }); + } + describe($) { + return new this.constructor({ ...this._def, description: $ }); + } + pipe($) { + return fX.create(this, $); + } + readonly() { + return K7.create(this); + } + isOptional() { + return this.safeParse(void 0).success; + } + isNullable() { + return this.safeParse(null).success; + } +}; +var Mh = /^c[^\s-]{8,}$/i; +var Lh = /^[0-9a-z]+$/; +var jh = /^[0-9A-HJKMNP-TV-Z]{26}$/i; +var Ah = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i; +var Ih = /^[a-z0-9_-]{21}$/i; +var Rh = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/; +var Ph = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/; +var Eh = /^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i; +var bh = "^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$"; +var yH; +var _h = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/; +var kh = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/; +var Sh = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/; +var vh = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/; +var Ch = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/; +var Th = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/; +var $M = "((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))"; +var xh = new RegExp(`^${$M}$`); +function QM($) { + let Q = "[0-5]\\d"; + if ($.precision) Q = `${Q}\\.\\d{${$.precision}}`; + else if ($.precision == null) Q = `${Q}(\\.\\d+)?`; + let J = $.precision ? "+" : "?"; + return `([01]\\d|2[0-3]):[0-5]\\d(:${Q})${J}`; +} +function yh($) { + return new RegExp(`^${QM($)}$`); +} +function fh($) { + let Q = `${$M}T${QM($)}`, J = []; + if (J.push($.local ? "Z?" : "Z"), $.offset) J.push("([+-]\\d{2}:?\\d{2})"); + return Q = `${Q}(${J.join("|")})`, new RegExp(`^${Q}$`); +} +function gh($, Q) { + if ((Q === "v4" || !Q) && _h.test($)) return true; + if ((Q === "v6" || !Q) && Sh.test($)) return true; + return false; +} +function hh($, Q) { + if (!Rh.test($)) return false; + try { + let [J] = $.split("."); + if (!J) return false; + let Y = J.replace(/-/g, "+").replace(/_/g, "/").padEnd(J.length + (4 - J.length % 4) % 4, "="), X = JSON.parse(atob(Y)); + if (typeof X !== "object" || X === null) return false; + if ("typ" in X && (X == null ? void 0 : X.typ) !== "JWT") return false; + if (!X.alg) return false; + if (Q && X.alg !== Q) return false; + return true; + } catch (e2) { + return false; + } +} +function uh($, Q) { + if ((Q === "v4" || !Q) && kh.test($)) return true; + if ((Q === "v6" || !Q) && vh.test($)) return true; + return false; +} +var p4 = class _p4 extends Y$ { + _parse($) { + if (this._def.coerce) $.data = String($.data); + if (this._getType($) !== C.string) { + let X = this._getOrReturnCtx($); + return f(X, { code: E.invalid_type, expected: C.string, received: X.parsedType }), n; + } + let J = new U6(), Y = void 0; + for (let X of this._def.checks) if (X.kind === "min") { + if ($.data.length < X.value) Y = this._getOrReturnCtx($, Y), f(Y, { code: E.too_small, minimum: X.value, type: "string", inclusive: true, exact: false, message: X.message }), J.dirty(); + } else if (X.kind === "max") { + if ($.data.length > X.value) Y = this._getOrReturnCtx($, Y), f(Y, { code: E.too_big, maximum: X.value, type: "string", inclusive: true, exact: false, message: X.message }), J.dirty(); + } else if (X.kind === "length") { + let W = $.data.length > X.value, G = $.data.length < X.value; + if (W || G) { + if (Y = this._getOrReturnCtx($, Y), W) f(Y, { code: E.too_big, maximum: X.value, type: "string", inclusive: true, exact: true, message: X.message }); + else if (G) f(Y, { code: E.too_small, minimum: X.value, type: "string", inclusive: true, exact: true, message: X.message }); + J.dirty(); + } + } else if (X.kind === "email") { + if (!Eh.test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "email", code: E.invalid_string, message: X.message }), J.dirty(); + } else if (X.kind === "emoji") { + if (!yH) yH = new RegExp(bh, "u"); + if (!yH.test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "emoji", code: E.invalid_string, message: X.message }), J.dirty(); + } else if (X.kind === "uuid") { + if (!Ah.test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "uuid", code: E.invalid_string, message: X.message }), J.dirty(); + } else if (X.kind === "nanoid") { + if (!Ih.test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "nanoid", code: E.invalid_string, message: X.message }), J.dirty(); + } else if (X.kind === "cuid") { + if (!Mh.test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "cuid", code: E.invalid_string, message: X.message }), J.dirty(); + } else if (X.kind === "cuid2") { + if (!Lh.test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "cuid2", code: E.invalid_string, message: X.message }), J.dirty(); + } else if (X.kind === "ulid") { + if (!jh.test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "ulid", code: E.invalid_string, message: X.message }), J.dirty(); + } else if (X.kind === "url") try { + new URL($.data); + } catch (e2) { + Y = this._getOrReturnCtx($, Y), f(Y, { validation: "url", code: E.invalid_string, message: X.message }), J.dirty(); + } + else if (X.kind === "regex") { + if (X.regex.lastIndex = 0, !X.regex.test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "regex", code: E.invalid_string, message: X.message }), J.dirty(); + } else if (X.kind === "trim") $.data = $.data.trim(); + else if (X.kind === "includes") { + if (!$.data.includes(X.value, X.position)) Y = this._getOrReturnCtx($, Y), f(Y, { code: E.invalid_string, validation: { includes: X.value, position: X.position }, message: X.message }), J.dirty(); + } else if (X.kind === "toLowerCase") $.data = $.data.toLowerCase(); + else if (X.kind === "toUpperCase") $.data = $.data.toUpperCase(); + else if (X.kind === "startsWith") { + if (!$.data.startsWith(X.value)) Y = this._getOrReturnCtx($, Y), f(Y, { code: E.invalid_string, validation: { startsWith: X.value }, message: X.message }), J.dirty(); + } else if (X.kind === "endsWith") { + if (!$.data.endsWith(X.value)) Y = this._getOrReturnCtx($, Y), f(Y, { code: E.invalid_string, validation: { endsWith: X.value }, message: X.message }), J.dirty(); + } else if (X.kind === "datetime") { + if (!fh(X).test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { code: E.invalid_string, validation: "datetime", message: X.message }), J.dirty(); + } else if (X.kind === "date") { + if (!xh.test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { code: E.invalid_string, validation: "date", message: X.message }), J.dirty(); + } else if (X.kind === "time") { + if (!yh(X).test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { code: E.invalid_string, validation: "time", message: X.message }), J.dirty(); + } else if (X.kind === "duration") { + if (!Ph.test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "duration", code: E.invalid_string, message: X.message }), J.dirty(); + } else if (X.kind === "ip") { + if (!gh($.data, X.version)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "ip", code: E.invalid_string, message: X.message }), J.dirty(); + } else if (X.kind === "jwt") { + if (!hh($.data, X.alg)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "jwt", code: E.invalid_string, message: X.message }), J.dirty(); + } else if (X.kind === "cidr") { + if (!uh($.data, X.version)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "cidr", code: E.invalid_string, message: X.message }), J.dirty(); + } else if (X.kind === "base64") { + if (!Ch.test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "base64", code: E.invalid_string, message: X.message }), J.dirty(); + } else if (X.kind === "base64url") { + if (!Th.test($.data)) Y = this._getOrReturnCtx($, Y), f(Y, { validation: "base64url", code: E.invalid_string, message: X.message }), J.dirty(); + } else U$.assertNever(X); + return { status: J.value, value: $.data }; + } + _regex($, Q, J) { + return this.refinement((Y) => $.test(Y), { validation: Q, code: E.invalid_string, ...m.errToObj(J) }); + } + _addCheck($) { + return new _p4({ ...this._def, checks: [...this._def.checks, $] }); + } + email($) { + return this._addCheck({ kind: "email", ...m.errToObj($) }); + } + url($) { + return this._addCheck({ kind: "url", ...m.errToObj($) }); + } + emoji($) { + return this._addCheck({ kind: "emoji", ...m.errToObj($) }); + } + uuid($) { + return this._addCheck({ kind: "uuid", ...m.errToObj($) }); + } + nanoid($) { + return this._addCheck({ kind: "nanoid", ...m.errToObj($) }); + } + cuid($) { + return this._addCheck({ kind: "cuid", ...m.errToObj($) }); + } + cuid2($) { + return this._addCheck({ kind: "cuid2", ...m.errToObj($) }); + } + ulid($) { + return this._addCheck({ kind: "ulid", ...m.errToObj($) }); + } + base64($) { + return this._addCheck({ kind: "base64", ...m.errToObj($) }); + } + base64url($) { + return this._addCheck({ kind: "base64url", ...m.errToObj($) }); + } + jwt($) { + return this._addCheck({ kind: "jwt", ...m.errToObj($) }); + } + ip($) { + return this._addCheck({ kind: "ip", ...m.errToObj($) }); + } + cidr($) { + return this._addCheck({ kind: "cidr", ...m.errToObj($) }); + } + datetime($) { + var _a5, _b3; + if (typeof $ === "string") return this._addCheck({ kind: "datetime", precision: null, offset: false, local: false, message: $ }); + return this._addCheck({ kind: "datetime", precision: typeof ($ == null ? void 0 : $.precision) > "u" ? null : $ == null ? void 0 : $.precision, offset: (_a5 = $ == null ? void 0 : $.offset) != null ? _a5 : false, local: (_b3 = $ == null ? void 0 : $.local) != null ? _b3 : false, ...m.errToObj($ == null ? void 0 : $.message) }); + } + date($) { + return this._addCheck({ kind: "date", message: $ }); + } + time($) { + if (typeof $ === "string") return this._addCheck({ kind: "time", precision: null, message: $ }); + return this._addCheck({ kind: "time", precision: typeof ($ == null ? void 0 : $.precision) > "u" ? null : $ == null ? void 0 : $.precision, ...m.errToObj($ == null ? void 0 : $.message) }); + } + duration($) { + return this._addCheck({ kind: "duration", ...m.errToObj($) }); + } + regex($, Q) { + return this._addCheck({ kind: "regex", regex: $, ...m.errToObj(Q) }); + } + includes($, Q) { + return this._addCheck({ kind: "includes", value: $, position: Q == null ? void 0 : Q.position, ...m.errToObj(Q == null ? void 0 : Q.message) }); + } + startsWith($, Q) { + return this._addCheck({ kind: "startsWith", value: $, ...m.errToObj(Q) }); + } + endsWith($, Q) { + return this._addCheck({ kind: "endsWith", value: $, ...m.errToObj(Q) }); + } + min($, Q) { + return this._addCheck({ kind: "min", value: $, ...m.errToObj(Q) }); + } + max($, Q) { + return this._addCheck({ kind: "max", value: $, ...m.errToObj(Q) }); + } + length($, Q) { + return this._addCheck({ kind: "length", value: $, ...m.errToObj(Q) }); + } + nonempty($) { + return this.min(1, m.errToObj($)); + } + trim() { + return new _p4({ ...this._def, checks: [...this._def.checks, { kind: "trim" }] }); + } + toLowerCase() { + return new _p4({ ...this._def, checks: [...this._def.checks, { kind: "toLowerCase" }] }); + } + toUpperCase() { + return new _p4({ ...this._def, checks: [...this._def.checks, { kind: "toUpperCase" }] }); + } + get isDatetime() { + return !!this._def.checks.find(($) => $.kind === "datetime"); + } + get isDate() { + return !!this._def.checks.find(($) => $.kind === "date"); + } + get isTime() { + return !!this._def.checks.find(($) => $.kind === "time"); + } + get isDuration() { + return !!this._def.checks.find(($) => $.kind === "duration"); + } + get isEmail() { + return !!this._def.checks.find(($) => $.kind === "email"); + } + get isURL() { + return !!this._def.checks.find(($) => $.kind === "url"); + } + get isEmoji() { + return !!this._def.checks.find(($) => $.kind === "emoji"); + } + get isUUID() { + return !!this._def.checks.find(($) => $.kind === "uuid"); + } + get isNANOID() { + return !!this._def.checks.find(($) => $.kind === "nanoid"); + } + get isCUID() { + return !!this._def.checks.find(($) => $.kind === "cuid"); + } + get isCUID2() { + return !!this._def.checks.find(($) => $.kind === "cuid2"); + } + get isULID() { + return !!this._def.checks.find(($) => $.kind === "ulid"); + } + get isIP() { + return !!this._def.checks.find(($) => $.kind === "ip"); + } + get isCIDR() { + return !!this._def.checks.find(($) => $.kind === "cidr"); + } + get isBase64() { + return !!this._def.checks.find(($) => $.kind === "base64"); + } + get isBase64url() { + return !!this._def.checks.find(($) => $.kind === "base64url"); + } + get minLength() { + let $ = null; + for (let Q of this._def.checks) if (Q.kind === "min") { + if ($ === null || Q.value > $) $ = Q.value; + } + return $; + } + get maxLength() { + let $ = null; + for (let Q of this._def.checks) if (Q.kind === "max") { + if ($ === null || Q.value < $) $ = Q.value; + } + return $; + } +}; +p4.create = ($) => { + var _a5; + return new p4({ checks: [], typeName: _.ZodString, coerce: (_a5 = $ == null ? void 0 : $.coerce) != null ? _a5 : false, ...e($) }); +}; +function mh($, Q) { + let J = ($.toString().split(".")[1] || "").length, Y = (Q.toString().split(".")[1] || "").length, X = J > Y ? J : Y, W = Number.parseInt($.toFixed(X).replace(".", "")), G = Number.parseInt(Q.toFixed(X).replace(".", "")); + return W % G / 10 ** X; +} +var T8 = class _T8 extends Y$ { + constructor() { + super(...arguments); + this.min = this.gte, this.max = this.lte, this.step = this.multipleOf; + } + _parse($) { + if (this._def.coerce) $.data = Number($.data); + if (this._getType($) !== C.number) { + let X = this._getOrReturnCtx($); + return f(X, { code: E.invalid_type, expected: C.number, received: X.parsedType }), n; + } + let J = void 0, Y = new U6(); + for (let X of this._def.checks) if (X.kind === "int") { + if (!U$.isInteger($.data)) J = this._getOrReturnCtx($, J), f(J, { code: E.invalid_type, expected: "integer", received: "float", message: X.message }), Y.dirty(); + } else if (X.kind === "min") { + if (X.inclusive ? $.data < X.value : $.data <= X.value) J = this._getOrReturnCtx($, J), f(J, { code: E.too_small, minimum: X.value, type: "number", inclusive: X.inclusive, exact: false, message: X.message }), Y.dirty(); + } else if (X.kind === "max") { + if (X.inclusive ? $.data > X.value : $.data >= X.value) J = this._getOrReturnCtx($, J), f(J, { code: E.too_big, maximum: X.value, type: "number", inclusive: X.inclusive, exact: false, message: X.message }), Y.dirty(); + } else if (X.kind === "multipleOf") { + if (mh($.data, X.value) !== 0) J = this._getOrReturnCtx($, J), f(J, { code: E.not_multiple_of, multipleOf: X.value, message: X.message }), Y.dirty(); + } else if (X.kind === "finite") { + if (!Number.isFinite($.data)) J = this._getOrReturnCtx($, J), f(J, { code: E.not_finite, message: X.message }), Y.dirty(); + } else U$.assertNever(X); + return { status: Y.value, value: $.data }; + } + gte($, Q) { + return this.setLimit("min", $, true, m.toString(Q)); + } + gt($, Q) { + return this.setLimit("min", $, false, m.toString(Q)); + } + lte($, Q) { + return this.setLimit("max", $, true, m.toString(Q)); + } + lt($, Q) { + return this.setLimit("max", $, false, m.toString(Q)); + } + setLimit($, Q, J, Y) { + return new _T8({ ...this._def, checks: [...this._def.checks, { kind: $, value: Q, inclusive: J, message: m.toString(Y) }] }); + } + _addCheck($) { + return new _T8({ ...this._def, checks: [...this._def.checks, $] }); + } + int($) { + return this._addCheck({ kind: "int", message: m.toString($) }); + } + positive($) { + return this._addCheck({ kind: "min", value: 0, inclusive: false, message: m.toString($) }); + } + negative($) { + return this._addCheck({ kind: "max", value: 0, inclusive: false, message: m.toString($) }); + } + nonpositive($) { + return this._addCheck({ kind: "max", value: 0, inclusive: true, message: m.toString($) }); + } + nonnegative($) { + return this._addCheck({ kind: "min", value: 0, inclusive: true, message: m.toString($) }); + } + multipleOf($, Q) { + return this._addCheck({ kind: "multipleOf", value: $, message: m.toString(Q) }); + } + finite($) { + return this._addCheck({ kind: "finite", message: m.toString($) }); + } + safe($) { + return this._addCheck({ kind: "min", inclusive: true, value: Number.MIN_SAFE_INTEGER, message: m.toString($) })._addCheck({ kind: "max", inclusive: true, value: Number.MAX_SAFE_INTEGER, message: m.toString($) }); + } + get minValue() { + let $ = null; + for (let Q of this._def.checks) if (Q.kind === "min") { + if ($ === null || Q.value > $) $ = Q.value; + } + return $; + } + get maxValue() { + let $ = null; + for (let Q of this._def.checks) if (Q.kind === "max") { + if ($ === null || Q.value < $) $ = Q.value; + } + return $; + } + get isInt() { + return !!this._def.checks.find(($) => $.kind === "int" || $.kind === "multipleOf" && U$.isInteger($.value)); + } + get isFinite() { + let $ = null, Q = null; + for (let J of this._def.checks) if (J.kind === "finite" || J.kind === "int" || J.kind === "multipleOf") return true; + else if (J.kind === "min") { + if (Q === null || J.value > Q) Q = J.value; + } else if (J.kind === "max") { + if ($ === null || J.value < $) $ = J.value; + } + return Number.isFinite(Q) && Number.isFinite($); + } +}; +T8.create = ($) => { + return new T8({ checks: [], typeName: _.ZodNumber, coerce: ($ == null ? void 0 : $.coerce) || false, ...e($) }); +}; +var x8 = class _x8 extends Y$ { + constructor() { + super(...arguments); + this.min = this.gte, this.max = this.lte; + } + _parse($) { + if (this._def.coerce) try { + $.data = BigInt($.data); + } catch (e2) { + return this._getInvalidInput($); + } + if (this._getType($) !== C.bigint) return this._getInvalidInput($); + let J = void 0, Y = new U6(); + for (let X of this._def.checks) if (X.kind === "min") { + if (X.inclusive ? $.data < X.value : $.data <= X.value) J = this._getOrReturnCtx($, J), f(J, { code: E.too_small, type: "bigint", minimum: X.value, inclusive: X.inclusive, message: X.message }), Y.dirty(); + } else if (X.kind === "max") { + if (X.inclusive ? $.data > X.value : $.data >= X.value) J = this._getOrReturnCtx($, J), f(J, { code: E.too_big, type: "bigint", maximum: X.value, inclusive: X.inclusive, message: X.message }), Y.dirty(); + } else if (X.kind === "multipleOf") { + if ($.data % X.value !== BigInt(0)) J = this._getOrReturnCtx($, J), f(J, { code: E.not_multiple_of, multipleOf: X.value, message: X.message }), Y.dirty(); + } else U$.assertNever(X); + return { status: Y.value, value: $.data }; + } + _getInvalidInput($) { + let Q = this._getOrReturnCtx($); + return f(Q, { code: E.invalid_type, expected: C.bigint, received: Q.parsedType }), n; + } + gte($, Q) { + return this.setLimit("min", $, true, m.toString(Q)); + } + gt($, Q) { + return this.setLimit("min", $, false, m.toString(Q)); + } + lte($, Q) { + return this.setLimit("max", $, true, m.toString(Q)); + } + lt($, Q) { + return this.setLimit("max", $, false, m.toString(Q)); + } + setLimit($, Q, J, Y) { + return new _x8({ ...this._def, checks: [...this._def.checks, { kind: $, value: Q, inclusive: J, message: m.toString(Y) }] }); + } + _addCheck($) { + return new _x8({ ...this._def, checks: [...this._def.checks, $] }); + } + positive($) { + return this._addCheck({ kind: "min", value: BigInt(0), inclusive: false, message: m.toString($) }); + } + negative($) { + return this._addCheck({ kind: "max", value: BigInt(0), inclusive: false, message: m.toString($) }); + } + nonpositive($) { + return this._addCheck({ kind: "max", value: BigInt(0), inclusive: true, message: m.toString($) }); + } + nonnegative($) { + return this._addCheck({ kind: "min", value: BigInt(0), inclusive: true, message: m.toString($) }); + } + multipleOf($, Q) { + return this._addCheck({ kind: "multipleOf", value: $, message: m.toString(Q) }); + } + get minValue() { + let $ = null; + for (let Q of this._def.checks) if (Q.kind === "min") { + if ($ === null || Q.value > $) $ = Q.value; + } + return $; + } + get maxValue() { + let $ = null; + for (let Q of this._def.checks) if (Q.kind === "max") { + if ($ === null || Q.value < $) $ = Q.value; + } + return $; + } +}; +x8.create = ($) => { + var _a5; + return new x8({ checks: [], typeName: _.ZodBigInt, coerce: (_a5 = $ == null ? void 0 : $.coerce) != null ? _a5 : false, ...e($) }); +}; +var kX = class extends Y$ { + _parse($) { + if (this._def.coerce) $.data = Boolean($.data); + if (this._getType($) !== C.boolean) { + let J = this._getOrReturnCtx($); + return f(J, { code: E.invalid_type, expected: C.boolean, received: J.parsedType }), n; + } + return z6($.data); + } +}; +kX.create = ($) => { + return new kX({ typeName: _.ZodBoolean, coerce: ($ == null ? void 0 : $.coerce) || false, ...e($) }); +}; +var eQ = class _eQ extends Y$ { + _parse($) { + if (this._def.coerce) $.data = new Date($.data); + if (this._getType($) !== C.date) { + let X = this._getOrReturnCtx($); + return f(X, { code: E.invalid_type, expected: C.date, received: X.parsedType }), n; + } + if (Number.isNaN($.data.getTime())) { + let X = this._getOrReturnCtx($); + return f(X, { code: E.invalid_date }), n; + } + let J = new U6(), Y = void 0; + for (let X of this._def.checks) if (X.kind === "min") { + if ($.data.getTime() < X.value) Y = this._getOrReturnCtx($, Y), f(Y, { code: E.too_small, message: X.message, inclusive: true, exact: false, minimum: X.value, type: "date" }), J.dirty(); + } else if (X.kind === "max") { + if ($.data.getTime() > X.value) Y = this._getOrReturnCtx($, Y), f(Y, { code: E.too_big, message: X.message, inclusive: true, exact: false, maximum: X.value, type: "date" }), J.dirty(); + } else U$.assertNever(X); + return { status: J.value, value: new Date($.data.getTime()) }; + } + _addCheck($) { + return new _eQ({ ...this._def, checks: [...this._def.checks, $] }); + } + min($, Q) { + return this._addCheck({ kind: "min", value: $.getTime(), message: m.toString(Q) }); + } + max($, Q) { + return this._addCheck({ kind: "max", value: $.getTime(), message: m.toString(Q) }); + } + get minDate() { + let $ = null; + for (let Q of this._def.checks) if (Q.kind === "min") { + if ($ === null || Q.value > $) $ = Q.value; + } + return $ != null ? new Date($) : null; + } + get maxDate() { + let $ = null; + for (let Q of this._def.checks) if (Q.kind === "max") { + if ($ === null || Q.value < $) $ = Q.value; + } + return $ != null ? new Date($) : null; + } +}; +eQ.create = ($) => { + return new eQ({ checks: [], coerce: ($ == null ? void 0 : $.coerce) || false, typeName: _.ZodDate, ...e($) }); +}; +var SX = class extends Y$ { + _parse($) { + if (this._getType($) !== C.symbol) { + let J = this._getOrReturnCtx($); + return f(J, { code: E.invalid_type, expected: C.symbol, received: J.parsedType }), n; + } + return z6($.data); + } +}; +SX.create = ($) => { + return new SX({ typeName: _.ZodSymbol, ...e($) }); +}; +var $7 = class extends Y$ { + _parse($) { + if (this._getType($) !== C.undefined) { + let J = this._getOrReturnCtx($); + return f(J, { code: E.invalid_type, expected: C.undefined, received: J.parsedType }), n; + } + return z6($.data); + } +}; +$7.create = ($) => { + return new $7({ typeName: _.ZodUndefined, ...e($) }); +}; +var Q7 = class extends Y$ { + _parse($) { + if (this._getType($) !== C.null) { + let J = this._getOrReturnCtx($); + return f(J, { code: E.invalid_type, expected: C.null, received: J.parsedType }), n; + } + return z6($.data); + } +}; +Q7.create = ($) => { + return new Q7({ typeName: _.ZodNull, ...e($) }); +}; +var vX = class extends Y$ { + constructor() { + super(...arguments); + this._any = true; + } + _parse($) { + return z6($.data); + } +}; +vX.create = ($) => { + return new vX({ typeName: _.ZodAny, ...e($) }); +}; +var M0 = class extends Y$ { + constructor() { + super(...arguments); + this._unknown = true; + } + _parse($) { + return z6($.data); + } +}; +M0.create = ($) => { + return new M0({ typeName: _.ZodUnknown, ...e($) }); +}; +var d4 = class extends Y$ { + _parse($) { + let Q = this._getOrReturnCtx($); + return f(Q, { code: E.invalid_type, expected: C.never, received: Q.parsedType }), n; + } +}; +d4.create = ($) => { + return new d4({ typeName: _.ZodNever, ...e($) }); +}; +var CX = class extends Y$ { + _parse($) { + if (this._getType($) !== C.undefined) { + let J = this._getOrReturnCtx($); + return f(J, { code: E.invalid_type, expected: C.void, received: J.parsedType }), n; + } + return z6($.data); + } +}; +CX.create = ($) => { + return new CX({ typeName: _.ZodVoid, ...e($) }); +}; +var R4 = class _R4 extends Y$ { + _parse($) { + let { ctx: Q, status: J } = this._processInputParams($), Y = this._def; + if (Q.parsedType !== C.array) return f(Q, { code: E.invalid_type, expected: C.array, received: Q.parsedType }), n; + if (Y.exactLength !== null) { + let W = Q.data.length > Y.exactLength.value, G = Q.data.length < Y.exactLength.value; + if (W || G) f(Q, { code: W ? E.too_big : E.too_small, minimum: G ? Y.exactLength.value : void 0, maximum: W ? Y.exactLength.value : void 0, type: "array", inclusive: true, exact: true, message: Y.exactLength.message }), J.dirty(); + } + if (Y.minLength !== null) { + if (Q.data.length < Y.minLength.value) f(Q, { code: E.too_small, minimum: Y.minLength.value, type: "array", inclusive: true, exact: false, message: Y.minLength.message }), J.dirty(); + } + if (Y.maxLength !== null) { + if (Q.data.length > Y.maxLength.value) f(Q, { code: E.too_big, maximum: Y.maxLength.value, type: "array", inclusive: true, exact: false, message: Y.maxLength.message }), J.dirty(); + } + if (Q.common.async) return Promise.all([...Q.data].map((W, G) => { + return Y.type._parseAsync(new H4(Q, W, Q.path, G)); + })).then((W) => { + return U6.mergeArray(J, W); + }); + let X = [...Q.data].map((W, G) => { + return Y.type._parseSync(new H4(Q, W, Q.path, G)); + }); + return U6.mergeArray(J, X); + } + get element() { + return this._def.type; + } + min($, Q) { + return new _R4({ ...this._def, minLength: { value: $, message: m.toString(Q) } }); + } + max($, Q) { + return new _R4({ ...this._def, maxLength: { value: $, message: m.toString(Q) } }); + } + length($, Q) { + return new _R4({ ...this._def, exactLength: { value: $, message: m.toString(Q) } }); + } + nonempty($) { + return this.min(1, $); + } +}; +R4.create = ($, Q) => { + return new R4({ type: $, minLength: null, maxLength: null, exactLength: null, typeName: _.ZodArray, ...e(Q) }); +}; +function C8($) { + if ($ instanceof g$) { + let Q = {}; + for (let J in $.shape) { + let Y = $.shape[J]; + Q[J] = o6.create(C8(Y)); + } + return new g$({ ...$._def, shape: () => Q }); + } else if ($ instanceof R4) return new R4({ ...$._def, type: C8($.element) }); + else if ($ instanceof o6) return o6.create(C8($.unwrap())); + else if ($ instanceof A1) return A1.create(C8($.unwrap())); + else if ($ instanceof i4) return i4.create($.items.map((Q) => C8(Q))); + else return $; +} +var g$ = class _g$ extends Y$ { + constructor() { + super(...arguments); + this._cached = null, this.nonstrict = this.passthrough, this.augment = this.extend; + } + _getCached() { + if (this._cached !== null) return this._cached; + let $ = this._def.shape(), Q = U$.objectKeys($); + return this._cached = { shape: $, keys: Q }, this._cached; + } + _parse($) { + if (this._getType($) !== C.object) { + let H = this._getOrReturnCtx($); + return f(H, { code: E.invalid_type, expected: C.object, received: H.parsedType }), n; + } + let { status: J, ctx: Y } = this._processInputParams($), { shape: X, keys: W } = this._getCached(), G = []; + if (!(this._def.catchall instanceof d4 && this._def.unknownKeys === "strip")) { + for (let H in Y.data) if (!W.includes(H)) G.push(H); + } + let U = []; + for (let H of W) { + let q = X[H], V = Y.data[H]; + U.push({ key: { status: "valid", value: H }, value: q._parse(new H4(Y, V, Y.path, H)), alwaysSet: H in Y.data }); + } + if (this._def.catchall instanceof d4) { + let H = this._def.unknownKeys; + if (H === "passthrough") for (let q of G) U.push({ key: { status: "valid", value: q }, value: { status: "valid", value: Y.data[q] } }); + else if (H === "strict") { + if (G.length > 0) f(Y, { code: E.unrecognized_keys, keys: G }), J.dirty(); + } else if (H === "strip") ; + else throw Error("Internal ZodObject error: invalid unknownKeys value."); + } else { + let H = this._def.catchall; + for (let q of G) { + let V = Y.data[q]; + U.push({ key: { status: "valid", value: q }, value: H._parse(new H4(Y, V, Y.path, q)), alwaysSet: q in Y.data }); + } + } + if (Y.common.async) return Promise.resolve().then(async () => { + let H = []; + for (let q of U) { + let V = await q.key, B = await q.value; + H.push({ key: V, value: B, alwaysSet: q.alwaysSet }); + } + return H; + }).then((H) => { + return U6.mergeObjectSync(J, H); + }); + else return U6.mergeObjectSync(J, U); + } + get shape() { + return this._def.shape(); + } + strict($) { + return m.errToObj, new _g$({ ...this._def, unknownKeys: "strict", ...$ !== void 0 ? { errorMap: (Q, J) => { + var _a5, _b3, _c2, _d; + let Y = (_c2 = (_b3 = (_a5 = this._def).errorMap) == null ? void 0 : _b3.call(_a5, Q, J).message) != null ? _c2 : J.defaultError; + if (Q.code === "unrecognized_keys") return { message: (_d = m.errToObj($).message) != null ? _d : Y }; + return { message: Y }; + } } : {} }); + } + strip() { + return new _g$({ ...this._def, unknownKeys: "strip" }); + } + passthrough() { + return new _g$({ ...this._def, unknownKeys: "passthrough" }); + } + extend($) { + return new _g$({ ...this._def, shape: () => ({ ...this._def.shape(), ...$ }) }); + } + merge($) { + return new _g$({ unknownKeys: $._def.unknownKeys, catchall: $._def.catchall, shape: () => ({ ...this._def.shape(), ...$._def.shape() }), typeName: _.ZodObject }); + } + setKey($, Q) { + return this.augment({ [$]: Q }); + } + catchall($) { + return new _g$({ ...this._def, catchall: $ }); + } + pick($) { + let Q = {}; + for (let J of U$.objectKeys($)) if ($[J] && this.shape[J]) Q[J] = this.shape[J]; + return new _g$({ ...this._def, shape: () => Q }); + } + omit($) { + let Q = {}; + for (let J of U$.objectKeys(this.shape)) if (!$[J]) Q[J] = this.shape[J]; + return new _g$({ ...this._def, shape: () => Q }); + } + deepPartial() { + return C8(this); + } + partial($) { + let Q = {}; + for (let J of U$.objectKeys(this.shape)) { + let Y = this.shape[J]; + if ($ && !$[J]) Q[J] = Y; + else Q[J] = Y.optional(); + } + return new _g$({ ...this._def, shape: () => Q }); + } + required($) { + let Q = {}; + for (let J of U$.objectKeys(this.shape)) if ($ && !$[J]) Q[J] = this.shape[J]; + else { + let X = this.shape[J]; + while (X instanceof o6) X = X._def.innerType; + Q[J] = X; + } + return new _g$({ ...this._def, shape: () => Q }); + } + keyof() { + return JM(U$.objectKeys(this.shape)); + } +}; +g$.create = ($, Q) => { + return new g$({ shape: () => $, unknownKeys: "strip", catchall: d4.create(), typeName: _.ZodObject, ...e(Q) }); +}; +g$.strictCreate = ($, Q) => { + return new g$({ shape: () => $, unknownKeys: "strict", catchall: d4.create(), typeName: _.ZodObject, ...e(Q) }); +}; +g$.lazycreate = ($, Q) => { + return new g$({ shape: $, unknownKeys: "strip", catchall: d4.create(), typeName: _.ZodObject, ...e(Q) }); +}; +var J7 = class extends Y$ { + _parse($) { + let { ctx: Q } = this._processInputParams($), J = this._def.options; + function Y(X) { + for (let G of X) if (G.result.status === "valid") return G.result; + for (let G of X) if (G.result.status === "dirty") return Q.common.issues.push(...G.ctx.common.issues), G.result; + let W = X.map((G) => new f6(G.ctx.common.issues)); + return f(Q, { code: E.invalid_union, unionErrors: W }), n; + } + if (Q.common.async) return Promise.all(J.map(async (X) => { + let W = { ...Q, common: { ...Q.common, issues: [] }, parent: null }; + return { result: await X._parseAsync({ data: Q.data, path: Q.path, parent: W }), ctx: W }; + })).then(Y); + else { + let X = void 0, W = []; + for (let U of J) { + let H = { ...Q, common: { ...Q.common, issues: [] }, parent: null }, q = U._parseSync({ data: Q.data, path: Q.path, parent: H }); + if (q.status === "valid") return q; + else if (q.status === "dirty" && !X) X = { result: q, ctx: H }; + if (H.common.issues.length) W.push(H.common.issues); + } + if (X) return Q.common.issues.push(...X.ctx.common.issues), X.result; + let G = W.map((U) => new f6(U)); + return f(Q, { code: E.invalid_union, unionErrors: G }), n; + } + } + get options() { + return this._def.options; + } +}; +J7.create = ($, Q) => { + return new J7({ options: $, typeName: _.ZodUnion, ...e(Q) }); +}; +var c4 = ($) => { + if ($ instanceof Y7) return c4($.schema); + else if ($ instanceof P4) return c4($.innerType()); + else if ($ instanceof W7) return [$.value]; + else if ($ instanceof L0) return $.options; + else if ($ instanceof G7) return U$.objectValues($.enum); + else if ($ instanceof U7) return c4($._def.innerType); + else if ($ instanceof $7) return [void 0]; + else if ($ instanceof Q7) return [null]; + else if ($ instanceof o6) return [void 0, ...c4($.unwrap())]; + else if ($ instanceof A1) return [null, ...c4($.unwrap())]; + else if ($ instanceof hH) return c4($.unwrap()); + else if ($ instanceof K7) return c4($.unwrap()); + else if ($ instanceof H7) return c4($._def.innerType); + else return []; +}; +var gH = class _gH extends Y$ { + _parse($) { + let { ctx: Q } = this._processInputParams($); + if (Q.parsedType !== C.object) return f(Q, { code: E.invalid_type, expected: C.object, received: Q.parsedType }), n; + let J = this.discriminator, Y = Q.data[J], X = this.optionsMap.get(Y); + if (!X) return f(Q, { code: E.invalid_union_discriminator, options: Array.from(this.optionsMap.keys()), path: [J] }), n; + if (Q.common.async) return X._parseAsync({ data: Q.data, path: Q.path, parent: Q }); + else return X._parseSync({ data: Q.data, path: Q.path, parent: Q }); + } + get discriminator() { + return this._def.discriminator; + } + get options() { + return this._def.options; + } + get optionsMap() { + return this._def.optionsMap; + } + static create($, Q, J) { + let Y = /* @__PURE__ */ new Map(); + for (let X of Q) { + let W = c4(X.shape[$]); + if (!W.length) throw Error(`A discriminator value for key \`${$}\` could not be extracted from all schema options`); + for (let G of W) { + if (Y.has(G)) throw Error(`Discriminator property ${String($)} has duplicate value ${String(G)}`); + Y.set(G, X); + } + } + return new _gH({ typeName: _.ZodDiscriminatedUnion, discriminator: $, options: Q, optionsMap: Y, ...e(J) }); + } +}; +function fH($, Q) { + let J = l4($), Y = l4(Q); + if ($ === Q) return { valid: true, data: $ }; + else if (J === C.object && Y === C.object) { + let X = U$.objectKeys(Q), W = U$.objectKeys($).filter((U) => X.indexOf(U) !== -1), G = { ...$, ...Q }; + for (let U of W) { + let H = fH($[U], Q[U]); + if (!H.valid) return { valid: false }; + G[U] = H.data; + } + return { valid: true, data: G }; + } else if (J === C.array && Y === C.array) { + if ($.length !== Q.length) return { valid: false }; + let X = []; + for (let W = 0; W < $.length; W++) { + let G = $[W], U = Q[W], H = fH(G, U); + if (!H.valid) return { valid: false }; + X.push(H.data); + } + return { valid: true, data: X }; + } else if (J === C.date && Y === C.date && +$ === +Q) return { valid: true, data: $ }; + else return { valid: false }; +} +var X7 = class extends Y$ { + _parse($) { + let { status: Q, ctx: J } = this._processInputParams($), Y = (X, W) => { + if (TH(X) || TH(W)) return n; + let G = fH(X.value, W.value); + if (!G.valid) return f(J, { code: E.invalid_intersection_types }), n; + if (xH(X) || xH(W)) Q.dirty(); + return { status: Q.value, value: G.data }; + }; + if (J.common.async) return Promise.all([this._def.left._parseAsync({ data: J.data, path: J.path, parent: J }), this._def.right._parseAsync({ data: J.data, path: J.path, parent: J })]).then(([X, W]) => Y(X, W)); + else return Y(this._def.left._parseSync({ data: J.data, path: J.path, parent: J }), this._def.right._parseSync({ data: J.data, path: J.path, parent: J })); + } +}; +X7.create = ($, Q, J) => { + return new X7({ left: $, right: Q, typeName: _.ZodIntersection, ...e(J) }); +}; +var i4 = class _i4 extends Y$ { + _parse($) { + let { status: Q, ctx: J } = this._processInputParams($); + if (J.parsedType !== C.array) return f(J, { code: E.invalid_type, expected: C.array, received: J.parsedType }), n; + if (J.data.length < this._def.items.length) return f(J, { code: E.too_small, minimum: this._def.items.length, inclusive: true, exact: false, type: "array" }), n; + if (!this._def.rest && J.data.length > this._def.items.length) f(J, { code: E.too_big, maximum: this._def.items.length, inclusive: true, exact: false, type: "array" }), Q.dirty(); + let X = [...J.data].map((W, G) => { + let U = this._def.items[G] || this._def.rest; + if (!U) return null; + return U._parse(new H4(J, W, J.path, G)); + }).filter((W) => !!W); + if (J.common.async) return Promise.all(X).then((W) => { + return U6.mergeArray(Q, W); + }); + else return U6.mergeArray(Q, X); + } + get items() { + return this._def.items; + } + rest($) { + return new _i4({ ...this._def, rest: $ }); + } +}; +i4.create = ($, Q) => { + if (!Array.isArray($)) throw Error("You must pass an array of schemas to z.tuple([ ... ])"); + return new i4({ items: $, typeName: _.ZodTuple, rest: null, ...e(Q) }); +}; +var TX = class _TX extends Y$ { + get keySchema() { + return this._def.keyType; + } + get valueSchema() { + return this._def.valueType; + } + _parse($) { + let { status: Q, ctx: J } = this._processInputParams($); + if (J.parsedType !== C.object) return f(J, { code: E.invalid_type, expected: C.object, received: J.parsedType }), n; + let Y = [], X = this._def.keyType, W = this._def.valueType; + for (let G in J.data) Y.push({ key: X._parse(new H4(J, G, J.path, G)), value: W._parse(new H4(J, J.data[G], J.path, G)), alwaysSet: G in J.data }); + if (J.common.async) return U6.mergeObjectAsync(Q, Y); + else return U6.mergeObjectSync(Q, Y); + } + get element() { + return this._def.valueType; + } + static create($, Q, J) { + if (Q instanceof Y$) return new _TX({ keyType: $, valueType: Q, typeName: _.ZodRecord, ...e(J) }); + return new _TX({ keyType: p4.create(), valueType: $, typeName: _.ZodRecord, ...e(Q) }); + } +}; +var xX = class extends Y$ { + get keySchema() { + return this._def.keyType; + } + get valueSchema() { + return this._def.valueType; + } + _parse($) { + let { status: Q, ctx: J } = this._processInputParams($); + if (J.parsedType !== C.map) return f(J, { code: E.invalid_type, expected: C.map, received: J.parsedType }), n; + let Y = this._def.keyType, X = this._def.valueType, W = [...J.data.entries()].map(([G, U], H) => { + return { key: Y._parse(new H4(J, G, J.path, [H, "key"])), value: X._parse(new H4(J, U, J.path, [H, "value"])) }; + }); + if (J.common.async) { + let G = /* @__PURE__ */ new Map(); + return Promise.resolve().then(async () => { + for (let U of W) { + let H = await U.key, q = await U.value; + if (H.status === "aborted" || q.status === "aborted") return n; + if (H.status === "dirty" || q.status === "dirty") Q.dirty(); + G.set(H.value, q.value); + } + return { status: Q.value, value: G }; + }); + } else { + let G = /* @__PURE__ */ new Map(); + for (let U of W) { + let { key: H, value: q } = U; + if (H.status === "aborted" || q.status === "aborted") return n; + if (H.status === "dirty" || q.status === "dirty") Q.dirty(); + G.set(H.value, q.value); + } + return { status: Q.value, value: G }; + } + } +}; +xX.create = ($, Q, J) => { + return new xX({ valueType: Q, keyType: $, typeName: _.ZodMap, ...e(J) }); +}; +var y8 = class _y8 extends Y$ { + _parse($) { + let { status: Q, ctx: J } = this._processInputParams($); + if (J.parsedType !== C.set) return f(J, { code: E.invalid_type, expected: C.set, received: J.parsedType }), n; + let Y = this._def; + if (Y.minSize !== null) { + if (J.data.size < Y.minSize.value) f(J, { code: E.too_small, minimum: Y.minSize.value, type: "set", inclusive: true, exact: false, message: Y.minSize.message }), Q.dirty(); + } + if (Y.maxSize !== null) { + if (J.data.size > Y.maxSize.value) f(J, { code: E.too_big, maximum: Y.maxSize.value, type: "set", inclusive: true, exact: false, message: Y.maxSize.message }), Q.dirty(); + } + let X = this._def.valueType; + function W(U) { + let H = /* @__PURE__ */ new Set(); + for (let q of U) { + if (q.status === "aborted") return n; + if (q.status === "dirty") Q.dirty(); + H.add(q.value); + } + return { status: Q.value, value: H }; + } + let G = [...J.data.values()].map((U, H) => X._parse(new H4(J, U, J.path, H))); + if (J.common.async) return Promise.all(G).then((U) => W(U)); + else return W(G); + } + min($, Q) { + return new _y8({ ...this._def, minSize: { value: $, message: m.toString(Q) } }); + } + max($, Q) { + return new _y8({ ...this._def, maxSize: { value: $, message: m.toString(Q) } }); + } + size($, Q) { + return this.min($, Q).max($, Q); + } + nonempty($) { + return this.min(1, $); + } +}; +y8.create = ($, Q) => { + return new y8({ valueType: $, minSize: null, maxSize: null, typeName: _.ZodSet, ...e(Q) }); +}; +var sQ = class _sQ extends Y$ { + constructor() { + super(...arguments); + this.validate = this.implement; + } + _parse($) { + let { ctx: Q } = this._processInputParams($); + if (Q.parsedType !== C.function) return f(Q, { code: E.invalid_type, expected: C.function, received: Q.parsedType }), n; + function J(G, U) { + return _X2({ data: G, path: Q.path, errorMaps: [Q.common.contextualErrorMap, Q.schemaErrorMap, tQ(), j1].filter((H) => !!H), issueData: { code: E.invalid_arguments, argumentsError: U } }); + } + function Y(G, U) { + return _X2({ data: G, path: Q.path, errorMaps: [Q.common.contextualErrorMap, Q.schemaErrorMap, tQ(), j1].filter((H) => !!H), issueData: { code: E.invalid_return_type, returnTypeError: U } }); + } + let X = { errorMap: Q.common.contextualErrorMap }, W = Q.data; + if (this._def.returns instanceof f8) { + let G = this; + return z6(async function(...U) { + let H = new f6([]), q = await G._def.args.parseAsync(U, X).catch((z4) => { + throw H.addIssue(J(U, z4)), H; + }), V = await Reflect.apply(W, this, q); + return await G._def.returns._def.type.parseAsync(V, X).catch((z4) => { + throw H.addIssue(Y(V, z4)), H; + }); + }); + } else { + let G = this; + return z6(function(...U) { + let H = G._def.args.safeParse(U, X); + if (!H.success) throw new f6([J(U, H.error)]); + let q = Reflect.apply(W, this, H.data), V = G._def.returns.safeParse(q, X); + if (!V.success) throw new f6([Y(q, V.error)]); + return V.data; + }); + } + } + parameters() { + return this._def.args; + } + returnType() { + return this._def.returns; + } + args(...$) { + return new _sQ({ ...this._def, args: i4.create($).rest(M0.create()) }); + } + returns($) { + return new _sQ({ ...this._def, returns: $ }); + } + implement($) { + return this.parse($); + } + strictImplement($) { + return this.parse($); + } + static create($, Q, J) { + return new _sQ({ args: $ ? $ : i4.create([]).rest(M0.create()), returns: Q || M0.create(), typeName: _.ZodFunction, ...e(J) }); + } +}; +var Y7 = class extends Y$ { + get schema() { + return this._def.getter(); + } + _parse($) { + let { ctx: Q } = this._processInputParams($); + return this._def.getter()._parse({ data: Q.data, path: Q.path, parent: Q }); + } +}; +Y7.create = ($, Q) => { + return new Y7({ getter: $, typeName: _.ZodLazy, ...e(Q) }); +}; +var W7 = class extends Y$ { + _parse($) { + if ($.data !== this._def.value) { + let Q = this._getOrReturnCtx($); + return f(Q, { received: Q.data, code: E.invalid_literal, expected: this._def.value }), n; + } + return { status: "valid", value: $.data }; + } + get value() { + return this._def.value; + } +}; +W7.create = ($, Q) => { + return new W7({ value: $, typeName: _.ZodLiteral, ...e(Q) }); +}; +function JM($, Q) { + return new L0({ values: $, typeName: _.ZodEnum, ...e(Q) }); +} +var L0 = class _L0 extends Y$ { + _parse($) { + if (typeof $.data !== "string") { + let Q = this._getOrReturnCtx($), J = this._def.values; + return f(Q, { expected: U$.joinValues(J), received: Q.parsedType, code: E.invalid_type }), n; + } + if (!this._cache) this._cache = new Set(this._def.values); + if (!this._cache.has($.data)) { + let Q = this._getOrReturnCtx($), J = this._def.values; + return f(Q, { received: Q.data, code: E.invalid_enum_value, options: J }), n; + } + return z6($.data); + } + get options() { + return this._def.values; + } + get enum() { + let $ = {}; + for (let Q of this._def.values) $[Q] = Q; + return $; + } + get Values() { + let $ = {}; + for (let Q of this._def.values) $[Q] = Q; + return $; + } + get Enum() { + let $ = {}; + for (let Q of this._def.values) $[Q] = Q; + return $; + } + extract($, Q = this._def) { + return _L0.create($, { ...this._def, ...Q }); + } + exclude($, Q = this._def) { + return _L0.create(this.options.filter((J) => !$.includes(J)), { ...this._def, ...Q }); + } +}; +L0.create = JM; +var G7 = class extends Y$ { + _parse($) { + let Q = U$.getValidEnumValues(this._def.values), J = this._getOrReturnCtx($); + if (J.parsedType !== C.string && J.parsedType !== C.number) { + let Y = U$.objectValues(Q); + return f(J, { expected: U$.joinValues(Y), received: J.parsedType, code: E.invalid_type }), n; + } + if (!this._cache) this._cache = new Set(U$.getValidEnumValues(this._def.values)); + if (!this._cache.has($.data)) { + let Y = U$.objectValues(Q); + return f(J, { received: J.data, code: E.invalid_enum_value, options: Y }), n; + } + return z6($.data); + } + get enum() { + return this._def.values; + } +}; +G7.create = ($, Q) => { + return new G7({ values: $, typeName: _.ZodNativeEnum, ...e(Q) }); +}; +var f8 = class extends Y$ { + unwrap() { + return this._def.type; + } + _parse($) { + let { ctx: Q } = this._processInputParams($); + if (Q.parsedType !== C.promise && Q.common.async === false) return f(Q, { code: E.invalid_type, expected: C.promise, received: Q.parsedType }), n; + let J = Q.parsedType === C.promise ? Q.data : Promise.resolve(Q.data); + return z6(J.then((Y) => { + return this._def.type.parseAsync(Y, { path: Q.path, errorMap: Q.common.contextualErrorMap }); + })); + } +}; +f8.create = ($, Q) => { + return new f8({ type: $, typeName: _.ZodPromise, ...e(Q) }); +}; +var P4 = class extends Y$ { + innerType() { + return this._def.schema; + } + sourceType() { + return this._def.schema._def.typeName === _.ZodEffects ? this._def.schema.sourceType() : this._def.schema; + } + _parse($) { + let { status: Q, ctx: J } = this._processInputParams($), Y = this._def.effect || null, X = { addIssue: (W) => { + if (f(J, W), W.fatal) Q.abort(); + else Q.dirty(); + }, get path() { + return J.path; + } }; + if (X.addIssue = X.addIssue.bind(X), Y.type === "preprocess") { + let W = Y.transform(J.data, X); + if (J.common.async) return Promise.resolve(W).then(async (G) => { + if (Q.value === "aborted") return n; + let U = await this._def.schema._parseAsync({ data: G, path: J.path, parent: J }); + if (U.status === "aborted") return n; + if (U.status === "dirty") return v8(U.value); + if (Q.value === "dirty") return v8(U.value); + return U; + }); + else { + if (Q.value === "aborted") return n; + let G = this._def.schema._parseSync({ data: W, path: J.path, parent: J }); + if (G.status === "aborted") return n; + if (G.status === "dirty") return v8(G.value); + if (Q.value === "dirty") return v8(G.value); + return G; + } + } + if (Y.type === "refinement") { + let W = (G) => { + let U = Y.refinement(G, X); + if (J.common.async) return Promise.resolve(U); + if (U instanceof Promise) throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead."); + return G; + }; + if (J.common.async === false) { + let G = this._def.schema._parseSync({ data: J.data, path: J.path, parent: J }); + if (G.status === "aborted") return n; + if (G.status === "dirty") Q.dirty(); + return W(G.value), { status: Q.value, value: G.value }; + } else return this._def.schema._parseAsync({ data: J.data, path: J.path, parent: J }).then((G) => { + if (G.status === "aborted") return n; + if (G.status === "dirty") Q.dirty(); + return W(G.value).then(() => { + return { status: Q.value, value: G.value }; + }); + }); + } + if (Y.type === "transform") if (J.common.async === false) { + let W = this._def.schema._parseSync({ data: J.data, path: J.path, parent: J }); + if (!Z0(W)) return n; + let G = Y.transform(W.value, X); + if (G instanceof Promise) throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead."); + return { status: Q.value, value: G }; + } else return this._def.schema._parseAsync({ data: J.data, path: J.path, parent: J }).then((W) => { + if (!Z0(W)) return n; + return Promise.resolve(Y.transform(W.value, X)).then((G) => ({ status: Q.value, value: G })); + }); + U$.assertNever(Y); + } +}; +P4.create = ($, Q, J) => { + return new P4({ schema: $, typeName: _.ZodEffects, effect: Q, ...e(J) }); +}; +P4.createWithPreprocess = ($, Q, J) => { + return new P4({ schema: Q, effect: { type: "preprocess", transform: $ }, typeName: _.ZodEffects, ...e(J) }); +}; +var o6 = class extends Y$ { + _parse($) { + if (this._getType($) === C.undefined) return z6(void 0); + return this._def.innerType._parse($); + } + unwrap() { + return this._def.innerType; + } +}; +o6.create = ($, Q) => { + return new o6({ innerType: $, typeName: _.ZodOptional, ...e(Q) }); +}; +var A1 = class extends Y$ { + _parse($) { + if (this._getType($) === C.null) return z6(null); + return this._def.innerType._parse($); + } + unwrap() { + return this._def.innerType; + } +}; +A1.create = ($, Q) => { + return new A1({ innerType: $, typeName: _.ZodNullable, ...e(Q) }); +}; +var U7 = class extends Y$ { + _parse($) { + let { ctx: Q } = this._processInputParams($), J = Q.data; + if (Q.parsedType === C.undefined) J = this._def.defaultValue(); + return this._def.innerType._parse({ data: J, path: Q.path, parent: Q }); + } + removeDefault() { + return this._def.innerType; + } +}; +U7.create = ($, Q) => { + return new U7({ innerType: $, typeName: _.ZodDefault, defaultValue: typeof Q.default === "function" ? Q.default : () => Q.default, ...e(Q) }); +}; +var H7 = class extends Y$ { + _parse($) { + let { ctx: Q } = this._processInputParams($), J = { ...Q, common: { ...Q.common, issues: [] } }, Y = this._def.innerType._parse({ data: J.data, path: J.path, parent: { ...J } }); + if (aQ(Y)) return Y.then((X) => { + return { status: "valid", value: X.status === "valid" ? X.value : this._def.catchValue({ get error() { + return new f6(J.common.issues); + }, input: J.data }) }; + }); + else return { status: "valid", value: Y.status === "valid" ? Y.value : this._def.catchValue({ get error() { + return new f6(J.common.issues); + }, input: J.data }) }; + } + removeCatch() { + return this._def.innerType; + } +}; +H7.create = ($, Q) => { + return new H7({ innerType: $, typeName: _.ZodCatch, catchValue: typeof Q.catch === "function" ? Q.catch : () => Q.catch, ...e(Q) }); +}; +var yX = class extends Y$ { + _parse($) { + if (this._getType($) !== C.nan) { + let J = this._getOrReturnCtx($); + return f(J, { code: E.invalid_type, expected: C.nan, received: J.parsedType }), n; + } + return { status: "valid", value: $.data }; + } +}; +yX.create = ($) => { + return new yX({ typeName: _.ZodNaN, ...e($) }); +}; +var hH = class extends Y$ { + _parse($) { + let { ctx: Q } = this._processInputParams($), J = Q.data; + return this._def.type._parse({ data: J, path: Q.path, parent: Q }); + } + unwrap() { + return this._def.type; + } +}; +var fX = class _fX extends Y$ { + _parse($) { + let { status: Q, ctx: J } = this._processInputParams($); + if (J.common.async) return (async () => { + let X = await this._def.in._parseAsync({ data: J.data, path: J.path, parent: J }); + if (X.status === "aborted") return n; + if (X.status === "dirty") return Q.dirty(), v8(X.value); + else return this._def.out._parseAsync({ data: X.value, path: J.path, parent: J }); + })(); + else { + let Y = this._def.in._parseSync({ data: J.data, path: J.path, parent: J }); + if (Y.status === "aborted") return n; + if (Y.status === "dirty") return Q.dirty(), { status: "dirty", value: Y.value }; + else return this._def.out._parseSync({ data: Y.value, path: J.path, parent: J }); + } + } + static create($, Q) { + return new _fX({ in: $, out: Q, typeName: _.ZodPipeline }); + } +}; +var K7 = class extends Y$ { + _parse($) { + let Q = this._def.innerType._parse($), J = (Y) => { + if (Z0(Y)) Y.value = Object.freeze(Y.value); + return Y; + }; + return aQ(Q) ? Q.then((Y) => J(Y)) : J(Q); + } + unwrap() { + return this._def.innerType; + } +}; +K7.create = ($, Q) => { + return new K7({ innerType: $, typeName: _.ZodReadonly, ...e(Q) }); +}; +var vH$ = { object: g$.lazycreate }; +var _; +(function($) { + $.ZodString = "ZodString", $.ZodNumber = "ZodNumber", $.ZodNaN = "ZodNaN", $.ZodBigInt = "ZodBigInt", $.ZodBoolean = "ZodBoolean", $.ZodDate = "ZodDate", $.ZodSymbol = "ZodSymbol", $.ZodUndefined = "ZodUndefined", $.ZodNull = "ZodNull", $.ZodAny = "ZodAny", $.ZodUnknown = "ZodUnknown", $.ZodNever = "ZodNever", $.ZodVoid = "ZodVoid", $.ZodArray = "ZodArray", $.ZodObject = "ZodObject", $.ZodUnion = "ZodUnion", $.ZodDiscriminatedUnion = "ZodDiscriminatedUnion", $.ZodIntersection = "ZodIntersection", $.ZodTuple = "ZodTuple", $.ZodRecord = "ZodRecord", $.ZodMap = "ZodMap", $.ZodSet = "ZodSet", $.ZodFunction = "ZodFunction", $.ZodLazy = "ZodLazy", $.ZodLiteral = "ZodLiteral", $.ZodEnum = "ZodEnum", $.ZodEffects = "ZodEffects", $.ZodNativeEnum = "ZodNativeEnum", $.ZodOptional = "ZodOptional", $.ZodNullable = "ZodNullable", $.ZodDefault = "ZodDefault", $.ZodCatch = "ZodCatch", $.ZodPromise = "ZodPromise", $.ZodBranded = "ZodBranded", $.ZodPipeline = "ZodPipeline", $.ZodReadonly = "ZodReadonly"; +})(_ || (_ = {})); +var CH$ = p4.create; +var TH$ = T8.create; +var xH$ = yX.create; +var yH$ = x8.create; +var fH$ = kX.create; +var gH$ = eQ.create; +var hH$ = SX.create; +var uH$ = $7.create; +var mH$ = Q7.create; +var lH$ = vX.create; +var cH$ = M0.create; +var pH$ = d4.create; +var dH$ = CX.create; +var iH$ = R4.create; +var XM = g$.create; +var nH$ = g$.strictCreate; +var rH$ = J7.create; +var oH$ = gH.create; +var tH$ = X7.create; +var aH$ = i4.create; +var sH$ = TX.create; +var eH$ = xX.create; +var $K$ = y8.create; +var QK$ = sQ.create; +var JK$ = Y7.create; +var XK$ = W7.create; +var YK$ = L0.create; +var WK$ = G7.create; +var GK$ = f8.create; +var UK$ = P4.create; +var HK$ = o6.create; +var KK$ = A1.create; +var qK$ = P4.createWithPreprocess; +var VK$ = fX.create; +var K4 = {}; +M4(K4, { version: () => cK, util: () => v, treeifyError: () => mX, toJSONSchema: () => e8, toDotPath: () => GM, safeParseAsync: () => P1, safeParse: () => R1, registry: () => R7, regexes: () => E1, prettifyError: () => lX, parseAsync: () => R0, parse: () => I0, locales: () => r8, isValidJWT: () => IM, isValidBase64URL: () => AM, isValidBase64: () => oK, globalRegistry: () => R6, globalConfig: () => q7, function: () => j3, formatError: () => l8, flattenError: () => m8, config: () => c$, clone: () => H6, _xid: () => f7, _void: () => N3, _uuidv7: () => k7, _uuidv6: () => _7, _uuidv4: () => b7, _uuid: () => E7, _url: () => S7, _uppercase: () => t7, _unknown: () => b0, _union: () => Wm, _undefined: () => q3, _ulid: () => y7, _uint64: () => H3, _uint32: () => Y3, _tuple: () => rq, _trim: () => JJ, _transform: () => Nm, _toUpperCase: () => YJ, _toLowerCase: () => XJ, _templateLiteral: () => Am, _symbol: () => K3, _success: () => Zm, _stringbool: () => M3, _stringFormat: () => L3, _string: () => aY, _startsWith: () => s7, _size: () => n7, _set: () => qm, _safeParseAsync: () => iX, _safeParse: () => dX, _regex: () => r7, _refine: () => Z3, _record: () => Hm, _readonly: () => jm, _property: () => nq, _promise: () => Rm, _positive: () => cq, _pipe: () => Lm, _parseAsync: () => pX, _parse: () => cX, _overwrite: () => a4, _optional: () => wm, _number: () => eY, _nullable: () => Om, _null: () => V3, _normalize: () => QJ, _nonpositive: () => dq, _nonoptional: () => Fm, _nonnegative: () => iq, _never: () => z3, _negative: () => pq, _nativeEnum: () => Bm, _nanoid: () => C7, _nan: () => O3, _multipleOf: () => _0, _minSize: () => k0, _minLength: () => k1, _min: () => P6, _mime: () => $J, _maxSize: () => t8, _maxLength: () => a8, _max: () => t6, _map: () => Km, _lte: () => t6, _lt: () => o4, _lowercase: () => o7, _literal: () => zm, _length: () => s8, _lazy: () => Im, _ksuid: () => g7, _jwt: () => i7, _isoTime: () => fq, _isoDuration: () => gq, _isoDateTime: () => xq, _isoDate: () => yq, _ipv6: () => u7, _ipv4: () => h7, _intersection: () => Um, _int64: () => U3, _int32: () => X3, _int: () => $3, _includes: () => a7, _guid: () => o8, _gte: () => P6, _gt: () => t4, _float64: () => J3, _float32: () => Q3, _file: () => D3, _enum: () => Vm, _endsWith: () => e7, _emoji: () => v7, _email: () => P7, _e164: () => d7, _discriminatedUnion: () => Gm, _default: () => Dm, _date: () => w3, _custom: () => F3, _cuid2: () => x7, _cuid: () => T7, _coercedString: () => Tq, _coercedNumber: () => hq, _coercedDate: () => lq, _coercedBoolean: () => uq, _coercedBigint: () => mq, _cidrv6: () => l7, _cidrv4: () => m7, _catch: () => Mm, _boolean: () => W3, _bigint: () => G3, _base64url: () => p7, _base64: () => c7, _array: () => WJ, _any: () => B3, TimePrecision: () => sY, NEVER: () => gX, JSONSchemaGenerator: () => A3, JSONSchema: () => bM, Doc: () => tX, $output: () => oY, $input: () => tY, $constructor: () => F, $brand: () => hX, $ZodXID: () => HY, $ZodVoid: () => PY, $ZodUnknown: () => E0, $ZodUnion: () => j7, $ZodUndefined: () => jY, $ZodUUID: () => $Y, $ZodURL: () => JY, $ZodULID: () => UY, $ZodType: () => o, $ZodTuple: () => _1, $ZodTransform: () => i8, $ZodTemplateLiteral: () => dY, $ZodSymbol: () => LY, $ZodSuccess: () => mY, $ZodStringFormat: () => j$, $ZodString: () => b1, $ZodSet: () => vY, $ZodRegistry: () => I7, $ZodRecord: () => kY, $ZodRealError: () => u8, $ZodReadonly: () => pY, $ZodPromise: () => iY, $ZodPrefault: () => hY, $ZodPipe: () => n8, $ZodOptional: () => yY, $ZodObject: () => L7, $ZodNumberFormat: () => ZY, $ZodNumber: () => Z7, $ZodNullable: () => fY, $ZodNull: () => AY, $ZodNonOptional: () => uY, $ZodNever: () => RY, $ZodNanoID: () => YY, $ZodNaN: () => cY, $ZodMap: () => SY, $ZodLiteral: () => TY, $ZodLazy: () => nY, $ZodKSUID: () => KY, $ZodJWT: () => DY, $ZodIntersection: () => _Y, $ZodISOTime: () => nK, $ZodISODuration: () => rK, $ZodISODateTime: () => dK, $ZodISODate: () => iK, $ZodIPv6: () => VY, $ZodIPv4: () => qY, $ZodGUID: () => eX, $ZodFunction: () => oq, $ZodFile: () => xY, $ZodError: () => F7, $ZodEnum: () => CY, $ZodEmoji: () => XY, $ZodEmail: () => QY, $ZodE164: () => OY, $ZodDiscriminatedUnion: () => bY, $ZodDefault: () => gY, $ZodDate: () => EY, $ZodCustomStringFormat: () => FY, $ZodCustom: () => rY, $ZodCheckUpperCase: () => yK, $ZodCheckStringFormat: () => c8, $ZodCheckStartsWith: () => gK, $ZodCheckSizeEquals: () => kK, $ZodCheckRegex: () => TK, $ZodCheckProperty: () => uK, $ZodCheckOverwrite: () => lK, $ZodCheckNumberFormat: () => PK, $ZodCheckMultipleOf: () => RK, $ZodCheckMinSize: () => _K, $ZodCheckMinLength: () => vK, $ZodCheckMimeType: () => mK, $ZodCheckMaxSize: () => bK, $ZodCheckMaxLength: () => SK, $ZodCheckLowerCase: () => xK, $ZodCheckLessThan: () => rX, $ZodCheckLengthEquals: () => CK, $ZodCheckIncludes: () => fK, $ZodCheckGreaterThan: () => oX, $ZodCheckEndsWith: () => hK, $ZodCheckBigIntFormat: () => EK, $ZodCheck: () => T$, $ZodCatch: () => lY, $ZodCUID2: () => GY, $ZodCUID: () => WY, $ZodCIDRv6: () => zY, $ZodCIDRv4: () => BY, $ZodBoolean: () => p8, $ZodBigIntFormat: () => MY, $ZodBigInt: () => M7, $ZodBase64URL: () => wY, $ZodBase64: () => NY, $ZodAsyncError: () => n4, $ZodArray: () => d8, $ZodAny: () => IY }); +var gX = Object.freeze({ status: "aborted" }); +function F($, Q, J) { + var _a5; + function Y(U, H) { + var _a6, _b3; + var q; + Object.defineProperty(U, "_zod", { value: (_a6 = U._zod) != null ? _a6 : {}, enumerable: false }), (_b3 = (q = U._zod).traits) != null ? _b3 : q.traits = /* @__PURE__ */ new Set(), U._zod.traits.add($), Q(U, H); + for (let V in G.prototype) if (!(V in U)) Object.defineProperty(U, V, { value: G.prototype[V].bind(U) }); + U._zod.constr = G, U._zod.def = H; + } + let X = (_a5 = J == null ? void 0 : J.Parent) != null ? _a5 : Object; + class W extends X { + } + Object.defineProperty(W, "name", { value: $ }); + function G(U) { + var _a6; + var H; + let q = (J == null ? void 0 : J.Parent) ? new W() : this; + Y(q, U), (_a6 = (H = q._zod).deferred) != null ? _a6 : H.deferred = []; + for (let V of q._zod.deferred) V(); + return q; + } + return Object.defineProperty(G, "init", { value: Y }), Object.defineProperty(G, Symbol.hasInstance, { value: (U) => { + var _a6, _b3; + if ((J == null ? void 0 : J.Parent) && U instanceof J.Parent) return true; + return (_b3 = (_a6 = U == null ? void 0 : U._zod) == null ? void 0 : _a6.traits) == null ? void 0 : _b3.has($); + } }), Object.defineProperty(G, "name", { value: $ }), G; +} +var hX = /* @__PURE__ */ Symbol("zod_brand"); +var n4 = class extends Error { + constructor() { + super("Encountered Promise during synchronous parse. Use .parseAsync() instead."); + } +}; +var q7 = {}; +function c$($) { + if ($) Object.assign(q7, $); + return q7; +} +var v = {}; +M4(v, { unwrapMessage: () => V7, stringifyPrimitive: () => x, required: () => Yu, randomString: () => oh, propertyKeyTypes: () => w7, promiseAllObject: () => rh, primitiveTypes: () => dH, prefixIssues: () => I6, pick: () => eh, partial: () => Xu, optionalKeys: () => iH, omit: () => $u, numKeys: () => th, nullish: () => I1, normalizeParams: () => k, merge: () => Ju, jsonStringifyReplacer: () => mH, joinValues: () => P, issue: () => oH, isPlainObject: () => h8, isObject: () => g8, getSizableOrigin: () => O7, getParsedType: () => ah, getLengthableOrigin: () => D7, getEnumValues: () => B7, getElementAtPath: () => nh, floatSafeRemainder: () => lH, finalizeIssue: () => g6, extend: () => Qu, escapeRegex: () => r4, esc: () => j0, defineLazy: () => N$, createTransparentProxy: () => sh, clone: () => H6, cleanRegex: () => N7, cleanEnum: () => Wu, captureStackTrace: () => uX, cached: () => z7, assignProp: () => cH, assertNotEqual: () => ch, assertNever: () => dh, assertIs: () => ph, assertEqual: () => lh, assert: () => ih, allowsEval: () => pH, aborted: () => A0, NUMBER_FORMAT_RANGES: () => nH, Class: () => YM, BIGINT_FORMAT_RANGES: () => rH }); +function lh($) { + return $; +} +function ch($) { + return $; +} +function ph($) { +} +function dh($) { + throw Error(); +} +function ih($) { +} +function B7($) { + let Q = Object.values($).filter((Y) => typeof Y === "number"); + return Object.entries($).filter(([Y, X]) => Q.indexOf(+Y) === -1).map(([Y, X]) => X); +} +function P($, Q = "|") { + return $.map((J) => x(J)).join(Q); +} +function mH($, Q) { + if (typeof Q === "bigint") return Q.toString(); + return Q; +} +function z7($) { + return { get value() { + { + let J = $(); + return Object.defineProperty(this, "value", { value: J }), J; + } + throw Error("cached value already set"); + } }; +} +function I1($) { + return $ === null || $ === void 0; +} +function N7($) { + let Q = $.startsWith("^") ? 1 : 0, J = $.endsWith("$") ? $.length - 1 : $.length; + return $.slice(Q, J); +} +function lH($, Q) { + let J = ($.toString().split(".")[1] || "").length, Y = (Q.toString().split(".")[1] || "").length, X = J > Y ? J : Y, W = Number.parseInt($.toFixed(X).replace(".", "")), G = Number.parseInt(Q.toFixed(X).replace(".", "")); + return W % G / 10 ** X; +} +function N$($, Q, J) { + Object.defineProperty($, Q, { get() { + { + let X = J(); + return $[Q] = X, X; + } + throw Error("cached value already set"); + }, set(X) { + Object.defineProperty($, Q, { value: X }); + }, configurable: true }); +} +function cH($, Q, J) { + Object.defineProperty($, Q, { value: J, writable: true, enumerable: true, configurable: true }); +} +function nh($, Q) { + if (!Q) return $; + return Q.reduce((J, Y) => J == null ? void 0 : J[Y], $); +} +function rh($) { + let Q = Object.keys($), J = Q.map((Y) => $[Y]); + return Promise.all(J).then((Y) => { + let X = {}; + for (let W = 0; W < Q.length; W++) X[Q[W]] = Y[W]; + return X; + }); +} +function oh($ = 10) { + let J = ""; + for (let Y = 0; Y < $; Y++) J += "abcdefghijklmnopqrstuvwxyz"[Math.floor(Math.random() * 26)]; + return J; +} +function j0($) { + return JSON.stringify($); +} +var uX = Error.captureStackTrace ? Error.captureStackTrace : (...$) => { +}; +function g8($) { + return typeof $ === "object" && $ !== null && !Array.isArray($); +} +var pH = z7(() => { + var _a5; + if (typeof navigator < "u" && ((_a5 = navigator == null ? void 0 : navigator.userAgent) == null ? void 0 : _a5.includes("Cloudflare"))) return false; + try { + return new Function(""), true; + } catch ($) { + return false; + } +}); +function h8($) { + if (g8($) === false) return false; + let Q = $.constructor; + if (Q === void 0) return true; + let J = Q.prototype; + if (g8(J) === false) return false; + if (Object.prototype.hasOwnProperty.call(J, "isPrototypeOf") === false) return false; + return true; +} +function th($) { + let Q = 0; + for (let J in $) if (Object.prototype.hasOwnProperty.call($, J)) Q++; + return Q; +} +var ah = ($) => { + let Q = typeof $; + switch (Q) { + case "undefined": + return "undefined"; + case "string": + return "string"; + case "number": + return Number.isNaN($) ? "nan" : "number"; + case "boolean": + return "boolean"; + case "function": + return "function"; + case "bigint": + return "bigint"; + case "symbol": + return "symbol"; + case "object": + if (Array.isArray($)) return "array"; + if ($ === null) return "null"; + if ($.then && typeof $.then === "function" && $.catch && typeof $.catch === "function") return "promise"; + if (typeof Map < "u" && $ instanceof Map) return "map"; + if (typeof Set < "u" && $ instanceof Set) return "set"; + if (typeof Date < "u" && $ instanceof Date) return "date"; + if (typeof File < "u" && $ instanceof File) return "file"; + return "object"; + default: + throw Error(`Unknown data type: ${Q}`); + } +}; +var w7 = /* @__PURE__ */ new Set(["string", "number", "symbol"]); +var dH = /* @__PURE__ */ new Set(["string", "number", "bigint", "boolean", "symbol", "undefined"]); +function r4($) { + return $.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} +function H6($, Q, J) { + let Y = new $._zod.constr(Q != null ? Q : $._zod.def); + if (!Q || (J == null ? void 0 : J.parent)) Y._zod.parent = $; + return Y; +} +function k($) { + let Q = $; + if (!Q) return {}; + if (typeof Q === "string") return { error: () => Q }; + if ((Q == null ? void 0 : Q.message) !== void 0) { + if ((Q == null ? void 0 : Q.error) !== void 0) throw Error("Cannot specify both `message` and `error` params"); + Q.error = Q.message; + } + if (delete Q.message, typeof Q.error === "string") return { ...Q, error: () => Q.error }; + return Q; +} +function sh($) { + let Q; + return new Proxy({}, { get(J, Y, X) { + return Q != null ? Q : Q = $(), Reflect.get(Q, Y, X); + }, set(J, Y, X, W) { + return Q != null ? Q : Q = $(), Reflect.set(Q, Y, X, W); + }, has(J, Y) { + return Q != null ? Q : Q = $(), Reflect.has(Q, Y); + }, deleteProperty(J, Y) { + return Q != null ? Q : Q = $(), Reflect.deleteProperty(Q, Y); + }, ownKeys(J) { + return Q != null ? Q : Q = $(), Reflect.ownKeys(Q); + }, getOwnPropertyDescriptor(J, Y) { + return Q != null ? Q : Q = $(), Reflect.getOwnPropertyDescriptor(Q, Y); + }, defineProperty(J, Y, X) { + return Q != null ? Q : Q = $(), Reflect.defineProperty(Q, Y, X); + } }); +} +function x($) { + if (typeof $ === "bigint") return $.toString() + "n"; + if (typeof $ === "string") return `"${$}"`; + return `${$}`; +} +function iH($) { + return Object.keys($).filter((Q) => { + return $[Q]._zod.optin === "optional" && $[Q]._zod.optout === "optional"; + }); +} +var nH = { safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER], int32: [-2147483648, 2147483647], uint32: [0, 4294967295], float32: [-34028234663852886e22, 34028234663852886e22], float64: [-Number.MAX_VALUE, Number.MAX_VALUE] }; +var rH = { int64: [BigInt("-9223372036854775808"), BigInt("9223372036854775807")], uint64: [BigInt(0), BigInt("18446744073709551615")] }; +function eh($, Q) { + let J = {}, Y = $._zod.def; + for (let X in Q) { + if (!(X in Y.shape)) throw Error(`Unrecognized key: "${X}"`); + if (!Q[X]) continue; + J[X] = Y.shape[X]; + } + return H6($, { ...$._zod.def, shape: J, checks: [] }); +} +function $u($, Q) { + let J = { ...$._zod.def.shape }, Y = $._zod.def; + for (let X in Q) { + if (!(X in Y.shape)) throw Error(`Unrecognized key: "${X}"`); + if (!Q[X]) continue; + delete J[X]; + } + return H6($, { ...$._zod.def, shape: J, checks: [] }); +} +function Qu($, Q) { + if (!h8(Q)) throw Error("Invalid input to extend: expected a plain object"); + let J = { ...$._zod.def, get shape() { + let Y = { ...$._zod.def.shape, ...Q }; + return cH(this, "shape", Y), Y; + }, checks: [] }; + return H6($, J); +} +function Ju($, Q) { + return H6($, { ...$._zod.def, get shape() { + let J = { ...$._zod.def.shape, ...Q._zod.def.shape }; + return cH(this, "shape", J), J; + }, catchall: Q._zod.def.catchall, checks: [] }); +} +function Xu($, Q, J) { + let Y = Q._zod.def.shape, X = { ...Y }; + if (J) for (let W in J) { + if (!(W in Y)) throw Error(`Unrecognized key: "${W}"`); + if (!J[W]) continue; + X[W] = $ ? new $({ type: "optional", innerType: Y[W] }) : Y[W]; + } + else for (let W in Y) X[W] = $ ? new $({ type: "optional", innerType: Y[W] }) : Y[W]; + return H6(Q, { ...Q._zod.def, shape: X, checks: [] }); +} +function Yu($, Q, J) { + let Y = Q._zod.def.shape, X = { ...Y }; + if (J) for (let W in J) { + if (!(W in X)) throw Error(`Unrecognized key: "${W}"`); + if (!J[W]) continue; + X[W] = new $({ type: "nonoptional", innerType: Y[W] }); + } + else for (let W in Y) X[W] = new $({ type: "nonoptional", innerType: Y[W] }); + return H6(Q, { ...Q._zod.def, shape: X, checks: [] }); +} +function A0($, Q = 0) { + var _a5; + for (let J = Q; J < $.issues.length; J++) if (((_a5 = $.issues[J]) == null ? void 0 : _a5.continue) !== true) return true; + return false; +} +function I6($, Q) { + return Q.map((J) => { + var _a5; + var Y; + return (_a5 = (Y = J).path) != null ? _a5 : Y.path = [], J.path.unshift($), J; + }); +} +function V7($) { + return typeof $ === "string" ? $ : $ == null ? void 0 : $.message; +} +function g6($, Q, J) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3; + let Y = { ...$, path: (_a5 = $.path) != null ? _a5 : [] }; + if (!$.message) { + let X = (_k3 = (_j = (_h2 = (_f2 = V7((_d = (_c2 = (_b3 = $.inst) == null ? void 0 : _b3._zod.def) == null ? void 0 : _c2.error) == null ? void 0 : _d.call(_c2, $))) != null ? _f2 : V7((_e2 = Q == null ? void 0 : Q.error) == null ? void 0 : _e2.call(Q, $))) != null ? _h2 : V7((_g = J.customError) == null ? void 0 : _g.call(J, $))) != null ? _j : V7((_i = J.localeError) == null ? void 0 : _i.call(J, $))) != null ? _k3 : "Invalid input"; + Y.message = X; + } + if (delete Y.inst, delete Y.continue, !(Q == null ? void 0 : Q.reportInput)) delete Y.input; + return Y; +} +function O7($) { + if ($ instanceof Set) return "set"; + if ($ instanceof Map) return "map"; + if ($ instanceof File) return "file"; + return "unknown"; +} +function D7($) { + if (Array.isArray($)) return "array"; + if (typeof $ === "string") return "string"; + return "unknown"; +} +function oH(...$) { + let [Q, J, Y] = $; + if (typeof Q === "string") return { message: Q, code: "custom", input: J, inst: Y }; + return { ...Q }; +} +function Wu($) { + return Object.entries($).filter(([Q, J]) => { + return Number.isNaN(Number.parseInt(Q, 10)); + }).map((Q) => Q[1]); +} +var YM = class { + constructor(...$) { + } +}; +var WM = ($, Q) => { + $.name = "$ZodError", Object.defineProperty($, "_zod", { value: $._zod, enumerable: false }), Object.defineProperty($, "issues", { value: Q, enumerable: false }), Object.defineProperty($, "message", { get() { + return JSON.stringify(Q, mH, 2); + }, enumerable: true }); +}; +var F7 = F("$ZodError", WM); +var u8 = F("$ZodError", WM, { Parent: Error }); +function m8($, Q = (J) => J.message) { + let J = {}, Y = []; + for (let X of $.issues) if (X.path.length > 0) J[X.path[0]] = J[X.path[0]] || [], J[X.path[0]].push(Q(X)); + else Y.push(Q(X)); + return { formErrors: Y, fieldErrors: J }; +} +function l8($, Q) { + let J = Q || function(W) { + return W.message; + }, Y = { _errors: [] }, X = (W) => { + for (let G of W.issues) if (G.code === "invalid_union" && G.errors.length) G.errors.map((U) => X({ issues: U })); + else if (G.code === "invalid_key") X({ issues: G.issues }); + else if (G.code === "invalid_element") X({ issues: G.issues }); + else if (G.path.length === 0) Y._errors.push(J(G)); + else { + let U = Y, H = 0; + while (H < G.path.length) { + let q = G.path[H]; + if (H !== G.path.length - 1) U[q] = U[q] || { _errors: [] }; + else U[q] = U[q] || { _errors: [] }, U[q]._errors.push(J(G)); + U = U[q], H++; + } + } + }; + return X($), Y; +} +function mX($, Q) { + let J = Q || function(W) { + return W.message; + }, Y = { errors: [] }, X = (W, G = []) => { + var _a5, _b3, _c2, _d; + var U, H; + for (let q of W.issues) if (q.code === "invalid_union" && q.errors.length) q.errors.map((V) => X({ issues: V }, q.path)); + else if (q.code === "invalid_key") X({ issues: q.issues }, q.path); + else if (q.code === "invalid_element") X({ issues: q.issues }, q.path); + else { + let V = [...G, ...q.path]; + if (V.length === 0) { + Y.errors.push(J(q)); + continue; + } + let B = Y, z4 = 0; + while (z4 < V.length) { + let N = V[z4], w = z4 === V.length - 1; + if (typeof N === "string") (_a5 = B.properties) != null ? _a5 : B.properties = {}, (_b3 = (U = B.properties)[N]) != null ? _b3 : U[N] = { errors: [] }, B = B.properties[N]; + else (_c2 = B.items) != null ? _c2 : B.items = [], (_d = (H = B.items)[N]) != null ? _d : H[N] = { errors: [] }, B = B.items[N]; + if (w) B.errors.push(J(q)); + z4++; + } + } + }; + return X($), Y; +} +function GM($) { + let Q = []; + for (let J of $) if (typeof J === "number") Q.push(`[${J}]`); + else if (typeof J === "symbol") Q.push(`[${JSON.stringify(String(J))}]`); + else if (/[^\w$]/.test(J)) Q.push(`[${JSON.stringify(J)}]`); + else { + if (Q.length) Q.push("."); + Q.push(J); + } + return Q.join(""); +} +function lX($) { + var _a5; + let Q = [], J = [...$.issues].sort((Y, X) => Y.path.length - X.path.length); + for (let Y of J) if (Q.push(`\u2716 ${Y.message}`), (_a5 = Y.path) == null ? void 0 : _a5.length) Q.push(` \u2192 at ${GM(Y.path)}`); + return Q.join(` +`); +} +var cX = ($) => (Q, J, Y, X) => { + var _a5; + let W = Y ? Object.assign(Y, { async: false }) : { async: false }, G = Q._zod.run({ value: J, issues: [] }, W); + if (G instanceof Promise) throw new n4(); + if (G.issues.length) { + let U = new ((_a5 = X == null ? void 0 : X.Err) != null ? _a5 : $)(G.issues.map((H) => g6(H, W, c$()))); + throw uX(U, X == null ? void 0 : X.callee), U; + } + return G.value; +}; +var I0 = cX(u8); +var pX = ($) => async (Q, J, Y, X) => { + var _a5; + let W = Y ? Object.assign(Y, { async: true }) : { async: true }, G = Q._zod.run({ value: J, issues: [] }, W); + if (G instanceof Promise) G = await G; + if (G.issues.length) { + let U = new ((_a5 = X == null ? void 0 : X.Err) != null ? _a5 : $)(G.issues.map((H) => g6(H, W, c$()))); + throw uX(U, X == null ? void 0 : X.callee), U; + } + return G.value; +}; +var R0 = pX(u8); +var dX = ($) => (Q, J, Y) => { + let X = Y ? { ...Y, async: false } : { async: false }, W = Q._zod.run({ value: J, issues: [] }, X); + if (W instanceof Promise) throw new n4(); + return W.issues.length ? { success: false, error: new ($ != null ? $ : F7)(W.issues.map((G) => g6(G, X, c$()))) } : { success: true, data: W.value }; +}; +var R1 = dX(u8); +var iX = ($) => async (Q, J, Y) => { + let X = Y ? Object.assign(Y, { async: true }) : { async: true }, W = Q._zod.run({ value: J, issues: [] }, X); + if (W instanceof Promise) W = await W; + return W.issues.length ? { success: false, error: new $(W.issues.map((G) => g6(G, X, c$()))) } : { success: true, data: W.value }; +}; +var P1 = iX(u8); +var E1 = {}; +M4(E1, { xid: () => eH, uuid7: () => qu, uuid6: () => Ku, uuid4: () => Hu, uuid: () => P0, uppercase: () => IK, unicodeEmail: () => zu, undefined: () => jK, ulid: () => sH, time: () => NK, string: () => OK, rfc5322Email: () => Bu, number: () => ZK, null: () => LK, nanoid: () => QK, lowercase: () => AK, ksuid: () => $K, ipv6: () => UK, ipv4: () => GK, integer: () => FK, html5Email: () => Vu, hostname: () => VK, guid: () => XK, extendedDuration: () => Uu, emoji: () => WK, email: () => YK, e164: () => BK, duration: () => JK, domain: () => Ou, datetime: () => wK, date: () => zK, cuid2: () => aH, cuid: () => tH, cidrv6: () => KK, cidrv4: () => HK, browserEmail: () => Nu, boolean: () => MK, bigint: () => DK, base64url: () => nX, base64: () => qK, _emoji: () => wu }); +var tH = /^[cC][^\s-]{8,}$/; +var aH = /^[0-9a-z]+$/; +var sH = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/; +var eH = /^[0-9a-vA-V]{20}$/; +var $K = /^[A-Za-z0-9]{27}$/; +var QK = /^[a-zA-Z0-9_-]{21}$/; +var JK = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/; +var Uu = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/; +var XK = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/; +var P0 = ($) => { + if (!$) return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/; + return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${$}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`); +}; +var Hu = P0(4); +var Ku = P0(6); +var qu = P0(7); +var YK = /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/; +var Vu = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; +var Bu = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; +var zu = /^[^\s@"]{1,64}@[^\s@]{1,255}$/u; +var Nu = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; +var wu = "^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$"; +function WK() { + return new RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$", "u"); +} +var GK = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/; +var UK = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/; +var HK = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/; +var KK = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/; +var qK = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/; +var nX = /^[A-Za-z0-9_-]*$/; +var VK = /^([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+$/; +var Ou = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/; +var BK = /^\+(?:[0-9]){6,14}[0-9]$/; +var UM = "(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))"; +var zK = new RegExp(`^${UM}$`); +function HM($) { + return typeof $.precision === "number" ? $.precision === -1 ? "(?:[01]\\d|2[0-3]):[0-5]\\d" : $.precision === 0 ? "(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d" : `(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{${$.precision}}` : "(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?"; +} +function NK($) { + return new RegExp(`^${HM($)}$`); +} +function wK($) { + let Q = HM({ precision: $.precision }), J = ["Z"]; + if ($.local) J.push(""); + if ($.offset) J.push("([+-]\\d{2}:\\d{2})"); + let Y = `${Q}(?:${J.join("|")})`; + return new RegExp(`^${UM}T(?:${Y})$`); +} +var OK = ($) => { + var _a5, _b3; + let Q = $ ? `[\\s\\S]{${(_a5 = $ == null ? void 0 : $.minimum) != null ? _a5 : 0},${(_b3 = $ == null ? void 0 : $.maximum) != null ? _b3 : ""}}` : "[\\s\\S]*"; + return new RegExp(`^${Q}$`); +}; +var DK = /^\d+n?$/; +var FK = /^\d+$/; +var ZK = /^-?\d+(?:\.\d+)?/i; +var MK = /true|false/i; +var LK = /null/i; +var jK = /undefined/i; +var AK = /^[^A-Z]*$/; +var IK = /^[^a-z]*$/; +var T$ = F("$ZodCheck", ($, Q) => { + var _a5, _b3; + var J; + (_a5 = $._zod) != null ? _a5 : $._zod = {}, $._zod.def = Q, (_b3 = (J = $._zod).onattach) != null ? _b3 : J.onattach = []; +}); +var qM = { number: "number", bigint: "bigint", object: "date" }; +var rX = F("$ZodCheckLessThan", ($, Q) => { + T$.init($, Q); + let J = qM[typeof Q.value]; + $._zod.onattach.push((Y) => { + var _a5; + let X = Y._zod.bag, W = (_a5 = Q.inclusive ? X.maximum : X.exclusiveMaximum) != null ? _a5 : Number.POSITIVE_INFINITY; + if (Q.value < W) if (Q.inclusive) X.maximum = Q.value; + else X.exclusiveMaximum = Q.value; + }), $._zod.check = (Y) => { + if (Q.inclusive ? Y.value <= Q.value : Y.value < Q.value) return; + Y.issues.push({ origin: J, code: "too_big", maximum: Q.value, input: Y.value, inclusive: Q.inclusive, inst: $, continue: !Q.abort }); + }; +}); +var oX = F("$ZodCheckGreaterThan", ($, Q) => { + T$.init($, Q); + let J = qM[typeof Q.value]; + $._zod.onattach.push((Y) => { + var _a5; + let X = Y._zod.bag, W = (_a5 = Q.inclusive ? X.minimum : X.exclusiveMinimum) != null ? _a5 : Number.NEGATIVE_INFINITY; + if (Q.value > W) if (Q.inclusive) X.minimum = Q.value; + else X.exclusiveMinimum = Q.value; + }), $._zod.check = (Y) => { + if (Q.inclusive ? Y.value >= Q.value : Y.value > Q.value) return; + Y.issues.push({ origin: J, code: "too_small", minimum: Q.value, input: Y.value, inclusive: Q.inclusive, inst: $, continue: !Q.abort }); + }; +}); +var RK = F("$ZodCheckMultipleOf", ($, Q) => { + T$.init($, Q), $._zod.onattach.push((J) => { + var _a5; + var Y; + (_a5 = (Y = J._zod.bag).multipleOf) != null ? _a5 : Y.multipleOf = Q.value; + }), $._zod.check = (J) => { + if (typeof J.value !== typeof Q.value) throw Error("Cannot mix number and bigint in multiple_of check."); + if (typeof J.value === "bigint" ? J.value % Q.value === BigInt(0) : lH(J.value, Q.value) === 0) return; + J.issues.push({ origin: typeof J.value, code: "not_multiple_of", divisor: Q.value, input: J.value, inst: $, continue: !Q.abort }); + }; +}); +var PK = F("$ZodCheckNumberFormat", ($, Q) => { + var _a5; + T$.init($, Q), Q.format = Q.format || "float64"; + let J = (_a5 = Q.format) == null ? void 0 : _a5.includes("int"), Y = J ? "int" : "number", [X, W] = nH[Q.format]; + $._zod.onattach.push((G) => { + let U = G._zod.bag; + if (U.format = Q.format, U.minimum = X, U.maximum = W, J) U.pattern = FK; + }), $._zod.check = (G) => { + let U = G.value; + if (J) { + if (!Number.isInteger(U)) { + G.issues.push({ expected: Y, format: Q.format, code: "invalid_type", input: U, inst: $ }); + return; + } + if (!Number.isSafeInteger(U)) { + if (U > 0) G.issues.push({ input: U, code: "too_big", maximum: Number.MAX_SAFE_INTEGER, note: "Integers must be within the safe integer range.", inst: $, origin: Y, continue: !Q.abort }); + else G.issues.push({ input: U, code: "too_small", minimum: Number.MIN_SAFE_INTEGER, note: "Integers must be within the safe integer range.", inst: $, origin: Y, continue: !Q.abort }); + return; + } + } + if (U < X) G.issues.push({ origin: "number", input: U, code: "too_small", minimum: X, inclusive: true, inst: $, continue: !Q.abort }); + if (U > W) G.issues.push({ origin: "number", input: U, code: "too_big", maximum: W, inst: $ }); + }; +}); +var EK = F("$ZodCheckBigIntFormat", ($, Q) => { + T$.init($, Q); + let [J, Y] = rH[Q.format]; + $._zod.onattach.push((X) => { + let W = X._zod.bag; + W.format = Q.format, W.minimum = J, W.maximum = Y; + }), $._zod.check = (X) => { + let W = X.value; + if (W < J) X.issues.push({ origin: "bigint", input: W, code: "too_small", minimum: J, inclusive: true, inst: $, continue: !Q.abort }); + if (W > Y) X.issues.push({ origin: "bigint", input: W, code: "too_big", maximum: Y, inst: $ }); + }; +}); +var bK = F("$ZodCheckMaxSize", ($, Q) => { + T$.init($, Q), $._zod.when = (J) => { + let Y = J.value; + return !I1(Y) && Y.size !== void 0; + }, $._zod.onattach.push((J) => { + var _a5; + let Y = (_a5 = J._zod.bag.maximum) != null ? _a5 : Number.POSITIVE_INFINITY; + if (Q.maximum < Y) J._zod.bag.maximum = Q.maximum; + }), $._zod.check = (J) => { + let Y = J.value; + if (Y.size <= Q.maximum) return; + J.issues.push({ origin: O7(Y), code: "too_big", maximum: Q.maximum, input: Y, inst: $, continue: !Q.abort }); + }; +}); +var _K = F("$ZodCheckMinSize", ($, Q) => { + T$.init($, Q), $._zod.when = (J) => { + let Y = J.value; + return !I1(Y) && Y.size !== void 0; + }, $._zod.onattach.push((J) => { + var _a5; + let Y = (_a5 = J._zod.bag.minimum) != null ? _a5 : Number.NEGATIVE_INFINITY; + if (Q.minimum > Y) J._zod.bag.minimum = Q.minimum; + }), $._zod.check = (J) => { + let Y = J.value; + if (Y.size >= Q.minimum) return; + J.issues.push({ origin: O7(Y), code: "too_small", minimum: Q.minimum, input: Y, inst: $, continue: !Q.abort }); + }; +}); +var kK = F("$ZodCheckSizeEquals", ($, Q) => { + T$.init($, Q), $._zod.when = (J) => { + let Y = J.value; + return !I1(Y) && Y.size !== void 0; + }, $._zod.onattach.push((J) => { + let Y = J._zod.bag; + Y.minimum = Q.size, Y.maximum = Q.size, Y.size = Q.size; + }), $._zod.check = (J) => { + let Y = J.value, X = Y.size; + if (X === Q.size) return; + let W = X > Q.size; + J.issues.push({ origin: O7(Y), ...W ? { code: "too_big", maximum: Q.size } : { code: "too_small", minimum: Q.size }, inclusive: true, exact: true, input: J.value, inst: $, continue: !Q.abort }); + }; +}); +var SK = F("$ZodCheckMaxLength", ($, Q) => { + T$.init($, Q), $._zod.when = (J) => { + let Y = J.value; + return !I1(Y) && Y.length !== void 0; + }, $._zod.onattach.push((J) => { + var _a5; + let Y = (_a5 = J._zod.bag.maximum) != null ? _a5 : Number.POSITIVE_INFINITY; + if (Q.maximum < Y) J._zod.bag.maximum = Q.maximum; + }), $._zod.check = (J) => { + let Y = J.value; + if (Y.length <= Q.maximum) return; + let W = D7(Y); + J.issues.push({ origin: W, code: "too_big", maximum: Q.maximum, inclusive: true, input: Y, inst: $, continue: !Q.abort }); + }; +}); +var vK = F("$ZodCheckMinLength", ($, Q) => { + T$.init($, Q), $._zod.when = (J) => { + let Y = J.value; + return !I1(Y) && Y.length !== void 0; + }, $._zod.onattach.push((J) => { + var _a5; + let Y = (_a5 = J._zod.bag.minimum) != null ? _a5 : Number.NEGATIVE_INFINITY; + if (Q.minimum > Y) J._zod.bag.minimum = Q.minimum; + }), $._zod.check = (J) => { + let Y = J.value; + if (Y.length >= Q.minimum) return; + let W = D7(Y); + J.issues.push({ origin: W, code: "too_small", minimum: Q.minimum, inclusive: true, input: Y, inst: $, continue: !Q.abort }); + }; +}); +var CK = F("$ZodCheckLengthEquals", ($, Q) => { + T$.init($, Q), $._zod.when = (J) => { + let Y = J.value; + return !I1(Y) && Y.length !== void 0; + }, $._zod.onattach.push((J) => { + let Y = J._zod.bag; + Y.minimum = Q.length, Y.maximum = Q.length, Y.length = Q.length; + }), $._zod.check = (J) => { + let Y = J.value, X = Y.length; + if (X === Q.length) return; + let W = D7(Y), G = X > Q.length; + J.issues.push({ origin: W, ...G ? { code: "too_big", maximum: Q.length } : { code: "too_small", minimum: Q.length }, inclusive: true, exact: true, input: J.value, inst: $, continue: !Q.abort }); + }; +}); +var c8 = F("$ZodCheckStringFormat", ($, Q) => { + var _a5, _b3; + var J, Y; + if (T$.init($, Q), $._zod.onattach.push((X) => { + var _a6; + let W = X._zod.bag; + if (W.format = Q.format, Q.pattern) (_a6 = W.patterns) != null ? _a6 : W.patterns = /* @__PURE__ */ new Set(), W.patterns.add(Q.pattern); + }), Q.pattern) (_a5 = (J = $._zod).check) != null ? _a5 : J.check = (X) => { + if (Q.pattern.lastIndex = 0, Q.pattern.test(X.value)) return; + X.issues.push({ origin: "string", code: "invalid_format", format: Q.format, input: X.value, ...Q.pattern ? { pattern: Q.pattern.toString() } : {}, inst: $, continue: !Q.abort }); + }; + else (_b3 = (Y = $._zod).check) != null ? _b3 : Y.check = () => { + }; +}); +var TK = F("$ZodCheckRegex", ($, Q) => { + c8.init($, Q), $._zod.check = (J) => { + if (Q.pattern.lastIndex = 0, Q.pattern.test(J.value)) return; + J.issues.push({ origin: "string", code: "invalid_format", format: "regex", input: J.value, pattern: Q.pattern.toString(), inst: $, continue: !Q.abort }); + }; +}); +var xK = F("$ZodCheckLowerCase", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = AK, c8.init($, Q); +}); +var yK = F("$ZodCheckUpperCase", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = IK, c8.init($, Q); +}); +var fK = F("$ZodCheckIncludes", ($, Q) => { + T$.init($, Q); + let J = r4(Q.includes), Y = new RegExp(typeof Q.position === "number" ? `^.{${Q.position}}${J}` : J); + Q.pattern = Y, $._zod.onattach.push((X) => { + var _a5; + let W = X._zod.bag; + (_a5 = W.patterns) != null ? _a5 : W.patterns = /* @__PURE__ */ new Set(), W.patterns.add(Y); + }), $._zod.check = (X) => { + if (X.value.includes(Q.includes, Q.position)) return; + X.issues.push({ origin: "string", code: "invalid_format", format: "includes", includes: Q.includes, input: X.value, inst: $, continue: !Q.abort }); + }; +}); +var gK = F("$ZodCheckStartsWith", ($, Q) => { + var _a5; + T$.init($, Q); + let J = new RegExp(`^${r4(Q.prefix)}.*`); + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = J, $._zod.onattach.push((Y) => { + var _a6; + let X = Y._zod.bag; + (_a6 = X.patterns) != null ? _a6 : X.patterns = /* @__PURE__ */ new Set(), X.patterns.add(J); + }), $._zod.check = (Y) => { + if (Y.value.startsWith(Q.prefix)) return; + Y.issues.push({ origin: "string", code: "invalid_format", format: "starts_with", prefix: Q.prefix, input: Y.value, inst: $, continue: !Q.abort }); + }; +}); +var hK = F("$ZodCheckEndsWith", ($, Q) => { + var _a5; + T$.init($, Q); + let J = new RegExp(`.*${r4(Q.suffix)}$`); + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = J, $._zod.onattach.push((Y) => { + var _a6; + let X = Y._zod.bag; + (_a6 = X.patterns) != null ? _a6 : X.patterns = /* @__PURE__ */ new Set(), X.patterns.add(J); + }), $._zod.check = (Y) => { + if (Y.value.endsWith(Q.suffix)) return; + Y.issues.push({ origin: "string", code: "invalid_format", format: "ends_with", suffix: Q.suffix, input: Y.value, inst: $, continue: !Q.abort }); + }; +}); +function KM($, Q, J) { + if ($.issues.length) Q.issues.push(...I6(J, $.issues)); +} +var uK = F("$ZodCheckProperty", ($, Q) => { + T$.init($, Q), $._zod.check = (J) => { + let Y = Q.schema._zod.run({ value: J.value[Q.property], issues: [] }, {}); + if (Y instanceof Promise) return Y.then((X) => KM(X, J, Q.property)); + KM(Y, J, Q.property); + return; + }; +}); +var mK = F("$ZodCheckMimeType", ($, Q) => { + T$.init($, Q); + let J = new Set(Q.mime); + $._zod.onattach.push((Y) => { + Y._zod.bag.mime = Q.mime; + }), $._zod.check = (Y) => { + if (J.has(Y.value.type)) return; + Y.issues.push({ code: "invalid_value", values: Q.mime, input: Y.value.type, inst: $ }); + }; +}); +var lK = F("$ZodCheckOverwrite", ($, Q) => { + T$.init($, Q), $._zod.check = (J) => { + J.value = Q.tx(J.value); + }; +}); +var tX = class { + constructor($ = []) { + if (this.content = [], this.indent = 0, this) this.args = $; + } + indented($) { + this.indent += 1, $(this), this.indent -= 1; + } + write($) { + if (typeof $ === "function") { + $(this, { execution: "sync" }), $(this, { execution: "async" }); + return; + } + let J = $.split(` +`).filter((W) => W), Y = Math.min(...J.map((W) => W.length - W.trimStart().length)), X = J.map((W) => W.slice(Y)).map((W) => " ".repeat(this.indent * 2) + W); + for (let W of X) this.content.push(W); + } + compile() { + var _a5; + let $ = Function, Q = this == null ? void 0 : this.args, Y = [...((_a5 = this == null ? void 0 : this.content) != null ? _a5 : [""]).map((X) => ` ${X}`)]; + return new $(...Q, Y.join(` +`)); + } +}; +var cK = { major: 4, minor: 0, patch: 0 }; +var o = F("$ZodType", ($, Q) => { + var _a5, _b3, _c2; + var J; + $ != null ? $ : $ = {}, $._zod.def = Q, $._zod.bag = $._zod.bag || {}, $._zod.version = cK; + let Y = [...(_a5 = $._zod.def.checks) != null ? _a5 : []]; + if ($._zod.traits.has("$ZodCheck")) Y.unshift($); + for (let X of Y) for (let W of X._zod.onattach) W($); + if (Y.length === 0) (_b3 = (J = $._zod).deferred) != null ? _b3 : J.deferred = [], (_c2 = $._zod.deferred) == null ? void 0 : _c2.push(() => { + $._zod.run = $._zod.parse; + }); + else { + let X = (W, G, U) => { + let H = A0(W), q; + for (let V of G) { + if (V._zod.when) { + if (!V._zod.when(W)) continue; + } else if (H) continue; + let B = W.issues.length, z4 = V._zod.check(W); + if (z4 instanceof Promise && (U == null ? void 0 : U.async) === false) throw new n4(); + if (q || z4 instanceof Promise) q = (q != null ? q : Promise.resolve()).then(async () => { + if (await z4, W.issues.length === B) return; + if (!H) H = A0(W, B); + }); + else { + if (W.issues.length === B) continue; + if (!H) H = A0(W, B); + } + } + if (q) return q.then(() => { + return W; + }); + return W; + }; + $._zod.run = (W, G) => { + let U = $._zod.parse(W, G); + if (U instanceof Promise) { + if (G.async === false) throw new n4(); + return U.then((H) => X(H, Y, G)); + } + return X(U, Y, G); + }; + } + $["~standard"] = { validate: (X) => { + var _a6; + try { + let W = R1($, X); + return W.success ? { value: W.data } : { issues: (_a6 = W.error) == null ? void 0 : _a6.issues }; + } catch (W) { + return P1($, X).then((G) => { + var _a7; + return G.success ? { value: G.data } : { issues: (_a7 = G.error) == null ? void 0 : _a7.issues }; + }); + } + }, vendor: "zod", version: 1 }; +}); +var b1 = F("$ZodString", ($, Q) => { + var _a5, _b3, _c2; + o.init($, Q), $._zod.pattern = (_c2 = [...(_b3 = (_a5 = $ == null ? void 0 : $._zod.bag) == null ? void 0 : _a5.patterns) != null ? _b3 : []].pop()) != null ? _c2 : OK($._zod.bag), $._zod.parse = (J, Y) => { + if (Q.coerce) try { + J.value = String(J.value); + } catch (X) { + } + if (typeof J.value === "string") return J; + return J.issues.push({ expected: "string", code: "invalid_type", input: J.value, inst: $ }), J; + }; +}); +var j$ = F("$ZodStringFormat", ($, Q) => { + c8.init($, Q), b1.init($, Q); +}); +var eX = F("$ZodGUID", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = XK, j$.init($, Q); +}); +var $Y = F("$ZodUUID", ($, Q) => { + var _a5, _b3; + if (Q.version) { + let Y = { v1: 1, v2: 2, v3: 3, v4: 4, v5: 5, v6: 6, v7: 7, v8: 8 }[Q.version]; + if (Y === void 0) throw Error(`Invalid UUID version: "${Q.version}"`); + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = P0(Y); + } else (_b3 = Q.pattern) != null ? _b3 : Q.pattern = P0(); + j$.init($, Q); +}); +var QY = F("$ZodEmail", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = YK, j$.init($, Q); +}); +var JY = F("$ZodURL", ($, Q) => { + j$.init($, Q), $._zod.check = (J) => { + try { + let Y = J.value, X = new URL(Y), W = X.href; + if (Q.hostname) { + if (Q.hostname.lastIndex = 0, !Q.hostname.test(X.hostname)) J.issues.push({ code: "invalid_format", format: "url", note: "Invalid hostname", pattern: VK.source, input: J.value, inst: $, continue: !Q.abort }); + } + if (Q.protocol) { + if (Q.protocol.lastIndex = 0, !Q.protocol.test(X.protocol.endsWith(":") ? X.protocol.slice(0, -1) : X.protocol)) J.issues.push({ code: "invalid_format", format: "url", note: "Invalid protocol", pattern: Q.protocol.source, input: J.value, inst: $, continue: !Q.abort }); + } + if (!Y.endsWith("/") && W.endsWith("/")) J.value = W.slice(0, -1); + else J.value = W; + return; + } catch (Y) { + J.issues.push({ code: "invalid_format", format: "url", input: J.value, inst: $, continue: !Q.abort }); + } + }; +}); +var XY = F("$ZodEmoji", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = WK(), j$.init($, Q); +}); +var YY = F("$ZodNanoID", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = QK, j$.init($, Q); +}); +var WY = F("$ZodCUID", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = tH, j$.init($, Q); +}); +var GY = F("$ZodCUID2", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = aH, j$.init($, Q); +}); +var UY = F("$ZodULID", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = sH, j$.init($, Q); +}); +var HY = F("$ZodXID", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = eH, j$.init($, Q); +}); +var KY = F("$ZodKSUID", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = $K, j$.init($, Q); +}); +var dK = F("$ZodISODateTime", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = wK(Q), j$.init($, Q); +}); +var iK = F("$ZodISODate", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = zK, j$.init($, Q); +}); +var nK = F("$ZodISOTime", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = NK(Q), j$.init($, Q); +}); +var rK = F("$ZodISODuration", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = JK, j$.init($, Q); +}); +var qY = F("$ZodIPv4", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = GK, j$.init($, Q), $._zod.onattach.push((J) => { + let Y = J._zod.bag; + Y.format = "ipv4"; + }); +}); +var VY = F("$ZodIPv6", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = UK, j$.init($, Q), $._zod.onattach.push((J) => { + let Y = J._zod.bag; + Y.format = "ipv6"; + }), $._zod.check = (J) => { + try { + new URL(`http://[${J.value}]`); + } catch (e2) { + J.issues.push({ code: "invalid_format", format: "ipv6", input: J.value, inst: $, continue: !Q.abort }); + } + }; +}); +var BY = F("$ZodCIDRv4", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = HK, j$.init($, Q); +}); +var zY = F("$ZodCIDRv6", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = KK, j$.init($, Q), $._zod.check = (J) => { + let [Y, X] = J.value.split("/"); + try { + if (!X) throw Error(); + let W = Number(X); + if (`${W}` !== X) throw Error(); + if (W < 0 || W > 128) throw Error(); + new URL(`http://[${Y}]`); + } catch (e2) { + J.issues.push({ code: "invalid_format", format: "cidrv6", input: J.value, inst: $, continue: !Q.abort }); + } + }; +}); +function oK($) { + if ($ === "") return true; + if ($.length % 4 !== 0) return false; + try { + return atob($), true; + } catch (e2) { + return false; + } +} +var NY = F("$ZodBase64", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = qK, j$.init($, Q), $._zod.onattach.push((J) => { + J._zod.bag.contentEncoding = "base64"; + }), $._zod.check = (J) => { + if (oK(J.value)) return; + J.issues.push({ code: "invalid_format", format: "base64", input: J.value, inst: $, continue: !Q.abort }); + }; +}); +function AM($) { + if (!nX.test($)) return false; + let Q = $.replace(/[-_]/g, (Y) => Y === "-" ? "+" : "/"), J = Q.padEnd(Math.ceil(Q.length / 4) * 4, "="); + return oK(J); +} +var wY = F("$ZodBase64URL", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = nX, j$.init($, Q), $._zod.onattach.push((J) => { + J._zod.bag.contentEncoding = "base64url"; + }), $._zod.check = (J) => { + if (AM(J.value)) return; + J.issues.push({ code: "invalid_format", format: "base64url", input: J.value, inst: $, continue: !Q.abort }); + }; +}); +var OY = F("$ZodE164", ($, Q) => { + var _a5; + (_a5 = Q.pattern) != null ? _a5 : Q.pattern = BK, j$.init($, Q); +}); +function IM($, Q = null) { + try { + let J = $.split("."); + if (J.length !== 3) return false; + let [Y] = J; + if (!Y) return false; + let X = JSON.parse(atob(Y)); + if ("typ" in X && (X == null ? void 0 : X.typ) !== "JWT") return false; + if (!X.alg) return false; + if (Q && (!("alg" in X) || X.alg !== Q)) return false; + return true; + } catch (e2) { + return false; + } +} +var DY = F("$ZodJWT", ($, Q) => { + j$.init($, Q), $._zod.check = (J) => { + if (IM(J.value, Q.alg)) return; + J.issues.push({ code: "invalid_format", format: "jwt", input: J.value, inst: $, continue: !Q.abort }); + }; +}); +var FY = F("$ZodCustomStringFormat", ($, Q) => { + j$.init($, Q), $._zod.check = (J) => { + if (Q.fn(J.value)) return; + J.issues.push({ code: "invalid_format", format: Q.format, input: J.value, inst: $, continue: !Q.abort }); + }; +}); +var Z7 = F("$ZodNumber", ($, Q) => { + var _a5; + o.init($, Q), $._zod.pattern = (_a5 = $._zod.bag.pattern) != null ? _a5 : ZK, $._zod.parse = (J, Y) => { + if (Q.coerce) try { + J.value = Number(J.value); + } catch (G) { + } + let X = J.value; + if (typeof X === "number" && !Number.isNaN(X) && Number.isFinite(X)) return J; + let W = typeof X === "number" ? Number.isNaN(X) ? "NaN" : !Number.isFinite(X) ? "Infinity" : void 0 : void 0; + return J.issues.push({ expected: "number", code: "invalid_type", input: X, inst: $, ...W ? { received: W } : {} }), J; + }; +}); +var ZY = F("$ZodNumber", ($, Q) => { + PK.init($, Q), Z7.init($, Q); +}); +var p8 = F("$ZodBoolean", ($, Q) => { + o.init($, Q), $._zod.pattern = MK, $._zod.parse = (J, Y) => { + if (Q.coerce) try { + J.value = Boolean(J.value); + } catch (W) { + } + let X = J.value; + if (typeof X === "boolean") return J; + return J.issues.push({ expected: "boolean", code: "invalid_type", input: X, inst: $ }), J; + }; +}); +var M7 = F("$ZodBigInt", ($, Q) => { + o.init($, Q), $._zod.pattern = DK, $._zod.parse = (J, Y) => { + if (Q.coerce) try { + J.value = BigInt(J.value); + } catch (X) { + } + if (typeof J.value === "bigint") return J; + return J.issues.push({ expected: "bigint", code: "invalid_type", input: J.value, inst: $ }), J; + }; +}); +var MY = F("$ZodBigInt", ($, Q) => { + EK.init($, Q), M7.init($, Q); +}); +var LY = F("$ZodSymbol", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + let X = J.value; + if (typeof X === "symbol") return J; + return J.issues.push({ expected: "symbol", code: "invalid_type", input: X, inst: $ }), J; + }; +}); +var jY = F("$ZodUndefined", ($, Q) => { + o.init($, Q), $._zod.pattern = jK, $._zod.values = /* @__PURE__ */ new Set([void 0]), $._zod.optin = "optional", $._zod.optout = "optional", $._zod.parse = (J, Y) => { + let X = J.value; + if (typeof X > "u") return J; + return J.issues.push({ expected: "undefined", code: "invalid_type", input: X, inst: $ }), J; + }; +}); +var AY = F("$ZodNull", ($, Q) => { + o.init($, Q), $._zod.pattern = LK, $._zod.values = /* @__PURE__ */ new Set([null]), $._zod.parse = (J, Y) => { + let X = J.value; + if (X === null) return J; + return J.issues.push({ expected: "null", code: "invalid_type", input: X, inst: $ }), J; + }; +}); +var IY = F("$ZodAny", ($, Q) => { + o.init($, Q), $._zod.parse = (J) => J; +}); +var E0 = F("$ZodUnknown", ($, Q) => { + o.init($, Q), $._zod.parse = (J) => J; +}); +var RY = F("$ZodNever", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + return J.issues.push({ expected: "never", code: "invalid_type", input: J.value, inst: $ }), J; + }; +}); +var PY = F("$ZodVoid", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + let X = J.value; + if (typeof X > "u") return J; + return J.issues.push({ expected: "void", code: "invalid_type", input: X, inst: $ }), J; + }; +}); +var EY = F("$ZodDate", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + if (Q.coerce) try { + J.value = new Date(J.value); + } catch (U) { + } + let X = J.value, W = X instanceof Date; + if (W && !Number.isNaN(X.getTime())) return J; + return J.issues.push({ expected: "date", code: "invalid_type", input: X, ...W ? { received: "Invalid Date" } : {}, inst: $ }), J; + }; +}); +function BM($, Q, J) { + if ($.issues.length) Q.issues.push(...I6(J, $.issues)); + Q.value[J] = $.value; +} +var d8 = F("$ZodArray", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + let X = J.value; + if (!Array.isArray(X)) return J.issues.push({ expected: "array", code: "invalid_type", input: X, inst: $ }), J; + J.value = Array(X.length); + let W = []; + for (let G = 0; G < X.length; G++) { + let U = X[G], H = Q.element._zod.run({ value: U, issues: [] }, Y); + if (H instanceof Promise) W.push(H.then((q) => BM(q, J, G))); + else BM(H, J, G); + } + if (W.length) return Promise.all(W).then(() => J); + return J; + }; +}); +function aX($, Q, J) { + if ($.issues.length) Q.issues.push(...I6(J, $.issues)); + Q.value[J] = $.value; +} +function zM($, Q, J, Y) { + if ($.issues.length) if (Y[J] === void 0) if (J in Y) Q.value[J] = void 0; + else Q.value[J] = $.value; + else Q.issues.push(...I6(J, $.issues)); + else if ($.value === void 0) { + if (J in Y) Q.value[J] = void 0; + } else Q.value[J] = $.value; +} +var L7 = F("$ZodObject", ($, Q) => { + o.init($, Q); + let J = z7(() => { + let B = Object.keys(Q.shape); + for (let N of B) if (!(Q.shape[N] instanceof o)) throw Error(`Invalid element at key "${N}": expected a Zod schema`); + let z4 = iH(Q.shape); + return { shape: Q.shape, keys: B, keySet: new Set(B), numKeys: B.length, optionalKeys: new Set(z4) }; + }); + N$($._zod, "propValues", () => { + var _a5; + let B = Q.shape, z4 = {}; + for (let N in B) { + let w = B[N]._zod; + if (w.values) { + (_a5 = z4[N]) != null ? _a5 : z4[N] = /* @__PURE__ */ new Set(); + for (let O of w.values) z4[N].add(O); + } + } + return z4; + }); + let Y = (B) => { + let z4 = new tX(["shape", "payload", "ctx"]), N = J.value, w = (j) => { + let A = j0(j); + return `shape[${A}]._zod.run({ value: input[${A}], issues: [] }, ctx)`; + }; + z4.write("const input = payload.value;"); + let O = /* @__PURE__ */ Object.create(null), D = 0; + for (let j of N.keys) O[j] = `key_${D++}`; + z4.write("const newResult = {}"); + for (let j of N.keys) if (N.optionalKeys.has(j)) { + let A = O[j]; + z4.write(`const ${A} = ${w(j)};`); + let S = j0(j); + z4.write(` + if (${A}.issues.length) { + if (input[${S}] === undefined) { + if (${S} in input) { + newResult[${S}] = undefined; + } + } else { + payload.issues = payload.issues.concat( + ${A}.issues.map((iss) => ({ + ...iss, + path: iss.path ? [${S}, ...iss.path] : [${S}], + })) + ); + } + } else if (${A}.value === undefined) { + if (${S} in input) newResult[${S}] = undefined; + } else { + newResult[${S}] = ${A}.value; + } + `); + } else { + let A = O[j]; + z4.write(`const ${A} = ${w(j)};`), z4.write(` + if (${A}.issues.length) payload.issues = payload.issues.concat(${A}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${j0(j)}, ...iss.path] : [${j0(j)}] + })));`), z4.write(`newResult[${j0(j)}] = ${A}.value`); + } + z4.write("payload.value = newResult;"), z4.write("return payload;"); + let M = z4.compile(); + return (j, A) => M(B, j, A); + }, X, W = g8, G = !q7.jitless, H = G && pH.value, q = Q.catchall, V; + $._zod.parse = (B, z4) => { + V != null ? V : V = J.value; + let N = B.value; + if (!W(N)) return B.issues.push({ expected: "object", code: "invalid_type", input: N, inst: $ }), B; + let w = []; + if (G && H && (z4 == null ? void 0 : z4.async) === false && z4.jitless !== true) { + if (!X) X = Y(Q.shape); + B = X(B, z4); + } else { + B.value = {}; + let A = V.shape; + for (let S of V.keys) { + let u = A[S], G$ = u._zod.run({ value: N[S], issues: [] }, z4), h$ = u._zod.optin === "optional" && u._zod.optout === "optional"; + if (G$ instanceof Promise) w.push(G$.then((e$) => h$ ? zM(e$, B, S, N) : aX(e$, B, S))); + else if (h$) zM(G$, B, S, N); + else aX(G$, B, S); + } + } + if (!q) return w.length ? Promise.all(w).then(() => B) : B; + let O = [], D = V.keySet, M = q._zod, j = M.def.type; + for (let A of Object.keys(N)) { + if (D.has(A)) continue; + if (j === "never") { + O.push(A); + continue; + } + let S = M.run({ value: N[A], issues: [] }, z4); + if (S instanceof Promise) w.push(S.then((u) => aX(u, B, A))); + else aX(S, B, A); + } + if (O.length) B.issues.push({ code: "unrecognized_keys", keys: O, input: N, inst: $ }); + if (!w.length) return B; + return Promise.all(w).then(() => { + return B; + }); + }; +}); +function NM($, Q, J, Y) { + for (let X of $) if (X.issues.length === 0) return Q.value = X.value, Q; + return Q.issues.push({ code: "invalid_union", input: Q.value, inst: J, errors: $.map((X) => X.issues.map((W) => g6(W, Y, c$()))) }), Q; +} +var j7 = F("$ZodUnion", ($, Q) => { + o.init($, Q), N$($._zod, "optin", () => Q.options.some((J) => J._zod.optin === "optional") ? "optional" : void 0), N$($._zod, "optout", () => Q.options.some((J) => J._zod.optout === "optional") ? "optional" : void 0), N$($._zod, "values", () => { + if (Q.options.every((J) => J._zod.values)) return new Set(Q.options.flatMap((J) => Array.from(J._zod.values))); + return; + }), N$($._zod, "pattern", () => { + if (Q.options.every((J) => J._zod.pattern)) { + let J = Q.options.map((Y) => Y._zod.pattern); + return new RegExp(`^(${J.map((Y) => N7(Y.source)).join("|")})$`); + } + return; + }), $._zod.parse = (J, Y) => { + let X = false, W = []; + for (let G of Q.options) { + let U = G._zod.run({ value: J.value, issues: [] }, Y); + if (U instanceof Promise) W.push(U), X = true; + else { + if (U.issues.length === 0) return U; + W.push(U); + } + } + if (!X) return NM(W, J, $, Y); + return Promise.all(W).then((G) => { + return NM(G, J, $, Y); + }); + }; +}); +var bY = F("$ZodDiscriminatedUnion", ($, Q) => { + j7.init($, Q); + let J = $._zod.parse; + N$($._zod, "propValues", () => { + let X = {}; + for (let W of Q.options) { + let G = W._zod.propValues; + if (!G || Object.keys(G).length === 0) throw Error(`Invalid discriminated union option at index "${Q.options.indexOf(W)}"`); + for (let [U, H] of Object.entries(G)) { + if (!X[U]) X[U] = /* @__PURE__ */ new Set(); + for (let q of H) X[U].add(q); + } + } + return X; + }); + let Y = z7(() => { + let X = Q.options, W = /* @__PURE__ */ new Map(); + for (let G of X) { + let U = G._zod.propValues[Q.discriminator]; + if (!U || U.size === 0) throw Error(`Invalid discriminated union option at index "${Q.options.indexOf(G)}"`); + for (let H of U) { + if (W.has(H)) throw Error(`Duplicate discriminator value "${String(H)}"`); + W.set(H, G); + } + } + return W; + }); + $._zod.parse = (X, W) => { + let G = X.value; + if (!g8(G)) return X.issues.push({ code: "invalid_type", expected: "object", input: G, inst: $ }), X; + let U = Y.value.get(G == null ? void 0 : G[Q.discriminator]); + if (U) return U._zod.run(X, W); + if (Q.unionFallback) return J(X, W); + return X.issues.push({ code: "invalid_union", errors: [], note: "No matching discriminator", input: G, path: [Q.discriminator], inst: $ }), X; + }; +}); +var _Y = F("$ZodIntersection", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + let X = J.value, W = Q.left._zod.run({ value: X, issues: [] }, Y), G = Q.right._zod.run({ value: X, issues: [] }, Y); + if (W instanceof Promise || G instanceof Promise) return Promise.all([W, G]).then(([H, q]) => { + return wM(J, H, q); + }); + return wM(J, W, G); + }; +}); +function pK($, Q) { + if ($ === Q) return { valid: true, data: $ }; + if ($ instanceof Date && Q instanceof Date && +$ === +Q) return { valid: true, data: $ }; + if (h8($) && h8(Q)) { + let J = Object.keys(Q), Y = Object.keys($).filter((W) => J.indexOf(W) !== -1), X = { ...$, ...Q }; + for (let W of Y) { + let G = pK($[W], Q[W]); + if (!G.valid) return { valid: false, mergeErrorPath: [W, ...G.mergeErrorPath] }; + X[W] = G.data; + } + return { valid: true, data: X }; + } + if (Array.isArray($) && Array.isArray(Q)) { + if ($.length !== Q.length) return { valid: false, mergeErrorPath: [] }; + let J = []; + for (let Y = 0; Y < $.length; Y++) { + let X = $[Y], W = Q[Y], G = pK(X, W); + if (!G.valid) return { valid: false, mergeErrorPath: [Y, ...G.mergeErrorPath] }; + J.push(G.data); + } + return { valid: true, data: J }; + } + return { valid: false, mergeErrorPath: [] }; +} +function wM($, Q, J) { + if (Q.issues.length) $.issues.push(...Q.issues); + if (J.issues.length) $.issues.push(...J.issues); + if (A0($)) return $; + let Y = pK(Q.value, J.value); + if (!Y.valid) throw Error(`Unmergable intersection. Error path: ${JSON.stringify(Y.mergeErrorPath)}`); + return $.value = Y.data, $; +} +var _1 = F("$ZodTuple", ($, Q) => { + o.init($, Q); + let J = Q.items, Y = J.length - [...J].reverse().findIndex((X) => X._zod.optin !== "optional"); + $._zod.parse = (X, W) => { + let G = X.value; + if (!Array.isArray(G)) return X.issues.push({ input: G, inst: $, expected: "tuple", code: "invalid_type" }), X; + X.value = []; + let U = []; + if (!Q.rest) { + let q = G.length > J.length, V = G.length < Y - 1; + if (q || V) return X.issues.push({ input: G, inst: $, origin: "array", ...q ? { code: "too_big", maximum: J.length } : { code: "too_small", minimum: J.length } }), X; + } + let H = -1; + for (let q of J) { + if (H++, H >= G.length) { + if (H >= Y) continue; + } + let V = q._zod.run({ value: G[H], issues: [] }, W); + if (V instanceof Promise) U.push(V.then((B) => sX(B, X, H))); + else sX(V, X, H); + } + if (Q.rest) { + let q = G.slice(J.length); + for (let V of q) { + H++; + let B = Q.rest._zod.run({ value: V, issues: [] }, W); + if (B instanceof Promise) U.push(B.then((z4) => sX(z4, X, H))); + else sX(B, X, H); + } + } + if (U.length) return Promise.all(U).then(() => X); + return X; + }; +}); +function sX($, Q, J) { + if ($.issues.length) Q.issues.push(...I6(J, $.issues)); + Q.value[J] = $.value; +} +var kY = F("$ZodRecord", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + let X = J.value; + if (!h8(X)) return J.issues.push({ expected: "record", code: "invalid_type", input: X, inst: $ }), J; + let W = []; + if (Q.keyType._zod.values) { + let G = Q.keyType._zod.values; + J.value = {}; + for (let H of G) if (typeof H === "string" || typeof H === "number" || typeof H === "symbol") { + let q = Q.valueType._zod.run({ value: X[H], issues: [] }, Y); + if (q instanceof Promise) W.push(q.then((V) => { + if (V.issues.length) J.issues.push(...I6(H, V.issues)); + J.value[H] = V.value; + })); + else { + if (q.issues.length) J.issues.push(...I6(H, q.issues)); + J.value[H] = q.value; + } + } + let U; + for (let H in X) if (!G.has(H)) U = U != null ? U : [], U.push(H); + if (U && U.length > 0) J.issues.push({ code: "unrecognized_keys", input: X, inst: $, keys: U }); + } else { + J.value = {}; + for (let G of Reflect.ownKeys(X)) { + if (G === "__proto__") continue; + let U = Q.keyType._zod.run({ value: G, issues: [] }, Y); + if (U instanceof Promise) throw Error("Async schemas not supported in object keys currently"); + if (U.issues.length) { + J.issues.push({ origin: "record", code: "invalid_key", issues: U.issues.map((q) => g6(q, Y, c$())), input: G, path: [G], inst: $ }), J.value[U.value] = U.value; + continue; + } + let H = Q.valueType._zod.run({ value: X[G], issues: [] }, Y); + if (H instanceof Promise) W.push(H.then((q) => { + if (q.issues.length) J.issues.push(...I6(G, q.issues)); + J.value[U.value] = q.value; + })); + else { + if (H.issues.length) J.issues.push(...I6(G, H.issues)); + J.value[U.value] = H.value; + } + } + } + if (W.length) return Promise.all(W).then(() => J); + return J; + }; +}); +var SY = F("$ZodMap", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + let X = J.value; + if (!(X instanceof Map)) return J.issues.push({ expected: "map", code: "invalid_type", input: X, inst: $ }), J; + let W = []; + J.value = /* @__PURE__ */ new Map(); + for (let [G, U] of X) { + let H = Q.keyType._zod.run({ value: G, issues: [] }, Y), q = Q.valueType._zod.run({ value: U, issues: [] }, Y); + if (H instanceof Promise || q instanceof Promise) W.push(Promise.all([H, q]).then(([V, B]) => { + OM(V, B, J, G, X, $, Y); + })); + else OM(H, q, J, G, X, $, Y); + } + if (W.length) return Promise.all(W).then(() => J); + return J; + }; +}); +function OM($, Q, J, Y, X, W, G) { + if ($.issues.length) if (w7.has(typeof Y)) J.issues.push(...I6(Y, $.issues)); + else J.issues.push({ origin: "map", code: "invalid_key", input: X, inst: W, issues: $.issues.map((U) => g6(U, G, c$())) }); + if (Q.issues.length) if (w7.has(typeof Y)) J.issues.push(...I6(Y, Q.issues)); + else J.issues.push({ origin: "map", code: "invalid_element", input: X, inst: W, key: Y, issues: Q.issues.map((U) => g6(U, G, c$())) }); + J.value.set($.value, Q.value); +} +var vY = F("$ZodSet", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + let X = J.value; + if (!(X instanceof Set)) return J.issues.push({ input: X, inst: $, expected: "set", code: "invalid_type" }), J; + let W = []; + J.value = /* @__PURE__ */ new Set(); + for (let G of X) { + let U = Q.valueType._zod.run({ value: G, issues: [] }, Y); + if (U instanceof Promise) W.push(U.then((H) => DM(H, J))); + else DM(U, J); + } + if (W.length) return Promise.all(W).then(() => J); + return J; + }; +}); +function DM($, Q) { + if ($.issues.length) Q.issues.push(...$.issues); + Q.value.add($.value); +} +var CY = F("$ZodEnum", ($, Q) => { + o.init($, Q); + let J = B7(Q.entries); + $._zod.values = new Set(J), $._zod.pattern = new RegExp(`^(${J.filter((Y) => w7.has(typeof Y)).map((Y) => typeof Y === "string" ? r4(Y) : Y.toString()).join("|")})$`), $._zod.parse = (Y, X) => { + let W = Y.value; + if ($._zod.values.has(W)) return Y; + return Y.issues.push({ code: "invalid_value", values: J, input: W, inst: $ }), Y; + }; +}); +var TY = F("$ZodLiteral", ($, Q) => { + o.init($, Q), $._zod.values = new Set(Q.values), $._zod.pattern = new RegExp(`^(${Q.values.map((J) => typeof J === "string" ? r4(J) : J ? J.toString() : String(J)).join("|")})$`), $._zod.parse = (J, Y) => { + let X = J.value; + if ($._zod.values.has(X)) return J; + return J.issues.push({ code: "invalid_value", values: Q.values, input: X, inst: $ }), J; + }; +}); +var xY = F("$ZodFile", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + let X = J.value; + if (X instanceof File) return J; + return J.issues.push({ expected: "file", code: "invalid_type", input: X, inst: $ }), J; + }; +}); +var i8 = F("$ZodTransform", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + let X = Q.transform(J.value, J); + if (Y.async) return (X instanceof Promise ? X : Promise.resolve(X)).then((G) => { + return J.value = G, J; + }); + if (X instanceof Promise) throw new n4(); + return J.value = X, J; + }; +}); +var yY = F("$ZodOptional", ($, Q) => { + o.init($, Q), $._zod.optin = "optional", $._zod.optout = "optional", N$($._zod, "values", () => { + return Q.innerType._zod.values ? /* @__PURE__ */ new Set([...Q.innerType._zod.values, void 0]) : void 0; + }), N$($._zod, "pattern", () => { + let J = Q.innerType._zod.pattern; + return J ? new RegExp(`^(${N7(J.source)})?$`) : void 0; + }), $._zod.parse = (J, Y) => { + if (Q.innerType._zod.optin === "optional") return Q.innerType._zod.run(J, Y); + if (J.value === void 0) return J; + return Q.innerType._zod.run(J, Y); + }; +}); +var fY = F("$ZodNullable", ($, Q) => { + o.init($, Q), N$($._zod, "optin", () => Q.innerType._zod.optin), N$($._zod, "optout", () => Q.innerType._zod.optout), N$($._zod, "pattern", () => { + let J = Q.innerType._zod.pattern; + return J ? new RegExp(`^(${N7(J.source)}|null)$`) : void 0; + }), N$($._zod, "values", () => { + return Q.innerType._zod.values ? /* @__PURE__ */ new Set([...Q.innerType._zod.values, null]) : void 0; + }), $._zod.parse = (J, Y) => { + if (J.value === null) return J; + return Q.innerType._zod.run(J, Y); + }; +}); +var gY = F("$ZodDefault", ($, Q) => { + o.init($, Q), $._zod.optin = "optional", N$($._zod, "values", () => Q.innerType._zod.values), $._zod.parse = (J, Y) => { + if (J.value === void 0) return J.value = Q.defaultValue, J; + let X = Q.innerType._zod.run(J, Y); + if (X instanceof Promise) return X.then((W) => FM(W, Q)); + return FM(X, Q); + }; +}); +function FM($, Q) { + if ($.value === void 0) $.value = Q.defaultValue; + return $; +} +var hY = F("$ZodPrefault", ($, Q) => { + o.init($, Q), $._zod.optin = "optional", N$($._zod, "values", () => Q.innerType._zod.values), $._zod.parse = (J, Y) => { + if (J.value === void 0) J.value = Q.defaultValue; + return Q.innerType._zod.run(J, Y); + }; +}); +var uY = F("$ZodNonOptional", ($, Q) => { + o.init($, Q), N$($._zod, "values", () => { + let J = Q.innerType._zod.values; + return J ? new Set([...J].filter((Y) => Y !== void 0)) : void 0; + }), $._zod.parse = (J, Y) => { + let X = Q.innerType._zod.run(J, Y); + if (X instanceof Promise) return X.then((W) => ZM(W, $)); + return ZM(X, $); + }; +}); +function ZM($, Q) { + if (!$.issues.length && $.value === void 0) $.issues.push({ code: "invalid_type", expected: "nonoptional", input: $.value, inst: Q }); + return $; +} +var mY = F("$ZodSuccess", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + let X = Q.innerType._zod.run(J, Y); + if (X instanceof Promise) return X.then((W) => { + return J.value = W.issues.length === 0, J; + }); + return J.value = X.issues.length === 0, J; + }; +}); +var lY = F("$ZodCatch", ($, Q) => { + o.init($, Q), $._zod.optin = "optional", N$($._zod, "optout", () => Q.innerType._zod.optout), N$($._zod, "values", () => Q.innerType._zod.values), $._zod.parse = (J, Y) => { + let X = Q.innerType._zod.run(J, Y); + if (X instanceof Promise) return X.then((W) => { + if (J.value = W.value, W.issues.length) J.value = Q.catchValue({ ...J, error: { issues: W.issues.map((G) => g6(G, Y, c$())) }, input: J.value }), J.issues = []; + return J; + }); + if (J.value = X.value, X.issues.length) J.value = Q.catchValue({ ...J, error: { issues: X.issues.map((W) => g6(W, Y, c$())) }, input: J.value }), J.issues = []; + return J; + }; +}); +var cY = F("$ZodNaN", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + if (typeof J.value !== "number" || !Number.isNaN(J.value)) return J.issues.push({ input: J.value, inst: $, expected: "nan", code: "invalid_type" }), J; + return J; + }; +}); +var n8 = F("$ZodPipe", ($, Q) => { + o.init($, Q), N$($._zod, "values", () => Q.in._zod.values), N$($._zod, "optin", () => Q.in._zod.optin), N$($._zod, "optout", () => Q.out._zod.optout), $._zod.parse = (J, Y) => { + let X = Q.in._zod.run(J, Y); + if (X instanceof Promise) return X.then((W) => MM(W, Q, Y)); + return MM(X, Q, Y); + }; +}); +function MM($, Q, J) { + if (A0($)) return $; + return Q.out._zod.run({ value: $.value, issues: $.issues }, J); +} +var pY = F("$ZodReadonly", ($, Q) => { + o.init($, Q), N$($._zod, "propValues", () => Q.innerType._zod.propValues), N$($._zod, "values", () => Q.innerType._zod.values), N$($._zod, "optin", () => Q.innerType._zod.optin), N$($._zod, "optout", () => Q.innerType._zod.optout), $._zod.parse = (J, Y) => { + let X = Q.innerType._zod.run(J, Y); + if (X instanceof Promise) return X.then(LM); + return LM(X); + }; +}); +function LM($) { + return $.value = Object.freeze($.value), $; +} +var dY = F("$ZodTemplateLiteral", ($, Q) => { + o.init($, Q); + let J = []; + for (let Y of Q.parts) if (Y instanceof o) { + if (!Y._zod.pattern) throw Error(`Invalid template literal part, no pattern found: ${[...Y._zod.traits].shift()}`); + let X = Y._zod.pattern instanceof RegExp ? Y._zod.pattern.source : Y._zod.pattern; + if (!X) throw Error(`Invalid template literal part: ${Y._zod.traits}`); + let W = X.startsWith("^") ? 1 : 0, G = X.endsWith("$") ? X.length - 1 : X.length; + J.push(X.slice(W, G)); + } else if (Y === null || dH.has(typeof Y)) J.push(r4(`${Y}`)); + else throw Error(`Invalid template literal part: ${Y}`); + $._zod.pattern = new RegExp(`^${J.join("")}$`), $._zod.parse = (Y, X) => { + if (typeof Y.value !== "string") return Y.issues.push({ input: Y.value, inst: $, expected: "template_literal", code: "invalid_type" }), Y; + if ($._zod.pattern.lastIndex = 0, !$._zod.pattern.test(Y.value)) return Y.issues.push({ input: Y.value, inst: $, code: "invalid_format", format: "template_literal", pattern: $._zod.pattern.source }), Y; + return Y; + }; +}); +var iY = F("$ZodPromise", ($, Q) => { + o.init($, Q), $._zod.parse = (J, Y) => { + return Promise.resolve(J.value).then((X) => Q.innerType._zod.run({ value: X, issues: [] }, Y)); + }; +}); +var nY = F("$ZodLazy", ($, Q) => { + o.init($, Q), N$($._zod, "innerType", () => Q.getter()), N$($._zod, "pattern", () => $._zod.innerType._zod.pattern), N$($._zod, "propValues", () => $._zod.innerType._zod.propValues), N$($._zod, "optin", () => $._zod.innerType._zod.optin), N$($._zod, "optout", () => $._zod.innerType._zod.optout), $._zod.parse = (J, Y) => { + return $._zod.innerType._zod.run(J, Y); + }; +}); +var rY = F("$ZodCustom", ($, Q) => { + T$.init($, Q), o.init($, Q), $._zod.parse = (J, Y) => { + return J; + }, $._zod.check = (J) => { + let Y = J.value, X = Q.fn(Y); + if (X instanceof Promise) return X.then((W) => jM(W, J, Y, $)); + jM(X, J, Y, $); + return; + }; +}); +function jM($, Q, J, Y) { + var _a5; + if (!$) { + let X = { code: "custom", input: J, inst: Y, path: [...(_a5 = Y._zod.def.path) != null ? _a5 : []], continue: !Y._zod.def.abort }; + if (Y._zod.def.params) X.params = Y._zod.def.params; + Q.issues.push(oH(X)); + } +} +var r8 = {}; +M4(r8, { zhTW: () => Cq, zhCN: () => vq, vi: () => Sq, ur: () => kq, ua: () => _q, tr: () => bq, th: () => Eq, ta: () => Pq, sv: () => Rq, sl: () => Iq, ru: () => Aq, pt: () => jq, ps: () => Mq, pl: () => Lq, ota: () => Zq, no: () => Fq, nl: () => Dq, ms: () => Oq, mk: () => wq, ko: () => Nq, kh: () => zq, ja: () => Bq, it: () => Vq, id: () => qq, hu: () => Kq, he: () => Hq, frCA: () => Uq, fr: () => Gq, fi: () => Wq, fa: () => Yq, es: () => Xq, eo: () => Jq, en: () => A7, de: () => Qq, cs: () => $q, ca: () => eK, be: () => sK, az: () => aK, ar: () => tK }); +var Du = () => { + let $ = { string: { unit: "\u062D\u0631\u0641", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, file: { unit: "\u0628\u0627\u064A\u062A", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, array: { unit: "\u0639\u0646\u0635\u0631", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, set: { unit: "\u0639\u0646\u0635\u0631", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "number"; + case "object": { + if (Array.isArray(X)) return "array"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u0645\u062F\u062E\u0644", email: "\u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A", url: "\u0631\u0627\u0628\u0637", emoji: "\u0625\u064A\u0645\u0648\u062C\u064A", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "\u062A\u0627\u0631\u064A\u062E \u0648\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO", date: "\u062A\u0627\u0631\u064A\u062E \u0628\u0645\u0639\u064A\u0627\u0631 ISO", time: "\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO", duration: "\u0645\u062F\u0629 \u0628\u0645\u0639\u064A\u0627\u0631 ISO", ipv4: "\u0639\u0646\u0648\u0627\u0646 IPv4", ipv6: "\u0639\u0646\u0648\u0627\u0646 IPv6", cidrv4: "\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv4", cidrv6: "\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv6", base64: "\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64-encoded", base64url: "\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64url-encoded", json_string: "\u0646\u064E\u0635 \u0639\u0644\u0649 \u0647\u064A\u0626\u0629 JSON", e164: "\u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0628\u0645\u0639\u064A\u0627\u0631 E.164", jwt: "JWT", template_literal: "\u0645\u062F\u062E\u0644" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${X.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${x(X.values[0])}`; + return `\u0627\u062E\u062A\u064A\u0627\u0631 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062A\u0648\u0642\u0639 \u0627\u0646\u062A\u0642\u0627\u0621 \u0623\u062D\u062F \u0647\u0630\u0647 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A: ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return ` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${(_a5 = X.origin) != null ? _a5 : "\u0627\u0644\u0642\u064A\u0645\u0629"} ${W} ${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "\u0639\u0646\u0635\u0631"}`; + return `\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${(_c2 = X.origin) != null ? _c2 : "\u0627\u0644\u0642\u064A\u0645\u0629"} ${W} ${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${X.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${W} ${X.minimum.toString()} ${G.unit}`; + return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${X.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${W} ${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0628\u062F\u0623 \u0628\u0640 "${X.prefix}"`; + if (W.format === "ends_with") return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0646\u062A\u0647\u064A \u0628\u0640 "${W.suffix}"`; + if (W.format === "includes") return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u062A\u0636\u0645\u0651\u064E\u0646 "${W.includes}"`; + if (W.format === "regex") return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0637\u0627\u0628\u0642 \u0627\u0644\u0646\u0645\u0637 ${W.pattern}`; + return `${(_d = Y[W.format]) != null ? _d : X.format} \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644`; + } + case "not_multiple_of": + return `\u0631\u0642\u0645 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646 \u0645\u0636\u0627\u0639\u0641\u0627\u062A ${X.divisor}`; + case "unrecognized_keys": + return `\u0645\u0639\u0631\u0641${X.keys.length > 1 ? "\u0627\u062A" : ""} \u063A\u0631\u064A\u0628${X.keys.length > 1 ? "\u0629" : ""}: ${P(X.keys, "\u060C ")}`; + case "invalid_key": + return `\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${X.origin}`; + case "invalid_union": + return "\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644"; + case "invalid_element": + return `\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${X.origin}`; + default: + return "\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644"; + } + }; +}; +function tK() { + return { localeError: Du() }; +} +var Fu = () => { + let $ = { string: { unit: "simvol", verb: "olmal\u0131d\u0131r" }, file: { unit: "bayt", verb: "olmal\u0131d\u0131r" }, array: { unit: "element", verb: "olmal\u0131d\u0131r" }, set: { unit: "element", verb: "olmal\u0131d\u0131r" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "number"; + case "object": { + if (Array.isArray(X)) return "array"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "input", email: "email address", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO datetime", date: "ISO date", time: "ISO time", duration: "ISO duration", ipv4: "IPv4 address", ipv6: "IPv6 address", cidrv4: "IPv4 range", cidrv6: "IPv6 range", base64: "base64-encoded string", base64url: "base64url-encoded string", json_string: "JSON string", e164: "E.164 number", jwt: "JWT", template_literal: "input" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${X.expected}, daxil olan ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${x(X.values[0])}`; + return `Yanl\u0131\u015F se\xE7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${(_a5 = X.origin) != null ? _a5 : "d\u0259y\u0259r"} ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "element"}`; + return `\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${(_c2 = X.origin) != null ? _c2 : "d\u0259y\u0259r"} ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${X.origin} ${W}${X.minimum.toString()} ${G.unit}`; + return `\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${X.origin} ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Yanl\u0131\u015F m\u0259tn: "${W.prefix}" il\u0259 ba\u015Flamal\u0131d\u0131r`; + if (W.format === "ends_with") return `Yanl\u0131\u015F m\u0259tn: "${W.suffix}" il\u0259 bitm\u0259lidir`; + if (W.format === "includes") return `Yanl\u0131\u015F m\u0259tn: "${W.includes}" daxil olmal\u0131d\u0131r`; + if (W.format === "regex") return `Yanl\u0131\u015F m\u0259tn: ${W.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`; + return `Yanl\u0131\u015F ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `Yanl\u0131\u015F \u0259d\u0259d: ${X.divisor} il\u0259 b\xF6l\xFCn\u0259 bil\u0259n olmal\u0131d\u0131r`; + case "unrecognized_keys": + return `Tan\u0131nmayan a\xE7ar${X.keys.length > 1 ? "lar" : ""}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `${X.origin} daxilind\u0259 yanl\u0131\u015F a\xE7ar`; + case "invalid_union": + return "Yanl\u0131\u015F d\u0259y\u0259r"; + case "invalid_element": + return `${X.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`; + default: + return "Yanl\u0131\u015F d\u0259y\u0259r"; + } + }; +}; +function aK() { + return { localeError: Fu() }; +} +function PM($, Q, J, Y) { + let X = Math.abs($), W = X % 10, G = X % 100; + if (G >= 11 && G <= 19) return Y; + if (W === 1) return Q; + if (W >= 2 && W <= 4) return J; + return Y; +} +var Zu = () => { + let $ = { string: { unit: { one: "\u0441\u0456\u043C\u0432\u0430\u043B", few: "\u0441\u0456\u043C\u0432\u0430\u043B\u044B", many: "\u0441\u0456\u043C\u0432\u0430\u043B\u0430\u045E" }, verb: "\u043C\u0435\u0446\u044C" }, array: { unit: { one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B", many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E" }, verb: "\u043C\u0435\u0446\u044C" }, set: { unit: { one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B", many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E" }, verb: "\u043C\u0435\u0446\u044C" }, file: { unit: { one: "\u0431\u0430\u0439\u0442", few: "\u0431\u0430\u0439\u0442\u044B", many: "\u0431\u0430\u0439\u0442\u0430\u045E" }, verb: "\u043C\u0435\u0446\u044C" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "\u043B\u0456\u043A"; + case "object": { + if (Array.isArray(X)) return "\u043C\u0430\u0441\u0456\u045E"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u0443\u0432\u043E\u0434", email: "email \u0430\u0434\u0440\u0430\u0441", url: "URL", emoji: "\u044D\u043C\u043E\u0434\u0437\u0456", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO \u0434\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441", date: "ISO \u0434\u0430\u0442\u0430", time: "ISO \u0447\u0430\u0441", duration: "ISO \u043F\u0440\u0430\u0446\u044F\u0433\u043B\u0430\u0441\u0446\u044C", ipv4: "IPv4 \u0430\u0434\u0440\u0430\u0441", ipv6: "IPv6 \u0430\u0434\u0440\u0430\u0441", cidrv4: "IPv4 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D", cidrv6: "IPv6 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D", base64: "\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64", base64url: "\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64url", json_string: "JSON \u0440\u0430\u0434\u043E\u043A", e164: "\u043D\u0443\u043C\u0430\u0440 E.164", jwt: "JWT", template_literal: "\u0443\u0432\u043E\u0434" }; + return (X) => { + var _a5, _b3, _c2; + switch (X.code) { + case "invalid_type": + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${X.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F ${x(X.values[0])}`; + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0432\u0430\u0440\u044B\u044F\u043D\u0442: \u0447\u0430\u043A\u0430\u045E\u0441\u044F \u0430\u0434\u0437\u0456\u043D \u0437 ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) { + let U = Number(X.maximum), H = PM(U, G.unit.one, G.unit.few, G.unit.many); + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${(_a5 = X.origin) != null ? _a5 : "\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${G.verb} ${W}${X.maximum.toString()} ${H}`; + } + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${(_b3 = X.origin) != null ? _b3 : "\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) { + let U = Number(X.minimum), H = PM(U, G.unit.one, G.unit.few, G.unit.many); + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${X.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${G.verb} ${W}${X.minimum.toString()} ${H}`; + } + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${X.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u043F\u0430\u0447\u044B\u043D\u0430\u0446\u0446\u0430 \u0437 "${W.prefix}"`; + if (W.format === "ends_with") return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u0430\u043A\u0430\u043D\u0447\u0432\u0430\u0446\u0446\u0430 \u043D\u0430 "${W.suffix}"`; + if (W.format === "includes") return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u043C\u044F\u0448\u0447\u0430\u0446\u044C "${W.includes}"`; + if (W.format === "regex") return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0430\u0434\u043F\u0430\u0432\u044F\u0434\u0430\u0446\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${W.pattern}`; + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${(_c2 = Y[W.format]) != null ? _c2 : X.format}`; + } + case "not_multiple_of": + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043B\u0456\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0431\u044B\u0446\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${X.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${X.keys.length > 1 ? "\u043A\u043B\u044E\u0447\u044B" : "\u043A\u043B\u044E\u0447"}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${X.origin}`; + case "invalid_union": + return "\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434"; + case "invalid_element": + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u0430\u0435 \u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435 \u045E ${X.origin}`; + default: + return "\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434"; + } + }; +}; +function sK() { + return { localeError: Zu() }; +} +var Mu = () => { + let $ = { string: { unit: "car\xE0cters", verb: "contenir" }, file: { unit: "bytes", verb: "contenir" }, array: { unit: "elements", verb: "contenir" }, set: { unit: "elements", verb: "contenir" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "number"; + case "object": { + if (Array.isArray(X)) return "array"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "entrada", email: "adre\xE7a electr\xF2nica", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "data i hora ISO", date: "data ISO", time: "hora ISO", duration: "durada ISO", ipv4: "adre\xE7a IPv4", ipv6: "adre\xE7a IPv6", cidrv4: "rang IPv4", cidrv6: "rang IPv6", base64: "cadena codificada en base64", base64url: "cadena codificada en base64url", json_string: "cadena JSON", e164: "n\xFAmero E.164", jwt: "JWT", template_literal: "entrada" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `Tipus inv\xE0lid: s'esperava ${X.expected}, s'ha rebut ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Valor inv\xE0lid: s'esperava ${x(X.values[0])}`; + return `Opci\xF3 inv\xE0lida: s'esperava una de ${P(X.values, " o ")}`; + case "too_big": { + let W = X.inclusive ? "com a m\xE0xim" : "menys de", G = Q(X.origin); + if (G) return `Massa gran: s'esperava que ${(_a5 = X.origin) != null ? _a5 : "el valor"} contingu\xE9s ${W} ${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "elements"}`; + return `Massa gran: s'esperava que ${(_c2 = X.origin) != null ? _c2 : "el valor"} fos ${W} ${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? "com a m\xEDnim" : "m\xE9s de", G = Q(X.origin); + if (G) return `Massa petit: s'esperava que ${X.origin} contingu\xE9s ${W} ${X.minimum.toString()} ${G.unit}`; + return `Massa petit: s'esperava que ${X.origin} fos ${W} ${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Format inv\xE0lid: ha de comen\xE7ar amb "${W.prefix}"`; + if (W.format === "ends_with") return `Format inv\xE0lid: ha d'acabar amb "${W.suffix}"`; + if (W.format === "includes") return `Format inv\xE0lid: ha d'incloure "${W.includes}"`; + if (W.format === "regex") return `Format inv\xE0lid: ha de coincidir amb el patr\xF3 ${W.pattern}`; + return `Format inv\xE0lid per a ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `N\xFAmero inv\xE0lid: ha de ser m\xFAltiple de ${X.divisor}`; + case "unrecognized_keys": + return `Clau${X.keys.length > 1 ? "s" : ""} no reconeguda${X.keys.length > 1 ? "s" : ""}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Clau inv\xE0lida a ${X.origin}`; + case "invalid_union": + return "Entrada inv\xE0lida"; + case "invalid_element": + return `Element inv\xE0lid a ${X.origin}`; + default: + return "Entrada inv\xE0lida"; + } + }; +}; +function eK() { + return { localeError: Mu() }; +} +var Lu = () => { + let $ = { string: { unit: "znak\u016F", verb: "m\xEDt" }, file: { unit: "bajt\u016F", verb: "m\xEDt" }, array: { unit: "prvk\u016F", verb: "m\xEDt" }, set: { unit: "prvk\u016F", verb: "m\xEDt" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "\u010D\xEDslo"; + case "string": + return "\u0159et\u011Bzec"; + case "boolean": + return "boolean"; + case "bigint": + return "bigint"; + case "function": + return "funkce"; + case "symbol": + return "symbol"; + case "undefined": + return "undefined"; + case "object": { + if (Array.isArray(X)) return "pole"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "regul\xE1rn\xED v\xFDraz", email: "e-mailov\xE1 adresa", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "datum a \u010Das ve form\xE1tu ISO", date: "datum ve form\xE1tu ISO", time: "\u010Das ve form\xE1tu ISO", duration: "doba trv\xE1n\xED ISO", ipv4: "IPv4 adresa", ipv6: "IPv6 adresa", cidrv4: "rozsah IPv4", cidrv6: "rozsah IPv6", base64: "\u0159et\u011Bzec zak\xF3dovan\xFD ve form\xE1tu base64", base64url: "\u0159et\u011Bzec zak\xF3dovan\xFD ve form\xE1tu base64url", json_string: "\u0159et\u011Bzec ve form\xE1tu JSON", e164: "\u010D\xEDslo E.164", jwt: "JWT", template_literal: "vstup" }; + return (X) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g; + switch (X.code) { + case "invalid_type": + return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${X.expected}, obdr\u017Eeno ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${x(X.values[0])}`; + return `Neplatn\xE1 mo\u017Enost: o\u010Dek\xE1v\xE1na jedna z hodnot ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${(_a5 = X.origin) != null ? _a5 : "hodnota"} mus\xED m\xEDt ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "prvk\u016F"}`; + return `Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${(_c2 = X.origin) != null ? _c2 : "hodnota"} mus\xED b\xFDt ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${(_d = X.origin) != null ? _d : "hodnota"} mus\xED m\xEDt ${W}${X.minimum.toString()} ${(_e2 = G.unit) != null ? _e2 : "prvk\u016F"}`; + return `Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${(_f2 = X.origin) != null ? _f2 : "hodnota"} mus\xED b\xFDt ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Neplatn\xFD \u0159et\u011Bzec: mus\xED za\u010D\xEDnat na "${W.prefix}"`; + if (W.format === "ends_with") return `Neplatn\xFD \u0159et\u011Bzec: mus\xED kon\u010Dit na "${W.suffix}"`; + if (W.format === "includes") return `Neplatn\xFD \u0159et\u011Bzec: mus\xED obsahovat "${W.includes}"`; + if (W.format === "regex") return `Neplatn\xFD \u0159et\u011Bzec: mus\xED odpov\xEDdat vzoru ${W.pattern}`; + return `Neplatn\xFD form\xE1t ${(_g = Y[W.format]) != null ? _g : X.format}`; + } + case "not_multiple_of": + return `Neplatn\xE9 \u010D\xEDslo: mus\xED b\xFDt n\xE1sobkem ${X.divisor}`; + case "unrecognized_keys": + return `Nezn\xE1m\xE9 kl\xED\u010De: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Neplatn\xFD kl\xED\u010D v ${X.origin}`; + case "invalid_union": + return "Neplatn\xFD vstup"; + case "invalid_element": + return `Neplatn\xE1 hodnota v ${X.origin}`; + default: + return "Neplatn\xFD vstup"; + } + }; +}; +function $q() { + return { localeError: Lu() }; +} +var ju = () => { + let $ = { string: { unit: "Zeichen", verb: "zu haben" }, file: { unit: "Bytes", verb: "zu haben" }, array: { unit: "Elemente", verb: "zu haben" }, set: { unit: "Elemente", verb: "zu haben" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "Zahl"; + case "object": { + if (Array.isArray(X)) return "Array"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "Eingabe", email: "E-Mail-Adresse", url: "URL", emoji: "Emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO-Datum und -Uhrzeit", date: "ISO-Datum", time: "ISO-Uhrzeit", duration: "ISO-Dauer", ipv4: "IPv4-Adresse", ipv6: "IPv6-Adresse", cidrv4: "IPv4-Bereich", cidrv6: "IPv6-Bereich", base64: "Base64-codierter String", base64url: "Base64-URL-codierter String", json_string: "JSON-String", e164: "E.164-Nummer", jwt: "JWT", template_literal: "Eingabe" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `Ung\xFCltige Eingabe: erwartet ${X.expected}, erhalten ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Ung\xFCltige Eingabe: erwartet ${x(X.values[0])}`; + return `Ung\xFCltige Option: erwartet eine von ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Zu gro\xDF: erwartet, dass ${(_a5 = X.origin) != null ? _a5 : "Wert"} ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "Elemente"} hat`; + return `Zu gro\xDF: erwartet, dass ${(_c2 = X.origin) != null ? _c2 : "Wert"} ${W}${X.maximum.toString()} ist`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Zu klein: erwartet, dass ${X.origin} ${W}${X.minimum.toString()} ${G.unit} hat`; + return `Zu klein: erwartet, dass ${X.origin} ${W}${X.minimum.toString()} ist`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Ung\xFCltiger String: muss mit "${W.prefix}" beginnen`; + if (W.format === "ends_with") return `Ung\xFCltiger String: muss mit "${W.suffix}" enden`; + if (W.format === "includes") return `Ung\xFCltiger String: muss "${W.includes}" enthalten`; + if (W.format === "regex") return `Ung\xFCltiger String: muss dem Muster ${W.pattern} entsprechen`; + return `Ung\xFCltig: ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `Ung\xFCltige Zahl: muss ein Vielfaches von ${X.divisor} sein`; + case "unrecognized_keys": + return `${X.keys.length > 1 ? "Unbekannte Schl\xFCssel" : "Unbekannter Schl\xFCssel"}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Ung\xFCltiger Schl\xFCssel in ${X.origin}`; + case "invalid_union": + return "Ung\xFCltige Eingabe"; + case "invalid_element": + return `Ung\xFCltiger Wert in ${X.origin}`; + default: + return "Ung\xFCltige Eingabe"; + } + }; +}; +function Qq() { + return { localeError: ju() }; +} +var Au = ($) => { + let Q = typeof $; + switch (Q) { + case "number": + return Number.isNaN($) ? "NaN" : "number"; + case "object": { + if (Array.isArray($)) return "array"; + if ($ === null) return "null"; + if (Object.getPrototypeOf($) !== Object.prototype && $.constructor) return $.constructor.name; + } + } + return Q; +}; +var Iu = () => { + let $ = { string: { unit: "characters", verb: "to have" }, file: { unit: "bytes", verb: "to have" }, array: { unit: "items", verb: "to have" }, set: { unit: "items", verb: "to have" } }; + function Q(Y) { + var _a5; + return (_a5 = $[Y]) != null ? _a5 : null; + } + let J = { regex: "input", email: "email address", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO datetime", date: "ISO date", time: "ISO time", duration: "ISO duration", ipv4: "IPv4 address", ipv6: "IPv6 address", cidrv4: "IPv4 range", cidrv6: "IPv6 range", base64: "base64-encoded string", base64url: "base64url-encoded string", json_string: "JSON string", e164: "E.164 number", jwt: "JWT", template_literal: "input" }; + return (Y) => { + var _a5, _b3, _c2, _d; + switch (Y.code) { + case "invalid_type": + return `Invalid input: expected ${Y.expected}, received ${Au(Y.input)}`; + case "invalid_value": + if (Y.values.length === 1) return `Invalid input: expected ${x(Y.values[0])}`; + return `Invalid option: expected one of ${P(Y.values, "|")}`; + case "too_big": { + let X = Y.inclusive ? "<=" : "<", W = Q(Y.origin); + if (W) return `Too big: expected ${(_a5 = Y.origin) != null ? _a5 : "value"} to have ${X}${Y.maximum.toString()} ${(_b3 = W.unit) != null ? _b3 : "elements"}`; + return `Too big: expected ${(_c2 = Y.origin) != null ? _c2 : "value"} to be ${X}${Y.maximum.toString()}`; + } + case "too_small": { + let X = Y.inclusive ? ">=" : ">", W = Q(Y.origin); + if (W) return `Too small: expected ${Y.origin} to have ${X}${Y.minimum.toString()} ${W.unit}`; + return `Too small: expected ${Y.origin} to be ${X}${Y.minimum.toString()}`; + } + case "invalid_format": { + let X = Y; + if (X.format === "starts_with") return `Invalid string: must start with "${X.prefix}"`; + if (X.format === "ends_with") return `Invalid string: must end with "${X.suffix}"`; + if (X.format === "includes") return `Invalid string: must include "${X.includes}"`; + if (X.format === "regex") return `Invalid string: must match pattern ${X.pattern}`; + return `Invalid ${(_d = J[X.format]) != null ? _d : Y.format}`; + } + case "not_multiple_of": + return `Invalid number: must be a multiple of ${Y.divisor}`; + case "unrecognized_keys": + return `Unrecognized key${Y.keys.length > 1 ? "s" : ""}: ${P(Y.keys, ", ")}`; + case "invalid_key": + return `Invalid key in ${Y.origin}`; + case "invalid_union": + return "Invalid input"; + case "invalid_element": + return `Invalid value in ${Y.origin}`; + default: + return "Invalid input"; + } + }; +}; +function A7() { + return { localeError: Iu() }; +} +var Ru = ($) => { + let Q = typeof $; + switch (Q) { + case "number": + return Number.isNaN($) ? "NaN" : "nombro"; + case "object": { + if (Array.isArray($)) return "tabelo"; + if ($ === null) return "senvalora"; + if (Object.getPrototypeOf($) !== Object.prototype && $.constructor) return $.constructor.name; + } + } + return Q; +}; +var Pu = () => { + let $ = { string: { unit: "karaktrojn", verb: "havi" }, file: { unit: "bajtojn", verb: "havi" }, array: { unit: "elementojn", verb: "havi" }, set: { unit: "elementojn", verb: "havi" } }; + function Q(Y) { + var _a5; + return (_a5 = $[Y]) != null ? _a5 : null; + } + let J = { regex: "enigo", email: "retadreso", url: "URL", emoji: "emo\u011Dio", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO-datotempo", date: "ISO-dato", time: "ISO-tempo", duration: "ISO-da\u016Dro", ipv4: "IPv4-adreso", ipv6: "IPv6-adreso", cidrv4: "IPv4-rango", cidrv6: "IPv6-rango", base64: "64-ume kodita karaktraro", base64url: "URL-64-ume kodita karaktraro", json_string: "JSON-karaktraro", e164: "E.164-nombro", jwt: "JWT", template_literal: "enigo" }; + return (Y) => { + var _a5, _b3, _c2, _d; + switch (Y.code) { + case "invalid_type": + return `Nevalida enigo: atendi\u011Dis ${Y.expected}, ricevi\u011Dis ${Ru(Y.input)}`; + case "invalid_value": + if (Y.values.length === 1) return `Nevalida enigo: atendi\u011Dis ${x(Y.values[0])}`; + return `Nevalida opcio: atendi\u011Dis unu el ${P(Y.values, "|")}`; + case "too_big": { + let X = Y.inclusive ? "<=" : "<", W = Q(Y.origin); + if (W) return `Tro granda: atendi\u011Dis ke ${(_a5 = Y.origin) != null ? _a5 : "valoro"} havu ${X}${Y.maximum.toString()} ${(_b3 = W.unit) != null ? _b3 : "elementojn"}`; + return `Tro granda: atendi\u011Dis ke ${(_c2 = Y.origin) != null ? _c2 : "valoro"} havu ${X}${Y.maximum.toString()}`; + } + case "too_small": { + let X = Y.inclusive ? ">=" : ">", W = Q(Y.origin); + if (W) return `Tro malgranda: atendi\u011Dis ke ${Y.origin} havu ${X}${Y.minimum.toString()} ${W.unit}`; + return `Tro malgranda: atendi\u011Dis ke ${Y.origin} estu ${X}${Y.minimum.toString()}`; + } + case "invalid_format": { + let X = Y; + if (X.format === "starts_with") return `Nevalida karaktraro: devas komenci\u011Di per "${X.prefix}"`; + if (X.format === "ends_with") return `Nevalida karaktraro: devas fini\u011Di per "${X.suffix}"`; + if (X.format === "includes") return `Nevalida karaktraro: devas inkluzivi "${X.includes}"`; + if (X.format === "regex") return `Nevalida karaktraro: devas kongrui kun la modelo ${X.pattern}`; + return `Nevalida ${(_d = J[X.format]) != null ? _d : Y.format}`; + } + case "not_multiple_of": + return `Nevalida nombro: devas esti oblo de ${Y.divisor}`; + case "unrecognized_keys": + return `Nekonata${Y.keys.length > 1 ? "j" : ""} \u015Dlosilo${Y.keys.length > 1 ? "j" : ""}: ${P(Y.keys, ", ")}`; + case "invalid_key": + return `Nevalida \u015Dlosilo en ${Y.origin}`; + case "invalid_union": + return "Nevalida enigo"; + case "invalid_element": + return `Nevalida valoro en ${Y.origin}`; + default: + return "Nevalida enigo"; + } + }; +}; +function Jq() { + return { localeError: Pu() }; +} +var Eu = () => { + let $ = { string: { unit: "caracteres", verb: "tener" }, file: { unit: "bytes", verb: "tener" }, array: { unit: "elementos", verb: "tener" }, set: { unit: "elementos", verb: "tener" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "n\xFAmero"; + case "object": { + if (Array.isArray(X)) return "arreglo"; + if (X === null) return "nulo"; + if (Object.getPrototypeOf(X) !== Object.prototype) return X.constructor.name; + } + } + return W; + }, Y = { regex: "entrada", email: "direcci\xF3n de correo electr\xF3nico", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "fecha y hora ISO", date: "fecha ISO", time: "hora ISO", duration: "duraci\xF3n ISO", ipv4: "direcci\xF3n IPv4", ipv6: "direcci\xF3n IPv6", cidrv4: "rango IPv4", cidrv6: "rango IPv6", base64: "cadena codificada en base64", base64url: "URL codificada en base64", json_string: "cadena JSON", e164: "n\xFAmero E.164", jwt: "JWT", template_literal: "entrada" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `Entrada inv\xE1lida: se esperaba ${X.expected}, recibido ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Entrada inv\xE1lida: se esperaba ${x(X.values[0])}`; + return `Opci\xF3n inv\xE1lida: se esperaba una de ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Demasiado grande: se esperaba que ${(_a5 = X.origin) != null ? _a5 : "valor"} tuviera ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "elementos"}`; + return `Demasiado grande: se esperaba que ${(_c2 = X.origin) != null ? _c2 : "valor"} fuera ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Demasiado peque\xF1o: se esperaba que ${X.origin} tuviera ${W}${X.minimum.toString()} ${G.unit}`; + return `Demasiado peque\xF1o: se esperaba que ${X.origin} fuera ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Cadena inv\xE1lida: debe comenzar con "${W.prefix}"`; + if (W.format === "ends_with") return `Cadena inv\xE1lida: debe terminar en "${W.suffix}"`; + if (W.format === "includes") return `Cadena inv\xE1lida: debe incluir "${W.includes}"`; + if (W.format === "regex") return `Cadena inv\xE1lida: debe coincidir con el patr\xF3n ${W.pattern}`; + return `Inv\xE1lido ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `N\xFAmero inv\xE1lido: debe ser m\xFAltiplo de ${X.divisor}`; + case "unrecognized_keys": + return `Llave${X.keys.length > 1 ? "s" : ""} desconocida${X.keys.length > 1 ? "s" : ""}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Llave inv\xE1lida en ${X.origin}`; + case "invalid_union": + return "Entrada inv\xE1lida"; + case "invalid_element": + return `Valor inv\xE1lido en ${X.origin}`; + default: + return "Entrada inv\xE1lida"; + } + }; +}; +function Xq() { + return { localeError: Eu() }; +} +var bu = () => { + let $ = { string: { unit: "\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, file: { unit: "\u0628\u0627\u06CC\u062A", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, array: { unit: "\u0622\u06CC\u062A\u0645", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, set: { unit: "\u0622\u06CC\u062A\u0645", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "\u0639\u062F\u062F"; + case "object": { + if (Array.isArray(X)) return "\u0622\u0631\u0627\u06CC\u0647"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u0648\u0631\u0648\u062F\u06CC", email: "\u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644", url: "URL", emoji: "\u0627\u06CC\u0645\u0648\u062C\u06CC", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "\u062A\u0627\u0631\u06CC\u062E \u0648 \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", date: "\u062A\u0627\u0631\u06CC\u062E \u0627\u06CC\u0632\u0648", time: "\u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", duration: "\u0645\u062F\u062A \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", ipv4: "IPv4 \u0622\u062F\u0631\u0633", ipv6: "IPv6 \u0622\u062F\u0631\u0633", cidrv4: "IPv4 \u062F\u0627\u0645\u0646\u0647", cidrv6: "IPv6 \u062F\u0627\u0645\u0646\u0647", base64: "base64-encoded \u0631\u0634\u062A\u0647", base64url: "base64url-encoded \u0631\u0634\u062A\u0647", json_string: "JSON \u0631\u0634\u062A\u0647", e164: "E.164 \u0639\u062F\u062F", jwt: "JWT", template_literal: "\u0648\u0631\u0648\u062F\u06CC" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${X.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${J(X.input)} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`; + case "invalid_value": + if (X.values.length === 1) return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${x(X.values[0])} \u0645\u06CC\u200C\u0628\u0648\u062F`; + return `\u06AF\u0632\u06CC\u0646\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A \u06CC\u06A9\u06CC \u0627\u0632 ${P(X.values, "|")} \u0645\u06CC\u200C\u0628\u0648\u062F`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${(_a5 = X.origin) != null ? _a5 : "\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "\u0639\u0646\u0635\u0631"} \u0628\u0627\u0634\u062F`; + return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${(_c2 = X.origin) != null ? _c2 : "\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${W}${X.maximum.toString()} \u0628\u0627\u0634\u062F`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${X.origin} \u0628\u0627\u06CC\u062F ${W}${X.minimum.toString()} ${G.unit} \u0628\u0627\u0634\u062F`; + return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${X.origin} \u0628\u0627\u06CC\u062F ${W}${X.minimum.toString()} \u0628\u0627\u0634\u062F`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${W.prefix}" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`; + if (W.format === "ends_with") return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${W.suffix}" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`; + if (W.format === "includes") return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 "${W.includes}" \u0628\u0627\u0634\u062F`; + if (W.format === "regex") return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \u0627\u0644\u06AF\u0648\u06CC ${W.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`; + return `${(_d = Y[W.format]) != null ? _d : X.format} \u0646\u0627\u0645\u0639\u062A\u0628\u0631`; + } + case "not_multiple_of": + return `\u0639\u062F\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0645\u0636\u0631\u0628 ${X.divisor} \u0628\u0627\u0634\u062F`; + case "unrecognized_keys": + return `\u06A9\u0644\u06CC\u062F${X.keys.length > 1 ? "\u0647\u0627\u06CC" : ""} \u0646\u0627\u0634\u0646\u0627\u0633: ${P(X.keys, ", ")}`; + case "invalid_key": + return `\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${X.origin}`; + case "invalid_union": + return "\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631"; + case "invalid_element": + return `\u0645\u0642\u062F\u0627\u0631 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u062F\u0631 ${X.origin}`; + default: + return "\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631"; + } + }; +}; +function Yq() { + return { localeError: bu() }; +} +var _u = () => { + let $ = { string: { unit: "merkki\xE4", subject: "merkkijonon" }, file: { unit: "tavua", subject: "tiedoston" }, array: { unit: "alkiota", subject: "listan" }, set: { unit: "alkiota", subject: "joukon" }, number: { unit: "", subject: "luvun" }, bigint: { unit: "", subject: "suuren kokonaisluvun" }, int: { unit: "", subject: "kokonaisluvun" }, date: { unit: "", subject: "p\xE4iv\xE4m\xE4\xE4r\xE4n" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "number"; + case "object": { + if (Array.isArray(X)) return "array"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "s\xE4\xE4nn\xF6llinen lauseke", email: "s\xE4hk\xF6postiosoite", url: "URL-osoite", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO-aikaleima", date: "ISO-p\xE4iv\xE4m\xE4\xE4r\xE4", time: "ISO-aika", duration: "ISO-kesto", ipv4: "IPv4-osoite", ipv6: "IPv6-osoite", cidrv4: "IPv4-alue", cidrv6: "IPv6-alue", base64: "base64-koodattu merkkijono", base64url: "base64url-koodattu merkkijono", json_string: "JSON-merkkijono", e164: "E.164-luku", jwt: "JWT", template_literal: "templaattimerkkijono" }; + return (X) => { + var _a5; + switch (X.code) { + case "invalid_type": + return `Virheellinen tyyppi: odotettiin ${X.expected}, oli ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Virheellinen sy\xF6te: t\xE4ytyy olla ${x(X.values[0])}`; + return `Virheellinen valinta: t\xE4ytyy olla yksi seuraavista: ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Liian suuri: ${G.subject} t\xE4ytyy olla ${W}${X.maximum.toString()} ${G.unit}`.trim(); + return `Liian suuri: arvon t\xE4ytyy olla ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Liian pieni: ${G.subject} t\xE4ytyy olla ${W}${X.minimum.toString()} ${G.unit}`.trim(); + return `Liian pieni: arvon t\xE4ytyy olla ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Virheellinen sy\xF6te: t\xE4ytyy alkaa "${W.prefix}"`; + if (W.format === "ends_with") return `Virheellinen sy\xF6te: t\xE4ytyy loppua "${W.suffix}"`; + if (W.format === "includes") return `Virheellinen sy\xF6te: t\xE4ytyy sis\xE4lt\xE4\xE4 "${W.includes}"`; + if (W.format === "regex") return `Virheellinen sy\xF6te: t\xE4ytyy vastata s\xE4\xE4nn\xF6llist\xE4 lauseketta ${W.pattern}`; + return `Virheellinen ${(_a5 = Y[W.format]) != null ? _a5 : X.format}`; + } + case "not_multiple_of": + return `Virheellinen luku: t\xE4ytyy olla luvun ${X.divisor} monikerta`; + case "unrecognized_keys": + return `${X.keys.length > 1 ? "Tuntemattomat avaimet" : "Tuntematon avain"}: ${P(X.keys, ", ")}`; + case "invalid_key": + return "Virheellinen avain tietueessa"; + case "invalid_union": + return "Virheellinen unioni"; + case "invalid_element": + return "Virheellinen arvo joukossa"; + default: + return "Virheellinen sy\xF6te"; + } + }; +}; +function Wq() { + return { localeError: _u() }; +} +var ku = () => { + let $ = { string: { unit: "caract\xE8res", verb: "avoir" }, file: { unit: "octets", verb: "avoir" }, array: { unit: "\xE9l\xE9ments", verb: "avoir" }, set: { unit: "\xE9l\xE9ments", verb: "avoir" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "nombre"; + case "object": { + if (Array.isArray(X)) return "tableau"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "entr\xE9e", email: "adresse e-mail", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "date et heure ISO", date: "date ISO", time: "heure ISO", duration: "dur\xE9e ISO", ipv4: "adresse IPv4", ipv6: "adresse IPv6", cidrv4: "plage IPv4", cidrv6: "plage IPv6", base64: "cha\xEEne encod\xE9e en base64", base64url: "cha\xEEne encod\xE9e en base64url", json_string: "cha\xEEne JSON", e164: "num\xE9ro E.164", jwt: "JWT", template_literal: "entr\xE9e" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `Entr\xE9e invalide : ${X.expected} attendu, ${J(X.input)} re\xE7u`; + case "invalid_value": + if (X.values.length === 1) return `Entr\xE9e invalide : ${x(X.values[0])} attendu`; + return `Option invalide : une valeur parmi ${P(X.values, "|")} attendue`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Trop grand : ${(_a5 = X.origin) != null ? _a5 : "valeur"} doit ${G.verb} ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "\xE9l\xE9ment(s)"}`; + return `Trop grand : ${(_c2 = X.origin) != null ? _c2 : "valeur"} doit \xEAtre ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Trop petit : ${X.origin} doit ${G.verb} ${W}${X.minimum.toString()} ${G.unit}`; + return `Trop petit : ${X.origin} doit \xEAtre ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Cha\xEEne invalide : doit commencer par "${W.prefix}"`; + if (W.format === "ends_with") return `Cha\xEEne invalide : doit se terminer par "${W.suffix}"`; + if (W.format === "includes") return `Cha\xEEne invalide : doit inclure "${W.includes}"`; + if (W.format === "regex") return `Cha\xEEne invalide : doit correspondre au mod\xE8le ${W.pattern}`; + return `${(_d = Y[W.format]) != null ? _d : X.format} invalide`; + } + case "not_multiple_of": + return `Nombre invalide : doit \xEAtre un multiple de ${X.divisor}`; + case "unrecognized_keys": + return `Cl\xE9${X.keys.length > 1 ? "s" : ""} non reconnue${X.keys.length > 1 ? "s" : ""} : ${P(X.keys, ", ")}`; + case "invalid_key": + return `Cl\xE9 invalide dans ${X.origin}`; + case "invalid_union": + return "Entr\xE9e invalide"; + case "invalid_element": + return `Valeur invalide dans ${X.origin}`; + default: + return "Entr\xE9e invalide"; + } + }; +}; +function Gq() { + return { localeError: ku() }; +} +var Su = () => { + let $ = { string: { unit: "caract\xE8res", verb: "avoir" }, file: { unit: "octets", verb: "avoir" }, array: { unit: "\xE9l\xE9ments", verb: "avoir" }, set: { unit: "\xE9l\xE9ments", verb: "avoir" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "number"; + case "object": { + if (Array.isArray(X)) return "array"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "entr\xE9e", email: "adresse courriel", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "date-heure ISO", date: "date ISO", time: "heure ISO", duration: "dur\xE9e ISO", ipv4: "adresse IPv4", ipv6: "adresse IPv6", cidrv4: "plage IPv4", cidrv6: "plage IPv6", base64: "cha\xEEne encod\xE9e en base64", base64url: "cha\xEEne encod\xE9e en base64url", json_string: "cha\xEEne JSON", e164: "num\xE9ro E.164", jwt: "JWT", template_literal: "entr\xE9e" }; + return (X) => { + var _a5, _b3, _c2; + switch (X.code) { + case "invalid_type": + return `Entr\xE9e invalide : attendu ${X.expected}, re\xE7u ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Entr\xE9e invalide : attendu ${x(X.values[0])}`; + return `Option invalide : attendu l'une des valeurs suivantes ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "\u2264" : "<", G = Q(X.origin); + if (G) return `Trop grand : attendu que ${(_a5 = X.origin) != null ? _a5 : "la valeur"} ait ${W}${X.maximum.toString()} ${G.unit}`; + return `Trop grand : attendu que ${(_b3 = X.origin) != null ? _b3 : "la valeur"} soit ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? "\u2265" : ">", G = Q(X.origin); + if (G) return `Trop petit : attendu que ${X.origin} ait ${W}${X.minimum.toString()} ${G.unit}`; + return `Trop petit : attendu que ${X.origin} soit ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Cha\xEEne invalide : doit commencer par "${W.prefix}"`; + if (W.format === "ends_with") return `Cha\xEEne invalide : doit se terminer par "${W.suffix}"`; + if (W.format === "includes") return `Cha\xEEne invalide : doit inclure "${W.includes}"`; + if (W.format === "regex") return `Cha\xEEne invalide : doit correspondre au motif ${W.pattern}`; + return `${(_c2 = Y[W.format]) != null ? _c2 : X.format} invalide`; + } + case "not_multiple_of": + return `Nombre invalide : doit \xEAtre un multiple de ${X.divisor}`; + case "unrecognized_keys": + return `Cl\xE9${X.keys.length > 1 ? "s" : ""} non reconnue${X.keys.length > 1 ? "s" : ""} : ${P(X.keys, ", ")}`; + case "invalid_key": + return `Cl\xE9 invalide dans ${X.origin}`; + case "invalid_union": + return "Entr\xE9e invalide"; + case "invalid_element": + return `Valeur invalide dans ${X.origin}`; + default: + return "Entr\xE9e invalide"; + } + }; +}; +function Uq() { + return { localeError: Su() }; +} +var vu = () => { + let $ = { string: { unit: "\u05D0\u05D5\u05EA\u05D9\u05D5\u05EA", verb: "\u05DC\u05DB\u05DC\u05D5\u05DC" }, file: { unit: "\u05D1\u05D9\u05D9\u05D8\u05D9\u05DD", verb: "\u05DC\u05DB\u05DC\u05D5\u05DC" }, array: { unit: "\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD", verb: "\u05DC\u05DB\u05DC\u05D5\u05DC" }, set: { unit: "\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD", verb: "\u05DC\u05DB\u05DC\u05D5\u05DC" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "number"; + case "object": { + if (Array.isArray(X)) return "array"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u05E7\u05DC\u05D8", email: "\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC", url: "\u05DB\u05EA\u05D5\u05D1\u05EA \u05E8\u05E9\u05EA", emoji: "\u05D0\u05D9\u05DE\u05D5\u05D2'\u05D9", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "\u05EA\u05D0\u05E8\u05D9\u05DA \u05D5\u05D6\u05DE\u05DF ISO", date: "\u05EA\u05D0\u05E8\u05D9\u05DA ISO", time: "\u05D6\u05DE\u05DF ISO", duration: "\u05DE\u05E9\u05DA \u05D6\u05DE\u05DF ISO", ipv4: "\u05DB\u05EA\u05D5\u05D1\u05EA IPv4", ipv6: "\u05DB\u05EA\u05D5\u05D1\u05EA IPv6", cidrv4: "\u05D8\u05D5\u05D5\u05D7 IPv4", cidrv6: "\u05D8\u05D5\u05D5\u05D7 IPv6", base64: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64", base64url: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64 \u05DC\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05E8\u05E9\u05EA", json_string: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA JSON", e164: "\u05DE\u05E1\u05E4\u05E8 E.164", jwt: "JWT", template_literal: "\u05E7\u05DC\u05D8" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA ${X.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA ${x(X.values[0])}`; + return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05D0\u05D7\u05EA \u05DE\u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${(_a5 = X.origin) != null ? _a5 : "value"} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "elements"}`; + return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${(_c2 = X.origin) != null ? _c2 : "value"} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${X.origin} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${W}${X.minimum.toString()} ${G.unit}`; + return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${X.origin} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05E0\u05D4: \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1"${W.prefix}"`; + if (W.format === "ends_with") return `\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05E0\u05D4: \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 "${W.suffix}"`; + if (W.format === "includes") return `\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05E0\u05D4: \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC "${W.includes}"`; + if (W.format === "regex") return `\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05E0\u05D4: \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ${W.pattern}`; + return `${(_d = Y[W.format]) != null ? _d : X.format} \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`; + } + case "not_multiple_of": + return `\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ${X.divisor}`; + case "unrecognized_keys": + return `\u05DE\u05E4\u05EA\u05D7${X.keys.length > 1 ? "\u05D5\u05EA" : ""} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${X.keys.length > 1 ? "\u05D9\u05DD" : "\u05D4"}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `\u05DE\u05E4\u05EA\u05D7 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${X.origin}`; + case "invalid_union": + return "\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF"; + case "invalid_element": + return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${X.origin}`; + default: + return "\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF"; + } + }; +}; +function Hq() { + return { localeError: vu() }; +} +var Cu = () => { + let $ = { string: { unit: "karakter", verb: "legyen" }, file: { unit: "byte", verb: "legyen" }, array: { unit: "elem", verb: "legyen" }, set: { unit: "elem", verb: "legyen" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "sz\xE1m"; + case "object": { + if (Array.isArray(X)) return "t\xF6mb"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "bemenet", email: "email c\xEDm", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO id\u0151b\xE9lyeg", date: "ISO d\xE1tum", time: "ISO id\u0151", duration: "ISO id\u0151intervallum", ipv4: "IPv4 c\xEDm", ipv6: "IPv6 c\xEDm", cidrv4: "IPv4 tartom\xE1ny", cidrv6: "IPv6 tartom\xE1ny", base64: "base64-k\xF3dolt string", base64url: "base64url-k\xF3dolt string", json_string: "JSON string", e164: "E.164 sz\xE1m", jwt: "JWT", template_literal: "bemenet" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${X.expected}, a kapott \xE9rt\xE9k ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${x(X.values[0])}`; + return `\xC9rv\xE9nytelen opci\xF3: valamelyik \xE9rt\xE9k v\xE1rt ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `T\xFAl nagy: ${(_a5 = X.origin) != null ? _a5 : "\xE9rt\xE9k"} m\xE9rete t\xFAl nagy ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "elem"}`; + return `T\xFAl nagy: a bemeneti \xE9rt\xE9k ${(_c2 = X.origin) != null ? _c2 : "\xE9rt\xE9k"} t\xFAl nagy: ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${X.origin} m\xE9rete t\xFAl kicsi ${W}${X.minimum.toString()} ${G.unit}`; + return `T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${X.origin} t\xFAl kicsi ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\xC9rv\xE9nytelen string: "${W.prefix}" \xE9rt\xE9kkel kell kezd\u0151dnie`; + if (W.format === "ends_with") return `\xC9rv\xE9nytelen string: "${W.suffix}" \xE9rt\xE9kkel kell v\xE9gz\u0151dnie`; + if (W.format === "includes") return `\xC9rv\xE9nytelen string: "${W.includes}" \xE9rt\xE9ket kell tartalmaznia`; + if (W.format === "regex") return `\xC9rv\xE9nytelen string: ${W.pattern} mint\xE1nak kell megfelelnie`; + return `\xC9rv\xE9nytelen ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `\xC9rv\xE9nytelen sz\xE1m: ${X.divisor} t\xF6bbsz\xF6r\xF6s\xE9nek kell lennie`; + case "unrecognized_keys": + return `Ismeretlen kulcs${X.keys.length > 1 ? "s" : ""}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `\xC9rv\xE9nytelen kulcs ${X.origin}`; + case "invalid_union": + return "\xC9rv\xE9nytelen bemenet"; + case "invalid_element": + return `\xC9rv\xE9nytelen \xE9rt\xE9k: ${X.origin}`; + default: + return "\xC9rv\xE9nytelen bemenet"; + } + }; +}; +function Kq() { + return { localeError: Cu() }; +} +var Tu = () => { + let $ = { string: { unit: "karakter", verb: "memiliki" }, file: { unit: "byte", verb: "memiliki" }, array: { unit: "item", verb: "memiliki" }, set: { unit: "item", verb: "memiliki" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "number"; + case "object": { + if (Array.isArray(X)) return "array"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "input", email: "alamat email", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "tanggal dan waktu format ISO", date: "tanggal format ISO", time: "jam format ISO", duration: "durasi format ISO", ipv4: "alamat IPv4", ipv6: "alamat IPv6", cidrv4: "rentang alamat IPv4", cidrv6: "rentang alamat IPv6", base64: "string dengan enkode base64", base64url: "string dengan enkode base64url", json_string: "string JSON", e164: "angka E.164", jwt: "JWT", template_literal: "input" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `Input tidak valid: diharapkan ${X.expected}, diterima ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Input tidak valid: diharapkan ${x(X.values[0])}`; + return `Pilihan tidak valid: diharapkan salah satu dari ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Terlalu besar: diharapkan ${(_a5 = X.origin) != null ? _a5 : "value"} memiliki ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "elemen"}`; + return `Terlalu besar: diharapkan ${(_c2 = X.origin) != null ? _c2 : "value"} menjadi ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Terlalu kecil: diharapkan ${X.origin} memiliki ${W}${X.minimum.toString()} ${G.unit}`; + return `Terlalu kecil: diharapkan ${X.origin} menjadi ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `String tidak valid: harus dimulai dengan "${W.prefix}"`; + if (W.format === "ends_with") return `String tidak valid: harus berakhir dengan "${W.suffix}"`; + if (W.format === "includes") return `String tidak valid: harus menyertakan "${W.includes}"`; + if (W.format === "regex") return `String tidak valid: harus sesuai pola ${W.pattern}`; + return `${(_d = Y[W.format]) != null ? _d : X.format} tidak valid`; + } + case "not_multiple_of": + return `Angka tidak valid: harus kelipatan dari ${X.divisor}`; + case "unrecognized_keys": + return `Kunci tidak dikenali ${X.keys.length > 1 ? "s" : ""}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Kunci tidak valid di ${X.origin}`; + case "invalid_union": + return "Input tidak valid"; + case "invalid_element": + return `Nilai tidak valid di ${X.origin}`; + default: + return "Input tidak valid"; + } + }; +}; +function qq() { + return { localeError: Tu() }; +} +var xu = () => { + let $ = { string: { unit: "caratteri", verb: "avere" }, file: { unit: "byte", verb: "avere" }, array: { unit: "elementi", verb: "avere" }, set: { unit: "elementi", verb: "avere" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "numero"; + case "object": { + if (Array.isArray(X)) return "vettore"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "input", email: "indirizzo email", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "data e ora ISO", date: "data ISO", time: "ora ISO", duration: "durata ISO", ipv4: "indirizzo IPv4", ipv6: "indirizzo IPv6", cidrv4: "intervallo IPv4", cidrv6: "intervallo IPv6", base64: "stringa codificata in base64", base64url: "URL codificata in base64", json_string: "stringa JSON", e164: "numero E.164", jwt: "JWT", template_literal: "input" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `Input non valido: atteso ${X.expected}, ricevuto ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Input non valido: atteso ${x(X.values[0])}`; + return `Opzione non valida: atteso uno tra ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Troppo grande: ${(_a5 = X.origin) != null ? _a5 : "valore"} deve avere ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "elementi"}`; + return `Troppo grande: ${(_c2 = X.origin) != null ? _c2 : "valore"} deve essere ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Troppo piccolo: ${X.origin} deve avere ${W}${X.minimum.toString()} ${G.unit}`; + return `Troppo piccolo: ${X.origin} deve essere ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Stringa non valida: deve iniziare con "${W.prefix}"`; + if (W.format === "ends_with") return `Stringa non valida: deve terminare con "${W.suffix}"`; + if (W.format === "includes") return `Stringa non valida: deve includere "${W.includes}"`; + if (W.format === "regex") return `Stringa non valida: deve corrispondere al pattern ${W.pattern}`; + return `Invalid ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `Numero non valido: deve essere un multiplo di ${X.divisor}`; + case "unrecognized_keys": + return `Chiav${X.keys.length > 1 ? "i" : "e"} non riconosciut${X.keys.length > 1 ? "e" : "a"}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Chiave non valida in ${X.origin}`; + case "invalid_union": + return "Input non valido"; + case "invalid_element": + return `Valore non valido in ${X.origin}`; + default: + return "Input non valido"; + } + }; +}; +function Vq() { + return { localeError: xu() }; +} +var yu = () => { + let $ = { string: { unit: "\u6587\u5B57", verb: "\u3067\u3042\u308B" }, file: { unit: "\u30D0\u30A4\u30C8", verb: "\u3067\u3042\u308B" }, array: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" }, set: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "\u6570\u5024"; + case "object": { + if (Array.isArray(X)) return "\u914D\u5217"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u5165\u529B\u5024", email: "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9", url: "URL", emoji: "\u7D75\u6587\u5B57", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO\u65E5\u6642", date: "ISO\u65E5\u4ED8", time: "ISO\u6642\u523B", duration: "ISO\u671F\u9593", ipv4: "IPv4\u30A2\u30C9\u30EC\u30B9", ipv6: "IPv6\u30A2\u30C9\u30EC\u30B9", cidrv4: "IPv4\u7BC4\u56F2", cidrv6: "IPv6\u7BC4\u56F2", base64: "base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217", base64url: "base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217", json_string: "JSON\u6587\u5B57\u5217", e164: "E.164\u756A\u53F7", jwt: "JWT", template_literal: "\u5165\u529B\u5024" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u7121\u52B9\u306A\u5165\u529B: ${X.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${J(X.input)}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`; + case "invalid_value": + if (X.values.length === 1) return `\u7121\u52B9\u306A\u5165\u529B: ${x(X.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`; + return `\u7121\u52B9\u306A\u9078\u629E: ${P(X.values, "\u3001")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + case "too_big": { + let W = X.inclusive ? "\u4EE5\u4E0B\u3067\u3042\u308B" : "\u3088\u308A\u5C0F\u3055\u3044", G = Q(X.origin); + if (G) return `\u5927\u304D\u3059\u304E\u308B\u5024: ${(_a5 = X.origin) != null ? _a5 : "\u5024"}\u306F${X.maximum.toString()}${(_b3 = G.unit) != null ? _b3 : "\u8981\u7D20"}${W}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + return `\u5927\u304D\u3059\u304E\u308B\u5024: ${(_c2 = X.origin) != null ? _c2 : "\u5024"}\u306F${X.maximum.toString()}${W}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + } + case "too_small": { + let W = X.inclusive ? "\u4EE5\u4E0A\u3067\u3042\u308B" : "\u3088\u308A\u5927\u304D\u3044", G = Q(X.origin); + if (G) return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${X.origin}\u306F${X.minimum.toString()}${G.unit}${W}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${X.origin}\u306F${X.minimum.toString()}${W}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${W.prefix}"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + if (W.format === "ends_with") return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${W.suffix}"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + if (W.format === "includes") return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${W.includes}"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + if (W.format === "regex") return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${W.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + return `\u7121\u52B9\u306A${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `\u7121\u52B9\u306A\u6570\u5024: ${X.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + case "unrecognized_keys": + return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${X.keys.length > 1 ? "\u7FA4" : ""}: ${P(X.keys, "\u3001")}`; + case "invalid_key": + return `${X.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`; + case "invalid_union": + return "\u7121\u52B9\u306A\u5165\u529B"; + case "invalid_element": + return `${X.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`; + default: + return "\u7121\u52B9\u306A\u5165\u529B"; + } + }; +}; +function Bq() { + return { localeError: yu() }; +} +var fu = () => { + let $ = { string: { unit: "\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, file: { unit: "\u1794\u17C3", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, array: { unit: "\u1792\u17B6\u178F\u17BB", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, set: { unit: "\u1792\u17B6\u178F\u17BB", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "\u1798\u17B7\u1793\u1798\u17C2\u1793\u1787\u17B6\u179B\u17C1\u1781 (NaN)" : "\u179B\u17C1\u1781"; + case "object": { + if (Array.isArray(X)) return "\u17A2\u17B6\u179A\u17C1 (Array)"; + if (X === null) return "\u1782\u17D2\u1798\u17B6\u1793\u178F\u1798\u17D2\u179B\u17C3 (null)"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B", email: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793\u17A2\u17CA\u17B8\u1798\u17C2\u179B", url: "URL", emoji: "\u179F\u1789\u17D2\u1789\u17B6\u17A2\u17B6\u179A\u1798\u17D2\u1798\u178E\u17CD", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 \u1793\u17B7\u1784\u1798\u17C9\u17C4\u1784 ISO", date: "\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 ISO", time: "\u1798\u17C9\u17C4\u1784 ISO", duration: "\u179A\u1799\u17C8\u1796\u17C1\u179B ISO", ipv4: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4", ipv6: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6", cidrv4: "\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4", cidrv6: "\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6", base64: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64", base64url: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64url", json_string: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A JSON", e164: "\u179B\u17C1\u1781 E.164", jwt: "JWT", template_literal: "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${X.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${x(X.values[0])}`; + return `\u1787\u1798\u17D2\u179A\u17BE\u179F\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1787\u17B6\u1798\u17BD\u1799\u1780\u17D2\u1793\u17BB\u1784\u1785\u17C6\u178E\u17C4\u1798 ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${(_a5 = X.origin) != null ? _a5 : "\u178F\u1798\u17D2\u179B\u17C3"} ${W} ${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "\u1792\u17B6\u178F\u17BB"}`; + return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${(_c2 = X.origin) != null ? _c2 : "\u178F\u1798\u17D2\u179B\u17C3"} ${W} ${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${X.origin} ${W} ${X.minimum.toString()} ${G.unit}`; + return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${X.origin} ${W} ${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798\u178A\u17C4\u1799 "${W.prefix}"`; + if (W.format === "ends_with") return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1794\u1789\u17D2\u1785\u1794\u17CB\u178A\u17C4\u1799 "${W.suffix}"`; + if (W.format === "includes") return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1798\u17B6\u1793 "${W.includes}"`; + if (W.format === "regex") return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1795\u17D2\u1782\u17BC\u1795\u17D2\u1782\u1784\u1793\u17B9\u1784\u1791\u1798\u17D2\u179A\u1784\u17CB\u178A\u17C2\u179B\u1794\u17B6\u1793\u1780\u17C6\u178E\u178F\u17CB ${W.pattern}`; + return `\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `\u179B\u17C1\u1781\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1787\u17B6\u1796\u17A0\u17BB\u1782\u17BB\u178E\u1793\u17C3 ${X.divisor}`; + case "unrecognized_keys": + return `\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${P(X.keys, ", ")}`; + case "invalid_key": + return `\u179F\u17C4\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${X.origin}`; + case "invalid_union": + return "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C"; + case "invalid_element": + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${X.origin}`; + default: + return "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C"; + } + }; +}; +function zq() { + return { localeError: fu() }; +} +var gu = () => { + let $ = { string: { unit: "\uBB38\uC790", verb: "to have" }, file: { unit: "\uBC14\uC774\uD2B8", verb: "to have" }, array: { unit: "\uAC1C", verb: "to have" }, set: { unit: "\uAC1C", verb: "to have" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "number"; + case "object": { + if (Array.isArray(X)) return "array"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\uC785\uB825", email: "\uC774\uBA54\uC77C \uC8FC\uC18C", url: "URL", emoji: "\uC774\uBAA8\uC9C0", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO \uB0A0\uC9DC\uC2DC\uAC04", date: "ISO \uB0A0\uC9DC", time: "ISO \uC2DC\uAC04", duration: "ISO \uAE30\uAC04", ipv4: "IPv4 \uC8FC\uC18C", ipv6: "IPv6 \uC8FC\uC18C", cidrv4: "IPv4 \uBC94\uC704", cidrv6: "IPv6 \uBC94\uC704", base64: "base64 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4", base64url: "base64url \uC778\uCF54\uB529 \uBB38\uC790\uC5F4", json_string: "JSON \uBB38\uC790\uC5F4", e164: "E.164 \uBC88\uD638", jwt: "JWT", template_literal: "\uC785\uB825" }; + return (X) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g; + switch (X.code) { + case "invalid_type": + return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${X.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${J(X.input)}\uC785\uB2C8\uB2E4`; + case "invalid_value": + if (X.values.length === 1) return `\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${x(X.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`; + return `\uC798\uBABB\uB41C \uC635\uC158: ${P(X.values, "\uB610\uB294 ")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`; + case "too_big": { + let W = X.inclusive ? "\uC774\uD558" : "\uBBF8\uB9CC", G = W === "\uBBF8\uB9CC" ? "\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4" : "\uC5EC\uC57C \uD569\uB2C8\uB2E4", U = Q(X.origin), H = (_a5 = U == null ? void 0 : U.unit) != null ? _a5 : "\uC694\uC18C"; + if (U) return `${(_b3 = X.origin) != null ? _b3 : "\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${X.maximum.toString()}${H} ${W}${G}`; + return `${(_c2 = X.origin) != null ? _c2 : "\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${X.maximum.toString()} ${W}${G}`; + } + case "too_small": { + let W = X.inclusive ? "\uC774\uC0C1" : "\uCD08\uACFC", G = W === "\uC774\uC0C1" ? "\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4" : "\uC5EC\uC57C \uD569\uB2C8\uB2E4", U = Q(X.origin), H = (_d = U == null ? void 0 : U.unit) != null ? _d : "\uC694\uC18C"; + if (U) return `${(_e2 = X.origin) != null ? _e2 : "\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${X.minimum.toString()}${H} ${W}${G}`; + return `${(_f2 = X.origin) != null ? _f2 : "\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${X.minimum.toString()} ${W}${G}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${W.prefix}"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`; + if (W.format === "ends_with") return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${W.suffix}"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`; + if (W.format === "includes") return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${W.includes}"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`; + if (W.format === "regex") return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${W.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`; + return `\uC798\uBABB\uB41C ${(_g = Y[W.format]) != null ? _g : X.format}`; + } + case "not_multiple_of": + return `\uC798\uBABB\uB41C \uC22B\uC790: ${X.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`; + case "unrecognized_keys": + return `\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${P(X.keys, ", ")}`; + case "invalid_key": + return `\uC798\uBABB\uB41C \uD0A4: ${X.origin}`; + case "invalid_union": + return "\uC798\uBABB\uB41C \uC785\uB825"; + case "invalid_element": + return `\uC798\uBABB\uB41C \uAC12: ${X.origin}`; + default: + return "\uC798\uBABB\uB41C \uC785\uB825"; + } + }; +}; +function Nq() { + return { localeError: gu() }; +} +var hu = () => { + let $ = { string: { unit: "\u0437\u043D\u0430\u0446\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, file: { unit: "\u0431\u0430\u0458\u0442\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, array: { unit: "\u0441\u0442\u0430\u0432\u043A\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, set: { unit: "\u0441\u0442\u0430\u0432\u043A\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "\u0431\u0440\u043E\u0458"; + case "object": { + if (Array.isArray(X)) return "\u043D\u0438\u0437\u0430"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u0432\u043D\u0435\u0441", email: "\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0430 \u0435-\u043F\u043E\u0448\u0442\u0430", url: "URL", emoji: "\u0435\u043C\u043E\u045F\u0438", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO \u0434\u0430\u0442\u0443\u043C \u0438 \u0432\u0440\u0435\u043C\u0435", date: "ISO \u0434\u0430\u0442\u0443\u043C", time: "ISO \u0432\u0440\u0435\u043C\u0435", duration: "ISO \u0432\u0440\u0435\u043C\u0435\u0442\u0440\u0430\u0435\u045A\u0435", ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441\u0430", ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441\u0430", cidrv4: "IPv4 \u043E\u043F\u0441\u0435\u0433", cidrv6: "IPv6 \u043E\u043F\u0441\u0435\u0433", base64: "base64-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430", base64url: "base64url-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430", json_string: "JSON \u043D\u0438\u0437\u0430", e164: "E.164 \u0431\u0440\u043E\u0458", jwt: "JWT", template_literal: "\u0432\u043D\u0435\u0441" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${X.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Invalid input: expected ${x(X.values[0])}`; + return `\u0413\u0440\u0435\u0448\u0430\u043D\u0430 \u043E\u043F\u0446\u0438\u0458\u0430: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 \u0435\u0434\u043D\u0430 ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${(_a5 = X.origin) != null ? _a5 : "\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0438\u043C\u0430 ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0438"}`; + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${(_c2 = X.origin) != null ? _c2 : "\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${X.origin} \u0434\u0430 \u0438\u043C\u0430 ${W}${X.minimum.toString()} ${G.unit}`; + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${X.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u043D\u0443\u0432\u0430 \u0441\u043E "${W.prefix}"`; + if (W.format === "ends_with") return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u0432\u0440\u0448\u0443\u0432\u0430 \u0441\u043E "${W.suffix}"`; + if (W.format === "includes") return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0432\u043A\u043B\u0443\u0447\u0443\u0432\u0430 "${W.includes}"`; + if (W.format === "regex") return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u043E\u0434\u0433\u043E\u0430\u0440\u0430 \u043D\u0430 \u043F\u0430\u0442\u0435\u0440\u043D\u043E\u0442 ${W.pattern}`; + return `Invalid ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `\u0413\u0440\u0435\u0448\u0435\u043D \u0431\u0440\u043E\u0458: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u0435\u043B\u0438\u0432 \u0441\u043E ${X.divisor}`; + case "unrecognized_keys": + return `${X.keys.length > 1 ? "\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D\u0438 \u043A\u043B\u0443\u0447\u0435\u0432\u0438" : "\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D \u043A\u043B\u0443\u0447"}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${X.origin}`; + case "invalid_union": + return "\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441"; + case "invalid_element": + return `\u0413\u0440\u0435\u0448\u043D\u0430 \u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442 \u0432\u043E ${X.origin}`; + default: + return "\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441"; + } + }; +}; +function wq() { + return { localeError: hu() }; +} +var uu = () => { + let $ = { string: { unit: "aksara", verb: "mempunyai" }, file: { unit: "bait", verb: "mempunyai" }, array: { unit: "elemen", verb: "mempunyai" }, set: { unit: "elemen", verb: "mempunyai" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "nombor"; + case "object": { + if (Array.isArray(X)) return "array"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "input", email: "alamat e-mel", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "tarikh masa ISO", date: "tarikh ISO", time: "masa ISO", duration: "tempoh ISO", ipv4: "alamat IPv4", ipv6: "alamat IPv6", cidrv4: "julat IPv4", cidrv6: "julat IPv6", base64: "string dikodkan base64", base64url: "string dikodkan base64url", json_string: "string JSON", e164: "nombor E.164", jwt: "JWT", template_literal: "input" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `Input tidak sah: dijangka ${X.expected}, diterima ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Input tidak sah: dijangka ${x(X.values[0])}`; + return `Pilihan tidak sah: dijangka salah satu daripada ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Terlalu besar: dijangka ${(_a5 = X.origin) != null ? _a5 : "nilai"} ${G.verb} ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "elemen"}`; + return `Terlalu besar: dijangka ${(_c2 = X.origin) != null ? _c2 : "nilai"} adalah ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Terlalu kecil: dijangka ${X.origin} ${G.verb} ${W}${X.minimum.toString()} ${G.unit}`; + return `Terlalu kecil: dijangka ${X.origin} adalah ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `String tidak sah: mesti bermula dengan "${W.prefix}"`; + if (W.format === "ends_with") return `String tidak sah: mesti berakhir dengan "${W.suffix}"`; + if (W.format === "includes") return `String tidak sah: mesti mengandungi "${W.includes}"`; + if (W.format === "regex") return `String tidak sah: mesti sepadan dengan corak ${W.pattern}`; + return `${(_d = Y[W.format]) != null ? _d : X.format} tidak sah`; + } + case "not_multiple_of": + return `Nombor tidak sah: perlu gandaan ${X.divisor}`; + case "unrecognized_keys": + return `Kunci tidak dikenali: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Kunci tidak sah dalam ${X.origin}`; + case "invalid_union": + return "Input tidak sah"; + case "invalid_element": + return `Nilai tidak sah dalam ${X.origin}`; + default: + return "Input tidak sah"; + } + }; +}; +function Oq() { + return { localeError: uu() }; +} +var mu = () => { + let $ = { string: { unit: "tekens" }, file: { unit: "bytes" }, array: { unit: "elementen" }, set: { unit: "elementen" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "getal"; + case "object": { + if (Array.isArray(X)) return "array"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "invoer", email: "emailadres", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO datum en tijd", date: "ISO datum", time: "ISO tijd", duration: "ISO duur", ipv4: "IPv4-adres", ipv6: "IPv6-adres", cidrv4: "IPv4-bereik", cidrv6: "IPv6-bereik", base64: "base64-gecodeerde tekst", base64url: "base64 URL-gecodeerde tekst", json_string: "JSON string", e164: "E.164-nummer", jwt: "JWT", template_literal: "invoer" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `Ongeldige invoer: verwacht ${X.expected}, ontving ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Ongeldige invoer: verwacht ${x(X.values[0])}`; + return `Ongeldige optie: verwacht \xE9\xE9n van ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Te lang: verwacht dat ${(_a5 = X.origin) != null ? _a5 : "waarde"} ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "elementen"} bevat`; + return `Te lang: verwacht dat ${(_c2 = X.origin) != null ? _c2 : "waarde"} ${W}${X.maximum.toString()} is`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Te kort: verwacht dat ${X.origin} ${W}${X.minimum.toString()} ${G.unit} bevat`; + return `Te kort: verwacht dat ${X.origin} ${W}${X.minimum.toString()} is`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Ongeldige tekst: moet met "${W.prefix}" beginnen`; + if (W.format === "ends_with") return `Ongeldige tekst: moet op "${W.suffix}" eindigen`; + if (W.format === "includes") return `Ongeldige tekst: moet "${W.includes}" bevatten`; + if (W.format === "regex") return `Ongeldige tekst: moet overeenkomen met patroon ${W.pattern}`; + return `Ongeldig: ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `Ongeldig getal: moet een veelvoud van ${X.divisor} zijn`; + case "unrecognized_keys": + return `Onbekende key${X.keys.length > 1 ? "s" : ""}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Ongeldige key in ${X.origin}`; + case "invalid_union": + return "Ongeldige invoer"; + case "invalid_element": + return `Ongeldige waarde in ${X.origin}`; + default: + return "Ongeldige invoer"; + } + }; +}; +function Dq() { + return { localeError: mu() }; +} +var lu = () => { + let $ = { string: { unit: "tegn", verb: "\xE5 ha" }, file: { unit: "bytes", verb: "\xE5 ha" }, array: { unit: "elementer", verb: "\xE5 inneholde" }, set: { unit: "elementer", verb: "\xE5 inneholde" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "tall"; + case "object": { + if (Array.isArray(X)) return "liste"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "input", email: "e-postadresse", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO dato- og klokkeslett", date: "ISO-dato", time: "ISO-klokkeslett", duration: "ISO-varighet", ipv4: "IPv4-omr\xE5de", ipv6: "IPv6-omr\xE5de", cidrv4: "IPv4-spekter", cidrv6: "IPv6-spekter", base64: "base64-enkodet streng", base64url: "base64url-enkodet streng", json_string: "JSON-streng", e164: "E.164-nummer", jwt: "JWT", template_literal: "input" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `Ugyldig input: forventet ${X.expected}, fikk ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Ugyldig verdi: forventet ${x(X.values[0])}`; + return `Ugyldig valg: forventet en av ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `For stor(t): forventet ${(_a5 = X.origin) != null ? _a5 : "value"} til \xE5 ha ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "elementer"}`; + return `For stor(t): forventet ${(_c2 = X.origin) != null ? _c2 : "value"} til \xE5 ha ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `For lite(n): forventet ${X.origin} til \xE5 ha ${W}${X.minimum.toString()} ${G.unit}`; + return `For lite(n): forventet ${X.origin} til \xE5 ha ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Ugyldig streng: m\xE5 starte med "${W.prefix}"`; + if (W.format === "ends_with") return `Ugyldig streng: m\xE5 ende med "${W.suffix}"`; + if (W.format === "includes") return `Ugyldig streng: m\xE5 inneholde "${W.includes}"`; + if (W.format === "regex") return `Ugyldig streng: m\xE5 matche m\xF8nsteret ${W.pattern}`; + return `Ugyldig ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `Ugyldig tall: m\xE5 v\xE6re et multiplum av ${X.divisor}`; + case "unrecognized_keys": + return `${X.keys.length > 1 ? "Ukjente n\xF8kler" : "Ukjent n\xF8kkel"}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Ugyldig n\xF8kkel i ${X.origin}`; + case "invalid_union": + return "Ugyldig input"; + case "invalid_element": + return `Ugyldig verdi i ${X.origin}`; + default: + return "Ugyldig input"; + } + }; +}; +function Fq() { + return { localeError: lu() }; +} +var cu = () => { + let $ = { string: { unit: "harf", verb: "olmal\u0131d\u0131r" }, file: { unit: "bayt", verb: "olmal\u0131d\u0131r" }, array: { unit: "unsur", verb: "olmal\u0131d\u0131r" }, set: { unit: "unsur", verb: "olmal\u0131d\u0131r" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "numara"; + case "object": { + if (Array.isArray(X)) return "saf"; + if (X === null) return "gayb"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "giren", email: "epostag\xE2h", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO heng\xE2m\u0131", date: "ISO tarihi", time: "ISO zaman\u0131", duration: "ISO m\xFCddeti", ipv4: "IPv4 ni\u015F\xE2n\u0131", ipv6: "IPv6 ni\u015F\xE2n\u0131", cidrv4: "IPv4 menzili", cidrv6: "IPv6 menzili", base64: "base64-\u015Fifreli metin", base64url: "base64url-\u015Fifreli metin", json_string: "JSON metin", e164: "E.164 say\u0131s\u0131", jwt: "JWT", template_literal: "giren" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `F\xE2sit giren: umulan ${X.expected}, al\u0131nan ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `F\xE2sit giren: umulan ${x(X.values[0])}`; + return `F\xE2sit tercih: m\xFBteberler ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Fazla b\xFCy\xFCk: ${(_a5 = X.origin) != null ? _a5 : "value"}, ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "elements"} sahip olmal\u0131yd\u0131.`; + return `Fazla b\xFCy\xFCk: ${(_c2 = X.origin) != null ? _c2 : "value"}, ${W}${X.maximum.toString()} olmal\u0131yd\u0131.`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Fazla k\xFC\xE7\xFCk: ${X.origin}, ${W}${X.minimum.toString()} ${G.unit} sahip olmal\u0131yd\u0131.`; + return `Fazla k\xFC\xE7\xFCk: ${X.origin}, ${W}${X.minimum.toString()} olmal\u0131yd\u0131.`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `F\xE2sit metin: "${W.prefix}" ile ba\u015Flamal\u0131.`; + if (W.format === "ends_with") return `F\xE2sit metin: "${W.suffix}" ile bitmeli.`; + if (W.format === "includes") return `F\xE2sit metin: "${W.includes}" ihtiv\xE2 etmeli.`; + if (W.format === "regex") return `F\xE2sit metin: ${W.pattern} nak\u015F\u0131na uymal\u0131.`; + return `F\xE2sit ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `F\xE2sit say\u0131: ${X.divisor} kat\u0131 olmal\u0131yd\u0131.`; + case "unrecognized_keys": + return `Tan\u0131nmayan anahtar ${X.keys.length > 1 ? "s" : ""}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `${X.origin} i\xE7in tan\u0131nmayan anahtar var.`; + case "invalid_union": + return "Giren tan\u0131namad\u0131."; + case "invalid_element": + return `${X.origin} i\xE7in tan\u0131nmayan k\u0131ymet var.`; + default: + return "K\u0131ymet tan\u0131namad\u0131."; + } + }; +}; +function Zq() { + return { localeError: cu() }; +} +var pu = () => { + let $ = { string: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" }, file: { unit: "\u0628\u0627\u06CC\u067C\u0633", verb: "\u0648\u0644\u0631\u064A" }, array: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" }, set: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "\u0639\u062F\u062F"; + case "object": { + if (Array.isArray(X)) return "\u0627\u0631\u06D0"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u0648\u0631\u0648\u062F\u064A", email: "\u0628\u0631\u06CC\u069A\u0646\u0627\u0644\u06CC\u06A9", url: "\u06CC\u0648 \u0622\u0631 \u0627\u0644", emoji: "\u0627\u06CC\u0645\u0648\u062C\u064A", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "\u0646\u06CC\u067C\u0647 \u0627\u0648 \u0648\u062E\u062A", date: "\u0646\u06D0\u067C\u0647", time: "\u0648\u062E\u062A", duration: "\u0645\u0648\u062F\u0647", ipv4: "\u062F IPv4 \u067E\u062A\u0647", ipv6: "\u062F IPv6 \u067E\u062A\u0647", cidrv4: "\u062F IPv4 \u0633\u0627\u062D\u0647", cidrv6: "\u062F IPv6 \u0633\u0627\u062D\u0647", base64: "base64-encoded \u0645\u062A\u0646", base64url: "base64url-encoded \u0645\u062A\u0646", json_string: "JSON \u0645\u062A\u0646", e164: "\u062F E.164 \u0634\u0645\u06D0\u0631\u0647", jwt: "JWT", template_literal: "\u0648\u0631\u0648\u062F\u064A" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${X.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${J(X.input)} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`; + case "invalid_value": + if (X.values.length === 1) return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${x(X.values[0])} \u0648\u0627\u06CC`; + return `\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${P(X.values, "|")} \u0685\u062E\u0647 \u0648\u0627\u06CC`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${(_a5 = X.origin) != null ? _a5 : "\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "\u0639\u0646\u0635\u0631\u0648\u0646\u0647"} \u0648\u0644\u0631\u064A`; + return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${(_c2 = X.origin) != null ? _c2 : "\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${W}${X.maximum.toString()} \u0648\u064A`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${X.origin} \u0628\u0627\u06CC\u062F ${W}${X.minimum.toString()} ${G.unit} \u0648\u0644\u0631\u064A`; + return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${X.origin} \u0628\u0627\u06CC\u062F ${W}${X.minimum.toString()} \u0648\u064A`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${W.prefix}" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`; + if (W.format === "ends_with") return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${W.suffix}" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`; + if (W.format === "includes") return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F "${W.includes}" \u0648\u0644\u0631\u064A`; + if (W.format === "regex") return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${W.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`; + return `${(_d = Y[W.format]) != null ? _d : X.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`; + } + case "not_multiple_of": + return `\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${X.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`; + case "unrecognized_keys": + return `\u0646\u0627\u0633\u0645 ${X.keys.length > 1 ? "\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647" : "\u06A9\u0644\u06CC\u0689"}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${X.origin} \u06A9\u06D0`; + case "invalid_union": + return "\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A"; + case "invalid_element": + return `\u0646\u0627\u0633\u0645 \u0639\u0646\u0635\u0631 \u067E\u0647 ${X.origin} \u06A9\u06D0`; + default: + return "\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A"; + } + }; +}; +function Mq() { + return { localeError: pu() }; +} +var du = () => { + let $ = { string: { unit: "znak\xF3w", verb: "mie\u0107" }, file: { unit: "bajt\xF3w", verb: "mie\u0107" }, array: { unit: "element\xF3w", verb: "mie\u0107" }, set: { unit: "element\xF3w", verb: "mie\u0107" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "liczba"; + case "object": { + if (Array.isArray(X)) return "tablica"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "wyra\u017Cenie", email: "adres email", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "data i godzina w formacie ISO", date: "data w formacie ISO", time: "godzina w formacie ISO", duration: "czas trwania ISO", ipv4: "adres IPv4", ipv6: "adres IPv6", cidrv4: "zakres IPv4", cidrv6: "zakres IPv6", base64: "ci\u0105g znak\xF3w zakodowany w formacie base64", base64url: "ci\u0105g znak\xF3w zakodowany w formacie base64url", json_string: "ci\u0105g znak\xF3w w formacie JSON", e164: "liczba E.164", jwt: "JWT", template_literal: "wej\u015Bcie" }; + return (X) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g; + switch (X.code) { + case "invalid_type": + return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${X.expected}, otrzymano ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${x(X.values[0])}`; + return `Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${(_a5 = X.origin) != null ? _a5 : "warto\u015B\u0107"} b\u0119dzie mie\u0107 ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "element\xF3w"}`; + return `Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${(_c2 = X.origin) != null ? _c2 : "warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${(_d = X.origin) != null ? _d : "warto\u015B\u0107"} b\u0119dzie mie\u0107 ${W}${X.minimum.toString()} ${(_e2 = G.unit) != null ? _e2 : "element\xF3w"}`; + return `Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${(_f2 = X.origin) != null ? _f2 : "warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zaczyna\u0107 si\u0119 od "${W.prefix}"`; + if (W.format === "ends_with") return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi ko\u0144czy\u0107 si\u0119 na "${W.suffix}"`; + if (W.format === "includes") return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zawiera\u0107 "${W.includes}"`; + if (W.format === "regex") return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi odpowiada\u0107 wzorcowi ${W.pattern}`; + return `Nieprawid\u0142ow(y/a/e) ${(_g = Y[W.format]) != null ? _g : X.format}`; + } + case "not_multiple_of": + return `Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${X.divisor}`; + case "unrecognized_keys": + return `Nierozpoznane klucze${X.keys.length > 1 ? "s" : ""}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Nieprawid\u0142owy klucz w ${X.origin}`; + case "invalid_union": + return "Nieprawid\u0142owe dane wej\u015Bciowe"; + case "invalid_element": + return `Nieprawid\u0142owa warto\u015B\u0107 w ${X.origin}`; + default: + return "Nieprawid\u0142owe dane wej\u015Bciowe"; + } + }; +}; +function Lq() { + return { localeError: du() }; +} +var iu = () => { + let $ = { string: { unit: "caracteres", verb: "ter" }, file: { unit: "bytes", verb: "ter" }, array: { unit: "itens", verb: "ter" }, set: { unit: "itens", verb: "ter" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "n\xFAmero"; + case "object": { + if (Array.isArray(X)) return "array"; + if (X === null) return "nulo"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "padr\xE3o", email: "endere\xE7o de e-mail", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "data e hora ISO", date: "data ISO", time: "hora ISO", duration: "dura\xE7\xE3o ISO", ipv4: "endere\xE7o IPv4", ipv6: "endere\xE7o IPv6", cidrv4: "faixa de IPv4", cidrv6: "faixa de IPv6", base64: "texto codificado em base64", base64url: "URL codificada em base64", json_string: "texto JSON", e164: "n\xFAmero E.164", jwt: "JWT", template_literal: "entrada" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `Tipo inv\xE1lido: esperado ${X.expected}, recebido ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Entrada inv\xE1lida: esperado ${x(X.values[0])}`; + return `Op\xE7\xE3o inv\xE1lida: esperada uma das ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Muito grande: esperado que ${(_a5 = X.origin) != null ? _a5 : "valor"} tivesse ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "elementos"}`; + return `Muito grande: esperado que ${(_c2 = X.origin) != null ? _c2 : "valor"} fosse ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Muito pequeno: esperado que ${X.origin} tivesse ${W}${X.minimum.toString()} ${G.unit}`; + return `Muito pequeno: esperado que ${X.origin} fosse ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Texto inv\xE1lido: deve come\xE7ar com "${W.prefix}"`; + if (W.format === "ends_with") return `Texto inv\xE1lido: deve terminar com "${W.suffix}"`; + if (W.format === "includes") return `Texto inv\xE1lido: deve incluir "${W.includes}"`; + if (W.format === "regex") return `Texto inv\xE1lido: deve corresponder ao padr\xE3o ${W.pattern}`; + return `${(_d = Y[W.format]) != null ? _d : X.format} inv\xE1lido`; + } + case "not_multiple_of": + return `N\xFAmero inv\xE1lido: deve ser m\xFAltiplo de ${X.divisor}`; + case "unrecognized_keys": + return `Chave${X.keys.length > 1 ? "s" : ""} desconhecida${X.keys.length > 1 ? "s" : ""}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Chave inv\xE1lida em ${X.origin}`; + case "invalid_union": + return "Entrada inv\xE1lida"; + case "invalid_element": + return `Valor inv\xE1lido em ${X.origin}`; + default: + return "Campo inv\xE1lido"; + } + }; +}; +function jq() { + return { localeError: iu() }; +} +function EM($, Q, J, Y) { + let X = Math.abs($), W = X % 10, G = X % 100; + if (G >= 11 && G <= 19) return Y; + if (W === 1) return Q; + if (W >= 2 && W <= 4) return J; + return Y; +} +var nu = () => { + let $ = { string: { unit: { one: "\u0441\u0438\u043C\u0432\u043E\u043B", few: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", many: "\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432" }, verb: "\u0438\u043C\u0435\u0442\u044C" }, file: { unit: { one: "\u0431\u0430\u0439\u0442", few: "\u0431\u0430\u0439\u0442\u0430", many: "\u0431\u0430\u0439\u0442" }, verb: "\u0438\u043C\u0435\u0442\u044C" }, array: { unit: { one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430", many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432" }, verb: "\u0438\u043C\u0435\u0442\u044C" }, set: { unit: { one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430", many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432" }, verb: "\u0438\u043C\u0435\u0442\u044C" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "\u0447\u0438\u0441\u043B\u043E"; + case "object": { + if (Array.isArray(X)) return "\u043C\u0430\u0441\u0441\u0438\u0432"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u0432\u0432\u043E\u0434", email: "email \u0430\u0434\u0440\u0435\u0441", url: "URL", emoji: "\u044D\u043C\u043E\u0434\u0437\u0438", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F", date: "ISO \u0434\u0430\u0442\u0430", time: "ISO \u0432\u0440\u0435\u043C\u044F", duration: "ISO \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C", ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441", ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441", cidrv4: "IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", cidrv6: "IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", base64: "\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64", base64url: "\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64url", json_string: "JSON \u0441\u0442\u0440\u043E\u043A\u0430", e164: "\u043D\u043E\u043C\u0435\u0440 E.164", jwt: "JWT", template_literal: "\u0432\u0432\u043E\u0434" }; + return (X) => { + var _a5, _b3, _c2; + switch (X.code) { + case "invalid_type": + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${X.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${x(X.values[0])}`; + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u0437 ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) { + let U = Number(X.maximum), H = EM(U, G.unit.one, G.unit.few, G.unit.many); + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${(_a5 = X.origin) != null ? _a5 : "\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${W}${X.maximum.toString()} ${H}`; + } + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${(_b3 = X.origin) != null ? _b3 : "\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) { + let U = Number(X.minimum), H = EM(U, G.unit.one, G.unit.few, G.unit.many); + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${X.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${W}${X.minimum.toString()} ${H}`; + } + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${X.origin} \u0431\u0443\u0434\u0435\u0442 ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 "${W.prefix}"`; + if (W.format === "ends_with") return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 "${W.suffix}"`; + if (W.format === "includes") return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C "${W.includes}"`; + if (W.format === "regex") return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${W.pattern}`; + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${(_c2 = Y[W.format]) != null ? _c2 : X.format}`; + } + case "not_multiple_of": + return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E: \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${X.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${X.keys.length > 1 ? "\u044B\u0435" : "\u044B\u0439"} \u043A\u043B\u044E\u0447${X.keys.length > 1 ? "\u0438" : ""}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${X.origin}`; + case "invalid_union": + return "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435"; + case "invalid_element": + return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 ${X.origin}`; + default: + return "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435"; + } + }; +}; +function Aq() { + return { localeError: nu() }; +} +var ru = () => { + let $ = { string: { unit: "znakov", verb: "imeti" }, file: { unit: "bajtov", verb: "imeti" }, array: { unit: "elementov", verb: "imeti" }, set: { unit: "elementov", verb: "imeti" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "\u0161tevilo"; + case "object": { + if (Array.isArray(X)) return "tabela"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "vnos", email: "e-po\u0161tni naslov", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO datum in \u010Das", date: "ISO datum", time: "ISO \u010Das", duration: "ISO trajanje", ipv4: "IPv4 naslov", ipv6: "IPv6 naslov", cidrv4: "obseg IPv4", cidrv6: "obseg IPv6", base64: "base64 kodiran niz", base64url: "base64url kodiran niz", json_string: "JSON niz", e164: "E.164 \u0161tevilka", jwt: "JWT", template_literal: "vnos" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `Neveljaven vnos: pri\u010Dakovano ${X.expected}, prejeto ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Neveljaven vnos: pri\u010Dakovano ${x(X.values[0])}`; + return `Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Preveliko: pri\u010Dakovano, da bo ${(_a5 = X.origin) != null ? _a5 : "vrednost"} imelo ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "elementov"}`; + return `Preveliko: pri\u010Dakovano, da bo ${(_c2 = X.origin) != null ? _c2 : "vrednost"} ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Premajhno: pri\u010Dakovano, da bo ${X.origin} imelo ${W}${X.minimum.toString()} ${G.unit}`; + return `Premajhno: pri\u010Dakovano, da bo ${X.origin} ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Neveljaven niz: mora se za\u010Deti z "${W.prefix}"`; + if (W.format === "ends_with") return `Neveljaven niz: mora se kon\u010Dati z "${W.suffix}"`; + if (W.format === "includes") return `Neveljaven niz: mora vsebovati "${W.includes}"`; + if (W.format === "regex") return `Neveljaven niz: mora ustrezati vzorcu ${W.pattern}`; + return `Neveljaven ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${X.divisor}`; + case "unrecognized_keys": + return `Neprepoznan${X.keys.length > 1 ? "i klju\u010Di" : " klju\u010D"}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Neveljaven klju\u010D v ${X.origin}`; + case "invalid_union": + return "Neveljaven vnos"; + case "invalid_element": + return `Neveljavna vrednost v ${X.origin}`; + default: + return "Neveljaven vnos"; + } + }; +}; +function Iq() { + return { localeError: ru() }; +} +var ou = () => { + let $ = { string: { unit: "tecken", verb: "att ha" }, file: { unit: "bytes", verb: "att ha" }, array: { unit: "objekt", verb: "att inneh\xE5lla" }, set: { unit: "objekt", verb: "att inneh\xE5lla" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "antal"; + case "object": { + if (Array.isArray(X)) return "lista"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "regulj\xE4rt uttryck", email: "e-postadress", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO-datum och tid", date: "ISO-datum", time: "ISO-tid", duration: "ISO-varaktighet", ipv4: "IPv4-intervall", ipv6: "IPv6-intervall", cidrv4: "IPv4-spektrum", cidrv6: "IPv6-spektrum", base64: "base64-kodad str\xE4ng", base64url: "base64url-kodad str\xE4ng", json_string: "JSON-str\xE4ng", e164: "E.164-nummer", jwt: "JWT", template_literal: "mall-literal" }; + return (X) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2; + switch (X.code) { + case "invalid_type": + return `Ogiltig inmatning: f\xF6rv\xE4ntat ${X.expected}, fick ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `Ogiltig inmatning: f\xF6rv\xE4ntat ${x(X.values[0])}`; + return `Ogiltigt val: f\xF6rv\xE4ntade en av ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `F\xF6r stor(t): f\xF6rv\xE4ntade ${(_a5 = X.origin) != null ? _a5 : "v\xE4rdet"} att ha ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "element"}`; + return `F\xF6r stor(t): f\xF6rv\xE4ntat ${(_c2 = X.origin) != null ? _c2 : "v\xE4rdet"} att ha ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `F\xF6r lite(t): f\xF6rv\xE4ntade ${(_d = X.origin) != null ? _d : "v\xE4rdet"} att ha ${W}${X.minimum.toString()} ${G.unit}`; + return `F\xF6r lite(t): f\xF6rv\xE4ntade ${(_e2 = X.origin) != null ? _e2 : "v\xE4rdet"} att ha ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Ogiltig str\xE4ng: m\xE5ste b\xF6rja med "${W.prefix}"`; + if (W.format === "ends_with") return `Ogiltig str\xE4ng: m\xE5ste sluta med "${W.suffix}"`; + if (W.format === "includes") return `Ogiltig str\xE4ng: m\xE5ste inneh\xE5lla "${W.includes}"`; + if (W.format === "regex") return `Ogiltig str\xE4ng: m\xE5ste matcha m\xF6nstret "${W.pattern}"`; + return `Ogiltig(t) ${(_f2 = Y[W.format]) != null ? _f2 : X.format}`; + } + case "not_multiple_of": + return `Ogiltigt tal: m\xE5ste vara en multipel av ${X.divisor}`; + case "unrecognized_keys": + return `${X.keys.length > 1 ? "Ok\xE4nda nycklar" : "Ok\xE4nd nyckel"}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Ogiltig nyckel i ${(_g = X.origin) != null ? _g : "v\xE4rdet"}`; + case "invalid_union": + return "Ogiltig input"; + case "invalid_element": + return `Ogiltigt v\xE4rde i ${(_h2 = X.origin) != null ? _h2 : "v\xE4rdet"}`; + default: + return "Ogiltig input"; + } + }; +}; +function Rq() { + return { localeError: ou() }; +} +var tu = () => { + let $ = { string: { unit: "\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, file: { unit: "\u0BAA\u0BC8\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, array: { unit: "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, set: { unit: "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "\u0B8E\u0BA3\u0BCD \u0B85\u0BB2\u0BCD\u0BB2\u0BBE\u0BA4\u0BA4\u0BC1" : "\u0B8E\u0BA3\u0BCD"; + case "object": { + if (Array.isArray(X)) return "\u0B85\u0BA3\u0BBF"; + if (X === null) return "\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1", email: "\u0BAE\u0BBF\u0BA9\u0BCD\u0BA9\u0B9E\u0BCD\u0B9A\u0BB2\u0BCD \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO \u0BA4\u0BC7\u0BA4\u0BBF \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD", date: "ISO \u0BA4\u0BC7\u0BA4\u0BBF", time: "ISO \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD", duration: "ISO \u0B95\u0BBE\u0BB2 \u0B85\u0BB3\u0BB5\u0BC1", ipv4: "IPv4 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", ipv6: "IPv6 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", cidrv4: "IPv4 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1", cidrv6: "IPv6 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1", base64: "base64-encoded \u0B9A\u0BB0\u0BAE\u0BCD", base64url: "base64url-encoded \u0B9A\u0BB0\u0BAE\u0BCD", json_string: "JSON \u0B9A\u0BB0\u0BAE\u0BCD", e164: "E.164 \u0B8E\u0BA3\u0BCD", jwt: "JWT", template_literal: "input" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${X.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${x(X.values[0])}`; + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${P(X.values, "|")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${(_a5 = X.origin) != null ? _a5 : "\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD"} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${(_c2 = X.origin) != null ? _c2 : "\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${W}${X.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${X.origin} ${W}${X.minimum.toString()} ${G.unit} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${X.origin} ${W}${X.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${W.prefix}" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + if (W.format === "ends_with") return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${W.suffix}" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + if (W.format === "includes") return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${W.includes}" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + if (W.format === "regex") return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${W.pattern} \u0BAE\u0BC1\u0BB1\u0BC8\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B9F\u0BA9\u0BCD \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${X.divisor} \u0B87\u0BA9\u0BCD \u0BAA\u0BB2\u0BAE\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + case "unrecognized_keys": + return `\u0B85\u0B9F\u0BC8\u0BAF\u0BBE\u0BB3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0BB5\u0BBF\u0B9A\u0BC8${X.keys.length > 1 ? "\u0B95\u0BB3\u0BCD" : ""}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `${X.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0B9A\u0BC8`; + case "invalid_union": + return "\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1"; + case "invalid_element": + return `${X.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1`; + default: + return "\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1"; + } + }; +}; +function Pq() { + return { localeError: tu() }; +} +var au = () => { + let $ = { string: { unit: "\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, file: { unit: "\u0E44\u0E1A\u0E15\u0E4C", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, array: { unit: "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, set: { unit: "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "\u0E44\u0E21\u0E48\u0E43\u0E0A\u0E48\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02 (NaN)" : "\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02"; + case "object": { + if (Array.isArray(X)) return "\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E23\u0E22\u0E4C (Array)"; + if (X === null) return "\u0E44\u0E21\u0E48\u0E21\u0E35\u0E04\u0E48\u0E32 (null)"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19", email: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E2D\u0E35\u0E40\u0E21\u0E25", url: "URL", emoji: "\u0E2D\u0E34\u0E42\u0E21\u0E08\u0E34", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", date: "\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E41\u0E1A\u0E1A ISO", time: "\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", duration: "\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", ipv4: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv4", ipv6: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv6", cidrv4: "\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv4", cidrv6: "\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv6", base64: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64", base64url: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A URL", json_string: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A JSON", e164: "\u0E40\u0E1A\u0E2D\u0E23\u0E4C\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (E.164)", jwt: "\u0E42\u0E17\u0E40\u0E04\u0E19 JWT", template_literal: "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${X.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${x(X.values[0])}`; + return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19 ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19" : "\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32", G = Q(X.origin); + if (G) return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${(_a5 = X.origin) != null ? _a5 : "\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${W} ${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23"}`; + return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${(_c2 = X.origin) != null ? _c2 : "\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${W} ${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? "\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22" : "\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32", G = Q(X.origin); + if (G) return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${X.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${W} ${X.minimum.toString()} ${G.unit}`; + return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${X.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${W} ${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 "${W.prefix}"`; + if (W.format === "ends_with") return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E25\u0E07\u0E17\u0E49\u0E32\u0E22\u0E14\u0E49\u0E27\u0E22 "${W.suffix}"`; + if (W.format === "includes") return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 "${W.includes}" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`; + if (W.format === "regex") return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 ${W.pattern}`; + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E32\u0E23\u0E14\u0E49\u0E27\u0E22 ${X.divisor} \u0E44\u0E14\u0E49\u0E25\u0E07\u0E15\u0E31\u0E27`; + case "unrecognized_keys": + return `\u0E1E\u0E1A\u0E04\u0E35\u0E22\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01: ${P(X.keys, ", ")}`; + case "invalid_key": + return `\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${X.origin}`; + case "invalid_union": + return "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E39\u0E40\u0E19\u0E35\u0E22\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49"; + case "invalid_element": + return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${X.origin}`; + default: + return "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07"; + } + }; +}; +function Eq() { + return { localeError: au() }; +} +var su = ($) => { + let Q = typeof $; + switch (Q) { + case "number": + return Number.isNaN($) ? "NaN" : "number"; + case "object": { + if (Array.isArray($)) return "array"; + if ($ === null) return "null"; + if (Object.getPrototypeOf($) !== Object.prototype && $.constructor) return $.constructor.name; + } + } + return Q; +}; +var eu = () => { + let $ = { string: { unit: "karakter", verb: "olmal\u0131" }, file: { unit: "bayt", verb: "olmal\u0131" }, array: { unit: "\xF6\u011Fe", verb: "olmal\u0131" }, set: { unit: "\xF6\u011Fe", verb: "olmal\u0131" } }; + function Q(Y) { + var _a5; + return (_a5 = $[Y]) != null ? _a5 : null; + } + let J = { regex: "girdi", email: "e-posta adresi", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO tarih ve saat", date: "ISO tarih", time: "ISO saat", duration: "ISO s\xFCre", ipv4: "IPv4 adresi", ipv6: "IPv6 adresi", cidrv4: "IPv4 aral\u0131\u011F\u0131", cidrv6: "IPv6 aral\u0131\u011F\u0131", base64: "base64 ile \u015Fifrelenmi\u015F metin", base64url: "base64url ile \u015Fifrelenmi\u015F metin", json_string: "JSON dizesi", e164: "E.164 say\u0131s\u0131", jwt: "JWT", template_literal: "\u015Eablon dizesi" }; + return (Y) => { + var _a5, _b3, _c2, _d; + switch (Y.code) { + case "invalid_type": + return `Ge\xE7ersiz de\u011Fer: beklenen ${Y.expected}, al\u0131nan ${su(Y.input)}`; + case "invalid_value": + if (Y.values.length === 1) return `Ge\xE7ersiz de\u011Fer: beklenen ${x(Y.values[0])}`; + return `Ge\xE7ersiz se\xE7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${P(Y.values, "|")}`; + case "too_big": { + let X = Y.inclusive ? "<=" : "<", W = Q(Y.origin); + if (W) return `\xC7ok b\xFCy\xFCk: beklenen ${(_a5 = Y.origin) != null ? _a5 : "de\u011Fer"} ${X}${Y.maximum.toString()} ${(_b3 = W.unit) != null ? _b3 : "\xF6\u011Fe"}`; + return `\xC7ok b\xFCy\xFCk: beklenen ${(_c2 = Y.origin) != null ? _c2 : "de\u011Fer"} ${X}${Y.maximum.toString()}`; + } + case "too_small": { + let X = Y.inclusive ? ">=" : ">", W = Q(Y.origin); + if (W) return `\xC7ok k\xFC\xE7\xFCk: beklenen ${Y.origin} ${X}${Y.minimum.toString()} ${W.unit}`; + return `\xC7ok k\xFC\xE7\xFCk: beklenen ${Y.origin} ${X}${Y.minimum.toString()}`; + } + case "invalid_format": { + let X = Y; + if (X.format === "starts_with") return `Ge\xE7ersiz metin: "${X.prefix}" ile ba\u015Flamal\u0131`; + if (X.format === "ends_with") return `Ge\xE7ersiz metin: "${X.suffix}" ile bitmeli`; + if (X.format === "includes") return `Ge\xE7ersiz metin: "${X.includes}" i\xE7ermeli`; + if (X.format === "regex") return `Ge\xE7ersiz metin: ${X.pattern} desenine uymal\u0131`; + return `Ge\xE7ersiz ${(_d = J[X.format]) != null ? _d : Y.format}`; + } + case "not_multiple_of": + return `Ge\xE7ersiz say\u0131: ${Y.divisor} ile tam b\xF6l\xFCnebilmeli`; + case "unrecognized_keys": + return `Tan\u0131nmayan anahtar${Y.keys.length > 1 ? "lar" : ""}: ${P(Y.keys, ", ")}`; + case "invalid_key": + return `${Y.origin} i\xE7inde ge\xE7ersiz anahtar`; + case "invalid_union": + return "Ge\xE7ersiz de\u011Fer"; + case "invalid_element": + return `${Y.origin} i\xE7inde ge\xE7ersiz de\u011Fer`; + default: + return "Ge\xE7ersiz de\u011Fer"; + } + }; +}; +function bq() { + return { localeError: eu() }; +} +var $m = () => { + let $ = { string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, file: { unit: "\u0431\u0430\u0439\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, array: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, set: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "\u0447\u0438\u0441\u043B\u043E"; + case "object": { + if (Array.isArray(X)) return "\u043C\u0430\u0441\u0438\u0432"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456", email: "\u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u043F\u043E\u0448\u0442\u0438", url: "URL", emoji: "\u0435\u043C\u043E\u0434\u0437\u0456", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "\u0434\u0430\u0442\u0430 \u0442\u0430 \u0447\u0430\u0441 ISO", date: "\u0434\u0430\u0442\u0430 ISO", time: "\u0447\u0430\u0441 ISO", duration: "\u0442\u0440\u0438\u0432\u0430\u043B\u0456\u0441\u0442\u044C ISO", ipv4: "\u0430\u0434\u0440\u0435\u0441\u0430 IPv4", ipv6: "\u0430\u0434\u0440\u0435\u0441\u0430 IPv6", cidrv4: "\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv4", cidrv6: "\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv6", base64: "\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64", base64url: "\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64url", json_string: "\u0440\u044F\u0434\u043E\u043A JSON", e164: "\u043D\u043E\u043C\u0435\u0440 E.164", jwt: "JWT", template_literal: "\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${X.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${x(X.values[0])}`; + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430 \u043E\u043F\u0446\u0456\u044F: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u0435 \u0437 ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${(_a5 = X.origin) != null ? _a5 : "\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} ${G.verb} ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432"}`; + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${(_c2 = X.origin) != null ? _c2 : "\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} \u0431\u0443\u0434\u0435 ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${X.origin} ${G.verb} ${W}${X.minimum.toString()} ${G.unit}`; + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${X.origin} \u0431\u0443\u0434\u0435 ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 "${W.prefix}"`; + if (W.format === "ends_with") return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0437\u0430\u043A\u0456\u043D\u0447\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043D\u0430 "${W.suffix}"`; + if (W.format === "includes") return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0456\u0441\u0442\u0438\u0442\u0438 "${W.includes}"`; + if (W.format === "regex") return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${W.pattern}`; + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0447\u0438\u0441\u043B\u043E: \u043F\u043E\u0432\u0438\u043D\u043D\u043E \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C ${X.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${X.keys.length > 1 ? "\u0456" : ""}: ${P(X.keys, ", ")}`; + case "invalid_key": + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${X.origin}`; + case "invalid_union": + return "\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456"; + case "invalid_element": + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443 ${X.origin}`; + default: + return "\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456"; + } + }; +}; +function _q() { + return { localeError: $m() }; +} +var Qm = () => { + let $ = { string: { unit: "\u062D\u0631\u0648\u0641", verb: "\u06C1\u0648\u0646\u0627" }, file: { unit: "\u0628\u0627\u0626\u0679\u0633", verb: "\u06C1\u0648\u0646\u0627" }, array: { unit: "\u0622\u0626\u0679\u0645\u0632", verb: "\u06C1\u0648\u0646\u0627" }, set: { unit: "\u0622\u0626\u0679\u0645\u0632", verb: "\u06C1\u0648\u0646\u0627" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "\u0646\u0645\u0628\u0631"; + case "object": { + if (Array.isArray(X)) return "\u0622\u0631\u06D2"; + if (X === null) return "\u0646\u0644"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u0627\u0646 \u067E\u0679", email: "\u0627\u06CC \u0645\u06CC\u0644 \u0627\u06CC\u0688\u0631\u06CC\u0633", url: "\u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644", emoji: "\u0627\u06CC\u0645\u0648\u062C\u06CC", uuid: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", uuidv4: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 4", uuidv6: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 6", nanoid: "\u0646\u06CC\u0646\u0648 \u0622\u0626\u06CC \u0688\u06CC", guid: "\u062C\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", cuid: "\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", cuid2: "\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC 2", ulid: "\u06CC\u0648 \u0627\u06CC\u0644 \u0622\u0626\u06CC \u0688\u06CC", xid: "\u0627\u06CC\u06A9\u0633 \u0622\u0626\u06CC \u0688\u06CC", ksuid: "\u06A9\u06D2 \u0627\u06CC\u0633 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", datetime: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0688\u06CC\u0679 \u0679\u0627\u0626\u0645", date: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u062A\u0627\u0631\u06CC\u062E", time: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0648\u0642\u062A", duration: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0645\u062F\u062A", ipv4: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0627\u06CC\u0688\u0631\u06CC\u0633", ipv6: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0627\u06CC\u0688\u0631\u06CC\u0633", cidrv4: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0631\u06CC\u0646\u062C", cidrv6: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0631\u06CC\u0646\u062C", base64: "\u0628\u06CC\u0633 64 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF", base64url: "\u0628\u06CC\u0633 64 \u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF", json_string: "\u062C\u06D2 \u0627\u06CC\u0633 \u0627\u0648 \u0627\u06CC\u0646 \u0633\u0679\u0631\u0646\u06AF", e164: "\u0627\u06CC 164 \u0646\u0645\u0628\u0631", jwt: "\u062C\u06D2 \u0688\u0628\u0644\u06CC\u0648 \u0679\u06CC", template_literal: "\u0627\u0646 \u067E\u0679" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${X.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${J(X.input)} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`; + case "invalid_value": + if (X.values.length === 1) return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${x(X.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + return `\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${P(X.values, "|")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${(_a5 = X.origin) != null ? _a5 : "\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u06D2 ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "\u0639\u0646\u0627\u0635\u0631"} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`; + return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${(_c2 = X.origin) != null ? _c2 : "\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u0627 ${W}${X.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${X.origin} \u06A9\u06D2 ${W}${X.minimum.toString()} ${G.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`; + return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${X.origin} \u06A9\u0627 ${W}${X.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${W.prefix}" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + if (W.format === "ends_with") return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${W.suffix}" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + if (W.format === "includes") return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${W.includes}" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + if (W.format === "regex") return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${W.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + return `\u063A\u0644\u0637 ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${X.divisor} \u06A9\u0627 \u0645\u0636\u0627\u0639\u0641 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + case "unrecognized_keys": + return `\u063A\u06CC\u0631 \u062A\u0633\u0644\u06CC\u0645 \u0634\u062F\u06C1 \u06A9\u06CC${X.keys.length > 1 ? "\u0632" : ""}: ${P(X.keys, "\u060C ")}`; + case "invalid_key": + return `${X.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`; + case "invalid_union": + return "\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679"; + case "invalid_element": + return `${X.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`; + default: + return "\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679"; + } + }; +}; +function kq() { + return { localeError: Qm() }; +} +var Jm = () => { + let $ = { string: { unit: "k\xFD t\u1EF1", verb: "c\xF3" }, file: { unit: "byte", verb: "c\xF3" }, array: { unit: "ph\u1EA7n t\u1EED", verb: "c\xF3" }, set: { unit: "ph\u1EA7n t\u1EED", verb: "c\xF3" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "s\u1ED1"; + case "object": { + if (Array.isArray(X)) return "m\u1EA3ng"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u0111\u1EA7u v\xE0o", email: "\u0111\u1ECBa ch\u1EC9 email", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ng\xE0y gi\u1EDD ISO", date: "ng\xE0y ISO", time: "gi\u1EDD ISO", duration: "kho\u1EA3ng th\u1EDDi gian ISO", ipv4: "\u0111\u1ECBa ch\u1EC9 IPv4", ipv6: "\u0111\u1ECBa ch\u1EC9 IPv6", cidrv4: "d\u1EA3i IPv4", cidrv6: "d\u1EA3i IPv6", base64: "chu\u1ED7i m\xE3 h\xF3a base64", base64url: "chu\u1ED7i m\xE3 h\xF3a base64url", json_string: "chu\u1ED7i JSON", e164: "s\u1ED1 E.164", jwt: "JWT", template_literal: "\u0111\u1EA7u v\xE0o" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${X.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${x(X.values[0])}`; + return `T\xF9y ch\u1ECDn kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i m\u1ED9t trong c\xE1c gi\xE1 tr\u1ECB ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${(_a5 = X.origin) != null ? _a5 : "gi\xE1 tr\u1ECB"} ${G.verb} ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "ph\u1EA7n t\u1EED"}`; + return `Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${(_c2 = X.origin) != null ? _c2 : "gi\xE1 tr\u1ECB"} ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${X.origin} ${G.verb} ${W}${X.minimum.toString()} ${G.unit}`; + return `Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${X.origin} ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng "${W.prefix}"`; + if (W.format === "ends_with") return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\xFAc b\u1EB1ng "${W.suffix}"`; + if (W.format === "includes") return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m "${W.includes}"`; + if (W.format === "regex") return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${W.pattern}`; + return `${(_d = Y[W.format]) != null ? _d : X.format} kh\xF4ng h\u1EE3p l\u1EC7`; + } + case "not_multiple_of": + return `S\u1ED1 kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i l\xE0 b\u1ED9i s\u1ED1 c\u1EE7a ${X.divisor}`; + case "unrecognized_keys": + return `Kh\xF3a kh\xF4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${P(X.keys, ", ")}`; + case "invalid_key": + return `Kh\xF3a kh\xF4ng h\u1EE3p l\u1EC7 trong ${X.origin}`; + case "invalid_union": + return "\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7"; + case "invalid_element": + return `Gi\xE1 tr\u1ECB kh\xF4ng h\u1EE3p l\u1EC7 trong ${X.origin}`; + default: + return "\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7"; + } + }; +}; +function Sq() { + return { localeError: Jm() }; +} +var Xm = () => { + let $ = { string: { unit: "\u5B57\u7B26", verb: "\u5305\u542B" }, file: { unit: "\u5B57\u8282", verb: "\u5305\u542B" }, array: { unit: "\u9879", verb: "\u5305\u542B" }, set: { unit: "\u9879", verb: "\u5305\u542B" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "\u975E\u6570\u5B57(NaN)" : "\u6570\u5B57"; + case "object": { + if (Array.isArray(X)) return "\u6570\u7EC4"; + if (X === null) return "\u7A7A\u503C(null)"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u8F93\u5165", email: "\u7535\u5B50\u90AE\u4EF6", url: "URL", emoji: "\u8868\u60C5\u7B26\u53F7", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO\u65E5\u671F\u65F6\u95F4", date: "ISO\u65E5\u671F", time: "ISO\u65F6\u95F4", duration: "ISO\u65F6\u957F", ipv4: "IPv4\u5730\u5740", ipv6: "IPv6\u5730\u5740", cidrv4: "IPv4\u7F51\u6BB5", cidrv6: "IPv6\u7F51\u6BB5", base64: "base64\u7F16\u7801\u5B57\u7B26\u4E32", base64url: "base64url\u7F16\u7801\u5B57\u7B26\u4E32", json_string: "JSON\u5B57\u7B26\u4E32", e164: "E.164\u53F7\u7801", jwt: "JWT", template_literal: "\u8F93\u5165" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${X.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${x(X.values[0])}`; + return `\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${(_a5 = X.origin) != null ? _a5 : "\u503C"} ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "\u4E2A\u5143\u7D20"}`; + return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${(_c2 = X.origin) != null ? _c2 : "\u503C"} ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${X.origin} ${W}${X.minimum.toString()} ${G.unit}`; + return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${X.origin} ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${W.prefix}" \u5F00\u5934`; + if (W.format === "ends_with") return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${W.suffix}" \u7ED3\u5C3E`; + if (W.format === "includes") return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B "${W.includes}"`; + if (W.format === "regex") return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${W.pattern}`; + return `\u65E0\u6548${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${X.divisor} \u7684\u500D\u6570`; + case "unrecognized_keys": + return `\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${P(X.keys, ", ")}`; + case "invalid_key": + return `${X.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`; + case "invalid_union": + return "\u65E0\u6548\u8F93\u5165"; + case "invalid_element": + return `${X.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`; + default: + return "\u65E0\u6548\u8F93\u5165"; + } + }; +}; +function vq() { + return { localeError: Xm() }; +} +var Ym = () => { + let $ = { string: { unit: "\u5B57\u5143", verb: "\u64C1\u6709" }, file: { unit: "\u4F4D\u5143\u7D44", verb: "\u64C1\u6709" }, array: { unit: "\u9805\u76EE", verb: "\u64C1\u6709" }, set: { unit: "\u9805\u76EE", verb: "\u64C1\u6709" } }; + function Q(X) { + var _a5; + return (_a5 = $[X]) != null ? _a5 : null; + } + let J = (X) => { + let W = typeof X; + switch (W) { + case "number": + return Number.isNaN(X) ? "NaN" : "number"; + case "object": { + if (Array.isArray(X)) return "array"; + if (X === null) return "null"; + if (Object.getPrototypeOf(X) !== Object.prototype && X.constructor) return X.constructor.name; + } + } + return W; + }, Y = { regex: "\u8F38\u5165", email: "\u90F5\u4EF6\u5730\u5740", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO \u65E5\u671F\u6642\u9593", date: "ISO \u65E5\u671F", time: "ISO \u6642\u9593", duration: "ISO \u671F\u9593", ipv4: "IPv4 \u4F4D\u5740", ipv6: "IPv6 \u4F4D\u5740", cidrv4: "IPv4 \u7BC4\u570D", cidrv6: "IPv6 \u7BC4\u570D", base64: "base64 \u7DE8\u78BC\u5B57\u4E32", base64url: "base64url \u7DE8\u78BC\u5B57\u4E32", json_string: "JSON \u5B57\u4E32", e164: "E.164 \u6578\u503C", jwt: "JWT", template_literal: "\u8F38\u5165" }; + return (X) => { + var _a5, _b3, _c2, _d; + switch (X.code) { + case "invalid_type": + return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${X.expected}\uFF0C\u4F46\u6536\u5230 ${J(X.input)}`; + case "invalid_value": + if (X.values.length === 1) return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${x(X.values[0])}`; + return `\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${P(X.values, "|")}`; + case "too_big": { + let W = X.inclusive ? "<=" : "<", G = Q(X.origin); + if (G) return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${(_a5 = X.origin) != null ? _a5 : "\u503C"} \u61C9\u70BA ${W}${X.maximum.toString()} ${(_b3 = G.unit) != null ? _b3 : "\u500B\u5143\u7D20"}`; + return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${(_c2 = X.origin) != null ? _c2 : "\u503C"} \u61C9\u70BA ${W}${X.maximum.toString()}`; + } + case "too_small": { + let W = X.inclusive ? ">=" : ">", G = Q(X.origin); + if (G) return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${X.origin} \u61C9\u70BA ${W}${X.minimum.toString()} ${G.unit}`; + return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${X.origin} \u61C9\u70BA ${W}${X.minimum.toString()}`; + } + case "invalid_format": { + let W = X; + if (W.format === "starts_with") return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${W.prefix}" \u958B\u982D`; + if (W.format === "ends_with") return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${W.suffix}" \u7D50\u5C3E`; + if (W.format === "includes") return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B "${W.includes}"`; + if (W.format === "regex") return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${W.pattern}`; + return `\u7121\u6548\u7684 ${(_d = Y[W.format]) != null ? _d : X.format}`; + } + case "not_multiple_of": + return `\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${X.divisor} \u7684\u500D\u6578`; + case "unrecognized_keys": + return `\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${X.keys.length > 1 ? "\u5011" : ""}\uFF1A${P(X.keys, "\u3001")}`; + case "invalid_key": + return `${X.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`; + case "invalid_union": + return "\u7121\u6548\u7684\u8F38\u5165\u503C"; + case "invalid_element": + return `${X.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`; + default: + return "\u7121\u6548\u7684\u8F38\u5165\u503C"; + } + }; +}; +function Cq() { + return { localeError: Ym() }; +} +var oY = /* @__PURE__ */ Symbol("ZodOutput"); +var tY = /* @__PURE__ */ Symbol("ZodInput"); +var I7 = class { + constructor() { + this._map = /* @__PURE__ */ new WeakMap(), this._idmap = /* @__PURE__ */ new Map(); + } + add($, ...Q) { + let J = Q[0]; + if (this._map.set($, J), J && typeof J === "object" && "id" in J) { + if (this._idmap.has(J.id)) throw Error(`ID ${J.id} already exists in the registry`); + this._idmap.set(J.id, $); + } + return this; + } + remove($) { + return this._map.delete($), this; + } + get($) { + var _a5; + let Q = $._zod.parent; + if (Q) { + let J = { ...(_a5 = this.get(Q)) != null ? _a5 : {} }; + return delete J.id, { ...J, ...this._map.get($) }; + } + return this._map.get($); + } + has($) { + return this._map.has($); + } +}; +function R7() { + return new I7(); +} +var R6 = R7(); +function aY($, Q) { + return new $({ type: "string", ...k(Q) }); +} +function Tq($, Q) { + return new $({ type: "string", coerce: true, ...k(Q) }); +} +function P7($, Q) { + return new $({ type: "string", format: "email", check: "string_format", abort: false, ...k(Q) }); +} +function o8($, Q) { + return new $({ type: "string", format: "guid", check: "string_format", abort: false, ...k(Q) }); +} +function E7($, Q) { + return new $({ type: "string", format: "uuid", check: "string_format", abort: false, ...k(Q) }); +} +function b7($, Q) { + return new $({ type: "string", format: "uuid", check: "string_format", abort: false, version: "v4", ...k(Q) }); +} +function _7($, Q) { + return new $({ type: "string", format: "uuid", check: "string_format", abort: false, version: "v6", ...k(Q) }); +} +function k7($, Q) { + return new $({ type: "string", format: "uuid", check: "string_format", abort: false, version: "v7", ...k(Q) }); +} +function S7($, Q) { + return new $({ type: "string", format: "url", check: "string_format", abort: false, ...k(Q) }); +} +function v7($, Q) { + return new $({ type: "string", format: "emoji", check: "string_format", abort: false, ...k(Q) }); +} +function C7($, Q) { + return new $({ type: "string", format: "nanoid", check: "string_format", abort: false, ...k(Q) }); +} +function T7($, Q) { + return new $({ type: "string", format: "cuid", check: "string_format", abort: false, ...k(Q) }); +} +function x7($, Q) { + return new $({ type: "string", format: "cuid2", check: "string_format", abort: false, ...k(Q) }); +} +function y7($, Q) { + return new $({ type: "string", format: "ulid", check: "string_format", abort: false, ...k(Q) }); +} +function f7($, Q) { + return new $({ type: "string", format: "xid", check: "string_format", abort: false, ...k(Q) }); +} +function g7($, Q) { + return new $({ type: "string", format: "ksuid", check: "string_format", abort: false, ...k(Q) }); +} +function h7($, Q) { + return new $({ type: "string", format: "ipv4", check: "string_format", abort: false, ...k(Q) }); +} +function u7($, Q) { + return new $({ type: "string", format: "ipv6", check: "string_format", abort: false, ...k(Q) }); +} +function m7($, Q) { + return new $({ type: "string", format: "cidrv4", check: "string_format", abort: false, ...k(Q) }); +} +function l7($, Q) { + return new $({ type: "string", format: "cidrv6", check: "string_format", abort: false, ...k(Q) }); +} +function c7($, Q) { + return new $({ type: "string", format: "base64", check: "string_format", abort: false, ...k(Q) }); +} +function p7($, Q) { + return new $({ type: "string", format: "base64url", check: "string_format", abort: false, ...k(Q) }); +} +function d7($, Q) { + return new $({ type: "string", format: "e164", check: "string_format", abort: false, ...k(Q) }); +} +function i7($, Q) { + return new $({ type: "string", format: "jwt", check: "string_format", abort: false, ...k(Q) }); +} +var sY = { Any: null, Minute: -1, Second: 0, Millisecond: 3, Microsecond: 6 }; +function xq($, Q) { + return new $({ type: "string", format: "datetime", check: "string_format", offset: false, local: false, precision: null, ...k(Q) }); +} +function yq($, Q) { + return new $({ type: "string", format: "date", check: "string_format", ...k(Q) }); +} +function fq($, Q) { + return new $({ type: "string", format: "time", check: "string_format", precision: null, ...k(Q) }); +} +function gq($, Q) { + return new $({ type: "string", format: "duration", check: "string_format", ...k(Q) }); +} +function eY($, Q) { + return new $({ type: "number", checks: [], ...k(Q) }); +} +function hq($, Q) { + return new $({ type: "number", coerce: true, checks: [], ...k(Q) }); +} +function $3($, Q) { + return new $({ type: "number", check: "number_format", abort: false, format: "safeint", ...k(Q) }); +} +function Q3($, Q) { + return new $({ type: "number", check: "number_format", abort: false, format: "float32", ...k(Q) }); +} +function J3($, Q) { + return new $({ type: "number", check: "number_format", abort: false, format: "float64", ...k(Q) }); +} +function X3($, Q) { + return new $({ type: "number", check: "number_format", abort: false, format: "int32", ...k(Q) }); +} +function Y3($, Q) { + return new $({ type: "number", check: "number_format", abort: false, format: "uint32", ...k(Q) }); +} +function W3($, Q) { + return new $({ type: "boolean", ...k(Q) }); +} +function uq($, Q) { + return new $({ type: "boolean", coerce: true, ...k(Q) }); +} +function G3($, Q) { + return new $({ type: "bigint", ...k(Q) }); +} +function mq($, Q) { + return new $({ type: "bigint", coerce: true, ...k(Q) }); +} +function U3($, Q) { + return new $({ type: "bigint", check: "bigint_format", abort: false, format: "int64", ...k(Q) }); +} +function H3($, Q) { + return new $({ type: "bigint", check: "bigint_format", abort: false, format: "uint64", ...k(Q) }); +} +function K3($, Q) { + return new $({ type: "symbol", ...k(Q) }); +} +function q3($, Q) { + return new $({ type: "undefined", ...k(Q) }); +} +function V3($, Q) { + return new $({ type: "null", ...k(Q) }); +} +function B3($) { + return new $({ type: "any" }); +} +function b0($) { + return new $({ type: "unknown" }); +} +function z3($, Q) { + return new $({ type: "never", ...k(Q) }); +} +function N3($, Q) { + return new $({ type: "void", ...k(Q) }); +} +function w3($, Q) { + return new $({ type: "date", ...k(Q) }); +} +function lq($, Q) { + return new $({ type: "date", coerce: true, ...k(Q) }); +} +function O3($, Q) { + return new $({ type: "nan", ...k(Q) }); +} +function o4($, Q) { + return new rX({ check: "less_than", ...k(Q), value: $, inclusive: false }); +} +function t6($, Q) { + return new rX({ check: "less_than", ...k(Q), value: $, inclusive: true }); +} +function t4($, Q) { + return new oX({ check: "greater_than", ...k(Q), value: $, inclusive: false }); +} +function P6($, Q) { + return new oX({ check: "greater_than", ...k(Q), value: $, inclusive: true }); +} +function cq($) { + return t4(0, $); +} +function pq($) { + return o4(0, $); +} +function dq($) { + return t6(0, $); +} +function iq($) { + return P6(0, $); +} +function _0($, Q) { + return new RK({ check: "multiple_of", ...k(Q), value: $ }); +} +function t8($, Q) { + return new bK({ check: "max_size", ...k(Q), maximum: $ }); +} +function k0($, Q) { + return new _K({ check: "min_size", ...k(Q), minimum: $ }); +} +function n7($, Q) { + return new kK({ check: "size_equals", ...k(Q), size: $ }); +} +function a8($, Q) { + return new SK({ check: "max_length", ...k(Q), maximum: $ }); +} +function k1($, Q) { + return new vK({ check: "min_length", ...k(Q), minimum: $ }); +} +function s8($, Q) { + return new CK({ check: "length_equals", ...k(Q), length: $ }); +} +function r7($, Q) { + return new TK({ check: "string_format", format: "regex", ...k(Q), pattern: $ }); +} +function o7($) { + return new xK({ check: "string_format", format: "lowercase", ...k($) }); +} +function t7($) { + return new yK({ check: "string_format", format: "uppercase", ...k($) }); +} +function a7($, Q) { + return new fK({ check: "string_format", format: "includes", ...k(Q), includes: $ }); +} +function s7($, Q) { + return new gK({ check: "string_format", format: "starts_with", ...k(Q), prefix: $ }); +} +function e7($, Q) { + return new hK({ check: "string_format", format: "ends_with", ...k(Q), suffix: $ }); +} +function nq($, Q, J) { + return new uK({ check: "property", property: $, schema: Q, ...k(J) }); +} +function $J($, Q) { + return new mK({ check: "mime_type", mime: $, ...k(Q) }); +} +function a4($) { + return new lK({ check: "overwrite", tx: $ }); +} +function QJ($) { + return a4((Q) => Q.normalize($)); +} +function JJ() { + return a4(($) => $.trim()); +} +function XJ() { + return a4(($) => $.toLowerCase()); +} +function YJ() { + return a4(($) => $.toUpperCase()); +} +function WJ($, Q, J) { + return new $({ type: "array", element: Q, ...k(J) }); +} +function Wm($, Q, J) { + return new $({ type: "union", options: Q, ...k(J) }); +} +function Gm($, Q, J, Y) { + return new $({ type: "union", options: J, discriminator: Q, ...k(Y) }); +} +function Um($, Q, J) { + return new $({ type: "intersection", left: Q, right: J }); +} +function rq($, Q, J, Y) { + let X = J instanceof o; + return new $({ type: "tuple", items: Q, rest: X ? J : null, ...k(X ? Y : J) }); +} +function Hm($, Q, J, Y) { + return new $({ type: "record", keyType: Q, valueType: J, ...k(Y) }); +} +function Km($, Q, J, Y) { + return new $({ type: "map", keyType: Q, valueType: J, ...k(Y) }); +} +function qm($, Q, J) { + return new $({ type: "set", valueType: Q, ...k(J) }); +} +function Vm($, Q, J) { + let Y = Array.isArray(Q) ? Object.fromEntries(Q.map((X) => [X, X])) : Q; + return new $({ type: "enum", entries: Y, ...k(J) }); +} +function Bm($, Q, J) { + return new $({ type: "enum", entries: Q, ...k(J) }); +} +function zm($, Q, J) { + return new $({ type: "literal", values: Array.isArray(Q) ? Q : [Q], ...k(J) }); +} +function D3($, Q) { + return new $({ type: "file", ...k(Q) }); +} +function Nm($, Q) { + return new $({ type: "transform", transform: Q }); +} +function wm($, Q) { + return new $({ type: "optional", innerType: Q }); +} +function Om($, Q) { + return new $({ type: "nullable", innerType: Q }); +} +function Dm($, Q, J) { + return new $({ type: "default", innerType: Q, get defaultValue() { + return typeof J === "function" ? J() : J; + } }); +} +function Fm($, Q, J) { + return new $({ type: "nonoptional", innerType: Q, ...k(J) }); +} +function Zm($, Q) { + return new $({ type: "success", innerType: Q }); +} +function Mm($, Q, J) { + return new $({ type: "catch", innerType: Q, catchValue: typeof J === "function" ? J : () => J }); +} +function Lm($, Q, J) { + return new $({ type: "pipe", in: Q, out: J }); +} +function jm($, Q) { + return new $({ type: "readonly", innerType: Q }); +} +function Am($, Q, J) { + return new $({ type: "template_literal", parts: Q, ...k(J) }); +} +function Im($, Q) { + return new $({ type: "lazy", getter: Q }); +} +function Rm($, Q) { + return new $({ type: "promise", innerType: Q }); +} +function F3($, Q, J) { + var _a5; + let Y = k(J); + return (_a5 = Y.abort) != null ? _a5 : Y.abort = true, new $({ type: "custom", check: "custom", fn: Q, ...Y }); +} +function Z3($, Q, J) { + return new $({ type: "custom", check: "custom", fn: Q, ...k(J) }); +} +function M3($, Q) { + var _a5, _b3, _c2, _d, _e2, _f2; + let J = k(Q), Y = (_a5 = J.truthy) != null ? _a5 : ["true", "1", "yes", "on", "y", "enabled"], X = (_b3 = J.falsy) != null ? _b3 : ["false", "0", "no", "off", "n", "disabled"]; + if (J.case !== "sensitive") Y = Y.map((w) => typeof w === "string" ? w.toLowerCase() : w), X = X.map((w) => typeof w === "string" ? w.toLowerCase() : w); + let W = new Set(Y), G = new Set(X), U = (_c2 = $.Pipe) != null ? _c2 : n8, H = (_d = $.Boolean) != null ? _d : p8, q = (_e2 = $.String) != null ? _e2 : b1, B = new ((_f2 = $.Transform) != null ? _f2 : i8)({ type: "transform", transform: (w, O) => { + let D = w; + if (J.case !== "sensitive") D = D.toLowerCase(); + if (W.has(D)) return true; + else if (G.has(D)) return false; + else return O.issues.push({ code: "invalid_value", expected: "stringbool", values: [...W, ...G], input: O.value, inst: B }), {}; + }, error: J.error }), z4 = new U({ type: "pipe", in: new q({ type: "string", error: J.error }), out: B, error: J.error }); + return new U({ type: "pipe", in: z4, out: new H({ type: "boolean", error: J.error }), error: J.error }); +} +function L3($, Q, J, Y = {}) { + let X = k(Y), W = { ...k(Y), check: "string_format", type: "string", format: Q, fn: typeof J === "function" ? J : (U) => J.test(U), ...X }; + if (J instanceof RegExp) W.pattern = J; + return new $(W); +} +var oq = class { + constructor($) { + this._def = $, this.def = $; + } + implement($) { + if (typeof $ !== "function") throw Error("implement() must be called with a function"); + let Q = (...J) => { + let Y = this._def.input ? I0(this._def.input, J, void 0, { callee: Q }) : J; + if (!Array.isArray(Y)) throw Error("Invalid arguments schema: not an array or tuple schema."); + let X = $(...Y); + return this._def.output ? I0(this._def.output, X, void 0, { callee: Q }) : X; + }; + return Q; + } + implementAsync($) { + if (typeof $ !== "function") throw Error("implement() must be called with a function"); + let Q = async (...J) => { + let Y = this._def.input ? await R0(this._def.input, J, void 0, { callee: Q }) : J; + if (!Array.isArray(Y)) throw Error("Invalid arguments schema: not an array or tuple schema."); + let X = await $(...Y); + return this._def.output ? R0(this._def.output, X, void 0, { callee: Q }) : X; + }; + return Q; + } + input(...$) { + let Q = this.constructor; + if (Array.isArray($[0])) return new Q({ type: "function", input: new _1({ type: "tuple", items: $[0], rest: $[1] }), output: this._def.output }); + return new Q({ type: "function", input: $[0], output: this._def.output }); + } + output($) { + return new this.constructor({ type: "function", input: this._def.input, output: $ }); + } +}; +function j3($) { + var _a5, _b3; + return new oq({ type: "function", input: Array.isArray($ == null ? void 0 : $.input) ? rq(_1, $ == null ? void 0 : $.input) : (_a5 = $ == null ? void 0 : $.input) != null ? _a5 : WJ(d8, b0(E0)), output: (_b3 = $ == null ? void 0 : $.output) != null ? _b3 : b0(E0) }); +} +var A3 = class { + constructor($) { + var _a5, _b3, _c2, _d, _e2; + this.counter = 0, this.metadataRegistry = (_a5 = $ == null ? void 0 : $.metadata) != null ? _a5 : R6, this.target = (_b3 = $ == null ? void 0 : $.target) != null ? _b3 : "draft-2020-12", this.unrepresentable = (_c2 = $ == null ? void 0 : $.unrepresentable) != null ? _c2 : "throw", this.override = (_d = $ == null ? void 0 : $.override) != null ? _d : (() => { + }), this.io = (_e2 = $ == null ? void 0 : $.io) != null ? _e2 : "output", this.seen = /* @__PURE__ */ new Map(); + } + process($, Q = { path: [], schemaPath: [] }) { + var _a5, _b3, _c2, _d, _e2; + var J; + let Y = $._zod.def, X = { guid: "uuid", url: "uri", datetime: "date-time", json_string: "json-string", regex: "" }, W = this.seen.get($); + if (W) { + if (W.count++, Q.schemaPath.includes($)) W.cycle = Q.path; + return W.schema; + } + let G = { schema: {}, count: 1, cycle: void 0, path: Q.path }; + this.seen.set($, G); + let U = (_b3 = (_a5 = $._zod).toJSONSchema) == null ? void 0 : _b3.call(_a5); + if (U) G.schema = U; + else { + let V = { ...Q, schemaPath: [...Q.schemaPath, $], path: Q.path }, B = $._zod.parent; + if (B) G.ref = B, this.process(B, V), this.seen.get(B).isParent = true; + else { + let z4 = G.schema; + switch (Y.type) { + case "string": { + let N = z4; + N.type = "string"; + let { minimum: w, maximum: O, format: D, patterns: M, contentEncoding: j } = $._zod.bag; + if (typeof w === "number") N.minLength = w; + if (typeof O === "number") N.maxLength = O; + if (D) { + if (N.format = (_c2 = X[D]) != null ? _c2 : D, N.format === "") delete N.format; + } + if (j) N.contentEncoding = j; + if (M && M.size > 0) { + let A = [...M]; + if (A.length === 1) N.pattern = A[0].source; + else if (A.length > 1) G.schema.allOf = [...A.map((S) => ({ ...this.target === "draft-7" ? { type: "string" } : {}, pattern: S.source }))]; + } + break; + } + case "number": { + let N = z4, { minimum: w, maximum: O, format: D, multipleOf: M, exclusiveMaximum: j, exclusiveMinimum: A } = $._zod.bag; + if (typeof D === "string" && D.includes("int")) N.type = "integer"; + else N.type = "number"; + if (typeof A === "number") N.exclusiveMinimum = A; + if (typeof w === "number") { + if (N.minimum = w, typeof A === "number") if (A >= w) delete N.minimum; + else delete N.exclusiveMinimum; + } + if (typeof j === "number") N.exclusiveMaximum = j; + if (typeof O === "number") { + if (N.maximum = O, typeof j === "number") if (j <= O) delete N.maximum; + else delete N.exclusiveMaximum; + } + if (typeof M === "number") N.multipleOf = M; + break; + } + case "boolean": { + let N = z4; + N.type = "boolean"; + break; + } + case "bigint": { + if (this.unrepresentable === "throw") throw Error("BigInt cannot be represented in JSON Schema"); + break; + } + case "symbol": { + if (this.unrepresentable === "throw") throw Error("Symbols cannot be represented in JSON Schema"); + break; + } + case "null": { + z4.type = "null"; + break; + } + case "any": + break; + case "unknown": + break; + case "undefined": + case "never": { + z4.not = {}; + break; + } + case "void": { + if (this.unrepresentable === "throw") throw Error("Void cannot be represented in JSON Schema"); + break; + } + case "date": { + if (this.unrepresentable === "throw") throw Error("Date cannot be represented in JSON Schema"); + break; + } + case "array": { + let N = z4, { minimum: w, maximum: O } = $._zod.bag; + if (typeof w === "number") N.minItems = w; + if (typeof O === "number") N.maxItems = O; + N.type = "array", N.items = this.process(Y.element, { ...V, path: [...V.path, "items"] }); + break; + } + case "object": { + let N = z4; + N.type = "object", N.properties = {}; + let w = Y.shape; + for (let M in w) N.properties[M] = this.process(w[M], { ...V, path: [...V.path, "properties", M] }); + let O = new Set(Object.keys(w)), D = new Set([...O].filter((M) => { + let j = Y.shape[M]._zod; + if (this.io === "input") return j.optin === void 0; + else return j.optout === void 0; + })); + if (D.size > 0) N.required = Array.from(D); + if (((_d = Y.catchall) == null ? void 0 : _d._zod.def.type) === "never") N.additionalProperties = false; + else if (!Y.catchall) { + if (this.io === "output") N.additionalProperties = false; + } else if (Y.catchall) N.additionalProperties = this.process(Y.catchall, { ...V, path: [...V.path, "additionalProperties"] }); + break; + } + case "union": { + let N = z4; + N.anyOf = Y.options.map((w, O) => this.process(w, { ...V, path: [...V.path, "anyOf", O] })); + break; + } + case "intersection": { + let N = z4, w = this.process(Y.left, { ...V, path: [...V.path, "allOf", 0] }), O = this.process(Y.right, { ...V, path: [...V.path, "allOf", 1] }), D = (j) => "allOf" in j && Object.keys(j).length === 1, M = [...D(w) ? w.allOf : [w], ...D(O) ? O.allOf : [O]]; + N.allOf = M; + break; + } + case "tuple": { + let N = z4; + N.type = "array"; + let w = Y.items.map((M, j) => this.process(M, { ...V, path: [...V.path, "prefixItems", j] })); + if (this.target === "draft-2020-12") N.prefixItems = w; + else N.items = w; + if (Y.rest) { + let M = this.process(Y.rest, { ...V, path: [...V.path, "items"] }); + if (this.target === "draft-2020-12") N.items = M; + else N.additionalItems = M; + } + if (Y.rest) N.items = this.process(Y.rest, { ...V, path: [...V.path, "items"] }); + let { minimum: O, maximum: D } = $._zod.bag; + if (typeof O === "number") N.minItems = O; + if (typeof D === "number") N.maxItems = D; + break; + } + case "record": { + let N = z4; + N.type = "object", N.propertyNames = this.process(Y.keyType, { ...V, path: [...V.path, "propertyNames"] }), N.additionalProperties = this.process(Y.valueType, { ...V, path: [...V.path, "additionalProperties"] }); + break; + } + case "map": { + if (this.unrepresentable === "throw") throw Error("Map cannot be represented in JSON Schema"); + break; + } + case "set": { + if (this.unrepresentable === "throw") throw Error("Set cannot be represented in JSON Schema"); + break; + } + case "enum": { + let N = z4, w = B7(Y.entries); + if (w.every((O) => typeof O === "number")) N.type = "number"; + if (w.every((O) => typeof O === "string")) N.type = "string"; + N.enum = w; + break; + } + case "literal": { + let N = z4, w = []; + for (let O of Y.values) if (O === void 0) { + if (this.unrepresentable === "throw") throw Error("Literal `undefined` cannot be represented in JSON Schema"); + } else if (typeof O === "bigint") if (this.unrepresentable === "throw") throw Error("BigInt literals cannot be represented in JSON Schema"); + else w.push(Number(O)); + else w.push(O); + if (w.length === 0) ; + else if (w.length === 1) { + let O = w[0]; + N.type = O === null ? "null" : typeof O, N.const = O; + } else { + if (w.every((O) => typeof O === "number")) N.type = "number"; + if (w.every((O) => typeof O === "string")) N.type = "string"; + if (w.every((O) => typeof O === "boolean")) N.type = "string"; + if (w.every((O) => O === null)) N.type = "null"; + N.enum = w; + } + break; + } + case "file": { + let N = z4, w = { type: "string", format: "binary", contentEncoding: "binary" }, { minimum: O, maximum: D, mime: M } = $._zod.bag; + if (O !== void 0) w.minLength = O; + if (D !== void 0) w.maxLength = D; + if (M) if (M.length === 1) w.contentMediaType = M[0], Object.assign(N, w); + else N.anyOf = M.map((j) => { + return { ...w, contentMediaType: j }; + }); + else Object.assign(N, w); + break; + } + case "transform": { + if (this.unrepresentable === "throw") throw Error("Transforms cannot be represented in JSON Schema"); + break; + } + case "nullable": { + let N = this.process(Y.innerType, V); + z4.anyOf = [N, { type: "null" }]; + break; + } + case "nonoptional": { + this.process(Y.innerType, V), G.ref = Y.innerType; + break; + } + case "success": { + let N = z4; + N.type = "boolean"; + break; + } + case "default": { + this.process(Y.innerType, V), G.ref = Y.innerType, z4.default = JSON.parse(JSON.stringify(Y.defaultValue)); + break; + } + case "prefault": { + if (this.process(Y.innerType, V), G.ref = Y.innerType, this.io === "input") z4._prefault = JSON.parse(JSON.stringify(Y.defaultValue)); + break; + } + case "catch": { + this.process(Y.innerType, V), G.ref = Y.innerType; + let N; + try { + N = Y.catchValue(void 0); + } catch (e2) { + throw Error("Dynamic catch values are not supported in JSON Schema"); + } + z4.default = N; + break; + } + case "nan": { + if (this.unrepresentable === "throw") throw Error("NaN cannot be represented in JSON Schema"); + break; + } + case "template_literal": { + let N = z4, w = $._zod.pattern; + if (!w) throw Error("Pattern not found in template literal"); + N.type = "string", N.pattern = w.source; + break; + } + case "pipe": { + let N = this.io === "input" ? Y.in._zod.def.type === "transform" ? Y.out : Y.in : Y.out; + this.process(N, V), G.ref = N; + break; + } + case "readonly": { + this.process(Y.innerType, V), G.ref = Y.innerType, z4.readOnly = true; + break; + } + case "promise": { + this.process(Y.innerType, V), G.ref = Y.innerType; + break; + } + case "optional": { + this.process(Y.innerType, V), G.ref = Y.innerType; + break; + } + case "lazy": { + let N = $._zod.innerType; + this.process(N, V), G.ref = N; + break; + } + case "custom": { + if (this.unrepresentable === "throw") throw Error("Custom types cannot be represented in JSON Schema"); + break; + } + default: + } + } + } + let H = this.metadataRegistry.get($); + if (H) Object.assign(G.schema, H); + if (this.io === "input" && t$($)) delete G.schema.examples, delete G.schema.default; + if (this.io === "input" && G.schema._prefault) (_e2 = (J = G.schema).default) != null ? _e2 : J.default = G.schema._prefault; + return delete G.schema._prefault, this.seen.get($).schema; + } + emit($, Q) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2; + let J = { cycles: (_a5 = Q == null ? void 0 : Q.cycles) != null ? _a5 : "ref", reused: (_b3 = Q == null ? void 0 : Q.reused) != null ? _b3 : "inline", external: (_c2 = Q == null ? void 0 : Q.external) != null ? _c2 : void 0 }, Y = this.seen.get($); + if (!Y) throw Error("Unprocessed schema. This is a bug in Zod."); + let X = (q) => { + var _a6, _b4, _c3, _d2; + let V = this.target === "draft-2020-12" ? "$defs" : "definitions"; + if (J.external) { + let w = (_a6 = J.external.registry.get(q[0])) == null ? void 0 : _a6.id; + if (w) return { ref: J.external.uri(w) }; + let O = (_c3 = (_b4 = q[1].defId) != null ? _b4 : q[1].schema.id) != null ? _c3 : `schema${this.counter++}`; + return q[1].defId = O, { defId: O, ref: `${J.external.uri("__shared")}#/${V}/${O}` }; + } + if (q[1] === Y) return { ref: "#" }; + let z4 = `${"#"}/${V}/`, N = (_d2 = q[1].schema.id) != null ? _d2 : `__schema${this.counter++}`; + return { defId: N, ref: z4 + N }; + }, W = (q) => { + if (q[1].schema.$ref) return; + let V = q[1], { ref: B, defId: z4 } = X(q); + if (V.def = { ...V.schema }, z4) V.defId = z4; + let N = V.schema; + for (let w in N) delete N[w]; + N.$ref = B; + }; + for (let q of this.seen.entries()) { + let V = q[1]; + if ($ === q[0]) { + W(q); + continue; + } + if (J.external) { + let z4 = (_d = J.external.registry.get(q[0])) == null ? void 0 : _d.id; + if ($ !== q[0] && z4) { + W(q); + continue; + } + } + if ((_e2 = this.metadataRegistry.get(q[0])) == null ? void 0 : _e2.id) { + W(q); + continue; + } + if (V.cycle) { + if (J.cycles === "throw") throw Error(`Cycle detected: #/${(_f2 = V.cycle) == null ? void 0 : _f2.join("/")}/ + +Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`); + else if (J.cycles === "ref") W(q); + continue; + } + if (V.count > 1) { + if (J.reused === "ref") { + W(q); + continue; + } + } + } + let G = (q, V) => { + var _a6, _b4, _c3; + let B = this.seen.get(q), z4 = (_a6 = B.def) != null ? _a6 : B.schema, N = { ...z4 }; + if (B.ref === null) return; + let w = B.ref; + if (B.ref = null, w) { + G(w, V); + let O = this.seen.get(w).schema; + if (O.$ref && V.target === "draft-7") z4.allOf = (_b4 = z4.allOf) != null ? _b4 : [], z4.allOf.push(O); + else Object.assign(z4, O), Object.assign(z4, N); + } + if (!B.isParent) this.override({ zodSchema: q, jsonSchema: z4, path: (_c3 = B.path) != null ? _c3 : [] }); + }; + for (let q of [...this.seen.entries()].reverse()) G(q[0], { target: this.target }); + let U = {}; + if (this.target === "draft-2020-12") U.$schema = "https://json-schema.org/draft/2020-12/schema"; + else if (this.target === "draft-7") U.$schema = "http://json-schema.org/draft-07/schema#"; + else console.warn(`Invalid target: ${this.target}`); + Object.assign(U, Y.def); + let H = (_h2 = (_g = J.external) == null ? void 0 : _g.defs) != null ? _h2 : {}; + for (let q of this.seen.entries()) { + let V = q[1]; + if (V.def && V.defId) H[V.defId] = V.def; + } + if (!J.external && Object.keys(H).length > 0) if (this.target === "draft-2020-12") U.$defs = H; + else U.definitions = H; + try { + return JSON.parse(JSON.stringify(U)); + } catch (q) { + throw Error("Error converting schema to JSON."); + } + } +}; +function e8($, Q) { + if ($ instanceof I7) { + let Y = new A3(Q), X = {}; + for (let U of $._idmap.entries()) { + let [H, q] = U; + Y.process(q); + } + let W = {}, G = { registry: $, uri: (Q == null ? void 0 : Q.uri) || ((U) => U), defs: X }; + for (let U of $._idmap.entries()) { + let [H, q] = U; + W[H] = Y.emit(q, { ...Q, external: G }); + } + if (Object.keys(X).length > 0) { + let U = Y.target === "draft-2020-12" ? "$defs" : "definitions"; + W.__shared = { [U]: X }; + } + return { schemas: W }; + } + let J = new A3(Q); + return J.process($), J.emit($, Q); +} +function t$($, Q) { + let J = Q != null ? Q : { seen: /* @__PURE__ */ new Set() }; + if (J.seen.has($)) return false; + J.seen.add($); + let X = $._zod.def; + switch (X.type) { + case "string": + case "number": + case "bigint": + case "boolean": + case "date": + case "symbol": + case "undefined": + case "null": + case "any": + case "unknown": + case "never": + case "void": + case "literal": + case "enum": + case "nan": + case "file": + case "template_literal": + return false; + case "array": + return t$(X.element, J); + case "object": { + for (let W in X.shape) if (t$(X.shape[W], J)) return true; + return false; + } + case "union": { + for (let W of X.options) if (t$(W, J)) return true; + return false; + } + case "intersection": + return t$(X.left, J) || t$(X.right, J); + case "tuple": { + for (let W of X.items) if (t$(W, J)) return true; + if (X.rest && t$(X.rest, J)) return true; + return false; + } + case "record": + return t$(X.keyType, J) || t$(X.valueType, J); + case "map": + return t$(X.keyType, J) || t$(X.valueType, J); + case "set": + return t$(X.valueType, J); + case "promise": + case "optional": + case "nonoptional": + case "nullable": + case "readonly": + return t$(X.innerType, J); + case "lazy": + return t$(X.getter(), J); + case "default": + return t$(X.innerType, J); + case "prefault": + return t$(X.innerType, J); + case "custom": + return false; + case "transform": + return true; + case "pipe": + return t$(X.in, J) || t$(X.out, J); + case "success": + return false; + case "catch": + return false; + default: + } + throw Error(`Unknown schema type: ${X.type}`); +} +var bM = {}; +var Em = F("ZodMiniType", ($, Q) => { + if (!$._zod) throw Error("Uninitialized schema in ZodMiniType."); + o.init($, Q), $.def = Q, $.parse = (J, Y) => I0($, J, Y, { callee: $.parse }), $.safeParse = (J, Y) => R1($, J, Y), $.parseAsync = async (J, Y) => R0($, J, Y, { callee: $.parseAsync }), $.safeParseAsync = async (J, Y) => P1($, J, Y), $.check = (...J) => { + var _a5; + return $.clone({ ...Q, checks: [...(_a5 = Q.checks) != null ? _a5 : [], ...J.map((Y) => typeof Y === "function" ? { _zod: { check: Y, def: { check: "custom" }, onattach: [] } } : Y)] }); + }, $.clone = (J, Y) => H6($, J, Y), $.brand = () => $, $.register = (J, Y) => { + return J.add($, Y), $; + }; +}); +var bm = F("ZodMiniObject", ($, Q) => { + L7.init($, Q), Em.init($, Q), v.defineLazy($, "shape", () => Q.shape); +}); +var K = {}; +M4(K, { xid: () => dm, void: () => Bl, uuidv7: () => gm, uuidv6: () => fm, uuidv4: () => ym, uuid: () => xm, url: () => hm, uppercase: () => t7, unknown: () => S$, union: () => A$, undefined: () => ql, ulid: () => pm, uint64: () => Hl, uint32: () => Wl, tuple: () => Ol, trim: () => JJ, treeifyError: () => mX, transform: () => bV, toUpperCase: () => YJ, toLowerCase: () => XJ, toJSONSchema: () => e8, templateLiteral: () => Rl, symbol: () => Kl, superRefine: () => zL, success: () => Al, stringbool: () => bl, stringFormat: () => Ql, string: () => L, strictObject: () => wl, startsWith: () => s7, size: () => n7, setErrorMap: () => Sl, set: () => Zl, safeParseAsync: () => YV, safeParse: () => XV, registry: () => R7, regexes: () => E1, regex: () => r7, refine: () => BL, record: () => I$, readonly: () => GL, property: () => nq, promise: () => Pl, prettifyError: () => lX, preprocess: () => u3, prefault: () => eM, positive: () => cq, pipe: () => C3, partialRecord: () => Dl, parseAsync: () => JV, parse: () => QV, overwrite: () => a4, optional: () => _$, object: () => h, number: () => z$, nullish: () => jl, nullable: () => v3, null: () => T3, normalize: () => QJ, nonpositive: () => dq, nonoptional: () => $L, nonnegative: () => iq, never: () => x3, negative: () => pq, nativeEnum: () => Ml, nanoid: () => mm, nan: () => Il, multipleOf: () => _0, minSize: () => k0, minLength: () => k1, mime: () => $J, maxSize: () => t8, maxLength: () => a8, map: () => Fl, lte: () => t6, lt: () => o4, lowercase: () => o7, looseObject: () => K6, locales: () => r8, literal: () => l, length: () => s8, lazy: () => KL, ksuid: () => im, keyof: () => Nl, jwt: () => $l, json: () => _l, iso: () => Q9, ipv6: () => rm, ipv4: () => nm, intersection: () => VJ, int64: () => Ul, int32: () => Yl, int: () => WV, instanceof: () => El, includes: () => a7, guid: () => Tm, gte: () => P6, gt: () => t4, globalRegistry: () => R6, getErrorMap: () => vl, function: () => j3, formatError: () => l8, float64: () => Xl, float32: () => Jl, flattenError: () => m8, file: () => Ll, enum: () => N6, endsWith: () => e7, emoji: () => um, email: () => Cm, e164: () => em, discriminatedUnion: () => g3, date: () => zl, custom: () => vV, cuid2: () => cm, cuid: () => lm, core: () => K4, config: () => c$, coerce: () => CV, clone: () => H6, cidrv6: () => tm, cidrv4: () => om, check: () => VL, catch: () => XL, boolean: () => i$, bigint: () => Gl, base64url: () => sm, base64: () => am, array: () => W$, any: () => Vl, _default: () => aM, _ZodString: () => GV, ZodXID: () => NV, ZodVoid: () => uM, ZodUnknown: () => gM, ZodUnion: () => RV, ZodUndefined: () => xM, ZodUUID: () => s4, ZodURL: () => HV, ZodULID: () => zV, ZodType: () => J$, ZodTuple: () => pM, ZodTransform: () => EV, ZodTemplateLiteral: () => UL, ZodSymbol: () => TM, ZodSuccess: () => QL, ZodStringFormat: () => b$, ZodString: () => UJ, ZodSet: () => iM, ZodRecord: () => PV, ZodRealError: () => J9, ZodReadonly: () => WL, ZodPromise: () => qL, ZodPrefault: () => sM, ZodPipe: () => SV, ZodOptional: () => _V, ZodObject: () => f3, ZodNumberFormat: () => X9, ZodNumber: () => HJ, ZodNullable: () => oM, ZodNull: () => yM, ZodNonOptional: () => kV, ZodNever: () => hM, ZodNanoID: () => qV, ZodNaN: () => YL, ZodMap: () => dM, ZodLiteral: () => nM, ZodLazy: () => HL, ZodKSUID: () => wV, ZodJWT: () => AV, ZodIssueCode: () => kl, ZodIntersection: () => cM, ZodISOTime: () => _3, ZodISODuration: () => k3, ZodISODateTime: () => E3, ZodISODate: () => b3, ZodIPv6: () => DV, ZodIPv4: () => OV, ZodGUID: () => S3, ZodFile: () => rM, ZodError: () => Sm, ZodEnum: () => GJ, ZodEmoji: () => KV, ZodEmail: () => UV, ZodE164: () => jV, ZodDiscriminatedUnion: () => lM, ZodDefault: () => tM, ZodDate: () => y3, ZodCustomStringFormat: () => CM, ZodCustom: () => h3, ZodCatch: () => JL, ZodCUID2: () => BV, ZodCUID: () => VV, ZodCIDRv6: () => ZV, ZodCIDRv4: () => FV, ZodBoolean: () => KJ, ZodBigIntFormat: () => IV, ZodBigInt: () => qJ, ZodBase64URL: () => LV, ZodBase64: () => MV, ZodArray: () => mM, ZodAny: () => fM, TimePrecision: () => sY, NEVER: () => gX, $output: () => oY, $input: () => tY, $brand: () => hX }); +var Q9 = {}; +M4(Q9, { time: () => eq, duration: () => $V, datetime: () => aq, date: () => sq, ZodISOTime: () => _3, ZodISODuration: () => k3, ZodISODateTime: () => E3, ZodISODate: () => b3 }); +var E3 = F("ZodISODateTime", ($, Q) => { + dK.init($, Q), b$.init($, Q); +}); +function aq($) { + return xq(E3, $); +} +var b3 = F("ZodISODate", ($, Q) => { + iK.init($, Q), b$.init($, Q); +}); +function sq($) { + return yq(b3, $); +} +var _3 = F("ZodISOTime", ($, Q) => { + nK.init($, Q), b$.init($, Q); +}); +function eq($) { + return fq(_3, $); +} +var k3 = F("ZodISODuration", ($, Q) => { + rK.init($, Q), b$.init($, Q); +}); +function $V($) { + return gq(k3, $); +} +var vM = ($, Q) => { + F7.init($, Q), $.name = "ZodError", Object.defineProperties($, { format: { value: (J) => l8($, J) }, flatten: { value: (J) => m8($, J) }, addIssue: { value: (J) => $.issues.push(J) }, addIssues: { value: (J) => $.issues.push(...J) }, isEmpty: { get() { + return $.issues.length === 0; + } } }); +}; +var Sm = F("ZodError", vM); +var J9 = F("ZodError", vM, { Parent: Error }); +var QV = cX(J9); +var JV = pX(J9); +var XV = dX(J9); +var YV = iX(J9); +var J$ = F("ZodType", ($, Q) => { + return o.init($, Q), $.def = Q, Object.defineProperty($, "_def", { value: Q }), $.check = (...J) => { + var _a5; + return $.clone({ ...Q, checks: [...(_a5 = Q.checks) != null ? _a5 : [], ...J.map((Y) => typeof Y === "function" ? { _zod: { check: Y, def: { check: "custom" }, onattach: [] } } : Y)] }); + }, $.clone = (J, Y) => H6($, J, Y), $.brand = () => $, $.register = (J, Y) => { + return J.add($, Y), $; + }, $.parse = (J, Y) => QV($, J, Y, { callee: $.parse }), $.safeParse = (J, Y) => XV($, J, Y), $.parseAsync = async (J, Y) => JV($, J, Y, { callee: $.parseAsync }), $.safeParseAsync = async (J, Y) => YV($, J, Y), $.spa = $.safeParseAsync, $.refine = (J, Y) => $.check(BL(J, Y)), $.superRefine = (J) => $.check(zL(J)), $.overwrite = (J) => $.check(a4(J)), $.optional = () => _$($), $.nullable = () => v3($), $.nullish = () => _$(v3($)), $.nonoptional = (J) => $L($, J), $.array = () => W$($), $.or = (J) => A$([$, J]), $.and = (J) => VJ($, J), $.transform = (J) => C3($, bV(J)), $.default = (J) => aM($, J), $.prefault = (J) => eM($, J), $.catch = (J) => XL($, J), $.pipe = (J) => C3($, J), $.readonly = () => GL($), $.describe = (J) => { + let Y = $.clone(); + return R6.add(Y, { description: J }), Y; + }, Object.defineProperty($, "description", { get() { + var _a5; + return (_a5 = R6.get($)) == null ? void 0 : _a5.description; + }, configurable: true }), $.meta = (...J) => { + if (J.length === 0) return R6.get($); + let Y = $.clone(); + return R6.add(Y, J[0]), Y; + }, $.isOptional = () => $.safeParse(void 0).success, $.isNullable = () => $.safeParse(null).success, $; +}); +var GV = F("_ZodString", ($, Q) => { + var _a5, _b3, _c2; + b1.init($, Q), J$.init($, Q); + let J = $._zod.bag; + $.format = (_a5 = J.format) != null ? _a5 : null, $.minLength = (_b3 = J.minimum) != null ? _b3 : null, $.maxLength = (_c2 = J.maximum) != null ? _c2 : null, $.regex = (...Y) => $.check(r7(...Y)), $.includes = (...Y) => $.check(a7(...Y)), $.startsWith = (...Y) => $.check(s7(...Y)), $.endsWith = (...Y) => $.check(e7(...Y)), $.min = (...Y) => $.check(k1(...Y)), $.max = (...Y) => $.check(a8(...Y)), $.length = (...Y) => $.check(s8(...Y)), $.nonempty = (...Y) => $.check(k1(1, ...Y)), $.lowercase = (Y) => $.check(o7(Y)), $.uppercase = (Y) => $.check(t7(Y)), $.trim = () => $.check(JJ()), $.normalize = (...Y) => $.check(QJ(...Y)), $.toLowerCase = () => $.check(XJ()), $.toUpperCase = () => $.check(YJ()); +}); +var UJ = F("ZodString", ($, Q) => { + b1.init($, Q), GV.init($, Q), $.email = (J) => $.check(P7(UV, J)), $.url = (J) => $.check(S7(HV, J)), $.jwt = (J) => $.check(i7(AV, J)), $.emoji = (J) => $.check(v7(KV, J)), $.guid = (J) => $.check(o8(S3, J)), $.uuid = (J) => $.check(E7(s4, J)), $.uuidv4 = (J) => $.check(b7(s4, J)), $.uuidv6 = (J) => $.check(_7(s4, J)), $.uuidv7 = (J) => $.check(k7(s4, J)), $.nanoid = (J) => $.check(C7(qV, J)), $.guid = (J) => $.check(o8(S3, J)), $.cuid = (J) => $.check(T7(VV, J)), $.cuid2 = (J) => $.check(x7(BV, J)), $.ulid = (J) => $.check(y7(zV, J)), $.base64 = (J) => $.check(c7(MV, J)), $.base64url = (J) => $.check(p7(LV, J)), $.xid = (J) => $.check(f7(NV, J)), $.ksuid = (J) => $.check(g7(wV, J)), $.ipv4 = (J) => $.check(h7(OV, J)), $.ipv6 = (J) => $.check(u7(DV, J)), $.cidrv4 = (J) => $.check(m7(FV, J)), $.cidrv6 = (J) => $.check(l7(ZV, J)), $.e164 = (J) => $.check(d7(jV, J)), $.datetime = (J) => $.check(aq(J)), $.date = (J) => $.check(sq(J)), $.time = (J) => $.check(eq(J)), $.duration = (J) => $.check($V(J)); +}); +function L($) { + return aY(UJ, $); +} +var b$ = F("ZodStringFormat", ($, Q) => { + j$.init($, Q), GV.init($, Q); +}); +var UV = F("ZodEmail", ($, Q) => { + QY.init($, Q), b$.init($, Q); +}); +function Cm($) { + return P7(UV, $); +} +var S3 = F("ZodGUID", ($, Q) => { + eX.init($, Q), b$.init($, Q); +}); +function Tm($) { + return o8(S3, $); +} +var s4 = F("ZodUUID", ($, Q) => { + $Y.init($, Q), b$.init($, Q); +}); +function xm($) { + return E7(s4, $); +} +function ym($) { + return b7(s4, $); +} +function fm($) { + return _7(s4, $); +} +function gm($) { + return k7(s4, $); +} +var HV = F("ZodURL", ($, Q) => { + JY.init($, Q), b$.init($, Q); +}); +function hm($) { + return S7(HV, $); +} +var KV = F("ZodEmoji", ($, Q) => { + XY.init($, Q), b$.init($, Q); +}); +function um($) { + return v7(KV, $); +} +var qV = F("ZodNanoID", ($, Q) => { + YY.init($, Q), b$.init($, Q); +}); +function mm($) { + return C7(qV, $); +} +var VV = F("ZodCUID", ($, Q) => { + WY.init($, Q), b$.init($, Q); +}); +function lm($) { + return T7(VV, $); +} +var BV = F("ZodCUID2", ($, Q) => { + GY.init($, Q), b$.init($, Q); +}); +function cm($) { + return x7(BV, $); +} +var zV = F("ZodULID", ($, Q) => { + UY.init($, Q), b$.init($, Q); +}); +function pm($) { + return y7(zV, $); +} +var NV = F("ZodXID", ($, Q) => { + HY.init($, Q), b$.init($, Q); +}); +function dm($) { + return f7(NV, $); +} +var wV = F("ZodKSUID", ($, Q) => { + KY.init($, Q), b$.init($, Q); +}); +function im($) { + return g7(wV, $); +} +var OV = F("ZodIPv4", ($, Q) => { + qY.init($, Q), b$.init($, Q); +}); +function nm($) { + return h7(OV, $); +} +var DV = F("ZodIPv6", ($, Q) => { + VY.init($, Q), b$.init($, Q); +}); +function rm($) { + return u7(DV, $); +} +var FV = F("ZodCIDRv4", ($, Q) => { + BY.init($, Q), b$.init($, Q); +}); +function om($) { + return m7(FV, $); +} +var ZV = F("ZodCIDRv6", ($, Q) => { + zY.init($, Q), b$.init($, Q); +}); +function tm($) { + return l7(ZV, $); +} +var MV = F("ZodBase64", ($, Q) => { + NY.init($, Q), b$.init($, Q); +}); +function am($) { + return c7(MV, $); +} +var LV = F("ZodBase64URL", ($, Q) => { + wY.init($, Q), b$.init($, Q); +}); +function sm($) { + return p7(LV, $); +} +var jV = F("ZodE164", ($, Q) => { + OY.init($, Q), b$.init($, Q); +}); +function em($) { + return d7(jV, $); +} +var AV = F("ZodJWT", ($, Q) => { + DY.init($, Q), b$.init($, Q); +}); +function $l($) { + return i7(AV, $); +} +var CM = F("ZodCustomStringFormat", ($, Q) => { + FY.init($, Q), b$.init($, Q); +}); +function Ql($, Q, J = {}) { + return L3(CM, $, Q, J); +} +var HJ = F("ZodNumber", ($, Q) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i; + Z7.init($, Q), J$.init($, Q), $.gt = (Y, X) => $.check(t4(Y, X)), $.gte = (Y, X) => $.check(P6(Y, X)), $.min = (Y, X) => $.check(P6(Y, X)), $.lt = (Y, X) => $.check(o4(Y, X)), $.lte = (Y, X) => $.check(t6(Y, X)), $.max = (Y, X) => $.check(t6(Y, X)), $.int = (Y) => $.check(WV(Y)), $.safe = (Y) => $.check(WV(Y)), $.positive = (Y) => $.check(t4(0, Y)), $.nonnegative = (Y) => $.check(P6(0, Y)), $.negative = (Y) => $.check(o4(0, Y)), $.nonpositive = (Y) => $.check(t6(0, Y)), $.multipleOf = (Y, X) => $.check(_0(Y, X)), $.step = (Y, X) => $.check(_0(Y, X)), $.finite = () => $; + let J = $._zod.bag; + $.minValue = (_c2 = Math.max((_a5 = J.minimum) != null ? _a5 : Number.NEGATIVE_INFINITY, (_b3 = J.exclusiveMinimum) != null ? _b3 : Number.NEGATIVE_INFINITY)) != null ? _c2 : null, $.maxValue = (_f2 = Math.min((_d = J.maximum) != null ? _d : Number.POSITIVE_INFINITY, (_e2 = J.exclusiveMaximum) != null ? _e2 : Number.POSITIVE_INFINITY)) != null ? _f2 : null, $.isInt = ((_g = J.format) != null ? _g : "").includes("int") || Number.isSafeInteger((_h2 = J.multipleOf) != null ? _h2 : 0.5), $.isFinite = true, $.format = (_i = J.format) != null ? _i : null; +}); +function z$($) { + return eY(HJ, $); +} +var X9 = F("ZodNumberFormat", ($, Q) => { + ZY.init($, Q), HJ.init($, Q); +}); +function WV($) { + return $3(X9, $); +} +function Jl($) { + return Q3(X9, $); +} +function Xl($) { + return J3(X9, $); +} +function Yl($) { + return X3(X9, $); +} +function Wl($) { + return Y3(X9, $); +} +var KJ = F("ZodBoolean", ($, Q) => { + p8.init($, Q), J$.init($, Q); +}); +function i$($) { + return W3(KJ, $); +} +var qJ = F("ZodBigInt", ($, Q) => { + var _a5, _b3, _c2; + M7.init($, Q), J$.init($, Q), $.gte = (Y, X) => $.check(P6(Y, X)), $.min = (Y, X) => $.check(P6(Y, X)), $.gt = (Y, X) => $.check(t4(Y, X)), $.gte = (Y, X) => $.check(P6(Y, X)), $.min = (Y, X) => $.check(P6(Y, X)), $.lt = (Y, X) => $.check(o4(Y, X)), $.lte = (Y, X) => $.check(t6(Y, X)), $.max = (Y, X) => $.check(t6(Y, X)), $.positive = (Y) => $.check(t4(BigInt(0), Y)), $.negative = (Y) => $.check(o4(BigInt(0), Y)), $.nonpositive = (Y) => $.check(t6(BigInt(0), Y)), $.nonnegative = (Y) => $.check(P6(BigInt(0), Y)), $.multipleOf = (Y, X) => $.check(_0(Y, X)); + let J = $._zod.bag; + $.minValue = (_a5 = J.minimum) != null ? _a5 : null, $.maxValue = (_b3 = J.maximum) != null ? _b3 : null, $.format = (_c2 = J.format) != null ? _c2 : null; +}); +function Gl($) { + return G3(qJ, $); +} +var IV = F("ZodBigIntFormat", ($, Q) => { + MY.init($, Q), qJ.init($, Q); +}); +function Ul($) { + return U3(IV, $); +} +function Hl($) { + return H3(IV, $); +} +var TM = F("ZodSymbol", ($, Q) => { + LY.init($, Q), J$.init($, Q); +}); +function Kl($) { + return K3(TM, $); +} +var xM = F("ZodUndefined", ($, Q) => { + jY.init($, Q), J$.init($, Q); +}); +function ql($) { + return q3(xM, $); +} +var yM = F("ZodNull", ($, Q) => { + AY.init($, Q), J$.init($, Q); +}); +function T3($) { + return V3(yM, $); +} +var fM = F("ZodAny", ($, Q) => { + IY.init($, Q), J$.init($, Q); +}); +function Vl() { + return B3(fM); +} +var gM = F("ZodUnknown", ($, Q) => { + E0.init($, Q), J$.init($, Q); +}); +function S$() { + return b0(gM); +} +var hM = F("ZodNever", ($, Q) => { + RY.init($, Q), J$.init($, Q); +}); +function x3($) { + return z3(hM, $); +} +var uM = F("ZodVoid", ($, Q) => { + PY.init($, Q), J$.init($, Q); +}); +function Bl($) { + return N3(uM, $); +} +var y3 = F("ZodDate", ($, Q) => { + EY.init($, Q), J$.init($, Q), $.min = (Y, X) => $.check(P6(Y, X)), $.max = (Y, X) => $.check(t6(Y, X)); + let J = $._zod.bag; + $.minDate = J.minimum ? new Date(J.minimum) : null, $.maxDate = J.maximum ? new Date(J.maximum) : null; +}); +function zl($) { + return w3(y3, $); +} +var mM = F("ZodArray", ($, Q) => { + d8.init($, Q), J$.init($, Q), $.element = Q.element, $.min = (J, Y) => $.check(k1(J, Y)), $.nonempty = (J) => $.check(k1(1, J)), $.max = (J, Y) => $.check(a8(J, Y)), $.length = (J, Y) => $.check(s8(J, Y)), $.unwrap = () => $.element; +}); +function W$($, Q) { + return WJ(mM, $, Q); +} +function Nl($) { + let Q = $._zod.def.shape; + return l(Object.keys(Q)); +} +var f3 = F("ZodObject", ($, Q) => { + L7.init($, Q), J$.init($, Q), v.defineLazy($, "shape", () => Q.shape), $.keyof = () => N6(Object.keys($._zod.def.shape)), $.catchall = (J) => $.clone({ ...$._zod.def, catchall: J }), $.passthrough = () => $.clone({ ...$._zod.def, catchall: S$() }), $.loose = () => $.clone({ ...$._zod.def, catchall: S$() }), $.strict = () => $.clone({ ...$._zod.def, catchall: x3() }), $.strip = () => $.clone({ ...$._zod.def, catchall: void 0 }), $.extend = (J) => { + return v.extend($, J); + }, $.merge = (J) => v.merge($, J), $.pick = (J) => v.pick($, J), $.omit = (J) => v.omit($, J), $.partial = (...J) => v.partial(_V, $, J[0]), $.required = (...J) => v.required(kV, $, J[0]); +}); +function h($, Q) { + let J = { type: "object", get shape() { + return v.assignProp(this, "shape", { ...$ }), this.shape; + }, ...v.normalizeParams(Q) }; + return new f3(J); +} +function wl($, Q) { + return new f3({ type: "object", get shape() { + return v.assignProp(this, "shape", { ...$ }), this.shape; + }, catchall: x3(), ...v.normalizeParams(Q) }); +} +function K6($, Q) { + return new f3({ type: "object", get shape() { + return v.assignProp(this, "shape", { ...$ }), this.shape; + }, catchall: S$(), ...v.normalizeParams(Q) }); +} +var RV = F("ZodUnion", ($, Q) => { + j7.init($, Q), J$.init($, Q), $.options = Q.options; +}); +function A$($, Q) { + return new RV({ type: "union", options: $, ...v.normalizeParams(Q) }); +} +var lM = F("ZodDiscriminatedUnion", ($, Q) => { + RV.init($, Q), bY.init($, Q); +}); +function g3($, Q, J) { + return new lM({ type: "union", options: Q, discriminator: $, ...v.normalizeParams(J) }); +} +var cM = F("ZodIntersection", ($, Q) => { + _Y.init($, Q), J$.init($, Q); +}); +function VJ($, Q) { + return new cM({ type: "intersection", left: $, right: Q }); +} +var pM = F("ZodTuple", ($, Q) => { + _1.init($, Q), J$.init($, Q), $.rest = (J) => $.clone({ ...$._zod.def, rest: J }); +}); +function Ol($, Q, J) { + let Y = Q instanceof o, X = Y ? J : Q; + return new pM({ type: "tuple", items: $, rest: Y ? Q : null, ...v.normalizeParams(X) }); +} +var PV = F("ZodRecord", ($, Q) => { + kY.init($, Q), J$.init($, Q), $.keyType = Q.keyType, $.valueType = Q.valueType; +}); +function I$($, Q, J) { + return new PV({ type: "record", keyType: $, valueType: Q, ...v.normalizeParams(J) }); +} +function Dl($, Q, J) { + return new PV({ type: "record", keyType: A$([$, x3()]), valueType: Q, ...v.normalizeParams(J) }); +} +var dM = F("ZodMap", ($, Q) => { + SY.init($, Q), J$.init($, Q), $.keyType = Q.keyType, $.valueType = Q.valueType; +}); +function Fl($, Q, J) { + return new dM({ type: "map", keyType: $, valueType: Q, ...v.normalizeParams(J) }); +} +var iM = F("ZodSet", ($, Q) => { + vY.init($, Q), J$.init($, Q), $.min = (...J) => $.check(k0(...J)), $.nonempty = (J) => $.check(k0(1, J)), $.max = (...J) => $.check(t8(...J)), $.size = (...J) => $.check(n7(...J)); +}); +function Zl($, Q) { + return new iM({ type: "set", valueType: $, ...v.normalizeParams(Q) }); +} +var GJ = F("ZodEnum", ($, Q) => { + CY.init($, Q), J$.init($, Q), $.enum = Q.entries, $.options = Object.values(Q.entries); + let J = new Set(Object.keys(Q.entries)); + $.extract = (Y, X) => { + let W = {}; + for (let G of Y) if (J.has(G)) W[G] = Q.entries[G]; + else throw Error(`Key ${G} not found in enum`); + return new GJ({ ...Q, checks: [], ...v.normalizeParams(X), entries: W }); + }, $.exclude = (Y, X) => { + let W = { ...Q.entries }; + for (let G of Y) if (J.has(G)) delete W[G]; + else throw Error(`Key ${G} not found in enum`); + return new GJ({ ...Q, checks: [], ...v.normalizeParams(X), entries: W }); + }; +}); +function N6($, Q) { + let J = Array.isArray($) ? Object.fromEntries($.map((Y) => [Y, Y])) : $; + return new GJ({ type: "enum", entries: J, ...v.normalizeParams(Q) }); +} +function Ml($, Q) { + return new GJ({ type: "enum", entries: $, ...v.normalizeParams(Q) }); +} +var nM = F("ZodLiteral", ($, Q) => { + TY.init($, Q), J$.init($, Q), $.values = new Set(Q.values), Object.defineProperty($, "value", { get() { + if (Q.values.length > 1) throw Error("This schema contains multiple valid literal values. Use `.values` instead."); + return Q.values[0]; + } }); +}); +function l($, Q) { + return new nM({ type: "literal", values: Array.isArray($) ? $ : [$], ...v.normalizeParams(Q) }); +} +var rM = F("ZodFile", ($, Q) => { + xY.init($, Q), J$.init($, Q), $.min = (J, Y) => $.check(k0(J, Y)), $.max = (J, Y) => $.check(t8(J, Y)), $.mime = (J, Y) => $.check($J(Array.isArray(J) ? J : [J], Y)); +}); +function Ll($) { + return D3(rM, $); +} +var EV = F("ZodTransform", ($, Q) => { + i8.init($, Q), J$.init($, Q), $._zod.parse = (J, Y) => { + J.addIssue = (W) => { + var _a5, _b3, _c2, _d; + if (typeof W === "string") J.issues.push(v.issue(W, J.value, Q)); + else { + let G = W; + if (G.fatal) G.continue = false; + (_a5 = G.code) != null ? _a5 : G.code = "custom", (_b3 = G.input) != null ? _b3 : G.input = J.value, (_c2 = G.inst) != null ? _c2 : G.inst = $, (_d = G.continue) != null ? _d : G.continue = true, J.issues.push(v.issue(G)); + } + }; + let X = Q.transform(J.value, J); + if (X instanceof Promise) return X.then((W) => { + return J.value = W, J; + }); + return J.value = X, J; + }; +}); +function bV($) { + return new EV({ type: "transform", transform: $ }); +} +var _V = F("ZodOptional", ($, Q) => { + yY.init($, Q), J$.init($, Q), $.unwrap = () => $._zod.def.innerType; +}); +function _$($) { + return new _V({ type: "optional", innerType: $ }); +} +var oM = F("ZodNullable", ($, Q) => { + fY.init($, Q), J$.init($, Q), $.unwrap = () => $._zod.def.innerType; +}); +function v3($) { + return new oM({ type: "nullable", innerType: $ }); +} +function jl($) { + return _$(v3($)); +} +var tM = F("ZodDefault", ($, Q) => { + gY.init($, Q), J$.init($, Q), $.unwrap = () => $._zod.def.innerType, $.removeDefault = $.unwrap; +}); +function aM($, Q) { + return new tM({ type: "default", innerType: $, get defaultValue() { + return typeof Q === "function" ? Q() : Q; + } }); +} +var sM = F("ZodPrefault", ($, Q) => { + hY.init($, Q), J$.init($, Q), $.unwrap = () => $._zod.def.innerType; +}); +function eM($, Q) { + return new sM({ type: "prefault", innerType: $, get defaultValue() { + return typeof Q === "function" ? Q() : Q; + } }); +} +var kV = F("ZodNonOptional", ($, Q) => { + uY.init($, Q), J$.init($, Q), $.unwrap = () => $._zod.def.innerType; +}); +function $L($, Q) { + return new kV({ type: "nonoptional", innerType: $, ...v.normalizeParams(Q) }); +} +var QL = F("ZodSuccess", ($, Q) => { + mY.init($, Q), J$.init($, Q), $.unwrap = () => $._zod.def.innerType; +}); +function Al($) { + return new QL({ type: "success", innerType: $ }); +} +var JL = F("ZodCatch", ($, Q) => { + lY.init($, Q), J$.init($, Q), $.unwrap = () => $._zod.def.innerType, $.removeCatch = $.unwrap; +}); +function XL($, Q) { + return new JL({ type: "catch", innerType: $, catchValue: typeof Q === "function" ? Q : () => Q }); +} +var YL = F("ZodNaN", ($, Q) => { + cY.init($, Q), J$.init($, Q); +}); +function Il($) { + return O3(YL, $); +} +var SV = F("ZodPipe", ($, Q) => { + n8.init($, Q), J$.init($, Q), $.in = Q.in, $.out = Q.out; +}); +function C3($, Q) { + return new SV({ type: "pipe", in: $, out: Q }); +} +var WL = F("ZodReadonly", ($, Q) => { + pY.init($, Q), J$.init($, Q); +}); +function GL($) { + return new WL({ type: "readonly", innerType: $ }); +} +var UL = F("ZodTemplateLiteral", ($, Q) => { + dY.init($, Q), J$.init($, Q); +}); +function Rl($, Q) { + return new UL({ type: "template_literal", parts: $, ...v.normalizeParams(Q) }); +} +var HL = F("ZodLazy", ($, Q) => { + nY.init($, Q), J$.init($, Q), $.unwrap = () => $._zod.def.getter(); +}); +function KL($) { + return new HL({ type: "lazy", getter: $ }); +} +var qL = F("ZodPromise", ($, Q) => { + iY.init($, Q), J$.init($, Q), $.unwrap = () => $._zod.def.innerType; +}); +function Pl($) { + return new qL({ type: "promise", innerType: $ }); +} +var h3 = F("ZodCustom", ($, Q) => { + rY.init($, Q), J$.init($, Q); +}); +function VL($, Q) { + let J = new T$({ check: "custom", ...v.normalizeParams(Q) }); + return J._zod.check = $, J; +} +function vV($, Q) { + return F3(h3, $ != null ? $ : (() => true), Q); +} +function BL($, Q = {}) { + return Z3(h3, $, Q); +} +function zL($, Q) { + let J = VL((Y) => { + return Y.addIssue = (X) => { + var _a5, _b3, _c2, _d; + if (typeof X === "string") Y.issues.push(v.issue(X, Y.value, J._zod.def)); + else { + let W = X; + if (W.fatal) W.continue = false; + (_a5 = W.code) != null ? _a5 : W.code = "custom", (_b3 = W.input) != null ? _b3 : W.input = Y.value, (_c2 = W.inst) != null ? _c2 : W.inst = J, (_d = W.continue) != null ? _d : W.continue = !J._zod.def.abort, Y.issues.push(v.issue(W)); + } + }, $(Y.value, Y); + }, Q); + return J; +} +function El($, Q = { error: `Input not instance of ${$.name}` }) { + let J = new h3({ type: "custom", check: "custom", fn: (Y) => Y instanceof $, abort: true, ...v.normalizeParams(Q) }); + return J._zod.bag.Class = $, J; +} +var bl = (...$) => M3({ Pipe: SV, Boolean: KJ, String: UJ, Transform: EV }, ...$); +function _l($) { + let Q = KL(() => { + return A$([L($), z$(), i$(), T3(), W$(Q), I$(L(), Q)]); + }); + return Q; +} +function u3($, Q) { + return C3(bV($), Q); +} +var kl = { invalid_type: "invalid_type", too_big: "too_big", too_small: "too_small", invalid_format: "invalid_format", not_multiple_of: "not_multiple_of", unrecognized_keys: "unrecognized_keys", invalid_union: "invalid_union", invalid_key: "invalid_key", invalid_element: "invalid_element", invalid_value: "invalid_value", custom: "custom" }; +function Sl($) { + c$({ customError: $ }); +} +function vl() { + return c$().customError; +} +var CV = {}; +M4(CV, { string: () => Cl, number: () => Tl, date: () => fl, boolean: () => xl, bigint: () => yl }); +function Cl($) { + return Tq(UJ, $); +} +function Tl($) { + return hq(HJ, $); +} +function xl($) { + return uq(KJ, $); +} +function yl($) { + return mq(qJ, $); +} +function fl($) { + return lq(y3, $); +} +c$(A7()); +var NL = K; +var TV = NL; +var C1 = "io.modelcontextprotocol/related-task"; +var l3 = "2.0"; +var a$ = vV(($) => $ !== null && (typeof $ === "object" || typeof $ === "function")); +var OL = A$([L(), z$().int()]); +var DL = L(); +var lV$ = K6({ ttl: z$().optional(), pollInterval: z$().optional() }); +var hl = h({ ttl: z$().optional() }); +var ul = h({ taskId: L() }); +var yV = K6({ progressToken: OL.optional(), [C1]: ul.optional() }); +var h6 = h({ _meta: yV.optional() }); +var BJ = h6.extend({ task: hl.optional() }); +var J6 = h({ method: L(), params: h6.loose().optional() }); +var s6 = h({ _meta: yV.optional() }); +var e6 = h({ method: L(), params: s6.loose().optional() }); +var X6 = K6({ _meta: yV.optional() }); +var c3 = A$([L(), z$().int()]); +var ZL = h({ jsonrpc: l(l3), id: c3, ...J6.shape }).strict(); +var ML = h({ jsonrpc: l(l3), ...e6.shape }).strict(); +var gV = h({ jsonrpc: l(l3), id: c3, result: X6 }).strict(); +var d; +(function($) { + $[$.ConnectionClosed = -32e3] = "ConnectionClosed", $[$.RequestTimeout = -32001] = "RequestTimeout", $[$.ParseError = -32700] = "ParseError", $[$.InvalidRequest = -32600] = "InvalidRequest", $[$.MethodNotFound = -32601] = "MethodNotFound", $[$.InvalidParams = -32602] = "InvalidParams", $[$.InternalError = -32603] = "InternalError", $[$.UrlElicitationRequired = -32042] = "UrlElicitationRequired"; +})(d || (d = {})); +var hV = h({ jsonrpc: l(l3), id: c3.optional(), error: h({ code: z$().int(), message: L(), data: S$().optional() }) }).strict(); +var cV$ = A$([ZL, ML, gV, hV]); +var pV$ = A$([gV, hV]); +var p3 = X6.strict(); +var ml = s6.extend({ requestId: c3.optional(), reason: L().optional() }); +var d3 = e6.extend({ method: l("notifications/cancelled"), params: ml }); +var ll = h({ src: L(), mimeType: L().optional(), sizes: W$(L()).optional(), theme: N6(["light", "dark"]).optional() }); +var NJ = h({ icons: W$(ll).optional() }); +var Y9 = h({ name: L(), title: L().optional() }); +var AL = Y9.extend({ ...Y9.shape, ...NJ.shape, version: L(), websiteUrl: L().optional(), description: L().optional() }); +var cl = VJ(h({ applyDefaults: i$().optional() }), I$(L(), S$())); +var pl = u3(($) => { + if ($ && typeof $ === "object" && !Array.isArray($)) { + if (Object.keys($).length === 0) return { form: {} }; + } + return $; +}, VJ(h({ form: cl.optional(), url: a$.optional() }), I$(L(), S$()).optional())); +var dl = K6({ list: a$.optional(), cancel: a$.optional(), requests: K6({ sampling: K6({ createMessage: a$.optional() }).optional(), elicitation: K6({ create: a$.optional() }).optional() }).optional() }); +var il = K6({ list: a$.optional(), cancel: a$.optional(), requests: K6({ tools: K6({ call: a$.optional() }).optional() }).optional() }); +var nl = h({ experimental: I$(L(), a$).optional(), sampling: h({ context: a$.optional(), tools: a$.optional() }).optional(), elicitation: pl.optional(), roots: h({ listChanged: i$().optional() }).optional(), tasks: dl.optional(), extensions: I$(L(), a$).optional() }); +var rl = h6.extend({ protocolVersion: L(), capabilities: nl, clientInfo: AL }); +var uV = J6.extend({ method: l("initialize"), params: rl }); +var ol = h({ experimental: I$(L(), a$).optional(), logging: a$.optional(), completions: a$.optional(), prompts: h({ listChanged: i$().optional() }).optional(), resources: h({ subscribe: i$().optional(), listChanged: i$().optional() }).optional(), tools: h({ listChanged: i$().optional() }).optional(), tasks: il.optional(), extensions: I$(L(), a$).optional() }); +var tl = X6.extend({ protocolVersion: L(), capabilities: ol, serverInfo: AL, instructions: L().optional() }); +var mV = e6.extend({ method: l("notifications/initialized"), params: s6.optional() }); +var i3 = J6.extend({ method: l("ping"), params: h6.optional() }); +var al = h({ progress: z$(), total: _$(z$()), message: _$(L()) }); +var sl = h({ ...s6.shape, ...al.shape, progressToken: OL }); +var n3 = e6.extend({ method: l("notifications/progress"), params: sl }); +var el = h6.extend({ cursor: DL.optional() }); +var wJ = J6.extend({ params: el.optional() }); +var OJ = X6.extend({ nextCursor: DL.optional() }); +var $c = N6(["working", "input_required", "completed", "failed", "cancelled"]); +var DJ = h({ taskId: L(), status: $c, ttl: A$([z$(), T3()]), createdAt: L(), lastUpdatedAt: L(), pollInterval: _$(z$()), statusMessage: _$(L()) }); +var W9 = X6.extend({ task: DJ }); +var Qc = s6.merge(DJ); +var FJ = e6.extend({ method: l("notifications/tasks/status"), params: Qc }); +var r3 = J6.extend({ method: l("tasks/get"), params: h6.extend({ taskId: L() }) }); +var o3 = X6.merge(DJ); +var t3 = J6.extend({ method: l("tasks/result"), params: h6.extend({ taskId: L() }) }); +var dV$ = X6.loose(); +var a3 = wJ.extend({ method: l("tasks/list") }); +var s3 = OJ.extend({ tasks: W$(DJ) }); +var e3 = J6.extend({ method: l("tasks/cancel"), params: h6.extend({ taskId: L() }) }); +var IL = X6.merge(DJ); +var RL = h({ uri: L(), mimeType: _$(L()), _meta: I$(L(), S$()).optional() }); +var PL = RL.extend({ text: L() }); +var lV = L().refine(($) => { + try { + return atob($), true; + } catch (e2) { + return false; + } +}, { message: "Invalid Base64 string" }); +var EL = RL.extend({ blob: lV }); +var ZJ = N6(["user", "assistant"]); +var G9 = h({ audience: W$(ZJ).optional(), priority: z$().min(0).max(1).optional(), lastModified: Q9.datetime({ offset: true }).optional() }); +var bL = h({ ...Y9.shape, ...NJ.shape, uri: L(), description: _$(L()), mimeType: _$(L()), size: _$(z$()), annotations: G9.optional(), _meta: _$(K6({})) }); +var Jc = h({ ...Y9.shape, ...NJ.shape, uriTemplate: L(), description: _$(L()), mimeType: _$(L()), annotations: G9.optional(), _meta: _$(K6({})) }); +var $W = wJ.extend({ method: l("resources/list") }); +var Xc = OJ.extend({ resources: W$(bL) }); +var QW = wJ.extend({ method: l("resources/templates/list") }); +var Yc = OJ.extend({ resourceTemplates: W$(Jc) }); +var cV = h6.extend({ uri: L() }); +var Wc = cV; +var JW = J6.extend({ method: l("resources/read"), params: Wc }); +var Gc = X6.extend({ contents: W$(A$([PL, EL])) }); +var Uc = e6.extend({ method: l("notifications/resources/list_changed"), params: s6.optional() }); +var Hc = cV; +var Kc = J6.extend({ method: l("resources/subscribe"), params: Hc }); +var qc = cV; +var Vc = J6.extend({ method: l("resources/unsubscribe"), params: qc }); +var Bc = s6.extend({ uri: L() }); +var zc = e6.extend({ method: l("notifications/resources/updated"), params: Bc }); +var Nc = h({ name: L(), description: _$(L()), required: _$(i$()) }); +var wc = h({ ...Y9.shape, ...NJ.shape, description: _$(L()), arguments: _$(W$(Nc)), _meta: _$(K6({})) }); +var XW = wJ.extend({ method: l("prompts/list") }); +var Oc = OJ.extend({ prompts: W$(wc) }); +var Dc = h6.extend({ name: L(), arguments: I$(L(), L()).optional() }); +var YW = J6.extend({ method: l("prompts/get"), params: Dc }); +var pV = h({ type: l("text"), text: L(), annotations: G9.optional(), _meta: I$(L(), S$()).optional() }); +var dV = h({ type: l("image"), data: lV, mimeType: L(), annotations: G9.optional(), _meta: I$(L(), S$()).optional() }); +var iV = h({ type: l("audio"), data: lV, mimeType: L(), annotations: G9.optional(), _meta: I$(L(), S$()).optional() }); +var Fc = h({ type: l("tool_use"), name: L(), id: L(), input: I$(L(), S$()), _meta: I$(L(), S$()).optional() }); +var Zc = h({ type: l("resource"), resource: A$([PL, EL]), annotations: G9.optional(), _meta: I$(L(), S$()).optional() }); +var Mc = bL.extend({ type: l("resource_link") }); +var nV = A$([pV, dV, iV, Mc, Zc]); +var Lc = h({ role: ZJ, content: nV }); +var jc = X6.extend({ description: L().optional(), messages: W$(Lc) }); +var Ac = e6.extend({ method: l("notifications/prompts/list_changed"), params: s6.optional() }); +var Ic = h({ title: L().optional(), readOnlyHint: i$().optional(), destructiveHint: i$().optional(), idempotentHint: i$().optional(), openWorldHint: i$().optional() }); +var Rc = h({ taskSupport: N6(["required", "optional", "forbidden"]).optional() }); +var _L = h({ ...Y9.shape, ...NJ.shape, description: L().optional(), inputSchema: h({ type: l("object"), properties: I$(L(), a$).optional(), required: W$(L()).optional() }).catchall(S$()), outputSchema: h({ type: l("object"), properties: I$(L(), a$).optional(), required: W$(L()).optional() }).catchall(S$()).optional(), annotations: Ic.optional(), execution: Rc.optional(), _meta: I$(L(), S$()).optional() }); +var WW = wJ.extend({ method: l("tools/list") }); +var Pc = OJ.extend({ tools: W$(_L) }); +var GW = X6.extend({ content: W$(nV).default([]), structuredContent: I$(L(), S$()).optional(), isError: i$().optional() }); +var iV$ = GW.or(X6.extend({ toolResult: S$() })); +var Ec = BJ.extend({ name: L(), arguments: I$(L(), S$()).optional() }); +var U9 = J6.extend({ method: l("tools/call"), params: Ec }); +var bc = e6.extend({ method: l("notifications/tools/list_changed"), params: s6.optional() }); +var nV$ = h({ autoRefresh: i$().default(true), debounceMs: z$().int().nonnegative().default(300) }); +var MJ = N6(["debug", "info", "notice", "warning", "error", "critical", "alert", "emergency"]); +var _c = h6.extend({ level: MJ }); +var rV = J6.extend({ method: l("logging/setLevel"), params: _c }); +var kc = s6.extend({ level: MJ, logger: L().optional(), data: S$() }); +var Sc = e6.extend({ method: l("notifications/message"), params: kc }); +var vc = h({ name: L().optional() }); +var Cc = h({ hints: W$(vc).optional(), costPriority: z$().min(0).max(1).optional(), speedPriority: z$().min(0).max(1).optional(), intelligencePriority: z$().min(0).max(1).optional() }); +var Tc = h({ mode: N6(["auto", "required", "none"]).optional() }); +var xc = h({ type: l("tool_result"), toolUseId: L().describe("The unique identifier for the corresponding tool call."), content: W$(nV).default([]), structuredContent: h({}).loose().optional(), isError: i$().optional(), _meta: I$(L(), S$()).optional() }); +var yc = g3("type", [pV, dV, iV]); +var m3 = g3("type", [pV, dV, iV, Fc, xc]); +var fc = h({ role: ZJ, content: A$([m3, W$(m3)]), _meta: I$(L(), S$()).optional() }); +var gc = BJ.extend({ messages: W$(fc), modelPreferences: Cc.optional(), systemPrompt: L().optional(), includeContext: N6(["none", "thisServer", "allServers"]).optional(), temperature: z$().optional(), maxTokens: z$().int(), stopSequences: W$(L()).optional(), metadata: a$.optional(), tools: W$(_L).optional(), toolChoice: Tc.optional() }); +var hc = J6.extend({ method: l("sampling/createMessage"), params: gc }); +var LJ = X6.extend({ model: L(), stopReason: _$(N6(["endTurn", "stopSequence", "maxTokens"]).or(L())), role: ZJ, content: yc }); +var oV = X6.extend({ model: L(), stopReason: _$(N6(["endTurn", "stopSequence", "maxTokens", "toolUse"]).or(L())), role: ZJ, content: A$([m3, W$(m3)]) }); +var uc = h({ type: l("boolean"), title: L().optional(), description: L().optional(), default: i$().optional() }); +var mc = h({ type: l("string"), title: L().optional(), description: L().optional(), minLength: z$().optional(), maxLength: z$().optional(), format: N6(["email", "uri", "date", "date-time"]).optional(), default: L().optional() }); +var lc = h({ type: N6(["number", "integer"]), title: L().optional(), description: L().optional(), minimum: z$().optional(), maximum: z$().optional(), default: z$().optional() }); +var cc = h({ type: l("string"), title: L().optional(), description: L().optional(), enum: W$(L()), default: L().optional() }); +var pc = h({ type: l("string"), title: L().optional(), description: L().optional(), oneOf: W$(h({ const: L(), title: L() })), default: L().optional() }); +var dc = h({ type: l("string"), title: L().optional(), description: L().optional(), enum: W$(L()), enumNames: W$(L()).optional(), default: L().optional() }); +var ic = A$([cc, pc]); +var nc = h({ type: l("array"), title: L().optional(), description: L().optional(), minItems: z$().optional(), maxItems: z$().optional(), items: h({ type: l("string"), enum: W$(L()) }), default: W$(L()).optional() }); +var rc = h({ type: l("array"), title: L().optional(), description: L().optional(), minItems: z$().optional(), maxItems: z$().optional(), items: h({ anyOf: W$(h({ const: L(), title: L() })) }), default: W$(L()).optional() }); +var oc = A$([nc, rc]); +var tc = A$([dc, ic, oc]); +var ac = A$([tc, uc, mc, lc]); +var sc = BJ.extend({ mode: l("form").optional(), message: L(), requestedSchema: h({ type: l("object"), properties: I$(L(), ac), required: W$(L()).optional() }) }); +var ec = BJ.extend({ mode: l("url"), message: L(), elicitationId: L(), url: L().url() }); +var $p = A$([sc, ec]); +var Qp = J6.extend({ method: l("elicitation/create"), params: $p }); +var Jp = s6.extend({ elicitationId: L() }); +var Xp = e6.extend({ method: l("notifications/elicitation/complete"), params: Jp }); +var H9 = X6.extend({ action: N6(["accept", "decline", "cancel"]), content: u3(($) => $ === null ? void 0 : $, I$(L(), A$([L(), z$(), i$(), W$(L())])).optional()) }); +var Yp = h({ type: l("ref/resource"), uri: L() }); +var Wp = h({ type: l("ref/prompt"), name: L() }); +var Gp = h6.extend({ ref: A$([Wp, Yp]), argument: h({ name: L(), value: L() }), context: h({ arguments: I$(L(), L()).optional() }).optional() }); +var UW = J6.extend({ method: l("completion/complete"), params: Gp }); +var Up = X6.extend({ completion: K6({ values: W$(L()).max(100), total: _$(z$().int()), hasMore: _$(i$()) }) }); +var Hp = h({ uri: L().startsWith("file://"), name: L().optional(), _meta: I$(L(), S$()).optional() }); +var Kp = J6.extend({ method: l("roots/list"), params: h6.optional() }); +var tV = X6.extend({ roots: W$(Hp) }); +var qp = e6.extend({ method: l("notifications/roots/list_changed"), params: s6.optional() }); +var rV$ = A$([i3, uV, UW, rV, YW, XW, $W, QW, JW, Kc, Vc, U9, WW, r3, t3, a3, e3]); +var oV$ = A$([d3, n3, mV, qp, FJ]); +var tV$ = A$([p3, LJ, oV, H9, tV, o3, s3, W9]); +var aV$ = A$([i3, hc, Qp, Kp, r3, t3, a3, e3]); +var sV$ = A$([d3, n3, Sc, zc, Uc, bc, Ac, FJ, Xp]); +var eV$ = A$([p3, tl, Up, jc, Oc, Xc, Yc, Gc, GW, Pc, o3, s3, W9]); +var zp = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789"); +var rP = DG($z(), 1); +var oP = DG(nP(), 1); +var sP; +(function($) { + $.Completable = "McpCompletable"; +})(sP || (sP = {})); +function b($) { + let Q; + return () => Q != null ? Q : Q = $(); +} +var es = b(() => K.object({ session_id: K.string(), ws_url: K.string(), work_dir: K.string().optional(), session_key: K.string().optional() })); +var HE; +(function($) { + $[$.lineFeed = 10] = "lineFeed", $[$.carriageReturn = 13] = "carriageReturn", $[$.space = 32] = "space", $[$._0 = 48] = "_0", $[$._1 = 49] = "_1", $[$._2 = 50] = "_2", $[$._3 = 51] = "_3", $[$._4 = 52] = "_4", $[$._5 = 53] = "_5", $[$._6 = 54] = "_6", $[$._7 = 55] = "_7", $[$._8 = 56] = "_8", $[$._9 = 57] = "_9", $[$.a = 97] = "a", $[$.b = 98] = "b", $[$.c = 99] = "c", $[$.d = 100] = "d", $[$.e = 101] = "e", $[$.f = 102] = "f", $[$.g = 103] = "g", $[$.h = 104] = "h", $[$.i = 105] = "i", $[$.j = 106] = "j", $[$.k = 107] = "k", $[$.l = 108] = "l", $[$.m = 109] = "m", $[$.n = 110] = "n", $[$.o = 111] = "o", $[$.p = 112] = "p", $[$.q = 113] = "q", $[$.r = 114] = "r", $[$.s = 115] = "s", $[$.t = 116] = "t", $[$.u = 117] = "u", $[$.v = 118] = "v", $[$.w = 119] = "w", $[$.x = 120] = "x", $[$.y = 121] = "y", $[$.z = 122] = "z", $[$.A = 65] = "A", $[$.B = 66] = "B", $[$.C = 67] = "C", $[$.D = 68] = "D", $[$.E = 69] = "E", $[$.F = 70] = "F", $[$.G = 71] = "G", $[$.H = 72] = "H", $[$.I = 73] = "I", $[$.J = 74] = "J", $[$.K = 75] = "K", $[$.L = 76] = "L", $[$.M = 77] = "M", $[$.N = 78] = "N", $[$.O = 79] = "O", $[$.P = 80] = "P", $[$.Q = 81] = "Q", $[$.R = 82] = "R", $[$.S = 83] = "S", $[$.T = 84] = "T", $[$.U = 85] = "U", $[$.V = 86] = "V", $[$.W = 87] = "W", $[$.X = 88] = "X", $[$.Y = 89] = "Y", $[$.Z = 90] = "Z", $[$.asterisk = 42] = "asterisk", $[$.backslash = 92] = "backslash", $[$.closeBrace = 125] = "closeBrace", $[$.closeBracket = 93] = "closeBracket", $[$.colon = 58] = "colon", $[$.comma = 44] = "comma", $[$.dot = 46] = "dot", $[$.doubleQuote = 34] = "doubleQuote", $[$.minus = 45] = "minus", $[$.openBrace = 123] = "openBrace", $[$.openBracket = 91] = "openBracket", $[$.plus = 43] = "plus", $[$.slash = 47] = "slash", $[$.formFeed = 12] = "formFeed", $[$.tab = 9] = "tab"; +})(HE || (HE = {})); +var He = Array(20).fill(0).map(($, Q) => { + return " ".repeat(Q); +}); +var Ke = { " ": { "\n": Array(200).fill(0).map(($, Q) => { + return ` +` + " ".repeat(Q); +}), "\r": Array(200).fill(0).map(($, Q) => { + return "\r" + " ".repeat(Q); +}), "\r\n": Array(200).fill(0).map(($, Q) => { + return `\r +` + " ".repeat(Q); +}) }, " ": { "\n": Array(200).fill(0).map(($, Q) => { + return ` +` + " ".repeat(Q); +}), "\r": Array(200).fill(0).map(($, Q) => { + return "\r" + " ".repeat(Q); +}), "\r\n": Array(200).fill(0).map(($, Q) => { + return `\r +` + " ".repeat(Q); +}) } }; +var qE; +(function($) { + $.DEFAULT = { allowTrailingComma: false }; +})(qE || (qE = {})); +var VE; +(function($) { + $[$.None = 0] = "None", $[$.UnexpectedEndOfComment = 1] = "UnexpectedEndOfComment", $[$.UnexpectedEndOfString = 2] = "UnexpectedEndOfString", $[$.UnexpectedEndOfNumber = 3] = "UnexpectedEndOfNumber", $[$.InvalidUnicode = 4] = "InvalidUnicode", $[$.InvalidEscapeCharacter = 5] = "InvalidEscapeCharacter", $[$.InvalidCharacter = 6] = "InvalidCharacter"; +})(VE || (VE = {})); +var BE; +(function($) { + $[$.OpenBraceToken = 1] = "OpenBraceToken", $[$.CloseBraceToken = 2] = "CloseBraceToken", $[$.OpenBracketToken = 3] = "OpenBracketToken", $[$.CloseBracketToken = 4] = "CloseBracketToken", $[$.CommaToken = 5] = "CommaToken", $[$.ColonToken = 6] = "ColonToken", $[$.NullKeyword = 7] = "NullKeyword", $[$.TrueKeyword = 8] = "TrueKeyword", $[$.FalseKeyword = 9] = "FalseKeyword", $[$.StringLiteral = 10] = "StringLiteral", $[$.NumericLiteral = 11] = "NumericLiteral", $[$.LineCommentTrivia = 12] = "LineCommentTrivia", $[$.BlockCommentTrivia = 13] = "BlockCommentTrivia", $[$.LineBreakTrivia = 14] = "LineBreakTrivia", $[$.Trivia = 15] = "Trivia", $[$.Unknown = 16] = "Unknown", $[$.EOF = 17] = "EOF"; +})(BE || (BE = {})); +var zE; +(function($) { + $[$.InvalidSymbol = 1] = "InvalidSymbol", $[$.InvalidNumberFormat = 2] = "InvalidNumberFormat", $[$.PropertyNameExpected = 3] = "PropertyNameExpected", $[$.ValueExpected = 4] = "ValueExpected", $[$.ColonExpected = 5] = "ColonExpected", $[$.CommaExpected = 6] = "CommaExpected", $[$.CloseBraceExpected = 7] = "CloseBraceExpected", $[$.CloseBracketExpected = 8] = "CloseBracketExpected", $[$.EndOfFileExpected = 9] = "EndOfFileExpected", $[$.InvalidCommentToken = 10] = "InvalidCommentToken", $[$.UnexpectedEndOfComment = 11] = "UnexpectedEndOfComment", $[$.UnexpectedEndOfString = 12] = "UnexpectedEndOfString", $[$.UnexpectedEndOfNumber = 13] = "UnexpectedEndOfNumber", $[$.InvalidUnicode = 14] = "InvalidUnicode", $[$.InvalidEscapeCharacter = 15] = "InvalidEscapeCharacter", $[$.InvalidCharacter = 16] = "InvalidCharacter"; +})(zE || (zE = {})); +function rW($) { + return $.startsWith("\uFEFF") ? $.slice(1) : $; +} +var c1 = import_node_os.default.homedir(); +var Zz = import_node_os.default.tmpdir(); +var { env: j9 } = import_node_process.default; +var Oe = ($) => { + let Q = import_node_path.default.join(c1, "Library"); + return { data: import_node_path.default.join(Q, "Application Support", $), config: import_node_path.default.join(Q, "Preferences", $), cache: import_node_path.default.join(Q, "Caches", $), log: import_node_path.default.join(Q, "Logs", $), temp: import_node_path.default.join(Zz, $) }; +}; +var De = ($) => { + let Q = j9.APPDATA || import_node_path.default.join(c1, "AppData", "Roaming"), J = j9.LOCALAPPDATA || import_node_path.default.join(c1, "AppData", "Local"); + return { data: import_node_path.default.join(J, $, "Data"), config: import_node_path.default.join(Q, $, "Config"), cache: import_node_path.default.join(J, $, "Cache"), log: import_node_path.default.join(J, $, "Log"), temp: import_node_path.default.join(Zz, $) }; +}; +var Fe = ($) => { + let Q = import_node_path.default.basename(c1); + return { data: import_node_path.default.join(j9.XDG_DATA_HOME || import_node_path.default.join(c1, ".local", "share"), $), config: import_node_path.default.join(j9.XDG_CONFIG_HOME || import_node_path.default.join(c1, ".config"), $), cache: import_node_path.default.join(j9.XDG_CACHE_HOME || import_node_path.default.join(c1, ".cache"), $), log: import_node_path.default.join(j9.XDG_STATE_HOME || import_node_path.default.join(c1, ".local", "state"), $), temp: import_node_path.default.join(Zz, Q, $) }; +}; +function Mz($, { suffix: Q = "nodejs" } = {}) { + if (typeof $ !== "string") throw TypeError(`Expected a string, got ${typeof $}`); + if (Q) $ += `-${Q}`; + if (import_node_process.default.platform === "darwin") return Oe($); + if (import_node_process.default.platform === "win32") return De($); + return Fe($); +} +var HD$ = Mz("claude-cli"); +function Ze() { + if (process.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC) return "essential-traffic"; + if (process.env.DISABLE_TELEMETRY) return "no-telemetry"; + if (R$(process.env.DO_NOT_TRACK)) return "no-telemetry"; + return "default"; +} +function wE() { + return Ze() === "essential-traffic"; +} +var Me = 100; +var Lz = []; +function Le($) { + if (Lz.length >= Me) Lz.shift(); + Lz.push($); +} +var je = []; +var OE = null; +var CD$ = C$(() => { + return process.argv.includes("--hard-fail"); +}); +function oW($) { + let Q = j4($); + try { + if (R$(process.env.CLAUDE_CODE_USE_BEDROCK) || R$(process.env.CLAUDE_CODE_USE_VERTEX) || R$(process.env.CLAUDE_CODE_USE_FOUNDRY) || R$(process.env.CLAUDE_CODE_USE_ANTHROPIC_AWS) || R$(process.env.CLAUDE_CODE_USE_MANTLE) || process.env.DISABLE_ERROR_REPORTING || wE()) return; + let Y = { error: Q.stack || Q.message, timestamp: (/* @__PURE__ */ new Date()).toISOString() }; + if (Le(Y), OE === null) { + je.push({ type: "error", error: Q }); + return; + } + OE.logError(Q); + } catch (e2) { + } +} +var A9 = typeof performance === "object" && performance && typeof performance.now === "function" ? performance : Date; +var FE = /* @__PURE__ */ new Set(); +var jz = typeof process === "object" && !!process ? process : {}; +var ZE = ($, Q, J, Y) => { + typeof jz.emitWarning === "function" ? jz.emitWarning($, Q, J, Y) : console.error(`[${J}] ${Q}: ${$}`); +}; +var tW = globalThis.AbortController; +var DE = globalThis.AbortSignal; +var _a; +if (typeof tW > "u") { + DE = class { + constructor() { + __publicField(this, "onabort"); + __publicField(this, "_onabort", []); + __publicField(this, "reason"); + __publicField(this, "aborted", false); + } + addEventListener(Y, X) { + this._onabort.push(X); + } + }, tW = class { + constructor() { + __publicField(this, "signal", new DE()); + Q(); + } + abort(Y) { + var _a5, _b3; + if (this.signal.aborted) return; + this.signal.reason = Y, this.signal.aborted = true; + for (let X of this.signal._onabort) X(Y); + (_b3 = (_a5 = this.signal).onabort) == null ? void 0 : _b3.call(_a5, Y); + } + }; + let $ = ((_a = jz.env) == null ? void 0 : _a.LRU_CACHE_IGNORE_AC_WARNING) !== "1", Q = () => { + if (!$) return; + $ = false, ZE("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.", "NO_ABORT_CONTROLLER", "ENOTSUP", Q); + }; +} +var Ae = ($) => !FE.has($); +var p1 = ($) => $ && $ === Math.floor($) && $ > 0 && isFinite($); +var ME = ($) => !p1($) ? null : $ <= Math.pow(2, 8) ? Uint8Array : $ <= Math.pow(2, 16) ? Uint16Array : $ <= Math.pow(2, 32) ? Uint32Array : $ <= Number.MAX_SAFE_INTEGER ? rJ : null; +var rJ = class extends Array { + constructor($) { + super($); + this.fill(0); + } +}; +var _X3; +var _I9 = class _I9 { + constructor($, Q) { + __publicField(this, "heap"); + __publicField(this, "length"); + if (!__privateGet(_I9, _X3)) throw TypeError("instantiate Stack using Stack.create(n)"); + this.heap = new Q($), this.length = 0; + } + static create($) { + let Q = ME($); + if (!Q) return []; + __privateSet(_I9, _X3, true); + let J = new _I9($, Q); + return __privateSet(_I9, _X3, false), J; + } + push($) { + this.heap[this.length++] = $; + } + pop() { + return this.heap[--this.length]; + } +}; +_X3 = new WeakMap(); +__privateAdd(_I9, _X3, false); +var I9 = _I9; +var _a2, _b, _X4, _V2, _w2, _O2, _k2, _S, _W, _D, _Y2, _J, _$2, _K2, _B, _H, _G2, _F2, _U, _Z, _M, _z, _L2, _P2, _q2, _aW_instances, x_fn, _E, _R2, _y, _N2, m_fn, _b2, _v, _f, j_fn, A_fn, g_fn, C_fn, T_fn, Q_fn, h_fn, __fn, I_fn, u_fn; +var _aW = class _aW { + constructor($) { + __privateAdd(this, _aW_instances); + __privateAdd(this, _X4); + __privateAdd(this, _V2); + __privateAdd(this, _w2); + __privateAdd(this, _O2); + __privateAdd(this, _k2); + __privateAdd(this, _S); + __publicField(this, "ttl"); + __publicField(this, "ttlResolution"); + __publicField(this, "ttlAutopurge"); + __publicField(this, "updateAgeOnGet"); + __publicField(this, "updateAgeOnHas"); + __publicField(this, "allowStale"); + __publicField(this, "noDisposeOnSet"); + __publicField(this, "noUpdateTTL"); + __publicField(this, "maxEntrySize"); + __publicField(this, "sizeCalculation"); + __publicField(this, "noDeleteOnFetchRejection"); + __publicField(this, "noDeleteOnStaleGet"); + __publicField(this, "allowStaleOnFetchAbort"); + __publicField(this, "allowStaleOnFetchRejection"); + __publicField(this, "ignoreFetchAbort"); + __privateAdd(this, _W); + __privateAdd(this, _D); + __privateAdd(this, _Y2); + __privateAdd(this, _J); + __privateAdd(this, _$2); + __privateAdd(this, _K2); + __privateAdd(this, _B); + __privateAdd(this, _H); + __privateAdd(this, _G2); + __privateAdd(this, _F2); + __privateAdd(this, _U); + __privateAdd(this, _Z); + __privateAdd(this, _M); + __privateAdd(this, _z); + __privateAdd(this, _L2); + __privateAdd(this, _P2); + __privateAdd(this, _q2); + __privateAdd(this, _E, () => { + }); + __privateAdd(this, _R2, () => { + }); + __privateAdd(this, _y, () => { + }); + __privateAdd(this, _N2, () => false); + __privateAdd(this, _b2, ($) => { + }); + __privateAdd(this, _v, ($, Q, J) => { + }); + __privateAdd(this, _f, ($, Q, J, Y) => { + if (J || Y) throw TypeError("cannot set size without setting maxSize or maxEntrySize on cache"); + return 0; + }); + __publicField(this, _a2, "LRUCache"); + let { max: Q = 0, ttl: J, ttlResolution: Y = 1, ttlAutopurge: X, updateAgeOnGet: W, updateAgeOnHas: G, allowStale: U, dispose: H, disposeAfter: q, noDisposeOnSet: V, noUpdateTTL: B, maxSize: z4 = 0, maxEntrySize: N = 0, sizeCalculation: w, fetchMethod: O, memoMethod: D, noDeleteOnFetchRejection: M, noDeleteOnStaleGet: j, allowStaleOnFetchRejection: A, allowStaleOnFetchAbort: S, ignoreFetchAbort: u } = $; + if (Q !== 0 && !p1(Q)) throw TypeError("max option must be a nonnegative integer"); + let G$ = Q ? ME(Q) : Array; + if (!G$) throw Error("invalid max value: " + Q); + if (__privateSet(this, _X4, Q), __privateSet(this, _V2, z4), this.maxEntrySize = N || __privateGet(this, _V2), this.sizeCalculation = w, this.sizeCalculation) { + if (!__privateGet(this, _V2) && !this.maxEntrySize) throw TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize"); + if (typeof this.sizeCalculation !== "function") throw TypeError("sizeCalculation set to non-function"); + } + if (D !== void 0 && typeof D !== "function") throw TypeError("memoMethod must be a function if defined"); + if (__privateSet(this, _S, D), O !== void 0 && typeof O !== "function") throw TypeError("fetchMethod must be a function if specified"); + if (__privateSet(this, _k2, O), __privateSet(this, _P2, !!O), __privateSet(this, _Y2, /* @__PURE__ */ new Map()), __privateSet(this, _J, Array(Q).fill(void 0)), __privateSet(this, _$2, Array(Q).fill(void 0)), __privateSet(this, _K2, new G$(Q)), __privateSet(this, _B, new G$(Q)), __privateSet(this, _H, 0), __privateSet(this, _G2, 0), __privateSet(this, _F2, I9.create(Q)), __privateSet(this, _W, 0), __privateSet(this, _D, 0), typeof H === "function") __privateSet(this, _w2, H); + if (typeof q === "function") __privateSet(this, _O2, q), __privateSet(this, _U, []); + else __privateSet(this, _O2, void 0), __privateSet(this, _U, void 0); + if (__privateSet(this, _L2, !!__privateGet(this, _w2)), __privateSet(this, _q2, !!__privateGet(this, _O2)), this.noDisposeOnSet = !!V, this.noUpdateTTL = !!B, this.noDeleteOnFetchRejection = !!M, this.allowStaleOnFetchRejection = !!A, this.allowStaleOnFetchAbort = !!S, this.ignoreFetchAbort = !!u, this.maxEntrySize !== 0) { + if (__privateGet(this, _V2) !== 0) { + if (!p1(__privateGet(this, _V2))) throw TypeError("maxSize must be a positive integer if specified"); + } + if (!p1(this.maxEntrySize)) throw TypeError("maxEntrySize must be a positive integer if specified"); + __privateMethod(this, _aW_instances, m_fn).call(this); + } + if (this.allowStale = !!U, this.noDeleteOnStaleGet = !!j, this.updateAgeOnGet = !!W, this.updateAgeOnHas = !!G, this.ttlResolution = p1(Y) || Y === 0 ? Y : 1, this.ttlAutopurge = !!X, this.ttl = J || 0, this.ttl) { + if (!p1(this.ttl)) throw TypeError("ttl must be a positive integer if specified"); + __privateMethod(this, _aW_instances, x_fn).call(this); + } + if (__privateGet(this, _X4) === 0 && this.ttl === 0 && __privateGet(this, _V2) === 0) throw TypeError("At least one of max, maxSize, or ttl is required"); + if (!this.ttlAutopurge && !__privateGet(this, _X4) && !__privateGet(this, _V2)) { + if (Ae("LRU_CACHE_UNBOUNDED")) FE.add("LRU_CACHE_UNBOUNDED"), ZE("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.", "UnboundedCacheWarning", "LRU_CACHE_UNBOUNDED", _aW); + } + } + static unsafeExposeInternals($) { + return { starts: __privateGet($, _M), ttls: __privateGet($, _z), sizes: __privateGet($, _Z), keyMap: __privateGet($, _Y2), keyList: __privateGet($, _J), valList: __privateGet($, _$2), next: __privateGet($, _K2), prev: __privateGet($, _B), get head() { + return __privateGet($, _H); + }, get tail() { + return __privateGet($, _G2); + }, free: __privateGet($, _F2), isBackgroundFetch: (Q) => { + var _a5; + return __privateMethod(_a5 = $, _aW_instances, Q_fn).call(_a5, Q); + }, backgroundFetch: (Q, J, Y, X) => { + var _a5; + return __privateMethod(_a5 = $, _aW_instances, T_fn).call(_a5, Q, J, Y, X); + }, moveToTail: (Q) => { + var _a5; + return __privateMethod(_a5 = $, _aW_instances, __fn).call(_a5, Q); + }, indexes: (Q) => { + var _a5; + return __privateMethod(_a5 = $, _aW_instances, j_fn).call(_a5, Q); + }, rindexes: (Q) => { + var _a5; + return __privateMethod(_a5 = $, _aW_instances, A_fn).call(_a5, Q); + }, isStale: (Q) => { + var _a5; + return __privateGet(_a5 = $, _N2).call(_a5, Q); + } }; + } + get max() { + return __privateGet(this, _X4); + } + get maxSize() { + return __privateGet(this, _V2); + } + get calculatedSize() { + return __privateGet(this, _D); + } + get size() { + return __privateGet(this, _W); + } + get fetchMethod() { + return __privateGet(this, _k2); + } + get memoMethod() { + return __privateGet(this, _S); + } + get dispose() { + return __privateGet(this, _w2); + } + get disposeAfter() { + return __privateGet(this, _O2); + } + getRemainingTTL($) { + return __privateGet(this, _Y2).has($) ? 1 / 0 : 0; + } + *entries() { + for (let $ of __privateMethod(this, _aW_instances, j_fn).call(this)) if (__privateGet(this, _$2)[$] !== void 0 && __privateGet(this, _J)[$] !== void 0 && !__privateMethod(this, _aW_instances, Q_fn).call(this, __privateGet(this, _$2)[$])) yield [__privateGet(this, _J)[$], __privateGet(this, _$2)[$]]; + } + *rentries() { + for (let $ of __privateMethod(this, _aW_instances, A_fn).call(this)) if (__privateGet(this, _$2)[$] !== void 0 && __privateGet(this, _J)[$] !== void 0 && !__privateMethod(this, _aW_instances, Q_fn).call(this, __privateGet(this, _$2)[$])) yield [__privateGet(this, _J)[$], __privateGet(this, _$2)[$]]; + } + *keys() { + for (let $ of __privateMethod(this, _aW_instances, j_fn).call(this)) { + let Q = __privateGet(this, _J)[$]; + if (Q !== void 0 && !__privateMethod(this, _aW_instances, Q_fn).call(this, __privateGet(this, _$2)[$])) yield Q; + } + } + *rkeys() { + for (let $ of __privateMethod(this, _aW_instances, A_fn).call(this)) { + let Q = __privateGet(this, _J)[$]; + if (Q !== void 0 && !__privateMethod(this, _aW_instances, Q_fn).call(this, __privateGet(this, _$2)[$])) yield Q; + } + } + *values() { + for (let $ of __privateMethod(this, _aW_instances, j_fn).call(this)) if (__privateGet(this, _$2)[$] !== void 0 && !__privateMethod(this, _aW_instances, Q_fn).call(this, __privateGet(this, _$2)[$])) yield __privateGet(this, _$2)[$]; + } + *rvalues() { + for (let $ of __privateMethod(this, _aW_instances, A_fn).call(this)) if (__privateGet(this, _$2)[$] !== void 0 && !__privateMethod(this, _aW_instances, Q_fn).call(this, __privateGet(this, _$2)[$])) yield __privateGet(this, _$2)[$]; + } + [(_b = Symbol.iterator, _a2 = Symbol.toStringTag, _b)]() { + return this.entries(); + } + find($, Q = {}) { + for (let J of __privateMethod(this, _aW_instances, j_fn).call(this)) { + let Y = __privateGet(this, _$2)[J], X = __privateMethod(this, _aW_instances, Q_fn).call(this, Y) ? Y.__staleWhileFetching : Y; + if (X === void 0) continue; + if ($(X, __privateGet(this, _J)[J], this)) return this.get(__privateGet(this, _J)[J], Q); + } + } + forEach($, Q = this) { + for (let J of __privateMethod(this, _aW_instances, j_fn).call(this)) { + let Y = __privateGet(this, _$2)[J], X = __privateMethod(this, _aW_instances, Q_fn).call(this, Y) ? Y.__staleWhileFetching : Y; + if (X === void 0) continue; + $.call(Q, X, __privateGet(this, _J)[J], this); + } + } + rforEach($, Q = this) { + for (let J of __privateMethod(this, _aW_instances, A_fn).call(this)) { + let Y = __privateGet(this, _$2)[J], X = __privateMethod(this, _aW_instances, Q_fn).call(this, Y) ? Y.__staleWhileFetching : Y; + if (X === void 0) continue; + $.call(Q, X, __privateGet(this, _J)[J], this); + } + } + purgeStale() { + let $ = false; + for (let Q of __privateMethod(this, _aW_instances, A_fn).call(this, { allowStale: true })) if (__privateGet(this, _N2).call(this, Q)) __privateMethod(this, _aW_instances, I_fn).call(this, __privateGet(this, _J)[Q], "expire"), $ = true; + return $; + } + info($) { + let Q = __privateGet(this, _Y2).get($); + if (Q === void 0) return; + let J = __privateGet(this, _$2)[Q], Y = __privateMethod(this, _aW_instances, Q_fn).call(this, J) ? J.__staleWhileFetching : J; + if (Y === void 0) return; + let X = { value: Y }; + if (__privateGet(this, _z) && __privateGet(this, _M)) { + let W = __privateGet(this, _z)[Q], G = __privateGet(this, _M)[Q]; + if (W && G) { + let U = W - (A9.now() - G); + X.ttl = U, X.start = Date.now(); + } + } + if (__privateGet(this, _Z)) X.size = __privateGet(this, _Z)[Q]; + return X; + } + dump() { + let $ = []; + for (let Q of __privateMethod(this, _aW_instances, j_fn).call(this, { allowStale: true })) { + let J = __privateGet(this, _J)[Q], Y = __privateGet(this, _$2)[Q], X = __privateMethod(this, _aW_instances, Q_fn).call(this, Y) ? Y.__staleWhileFetching : Y; + if (X === void 0 || J === void 0) continue; + let W = { value: X }; + if (__privateGet(this, _z) && __privateGet(this, _M)) { + W.ttl = __privateGet(this, _z)[Q]; + let G = A9.now() - __privateGet(this, _M)[Q]; + W.start = Math.floor(Date.now() - G); + } + if (__privateGet(this, _Z)) W.size = __privateGet(this, _Z)[Q]; + $.unshift([J, W]); + } + return $; + } + load($) { + this.clear(); + for (let [Q, J] of $) { + if (J.start) { + let Y = Date.now() - J.start; + J.start = A9.now() - Y; + } + this.set(Q, J.value, J); + } + } + set($, Q, J = {}) { + var _a5, _b3, _c2, _d, _e2; + if (Q === void 0) return this.delete($), this; + let { ttl: Y = this.ttl, start: X, noDisposeOnSet: W = this.noDisposeOnSet, sizeCalculation: G = this.sizeCalculation, status: U } = J, { noUpdateTTL: H = this.noUpdateTTL } = J, q = __privateGet(this, _f).call(this, $, Q, J.size || 0, G); + if (this.maxEntrySize && q > this.maxEntrySize) { + if (U) U.set = "miss", U.maxEntrySizeExceeded = true; + return __privateMethod(this, _aW_instances, I_fn).call(this, $, "set"), this; + } + let V = __privateGet(this, _W) === 0 ? void 0 : __privateGet(this, _Y2).get($); + if (V === void 0) { + if (V = __privateGet(this, _W) === 0 ? __privateGet(this, _G2) : __privateGet(this, _F2).length !== 0 ? __privateGet(this, _F2).pop() : __privateGet(this, _W) === __privateGet(this, _X4) ? __privateMethod(this, _aW_instances, C_fn).call(this, false) : __privateGet(this, _W), __privateGet(this, _J)[V] = $, __privateGet(this, _$2)[V] = Q, __privateGet(this, _Y2).set($, V), __privateGet(this, _K2)[__privateGet(this, _G2)] = V, __privateGet(this, _B)[V] = __privateGet(this, _G2), __privateSet(this, _G2, V), __privateWrapper(this, _W)._++, __privateGet(this, _v).call(this, V, q, U), U) U.set = "add"; + H = false; + } else { + __privateMethod(this, _aW_instances, __fn).call(this, V); + let B = __privateGet(this, _$2)[V]; + if (Q !== B) { + if (__privateGet(this, _P2) && __privateMethod(this, _aW_instances, Q_fn).call(this, B)) { + B.__abortController.abort(Error("replaced")); + let { __staleWhileFetching: z4 } = B; + if (z4 !== void 0 && !W) { + if (__privateGet(this, _L2)) (_a5 = __privateGet(this, _w2)) == null ? void 0 : _a5.call(this, z4, $, "set"); + if (__privateGet(this, _q2)) (_b3 = __privateGet(this, _U)) == null ? void 0 : _b3.push([z4, $, "set"]); + } + } else if (!W) { + if (__privateGet(this, _L2)) (_c2 = __privateGet(this, _w2)) == null ? void 0 : _c2.call(this, B, $, "set"); + if (__privateGet(this, _q2)) (_d = __privateGet(this, _U)) == null ? void 0 : _d.push([B, $, "set"]); + } + if (__privateGet(this, _b2).call(this, V), __privateGet(this, _v).call(this, V, q, U), __privateGet(this, _$2)[V] = Q, U) { + U.set = "replace"; + let z4 = B && __privateMethod(this, _aW_instances, Q_fn).call(this, B) ? B.__staleWhileFetching : B; + if (z4 !== void 0) U.oldValue = z4; + } + } else if (U) U.set = "update"; + } + if (Y !== 0 && !__privateGet(this, _z)) __privateMethod(this, _aW_instances, x_fn).call(this); + if (__privateGet(this, _z)) { + if (!H) __privateGet(this, _y).call(this, V, Y, X); + if (U) __privateGet(this, _R2).call(this, U, V); + } + if (!W && __privateGet(this, _q2) && __privateGet(this, _U)) { + let B = __privateGet(this, _U), z4; + while (z4 = B == null ? void 0 : B.shift()) (_e2 = __privateGet(this, _O2)) == null ? void 0 : _e2.call(this, ...z4); + } + return this; + } + pop() { + var _a5; + try { + while (__privateGet(this, _W)) { + let $ = __privateGet(this, _$2)[__privateGet(this, _H)]; + if (__privateMethod(this, _aW_instances, C_fn).call(this, true), __privateMethod(this, _aW_instances, Q_fn).call(this, $)) { + if ($.__staleWhileFetching) return $.__staleWhileFetching; + } else if ($ !== void 0) return $; + } + } finally { + if (__privateGet(this, _q2) && __privateGet(this, _U)) { + let $ = __privateGet(this, _U), Q; + while (Q = $ == null ? void 0 : $.shift()) (_a5 = __privateGet(this, _O2)) == null ? void 0 : _a5.call(this, ...Q); + } + } + } + has($, Q = {}) { + let { updateAgeOnHas: J = this.updateAgeOnHas, status: Y } = Q, X = __privateGet(this, _Y2).get($); + if (X !== void 0) { + let W = __privateGet(this, _$2)[X]; + if (__privateMethod(this, _aW_instances, Q_fn).call(this, W) && W.__staleWhileFetching === void 0) return false; + if (!__privateGet(this, _N2).call(this, X)) { + if (J) __privateGet(this, _E).call(this, X); + if (Y) Y.has = "hit", __privateGet(this, _R2).call(this, Y, X); + return true; + } else if (Y) Y.has = "stale", __privateGet(this, _R2).call(this, Y, X); + } else if (Y) Y.has = "miss"; + return false; + } + peek($, Q = {}) { + let { allowStale: J = this.allowStale } = Q, Y = __privateGet(this, _Y2).get($); + if (Y === void 0 || !J && __privateGet(this, _N2).call(this, Y)) return; + let X = __privateGet(this, _$2)[Y]; + return __privateMethod(this, _aW_instances, Q_fn).call(this, X) ? X.__staleWhileFetching : X; + } + async fetch($, Q = {}) { + let { allowStale: J = this.allowStale, updateAgeOnGet: Y = this.updateAgeOnGet, noDeleteOnStaleGet: X = this.noDeleteOnStaleGet, ttl: W = this.ttl, noDisposeOnSet: G = this.noDisposeOnSet, size: U = 0, sizeCalculation: H = this.sizeCalculation, noUpdateTTL: q = this.noUpdateTTL, noDeleteOnFetchRejection: V = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection: B = this.allowStaleOnFetchRejection, ignoreFetchAbort: z4 = this.ignoreFetchAbort, allowStaleOnFetchAbort: N = this.allowStaleOnFetchAbort, context: w, forceRefresh: O = false, status: D, signal: M } = Q; + if (!__privateGet(this, _P2)) { + if (D) D.fetch = "get"; + return this.get($, { allowStale: J, updateAgeOnGet: Y, noDeleteOnStaleGet: X, status: D }); + } + let j = { allowStale: J, updateAgeOnGet: Y, noDeleteOnStaleGet: X, ttl: W, noDisposeOnSet: G, size: U, sizeCalculation: H, noUpdateTTL: q, noDeleteOnFetchRejection: V, allowStaleOnFetchRejection: B, allowStaleOnFetchAbort: N, ignoreFetchAbort: z4, status: D, signal: M }, A = __privateGet(this, _Y2).get($); + if (A === void 0) { + if (D) D.fetch = "miss"; + let S = __privateMethod(this, _aW_instances, T_fn).call(this, $, A, j, w); + return S.__returned = S; + } else { + let S = __privateGet(this, _$2)[A]; + if (__privateMethod(this, _aW_instances, Q_fn).call(this, S)) { + let m6 = J && S.__staleWhileFetching !== void 0; + if (D) { + if (D.fetch = "inflight", m6) D.returnedStale = true; + } + return m6 ? S.__staleWhileFetching : S.__returned = S; + } + let u = __privateGet(this, _N2).call(this, A); + if (!O && !u) { + if (D) D.fetch = "hit"; + if (__privateMethod(this, _aW_instances, __fn).call(this, A), Y) __privateGet(this, _E).call(this, A); + if (D) __privateGet(this, _R2).call(this, D, A); + return S; + } + let G$ = __privateMethod(this, _aW_instances, T_fn).call(this, $, A, j, w), e$ = G$.__staleWhileFetching !== void 0 && J; + if (D) { + if (D.fetch = u ? "stale" : "refresh", e$ && u) D.returnedStale = true; + } + return e$ ? G$.__staleWhileFetching : G$.__returned = G$; + } + } + async forceFetch($, Q = {}) { + let J = await this.fetch($, Q); + if (J === void 0) throw Error("fetch() returned undefined"); + return J; + } + memo($, Q = {}) { + let J = __privateGet(this, _S); + if (!J) throw Error("no memoMethod provided to constructor"); + let { context: Y, forceRefresh: X, ...W } = Q, G = this.get($, W); + if (!X && G !== void 0) return G; + let U = J($, G, { options: W, context: Y }); + return this.set($, U, W), U; + } + get($, Q = {}) { + let { allowStale: J = this.allowStale, updateAgeOnGet: Y = this.updateAgeOnGet, noDeleteOnStaleGet: X = this.noDeleteOnStaleGet, status: W } = Q, G = __privateGet(this, _Y2).get($); + if (G !== void 0) { + let U = __privateGet(this, _$2)[G], H = __privateMethod(this, _aW_instances, Q_fn).call(this, U); + if (W) __privateGet(this, _R2).call(this, W, G); + if (__privateGet(this, _N2).call(this, G)) { + if (W) W.get = "stale"; + if (!H) { + if (!X) __privateMethod(this, _aW_instances, I_fn).call(this, $, "expire"); + if (W && J) W.returnedStale = true; + return J ? U : void 0; + } else { + if (W && J && U.__staleWhileFetching !== void 0) W.returnedStale = true; + return J ? U.__staleWhileFetching : void 0; + } + } else { + if (W) W.get = "hit"; + if (H) return U.__staleWhileFetching; + if (__privateMethod(this, _aW_instances, __fn).call(this, G), Y) __privateGet(this, _E).call(this, G); + return U; + } + } else if (W) W.get = "miss"; + } + delete($) { + return __privateMethod(this, _aW_instances, I_fn).call(this, $, "delete"); + } + clear() { + return __privateMethod(this, _aW_instances, u_fn).call(this, "delete"); + } +}; +_X4 = new WeakMap(); +_V2 = new WeakMap(); +_w2 = new WeakMap(); +_O2 = new WeakMap(); +_k2 = new WeakMap(); +_S = new WeakMap(); +_W = new WeakMap(); +_D = new WeakMap(); +_Y2 = new WeakMap(); +_J = new WeakMap(); +_$2 = new WeakMap(); +_K2 = new WeakMap(); +_B = new WeakMap(); +_H = new WeakMap(); +_G2 = new WeakMap(); +_F2 = new WeakMap(); +_U = new WeakMap(); +_Z = new WeakMap(); +_M = new WeakMap(); +_z = new WeakMap(); +_L2 = new WeakMap(); +_P2 = new WeakMap(); +_q2 = new WeakMap(); +_aW_instances = new WeakSet(); +x_fn = function() { + let $ = new rJ(__privateGet(this, _X4)), Q = new rJ(__privateGet(this, _X4)); + __privateSet(this, _z, $), __privateSet(this, _M, Q), __privateSet(this, _y, (X, W, G = A9.now()) => { + if (Q[X] = W !== 0 ? G : 0, $[X] = W, W !== 0 && this.ttlAutopurge) { + let U = setTimeout(() => { + if (__privateGet(this, _N2).call(this, X)) __privateMethod(this, _aW_instances, I_fn).call(this, __privateGet(this, _J)[X], "expire"); + }, W + 1); + if (U.unref) U.unref(); + } + }), __privateSet(this, _E, (X) => { + Q[X] = $[X] !== 0 ? A9.now() : 0; + }), __privateSet(this, _R2, (X, W) => { + if ($[W]) { + let G = $[W], U = Q[W]; + if (!G || !U) return; + X.ttl = G, X.start = U, X.now = J || Y(); + let H = X.now - U; + X.remainingTTL = G - H; + } + }); + let J = 0, Y = () => { + let X = A9.now(); + if (this.ttlResolution > 0) { + J = X; + let W = setTimeout(() => J = 0, this.ttlResolution); + if (W.unref) W.unref(); + } + return X; + }; + this.getRemainingTTL = (X) => { + let W = __privateGet(this, _Y2).get(X); + if (W === void 0) return 0; + let G = $[W], U = Q[W]; + if (!G || !U) return 1 / 0; + let H = (J || Y()) - U; + return G - H; + }, __privateSet(this, _N2, (X) => { + let W = Q[X], G = $[X]; + return !!G && !!W && (J || Y()) - W > G; + }); +}; +_E = new WeakMap(); +_R2 = new WeakMap(); +_y = new WeakMap(); +_N2 = new WeakMap(); +m_fn = function() { + let $ = new rJ(__privateGet(this, _X4)); + __privateSet(this, _D, 0), __privateSet(this, _Z, $), __privateSet(this, _b2, (Q) => { + __privateSet(this, _D, __privateGet(this, _D) - $[Q]), $[Q] = 0; + }), __privateSet(this, _f, (Q, J, Y, X) => { + if (__privateMethod(this, _aW_instances, Q_fn).call(this, J)) return 0; + if (!p1(Y)) if (X) { + if (typeof X !== "function") throw TypeError("sizeCalculation must be a function"); + if (Y = X(J, Q), !p1(Y)) throw TypeError("sizeCalculation return invalid (expect positive integer)"); + } else throw TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set."); + return Y; + }), __privateSet(this, _v, (Q, J, Y) => { + if ($[Q] = J, __privateGet(this, _V2)) { + let X = __privateGet(this, _V2) - $[Q]; + while (__privateGet(this, _D) > X) __privateMethod(this, _aW_instances, C_fn).call(this, true); + } + if (__privateSet(this, _D, __privateGet(this, _D) + $[Q]), Y) Y.entrySize = J, Y.totalCalculatedSize = __privateGet(this, _D); + }); +}; +_b2 = new WeakMap(); +_v = new WeakMap(); +_f = new WeakMap(); +j_fn = function* ({ allowStale: $ = this.allowStale } = {}) { + if (__privateGet(this, _W)) for (let Q = __privateGet(this, _G2); ; ) { + if (!__privateMethod(this, _aW_instances, g_fn).call(this, Q)) break; + if ($ || !__privateGet(this, _N2).call(this, Q)) yield Q; + if (Q === __privateGet(this, _H)) break; + else Q = __privateGet(this, _B)[Q]; + } +}; +A_fn = function* ({ allowStale: $ = this.allowStale } = {}) { + if (__privateGet(this, _W)) for (let Q = __privateGet(this, _H); ; ) { + if (!__privateMethod(this, _aW_instances, g_fn).call(this, Q)) break; + if ($ || !__privateGet(this, _N2).call(this, Q)) yield Q; + if (Q === __privateGet(this, _G2)) break; + else Q = __privateGet(this, _K2)[Q]; + } +}; +g_fn = function($) { + return $ !== void 0 && __privateGet(this, _Y2).get(__privateGet(this, _J)[$]) === $; +}; +C_fn = function($) { + var _a5, _b3; + let Q = __privateGet(this, _H), J = __privateGet(this, _J)[Q], Y = __privateGet(this, _$2)[Q]; + if (__privateGet(this, _P2) && __privateMethod(this, _aW_instances, Q_fn).call(this, Y)) Y.__abortController.abort(Error("evicted")); + else if (__privateGet(this, _L2) || __privateGet(this, _q2)) { + if (__privateGet(this, _L2)) (_a5 = __privateGet(this, _w2)) == null ? void 0 : _a5.call(this, Y, J, "evict"); + if (__privateGet(this, _q2)) (_b3 = __privateGet(this, _U)) == null ? void 0 : _b3.push([Y, J, "evict"]); + } + if (__privateGet(this, _b2).call(this, Q), $) __privateGet(this, _J)[Q] = void 0, __privateGet(this, _$2)[Q] = void 0, __privateGet(this, _F2).push(Q); + if (__privateGet(this, _W) === 1) __privateSet(this, _H, __privateSet(this, _G2, 0)), __privateGet(this, _F2).length = 0; + else __privateSet(this, _H, __privateGet(this, _K2)[Q]); + return __privateGet(this, _Y2).delete(J), __privateWrapper(this, _W)._--, Q; +}; +T_fn = function($, Q, J, Y) { + let X = Q === void 0 ? void 0 : __privateGet(this, _$2)[Q]; + if (__privateMethod(this, _aW_instances, Q_fn).call(this, X)) return X; + let W = new tW(), { signal: G } = J; + G == null ? void 0 : G.addEventListener("abort", () => W.abort(G.reason), { signal: W.signal }); + let U = { signal: W.signal, options: J, context: Y }, H = (w, O = false) => { + let { aborted: D } = W.signal, M = J.ignoreFetchAbort && w !== void 0; + if (J.status) if (D && !O) { + if (J.status.fetchAborted = true, J.status.fetchError = W.signal.reason, M) J.status.fetchAbortIgnored = true; + } else J.status.fetchResolved = true; + if (D && !M && !O) return V(W.signal.reason); + let j = z4; + if (__privateGet(this, _$2)[Q] === z4) if (w === void 0) if (j.__staleWhileFetching) __privateGet(this, _$2)[Q] = j.__staleWhileFetching; + else __privateMethod(this, _aW_instances, I_fn).call(this, $, "fetch"); + else { + if (J.status) J.status.fetchUpdated = true; + this.set($, w, U.options); + } + return w; + }, q = (w) => { + if (J.status) J.status.fetchRejected = true, J.status.fetchError = w; + return V(w); + }, V = (w) => { + let { aborted: O } = W.signal, D = O && J.allowStaleOnFetchAbort, M = D || J.allowStaleOnFetchRejection, j = M || J.noDeleteOnFetchRejection, A = z4; + if (__privateGet(this, _$2)[Q] === z4) { + if (!j || A.__staleWhileFetching === void 0) __privateMethod(this, _aW_instances, I_fn).call(this, $, "fetch"); + else if (!D) __privateGet(this, _$2)[Q] = A.__staleWhileFetching; + } + if (M) { + if (J.status && A.__staleWhileFetching !== void 0) J.status.returnedStale = true; + return A.__staleWhileFetching; + } else if (A.__returned === A) throw w; + }, B = (w, O) => { + var _a5; + let D = (_a5 = __privateGet(this, _k2)) == null ? void 0 : _a5.call(this, $, X, U); + if (D && D instanceof Promise) D.then((M) => w(M === void 0 ? void 0 : M), O); + W.signal.addEventListener("abort", () => { + if (!J.ignoreFetchAbort || J.allowStaleOnFetchAbort) { + if (w(void 0), J.allowStaleOnFetchAbort) w = (M) => H(M, true); + } + }); + }; + if (J.status) J.status.fetchDispatched = true; + let z4 = new Promise(B).then(H, q), N = Object.assign(z4, { __abortController: W, __staleWhileFetching: X, __returned: void 0 }); + if (Q === void 0) this.set($, N, { ...U.options, status: void 0 }), Q = __privateGet(this, _Y2).get($); + else __privateGet(this, _$2)[Q] = N; + return N; +}; +Q_fn = function($) { + if (!__privateGet(this, _P2)) return false; + let Q = $; + return !!Q && Q instanceof Promise && Q.hasOwnProperty("__staleWhileFetching") && Q.__abortController instanceof tW; +}; +h_fn = function($, Q) { + __privateGet(this, _B)[Q] = $, __privateGet(this, _K2)[$] = Q; +}; +__fn = function($) { + if ($ !== __privateGet(this, _G2)) { + if ($ === __privateGet(this, _H)) __privateSet(this, _H, __privateGet(this, _K2)[$]); + else __privateMethod(this, _aW_instances, h_fn).call(this, __privateGet(this, _B)[$], __privateGet(this, _K2)[$]); + __privateMethod(this, _aW_instances, h_fn).call(this, __privateGet(this, _G2), $), __privateSet(this, _G2, $); + } +}; +I_fn = function($, Q) { + var _a5, _b3, _c2, _d; + let J = false; + if (__privateGet(this, _W) !== 0) { + let Y = __privateGet(this, _Y2).get($); + if (Y !== void 0) if (J = true, __privateGet(this, _W) === 1) __privateMethod(this, _aW_instances, u_fn).call(this, Q); + else { + __privateGet(this, _b2).call(this, Y); + let X = __privateGet(this, _$2)[Y]; + if (__privateMethod(this, _aW_instances, Q_fn).call(this, X)) X.__abortController.abort(Error("deleted")); + else if (__privateGet(this, _L2) || __privateGet(this, _q2)) { + if (__privateGet(this, _L2)) (_a5 = __privateGet(this, _w2)) == null ? void 0 : _a5.call(this, X, $, Q); + if (__privateGet(this, _q2)) (_b3 = __privateGet(this, _U)) == null ? void 0 : _b3.push([X, $, Q]); + } + if (__privateGet(this, _Y2).delete($), __privateGet(this, _J)[Y] = void 0, __privateGet(this, _$2)[Y] = void 0, Y === __privateGet(this, _G2)) __privateSet(this, _G2, __privateGet(this, _B)[Y]); + else if (Y === __privateGet(this, _H)) __privateSet(this, _H, __privateGet(this, _K2)[Y]); + else { + let W = __privateGet(this, _B)[Y]; + __privateGet(this, _K2)[W] = __privateGet(this, _K2)[Y]; + let G = __privateGet(this, _K2)[Y]; + __privateGet(this, _B)[G] = __privateGet(this, _B)[Y]; + } + __privateWrapper(this, _W)._--, __privateGet(this, _F2).push(Y); + } + } + if (__privateGet(this, _q2) && ((_c2 = __privateGet(this, _U)) == null ? void 0 : _c2.length)) { + let Y = __privateGet(this, _U), X; + while (X = Y == null ? void 0 : Y.shift()) (_d = __privateGet(this, _O2)) == null ? void 0 : _d.call(this, ...X); + } + return J; +}; +u_fn = function($) { + var _a5, _b3, _c2; + for (let Q of __privateMethod(this, _aW_instances, A_fn).call(this, { allowStale: true })) { + let J = __privateGet(this, _$2)[Q]; + if (__privateMethod(this, _aW_instances, Q_fn).call(this, J)) J.__abortController.abort(Error("deleted")); + else { + let Y = __privateGet(this, _J)[Q]; + if (__privateGet(this, _L2)) (_a5 = __privateGet(this, _w2)) == null ? void 0 : _a5.call(this, J, Y, $); + if (__privateGet(this, _q2)) (_b3 = __privateGet(this, _U)) == null ? void 0 : _b3.push([J, Y, $]); + } + } + if (__privateGet(this, _Y2).clear(), __privateGet(this, _$2).fill(void 0), __privateGet(this, _J).fill(void 0), __privateGet(this, _z) && __privateGet(this, _M)) __privateGet(this, _z).fill(0), __privateGet(this, _M).fill(0); + if (__privateGet(this, _Z)) __privateGet(this, _Z).fill(0); + if (__privateSet(this, _H, 0), __privateSet(this, _G2, 0), __privateGet(this, _F2).length = 0, __privateSet(this, _D, 0), __privateSet(this, _W, 0), __privateGet(this, _q2) && __privateGet(this, _U)) { + let Q = __privateGet(this, _U), J; + while (J = Q == null ? void 0 : Q.shift()) (_c2 = __privateGet(this, _O2)) == null ? void 0 : _c2.call(this, ...J); + } +}; +var aW = _aW; +function LE($, Q, J = 100) { + let Y = new aW({ max: J }), X = (...W) => { + let G = Q(...W), U = Y.get(G); + if (U !== void 0) return U; + let H = $(...W); + return Y.set(G, H), H; + }; + return X.cache = { clear: () => Y.clear(), size: () => Y.size, delete: (W) => Y.delete(W), get: (W) => Y.peek(W), has: (W) => Y.has(W) }, X; +} +var Ie = 8192; +function AE($, Q) { + try { + return { ok: true, value: JSON.parse(rW($)) }; + } catch (J) { + if (Q) oW(J); + return { ok: false }; + } +} +var jE = LE(AE, ($) => $, 50); +var R9 = Object.assign(function(Q, J = true) { + if (!Q) return null; + let Y = Q.length > Ie ? AE(Q, J) : jE(Q, J); + return Y.ok ? Y.value : null; +}, { cache: jE.cache }); +var u0 = C$(() => { + try { + if (process.platform === "darwin") return "macos"; + if (process.platform === "win32") return "windows"; + if (process.platform === "linux") { + if (process.env.WSL_DISTRO_NAME || process.env.WSL_INTEROP) return "wsl"; + try { + let $ = l$().readFileSync("/proc/version", { encoding: "utf8" }); + if ($.toLowerCase().includes("microsoft") || $.toLowerCase().includes("wsl")) return "wsl"; + } catch ($) { + X$(`Failed to read /proc/version for WSL detection: ${$}`, { level: "error" }); + } + return "linux"; + } + return "unknown"; + } catch ($) { + return oW($), "unknown"; + } +}); +var WF$ = C$(() => { + if (process.platform !== "linux") return; + try { + let $ = l$().readFileSync("/proc/version", { encoding: "utf8" }), Q = $.match(/WSL(\d+)/i); + if (Q && Q[1]) return Q[1]; + if ($.toLowerCase().includes("microsoft")) return "1"; + return; + } catch ($) { + X$(`Failed to read /proc/version for WSL detection: ${$}`, { level: "error" }); + return; + } +}); +var GF$ = C$(async () => { + if (process.platform !== "linux") return; + let $ = { linuxKernel: (0, import_os4.release)() }; + try { + let Q = await (0, import_promises11.readFile)("/etc/os-release", "utf8"); + for (let J of Q.split(` +`)) { + let Y = J.match(/^(ID|VERSION_ID)=(.*)$/); + if (Y && Y[1] && Y[2]) { + let X = Y[2].replace(/^"|"$/g, ""); + if (Y[1] === "ID") $.linuxDistroId = X; + else $.linuxDistroVersion = X; + } + } + } catch (e2) { + } + return $; +}); +var UF$ = C$(() => { + if (process.platform !== "darwin") return; + let Q = (0, import_os4.release)().match(/^(\d+)\./); + if (!Q || !Q[1]) return; + return parseInt(Q[1], 10) - 9; +}); +var m0 = C$(function() { + switch (u0()) { + case "macos": + return "/Library/Application Support/ClaudeCode"; + case "windows": + return "C:\\Program Files\\ClaudeCode"; + default: + return "/etc/claude-code"; + } +}); +var BF$ = C$(function() { + return (0, import_path15.join)(m0(), "managed-settings.d"); +}); +var Ee = b(() => K.object({ allowedDomains: K.array(K.string()).optional(), deniedDomains: K.array(K.string()).optional().describe("Domains that are always blocked, even if matched by allowedDomains. Supports the same wildcard syntax as allowedDomains. Merged from all settings sources regardless of allowManagedDomainsOnly."), allowManagedDomainsOnly: K.boolean().optional().describe("When true (and set in managed settings), only allowedDomains and WebFetch(domain:...) allow rules from managed settings are respected. User, project, local, and flag settings domains are ignored. Denied domains are still respected from all sources."), allowUnixSockets: K.array(K.string()).optional().describe("macOS only: Unix socket paths to allow. Ignored on Linux (seccomp cannot filter by path)."), allowAllUnixSockets: K.boolean().optional().describe("If true, allow all Unix sockets (disables blocking on both platforms)."), allowLocalBinding: K.boolean().optional(), allowMachLookup: K.array(K.string().refine(($) => { + return !($.endsWith("*") ? $.slice(0, -1) : $).includes("*"); +}, { message: 'Wildcards are only allowed as a single trailing "*" (e.g., "com.example.*" or "*" for all services).' })).optional().describe('macOS only: Additional XPC/Mach service names to allow looking up. Supports trailing-wildcard prefix matching (e.g., "com.apple.coresimulator.*"). Needed for tools that communicate via XPC such as the iOS Simulator or Playwright.'), httpProxyPort: K.number().optional(), socksProxyPort: K.number().optional(), tlsTerminate: K.object({ caCertPath: K.string().min(1).optional(), caKeyPath: K.string().min(1).optional() }).optional().describe("[EXPERIMENTAL] Enable in-process TLS termination so the per-request filter can see HTTPS request bodies. Provide a CA cert+key, or omit both to have sandbox-runtime generate an ephemeral one for the session.") }).optional()); +var be = b(() => K.object({ allowWrite: K.array(K.string()).optional().describe("Additional paths to allow writing within the sandbox. Merged with paths from Edit(...) allow permission rules."), denyWrite: K.array(K.string()).optional().describe("Additional paths to deny writing within the sandbox. Merged with paths from Edit(...) deny permission rules."), denyRead: K.array(K.string()).optional().describe("Additional paths to deny reading within the sandbox. Merged with paths from Read(...) deny permission rules."), allowRead: K.array(K.string()).optional().describe("Paths to re-allow reading within denyRead regions. Takes precedence over denyRead for matching paths."), allowManagedReadPathsOnly: K.boolean().optional().describe("When true (set in managed settings), only allowRead paths from policySettings are used.") }).optional()); +var PE = b(() => K.object({ enabled: K.boolean().optional(), failIfUnavailable: K.boolean().optional().describe("Exit with an error at startup if sandbox.enabled is true but the sandbox cannot start (missing dependencies or unsupported platform). When false (default), a warning is shown and commands run unsandboxed. Intended for managed-settings deployments that require sandboxing as a hard gate."), autoAllowBashIfSandboxed: K.boolean().optional(), allowUnsandboxedCommands: K.boolean().optional().describe("Allow commands to run outside the sandbox via the dangerouslyDisableSandbox parameter. When false, the dangerouslyDisableSandbox parameter is completely ignored and all commands must run sandboxed. Default: true."), network: Ee(), filesystem: be(), ignoreViolations: K.record(K.string(), K.array(K.string())).optional(), enableWeakerNestedSandbox: K.boolean().optional(), enableWeakerNetworkIsolation: K.boolean().optional().describe("macOS only: Allow access to com.apple.trustd.agent in the sandbox. Needed for Go-based CLI tools (gh, gcloud, terraform, etc.) to verify TLS certificates when using httpProxyPort with a MITM proxy and custom CA. **Reduces security** \u2014 opens a potential data exfiltration vector through the trustd service. Default: false"), excludedCommands: K.array(K.string()).optional(), ripgrep: K.object({ command: K.string(), args: K.array(K.string()).optional() }).optional().describe("Custom ripgrep configuration for bundled ripgrep support"), bwrapPath: K.preprocess(($) => typeof $ === "string" && (0, import_path16.isAbsolute)($) ? $ : void 0, K.string()).optional().catch(void 0).describe("Linux/WSL only: Absolute path to the bwrap (bubblewrap) binary. Overrides auto-detection via PATH. Only honored from admin-controlled managed settings."), socatPath: K.preprocess(($) => typeof $ === "string" && (0, import_path16.isAbsolute)($) ? $ : void 0, K.string()).optional().catch(void 0).describe("Linux/WSL only: Absolute path to the socat binary used for the sandbox network proxy. Overrides auto-detection via PATH. Only honored from admin-controlled managed settings.") }).passthrough()); +var EE = ["auto", "iterm2", "iterm2_with_bell", "terminal_bell", "kitty", "ghostty", "notifications_disabled"]; +var bE = ["normal", "vim"]; +var _E2 = ["auto", "tmux", "in-process"]; +var _e = ["dark", "light", "light-daltonized", "dark-daltonized", "light-ansi", "dark-ansi"]; +var kE = ["auto", ..._e]; +var MF$ = u0() === "macos" ? "\u23FA" : "\u25CF"; +var oJ = ["acceptEdits", "auto", "bypassPermissions", "default", "dontAsk", "plan"]; +var ke = [...oJ, "bubble"]; +var SE = ke; +var bF$ = b(() => TV.enum(SE)); +var _F$ = b(() => TV.enum(oJ)); +var vE = ["bash", "powershell"]; +var tJ = b(() => K.string().optional().describe('Permission rule syntax to filter when this hook runs (e.g., "Bash(git *)"). Only runs if the tool call matches the pattern. Avoids spawning hooks for non-matching commands.')); +function Se() { + let $ = K.object({ type: K.literal("command").describe("Shell command hook type"), command: K.string().describe("Shell command to execute"), args: K.array(K.string()).optional().describe("Argument list for exec form. When present, `command` is resolved as an executable and spawned directly with these arguments \u2014 no shell. Path placeholders like ${CLAUDE_PLUGIN_ROOT} are substituted per-element as plain strings, so paths with quotes, $, or backticks never reach a shell parser. When absent, `command` runs through a shell (bash on POSIX, PowerShell on Windows without Git Bash)."), if: tJ(), shell: K.enum(vE).optional().describe("Shell interpreter. 'bash' uses your $SHELL (bash/zsh/sh); 'powershell' uses pwsh. Defaults to bash (powershell on Windows without Git Bash)."), timeout: K.number().positive().optional().describe("Timeout in seconds for this specific command"), statusMessage: K.string().optional().describe("Custom status message to display in spinner while hook runs"), once: K.boolean().optional().describe("If true, hook runs once and is removed after execution"), async: K.boolean().optional().describe("If true, hook runs in background without blocking"), asyncRewake: K.boolean().optional().describe("If true, hook runs in background and wakes the model on exit code 2 (blocking error). Implies async."), rewakeMessage: K.string().min(1).optional().describe("@internal Custom prefix for the system-reminder shown to the model when an asyncRewake hook exits with code 2. The hook output is appended after this prefix."), rewakeSummary: K.string().min(1).optional().describe('@internal One-line summary shown to the user in the terminal when an asyncRewake hook exits with code 2. Defaults to "Stop hook feedback".') }), Q = K.object({ type: K.literal("prompt").describe("LLM prompt hook type"), prompt: K.string().describe("Prompt to evaluate with LLM. Use $ARGUMENTS placeholder for hook input JSON."), if: tJ(), timeout: K.number().positive().optional().describe("Timeout in seconds for this specific prompt evaluation"), model: K.string().optional().describe('Model to use for this prompt hook (e.g., "claude-sonnet-4-6"). If not specified, uses the default small fast model.'), continueOnBlock: K.boolean().optional().describe(`Sets the continue value for the decision:"block" produced when ok is false. Default false (turn ends). Whether continue:true lets the turn proceed depends on the event's decision:"block" semantics. On PostToolUse, the reason is fed back to Claude and the turn continues.`), statusMessage: K.string().optional().describe("Custom status message to display in spinner while hook runs"), once: K.boolean().optional().describe("If true, hook runs once and is removed after execution") }), J = K.object({ type: K.literal("mcp_tool").describe("MCP tool hook type"), server: K.string().describe("Name of an already-configured MCP server to invoke"), tool: K.string().describe("Name of the tool on that server to call"), input: K.record(K.string(), K.unknown()).optional().describe('Arguments passed to the MCP tool. String values support ${path} interpolation from the hook input JSON (e.g. "${tool_input.file_path}").'), if: tJ(), timeout: K.number().positive().optional().describe("Timeout in seconds for this specific tool call"), statusMessage: K.string().optional().describe("Custom status message to display in spinner while hook runs"), once: K.boolean().optional().describe("If true, hook runs once and is removed after execution") }), Y = K.object({ type: K.literal("http").describe("HTTP hook type"), url: K.string().url().describe("URL to POST the hook input JSON to"), if: tJ(), timeout: K.number().positive().optional().describe("Timeout in seconds for this specific request"), headers: K.record(K.string(), K.string()).optional().describe('Additional headers to include in the request. Values may reference environment variables using $VAR_NAME or ${VAR_NAME} syntax (e.g., "Authorization": "Bearer $MY_TOKEN"). Only variables listed in allowedEnvVars will be interpolated.'), allowedEnvVars: K.array(K.string()).optional().describe("Explicit list of environment variable names that may be interpolated in header values. Only variables listed here will be resolved; all other $VAR references are left as empty strings. Required for env var interpolation to work."), statusMessage: K.string().optional().describe("Custom status message to display in spinner while hook runs"), once: K.boolean().optional().describe("If true, hook runs once and is removed after execution") }), X = K.object({ type: K.literal("agent").describe("Agentic verifier hook type"), prompt: K.string().describe('Prompt describing what to verify (e.g. "Verify that unit tests ran and passed."). Use $ARGUMENTS placeholder for hook input JSON.'), if: tJ(), timeout: K.number().positive().optional().describe("Timeout in seconds for agent execution (default 60)"), model: K.string().optional().describe('Model to use for this agent hook (e.g., "claude-sonnet-4-6"). If not specified, uses Haiku.'), statusMessage: K.string().optional().describe("Custom status message to display in spinner while hook runs"), once: K.boolean().optional().describe("If true, hook runs once and is removed after execution") }); + return { BashCommandHookSchema: $, PromptHookSchema: Q, HttpHookSchema: Y, AgentHookSchema: X, McpToolHookSchema: J }; +} +var CE = b(() => { + let { BashCommandHookSchema: $, PromptHookSchema: Q, AgentHookSchema: J, HttpHookSchema: Y, McpToolHookSchema: X } = Se(); + return K.discriminatedUnion("type", [$, Q, J, Y, X]); +}); +var TE = b(() => K.object({ matcher: K.string().optional().describe('String pattern to match (e.g. tool names like "Write")'), hooks: K.array(CE()).describe("List of hooks to execute when the matcher matches") })); +var l0 = b(() => K.partialRecord(K.enum(r0), K.array(TE()))); +var hF$ = b(() => K.enum(["local", "user", "project", "dynamic", "enterprise", "claudeai", "managed", "agent"])); +var uF$ = b(() => K.enum(["stdio", "sse", "sse-ide", "http", "ws", "sdk"])); +var P9 = b(() => K.literal("comms").optional().catch(void 0)); +var d1 = b(() => K.number().int().positive()); +var ve = b(() => K.object({ type: K.literal("stdio").optional(), command: K.string().min(1, "Command cannot be empty"), args: K.array(K.string()).default([]), env: K.record(K.string(), K.string()).optional(), timeout: d1().optional(), alwaysLoad: K.boolean().optional(), role: P9() })); +var Ce = b(() => K.boolean()); +var xE = b(() => K.object({ clientId: K.string().optional(), callbackPort: K.number().int().positive().optional(), authServerMetadataUrl: K.string().url().startsWith("https://", { message: "authServerMetadataUrl must use https://" }).optional(), scopes: K.string().min(1).optional(), xaa: Ce().optional() })); +var Te = b(() => K.object({ type: K.literal("sse"), url: K.string(), headers: K.record(K.string(), K.string()).optional(), headersHelper: K.string().optional(), oauth: xE().optional(), timeout: d1().optional(), alwaysLoad: K.boolean().optional(), role: P9() })); +var xe = b(() => K.object({ type: K.literal("sse-ide"), url: K.string(), ideName: K.string(), ideRunningInWindows: K.boolean().optional(), timeout: d1().optional(), alwaysLoad: K.boolean().optional(), role: P9() })); +var ye = b(() => K.object({ type: K.literal("ws-ide"), url: K.string(), ideName: K.string(), authToken: K.string().optional(), ideRunningInWindows: K.boolean().optional(), timeout: d1().optional(), alwaysLoad: K.boolean().optional(), role: P9() })); +var fe = b(() => K.object({ type: K.enum(["http", "streamable-http"]).transform(() => "http"), url: K.string(), headers: K.record(K.string(), K.string()).optional(), headersHelper: K.string().optional(), oauth: xE().optional(), timeout: d1().optional(), alwaysLoad: K.boolean().optional(), role: P9() })); +var ge = b(() => K.object({ type: K.literal("ws"), url: K.string(), headers: K.record(K.string(), K.string()).optional(), headersHelper: K.string().optional(), timeout: d1().optional(), alwaysLoad: K.boolean().optional(), role: P9() })); +var he = b(() => K.object({ type: K.literal("sdk"), name: K.string(), timeout: d1().optional(), alwaysLoad: K.boolean().optional() })); +var ue = b(() => K.enum(["allow", "ask", "blocked"])); +var me = b(() => K.object({ type: K.literal("claudeai-proxy"), url: K.string(), id: K.string(), timeout: d1().optional(), alwaysLoad: K.boolean().optional(), toolPermissions: K.record(K.string(), ue()).optional() })); +var sW = b(() => K.union([ve(), Te(), xe(), ye(), fe(), ge(), he(), me()])); +var mF$ = b(() => K.object({ mcpServers: K.record(K.string(), sW()) })); +var hE = /* @__PURE__ */ new Set(["claude-code-marketplace", "claude-code-plugins", "claude-plugins-official", "anthropic-marketplace", "anthropic-plugins", "agent-skills", "anthropic-agent-skills", "life-sciences", "knowledge-work-plugins", "claude-for-legal", "claude-for-financial-services", "financial-services-plugins"]); +var le = /(?:official[^a-z0-9]*(anthropic|claude)|(?:anthropic|claude)[^a-z0-9]*official|^(?:anthropic|claude)[^a-z0-9]*(marketplace|plugins|official))/i; +var ce = /[^\u0020-\u007E]/; +function pe($) { + if (hE.has($.toLowerCase())) return false; + if (ce.test($)) return true; + return le.test($); +} +var Z4 = b(() => K.string().startsWith("./")); +var c0 = b(() => Z4().endsWith(".json")); +var yE = b(() => K.union([Z4().refine(($) => $.endsWith(".mcpb") || $.endsWith(".dxt"), { message: "MCPB file path must end with .mcpb or .dxt" }).describe("Path to MCPB file relative to plugin root"), K.string().url().refine(($) => $.endsWith(".mcpb") || $.endsWith(".dxt"), { message: "MCPB URL must end with .mcpb or .dxt" }).describe("URL to MCPB file")])); +var Iz = b(() => Z4().endsWith(".md")); +var Rz = b(() => K.union([Iz(), Z4()])); +var uE = b(() => K.string().min(1, "Marketplace must have a name").refine(($) => !$.includes(" "), { message: 'Marketplace name cannot contain spaces. Use kebab-case (e.g., "my-marketplace")' }).refine(($) => !$.includes("/") && !$.includes("\\") && !$.includes("..") && $ !== ".", { message: 'Marketplace name cannot contain path separators (/ or \\), ".." sequences, or be "."' }).refine(($) => !pe($), { message: "Marketplace name impersonates an official Anthropic/Claude marketplace" }).refine(($) => $.toLowerCase() !== "inline", { message: 'Marketplace name "inline" is reserved for --plugin-dir session plugins' }).refine(($) => $.toLowerCase() !== "builtin", { message: 'Marketplace name "builtin" is reserved for built-in plugins' }).refine(($) => $.toLowerCase() !== "skills-dir", { message: 'Marketplace name "skills-dir" is reserved for plugins auto-loaded from .claude/skills/' })); +var Pz = b(() => K.object({ name: K.string().min(1, "Author name cannot be empty").describe("Display name of the plugin author or organization"), email: K.string().optional().describe("Contact email for support or feedback"), url: K.string().optional().describe("Website, GitHub profile, or organization URL") })); +var de = b(() => K.object({ $schema: K.string().optional().describe("JSON Schema reference for editor autocomplete/validation; ignored at load time"), name: K.string().min(1, "Plugin name cannot be empty").refine(($) => !$.includes(" "), { message: 'Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin")' }).describe("Unique identifier for the plugin, used for namespacing (prefer kebab-case)"), displayName: K.string().optional().describe('Human-readable name shown in UI (e.g., "GitHub Utils"). Falls back to `name` when omitted. Unlike `name`, may contain spaces and any casing; not used for namespacing or lookup.'), version: K.string().optional().describe("Semantic version (e.g., 1.2.3) following semver.org specification"), description: K.string().optional().describe("Brief, user-facing explanation of what the plugin provides"), author: Pz().optional().describe("Information about the plugin creator or maintainer"), homepage: K.string().url().optional().describe("Plugin homepage or documentation URL"), repository: K.string().optional().describe("Source code repository URL"), license: K.string().optional().describe("SPDX license identifier (e.g., MIT, Apache-2.0)"), keywords: K.array(K.string()).optional().describe("Tags for plugin discovery and categorization"), defaultEnabled: K.boolean().optional().describe("Whether the plugin starts enabled when the user has no explicit enabled/disabled setting for it (default: true). Explicit enabledPlugins values always win, and a plugin required by an enabled dependent is enabled regardless of this value."), dependencies: K.array(w$$()).optional().describe(`Plugins that must be enabled for this plugin to function. Bare names (no "@marketplace") are resolved against the declaring plugin's own marketplace.`) })); +var oF$ = b(() => K.object({ description: K.string().optional().describe("Brief, user-facing explanation of what these hooks provide"), hooks: K.lazy(() => l0()).describe("The hooks provided by the plugin, in the same format as the one used for settings") })); +var ie = b(() => K.object({ hooks: K.union([c0().describe("Path to file with additional hooks (in addition to those in hooks/hooks.json, if it exists), relative to the plugin root"), K.lazy(() => l0()).describe("Additional hooks (in addition to those in hooks/hooks.json, if it exists)"), K.array(K.union([c0().describe("Path to file with additional hooks (in addition to those in hooks/hooks.json, if it exists), relative to the plugin root"), K.lazy(() => l0()).describe("Additional hooks (in addition to those in hooks/hooks.json, if it exists)")]))]) })); +var ne = b(() => K.object({ source: Rz().optional().describe("Path to command markdown file, relative to plugin root"), content: K.string().optional().describe("Inline markdown content for the command"), description: K.string().optional().describe("Command description override"), argumentHint: K.string().optional().describe('Hint for command arguments (e.g., "[file]")'), model: K.string().optional().describe("Default model for this command"), allowedTools: K.array(K.string()).optional().describe("Tools allowed when command runs") }).refine(($) => $.source && !$.content || !$.source && $.content, { message: 'Command must have either "source" (file path) or "content" (inline markdown), but not both' })); +var re = b(() => K.object({ commands: K.union([Rz().describe("Path to a command file or skill directory, relative to the plugin root. When set, the commands/ directory is not auto-loaded \u2014 list its files here if you want both."), K.array(Rz().describe("Path to a command file or skill directory, relative to the plugin root. When set, the commands/ directory is not auto-loaded \u2014 list its files here if you want both.")).describe("List of command file or skill directory paths. When set, the commands/ directory is not auto-loaded."), K.record(K.string(), ne()).describe('Object mapping of command names to their metadata and source files. Command name becomes the slash command name (e.g., "about" \u2192 "/plugin:about")')]) })); +var oe = b(() => K.object({ agents: K.union([Iz().describe("Path to an agent file, relative to the plugin root. When set, the agents/ directory is not auto-loaded \u2014 list its files here if you want both."), K.array(Iz().describe("Path to an agent file, relative to the plugin root. When set, the agents/ directory is not auto-loaded \u2014 list its files here if you want both.")).describe("List of agent file paths. When set, the agents/ directory is not auto-loaded.")]) })); +var te = b(() => K.object({ skills: K.union([Z4().describe("Path to a skill directory, relative to the plugin root. Loaded in addition to the skills/ directory."), K.array(Z4().describe("Path to a skill directory, relative to the plugin root. Loaded in addition to the skills/ directory.")).describe("List of skill directory paths, loaded in addition to the skills/ directory.")]) })); +var mE = b(() => K.object({ outputStyles: K.union([Z4().describe("Path to an output-styles directory or file, relative to the plugin root. When set, the output-styles/ directory is not auto-loaded \u2014 list its files here if you want both."), K.array(Z4().describe("Path to an output-styles directory or file, relative to the plugin root. When set, the output-styles/ directory is not auto-loaded \u2014 list its files here if you want both.")).describe("List of output-style directory or file paths. When set, the output-styles/ directory is not auto-loaded.")]) })); +var lE = b(() => K.object({ themes: K.union([Z4().describe("Path to a themes directory or file, relative to the plugin root. When set, the themes/ directory is not auto-loaded \u2014 list its files here if you want both."), K.array(Z4().describe("Path to a themes directory or file, relative to the plugin root. When set, the themes/ directory is not auto-loaded \u2014 list its files here if you want both.")).describe("List of theme directory or file paths. When set, the themes/ directory is not auto-loaded.")]) })); +var ae = b(() => K.object({})); +var fE = b(() => K.string().min(1)); +var se = b(() => K.string().min(2).refine(($) => $.startsWith("."), { message: 'File extensions must start with dot (e.g., ".ts", not "ts")' })); +var ee = b(() => K.object({ mcpServers: K.union([c0().describe("MCP servers to include in the plugin (in addition to those in the .mcp.json file, if it exists)"), yE().describe("Path or URL to MCPB file containing MCP server configuration"), K.record(K.string(), sW()).describe("MCP server configurations keyed by server name"), K.array(K.union([c0().describe("Path to MCP servers configuration file"), yE().describe("Path or URL to MCPB file"), K.record(K.string(), sW()).describe("Inline MCP server configurations")])).describe("Array of MCP server configurations (paths, MCPB files, or inline definitions)")]) })); +var cE = b(() => K.object({ type: K.enum(["string", "number", "boolean", "directory", "file"]).describe("Type of the configuration value"), title: K.string().describe("Human-readable label shown in the config dialog"), description: K.string().describe("Help text shown beneath the field in the config dialog"), required: K.boolean().optional().describe("If true, validation fails when this field is empty"), default: K.union([K.string(), K.number(), K.boolean(), K.array(K.string())]).optional().describe("Default value used when the user provides nothing"), multiple: K.boolean().optional().describe("For string type: allow an array of strings"), sensitive: K.boolean().optional().describe("If true, masks dialog input and stores value in secure storage (keychain/credentials file) instead of settings.json"), min: K.number().optional().describe("Minimum value (number type only)"), max: K.number().optional().describe("Maximum value (number type only)") }).strict()); +var $$$ = b(() => K.object({ userConfig: K.record(K.string().regex(/^[A-Za-z_]\w*$/, "Option keys must be valid identifiers (letters, digits, underscore; no leading digit) \u2014 they become CLAUDE_PLUGIN_OPTION_ env vars in hooks"), cE()).optional().describe("User-configurable values this plugin needs. Prompted at enable time. Non-sensitive values saved to settings.json; sensitive values to secure storage. Available as ${user_config.KEY} in MCP/LSP server config, hook commands, and (non-sensitive only) skill/agent content. Keep sensitive value counts small.") })); +var Q$$ = b(() => K.object({ channels: K.array(K.object({ server: K.string().min(1).describe("Name of the MCP server this channel binds to. Must match a key in this plugin's mcpServers."), displayName: K.string().optional().describe('Human-readable name shown in the config dialog title (e.g., "Telegram"). Defaults to the server name.'), userConfig: K.record(K.string(), cE()).optional().describe("Fields to prompt the user for when enabling this plugin in assistant mode. Saved values are substituted into ${user_config.KEY} references in the mcpServers env.") }).strict()).describe("Channels this plugin provides. Each entry declares an MCP server as a message channel and optionally specifies user configuration to prompt for at enable time.") })); +var gE = b(() => K.strictObject({ command: K.string().min(1).refine(($) => { + if ($.includes(" ") && !$.startsWith("/")) return false; + return true; +}, { message: "Command should not contain spaces. Use args array for arguments." }).describe('Command to execute the LSP server (e.g., "typescript-language-server")'), args: K.array(fE()).optional().describe("Command-line arguments to pass to the server"), extensionToLanguage: K.record(se(), fE()).refine(($) => Object.keys($).length > 0, { message: "extensionToLanguage must have at least one mapping" }).describe("Mapping from file extension to LSP language ID. File extensions and languages are derived from this mapping."), transport: K.enum(["stdio", "socket"]).default("stdio").describe("Communication transport mechanism"), env: K.record(K.string(), K.string()).optional().describe("Environment variables to set when starting the server"), initializationOptions: K.unknown().optional().describe("Initialization options passed to the server during initialization"), settings: K.unknown().optional().describe("Settings passed to the server via workspace/didChangeConfiguration"), workspaceFolder: K.string().optional().describe("Workspace folder path to use for the server"), startupTimeout: K.number().int().positive().optional().describe("Maximum time to wait for server startup (milliseconds)"), shutdownTimeout: K.number().int().positive().optional().describe("Maximum time to wait for graceful shutdown (milliseconds)"), restartOnCrash: K.boolean().optional().describe("Whether to restart the server if it crashes"), maxRestarts: K.number().int().nonnegative().optional().describe("Maximum number of restart attempts before giving up") })); +var J$$ = b(() => K.strictObject({ name: K.string().min(1).describe("Identifier for this monitor, unique within the plugin. Used to dedupe so re-arming (plugin reload, repeat skill invoke) does not spawn duplicates."), command: K.string().min(1).describe('Shell command to run as a persistent background monitor. Each stdout line is delivered to the model as a event; the process runs for the session lifetime. ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, ${CLAUDE_PROJECT_DIR}, ${user_config.*}, and ${ENV_VAR} are substituted. Runs in the session cwd \u2014 prefix with `cd "${CLAUDE_PLUGIN_ROOT}" && ` if the script needs its own directory.'), description: K.string().min(1).describe("Short human-readable description of what is being monitored (shown in task panel and notification summary)."), when: K.union([K.literal("always"), K.string().startsWith("on-skill-invoke:").refine(($) => $.length > 16, { message: "on-skill-invoke: must specify a skill name" })]).default("always").describe('Arm trigger. "always" arms at session start and on plugin reload. "on-skill-invoke:" arms the first time that skill is dispatched (via Skill tool or slash command).') })); +var X$$ = b(() => K.array(J$$()).refine(($) => new Set($.map((Q) => Q.name)).size === $.length, { message: "Monitor names must be unique within a plugin" })); +var pE = b(() => K.object({ monitors: K.union([c0().describe("Path to a JSON file containing the monitors array, relative to the plugin root"), X$$()]).describe("Background watch scripts the host arms as persistent Monitor tasks (unsandboxed, same trust tier as hooks) so plugins need not instruct the model to arm them. When omitted, monitors/monitors.json at the plugin root is loaded if present.") })); +var Y$$ = b(() => K.object({ lspServers: K.union([c0().describe("Path to .lsp.json configuration file relative to plugin root"), K.record(K.string(), gE()).describe("LSP server configurations keyed by server name"), K.array(K.union([c0().describe("Path to LSP configuration file"), K.record(K.string(), gE()).describe("Inline LSP server configurations")])).describe("Array of LSP server configurations (paths or inline definitions)")]) })); +var dE = b(() => K.string().refine(($) => !$.includes("..") && !$.includes("//"), "Package name cannot contain path traversal patterns").refine(($) => { + let Q = /^@[a-z0-9][a-z0-9-._]*\/[a-z0-9][a-z0-9-._]*$/, J = /^[a-z0-9][a-z0-9-._]*$/; + return Q.test($) || J.test($); +}, "Invalid npm package name format")); +var W$$ = b(() => K.object({ settings: K.record(K.string(), K.unknown()).optional().describe("Settings to merge into the user settings while this plugin is enabled. Only the documented allowlisted keys are applied.") })); +var G$$ = b(() => K.object({ experimental: K.preprocess(($) => typeof $ === "object" && $ !== null && !Array.isArray($) ? $ : void 0, K.object({ ...lE().partial().shape, ...pE().partial().shape, ...mE().partial().shape, evals: K.union([K.string(), K.array(K.string())]).optional().describe("Path(s) to evaluation query files for `claude plugin eval`. Defaults to `evals/`.") }).optional().describe("Components whose manifest shape may change without a deprecation cycle. Move a key out of here once it is promoted to stable.")) })); +var U$$ = b(() => K.object({ ...de().shape, ...ie().partial().shape, ...re().partial().shape, ...oe().partial().shape, ...te().partial().shape, ...mE().partial().shape, ...lE().partial().shape, ...ae().shape, ...Q$$().partial().shape, ...ee().partial().shape, ...Y$$().partial().shape, ...pE().partial().shape, ...W$$().partial().shape, ...$$$().partial().shape, ...G$$().partial().shape })); +var aJ = b(() => K.discriminatedUnion("source", [K.object({ source: K.literal("url"), url: K.string().url().describe("Direct URL to marketplace.json file"), headers: K.record(K.string(), K.string()).optional().describe("Custom HTTP headers (e.g., for authentication)") }), K.object({ source: K.literal("github"), repo: K.string().describe("GitHub repository in owner/repo format"), ref: K.string().optional().describe('Git branch or tag to use (e.g., "main", "v1.0.0"). Defaults to repository default branch.'), path: K.string().optional().describe("Path to marketplace.json within repo (defaults to .claude-plugin/marketplace.json)"), sparsePaths: K.array(K.string()).optional().describe('Directories to include via git sparse-checkout (cone mode). Use for monorepos where the marketplace lives in a subdirectory. Example: [".claude-plugin", "plugins"]. If omitted, the full repository is cloned.'), skipLfs: K.boolean().optional().describe("Skip Git LFS smudge during clone and update (sets GIT_LFS_SKIP_SMUDGE=1) so LFS pointer files stay as pointers instead of downloading their content. Use for marketplaces hosted in repos with large LFS objects.") }), K.object({ source: K.literal("git"), url: K.string().describe("Full git repository URL"), ref: K.string().optional().describe('Git branch or tag to use (e.g., "main", "v1.0.0"). Defaults to repository default branch.'), path: K.string().optional().describe("Path to marketplace.json within repo (defaults to .claude-plugin/marketplace.json)"), sparsePaths: K.array(K.string()).optional().describe('Directories to include via git sparse-checkout (cone mode). Use for monorepos where the marketplace lives in a subdirectory. Example: [".claude-plugin", "plugins"]. If omitted, the full repository is cloned.'), skipLfs: K.boolean().optional().describe("Skip Git LFS smudge during clone and update (sets GIT_LFS_SKIP_SMUDGE=1) so LFS pointer files stay as pointers instead of downloading their content. Use for marketplaces hosted in repos with large LFS objects.") }), K.object({ source: K.literal("npm"), package: dE().describe("NPM package containing marketplace.json") }), K.object({ source: K.literal("file"), path: K.string().describe("Local file path to marketplace.json") }), K.object({ source: K.literal("directory"), path: K.string().describe("Local directory containing .claude-plugin/marketplace.json") }), K.object({ source: K.literal("skills-dir") }).describe("Policy-list sentinel for the ~/.claude/skills/ auto-load (@skills-dir plugins). In strictKnownMarketplaces: opt the scan back IN (by default any allowlist blocks it). In blockedMarketplaces: turn the scan OFF without otherwise restricting marketplaces. Only meaningful in those two managed-settings lists (areLocalPluginDirsAllowedByPolicy); known_marketplaces.json / marketplace add etc. ignore it."), K.object({ source: K.literal("hostPattern"), hostPattern: K.string().describe('Regex pattern to match the host/domain extracted from any marketplace source type. For github sources, matches against "github.com". For git sources (SSH or HTTPS), extracts the hostname from the URL. Use in strictKnownMarketplaces to allow all marketplaces from a specific host (e.g., "^github\\.mycompany\\.com$").') }), K.object({ source: K.literal("pathPattern"), pathPattern: K.string().describe('Regex pattern matched against the .path field of file and directory sources. Use in strictKnownMarketplaces to allow filesystem-based marketplaces alongside hostPattern restrictions for network sources. Use ".*" to allow all filesystem paths, or a narrower pattern (e.g., "^/opt/approved/") to restrict to specific directories.') }), K.object({ source: K.literal("settings"), name: uE().refine(($) => !hE.has($.toLowerCase()), { message: "Reserved official marketplace names cannot be used with settings sources. validateOfficialNameSource only accepts github/git sources from anthropics/* for these names; a settings source would be rejected after loadAndCacheMarketplace has already written to disk with cleanupNeeded=false." }).describe("Marketplace name. Must match the extraKnownMarketplaces key (enforced); the synthetic manifest is written under this name. Same validation as PluginMarketplaceSchema plus reserved-name rejection \u2014 validateOfficialNameSource runs after the disk write, too late to clean up."), plugins: K.array(H$$()).describe("Plugin entries declared inline in settings.json"), owner: Pz().optional() }).describe("Inline marketplace manifest defined directly in settings.json. The reconciler writes a synthetic marketplace.json to the cache; diffMarketplaces detects edits via isEqual on the stored source (the plugins array is inside this object, so edits surface as sourceChanged).")])); +var Az = b(() => K.string().length(40).regex(/^[a-f0-9]{40}$/, "Must be a full 40-character lowercase git commit SHA")); +var iE = b(() => K.union([Z4().describe("Path to the plugin root, relative to the marketplace root (the directory containing .claude-plugin/, not .claude-plugin/ itself)"), K.object({ source: K.literal("npm"), package: dE().or(K.string().refine(($) => /^(?:file|https?|git(?:\+https?|\+ssh)?|ssh|github|gitlab|bitbucket):/i.test($) || !$.includes(".."), 'Package reference cannot contain ".." path segments')).describe("Package name (or url, or local path, or anything else that can be passed to `npm` as a package)"), version: K.string().optional().describe("Specific version or version range (e.g., ^1.0.0, ~2.1.0)"), registry: K.string().url().optional().describe("Custom NPM registry URL (defaults to using system default, likely npmjs.org)") }).describe("NPM package as plugin source"), K.object({ source: K.literal("url"), url: K.string().describe("Full git repository URL (https:// or git@)"), ref: K.string().optional().describe('Git branch or tag to use (e.g., "main", "v1.0.0"). Defaults to repository default branch.'), sha: Az().optional().describe("Specific commit SHA to use") }), K.object({ source: K.literal("github"), repo: K.string().describe("GitHub repository in owner/repo format"), ref: K.string().optional().describe('Git branch or tag to use (e.g., "main", "v1.0.0"). Defaults to repository default branch.'), sha: Az().optional().describe("Specific commit SHA to use") }), K.object({ source: K.literal("git-subdir"), url: K.string().describe("Git repository: GitHub owner/repo shorthand, https://, or git@ URL"), path: K.string().min(1).describe('Subdirectory within the repo containing the plugin (e.g., "tools/claude-plugin"). Cloned sparsely using partial clone (--filter=tree:0) to minimize bandwidth for monorepos.'), ref: K.string().optional().describe('Git branch or tag to use (e.g., "main", "v1.0.0"). Defaults to repository default branch.'), sha: Az().optional().describe("Specific commit SHA to use") }).describe("Plugin located in a subdirectory of a larger repository (monorepo). Only the specified subdirectory is materialized; the rest of the repo is not downloaded."), K.object({ source: K.literal("unsupported") }).describe('Placeholder for source types this Claude Code version does not recognize. Never authored by hand \u2014 PluginMarketplaceSchema rewrites unparseable sources to this so the entry remains in marketplace.plugins (detectDelistedPlugins must not see it as removed). Install attempts fail at cachePlugin with a clear "update Claude Code" message.')])); +var H$$ = b(() => K.object({ name: K.string().min(1, "Plugin name cannot be empty").refine(($) => !$.includes(" "), { message: 'Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin")' }).describe("Plugin name as it appears in the target repository"), source: iE().describe("Where to fetch the plugin from. Must be a remote source \u2014 relative paths have no marketplace repository to resolve against."), description: K.string().optional(), version: K.string().optional(), strict: K.boolean().optional() }).refine(($) => typeof $.source !== "string", { message: 'Plugins in a settings-sourced marketplace must use remote sources (github, git-subdir, npm, url). Relative-path sources like "./foo" have no marketplace repository to resolve against.' }).refine(($) => typeof $.source === "string" || $.source.source !== "unsupported", { message: "source.source: 'unsupported' is a parse-time placeholder and cannot be authored. Use a remote source (github, git-subdir, npm, url)." })); +var K$$ = b(() => K.object({ cli: K.array(K.string().max(64)).max(10).optional().describe('First command tokens (e.g. ["stripe"]) \u2014 exact match against commands run this session.'), hosts: K.array(K.string().max(128)).max(20).optional().describe('Hostnames (e.g. ["api.stripe.com"]) \u2014 exact, case-insensitive match against hostnames seen in https?:// URLs in bash commands run this session. Bare hostname only: lowercase, no scheme, no port, no path.'), filesRead: K.array(K.string().max(256)).max(10).optional().describe('Glob patterns (e.g. ["**/*.tf"]) \u2014 the plugin is relevant when a file Claude has read this session matches any pattern. Matched against read-file paths, forward-slash normalized, case-insensitive.'), manifestDeps: K.array(K.object({ file: K.string().max(256), pattern: K.string().max(256) })).max(10).optional().describe("Dependency declared in a package manifest. Each {file, pattern} is a pair of RegExp sources: `file` matches the manifest filename (package.json, go.mod, requirements.txt, \u2026); `pattern` matches the dependency declaration inside that file. Evaluated against files read this session."), cwd: K.array(K.string().max(256)).max(10).optional().describe(`Glob patterns (e.g. ["Engine/Source/Runtime/Renderer/**"]) \u2014 the plugin is relevant when the session's working directory is at or under a directory matching the pattern. Matched against the cwd both relative to the enclosing git repo root and as an absolute path, forward-slash normalized, case-insensitive. A bare directory (no glob characters) means "cwd is at or under this directory". Known at session start, so this signal can surface a suggestion before the first turn.`) })); +var q$$ = b(() => K.object({ topic: K.string().max(64).optional().describe('What the user is working with when this plugin is relevant \u2014 fills "Working with {topic}?". Often the product name (e.g. "Stripe"); use a domain (e.g. "design") when the plugin name does not read naturally as a topic. Defaults to the plugin name with each hyphen-segment capitalized.'), signals: K$$().optional().describe("Matchers that determine when the plugin is relevant.") })); +var V$$ = b(() => U$$().partial().extend({ name: K.string().min(1, "Plugin name cannot be empty").refine(($) => !$.includes(" "), { message: 'Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin")' }).describe("Unique identifier matching the plugin name"), source: iE().describe("Where to fetch the plugin from"), category: K.string().optional().describe('Category for organizing plugins (e.g., "productivity", "development")'), tags: K.array(K.string()).optional().describe("Tags for searchability and discovery"), strict: K.boolean().optional().default(true).describe("Require the plugin manifest to be present in the plugin folder. If false, the marketplace entry provides the manifest."), relevance: K.preprocess(($) => typeof $ === "object" && $ !== null && !Array.isArray($) ? $ : void 0, q$$().optional()).describe(`Declares when this plugin is relevant to the user's work. Consumed by the spinner tip ("Working with {topic}?"), session-start auto-suggest, and marketplace browse ranking.`) })); +var B$$ = b(() => K.object({ name: K.string().min(1).refine(($) => !$.includes(" ")) })); +function z$$($) { + let Q = V$$(); + return $.flatMap((J, Y) => { + var _a5; + let X = Q.safeParse(J); + if (X.success) return [X.data]; + let W = (_a5 = B$$().safeParse(J).data) == null ? void 0 : _a5.name, G = X.error.issues.map((U) => `${U.path.join(".")}: ${U.message}`).join(", "); + if (W) return X$(`Stubbing unparseable marketplace plugin entry (${W}): ${G}`, { level: "warn" }), [{ name: W, source: { source: "unsupported" }, strict: true }]; + return X$(`Dropping unparseable marketplace plugin entry (index ${Y}): ${G}`, { level: "warn" }), []; + }); +} +var tF$ = b(() => K.object({ $schema: K.string().optional().describe("JSON Schema reference for editor autocomplete/validation; ignored at load time"), name: uE(), version: K.string().optional().describe("Marketplace manifest version"), description: K.string().optional().describe("Human-readable description of this marketplace"), owner: Pz().describe("Marketplace maintainer or curator information"), plugins: K.array(K.unknown()).transform(z$$).describe("Collection of available plugins in this marketplace"), forceRemoveDeletedPlugins: K.boolean().optional().describe("When true, plugins removed from this marketplace will be automatically uninstalled and flagged for users"), metadata: K.object({ pluginRoot: K.string().optional().describe("Base path for relative plugin sources"), version: K.string().optional().describe("Marketplace version"), description: K.string().optional().describe("Marketplace description") }).optional().describe("Optional marketplace metadata"), allowCrossMarketplaceDependenciesOn: K.array(K.string()).optional().describe("Marketplace names whose plugins may be auto-installed as dependencies. Only the root marketplace's allowlist applies \u2014 no transitive trust.") })); +var nE = b(() => K.string().regex(/^[A-Za-z0-9][-A-Za-z0-9._]*@[A-Za-z0-9][-A-Za-z0-9._]*$/, "Plugin ID must be in format: plugin@marketplace")); +var N$$ = /^[A-Za-z0-9][-A-Za-z0-9._]*(@[A-Za-z0-9][-A-Za-z0-9._]*)?(@\^[^@]*)?$/; +var w$$ = b(() => K.union([K.string().regex(N$$, "Dependency must be a plugin name, optionally qualified with @marketplace").transform(($) => $.replace(/@\^[^@]*$/, "")), K.object({ name: K.string().min(1).regex(/^[A-Za-z0-9][-A-Za-z0-9._]*$/), marketplace: K.string().min(1).regex(/^[A-Za-z0-9][-A-Za-z0-9._]*$/).optional() }).loose().transform(($) => $.marketplace ? `${$.name}@${$.marketplace}` : $.name)])); +var O$$ = b(() => K.object({ version: K.string().describe("Currently installed version"), installedAt: K.string().describe("ISO 8601 timestamp of installation"), lastUpdated: K.string().optional().describe("ISO 8601 timestamp of last update"), installPath: K.string().describe("Absolute path to the installed plugin directory"), gitCommitSha: K.string().optional().describe("Git commit SHA for git-based plugins (for version tracking)"), resolvedVersion: K.string().optional().describe("Tag-derived semver this install resolved to (when fetched via a version constraint). Used by verifyAndDemote in preference to manifest.version, since the upstream may have forgotten to bump plugin.json."), auto: K.boolean().optional().describe("True when this plugin was pulled in as a dependency rather than installed explicitly. Auto-installed plugins are eligible for removal by the orphan sweep when nothing depends on them. Absent = manual (preserves pre-flag installs).") })); +var D$$ = b(() => K.object({ version: K.literal(1).describe("Schema version 1"), plugins: K.record(nE(), O$$()).describe("Map of plugin IDs to their installation metadata") })); +var F$$ = b(() => K.enum(["managed", "user", "project", "local"])); +var Z$$ = b(() => K.object({ scope: F$$().describe("Installation scope"), projectPath: K.string().optional().describe("Project path (required for project/local scopes)"), installPath: K.string().describe("Absolute path to the versioned plugin directory"), version: K.string().optional().describe("Currently installed version"), installedAt: K.string().optional().describe("ISO 8601 timestamp of installation"), lastUpdated: K.string().optional().describe("ISO 8601 timestamp of last update"), gitCommitSha: K.string().optional().describe("Git commit SHA for git-based plugins"), resolvedVersion: K.string().optional().describe("Tag-derived semver this install resolved to"), auto: K.boolean().optional().describe("True when pulled in as a dependency. Eligible for orphan sweep.") })); +var M$$ = b(() => K.object({ version: K.literal(2).describe("Schema version 2"), plugins: K.record(nE(), K.array(Z$$())).describe("Map of plugin IDs to arrays of installation entries") })); +var aF$ = b(() => K.union([D$$(), M$$()])); +var L$$ = b(() => K.object({ source: aJ().describe("Where to fetch the marketplace from"), installLocation: K.string().describe("Local cache path where marketplace manifest is stored"), lastUpdated: K.string().describe("ISO 8601 timestamp of last marketplace refresh"), autoUpdate: K.boolean().optional().describe("Whether to automatically update this marketplace and its installed plugins on startup") })); +var sF$ = b(() => K.record(K.string(), L$$())); +var oE = "https://json.schemastore.org/claude-code-settings.json"; +var j$$ = ["autoMode", "deepLink", "voice", "assistant", "briefView"]; +var eW = {}; +var $G = { autoMode: { buildGate: () => false, shape: () => eW, permissionsShape: () => eW, permissionModes: () => [] }, deepLink: { buildGate: () => true, shape: () => ({ disableDeepLinkRegistration: K.enum(["disable"]).optional().describe("Prevent claude-cli:// protocol handler registration with the OS") }) }, voice: { buildGate: () => false, shape: () => eW }, assistant: { buildGate: () => false, shape: () => eW }, briefView: { buildGate: () => true, shape: () => ({ defaultView: K.enum(["chat", "transcript"]).optional().describe("Default transcript view: chat (SendUserMessage checkpoints only) or transcript (full)") }) } }; +function Ez() { + return j$$.filter(($) => $G[$].buildGate()); +} +function tE($) { + let Q = {}; + for (let J of $) Q = { ...Q, ...$G[J].shape() }; + return Q; +} +function aE($) { + var _a5, _b3; + let Q = {}; + for (let J of $) Q = { ...Q, ...(_b3 = (_a5 = $G[J]).permissionsShape) == null ? void 0 : _b3.call(_a5) }; + return Q; +} +function sE($) { + var _a5, _b3, _c2; + let Q = []; + for (let J of $) Q.push(...(_c2 = (_b3 = (_a5 = $G[J]).permissionModes) == null ? void 0 : _b3.call(_a5)) != null ? _c2 : []); + return Q; +} +function eE($) { + let Q = $.split("__"), [J, Y, ...X] = Q; + if (J !== "mcp" || !Y) return null; + let W = X.length > 0 ? X.join("__") : void 0; + return { serverName: Y, toolName: W }; +} +var $b = { Task: "Agent", KillShell: "TaskStop", AgentOutputTool: "TaskOutput", BashOutputTool: "TaskOutput", ListPeers: "ListAgents", Brief: "SendUserMessage" }; +function E9($) { + return Object.hasOwn($b, $) ? $b[$] : $; +} +var Qb = "workspace"; +var BZ$ = `mcp__${Qb}__bash`; +var zZ$ = `mcp__${Qb}__web_fetch`; +function A$$($) { + return $.replaceAll("\\(", "(").replaceAll("\\)", ")").replaceAll("\\\\", "\\"); +} +function Jb($) { + let Q = I$$($, "("); + if (Q === -1) return { toolName: E9($) }; + let J = R$$($, ")"); + if (J === -1 || J <= Q) return { toolName: E9($) }; + if (J !== $.length - 1) return { toolName: E9($) }; + let Y = $.substring(0, Q), X = $.substring(Q + 1, J); + if (!Y) return { toolName: E9($) }; + if (X === "" || X === "*") return { toolName: E9(Y) }; + let W = A$$(X); + return { toolName: E9(Y), ruleContent: W }; +} +function I$$($, Q) { + for (let J = 0; J < $.length; J++) if ($[J] === Q) { + let Y = 0, X = J - 1; + while (X >= 0 && $[X] === "\\") Y++, X--; + if (Y % 2 === 0) return J; + } + return -1; +} +function R$$($, Q) { + for (let J = $.length - 1; J >= 0; J--) if ($[J] === Q) { + let Y = 0, X = J - 1; + while (X >= 0 && $[X] === "\\") Y++, X--; + if (Y % 2 === 0) return J; + } + return -1; +} +var QG = { filePatternTools: ["Read", "Write", "Edit", "Glob", "NotebookRead", "NotebookEdit"], bashPrefixTools: ["Bash"], customValidation: { WebSearch: ($) => { + if ($.includes("*") || $.includes("?")) return { valid: false, error: "WebSearch does not support wildcards", suggestion: "Use exact search terms without * or ?", examples: ["WebSearch(claude ai)", "WebSearch(typescript tutorial)"] }; + return { valid: true }; +}, WebFetch: ($) => { + if ($.includes("://") || $.startsWith("http")) return { valid: false, error: "WebFetch permissions use domain format, not URLs", suggestion: 'Use "domain:hostname" format', examples: ["WebFetch(domain:example.com)", "WebFetch(domain:github.com)"] }; + if (!$.startsWith("domain:")) return { valid: false, error: 'WebFetch permissions must use "domain:" prefix', suggestion: 'Use "domain:hostname" format', examples: ["WebFetch(domain:example.com)", "WebFetch(domain:*.google.com)"] }; + return { valid: true }; +} } }; +function Xb($) { + return QG.filePatternTools.includes($); +} +function Yb($) { + return QG.bashPrefixTools.includes($); +} +function Wb($) { + return Object.hasOwn(QG.customValidation, $) ? QG.customValidation[$] : void 0; +} +function Gb($, Q) { + let J = 0, Y = Q - 1; + while (Y >= 0 && $[Y] === "\\") J++, Y--; + return J % 2 !== 0; +} +function bz($, Q) { + let J = 0; + for (let Y = 0; Y < $.length; Y++) if ($[Y] === Q && !Gb($, Y)) J++; + return J; +} +function P$$($) { + for (let Q = 0; Q < $.length - 1; Q++) if ($[Q] === "(" && $[Q + 1] === ")") { + if (!Gb($, Q)) return true; + } + return false; +} +function _z2($) { + var _a5; + if (!$ || $.trim() === "") return { valid: false, error: "Permission rule cannot be empty" }; + let Q = bz($, "("), J = bz($, ")"); + if (Q !== J) return { valid: false, error: "Mismatched parentheses", suggestion: "Ensure all opening parentheses have matching closing parentheses" }; + if (P$$($)) { + let G = $.substring(0, $.indexOf("(")); + if (!G) return { valid: false, error: "Empty parentheses with no tool name", suggestion: "Specify a tool name before the parentheses" }; + return { valid: false, error: "Empty parentheses", suggestion: `Either specify a pattern or use just "${G}" without parentheses`, examples: [`${G}`, `${G}(some-pattern)`] }; + } + let Y = Jb($), X = eE(Y.toolName); + if (X) { + if (Y.ruleContent !== void 0 || bz($, "(") > 0) return { valid: false, error: "MCP rules do not support patterns in parentheses", suggestion: `Use "${Y.toolName}" without parentheses, or use "mcp__${X.serverName}__*" for all tools`, examples: [`mcp__${X.serverName}`, `mcp__${X.serverName}__*`, X.toolName && X.toolName !== "*" ? `mcp__${X.serverName}__${X.toolName}` : void 0].filter(Boolean) }; + return { valid: true }; + } + if (!Y.toolName || Y.toolName.length === 0) return { valid: false, error: "Tool name cannot be empty" }; + if (!Y.toolName.includes("_") && Y.toolName[0] !== ((_a5 = Y.toolName[0]) == null ? void 0 : _a5.toUpperCase())) return { valid: false, error: "Tool names must start with uppercase", suggestion: `Use "${zU(String(Y.toolName))}"` }; + let W = Wb(Y.toolName); + if (W && Y.ruleContent !== void 0) { + let G = W(Y.ruleContent); + if (!G.valid) return G; + } + if (Yb(Y.toolName) && Y.ruleContent !== void 0) { + let G = Y.ruleContent; + if (G.includes(":*") && !G.endsWith(":*")) return { valid: false, error: "The :* pattern must be at the end", suggestion: "Move :* to the end for prefix matching, or use * for wildcard matching", examples: ["Bash(npm run:*) - prefix matching (legacy)", "Bash(npm run *) - wildcard matching"] }; + if (G === ":*") return { valid: false, error: "Prefix cannot be empty before :*", suggestion: "Specify a command prefix before :*", examples: ["Bash(npm *)", "Bash(git *)"] }; + } + if (Xb(Y.toolName) && Y.ruleContent !== void 0) { + let G = Y.ruleContent; + if (G.includes(":*")) return { valid: false, error: 'The ":*" syntax is only for Bash prefix rules', suggestion: 'Use glob patterns like "*" or "**" for file matching', examples: [`${Y.toolName}(*.ts) - matches .ts files`, `${Y.toolName}(src/**) - matches all files in src`, `${Y.toolName}(**/*.test.ts) - matches test files`] }; + if (G.includes("*") && !G.match(/^\*|\*$|\*\*|\/\*|\*\.|\*\)/) && !G.includes("**")) return { valid: false, error: "Wildcard placement might be incorrect", suggestion: "Wildcards are typically used at path boundaries", examples: [`${Y.toolName}(*.js) - all .js files`, `${Y.toolName}(src/*) - all files directly in src`, `${Y.toolName}(src/**) - all files recursively in src`] }; + } + return { valid: true }; +} +var JG = b(() => K.string().superRefine(($, Q) => { + let J = _z2($); + if (!J.valid) { + let Y = J.error; + if (J.suggestion) Y += `. ${J.suggestion}`; + if (J.examples && J.examples.length > 0) Y += `. Examples: ${J.examples.join(", ")}`; + Q.addIssue({ code: K.ZodIssueCode.custom, message: Y, params: { received: $ } }); + } +})); +var E$$ = b(() => K.record(K.string(), K.coerce.string())); +function Hb($) { + return K.object({ allow: K.array(JG()).optional().describe("List of permission rules for allowed operations"), deny: K.array(JG()).optional().describe("List of permission rules for denied operations"), ask: K.array(JG()).optional().describe("List of permission rules that should always prompt for confirmation"), defaultMode: K.enum([...oJ, ...sE($)]).optional().describe("Default permission mode when Claude Code needs access"), disableBypassPermissionsMode: K.enum(["disable"]).optional().describe("Disable the ability to bypass permission prompts"), ...aE($), additionalDirectories: K.array(K.string()).optional().describe("Additional directories to include in the permission scope") }).passthrough(); +} +var xZ$ = b(() => Hb(Ez())); +var b$$ = b(() => K.object({ source: aJ().describe("Where to fetch the marketplace from"), installLocation: K.string().optional().describe("Local cache path where marketplace manifest is stored (auto-generated if not provided)"), autoUpdate: K.boolean().optional().describe("Whether to automatically update this marketplace and its installed plugins on startup") })); +var kz = b(() => K.object({ serverName: K.string().regex(/^[a-zA-Z0-9_-]+$/, "Server name can only contain letters, numbers, hyphens, and underscores").optional().describe("Name of the MCP server that users are allowed to configure"), serverCommand: K.array(K.string()).min(1, "Server command must have at least one element (the command)").optional().describe("Command array [command, ...args] to match exactly for allowed stdio servers"), serverUrl: K.string().optional().describe('URL pattern with wildcard support (e.g., "https://*.example.com/*") for allowed remote MCP servers') }).refine(($) => { + return CH([$.serverName !== void 0, $.serverCommand !== void 0, $.serverUrl !== void 0], Boolean) === 1; +}, { message: 'Entry must have exactly one of "serverName", "serverCommand", or "serverUrl"' })); +var Sz = b(() => K.object({ serverName: K.string().regex(/^[a-zA-Z0-9_-]+$/, "Server name can only contain letters, numbers, hyphens, and underscores").optional().describe("Name of the MCP server that is explicitly blocked"), serverCommand: K.array(K.string()).min(1, "Server command must have at least one element (the command)").optional().describe("Command array [command, ...args] to match exactly for blocked stdio servers"), serverUrl: K.string().optional().describe('URL pattern with wildcard support (e.g., "https://*.example.com/*") for blocked remote MCP servers') }).refine(($) => { + return CH([$.serverName !== void 0, $.serverCommand !== void 0, $.serverUrl !== void 0], Boolean) === 1; +}, { message: 'Entry must have exactly one of "serverName", "serverCommand", or "serverUrl"' })); +var _$$ = b(() => K.object({ path: K.string().describe("Absolute path to the helper executable"), timeoutMs: K.number().int().min(1e3).optional(), refreshIntervalMs: K.union([K.literal(0), K.number().int().min(6e4)]).optional() })); +var Ub = ["skills", "agents", "hooks", "mcp"]; +function Kb($) { + return K.object({ $schema: K.literal(oE).optional().describe("JSON Schema reference for Claude Code settings"), apiKeyHelper: K.string().optional().describe("Path to a script that outputs authentication values"), proxyAuthHelper: K.string().optional().describe("Shell command that outputs a Proxy-Authorization header value (EAP)"), awsCredentialExport: K.string().optional().describe("Path to a script that exports AWS credentials"), awsAuthRefresh: K.string().optional().describe("Path to a script that refreshes AWS authentication"), gcpAuthRefresh: K.string().optional().describe("Command to refresh GCP authentication (e.g., gcloud auth application-default login)"), policyHelper: _$$().optional().describe("Executable that computes managed settings at startup. Honored only from admin-controlled policy sources."), ...R$(process.env.CLAUDE_CODE_ENABLE_XAA) && { xaaIdp: K.object({ issuer: K.string().url().describe("IdP issuer URL for OIDC discovery"), clientId: K.string().describe("Claude Code's client_id registered at the IdP"), callbackPort: K.number().int().positive().optional().describe("Fixed loopback callback port for the IdP OIDC login. Only needed if the IdP does not honor RFC 8252 port-any matching.") }).optional().describe("XAA (SEP-990) IdP connection. Configure once; all XAA-enabled MCP servers reuse this.") }, fileSuggestion: K.object({ type: K.literal("command"), command: K.string() }).optional().describe("Custom file suggestion configuration for @ mentions"), respectGitignore: K.boolean().optional().describe("Whether file picker should respect .gitignore files (default: true). Note: .ignore files are always respected."), breakReminder: K.object({ enabled: K.boolean().optional().describe("Show a friendly nudge after sustained continuous use (default false). Must be true for the reminder to fire."), intervalMinutes: K.number().int().positive().optional().describe("Minutes of continuous use before the reminder fires (default 120). Re-fires every interval until you take a break."), breakThresholdMinutes: K.number().int().positive().optional().describe("Minutes of inactivity that count as a break and reset the timer (default 15)"), message: K.string().optional().describe("Custom reminder text. Leave unset for a rotating set of friendly nudges.") }).optional().describe("@internal Opt-in break reminder. When enabled, shows a dismissible nudge after sustained continuous use. Never blocks \u2014 just a friendly heads-up."), quietHours: K.object({ enabled: K.boolean().optional().describe("Show a one-time nudge when you start or keep using the CLI inside your quiet-hours window (default false)."), start: K.string().regex(/^([01]?\d|2[0-3]):[0-5]\d$/, 'Expected 24-hour local time "HH:MM" (e.g. "22:00")').optional().describe('Start of the quiet-hours window, 24-hour local time "HH:MM".'), end: K.string().regex(/^([01]?\d|2[0-3]):[0-5]\d$/, 'Expected 24-hour local time "HH:MM" (e.g. "07:00")').optional().describe('End of the quiet-hours window, 24-hour local time "HH:MM". May be earlier than start for an overnight range.') }).optional().describe("@internal Opt-in quiet hours. When enabled, shows a single soft nudge per session while inside the configured local-time window. Never blocks."), cleanupPeriodDays: K.number().int().positive().optional().describe("Number of days to retain chat transcripts before automatic cleanup (default: 30). Minimum 1. Use a large value for long retention; use --no-session-persistence to disable transcript writes entirely."), skillListingMaxDescChars: K.number().int().positive().optional().describe("Per-skill description character cap in the skill listing sent to Claude (default: 1536). Descriptions longer than this are truncated. Raise to opt in to higher per-turn context cost."), skillListingBudgetFraction: K.number().gt(0).lte(1).optional().describe("Fraction of the context window (in characters) reserved for the skill listing sent to Claude (default: 0.01 = 1%). When the listing exceeds this, descriptions are shortened to fit. Raise to opt in to higher per-turn context cost."), wslInheritsWindowsSettings: K.boolean().optional().describe("When set to true in either admin-only Windows source \u2014 the HKLM SOFTWARE/Policies/ClaudeCode registry key or C:/Program Files/ClaudeCode/managed-settings.json \u2014 WSL reads managed settings from the full Windows policy chain (HKLM, C:/Program Files/ClaudeCode via DrvFs, HKCU) in addition to /etc/claude-code. Windows sources take priority. The flag is also required in HKCU itself for HKCU policy to apply on WSL (double opt-in: admin enables the chain, user confirms HKCU). On native Windows the flag has no effect."), env: E$$().optional().describe("Environment variables to set for Claude Code sessions"), attribution: K.object({ commit: K.string().optional().describe("Attribution text for git commits, including any trailers. Empty string hides attribution."), pr: K.string().optional().describe("Attribution text for pull request descriptions. Empty string hides attribution.") }).optional().describe("Customize attribution text for commits and PRs. Each field defaults to the standard Claude Code attribution if not set."), includeCoAuthoredBy: K.boolean().optional().describe("Deprecated: Use attribution instead. Whether to include Claude's co-authored by attribution in commits and PRs (defaults to true)"), ...false, includeGitInstructions: K.boolean().optional().describe("Include built-in commit and PR workflow instructions in Claude's system prompt (default: true)"), permissions: Hb($).optional().describe("Tool usage permissions configuration"), model: K.string().optional().describe("Override the default model used by Claude Code"), availableModels: K.array(K.string()).optional().describe('Allowlist of models that users can select. Accepts family aliases ("opus" allows any opus version), version prefixes ("opus-4-5" allows only that version), and full model IDs. If undefined, all models are available. If empty array, only the default model is available. Typically set in managed settings by enterprise administrators.'), modelOverrides: K.record(K.string(), K.string()).optional().describe('Override mapping from Anthropic model ID (e.g. "claude-opus-4-6") to provider-specific model ID (e.g. a Bedrock inference profile ARN). Typically set in managed settings by enterprise administrators.'), enableAllProjectMcpServers: K.boolean().optional().describe("Whether to automatically approve all MCP servers in the project"), enabledMcpjsonServers: K.array(K.string()).optional().describe("List of approved MCP servers from .mcp.json"), disabledMcpjsonServers: K.array(K.string()).optional().describe("List of rejected MCP servers from .mcp.json"), skillOverrides: K.record(K.string(), K.enum(["on", "name-only", "user-invocable-only", "off"])).optional().describe('Per-skill listing overrides keyed by skill name. "name-only" lists the skill without its description; "user-invocable-only" hides it from the model but keeps /name; "off" hides it from both. Absent = on.'), allowedMcpServers: K.array(kz()).optional().describe("Enterprise allowlist of MCP servers that can be used. Applies to all scopes including enterprise servers from managed-mcp.json. If undefined, all servers are allowed. If empty array, no servers are allowed. Denylist takes precedence - if a server is on both lists, it is denied."), deniedMcpServers: K.array(Sz()).optional().describe("Enterprise denylist of MCP servers that are explicitly blocked. If a server is on the denylist, it will be blocked across all scopes including enterprise. Denylist takes precedence over allowlist - if a server is on both lists, it is denied."), hooks: l0().optional().describe("Custom commands to run before/after tool executions"), worktree: K.object({ symlinkDirectories: K.array(K.string()).optional().describe('Directories to symlink from main repository to worktrees to avoid disk bloat. Must be explicitly configured - no directories are symlinked by default. Common examples: "node_modules", ".cache", ".bin"'), sparsePaths: K.array(K.string()).optional().describe("Directories to include when creating worktrees, via git sparse-checkout (cone mode). Dramatically faster in large monorepos \u2014 only the listed paths are written to disk."), baseRef: K.enum(["fresh", "head"]).optional().describe("Which ref new worktrees branch from. 'fresh' (default) branches from origin/ for a clean tree. 'head' branches from your current local HEAD so unpushed commits and feature-branch state are present. Applies to --worktree, EnterWorktree, and agent isolation."), bgIsolation: K.enum(["worktree", "none"]).optional().catch(void 0).describe("Isolation mode for background sessions in this repo. 'worktree' (default) blocks Edit/Write in the main checkout until EnterWorktree is called. 'none' lets background jobs edit the working copy directly.") }).optional().describe("Git worktree configuration for --worktree flag."), disableAllHooks: K.boolean().optional().describe("Disable all hooks and statusLine execution"), disableAgentView: K.boolean().optional().describe("Disable agent view (`claude agents`, `--bg`, /background, the on-demand daemon). Typically set in managed settings. Equivalent to CLAUDE_CODE_DISABLE_AGENT_VIEW=1."), disableRemoteControl: K.boolean().optional().describe("Disable Remote Control (claude.ai/code, `claude remote-control`, `--remote-control`/`--rc`, auto-start, and the in-session toggle). Typically set in managed settings."), disableWorkflows: K.boolean().optional().describe("Disable the Workflows feature (also via CLAUDE_CODE_DISABLE_WORKFLOWS)."), enableWorkflows: K.boolean().optional().describe("Enable or disable the Workflows feature for this user. Unset = default by plan once the feature is available."), workflowKeywordTriggerEnabled: K.boolean().optional().describe('Enable the "workflow"/"workflows" keyword trigger that opts a prompt into the Workflow tool. Set to false to type the word without triggering a workflow. Default: true.'), disableSkillShellExecution: K.boolean().optional().describe("Disable inline shell execution in skills and custom slash commands from user, project, or plugin sources. Commands are replaced with a placeholder instead of being run."), defaultShell: K.enum(["bash", "powershell"]).optional().describe("Default shell for input-box ! commands. Defaults to 'bash' on all platforms (no Windows auto-flip)."), allowManagedHooksOnly: K.boolean().optional().describe("When true (and set in managed settings), only hooks from managed settings run. User, project, and local hooks are ignored."), allowedHttpHookUrls: K.array(K.string()).optional().describe('Allowlist of URL patterns that HTTP hooks may target. Supports * as a wildcard (e.g. "https://hooks.example.com/*"). When set, HTTP hooks with non-matching URLs are blocked. If undefined, all URLs are allowed. If empty array, no HTTP hooks are allowed. Arrays merge across settings sources (same semantics as allowedMcpServers).'), httpHookAllowedEnvVars: K.array(K.string()).optional().describe("Allowlist of environment variable names HTTP hooks may interpolate into headers. When set, each hook's effective allowedEnvVars is the intersection with this list. If undefined, no restriction is applied. Arrays merge across settings sources (same semantics as allowedMcpServers)."), allowManagedPermissionRulesOnly: K.boolean().optional().describe("When true (and set in managed settings), only permission rules (allow/deny/ask) from managed settings are respected. User, project, local, and CLI argument permission rules are ignored."), allowManagedMcpServersOnly: K.boolean().optional().describe("When true (and set in managed settings), allowedMcpServers is only read from managed settings. deniedMcpServers still merges from all sources, so users can deny servers for themselves. Users can still add their own MCP servers, but only the admin-defined allowlist applies."), allowAllClaudeAiMcps: K.boolean().optional().describe("When true (and set in managed settings), claude.ai cloud MCP connectors load alongside managed-mcp.json instead of being suppressed by its exclusive-control lockdown. Default off preserves the lockdown. Read from managed settings only."), strictPluginOnlyCustomization: K.preprocess((Q) => Array.isArray(Q) ? Q.filter((J) => Ub.includes(J)) : Q, K.union([K.boolean(), K.array(K.enum(Ub))])).optional().catch(void 0).describe('When set in managed settings, blocks non-plugin customization sources for the listed surfaces. Array form locks specific surfaces (e.g. ["skills", "hooks"]); `true` locks all four; `false` is an explicit no-op. Blocked: ~/.claude/{surface}/, .claude/{surface}/ (project), settings.json hooks, .mcp.json. NOT blocked: managed (policySettings) sources, plugin-provided customizations. Composes with strictKnownMarketplaces for end-to-end admin control \u2014 plugins gated by marketplace allowlist, everything else blocked here.'), statusLine: K.object({ type: K.literal("command"), command: K.string(), padding: K.number().optional(), refreshInterval: K.number().min(1).optional().catch(void 0).describe("Re-run the status line command every N seconds in addition to event-driven updates"), hideVimModeIndicator: K.boolean().optional().describe("Hide the built-in `-- INSERT --` / `-- VISUAL --` indicator below the prompt. Use this when your status line script renders `vim.mode` itself.") }).optional().describe("Custom status line display configuration"), prUrlTemplate: K.string().optional().describe('URL template for PR links in the footer badge and inline messages. Placeholders: {host} {owner} {repo} {number} {url}. Example: "https://reviews.example.com/{owner}/{repo}/pull/{number}"'), subagentStatusLine: K.object({ type: K.literal("command"), command: K.string() }).optional().describe("Custom per-subagent status line shown in the agent panel; receives row context as JSON on stdin"), enabledPlugins: K.record(K.string(), K.union([K.array(K.string()), K.boolean(), K.undefined()])).optional().describe('Enabled plugins using plugin-id@marketplace-id format. Example: { "formatter@anthropic-tools": true }. Also supports extended format with version constraints. Settings precedence is user < project < local < flag < policy, so to disable a plugin that project settings enable, set it to false in .claude/settings.local.json \u2014 setting false in ~/.claude/settings.json is overridden by the project.'), extraKnownMarketplaces: K.record(K.string(), b$$()).check((Q) => { + for (let [J, Y] of Object.entries(Q.value)) if (Y.source.source === "settings" && Y.source.name !== J) Q.issues.push({ code: "custom", input: Y.source.name, path: [J, "source", "name"], message: `Settings-sourced marketplace name must match its extraKnownMarketplaces key (got key "${J}" but source.name "${Y.source.name}")` }); + }).optional().describe("Additional marketplaces to make available for this repository. Typically used in repository .claude/settings.json to ensure team members have required plugin sources."), strictKnownMarketplaces: K.array(aJ()).optional().describe("Enterprise strict list of allowed marketplace sources. When set in managed settings, ONLY these exact sources can be added as marketplaces. The check happens BEFORE downloading, so blocked sources never touch the filesystem. Note: this is a policy gate only \u2014 it does NOT register marketplaces. To pre-register allowed marketplaces for users, also set extraKnownMarketplaces."), blockedMarketplaces: K.array(aJ()).optional().describe("Enterprise blocklist of marketplace sources. When set in managed settings, these exact sources are blocked from being added as marketplaces. The check happens BEFORE downloading, so blocked sources never touch the filesystem."), pluginSuggestionMarketplaces: K.array(K.string()).optional().describe("Marketplace names whose plugins may surface as contextual install suggestions (relevance-based tips), in addition to the official marketplace. Only honored when set in managed settings (policy scope); the key is ignored in user, project, and local settings. A name only takes effect when the marketplace is registered on the machine AND its registered source is also declared in managed settings, either as the extraKnownMarketplaces entry for that name or as an entry of strictKnownMarketplaces. A marketplace registered from a different source under an allowlisted name is ignored."), forceLoginMethod: K.enum(["claudeai", "console"]).optional().describe('Force a specific login method: "claudeai" for Claude Pro/Max, "console" for Console billing'), parentSettingsBehavior: K.enum(["first-wins", "merge"]).optional().describe(`Controls whether the SDK parent tier (Options.managedSettings / --managed-settings) layers under this admin tier. "first-wins" (default): parent is dropped \u2014 admin tiers are the only policy source. "merge": parent's restrictive-only-filtered settings union under the admin winner. Has no effect when no admin tier exists (parent applies as the sole policy tier, still filtered restrictive-only).`), forceLoginOrgUUID: K.union([K.string(), K.array(K.string())]).optional().describe("Organization UUID to require for OAuth login. Accepts a single UUID string or an array of UUIDs (any one is permitted). When set in managed settings, login fails if the authenticated account does not belong to a listed organization."), forceRemoteSettingsRefresh: K.boolean().optional().describe("When set in managed settings, the CLI blocks startup until remote managed settings are freshly fetched, and exits if the fetch fails"), otelHeadersHelper: K.string().optional().describe("Path to a script that outputs OpenTelemetry headers"), outputStyle: K.string().optional().describe("Controls the output style for assistant responses"), viewMode: K.enum(["default", "verbose", "focus"]).optional().catch(void 0).describe("Default transcript view mode on startup"), language: K.string().optional().describe('Preferred language for Claude responses and voice dictation (e.g., "japanese", "spanish")'), skipWebFetchPreflight: K.boolean().optional().describe("Skip the WebFetch blocklist check for enterprise environments with restrictive security policies"), sandbox: PE().optional(), feedbackSurveyRate: K.number().min(0).max(1).optional().describe("Probability (0\u20131) that the session quality survey appears when eligible. 0.05 is a reasonable starting point."), spinnerTipsEnabled: K.boolean().optional().describe("Whether to show tips in the spinner"), spinnerVerbs: K.object({ mode: K.enum(["append", "replace"]), verbs: K.array(K.string()) }).optional().describe('Customize spinner verbs. mode: "append" adds verbs to defaults, "replace" uses only your verbs.'), spinnerTipsOverride: K.object({ excludeDefault: K.boolean().optional(), tips: K.array(K.string()) }).optional().describe("Override spinner tips. tips: array of tip strings. excludeDefault: if true, only show custom tips (default: false)."), syntaxHighlightingDisabled: K.boolean().optional().describe("Whether to disable syntax highlighting in diffs"), terminalTitleFromRename: K.boolean().optional().describe("Whether /rename updates the terminal tab title (defaults to true). Set to false to keep auto-generated topic titles."), alwaysThinkingEnabled: K.boolean().optional().describe("When false, thinking is disabled. When absent or true, thinking is enabled automatically for supported models."), effortLevel: K.enum(["low", "medium", "high", "xhigh"]).optional().catch(void 0).describe("Persisted effort level for supported models."), ultracode: K.boolean().optional().catch(void 0).describe("Enable ultracode for the session: xhigh effort plus standing dynamic-workflow orchestration. Session-scoped \u2014 typically provided via --settings or the apply_flag_settings control request; interactive toggles never persist it. Requires workflows to be enabled and an xhigh-capable model."), autoCompactWindow: K.number().int().min(1e5).max(1e6).optional().catch(void 0).describe("Auto-compact window size"), advisorModel: K.string().optional().describe("Advisor model for the server-side advisor tool."), fastMode: K.boolean().optional().describe("When true, fast mode is enabled. When absent or false, fast mode is off."), fastModePerSessionOptIn: K.boolean().optional().describe("When true, fast mode does not persist across sessions. Each session starts with fast mode off."), promptSuggestionEnabled: K.boolean().optional().describe("When false, prompt suggestions are disabled. When absent or true, prompt suggestions are enabled."), awaySummaryEnabled: K.boolean().optional().describe("@internal When false, the session recap (shown when you return after being away for 5+ minutes) is disabled. When absent or true, recap is enabled. Hidden from public SDK types until external launch."), showClearContextOnPlanAccept: K.boolean().optional().describe('When true, the plan-approval dialog offers a "clear context" option. Defaults to false.'), agent: K.string().optional().describe("Name of an agent (built-in or custom) to use for the main thread. Applies the agent's system prompt, tool restrictions, and model."), companyAnnouncements: K.array(K.string()).optional().describe("Company announcements to display at startup (one will be randomly selected if multiple are provided)"), pluginConfigs: K.record(K.string(), K.object({ mcpServers: K.record(K.string(), K.record(K.string(), K.union([K.string(), K.number(), K.boolean(), K.array(K.string())]))).optional().describe("User configuration values for MCP servers keyed by server name"), options: K.record(K.string(), K.union([K.string(), K.number(), K.boolean(), K.array(K.string())])).optional().describe("Non-sensitive option values from plugin manifest userConfig, keyed by option name. Sensitive values go to secure storage instead.") })).optional().describe("Per-plugin configuration including MCP server user configs, keyed by plugin ID (plugin@marketplace format)"), remote: K.object({ defaultEnvironmentId: K.string().optional().describe("Default environment ID to use for remote sessions") }).optional().describe("Remote session configuration"), autoUpdatesChannel: K.enum(["latest", "stable", "rc"]).optional().describe("Release channel for auto-updates (latest or stable)"), minimumVersion: K.string().optional().describe("Minimum version to stay on - prevents downgrades when switching to stable channel"), plansDirectory: K.string().optional().describe("Custom directory for plan files, relative to project root. If not set, defaults to ~/.claude/plans/"), tui: K.enum(["default", "fullscreen"]).optional().describe('Terminal UI renderer. "fullscreen" uses the flicker-free alt-screen renderer with virtualized scrollback (equivalent to CLAUDE_CODE_NO_FLICKER=1). "default" uses the classic main-screen renderer.'), ...false, voice: K.object({ enabled: K.boolean().optional(), mode: K.enum(["hold", "tap"]).optional().describe("'hold' (default): hold to talk. 'tap': tap to start, tap to stop+submit."), autoSubmit: K.boolean().optional().describe("Submit the prompt when hold-to-talk is released (hold mode only)") }).optional().describe("Voice mode settings (hold-to-talk / tap-to-toggle dictation)"), channelsEnabled: K.boolean().optional().describe("Managed-org opt-in for channel notifications (MCP servers with the claude/channel capability pushing inbound messages). claude.ai Teams/Enterprise: default off. Console: default on unless managed settings exist. Set true to allow; users then select servers via --channels."), allowedChannelPlugins: K.array(K.object({ marketplace: K.string(), plugin: K.string() })).optional().describe("Managed-org allowlist of channel plugins. When set, replaces the default Anthropic allowlist \u2014 admins decide which plugins may push inbound messages. Undefined falls back to the default. Requires channelsEnabled: true."), prefersReducedMotion: K.boolean().optional().describe("Reduce or disable animations for accessibility (spinner shimmer, flash effects, etc.)"), doneMeansMerged: K.boolean().optional().describe("@internal When true, Claude keeps working until the PR is ready for you to merge, a cron/Monitor is armed to resume later, or it hands you a self-contained next step."), autoMemoryEnabled: K.boolean().optional().describe("Enable auto-memory for this project. When false, Claude will not read from or write to the auto-memory directory."), autoMemoryDirectory: K.string().optional().describe("Custom directory path for auto-memory storage. Supports ~/ prefix for home directory expansion. Ignored if set in projectSettings (checked-in .claude/settings.json) for security. When unset, defaults to ~/.claude/projects//memory/."), autoDreamEnabled: K.boolean().optional().describe("Enable background memory consolidation (auto-dream). When set, overrides the server-side default."), showThinkingSummaries: K.boolean().optional().describe("Request API-side thinking summaries and show them in the conversation and in the transcript view (ctrl+o). Set explicitly to override the default for your install."), skipDangerousModePermissionPrompt: K.boolean().optional().describe("Whether the user has accepted the bypass permissions mode dialog"), skipWorkflowUsageWarning: K.boolean().optional().describe("@internal Whether the user has accepted the multi-agent workflow usage warning. Until set, auto permission mode prompts before running a workflow."), disableAutoMode: K.enum(["disable"]).optional().describe("Disable auto mode"), sshConfigs: K.array(K.object({ id: K.string().describe("Unique identifier for this SSH config. Used to match configs across settings sources."), name: K.string().describe("Display name for the SSH connection"), sshHost: K.string().describe('SSH host in format "user@hostname" or "hostname", or a host alias from ~/.ssh/config'), sshPort: K.number().int().optional().describe("SSH port (default: 22)"), sshIdentityFile: K.string().optional().describe("Path to SSH identity file (private key)"), startDirectory: K.string().optional().describe("Default working directory on the remote host. Supports tilde expansion (e.g. ~/projects). If not specified, defaults to the remote user home directory. Can be overridden by the [dir] positional argument in `claude ssh [dir]`.") })).optional().describe("SSH connection configurations for remote environments. Typically set in managed settings by enterprise administrators to pre-configure SSH connections for team members."), claudeMd: K.string().optional().describe("CLAUDE.md-style instructions injected as organization-managed memory. Only honored from managed/policy settings."), claudeMdExcludes: K.array(K.string()).optional().describe('Glob patterns or absolute paths of CLAUDE.md files to exclude from loading. Patterns are matched against absolute file paths using picomatch. Only applies to User, Project, and Local memory types (Managed/policy files cannot be excluded). Examples: "/home/user/monorepo/CLAUDE.md", "**/code/CLAUDE.md", "**/some-dir/.claude/rules/**"'), pluginTrustMessage: K.string().optional().describe('Custom message to append to the plugin trust warning shown before installation. Only read from policy settings (managed-settings.json / MDM). Useful for enterprise administrators to add organization-specific context (e.g., "All plugins from our internal marketplace are vetted and approved.").'), theme: K.union([K.enum(kE), K.string().startsWith("custom:").transform((Q) => Q)]).optional().catch(void 0).describe("Color theme for the UI"), editorMode: K.enum(bE).optional().catch(void 0).describe("Key binding mode for the prompt input"), verbose: K.boolean().optional().describe("Show full tool output instead of truncated summaries"), preferredNotifChannel: K.enum(EE).optional().catch(void 0).describe("Preferred OS notification channel"), autoCompactEnabled: K.boolean().optional().describe("Automatically compact conversation when context fills"), autoScrollEnabled: K.boolean().optional().describe("Auto-scroll the conversation view to bottom (fullscreen mode only)"), fileCheckpointingEnabled: K.boolean().optional().describe("Snapshot files before edits so /rewind can restore them"), showTurnDuration: K.boolean().optional().describe('Show "Cooked for Nm Ns" after each assistant turn'), showMessageTimestamps: K.boolean().optional().describe("Stamp each assistant message with its arrival time"), terminalProgressBarEnabled: K.boolean().optional().describe("Emit OSC 9;4 progress sequences during long operations"), todoFeatureEnabled: K.boolean().optional().describe("Enable the todo / task tracking panel"), teammateMode: K.enum(_E2).optional().catch(void 0).describe("How spawned teammates execute (tmux, in-process, auto)"), remoteControlAtStartup: K.boolean().optional().describe("Start Remote Control bridge automatically each session"), isolatePeerMachines: K.boolean().optional().describe("Require explicit approval before SendMessage can reach a peer session on another machine via Remote Control"), daemonColdStart: K.enum(["transient", "ask"]).optional().describe("When no background service is running: 'transient' spawns one for this login session; 'ask' offers to install it persistently"), autoUploadSessions: K.boolean().optional().describe("Mirror local sessions to claude.ai as view-only (no remote control)"), inputNeededNotifEnabled: K.boolean().optional().describe("Push to mobile when a permission prompt or question is waiting"), agentPushNotifEnabled: K.boolean().optional().describe("Allow Claude to push proactive mobile notifications"), ...tE($) }).passthrough(); +} +var _4 = b(() => Kb(Ez())); +var X1 = "https://code.claude.com/docs/en"; +var k$$ = [{ matches: ($) => $.path === "permissions.defaultMode" && $.code === "invalid_value", tip: { suggestion: 'Valid modes: "acceptEdits" (ask before file changes), "plan" (analysis only), "bypassPermissions" (auto-accept all), or "default" (standard behavior)', docLink: `${X1}/iam#permission-modes` } }, { matches: ($) => $.path === "apiKeyHelper" && $.code === "invalid_type", tip: { suggestion: 'Provide a shell command that outputs your API key to stdout. The script should output only the API key. Example: "/bin/generate_temp_api_key.sh"' } }, { matches: ($) => $.path === "cleanupPeriodDays" && $.code === "too_small", tip: { suggestion: 'cleanupPeriodDays must be at least 1. To keep transcripts for a long time, set a large number (e.g. 3650 for ~10 years). To disable transcript writes entirely, remove this setting and use the --no-session-persistence CLI flag or the SDK persistSession:false option instead. (0 is rejected because it previously silently disabled all transcript writes, which users setting it to mean "never clean up" did not expect.)' } }, { matches: ($) => $.path.startsWith("env.") && $.code === "invalid_type", tip: { suggestion: 'Environment variables must be strings. Wrap numbers and booleans in quotes. Example: "DEBUG": "true", "PORT": "3000"', docLink: `${X1}/settings#environment-variables` } }, { matches: ($) => ($.path === "permissions.allow" || $.path === "permissions.deny") && $.code === "invalid_type" && $.expected === "array", tip: { suggestion: 'Permission rules must be in an array. Format: ["Tool(specifier)"]. Examples: ["Bash(npm run build)", "Edit(docs/**)", "Read(~/.zshrc)"]. Use * for wildcards.' } }, { matches: ($) => $.path.startsWith("hooks.") && $.code === "invalid_key", tip: { suggestion: "Not a recognized hook event. Common events: PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, SessionEnd, Stop. Check spelling and capitalization.", docLink: `${X1}/hooks` } }, { matches: ($) => /\.hooks\.\d+\.command$/.test($.path) && $.code === "invalid_type" && $.received === "undefined", tip: { suggestion: 'Command hooks require `command`. For exec form (no shell), set `command` to the executable and `args` to its arguments: {"type": "command", "command": "echo", "args": ["hi"]}. For shell form, set `command` to the full shell string: {"type": "command", "command": "echo hi"}.', docLink: `${X1}/hooks#exec-form-and-shell-form` } }, { matches: ($) => $.path.includes("hooks") && $.code === "invalid_type", tip: { suggestion: 'Hooks use a matcher + hooks array. The matcher is a string: a tool name ("Bash"), pipe-separated list ("Edit|Write"), or empty to match all. Example: {"PostToolUse": [{"matcher": "Edit|Write", "hooks": [{"type": "command", "command": "echo Done"}]}]}' } }, { matches: ($) => $.code === "invalid_type" && $.expected === "boolean", tip: { suggestion: 'Use true or false without quotes. Example: "includeCoAuthoredBy": true' } }, { matches: ($) => $.code === "unrecognized_keys", tip: { suggestion: "Check for typos or refer to the documentation for valid fields", docLink: `${X1}/settings` } }, { matches: ($) => $.code === "invalid_value" && $.enumValues !== void 0, tip: { suggestion: void 0 } }, { matches: ($) => $.code === "invalid_type" && $.expected === "object" && $.received === null && $.path === "", tip: { suggestion: "Check for missing commas, unmatched brackets, or trailing commas. Use a JSON validator to identify the exact syntax error." } }, { matches: ($) => $.path === "permissions.additionalDirectories" && $.code === "invalid_type", tip: { suggestion: 'Must be an array of directory paths. Example: ["~/projects", "/tmp/workspace"]. You can also use --add-dir flag or /add-dir command', docLink: `${X1}/iam#working-directories` } }]; +var S$$ = { permissions: `${X1}/iam#configuring-permissions`, env: `${X1}/settings#environment-variables`, hooks: `${X1}/hooks` }; +var sZ$ = b(() => _4().strict()); +var T$$ = new Set(r0); +var r1 = Object.freeze({ settings: {}, errors: [] }); +function i$$($, Q, J) { + if (J !== void 0 && !H1($[Q], J) || J === void 0 && !(Q in $)) Z8($, Q, J); +} +var Q5 = i$$; +function n$$($) { + return function(Q, J, Y) { + var X = -1, W = Object(Q), G = Y(Q), U = G.length; + while (U--) { + var H = G[$ ? U : ++X]; + if (J(W[H], H, W) === false) break; + } + return Q; + }; +} +var vb = n$$; +var r$$ = vb(); +var Cb = r$$; +function o$$($) { + return r6($) && L8($); +} +var Tb = o$$; +var t$$ = "[object Object]"; +var a$$ = Function.prototype; +var s$$ = Object.prototype; +var xb = a$$.toString; +var e$$ = s$$.hasOwnProperty; +var $6$ = xb.call(Object); +function Q6$($) { + if (!r6($) || L4($) != t$$) return false; + var Q = WX($); + if (Q === null) return true; + var J = e$$.call(Q, "constructor") && Q.constructor; + return typeof J == "function" && J instanceof J && xb.call(J) == $6$; +} +var yb = Q6$; +function J6$($, Q) { + if (Q === "constructor" && typeof $[Q] === "function") return; + if (Q == "__proto__") return; + return $[Q]; +} +var J5 = J6$; +function X6$($) { + return rw($, JX($)); +} +var fb = X6$; +function Y6$($, Q, J, Y, X, W, G) { + var U = J5($, J), H = J5(Q, J), q = G.get(H); + if (q) { + Q5($, J, q); + return; + } + var V = W ? W(U, H, J + "", $, Q, G) : void 0, B = V === void 0; + if (B) { + var z4 = B6(H), N = !z4 && xQ(H), w = !z4 && !N && $X(H); + if (V = H, z4 || N || w) if (B6(U)) V = U; + else if (Tb(U)) V = zO(U); + else if (N) B = false, V = UU(H, true); + else if (w) B = false, V = OO(H, true); + else V = []; + else if (yb(H) || h4(H)) { + if (V = U, h4(U)) V = fb(U); + else if (!$6(U) || o0(U)) V = ZO(H); + } else B = false; + } + if (B) G.set(H, V), X(V, H, Y, W, G), G.delete(H); + Q5($, J, V); +} +var gb = Y6$; +function hb($, Q, J, Y, X) { + if ($ === Q) return; + Cb(Q, function(W, G) { + if (X || (X = new nw()), $6(W)) gb($, Q, G, J, hb, Y, X); + else { + var U = Y ? Y(J5($, G), W, G + "", $, Q, X) : void 0; + if (U === void 0) U = W; + Q5($, G, U); + } + }, JX); +} +var ub = hb; +function W6$($, Q, J) { + switch (J.length) { + case 0: + return $.call(Q); + case 1: + return $.call(Q, J[0]); + case 2: + return $.call(Q, J[0], J[1]); + case 3: + return $.call(Q, J[0], J[1], J[2]); + } + return $.apply(Q, J); +} +var mb = W6$; +var lb = Math.max; +function G6$($, Q, J) { + return Q = lb(Q === void 0 ? $.length - 1 : Q, 0), function() { + var Y = arguments, X = -1, W = lb(Y.length - Q, 0), G = Array(W); + while (++X < W) G[X] = Y[Q + X]; + X = -1; + var U = Array(Q + 1); + while (++X < Q) U[X] = Y[X]; + return U[Q] = J(G), mb($, this, U); + }; +} +var WG = G6$; +function U6$($) { + return function() { + return $; + }; +} +var cb = U6$; +var H6$ = !F8 ? GX : function($, Q) { + return F8($, "toString", { configurable: true, enumerable: false, value: cb(Q), writable: true }); +}; +var pb = H6$; +var K6$ = 800; +var q6$ = 16; +var V6$ = Date.now; +function B6$($) { + var Q = 0, J = 0; + return function() { + var Y = V6$(), X = q6$ - (Y - J); + if (J = Y, X > 0) { + if (++Q >= K6$) return arguments[0]; + } else Q = 0; + return $.apply(void 0, arguments); + }; +} +var db = B6$; +var z6$ = db(pb); +var GG = z6$; +function N6$($, Q) { + return GG(WG($, Q, GX), $ + ""); +} +var ib = N6$; +function w6$($, Q, J) { + if (!$6(J)) return false; + var Y = typeof Q; + if (Y == "number" ? L8(J) && F1(Q, J.length) : Y == "string" && Q in J) return H1(J[Q], $); + return false; +} +var nb = w6$; +function O6$($) { + return ib(function(Q, J) { + var Y = -1, X = J.length, W = X > 1 ? J[X - 1] : void 0, G = X > 2 ? J[2] : void 0; + if (W = $.length > 3 && typeof W == "function" ? (X--, W) : void 0, G && nb(J[0], J[1], G)) W = X < 3 ? void 0 : W, X = 1; + Q = Object(Q); + while (++Y < X) { + var U = J[Y]; + if (U) $(Q, U, Y, W); + } + return Q; + }); +} +var rb = O6$; +var D6$ = rb(function($, Q, J, Y) { + ub($, Q, J, Y); +}); +function F6$($, Q, J, Y) { + if (!$6($)) return $; + Q = Z1(Q, $); + var X = -1, W = Q.length, G = W - 1, U = $; + while (U != null && ++X < W) { + var H = A8(Q[X]), q = J; + if (H === "__proto__" || H === "constructor" || H === "prototype") return $; + if (X != G) { + var V = U[H]; + if (q = Y ? Y(V, H, U) : void 0, q === void 0) q = $6(V) ? V : F1(Q[X + 1]) ? [] : {}; + } + r5(U, H, q), U = U[H]; + } + return $; +} +var ob = F6$; +function Z6$($, Q, J) { + var Y = -1, X = Q.length, W = {}; + while (++Y < X) { + var G = Q[Y], U = _O($, G); + if (J(U, G)) ob(W, Z1(G, $), U); + } + return W; +} +var tb = Z6$; +function M6$($, Q) { + return tb($, Q, function(J, Y) { + return vO($, Y); + }); +} +var ab = M6$; +var sb = c6 ? c6.isConcatSpreadable : void 0; +function L6$($) { + return B6($) || h4($) || !!(sb && $ && $[sb]); +} +var eb = L6$; +function $_($, Q, J, Y, X) { + var W = -1, G = $.length; + J || (J = eb), X || (X = []); + while (++W < G) { + var U = $[W]; + if (Q > 0 && J(U)) if (Q > 1) $_(U, Q - 1, J, Y, X); + else NO(X, U); + else if (!Y) X[X.length] = U; + } + return X; +} +var Q_ = $_; +function j6$($) { + var Q = $ == null ? 0 : $.length; + return Q ? Q_($, 1) : []; +} +var J_ = j6$; +function A6$($) { + return GG(WG($, void 0, J_), $ + ""); +} +var X_ = A6$; +var I6$ = X_(function($, Q) { + return $ == null ? {} : ab($, Q); +}); +process.env.NoDefaultCurrentDirectoryInExePath = "1"; +async function G4$($, Q) { + try { + await (0, import_promises.copyFile)($, Q); + } catch (J) { + if (!D1(J)) throw J; + } +} +async function U4$($, Q) { + var _a5; + if (!$) return; + let J = $; + try { + let Y = d$($); + if ((_a5 = Y == null ? void 0 : Y.claudeAiOauth) == null ? void 0 : _a5.refreshToken) delete Y.claudeAiOauth.refreshToken, J = B$(Y); + } catch (e2) { + } + await (0, import_promises.writeFile)(Q, J, { mode: 384 }); +} +function H4$() { + if (process.platform !== "darwin") return Promise.resolve(void 0); + let $ = tZ(oZ); + return new Promise((Q) => { + (0, import_child_process.execFile)("security", ["find-generic-password", "-a", aZ(), "-w", "-s", $], { encoding: "utf-8", timeout: 5e3 }, (J, Y) => Q(J ? void 0 : Y.trim() || void 0)); + }); +} +async function b_($, Q, J, Y, X = 6e4) { + var _a5, _b3; + if (!L$(Q)) return; + let W = J4(J), G = await v4($.load({ projectKey: W, sessionId: Q }), X, `SessionStore.load() timed out after ${X}ms for session ${Q}`); + if (!G || G.length === 0) return; + let U = (0, import_path.join)((0, import_os.tmpdir)(), `claude-resume-${(0, import_crypto.randomUUID)()}`); + try { + let H = (0, import_path.join)(U, "projects", W); + await (0, import_promises.mkdir)(H, { recursive: true }); + let q = (0, import_path.join)(H, `${Q}.jsonl`); + await rQ(q, G); + let V = (_a5 = Y == null ? void 0 : Y.CLAUDE_CONFIG_DIR) != null ? _a5 : process.env.CLAUDE_CONFIG_DIR, B = V != null ? V : (0, import_path.join)((0, import_os.homedir)(), ".claude"), z4; + try { + z4 = await (0, import_promises.readFile)((0, import_path.join)(B, ".credentials.json"), "utf-8"); + } catch (N) { + if (!D1(N)) throw N; + } + if (!V && !(Y != null ? Y : process.env).ANTHROPIC_API_KEY && !(Y != null ? Y : process.env).CLAUDE_CODE_OAUTH_TOKEN) z4 = (_b3 = await H4$()) != null ? _b3 : z4; + if (await U4$(z4, (0, import_path.join)(U, ".credentials.json")), await G4$((0, import_path.join)(V != null ? V : (0, import_os.homedir)(), ".claude.json"), (0, import_path.join)(U, ".claude.json")), $.listSubkeys) { + let N = (0, import_path.join)(H, Q), w = await v4($.listSubkeys({ projectKey: W, sessionId: Q }), X, `SessionStore.listSubkeys() timed out after ${X}ms for session ${Q}`); + for (let O of w) { + let D = (0, import_path.resolve)(N, O + ".jsonl"); + if (!O || (0, import_path.isAbsolute)(O) || O.split(/[\\/]/).includes("..") || !D.startsWith(N + import_path.sep)) { + X$(`[SessionStore] skipping unsafe subpath from listSubkeys: ${O}`, { level: "warn" }); + continue; + } + let M = await v4($.load({ projectKey: W, sessionId: Q, subpath: O }), X, `SessionStore.load() timed out after ${X}ms for session ${Q} subpath ${O}`); + if (!M || M.length === 0) continue; + let j = [], A = []; + for (let S of M) if (lz(S)) j.push(S); + else A.push(S); + if (A.length > 0) await (0, import_promises.mkdir)((0, import_path.dirname)(D), { recursive: true }), await rQ(D, A); + if (j.length > 0) { + let S = j.at(-1), u = (0, import_path.resolve)(N, O + ".meta.json"); + await (0, import_promises.mkdir)((0, import_path.dirname)(u), { recursive: true }); + let { type: G$, ...h$ } = S; + await (0, import_promises.writeFile)(u, B$(h$), { mode: 384 }); + } + } + } + return U; + } catch (H) { + throw await KG(U), H; + } +} +function uz($, Q, J, Y) { + var _a5, _b3, _c2, _d, _e2; + let { systemPrompt: X, settings: W, managedSettings: G, settingSources: U, sandbox: H, ...q } = $ != null ? $ : {}, V, B, z4; + if (X === void 0) V = ""; + else if (typeof X === "string") V = X; + else if (Array.isArray(X)) V = X; + else if (X.type === "preset") B = X.append, z4 = X.excludeDynamicSections; + process.env.CLAUDE_AGENT_SDK_VERSION = "0.3.159"; + let { abortController: N = g9(), additionalDirectories: w = [], agent: O, agents: D, allowedTools: M = [], betas: j, canUseTool: A, continue: S, cwd: u, debug: G$, debugFile: h$, disallowedTools: e$ = [], tools: m6, env: F6, executable: a1 = V5() ? "bun" : "node", executableArgs: i0 = [], extraArgs: k4 = {}, fallbackModel: S9, enableFileCheckpointing: W1, toolConfig: i, forkSession: G5, hooks: U5, includeHookEvents: v9, includePartialMessages: C9, forwardSubagentText: T9, onElicitation: H5, persistSession: u$, sessionStore: s$, sessionStoreFlush: S4, thinking: x9, effort: C_, maxThinkingTokens: VG, maxTurns: T_, maxBudgetUsd: x_, taskBudget: y_, mcpServers: dz, model: f_, outputFormat: iz, permissionMode: g_ = "default", allowDangerouslySkipPermissions: h_ = false, permissionPromptToolName: u_, plugins: m_, getOAuthToken: nz, getHostAuthToken: rz, workload: oz, resume: tz, resumeSessionAt: l_, sessionId: c_, skills: az, stderr: p_, strictMcpConfig: d_ } = q; + if (s$ && u$ === false) throw Error("sessionStore cannot be used with persistSession: false -- the storage adapter requires local writes to mirror from. Use CLAUDE_CONFIG_DIR=/tmp for ephemeral local writes with external mirroring."); + if (s$ && S && !tz && !s$.listSessions) throw Error("Options.continue with sessionStore requires store.listSessions to be implemented"); + if (s$ && W1) throw Error("enableFileCheckpointing is not yet supported with sessionStore (backup blobs are not mirrored, so rewindFiles() fails after a store-backed resume)."); + if (s$ && q.spawnClaudeCodeProcess) X$("sessionStore with custom spawnClaudeCodeProcess: ensure the subprocess CLAUDE_CONFIG_DIR matches the parent (same path, same separators) or transcript_mirror frames will be dropped.", { level: "warn" }); + let BG = q.pathToClaudeCodeExecutable; + if (!BG) { + let S6 = __filename, X4 = (0, import_module.createRequire)(S6), s1 = F2((n0) => X4.resolve(n0)); + if (!s1) throw Error(`Native CLI binary for ${process.platform}-${process.arch} not found. Reinstall @anthropic-ai/claude-agent-sdk without --omit=optional, or set options.pathToClaudeCodeExecutable.`); + BG = s1; + } + let sz = (iz == null ? void 0 : iz.type) === "json_schema" ? iz.schema : void 0, V6 = F6 ? { ...F6 } : { ...process.env }; + if (!V6.CLAUDE_CODE_ENTRYPOINT) V6.CLAUDE_CODE_ENTRYPOINT = "sdk-ts"; + if (!V6.CLAUDE_AGENT_SDK_VERSION) V6.CLAUDE_AGENT_SDK_VERSION = "0.3.159"; + if (W1) V6.CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING = "true"; + if (nz) V6.CLAUDE_CODE_SDK_HAS_OAUTH_REFRESH = "1"; + if (rz) V6.CLAUDE_CODE_SDK_HAS_HOST_AUTH_REFRESH = "1"; + if ((_a5 = i == null ? void 0 : i.askUserQuestion) == null ? void 0 : _a5.previewFormat) V6.CLAUDE_CODE_QUESTION_PREVIEW_FORMAT = i.askUserQuestion.previewFormat; + let zG = {}; + if (qG.propagation.inject(qG.context.active(), zG), "traceparent" in zG) { + for (let S6 of ["TRACEPARENT", "TRACESTATE"]) if (!(S6 in (F6 != null ? F6 : {}))) delete V6[S6]; + } + for (let [S6, X4] of Object.entries(zG)) { + let s1 = S6.toUpperCase(); + if (!(s1 in (F6 != null ? F6 : {}))) V6[s1] = X4; + } + let ez = {}, $N = /* @__PURE__ */ new Map(); + if (dz) for (let [S6, X4] of Object.entries(dz)) if (X4.type === "sdk" && X4.instance) $N.set(S6, X4.instance); + else ez[S6] = X4; + let y9; + if (x9) switch (x9.type) { + case "adaptive": + y9 = { type: "adaptive", display: x9.display }; + break; + case "enabled": + y9 = { type: "enabled", budgetTokens: x9.budgetTokens, display: x9.display }; + break; + case "disabled": + y9 = { type: "disabled" }; + break; + } + else if (VG !== void 0) y9 = VG === 0 ? { type: "disabled" } : { type: "enabled", budgetTokens: VG }; + if (J) { + if (V6.CLAUDE_CONFIG_DIR = J, process.platform === "win32") V6.CLAUDE_SECURESTORAGE_CONFIG_DIR = (_e2 = (_d = (_c2 = (_b3 = F6 == null ? void 0 : F6.CLAUDE_SECURESTORAGE_CONFIG_DIR) != null ? _b3 : process.env.CLAUDE_SECURESTORAGE_CONFIG_DIR) != null ? _c2 : F6 == null ? void 0 : F6.CLAUDE_CONFIG_DIR) != null ? _d : process.env.CLAUDE_CONFIG_DIR) != null ? _e2 : ""; + } + let QN = new jU({ abortController: N, additionalDirectories: w, agent: O, betas: j, cwd: u, debug: G$, debugFile: h$, executable: a1, executableArgs: i0, extraArgs: oz ? { ...k4, workload: oz } : k4, pathToClaudeCodeExecutable: BG, env: V6, forkSession: G5, stderr: p_, thinkingConfig: y9, effort: C_, maxTurns: T_, maxBudgetUsd: x_, taskBudget: y_, model: f_, fallbackModel: S9, jsonSchema: sz, permissionMode: g_, allowDangerouslySkipPermissions: h_, permissionPromptToolName: u_, continueConversation: s$ ? void 0 : S, resume: tz, resumeSessionAt: l_, sessionId: c_, settings: typeof W === "object" ? B$(W) : W, managedSettings: G ? B$(G) : void 0, settingSources: U, skills: az, allowedTools: M, disallowedTools: e$, tools: m6, mcpServers: ez, strictMcpConfig: d_, canUseTool: !!A, hooks: !!U5, includeHookEvents: v9, includePartialMessages: C9, persistSession: u$, sessionMirror: !!s$, plugins: m_, sandbox: H, spawnClaudeCodeProcess: q.spawnClaudeCodeProcess, deferSpawn: Y }), i_ = { systemPrompt: V, appendSystemPrompt: B, planModeInstructions: q.planModeInstructions, appendSubagentSystemPrompt: q.appendSubagentSystemPrompt, toolAliases: q.toolAliases, excludeDynamicSections: z4, agents: D, title: q.title, skills: az, webSearchIsolationExemptMcpServers: q.webSearchIsolationExemptMcpServers, promptSuggestions: q.promptSuggestions, agentProgressSummaries: q.agentProgressSummaries, forwardSubagentText: T9 }, NG = new PU(QN, Q, A, U5, N, $N, sz, i_, H5, nz, rz); + if (s$) { + let S6 = () => { + var _a6; + return (0, import_path.join)((_a6 = V6.CLAUDE_CONFIG_DIR) != null ? _a6 : (0, import_path.join)((0, import_os.homedir)(), ".claude"), "projects"); + }, X4 = S4 === "eager", s1 = new EU(async (n0, wG) => { + let f9 = A_(n0, S6()); + if (f9) await s$.append(f9, wG); + else X$(`[SessionStore] dropping mirror frame: filePath ${n0} is not under ${S6()} -- subprocess CLAUDE_CONFIG_DIR likely differs from parent (custom spawnClaudeCodeProcess / container?)`, { level: "warn" }); + }, void 0, (n0, wG) => { + let f9 = A_(n0, S6()); + if (f9) NG.reportMirrorError(f9, wG.message); + }, X4 ? 0 : zX, X4 ? 0 : NX); + NG.setTranscriptMirrorBatcher(s1); + } + return { queryInstance: NG, transport: QN, abortController: N, processEnv: V6 }; +} +function mz($, Q, J, Y) { + if (typeof J === "string") Q.write(B$({ type: "user", session_id: "", message: { role: "user", content: [{ type: "text", text: J }] }, parent_tool_use_id: null }) + ` +`); + else $.streamInput(J).catch((X) => Y.abort(X)); +} +var K4$ = /* @__PURE__ */ new Set(["EBUSY", "EMFILE", "ENFILE", "ENOTEMPTY", "EPERM"]); +async function KG($) { + var _a5; + for (let Q = 0; ; Q++) try { + return await (0, import_promises.rm)($, { recursive: true, force: true }); + } catch (J) { + if (Q >= 4 || !K4$.has((_a5 = o$(J)) != null ? _a5 : "")) return; + await K5((Q + 1) * 100); + } +} +function q4$($, Q) { + $.waitForExit().catch(() => { + }).finally(() => KG(Q)); +} +function jA$({ prompt: $, options: Q }) { + var _a5, _b3; + if (((Q == null ? void 0 : Q.resume) || (Q == null ? void 0 : Q.continue)) && (Q == null ? void 0 : Q.sessionStore)) { + let { queryInstance: W, transport: G, abortController: U, processEnv: H } = uz({ ...Q }, typeof $ === "string", void 0, true), q = (0, import_path.resolve)((_a5 = Q.cwd) != null ? _a5 : "."), V = Q.sessionStore, B = (_b3 = Q.loadTimeoutMs) != null ? _b3 : 6e4, z4 = Q.resume; + return (async () => { + var _a6; + if (!z4) z4 = (_a6 = (await v4(V.listSessions(J4(q)), B, `SessionStore.listSessions() timed out after ${B}ms`)).slice().sort((O, D) => D.mtime - O.mtime)[0]) == null ? void 0 : _a6.sessionId; + if (!z4) return; + return b_(V, z4, q, Q.env, Q.loadTimeoutMs); + })().then((w) => { + var _a6, _b4, _c2, _d, _e2, _f2; + if (w) { + G.updateResume(z4); + let O = { CLAUDE_CONFIG_DIR: w }; + if (process.platform === "win32") { + let D = (_f2 = (_e2 = (_d = (_b4 = (_a6 = Q.env) == null ? void 0 : _a6.CLAUDE_SECURESTORAGE_CONFIG_DIR) != null ? _b4 : process.env.CLAUDE_SECURESTORAGE_CONFIG_DIR) != null ? _d : (_c2 = Q.env) == null ? void 0 : _c2.CLAUDE_CONFIG_DIR) != null ? _e2 : process.env.CLAUDE_CONFIG_DIR) != null ? _f2 : ""; + O.CLAUDE_SECURESTORAGE_CONFIG_DIR = D, H.CLAUDE_SECURESTORAGE_CONFIG_DIR = D; + } + G.updateEnv(O), H.CLAUDE_CONFIG_DIR = w, W.addCleanupCallback(() => q4$(G, w)); + } + if (!W.isClosed()) G.spawn(); + }).catch((w) => { + let O = j4(w); + G.spawnAbort(O), W.setError(O); + }), mz(W, G, $, U), W; + } + let { queryInstance: J, transport: Y, abortController: X } = uz(Q, typeof $ === "string"); + return mz(J, Y, $, X), J; +} +function __($) { + let Q = (0, import_path.resolve)($ != null ? $ : "."), J; + try { + J = (0, import_fs.realpathSync)(Q); + } catch (e2) { + J = Q; + } + return J.normalize("NFC"); +} +function J4($) { + return F0(__($)); +} +function lz($) { + return typeof $ === "object" && $ !== null && "type" in $ && $.type === "agent_metadata"; +} +function A_($, Q) { + let J = (0, import_path.relative)(Q, $), Y = J.split(import_path.sep); + if (Y[0] === ".." || (0, import_path.isAbsolute)(J)) return null; + if (Y.length < 2) return null; + let X = Y[0], W = Y[1]; + if (Y.length === 2 && W.endsWith(".jsonl")) return { projectKey: X, sessionId: W.replace(/\.jsonl$/, "") }; + if (Y.length >= 4) { + let G = Y.slice(2), U = G.length - 1; + return G[U] = G.at(-1).replace(/\.jsonl$/, ""), { projectKey: X, sessionId: W, subpath: G.join("/") }; + } + return null; +} + +// src/providers/claude/commands/probeRuntimeCommands.ts +init_env(); +init_path(); + +// src/providers/claude/runtime/customSpawn.ts +var import_child_process6 = require("child_process"); +init_env(); + +// src/utils/windowsCmdShim.ts +var WINDOWS_CMD_ARGUMENT_CHARS = /[\s"&<>|{}^=;!'+,`~()%@]/u; +function resolveWindowsCmdShimSpawnSpec(spec) { + const command = spec.command.trim(); + if (!command || process.platform !== "win32" || !command.toLowerCase().endsWith(".cmd")) { + return { + args: spec.args, + command: spec.command + }; + } + const shellCommand = [command, ...spec.args].map((value) => quoteWindowsShellArgument(value)).join(" "); + return { + args: ["/d", "/s", "/c", `"${shellCommand}"`], + command: process.env.ComSpec || process.env.comspec || "cmd.exe", + killProcessTree: true, + windowsVerbatimArguments: true + }; +} +function terminateSpawnedProcess(proc, signal, spawnProcess, spawnSpec) { + if (process.platform !== "win32" || !(spawnSpec == null ? void 0 : spawnSpec.killProcessTree) || typeof proc.pid !== "number") { + return proc.kill(signal); + } + try { + const taskkill = spawnProcess("taskkill.exe", ["/pid", String(proc.pid), "/t", "/f"], { + stdio: "ignore", + windowsHide: true + }); + if (isErrorEmitterLike(taskkill)) { + taskkill.on("error", () => { + }); + } + return true; + } catch (e2) { + return proc.kill(signal); + } +} +function isErrorEmitterLike(value) { + return value !== null && typeof value === "object" && typeof value.on === "function"; +} +function requiresWindowsShellQuoting(value) { + return WINDOWS_CMD_ARGUMENT_CHARS.test(value) || value.includes("[") || value.includes("]"); +} +function quoteWindowsShellArgument(value) { + if (!value.length) { + return '""'; + } + if (!requiresWindowsShellQuoting(value)) { + return value; + } + return `"${value.replace(/"/g, '""')}"`; +} + +// src/providers/claude/runtime/customSpawn.ts +function createCustomSpawnFunction(enhancedPath) { + return (options) => { + let { command } = options; + let { args } = options; + const { cwd, env, signal } = options; + const shouldPipeStderr = !!(env == null ? void 0 : env.DEBUG_CLAUDE_AGENT_SDK); + if (command === "node" || cliPathRequiresNode(command)) { + const nodeFullPath = findNodeExecutable(enhancedPath); + if (command === "node") { + if (nodeFullPath) { + command = nodeFullPath; + } + } else { + args = [command, ...args]; + command = nodeFullPath != null ? nodeFullPath : "node"; + } + } + const resolvedSpawnSpec = resolveWindowsCmdShimSpawnSpec({ args, command }); + const child = (0, import_child_process6.spawn)(resolvedSpawnSpec.command, resolvedSpawnSpec.args, { + cwd, + env, + stdio: ["pipe", "pipe", shouldPipeStderr ? "pipe" : "ignore"], + windowsHide: true, + ...resolvedSpawnSpec.windowsVerbatimArguments ? { windowsVerbatimArguments: true } : {} + }); + installTreeAwareKill(child, resolvedSpawnSpec); + if (signal) { + const killChild = () => { + child.kill("SIGTERM"); + }; + if (signal.aborted) { + killChild(); + } else { + signal.addEventListener("abort", killChild, { once: true }); + } + } + if (shouldPipeStderr && child.stderr && typeof child.stderr.on === "function") { + child.stderr.on("data", () => { + }); + } + if (!child.stdin || !child.stdout) { + throw new Error("Failed to create process streams"); + } + return child; + }; +} +function installTreeAwareKill(child, spawnSpec) { + if (!spawnSpec.killProcessTree) { + return; + } + const originalKill = child.kill.bind(child); + const killableChild = { + get pid() { + return child.pid; + }, + kill: originalKill + }; + child.kill = ((signal) => terminateSpawnedProcess(killableChild, signal, import_child_process6.spawn, spawnSpec)); +} + +// src/core/providers/providerConfig.ts +function isRecord2(value) { + return !!value && typeof value === "object" && !Array.isArray(value); +} +function getProviderConfig(settings11, providerId) { + const candidate = settings11.providerConfigs; + if (!isRecord2(candidate)) { + return {}; + } + const config2 = candidate[providerId]; + return isRecord2(config2) ? { ...config2 } : {}; +} +function setProviderConfig(settings11, providerId, config2) { + const current = settings11.providerConfigs; + const nextConfigs = isRecord2(current) ? { ...current } : {}; + nextConfigs[providerId] = { ...config2 }; + settings11.providerConfigs = nextConfigs; +} + +// src/core/providers/providerEnvironment.ts +init_env(); +var SHARED_ENVIRONMENT_KEYS = /* @__PURE__ */ new Set([ + "PATH", + "HTTP_PROXY", + "HTTPS_PROXY", + "NO_PROXY", + "ALL_PROXY", + "SSL_CERT_FILE", + "SSL_CERT_DIR", + "REQUESTS_CA_BUNDLE", + "CURL_CA_BUNDLE", + "NODE_EXTRA_CA_CERTS", + "TMPDIR", + "TMP", + "TEMP" +]); +function resolveScopeProviderId(scope) { + return scope.startsWith("provider:") ? scope.slice("provider:".length) : null; +} +function classifyEnvironmentKey(key) { + const normalized = key.trim().toUpperCase(); + if (!normalized) { + return { type: "shared-unknown" }; + } + if (SHARED_ENVIRONMENT_KEYS.has(normalized)) { + return { type: "shared-known" }; + } + for (const providerId of ProviderRegistry.getRegisteredProviderIds()) { + const patterns = ProviderRegistry.getEnvironmentKeyPatterns(providerId); + if (patterns.some((pattern) => pattern.test(normalized))) { + return { type: "provider", providerId }; + } + } + return { type: "shared-unknown" }; +} +function extractEnvironmentKey(line) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith("#")) { + return null; + } + const normalized = trimmed.startsWith("export ") ? trimmed.slice(7) : trimmed; + const eqIndex = normalized.indexOf("="); + if (eqIndex <= 0) { + return null; + } + const key = normalized.slice(0, eqIndex).trim(); + return key || null; +} +function appendLines(target, pendingDecorators, line) { + target.push(...pendingDecorators, line); +} +function createClassifiedEnvironmentLines() { + return { + shared: [], + providers: {}, + reviewKeys: /* @__PURE__ */ new Set() + }; +} +function joinEnvironmentLines(lines) { + return lines.join("\n"); +} +function hasMeaningfulEnvironmentContent(envText) { + return envText.split(/\r?\n/).some((line) => { + const trimmed = line.trim(); + return trimmed.length > 0 && !trimmed.startsWith("#"); + }); +} +function getLegacyEnvironmentClassification(settings11) { + const legacyEnvironmentVariables = settings11.environmentVariables; + if (typeof legacyEnvironmentVariables !== "string" || legacyEnvironmentVariables.length === 0) { + return { + shared: "", + providers: {}, + reviewKeys: [] + }; + } + return classifyEnvironmentVariablesByOwnership(legacyEnvironmentVariables); +} +function classifyEnvironmentVariablesByOwnership(input) { + var _a5; + const result = createClassifiedEnvironmentLines(); + let pendingDecorators = []; + for (const line of input.split(/\r?\n/)) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith("#")) { + pendingDecorators.push(line); + continue; + } + const key = extractEnvironmentKey(line); + if (!key) { + appendLines(result.shared, pendingDecorators, line); + pendingDecorators = []; + continue; + } + const ownership = classifyEnvironmentKey(key); + if (ownership.type === "provider") { + const target = (_a5 = result.providers[ownership.providerId]) != null ? _a5 : []; + appendLines(target, pendingDecorators, line); + result.providers[ownership.providerId] = target; + } else { + appendLines(result.shared, pendingDecorators, line); + if (ownership.type === "shared-unknown") { + result.reviewKeys.add(key); + } + } + pendingDecorators = []; + } + if (pendingDecorators.length > 0) { + result.shared.push(...pendingDecorators); + } + return { + shared: joinEnvironmentLines(result.shared), + providers: Object.fromEntries( + Object.entries(result.providers).map(([providerId, lines]) => [ + providerId, + joinEnvironmentLines(lines != null ? lines : []) + ]) + ), + reviewKeys: Array.from(result.reviewKeys) + }; +} +function getSharedEnvironmentVariables(settings11) { + const sharedEnvironmentVariables = settings11.sharedEnvironmentVariables; + if (typeof sharedEnvironmentVariables === "string") { + return sharedEnvironmentVariables; + } + return getLegacyEnvironmentClassification(settings11).shared; +} +function setSharedEnvironmentVariables(settings11, envText) { + settings11.sharedEnvironmentVariables = envText; + delete settings11.environmentVariables; +} +function getProviderEnvironmentVariables(settings11, providerId) { + var _a5; + const providerConfig = getProviderConfig(settings11, providerId); + if (typeof providerConfig.environmentVariables === "string") { + return providerConfig.environmentVariables; + } + return (_a5 = getLegacyEnvironmentClassification(settings11).providers[providerId]) != null ? _a5 : ""; +} +function setProviderEnvironmentVariables(settings11, providerId, envText) { + setProviderConfig(settings11, providerId, { + ...getProviderConfig(settings11, providerId), + environmentVariables: envText + }); + delete settings11.environmentVariables; +} +function joinEnvironmentTexts(...parts) { + const filtered = parts.filter((part) => typeof part === "string" && part.length > 0); + if (filtered.length === 0) { + return ""; + } + return filtered.reduce((combined, part) => { + if (!combined) { + return part; + } + return combined.endsWith("\n") ? `${combined}${part}` : `${combined} +${part}`; + }, ""); +} +function getRuntimeEnvironmentText(settings11, providerId) { + return joinEnvironmentTexts( + getSharedEnvironmentVariables(settings11), + getProviderEnvironmentVariables(settings11, providerId) + ); +} +function getRuntimeEnvironmentVariables(settings11, providerId) { + return parseEnvironmentVariables(getRuntimeEnvironmentText(settings11, providerId)); +} +function getEnvironmentVariablesForScope(settings11, scope) { + var _a5; + if (scope === "shared") { + return getSharedEnvironmentVariables(settings11); + } + return getProviderEnvironmentVariables(settings11, (_a5 = resolveScopeProviderId(scope)) != null ? _a5 : ""); +} +function setEnvironmentVariablesForScope(settings11, scope, envText) { + if (scope === "shared") { + setSharedEnvironmentVariables(settings11, envText); + return; + } + const providerId = resolveScopeProviderId(scope); + if (!providerId) { + return; + } + setProviderEnvironmentVariables(settings11, providerId, envText); +} +function getEnvironmentReviewKeysForScope(envText, scope) { + const reviewKeys = /* @__PURE__ */ new Set(); + const expectedProviderId = resolveScopeProviderId(scope); + for (const line of envText.split(/\r?\n/)) { + const key = extractEnvironmentKey(line); + if (!key || reviewKeys.has(key)) { + continue; + } + const ownership = classifyEnvironmentKey(key); + if (scope === "shared") { + if (ownership.type !== "shared-known") { + reviewKeys.add(key); + } + continue; + } + if (ownership.type !== "provider" || ownership.providerId !== expectedProviderId) { + reviewKeys.add(key); + } + } + return Array.from(reviewKeys); +} +function inferEnvironmentSnippetScope(envText) { + const classified = classifyEnvironmentVariablesByOwnership(envText); + const nonEmptyScopes = []; + if (hasMeaningfulEnvironmentContent(classified.shared)) { + nonEmptyScopes.push("shared"); + } + for (const [providerId, providerEnv] of Object.entries(classified.providers)) { + if (providerEnv && hasMeaningfulEnvironmentContent(providerEnv)) { + nonEmptyScopes.push(`provider:${providerId}`); + } + } + return nonEmptyScopes.length === 1 ? nonEmptyScopes[0] : void 0; +} +function resolveEnvironmentSnippetScope(envText, fallbackScope) { + const inferredScope = inferEnvironmentSnippetScope(envText); + if (inferredScope) { + return inferredScope; + } + return hasMeaningfulEnvironmentContent(envText) ? void 0 : fallbackScope; +} +function getEnvironmentScopeUpdates(envText, fallbackScope) { + const classified = classifyEnvironmentVariablesByOwnership(envText); + const updates = []; + if (classified.shared.trim()) { + updates.push({ scope: "shared", envText: classified.shared }); + } + for (const [providerId, providerEnv] of Object.entries(classified.providers)) { + if (!providerEnv || !providerEnv.trim()) { + continue; + } + updates.push({ + scope: `provider:${providerId}`, + envText: providerEnv + }); + } + if (updates.length > 0) { + return updates; + } + if (fallbackScope) { + return [{ scope: fallbackScope, envText }]; + } + return []; +} + +// src/providers/claude/settings.ts +init_env(); +var CLAUDE_SAFE_MODES = ["acceptEdits", "auto", "default"]; +var DEFAULT_CLAUDE_PROVIDER_SETTINGS = Object.freeze({ + safeMode: "acceptEdits", + cliPath: "", + cliPathsByHost: {}, + loadUserSettings: true, + enableChrome: false, + enableBangBash: false, + enableOpus1M: false, + enableSonnet1M: false, + customModels: "", + lastModel: "haiku", + environmentVariables: "", + environmentHash: "" +}); +function normalizeHostnameCliPaths(value) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const result = {}; + for (const [key, entry] of Object.entries(value)) { + if (typeof entry === "string" && entry.trim()) { + result[key] = entry.trim(); + } + } + return result; +} +function normalizeClaudeSafeMode(value) { + return CLAUDE_SAFE_MODES.includes(value) ? value : void 0; +} +function getClaudeProviderSettings(settings11) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m, _n, _o, _p, _q3, _r, _s, _t, _u2, _v2; + const config2 = getProviderConfig(settings11, "claude"); + const normalizedCliPathsByHost = normalizeHostnameCliPaths( + (_a5 = config2.cliPathsByHost) != null ? _a5 : settings11.claudeCliPathsByHost + ); + const cliPathsByHost = Object.keys(normalizedCliPathsByHost).length > 0 ? migrateLegacyHostnameKeyedMap( + normalizedCliPathsByHost, + getHostnameKey(), + getLegacyHostnameKey() + ) : normalizedCliPathsByHost; + return { + safeMode: (_c2 = (_b3 = normalizeClaudeSafeMode(config2.safeMode)) != null ? _b3 : normalizeClaudeSafeMode(settings11.claudeSafeMode)) != null ? _c2 : DEFAULT_CLAUDE_PROVIDER_SETTINGS.safeMode, + cliPath: (_e2 = (_d = config2.cliPath) != null ? _d : settings11.claudeCliPath) != null ? _e2 : DEFAULT_CLAUDE_PROVIDER_SETTINGS.cliPath, + cliPathsByHost, + loadUserSettings: (_g = (_f2 = config2.loadUserSettings) != null ? _f2 : settings11.loadUserClaudeSettings) != null ? _g : DEFAULT_CLAUDE_PROVIDER_SETTINGS.loadUserSettings, + enableChrome: (_i = (_h2 = config2.enableChrome) != null ? _h2 : settings11.enableChrome) != null ? _i : DEFAULT_CLAUDE_PROVIDER_SETTINGS.enableChrome, + enableBangBash: (_k3 = (_j = config2.enableBangBash) != null ? _j : settings11.enableBangBash) != null ? _k3 : DEFAULT_CLAUDE_PROVIDER_SETTINGS.enableBangBash, + enableOpus1M: (_m = (_l2 = config2.enableOpus1M) != null ? _l2 : settings11.enableOpus1M) != null ? _m : DEFAULT_CLAUDE_PROVIDER_SETTINGS.enableOpus1M, + enableSonnet1M: (_o = (_n = config2.enableSonnet1M) != null ? _n : settings11.enableSonnet1M) != null ? _o : DEFAULT_CLAUDE_PROVIDER_SETTINGS.enableSonnet1M, + customModels: (_p = config2.customModels) != null ? _p : DEFAULT_CLAUDE_PROVIDER_SETTINGS.customModels, + lastModel: (_r = (_q3 = config2.lastModel) != null ? _q3 : settings11.lastClaudeModel) != null ? _r : DEFAULT_CLAUDE_PROVIDER_SETTINGS.lastModel, + environmentVariables: (_t = (_s = config2.environmentVariables) != null ? _s : getProviderEnvironmentVariables(settings11, "claude")) != null ? _t : DEFAULT_CLAUDE_PROVIDER_SETTINGS.environmentVariables, + environmentHash: (_v2 = (_u2 = config2.environmentHash) != null ? _u2 : settings11.lastEnvHash) != null ? _v2 : DEFAULT_CLAUDE_PROVIDER_SETTINGS.environmentHash + }; +} +function resolveClaudeSettingSources(loadUserSettings) { + return loadUserSettings ? ["user", "project", "local"] : ["project", "local"]; +} +function updateClaudeProviderSettings(settings11, updates) { + var _a5; + const current = getClaudeProviderSettings(settings11); + const next = { + ...current, + ...updates, + safeMode: "safeMode" in updates ? (_a5 = normalizeClaudeSafeMode(updates.safeMode)) != null ? _a5 : current.safeMode : current.safeMode + }; + setProviderConfig(settings11, "claude", next); + return next; +} + +// src/providers/claude/commands/probeRuntimeCommands.ts +function mapSdkCommands(sdkCommands) { + return sdkCommands.map((cmd) => ({ + id: `sdk:${cmd.name}`, + name: cmd.name, + description: cmd.description, + argumentHint: cmd.argumentHint, + content: "", + source: "sdk" + })); +} +async function probeRuntimeCommands(plugin) { + const vaultPath = getVaultPath(plugin.app); + if (!vaultPath) return []; + const cliPath = plugin.getResolvedProviderCliPath("claude"); + if (!cliPath) return []; + const customEnv = parseEnvironmentVariables( + plugin.getActiveEnvironmentVariables("claude") + ); + const enhancedPath = getEnhancedPath(customEnv.PATH, cliPath); + const claudeSettings = getClaudeProviderSettings( + plugin.settings + ); + const abortController = new AbortController(); + let commands = []; + const extraArgs = { + ...claudeSettings.safeMode === "auto" ? { "enable-auto-mode": null } : {}, + ...claudeSettings.enableChrome ? { chrome: null } : {} + }; + try { + const conversation = jA$({ + prompt: "", + options: { + cwd: vaultPath, + abortController, + pathToClaudeCodeExecutable: cliPath, + env: { ...process.env, ...customEnv, PATH: enhancedPath }, + permissionMode: "bypassPermissions", + allowDangerouslySkipPermissions: true, + settingSources: resolveClaudeSettingSources(claudeSettings.loadUserSettings), + ...Object.keys(extraArgs).length > 0 ? { extraArgs } : {}, + spawnClaudeCodeProcess: createCustomSpawnFunction(enhancedPath), + persistSession: false + } + }); + for await (const event of conversation) { + if (event.type === "system" && event.subtype === "init") { + try { + const sdkCommands = await conversation.supportedCommands(); + commands = mapSdkCommands(sdkCommands); + } catch (e2) { + } + abortController.abort(); + break; + } + } + } catch (e2) { + } + return commands; +} + +// src/providers/claude/plugins/PluginManager.ts +var fs5 = __toESM(require("fs")); +var import_obsidian2 = require("obsidian"); +var os5 = __toESM(require("os")); +var path5 = __toESM(require("path")); +var INSTALLED_PLUGINS_PATH = path5.join(os5.homedir(), ".claude", "plugins", "installed_plugins.json"); +var GLOBAL_SETTINGS_PATH = path5.join(os5.homedir(), ".claude", "settings.json"); +function readJsonFile(filePath) { + try { + if (!fs5.existsSync(filePath)) { + return null; + } + const content = fs5.readFileSync(filePath, "utf-8"); + return JSON.parse(content); + } catch (e2) { + return null; + } +} +function normalizePathForComparison2(p) { + try { + const resolved = fs5.realpathSync(p); + if (typeof resolved === "string" && resolved.length > 0) { + return resolved; + } + } catch (e2) { + } + return path5.resolve(p); +} +function selectInstalledPluginEntry(entries, normalizedVaultPath) { + var _a5; + for (const entry of entries) { + if (entry.scope !== "project") continue; + if (!entry.projectPath) continue; + if (normalizePathForComparison2(entry.projectPath) === normalizedVaultPath) { + return entry; + } + } + return (_a5 = entries.find((e2) => e2.scope === "user")) != null ? _a5 : null; +} +function extractPluginName(pluginId) { + const atIndex = pluginId.indexOf("@"); + if (atIndex > 0) { + return pluginId.substring(0, atIndex); + } + return pluginId; +} +var PluginManager = class { + constructor(vaultPath, ccSettingsStorage) { + this.plugins = []; + this.vaultPath = vaultPath; + this.ccSettingsStorage = ccSettingsStorage; + } + async loadPlugins() { + var _a5, _b3, _c2, _d; + const installedPlugins = readJsonFile(INSTALLED_PLUGINS_PATH); + const globalSettings = readJsonFile(GLOBAL_SETTINGS_PATH); + const projectSettings = await this.loadProjectSettings(); + const globalEnabled = (_a5 = globalSettings == null ? void 0 : globalSettings.enabledPlugins) != null ? _a5 : {}; + const projectEnabled = (_b3 = projectSettings == null ? void 0 : projectSettings.enabledPlugins) != null ? _b3 : {}; + const plugins = []; + const normalizedVaultPath = normalizePathForComparison2(this.vaultPath); + if (installedPlugins == null ? void 0 : installedPlugins.plugins) { + for (const [pluginId, entries] of Object.entries(installedPlugins.plugins)) { + if (!entries || entries.length === 0) continue; + const entriesArray = Array.isArray(entries) ? entries : [entries]; + if (!Array.isArray(entries)) { + new import_obsidian2.Notice(`Claudian: plugin "${pluginId}" has malformed entry in installed_plugins.json (expected array, got ${typeof entries})`); + } + const entry = selectInstalledPluginEntry(entriesArray, normalizedVaultPath); + if (!entry) continue; + const scope = entry.scope === "project" ? "project" : "user"; + const enabled = (_d = (_c2 = projectEnabled[pluginId]) != null ? _c2 : globalEnabled[pluginId]) != null ? _d : true; + plugins.push({ + id: pluginId, + name: extractPluginName(pluginId), + enabled, + scope, + installPath: entry.installPath + }); + } + } + this.plugins = plugins.sort((a, b2) => { + if (a.scope !== b2.scope) { + return a.scope === "project" ? -1 : 1; + } + return a.id.localeCompare(b2.id); + }); + } + async loadProjectSettings() { + const projectSettingsPath = path5.join(this.vaultPath, ".claude", "settings.json"); + return readJsonFile(projectSettingsPath); + } + getPlugins() { + return [...this.plugins]; + } + hasPlugins() { + return this.plugins.length > 0; + } + hasEnabledPlugins() { + return this.plugins.some((p) => p.enabled); + } + getEnabledCount() { + return this.plugins.filter((p) => p.enabled).length; + } + /** Used to detect changes that require restarting the persistent query. */ + getPluginsKey() { + const enabledPlugins = this.plugins.filter((p) => p.enabled).sort((a, b2) => a.id.localeCompare(b2.id)); + if (enabledPlugins.length === 0) { + return ""; + } + return enabledPlugins.map((p) => `${p.id}:${p.installPath}`).join("|"); + } + /** Writes to project .claude/settings.json so CLI respects the state. */ + async togglePlugin(pluginId) { + const plugin = this.plugins.find((p) => p.id === pluginId); + if (!plugin) { + return; + } + const newEnabled = !plugin.enabled; + plugin.enabled = newEnabled; + await this.ccSettingsStorage.setPluginEnabled(pluginId, newEnabled); + } + async enablePlugin(pluginId) { + const plugin = this.plugins.find((p) => p.id === pluginId); + if (!plugin || plugin.enabled) { + return; + } + plugin.enabled = true; + await this.ccSettingsStorage.setPluginEnabled(pluginId, true); + } + async disablePlugin(pluginId) { + const plugin = this.plugins.find((p) => p.id === pluginId); + if (!plugin || !plugin.enabled) { + return; + } + plugin.enabled = false; + await this.ccSettingsStorage.setPluginEnabled(pluginId, false); + } +}; + +// src/providers/claude/runtime/ClaudeCliResolver.ts +var fs7 = __toESM(require("fs")); +init_env(); +init_path(); + +// src/providers/claude/cli/findClaudeCLIPath.ts +var fs6 = __toESM(require("fs")); +var os6 = __toESM(require("os")); +var path6 = __toESM(require("path")); +init_path(); +var CLAUDE_CODE_PACKAGE_SEGMENTS = ["node_modules", "@anthropic-ai", "claude-code"]; +var CLAUDE_CODE_NODE_ENTRYPOINTS = ["cli-wrapper.cjs", "cli.js"]; +function getEnvValue2(name) { + return process.env[name]; +} +function dedupePaths(entries) { + const seen = /* @__PURE__ */ new Set(); + return entries.filter((entry) => { + const key = process.platform === "win32" ? entry.toLowerCase() : entry; + if (seen.has(key)) return false; + seen.add(key); + return true; + }); +} +function findFirstExistingPath(entries, candidates) { + for (const dir of entries) { + if (!dir) continue; + for (const candidate of candidates) { + const fullPath = path6.join(dir, candidate); + if (isExistingFile(fullPath)) { + return fullPath; + } + } + } + return null; +} +function isExistingFile(filePath) { + try { + if (fs6.existsSync(filePath)) { + const stat = fs6.statSync(filePath); + return stat.isFile(); + } + } catch (e2) { + } + return false; +} +function findClaudeCodeNodeEntrypoint(packageRoot) { + for (const entrypoint of CLAUDE_CODE_NODE_ENTRYPOINTS) { + const candidate = path6.join(packageRoot, entrypoint); + if (isExistingFile(candidate)) { + return candidate; + } + } + return null; +} +function resolveClaudeCodeEntrypointNearPathEntry(entry, isWindows2) { + const directCandidate = findClaudeCodeNodeEntrypoint( + path6.join(entry, ...CLAUDE_CODE_PACKAGE_SEGMENTS) + ); + if (directCandidate) { + return directCandidate; + } + const baseName = path6.basename(entry).toLowerCase(); + if (baseName === "bin") { + const prefix = path6.dirname(entry); + const packageParent = isWindows2 ? prefix : path6.join(prefix, "lib"); + const candidate = findClaudeCodeNodeEntrypoint( + path6.join(packageParent, ...CLAUDE_CODE_PACKAGE_SEGMENTS) + ); + if (candidate) { + return candidate; + } + } + return null; +} +function resolveClaudeCodeEntrypointFromPathEntries(entries, isWindows2) { + for (const entry of entries) { + const candidate = resolveClaudeCodeEntrypointNearPathEntry(entry, isWindows2); + if (candidate) { + return candidate; + } + } + return null; +} +function resolveClaudeFromPathEntries(entries, isWindows2) { + if (entries.length === 0) { + return null; + } + if (!isWindows2) { + const unixCandidate = findFirstExistingPath(entries, ["claude"]); + return unixCandidate; + } + const exeCandidate = findFirstExistingPath(entries, ["claude.exe", "claude"]); + if (exeCandidate) { + return exeCandidate; + } + const packageEntrypoint = resolveClaudeCodeEntrypointFromPathEntries(entries, isWindows2); + if (packageEntrypoint) { + return packageEntrypoint; + } + return null; +} +function getNpmGlobalPrefix() { + if (process.env.npm_config_prefix) { + return process.env.npm_config_prefix; + } + if (process.platform === "win32") { + const appDataNpm = process.env.APPDATA ? path6.join(process.env.APPDATA, "npm") : null; + if (appDataNpm && fs6.existsSync(appDataNpm)) { + return appDataNpm; + } + } + return null; +} +function addClaudeCodeEntrypointPaths(paths, packageParent) { + const packageRoot = path6.join(packageParent, ...CLAUDE_CODE_PACKAGE_SEGMENTS); + for (const entrypoint of CLAUDE_CODE_NODE_ENTRYPOINTS) { + paths.push(path6.join(packageRoot, entrypoint)); + } +} +function getNpmClaudeCodeEntrypointPaths() { + const homeDir = os6.homedir(); + const isWindows2 = process.platform === "win32"; + const entrypointPaths = []; + if (isWindows2) { + addClaudeCodeEntrypointPaths(entrypointPaths, path6.join(homeDir, "AppData", "Roaming", "npm")); + const npmPrefix = getNpmGlobalPrefix(); + if (npmPrefix) { + addClaudeCodeEntrypointPaths(entrypointPaths, npmPrefix); + } + const programFiles = process.env.ProgramFiles || "C:\\Program Files"; + const programFilesX86 = process.env["ProgramFiles(x86)"] || "C:\\Program Files (x86)"; + addClaudeCodeEntrypointPaths(entrypointPaths, path6.join(programFiles, "nodejs", "node_global")); + addClaudeCodeEntrypointPaths(entrypointPaths, path6.join(programFilesX86, "nodejs", "node_global")); + addClaudeCodeEntrypointPaths(entrypointPaths, path6.join("D:", "Program Files", "nodejs", "node_global")); + } else { + addClaudeCodeEntrypointPaths(entrypointPaths, path6.join(homeDir, ".npm-global", "lib")); + addClaudeCodeEntrypointPaths(entrypointPaths, "/usr/local/lib"); + addClaudeCodeEntrypointPaths(entrypointPaths, "/usr/lib"); + if (process.env.npm_config_prefix) { + addClaudeCodeEntrypointPaths(entrypointPaths, path6.join(process.env.npm_config_prefix, "lib")); + } + } + return entrypointPaths; +} +function findClaudeCLIPath(pathValue) { + const homeDir = os6.homedir(); + const isWindows2 = process.platform === "win32"; + const customEntries = dedupePaths(parsePathEntries(pathValue)); + if (customEntries.length > 0) { + const customResolution = resolveClaudeFromPathEntries(customEntries, isWindows2); + if (customResolution) { + return customResolution; + } + } + if (isWindows2) { + const exePaths = [ + path6.join(homeDir, ".claude", "local", "claude.exe"), + path6.join(homeDir, "AppData", "Local", "Claude", "claude.exe"), + path6.join(process.env.ProgramFiles || "C:\\Program Files", "Claude", "claude.exe"), + path6.join(process.env["ProgramFiles(x86)"] || "C:\\Program Files (x86)", "Claude", "claude.exe"), + path6.join(homeDir, ".local", "bin", "claude.exe") + ]; + for (const p of exePaths) { + if (isExistingFile(p)) { + return p; + } + } + const packageEntrypointPaths = getNpmClaudeCodeEntrypointPaths(); + for (const p of packageEntrypointPaths) { + if (isExistingFile(p)) { + return p; + } + } + } + const commonPaths = [ + path6.join(homeDir, ".claude", "local", "claude"), + path6.join(homeDir, ".local", "bin", "claude"), + path6.join(homeDir, ".volta", "bin", "claude"), + path6.join(homeDir, ".asdf", "shims", "claude"), + path6.join(homeDir, ".asdf", "bin", "claude"), + "/usr/local/bin/claude", + "/opt/homebrew/bin/claude", + path6.join(homeDir, "bin", "claude"), + path6.join(homeDir, ".npm-global", "bin", "claude") + ]; + const npmPrefix = getNpmGlobalPrefix(); + if (npmPrefix) { + commonPaths.push(path6.join(npmPrefix, "bin", "claude")); + } + const nvmBin = resolveNvmDefaultBin(homeDir); + if (nvmBin) { + commonPaths.push(path6.join(nvmBin, "claude")); + } + for (const p of commonPaths) { + if (isExistingFile(p)) { + return p; + } + } + if (!isWindows2) { + const packageEntrypointPaths = getNpmClaudeCodeEntrypointPaths(); + for (const p of packageEntrypointPaths) { + if (isExistingFile(p)) { + return p; + } + } + } + const envEntries = dedupePaths(parsePathEntries(getEnvValue2("PATH"))); + if (envEntries.length > 0) { + const envResolution = resolveClaudeFromPathEntries(envEntries, isWindows2); + if (envResolution) { + return envResolution; + } + } + return null; +} + +// src/providers/claude/runtime/ClaudeCliResolver.ts +var ClaudeCliResolver = class { + constructor() { + this.resolvedPath = null; + this.lastHostnamePath = ""; + this.lastLegacyPath = ""; + this.lastEnvText = ""; + this.cachedHostname = getHostnameKey(); + } + /** + * Resolves CLI path with priority: device-specific -> legacy -> auto-detect. + * @param settings Full app settings bag + */ + resolveFromSettings(settings11) { + var _a5; + const hostnameKey = this.cachedHostname; + const claudeSettings = getClaudeProviderSettings(settings11); + const hostnamePath = ((_a5 = claudeSettings.cliPathsByHost[hostnameKey]) != null ? _a5 : "").trim(); + const normalizedLegacy = claudeSettings.cliPath.trim(); + const normalizedEnv = getRuntimeEnvironmentText(settings11, "claude"); + if (this.resolvedPath && hostnamePath === this.lastHostnamePath && normalizedLegacy === this.lastLegacyPath && normalizedEnv === this.lastEnvText) { + return this.resolvedPath; + } + this.lastHostnamePath = hostnamePath; + this.lastLegacyPath = normalizedLegacy; + this.lastEnvText = normalizedEnv; + this.resolvedPath = resolveClaudeCliPath(hostnamePath, normalizedLegacy, normalizedEnv); + return this.resolvedPath; + } + resolve(hostnamePaths, legacyPath, envText) { + return this.resolveFromSettings({ + sharedEnvironmentVariables: envText, + providerConfigs: { + claude: { + cliPath: legacyPath != null ? legacyPath : "", + cliPathsByHost: hostnamePaths != null ? hostnamePaths : {} + } + } + }); + } + reset() { + this.resolvedPath = null; + this.lastHostnamePath = ""; + this.lastLegacyPath = ""; + this.lastEnvText = ""; + } +}; +function resolveConfiguredPath(rawPath) { + const trimmed = (rawPath != null ? rawPath : "").trim(); + if (!trimmed) return null; + try { + const expanded = expandHomePath(trimmed); + if (fs7.existsSync(expanded) && fs7.statSync(expanded).isFile()) { + return expanded; + } + } catch (e2) { + } + return null; +} +function resolveClaudeCliPath(hostnamePath, legacyPath, envText) { + var _a5, _b3; + return (_b3 = (_a5 = resolveConfiguredPath(hostnamePath)) != null ? _a5 : resolveConfiguredPath(legacyPath)) != null ? _b3 : findClaudeCLIPath(parseEnvironmentVariables(envText || "").PATH); +} + +// src/providers/claude/storage/StorageService.ts +var import_obsidian3 = require("obsidian"); + +// src/core/bootstrap/StoragePaths.ts +var CLAUDIAN_STORAGE_PATH = ".claudian"; +var LEGACY_CLAUDIAN_SETTINGS_PATH = ".claude/claudian-settings.json"; +var CLAUDIAN_SETTINGS_PATH = `${CLAUDIAN_STORAGE_PATH}/claudian-settings.json`; +var LEGACY_SESSIONS_PATH = ".claude/sessions"; +var SESSIONS_PATH = `${CLAUDIAN_STORAGE_PATH}/sessions`; + +// src/core/providers/commands/hiddenCommands.ts +function normalizeHiddenCommandName(value) { + return value.trim().replace(/^[/$]+/, ""); +} +function normalizeHiddenCommandList(value) { + if (!Array.isArray(value)) { + return []; + } + const seen = /* @__PURE__ */ new Set(); + const normalized = []; + for (const item of value) { + if (typeof item !== "string") { + continue; + } + const commandName = normalizeHiddenCommandName(item); + if (!commandName) { + continue; + } + const key = commandName.toLowerCase(); + if (seen.has(key)) { + continue; + } + seen.add(key); + normalized.push(commandName); + } + return normalized; +} +function getDefaultHiddenProviderCommands() { + return {}; +} +function normalizeHiddenProviderCommands(value) { + if (!value || typeof value !== "object") { + return getDefaultHiddenProviderCommands(); + } + const candidate = value; + const normalized = {}; + for (const [providerId, commands] of Object.entries(candidate)) { + const next = normalizeHiddenCommandList(commands); + if (next.length > 0) { + normalized[providerId] = next; + } + } + return normalized; +} +function getHiddenProviderCommands(settings11, providerId) { + var _a5, _b3; + return (_b3 = (_a5 = settings11.hiddenProviderCommands) == null ? void 0 : _a5[providerId]) != null ? _b3 : []; +} +function getHiddenProviderCommandSet(settings11, providerId) { + return new Set(getHiddenProviderCommands(settings11, providerId).map((command) => command.toLowerCase())); +} + +// src/core/types/settings.ts +var CHAT_VIEW_PLACEMENTS = [ + "right-sidebar", + "left-sidebar", + "main-tab" +]; + +// src/providers/codex/settings.ts +init_env(); + +// src/providers/codex/types/models.ts +var CODEX_SPARK_MODEL = "gpt-5.3-codex-spark"; +var DEFAULT_CODEX_MINI_MODEL = "gpt-5.4-mini"; +var DEFAULT_CODEX_PRIMARY_MODEL = "gpt-5.5"; +var FAST_TIER_CODEX_MODEL = DEFAULT_CODEX_PRIMARY_MODEL; +function formatCodexModelSuffix(suffix) { + return suffix.split("-").filter(Boolean).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase()).join(" "); +} +function formatCodexModelLabel(model) { + const match = model.match(/^gpt-([^-]+)(?:-(.+))?$/i); + if (!match) { + return model; + } + const [, version2, suffix] = match; + return `GPT-${version2}${suffix ? ` ${formatCodexModelSuffix(suffix)}` : ""}`; +} +function createCodexModelOption(model, description) { + return { + value: model, + label: formatCodexModelLabel(model), + description + }; +} +var DEFAULT_CODEX_MINI_MODEL_LABEL = formatCodexModelLabel(DEFAULT_CODEX_MINI_MODEL); +var DEFAULT_CODEX_PRIMARY_MODEL_LABEL = formatCodexModelLabel(DEFAULT_CODEX_PRIMARY_MODEL); +var FAST_TIER_CODEX_MODEL_LABEL = formatCodexModelLabel(FAST_TIER_CODEX_MODEL); +var FAST_TIER_CODEX_DESCRIPTION = `Enable ${FAST_TIER_CODEX_MODEL_LABEL} fast mode for this conversation. Faster responses use more credits.`; +var DEFAULT_CODEX_MODELS = [ + createCodexModelOption(DEFAULT_CODEX_MINI_MODEL, "Fast"), + createCodexModelOption(DEFAULT_CODEX_PRIMARY_MODEL, "Latest") +]; +var DEFAULT_CODEX_MODEL_SET = new Set(DEFAULT_CODEX_MODELS.map((model) => model.value)); + +// src/providers/codex/settings.ts +function normalizeCodexInstallationMethod(value) { + return value === "wsl" ? "wsl" : "native-windows"; +} +function normalizeOptionalString(value) { + return typeof value === "string" ? value.trim() : ""; +} +var DEFAULT_CODEX_PROVIDER_SETTINGS = Object.freeze({ + enabled: false, + safeMode: "workspace-write", + cliPath: "", + cliPathsByHost: {}, + customModels: "", + reasoningSummary: "detailed", + environmentVariables: "", + environmentHash: "", + installationMethod: "native-windows", + installationMethodsByHost: {}, + wslDistroOverride: "", + wslDistroOverridesByHost: {} +}); +function shouldDisableCodexReasoningSummary(model) { + return model === CODEX_SPARK_MODEL; +} +function getEffectiveCodexReasoningSummary(settings11, model) { + if (shouldDisableCodexReasoningSummary(model)) { + return "none"; + } + return getCodexProviderSettings(settings11).reasoningSummary; +} +function applyCodexModelDefaults(model, settings11) { + if (shouldDisableCodexReasoningSummary(model)) { + updateCodexProviderSettings(settings11, { reasoningSummary: "none" }); + } +} +function normalizeHostnameCliPaths2(value) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const result = {}; + for (const [key, entry] of Object.entries(value)) { + if (typeof entry === "string" && entry.trim()) { + result[key] = entry.trim(); + } + } + return result; +} +function normalizeInstallationMethodsByHost(value) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const result = {}; + for (const [key, entry] of Object.entries(value)) { + if (typeof key === "string" && key.trim()) { + result[key] = normalizeCodexInstallationMethod(entry); + } + } + return result; +} +function getCodexProviderSettings(settings11) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m, _n, _o, _p; + const config2 = getProviderConfig(settings11, "codex"); + const hostnameKey = getHostnameKey(); + const normalizedCliPathsByHost = normalizeHostnameCliPaths2((_a5 = config2.cliPathsByHost) != null ? _a5 : settings11.codexCliPathsByHost); + const normalizedInstallationMethodsByHost = normalizeInstallationMethodsByHost(config2.installationMethodsByHost); + const normalizedWslDistroOverridesByHost = normalizeHostnameCliPaths2(config2.wslDistroOverridesByHost); + const hasLegacyHostnameKeyedSettings = Object.keys(normalizedCliPathsByHost).length > 0 || Object.keys(normalizedInstallationMethodsByHost).length > 0 || Object.keys(normalizedWslDistroOverridesByHost).length > 0; + const legacyHostnameKey = hasLegacyHostnameKeyedSettings ? getLegacyHostnameKey() : ""; + const cliPathsByHost = hasLegacyHostnameKeyedSettings ? migrateLegacyHostnameKeyedMap(normalizedCliPathsByHost, hostnameKey, legacyHostnameKey) : normalizedCliPathsByHost; + const installationMethodsByHost = hasLegacyHostnameKeyedSettings ? migrateLegacyHostnameKeyedMap(normalizedInstallationMethodsByHost, hostnameKey, legacyHostnameKey) : normalizedInstallationMethodsByHost; + const wslDistroOverridesByHost = hasLegacyHostnameKeyedSettings ? migrateLegacyHostnameKeyedMap(normalizedWslDistroOverridesByHost, hostnameKey, legacyHostnameKey) : normalizedWslDistroOverridesByHost; + const hasHostScopedInstallationMethods = Object.keys(installationMethodsByHost).length > 0; + const hasHostScopedWslDistroOverrides = Object.keys(wslDistroOverridesByHost).length > 0; + const legacyInstallationMethod = normalizeCodexInstallationMethod(config2.installationMethod); + const legacyWslDistroOverride = normalizeOptionalString(config2.wslDistroOverride); + return { + enabled: (_c2 = (_b3 = config2.enabled) != null ? _b3 : settings11.codexEnabled) != null ? _c2 : DEFAULT_CODEX_PROVIDER_SETTINGS.enabled, + safeMode: (_e2 = (_d = config2.safeMode) != null ? _d : settings11.codexSafeMode) != null ? _e2 : DEFAULT_CODEX_PROVIDER_SETTINGS.safeMode, + cliPath: (_g = (_f2 = config2.cliPath) != null ? _f2 : settings11.codexCliPath) != null ? _g : DEFAULT_CODEX_PROVIDER_SETTINGS.cliPath, + cliPathsByHost, + customModels: (_h2 = config2.customModels) != null ? _h2 : DEFAULT_CODEX_PROVIDER_SETTINGS.customModels, + reasoningSummary: (_j = (_i = config2.reasoningSummary) != null ? _i : settings11.codexReasoningSummary) != null ? _j : DEFAULT_CODEX_PROVIDER_SETTINGS.reasoningSummary, + environmentVariables: (_l2 = (_k3 = config2.environmentVariables) != null ? _k3 : getProviderEnvironmentVariables(settings11, "codex")) != null ? _l2 : DEFAULT_CODEX_PROVIDER_SETTINGS.environmentVariables, + environmentHash: (_n = (_m = config2.environmentHash) != null ? _m : settings11.lastCodexEnvHash) != null ? _n : DEFAULT_CODEX_PROVIDER_SETTINGS.environmentHash, + installationMethod: (_o = installationMethodsByHost[hostnameKey]) != null ? _o : hasHostScopedInstallationMethods ? DEFAULT_CODEX_PROVIDER_SETTINGS.installationMethod : legacyInstallationMethod, + installationMethodsByHost, + wslDistroOverride: (_p = wslDistroOverridesByHost[hostnameKey]) != null ? _p : hasHostScopedWslDistroOverrides ? DEFAULT_CODEX_PROVIDER_SETTINGS.wslDistroOverride : legacyWslDistroOverride, + wslDistroOverridesByHost + }; +} +function updateCodexProviderSettings(settings11, updates) { + var _a5, _b3; + const current = getCodexProviderSettings(settings11); + const hostnameKey = getHostnameKey(); + const installationMethodsByHost = "installationMethodsByHost" in updates ? normalizeInstallationMethodsByHost(updates.installationMethodsByHost) : { ...current.installationMethodsByHost }; + const wslDistroOverridesByHost = "wslDistroOverridesByHost" in updates ? normalizeHostnameCliPaths2(updates.wslDistroOverridesByHost) : { ...current.wslDistroOverridesByHost }; + if (Object.keys(installationMethodsByHost).length === 0 && current.installationMethod !== DEFAULT_CODEX_PROVIDER_SETTINGS.installationMethod) { + installationMethodsByHost[hostnameKey] = current.installationMethod; + } + if (Object.keys(wslDistroOverridesByHost).length === 0 && current.wslDistroOverride) { + wslDistroOverridesByHost[hostnameKey] = current.wslDistroOverride; + } + if ("installationMethod" in updates) { + installationMethodsByHost[hostnameKey] = normalizeCodexInstallationMethod(updates.installationMethod); + } + if ("wslDistroOverride" in updates) { + const normalizedDistroOverride = normalizeOptionalString(updates.wslDistroOverride); + if (normalizedDistroOverride) { + wslDistroOverridesByHost[hostnameKey] = normalizedDistroOverride; + } else { + delete wslDistroOverridesByHost[hostnameKey]; + } + } + const next = { + ...current, + ...updates, + installationMethod: (_a5 = installationMethodsByHost[hostnameKey]) != null ? _a5 : DEFAULT_CODEX_PROVIDER_SETTINGS.installationMethod, + installationMethodsByHost, + wslDistroOverride: (_b3 = wslDistroOverridesByHost[hostnameKey]) != null ? _b3 : DEFAULT_CODEX_PROVIDER_SETTINGS.wslDistroOverride, + wslDistroOverridesByHost + }; + setProviderConfig(settings11, "codex", { + enabled: next.enabled, + safeMode: next.safeMode, + cliPath: next.cliPath, + cliPathsByHost: next.cliPathsByHost, + customModels: next.customModels, + reasoningSummary: next.reasoningSummary, + environmentVariables: next.environmentVariables, + environmentHash: next.environmentHash, + installationMethodsByHost, + wslDistroOverridesByHost + }); + return next; +} + +// src/providers/opencode/settings.ts +init_env(); + +// src/providers/opencode/internal/compareCollections.ts +function sameStringList(left, right) { + if (left.length !== right.length) { + return false; + } + return left.every((entry, index) => entry === right[index]); +} +function sameStringMap(left, right) { + const leftEntries = Object.entries(left); + if (leftEntries.length !== Object.keys(right).length) { + return false; + } + return leftEntries.every(([key, value]) => right[key] === value); +} +function sameModes(left, right) { + if (left.length !== right.length) { + return false; + } + return left.every((mode, index) => { + var _a5, _b3, _c2, _d, _e2; + return mode.id === ((_a5 = right[index]) == null ? void 0 : _a5.id) && mode.name === ((_b3 = right[index]) == null ? void 0 : _b3.name) && ((_c2 = mode.description) != null ? _c2 : "") === ((_e2 = (_d = right[index]) == null ? void 0 : _d.description) != null ? _e2 : ""); + }); +} +function sameDiscoveredModels(left, right) { + if (left.length !== right.length) { + return false; + } + return left.every((model, index) => { + var _a5, _b3, _c2, _d, _e2; + return model.rawId === ((_a5 = right[index]) == null ? void 0 : _a5.rawId) && model.label === ((_b3 = right[index]) == null ? void 0 : _b3.label) && ((_c2 = model.description) != null ? _c2 : "") === ((_e2 = (_d = right[index]) == null ? void 0 : _d.description) != null ? _e2 : ""); + }); +} +function sameThinkingOptionsByModel(left, right) { + const leftEntries = Object.entries(left); + if (leftEntries.length !== Object.keys(right).length) { + return false; + } + return leftEntries.every(([rawId, leftOptions]) => { + var _a5; + const rightOptions = (_a5 = right[rawId]) != null ? _a5 : []; + if (leftOptions.length !== rightOptions.length) { + return false; + } + return leftOptions.every((option, index) => { + var _a6, _b3, _c2, _d, _e2; + return option.value === ((_a6 = rightOptions[index]) == null ? void 0 : _a6.value) && option.label === ((_b3 = rightOptions[index]) == null ? void 0 : _b3.label) && ((_c2 = option.description) != null ? _c2 : "") === ((_e2 = (_d = rightOptions[index]) == null ? void 0 : _d.description) != null ? _e2 : ""); + }); + }); +} + +// src/providers/opencode/models.ts +var OPENCODE_SYNTHETIC_MODEL_ID = "opencode"; +var OPENCODE_DEFAULT_THINKING_LEVEL = "default"; +var OPENCODE_MODEL_PREFIX = "opencode:"; +var OPENCODE_VARIANT_ASCENDING_ORDER = [ + "none", + "minimal", + "low", + "medium", + "high", + "max", + "xhigh" +]; +var OPENCODE_VARIANT_ASCENDING_RANK = new Map( + OPENCODE_VARIANT_ASCENDING_ORDER.map((value, index) => [value, index]) +); +function isOpencodeModelSelectionId(model) { + return model === OPENCODE_SYNTHETIC_MODEL_ID || model.startsWith(OPENCODE_MODEL_PREFIX); +} +function encodeOpencodeModelId(rawModelId) { + const normalized = rawModelId.trim(); + return normalized ? `${OPENCODE_MODEL_PREFIX}${normalized}` : OPENCODE_SYNTHETIC_MODEL_ID; +} +function decodeOpencodeModelId(model) { + if (!model.startsWith(OPENCODE_MODEL_PREFIX)) { + return null; + } + const rawModelId = model.slice(OPENCODE_MODEL_PREFIX.length).trim(); + return rawModelId || null; +} +function normalizeOpencodeDiscoveredModels(value) { + if (!Array.isArray(value)) { + return []; + } + const normalized = []; + const seen = /* @__PURE__ */ new Set(); + for (const entry of value) { + if (!entry || typeof entry !== "object" || Array.isArray(entry)) { + continue; + } + const record2 = entry; + const rawId = typeof record2.rawId === "string" ? record2.rawId.trim() : ""; + const label = typeof record2.label === "string" ? record2.label.trim() : rawId; + const description = typeof record2.description === "string" ? record2.description.trim() : ""; + if (!rawId || seen.has(rawId)) { + continue; + } + seen.add(rawId); + normalized.push({ + ...description ? { description } : {}, + label: label || rawId, + rawId + }); + } + return normalized; +} +function normalizeOpencodeModelVariants(value) { + if (!Array.isArray(value)) { + return []; + } + const variants = []; + for (const entry of value) { + if (!entry || typeof entry !== "object" || Array.isArray(entry)) { + continue; + } + const record2 = entry; + const rawValue = typeof record2.value === "string" ? record2.value.trim() : ""; + if (!rawValue) { + continue; + } + let rawLabel = ""; + if (typeof record2.label === "string") { + rawLabel = record2.label.trim(); + } else if (typeof record2.name === "string") { + rawLabel = record2.name.trim(); + } + const description = typeof record2.description === "string" ? record2.description.trim() : ""; + variants.push({ + ...description ? { description } : {}, + label: rawLabel || formatOpencodeThinkingLevelLabel(rawValue), + value: rawValue + }); + } + return dedupeOpencodeVariants(variants); +} +function normalizeOpencodeThinkingOptionsByModel(value, discoveredModels = []) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const normalized = {}; + for (const [rawId, variants] of Object.entries(value)) { + const normalizedRawId = resolveOpencodeBaseModelRawId(rawId.trim(), discoveredModels); + const normalizedVariants = normalizeOpencodeModelVariants(variants); + if (!normalizedRawId || normalizedVariants.length === 0) { + continue; + } + normalized[normalizedRawId] = normalizedVariants; + } + return normalized; +} +function resolveOpencodeBaseModelRawId(rawId, discoveredModels) { + const normalizedRawId = rawId.trim(); + if (!normalizedRawId) { + return ""; + } + const discoveredRawIds = discoveredModels instanceof Set ? discoveredModels : new Set(discoveredModels.map((model) => model.rawId)); + const slashIndex = normalizedRawId.lastIndexOf("/"); + if (slashIndex <= 0) { + return normalizedRawId; + } + const candidate = normalizedRawId.slice(0, slashIndex); + if (discoveredRawIds.has(candidate)) { + return candidate; + } + const variant = normalizedRawId.slice(slashIndex + 1).trim().toLowerCase(); + return OPENCODE_VARIANT_ASCENDING_RANK.has(variant) ? candidate : normalizedRawId; +} +function extractOpencodeModelVariantValue(rawId, discoveredModels) { + const normalizedRawId = rawId.trim(); + if (!normalizedRawId) { + return null; + } + const baseRawId = resolveOpencodeBaseModelRawId(normalizedRawId, discoveredModels); + if (baseRawId === normalizedRawId || baseRawId.length >= normalizedRawId.length) { + return null; + } + const variant = normalizedRawId.slice(baseRawId.length + 1).trim(); + return variant || null; +} +function splitOpencodeModelLabel(label) { + const trimmed = label.trim(); + const slashIndex = trimmed.indexOf("/"); + if (slashIndex <= 0 || slashIndex >= trimmed.length - 1) { + return { + modelLabel: trimmed, + providerLabel: "Other" + }; + } + return { + modelLabel: trimmed.slice(slashIndex + 1).trim(), + providerLabel: trimmed.slice(0, slashIndex).trim() + }; +} +function buildOpencodeBaseModels(models) { + const discoveredRawIds = new Set(models.map((model) => model.rawId)); + const discoveredByRawId = new Map(models.map((model) => [model.rawId, model])); + const grouped = /* @__PURE__ */ new Map(); + for (const model of models) { + const baseRawId = resolveOpencodeBaseModelRawId(model.rawId, discoveredRawIds); + const existing = grouped.get(baseRawId); + if (existing) { + existing.push(model); + } else { + grouped.set(baseRawId, [model]); + } + } + return Array.from(grouped.entries()).map(([baseRawId, entries]) => { + var _a5, _b3; + const baseModel = (_a5 = discoveredByRawId.get(baseRawId)) != null ? _a5 : entries[0]; + const variants = entries.flatMap((entry) => { + if (entry.rawId === baseRawId) { + return []; + } + const variant = extractOpencodeModelVariantValue(entry.rawId, discoveredRawIds); + if (!variant) { + return []; + } + return [{ + ...entry.description ? { description: entry.description } : {}, + label: formatOpencodeThinkingLevelLabel(variant), + value: variant + }]; + }); + return { + ...(baseModel == null ? void 0 : baseModel.description) ? { description: baseModel.description } : {}, + label: (_b3 = baseModel == null ? void 0 : baseModel.label) != null ? _b3 : baseRawId, + rawId: baseRawId, + variants: dedupeOpencodeVariants(variants) + }; + }).sort((left, right) => left.label.localeCompare(right.label)); +} +function formatOpencodeThinkingLevelLabel(value) { + const trimmed = value.trim(); + if (!trimmed) { + return ""; + } + if (trimmed.toLowerCase() === "xhigh") { + return "XHigh"; + } + return trimmed.charAt(0).toUpperCase() + trimmed.slice(1); +} +function dedupeOpencodeVariants(variants) { + const unique = /* @__PURE__ */ new Map(); + for (const variant of variants) { + if (!unique.has(variant.value)) { + unique.set(variant.value, variant); + } + } + return Array.from(unique.values()).sort((left, right) => compareOpencodeVariantValues(left.value, right.value)); +} +function compareOpencodeVariantValues(left, right) { + const leftRank = OPENCODE_VARIANT_ASCENDING_RANK.get(left.toLowerCase()); + const rightRank = OPENCODE_VARIANT_ASCENDING_RANK.get(right.toLowerCase()); + if (leftRank !== void 0 && rightRank !== void 0) { + return leftRank - rightRank; + } + if (leftRank !== void 0) { + return -1; + } + if (rightRank !== void 0) { + return 1; + } + return left.localeCompare(right); +} + +// src/providers/opencode/modes.ts +var OPENCODE_BUILD_MODE_ID = "build"; +var OPENCODE_YOLO_MODE_ID = "claudian-yolo"; +var OPENCODE_SAFE_MODE_ID = "claudian-safe"; +var OPENCODE_PLAN_MODE_ID = "plan"; +var OPENCODE_FALLBACK_MODES = Object.freeze([ + { + description: "The default agent. Executes tools based on configured permissions.", + id: OPENCODE_YOLO_MODE_ID, + name: "yolo" + }, + { + description: "Safe mode. Asks before shell commands and file edits.", + id: OPENCODE_SAFE_MODE_ID, + name: "safe" + }, + { + description: "Plan mode. Disallows all edit tools.", + id: OPENCODE_PLAN_MODE_ID, + name: OPENCODE_PLAN_MODE_ID + } +]); +var OPENCODE_MANAGED_MODE_IDS = /* @__PURE__ */ new Set([ + OPENCODE_BUILD_MODE_ID, + ...OPENCODE_FALLBACK_MODES.map((mode) => mode.id) +]); +function normalizeOpencodeAvailableModes(value) { + if (!Array.isArray(value)) { + return []; + } + const normalized = []; + const seen = /* @__PURE__ */ new Set(); + for (const entry of value) { + if (!entry || typeof entry !== "object" || Array.isArray(entry)) { + continue; + } + const record2 = entry; + const id = typeof record2.id === "string" ? record2.id.trim() : ""; + const name = typeof record2.name === "string" ? record2.name.trim() : id; + const description = typeof record2.description === "string" ? record2.description.trim() : ""; + if (!id || seen.has(id)) { + continue; + } + seen.add(id); + normalized.push({ + ...description ? { description } : {}, + id, + name: name || id + }); + } + return normalized; +} +function getEffectiveOpencodeModes(modes) { + return modes.length > 0 ? modes : [...OPENCODE_FALLBACK_MODES]; +} +function isManagedOpencodeModeId(value) { + return OPENCODE_MANAGED_MODE_IDS.has(value); +} +function getManagedOpencodeModes(modes) { + const effectiveModes = getEffectiveOpencodeModes(modes); + return OPENCODE_FALLBACK_MODES.map((fallbackMode) => { + var _a5; + return (_a5 = effectiveModes.find((mode) => mode.id === fallbackMode.id)) != null ? _a5 : fallbackMode; + }); +} +function normalizeOpencodeSelectedMode(value) { + if (typeof value !== "string") { + return ""; + } + const trimmed = value.trim(); + if (!trimmed) { + return ""; + } + return trimmed; +} +function normalizeManagedOpencodeSelectedMode(value, modes = []) { + var _a5, _b3; + const normalized = normalizeOpencodeSelectedMode(value); + if (!normalized) { + return ""; + } + const canonicalModeId = normalized === OPENCODE_BUILD_MODE_ID ? OPENCODE_YOLO_MODE_ID : normalized; + const managedModes = getManagedOpencodeModes(modes); + return managedModes.some((mode) => mode.id === canonicalModeId) ? canonicalModeId : (_b3 = (_a5 = managedModes[0]) == null ? void 0 : _a5.id) != null ? _b3 : ""; +} +function resolveOpencodeModeForPermissionMode(permissionMode, modes = []) { + var _a5, _b3; + const managedModes = getManagedOpencodeModes(modes); + const managedModeIds = new Set(managedModes.map((mode) => mode.id)); + if (permissionMode === "plan" && managedModeIds.has(OPENCODE_PLAN_MODE_ID)) { + return OPENCODE_PLAN_MODE_ID; + } + if (permissionMode === "normal" && managedModeIds.has(OPENCODE_SAFE_MODE_ID)) { + return OPENCODE_SAFE_MODE_ID; + } + if (managedModeIds.has(OPENCODE_YOLO_MODE_ID)) { + return OPENCODE_YOLO_MODE_ID; + } + return (_b3 = (_a5 = managedModes[0]) == null ? void 0 : _a5.id) != null ? _b3 : ""; +} +function resolvePermissionModeForManagedOpencodeMode(modeId) { + if (modeId === OPENCODE_BUILD_MODE_ID || modeId === OPENCODE_YOLO_MODE_ID) { + return "yolo"; + } + if (modeId === OPENCODE_SAFE_MODE_ID) { + return "normal"; + } + if (modeId === OPENCODE_PLAN_MODE_ID) { + return "plan"; + } + return null; +} + +// src/providers/opencode/discoveryState.ts +var OPENCODE_DISCOVERY_STATE = /* @__PURE__ */ Symbol("opencodeDiscoveryState"); +function ensureDiscoveryState(settings11) { + var _a5, _b3, _c2; + const bag = settings11; + const existing = bag[OPENCODE_DISCOVERY_STATE]; + if (existing && typeof existing === "object" && !Array.isArray(existing)) { + const state = existing; + (_a5 = state.availableModes) != null ? _a5 : state.availableModes = []; + (_b3 = state.discoveredModels) != null ? _b3 : state.discoveredModels = []; + (_c2 = state.thinkingOptionsByModel) != null ? _c2 : state.thinkingOptionsByModel = {}; + return state; + } + const next = { + availableModes: [], + discoveredModels: [], + thinkingOptionsByModel: {} + }; + bag[OPENCODE_DISCOVERY_STATE] = next; + return next; +} +function cloneModes(modes) { + return modes.map((mode) => ({ ...mode })); +} +function cloneDiscoveredModels(models) { + return models.map((model) => ({ ...model })); +} +function cloneThinkingOptionsByModel(optionsByModel) { + return Object.fromEntries( + Object.entries(optionsByModel).map(([rawId, options]) => [ + rawId, + options.map((option) => ({ ...option })) + ]) + ); +} +function getOpencodeDiscoveryState(settings11) { + const state = ensureDiscoveryState(settings11); + return { + availableModes: cloneModes(state.availableModes), + discoveredModels: cloneDiscoveredModels(state.discoveredModels), + thinkingOptionsByModel: cloneThinkingOptionsByModel(state.thinkingOptionsByModel) + }; +} +function updateOpencodeDiscoveryState(settings11, updates) { + const state = ensureDiscoveryState(settings11); + const nextAvailableModes = "availableModes" in updates ? normalizeOpencodeAvailableModes(updates.availableModes) : state.availableModes; + const nextDiscoveredModels = "discoveredModels" in updates ? normalizeOpencodeDiscoveredModels(updates.discoveredModels) : state.discoveredModels; + const nextThinkingOptionsByModel = "thinkingOptionsByModel" in updates ? normalizeOpencodeThinkingOptionsByModel(updates.thinkingOptionsByModel, nextDiscoveredModels) : state.thinkingOptionsByModel; + const changed = !sameModes(state.availableModes, nextAvailableModes) || !sameDiscoveredModels(state.discoveredModels, nextDiscoveredModels) || !sameThinkingOptionsByModel(state.thinkingOptionsByModel, nextThinkingOptionsByModel); + if (!changed) { + return false; + } + state.availableModes = cloneModes(nextAvailableModes); + state.discoveredModels = cloneDiscoveredModels(nextDiscoveredModels); + state.thinkingOptionsByModel = cloneThinkingOptionsByModel(nextThinkingOptionsByModel); + return true; +} +function clearOpencodeDiscoveryState(settings11) { + const state = ensureDiscoveryState(settings11); + if (state.availableModes.length === 0 && state.discoveredModels.length === 0 && Object.keys(state.thinkingOptionsByModel).length === 0) { + return false; + } + state.availableModes = []; + state.discoveredModels = []; + state.thinkingOptionsByModel = {}; + return true; +} +function seedOpencodeDiscoveryStateFromLegacyConfig(settings11, legacyConfig) { + const state = ensureDiscoveryState(settings11); + const nextAvailableModes = state.availableModes.length > 0 ? state.availableModes : normalizeOpencodeAvailableModes(legacyConfig.availableModes); + const nextDiscoveredModels = state.discoveredModels.length > 0 ? state.discoveredModels : normalizeOpencodeDiscoveredModels(legacyConfig.discoveredModels); + const nextThinkingOptionsByModel = Object.keys(state.thinkingOptionsByModel).length > 0 ? state.thinkingOptionsByModel : normalizeOpencodeThinkingOptionsByModel(legacyConfig.thinkingOptionsByModel, nextDiscoveredModels); + return updateOpencodeDiscoveryState(settings11, { + availableModes: nextAvailableModes, + discoveredModels: nextDiscoveredModels, + thinkingOptionsByModel: nextThinkingOptionsByModel + }); +} + +// src/providers/opencode/internal/providerProjection.ts +function ensureProviderProjectionMap(settings11, key) { + const current = settings11[key]; + if (current && typeof current === "object" && !Array.isArray(current)) { + return current; + } + const next = {}; + settings11[key] = next; + return next; +} + +// src/providers/opencode/settings.ts +var OPENCODE_DEFAULT_ENVIRONMENT_VARIABLES = "OPENCODE_ENABLE_EXA=1"; +var DEFAULT_OPENCODE_PROVIDER_SETTINGS = Object.freeze({ + cliPath: "", + cliPathsByHost: {}, + enabled: false, + environmentHash: "", + environmentVariables: OPENCODE_DEFAULT_ENVIRONMENT_VARIABLES, + modelAliases: {}, + preferredThinkingByModel: {}, + selectedMode: "", + thinkingOptionsByModel: {}, + visibleModels: [] +}); +function normalizeHostnameCliPaths3(value) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const result = {}; + for (const [key, entry] of Object.entries(value)) { + if (typeof entry === "string" && entry.trim()) { + result[key] = entry.trim(); + } + } + return result; +} +function normalizeOpencodeVisibleModels(value, discoveredModels = []) { + if (!Array.isArray(value)) { + return []; + } + const normalized = []; + const seen = /* @__PURE__ */ new Set(); + for (const entry of value) { + if (typeof entry !== "string") { + continue; + } + const trimmed = resolveOpencodeBaseModelRawId(entry.trim(), discoveredModels); + if (!trimmed || seen.has(trimmed)) { + continue; + } + seen.add(trimmed); + normalized.push(trimmed); + } + return normalized; +} +function normalizeOpencodeModelAliases(value, discoveredModels = []) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const normalized = {}; + for (const [rawId, alias] of Object.entries(value)) { + if (typeof alias !== "string") { + continue; + } + const normalizedRawId = resolveOpencodeBaseModelRawId(rawId.trim(), discoveredModels); + const normalizedAlias = alias.trim(); + if (!normalizedRawId || !normalizedAlias) { + continue; + } + normalized[normalizedRawId] = normalizedAlias; + } + return normalized; +} +function normalizeOpencodePreferredThinkingByModel(value, discoveredModels = []) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const normalized = {}; + for (const [rawId, thinkingLevel] of Object.entries(value)) { + if (typeof thinkingLevel !== "string") { + continue; + } + const normalizedRawId = resolveOpencodeBaseModelRawId(rawId.trim(), discoveredModels); + const normalizedThinkingLevel = thinkingLevel.trim(); + if (!normalizedRawId || !normalizedThinkingLevel) { + continue; + } + normalized[normalizedRawId] = normalizedThinkingLevel; + } + return normalized; +} +function getOpencodeProviderSettings(settings11) { + var _a5, _b3, _c2, _d, _e2; + const config2 = getProviderConfig(settings11, "opencode"); + const normalizedCliPathsByHost = normalizeHostnameCliPaths3(config2.cliPathsByHost); + const cliPathsByHost = Object.keys(normalizedCliPathsByHost).length > 0 ? migrateLegacyHostnameKeyedMap( + normalizedCliPathsByHost, + getHostnameKey(), + getLegacyHostnameKey() + ) : normalizedCliPathsByHost; + seedOpencodeDiscoveryStateFromLegacyConfig(settings11, config2); + const discoveryState = getOpencodeDiscoveryState(settings11); + const availableModes = discoveryState.availableModes; + const discoveredModels = discoveryState.discoveredModels; + const persistedThinkingOptionsByModel = normalizeOpencodeThinkingOptionsByModel( + config2.thinkingOptionsByModel, + discoveredModels + ); + const thinkingOptionsByModel = normalizeOpencodeThinkingOptionsByModel({ + ...persistedThinkingOptionsByModel, + ...discoveryState.thinkingOptionsByModel + }, discoveredModels); + return { + availableModes, + cliPath: (_a5 = config2.cliPath) != null ? _a5 : DEFAULT_OPENCODE_PROVIDER_SETTINGS.cliPath, + cliPathsByHost, + discoveredModels, + enabled: (_b3 = config2.enabled) != null ? _b3 : DEFAULT_OPENCODE_PROVIDER_SETTINGS.enabled, + environmentHash: (_c2 = config2.environmentHash) != null ? _c2 : DEFAULT_OPENCODE_PROVIDER_SETTINGS.environmentHash, + environmentVariables: (_e2 = (_d = config2.environmentVariables) != null ? _d : getProviderEnvironmentVariables(settings11, "opencode")) != null ? _e2 : DEFAULT_OPENCODE_PROVIDER_SETTINGS.environmentVariables, + modelAliases: normalizeOpencodeModelAliases(config2.modelAliases, discoveredModels), + preferredThinkingByModel: normalizeOpencodePreferredThinkingByModel( + config2.preferredThinkingByModel, + discoveredModels + ), + selectedMode: normalizeManagedOpencodeSelectedMode(config2.selectedMode, availableModes), + thinkingOptionsByModel, + visibleModels: normalizeOpencodeVisibleModels(config2.visibleModels, discoveredModels) + }; +} +function updateOpencodeProviderSettings(settings11, updates) { + var _a5, _b3, _c2, _d; + const current = getOpencodeProviderSettings(settings11); + const hostnameKey = getHostnameKey(); + if ("availableModes" in updates || "discoveredModels" in updates || "thinkingOptionsByModel" in updates) { + updateOpencodeDiscoveryState(settings11, { + ...updates.availableModes !== void 0 ? { availableModes: updates.availableModes } : {}, + ...updates.discoveredModels !== void 0 ? { discoveredModels: updates.discoveredModels } : {}, + ...updates.thinkingOptionsByModel !== void 0 ? { thinkingOptionsByModel: updates.thinkingOptionsByModel } : {} + }); + } + const discoveryState = getOpencodeDiscoveryState(settings11); + const nextAvailableModes = discoveryState.availableModes; + const nextDiscoveredModels = discoveryState.discoveredModels; + const nextThinkingOptionsByModel = updates.thinkingOptionsByModel !== void 0 ? discoveryState.thinkingOptionsByModel : normalizeOpencodeThinkingOptionsByModel( + current.thinkingOptionsByModel, + nextDiscoveredModels + ); + const nextSelectedMode = normalizeManagedOpencodeSelectedMode( + (_a5 = updates.selectedMode) != null ? _a5 : current.selectedMode, + nextAvailableModes + ); + const nextVisibleModels = normalizeOpencodeVisibleModels( + (_b3 = updates.visibleModels) != null ? _b3 : current.visibleModels, + nextDiscoveredModels + ); + const nextModelAliases = pruneModelAliasesToVisible( + normalizeOpencodeModelAliases( + (_c2 = updates.modelAliases) != null ? _c2 : current.modelAliases, + nextDiscoveredModels + ), + nextVisibleModels + ); + const nextCliPathsByHost = "cliPathsByHost" in updates ? normalizeHostnameCliPaths3(updates.cliPathsByHost) : { ...current.cliPathsByHost }; + let nextCliPath = "cliPathsByHost" in updates ? typeof updates.cliPath === "string" ? updates.cliPath.trim() : DEFAULT_OPENCODE_PROVIDER_SETTINGS.cliPath : current.cliPath.trim(); + if ("cliPath" in updates && !("cliPathsByHost" in updates)) { + const trimmedCliPath = typeof updates.cliPath === "string" ? updates.cliPath.trim() : ""; + if (trimmedCliPath) { + nextCliPathsByHost[hostnameKey] = trimmedCliPath; + } else { + delete nextCliPathsByHost[hostnameKey]; + } + nextCliPath = DEFAULT_OPENCODE_PROVIDER_SETTINGS.cliPath; + } + const next = { + ...current, + ...updates, + availableModes: nextAvailableModes, + cliPath: nextCliPath, + cliPathsByHost: nextCliPathsByHost, + discoveredModels: nextDiscoveredModels, + modelAliases: nextModelAliases, + preferredThinkingByModel: normalizeOpencodePreferredThinkingByModel( + (_d = updates.preferredThinkingByModel) != null ? _d : current.preferredThinkingByModel, + nextDiscoveredModels + ), + selectedMode: nextSelectedMode, + thinkingOptionsByModel: nextThinkingOptionsByModel, + visibleModels: nextVisibleModels + }; + if (updates.visibleModels !== void 0) { + retargetRemovedOpencodeSelections(settings11, next); + } + const persistedThinkingOptionsByModel = pruneThinkingOptionsToPersistedSelections( + settings11, + next + ); + setProviderConfig(settings11, "opencode", { + cliPath: next.cliPath, + cliPathsByHost: next.cliPathsByHost, + enabled: next.enabled, + environmentHash: next.environmentHash, + environmentVariables: next.environmentVariables, + modelAliases: next.modelAliases, + preferredThinkingByModel: next.preferredThinkingByModel, + selectedMode: next.selectedMode, + thinkingOptionsByModel: persistedThinkingOptionsByModel, + visibleModels: next.visibleModels + }); + return next; +} +function hasLegacyOpencodeDiscoveryFields(settings11) { + const config2 = getProviderConfig(settings11, "opencode"); + return "availableModes" in config2 || "discoveredModels" in config2; +} +function pruneModelAliasesToVisible(aliases, visibleModels) { + if (visibleModels.length === 0 || Object.keys(aliases).length === 0) { + return {}; + } + const visibleSet = new Set(visibleModels); + const pruned = {}; + for (const [rawId, alias] of Object.entries(aliases)) { + if (visibleSet.has(rawId)) { + pruned[rawId] = alias; + } + } + return pruned; +} +function pruneThinkingOptionsToPersistedSelections(settings11, next) { + const persistableRawIds = new Set(next.visibleModels); + addPersistableSelection(persistableRawIds, settings11.model, next.discoveredModels); + addPersistableSelection(persistableRawIds, settings11.titleGenerationModel, next.discoveredModels); + const savedProviderModel = settings11.savedProviderModel; + if (savedProviderModel && typeof savedProviderModel === "object" && !Array.isArray(savedProviderModel)) { + addPersistableSelection( + persistableRawIds, + savedProviderModel.opencode, + next.discoveredModels + ); + } + const pruned = {}; + for (const rawId of persistableRawIds) { + const options = next.thinkingOptionsByModel[rawId]; + if (options == null ? void 0 : options.length) { + pruned[rawId] = options.map((option) => ({ ...option })); + } + } + return pruned; +} +function addPersistableSelection(target, value, discoveredModels) { + if (typeof value !== "string" || !isOpencodeModelSelectionId(value)) { + return; + } + const rawModelId = decodeOpencodeModelId(value); + if (!rawModelId) { + return; + } + const baseRawId = resolveOpencodeBaseModelRawId(rawModelId, discoveredModels); + if (baseRawId) { + target.add(baseRawId); + } +} +function retargetRemovedOpencodeSelections(settings11, next) { + var _a5; + if (next.visibleModels.length === 0) { + if (typeof settings11.titleGenerationModel === "string" && isOpencodeModelSelectionId(settings11.titleGenerationModel)) { + settings11.titleGenerationModel = ""; + } + return; + } + const visibleSet = new Set(next.visibleModels); + const fallbackRawId = next.visibleModels[0]; + const fallbackModelId = encodeOpencodeModelId(fallbackRawId); + const fallbackEffort = (_a5 = next.preferredThinkingByModel[fallbackRawId]) != null ? _a5 : OPENCODE_DEFAULT_THINKING_LEVEL; + const maybeRetargetModel = (value) => { + if (typeof value !== "string" || !isOpencodeModelSelectionId(value)) { + return null; + } + const rawModelId = decodeOpencodeModelId(value); + if (!rawModelId) { + return fallbackModelId; + } + const baseRawId = resolveOpencodeBaseModelRawId(rawModelId, next.discoveredModels); + return visibleSet.has(baseRawId) ? null : fallbackModelId; + }; + const savedProviderModel = ensureProviderProjectionMap(settings11, "savedProviderModel"); + const nextSavedModel = maybeRetargetModel(savedProviderModel.opencode); + if (nextSavedModel) { + savedProviderModel.opencode = nextSavedModel; + ensureProviderProjectionMap(settings11, "savedProviderEffort").opencode = fallbackEffort; + } + const nextTopLevelModel = maybeRetargetModel(settings11.model); + if (nextTopLevelModel) { + settings11.model = nextTopLevelModel; + settings11.effortLevel = fallbackEffort; + } + const nextTitleGenerationModel = maybeRetargetModel(settings11.titleGenerationModel); + if (nextTitleGenerationModel) { + settings11.titleGenerationModel = nextTitleGenerationModel; + } +} + +// src/providers/pi/settings.ts +init_env(); + +// src/providers/pi/internal/providerProjection.ts +function ensureProviderProjectionMap2(settings11, key) { + const current = settings11[key]; + if (current && typeof current === "object" && !Array.isArray(current)) { + return current; + } + const next = {}; + settings11[key] = next; + return next; +} + +// src/providers/pi/models.ts +var PI_SYNTHETIC_MODEL_ID = "pi"; +var PI_MODEL_PREFIX = "pi:"; +var PI_DEFAULT_THINKING_LEVEL = "medium"; +var VALID_THINKING_LEVELS = /* @__PURE__ */ new Set([ + "off", + "minimal", + "low", + "medium", + "high", + "xhigh" +]); +var DEFAULT_REASONING_LEVELS = [ + "off", + "minimal", + "low", + "medium", + "high" +]; +function isPiModelSelectionId(model) { + return model === PI_SYNTHETIC_MODEL_ID || model.startsWith(PI_MODEL_PREFIX); +} +function encodePiModelId(provider, modelId) { + const normalizedProvider = provider.trim(); + const normalizedModelId = modelId.trim(); + if (!normalizedProvider || !normalizedModelId) { + return PI_SYNTHETIC_MODEL_ID; + } + return `${PI_MODEL_PREFIX}${normalizedProvider}/${normalizedModelId}`; +} +function decodePiModelId(model) { + if (!model.startsWith(PI_MODEL_PREFIX)) { + return null; + } + const raw = model.slice(PI_MODEL_PREFIX.length).trim(); + const slashIndex = raw.indexOf("/"); + if (slashIndex <= 0 || slashIndex >= raw.length - 1) { + return null; + } + const provider = raw.slice(0, slashIndex).trim(); + const modelId = raw.slice(slashIndex + 1).trim(); + return provider && modelId ? { provider, modelId } : null; +} +function normalizePiThinkingLevel(value) { + if (typeof value !== "string") { + return null; + } + const normalized = value.trim().toLowerCase(); + return VALID_THINKING_LEVELS.has(normalized) ? normalized : null; +} +function getPiSupportedThinkingLevels(value) { + const record2 = isPlainObject(value) ? value : {}; + const explicitLevels = collectExplicitThinkingLevels(record2); + const mappedLevels = collectThinkingLevelMapLevels(record2); + const reasoning = record2.reasoning === true || record2.supportsReasoning === true || record2.thinking === true || record2.canReason === true || explicitLevels.length > 0 || mappedLevels.levels.length > 0; + if (!reasoning) { + return ["off"]; + } + if (explicitLevels.length === 0 && mappedLevels.levels.length === 0) { + return [...DEFAULT_REASONING_LEVELS]; + } + const result = []; + const seen = /* @__PURE__ */ new Set(); + for (const level of [...explicitLevels, ...mappedLevels.levels]) { + if (level === null || mappedLevels.disabledLevels.has(level)) { + continue; + } + if (!seen.has(level)) { + seen.add(level); + result.push(level); + } + } + return result.length > 0 ? sortThinkingLevels(result) : [...DEFAULT_REASONING_LEVELS]; +} +function normalizePiDiscoveredModels(value) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i; + if (!Array.isArray(value)) { + return []; + } + const normalized = []; + const seen = /* @__PURE__ */ new Set(); + for (const entry of value) { + if (!isPlainObject(entry)) { + continue; + } + const provider = (_b3 = (_a5 = firstString(entry.provider, entry.providerId, entry.api)) == null ? void 0 : _a5.trim()) != null ? _b3 : ""; + const id = (_d = (_c2 = firstString(entry.id, entry.modelId, entry.model, entry.name)) == null ? void 0 : _c2.trim()) != null ? _d : ""; + if (!provider || !id) { + continue; + } + const key = `${provider}\0${id}`; + if (seen.has(key)) { + continue; + } + seen.add(key); + const label = ((_e2 = firstString(entry.label, entry.displayName, entry.name)) == null ? void 0 : _e2.trim()) || `${provider}/${id}`; + const api = (_f2 = firstString(entry.api)) == null ? void 0 : _f2.trim(); + const contextWindow = firstFinitePositiveNumber( + entry.contextWindow, + entry.context_window, + entry.context, + entry.maxContextTokens, + entry.max_context_tokens + ); + const maxTokens = firstFinitePositiveNumber( + entry.maxTokens, + entry.max_tokens, + entry.outputTokens, + entry.output_tokens + ); + const input = normalizeModelInputs( + (_i = (_h2 = (_g = entry.input) != null ? _g : entry.inputs) != null ? _h2 : entry.modalities) != null ? _i : entry.supportedInputs + ); + const thinkingLevels = getPiSupportedThinkingLevels(entry); + const reasoning = thinkingLevels.some((level) => level !== "off"); + normalized.push({ + ...api ? { api } : {}, + ...contextWindow !== void 0 ? { contextWindow } : {}, + encodedId: encodePiModelId(provider, id), + id, + input, + label, + ...maxTokens !== void 0 ? { maxTokens } : {}, + provider, + reasoning, + thinkingLevels + }); + } + return normalized; +} +function findPiModel(settings11, encodedId) { + var _a5; + return (_a5 = settings11.discoveredModels.find((model) => model.encodedId === encodedId)) != null ? _a5 : null; +} +function clampPiThinkingLevel(level, supportedLevels) { + var _a5; + const normalized = normalizePiThinkingLevel(level); + if (normalized && supportedLevels.includes(normalized)) { + return normalized; + } + if (supportedLevels.includes(PI_DEFAULT_THINKING_LEVEL)) { + return PI_DEFAULT_THINKING_LEVEL; + } + return (_a5 = supportedLevels[0]) != null ? _a5 : "off"; +} +function collectExplicitThinkingLevels(record2) { + const rawLevels = [ + record2.thinkingLevels, + record2.thinking_levels, + record2.reasoningLevels, + record2.reasoning_levels, + isPlainObject(record2.thinking) ? record2.thinking.levels : void 0, + isPlainObject(record2.reasoning) ? record2.reasoning.levels : void 0 + ].find(Array.isArray); + if (!Array.isArray(rawLevels)) { + return []; + } + return rawLevels.map((level) => { + var _a5; + if (level === null) { + return null; + } + return (_a5 = normalizePiThinkingLevel(level)) != null ? _a5 : void 0; + }).filter((level) => level !== void 0); +} +function collectThinkingLevelMapLevels(record2) { + const rawMap = isPlainObject(record2.thinkingLevelMap) ? record2.thinkingLevelMap : isPlainObject(record2.thinking_level_map) ? record2.thinking_level_map : null; + if (!rawMap) { + return { disabledLevels: /* @__PURE__ */ new Set(), levels: [] }; + } + const disabledLevels = /* @__PURE__ */ new Set(); + const levels = [...DEFAULT_REASONING_LEVELS]; + for (const [rawLevel, mappedLevel] of Object.entries(rawMap)) { + const level = normalizePiThinkingLevel(rawLevel); + if (!level) { + continue; + } + if (mappedLevel === null) { + disabledLevels.add(level); + } else { + levels.push(level); + } + } + return { disabledLevels, levels }; +} +function sortThinkingLevels(levels) { + const rank = new Map(DEFAULT_REASONING_LEVELS.concat("xhigh").map((level, index) => [level, index])); + return [...levels].sort((left, right) => { + var _a5, _b3; + return ((_a5 = rank.get(left)) != null ? _a5 : 99) - ((_b3 = rank.get(right)) != null ? _b3 : 99); + }); +} +function normalizeModelInputs(value) { + const rawInputs = Array.isArray(value) ? value : ["text"]; + const inputs = []; + const seen = /* @__PURE__ */ new Set(); + for (const entry of rawInputs) { + const normalized = typeof entry === "string" ? entry.trim().toLowerCase() : ""; + const input = normalized === "image" || normalized === "images" ? "image" : normalized === "text" ? "text" : null; + if (input && !seen.has(input)) { + seen.add(input); + inputs.push(input); + } + } + return inputs.length > 0 ? inputs : ["text"]; +} +function firstString(...values) { + for (const value of values) { + if (typeof value === "string") { + return value; + } + } + return void 0; +} +function firstFinitePositiveNumber(...values) { + for (const value of values) { + if (typeof value === "number" && Number.isFinite(value) && value > 0) { + return value; + } + } + return void 0; +} +function isPlainObject(value) { + return value !== null && typeof value === "object" && !Array.isArray(value); +} + +// src/providers/pi/settings.ts +var DEFAULT_PI_PROVIDER_SETTINGS = Object.freeze({ + cliPath: "", + cliPathsByHost: {}, + discoveredModels: [], + enabled: false, + environmentHash: "", + environmentVariables: "", + modelAliases: {}, + preferredThinkingByModel: {}, + toolMode: "all", + visibleModels: [] +}); +function normalizeHostnameCliPaths4(value) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const result = {}; + for (const [key, entry] of Object.entries(value)) { + if (typeof entry === "string" && entry.trim()) { + result[key] = entry.trim(); + } + } + return result; +} +function normalizePiVisibleModels(value, discoveredModels = []) { + if (!Array.isArray(value)) { + return []; + } + const knownIds = new Set(discoveredModels.map((model) => model.encodedId)); + const normalized = []; + const seen = /* @__PURE__ */ new Set(); + for (const entry of value) { + if (typeof entry !== "string") { + continue; + } + const trimmed = entry.trim(); + if (!trimmed || !decodePiModelId(trimmed)) { + continue; + } + if (knownIds.size > 0 && !knownIds.has(trimmed)) { + continue; + } + if (seen.has(trimmed)) { + continue; + } + seen.add(trimmed); + normalized.push(trimmed); + } + return normalized; +} +function getPiProviderSettings(settings11) { + var _a5, _b3, _c2, _d, _e2; + const config2 = getProviderConfig(settings11, "pi"); + const normalizedCliPathsByHost = normalizeHostnameCliPaths4(config2.cliPathsByHost); + const cliPathsByHost = Object.keys(normalizedCliPathsByHost).length > 0 ? migrateLegacyHostnameKeyedMap( + normalizedCliPathsByHost, + getHostnameKey(), + getLegacyHostnameKey() + ) : normalizedCliPathsByHost; + const discoveredModels = normalizePiDiscoveredModels(config2.discoveredModels); + const visibleModels = normalizePiVisibleModels(config2.visibleModels, discoveredModels); + const persistableIds = getPersistablePiModelIds(settings11, visibleModels); + return { + cliPath: (_a5 = config2.cliPath) != null ? _a5 : DEFAULT_PI_PROVIDER_SETTINGS.cliPath, + cliPathsByHost, + discoveredModels, + enabled: (_b3 = config2.enabled) != null ? _b3 : DEFAULT_PI_PROVIDER_SETTINGS.enabled, + environmentHash: (_c2 = config2.environmentHash) != null ? _c2 : DEFAULT_PI_PROVIDER_SETTINGS.environmentHash, + environmentVariables: (_e2 = (_d = config2.environmentVariables) != null ? _d : getProviderEnvironmentVariables(settings11, "pi")) != null ? _e2 : DEFAULT_PI_PROVIDER_SETTINGS.environmentVariables, + modelAliases: normalizePiModelAliasesForPersistableIds( + config2.modelAliases, + discoveredModels, + persistableIds + ), + preferredThinkingByModel: normalizePiPreferredThinkingForPersistableIds( + config2.preferredThinkingByModel, + discoveredModels, + persistableIds + ), + toolMode: normalizePiToolMode(config2.toolMode), + visibleModels + }; +} +function updatePiProviderSettings(settings11, updates) { + var _a5, _b3, _c2, _d, _e2; + const current = getPiProviderSettings(settings11); + const hostnameKey = getHostnameKey(); + const nextDiscoveredModels = normalizePiDiscoveredModels( + (_a5 = updates.discoveredModels) != null ? _a5 : current.discoveredModels + ); + const nextVisibleModels = normalizePiVisibleModels( + (_b3 = updates.visibleModels) != null ? _b3 : current.visibleModels, + nextDiscoveredModels + ); + const persistableIds = getPersistablePiModelIds(settings11, nextVisibleModels); + const nextModelAliases = pruneMapToPersistableIds( + normalizePiModelAliasesForPersistableIds( + (_c2 = updates.modelAliases) != null ? _c2 : current.modelAliases, + nextDiscoveredModels, + persistableIds + ), + persistableIds + ); + const nextPreferredThinkingByModel = pruneMapToPersistableIds( + normalizePiPreferredThinkingForPersistableIds( + (_d = updates.preferredThinkingByModel) != null ? _d : current.preferredThinkingByModel, + nextDiscoveredModels, + persistableIds + ), + persistableIds + ); + const nextCliPathsByHost = "cliPathsByHost" in updates ? normalizeHostnameCliPaths4(updates.cliPathsByHost) : { ...current.cliPathsByHost }; + let nextCliPath = "cliPathsByHost" in updates ? typeof updates.cliPath === "string" ? updates.cliPath.trim() : DEFAULT_PI_PROVIDER_SETTINGS.cliPath : current.cliPath.trim(); + if ("cliPath" in updates && !("cliPathsByHost" in updates)) { + const trimmedCliPath = typeof updates.cliPath === "string" ? updates.cliPath.trim() : ""; + if (trimmedCliPath) { + nextCliPathsByHost[hostnameKey] = trimmedCliPath; + } else { + delete nextCliPathsByHost[hostnameKey]; + } + nextCliPath = DEFAULT_PI_PROVIDER_SETTINGS.cliPath; + } + const next = { + ...current, + ...updates, + cliPath: nextCliPath, + cliPathsByHost: nextCliPathsByHost, + discoveredModels: nextDiscoveredModels, + modelAliases: nextModelAliases, + preferredThinkingByModel: nextPreferredThinkingByModel, + toolMode: normalizePiToolMode((_e2 = updates.toolMode) != null ? _e2 : current.toolMode), + visibleModels: nextVisibleModels + }; + if (updates.visibleModels !== void 0) { + retargetRemovedPiSelections(settings11, next); + const retargetedPersistableIds = getPersistablePiModelIds(settings11, next.visibleModels); + next.modelAliases = pruneMapToPersistableIds(next.modelAliases, retargetedPersistableIds); + next.preferredThinkingByModel = pruneMapToPersistableIds( + next.preferredThinkingByModel, + retargetedPersistableIds + ); + } + setProviderConfig(settings11, "pi", { + cliPath: next.cliPath, + cliPathsByHost: next.cliPathsByHost, + discoveredModels: next.discoveredModels, + enabled: next.enabled, + environmentHash: next.environmentHash, + environmentVariables: next.environmentVariables, + modelAliases: next.modelAliases, + preferredThinkingByModel: next.preferredThinkingByModel, + toolMode: next.toolMode, + visibleModels: next.visibleModels + }); + return next; +} +function normalizePiModelAliasesForPersistableIds(value, discoveredModels, persistableIds) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const normalized = {}; + for (const [encodedId, alias] of Object.entries(value)) { + if (typeof alias !== "string") { + continue; + } + const normalizedEncodedId = normalizePiPersistableEncodedId( + encodedId, + discoveredModels, + persistableIds + ); + const normalizedAlias = alias.trim(); + if (!normalizedEncodedId || !normalizedAlias) { + continue; + } + normalized[normalizedEncodedId] = normalizedAlias; + } + return normalized; +} +function normalizePiPreferredThinkingForPersistableIds(value, discoveredModels, persistableIds) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const normalized = {}; + for (const [encodedId, thinkingLevel] of Object.entries(value)) { + const normalizedEncodedId = normalizePiPersistableEncodedId( + encodedId, + discoveredModels, + persistableIds + ); + const normalizedThinkingLevel = normalizePiThinkingLevel(thinkingLevel); + if (!normalizedEncodedId || !normalizedThinkingLevel) { + continue; + } + const discoveredModel = discoveredModels.find((model) => model.encodedId === normalizedEncodedId); + if (discoveredModel && !discoveredModel.thinkingLevels.includes(normalizedThinkingLevel)) { + continue; + } + normalized[normalizedEncodedId] = normalizedThinkingLevel; + } + return normalized; +} +function normalizePiToolMode(value) { + return value === "readonly" ? "readonly" : "all"; +} +function normalizePiPersistableEncodedId(value, discoveredModels, persistableIds) { + const trimmed = value.trim(); + const decoded = decodePiModelId(trimmed); + if (!decoded) { + return ""; + } + const discoveredModel = findPiModel({ discoveredModels }, trimmed); + if (discoveredModel) { + return discoveredModel.encodedId; + } + return persistableIds.has(trimmed) ? trimmed : ""; +} +function getPersistablePiModelIds(settings11, visibleModels) { + const persistableIds = new Set(visibleModels); + addPersistableSelection2(persistableIds, settings11.model); + addPersistableSelection2(persistableIds, settings11.titleGenerationModel); + const savedProviderModel = settings11.savedProviderModel; + if (savedProviderModel && typeof savedProviderModel === "object" && !Array.isArray(savedProviderModel)) { + addPersistableSelection2(persistableIds, savedProviderModel.pi); + } + return persistableIds; +} +function addPersistableSelection2(target, value) { + if (typeof value === "string" && decodePiModelId(value)) { + target.add(value); + } +} +function pruneMapToPersistableIds(value, persistableIds) { + const pruned = {}; + for (const [encodedId, entry] of Object.entries(value)) { + if (persistableIds.has(encodedId)) { + pruned[encodedId] = entry; + } + } + return pruned; +} +function retargetRemovedPiSelections(settings11, next) { + var _a5; + if (next.visibleModels.length === 0) { + if (typeof settings11.titleGenerationModel === "string" && isPiModelSelectionId(settings11.titleGenerationModel)) { + settings11.titleGenerationModel = ""; + } + return; + } + const visibleSet = new Set(next.visibleModels); + const fallbackModelId = next.visibleModels[0]; + const fallbackEffort = (_a5 = next.preferredThinkingByModel[fallbackModelId]) != null ? _a5 : PI_DEFAULT_THINKING_LEVEL; + const maybeRetargetModel = (value) => { + if (typeof value !== "string" || !isPiModelSelectionId(value) || value === "pi") { + return null; + } + return visibleSet.has(value) ? null : fallbackModelId; + }; + const savedProviderModel = ensureProviderProjectionMap2(settings11, "savedProviderModel"); + const nextSavedModel = maybeRetargetModel(savedProviderModel.pi); + if (nextSavedModel) { + savedProviderModel.pi = nextSavedModel; + ensureProviderProjectionMap2(settings11, "savedProviderEffort").pi = fallbackEffort; + } + const nextTopLevelModel = maybeRetargetModel(settings11.model); + if (nextTopLevelModel) { + settings11.model = nextTopLevelModel; + settings11.effortLevel = fallbackEffort; + } + const nextTitleGenerationModel = maybeRetargetModel(settings11.titleGenerationModel); + if (nextTitleGenerationModel) { + settings11.titleGenerationModel = nextTitleGenerationModel; + } +} + +// src/providers/defaultProviderConfigs.ts +function getBuiltInProviderDefaultConfigs() { + return { + claude: { ...DEFAULT_CLAUDE_PROVIDER_SETTINGS }, + codex: { ...DEFAULT_CODEX_PROVIDER_SETTINGS }, + opencode: { ...DEFAULT_OPENCODE_PROVIDER_SETTINGS }, + pi: { ...DEFAULT_PI_PROVIDER_SETTINGS } + }; +} + +// src/app/settings/defaultSettings.ts +var DEFAULT_CLAUDIAN_SETTINGS = { + userName: "", + permissionMode: "yolo", + model: "haiku", + thinkingBudget: "off", + effortLevel: "high", + serviceTier: "default", + enableAutoTitleGeneration: true, + titleGenerationModel: "", + excludedTags: [], + mediaFolder: "", + systemPrompt: "", + persistentExternalContextPaths: [], + sharedEnvironmentVariables: "", + envSnippets: [], + customContextLimits: {}, + customModelAliases: {}, + keyboardNavigation: { + scrollUpKey: "w", + scrollDownKey: "s", + focusInputKey: "i" + }, + requireCommandOrControlEnterToSend: false, + locale: "en", + providerConfigs: getBuiltInProviderDefaultConfigs(), + settingsProvider: "claude", + savedProviderModel: {}, + savedProviderEffort: {}, + savedProviderServiceTier: {}, + savedProviderThinkingBudget: {}, + savedProviderPermissionMode: {}, + lastCustomModel: "", + maxTabs: 3, + tabBarPosition: "input", + enableAutoScroll: true, + deferMathRenderingDuringStreaming: true, + chatViewPlacement: "right-sidebar", + hiddenProviderCommands: getDefaultHiddenProviderCommands() +}; + +// src/app/settings/ClaudianSettingsStorage.ts +var LEGACY_TOP_LEVEL_PROVIDER_FIELDS = [ + "claudeSafeMode", + "codexSafeMode", + "claudeCliPath", + "claudeCliPathsByHost", + "codexCliPath", + "codexCliPathsByHost", + "codexReasoningSummary", + "loadUserClaudeSettings", + "codexEnabled", + "lastClaudeModel", + "enableChrome", + "enableBangBash", + "enableOpus1M", + "enableSonnet1M", + "environmentVariables", + "lastEnvHash", + "lastCodexEnvHash" +]; +var LEGACY_STRIPPED_SETTING_FIELDS = [ + "activeConversationId", + "show1MModel", + "hiddenSlashCommands", + "slashCommands", + "allowExternalAccess", + "allowedExportPaths", + "enableBlocklist", + "blockedCommands", + ...LEGACY_TOP_LEVEL_PROVIDER_FIELDS, + "openInMainTab" +]; +function stripLegacyFields(settings11) { + const cleaned = { ...settings11 }; + for (const key of LEGACY_STRIPPED_SETTING_FIELDS) { + delete cleaned[key]; + } + return cleaned; +} +function isChatViewPlacement(value) { + return typeof value === "string" && CHAT_VIEW_PLACEMENTS.includes(value); +} +function normalizeChatViewPlacement(value, legacyOpenInMainTab) { + if (isChatViewPlacement(value)) { + return value; + } + if (typeof legacyOpenInMainTab === "boolean") { + return legacyOpenInMainTab ? "main-tab" : "right-sidebar"; + } + return DEFAULT_CLAUDIAN_SETTINGS.chatViewPlacement; +} +function shouldPersistChatViewPlacementMigration(stored, normalized) { + return "openInMainTab" in stored || "chatViewPlacement" in stored && stored.chatViewPlacement !== normalized; +} +function normalizeProviderConfigs(value) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const result = {}; + for (const [providerId, config2] of Object.entries(value)) { + if (config2 && typeof config2 === "object" && !Array.isArray(config2)) { + result[providerId] = { ...config2 }; + } + } + return result; +} +var HOST_SCOPED_PROVIDER_CONFIG_FIELDS = { + claude: ["cliPathsByHost"], + codex: ["cliPathsByHost", "installationMethodsByHost", "wslDistroOverridesByHost"], + opencode: ["cliPathsByHost"], + pi: ["cliPathsByHost"] +}; +function hasHostScopedProviderConfigNormalization(original, normalized) { + if (!normalized || typeof normalized !== "object" || Array.isArray(normalized)) { + return false; + } + const normalizedConfigs = normalized; + for (const [providerId, fields] of Object.entries(HOST_SCOPED_PROVIDER_CONFIG_FIELDS)) { + const originalConfig = original[providerId]; + const normalizedConfig = normalizedConfigs[providerId]; + if (!originalConfig || !normalizedConfig) { + continue; + } + for (const field of fields) { + if (field in originalConfig && JSON.stringify(originalConfig[field]) !== JSON.stringify(normalizedConfig[field])) { + return true; + } + } + } + return false; +} +function isEnvironmentScope(value) { + return value === "shared" || typeof value === "string" && value.startsWith("provider:"); +} +function normalizeContextLimits(value) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return void 0; + } + const result = {}; + for (const [key, entry] of Object.entries(value)) { + if (typeof entry === "number" && Number.isFinite(entry) && entry > 0) { + result[key] = entry; + } + } + return Object.keys(result).length > 0 ? result : void 0; +} +function normalizeModelAliases(value) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const result = {}; + for (const [key, alias] of Object.entries(value)) { + if (typeof alias !== "string") { + continue; + } + const modelId = key.trim(); + const normalizedAlias = alias.trim(); + if (modelId && normalizedAlias) { + result[modelId] = normalizedAlias; + } + } + return result; +} +function normalizeEnvSnippets(value) { + if (!Array.isArray(value)) { + return []; + } + const snippets = []; + for (const item of value) { + if (!item || typeof item !== "object" || Array.isArray(item)) { + continue; + } + const candidate = item; + if (typeof candidate.id !== "string" || typeof candidate.name !== "string" || typeof candidate.description !== "string" || typeof candidate.envVars !== "string") { + continue; + } + const modelAliases = "modelAliases" in candidate ? normalizeModelAliases(candidate.modelAliases) : void 0; + snippets.push({ + id: candidate.id, + name: candidate.name, + description: candidate.description, + envVars: candidate.envVars, + scope: resolveEnvironmentSnippetScope( + candidate.envVars, + isEnvironmentScope(candidate.scope) ? candidate.scope : inferEnvironmentSnippetScope(candidate.envVars) + ), + contextLimits: normalizeContextLimits(candidate.contextLimits), + modelAliases + }); + } + return snippets; +} +function hasLegacyTopLevelProviderFields(stored) { + return LEGACY_TOP_LEVEL_PROVIDER_FIELDS.some((key) => key in stored); +} +function mergeLegacyClaudeHiddenCommands(hiddenProviderCommands, legacyHiddenSlashCommands) { + const legacyCommands = normalizeHiddenCommandList(legacyHiddenSlashCommands); + if (legacyCommands.length === 0 || hiddenProviderCommands.claude) { + return hiddenProviderCommands; + } + return { + ...hiddenProviderCommands, + claude: legacyCommands + }; +} +var ClaudianSettingsStorage = class { + constructor(adapter) { + this.adapter = adapter; + } + async load() { + var _a5, _b3; + const settingsPath = await this.getLoadPath(); + if (!settingsPath) { + return this.getDefaults(); + } + const content = await this.adapter.read(settingsPath); + const stored = JSON.parse(content); + const hiddenProviderCommands = mergeLegacyClaudeHiddenCommands( + normalizeHiddenProviderCommands(stored.hiddenProviderCommands), + stored.hiddenSlashCommands + ); + const envSnippets = normalizeEnvSnippets(stored.envSnippets); + const customModelAliases = normalizeModelAliases(stored.customModelAliases); + const providerConfigs = normalizeProviderConfigs(stored.providerConfigs); + const chatViewPlacement = normalizeChatViewPlacement( + stored.chatViewPlacement, + stored.openInMainTab + ); + const legacyProviderSettings = { + ...stored, + hiddenProviderCommands, + providerConfigs + }; + const storedWithoutLegacy = stripLegacyFields({ + ...legacyProviderSettings + }); + const legacyNormalized = { + ...storedWithoutLegacy, + sharedEnvironmentVariables: getSharedEnvironmentVariables(legacyProviderSettings), + envSnippets, + customModelAliases, + hiddenProviderCommands, + providerConfigs, + chatViewPlacement + }; + const merged = { + ...this.getDefaults(), + ...legacyNormalized + }; + updateClaudeProviderSettings( + merged, + getClaudeProviderSettings(legacyProviderSettings) + ); + updateCodexProviderSettings( + merged, + getCodexProviderSettings(legacyProviderSettings) + ); + updateOpencodeProviderSettings( + merged, + getOpencodeProviderSettings(legacyProviderSettings) + ); + updatePiProviderSettings( + merged, + getPiProviderSettings(legacyProviderSettings) + ); + const didNormalizeHostScopedProviderConfigs = hasHostScopedProviderConfigNormalization( + providerConfigs, + merged.providerConfigs + ); + if (settingsPath !== CLAUDIAN_SETTINGS_PATH || (hasLegacyTopLevelProviderFields(stored) || "show1MModel" in stored || "slashCommands" in stored || "hiddenSlashCommands" in stored || "activeConversationId" in stored || "allowExternalAccess" in stored || "allowedExportPaths" in stored || "enableBlocklist" in stored || "blockedCommands" in stored || shouldPersistChatViewPlacementMigration(stored, chatViewPlacement) || JSON.stringify(envSnippets) !== JSON.stringify((_a5 = stored.envSnippets) != null ? _a5 : []) || "customModelAliases" in stored && JSON.stringify(customModelAliases) !== JSON.stringify((_b3 = stored.customModelAliases) != null ? _b3 : {}) || didNormalizeHostScopedProviderConfigs)) { + await this.save(merged); + } + return merged; + } + async save(settings11) { + const content = JSON.stringify( + stripLegacyFields(settings11), + null, + 2 + ); + await this.adapter.write(CLAUDIAN_SETTINGS_PATH, content); + await this.deleteLegacyFileIfPresent(); + } + async exists() { + if (await this.adapter.exists(CLAUDIAN_SETTINGS_PATH)) { + return true; + } + return this.adapter.exists(LEGACY_CLAUDIAN_SETTINGS_PATH); + } + async update(updates) { + const current = await this.load(); + await this.save({ ...current, ...updates }); + } + async setLastModel(model, isCustom) { + if (isCustom) { + await this.update({ lastCustomModel: model }); + return; + } + const current = await this.load(); + updateClaudeProviderSettings( + current, + { lastModel: model } + ); + await this.save(current); + } + async setLastEnvHash(hash2) { + const current = await this.load(); + updateClaudeProviderSettings( + current, + { environmentHash: hash2 } + ); + await this.save(current); + } + getDefaults() { + return DEFAULT_CLAUDIAN_SETTINGS; + } + async getLoadPath() { + if (await this.adapter.exists(CLAUDIAN_SETTINGS_PATH)) { + return CLAUDIAN_SETTINGS_PATH; + } + if (await this.adapter.exists(LEGACY_CLAUDIAN_SETTINGS_PATH)) { + return LEGACY_CLAUDIAN_SETTINGS_PATH; + } + return null; + } + async deleteLegacyFileIfPresent() { + if (await this.adapter.exists(LEGACY_CLAUDIAN_SETTINGS_PATH)) { + await this.adapter.delete(LEGACY_CLAUDIAN_SETTINGS_PATH); + } + } +}; + +// src/core/bootstrap/SessionStorage.ts +var SessionStorage = class { + constructor(adapter) { + this.adapter = adapter; + } + getMetadataPath(id) { + return `${SESSIONS_PATH}/${id}.meta.json`; + } + getLegacyMetadataPath(id) { + return `${LEGACY_SESSIONS_PATH}/${id}.meta.json`; + } + async saveMetadata(metadata) { + const filePath = this.getMetadataPath(metadata.id); + const content = JSON.stringify(metadata, null, 2); + await this.adapter.write(filePath, content); + await this.deleteLegacyMetadataIfPresent(metadata.id); + } + async loadMetadata(id) { + const filePath = await this.getLoadPath(id); + try { + if (!filePath) { + return null; + } + const content = await this.adapter.read(filePath); + const metadata = JSON.parse(content); + if (filePath !== this.getMetadataPath(id)) { + await this.saveMetadata(metadata); + } + return metadata; + } catch (e2) { + return null; + } + } + async deleteMetadata(id) { + await this.adapter.delete(this.getMetadataPath(id)); + await this.deleteLegacyMetadataIfPresent(id); + } + async listMetadata() { + const metas = []; + const files = await this.listUniqueMetadataFiles(); + for (const filePath of files) { + try { + const content = await this.adapter.read(filePath); + const raw = JSON.parse(content); + metas.push(raw); + if (filePath.startsWith(`${LEGACY_SESSIONS_PATH}/`)) { + await this.saveMetadata(raw); + } + } catch (e2) { + } + } + return metas; + } + async listAllConversations() { + const nativeMetas = await this.listMetadata(); + const metas = nativeMetas.map((meta3) => { + var _a5; + return { + id: meta3.id, + providerId: (_a5 = meta3.providerId) != null ? _a5 : DEFAULT_CHAT_PROVIDER_ID, + title: meta3.title, + createdAt: meta3.createdAt, + updatedAt: meta3.updatedAt, + lastResponseAt: meta3.lastResponseAt, + messageCount: 0, + preview: "SDK session", + titleGenerationStatus: meta3.titleGenerationStatus + }; + }); + return metas.sort( + (a, b2) => { + var _a5, _b3; + return ((_a5 = b2.lastResponseAt) != null ? _a5 : b2.createdAt) - ((_b3 = a.lastResponseAt) != null ? _b3 : a.createdAt); + } + ); + } + toSessionMetadata(conversation) { + var _a5, _b3, _c2; + const providerState = (_c2 = (_b3 = (_a5 = ProviderRegistry.getConversationHistoryService(conversation.providerId)).buildPersistedProviderState) == null ? void 0 : _b3.call(_a5, conversation)) != null ? _c2 : conversation.providerState; + return { + id: conversation.id, + providerId: conversation.providerId, + title: conversation.title, + titleGenerationStatus: conversation.titleGenerationStatus, + createdAt: conversation.createdAt, + updatedAt: conversation.updatedAt, + lastResponseAt: conversation.lastResponseAt, + sessionId: conversation.sessionId, + providerState: providerState && Object.keys(providerState).length > 0 ? providerState : void 0, + currentNote: conversation.currentNote, + externalContextPaths: conversation.externalContextPaths, + enabledMcpServers: conversation.enabledMcpServers, + usage: conversation.usage, + resumeAtMessageId: conversation.resumeAtMessageId + }; + } + async getLoadPath(id) { + const filePath = this.getMetadataPath(id); + if (await this.adapter.exists(filePath)) { + return filePath; + } + const legacyFilePath = this.getLegacyMetadataPath(id); + if (await this.adapter.exists(legacyFilePath)) { + return legacyFilePath; + } + return null; + } + async deleteLegacyMetadataIfPresent(id) { + const legacyFilePath = this.getLegacyMetadataPath(id); + if (await this.adapter.exists(legacyFilePath)) { + await this.adapter.delete(legacyFilePath); + } + } + async listUniqueMetadataFiles() { + const preferredFiles = await this.listMetadataFiles(SESSIONS_PATH); + const fallbackFiles = await this.listMetadataFiles(LEGACY_SESSIONS_PATH); + const filesByName = /* @__PURE__ */ new Map(); + for (const filePath of preferredFiles) { + filesByName.set(this.getFileName(filePath), filePath); + } + for (const filePath of fallbackFiles) { + const fileName = this.getFileName(filePath); + if (!filesByName.has(fileName)) { + filesByName.set(fileName, filePath); + } + } + return Array.from(filesByName.values()); + } + async listMetadataFiles(folderPath) { + try { + const files = await this.adapter.listFiles(folderPath); + return files.filter((filePath) => filePath.endsWith(".meta.json")); + } catch (e2) { + return []; + } + } + getFileName(filePath) { + var _a5; + const parts = filePath.split("/"); + return (_a5 = parts[parts.length - 1]) != null ? _a5 : filePath; + } +}; + +// src/core/storage/VaultFileAdapter.ts +var VaultFileAdapter = class { + constructor(app) { + this.app = app; + this.writeQueue = Promise.resolve(); + } + async exists(path27) { + return this.app.vault.adapter.exists(path27); + } + async read(path27) { + return this.app.vault.adapter.read(path27); + } + async write(path27, content) { + await this.ensureParentFolder(path27); + await this.app.vault.adapter.write(path27, content); + } + async append(path27, content) { + await this.ensureParentFolder(path27); + this.writeQueue = this.writeQueue.then(async () => { + if (await this.exists(path27)) { + const existing = await this.read(path27); + await this.app.vault.adapter.write(path27, existing + content); + } else { + await this.app.vault.adapter.write(path27, content); + } + }).catch(() => { + }); + await this.writeQueue; + } + async delete(path27) { + if (await this.exists(path27)) { + await this.app.vault.adapter.remove(path27); + } + } + /** Fails silently if non-empty or missing. */ + async deleteFolder(path27) { + try { + if (await this.exists(path27)) { + await this.app.vault.adapter.rmdir(path27, false); + } + } catch (e2) { + } + } + async listFiles(folder) { + if (!await this.exists(folder)) { + return []; + } + const listing = await this.app.vault.adapter.list(folder); + return listing.files; + } + /** List subfolders in a folder. Returns relative paths from the folder. */ + async listFolders(folder) { + if (!await this.exists(folder)) { + return []; + } + const listing = await this.app.vault.adapter.list(folder); + return listing.folders; + } + /** Recursively list all files in a folder and subfolders. */ + async listFilesRecursive(folder) { + const allFiles = []; + const processFolder = async (currentFolder) => { + if (!await this.exists(currentFolder)) return; + const listing = await this.app.vault.adapter.list(currentFolder); + allFiles.push(...listing.files); + for (const subfolder of listing.folders) { + await processFolder(subfolder); + } + }; + await processFolder(folder); + return allFiles; + } + async ensureParentFolder(filePath) { + const folder = filePath.substring(0, filePath.lastIndexOf("/")); + if (folder && !await this.exists(folder)) { + await this.ensureFolder(folder); + } + } + /** Ensure a folder exists, creating it and parent folders if needed. */ + async ensureFolder(path27) { + if (await this.exists(path27)) return; + const parts = path27.split("/").filter(Boolean); + let current = ""; + for (const part of parts) { + current = current ? `${current}/${part}` : part; + if (!await this.exists(current)) { + await this.app.vault.adapter.mkdir(current); + } + } + } + /** Rename/move a file. */ + async rename(oldPath, newPath) { + await this.app.vault.adapter.rename(oldPath, newPath); + } + async stat(path27) { + try { + const stat = await this.app.vault.adapter.stat(path27); + if (!stat) return null; + return { mtime: stat.mtime, size: stat.size }; + } catch (e2) { + return null; + } + } +}; + +// src/providers/claude/types/settings.ts +function createPermissionRule(rule) { + return rule; +} +var DEFAULT_CC_SETTINGS = { + $schema: "https://json.schemastore.org/claude-code-settings.json", + permissions: { + allow: [], + deny: [], + ask: [] + } +}; +var DEFAULT_CC_PERMISSIONS = { + allow: [], + deny: [], + ask: [] +}; + +// src/utils/agent.ts +function validateAgentName(name) { + return validateSlugName(name, "Agent"); +} +function pushYamlList(lines, key, items) { + if (!items || items.length === 0) return; + lines.push(`${key}:`); + for (const item of items) { + lines.push(` - ${yamlString(item)}`); + } +} +function serializeAgent(agent) { + const lines = ["---"]; + lines.push(`name: ${agent.name}`); + lines.push(`description: ${yamlString(agent.description)}`); + pushYamlList(lines, "tools", agent.tools); + pushYamlList(lines, "disallowedTools", agent.disallowedTools); + if (agent.model && agent.model !== "inherit") { + lines.push(`model: ${agent.model}`); + } + if (agent.permissionMode) { + lines.push(`permissionMode: ${agent.permissionMode}`); + } + pushYamlList(lines, "skills", agent.skills); + if (agent.hooks !== void 0) { + lines.push(`hooks: ${JSON.stringify(agent.hooks)}`); + } + if (agent.extraFrontmatter) { + for (const [key, value] of Object.entries(agent.extraFrontmatter)) { + lines.push(`${key}: ${JSON.stringify(value)}`); + } + } + lines.push("---"); + lines.push(agent.prompt); + return lines.join("\n"); +} + +// src/providers/claude/storage/AgentVaultStorage.ts +var AGENTS_PATH = ".claude/agents"; +var AgentVaultStorage = class { + constructor(adapter) { + this.adapter = adapter; + } + async loadAll() { + const agents = []; + try { + const files = await this.adapter.listFiles(AGENTS_PATH); + for (const filePath of files) { + if (!filePath.endsWith(".md")) continue; + try { + const content = await this.adapter.read(filePath); + const parsed = parseAgentFile(content); + if (!parsed) continue; + const { frontmatter, body } = parsed; + agents.push(buildAgentFromFrontmatter(frontmatter, body, { + id: frontmatter.name, + source: "vault", + filePath + })); + } catch (e2) { + } + } + } catch (e2) { + } + return agents; + } + async load(agent) { + const filePath = this.resolvePath(agent); + try { + const content = await this.adapter.read(filePath); + const parsed = parseAgentFile(content); + if (!parsed) return null; + const { frontmatter, body } = parsed; + return buildAgentFromFrontmatter(frontmatter, body, { + id: frontmatter.name, + source: agent.source, + filePath + }); + } catch (error48) { + if (this.isFileNotFoundError(error48)) { + return null; + } + throw error48; + } + } + async save(agent) { + await this.adapter.write(this.resolvePath(agent), serializeAgent(agent)); + } + async delete(agent) { + await this.adapter.delete(this.resolvePath(agent)); + } + resolvePath(agent) { + if (!agent.filePath) { + return `${AGENTS_PATH}/${agent.name}.md`; + } + const normalized = agent.filePath.replace(/\\/g, "/"); + const idx = normalized.lastIndexOf(`${AGENTS_PATH}/`); + if (idx !== -1) { + return normalized.slice(idx); + } + return `${AGENTS_PATH}/${agent.name}.md`; + } + isFileNotFoundError(error48) { + if (!error48) return false; + if (typeof error48 === "string") { + return /enoent|not found|no such file/i.test(error48); + } + if (typeof error48 === "object") { + const maybeCode = error48.code; + if (typeof maybeCode === "string" && /enoent|not.?found/i.test(maybeCode)) { + return true; + } + const maybeMessage = error48.message; + if (typeof maybeMessage === "string" && /enoent|not found|no such file/i.test(maybeMessage)) { + return true; + } + } + return false; + } +}; + +// src/providers/claude/storage/CCSettingsStorage.ts +var CC_SETTINGS_PATH = ".claude/settings.json"; +var CC_SETTINGS_SCHEMA = "https://json.schemastore.org/claude-code-settings.json"; +function normalizeRuleList(value) { + if (!Array.isArray(value)) return []; + return value.filter((r) => typeof r === "string"); +} +function normalizePermissions(permissions) { + if (!permissions || typeof permissions !== "object") { + return { ...DEFAULT_CC_PERMISSIONS }; + } + const p = permissions; + return { + allow: normalizeRuleList(p.allow), + deny: normalizeRuleList(p.deny), + ask: normalizeRuleList(p.ask), + defaultMode: typeof p.defaultMode === "string" ? p.defaultMode : void 0, + additionalDirectories: Array.isArray(p.additionalDirectories) ? p.additionalDirectories.filter((d2) => typeof d2 === "string") : void 0 + }; +} +var CCSettingsStorage = class { + constructor(adapter) { + this.adapter = adapter; + } + async load() { + if (!await this.adapter.exists(CC_SETTINGS_PATH)) { + return { ...DEFAULT_CC_SETTINGS }; + } + const content = await this.adapter.read(CC_SETTINGS_PATH); + const stored = JSON.parse(content); + return { + $schema: CC_SETTINGS_SCHEMA, + ...stored, + permissions: normalizePermissions(stored.permissions) + }; + } + async save(settings11) { + var _a5; + let existing = {}; + if (await this.adapter.exists(CC_SETTINGS_PATH)) { + try { + const content2 = await this.adapter.read(CC_SETTINGS_PATH); + existing = JSON.parse(content2); + } catch (e2) { + } + } + const merged = { + ...existing, + $schema: CC_SETTINGS_SCHEMA, + permissions: (_a5 = settings11.permissions) != null ? _a5 : { ...DEFAULT_CC_PERMISSIONS } + }; + if (settings11.enabledPlugins !== void 0) { + merged.enabledPlugins = settings11.enabledPlugins; + } + const content = JSON.stringify(merged, null, 2); + await this.adapter.write(CC_SETTINGS_PATH, content); + } + async exists() { + return this.adapter.exists(CC_SETTINGS_PATH); + } + async getPermissions() { + var _a5; + const settings11 = await this.load(); + return (_a5 = settings11.permissions) != null ? _a5 : { ...DEFAULT_CC_PERMISSIONS }; + } + async updatePermissions(permissions) { + const settings11 = await this.load(); + settings11.permissions = permissions; + await this.save(settings11); + } + async addAllowRule(rule) { + var _a5, _b3; + const permissions = await this.getPermissions(); + if (!((_a5 = permissions.allow) == null ? void 0 : _a5.includes(rule))) { + permissions.allow = [...(_b3 = permissions.allow) != null ? _b3 : [], rule]; + await this.updatePermissions(permissions); + } + } + async addDenyRule(rule) { + var _a5, _b3; + const permissions = await this.getPermissions(); + if (!((_a5 = permissions.deny) == null ? void 0 : _a5.includes(rule))) { + permissions.deny = [...(_b3 = permissions.deny) != null ? _b3 : [], rule]; + await this.updatePermissions(permissions); + } + } + async addAskRule(rule) { + var _a5, _b3; + const permissions = await this.getPermissions(); + if (!((_a5 = permissions.ask) == null ? void 0 : _a5.includes(rule))) { + permissions.ask = [...(_b3 = permissions.ask) != null ? _b3 : [], rule]; + await this.updatePermissions(permissions); + } + } + async removeRule(rule) { + var _a5, _b3, _c2; + const permissions = await this.getPermissions(); + permissions.allow = (_a5 = permissions.allow) == null ? void 0 : _a5.filter((r) => r !== rule); + permissions.deny = (_b3 = permissions.deny) == null ? void 0 : _b3.filter((r) => r !== rule); + permissions.ask = (_c2 = permissions.ask) == null ? void 0 : _c2.filter((r) => r !== rule); + await this.updatePermissions(permissions); + } + async getEnabledPlugins() { + var _a5; + const settings11 = await this.load(); + return (_a5 = settings11.enabledPlugins) != null ? _a5 : {}; + } + async setPluginEnabled(pluginId, enabled) { + var _a5; + const settings11 = await this.load(); + const enabledPlugins = (_a5 = settings11.enabledPlugins) != null ? _a5 : {}; + enabledPlugins[pluginId] = enabled; + settings11.enabledPlugins = enabledPlugins; + await this.save(settings11); + } + async getExplicitlyEnabledPluginIds() { + const enabledPlugins = await this.getEnabledPlugins(); + return Object.entries(enabledPlugins).filter(([, enabled]) => enabled).map(([id]) => id); + } + async isPluginDisabled(pluginId) { + const enabledPlugins = await this.getEnabledPlugins(); + return enabledPlugins[pluginId] === false; + } +}; + +// src/core/types/chat.ts +var VIEW_TYPE_CLAUDIAN = "claudian-view"; + +// src/core/types/mcp.ts +function getMcpServerType(config2) { + if (config2.type === "sse") return "sse"; + if (config2.type === "http") return "http"; + if ("url" in config2) return "http"; + return "stdio"; +} +function isValidMcpServerConfig(obj) { + if (!obj || typeof obj !== "object") return false; + const config2 = obj; + if (config2.command && typeof config2.command === "string") return true; + if (config2.url && typeof config2.url === "string") return true; + return false; +} +var DEFAULT_MCP_SERVER = { + enabled: true, + contextSaving: true +}; + +// src/providers/claude/storage/McpStorage.ts +var MCP_CONFIG_PATH = ".claude/mcp.json"; +var McpStorage = class { + constructor(adapter) { + this.adapter = adapter; + } + async load() { + var _a5, _b3, _c2, _d, _e2; + try { + if (!await this.adapter.exists(MCP_CONFIG_PATH)) { + return []; + } + const content = await this.adapter.read(MCP_CONFIG_PATH); + const file2 = JSON.parse(content); + if (!file2.mcpServers || typeof file2.mcpServers !== "object") { + return []; + } + const claudianMeta = (_b3 = (_a5 = file2._claudian) == null ? void 0 : _a5.servers) != null ? _b3 : {}; + const servers = []; + for (const [name, config2] of Object.entries(file2.mcpServers)) { + if (!isValidMcpServerConfig(config2)) { + continue; + } + const meta3 = (_c2 = claudianMeta[name]) != null ? _c2 : {}; + const disabledTools = Array.isArray(meta3.disabledTools) ? meta3.disabledTools.filter((tool) => typeof tool === "string") : void 0; + const normalizedDisabledTools = disabledTools && disabledTools.length > 0 ? disabledTools : void 0; + servers.push({ + name, + config: config2, + enabled: (_d = meta3.enabled) != null ? _d : DEFAULT_MCP_SERVER.enabled, + contextSaving: (_e2 = meta3.contextSaving) != null ? _e2 : DEFAULT_MCP_SERVER.contextSaving, + disabledTools: normalizedDisabledTools, + description: meta3.description + }); + } + return servers; + } catch (e2) { + return []; + } + } + async save(servers) { + var _a5; + const mcpServers = {}; + const claudianServers = {}; + for (const server of servers) { + mcpServers[server.name] = server.config; + const meta3 = {}; + if (server.enabled !== DEFAULT_MCP_SERVER.enabled) { + meta3.enabled = server.enabled; + } + if (server.contextSaving !== DEFAULT_MCP_SERVER.contextSaving) { + meta3.contextSaving = server.contextSaving; + } + const normalizedDisabledTools = (_a5 = server.disabledTools) == null ? void 0 : _a5.map((tool) => tool.trim()).filter((tool) => tool.length > 0); + if (normalizedDisabledTools && normalizedDisabledTools.length > 0) { + meta3.disabledTools = normalizedDisabledTools; + } + if (server.description) { + meta3.description = server.description; + } + if (Object.keys(meta3).length > 0) { + claudianServers[server.name] = meta3; + } + } + let existing = null; + if (await this.adapter.exists(MCP_CONFIG_PATH)) { + try { + const raw = await this.adapter.read(MCP_CONFIG_PATH); + const parsed = JSON.parse(raw); + if (parsed && typeof parsed === "object") { + existing = parsed; + } + } catch (e2) { + existing = null; + } + } + const file2 = existing ? { ...existing } : {}; + file2.mcpServers = mcpServers; + const existingClaudian = existing && typeof existing._claudian === "object" ? existing._claudian : null; + if (Object.keys(claudianServers).length > 0) { + file2._claudian = { ...existingClaudian != null ? existingClaudian : {}, servers: claudianServers }; + } else if (existingClaudian) { + const rest = { ...existingClaudian }; + delete rest.servers; + if (Object.keys(rest).length > 0) { + file2._claudian = rest; + } else { + delete file2._claudian; + } + } else { + delete file2._claudian; + } + const content = JSON.stringify(file2, null, 2); + await this.adapter.write(MCP_CONFIG_PATH, content); + } + async exists() { + return this.adapter.exists(MCP_CONFIG_PATH); + } +}; + +// src/providers/claude/storage/SkillStorage.ts +var SKILLS_PATH = ".claude/skills"; +var SkillStorage = class { + constructor(adapter) { + this.adapter = adapter; + } + async loadAll() { + const skills = []; + try { + const folders = await this.adapter.listFolders(SKILLS_PATH); + for (const folder of folders) { + const skillName = folder.split("/").pop(); + const skillPath = `${SKILLS_PATH}/${skillName}/SKILL.md`; + try { + if (!await this.adapter.exists(skillPath)) continue; + const content = await this.adapter.read(skillPath); + const parsed = parseSlashCommandContent(content); + skills.push({ + ...parsedToSlashCommand(parsed, { + id: `skill-${skillName}`, + name: skillName, + source: "user" + }), + kind: "skill" + }); + } catch (e2) { + } + } + } catch (e2) { + return []; + } + return skills; + } + async save(skill) { + const name = skill.name; + const dirPath = `${SKILLS_PATH}/${name}`; + const filePath = `${dirPath}/SKILL.md`; + await this.adapter.ensureFolder(dirPath); + await this.adapter.write(filePath, serializeCommand(skill)); + } + async delete(skillId) { + const name = skillId.replace(/^skill-/, ""); + const dirPath = `${SKILLS_PATH}/${name}`; + const filePath = `${dirPath}/SKILL.md`; + await this.adapter.delete(filePath); + await this.adapter.deleteFolder(dirPath); + } +}; + +// src/providers/claude/storage/SlashCommandStorage.ts +var COMMANDS_PATH = ".claude/commands"; +var SlashCommandStorage = class { + constructor(adapter) { + this.adapter = adapter; + } + async loadAll() { + const commands = []; + try { + const files = await this.adapter.listFilesRecursive(COMMANDS_PATH); + for (const filePath of files) { + if (!filePath.endsWith(".md")) continue; + try { + const command = await this.loadFromFile(filePath); + if (command) { + commands.push(command); + } + } catch (e2) { + } + } + } catch (e2) { + } + return commands; + } + async loadFromFile(filePath) { + const content = await this.adapter.read(filePath); + return this.parseFile(content, filePath); + } + async save(command) { + const filePath = this.getFilePath(command); + await this.adapter.write(filePath, serializeCommand(command)); + } + async delete(commandId) { + const files = await this.adapter.listFilesRecursive(COMMANDS_PATH); + for (const filePath of files) { + if (!filePath.endsWith(".md")) continue; + const id = this.filePathToId(filePath); + if (id === commandId) { + await this.adapter.delete(filePath); + return; + } + } + } + getFilePath(command) { + const safeName = command.name.replace(/[^a-zA-Z0-9_/-]/g, "-"); + return `${COMMANDS_PATH}/${safeName}.md`; + } + parseFile(content, filePath) { + const parsed = parseSlashCommandContent(content); + return { + ...parsedToSlashCommand(parsed, { + id: this.filePathToId(filePath), + name: this.filePathToName(filePath) + }), + kind: "command" + }; + } + filePathToId(filePath) { + const relativePath = filePath.replace(`${COMMANDS_PATH}/`, "").replace(/\.md$/, ""); + const escaped = relativePath.replace(/-/g, "-_").replace(/\//g, "--"); + return `cmd-${escaped}`; + } + filePathToName(filePath) { + return filePath.replace(`${COMMANDS_PATH}/`, "").replace(/\.md$/, ""); + } +}; + +// src/providers/claude/storage/StorageService.ts +var CLAUDE_PATH = ".claude"; +function isRecord3(value) { + return !!value && typeof value === "object" && !Array.isArray(value); +} +var StorageService = class { + constructor(plugin, adapter) { + this.plugin = plugin; + this.app = plugin.app; + this.adapter = adapter != null ? adapter : new VaultFileAdapter(this.app); + this.ccSettings = new CCSettingsStorage(this.adapter); + this.claudianSettings = new ClaudianSettingsStorage(this.adapter); + this.commands = new SlashCommandStorage(this.adapter); + this.skills = new SkillStorage(this.adapter); + this.sessions = new SessionStorage(this.adapter); + this.mcp = new McpStorage(this.adapter); + this.agents = new AgentVaultStorage(this.adapter); + } + async initialize() { + await this.ensureDirectories(); + const cc2 = await this.ccSettings.load(); + const claudian = await this.claudianSettings.load(); + return { cc: cc2, claudian }; + } + async ensureDirectories() { + await this.adapter.ensureFolder(CLAUDE_PATH); + await this.adapter.ensureFolder(CLAUDIAN_STORAGE_PATH); + await this.adapter.ensureFolder(COMMANDS_PATH); + await this.adapter.ensureFolder(SKILLS_PATH); + await this.adapter.ensureFolder(SESSIONS_PATH); + await this.adapter.ensureFolder(AGENTS_PATH); + } + async loadAllSlashCommands() { + const commands = await this.commands.loadAll(); + const skills = await this.skills.loadAll(); + return [...commands, ...skills]; + } + getAdapter() { + return this.adapter; + } + async getPermissions() { + return this.ccSettings.getPermissions(); + } + async updatePermissions(permissions) { + return this.ccSettings.updatePermissions(permissions); + } + async addAllowRule(rule) { + return this.ccSettings.addAllowRule(createPermissionRule(rule)); + } + async addDenyRule(rule) { + return this.ccSettings.addDenyRule(createPermissionRule(rule)); + } + async removePermissionRule(rule) { + return this.ccSettings.removeRule(createPermissionRule(rule)); + } + async updateClaudianSettings(updates) { + return this.claudianSettings.update(updates); + } + async saveClaudianSettings(settings11) { + return this.claudianSettings.save(settings11); + } + async loadClaudianSettings() { + return this.claudianSettings.load(); + } + async getTabManagerState() { + try { + const data = await this.plugin.loadData(); + if (isRecord3(data) && data.tabManagerState) { + return this.validateTabManagerState(data.tabManagerState); + } + return null; + } catch (e2) { + return null; + } + } + validateTabManagerState(data) { + if (!data || typeof data !== "object") { + return null; + } + const state = data; + if (!Array.isArray(state.openTabs)) { + return null; + } + const validatedTabs = []; + for (const tab of state.openTabs) { + if (!tab || typeof tab !== "object") { + continue; + } + const tabObj = tab; + if (typeof tabObj.tabId !== "string") { + continue; + } + validatedTabs.push({ + tabId: tabObj.tabId, + conversationId: typeof tabObj.conversationId === "string" ? tabObj.conversationId : null, + ...typeof tabObj.draftModel === "string" ? { draftModel: tabObj.draftModel } : {} + }); + } + const activeTabId = typeof state.activeTabId === "string" ? state.activeTabId : null; + return { + openTabs: validatedTabs, + activeTabId + }; + } + async setTabManagerState(state) { + try { + const loaded = await this.plugin.loadData(); + const data = isRecord3(loaded) ? loaded : {}; + data.tabManagerState = state; + await this.plugin.saveData(data); + } catch (e2) { + new import_obsidian3.Notice("Failed to save tab layout"); + } + } +}; + +// src/providers/claude/ui/ClaudeSettingsTab.ts +var fs8 = __toESM(require("fs")); +var import_obsidian13 = require("obsidian"); + +// src/core/providers/ProviderSettingsCoordinator.ts +var PROJECTION_KEYS = /* @__PURE__ */ new Set([ + "model", + "effortLevel", + "serviceTier", + "thinkingBudget", + "permissionMode" +]); +function getSettingsProviderId(settings11) { + return ProviderRegistry.resolveSettingsProviderId(settings11); +} +function ensureProjectionMap(settings11, key) { + const current = settings11[key]; + if (current && typeof current === "object") { + return current; + } + const next = {}; + settings11[key] = next; + return next; +} +function cloneProviderSettings(settings11) { + return { + ...settings11, + savedProviderModel: { ...settings11.savedProviderModel }, + savedProviderEffort: { ...settings11.savedProviderEffort }, + savedProviderServiceTier: { ...settings11.savedProviderServiceTier }, + savedProviderThinkingBudget: { ...settings11.savedProviderThinkingBudget }, + savedProviderPermissionMode: { ...settings11.savedProviderPermissionMode } + }; +} +function normalizeToggleValue(value, allowedValues) { + if (typeof value !== "string") { + return void 0; + } + return allowedValues.has(value) ? value : void 0; +} +function mergeProviderSettings(target, source) { + for (const [key, value] of Object.entries(source)) { + if (PROJECTION_KEYS.has(key)) { + continue; + } + target[key] = value; + } +} +function normalizeReasoningValue(uiConfig, settings11, model, value) { + const allowedValues = new Set(uiConfig.getReasoningOptions(model, settings11).map((option) => option.value)); + if (typeof value === "string" && allowedValues.has(value)) { + return value; + } + return uiConfig.getDefaultReasoningValue(model, settings11); +} +function normalizeProviderModel(uiConfig, settings11, model) { + if (!model) { + return void 0; + } + return uiConfig.normalizeModelVariant(model, settings11); +} +var ProviderSettingsCoordinator = class { + static handleEnvironmentChange(settings11, providerIds) { + var _a5; + let anyChanged = false; + for (const providerId of providerIds) { + const reconciler = ProviderRegistry.getSettingsReconciler(providerId); + if ((_a5 = reconciler.handleEnvironmentChange) == null ? void 0 : _a5.call(reconciler, settings11)) { + anyChanged = true; + } + } + return anyChanged; + } + static reconcileTitleGenerationModelSelection(settings11) { + const currentModel = typeof settings11.titleGenerationModel === "string" ? settings11.titleGenerationModel : ""; + if (!currentModel) { + return false; + } + const isValid2 = ProviderRegistry.getRegisteredProviderIds().some( + (providerId) => ProviderRegistry.getChatUIConfig(providerId).getModelOptions(settings11).some((option) => option.value === currentModel) + ); + if (isValid2) { + return false; + } + settings11.titleGenerationModel = ""; + return true; + } + static normalizeProviderSelection(settings11) { + const next = getSettingsProviderId(settings11); + if (settings11.settingsProvider === next) { + return false; + } + settings11.settingsProvider = next; + return true; + } + static getProviderSettingsSnapshot(settings11, providerId) { + const snapshot = cloneProviderSettings(settings11); + this.projectProviderState(snapshot, providerId); + return snapshot; + } + static commitProviderSettingsSnapshot(settings11, providerId, snapshot) { + this.persistProjectedProviderState(snapshot, providerId); + if (providerId === getSettingsProviderId(settings11)) { + Object.assign(settings11, snapshot); + return; + } + mergeProviderSettings(settings11, snapshot); + } + static persistProjectedProviderState(settings11, providerId = getSettingsProviderId(settings11)) { + var _a5, _b3, _c2; + const savedModel = ensureProjectionMap(settings11, "savedProviderModel"); + const savedEffort = ensureProjectionMap(settings11, "savedProviderEffort"); + const savedServiceTier = ensureProjectionMap(settings11, "savedProviderServiceTier"); + const savedBudget = ensureProjectionMap(settings11, "savedProviderThinkingBudget"); + const savedPermissionMode = ensureProjectionMap(settings11, "savedProviderPermissionMode"); + const uiConfig = ProviderRegistry.getChatUIConfig(providerId); + const normalizedModel = normalizeProviderModel( + uiConfig, + settings11, + typeof settings11.model === "string" ? settings11.model : void 0 + ); + const projectedSettings = normalizedModel && normalizedModel !== settings11.model ? { ...settings11, model: normalizedModel } : settings11; + if (normalizedModel) { + savedModel[providerId] = normalizedModel; + } + if (typeof settings11.effortLevel === "string") { + savedEffort[providerId] = settings11.effortLevel; + } + const serviceTierToggle = (_b3 = (_a5 = uiConfig.getServiceTierToggle) == null ? void 0 : _a5.call(uiConfig, projectedSettings)) != null ? _b3 : null; + if (serviceTierToggle && typeof settings11.serviceTier === "string") { + savedServiceTier[providerId] = settings11.serviceTier; + } + const usesBudget = normalizedModel !== void 0 && !uiConfig.isAdaptiveReasoningModel(normalizedModel, projectedSettings); + if (usesBudget && typeof settings11.thinkingBudget === "string") { + savedBudget[providerId] = settings11.thinkingBudget; + } else { + delete savedBudget[providerId]; + } + if (typeof settings11.permissionMode === "string" && ((_c2 = uiConfig.getPermissionModeToggle) == null ? void 0 : _c2.call(uiConfig))) { + savedPermissionMode[providerId] = settings11.permissionMode; + } + } + static projectProviderState(settings11, providerId) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2; + const uiConfig = ProviderRegistry.getChatUIConfig(providerId); + const savedModel = settings11.savedProviderModel; + const savedEffort = settings11.savedProviderEffort; + const savedServiceTier = settings11.savedProviderServiceTier; + const savedBudget = settings11.savedProviderThinkingBudget; + const savedPermissionMode = settings11.savedProviderPermissionMode; + const shouldPreferCurrentProjection = providerId === getSettingsProviderId(settings11); + const currentModelRaw = typeof settings11.model === "string" ? settings11.model : ""; + const currentModel = shouldPreferCurrentProjection ? (_a5 = normalizeProviderModel(uiConfig, settings11, currentModelRaw)) != null ? _a5 : "" : currentModelRaw; + const currentEffort = typeof settings11.effortLevel === "string" ? settings11.effortLevel : void 0; + const currentServiceTier = typeof settings11.serviceTier === "string" ? settings11.serviceTier : void 0; + const currentBudget = typeof settings11.thinkingBudget === "string" ? settings11.thinkingBudget : void 0; + const modelOptions = uiConfig.getModelOptions(settings11); + const isDefaultModelOfAnotherProvider = currentModel.length > 0 && ProviderRegistry.getRegisteredProviderIds().filter((id) => id !== providerId).some((id) => ProviderRegistry.getChatUIConfig(id).isDefaultModel(currentModel)); + const canReuseCurrentModel = currentModel.length > 0 && !isDefaultModelOfAnotherProvider && (shouldPreferCurrentProjection || modelOptions.some((option) => option.value === currentModel)); + const fallbackModel = canReuseCurrentModel ? currentModel : (_c2 = (_b3 = modelOptions[0]) == null ? void 0 : _b3.value) != null ? _c2 : currentModel; + const savedModelValue = normalizeProviderModel(uiConfig, settings11, savedModel == null ? void 0 : savedModel[providerId]); + const isSavedModelValid = savedModelValue !== void 0 && modelOptions.some((option) => option.value === savedModelValue); + const model = (_d = isSavedModelValid ? savedModelValue : void 0) != null ? _d : fallbackModel; + const canReuseCurrentProjection = canReuseCurrentModel && model === currentModel; + if (model) { + settings11.model = model; + uiConfig.applyModelDefaults(model, settings11); + } + const serviceTierToggle = (_f2 = (_e2 = uiConfig.getServiceTierToggle) == null ? void 0 : _e2.call(uiConfig, { + ...settings11, + ...model ? { model } : {} + })) != null ? _f2 : null; + const isAdaptive = Boolean(model) && uiConfig.isAdaptiveReasoningModel(model, settings11); + if ((savedEffort == null ? void 0 : savedEffort[providerId]) !== void 0) { + settings11.effortLevel = savedEffort[providerId]; + } else if (canReuseCurrentProjection && currentEffort !== void 0) { + settings11.effortLevel = currentEffort; + } else if (isAdaptive) { + settings11.effortLevel = uiConfig.getDefaultReasoningValue(model, settings11); + } + if (isAdaptive) { + settings11.effortLevel = normalizeReasoningValue(uiConfig, settings11, model, settings11.effortLevel); + } + if ((savedServiceTier == null ? void 0 : savedServiceTier[providerId]) !== void 0) { + settings11.serviceTier = savedServiceTier[providerId]; + } else if (canReuseCurrentProjection && currentServiceTier !== void 0) { + settings11.serviceTier = currentServiceTier; + } else { + settings11.serviceTier = (_g = serviceTierToggle == null ? void 0 : serviceTierToggle.inactiveValue) != null ? _g : "default"; + } + const usesBudget = Boolean(model) && !isAdaptive; + if (usesBudget) { + if ((savedBudget == null ? void 0 : savedBudget[providerId]) !== void 0) { + settings11.thinkingBudget = savedBudget[providerId]; + } else if (canReuseCurrentProjection && currentBudget !== void 0) { + settings11.thinkingBudget = currentBudget; + } else { + settings11.thinkingBudget = uiConfig.getDefaultReasoningValue(model, settings11); + } + settings11.thinkingBudget = normalizeReasoningValue(uiConfig, settings11, model, settings11.thinkingBudget); + } + const permissionToggle = (_i = (_h2 = uiConfig.getPermissionModeToggle) == null ? void 0 : _h2.call(uiConfig)) != null ? _i : null; + if (!permissionToggle) { + return; + } + const allowedPermissionModes = /* @__PURE__ */ new Set([ + permissionToggle.inactiveValue, + permissionToggle.activeValue, + ...permissionToggle.planValue ? [permissionToggle.planValue] : [] + ]); + const currentPermissionMode = normalizeToggleValue(settings11.permissionMode, allowedPermissionModes); + const derivedPermissionMode = normalizeToggleValue( + (_j = uiConfig.resolvePermissionMode) == null ? void 0 : _j.call(uiConfig, settings11), + allowedPermissionModes + ); + const savedPermissionModeValue = normalizeToggleValue( + savedPermissionMode == null ? void 0 : savedPermissionMode[providerId], + allowedPermissionModes + ); + const projectedPermissionMode = (_l2 = (_k3 = savedPermissionModeValue != null ? savedPermissionModeValue : derivedPermissionMode) != null ? _k3 : shouldPreferCurrentProjection ? currentPermissionMode : void 0) != null ? _l2 : currentPermissionMode; + if (projectedPermissionMode !== void 0) { + settings11.permissionMode = projectedPermissionMode; + } + } + /** Each provider's reconciler only processes its own conversations. */ + static reconcileAllProviders(settings11, conversations) { + return this.reconcileProviders( + settings11, + conversations, + ProviderRegistry.getRegisteredProviderIds() + ); + } + static reconcileProviders(settings11, conversations, providerIds) { + let anyChanged = false; + const allInvalidated = []; + const settingsProvider = getSettingsProviderId(settings11); + for (const providerId of providerIds) { + const reconciler = ProviderRegistry.getSettingsReconciler(providerId); + const providerConversations = conversations.filter((c) => c.providerId === providerId); + const targetSettings = providerId === settingsProvider ? settings11 : cloneProviderSettings(settings11); + if (providerId !== settingsProvider) { + this.projectProviderState(targetSettings, providerId); + } + const { changed, invalidatedConversations } = reconciler.reconcileModelWithEnvironment( + targetSettings, + providerConversations + ); + if (changed) { + anyChanged = true; + this.persistProjectedProviderState(targetSettings, providerId); + if (providerId !== settingsProvider) { + mergeProviderSettings(settings11, targetSettings); + } + } + allInvalidated.push(...invalidatedConversations); + } + if (this.reconcileTitleGenerationModelSelection(settings11)) { + anyChanged = true; + } + return { changed: anyChanged, invalidatedConversations: allInvalidated }; + } + static normalizeAllModelVariants(settings11) { + let anyChanged = false; + const settingsProvider = getSettingsProviderId(settings11); + for (const providerId of ProviderRegistry.getRegisteredProviderIds()) { + const reconciler = ProviderRegistry.getSettingsReconciler(providerId); + const targetSettings = providerId === settingsProvider ? settings11 : cloneProviderSettings(settings11); + if (providerId !== settingsProvider) { + this.projectProviderState(targetSettings, providerId); + } + const changed = reconciler.normalizeModelVariantSettings(targetSettings); + if (changed) { + anyChanged = true; + this.persistProjectedProviderState(targetSettings, providerId); + if (providerId !== settingsProvider) { + mergeProviderSettings(settings11, targetSettings); + } + } + } + if (this.reconcileTitleGenerationModelSelection(settings11)) { + anyChanged = true; + } + return anyChanged; + } + /** + * Project the settings provider's saved values into the top-level + * model/effortLevel/thinkingBudget fields. + */ + static projectActiveProviderState(settings11) { + this.projectProviderState(settings11, getSettingsProviderId(settings11)); + } +}; + +// src/features/settings/ui/EnvironmentSettingsSection.ts +var import_obsidian6 = require("obsidian"); + +// src/features/settings/ui/EnvSnippetManager.ts +var import_obsidian5 = require("obsidian"); + +// src/i18n/locales/de.json +var de_exports = {}; +__export(de_exports, { + chat: () => chat, + common: () => common, + default: () => de_default, + settings: () => settings +}); +var common = { + save: "Speichern", + cancel: "Abbrechen", + delete: "L\xF6schen", + edit: "Bearbeiten", + add: "Hinzuf\xFCgen", + remove: "Entfernen", + clear: "L\xF6schen", + clearAll: "Alle l\xF6schen", + loading: "L\xE4dt", + error: "Fehler", + success: "Erfolg", + warning: "Warnung", + confirm: "Best\xE4tigen", + settings: "Einstellungen", + advanced: "Erweitert", + enabled: "Aktiviert", + disabled: "Deaktiviert", + platform: "Plattform", + refresh: "Aktualisieren", + rewind: "Zur\xFCckspulen" +}; +var chat = { + rewind: { + confirmMessage: "Zu diesem Punkt zur\xFCckspulen? Datei\xE4nderungen nach dieser Nachricht werden r\xFCckg\xE4ngig gemacht. Das Zur\xFCckspulen betrifft keine manuell oder \xFCber Bash bearbeiteten Dateien.", + confirmMessageConversationOnly: "Konversation zu diesem Punkt zur\xFCckspulen? Datei\xE4nderungen bleiben erhalten.", + confirmButton: "Zur\xFCckspulen", + ariaLabel: "Hierher zur\xFCckspulen", + menuConversationOnly: "Nur Konversation zur\xFCckspulen", + menuCodeAndConversation: "Code + Konversation zur\xFCckspulen", + notice: "Zur\xFCckgespult: {count} Datei(en) wiederhergestellt", + noticeConversationOnly: "Konversation zur\xFCckgespult; Datei\xE4nderungen bleiben erhalten", + noticeSaveFailed: "Zur\xFCckgespult: {count} Datei(en) wiederhergestellt, aber Status konnte nicht gespeichert werden: {error}", + noticeConversationOnlySaveFailed: "Konversation zur\xFCckgespult, aber Status konnte nicht gespeichert werden: {error}", + failed: "Zur\xFCckspulen fehlgeschlagen: {error}", + cannot: "Zur\xFCckspulen nicht m\xF6glich: {error}", + unavailableStreaming: "Zur\xFCckspulen w\xE4hrend des Streamings nicht m\xF6glich", + unavailableNoUuid: "Zur\xFCckspulen nicht m\xF6glich: Nachrichtenkennungen fehlen" + }, + fork: { + ariaLabel: "Konversation verzweigen", + chooseTarget: "Konversation verzweigen", + targetNewTab: "Neuer Tab", + targetCurrentTab: "Aktueller Tab", + maxTabsReached: "Verzweigung nicht m\xF6glich: maximal {count} Tabs erreicht", + notice: "In neuem Tab verzweigt", + noticeCurrentTab: "Im aktuellen Tab verzweigt", + failed: "Verzweigung fehlgeschlagen: {error}", + unavailableStreaming: "Verzweigung w\xE4hrend des Streamings nicht m\xF6glich", + unavailableNoUuid: "Verzweigung nicht m\xF6glich: Nachrichtenkennungen fehlen", + unavailableNoResponse: "Verzweigung nicht m\xF6glich: keine Antwort zum Verzweigen vorhanden", + errorMessageNotFound: "Nachricht nicht gefunden", + errorNoSession: "Keine Sitzungs-ID verf\xFCgbar", + errorNoActiveTab: "Kein aktiver Tab", + commandNoMessages: "Verzweigung nicht m\xF6glich: keine Nachrichten in der Konversation", + commandNoAssistantUuid: "Verzweigung nicht m\xF6glich: keine Assistentenantwort mit Kennungen" + }, + bangBash: { + placeholder: "> Einen Bash-Befehl ausf\xFChren...", + commandPanel: "Befehlspanel", + copyAriaLabel: "Neueste Befehlsausgabe kopieren", + clearAriaLabel: "Bash-Ausgabe l\xF6schen", + commandLabel: "{command}", + statusLabel: "Status des Befehls: {status}", + collapseOutput: "Befehlsausgabe einklappen", + expandOutput: "Befehlsausgabe ausklappen", + running: "Wird ausgef\xFChrt...", + copyFailed: "Kopieren in die Zwischenablage fehlgeschlagen" + } +}; +var settings = { + title: "Claudian Einstellungen", + tabs: { + general: "Allgemein", + claude: "Claude", + codex: "Codex" + }, + display: "Anzeige", + conversations: "Unterhaltungen", + content: "Inhalte", + input: "Eingabe", + setup: "Einrichtung", + models: "Modelle", + experimental: "Experimentell", + userName: { + name: "Wie soll Claudian dich nennen?", + desc: "Dein Name f\xFCr personalisierte Begr\xFC\xDFungen (leer lassen f\xFCr allgemeine Begr\xFC\xDFungen)" + }, + excludedTags: { + name: "Ausgeschlossene Tags", + desc: "Notizen mit diesen Tags werden nicht automatisch als Kontext geladen (einer pro Zeile, ohne #)" + }, + mediaFolder: { + name: "Medienordner", + desc: "Ordner mit Anh\xE4ngen/Bildern. Wenn Notizen ![[image.jpg]] verwenden, sucht Claude hier. Leer lassen f\xFCr Vault-Stammverzeichnis." + }, + systemPrompt: { + name: "Benutzerdefinierter System-Prompt", + desc: "Zus\xE4tzliche Anweisungen, die an den Standard-System-Prompt angeh\xE4ngt werden" + }, + autoTitle: { + name: "Konversationstitel automatisch generieren", + desc: "Generiert automatisch Konversationstitel nach der ersten Nutzernachricht." + }, + titleModel: { + name: "Titel-Generierungsmodell", + desc: "Modell zur automatischen Generierung von Konversationstiteln.", + auto: "Automatisch (Haiku)" + }, + navMappings: { + name: "Vim-Style Navigationszuordnungen", + desc: 'Eine Zuordnung pro Zeile. Format: "map " (Aktionen: scrollUp, scrollDown, focusInput).' + }, + requireCommandOrControlEnterToSend: { + name: "Command/Ctrl+Enter zum Senden erfordern", + desc: "Wenn aktiviert, f\xFCgt Enter einen Zeilenumbruch ein. Command+Enter sendet unter macOS; Ctrl+Enter sendet unter Windows und Linux." + }, + hotkeys: "Tastenk\xFCrzel", + inlineEditHotkey: { + name: "Inline-Bearbeitung", + descWithKey: "Aktuelles Tastenk\xFCrzel: {hotkey}", + descNoKey: "Kein Tastenk\xFCrzel festgelegt", + btnChange: "\xC4ndern", + btnSet: "Festlegen" + }, + openChatHotkey: { + name: "Chat \xF6ffnen", + descWithKey: "Aktuelles Tastenk\xFCrzel: {hotkey}", + descNoKey: "Kein Tastenk\xFCrzel festgelegt", + btnChange: "\xC4ndern", + btnSet: "Festlegen" + }, + newSessionHotkey: { + name: "Neue Sitzung", + descWithKey: "Aktuelles Tastenk\xFCrzel: {hotkey}", + descNoKey: "Kein Tastenk\xFCrzel festgelegt", + btnChange: "\xC4ndern", + btnSet: "Festlegen" + }, + newTabHotkey: { + name: "Neuer Tab", + descWithKey: "Aktuelles Tastenk\xFCrzel: {hotkey}", + descNoKey: "Kein Tastenk\xFCrzel festgelegt", + btnChange: "\xC4ndern", + btnSet: "Festlegen" + }, + closeTabHotkey: { + name: "Tab schlie\xDFen", + descWithKey: "Aktuelles Tastenk\xFCrzel: {hotkey}", + descNoKey: "Kein Tastenk\xFCrzel festgelegt", + btnChange: "\xC4ndern", + btnSet: "Festlegen" + }, + slashCommands: { + name: "Befehle und F\xE4higkeiten", + desc: "Verwalte Vault-Befehle und -F\xE4higkeiten in .claude/commands/ und .claude/skills/. Ausgel\xF6st durch /Name." + }, + hiddenSlashCommands: { + name: "Ausgeblendete Befehle und F\xE4higkeiten", + desc: "Bestimmte Befehle und F\xE4higkeiten aus dem Dropdown ausblenden. N\xFCtzlich, um Claude Code-Eintr\xE4ge auszublenden, die f\xFCr Claudian nicht relevant sind. Gib Namen ohne f\xFChrenden Schr\xE4gstrich ein, einen pro Zeile.", + placeholder: "commit\nbuild\ntest" + }, + mcpServers: { + name: "MCP-Server", + desc: "Verwalte Vault-MCP-Serverkonfigurationen in .claude/mcp.json. Server mit Kontext-Speichermodus ben\xF6tigen @mention zur Aktivierung." + }, + plugins: { + name: "Claude Code-Plugins", + desc: "Verwalte Claude Code Plugins aus ~/.claude/plugins. Aktivierte Plugins werden pro Vault in .claude/settings.json gespeichert." + }, + subagents: { + name: "Sub-Agenten", + desc: "Verwalte Vault-Sub-Agenten in .claude/agents/. Jede Markdown-Datei definiert einen benutzerdefinierten Agenten.", + noAgents: "Keine Sub-Agenten konfiguriert. Klicke auf +, um einen zu erstellen.", + deleteConfirm: 'Sub-Agent "{name}" l\xF6schen?', + saveFailed: "Sub-Agent konnte nicht gespeichert werden: {message}", + refreshFailed: "Sub-Agenten konnten nicht aktualisiert werden: {message}", + deleteFailed: "Sub-Agent konnte nicht gel\xF6scht werden: {message}", + renameCleanupFailed: 'Warnung: Alte Datei f\xFCr "{name}" konnte nicht entfernt werden', + created: 'Sub-Agent "{name}" erstellt', + updated: 'Sub-Agent "{name}" aktualisiert', + deleted: 'Sub-Agent "{name}" gel\xF6scht', + duplicateName: 'Ein Agent mit dem Namen "{name}" existiert bereits', + descriptionRequired: "Beschreibung ist erforderlich", + promptRequired: "System-Prompt ist erforderlich", + modal: { + titleEdit: "Sub-Agent bearbeiten", + titleAdd: "Sub-Agent hinzuf\xFCgen", + name: "Name", + nameDesc: "Nur Kleinbuchstaben, Zahlen und Bindestriche", + namePlaceholder: "code-reviewer", + description: "Beschreibung", + descriptionDesc: "Kurzbeschreibung dieses Agenten", + descriptionPlaceholder: "Pr\xFCft Code auf Fehler und Stil", + advancedOptions: "Erweiterte Optionen", + model: "Modell", + modelDesc: "Modell\xFCberschreibung f\xFCr diesen Agenten", + tools: "Tools", + toolsDesc: "Kommagetrennte Liste zul\xE4ssiger Tools (leer = alle)", + disallowedTools: "Nicht erlaubte Tools", + disallowedToolsDesc: "Kommagetrennte Liste der zu verbietenden Tools", + skills: "F\xE4higkeiten", + skillsDesc: "Kommagetrennte Liste von F\xE4higkeiten", + prompt: "System-Prompt", + promptDesc: "Anweisungen f\xFCr den Agenten", + promptPlaceholder: "Du bist ein Code-Reviewer. Analysiere den angegebenen Code auf..." + } + }, + safety: "Sicherheit", + loadUserSettings: { + name: "Benutzer-Claude-Einstellungen laden", + desc: "L\xE4dt ~/.claude/settings.json. Wenn aktiviert, k\xF6nnen Benutzer-Claude-Code-Berechtigungsregeln den Sicherheitsmodus umgehen." + }, + claudeSafeMode: { + name: "Safe mode", + desc: "Permission mode used when the Safe toggle is active." + }, + codexSafeMode: { + name: "Safe mode", + desc: "Sandbox mode used when the Safe toggle is active." + }, + environment: "Umgebung", + customVariables: { + name: "Benutzerdefinierte Variablen", + desc: "Umgebungsvariablen f\xFCr Claude SDK (KEY=VALUE-Format, eine pro Zeile). Export-Pr\xE4fix unterst\xFCtzt." + }, + envSnippets: { + name: "Snippets", + addBtn: "Snippet hinzuf\xFCgen", + noSnippets: "Keine gespeicherten Umgebungsvariablen-Snippets. Klicken Sie auf +, um Ihre aktuelle Konfiguration zu speichern.", + nameRequired: "Bitte geben Sie einen Namen f\xFCr das Snippet ein", + modal: { + titleEdit: "Snippet bearbeiten", + titleSave: "Snippet speichern", + name: "Name", + namePlaceholder: "Ein beschreibender Name f\xFCr diese Umgebungskonfiguration", + description: "Beschreibung", + descPlaceholder: "Optionale Beschreibung", + envVars: "Umgebungsvariablen", + envVarsPlaceholder: "KEY=VALUE-Format, eine pro Zeile (export-Pr\xE4fix unterst\xFCtzt)", + save: "Speichern", + update: "Aktualisieren", + cancel: "Abbrechen" + } + }, + customModelOverrides: { + name: "Benutzerdefinierte Modell\xFCberschreibungen", + desc: "Legen Sie Aliasnamen in der Modellauswahl und Kontextfenstergr\xF6\xDFen f\xFCr benutzerdefinierte Modelle fest." + }, + customModelAliases: { + placeholder: "Alias" + }, + customContextLimits: { + name: "Benutzerdefinierte Kontextlimits", + desc: "Legen Sie die Kontextfenstergr\xF6\xDFen f\xFCr Ihre benutzerdefinierten Modelle fest. Leer lassen f\xFCr den Standardwert (200k Token).", + invalid: "Ung\xFCltiges Format. Verwenden Sie: 256k, 1m oder exakte Anzahl (1000-10000000)." + }, + enableOpus1M: { + name: "Opus 1M Kontextfenster", + desc: "Opus 1M in der Modellauswahl anzeigen. In Max-, Team- und Enterprise-Pl\xE4nen enthalten. API- und Pro-Nutzer ben\xF6tigen zus\xE4tzliche Nutzung." + }, + enableSonnet1M: { + name: "Sonnet 1M Kontextfenster", + desc: "Sonnet 1M in der Modellauswahl anzeigen. Erfordert zus\xE4tzliche Nutzung bei Max-, Team- und Enterprise-Pl\xE4nen. API- und Pro-Nutzer ben\xF6tigen zus\xE4tzliche Nutzung." + }, + customModels: { + name: "Custom models", + desc: "Append additional Claude model IDs to the picker, one per line. Environment model overrides still replace the picker.", + placeholder: "claude-opus-4-6\nclaude-opus-4-6[1m]\nclaude-opus-4-5-20251101" + }, + enableChrome: { + name: "Chrome-Erweiterung aktivieren", + desc: "Erlaubt Claude die Interaktion mit Chrome \xFCber die claude-in-chrome-Erweiterung. Die Erweiterung muss installiert sein. Erfordert Neustart der Sitzung." + }, + enableBangBash: { + name: "Bash-Modus (!) aktivieren", + desc: "Gib ! in ein leeres Eingabefeld ein, um den Bash-Modus zu starten. F\xFChrt Befehle direkt \xFCber Node.js child_process aus. Die Ansicht muss neu ge\xF6ffnet werden.", + validation: { + noNode: "Node.js wurde auf PATH nicht gefunden. Installiere Node.js oder pr\xFCfe deine PATH-Konfiguration." + } + }, + maxTabs: { + name: "Maximale Chat-Tabs", + desc: "Maximale Anzahl gleichzeitiger Chat-Tabs (3-10). Jeder Tab verwendet eine separate Claude-Sitzung.", + warning: "Mehr als 5 Tabs k\xF6nnen Leistung und Speichernutzung beeintr\xE4chtigen." + }, + tabBarPosition: { + name: "Tab-Leiste Position", + desc: "W\xE4hlen Sie, wo Tab-Badges und Aktionsschaltfl\xE4chen angezeigt werden", + input: "\xDCber Eingabefeld (Standard)", + header: "In Kopfzeile" + }, + enableAutoScroll: { + name: "Automatisches Scrollen w\xE4hrend Streaming", + desc: "Automatisch nach unten scrollen, w\xE4hrend Claude Antworten streamt. Deaktivieren, um oben zu bleiben und von Anfang an zu lesen." + }, + deferMathRenderingDuringStreaming: { + name: "Mathe-Rendering w\xE4hrend Streaming aufschieben", + desc: "LaTeX w\xE4hrend des Streamings roh anzeigen und Mathematik einmal rendern, wenn der Textblock abgeschlossen ist." + }, + chatViewPlacement: { + name: "Claudian \xF6ffnen in", + desc: "W\xE4hlen Sie, wo das Chat-Panel beim Erstellen ge\xF6ffnet wird", + rightSidebar: "Rechte Seitenleiste", + leftSidebar: "Linke Seitenleiste", + mainTab: "Haupteditor-Tab" + }, + cliPath: { + name: "Claude CLI-Pfad", + desc: "Benutzerdefinierter Pfad zum Claude Code CLI. Leer lassen f\xFCr automatische Erkennung.", + descWindows: "F\xFCr den nativen Installer verwenden Sie claude.exe. F\xFCr npm/pnpm/yarn oder andere Paketmanager-Installationen verwenden Sie den cli-wrapper.cjs-Pfad (nicht claude.cmd).", + descUnix: 'F\xFCgen Sie die Ausgabe von "which claude" ein \u2014 funktioniert sowohl f\xFCr native als auch npm/pnpm/yarn-Installationen.', + validation: { + notExist: "Pfad existiert nicht", + isDirectory: "Pfad ist ein Verzeichnis, keine Datei" + } + }, + language: { + name: "Sprache", + desc: "Anzeigesprache der Plugin-Oberfl\xE4che \xE4ndern" + } +}; +var de_default = { + common, + chat, + settings +}; + +// src/i18n/locales/en.json +var en_exports = {}; +__export(en_exports, { + chat: () => chat2, + common: () => common2, + default: () => en_default, + settings: () => settings2 +}); +var common2 = { + save: "Save", + cancel: "Cancel", + delete: "Delete", + edit: "Edit", + add: "Add", + remove: "Remove", + clear: "Clear", + clearAll: "Clear all", + loading: "Loading", + error: "Error", + success: "Success", + warning: "Warning", + confirm: "Confirm", + settings: "Settings", + advanced: "Advanced", + enabled: "Enabled", + disabled: "Disabled", + platform: "Platform", + refresh: "Refresh", + rewind: "Rewind" +}; +var chat2 = { + rewind: { + confirmMessage: "Rewind to this point? File changes after this message will be reverted. Rewinding does not affect files edited manually or via bash.", + confirmMessageConversationOnly: "Rewind conversation to this point? File changes will be kept.", + confirmButton: "Rewind", + ariaLabel: "Rewind to here", + menuConversationOnly: "Rewind conversation only", + menuCodeAndConversation: "Rewind code + conversation", + notice: "Rewound: {count} file(s) reverted", + noticeConversationOnly: "Rewound conversation; file changes kept", + noticeSaveFailed: "Rewound: {count} file(s) reverted, but failed to save state: {error}", + noticeConversationOnlySaveFailed: "Rewound conversation, but failed to save state: {error}", + failed: "Rewind failed: {error}", + cannot: "Cannot rewind: {error}", + unavailableStreaming: "Cannot rewind while streaming", + unavailableNoUuid: "Cannot rewind: missing message identifiers" + }, + fork: { + ariaLabel: "Fork conversation", + chooseTarget: "Fork conversation", + targetNewTab: "New tab", + targetCurrentTab: "Current tab", + maxTabsReached: "Cannot fork: maximum {count} tabs reached", + notice: "Forked to new tab", + noticeCurrentTab: "Forked in current tab", + failed: "Fork failed: {error}", + unavailableStreaming: "Cannot fork while streaming", + unavailableNoUuid: "Cannot fork: missing message identifiers", + unavailableNoResponse: "Cannot fork: no response to fork from", + errorMessageNotFound: "Message not found", + errorNoSession: "No session ID available", + errorNoActiveTab: "No active tab", + commandNoMessages: "Cannot fork: no messages in conversation", + commandNoAssistantUuid: "Cannot fork: no assistant response with identifiers" + }, + bangBash: { + placeholder: "> Run a bash command...", + commandPanel: "Command panel", + copyAriaLabel: "Copy latest command output", + clearAriaLabel: "Clear bash output", + commandLabel: "{command}", + statusLabel: "Status: {status}", + collapseOutput: "Collapse command output", + expandOutput: "Expand command output", + running: "Running...", + copyFailed: "Failed to copy to clipboard" + } +}; +var settings2 = { + title: "Claudian Settings", + tabs: { + general: "General", + claude: "Claude", + codex: "Codex" + }, + display: "Display", + conversations: "Conversations", + content: "Content", + input: "Input", + setup: "Setup", + models: "Models", + experimental: "Experimental", + userName: { + name: "What should Claudian call you?", + desc: "Your name for personalized greetings (leave empty for generic greetings)" + }, + excludedTags: { + name: "Excluded tags", + desc: "Notes with these tags will not auto-load as context (one per line, without #)" + }, + mediaFolder: { + name: "Media folder", + desc: "Folder containing attachments/images. When notes use ![[image.jpg]], Claude will look here. Leave empty for vault root." + }, + systemPrompt: { + name: "Custom system prompt", + desc: "Additional instructions appended to the default system prompt" + }, + autoTitle: { + name: "Auto-generate conversation titles", + desc: "Automatically generate conversation titles after the first user message is sent." + }, + titleModel: { + name: "Title generation model", + desc: "Model used for auto-generating conversation titles.", + auto: "Auto (Haiku)" + }, + navMappings: { + name: "Vim-style navigation mappings", + desc: 'One mapping per line. Format: "map " (actions: scrollUp, scrollDown, focusInput).' + }, + requireCommandOrControlEnterToSend: { + name: "Require Command/Ctrl+Enter to send", + desc: "When enabled, Enter inserts a newline. Command+Enter sends on macOS; Ctrl+Enter sends on Windows and Linux." + }, + hotkeys: "Hotkeys", + inlineEditHotkey: { + name: "Inline Edit", + descWithKey: "Current hotkey: {hotkey}", + descNoKey: "No hotkey set", + btnChange: "Change", + btnSet: "Set hotkey" + }, + openChatHotkey: { + name: "Open Chat", + descWithKey: "Current hotkey: {hotkey}", + descNoKey: "No hotkey set", + btnChange: "Change", + btnSet: "Set hotkey" + }, + newSessionHotkey: { + name: "New Session", + descWithKey: "Current hotkey: {hotkey}", + descNoKey: "No hotkey set", + btnChange: "Change", + btnSet: "Set hotkey" + }, + newTabHotkey: { + name: "New Tab", + descWithKey: "Current hotkey: {hotkey}", + descNoKey: "No hotkey set", + btnChange: "Change", + btnSet: "Set hotkey" + }, + closeTabHotkey: { + name: "Close Tab", + descWithKey: "Current hotkey: {hotkey}", + descNoKey: "No hotkey set", + btnChange: "Change", + btnSet: "Set hotkey" + }, + slashCommands: { + name: "Commands and Skills", + desc: "Manage vault-level commands and skills stored in .claude/commands/ and .claude/skills/. Triggered by /name." + }, + hiddenSlashCommands: { + name: "Hidden Commands and Skills", + desc: "Hide specific commands and skills from the dropdown. Useful for hiding Claude Code entries that are not relevant to Claudian. Enter names without the leading slash, one per line.", + placeholder: "commit\nbuild\ntest" + }, + mcpServers: { + name: "MCP Servers", + desc: "Manage vault-level MCP server configurations stored in .claude/mcp.json. Servers with context-saving mode require @mention to activate." + }, + plugins: { + name: "Claude Code Plugins", + desc: "Manage Claude Code plugins discovered from ~/.claude/plugins. Enabled plugins are stored per vault in .claude/settings.json." + }, + subagents: { + name: "Subagents", + desc: "Manage vault-level subagents stored in .claude/agents/. Each Markdown file defines one custom agent.", + noAgents: "No subagents configured. Click + to create one.", + deleteConfirm: 'Delete subagent "{name}"?', + saveFailed: "Failed to save subagent: {message}", + refreshFailed: "Failed to refresh subagents: {message}", + deleteFailed: "Failed to delete subagent: {message}", + renameCleanupFailed: 'Warning: could not remove old file for "{name}"', + created: 'Subagent "{name}" created', + updated: 'Subagent "{name}" updated', + deleted: 'Subagent "{name}" deleted', + duplicateName: 'An agent named "{name}" already exists', + descriptionRequired: "Description is required", + promptRequired: "System prompt is required", + modal: { + titleEdit: "Edit Subagent", + titleAdd: "Add Subagent", + name: "Name", + nameDesc: "Lowercase letters, numbers, and hyphens only", + namePlaceholder: "code-reviewer", + description: "Description", + descriptionDesc: "Brief description of this agent", + descriptionPlaceholder: "Reviews code for bugs and style", + advancedOptions: "Advanced options", + model: "Model", + modelDesc: "Model override for this agent", + tools: "Tools", + toolsDesc: "Comma-separated list of allowed tools (empty = all)", + disallowedTools: "Disallowed tools", + disallowedToolsDesc: "Comma-separated list of tools to disallow", + skills: "Skills", + skillsDesc: "Comma-separated list of skills", + prompt: "System prompt", + promptDesc: "Instructions for the agent", + promptPlaceholder: "You are a code reviewer. Analyze the given code for..." + } + }, + safety: "Safety", + loadUserSettings: { + name: "Load user Claude settings", + desc: "Load ~/.claude/settings.json. When enabled, user's Claude Code permission rules may bypass Safe mode." + }, + claudeSafeMode: { + name: "Safe mode", + desc: "Permission mode used when the Safe toggle is active." + }, + codexSafeMode: { + name: "Safe mode", + desc: "Sandbox mode used when the Safe toggle is active." + }, + environment: "Environment", + customVariables: { + name: "Custom variables", + desc: "Environment variables for Claude SDK (KEY=VALUE format, one per line). Shell export prefix supported." + }, + envSnippets: { + name: "Snippets", + addBtn: "Add snippet", + noSnippets: "No saved environment snippets yet. Click + to save your current environment configuration.", + nameRequired: "Please enter a name for the snippet", + modal: { + titleEdit: "Edit snippet", + titleSave: "Save snippet", + name: "Name", + namePlaceholder: "A descriptive name for this environment configuration", + description: "Description", + descPlaceholder: "Optional description", + envVars: "Environment variables", + envVarsPlaceholder: "KEY=VALUE format, one per line (export prefix supported)", + save: "Save", + update: "Update", + cancel: "Cancel" + } + }, + customModelOverrides: { + name: "Custom model overrides", + desc: "Set model selector aliases and context window sizes for custom models." + }, + customModelAliases: { + placeholder: "Alias" + }, + customContextLimits: { + name: "Custom Context Limits", + desc: "Set context window sizes for your custom models. Leave empty to use the default (200k tokens).", + invalid: "Invalid format. Use: 256k, 1m, or exact count (1000-10000000)." + }, + enableOpus1M: { + name: "Opus 1M context window", + desc: "Show Opus 1M in the model selector. Included with Max, Team, and Enterprise plans. API and Pro users need extra usage." + }, + enableSonnet1M: { + name: "Sonnet 1M context window", + desc: "Show Sonnet 1M in the model selector. Requires extra usage on Max, Team, and Enterprise plans. API and Pro users need extra usage." + }, + customModels: { + name: "Custom models", + desc: "Append additional Claude model IDs to the picker, one per line. Environment model overrides still replace the picker.", + placeholder: "claude-opus-4-6\nclaude-opus-4-6[1m]\nclaude-opus-4-5-20251101" + }, + enableChrome: { + name: "Enable Chrome extension", + desc: "Allow Claude to interact with Chrome via the claude-in-chrome extension. Requires the extension to be installed. Requires session restart." + }, + enableBangBash: { + name: "Enable bash mode (!)", + desc: "Type ! on empty input to enter bash mode. Runs commands directly via Node.js child_process. Requires view reopen.", + validation: { + noNode: "Node.js not found on PATH. Install Node.js or check your PATH configuration." + } + }, + maxTabs: { + name: "Maximum chat tabs", + desc: "Maximum number of concurrent chat tabs (3-10). Each tab uses a separate Claude session.", + warning: "More than 5 tabs may impact performance and memory usage." + }, + tabBarPosition: { + name: "Tab bar position", + desc: "Choose where to display tab badges and action buttons", + input: "Above input (default)", + header: "In header" + }, + enableAutoScroll: { + name: "Auto-scroll during streaming", + desc: "Automatically scroll to the bottom as Claude streams responses. Disable to stay at the top and read from the beginning." + }, + deferMathRenderingDuringStreaming: { + name: "Defer math rendering during streaming", + desc: "Show raw LaTeX while responses stream, then render math once when each text block completes." + }, + chatViewPlacement: { + name: "Open Claudian in", + desc: "Choose where the chat panel opens when it is created", + rightSidebar: "Right sidebar", + leftSidebar: "Left sidebar", + mainTab: "Main editor tab" + }, + cliPath: { + name: "Claude CLI path", + desc: "Custom path to Claude Code CLI. Leave empty for auto-detection.", + descWindows: "For the native installer, use claude.exe. For npm/pnpm/yarn or other package manager installs, use the cli-wrapper.cjs path (not claude.cmd).", + descUnix: 'Paste the output of "which claude" \u2014 works for both native and npm/pnpm/yarn installs.', + validation: { + notExist: "Path does not exist", + isDirectory: "Path is a directory, not a file" + } + }, + language: { + name: "Language", + desc: "Change the display language of the plugin interface" + } +}; +var en_default = { + common: common2, + chat: chat2, + settings: settings2 +}; + +// src/i18n/locales/es.json +var es_exports = {}; +__export(es_exports, { + chat: () => chat3, + common: () => common3, + default: () => es_default, + settings: () => settings3 +}); +var common3 = { + save: "Guardar", + cancel: "Cancelar", + delete: "Eliminar", + edit: "Editar", + add: "Agregar", + remove: "Eliminar", + clear: "Limpiar", + clearAll: "Limpiar todo", + loading: "Cargando", + error: "Error", + success: "\xC9xito", + warning: "Advertencia", + confirm: "Confirmar", + settings: "Configuraci\xF3n", + advanced: "Avanzado", + enabled: "Habilitado", + disabled: "Deshabilitado", + platform: "Plataforma", + refresh: "Actualizar", + rewind: "Rebobinar" +}; +var chat3 = { + rewind: { + confirmMessage: "\xBFRebobinar a este punto? Los cambios de archivos despu\xE9s de este mensaje ser\xE1n revertidos. El rebobinado no afecta archivos editados manualmente o mediante bash.", + confirmMessageConversationOnly: "\xBFRebobinar la conversaci\xF3n hasta este punto? Se conservar\xE1n los cambios de archivos.", + confirmButton: "Rebobinar", + ariaLabel: "Rebobinar hasta aqu\xED", + menuConversationOnly: "Rebobinar solo conversaci\xF3n", + menuCodeAndConversation: "Rebobinar c\xF3digo + conversaci\xF3n", + notice: "Rebobinado: {count} archivo(s) revertido(s)", + noticeConversationOnly: "Conversaci\xF3n rebobinada; cambios de archivos conservados", + noticeSaveFailed: "Rebobinado: {count} archivo(s) revertido(s), pero no se pudo guardar el estado: {error}", + noticeConversationOnlySaveFailed: "Conversaci\xF3n rebobinada, pero no se pudo guardar el estado: {error}", + failed: "Error al rebobinar: {error}", + cannot: "No se puede rebobinar: {error}", + unavailableStreaming: "No se puede rebobinar durante la transmisi\xF3n", + unavailableNoUuid: "No se puede rebobinar: faltan identificadores de mensaje" + }, + fork: { + ariaLabel: "Bifurcar conversaci\xF3n", + chooseTarget: "Bifurcar conversaci\xF3n", + targetNewTab: "Nueva pesta\xF1a", + targetCurrentTab: "Pesta\xF1a actual", + maxTabsReached: "No se puede bifurcar: m\xE1ximo de {count} pesta\xF1as alcanzado", + notice: "Bifurcado a nueva pesta\xF1a", + noticeCurrentTab: "Bifurcado en pesta\xF1a actual", + failed: "Error al bifurcar: {error}", + unavailableStreaming: "No se puede bifurcar durante la transmisi\xF3n", + unavailableNoUuid: "No se puede bifurcar: faltan identificadores de mensaje", + unavailableNoResponse: "No se puede bifurcar: no hay respuesta para bifurcar", + errorMessageNotFound: "Mensaje no encontrado", + errorNoSession: "No hay ning\xFAn ID de sesi\xF3n disponible", + errorNoActiveTab: "No hay ninguna pesta\xF1a activa", + commandNoMessages: "No se puede bifurcar: no hay mensajes en la conversaci\xF3n", + commandNoAssistantUuid: "No se puede bifurcar: no hay respuesta del asistente con identificadores" + }, + bangBash: { + placeholder: "> Ejecuta un comando bash...", + commandPanel: "Panel de comandos", + copyAriaLabel: "Copiar la salida del comando m\xE1s reciente", + clearAriaLabel: "Limpiar la salida de bash", + commandLabel: "{command}", + statusLabel: "Estado: {status}", + collapseOutput: "Contraer la salida del comando", + expandOutput: "Expandir la salida del comando", + running: "Ejecutando...", + copyFailed: "No se pudo copiar al portapapeles" + } +}; +var settings3 = { + title: "Configuraci\xF3n de Claudian", + tabs: { + general: "General", + claude: "Claude", + codex: "Codex" + }, + display: "Pantalla", + conversations: "Conversaciones", + content: "Contenido", + input: "Entrada", + setup: "Configuraci\xF3n", + models: "Modelos", + experimental: "Experimental", + userName: { + name: "\xBFC\xF3mo deber\xEDa Claudian llamarte?", + desc: "Tu nombre para saludos personalizados (dejar vac\xEDo para saludos gen\xE9ricos)" + }, + excludedTags: { + name: "Etiquetas excluidas", + desc: "Las notas con estas etiquetas no se cargar\xE1n autom\xE1ticamente como contexto (una por l\xEDnea, sin #)" + }, + mediaFolder: { + name: "Carpeta de medios", + desc: "Carpeta que contiene archivos adjuntos/imagenes. Cuando las notas usan ![[image.jpg]], Claude buscar\xE1 aqu\xED. Dejar vac\xEDo para la ra\xEDz del dep\xF3sito." + }, + systemPrompt: { + name: "Prompt de sistema personalizado", + desc: "Instrucciones adicionales a\xF1adidas al prompt de sistema por defecto" + }, + autoTitle: { + name: "Generar autom\xE1ticamente t\xEDtulos de conversaci\xF3n", + desc: "Genera autom\xE1ticamente t\xEDtulos de conversaci\xF3n despu\xE9s del primer mensaje del usuario." + }, + titleModel: { + name: "Modelo de generaci\xF3n de t\xEDtulos", + desc: "Modelo utilizado para generar autom\xE1ticamente t\xEDtulos de conversaci\xF3n.", + auto: "Autom\xE1tico (Haiku)" + }, + navMappings: { + name: "Mapeos de navegaci\xF3n estilo Vim", + desc: 'Un mapeo por l\xEDnea. Formato: "map " (acciones: scrollUp, scrollDown, focusInput).' + }, + requireCommandOrControlEnterToSend: { + name: "Requerir Command/Ctrl+Enter para enviar", + desc: "Cuando est\xE1 activado, Enter inserta un salto de l\xEDnea. Command+Enter env\xEDa en macOS; Ctrl+Enter env\xEDa en Windows y Linux." + }, + hotkeys: "Atajos de teclado", + inlineEditHotkey: { + name: "Edici\xF3n en l\xEDnea", + descWithKey: "Atajo actual: {hotkey}", + descNoKey: "Sin atajo configurado", + btnChange: "Cambiar", + btnSet: "Configurar" + }, + openChatHotkey: { + name: "Abrir chat", + descWithKey: "Atajo actual: {hotkey}", + descNoKey: "Sin atajo configurado", + btnChange: "Cambiar", + btnSet: "Configurar" + }, + newSessionHotkey: { + name: "Nueva sesi\xF3n", + descWithKey: "Atajo actual: {hotkey}", + descNoKey: "Sin atajo configurado", + btnChange: "Cambiar", + btnSet: "Configurar" + }, + newTabHotkey: { + name: "Nueva pesta\xF1a", + descWithKey: "Atajo actual: {hotkey}", + descNoKey: "Sin atajo configurado", + btnChange: "Cambiar", + btnSet: "Configurar" + }, + closeTabHotkey: { + name: "Cerrar pesta\xF1a", + descWithKey: "Atajo actual: {hotkey}", + descNoKey: "Sin atajo configurado", + btnChange: "Cambiar", + btnSet: "Configurar" + }, + slashCommands: { + name: "Comandos y habilidades", + desc: "Administra comandos y habilidades a nivel de vault almacenados en .claude/commands/ y .claude/skills/. Activados por /nombre." + }, + hiddenSlashCommands: { + name: "Comandos y habilidades ocultos", + desc: "Oculta comandos y habilidades espec\xEDficos del men\xFA desplegable. \xDAtil para ocultar entradas de Claude Code que no son relevantes para Claudian. Ingresa los nombres sin la barra inicial, uno por l\xEDnea.", + placeholder: "commit\nbuild\ntest" + }, + mcpServers: { + name: "Servidores MCP", + desc: "Administra configuraciones de servidores MCP a nivel de vault almacenadas en .claude/mcp.json. Los servidores con modo de guardado de contexto requieren @mention para activarse." + }, + plugins: { + name: "Plugins de Claude Code", + desc: "Administra plugins de Claude Code descubiertos desde ~/.claude/plugins. Los plugins habilitados se almacenan por vault en .claude/settings.json." + }, + subagents: { + name: "Subagentes", + desc: "Administra subagentes a nivel de vault almacenados en .claude/agents/. Cada archivo Markdown define un agente personalizado.", + noAgents: "No hay subagentes configurados. Haz clic en + para crear uno.", + deleteConfirm: '\xBFEliminar el subagente "{name}"?', + saveFailed: "No se pudo guardar el subagente: {message}", + refreshFailed: "No se pudieron actualizar los subagentes: {message}", + deleteFailed: "No se pudo eliminar el subagente: {message}", + renameCleanupFailed: 'Advertencia: no se pudo eliminar el archivo anterior de "{name}"', + created: 'Se cre\xF3 el subagente "{name}"', + updated: 'Se actualiz\xF3 el subagente "{name}"', + deleted: 'Se elimin\xF3 el subagente "{name}"', + duplicateName: 'Ya existe un agente con el nombre "{name}"', + descriptionRequired: "La descripci\xF3n es obligatoria", + promptRequired: "El prompt del sistema es obligatorio", + modal: { + titleEdit: "Editar subagente", + titleAdd: "Agregar subagente", + name: "Nombre", + nameDesc: "Solo letras min\xFAsculas, n\xFAmeros y guiones", + namePlaceholder: "code-reviewer", + description: "Descripci\xF3n", + descriptionDesc: "Descripci\xF3n breve de este agente", + descriptionPlaceholder: "Revisa c\xF3digo en busca de errores y estilo", + advancedOptions: "Opciones avanzadas", + model: "Modelo", + modelDesc: "Modelo alternativo para este agente", + tools: "Herramientas", + toolsDesc: "Lista separada por comas de las herramientas permitidas (vac\xEDo = todas)", + disallowedTools: "Herramientas no permitidas", + disallowedToolsDesc: "Lista separada por comas de herramientas no permitidas", + skills: "Habilidades", + skillsDesc: "Lista separada por comas de habilidades", + prompt: "Prompt del sistema", + promptDesc: "Instrucciones para el agente", + promptPlaceholder: "Eres un revisor de c\xF3digo. Analiza el c\xF3digo proporcionado para..." + } + }, + safety: "Seguridad", + loadUserSettings: { + name: "Cargar configuraci\xF3n de usuario Claude", + desc: "Carga ~/.claude/settings.json. Cuando est\xE1 habilitado, las reglas de permisos del usuario pueden eludir el modo seguro." + }, + claudeSafeMode: { + name: "Safe mode", + desc: "Permission mode used when the Safe toggle is active." + }, + codexSafeMode: { + name: "Safe mode", + desc: "Sandbox mode used when the Safe toggle is active." + }, + environment: "Entorno", + customVariables: { + name: "Variables personalizadas", + desc: "Variables de entorno para Claude SDK (formato KEY=VALUE, una por l\xEDnea). Prefijo export soportado." + }, + envSnippets: { + name: "Fragmentos", + addBtn: "A\xF1adir fragmento", + noSnippets: "No hay fragmentos de entorno guardados. Haga clic en + para guardar su configuraci\xF3n actual.", + nameRequired: "Por favor ingrese un nombre para el fragmento", + modal: { + titleEdit: "Editar fragmento", + titleSave: "Guardar fragmento", + name: "Nombre", + namePlaceholder: "Un nombre descriptivo para esta configuraci\xF3n", + description: "Descripci\xF3n", + descPlaceholder: "Descripci\xF3n opcional", + envVars: "Variables de entorno", + envVarsPlaceholder: "Formato KEY=VALUE, una por l\xEDnea (prefijo export soportado)", + save: "Guardar", + update: "Actualizar", + cancel: "Cancelar" + } + }, + customModelOverrides: { + name: "Anulaciones de modelos personalizados", + desc: "Configure alias en el selector de modelos y tama\xF1os de ventana de contexto para modelos personalizados." + }, + customModelAliases: { + placeholder: "Alias" + }, + customContextLimits: { + name: "L\xEDmites de contexto personalizados", + desc: "Establezca tama\xF1os de ventana de contexto para sus modelos personalizados. Deje vac\xEDo para usar el valor predeterminado (200k tokens).", + invalid: "Formato inv\xE1lido. Use: 256k, 1m o n\xFAmero exacto (1000-10000000)." + }, + enableOpus1M: { + name: "Ventana de contexto Opus 1M", + desc: "Mostrar Opus 1M en el selector de modelos. Incluido en planes Max, Team y Enterprise. Usuarios de API y Pro necesitan uso adicional." + }, + enableSonnet1M: { + name: "Ventana de contexto Sonnet 1M", + desc: "Mostrar Sonnet 1M en el selector de modelos. Requiere uso adicional en planes Max, Team y Enterprise. Usuarios de API y Pro necesitan uso adicional." + }, + customModels: { + name: "Custom models", + desc: "Append additional Claude model IDs to the picker, one per line. Environment model overrides still replace the picker.", + placeholder: "claude-opus-4-6\nclaude-opus-4-6[1m]\nclaude-opus-4-5-20251101" + }, + enableChrome: { + name: "Habilitar extensi\xF3n de Chrome", + desc: "Permitir que Claude interact\xFAe con Chrome a trav\xE9s de la extensi\xF3n claude-in-chrome. Requiere que la extensi\xF3n est\xE9 instalada. Requiere reinicio de sesi\xF3n." + }, + enableBangBash: { + name: "Habilitar modo bash (!)", + desc: "Escribe ! en una entrada vac\xEDa para entrar en modo bash. Ejecuta comandos directamente mediante Node.js child_process. Requiere volver a abrir la vista.", + validation: { + noNode: "Node.js no se encontr\xF3 en PATH. Instala Node.js o revisa tu configuraci\xF3n de PATH." + } + }, + maxTabs: { + name: "M\xE1ximo de pesta\xF1as de chat", + desc: "N\xFAmero m\xE1ximo de pesta\xF1as de chat simult\xE1neas (3-10). Cada pesta\xF1a usa una sesi\xF3n de Claude separada.", + warning: "M\xE1s de 5 pesta\xF1as puede afectar el rendimiento y el uso de memoria." + }, + tabBarPosition: { + name: "Posici\xF3n de la barra de pesta\xF1as", + desc: "Elige d\xF3nde mostrar las insignias de pesta\xF1as y los botones de acci\xF3n", + input: "Sobre el \xE1rea de entrada (predeterminado)", + header: "En el encabezado" + }, + enableAutoScroll: { + name: "Desplazamiento autom\xE1tico durante streaming", + desc: "Desplazarse autom\xE1ticamente hacia abajo mientras Claude transmite respuestas. Desactivar para quedarse arriba y leer desde el principio." + }, + deferMathRenderingDuringStreaming: { + name: "Diferir renderizado matem\xE1tico durante streaming", + desc: "Mostrar LaTeX sin procesar mientras se transmite la respuesta y renderizar las f\xF3rmulas una vez al completar cada bloque de texto." + }, + chatViewPlacement: { + name: "Abrir Claudian en", + desc: "Elige d\xF3nde se abre el panel de chat cuando se crea", + rightSidebar: "Barra lateral derecha", + leftSidebar: "Barra lateral izquierda", + mainTab: "Pesta\xF1a del editor principal" + }, + cliPath: { + name: "Ruta CLI Claude", + desc: "Ruta personalizada a Claude Code CLI. Dejar vac\xEDo para detecci\xF3n autom\xE1tica.", + descWindows: "Para el instalador nativo, use claude.exe. Para instalaciones con npm/pnpm/yarn u otros gestores de paquetes, use la ruta cli-wrapper.cjs (no claude.cmd).", + descUnix: 'Pegue la salida de "which claude" \u2014 funciona tanto para instalaciones nativas como npm/pnpm/yarn.', + validation: { + notExist: "La ruta no existe", + isDirectory: "La ruta es un directorio, no un archivo" + } + }, + language: { + name: "Idioma", + desc: "Cambiar el idioma de visualizaci\xF3n de la interfaz del plugin" + } +}; +var es_default = { + common: common3, + chat: chat3, + settings: settings3 +}; + +// src/i18n/locales/fr.json +var fr_exports = {}; +__export(fr_exports, { + chat: () => chat4, + common: () => common4, + default: () => fr_default, + settings: () => settings4 +}); +var common4 = { + save: "Enregistrer", + cancel: "Annuler", + delete: "Supprimer", + edit: "Modifier", + add: "Ajouter", + remove: "Supprimer", + clear: "Effacer", + clearAll: "Tout effacer", + loading: "Chargement", + error: "Erreur", + success: "Succ\xE8s", + warning: "Avertissement", + confirm: "Confirmer", + settings: "Param\xE8tres", + advanced: "Avanc\xE9", + enabled: "Activ\xE9", + disabled: "D\xE9sactiv\xE9", + platform: "Plateforme", + refresh: "Actualiser", + rewind: "Rembobiner" +}; +var chat4 = { + rewind: { + confirmMessage: "Rembobiner jusqu'\xE0 ce point ? Les modifications de fichiers apr\xE8s ce message seront annul\xE9es. Le rembobinage n'affecte pas les fichiers modifi\xE9s manuellement ou via bash.", + confirmMessageConversationOnly: "Rembobiner la conversation jusqu'\xE0 ce point ? Les modifications de fichiers seront conserv\xE9es.", + confirmButton: "Rembobiner", + ariaLabel: "Rembobiner jusqu'ici", + menuConversationOnly: "Rembobiner la conversation seule", + menuCodeAndConversation: "Rembobiner code + conversation", + notice: "Rembobin\xE9 : {count} fichier(s) restaur\xE9(s)", + noticeConversationOnly: "Conversation rembobin\xE9e ; modifications de fichiers conserv\xE9es", + noticeSaveFailed: "Rembobin\xE9 : {count} fichier(s) restaur\xE9(s), mais impossible d'enregistrer l'\xE9tat : {error}", + noticeConversationOnlySaveFailed: "Conversation rembobin\xE9e, mais impossible d'enregistrer l'\xE9tat : {error}", + failed: "\xC9chec du rembobinage : {error}", + cannot: "Impossible de rembobiner : {error}", + unavailableStreaming: "Impossible de rembobiner pendant le streaming", + unavailableNoUuid: "Impossible de rembobiner : identifiants de message manquants" + }, + fork: { + ariaLabel: "Bifurquer la conversation", + chooseTarget: "Bifurquer la conversation", + targetNewTab: "Nouvel onglet", + targetCurrentTab: "Onglet actuel", + maxTabsReached: "Impossible de bifurquer : maximum de {count} onglets atteint", + notice: "Bifurqu\xE9 dans un nouvel onglet", + noticeCurrentTab: "Bifurqu\xE9 dans l'onglet actuel", + failed: "\xC9chec de la bifurcation : {error}", + unavailableStreaming: "Impossible de bifurquer pendant le streaming", + unavailableNoUuid: "Impossible de bifurquer : identifiants de message manquants", + unavailableNoResponse: "Impossible de bifurquer : aucune r\xE9ponse pour bifurquer", + errorMessageNotFound: "Message introuvable", + errorNoSession: "Aucun ID de session disponible", + errorNoActiveTab: "Aucun onglet actif", + commandNoMessages: "Impossible de bifurquer : aucun message dans la conversation", + commandNoAssistantUuid: "Impossible de bifurquer : aucune r\xE9ponse de l\u2019assistant avec des identifiants" + }, + bangBash: { + placeholder: "> Ex\xE9cuter une commande bash...", + commandPanel: "Panneau de commandes", + copyAriaLabel: "Copier la sortie de la derni\xE8re commande", + clearAriaLabel: "Effacer la sortie bash", + commandLabel: "{command}", + statusLabel: "Statut : {status}", + collapseOutput: "R\xE9duire la sortie de la commande", + expandOutput: "D\xE9velopper la sortie de la commande", + running: "Ex\xE9cution...", + copyFailed: "\xC9chec de la copie dans le presse-papiers" + } +}; +var settings4 = { + title: "Param\xE8tres Claudian", + tabs: { + general: "G\xE9n\xE9ral", + claude: "Claude", + codex: "Codex" + }, + display: "Affichage", + conversations: "Conversations", + content: "Contenu", + input: "Saisie", + setup: "Configuration", + models: "Mod\xE8les", + experimental: "Exp\xE9rimental", + userName: { + name: "Comment Claudian doit-il vous appeler ?", + desc: "Votre nom pour les salutations personnalis\xE9es (laisser vide pour les salutations g\xE9n\xE9riques)" + }, + excludedTags: { + name: "Tags exclus", + desc: "Les notes avec ces tags ne seront pas charg\xE9es automatiquement comme contexte (un par ligne, sans #)" + }, + mediaFolder: { + name: "Dossier des m\xE9dias", + desc: "Dossier contenant les pi\xE8ces jointes/images. Lorsque les notes utilisent ![[image.jpg]], Claude cherchera ici. Laisser vide pour la racine du coffre." + }, + systemPrompt: { + name: "Prompt syst\xE8me personnalis\xE9", + desc: "Instructions suppl\xE9mentaires ajout\xE9es au prompt syst\xE8me par d\xE9faut" + }, + autoTitle: { + name: "G\xE9n\xE9rer automatiquement les titres de conversation", + desc: "G\xE9n\xE8re automatiquement les titres de conversation apr\xE8s le premier message de l'utilisateur." + }, + titleModel: { + name: "Mod\xE8le de g\xE9n\xE9ration de titre", + desc: "Mod\xE8le utilis\xE9 pour g\xE9n\xE9rer automatiquement les titres de conversation.", + auto: "Automatique (Haiku)" + }, + navMappings: { + name: "Mappages de navigation style Vim", + desc: 'Un mappage par ligne. Format : "map " (actions : scrollUp, scrollDown, focusInput).' + }, + requireCommandOrControlEnterToSend: { + name: "Exiger Command/Ctrl+Entr\xE9e pour envoyer", + desc: "Lorsque cette option est activ\xE9e, Entr\xE9e ins\xE8re une nouvelle ligne. Command+Entr\xE9e envoie sur macOS ; Ctrl+Entr\xE9e envoie sur Windows et Linux." + }, + hotkeys: "Raccourcis clavier", + inlineEditHotkey: { + name: "\xC9dition en ligne", + descWithKey: "Raccourci actuel : {hotkey}", + descNoKey: "Aucun raccourci d\xE9fini", + btnChange: "Modifier", + btnSet: "D\xE9finir" + }, + openChatHotkey: { + name: "Ouvrir le chat", + descWithKey: "Raccourci actuel : {hotkey}", + descNoKey: "Aucun raccourci d\xE9fini", + btnChange: "Modifier", + btnSet: "D\xE9finir" + }, + newSessionHotkey: { + name: "Nouvelle session", + descWithKey: "Raccourci actuel : {hotkey}", + descNoKey: "Aucun raccourci d\xE9fini", + btnChange: "Modifier", + btnSet: "D\xE9finir" + }, + newTabHotkey: { + name: "Nouvel onglet", + descWithKey: "Raccourci actuel : {hotkey}", + descNoKey: "Aucun raccourci d\xE9fini", + btnChange: "Modifier", + btnSet: "D\xE9finir" + }, + closeTabHotkey: { + name: "Fermer l'onglet", + descWithKey: "Raccourci actuel : {hotkey}", + descNoKey: "Aucun raccourci d\xE9fini", + btnChange: "Modifier", + btnSet: "D\xE9finir" + }, + slashCommands: { + name: "Commandes et comp\xE9tences", + desc: "G\xE9rez les commandes et comp\xE9tences au niveau du vault stock\xE9es dans .claude/commands/ et .claude/skills/. D\xE9clench\xE9es par /nom." + }, + hiddenSlashCommands: { + name: "Commandes et comp\xE9tences masqu\xE9es", + desc: "Masquez des commandes et comp\xE9tences sp\xE9cifiques du menu d\xE9roulant. Utile pour masquer les entr\xE9es Claude Code qui ne sont pas pertinentes pour Claudian. Saisissez les noms sans le slash initial, un par ligne.", + placeholder: "commit\nbuild\ntest" + }, + mcpServers: { + name: "Serveurs MCP", + desc: "G\xE9rez les configurations de serveurs MCP au niveau du vault stock\xE9es dans .claude/mcp.json. Les serveurs avec mode de sauvegarde de contexte n\xE9cessitent une @mention pour s'activer." + }, + plugins: { + name: "Plugins Claude Code", + desc: "G\xE9rez les plugins Claude Code d\xE9couverts dans ~/.claude/plugins. Les plugins activ\xE9s sont stock\xE9s par vault dans .claude/settings.json." + }, + subagents: { + name: "Sous-agents", + desc: "G\xE9rez les sous-agents au niveau du vault stock\xE9s dans .claude/agents/. Chaque fichier Markdown d\xE9finit un agent personnalis\xE9.", + noAgents: "Aucun sous-agent configur\xE9. Cliquez sur + pour en cr\xE9er un.", + deleteConfirm: 'Supprimer le sous-agent "{name}" ?', + saveFailed: "\xC9chec de l\u2019enregistrement du sous-agent : {message}", + refreshFailed: "\xC9chec de l\u2019actualisation des subagents : {message}", + deleteFailed: "\xC9chec de la suppression du sous-agent : {message}", + renameCleanupFailed: 'Avertissement : impossible de supprimer l\u2019ancien fichier pour "{name}"', + created: 'Sous-agent "{name}" cr\xE9\xE9', + updated: 'Sous-agent "{name}" mis \xE0 jour', + deleted: 'Sous-agent "{name}" supprim\xE9', + duplicateName: 'Un agent nomm\xE9 "{name}" existe d\xE9j\xE0', + descriptionRequired: "La description est obligatoire", + promptRequired: "Le prompt syst\xE8me est obligatoire", + modal: { + titleEdit: "Modifier le sous-agent", + titleAdd: "Ajouter un sous-agent", + name: "Nom", + nameDesc: "Lettres minuscules, chiffres et tirets uniquement", + namePlaceholder: "code-reviewer", + description: "Description", + descriptionDesc: "Br\xE8ve description de cet agent", + descriptionPlaceholder: "Examine le code pour d\xE9tecter les bugs et les probl\xE8mes de style", + advancedOptions: "Options avanc\xE9es", + model: "Mod\xE8le", + modelDesc: "Mod\xE8le \xE0 utiliser pour cet agent", + tools: "Outils", + toolsDesc: "Liste des outils autoris\xE9s, s\xE9par\xE9s par des virgules (vide = tous)", + disallowedTools: "Outils non autoris\xE9s", + disallowedToolsDesc: "Liste des outils \xE0 interdire, s\xE9par\xE9s par des virgules", + skills: "Comp\xE9tences", + skillsDesc: "Liste des comp\xE9tences, s\xE9par\xE9es par des virgules", + prompt: "Prompt syst\xE8me", + promptDesc: "Instructions pour l\u2019agent", + promptPlaceholder: "Vous \xEAtes un relecteur de code. Analysez le code fourni pour..." + } + }, + safety: "S\xE9curit\xE9", + loadUserSettings: { + name: "Charger les param\xE8tres utilisateur Claude", + desc: "Charge ~/.claude/settings.json. Lorsqu'activ\xE9, les r\xE8gles de permission de l'utilisateur peuvent contourner le mode s\xE9curis\xE9." + }, + claudeSafeMode: { + name: "Safe mode", + desc: "Permission mode used when the Safe toggle is active." + }, + codexSafeMode: { + name: "Safe mode", + desc: "Sandbox mode used when the Safe toggle is active." + }, + environment: "Environnement", + customVariables: { + name: "Variables personnalis\xE9es", + desc: "Variables d'environnement pour Claude SDK (format KEY=VALUE, une par ligne). Pr\xE9fixe export support\xE9." + }, + envSnippets: { + name: "Extraits", + addBtn: "Ajouter un extrait", + noSnippets: "Aucun extrait d'environnement enregistr\xE9. Cliquez sur + pour sauvegarder votre configuration actuelle.", + nameRequired: "Veuillez entrer un nom pour l'extrait", + modal: { + titleEdit: "Modifier l'extrait", + titleSave: "Sauvegarder l'extrait", + name: "Nom", + namePlaceholder: "Un nom descriptif pour cette configuration", + description: "Description", + descPlaceholder: "Description optionnelle", + envVars: "Variables d'environnement", + envVarsPlaceholder: "Format KEY=VALUE, une par ligne (pr\xE9fixe export support\xE9)", + save: "Enregistrer", + update: "Mettre \xE0 jour", + cancel: "Annuler" + } + }, + customModelOverrides: { + name: "Remplacements de mod\xE8les personnalis\xE9s", + desc: "D\xE9finissez les alias dans le s\xE9lecteur de mod\xE8le et les tailles de fen\xEAtre de contexte pour les mod\xE8les personnalis\xE9s." + }, + customModelAliases: { + placeholder: "Alias" + }, + customContextLimits: { + name: "Limites de contexte personnalis\xE9es", + desc: "D\xE9finissez les tailles de fen\xEAtre de contexte pour vos mod\xE8les personnalis\xE9s. Laissez vide pour utiliser la valeur par d\xE9faut (200k tokens).", + invalid: "Format invalide. Utilisez : 256k, 1m ou nombre exact (1000-10000000)." + }, + enableOpus1M: { + name: "Fen\xEAtre de contexte Opus 1M", + desc: "Afficher Opus 1M dans le s\xE9lecteur de mod\xE8le. Inclus avec les plans Max, Team et Enterprise. Les utilisateurs API et Pro n\xE9cessitent une utilisation suppl\xE9mentaire." + }, + enableSonnet1M: { + name: "Fen\xEAtre de contexte Sonnet 1M", + desc: "Afficher Sonnet 1M dans le s\xE9lecteur de mod\xE8le. N\xE9cessite une utilisation suppl\xE9mentaire sur les plans Max, Team et Enterprise. Les utilisateurs API et Pro n\xE9cessitent une utilisation suppl\xE9mentaire." + }, + customModels: { + name: "Custom models", + desc: "Append additional Claude model IDs to the picker, one per line. Environment model overrides still replace the picker.", + placeholder: "claude-opus-4-6\nclaude-opus-4-6[1m]\nclaude-opus-4-5-20251101" + }, + enableChrome: { + name: "Activer l'extension Chrome", + desc: "Permettre \xE0 Claude d'interagir avec Chrome via l'extension claude-in-chrome. L'extension doit \xEAtre install\xE9e. N\xE9cessite un red\xE9marrage de session." + }, + enableBangBash: { + name: "Activer le mode bash (!)", + desc: "Saisissez ! dans un champ vide pour passer en mode bash. Ex\xE9cute les commandes directement via le child_process de Node.js. N\xE9cessite de rouvrir la vue.", + validation: { + noNode: "Node.js introuvable dans PATH. Installez Node.js ou v\xE9rifiez votre configuration PATH." + } + }, + maxTabs: { + name: "Maximum d'onglets de chat", + desc: "Nombre maximum d'onglets de chat simultan\xE9s (3-10). Chaque onglet utilise une session Claude s\xE9par\xE9e.", + warning: "Plus de 5 onglets peut affecter les performances et l'utilisation de la m\xE9moire." + }, + tabBarPosition: { + name: "Position de la barre d'onglets", + desc: "Choisissez o\xF9 afficher les badges d'onglets et les boutons d'action", + input: "Au-dessus de la saisie (par d\xE9faut)", + header: "Dans l'en-t\xEAte" + }, + enableAutoScroll: { + name: "D\xE9filement automatique pendant le streaming", + desc: "D\xE9filer automatiquement vers le bas pendant que Claude diffuse les r\xE9ponses. D\xE9sactiver pour rester en haut et lire depuis le d\xE9but." + }, + deferMathRenderingDuringStreaming: { + name: "Diff\xE9rer le rendu math\xE9matique pendant le streaming", + desc: "Afficher le LaTeX brut pendant la diffusion, puis rendre les formules une fois chaque bloc de texte termin\xE9." + }, + chatViewPlacement: { + name: "Ouvrir Claudian dans", + desc: "Choisissez o\xF9 le panneau de chat s'ouvre lors de sa cr\xE9ation", + rightSidebar: "Barre lat\xE9rale droite", + leftSidebar: "Barre lat\xE9rale gauche", + mainTab: "Onglet principal de l'\xE9diteur" + }, + cliPath: { + name: "Chemin CLI Claude", + desc: "Chemin personnalis\xE9 vers Claude Code CLI. Laisser vide pour la d\xE9tection automatique.", + descWindows: "Pour l'installateur natif, utilisez claude.exe. Pour les installations npm/pnpm/yarn ou autres gestionnaires de paquets, utilisez le chemin cli-wrapper.cjs (pas claude.cmd).", + descUnix: 'Collez la sortie de "which claude" \u2014 fonctionne pour les installations natives et npm/pnpm/yarn.', + validation: { + notExist: "Le chemin n'existe pas", + isDirectory: "Le chemin est un r\xE9pertoire, pas un fichier" + } + }, + language: { + name: "Langue", + desc: "Changer la langue d'affichage de l'interface du plugin" + } +}; +var fr_default = { + common: common4, + chat: chat4, + settings: settings4 +}; + +// src/i18n/locales/ja.json +var ja_exports = {}; +__export(ja_exports, { + chat: () => chat5, + common: () => common5, + default: () => ja_default, + settings: () => settings5 +}); +var common5 = { + save: "\u4FDD\u5B58", + cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB", + delete: "\u524A\u9664", + edit: "\u7DE8\u96C6", + add: "\u8FFD\u52A0", + remove: "\u524A\u9664", + clear: "\u30AF\u30EA\u30A2", + clearAll: "\u3059\u3079\u3066\u30AF\u30EA\u30A2", + loading: "\u8AAD\u307F\u8FBC\u307F\u4E2D", + error: "\u30A8\u30E9\u30FC", + success: "\u6210\u529F", + warning: "\u8B66\u544A", + confirm: "\u78BA\u8A8D", + settings: "\u8A2D\u5B9A", + advanced: "\u8A73\u7D30", + enabled: "\u6709\u52B9", + disabled: "\u7121\u52B9", + platform: "\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0", + refresh: "\u66F4\u65B0", + rewind: "\u5DFB\u304D\u623B\u3057" +}; +var chat5 = { + rewind: { + confirmMessage: "\u3053\u306E\u6642\u70B9\u306B\u5DFB\u304D\u623B\u3057\u307E\u3059\u304B\uFF1F\u3053\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u4EE5\u964D\u306E\u30D5\u30A1\u30A4\u30EB\u5909\u66F4\u304C\u5143\u306B\u623B\u3055\u308C\u307E\u3059\u3002\u624B\u52D5\u307E\u305F\u306Fbash\u3067\u7DE8\u96C6\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u306B\u306F\u5F71\u97FF\u3057\u307E\u305B\u3093\u3002", + confirmMessageConversationOnly: "\u4F1A\u8A71\u3092\u3053\u306E\u6642\u70B9\u306B\u5DFB\u304D\u623B\u3057\u307E\u3059\u304B\uFF1F\u30D5\u30A1\u30A4\u30EB\u5909\u66F4\u306F\u4FDD\u6301\u3055\u308C\u307E\u3059\u3002", + confirmButton: "\u5DFB\u304D\u623B\u3059", + ariaLabel: "\u3053\u3053\u306B\u5DFB\u304D\u623B\u3059", + menuConversationOnly: "\u4F1A\u8A71\u306E\u307F\u5DFB\u304D\u623B\u3059", + menuCodeAndConversation: "\u30B3\u30FC\u30C9 + \u4F1A\u8A71\u3092\u5DFB\u304D\u623B\u3059", + notice: "\u5DFB\u304D\u623B\u3057\u5B8C\u4E86\uFF1A{count} \u500B\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u5FA9\u5143", + noticeConversationOnly: "\u4F1A\u8A71\u3092\u5DFB\u304D\u623B\u3057\u307E\u3057\u305F\u3002\u30D5\u30A1\u30A4\u30EB\u5909\u66F4\u306F\u4FDD\u6301\u3055\u308C\u307E\u3057\u305F", + noticeSaveFailed: "\u5DFB\u304D\u623B\u3057\u5B8C\u4E86\uFF1A{count} \u500B\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u5FA9\u5143\u3057\u307E\u3057\u305F\u304C\u3001\u72B6\u614B\u3092\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF1A{error}", + noticeConversationOnlySaveFailed: "\u4F1A\u8A71\u3092\u5DFB\u304D\u623B\u3057\u307E\u3057\u305F\u304C\u3001\u72B6\u614B\u3092\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF1A{error}", + failed: "\u5DFB\u304D\u623B\u3057\u306B\u5931\u6557\uFF1A{error}", + cannot: "\u5DFB\u304D\u623B\u3057\u3067\u304D\u307E\u305B\u3093\uFF1A{error}", + unavailableStreaming: "\u30B9\u30C8\u30EA\u30FC\u30DF\u30F3\u30B0\u4E2D\u306F\u5DFB\u304D\u623B\u3057\u3067\u304D\u307E\u305B\u3093", + unavailableNoUuid: "\u5DFB\u304D\u623B\u3057\u3067\u304D\u307E\u305B\u3093\uFF1A\u30E1\u30C3\u30BB\u30FC\u30B8\u8B58\u5225\u5B50\u304C\u3042\u308A\u307E\u305B\u3093" + }, + fork: { + ariaLabel: "\u4F1A\u8A71\u3092\u5206\u5C90", + chooseTarget: "\u4F1A\u8A71\u3092\u5206\u5C90", + targetNewTab: "\u65B0\u3057\u3044\u30BF\u30D6", + targetCurrentTab: "\u73FE\u5728\u306E\u30BF\u30D6", + maxTabsReached: "\u5206\u5C90\u3067\u304D\u307E\u305B\u3093\uFF1A\u6700\u5927 {count} \u30BF\u30D6\u306B\u9054\u3057\u307E\u3057\u305F", + notice: "\u65B0\u3057\u3044\u30BF\u30D6\u306B\u5206\u5C90\u3057\u307E\u3057\u305F", + noticeCurrentTab: "\u73FE\u5728\u306E\u30BF\u30D6\u3067\u5206\u5C90\u3057\u307E\u3057\u305F", + failed: "\u5206\u5C90\u306B\u5931\u6557\uFF1A{error}", + unavailableStreaming: "\u30B9\u30C8\u30EA\u30FC\u30DF\u30F3\u30B0\u4E2D\u306F\u5206\u5C90\u3067\u304D\u307E\u305B\u3093", + unavailableNoUuid: "\u5206\u5C90\u3067\u304D\u307E\u305B\u3093\uFF1A\u30E1\u30C3\u30BB\u30FC\u30B8\u8B58\u5225\u5B50\u304C\u3042\u308A\u307E\u305B\u3093", + unavailableNoResponse: "\u5206\u5C90\u3067\u304D\u307E\u305B\u3093\uFF1A\u5206\u5C90\u5143\u306E\u5FDC\u7B54\u304C\u3042\u308A\u307E\u305B\u3093", + errorMessageNotFound: "\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093", + errorNoSession: "\u30BB\u30C3\u30B7\u30E7\u30F3 ID \u304C\u3042\u308A\u307E\u305B\u3093", + errorNoActiveTab: "\u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30BF\u30D6\u304C\u3042\u308A\u307E\u305B\u3093", + commandNoMessages: "\u30D5\u30A9\u30FC\u30AF\u3067\u304D\u307E\u305B\u3093: \u4F1A\u8A71\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u3042\u308A\u307E\u305B\u3093", + commandNoAssistantUuid: "\u30D5\u30A9\u30FC\u30AF\u3067\u304D\u307E\u305B\u3093: \u8B58\u5225\u5B50\u4ED8\u304D\u306E\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u5FDC\u7B54\u304C\u3042\u308A\u307E\u305B\u3093" + }, + bangBash: { + placeholder: "> bash \u30B3\u30DE\u30F3\u30C9\u3092\u5B9F\u884C...", + commandPanel: "\u30B3\u30DE\u30F3\u30C9\u30D1\u30CD\u30EB", + copyAriaLabel: "\u6700\u65B0\u306E\u30B3\u30DE\u30F3\u30C9\u51FA\u529B\u3092\u30B3\u30D4\u30FC", + clearAriaLabel: "bash \u51FA\u529B\u3092\u30AF\u30EA\u30A2", + commandLabel: "{command}", + statusLabel: "\u72B6\u614B: {status}", + collapseOutput: "\u30B3\u30DE\u30F3\u30C9\u51FA\u529B\u3092\u6298\u308A\u305F\u305F\u3080", + expandOutput: "\u30B3\u30DE\u30F3\u30C9\u51FA\u529B\u3092\u5C55\u958B", + running: "\u5B9F\u884C\u4E2D...", + copyFailed: "\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u3078\u306E\u30B3\u30D4\u30FC\u306B\u5931\u6557\u3057\u307E\u3057\u305F" + } +}; +var settings5 = { + title: "Claudian \u8A2D\u5B9A", + tabs: { + general: "\u4E00\u822C", + claude: "Claude", + codex: "Codex" + }, + display: "\u8868\u793A", + conversations: "\u4F1A\u8A71", + content: "\u30B3\u30F3\u30C6\u30F3\u30C4", + input: "\u5165\u529B", + setup: "\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7", + models: "\u30E2\u30C7\u30EB", + experimental: "\u5B9F\u9A13\u7684\u6A5F\u80FD", + userName: { + name: "Claudian \u306F\u3069\u306E\u3088\u3046\u306B\u547C\u3073\u307E\u3059\u304B\uFF1F", + desc: "\u30D1\u30FC\u30BD\u30CA\u30E9\u30A4\u30BA\u3055\u308C\u305F\u6328\u62F6\u306B\u4F7F\u7528\u3059\u308B\u540D\u524D\uFF08\u7A7A\u6B04\u3067\u4E00\u822C\u306E\u6328\u62F6\uFF09" + }, + excludedTags: { + name: "\u9664\u5916\u30BF\u30B0", + desc: "\u3053\u308C\u3089\u306E\u30BF\u30B0\u3092\u542B\u3080\u30CE\u30FC\u30C8\u306F\u81EA\u52D5\u7684\u306B\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3068\u3057\u3066\u8AAD\u307F\u8FBC\u307E\u308C\u307E\u305B\u3093\uFF081\u884C\u306B1\u3064\u3001#\u306A\u3057\uFF09" + }, + mediaFolder: { + name: "\u30E1\u30C7\u30A3\u30A2\u30D5\u30A9\u30EB\u30C0", + desc: "\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB/\u753B\u50CF\u3092\u683C\u7D0D\u3059\u308B\u30D5\u30A9\u30EB\u30C0\u3002\u30CE\u30FC\u30C8\u304C ![[image.jpg]] \u3092\u4F7F\u7528\u3059\u308B\u5834\u5408\u3001Claude \u306F\u3053\u3053\u3067\u63A2\u3057\u307E\u3059\u3002\u7A7A\u6B04\u3067\u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u30EB\u30FC\u30C8\u3092\u4F7F\u7528\u3002" + }, + systemPrompt: { + name: "\u30AB\u30B9\u30BF\u30E0\u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8", + desc: "\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8\u306B\u8FFD\u52A0\u3055\u308C\u308B\u8FFD\u52A0\u6307\u793A" + }, + autoTitle: { + name: "\u4F1A\u8A71\u30BF\u30A4\u30C8\u30EB\u3092\u81EA\u52D5\u751F\u6210", + desc: "\u6700\u521D\u306E\u30E6\u30FC\u30B6\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\u9001\u4FE1\u5F8C\u306B\u4F1A\u8A71\u30BF\u30A4\u30C8\u30EB\u3092\u81EA\u52D5\u7684\u306B\u751F\u6210\u3057\u307E\u3059\u3002" + }, + titleModel: { + name: "\u30BF\u30A4\u30C8\u30EB\u751F\u6210\u30E2\u30C7\u30EB", + desc: "\u4F1A\u8A71\u30BF\u30A4\u30C8\u30EB\u3092\u81EA\u52D5\u751F\u6210\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3055\u308C\u308B\u30E2\u30C7\u30EB\u3002", + auto: "\u81EA\u52D5 (Haiku)" + }, + navMappings: { + name: "Vim\u30B9\u30BF\u30A4\u30EB\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u30DE\u30C3\u30D4\u30F3\u30B0", + desc: '1\u884C\u306B1\u3064\u306E\u30DE\u30C3\u30D4\u30F3\u30B0\u3002\u5F62\u5F0F\uFF1A"map <\u30AD\u30FC> <\u30A2\u30AF\u30B7\u30E7\u30F3>"\uFF08\u30A2\u30AF\u30B7\u30E7\u30F3\uFF1AscrollUp, scrollDown, focusInput\uFF09\u3002' + }, + requireCommandOrControlEnterToSend: { + name: "\u9001\u4FE1\u306B Command/Ctrl+Enter \u3092\u5FC5\u9808\u306B\u3059\u308B", + desc: "\u6709\u52B9\u306B\u3059\u308B\u3068\u3001Enter \u306F\u6539\u884C\u3092\u633F\u5165\u3057\u307E\u3059\u3002macOS \u3067\u306F Command+Enter\u3001Windows \u3068 Linux \u3067\u306F Ctrl+Enter \u3067\u9001\u4FE1\u3057\u307E\u3059\u3002" + }, + hotkeys: "\u30DB\u30C3\u30C8\u30AD\u30FC", + inlineEditHotkey: { + name: "\u30A4\u30F3\u30E9\u30A4\u30F3\u7DE8\u96C6", + descWithKey: "\u73FE\u5728\u306E\u30DB\u30C3\u30C8\u30AD\u30FC: {hotkey}", + descNoKey: "\u30DB\u30C3\u30C8\u30AD\u30FC\u672A\u8A2D\u5B9A", + btnChange: "\u5909\u66F4", + btnSet: "\u8A2D\u5B9A" + }, + openChatHotkey: { + name: "\u30C1\u30E3\u30C3\u30C8\u3092\u958B\u304F", + descWithKey: "\u73FE\u5728\u306E\u30DB\u30C3\u30C8\u30AD\u30FC: {hotkey}", + descNoKey: "\u30DB\u30C3\u30C8\u30AD\u30FC\u672A\u8A2D\u5B9A", + btnChange: "\u5909\u66F4", + btnSet: "\u8A2D\u5B9A" + }, + newSessionHotkey: { + name: "\u65B0\u898F\u30BB\u30C3\u30B7\u30E7\u30F3", + descWithKey: "\u73FE\u5728\u306E\u30DB\u30C3\u30C8\u30AD\u30FC: {hotkey}", + descNoKey: "\u30DB\u30C3\u30C8\u30AD\u30FC\u672A\u8A2D\u5B9A", + btnChange: "\u5909\u66F4", + btnSet: "\u8A2D\u5B9A" + }, + newTabHotkey: { + name: "\u65B0\u898F\u30BF\u30D6", + descWithKey: "\u73FE\u5728\u306E\u30DB\u30C3\u30C8\u30AD\u30FC: {hotkey}", + descNoKey: "\u30DB\u30C3\u30C8\u30AD\u30FC\u672A\u8A2D\u5B9A", + btnChange: "\u5909\u66F4", + btnSet: "\u8A2D\u5B9A" + }, + closeTabHotkey: { + name: "\u30BF\u30D6\u3092\u9589\u3058\u308B", + descWithKey: "\u73FE\u5728\u306E\u30DB\u30C3\u30C8\u30AD\u30FC: {hotkey}", + descNoKey: "\u30DB\u30C3\u30C8\u30AD\u30FC\u672A\u8A2D\u5B9A", + btnChange: "\u5909\u66F4", + btnSet: "\u8A2D\u5B9A" + }, + slashCommands: { + name: "\u30B3\u30DE\u30F3\u30C9\u3068\u30B9\u30AD\u30EB", + desc: ".claude/commands/ \u3068 .claude/skills/ \u306B\u4FDD\u5B58\u3055\u308C\u305F Vault \u30EC\u30D9\u30EB\u306E\u30B3\u30DE\u30F3\u30C9\u3068\u30B9\u30AD\u30EB\u3092\u7BA1\u7406\u3057\u307E\u3059\u3002/\u540D\u524D \u3067\u30C8\u30EA\u30AC\u30FC\u3055\u308C\u307E\u3059\u3002" + }, + hiddenSlashCommands: { + name: "\u975E\u8868\u793A\u306E\u30B3\u30DE\u30F3\u30C9\u3068\u30B9\u30AD\u30EB", + desc: "\u30C9\u30ED\u30C3\u30D7\u30C0\u30A6\u30F3\u304B\u3089\u7279\u5B9A\u306E\u30B3\u30DE\u30F3\u30C9\u3068\u30B9\u30AD\u30EB\u3092\u975E\u8868\u793A\u306B\u3057\u307E\u3059\u3002Claudian \u306B\u95A2\u4FC2\u306E\u306A\u3044 Claude Code \u306E\u9805\u76EE\u3092\u96A0\u3059\u306E\u306B\u4FBF\u5229\u3067\u3059\u3002\u5148\u982D\u306E\u30B9\u30E9\u30C3\u30B7\u30E5\u306A\u3057\u3067\u540D\u524D\u30921\u884C\u306B1\u3064\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002", + placeholder: "commit\nbuild\ntest" + }, + mcpServers: { + name: "MCP \u30B5\u30FC\u30D0\u30FC", + desc: ".claude/mcp.json \u306B\u4FDD\u5B58\u3055\u308C\u305F Vault \u30EC\u30D9\u30EB\u306E MCP \u30B5\u30FC\u30D0\u30FC\u8A2D\u5B9A\u3092\u7BA1\u7406\u3057\u307E\u3059\u3002\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u4FDD\u5B58\u30E2\u30FC\u30C9\u306E\u30B5\u30FC\u30D0\u30FC\u306F @mention \u3067\u30A2\u30AF\u30C6\u30A3\u30D6\u306B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002" + }, + plugins: { + name: "Claude Code \u30D7\u30E9\u30B0\u30A4\u30F3", + desc: "~/.claude/plugins \u304B\u3089\u691C\u51FA\u3055\u308C\u305F Claude Code \u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u7BA1\u7406\u3057\u307E\u3059\u3002\u6709\u52B9\u5316\u3055\u308C\u305F\u30D7\u30E9\u30B0\u30A4\u30F3\u306F Vault \u3054\u3068\u306B .claude/settings.json \u306B\u4FDD\u5B58\u3055\u308C\u307E\u3059\u3002" + }, + subagents: { + name: "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8", + desc: ".claude/agents/ \u306B\u4FDD\u5B58\u3055\u308C\u305F Vault \u30EC\u30D9\u30EB\u306E\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u7BA1\u7406\u3057\u307E\u3059\u3002\u5404 Markdown \u30D5\u30A1\u30A4\u30EB\u304C\u30AB\u30B9\u30BF\u30E0\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30921\u3064\u5B9A\u7FA9\u3057\u307E\u3059\u3002", + noAgents: "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002+ \u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002", + deleteConfirm: "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u300C{name}\u300D\u3092\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F", + saveFailed: "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {message}", + refreshFailed: "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u66F4\u65B0\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F: {message}", + deleteFailed: "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {message}", + renameCleanupFailed: "\u8B66\u544A: \u300C{name}\u300D\u306E\u53E4\u3044\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F", + created: "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u300C{name}\u300D\u3092\u4F5C\u6210\u3057\u307E\u3057\u305F", + updated: "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u300C{name}\u300D\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F", + deleted: "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u300C{name}\u300D\u3092\u524A\u9664\u3057\u307E\u3057\u305F", + duplicateName: "\u300C{name}\u300D\u3068\u3044\u3046\u540D\u524D\u306E\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059", + descriptionRequired: "\u8AAC\u660E\u306F\u5FC5\u9808\u3067\u3059", + promptRequired: "\u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8\u306F\u5FC5\u9808\u3067\u3059", + modal: { + titleEdit: "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u7DE8\u96C6", + titleAdd: "\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u8FFD\u52A0", + name: "\u540D\u524D", + nameDesc: "\u5C0F\u6587\u5B57\u3001\u6570\u5B57\u3001\u30CF\u30A4\u30D5\u30F3\u306E\u307F\u4F7F\u7528\u3067\u304D\u307E\u3059", + namePlaceholder: "code-reviewer", + description: "\u8AAC\u660E", + descriptionDesc: "\u3053\u306E\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u7C21\u5358\u306A\u8AAC\u660E", + descriptionPlaceholder: "\u30B3\u30FC\u30C9\u306E\u30D0\u30B0\u3084\u30B9\u30BF\u30A4\u30EB\u3092\u30EC\u30D3\u30E5\u30FC\u3057\u307E\u3059", + advancedOptions: "\u8A73\u7D30\u30AA\u30D7\u30B7\u30E7\u30F3", + model: "\u30E2\u30C7\u30EB", + modelDesc: "\u3053\u306E\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u30E2\u30C7\u30EB\u4E0A\u66F8\u304D", + tools: "\u30C4\u30FC\u30EB", + toolsDesc: "\u8A31\u53EF\u3059\u308B\u30C4\u30FC\u30EB\u306E\u30AB\u30F3\u30DE\u533A\u5207\u308A\u30EA\u30B9\u30C8\uFF08\u7A7A\u6B04 = \u3059\u3079\u3066\uFF09", + disallowedTools: "\u7981\u6B62\u30C4\u30FC\u30EB", + disallowedToolsDesc: "\u7981\u6B62\u3059\u308B\u30C4\u30FC\u30EB\u306E\u30AB\u30F3\u30DE\u533A\u5207\u308A\u30EA\u30B9\u30C8", + skills: "\u30B9\u30AD\u30EB", + skillsDesc: "\u30B9\u30AD\u30EB\u306E\u30AB\u30F3\u30DE\u533A\u5207\u308A\u30EA\u30B9\u30C8", + prompt: "\u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8", + promptDesc: "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3078\u306E\u6307\u793A", + promptPlaceholder: "\u3042\u306A\u305F\u306F\u30B3\u30FC\u30C9\u30EC\u30D3\u30E5\u30A2\u30FC\u3067\u3059\u3002\u4E0E\u3048\u3089\u308C\u305F\u30B3\u30FC\u30C9\u3092\u5206\u6790\u3057\u3066..." + } + }, + safety: "\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3", + loadUserSettings: { + name: "\u30E6\u30FC\u30B6\u30FCClaude\u8A2D\u5B9A\u3092\u8AAD\u307F\u8FBC\u3080", + desc: "~/.claude/settings.json \u3092\u8AAD\u307F\u8FBC\u307F\u307E\u3059\u3002\u6709\u52B9\u306B\u3059\u308B\u3068\u3001\u30E6\u30FC\u30B6\u30FC\u306E Claude Code \u8A31\u53EF\u30EB\u30FC\u30EB\u304C\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u30E2\u30FC\u30C9\u3092\u30D0\u30A4\u30D1\u30B9\u3059\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002" + }, + claudeSafeMode: { + name: "Safe mode", + desc: "Permission mode used when the Safe toggle is active." + }, + codexSafeMode: { + name: "Safe mode", + desc: "Sandbox mode used when the Safe toggle is active." + }, + environment: "\u74B0\u5883", + customVariables: { + name: "\u30AB\u30B9\u30BF\u30E0\u5909\u6570", + desc: "Claude SDK\u306E\u74B0\u5883\u5909\u6570\uFF08KEY=VALUE\u5F62\u5F0F\u30011\u884C\u306B1\u3064\uFF09\u3002export\u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9\u5BFE\u5FDC\u3002" + }, + envSnippets: { + name: "\u30B9\u30CB\u30DA\u30C3\u30C8", + addBtn: "\u30B9\u30CB\u30DA\u30C3\u30C8\u3092\u8FFD\u52A0", + noSnippets: "\u4FDD\u5B58\u3055\u308C\u305F\u74B0\u5883\u5909\u6570\u30B9\u30CB\u30DA\u30C3\u30C8\u306F\u3042\u308A\u307E\u305B\u3093\u3002+\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u73FE\u5728\u306E\u8A2D\u5B9A\u3092\u4FDD\u5B58\u3057\u3066\u304F\u3060\u3055\u3044\u3002", + nameRequired: "\u30B9\u30CB\u30DA\u30C3\u30C8\u306E\u540D\u524D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044", + modal: { + titleEdit: "\u30B9\u30CB\u30DA\u30C3\u30C8\u3092\u7DE8\u96C6", + titleSave: "\u30B9\u30CB\u30DA\u30C3\u30C8\u3092\u4FDD\u5B58", + name: "\u540D\u524D", + namePlaceholder: "\u3053\u306E\u8A2D\u5B9A\u306E\u308F\u304B\u308A\u3084\u3059\u3044\u540D\u524D", + description: "\u8AAC\u660E", + descPlaceholder: "\u4EFB\u610F\u306E\u8AAC\u660E", + envVars: "\u74B0\u5883\u5909\u6570", + envVarsPlaceholder: "KEY=VALUE\u5F62\u5F0F\u30011\u884C\u306B1\u3064\uFF08export\u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9\u5BFE\u5FDC\uFF09", + save: "\u4FDD\u5B58", + update: "\u66F4\u65B0", + cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB" + } + }, + customModelOverrides: { + name: "\u30AB\u30B9\u30BF\u30E0\u30E2\u30C7\u30EB\u306E\u4E0A\u66F8\u304D", + desc: "\u30AB\u30B9\u30BF\u30E0\u30E2\u30C7\u30EB\u306E\u30E2\u30C7\u30EB\u30BB\u30EC\u30AF\u30BF\u30FC\u8868\u793A\u540D\u3068\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u30A6\u30A3\u30F3\u30C9\u30A6\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3057\u307E\u3059\u3002" + }, + customModelAliases: { + placeholder: "\u30A8\u30A4\u30EA\u30A2\u30B9" + }, + customContextLimits: { + name: "\u30AB\u30B9\u30BF\u30E0\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u5236\u9650", + desc: "\u30AB\u30B9\u30BF\u30E0\u30E2\u30C7\u30EB\u306E\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u30A6\u30A3\u30F3\u30C9\u30A6\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3057\u307E\u3059\u3002\u30C7\u30D5\u30A9\u30EB\u30C8\uFF08200k\u30C8\u30FC\u30AF\u30F3\uFF09\u3092\u4F7F\u7528\u3059\u308B\u5834\u5408\u306F\u7A7A\u6B04\u306E\u307E\u307E\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002", + invalid: "\u7121\u52B9\u306A\u5F62\u5F0F\u3067\u3059\u3002\u4F7F\u7528\uFF1A256k\u30011m\u3001\u307E\u305F\u306F\u6B63\u78BA\u306A\u6570\u5024\uFF081000-10000000\uFF09\u3002" + }, + enableOpus1M: { + name: "Opus 1M\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u30A6\u30A3\u30F3\u30C9\u30A6", + desc: "\u30E2\u30C7\u30EB\u30BB\u30EC\u30AF\u30BF\u30FC\u306BOpus 1M\u3092\u8868\u793A\u3057\u307E\u3059\u3002Max\u3001Team\u3001Enterprise\u30D7\u30E9\u30F3\u306B\u542B\u307E\u308C\u307E\u3059\u3002API\u304A\u3088\u3073Pro\u30E6\u30FC\u30B6\u30FC\u306F\u8FFD\u52A0\u4F7F\u7528\u91CF\u304C\u5FC5\u8981\u3067\u3059\u3002" + }, + enableSonnet1M: { + name: "Sonnet 1M\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u30A6\u30A3\u30F3\u30C9\u30A6", + desc: "\u30E2\u30C7\u30EB\u30BB\u30EC\u30AF\u30BF\u30FC\u306BSonnet 1M\u3092\u8868\u793A\u3057\u307E\u3059\u3002Max\u3001Team\u3001Enterprise\u30D7\u30E9\u30F3\u3067\u306F\u8FFD\u52A0\u4F7F\u7528\u91CF\u304C\u5FC5\u8981\u3067\u3059\u3002API\u304A\u3088\u3073Pro\u30E6\u30FC\u30B6\u30FC\u306F\u8FFD\u52A0\u4F7F\u7528\u91CF\u304C\u5FC5\u8981\u3067\u3059\u3002" + }, + customModels: { + name: "Custom models", + desc: "Append additional Claude model IDs to the picker, one per line. Environment model overrides still replace the picker.", + placeholder: "claude-opus-4-6\nclaude-opus-4-6[1m]\nclaude-opus-4-5-20251101" + }, + enableChrome: { + name: "Chrome\u62E1\u5F35\u6A5F\u80FD\u3092\u6709\u52B9\u5316", + desc: "claude-in-chrome\u62E1\u5F35\u6A5F\u80FD\u3092\u901A\u3058\u3066Claude\u304CChrome\u3068\u9023\u643A\u3067\u304D\u308B\u3088\u3046\u306B\u3057\u307E\u3059\u3002\u62E1\u5F35\u6A5F\u80FD\u306E\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u304C\u5FC5\u8981\u3067\u3059\u3002\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u518D\u8D77\u52D5\u304C\u5FC5\u8981\u3067\u3059\u3002" + }, + enableBangBash: { + name: "bash \u30E2\u30FC\u30C9 (!) \u3092\u6709\u52B9\u5316", + desc: "\u5165\u529B\u6B04\u304C\u7A7A\u306E\u72B6\u614B\u3067 ! \u3092\u5165\u529B\u3059\u308B\u3068 bash \u30E2\u30FC\u30C9\u306B\u5165\u308A\u307E\u3059\u3002Node.js \u306E child_process \u7D4C\u7531\u3067\u30B3\u30DE\u30F3\u30C9\u3092\u76F4\u63A5\u5B9F\u884C\u3057\u307E\u3059\u3002\u30D3\u30E5\u30FC\u306E\u518D\u30AA\u30FC\u30D7\u30F3\u304C\u5FC5\u8981\u3067\u3059\u3002", + validation: { + noNode: "PATH \u306B Node.js \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002Node.js \u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3059\u308B\u304B\u3001PATH \u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002" + } + }, + maxTabs: { + name: "\u6700\u5927\u30C1\u30E3\u30C3\u30C8\u30BF\u30D6\u6570", + desc: "\u540C\u6642\u306B\u958B\u3051\u308B\u6700\u5927\u30C1\u30E3\u30C3\u30C8\u30BF\u30D6\u6570\uFF083-10\uFF09\u3002\u5404\u30BF\u30D6\u306F\u500B\u5225\u306E Claude \u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002", + warning: "5 \u30BF\u30D6\u3092\u8D85\u3048\u308B\u3068\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u3084\u30E1\u30E2\u30EA\u4F7F\u7528\u91CF\u306B\u5F71\u97FF\u3059\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002" + }, + tabBarPosition: { + name: "\u30BF\u30D6\u30D0\u30FC\u306E\u4F4D\u7F6E", + desc: "\u30BF\u30D6\u30D0\u30C3\u30B8\u3068\u30A2\u30AF\u30B7\u30E7\u30F3\u30DC\u30BF\u30F3\u306E\u8868\u793A\u4F4D\u7F6E\u3092\u9078\u629E", + input: "\u5165\u529B\u6B04\u306E\u4E0A\uFF08\u30C7\u30D5\u30A9\u30EB\u30C8\uFF09", + header: "\u30D8\u30C3\u30C0\u30FC\u5185" + }, + enableAutoScroll: { + name: "\u30B9\u30C8\u30EA\u30FC\u30DF\u30F3\u30B0\u4E2D\u306E\u81EA\u52D5\u30B9\u30AF\u30ED\u30FC\u30EB", + desc: "Claude\u304C\u5FDC\u7B54\u3092\u30B9\u30C8\u30EA\u30FC\u30DF\u30F3\u30B0\u3057\u3066\u3044\u308B\u9593\u3001\u81EA\u52D5\u7684\u306B\u4E0B\u306B\u30B9\u30AF\u30ED\u30FC\u30EB\u3057\u307E\u3059\u3002\u7121\u52B9\u306B\u3059\u308B\u3068\u4E0A\u90E8\u306B\u7559\u307E\u308A\u3001\u6700\u521D\u304B\u3089\u8AAD\u3080\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002" + }, + deferMathRenderingDuringStreaming: { + name: "\u30B9\u30C8\u30EA\u30FC\u30DF\u30F3\u30B0\u4E2D\u306E\u6570\u5F0F\u30EC\u30F3\u30C0\u30EA\u30F3\u30B0\u3092\u9045\u5EF6", + desc: "\u5FDC\u7B54\u306E\u30B9\u30C8\u30EA\u30FC\u30DF\u30F3\u30B0\u4E2D\u306F\u751F\u306E LaTeX \u3092\u8868\u793A\u3057\u3001\u5404\u30C6\u30AD\u30B9\u30C8\u30D6\u30ED\u30C3\u30AF\u306E\u5B8C\u4E86\u6642\u306B\u4E00\u5EA6\u3060\u3051\u6570\u5F0F\u3092\u30EC\u30F3\u30C0\u30EA\u30F3\u30B0\u3057\u307E\u3059\u3002" + }, + chatViewPlacement: { + name: "Claudian \u3092\u958B\u304F\u5834\u6240", + desc: "\u30C1\u30E3\u30C3\u30C8\u30D1\u30CD\u30EB\u3092\u4F5C\u6210\u3059\u308B\u3068\u304D\u306B\u958B\u304F\u5834\u6240\u3092\u9078\u629E\u3057\u307E\u3059", + rightSidebar: "\u53F3\u30B5\u30A4\u30C9\u30D0\u30FC", + leftSidebar: "\u5DE6\u30B5\u30A4\u30C9\u30D0\u30FC", + mainTab: "\u30E1\u30A4\u30F3\u30A8\u30C7\u30A3\u30BF\u30BF\u30D6" + }, + cliPath: { + name: "Claude CLI \u30D1\u30B9", + desc: "Claude Code CLI \u306E\u30AB\u30B9\u30BF\u30E0\u30D1\u30B9\u3002\u7A7A\u6B04\u3067\u81EA\u52D5\u691C\u51FA\u3092\u4F7F\u7528\u3002", + descWindows: "\u30CD\u30A4\u30C6\u30A3\u30D6\u30A4\u30F3\u30B9\u30C8\u30FC\u30E9\u30FC\u306E\u5834\u5408\u306F claude.exe \u3092\u4F7F\u7528\u3002npm/pnpm/yarn \u3084\u305D\u306E\u4ED6\u306E\u30D1\u30C3\u30B1\u30FC\u30B8\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC\u3067\u306E\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306E\u5834\u5408\u306F cli-wrapper.cjs \u30D1\u30B9\u3092\u4F7F\u7528\uFF08claude.cmd \u3067\u306F\u306A\u3044\uFF09\u3002", + descUnix: '"which claude" \u306E\u51FA\u529B\u3092\u8CBC\u308A\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044 - \u30CD\u30A4\u30C6\u30A3\u30D6\u3068 npm/pnpm/yarn \u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306E\u4E21\u65B9\u3067\u52D5\u4F5C\u3057\u307E\u3059\u3002', + validation: { + notExist: "\u30D1\u30B9\u304C\u5B58\u5728\u3057\u307E\u305B\u3093", + isDirectory: "\u30D1\u30B9\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3067\u30D5\u30A1\u30A4\u30EB\u3067\u306F\u3042\u308A\u307E\u305B\u3093" + } + }, + language: { + name: "\u8A00\u8A9E", + desc: "\u30D7\u30E9\u30B0\u30A4\u30F3\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9\u306E\u8868\u793A\u8A00\u8A9E\u3092\u5909\u66F4" + } +}; +var ja_default = { + common: common5, + chat: chat5, + settings: settings5 +}; + +// src/i18n/locales/ko.json +var ko_exports = {}; +__export(ko_exports, { + chat: () => chat6, + common: () => common6, + default: () => ko_default, + settings: () => settings6 +}); +var common6 = { + save: "\uC800\uC7A5", + cancel: "\uCDE8\uC18C", + delete: "\uC0AD\uC81C", + edit: "\uD3B8\uC9D1", + add: "\uCD94\uAC00", + remove: "\uC81C\uAC70", + clear: "\uC9C0\uC6B0\uAE30", + clearAll: "\uBAA8\uB450 \uC9C0\uC6B0\uAE30", + loading: "\uB85C\uB529 \uC911", + error: "\uC624\uB958", + success: "\uC131\uACF5", + warning: "\uACBD\uACE0", + confirm: "\uD655\uC778", + settings: "\uC124\uC815", + advanced: "\uACE0\uAE09", + enabled: "\uD65C\uC131\uD654", + disabled: "\uBE44\uD65C\uC131\uD654", + platform: "\uD50C\uB7AB\uD3FC", + refresh: "\uC0C8\uB85C\uACE0\uCE68", + rewind: "\uB418\uAC10\uAE30" +}; +var chat6 = { + rewind: { + confirmMessage: "\uC774 \uC2DC\uC810\uC73C\uB85C \uB418\uAC10\uC73C\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? \uC774 \uBA54\uC2DC\uC9C0 \uC774\uD6C4\uC758 \uD30C\uC77C \uBCC0\uACBD \uC0AC\uD56D\uC774 \uB418\uB3CC\uB824\uC9D1\uB2C8\uB2E4. \uC218\uB3D9\uC73C\uB85C \uB610\uB294 bash\uB97C \uD1B5\uD574 \uD3B8\uC9D1\uB41C \uD30C\uC77C\uC5D0\uB294 \uC601\uD5A5\uC744 \uBBF8\uCE58\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", + confirmMessageConversationOnly: "\uB300\uD654\uB97C \uC774 \uC2DC\uC810\uC73C\uB85C \uB418\uAC10\uC73C\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? \uD30C\uC77C \uBCC0\uACBD \uC0AC\uD56D\uC740 \uC720\uC9C0\uB429\uB2C8\uB2E4.", + confirmButton: "\uB418\uAC10\uAE30", + ariaLabel: "\uC5EC\uAE30\uB85C \uB418\uAC10\uAE30", + menuConversationOnly: "\uB300\uD654\uB9CC \uB418\uAC10\uAE30", + menuCodeAndConversation: "\uCF54\uB4DC + \uB300\uD654 \uB418\uAC10\uAE30", + notice: "\uB418\uAC10\uAE30 \uC644\uB8CC: {count}\uAC1C \uD30C\uC77C \uBCF5\uC6D0\uB428", + noticeConversationOnly: "\uB300\uD654\uB97C \uB418\uAC10\uC558\uC2B5\uB2C8\uB2E4. \uD30C\uC77C \uBCC0\uACBD \uC0AC\uD56D\uC740 \uC720\uC9C0\uB418\uC5C8\uC2B5\uB2C8\uB2E4", + noticeSaveFailed: "\uB418\uAC10\uAE30 \uC644\uB8CC: {count}\uAC1C \uD30C\uC77C \uBCF5\uC6D0\uB428, \uD558\uC9C0\uB9CC \uC0C1\uD0DC\uB97C \uC800\uC7A5\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: {error}", + noticeConversationOnlySaveFailed: "\uB300\uD654\uB97C \uB418\uAC10\uC558\uC9C0\uB9CC \uC0C1\uD0DC\uB97C \uC800\uC7A5\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: {error}", + failed: "\uB418\uAC10\uAE30 \uC2E4\uD328: {error}", + cannot: "\uB418\uAC10\uAE30 \uBD88\uAC00: {error}", + unavailableStreaming: "\uC2A4\uD2B8\uB9AC\uBC0D \uC911\uC5D0\uB294 \uB418\uAC10\uAE30\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4", + unavailableNoUuid: "\uB418\uAC10\uAE30 \uBD88\uAC00: \uBA54\uC2DC\uC9C0 \uC2DD\uBCC4\uC790 \uB204\uB77D" + }, + fork: { + ariaLabel: "\uB300\uD654 \uBD84\uAE30", + chooseTarget: "\uB300\uD654 \uBD84\uAE30", + targetNewTab: "\uC0C8 \uD0ED", + targetCurrentTab: "\uD604\uC7AC \uD0ED", + maxTabsReached: "\uBD84\uAE30 \uBD88\uAC00: \uCD5C\uB300 {count}\uAC1C \uD0ED\uC5D0 \uB3C4\uB2EC\uD588\uC2B5\uB2C8\uB2E4", + notice: "\uC0C8 \uD0ED\uC73C\uB85C \uBD84\uAE30\uB428", + noticeCurrentTab: "\uD604\uC7AC \uD0ED\uC5D0\uC11C \uBD84\uAE30\uB428", + failed: "\uBD84\uAE30 \uC2E4\uD328: {error}", + unavailableStreaming: "\uC2A4\uD2B8\uB9AC\uBC0D \uC911\uC5D0\uB294 \uBD84\uAE30\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4", + unavailableNoUuid: "\uBD84\uAE30 \uBD88\uAC00: \uBA54\uC2DC\uC9C0 \uC2DD\uBCC4\uC790 \uB204\uB77D", + unavailableNoResponse: "\uBD84\uAE30 \uBD88\uAC00: \uBD84\uAE30\uD560 \uC751\uB2F5\uC774 \uC5C6\uC2B5\uB2C8\uB2E4", + errorMessageNotFound: "\uBA54\uC2DC\uC9C0\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4", + errorNoSession: "\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uC138\uC158 ID\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", + errorNoActiveTab: "\uD65C\uC131 \uD0ED\uC774 \uC5C6\uC2B5\uB2C8\uB2E4", + commandNoMessages: "\uD3EC\uD06C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: \uB300\uD654\uC5D0 \uBA54\uC2DC\uC9C0\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", + commandNoAssistantUuid: "\uD3EC\uD06C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: \uC2DD\uBCC4\uC790\uAC00 \uC788\uB294 \uC5B4\uC2DC\uC2A4\uD134\uD2B8 \uC751\uB2F5\uC774 \uC5C6\uC2B5\uB2C8\uB2E4" + }, + bangBash: { + placeholder: "> bash \uBA85\uB839 \uC2E4\uD589...", + commandPanel: "\uBA85\uB839 \uD328\uB110", + copyAriaLabel: "\uCD5C\uC2E0 \uBA85\uB839 \uCD9C\uB825\uC744 \uBCF5\uC0AC", + clearAriaLabel: "bash \uCD9C\uB825 \uC9C0\uC6B0\uAE30", + commandLabel: "{command}", + statusLabel: "\uC0C1\uD0DC: {status}", + collapseOutput: "\uBA85\uB839 \uCD9C\uB825 \uC811\uAE30", + expandOutput: "\uBA85\uB839 \uCD9C\uB825 \uD3BC\uCE58\uAE30", + running: "\uC2E4\uD589 \uC911...", + copyFailed: "\uD074\uB9BD\uBCF4\uB4DC\uC5D0 \uBCF5\uC0AC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4" + } +}; +var settings6 = { + title: "Claudian \uC124\uC815", + tabs: { + general: "\uC77C\uBC18", + claude: "Claude", + codex: "Codex" + }, + display: "\uD45C\uC2DC", + conversations: "\uB300\uD654", + content: "\uCF58\uD150\uCE20", + input: "\uC785\uB825", + setup: "\uC124\uC815", + models: "\uBAA8\uB378", + experimental: "\uC2E4\uD5D8\uC801 \uAE30\uB2A5", + userName: { + name: "Claudian\uC774 \uB2F9\uC2E0\uC744 \uC5B4\uB5BB\uAC8C \uBD88\uB7EC\uC57C \uD569\uB2C8\uAE4C?", + desc: "\uAC1C\uC778\uD654\uB41C \uC778\uC0AC\uC5D0 \uC0AC\uC6A9\uD560 \uC774\uB984 (\uBE44\uC6CC\uB450\uBA74 \uC77C\uBC18 \uC778\uC0AC)" + }, + excludedTags: { + name: "\uC81C\uC678 \uD0DC\uADF8", + desc: "\uC774 \uD0DC\uADF8\uAC00 \uD3EC\uD568\uB41C \uB178\uD2B8\uB294 \uC790\uB3D9\uC73C\uB85C \uCEE8\uD14D\uC2A4\uD2B8\uB85C \uB85C\uB4DC\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 (\uD55C \uC904\uC5D0 \uD558\uB098, # \uC81C\uC678)" + }, + mediaFolder: { + name: "\uBBF8\uB514\uC5B4 \uD3F4\uB354", + desc: "\uCCA8\uBD80 \uD30C\uC77C/\uC774\uBBF8\uC9C0\uB97C \uC800\uC7A5\uD560 \uD3F4\uB354. \uB178\uD2B8\uAC00 ![[image.jpg]]\uB97C \uC0AC\uC6A9\uD560 \uB54C Claude\uAC00 \uC5EC\uAE30\uC11C \uCC3E\uC2B5\uB2C8\uB2E4. \uBE44\uC6CC\uB450\uBA74 \uC800\uC7A5\uC18C \uB8E8\uD2B8 \uC0AC\uC6A9." + }, + systemPrompt: { + name: "\uCEE4\uC2A4\uD140 \uC2DC\uC2A4\uD15C \uD504\uB86C\uD504\uD2B8", + desc: "\uAE30\uBCF8 \uC2DC\uC2A4\uD15C \uD504\uB86C\uD504\uD2B8\uC5D0 \uCD94\uAC00\uB418\uB294 \uCD94\uAC00 \uC9C0\uCE68" + }, + autoTitle: { + name: "\uB300\uD654 \uC81C\uBAA9 \uC790\uB3D9 \uC0DD\uC131", + desc: "\uCCAB \uBC88\uC9F8 \uC0AC\uC6A9\uC790 \uBA54\uC2DC\uC9C0 \uC804\uC1A1 \uD6C4 \uC790\uB3D9\uC73C\uB85C \uB300\uD654 \uC81C\uBAA9\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4." + }, + titleModel: { + name: "\uC81C\uBAA9 \uC0DD\uC131 \uBAA8\uB378", + desc: "\uB300\uD654 \uC81C\uBAA9\uC744 \uC790\uB3D9 \uC0DD\uC131\uD558\uB294 \uB370 \uC0AC\uC6A9\uB418\uB294 \uBAA8\uB378.", + auto: "\uC790\uB3D9 (Haiku)" + }, + navMappings: { + name: "Vim \uC2A4\uD0C0\uC77C \uB124\uBE44\uAC8C\uC774\uC158 \uB9E4\uD551", + desc: '\uD55C \uC904\uC5D0 \uD558\uB098\uC758 \uB9E4\uD551. \uD615\uC2DD: "map <\uD0A4> <\uB3D9\uC791>" (\uB3D9\uC791: scrollUp, scrollDown, focusInput).' + }, + requireCommandOrControlEnterToSend: { + name: "Command/Ctrl+Enter\uB85C \uBCF4\uB0B4\uAE30 \uD544\uC218", + desc: "\uD65C\uC131\uD654\uD558\uBA74 Enter\uB294 \uC904\uBC14\uAFC8\uC744 \uC0BD\uC785\uD569\uB2C8\uB2E4. macOS\uC5D0\uC11C\uB294 Command+Enter, Windows\uC640 Linux\uC5D0\uC11C\uB294 Ctrl+Enter\uB85C \uBCF4\uB0C5\uB2C8\uB2E4." + }, + hotkeys: "\uB2E8\uCD95\uD0A4", + inlineEditHotkey: { + name: "\uC778\uB77C\uC778 \uD3B8\uC9D1", + descWithKey: "\uD604\uC7AC \uB2E8\uCD95\uD0A4: {hotkey}", + descNoKey: "\uB2E8\uCD95\uD0A4 \uBBF8\uC124\uC815", + btnChange: "\uBCC0\uACBD", + btnSet: "\uB2E8\uCD95\uD0A4 \uC124\uC815" + }, + openChatHotkey: { + name: "\uCC44\uD305 \uC5F4\uAE30", + descWithKey: "\uD604\uC7AC \uB2E8\uCD95\uD0A4: {hotkey}", + descNoKey: "\uB2E8\uCD95\uD0A4 \uBBF8\uC124\uC815", + btnChange: "\uBCC0\uACBD", + btnSet: "\uB2E8\uCD95\uD0A4 \uC124\uC815" + }, + newSessionHotkey: { + name: "\uC0C8 \uC138\uC158", + descWithKey: "\uD604\uC7AC \uB2E8\uCD95\uD0A4: {hotkey}", + descNoKey: "\uB2E8\uCD95\uD0A4 \uBBF8\uC124\uC815", + btnChange: "\uBCC0\uACBD", + btnSet: "\uB2E8\uCD95\uD0A4 \uC124\uC815" + }, + newTabHotkey: { + name: "\uC0C8 \uD0ED", + descWithKey: "\uD604\uC7AC \uB2E8\uCD95\uD0A4: {hotkey}", + descNoKey: "\uB2E8\uCD95\uD0A4 \uBBF8\uC124\uC815", + btnChange: "\uBCC0\uACBD", + btnSet: "\uB2E8\uCD95\uD0A4 \uC124\uC815" + }, + closeTabHotkey: { + name: "\uD0ED \uB2EB\uAE30", + descWithKey: "\uD604\uC7AC \uB2E8\uCD95\uD0A4: {hotkey}", + descNoKey: "\uB2E8\uCD95\uD0A4 \uBBF8\uC124\uC815", + btnChange: "\uBCC0\uACBD", + btnSet: "\uB2E8\uCD95\uD0A4 \uC124\uC815" + }, + slashCommands: { + name: "\uBA85\uB839\uC5B4\uC640 \uC2A4\uD0AC", + desc: ".claude/commands/ \uBC0F .claude/skills/\uC5D0 \uC800\uC7A5\uB41C Vault \uC218\uC900\uC758 \uBA85\uB839\uC5B4\uC640 \uC2A4\uD0AC\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4. /\uC774\uB984\uC73C\uB85C \uD2B8\uB9AC\uAC70\uB429\uB2C8\uB2E4." + }, + hiddenSlashCommands: { + name: "\uC228\uACA8\uC9C4 \uBA85\uB839\uC5B4\uC640 \uC2A4\uD0AC", + desc: "\uB4DC\uB86D\uB2E4\uC6B4\uC5D0\uC11C \uD2B9\uC815 \uBA85\uB839\uC5B4\uC640 \uC2A4\uD0AC\uC744 \uC228\uAE41\uB2C8\uB2E4. Claudian\uACFC \uAD00\uB828 \uC5C6\uB294 Claude Code \uD56D\uBAA9\uC744 \uC228\uAE30\uB294 \uB370 \uC720\uC6A9\uD569\uB2C8\uB2E4. \uC55E\uC758 \uC2AC\uB798\uC2DC \uC5C6\uC774 \uC774\uB984\uC744 \uD55C \uC904\uC5D0 \uD558\uB098\uC529 \uC785\uB825\uD558\uC138\uC694.", + placeholder: "commit\nbuild\ntest" + }, + mcpServers: { + name: "MCP \uC11C\uBC84", + desc: ".claude/mcp.json\uC5D0 \uC800\uC7A5\uB41C Vault \uC218\uC900\uC758 MCP \uC11C\uBC84 \uAD6C\uC131\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4. \uCEE8\uD14D\uC2A4\uD2B8 \uC800\uC7A5 \uBAA8\uB4DC \uC11C\uBC84\uB294 @mention\uC73C\uB85C \uD65C\uC131\uD654\uD574\uC57C \uD569\uB2C8\uB2E4." + }, + plugins: { + name: "Claude Code \uD50C\uB7EC\uADF8\uC778", + desc: "~/.claude/plugins\uC5D0\uC11C \uBC1C\uACAC\uB41C Claude Code \uD50C\uB7EC\uADF8\uC778\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4. \uD65C\uC131\uD654\uB41C \uD50C\uB7EC\uADF8\uC778\uC740 .claude/settings.json\uC5D0 Vault\uBCC4\uB85C \uC800\uC7A5\uB429\uB2C8\uB2E4." + }, + subagents: { + name: "\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8", + desc: ".claude/agents/\uC5D0 \uC800\uC7A5\uB41C Vault \uC218\uC900\uC758 \uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uB97C \uAD00\uB9AC\uD569\uB2C8\uB2E4. \uAC01 Markdown \uD30C\uC77C\uC774 \uD558\uB098\uC758 \uCEE4\uC2A4\uD140 \uC5D0\uC774\uC804\uD2B8\uB97C \uC815\uC758\uD569\uB2C8\uB2E4.", + noAgents: "\uAD6C\uC131\uB41C \uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. +\uB97C \uD074\uB9AD\uD574 \uC0C8\uB85C \uB9CC\uB4DC\uC138\uC694.", + deleteConfirm: '\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 "{name}"\uC744 \uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?', + saveFailed: "\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uB97C \uC800\uC7A5\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: {message}", + refreshFailed: "\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uB97C \uC0C8\uB85C\uACE0\uCE68\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: {message}", + deleteFailed: "\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uB97C \uC0AD\uC81C\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: {message}", + renameCleanupFailed: '\uACBD\uACE0: "{name}"\uC758 \uC774\uC804 \uD30C\uC77C\uC744 \uC81C\uAC70\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4', + created: '\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 "{name}"\uB97C \uC0DD\uC131\uD588\uC2B5\uB2C8\uB2E4', + updated: '\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 "{name}"\uB97C \uC5C5\uB370\uC774\uD2B8\uD588\uC2B5\uB2C8\uB2E4', + deleted: '\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 "{name}"\uB97C \uC0AD\uC81C\uD588\uC2B5\uB2C8\uB2E4', + duplicateName: '"{name}"\uC774\uB77C\uB294 \uC774\uB984\uC758 \uC5D0\uC774\uC804\uD2B8\uAC00 \uC774\uBBF8 \uC788\uC2B5\uB2C8\uB2E4', + descriptionRequired: "\uC124\uBA85\uC740 \uD544\uC218\uC785\uB2C8\uB2E4", + promptRequired: "\uC2DC\uC2A4\uD15C \uD504\uB86C\uD504\uD2B8\uB294 \uD544\uC218\uC785\uB2C8\uB2E4", + modal: { + titleEdit: "\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 \uD3B8\uC9D1", + titleAdd: "\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 \uCD94\uAC00", + name: "\uC774\uB984", + nameDesc: "\uC18C\uBB38\uC790, \uC22B\uC790, \uD558\uC774\uD508\uB9CC \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4", + namePlaceholder: "code-reviewer", + description: "\uC124\uBA85", + descriptionDesc: "\uC774 \uC5D0\uC774\uC804\uD2B8\uC5D0 \uB300\uD55C \uAC04\uB2E8\uD55C \uC124\uBA85", + descriptionPlaceholder: "\uCF54\uB4DC\uC758 \uBC84\uADF8\uC640 \uC2A4\uD0C0\uC77C\uC744 \uAC80\uD1A0\uD569\uB2C8\uB2E4", + advancedOptions: "\uACE0\uAE09 \uC635\uC158", + model: "\uBAA8\uB378", + modelDesc: "\uC774 \uC5D0\uC774\uC804\uD2B8\uC5D0 \uC0AC\uC6A9\uD560 \uBAA8\uB378 \uC7AC\uC815\uC758", + tools: "\uB3C4\uAD6C", + toolsDesc: "\uD5C8\uC6A9\uD560 \uB3C4\uAD6C\uB97C \uC27C\uD45C\uB85C \uAD6C\uBD84\uD574 \uC785\uB825\uD558\uC138\uC694 (\uBE44\uC6CC\uB450\uBA74 \uBAA8\uB450 \uD5C8\uC6A9)", + disallowedTools: "\uAE08\uC9C0 \uB3C4\uAD6C", + disallowedToolsDesc: "\uAE08\uC9C0\uD560 \uB3C4\uAD6C\uB97C \uC27C\uD45C\uB85C \uAD6C\uBD84\uD574 \uC785\uB825\uD558\uC138\uC694", + skills: "\uC2A4\uD0AC", + skillsDesc: "\uC2A4\uD0AC \uBAA9\uB85D\uC744 \uC27C\uD45C\uB85C \uAD6C\uBD84\uD574 \uC785\uB825\uD558\uC138\uC694", + prompt: "\uC2DC\uC2A4\uD15C \uD504\uB86C\uD504\uD2B8", + promptDesc: "\uC5D0\uC774\uC804\uD2B8\uC6A9 \uC9C0\uCE68", + promptPlaceholder: "\uB2F9\uC2E0\uC740 \uCF54\uB4DC \uB9AC\uBDF0\uC5B4\uC785\uB2C8\uB2E4. \uC8FC\uC5B4\uC9C4 \uCF54\uB4DC\uB97C \uBD84\uC11D\uD558\uC5EC..." + } + }, + safety: "\uBCF4\uC548", + loadUserSettings: { + name: "\uC0AC\uC6A9\uC790 Claude \uC124\uC815 \uB85C\uB4DC", + desc: "~/.claude/settings.json\uC744 \uB85C\uB4DC\uD569\uB2C8\uB2E4. \uD65C\uC131\uD654\uD558\uBA74 \uC0AC\uC6A9\uC790\uC758 Claude Code \uD5C8\uC6A9 \uADDC\uCE59\uC774 \uBCF4\uC548 \uBAA8\uB4DC\uB97C \uC6B0\uD68C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4." + }, + claudeSafeMode: { + name: "Safe mode", + desc: "Permission mode used when the Safe toggle is active." + }, + codexSafeMode: { + name: "Safe mode", + desc: "Sandbox mode used when the Safe toggle is active." + }, + environment: "\uD658\uACBD", + customVariables: { + name: "\uCEE4\uC2A4\uD140 \uBCC0\uC218", + desc: "Claude SDK \uD658\uACBD \uBCC0\uC218 (KEY=VALUE \uD615\uC2DD, \uD55C \uC904\uC5D0 \uD558\uB098). export \uC811\uB450\uC0AC \uC9C0\uC6D0." + }, + envSnippets: { + name: "\uC2A4\uB2C8\uD3AB", + addBtn: "\uC2A4\uB2C8\uD3AB \uCD94\uAC00", + noSnippets: "\uC800\uC7A5\uB41C \uD658\uACBD \uBCC0\uC218 \uC2A4\uB2C8\uD3AB\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. +\uB97C \uD074\uB9AD\uD558\uC5EC \uD604\uC7AC \uAD6C\uC131\uC744 \uC800\uC7A5\uD558\uC138\uC694.", + nameRequired: "\uC2A4\uB2C8\uD3AB \uC774\uB984\uC744 \uC785\uB825\uD558\uC138\uC694", + modal: { + titleEdit: "\uC2A4\uB2C8\uD3AB \uD3B8\uC9D1", + titleSave: "\uC2A4\uB2C8\uD3AB \uC800\uC7A5", + name: "\uC774\uB984", + namePlaceholder: "\uC774 \uAD6C\uC131\uC5D0 \uB300\uD55C \uC124\uBA85\uC801\uC778 \uC774\uB984", + description: "\uC124\uBA85", + descPlaceholder: "\uC120\uD0DD\uC801 \uC124\uBA85", + envVars: "\uD658\uACBD \uBCC0\uC218", + envVarsPlaceholder: "KEY=VALUE \uD615\uC2DD, \uD55C \uC904\uC5D0 \uD558\uB098 (export \uC811\uB450\uC0AC \uC9C0\uC6D0)", + save: "\uC800\uC7A5", + update: "\uC5C5\uB370\uC774\uD2B8", + cancel: "\uCDE8\uC18C" + } + }, + customModelOverrides: { + name: "\uC0AC\uC6A9\uC790 \uC815\uC758 \uBAA8\uB378 \uC7AC\uC815\uC758", + desc: "\uC0AC\uC6A9\uC790 \uC815\uC758 \uBAA8\uB378\uC758 \uBAA8\uB378 \uC120\uD0DD\uAE30 \uBCC4\uCE6D\uACFC \uCEE8\uD14D\uC2A4\uD2B8 \uCC3D \uD06C\uAE30\uB97C \uC124\uC815\uD569\uB2C8\uB2E4." + }, + customModelAliases: { + placeholder: "\uBCC4\uCE6D" + }, + customContextLimits: { + name: "\uC0AC\uC6A9\uC790 \uC815\uC758 \uCEE8\uD14D\uC2A4\uD2B8 \uC81C\uD55C", + desc: "\uC0AC\uC6A9\uC790 \uC815\uC758 \uBAA8\uB378\uC758 \uCEE8\uD14D\uC2A4\uD2B8 \uCC3D \uD06C\uAE30\uB97C \uC124\uC815\uD569\uB2C8\uB2E4. \uAE30\uBCF8\uAC12(200k \uD1A0\uD070)\uC744 \uC0AC\uC6A9\uD558\uB824\uBA74 \uBE44\uC6CC\uB450\uC138\uC694.", + invalid: "\uC798\uBABB\uB41C \uD615\uC2DD\uC785\uB2C8\uB2E4. \uC0AC\uC6A9: 256k, 1m \uB610\uB294 \uC815\uD655\uD55C \uC22B\uC790(1000-10000000)." + }, + enableOpus1M: { + name: "Opus 1M \uCEE8\uD14D\uC2A4\uD2B8 \uC708\uB3C4\uC6B0", + desc: "\uBAA8\uB378 \uC120\uD0DD\uAE30\uC5D0\uC11C Opus 1M\uC744 \uD45C\uC2DC\uD569\uB2C8\uB2E4. Max, Team, Enterprise \uD50C\uB79C\uC5D0 \uD3EC\uD568\uB429\uB2C8\uB2E4. API \uBC0F Pro \uC0AC\uC6A9\uC790\uB294 \uCD94\uAC00 \uC0AC\uC6A9\uB7C9\uC774 \uD544\uC694\uD569\uB2C8\uB2E4." + }, + enableSonnet1M: { + name: "Sonnet 1M \uCEE8\uD14D\uC2A4\uD2B8 \uC708\uB3C4\uC6B0", + desc: "\uBAA8\uB378 \uC120\uD0DD\uAE30\uC5D0\uC11C Sonnet 1M\uC744 \uD45C\uC2DC\uD569\uB2C8\uB2E4. Max, Team, Enterprise \uD50C\uB79C\uC5D0\uC11C \uCD94\uAC00 \uC0AC\uC6A9\uB7C9\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. API \uBC0F Pro \uC0AC\uC6A9\uC790\uB294 \uCD94\uAC00 \uC0AC\uC6A9\uB7C9\uC774 \uD544\uC694\uD569\uB2C8\uB2E4." + }, + customModels: { + name: "Custom models", + desc: "Append additional Claude model IDs to the picker, one per line. Environment model overrides still replace the picker.", + placeholder: "claude-opus-4-6\nclaude-opus-4-6[1m]\nclaude-opus-4-5-20251101" + }, + enableChrome: { + name: "Chrome \uD655\uC7A5 \uD504\uB85C\uADF8\uB7A8 \uD65C\uC131\uD654", + desc: "claude-in-chrome \uD655\uC7A5 \uD504\uB85C\uADF8\uB7A8\uC744 \uD1B5\uD574 Claude\uAC00 Chrome\uACFC \uC0C1\uD638\uC791\uC6A9\uD560 \uC218 \uC788\uB3C4\uB85D \uD569\uB2C8\uB2E4. \uD655\uC7A5 \uD504\uB85C\uADF8\uB7A8\uC774 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC57C \uD569\uB2C8\uB2E4. \uC138\uC158 \uC7AC\uC2DC\uC791\uC774 \uD544\uC694\uD569\uB2C8\uB2E4." + }, + enableBangBash: { + name: "bash \uBAA8\uB4DC (!) \uD65C\uC131\uD654", + desc: "\uC785\uB825\uCC3D\uC774 \uBE44\uC5B4 \uC788\uC744 \uB54C !\uB97C \uC785\uB825\uD558\uBA74 bash \uBAA8\uB4DC\uB85C \uB4E4\uC5B4\uAC11\uB2C8\uB2E4. Node.js child_process\uB97C \uD1B5\uD574 \uBA85\uB839\uC744 \uC9C1\uC811 \uC2E4\uD589\uD569\uB2C8\uB2E4. \uBCF4\uAE30\uB97C \uB2E4\uC2DC \uC5F4\uC5B4\uC57C \uD569\uB2C8\uB2E4.", + validation: { + noNode: "PATH\uC5D0\uC11C Node.js\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. Node.js\uB97C \uC124\uCE58\uD558\uAC70\uB098 PATH \uC124\uC815\uC744 \uD655\uC778\uD558\uC138\uC694." + } + }, + maxTabs: { + name: "\uCD5C\uB300 \uCC44\uD305 \uD0ED \uC218", + desc: "\uB3D9\uC2DC\uC5D0 \uC5F4 \uC218 \uC788\uB294 \uCD5C\uB300 \uCC44\uD305 \uD0ED \uC218(3-10). \uAC01 \uD0ED\uC740 \uBCC4\uB3C4\uC758 Claude \uC138\uC158\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.", + warning: "5\uAC1C \uD0ED\uC744 \uCD08\uACFC\uD558\uBA74 \uC131\uB2A5 \uBC0F \uBA54\uBAA8\uB9AC \uC0AC\uC6A9\uB7C9\uC5D0 \uC601\uD5A5\uC744 \uC904 \uC218 \uC788\uC2B5\uB2C8\uB2E4." + }, + tabBarPosition: { + name: "\uD0ED \uBC14 \uC704\uCE58", + desc: "\uD0ED \uBC30\uC9C0\uC640 \uC791\uC5C5 \uBC84\uD2BC\uC758 \uD45C\uC2DC \uC704\uCE58 \uC120\uD0DD", + input: "\uC785\uB825\uCC3D \uC704(\uAE30\uBCF8\uAC12)", + header: "\uD5E4\uB354\uC5D0" + }, + enableAutoScroll: { + name: "\uC2A4\uD2B8\uB9AC\uBC0D \uC911 \uC790\uB3D9 \uC2A4\uD06C\uB864", + desc: "Claude\uAC00 \uC751\uB2F5\uC744 \uC2A4\uD2B8\uB9AC\uBC0D\uD558\uB294 \uB3D9\uC548 \uC790\uB3D9\uC73C\uB85C \uC544\uB798\uB85C \uC2A4\uD06C\uB864\uD569\uB2C8\uB2E4. \uBE44\uD65C\uC131\uD654\uD558\uBA74 \uC0C1\uB2E8\uC5D0 \uBA38\uBB3C\uB7EC \uCC98\uC74C\uBD80\uD130 \uC77D\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4." + }, + deferMathRenderingDuringStreaming: { + name: "\uC2A4\uD2B8\uB9AC\uBC0D \uC911 \uC218\uC2DD \uB80C\uB354\uB9C1 \uC9C0\uC5F0", + desc: "\uC751\uB2F5\uC774 \uC2A4\uD2B8\uB9AC\uBC0D\uB418\uB294 \uB3D9\uC548 \uC6D0\uBCF8 LaTeX\uB97C \uD45C\uC2DC\uD558\uACE0 \uAC01 \uD14D\uC2A4\uD2B8 \uBE14\uB85D\uC774 \uC644\uB8CC\uB418\uBA74 \uC218\uC2DD\uC744 \uD55C \uBC88 \uB80C\uB354\uB9C1\uD569\uB2C8\uB2E4." + }, + chatViewPlacement: { + name: "Claudian \uC5F4 \uC704\uCE58", + desc: "\uCC44\uD305 \uD328\uB110\uC774 \uC0DD\uC131\uB420 \uB54C \uC5F4\uB9B4 \uC704\uCE58\uB97C \uC120\uD0DD\uD569\uB2C8\uB2E4", + rightSidebar: "\uC624\uB978\uCABD \uC0AC\uC774\uB4DC\uBC14", + leftSidebar: "\uC67C\uCABD \uC0AC\uC774\uB4DC\uBC14", + mainTab: "\uBA54\uC778 \uD3B8\uC9D1\uAE30 \uD0ED" + }, + cliPath: { + name: "Claude CLI \uACBD\uB85C", + desc: "Claude Code CLI\uC758 \uC0AC\uC6A9\uC790 \uC815\uC758 \uACBD\uB85C. \uBE44\uC6CC\uB450\uBA74 \uC790\uB3D9 \uAC10\uC9C0 \uC0AC\uC6A9.", + descWindows: "\uB124\uC774\uD2F0\uBE0C \uC124\uCE58 \uD504\uB85C\uADF8\uB7A8\uC758 \uACBD\uC6B0 claude.exe\uB97C \uC0AC\uC6A9\uD558\uC138\uC694. npm/pnpm/yarn \uB610\uB294 \uAE30\uD0C0 \uD328\uD0A4\uC9C0 \uAD00\uB9AC\uC790 \uC124\uCE58\uC758 \uACBD\uC6B0 cli-wrapper.cjs \uACBD\uB85C\uB97C \uC0AC\uC6A9\uD558\uC138\uC694 (claude.cmd\uAC00 \uC544\uB2D8).", + descUnix: '"which claude"\uC758 \uCD9C\uB825\uC744 \uBD99\uC5EC\uB123\uC73C\uC138\uC694 - \uB124\uC774\uD2F0\uBE0C \uBC0F npm/pnpm/yarn \uC124\uCE58 \uBAA8\uB450\uC5D0\uC11C \uC791\uB3D9\uD569\uB2C8\uB2E4.', + validation: { + notExist: "\uACBD\uB85C\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4", + isDirectory: "\uACBD\uB85C\uAC00 \uB514\uB809\uD1A0\uB9AC\uC785\uB2C8\uB2E4 \uD30C\uC77C\uC774 \uC544\uB2D9\uB2C8\uB2E4" + } + }, + language: { + name: "\uC5B8\uC5B4", + desc: "\uD50C\uB7EC\uADF8\uC778 \uC778\uD130\uD398\uC774\uC2A4\uC758 \uD45C\uC2DC \uC5B8\uC5B4 \uBCC0\uACBD" + } +}; +var ko_default = { + common: common6, + chat: chat6, + settings: settings6 +}; + +// src/i18n/locales/pt.json +var pt_exports = {}; +__export(pt_exports, { + chat: () => chat7, + common: () => common7, + default: () => pt_default, + settings: () => settings7 +}); +var common7 = { + save: "Salvar", + cancel: "Cancelar", + delete: "Excluir", + edit: "Editar", + add: "Adicionar", + remove: "Remover", + clear: "Limpar", + clearAll: "Limpar tudo", + loading: "Carregando", + error: "Erro", + success: "Sucesso", + warning: "Aviso", + confirm: "Confirmar", + settings: "Configura\xE7\xF5es", + advanced: "Avan\xE7ado", + enabled: "Ativado", + disabled: "Desativado", + platform: "Plataforma", + refresh: "Atualizar", + rewind: "Retroceder" +}; +var chat7 = { + rewind: { + confirmMessage: "Retroceder at\xE9 este ponto? As altera\xE7\xF5es de arquivos ap\xF3s esta mensagem ser\xE3o revertidas. O retrocesso n\xE3o afeta arquivos editados manualmente ou via bash.", + confirmMessageConversationOnly: "Retroceder a conversa at\xE9 este ponto? As altera\xE7\xF5es de arquivos ser\xE3o mantidas.", + confirmButton: "Retroceder", + ariaLabel: "Retroceder at\xE9 aqui", + menuConversationOnly: "Retroceder somente conversa", + menuCodeAndConversation: "Retroceder c\xF3digo + conversa", + notice: "Retrocedido: {count} arquivo(s) revertido(s)", + noticeConversationOnly: "Conversa retrocedida; altera\xE7\xF5es de arquivos mantidas", + noticeSaveFailed: "Retrocedido: {count} arquivo(s) revertido(s), mas n\xE3o foi poss\xEDvel salvar o estado: {error}", + noticeConversationOnlySaveFailed: "Conversa retrocedida, mas n\xE3o foi poss\xEDvel salvar o estado: {error}", + failed: "Falha ao retroceder: {error}", + cannot: "N\xE3o \xE9 poss\xEDvel retroceder: {error}", + unavailableStreaming: "N\xE3o \xE9 poss\xEDvel retroceder durante a transmiss\xE3o", + unavailableNoUuid: "N\xE3o \xE9 poss\xEDvel retroceder: identificadores de mensagem ausentes" + }, + fork: { + ariaLabel: "Bifurcar conversa", + chooseTarget: "Bifurcar conversa", + targetNewTab: "Nova aba", + targetCurrentTab: "Aba atual", + maxTabsReached: "N\xE3o \xE9 poss\xEDvel bifurcar: m\xE1ximo de {count} abas atingido", + notice: "Bifurcado para nova aba", + noticeCurrentTab: "Bifurcado na aba atual", + failed: "Falha ao bifurcar: {error}", + unavailableStreaming: "N\xE3o \xE9 poss\xEDvel bifurcar durante a transmiss\xE3o", + unavailableNoUuid: "N\xE3o \xE9 poss\xEDvel bifurcar: identificadores de mensagem ausentes", + unavailableNoResponse: "N\xE3o \xE9 poss\xEDvel bifurcar: nenhuma resposta para bifurcar", + errorMessageNotFound: "Mensagem n\xE3o encontrada", + errorNoSession: "Nenhum ID de sess\xE3o dispon\xEDvel", + errorNoActiveTab: "Nenhuma aba ativa", + commandNoMessages: "N\xE3o \xE9 poss\xEDvel bifurcar: n\xE3o h\xE1 mensagens na conversa", + commandNoAssistantUuid: "N\xE3o \xE9 poss\xEDvel bifurcar: n\xE3o h\xE1 resposta do assistente com identificadores" + }, + bangBash: { + placeholder: "> Executar um comando bash...", + commandPanel: "Painel de comandos", + copyAriaLabel: "Copiar a sa\xEDda do comando mais recente", + clearAriaLabel: "Limpar a sa\xEDda do bash", + commandLabel: "{command}", + statusLabel: "Estado: {status}", + collapseOutput: "Recolher a sa\xEDda do comando", + expandOutput: "Expandir a sa\xEDda do comando", + running: "Executando...", + copyFailed: "Falha ao copiar para a \xE1rea de transfer\xEAncia" + } +}; +var settings7 = { + title: "Configura\xE7\xF5es do Claudian", + tabs: { + general: "Geral", + claude: "Claude", + codex: "Codex" + }, + display: "Exibi\xE7\xE3o", + conversations: "Conversas", + content: "Conte\xFAdo", + input: "Entrada", + setup: "Configura\xE7\xE3o", + models: "Modelos", + experimental: "Experimental", + userName: { + name: "Como o Claudian deve cham\xE1-lo?", + desc: "Seu nome para sauda\xE7\xF5es personalizadas (deixe vazio para sauda\xE7\xF5es gen\xE9ricas)" + }, + excludedTags: { + name: "Tags exclu\xEDdas", + desc: "Notas com estas tags n\xE3o ser\xE3o carregadas automaticamente como contexto (uma por linha, sem #)" + }, + mediaFolder: { + name: "Pasta de m\xEDdia", + desc: "Pasta contendo anexos/imagens. Quando notas usam ![[image.jpg]], Claude procurar\xE1 aqui. Deixe vazio para a raiz do reposit\xF3rio." + }, + systemPrompt: { + name: "Prompt de sistema personalizado", + desc: "Instru\xE7\xF5es adicionais anexadas ao prompt de sistema padr\xE3o" + }, + autoTitle: { + name: "Gerar automaticamente t\xEDtulos de conversa", + desc: "Gera automaticamente t\xEDtulos de conversa ap\xF3s a primeira mensagem do usu\xE1rio." + }, + titleModel: { + name: "Modelo de gera\xE7\xE3o de t\xEDtulo", + desc: "Modelo usado para gerar automaticamente t\xEDtulos de conversa.", + auto: "Autom\xE1tico (Haiku)" + }, + navMappings: { + name: "Mapeamentos de navega\xE7\xE3o estilo Vim", + desc: 'Um mapeamento por linha. Formato: "map " (a\xE7\xF5es: scrollUp, scrollDown, focusInput).' + }, + requireCommandOrControlEnterToSend: { + name: "Exigir Command/Ctrl+Enter para enviar", + desc: "Quando ativado, Enter insere uma quebra de linha. Command+Enter envia no macOS; Ctrl+Enter envia no Windows e Linux." + }, + hotkeys: "Atalhos", + inlineEditHotkey: { + name: "Edi\xE7\xE3o em linha", + descWithKey: "Atalho atual: {hotkey}", + descNoKey: "Nenhum atalho definido", + btnChange: "Alterar", + btnSet: "Definir" + }, + openChatHotkey: { + name: "Abrir chat", + descWithKey: "Atalho atual: {hotkey}", + descNoKey: "Nenhum atalho definido", + btnChange: "Alterar", + btnSet: "Definir" + }, + newSessionHotkey: { + name: "Nova sess\xE3o", + descWithKey: "Atalho atual: {hotkey}", + descNoKey: "Nenhum atalho definido", + btnChange: "Alterar", + btnSet: "Definir" + }, + newTabHotkey: { + name: "Nova aba", + descWithKey: "Atalho atual: {hotkey}", + descNoKey: "Nenhum atalho definido", + btnChange: "Alterar", + btnSet: "Definir" + }, + closeTabHotkey: { + name: "Fechar aba", + descWithKey: "Atalho atual: {hotkey}", + descNoKey: "Nenhum atalho definido", + btnChange: "Alterar", + btnSet: "Definir" + }, + slashCommands: { + name: "Comandos e habilidades", + desc: "Gerencie comandos e habilidades a n\xEDvel de vault armazenados em .claude/commands/ e .claude/skills/. Acionados por /nome." + }, + hiddenSlashCommands: { + name: "Comandos e habilidades ocultos", + desc: "Oculta comandos e habilidades espec\xEDficos do menu suspenso. \xDAtil para ocultar entradas do Claude Code que n\xE3o s\xE3o relevantes para o Claudian. Digite os nomes sem a barra inicial, um por linha.", + placeholder: "commit\nbuild\ntest" + }, + mcpServers: { + name: "Servidores MCP", + desc: "Gerencie configura\xE7\xF5es de servidores MCP a n\xEDvel de vault armazenadas em .claude/mcp.json. Servidores com modo de salvamento de contexto exigem @mention para ativar." + }, + plugins: { + name: "Plugins do Claude Code", + desc: "Gerencie plugins do Claude Code descobertos em ~/.claude/plugins. Plugins ativados s\xE3o armazenados por vault em .claude/settings.json." + }, + subagents: { + name: "Subagentes", + desc: "Gerencie subagentes a n\xEDvel de vault armazenados em .claude/agents/. Cada arquivo Markdown define um agente personalizado.", + noAgents: "Nenhum subagente configurado. Clique em + para criar um.", + deleteConfirm: 'Excluir o subagente "{name}"?', + saveFailed: "Falha ao salvar o subagente: {message}", + refreshFailed: "Falha ao atualizar subagentes: {message}", + deleteFailed: "Falha ao excluir o subagente: {message}", + renameCleanupFailed: 'Aviso: n\xE3o foi poss\xEDvel remover o arquivo antigo de "{name}"', + created: 'Subagente "{name}" criado', + updated: 'Subagente "{name}" atualizado', + deleted: 'Subagente "{name}" exclu\xEDdo', + duplicateName: 'J\xE1 existe um agente chamado "{name}"', + descriptionRequired: "A descri\xE7\xE3o \xE9 obrigat\xF3ria", + promptRequired: "O prompt do sistema \xE9 obrigat\xF3rio", + modal: { + titleEdit: "Editar subagente", + titleAdd: "Adicionar subagente", + name: "Nome", + nameDesc: "Use apenas letras min\xFAsculas, n\xFAmeros e h\xEDfens", + namePlaceholder: "code-reviewer", + description: "Descri\xE7\xE3o", + descriptionDesc: "Breve descri\xE7\xE3o deste agente", + descriptionPlaceholder: "Revisa c\xF3digo em busca de bugs e estilo", + advancedOptions: "Op\xE7\xF5es avan\xE7adas", + model: "Modelo", + modelDesc: "Substituir o modelo deste agente", + tools: "Ferramentas", + toolsDesc: "Lista de ferramentas permitidas separadas por v\xEDrgula (vazio = todas)", + disallowedTools: "Ferramentas n\xE3o permitidas", + disallowedToolsDesc: "Lista de ferramentas a desativar separadas por v\xEDrgula", + skills: "Habilidades", + skillsDesc: "Lista de habilidades separadas por v\xEDrgula", + prompt: "Prompt do sistema", + promptDesc: "Instru\xE7\xF5es para o agente", + promptPlaceholder: "Voc\xEA \xE9 um revisor de c\xF3digo. Analise o c\xF3digo fornecido para..." + } + }, + safety: "Seguran\xE7a", + loadUserSettings: { + name: "Carregar configura\xE7\xF5es do usu\xE1rio Claude", + desc: "Carrega ~/.claude/settings.json. Quando habilitado, as regras de permiss\xE3o do usu\xE1rio podem ignorar o modo seguro." + }, + claudeSafeMode: { + name: "Safe mode", + desc: "Permission mode used when the Safe toggle is active." + }, + codexSafeMode: { + name: "Safe mode", + desc: "Sandbox mode used when the Safe toggle is active." + }, + environment: "Ambiente", + customVariables: { + name: "Vari\xE1veis personalizadas", + desc: "Vari\xE1veis de ambiente para Claude SDK (formato KEY=VALUE, uma por linha). Prefixo export suportado." + }, + envSnippets: { + name: "Snippets", + addBtn: "Adicionar snippet", + noSnippets: "Nenhum snippet de ambiente salvo. Clique em + para salvar sua configura\xE7\xE3o atual.", + nameRequired: "Por favor, insira um nome para o snippet", + modal: { + titleEdit: "Editar snippet", + titleSave: "Salvar snippet", + name: "Nome", + namePlaceholder: "Um nome descritivo para esta configura\xE7\xE3o", + description: "Descri\xE7\xE3o", + descPlaceholder: "Descri\xE7\xE3o opcional", + envVars: "Vari\xE1veis de ambiente", + envVarsPlaceholder: "Formato KEY=VALUE, uma por linha (prefixo export suportado)", + save: "Salvar", + update: "Atualizar", + cancel: "Cancelar" + } + }, + customModelOverrides: { + name: "Substitui\xE7\xF5es de modelos personalizados", + desc: "Defina aliases no seletor de modelos e tamanhos de janela de contexto para modelos personalizados." + }, + customModelAliases: { + placeholder: "Alias" + }, + customContextLimits: { + name: "Limites de contexto personalizados", + desc: "Defina tamanhos de janela de contexto para seus modelos personalizados. Deixe vazio para usar o padr\xE3o (200k tokens).", + invalid: "Formato inv\xE1lido. Use: 256k, 1m ou n\xFAmero exato (1000-10000000)." + }, + enableOpus1M: { + name: "Janela de contexto Opus 1M", + desc: "Mostrar Opus 1M no seletor de modelos. Inclu\xEDdo nos planos Max, Team e Enterprise. Usu\xE1rios de API e Pro precisam de uso adicional." + }, + enableSonnet1M: { + name: "Janela de contexto Sonnet 1M", + desc: "Mostrar Sonnet 1M no seletor de modelos. Requer uso adicional nos planos Max, Team e Enterprise. Usu\xE1rios de API e Pro precisam de uso adicional." + }, + customModels: { + name: "Custom models", + desc: "Append additional Claude model IDs to the picker, one per line. Environment model overrides still replace the picker.", + placeholder: "claude-opus-4-6\nclaude-opus-4-6[1m]\nclaude-opus-4-5-20251101" + }, + enableChrome: { + name: "Habilitar extens\xE3o do Chrome", + desc: "Permitir que o Claude interaja com o Chrome atrav\xE9s da extens\xE3o claude-in-chrome. Requer que a extens\xE3o esteja instalada. Requer rein\xEDcio de sess\xE3o." + }, + enableBangBash: { + name: "Ativar modo bash (!)", + desc: "Digite ! com a entrada vazia para entrar no modo bash. Executa comandos diretamente via Node.js child_process. Requer reabrir a visualiza\xE7\xE3o.", + validation: { + noNode: "Node.js n\xE3o encontrado no PATH. Instale o Node.js ou verifique a configura\xE7\xE3o do PATH." + } + }, + maxTabs: { + name: "M\xE1ximo de abas de chat", + desc: "N\xFAmero m\xE1ximo de abas de chat simult\xE2neas (3-10). Cada aba usa uma sess\xE3o Claude separada.", + warning: "Mais de 5 abas pode afetar o desempenho e o uso de mem\xF3ria." + }, + tabBarPosition: { + name: "Posi\xE7\xE3o da barra de abas", + desc: "Escolha onde exibir os emblemas de abas e bot\xF5es de a\xE7\xE3o", + input: "Acima da entrada (padr\xE3o)", + header: "No cabe\xE7alho" + }, + enableAutoScroll: { + name: "Rolagem autom\xE1tica durante streaming", + desc: "Rolar automaticamente para baixo enquanto o Claude transmite respostas. Desativar para ficar no topo e ler desde o in\xEDcio." + }, + deferMathRenderingDuringStreaming: { + name: "Adiar renderiza\xE7\xE3o matem\xE1tica durante streaming", + desc: "Mostrar LaTeX bruto enquanto a resposta \xE9 transmitida e renderizar a matem\xE1tica uma vez quando cada bloco de texto terminar." + }, + chatViewPlacement: { + name: "Abrir Claudian em", + desc: "Escolha onde o painel de chat abre quando \xE9 criado", + rightSidebar: "Barra lateral direita", + leftSidebar: "Barra lateral esquerda", + mainTab: "Aba do editor principal" + }, + cliPath: { + name: "Caminho CLI Claude", + desc: "Caminho personalizado para Claude Code CLI. Deixe vazio para detec\xE7\xE3o autom\xE1tica.", + descWindows: "Para o instalador nativo, use claude.exe. Para instala\xE7\xF5es com npm/pnpm/yarn ou outros gerenciadores de pacotes, use o caminho cli-wrapper.cjs (n\xE3o claude.cmd).", + descUnix: 'Cole a sa\xEDda de "which claude" \u2014 funciona tanto para instala\xE7\xF5es nativas quanto npm/pnpm/yarn.', + validation: { + notExist: "Caminho n\xE3o existe", + isDirectory: "Caminho \xE9 um diret\xF3rio, n\xE3o um arquivo" + } + }, + language: { + name: "Idioma", + desc: "Alterar o idioma de exibi\xE7\xE3o da interface do plugin" + } +}; +var pt_default = { + common: common7, + chat: chat7, + settings: settings7 +}; + +// src/i18n/locales/ru.json +var ru_exports = {}; +__export(ru_exports, { + chat: () => chat8, + common: () => common8, + default: () => ru_default, + settings: () => settings8 +}); +var common8 = { + save: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", + cancel: "\u041E\u0442\u043C\u0435\u043D\u0430", + delete: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C", + edit: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C", + add: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C", + remove: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C", + clear: "\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C", + clearAll: "\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u0432\u0441\u0451", + loading: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430", + error: "\u041E\u0448\u0438\u0431\u043A\u0430", + success: "\u0423\u0441\u043F\u0435\u0445", + warning: "\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435", + confirm: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C", + settings: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", + advanced: "\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E", + enabled: "\u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E", + disabled: "\u041E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u043E", + platform: "\u041F\u043B\u0430\u0442\u0444\u043E\u0440\u043C\u0430", + refresh: "\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C", + rewind: "\u041E\u0442\u043A\u0430\u0442\u0438\u0442\u044C" +}; +var chat8 = { + rewind: { + confirmMessage: "\u041E\u0442\u043A\u0430\u0442\u0438\u0442\u044C \u0434\u043E \u044D\u0442\u043E\u0439 \u0442\u043E\u0447\u043A\u0438? \u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0444\u0430\u0439\u043B\u043E\u0432 \u043F\u043E\u0441\u043B\u0435 \u044D\u0442\u043E\u0433\u043E \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0431\u0443\u0434\u0443\u0442 \u043E\u0442\u043C\u0435\u043D\u0435\u043D\u044B. \u041E\u0442\u043A\u0430\u0442 \u043D\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043B\u044B, \u043E\u0442\u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0432\u0440\u0443\u0447\u043D\u0443\u044E \u0438\u043B\u0438 \u0447\u0435\u0440\u0435\u0437 bash.", + confirmMessageConversationOnly: "\u041E\u0442\u043A\u0430\u0442\u0438\u0442\u044C \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440 \u0434\u043E \u044D\u0442\u043E\u0439 \u0442\u043E\u0447\u043A\u0438? \u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0444\u0430\u0439\u043B\u043E\u0432 \u0431\u0443\u0434\u0443\u0442 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B.", + confirmButton: "\u041E\u0442\u043A\u0430\u0442\u0438\u0442\u044C", + ariaLabel: "\u041E\u0442\u043A\u0430\u0442\u0438\u0442\u044C \u0441\u044E\u0434\u0430", + menuConversationOnly: "\u041E\u0442\u043A\u0430\u0442\u0438\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440", + menuCodeAndConversation: "\u041E\u0442\u043A\u0430\u0442\u0438\u0442\u044C \u043A\u043E\u0434 + \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440", + notice: "\u041E\u0442\u043A\u0430\u0447\u0435\u043D\u043E: \u0432\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u0444\u0430\u0439\u043B\u043E\u0432 \u2014 {count}", + noticeConversationOnly: "\u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440 \u043E\u0442\u043A\u0430\u0447\u0435\u043D; \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0444\u0430\u0439\u043B\u043E\u0432 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B", + noticeSaveFailed: "\u041E\u0442\u043A\u0430\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D: \u0432\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u0444\u0430\u0439\u043B\u043E\u0432 \u2014 {count}, \u043D\u043E \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435: {error}", + noticeConversationOnlySaveFailed: "\u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440 \u043E\u0442\u043A\u0430\u0447\u0435\u043D, \u043D\u043E \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435: {error}", + failed: "\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0442\u043A\u0430\u0442\u0430: {error}", + cannot: "\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043E\u0442\u043A\u0430\u0442\u0438\u0442\u044C: {error}", + unavailableStreaming: "\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043E\u0442\u043A\u0430\u0442\u0438\u0442\u044C \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0442\u043E\u043A\u043E\u0432\u043E\u0439 \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0438", + unavailableNoUuid: "\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043E\u0442\u043A\u0430\u0442\u0438\u0442\u044C: \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u044B \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439" + }, + fork: { + ariaLabel: "\u041E\u0442\u0432\u0435\u0442\u0432\u0438\u0442\u044C \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440", + chooseTarget: "\u041E\u0442\u0432\u0435\u0442\u0432\u0438\u0442\u044C \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440", + targetNewTab: "\u041D\u043E\u0432\u0430\u044F \u0432\u043A\u043B\u0430\u0434\u043A\u0430", + targetCurrentTab: "\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0432\u043A\u043B\u0430\u0434\u043A\u0430", + maxTabsReached: "\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043E\u0442\u0432\u0435\u0442\u0432\u0438\u0442\u044C: \u0434\u043E\u0441\u0442\u0438\u0433\u043D\u0443\u0442 \u043C\u0430\u043A\u0441\u0438\u043C\u0443\u043C {count} \u0432\u043A\u043B\u0430\u0434\u043E\u043A", + notice: "\u041E\u0442\u0432\u0435\u0442\u0432\u043B\u0435\u043D\u043E \u0432 \u043D\u043E\u0432\u0443\u044E \u0432\u043A\u043B\u0430\u0434\u043A\u0443", + noticeCurrentTab: "\u041E\u0442\u0432\u0435\u0442\u0432\u043B\u0435\u043D\u043E \u0432 \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0432\u043A\u043B\u0430\u0434\u043A\u0435", + failed: "\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0442\u0432\u0435\u0442\u0432\u043B\u0435\u043D\u0438\u044F: {error}", + unavailableStreaming: "\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043E\u0442\u0432\u0435\u0442\u0432\u0438\u0442\u044C \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0442\u043E\u043A\u043E\u0432\u043E\u0439 \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0438", + unavailableNoUuid: "\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043E\u0442\u0432\u0435\u0442\u0432\u0438\u0442\u044C: \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u044B \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439", + unavailableNoResponse: "\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043E\u0442\u0432\u0435\u0442\u0432\u0438\u0442\u044C: \u043D\u0435\u0442 \u043E\u0442\u0432\u0435\u0442\u0430 \u0434\u043B\u044F \u043E\u0442\u0432\u0435\u0442\u0432\u043B\u0435\u043D\u0438\u044F", + errorMessageNotFound: "\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E", + errorNoSession: "\u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0441\u0435\u0441\u0441\u0438\u0438 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D", + errorNoActiveTab: "\u041D\u0435\u0442 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0439 \u0432\u043A\u043B\u0430\u0434\u043A\u0438", + commandNoMessages: "\u041D\u0435\u043B\u044C\u0437\u044F \u0444\u043E\u0440\u043A\u043D\u0443\u0442\u044C: \u0432 \u0434\u0438\u0430\u043B\u043E\u0433\u0435 \u043D\u0435\u0442 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439", + commandNoAssistantUuid: "\u041D\u0435\u043B\u044C\u0437\u044F \u0444\u043E\u0440\u043A\u043D\u0443\u0442\u044C: \u043D\u0435\u0442 \u043E\u0442\u0432\u0435\u0442\u0430 \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442\u0430 \u0441 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u0430\u043C\u0438" + }, + bangBash: { + placeholder: "> \u0412\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u0443 bash...", + commandPanel: "\u041F\u0430\u043D\u0435\u043B\u044C \u043A\u043E\u043C\u0430\u043D\u0434", + copyAriaLabel: "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432\u044B\u0432\u043E\u0434 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u043A\u043E\u043C\u0430\u043D\u0434\u044B", + clearAriaLabel: "\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u0432\u044B\u0432\u043E\u0434 bash", + commandLabel: "{command}", + statusLabel: "\u0421\u0442\u0430\u0442\u0443\u0441: {status}", + collapseOutput: "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u044B\u0432\u043E\u0434 \u043A\u043E\u043C\u0430\u043D\u0434\u044B", + expandOutput: "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u044B\u0432\u043E\u0434 \u043A\u043E\u043C\u0430\u043D\u0434\u044B", + running: "\u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F...", + copyFailed: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0435\u043D\u0430" + } +}; +var settings8 = { + title: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 Claudian", + tabs: { + general: "\u041E\u0431\u0449\u0438\u0435", + claude: "Claude", + codex: "Codex" + }, + display: "\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435", + conversations: "\u0420\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u044B", + content: "\u0421\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435", + input: "\u0412\u0432\u043E\u0434", + setup: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430", + models: "\u041C\u043E\u0434\u0435\u043B\u0438", + experimental: "\u042D\u043A\u0441\u043F\u0435\u0440\u0438\u043C\u0435\u043D\u0442\u0430\u043B\u044C\u043D\u043E\u0435", + userName: { + name: "\u041A\u0430\u043A Claudian \u0434\u043E\u043B\u0436\u0435\u043D \u043E\u0431\u0440\u0430\u0449\u0430\u0442\u044C\u0441\u044F \u043A \u0432\u0430\u043C?", + desc: "\u0412\u0430\u0448\u0435 \u0438\u043C\u044F \u0434\u043B\u044F \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u043F\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0439 (\u043E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043F\u0443\u0441\u0442\u044B\u043C \u0434\u043B\u044F \u043E\u0431\u0449\u0438\u0445 \u043F\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0439)" + }, + excludedTags: { + name: "\u0418\u0441\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044B\u0435 \u0442\u0435\u0433\u0438", + desc: "\u0417\u0430\u043C\u0435\u0442\u043A\u0438 \u0441 \u044D\u0442\u0438\u043C\u0438 \u0442\u0435\u0433\u0430\u043C\u0438 \u043D\u0435 \u0431\u0443\u0434\u0443\u0442 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044C\u0441\u044F \u043A\u0430\u043A \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 (\u043F\u043E \u043E\u0434\u043D\u043E\u043C\u0443 \u0432 \u0441\u0442\u0440\u043E\u043A\u0435, \u0431\u0435\u0437 #)" + }, + mediaFolder: { + name: "\u041F\u0430\u043F\u043A\u0430 \u043C\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043B\u043E\u0432", + desc: "\u041F\u0430\u043F\u043A\u0430 \u0441 \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u044F\u043C\u0438/\u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u043C\u0438. \u041A\u043E\u0433\u0434\u0430 \u0437\u0430\u043C\u0435\u0442\u043A\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442 ![[image.jpg]], Claude \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043A\u0430\u0442\u044C \u0437\u0434\u0435\u0441\u044C. \u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043F\u0443\u0441\u0442\u044B\u043C \u0434\u043B\u044F \u043A\u043E\u0440\u043D\u044F \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430." + }, + systemPrompt: { + name: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u044B\u0439 \u043F\u0440\u043E\u043C\u043F\u0442", + desc: "\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u0438, \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u043C\u044B\u0435 \u043A \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u043E\u043C\u0443 \u043F\u0440\u043E\u043C\u043F\u0442\u0443 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E" + }, + autoTitle: { + name: "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 \u0431\u0435\u0441\u0435\u0434", + desc: "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 \u0431\u0435\u0441\u0435\u0434 \u043F\u043E\u0441\u043B\u0435 \u043F\u0435\u0440\u0432\u043E\u0433\u043E \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F." + }, + titleModel: { + name: "\u041C\u043E\u0434\u0435\u043B\u044C \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432", + desc: "\u041C\u043E\u0434\u0435\u043B\u044C, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u0430\u044F \u0434\u043B\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0439 \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432 \u0431\u0435\u0441\u0435\u0434.", + auto: "\u0410\u0432\u0442\u043E (Haiku)" + }, + navMappings: { + name: "\u0421\u043E\u043F\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0432 \u0441\u0442\u0438\u043B\u0435 Vim", + desc: '\u041F\u043E \u043E\u0434\u043D\u043E\u043C\u0443 \u0441\u043E\u043F\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044E \u0432 \u0441\u0442\u0440\u043E\u043A\u0435. \u0424\u043E\u0440\u043C\u0430\u0442: "map <\u043A\u043B\u044E\u0447> <\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435>" (\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F: scrollUp, scrollDown, focusInput).' + }, + requireCommandOrControlEnterToSend: { + name: "\u0422\u0440\u0435\u0431\u043E\u0432\u0430\u0442\u044C Command/Ctrl+Enter \u0434\u043B\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438", + desc: "\u0415\u0441\u043B\u0438 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043E, Enter \u0432\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u043D\u043E\u0432\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443. Command+Enter \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043D\u0430 macOS; Ctrl+Enter \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043D\u0430 Windows \u0438 Linux." + }, + hotkeys: "\u0413\u043E\u0440\u044F\u0447\u0438\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u0438", + inlineEditHotkey: { + name: "\u0418\u043D\u043B\u0430\u0439\u043D-\u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435", + descWithKey: "\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u043A\u043B\u0430\u0432\u0438\u0448\u0430: {hotkey}", + descNoKey: "\u041A\u043B\u0430\u0432\u0438\u0448\u0430 \u043D\u0435 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0430", + btnChange: "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C", + btnSet: "\u041D\u0430\u0437\u043D\u0430\u0447\u0438\u0442\u044C" + }, + openChatHotkey: { + name: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442", + descWithKey: "\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u043A\u043B\u0430\u0432\u0438\u0448\u0430: {hotkey}", + descNoKey: "\u041A\u043B\u0430\u0432\u0438\u0448\u0430 \u043D\u0435 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0430", + btnChange: "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C", + btnSet: "\u041D\u0430\u0437\u043D\u0430\u0447\u0438\u0442\u044C" + }, + newSessionHotkey: { + name: "\u041D\u043E\u0432\u0430\u044F \u0441\u0435\u0441\u0441\u0438\u044F", + descWithKey: "\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u043A\u043B\u0430\u0432\u0438\u0448\u0430: {hotkey}", + descNoKey: "\u041A\u043B\u0430\u0432\u0438\u0448\u0430 \u043D\u0435 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0430", + btnChange: "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C", + btnSet: "\u041D\u0430\u0437\u043D\u0430\u0447\u0438\u0442\u044C" + }, + newTabHotkey: { + name: "\u041D\u043E\u0432\u0430\u044F \u0432\u043A\u043B\u0430\u0434\u043A\u0430", + descWithKey: "\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u043A\u043B\u0430\u0432\u0438\u0448\u0430: {hotkey}", + descNoKey: "\u041A\u043B\u0430\u0432\u0438\u0448\u0430 \u043D\u0435 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0430", + btnChange: "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C", + btnSet: "\u041D\u0430\u0437\u043D\u0430\u0447\u0438\u0442\u044C" + }, + closeTabHotkey: { + name: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0432\u043A\u043B\u0430\u0434\u043A\u0443", + descWithKey: "\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u043A\u043B\u0430\u0432\u0438\u0448\u0430: {hotkey}", + descNoKey: "\u041A\u043B\u0430\u0432\u0438\u0448\u0430 \u043D\u0435 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0430", + btnChange: "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C", + btnSet: "\u041D\u0430\u0437\u043D\u0430\u0447\u0438\u0442\u044C" + }, + slashCommands: { + name: "\u041A\u043E\u043C\u0430\u043D\u0434\u044B \u0438 \u043D\u0430\u0432\u044B\u043A\u0438", + desc: "\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0430\u043C\u0438 \u0438 \u043D\u0430\u0432\u044B\u043A\u0430\u043C\u0438 \u043D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430, \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u043C\u0438 \u0432 .claude/commands/ \u0438 .claude/skills/. \u0417\u0430\u043F\u0443\u0441\u043A\u0430\u044E\u0442\u0441\u044F \u0447\u0435\u0440\u0435\u0437 /\u0438\u043C\u044F." + }, + hiddenSlashCommands: { + name: "\u0421\u043A\u0440\u044B\u0442\u044B\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u044B \u0438 \u043D\u0430\u0432\u044B\u043A\u0438", + desc: "\u0421\u043A\u0440\u044B\u0442\u044C \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0451\u043D\u043D\u044B\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u044B \u0438 \u043D\u0430\u0432\u044B\u043A\u0438 \u0438\u0437 \u0432\u044B\u043F\u0430\u0434\u0430\u044E\u0449\u0435\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430. \u041F\u043E\u043B\u0435\u0437\u043D\u043E \u0434\u043B\u044F \u0441\u043A\u0440\u044B\u0442\u0438\u044F \u0437\u0430\u043F\u0438\u0441\u0435\u0439 Claude Code, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0435 \u0430\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u044B \u0434\u043B\u044F Claudian. \u0412\u0432\u043E\u0434\u0438\u0442\u0435 \u0438\u043C\u0435\u043D\u0430 \u0431\u0435\u0437 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0441\u043B\u044D\u0448\u0430, \u043F\u043E \u043E\u0434\u043D\u043E\u043C\u0443 \u043D\u0430 \u0441\u0442\u0440\u043E\u043A\u0443.", + placeholder: "commit\nbuild\ntest" + }, + mcpServers: { + name: "MCP \u0441\u0435\u0440\u0432\u0435\u0440\u044B", + desc: "\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F\u043C\u0438 MCP-\u0441\u0435\u0440\u0432\u0435\u0440\u043E\u0432 \u043D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430 \u0432 .claude/mcp.json. \u0421\u0435\u0440\u0432\u0435\u0440\u044B \u0441 \u0440\u0435\u0436\u0438\u043C\u043E\u043C \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430 \u0442\u0440\u0435\u0431\u0443\u044E\u0442 @mention \u0434\u043B\u044F \u0430\u043A\u0442\u0438\u0432\u0430\u0446\u0438\u0438." + }, + plugins: { + name: "\u041F\u043B\u0430\u0433\u0438\u043D\u044B Claude Code", + desc: "\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043F\u043B\u0430\u0433\u0438\u043D\u0430\u043C\u0438 Claude Code \u0438\u0437 ~/.claude/plugins. \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044B\u0435 \u043F\u043B\u0430\u0433\u0438\u043D\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u044E\u0442\u0441\u044F \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430 \u0432 .claude/settings.json." + }, + subagents: { + name: "\u0421\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u044B", + desc: "\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u0430\u043C\u0438 \u043D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430 \u0432 .claude/agents/. \u041A\u0430\u0436\u0434\u044B\u0439 Markdown-\u0444\u0430\u0439\u043B \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u043E\u0434\u043D\u043E\u0433\u043E \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u0430\u0433\u0435\u043D\u0442\u0430.", + noAgents: "\u0421\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u044B \u043D\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u044B. \u041D\u0430\u0436\u043C\u0438\u0442\u0435 +, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0434\u043D\u043E\u0433\u043E.", + deleteConfirm: '\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u0430 "{name}"?', + saveFailed: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0441\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u0430: {message}", + refreshFailed: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0441\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u043E\u0432: {message}", + deleteFailed: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u0430: {message}", + renameCleanupFailed: '\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435: \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0442\u0430\u0440\u044B\u0439 \u0444\u0430\u0439\u043B \u0434\u043B\u044F "{name}"', + created: '\u0421\u0443\u0431\u0430\u0433\u0435\u043D\u0442 "{name}" \u0441\u043E\u0437\u0434\u0430\u043D', + updated: '\u0421\u0443\u0431\u0430\u0433\u0435\u043D\u0442 "{name}" \u043E\u0431\u043D\u043E\u0432\u043B\u0451\u043D', + deleted: '\u0421\u0443\u0431\u0430\u0433\u0435\u043D\u0442 "{name}" \u0443\u0434\u0430\u043B\u0451\u043D', + duplicateName: '\u0410\u0433\u0435\u043D\u0442 \u0441 \u0438\u043C\u0435\u043D\u0435\u043C "{name}" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442', + descriptionRequired: "\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E", + promptRequired: "\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u044B\u0439 \u043F\u0440\u043E\u043C\u043F\u0442 \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u0435\u043D", + modal: { + titleEdit: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u0430", + titleAdd: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0443\u0431\u0430\u0433\u0435\u043D\u0442\u0430", + name: "\u0418\u043C\u044F", + nameDesc: "\u0422\u043E\u043B\u044C\u043A\u043E \u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0435 \u0431\u0443\u043A\u0432\u044B, \u0446\u0438\u0444\u0440\u044B \u0438 \u0434\u0435\u0444\u0438\u0441\u044B", + namePlaceholder: "code-reviewer", + description: "\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435", + descriptionDesc: "\u041A\u0440\u0430\u0442\u043A\u043E\u0435 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u044D\u0442\u043E\u0433\u043E \u0430\u0433\u0435\u043D\u0442\u0430", + descriptionPlaceholder: "\u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442 \u043A\u043E\u0434 \u043D\u0430 \u043E\u0448\u0438\u0431\u043A\u0438 \u0438 \u0441\u0442\u0438\u043B\u044C", + advancedOptions: "\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B", + model: "\u041C\u043E\u0434\u0435\u043B\u044C", + modelDesc: "\u041F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u043C\u043E\u0434\u0435\u043B\u0438 \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0430\u0433\u0435\u043D\u0442\u0430", + tools: "\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B", + toolsDesc: "\u0421\u043F\u0438\u0441\u043E\u043A \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043D\u043D\u044B\u0445 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043F\u044F\u0442\u0443\u044E (\u043F\u0443\u0441\u0442\u043E = \u0432\u0441\u0435)", + disallowedTools: "\u0417\u0430\u043F\u0440\u0435\u0449\u0451\u043D\u043D\u044B\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B", + disallowedToolsDesc: "\u0421\u043F\u0438\u0441\u043E\u043A \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0443\u0436\u043D\u043E \u0437\u0430\u043F\u0440\u0435\u0442\u0438\u0442\u044C, \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043F\u044F\u0442\u0443\u044E", + skills: "\u041D\u0430\u0432\u044B\u043A\u0438", + skillsDesc: "\u0421\u043F\u0438\u0441\u043E\u043A \u043D\u0430\u0432\u044B\u043A\u043E\u0432 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043F\u044F\u0442\u0443\u044E", + prompt: "\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u044B\u0439 \u043F\u0440\u043E\u043C\u043F\u0442", + promptDesc: "\u0418\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u0438 \u0434\u043B\u044F \u0430\u0433\u0435\u043D\u0442\u0430", + promptPlaceholder: "\u0412\u044B \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u0438\u0441\u0442 \u043F\u043E \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0435 \u043A\u043E\u0434\u0430. \u041F\u0440\u043E\u0430\u043D\u0430\u043B\u0438\u0437\u0438\u0440\u0443\u0439\u0442\u0435 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u0439 \u043A\u043E\u0434 \u043D\u0430 \u043F\u0440\u0435\u0434\u043C\u0435\u0442..." + } + }, + safety: "\u0411\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u044C", + loadUserSettings: { + name: "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 Claude", + desc: "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 ~/.claude/settings.json. \u041F\u0440\u0438 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0438 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0439 Claude Code \u043C\u043E\u0433\u0443\u0442 \u043E\u0431\u0445\u043E\u0434\u0438\u0442\u044C \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C." + }, + claudeSafeMode: { + name: "Safe mode", + desc: "Permission mode used when the Safe toggle is active." + }, + codexSafeMode: { + name: "Safe mode", + desc: "Sandbox mode used when the Safe toggle is active." + }, + environment: "\u041E\u043A\u0440\u0443\u0436\u0435\u043D\u0438\u0435", + customVariables: { + name: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0435", + desc: "\u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0435 \u043E\u043A\u0440\u0443\u0436\u0435\u043D\u0438\u044F \u0434\u043B\u044F Claude SDK (\u0444\u043E\u0440\u043C\u0430\u0442 KEY=VALUE, \u043F\u043E \u043E\u0434\u043D\u043E\u0439 \u0432 \u0441\u0442\u0440\u043E\u043A\u0435). \u041F\u0440\u0435\u0444\u0438\u043A\u0441 export \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F." + }, + envSnippets: { + name: "\u0421\u043D\u0438\u043F\u043F\u0435\u0442\u044B", + addBtn: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u043D\u0438\u043F\u043F\u0435\u0442", + noSnippets: "\u041D\u0435\u0442 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u043D\u044B\u0445 \u0441\u043D\u0438\u043F\u043F\u0435\u0442\u043E\u0432 \u043E\u043A\u0440\u0443\u0436\u0435\u043D\u0438\u044F. \u041D\u0430\u0436\u043C\u0438\u0442\u0435 +, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0442\u0435\u043A\u0443\u0449\u0443\u044E \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044E.", + nameRequired: "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u043D\u0438\u043F\u043F\u0435\u0442\u0430", + modal: { + titleEdit: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043D\u0438\u043F\u043F\u0435\u0442", + titleSave: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0441\u043D\u0438\u043F\u043F\u0435\u0442", + name: "\u0418\u043C\u044F", + namePlaceholder: "\u041E\u043F\u0438\u0441\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0434\u043B\u044F \u044D\u0442\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438", + description: "\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435", + descPlaceholder: "\u041E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E\u0435 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435", + envVars: "\u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0435 \u043E\u043A\u0440\u0443\u0436\u0435\u043D\u0438\u044F", + envVarsPlaceholder: "\u0424\u043E\u0440\u043C\u0430\u0442 KEY=VALUE, \u043F\u043E \u043E\u0434\u043D\u043E\u0439 \u0432 \u0441\u0442\u0440\u043E\u043A\u0435 (\u043F\u0440\u0435\u0444\u0438\u043A\u0441 export \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F)", + save: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", + update: "\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C", + cancel: "\u041E\u0442\u043C\u0435\u043D\u0430" + } + }, + customModelOverrides: { + name: "\u041F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0445 \u043C\u043E\u0434\u0435\u043B\u0435\u0439", + desc: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u0442\u0435 \u043F\u0441\u0435\u0432\u0434\u043E\u043D\u0438\u043C\u044B \u0432 \u0441\u0435\u043B\u0435\u043A\u0442\u043E\u0440\u0435 \u043C\u043E\u0434\u0435\u043B\u0435\u0439 \u0438 \u0440\u0430\u0437\u043C\u0435\u0440\u044B \u043E\u043A\u043D\u0430 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430 \u0434\u043B\u044F \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0445 \u043C\u043E\u0434\u0435\u043B\u0435\u0439." + }, + customModelAliases: { + placeholder: "\u041F\u0441\u0435\u0432\u0434\u043E\u043D\u0438\u043C" + }, + customContextLimits: { + name: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u043B\u0438\u043C\u0438\u0442\u044B \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430", + desc: "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u0440\u0430\u0437\u043C\u0435\u0440\u044B \u043E\u043A\u043D\u0430 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430 \u0434\u043B\u044F \u0432\u0430\u0448\u0438\u0445 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0445 \u043C\u043E\u0434\u0435\u043B\u0435\u0439. \u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043F\u0443\u0441\u0442\u044B\u043C \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (200k \u0442\u043E\u043A\u0435\u043D\u043E\u0432).", + invalid: "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435: 256k, 1m \u0438\u043B\u0438 \u0442\u043E\u0447\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E (1000-10000000)." + }, + enableOpus1M: { + name: "\u041A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u043D\u043E\u0435 \u043E\u043A\u043D\u043E Opus 1M", + desc: "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C Opus 1M \u0432 \u0441\u0435\u043B\u0435\u043A\u0442\u043E\u0440\u0435 \u043C\u043E\u0434\u0435\u043B\u0435\u0439. \u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E \u0432 \u043F\u043B\u0430\u043D\u044B Max, Team \u0438 Enterprise. \u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F\u043C API \u0438 Pro \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435." + }, + enableSonnet1M: { + name: "\u041A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u043D\u043E\u0435 \u043E\u043A\u043D\u043E Sonnet 1M", + desc: "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C Sonnet 1M \u0432 \u0441\u0435\u043B\u0435\u043A\u0442\u043E\u0440\u0435 \u043C\u043E\u0434\u0435\u043B\u0435\u0439. \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435 \u0432 \u043F\u043B\u0430\u043D\u0430\u0445 Max, Team \u0438 Enterprise. \u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F\u043C API \u0438 Pro \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435." + }, + customModels: { + name: "Custom models", + desc: "Append additional Claude model IDs to the picker, one per line. Environment model overrides still replace the picker.", + placeholder: "claude-opus-4-6\nclaude-opus-4-6[1m]\nclaude-opus-4-5-20251101" + }, + enableChrome: { + name: "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435 Chrome", + desc: "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C Claude \u0432\u0437\u0430\u0438\u043C\u043E\u0434\u0435\u0439\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0441 Chrome \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435 claude-in-chrome. \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u044F. \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A \u0441\u0435\u0441\u0441\u0438\u0438." + }, + enableBangBash: { + name: "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0440\u0435\u0436\u0438\u043C bash (!)", + desc: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 ! \u0432 \u043F\u0443\u0441\u0442\u043E\u043C \u043F\u043E\u043B\u0435 \u0432\u0432\u043E\u0434\u0430, \u0447\u0442\u043E\u0431\u044B \u043F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0440\u0435\u0436\u0438\u043C bash. \u041A\u043E\u043C\u0430\u043D\u0434\u044B \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u044E\u0442\u0441\u044F \u043D\u0430\u043F\u0440\u044F\u043C\u0443\u044E \u0447\u0435\u0440\u0435\u0437 Node.js child_process. \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435.", + validation: { + noNode: "Node.js \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D \u0432 PATH. \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 Node.js \u0438\u043B\u0438 \u043F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0443 PATH." + } + }, + maxTabs: { + name: "\u041C\u0430\u043A\u0441\u0438\u043C\u0443\u043C \u0432\u043A\u043B\u0430\u0434\u043E\u043A \u0447\u0430\u0442\u0430", + desc: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043E\u0434\u043D\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0445 \u0432\u043A\u043B\u0430\u0434\u043E\u043A \u0447\u0430\u0442\u0430 (3-10). \u041A\u0430\u0436\u0434\u0430\u044F \u0432\u043A\u043B\u0430\u0434\u043A\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u0443\u044E \u0441\u0435\u0441\u0441\u0438\u044E Claude.", + warning: "\u0411\u043E\u043B\u0435\u0435 5 \u0432\u043A\u043B\u0430\u0434\u043E\u043A \u043C\u043E\u0436\u0435\u0442 \u043F\u043E\u0432\u043B\u0438\u044F\u0442\u044C \u043D\u0430 \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C \u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435 \u043F\u0430\u043C\u044F\u0442\u0438." + }, + tabBarPosition: { + name: "\u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u0430\u043D\u0435\u043B\u0438 \u0432\u043A\u043B\u0430\u0434\u043E\u043A", + desc: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435, \u0433\u0434\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u043A\u0438 \u0432\u043A\u043B\u0430\u0434\u043E\u043A \u0438 \u043A\u043D\u043E\u043F\u043A\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439", + input: "\u041D\u0430\u0434 \u043F\u043E\u043B\u0435\u043C \u0432\u0432\u043E\u0434\u0430 (\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E)", + header: "\u0412 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0435" + }, + enableAutoScroll: { + name: "\u0410\u0432\u0442\u043E\u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0430 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0442\u043E\u043A\u043E\u0432\u043E\u0439 \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0438", + desc: "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043F\u0440\u043E\u043A\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044C \u0432\u043D\u0438\u0437, \u043F\u043E\u043A\u0430 Claude \u043F\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u043E\u0442\u0432\u0435\u0442\u044B. \u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043E\u0441\u0442\u0430\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430\u0432\u0435\u0440\u0445\u0443 \u0438 \u0447\u0438\u0442\u0430\u0442\u044C \u0441 \u043D\u0430\u0447\u0430\u043B\u0430." + }, + deferMathRenderingDuringStreaming: { + name: "\u041E\u0442\u043B\u043E\u0436\u0438\u0442\u044C \u0440\u0435\u043D\u0434\u0435\u0440\u0438\u043D\u0433 \u0444\u043E\u0440\u043C\u0443\u043B \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0442\u043E\u043A\u0430", + desc: "\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0439 LaTeX \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0442\u043E\u043A\u043E\u0432\u043E\u0439 \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438 \u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442\u044C \u0444\u043E\u0440\u043C\u0443\u043B\u044B \u043E\u0434\u0438\u043D \u0440\u0430\u0437 \u043F\u043E\u0441\u043B\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u0433\u043E \u0431\u043B\u043E\u043A\u0430." + }, + chatViewPlacement: { + name: "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C Claudian \u0432", + desc: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435, \u0433\u0434\u0435 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043F\u0430\u043D\u0435\u043B\u044C \u0447\u0430\u0442\u0430 \u043F\u0440\u0438 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0438", + rightSidebar: "\u041F\u0440\u0430\u0432\u0430\u044F \u0431\u043E\u043A\u043E\u0432\u0430\u044F \u043F\u0430\u043D\u0435\u043B\u044C", + leftSidebar: "\u041B\u0435\u0432\u0430\u044F \u0431\u043E\u043A\u043E\u0432\u0430\u044F \u043F\u0430\u043D\u0435\u043B\u044C", + mainTab: "\u041E\u0441\u043D\u043E\u0432\u043D\u0430\u044F \u0432\u043A\u043B\u0430\u0434\u043A\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430" + }, + cliPath: { + name: "\u041F\u0443\u0442\u044C \u043A CLI Claude", + desc: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u043F\u0443\u0442\u044C \u043A Claude Code CLI. \u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043F\u0443\u0441\u0442\u044B\u043C \u0434\u043B\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F.", + descWindows: "\u0414\u043B\u044F \u043D\u0430\u0442\u0438\u0432\u043D\u043E\u0433\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 claude.exe. \u0414\u043B\u044F \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043E\u043A \u0447\u0435\u0440\u0435\u0437 npm/pnpm/yarn \u0438\u043B\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043C\u0435\u043D\u0435\u0434\u0436\u0435\u0440\u044B \u043F\u0430\u043A\u0435\u0442\u043E\u0432 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043F\u0443\u0442\u044C \u043A cli-wrapper.cjs (\u043D\u0435 claude.cmd).", + descUnix: '\u0412\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u0432\u044B\u0432\u043E\u0434 \u043A\u043E\u043C\u0430\u043D\u0434\u044B "which claude" \u2014 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043A\u0430\u043A \u0434\u043B\u044F \u043D\u0430\u0442\u0438\u0432\u043D\u044B\u0445 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043E\u043A, \u0442\u0430\u043A \u0438 \u0434\u043B\u044F npm/pnpm/yarn.', + validation: { + notExist: "\u041F\u0443\u0442\u044C \u043D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442", + isDirectory: "\u041F\u0443\u0442\u044C \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0434\u0438\u0440\u0435\u043A\u0442\u043E\u0440\u0438\u0435\u0439, \u0430 \u043D\u0435 \u0444\u0430\u0439\u043B\u043E\u043C" + } + }, + language: { + name: "\u042F\u0437\u044B\u043A", + desc: "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u044F\u0437\u044B\u043A \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043F\u043B\u0430\u0433\u0438\u043D\u0430" + } +}; +var ru_default = { + common: common8, + chat: chat8, + settings: settings8 +}; + +// src/i18n/locales/zh-CN.json +var zh_CN_exports = {}; +__export(zh_CN_exports, { + chat: () => chat9, + common: () => common9, + default: () => zh_CN_default, + settings: () => settings9 +}); +var common9 = { + save: "\u4FDD\u5B58", + cancel: "\u53D6\u6D88", + delete: "\u5220\u9664", + edit: "\u7F16\u8F91", + add: "\u6DFB\u52A0", + remove: "\u79FB\u9664", + clear: "\u6E05\u9664", + clearAll: "\u6E05\u9664\u5168\u90E8", + loading: "\u52A0\u8F7D\u4E2D", + error: "\u9519\u8BEF", + success: "\u6210\u529F", + warning: "\u8B66\u544A", + confirm: "\u786E\u8BA4", + settings: "\u8BBE\u7F6E", + advanced: "\u9AD8\u7EA7", + enabled: "\u5DF2\u542F\u7528", + disabled: "\u5DF2\u7981\u7528", + platform: "\u5E73\u53F0", + refresh: "\u5237\u65B0", + rewind: "\u56DE\u9000" +}; +var chat9 = { + rewind: { + confirmMessage: "\u56DE\u9000\u5230\u6B64\u5904\uFF1F\u6B64\u6D88\u606F\u4E4B\u540E\u7684\u6587\u4EF6\u66F4\u6539\u5C06\u88AB\u8FD8\u539F\u3002\u56DE\u9000\u4E0D\u4F1A\u5F71\u54CD\u624B\u52A8\u6216\u901A\u8FC7 bash \u7F16\u8F91\u7684\u6587\u4EF6\u3002", + confirmMessageConversationOnly: "\u5C06\u5BF9\u8BDD\u56DE\u9000\u5230\u6B64\u5904\uFF1F\u6587\u4EF6\u66F4\u6539\u5C06\u4FDD\u7559\u3002", + confirmButton: "\u56DE\u9000", + ariaLabel: "\u56DE\u9000\u5230\u6B64\u5904", + menuConversationOnly: "\u4EC5\u56DE\u9000\u5BF9\u8BDD", + menuCodeAndConversation: "\u56DE\u9000\u4EE3\u7801 + \u5BF9\u8BDD", + notice: "\u5DF2\u56DE\u9000\uFF1A\u8FD8\u539F\u4E86 {count} \u4E2A\u6587\u4EF6", + noticeConversationOnly: "\u5DF2\u56DE\u9000\u5BF9\u8BDD\uFF1B\u6587\u4EF6\u66F4\u6539\u5DF2\u4FDD\u7559", + noticeSaveFailed: "\u5DF2\u56DE\u9000\uFF1A\u8FD8\u539F\u4E86 {count} \u4E2A\u6587\u4EF6\uFF0C\u4F46\u65E0\u6CD5\u4FDD\u5B58\u72B6\u6001\uFF1A{error}", + noticeConversationOnlySaveFailed: "\u5DF2\u56DE\u9000\u5BF9\u8BDD\uFF0C\u4F46\u65E0\u6CD5\u4FDD\u5B58\u72B6\u6001\uFF1A{error}", + failed: "\u56DE\u9000\u5931\u8D25\uFF1A{error}", + cannot: "\u65E0\u6CD5\u56DE\u9000\uFF1A{error}", + unavailableStreaming: "\u6D41\u5F0F\u54CD\u5E94\u4E2D\u65E0\u6CD5\u56DE\u9000", + unavailableNoUuid: "\u65E0\u6CD5\u56DE\u9000\uFF1A\u7F3A\u5C11\u6D88\u606F\u6807\u8BC6\u7B26" + }, + fork: { + ariaLabel: "\u5206\u53C9\u5BF9\u8BDD", + chooseTarget: "\u5206\u53C9\u5BF9\u8BDD", + targetNewTab: "\u65B0\u6807\u7B7E\u9875", + targetCurrentTab: "\u5F53\u524D\u6807\u7B7E\u9875", + maxTabsReached: "\u65E0\u6CD5\u5206\u53C9\uFF1A\u5DF2\u8FBE\u5230\u6700\u5927 {count} \u4E2A\u6807\u7B7E\u9875", + notice: "\u5DF2\u5206\u53C9\u5230\u65B0\u6807\u7B7E\u9875", + noticeCurrentTab: "\u5DF2\u5728\u5F53\u524D\u6807\u7B7E\u9875\u5206\u53C9", + failed: "\u5206\u53C9\u5931\u8D25\uFF1A{error}", + unavailableStreaming: "\u6D41\u5F0F\u54CD\u5E94\u4E2D\u65E0\u6CD5\u5206\u53C9", + unavailableNoUuid: "\u65E0\u6CD5\u5206\u53C9\uFF1A\u7F3A\u5C11\u6D88\u606F\u6807\u8BC6\u7B26", + unavailableNoResponse: "\u65E0\u6CD5\u5206\u53C9\uFF1A\u6CA1\u6709\u53EF\u5206\u53C9\u7684\u54CD\u5E94", + errorMessageNotFound: "\u672A\u627E\u5230\u6D88\u606F", + errorNoSession: "\u6CA1\u6709\u53EF\u7528\u7684\u4F1A\u8BDD ID", + errorNoActiveTab: "\u6CA1\u6709\u6D3B\u52A8\u6807\u7B7E\u9875", + commandNoMessages: "\u65E0\u6CD5\u5206\u53C9\uFF1A\u5BF9\u8BDD\u4E2D\u6CA1\u6709\u6D88\u606F", + commandNoAssistantUuid: "\u65E0\u6CD5\u5206\u53C9\uFF1A\u6CA1\u6709\u5E26\u6807\u8BC6\u7B26\u7684\u52A9\u624B\u56DE\u590D" + }, + bangBash: { + placeholder: "> \u8FD0\u884C\u547D\u4EE4...", + commandPanel: "\u547D\u4EE4\u9762\u677F", + copyAriaLabel: "\u590D\u5236\u6700\u65B0\u547D\u4EE4\u8F93\u51FA", + clearAriaLabel: "\u6E05\u9664\u547D\u4EE4\u8F93\u51FA", + commandLabel: "{command}", + statusLabel: "\u72B6\u6001: {status}", + collapseOutput: "\u6298\u53E0\u547D\u4EE4\u8F93\u51FA", + expandOutput: "\u5C55\u5F00\u547D\u4EE4\u8F93\u51FA", + running: "\u8FD0\u884C\u4E2D...", + copyFailed: "\u590D\u5236\u5230\u526A\u8D34\u677F\u5931\u8D25" + } +}; +var settings9 = { + title: "Claudian \u8BBE\u7F6E", + tabs: { + general: "\u901A\u7528", + claude: "Claude", + codex: "Codex" + }, + display: "\u663E\u793A", + conversations: "\u5BF9\u8BDD", + content: "\u5185\u5BB9", + input: "\u8F93\u5165", + setup: "\u8BBE\u7F6E", + models: "\u6A21\u578B", + experimental: "\u5B9E\u9A8C\u6027\u529F\u80FD", + userName: { + name: "Claudian \u5E94\u8BE5\u5982\u4F55\u79F0\u547C\u4F60\uFF1F", + desc: "\u7528\u4E8E\u4E2A\u6027\u5316\u95EE\u5019\u7684\u7528\u6237\u540D\uFF08\u7559\u7A7A\u4F7F\u7528\u901A\u7528\u95EE\u5019\uFF09" + }, + excludedTags: { + name: "\u6392\u9664\u7684\u6807\u7B7E", + desc: "\u5305\u542B\u8FD9\u4E9B\u6807\u7B7E\u7684\u7B14\u8BB0\u4E0D\u4F1A\u81EA\u52A8\u52A0\u8F7D\u4E3A\u4E0A\u4E0B\u6587\uFF08\u6BCF\u884C\u4E00\u4E2A\uFF0C\u4E0D\u5E26 #\uFF09" + }, + mediaFolder: { + name: "\u5A92\u4F53\u6587\u4EF6\u5939", + desc: "\u5B58\u653E\u9644\u4EF6/\u56FE\u7247\u7684\u6587\u4EF6\u5939\u3002\u5F53\u7B14\u8BB0\u4F7F\u7528 ![[image.jpg]] \u65F6\uFF0CClaude \u4F1A\u5728\u6B64\u67E5\u627E\u3002\u7559\u7A7A\u4F7F\u7528\u4ED3\u5E93\u6839\u76EE\u5F55\u3002" + }, + systemPrompt: { + name: "\u81EA\u5B9A\u4E49\u7CFB\u7EDF\u63D0\u793A\u8BCD", + desc: "\u9644\u52A0\u5230\u9ED8\u8BA4\u7CFB\u7EDF\u63D0\u793A\u8BCD\u7684\u989D\u5916\u6307\u4EE4" + }, + autoTitle: { + name: "\u81EA\u52A8\u751F\u6210\u5BF9\u8BDD\u6807\u9898", + desc: "\u5728\u7528\u6237\u53D1\u9001\u9996\u6761\u6D88\u606F\u540E\u81EA\u52A8\u751F\u6210\u5BF9\u8BDD\u6807\u9898\u3002" + }, + titleModel: { + name: "\u6807\u9898\u751F\u6210\u6A21\u578B", + desc: "\u7528\u4E8E\u81EA\u52A8\u751F\u6210\u5BF9\u8BDD\u6807\u9898\u7684\u6A21\u578B\u3002", + auto: "\u81EA\u52A8 (Haiku)" + }, + navMappings: { + name: "Vim \u98CE\u683C\u5BFC\u822A\u6620\u5C04", + desc: '\u6BCF\u884C\u4E00\u4E2A\u6620\u5C04\u3002\u683C\u5F0F\uFF1A"map <\u952E> <\u52A8\u4F5C>"\uFF08\u52A8\u4F5C\uFF1AscrollUp, scrollDown, focusInput\uFF09\u3002' + }, + requireCommandOrControlEnterToSend: { + name: "\u9700\u8981 Command/Ctrl+Enter \u53D1\u9001", + desc: "\u542F\u7528\u540E\uFF0CEnter \u4F1A\u63D2\u5165\u6362\u884C\u3002macOS \u4F7F\u7528 Command+Enter \u53D1\u9001\uFF1BWindows \u548C Linux \u4F7F\u7528 Ctrl+Enter \u53D1\u9001\u3002" + }, + hotkeys: "\u5FEB\u6377\u952E", + inlineEditHotkey: { + name: "\u5185\u8054\u7F16\u8F91", + descWithKey: "\u5F53\u524D\u5FEB\u6377\u952E\uFF1A{hotkey}", + descNoKey: "\u672A\u8BBE\u7F6E\u5FEB\u6377\u952E", + btnChange: "\u66F4\u6539", + btnSet: "\u8BBE\u7F6E\u5FEB\u6377\u952E" + }, + openChatHotkey: { + name: "\u6253\u5F00\u804A\u5929", + descWithKey: "\u5F53\u524D\u5FEB\u6377\u952E\uFF1A{hotkey}", + descNoKey: "\u672A\u8BBE\u7F6E\u5FEB\u6377\u952E", + btnChange: "\u66F4\u6539", + btnSet: "\u8BBE\u7F6E\u5FEB\u6377\u952E" + }, + newSessionHotkey: { + name: "\u65B0\u4F1A\u8BDD", + descWithKey: "\u5F53\u524D\u5FEB\u6377\u952E\uFF1A{hotkey}", + descNoKey: "\u672A\u8BBE\u7F6E\u5FEB\u6377\u952E", + btnChange: "\u66F4\u6539", + btnSet: "\u8BBE\u7F6E\u5FEB\u6377\u952E" + }, + newTabHotkey: { + name: "\u65B0\u6807\u7B7E\u9875", + descWithKey: "\u5F53\u524D\u5FEB\u6377\u952E\uFF1A{hotkey}", + descNoKey: "\u672A\u8BBE\u7F6E\u5FEB\u6377\u952E", + btnChange: "\u66F4\u6539", + btnSet: "\u8BBE\u7F6E\u5FEB\u6377\u952E" + }, + closeTabHotkey: { + name: "\u5173\u95ED\u6807\u7B7E\u9875", + descWithKey: "\u5F53\u524D\u5FEB\u6377\u952E\uFF1A{hotkey}", + descNoKey: "\u672A\u8BBE\u7F6E\u5FEB\u6377\u952E", + btnChange: "\u66F4\u6539", + btnSet: "\u8BBE\u7F6E\u5FEB\u6377\u952E" + }, + slashCommands: { + name: "\u547D\u4EE4\u4E0E\u6280\u80FD", + desc: "\u7BA1\u7406\u5B58\u50A8\u5728 .claude/commands/ \u548C .claude/skills/ \u4E2D\u7684 Vault \u7EA7\u547D\u4EE4\u4E0E\u6280\u80FD\u3002\u7531 /\u540D\u79F0 \u89E6\u53D1\u3002" + }, + hiddenSlashCommands: { + name: "\u9690\u85CF\u547D\u4EE4\u4E0E\u6280\u80FD", + desc: "\u4ECE\u4E0B\u62C9\u83DC\u5355\u4E2D\u9690\u85CF\u7279\u5B9A\u7684\u547D\u4EE4\u4E0E\u6280\u80FD\u3002\u9002\u7528\u4E8E\u9690\u85CF\u4E0E Claudian \u65E0\u5173\u7684 Claude Code \u6761\u76EE\u3002\u6BCF\u884C\u8F93\u5165\u4E00\u4E2A\u540D\u79F0\uFF0C\u65E0\u9700\u524D\u5BFC\u659C\u6760\u3002", + placeholder: "commit\nbuild\ntest" + }, + mcpServers: { + name: "MCP \u670D\u52A1\u5668", + desc: "\u7BA1\u7406\u5B58\u50A8\u5728 .claude/mcp.json \u4E2D\u7684 Vault \u7EA7 MCP \u670D\u52A1\u5668\u914D\u7F6E\u3002\u542F\u7528\u4E0A\u4E0B\u6587\u4FDD\u5B58\u6A21\u5F0F\u7684\u670D\u52A1\u5668\u9700\u8981 @ \u63D0\u53CA\u624D\u80FD\u6FC0\u6D3B\u3002" + }, + plugins: { + name: "Claude Code \u63D2\u4EF6", + desc: "\u7BA1\u7406\u4ECE ~/.claude/plugins \u53D1\u73B0\u7684 Claude Code \u63D2\u4EF6\u3002\u542F\u7528\u7684\u63D2\u4EF6\u6309 Vault \u5B58\u50A8\u5728 .claude/settings.json \u4E2D\u3002" + }, + subagents: { + name: "\u5B50\u4EE3\u7406", + desc: "\u7BA1\u7406\u5B58\u50A8\u5728 .claude/agents/ \u4E2D\u7684 Vault \u7EA7\u5B50\u4EE3\u7406\u3002\u6BCF\u4E2A Markdown \u6587\u4EF6\u5B9A\u4E49\u4E00\u4E2A\u81EA\u5B9A\u4E49\u4EE3\u7406\u3002", + noAgents: "\u5C1A\u672A\u914D\u7F6E\u5B50\u4EE3\u7406\u3002\u70B9\u51FB + \u521B\u5EFA\u4E00\u4E2A\u3002", + deleteConfirm: "\u5220\u9664\u5B50\u4EE3\u7406\u201C{name}\u201D\uFF1F", + saveFailed: "\u4FDD\u5B58\u5B50\u4EE3\u7406\u5931\u8D25\uFF1A{message}", + refreshFailed: "\u5237\u65B0\u5B50\u4EE3\u7406\u5931\u8D25\uFF1A{message}", + deleteFailed: "\u5220\u9664\u5B50\u4EE3\u7406\u5931\u8D25\uFF1A{message}", + renameCleanupFailed: "\u8B66\u544A\uFF1A\u65E0\u6CD5\u5220\u9664\u201C{name}\u201D\u7684\u65E7\u6587\u4EF6", + created: "\u5DF2\u521B\u5EFA\u5B50\u4EE3\u7406\u201C{name}\u201D", + updated: "\u5DF2\u66F4\u65B0\u5B50\u4EE3\u7406\u201C{name}\u201D", + deleted: "\u5DF2\u5220\u9664\u5B50\u4EE3\u7406\u201C{name}\u201D", + duplicateName: "\u540D\u4E3A\u201C{name}\u201D\u7684\u4EE3\u7406\u5DF2\u5B58\u5728", + descriptionRequired: "\u63CF\u8FF0\u4E3A\u5FC5\u586B\u9879", + promptRequired: "\u7CFB\u7EDF\u63D0\u793A\u8BCD\u4E3A\u5FC5\u586B\u9879", + modal: { + titleEdit: "\u7F16\u8F91\u5B50\u4EE3\u7406", + titleAdd: "\u6DFB\u52A0\u5B50\u4EE3\u7406", + name: "\u540D\u79F0", + nameDesc: "\u4EC5\u5141\u8BB8\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u548C\u8FDE\u5B57\u7B26", + namePlaceholder: "code-reviewer", + description: "\u63CF\u8FF0", + descriptionDesc: "\u8BE5\u4EE3\u7406\u7684\u7B80\u8981\u63CF\u8FF0", + descriptionPlaceholder: "\u5BA1\u67E5\u4EE3\u7801\u4E2D\u7684\u9519\u8BEF\u548C\u98CE\u683C\u95EE\u9898", + advancedOptions: "\u9AD8\u7EA7\u9009\u9879", + model: "\u6A21\u578B", + modelDesc: "\u8BE5\u4EE3\u7406\u7684\u6A21\u578B\u8986\u76D6", + tools: "\u5DE5\u5177", + toolsDesc: "\u5141\u8BB8\u4F7F\u7528\u7684\u5DE5\u5177\u5217\u8868\uFF0C\u7528\u9017\u53F7\u5206\u9694\uFF08\u7559\u7A7A = \u5168\u90E8\uFF09", + disallowedTools: "\u7981\u7528\u5DE5\u5177", + disallowedToolsDesc: "\u8981\u7981\u7528\u7684\u5DE5\u5177\u5217\u8868\uFF0C\u7528\u9017\u53F7\u5206\u9694", + skills: "\u6280\u80FD", + skillsDesc: "\u6280\u80FD\u5217\u8868\uFF0C\u7528\u9017\u53F7\u5206\u9694", + prompt: "\u7CFB\u7EDF\u63D0\u793A\u8BCD", + promptDesc: "\u7ED9\u4EE3\u7406\u7684\u6307\u4EE4", + promptPlaceholder: "\u4F60\u662F\u4E00\u540D\u4EE3\u7801\u5BA1\u67E5\u5458\u3002\u8BF7\u5206\u6790\u7ED9\u5B9A\u4EE3\u7801\u4E2D\u7684..." + } + }, + safety: "\u5B89\u5168", + loadUserSettings: { + name: "\u52A0\u8F7D\u7528\u6237 Claude \u8BBE\u7F6E", + desc: "\u52A0\u8F7D ~/.claude/settings.json\u3002\u542F\u7528\u540E\uFF0C\u7528\u6237\u7684 Claude Code \u6743\u9650\u89C4\u5219\u53EF\u80FD\u7ED5\u8FC7\u5B89\u5168\u6A21\u5F0F\u3002" + }, + claudeSafeMode: { + name: "Safe mode", + desc: "Permission mode used when the Safe toggle is active." + }, + codexSafeMode: { + name: "Safe mode", + desc: "Sandbox mode used when the Safe toggle is active." + }, + environment: "\u73AF\u5883", + customVariables: { + name: "\u81EA\u5B9A\u4E49\u53D8\u91CF", + desc: "Claude SDK \u7684\u73AF\u5883\u53D8\u91CF\uFF08KEY=VALUE \u683C\u5F0F\uFF0C\u6BCF\u884C\u4E00\u4E2A\uFF09\u3002\u652F\u6301 export \u524D\u7F00\u3002" + }, + envSnippets: { + name: "\u7247\u6BB5", + addBtn: "\u6DFB\u52A0\u7247\u6BB5", + noSnippets: "\u5C1A\u65E0\u4FDD\u5B58\u7684\u73AF\u5883\u53D8\u91CF\u7247\u6BB5\u3002\u70B9\u51FB + \u4FDD\u5B58\u5F53\u524D\u914D\u7F6E\u3002", + nameRequired: "\u8BF7\u8F93\u5165\u7247\u6BB5\u540D\u79F0", + modal: { + titleEdit: "\u7F16\u8F91\u7247\u6BB5", + titleSave: "\u4FDD\u5B58\u7247\u6BB5", + name: "\u540D\u79F0", + namePlaceholder: "\u6B64\u914D\u7F6E\u7684\u63CF\u8FF0\u6027\u540D\u79F0", + description: "\u63CF\u8FF0", + descPlaceholder: "\u53EF\u9009\u63CF\u8FF0", + envVars: "\u73AF\u5883\u53D8\u91CF", + envVarsPlaceholder: "KEY=VALUE \u683C\u5F0F\uFF0C\u6BCF\u884C\u4E00\u4E2A\uFF08\u652F\u6301 export \u524D\u7F00\uFF09", + save: "\u4FDD\u5B58", + update: "\u66F4\u65B0", + cancel: "\u53D6\u6D88" + } + }, + customModelOverrides: { + name: "\u81EA\u5B9A\u4E49\u6A21\u578B\u8986\u76D6", + desc: "\u4E3A\u81EA\u5B9A\u4E49\u6A21\u578B\u8BBE\u7F6E\u6A21\u578B\u9009\u62E9\u5668\u522B\u540D\u548C\u4E0A\u4E0B\u6587\u7A97\u53E3\u5927\u5C0F\u3002" + }, + customModelAliases: { + placeholder: "\u522B\u540D" + }, + customContextLimits: { + name: "\u81EA\u5B9A\u4E49\u4E0A\u4E0B\u6587\u9650\u5236", + desc: "\u4E3A\u60A8\u7684\u81EA\u5B9A\u4E49\u6A21\u578B\u8BBE\u7F6E\u4E0A\u4E0B\u6587\u7A97\u53E3\u5927\u5C0F\u3002\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4\u503C\uFF08200k \u4EE4\u724C\uFF09\u3002", + invalid: "\u683C\u5F0F\u65E0\u6548\u3002\u4F7F\u7528\uFF1A256k\u30011m \u6216\u7CBE\u786E\u6570\u91CF\uFF081000-10000000\uFF09\u3002" + }, + enableOpus1M: { + name: "Opus 1M \u4E0A\u4E0B\u6587\u7A97\u53E3", + desc: "\u5728\u6A21\u578B\u9009\u62E9\u5668\u4E2D\u663E\u793A Opus 1M\u3002Max\u3001Team \u548C Enterprise \u8BA1\u5212\u5DF2\u5305\u542B\u3002API \u548C Pro \u7528\u6237\u9700\u8981\u989D\u5916\u7528\u91CF\u3002" + }, + enableSonnet1M: { + name: "Sonnet 1M \u4E0A\u4E0B\u6587\u7A97\u53E3", + desc: "\u5728\u6A21\u578B\u9009\u62E9\u5668\u4E2D\u663E\u793A Sonnet 1M\u3002Max\u3001Team \u548C Enterprise \u8BA1\u5212\u9700\u8981\u989D\u5916\u7528\u91CF\u3002API \u548C Pro \u7528\u6237\u9700\u8981\u989D\u5916\u7528\u91CF\u3002" + }, + customModels: { + name: "Custom models", + desc: "Append additional Claude model IDs to the picker, one per line. Environment model overrides still replace the picker.", + placeholder: "claude-opus-4-6\nclaude-opus-4-6[1m]\nclaude-opus-4-5-20251101" + }, + enableChrome: { + name: "\u542F\u7528 Chrome \u6269\u5C55", + desc: "\u5141\u8BB8 Claude \u901A\u8FC7 claude-in-chrome \u6269\u5C55\u4E0E Chrome \u4EA4\u4E92\u3002\u9700\u8981\u5B89\u88C5\u8BE5\u6269\u5C55\u3002\u9700\u8981\u91CD\u542F\u4F1A\u8BDD\u3002" + }, + enableBangBash: { + name: "\u542F\u7528\u547D\u4EE4\u6A21\u5F0F (!)", + desc: "\u5728\u7A7A\u8F93\u5165\u6846\u4E2D\u8F93\u5165 ! \u8FDB\u5165\u547D\u4EE4\u6A21\u5F0F\u3002\u901A\u8FC7 Node.js child_process \u76F4\u63A5\u8FD0\u884C\u547D\u4EE4\u3002\u9700\u8981\u91CD\u65B0\u6253\u5F00\u89C6\u56FE\u3002", + validation: { + noNode: "\u672A\u5728 PATH \u4E2D\u627E\u5230 Node.js\u3002\u8BF7\u5B89\u88C5 Node.js \u6216\u68C0\u67E5 PATH \u914D\u7F6E\u3002" + } + }, + maxTabs: { + name: "\u6700\u5927\u804A\u5929\u6807\u7B7E\u6570", + desc: "\u540C\u65F6\u5F00\u542F\u7684\u6700\u5927\u804A\u5929\u6807\u7B7E\u6570\uFF083-10\uFF09\u3002\u6BCF\u4E2A\u6807\u7B7E\u4F7F\u7528\u72EC\u7ACB\u7684 Claude \u4F1A\u8BDD\u3002", + warning: "\u8D85\u8FC7 5 \u4E2A\u6807\u7B7E\u53EF\u80FD\u4F1A\u5F71\u54CD\u6027\u80FD\u548C\u5185\u5B58\u4F7F\u7528\u3002" + }, + tabBarPosition: { + name: "\u6807\u7B7E\u680F\u4F4D\u7F6E", + desc: "\u9009\u62E9\u6807\u7B7E\u5FBD\u7AE0\u548C\u64CD\u4F5C\u6309\u94AE\u7684\u663E\u793A\u4F4D\u7F6E", + input: "\u8F93\u5165\u6846\u4E0A\u65B9\uFF08\u9ED8\u8BA4\uFF09", + header: "\u5728\u6807\u9898\u680F" + }, + enableAutoScroll: { + name: "\u6D41\u5F0F\u4F20\u8F93\u65F6\u81EA\u52A8\u6EDA\u52A8", + desc: "\u5728 Claude \u6D41\u5F0F\u4F20\u8F93\u54CD\u5E94\u65F6\u81EA\u52A8\u6EDA\u52A8\u5230\u5E95\u90E8\u3002\u7981\u7528\u540E\u5C06\u505C\u7559\u5728\u9876\u90E8\uFF0C\u4ECE\u5934\u5F00\u59CB\u9605\u8BFB\u3002" + }, + deferMathRenderingDuringStreaming: { + name: "\u6D41\u5F0F\u4F20\u8F93\u65F6\u5EF6\u8FDF\u6E32\u67D3\u6570\u5B66\u516C\u5F0F", + desc: "\u54CD\u5E94\u6D41\u5F0F\u4F20\u8F93\u65F6\u663E\u793A\u539F\u59CB LaTeX\uFF0C\u5E76\u5728\u6BCF\u4E2A\u6587\u672C\u5757\u5B8C\u6210\u540E\u53EA\u6E32\u67D3\u4E00\u6B21\u6570\u5B66\u516C\u5F0F\u3002" + }, + chatViewPlacement: { + name: "Claudian \u6253\u5F00\u4F4D\u7F6E", + desc: "\u9009\u62E9\u65B0\u5EFA\u804A\u5929\u9762\u677F\u65F6\u7684\u6253\u5F00\u4F4D\u7F6E", + rightSidebar: "\u53F3\u4FA7\u8FB9\u680F", + leftSidebar: "\u5DE6\u4FA7\u8FB9\u680F", + mainTab: "\u4E3B\u7F16\u8F91\u5668\u6807\u7B7E\u9875" + }, + cliPath: { + name: "Claude CLI \u8DEF\u5F84", + desc: "Claude Code CLI \u7684\u81EA\u5B9A\u4E49\u8DEF\u5F84\u3002\u7559\u7A7A\u4F7F\u7528\u81EA\u52A8\u68C0\u6D4B\u3002", + descWindows: "\u5BF9\u4E8E\u539F\u751F\u5B89\u88C5\u7A0B\u5E8F\uFF0C\u4F7F\u7528 claude.exe\u3002\u5BF9\u4E8E npm/pnpm/yarn \u6216\u5176\u4ED6\u5305\u7BA1\u7406\u5668\u5B89\u88C5\uFF0C\u4F7F\u7528 cli-wrapper.cjs \u8DEF\u5F84\uFF08\u4E0D\u662F claude.cmd\uFF09\u3002", + descUnix: '\u7C98\u8D34 "which claude" \u7684\u8F93\u51FA - \u9002\u7528\u4E8E\u539F\u751F\u5B89\u88C5\u548C npm/pnpm/yarn \u5B89\u88C5\u3002', + validation: { + notExist: "\u8DEF\u5F84\u4E0D\u5B58\u5728", + isDirectory: "\u8DEF\u5F84\u662F\u76EE\u5F55\uFF0C\u4E0D\u662F\u6587\u4EF6" + } + }, + language: { + name: "\u8BED\u8A00", + desc: "\u66F4\u6539\u63D2\u4EF6\u754C\u9762\u7684\u663E\u793A\u8BED\u8A00" + } +}; +var zh_CN_default = { + common: common9, + chat: chat9, + settings: settings9 +}; + +// src/i18n/locales/zh-TW.json +var zh_TW_exports = {}; +__export(zh_TW_exports, { + chat: () => chat10, + common: () => common10, + default: () => zh_TW_default, + settings: () => settings10 +}); +var common10 = { + save: "\u4FDD\u5B58", + cancel: "\u53D6\u6D88", + delete: "\u522A\u9664", + edit: "\u7DE8\u8F2F", + add: "\u6DFB\u52A0", + remove: "\u79FB\u9664", + clear: "\u6E05\u9664", + clearAll: "\u6E05\u9664\u5168\u90E8", + loading: "\u52A0\u8F09\u4E2D", + error: "\u932F\u8AA4", + success: "\u6210\u529F", + warning: "\u8B66\u544A", + confirm: "\u78BA\u8A8D", + settings: "\u8A2D\u7F6E", + advanced: "\u9AD8\u7D1A", + enabled: "\u5DF2\u555F\u7528", + disabled: "\u5DF2\u7981\u7528", + platform: "\u5E73\u53F0", + refresh: "\u91CD\u65B0\u6574\u7406", + rewind: "\u56DE\u9000" +}; +var chat10 = { + rewind: { + confirmMessage: "\u56DE\u9000\u5230\u6B64\u8655\uFF1F\u6B64\u8A0A\u606F\u4E4B\u5F8C\u7684\u6A94\u6848\u8B8A\u66F4\u5C07\u88AB\u9084\u539F\u3002\u56DE\u9000\u4E0D\u6703\u5F71\u97FF\u624B\u52D5\u6216\u900F\u904E bash \u7DE8\u8F2F\u7684\u6A94\u6848\u3002", + confirmMessageConversationOnly: "\u5C07\u5C0D\u8A71\u56DE\u9000\u5230\u6B64\u8655\uFF1F\u6A94\u6848\u8B8A\u66F4\u5C07\u4FDD\u7559\u3002", + confirmButton: "\u56DE\u9000", + ariaLabel: "\u56DE\u9000\u5230\u6B64\u8655", + menuConversationOnly: "\u50C5\u56DE\u9000\u5C0D\u8A71", + menuCodeAndConversation: "\u56DE\u9000\u7A0B\u5F0F\u78BC + \u5C0D\u8A71", + notice: "\u5DF2\u56DE\u9000\uFF1A\u9084\u539F\u4E86 {count} \u500B\u6A94\u6848", + noticeConversationOnly: "\u5DF2\u56DE\u9000\u5C0D\u8A71\uFF1B\u6A94\u6848\u8B8A\u66F4\u5DF2\u4FDD\u7559", + noticeSaveFailed: "\u5DF2\u56DE\u9000\uFF1A\u9084\u539F\u4E86 {count} \u500B\u6A94\u6848\uFF0C\u4F46\u7121\u6CD5\u5132\u5B58\u72C0\u614B\uFF1A{error}", + noticeConversationOnlySaveFailed: "\u5DF2\u56DE\u9000\u5C0D\u8A71\uFF0C\u4F46\u7121\u6CD5\u5132\u5B58\u72C0\u614B\uFF1A{error}", + failed: "\u56DE\u9000\u5931\u6557\uFF1A{error}", + cannot: "\u7121\u6CD5\u56DE\u9000\uFF1A{error}", + unavailableStreaming: "\u4E32\u6D41\u56DE\u61C9\u4E2D\u7121\u6CD5\u56DE\u9000", + unavailableNoUuid: "\u7121\u6CD5\u56DE\u9000\uFF1A\u7F3A\u5C11\u8A0A\u606F\u8B58\u5225\u78BC" + }, + fork: { + ariaLabel: "\u5206\u53C9\u5C0D\u8A71", + chooseTarget: "\u5206\u53C9\u5C0D\u8A71", + targetNewTab: "\u65B0\u5206\u9801", + targetCurrentTab: "\u76EE\u524D\u5206\u9801", + maxTabsReached: "\u7121\u6CD5\u5206\u53C9\uFF1A\u5DF2\u9054\u5230\u6700\u5927 {count} \u500B\u5206\u9801", + notice: "\u5DF2\u5206\u53C9\u5230\u65B0\u5206\u9801", + noticeCurrentTab: "\u5DF2\u5728\u76EE\u524D\u5206\u9801\u5206\u53C9", + failed: "\u5206\u53C9\u5931\u6557\uFF1A{error}", + unavailableStreaming: "\u4E32\u6D41\u56DE\u61C9\u4E2D\u7121\u6CD5\u5206\u53C9", + unavailableNoUuid: "\u7121\u6CD5\u5206\u53C9\uFF1A\u7F3A\u5C11\u8A0A\u606F\u8B58\u5225\u78BC", + unavailableNoResponse: "\u7121\u6CD5\u5206\u53C9\uFF1A\u6C92\u6709\u53EF\u5206\u53C9\u7684\u56DE\u61C9", + errorMessageNotFound: "\u627E\u4E0D\u5230\u8A0A\u606F", + errorNoSession: "\u6C92\u6709\u53EF\u7528\u7684\u5DE5\u4F5C\u968E\u6BB5 ID", + errorNoActiveTab: "\u6C92\u6709\u4F7F\u7528\u4E2D\u7684\u5206\u9801", + commandNoMessages: "\u7121\u6CD5\u5206\u53C9\uFF1A\u5C0D\u8A71\u4E2D\u6C92\u6709\u8A0A\u606F", + commandNoAssistantUuid: "\u7121\u6CD5\u5206\u53C9\uFF1A\u6C92\u6709\u5E36\u8B58\u5225\u78BC\u7684\u52A9\u624B\u56DE\u8986" + }, + bangBash: { + placeholder: "> \u57F7\u884C bash \u6307\u4EE4...", + commandPanel: "\u6307\u4EE4\u9762\u677F", + copyAriaLabel: "\u8907\u88FD\u6700\u65B0\u7684\u6307\u4EE4\u8F38\u51FA", + clearAriaLabel: "\u6E05\u9664 bash \u8F38\u51FA", + commandLabel: "{command}", + statusLabel: "\u72C0\u614B\uFF1A{status}", + collapseOutput: "\u647A\u758A\u6307\u4EE4\u8F38\u51FA", + expandOutput: "\u5C55\u958B\u6307\u4EE4\u8F38\u51FA", + running: "\u57F7\u884C\u4E2D...", + copyFailed: "\u8907\u88FD\u5230\u526A\u8CBC\u7C3F\u5931\u6557" + } +}; +var settings10 = { + title: "Claudian \u8A2D\u5B9A", + tabs: { + general: "\u4E00\u822C", + claude: "Claude", + codex: "Codex" + }, + display: "\u986F\u793A", + conversations: "\u5C0D\u8A71", + content: "\u5167\u5BB9", + input: "\u8F38\u5165", + setup: "\u8A2D\u5B9A", + models: "\u6A21\u578B", + experimental: "\u5BE6\u9A57\u6027\u529F\u80FD", + userName: { + name: "Claudian \u61C9\u8A72\u5982\u4F55\u7A31\u547C\u60A8\uFF1F", + desc: "\u7528\u65BC\u500B\u4EBA\u5316\u554F\u5019\u7684\u4F7F\u7528\u8005\u540D\u7A31\uFF08\u7559\u7A7A\u4F7F\u7528\u901A\u7528\u554F\u5019\uFF09" + }, + excludedTags: { + name: "\u6392\u9664\u7684\u6A19\u7C64", + desc: "\u5305\u542B\u9019\u4E9B\u6A19\u7C64\u7684\u7B46\u8A18\u4E0D\u6703\u81EA\u52D5\u8F09\u5165\u70BA\u4E0A\u4E0B\u6587\uFF08\u6BCF\u884C\u4E00\u500B\uFF0C\u4E0D\u5E36 #\uFF09" + }, + mediaFolder: { + name: "\u5A92\u9AD4\u8CC7\u6599\u593E", + desc: "\u5B58\u653E\u9644\u4EF6/\u5716\u7247\u7684\u8CC7\u6599\u593E\u3002\u7576\u7B46\u8A18\u4F7F\u7528 ![[image.jpg]] \u6642\uFF0CClaude \u6703\u5728\u6B64\u67E5\u627E\u3002\u7559\u7A7A\u4F7F\u7528\u5132\u5B58\u5EAB\u6839\u76EE\u9304\u3002" + }, + systemPrompt: { + name: "\u81EA\u8A02\u7CFB\u7D71\u63D0\u793A\u8A5E", + desc: "\u9644\u52A0\u5230\u9810\u8A2D\u7CFB\u7D71\u63D0\u793A\u8A5E\u7684\u984D\u5916\u6307\u4EE4" + }, + autoTitle: { + name: "\u81EA\u52D5\u751F\u6210\u5C0D\u8A71\u6A19\u984C", + desc: "\u5728\u4F7F\u7528\u8005\u9001\u51FA\u7B2C\u4E00\u5247\u8A0A\u606F\u5F8C\u81EA\u52D5\u751F\u6210\u5C0D\u8A71\u6A19\u984C\u3002" + }, + titleModel: { + name: "\u6A19\u984C\u751F\u6210\u6A21\u578B", + desc: "\u7528\u65BC\u81EA\u52D5\u751F\u6210\u5C0D\u8A71\u6A19\u984C\u7684\u6A21\u578B\u3002", + auto: "\u81EA\u52D5 (Haiku)" + }, + navMappings: { + name: "Vim \u98A8\u683C\u5C0E\u822A\u6620\u5C04", + desc: '\u6BCF\u884C\u4E00\u500B\u6620\u5C04\u3002\u683C\u5F0F\uFF1A"map <\u9375> <\u52D5\u4F5C>"\uFF08\u52D5\u4F5C\uFF1AscrollUp, scrollDown, focusInput\uFF09\u3002' + }, + requireCommandOrControlEnterToSend: { + name: "\u9700\u8981 Command/Ctrl+Enter \u624D\u80FD\u50B3\u9001", + desc: "\u555F\u7528\u5F8C\uFF0CEnter \u6703\u63D2\u5165\u63DB\u884C\u3002macOS \u4F7F\u7528 Command+Enter \u50B3\u9001\uFF1BWindows \u548C Linux \u4F7F\u7528 Ctrl+Enter \u50B3\u9001\u3002" + }, + hotkeys: "\u5FEB\u6377\u9375", + inlineEditHotkey: { + name: "\u5167\u5D4C\u7DE8\u8F2F", + descWithKey: "\u76EE\u524D\u5FEB\u6377\u9375\uFF1A{hotkey}", + descNoKey: "\u672A\u8A2D\u5B9A\u5FEB\u6377\u9375", + btnChange: "\u8B8A\u66F4", + btnSet: "\u8A2D\u5B9A\u5FEB\u6377\u9375" + }, + openChatHotkey: { + name: "\u958B\u555F\u804A\u5929", + descWithKey: "\u76EE\u524D\u5FEB\u6377\u9375\uFF1A{hotkey}", + descNoKey: "\u672A\u8A2D\u5B9A\u5FEB\u6377\u9375", + btnChange: "\u8B8A\u66F4", + btnSet: "\u8A2D\u5B9A\u5FEB\u6377\u9375" + }, + newSessionHotkey: { + name: "\u65B0\u5DE5\u4F5C\u968E\u6BB5", + descWithKey: "\u76EE\u524D\u5FEB\u6377\u9375\uFF1A{hotkey}", + descNoKey: "\u672A\u8A2D\u5B9A\u5FEB\u6377\u9375", + btnChange: "\u8B8A\u66F4", + btnSet: "\u8A2D\u5B9A\u5FEB\u6377\u9375" + }, + newTabHotkey: { + name: "\u65B0\u5206\u9801", + descWithKey: "\u76EE\u524D\u5FEB\u6377\u9375\uFF1A{hotkey}", + descNoKey: "\u672A\u8A2D\u5B9A\u5FEB\u6377\u9375", + btnChange: "\u8B8A\u66F4", + btnSet: "\u8A2D\u5B9A\u5FEB\u6377\u9375" + }, + closeTabHotkey: { + name: "\u95DC\u9589\u5206\u9801", + descWithKey: "\u76EE\u524D\u5FEB\u6377\u9375\uFF1A{hotkey}", + descNoKey: "\u672A\u8A2D\u5B9A\u5FEB\u6377\u9375", + btnChange: "\u8B8A\u66F4", + btnSet: "\u8A2D\u5B9A\u5FEB\u6377\u9375" + }, + slashCommands: { + name: "\u547D\u4EE4\u8207\u6280\u80FD", + desc: "\u7BA1\u7406\u5132\u5B58\u5728 .claude/commands/ \u548C .claude/skills/ \u4E2D\u7684 Vault \u7D1A\u547D\u4EE4\u8207\u6280\u80FD\u3002\u7531 /\u540D\u7A31 \u89F8\u767C\u3002" + }, + hiddenSlashCommands: { + name: "\u96B1\u85CF\u547D\u4EE4\u8207\u6280\u80FD", + desc: "\u5F9E\u4E0B\u62C9\u9078\u55AE\u4E2D\u96B1\u85CF\u7279\u5B9A\u7684\u547D\u4EE4\u8207\u6280\u80FD\u3002\u9069\u7528\u65BC\u96B1\u85CF\u8207 Claudian \u7121\u95DC\u7684 Claude Code \u9805\u76EE\u3002\u6BCF\u884C\u8F38\u5165\u4E00\u500B\u540D\u7A31\uFF0C\u7121\u9700\u524D\u5C0E\u659C\u7DDA\u3002", + placeholder: "commit\nbuild\ntest" + }, + mcpServers: { + name: "MCP \u4F3A\u670D\u5668", + desc: "\u7BA1\u7406\u5132\u5B58\u5728 .claude/mcp.json \u4E2D\u7684 Vault \u7D1A MCP \u4F3A\u670D\u5668\u914D\u7F6E\u3002\u555F\u7528\u4E0A\u4E0B\u6587\u4FDD\u5B58\u6A21\u5F0F\u7684\u4F3A\u670D\u5668\u9700\u8981 @ \u63D0\u53CA\u624D\u80FD\u555F\u7528\u3002" + }, + plugins: { + name: "Claude Code \u5916\u639B\u7A0B\u5F0F", + desc: "\u7BA1\u7406\u5F9E ~/.claude/plugins \u767C\u73FE\u7684 Claude Code \u5916\u639B\u7A0B\u5F0F\u3002\u5DF2\u555F\u7528\u7684\u5916\u639B\u7A0B\u5F0F\u6309 Vault \u5132\u5B58\u5728 .claude/settings.json \u4E2D\u3002" + }, + subagents: { + name: "\u5B50\u4EE3\u7406", + desc: "\u7BA1\u7406\u5132\u5B58\u5728 .claude/agents/ \u4E2D\u7684 Vault \u7D1A\u5B50\u4EE3\u7406\u3002\u6BCF\u500B Markdown \u6A94\u6848\u5B9A\u7FA9\u4E00\u500B\u81EA\u8A02\u4EE3\u7406\u3002", + noAgents: "\u5C1A\u672A\u8A2D\u5B9A\u5B50\u4EE3\u7406\u3002\u9EDE\u64CA + \u5EFA\u7ACB\u4E00\u500B\u3002", + deleteConfirm: "\u522A\u9664\u5B50\u4EE3\u7406\u300C{name}\u300D\uFF1F", + saveFailed: "\u5132\u5B58\u5B50\u4EE3\u7406\u5931\u6557\uFF1A{message}", + refreshFailed: "\u91CD\u65B0\u6574\u7406\u5B50\u4EE3\u7406\u5931\u6557\uFF1A{message}", + deleteFailed: "\u522A\u9664\u5B50\u4EE3\u7406\u5931\u6557\uFF1A{message}", + renameCleanupFailed: "\u8B66\u544A\uFF1A\u7121\u6CD5\u79FB\u9664\u300C{name}\u300D\u7684\u820A\u6A94\u6848", + created: "\u5DF2\u5EFA\u7ACB\u5B50\u4EE3\u7406\u300C{name}\u300D", + updated: "\u5DF2\u66F4\u65B0\u5B50\u4EE3\u7406\u300C{name}\u300D", + deleted: "\u5DF2\u522A\u9664\u5B50\u4EE3\u7406\u300C{name}\u300D", + duplicateName: "\u5DF2\u5B58\u5728\u540D\u70BA\u300C{name}\u300D\u7684\u4EE3\u7406", + descriptionRequired: "\u63CF\u8FF0\u70BA\u5FC5\u586B", + promptRequired: "\u7CFB\u7D71\u63D0\u793A\u8A5E\u70BA\u5FC5\u586B", + modal: { + titleEdit: "\u7DE8\u8F2F\u5B50\u4EE3\u7406", + titleAdd: "\u65B0\u589E\u5B50\u4EE3\u7406", + name: "\u540D\u7A31", + nameDesc: "\u50C5\u9650\u5C0F\u5BEB\u5B57\u6BCD\u3001\u6578\u5B57\u8207\u9023\u5B57\u865F", + namePlaceholder: "code-reviewer", + description: "\u63CF\u8FF0", + descriptionDesc: "\u6B64\u4EE3\u7406\u7684\u7C21\u77ED\u63CF\u8FF0", + descriptionPlaceholder: "\u6AA2\u67E5\u7A0B\u5F0F\u78BC\u4E2D\u7684\u932F\u8AA4\u8207\u98A8\u683C\u554F\u984C", + advancedOptions: "\u9032\u968E\u9078\u9805", + model: "\u6A21\u578B", + modelDesc: "\u6B64\u4EE3\u7406\u7684\u6A21\u578B\u8986\u5BEB", + tools: "\u5DE5\u5177", + toolsDesc: "\u5141\u8A31\u5DE5\u5177\u7684\u9017\u865F\u5206\u9694\u6E05\u55AE\uFF08\u7559\u7A7A = \u5168\u90E8\uFF09", + disallowedTools: "\u7981\u7528\u5DE5\u5177", + disallowedToolsDesc: "\u8981\u7981\u7528\u7684\u5DE5\u5177\u6E05\u55AE\uFF0C\u4EE5\u9017\u865F\u5206\u9694", + skills: "\u6280\u80FD", + skillsDesc: "\u6280\u80FD\u6E05\u55AE\uFF0C\u4EE5\u9017\u865F\u5206\u9694", + prompt: "\u7CFB\u7D71\u63D0\u793A\u8A5E", + promptDesc: "\u7D66\u4EE3\u7406\u7684\u6307\u793A", + promptPlaceholder: "\u4F60\u662F\u4E00\u540D\u7A0B\u5F0F\u78BC\u5BE9\u67E5\u54E1\u3002\u8ACB\u5206\u6790\u7D66\u5B9A\u7684\u7A0B\u5F0F\u78BC..." + } + }, + safety: "\u5B89\u5168", + loadUserSettings: { + name: "\u8F09\u5165\u4F7F\u7528\u8005 Claude \u8A2D\u5B9A", + desc: "\u8F09\u5165 ~/.claude/settings.json\u3002\u555F\u7528\u5F8C\uFF0C\u4F7F\u7528\u8005\u7684 Claude Code \u6B0A\u9650\u898F\u5247\u53EF\u80FD\u7E5E\u904E\u5B89\u5168\u6A21\u5F0F\u3002" + }, + claudeSafeMode: { + name: "Safe mode", + desc: "Permission mode used when the Safe toggle is active." + }, + codexSafeMode: { + name: "Safe mode", + desc: "Sandbox mode used when the Safe toggle is active." + }, + environment: "\u74B0\u5883", + customVariables: { + name: "\u81EA\u8A02\u8B8A\u6578", + desc: "Claude SDK \u7684\u74B0\u5883\u8B8A\u6578\uFF08KEY=VALUE \u683C\u5F0F\uFF0C\u6BCF\u884C\u4E00\u500B\uFF09\u3002\u652F\u63F4 export \u524D\u7DB4\u3002" + }, + envSnippets: { + name: "\u7247\u6BB5", + addBtn: "\u65B0\u589E\u7247\u6BB5", + noSnippets: "\u5C1A\u7121\u4FDD\u5B58\u7684\u74B0\u5883\u8B8A\u6578\u7247\u6BB5\u3002\u9EDE\u64CA + \u4FDD\u5B58\u7576\u524D\u914D\u7F6E\u3002", + nameRequired: "\u8ACB\u8F38\u5165\u7247\u6BB5\u540D\u7A31", + modal: { + titleEdit: "\u7DE8\u8F2F\u7247\u6BB5", + titleSave: "\u4FDD\u5B58\u7247\u6BB5", + name: "\u540D\u7A31", + namePlaceholder: "\u6B64\u914D\u7F6E\u7684\u63CF\u8FF0\u6027\u540D\u7A31", + description: "\u63CF\u8FF0", + descPlaceholder: "\u53EF\u9078\u63CF\u8FF0", + envVars: "\u74B0\u5883\u8B8A\u6578", + envVarsPlaceholder: "KEY=VALUE \u683C\u5F0F\uFF0C\u6BCF\u884C\u4E00\u500B\uFF08\u652F\u63F4 export \u524D\u7DB4\uFF09", + save: "\u4FDD\u5B58", + update: "\u66F4\u65B0", + cancel: "\u53D6\u6D88" + } + }, + customModelOverrides: { + name: "\u81EA\u8A02\u6A21\u578B\u8986\u5BEB", + desc: "\u70BA\u81EA\u8A02\u6A21\u578B\u8A2D\u5B9A\u6A21\u578B\u9078\u64C7\u5668\u5225\u540D\u548C\u4E0A\u4E0B\u6587\u8996\u7A97\u5927\u5C0F\u3002" + }, + customModelAliases: { + placeholder: "\u5225\u540D" + }, + customContextLimits: { + name: "\u81EA\u8A02\u4E0A\u4E0B\u6587\u9650\u5236", + desc: "\u70BA\u60A8\u7684\u81EA\u8A02\u6A21\u578B\u8A2D\u5B9A\u4E0A\u4E0B\u6587\u8996\u7A97\u5927\u5C0F\u3002\u7559\u7A7A\u4F7F\u7528\u9810\u8A2D\u503C\uFF08200k \u6B0A\u6756\uFF09\u3002", + invalid: "\u683C\u5F0F\u7121\u6548\u3002\u4F7F\u7528\uFF1A256k\u30011m \u6216\u7CBE\u78BA\u6578\u91CF\uFF081000-10000000\uFF09\u3002" + }, + enableOpus1M: { + name: "Opus 1M \u4E0A\u4E0B\u6587\u8996\u7A97", + desc: "\u5728\u6A21\u578B\u9078\u64C7\u5668\u4E2D\u986F\u793A Opus 1M\u3002Max\u3001Team \u548C Enterprise \u65B9\u6848\u5DF2\u5305\u542B\u3002API \u548C Pro \u4F7F\u7528\u8005\u9700\u8981\u984D\u5916\u7528\u91CF\u3002" + }, + enableSonnet1M: { + name: "Sonnet 1M \u4E0A\u4E0B\u6587\u8996\u7A97", + desc: "\u5728\u6A21\u578B\u9078\u64C7\u5668\u4E2D\u986F\u793A Sonnet 1M\u3002Max\u3001Team \u548C Enterprise \u65B9\u6848\u9700\u8981\u984D\u5916\u7528\u91CF\u3002API \u548C Pro \u4F7F\u7528\u8005\u9700\u8981\u984D\u5916\u7528\u91CF\u3002" + }, + customModels: { + name: "Custom models", + desc: "Append additional Claude model IDs to the picker, one per line. Environment model overrides still replace the picker.", + placeholder: "claude-opus-4-6\nclaude-opus-4-6[1m]\nclaude-opus-4-5-20251101" + }, + enableChrome: { + name: "\u555F\u7528 Chrome \u64F4\u5145\u529F\u80FD", + desc: "\u5141\u8A31 Claude \u900F\u904E claude-in-chrome \u64F4\u5145\u529F\u80FD\u8207 Chrome \u4E92\u52D5\u3002\u9700\u8981\u5B89\u88DD\u8A72\u64F4\u5145\u529F\u80FD\u3002\u9700\u8981\u91CD\u65B0\u555F\u52D5\u5DE5\u4F5C\u968E\u6BB5\u3002" + }, + enableBangBash: { + name: "\u555F\u7528 bash \u6A21\u5F0F (!)", + desc: "\u5728\u7A7A\u767D\u8F38\u5165\u6846\u4E2D\u8F38\u5165 ! \u4EE5\u9032\u5165 bash \u6A21\u5F0F\u3002\u900F\u904E Node.js child_process \u76F4\u63A5\u57F7\u884C\u6307\u4EE4\u3002\u9700\u8981\u91CD\u65B0\u958B\u555F\u6AA2\u8996\u3002", + validation: { + noNode: "\u5728 PATH \u4E2D\u627E\u4E0D\u5230 Node.js\u3002\u8ACB\u5B89\u88DD Node.js \u6216\u6AA2\u67E5 PATH \u8A2D\u5B9A\u3002" + } + }, + maxTabs: { + name: "\u6700\u5927\u804A\u5929\u6A19\u7C64\u6578", + desc: "\u540C\u6642\u958B\u555F\u7684\u6700\u5927\u804A\u5929\u6A19\u7C64\u6578\uFF083-10\uFF09\u3002\u6BCF\u500B\u6A19\u7C64\u4F7F\u7528\u7368\u7ACB\u7684 Claude \u5C0D\u8A71\u3002", + warning: "\u8D85\u904E 5 \u500B\u6A19\u7C64\u53EF\u80FD\u6703\u5F71\u97FF\u6548\u80FD\u548C\u8A18\u61B6\u9AD4\u4F7F\u7528\u3002" + }, + tabBarPosition: { + name: "\u6A19\u7C64\u5217\u4F4D\u7F6E", + desc: "\u9078\u64C7\u6A19\u7C64\u5FBD\u7AE0\u548C\u64CD\u4F5C\u6309\u9215\u7684\u986F\u793A\u4F4D\u7F6E", + input: "\u8F38\u5165\u6846\u4E0A\u65B9\uFF08\u9810\u8A2D\uFF09", + header: "\u5728\u6A19\u984C\u5217" + }, + enableAutoScroll: { + name: "\u4E32\u6D41\u50B3\u8F38\u6642\u81EA\u52D5\u6372\u52D5", + desc: "\u5728 Claude \u4E32\u6D41\u50B3\u8F38\u56DE\u61C9\u6642\u81EA\u52D5\u6372\u52D5\u5230\u5E95\u90E8\u3002\u505C\u7528\u5F8C\u5C07\u505C\u7559\u5728\u9802\u90E8\uFF0C\u5F9E\u982D\u958B\u59CB\u95B1\u8B80\u3002" + }, + deferMathRenderingDuringStreaming: { + name: "\u4E32\u6D41\u50B3\u8F38\u6642\u5EF6\u9072\u6E32\u67D3\u6578\u5B78\u516C\u5F0F", + desc: "\u56DE\u61C9\u4E32\u6D41\u50B3\u8F38\u6642\u986F\u793A\u539F\u59CB LaTeX\uFF0C\u4E26\u5728\u6BCF\u500B\u6587\u5B57\u5340\u584A\u5B8C\u6210\u5F8C\u53EA\u6E32\u67D3\u4E00\u6B21\u6578\u5B78\u516C\u5F0F\u3002" + }, + chatViewPlacement: { + name: "Claudian \u958B\u555F\u4F4D\u7F6E", + desc: "\u9078\u64C7\u65B0\u5EFA\u804A\u5929\u9762\u677F\u6642\u7684\u958B\u555F\u4F4D\u7F6E", + rightSidebar: "\u53F3\u5074\u908A\u6B04", + leftSidebar: "\u5DE6\u5074\u908A\u6B04", + mainTab: "\u4E3B\u7DE8\u8F2F\u5668\u5206\u9801" + }, + cliPath: { + name: "Claude CLI \u8DEF\u5F91", + desc: "Claude Code CLI \u7684\u81EA\u8A02\u8DEF\u5F91\u3002\u7559\u7A7A\u4F7F\u7528\u81EA\u52D5\u6AA2\u6E2C\u3002", + descWindows: "\u5C0D\u65BC\u539F\u751F\u5B89\u88DD\u7A0B\u5F0F\uFF0C\u4F7F\u7528 claude.exe\u3002\u5C0D\u65BC npm/pnpm/yarn \u6216\u5176\u4ED6\u5957\u4EF6\u7BA1\u7406\u5668\u5B89\u88DD\uFF0C\u4F7F\u7528 cli-wrapper.cjs \u8DEF\u5F91\uFF08\u4E0D\u662F claude.cmd\uFF09\u3002", + descUnix: '\u8CBC\u4E0A "which claude" \u7684\u8F38\u51FA - \u9069\u7528\u65BC\u539F\u751F\u5B89\u88DD\u548C npm/pnpm/yarn \u5B89\u88DD\u3002', + validation: { + notExist: "\u8DEF\u5F91\u4E0D\u5B58\u5728", + isDirectory: "\u8DEF\u5F91\u662F\u76EE\u9304\uFF0C\u4E0D\u662F\u6A94\u6848" + } + }, + language: { + name: "\u8A9E\u8A00", + desc: "\u66F4\u6539\u63D2\u4EF6\u4ECB\u9762\u7684\u986F\u793A\u8A9E\u8A00" + } +}; +var zh_TW_default = { + common: common10, + chat: chat10, + settings: settings10 +}; + +// src/i18n/i18n.ts +var translations = { + en: en_exports, + "zh-CN": zh_CN_exports, + "zh-TW": zh_TW_exports, + ja: ja_exports, + ko: ko_exports, + de: de_exports, + fr: fr_exports, + es: es_exports, + ru: ru_exports, + pt: pt_exports +}; +var DEFAULT_LOCALE = "en"; +var currentLocale = DEFAULT_LOCALE; +function t10(key, params) { + const dict = translations[currentLocale]; + const keys = key.split("."); + let value = dict; + for (const k2 of keys) { + if (value && typeof value === "object" && k2 in value) { + value = value[k2]; + } else { + if (currentLocale !== DEFAULT_LOCALE) { + return tFallback(key, params); + } + return key; + } + } + if (typeof value !== "string") { + return key; + } + if (params) { + return value.replace(/\{(\w+)\}/g, (match, param) => { + const replacement = params[param]; + return replacement !== void 0 ? `${replacement}` : match; + }); + } + return value; +} +function tFallback(key, params) { + const dict = translations[DEFAULT_LOCALE]; + const keys = key.split("."); + let value = dict; + for (const k2 of keys) { + if (value && typeof value === "object" && k2 in value) { + value = value[k2]; + } else { + return key; + } + } + if (typeof value !== "string") { + return key; + } + if (params) { + return value.replace(/\{(\w+)\}/g, (match, param) => { + const replacement = params[param]; + return replacement !== void 0 ? `${replacement}` : match; + }); + } + return value; +} +function setLocale(locale) { + if (!translations[locale]) { + return false; + } + currentLocale = locale; + return true; +} +function getAvailableLocales() { + return Object.keys(translations); +} +function getLocaleDisplayName(locale) { + const names = { + "en": "English", + "zh-CN": "\u7B80\u4F53\u4E2D\u6587", + "zh-TW": "\u7E41\u9AD4\u4E2D\u6587", + "ja": "\u65E5\u672C\u8A9E", + "ko": "\uD55C\uAD6D\uC5B4", + "de": "Deutsch", + "fr": "Fran\xE7ais", + "es": "Espa\xF1ol", + "ru": "\u0420\u0443\u0441\u0441\u043A\u0438\u0439", + "pt": "Portugu\xEAs" + }; + return names[locale] || locale; +} + +// src/shared/modals/ConfirmModal.ts +var import_obsidian4 = require("obsidian"); +function confirmDelete(app, message) { + return new Promise((resolve8) => { + new ConfirmModal(app, message, resolve8).open(); + }); +} +function confirm(app, message, confirmText) { + return new Promise((resolve8) => { + new ConfirmModal(app, message, resolve8, confirmText).open(); + }); +} +var ConfirmModal = class extends import_obsidian4.Modal { + constructor(app, message, resolve8, confirmText) { + super(app); + this.resolved = false; + this.message = message; + this.resolve = resolve8; + this.confirmText = confirmText != null ? confirmText : t10("common.delete"); + } + onOpen() { + this.setTitle(t10("common.confirm")); + this.modalEl.addClass("claudian-confirm-modal"); + this.contentEl.createEl("p", { text: this.message }); + new import_obsidian4.Setting(this.contentEl).addButton( + (btn) => btn.setButtonText(t10("common.cancel")).onClick(() => this.close()) + ).addButton( + (btn) => btn.setButtonText(this.confirmText).setWarning().onClick(() => { + this.resolved = true; + this.resolve(true); + this.close(); + }) + ); + } + onClose() { + if (!this.resolved) { + this.resolve(false); + } + this.contentEl.empty(); + } +}; + +// src/features/settings/ui/EnvSnippetManager.ts +init_env(); +var EnvSnippetModal = class extends import_obsidian5.Modal { + constructor(app, plugin, snippet, scope, onSave) { + super(app); + this.plugin = plugin; + this.snippet = snippet; + this.snippetScope = scope; + this.onSave = onSave; + } + onOpen() { + const { contentEl } = this; + this.setTitle(this.snippet ? t10("settings.envSnippets.modal.titleEdit") : t10("settings.envSnippets.modal.titleSave")); + this.modalEl.addClass("claudian-env-snippet-modal"); + let nameEl; + let descEl; + let envVarsEl; + const contextLimitInputs = /* @__PURE__ */ new Map(); + const modelAliasInputs = /* @__PURE__ */ new Map(); + let contextLimitsContainer = null; + const handleKeyDown = (e2) => { + if (e2.key === "Enter" && !e2.isComposing) { + e2.preventDefault(); + saveSnippet(); + } else if (e2.key === "Escape" && !e2.isComposing) { + e2.preventDefault(); + this.close(); + } + }; + const saveSnippet = () => { + var _a5, _b3, _c2; + const name = nameEl.value.trim(); + if (!name) { + new import_obsidian5.Notice(t10("settings.envSnippets.nameRequired")); + return; + } + const contextLimits = {}; + for (const [modelId, input] of contextLimitInputs) { + const value = input.value.trim(); + if (value) { + const parsed = parseContextLimit(value); + if (parsed !== null) { + contextLimits[modelId] = parsed; + } + } + } + const modelAliases = {}; + for (const [modelId, input] of modelAliasInputs) { + const value = input.value.trim(); + if (value) { + modelAliases[modelId] = value; + } + } + const snippet = { + id: ((_a5 = this.snippet) == null ? void 0 : _a5.id) || `snippet-${Date.now()}`, + name, + description: descEl.value.trim(), + envVars: envVarsEl.value, + scope: resolveEnvironmentSnippetScope( + envVarsEl.value, + (_c2 = (_b3 = this.snippet) == null ? void 0 : _b3.scope) != null ? _c2 : this.snippetScope + ), + contextLimits: Object.keys(contextLimits).length > 0 ? contextLimits : void 0, + modelAliases: modelAliasInputs.size > 0 ? modelAliases : void 0 + }; + this.onSave(snippet); + this.close(); + }; + const renderContextLimitFields = () => { + var _a5, _b3, _c2, _d, _e2, _f2, _g; + if (!contextLimitsContainer) return; + contextLimitsContainer.empty(); + contextLimitInputs.clear(); + modelAliasInputs.clear(); + const envVars = parseEnvironmentVariables(envVarsEl.value); + const uniqueModelIds = ProviderRegistry.getCustomModelIds(envVars); + if (uniqueModelIds.size === 0) { + contextLimitsContainer.addClass("claudian-hidden"); + return; + } + contextLimitsContainer.removeClass("claudian-hidden"); + const existingLimits = (_c2 = (_b3 = (_a5 = this.snippet) == null ? void 0 : _a5.contextLimits) != null ? _b3 : this.plugin.settings.customContextLimits) != null ? _c2 : {}; + const existingAliases = (_f2 = (_e2 = (_d = this.snippet) == null ? void 0 : _d.modelAliases) != null ? _e2 : this.plugin.settings.customModelAliases) != null ? _f2 : {}; + contextLimitsContainer.createEl("div", { + text: t10("settings.customModelOverrides.name"), + cls: "setting-item-name" + }); + contextLimitsContainer.createEl("div", { + text: t10("settings.customModelOverrides.desc"), + cls: "setting-item-description" + }); + for (const modelId of uniqueModelIds) { + const row = contextLimitsContainer.createDiv({ cls: "claudian-snippet-limit-row" }); + row.createSpan({ text: modelId, cls: "claudian-snippet-limit-model" }); + row.createSpan({ cls: "claudian-snippet-limit-spacer" }); + const aliasInput = row.createEl("input", { + type: "text", + placeholder: t10("settings.customModelAliases.placeholder"), + cls: "claudian-snippet-alias-input" + }); + aliasInput.value = (_g = existingAliases[modelId]) != null ? _g : ""; + aliasInput.setAttribute("aria-label", `Alias for ${modelId}`); + aliasInput.title = "Custom label shown in the model selector. Leave empty to use the default."; + modelAliasInputs.set(modelId, aliasInput); + const input = row.createEl("input", { + type: "text", + placeholder: "200k", + cls: "claudian-snippet-limit-input" + }); + input.value = existingLimits[modelId] ? formatContextLimit(existingLimits[modelId]) : ""; + input.setAttribute("aria-label", `Context window for ${modelId}`); + contextLimitInputs.set(modelId, input); + } + }; + new import_obsidian5.Setting(contentEl).setName(t10("settings.envSnippets.modal.name")).setDesc(t10("settings.envSnippets.modal.namePlaceholder")).addText((text) => { + var _a5; + nameEl = text.inputEl; + text.setValue(((_a5 = this.snippet) == null ? void 0 : _a5.name) || ""); + text.inputEl.addEventListener("keydown", handleKeyDown); + }); + new import_obsidian5.Setting(contentEl).setName(t10("settings.envSnippets.modal.description")).setDesc(t10("settings.envSnippets.modal.descPlaceholder")).addText((text) => { + var _a5; + descEl = text.inputEl; + text.setValue(((_a5 = this.snippet) == null ? void 0 : _a5.description) || ""); + text.inputEl.addEventListener("keydown", handleKeyDown); + }); + const envVarsSetting = new import_obsidian5.Setting(contentEl).setName(t10("settings.envSnippets.modal.envVars")).setDesc(t10("settings.envSnippets.modal.envVarsPlaceholder")).addTextArea((text) => { + var _a5, _b3; + envVarsEl = text.inputEl; + const envVarsToShow = (_b3 = (_a5 = this.snippet) == null ? void 0 : _a5.envVars) != null ? _b3 : this.plugin.getEnvironmentVariablesForScope(this.snippetScope); + text.setValue(envVarsToShow); + text.inputEl.rows = 8; + text.inputEl.addEventListener("blur", () => renderContextLimitFields()); + }); + envVarsSetting.settingEl.addClass("claudian-env-snippet-setting"); + envVarsSetting.controlEl.addClass("claudian-env-snippet-control"); + contextLimitsContainer = contentEl.createDiv({ cls: "claudian-snippet-context-limits" }); + renderContextLimitFields(); + const buttonContainer = contentEl.createDiv({ cls: "claudian-snippet-buttons" }); + const cancelBtn = buttonContainer.createEl("button", { + text: t10("settings.envSnippets.modal.cancel"), + cls: "claudian-cancel-btn" + }); + cancelBtn.addEventListener("click", () => this.close()); + const saveBtn = buttonContainer.createEl("button", { + text: this.snippet ? t10("settings.envSnippets.modal.update") : t10("settings.envSnippets.modal.save"), + cls: "claudian-save-btn" + }); + saveBtn.addEventListener("click", () => saveSnippet()); + window.setTimeout(() => nameEl == null ? void 0 : nameEl.focus(), 50); + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } +}; +var EnvSnippetManager = class { + constructor(containerEl, plugin, scope, onContextLimitsChange) { + this.containerEl = containerEl; + this.plugin = plugin; + this.scope = scope; + this.onContextLimitsChange = onContextLimitsChange; + this.render(); + } + render() { + this.containerEl.empty(); + const headerEl = this.containerEl.createDiv({ cls: "claudian-snippet-header" }); + headerEl.createSpan({ text: t10("settings.envSnippets.name"), cls: "claudian-snippet-label" }); + const saveBtn = headerEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": t10("settings.envSnippets.addBtn") } + }); + (0, import_obsidian5.setIcon)(saveBtn, "plus"); + saveBtn.addEventListener("click", () => { + void this.saveCurrentEnv(); + }); + const snippets = this.plugin.settings.envSnippets.filter((snippet) => this.shouldDisplaySnippet(snippet)); + if (snippets.length === 0) { + const emptyEl = this.containerEl.createDiv({ cls: "claudian-snippet-empty" }); + emptyEl.setText(t10("settings.envSnippets.noSnippets")); + return; + } + const listEl = this.containerEl.createDiv({ cls: "claudian-snippet-list" }); + for (const snippet of snippets) { + const itemEl = listEl.createDiv({ cls: "claudian-snippet-item" }); + const infoEl = itemEl.createDiv({ cls: "claudian-snippet-info" }); + const nameEl = infoEl.createDiv({ cls: "claudian-snippet-name" }); + nameEl.setText(snippet.name); + if (snippet.description) { + const descEl = infoEl.createDiv({ cls: "claudian-snippet-description" }); + descEl.setText(snippet.description); + } + const actionsEl = itemEl.createDiv({ cls: "claudian-snippet-actions" }); + const restoreBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Insert" } + }); + (0, import_obsidian5.setIcon)(restoreBtn, "clipboard-paste"); + restoreBtn.addEventListener("click", () => { + void (async () => { + try { + await this.insertSnippet(snippet); + } catch (e2) { + new import_obsidian5.Notice("Failed to insert snippet"); + } + })(); + }); + const editBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Edit" } + }); + (0, import_obsidian5.setIcon)(editBtn, "pencil"); + editBtn.addEventListener("click", () => { + this.editSnippet(snippet); + }); + const deleteBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn claudian-settings-delete-btn", + attr: { "aria-label": "Delete" } + }); + (0, import_obsidian5.setIcon)(deleteBtn, "trash-2"); + deleteBtn.addEventListener("click", () => { + void (async () => { + try { + if (await confirmDelete(this.plugin.app, `Delete environment snippet "${snippet.name}"?`)) { + await this.deleteSnippet(snippet); + } + } catch (e2) { + new import_obsidian5.Notice("Failed to delete snippet"); + } + })(); + }); + } + } + async saveCurrentEnv() { + const modal = new EnvSnippetModal( + this.plugin.app, + this.plugin, + null, + this.scope, + (snippet) => { + void (async () => { + this.plugin.settings.envSnippets.push(snippet); + await this.plugin.saveSettings(); + this.render(); + new import_obsidian5.Notice(`Environment snippet "${snippet.name}" saved`); + })(); + } + ); + modal.open(); + } + async insertSnippet(snippet) { + var _a5, _b3, _c2, _d, _e2; + const snippetContent = snippet.envVars.trim(); + const updates = getEnvironmentScopeUpdates( + snippetContent, + (_a5 = snippet.scope) != null ? _a5 : this.scope + ); + if (updates.length === 1) { + const [update] = updates; + this.syncTextareaValue(update.scope, update.envText); + await this.plugin.applyEnvironmentVariables(update.scope, update.envText); + } else if (updates.length > 1) { + for (const update of updates) { + this.syncTextareaValue(update.scope, update.envText); + } + await this.plugin.applyEnvironmentVariablesBatch(updates); + } + if (snippet.contextLimits) { + this.plugin.settings.customContextLimits = { + ...this.plugin.settings.customContextLimits, + ...snippet.contextLimits + }; + } + if (snippet.modelAliases) { + const modelIds = ProviderRegistry.getCustomModelIds(parseEnvironmentVariables(snippet.envVars)); + const nextAliases = { ...(_b3 = this.plugin.settings.customModelAliases) != null ? _b3 : {} }; + for (const modelId of modelIds) { + const alias = (_c2 = snippet.modelAliases[modelId]) == null ? void 0 : _c2.trim(); + if (alias) { + nextAliases[modelId] = alias; + } else { + delete nextAliases[modelId]; + } + } + this.plugin.settings.customModelAliases = nextAliases; + } + await this.plugin.saveSettings(); + (_d = this.onContextLimitsChange) == null ? void 0 : _d.call(this); + const view = (_e2 = this.plugin.app.workspace.getLeavesOfType("claudian-view")[0]) == null ? void 0 : _e2.view; + view == null ? void 0 : view.refreshModelSelector(); + } + editSnippet(snippet) { + const modal = new EnvSnippetModal( + this.plugin.app, + this.plugin, + snippet, + this.scope, + (updatedSnippet) => { + void (async () => { + const index = this.plugin.settings.envSnippets.findIndex((s2) => s2.id === snippet.id); + if (index !== -1) { + this.plugin.settings.envSnippets[index] = updatedSnippet; + await this.plugin.saveSettings(); + this.render(); + new import_obsidian5.Notice(`Environment snippet "${updatedSnippet.name}" updated`); + } + })(); + } + ); + modal.open(); + } + async deleteSnippet(snippet) { + this.plugin.settings.envSnippets = this.plugin.settings.envSnippets.filter((s2) => s2.id !== snippet.id); + await this.plugin.saveSettings(); + this.render(); + new import_obsidian5.Notice(`Environment snippet "${snippet.name}" deleted`); + } + refresh() { + this.render(); + } + shouldDisplaySnippet(snippet) { + if (this.scope === "shared") { + return !snippet.scope || snippet.scope === "shared"; + } + return snippet.scope === this.scope; + } + syncTextareaValue(scope, value) { + var _a5; + const selector = `.claudian-settings-env-textarea[data-env-scope="${scope}"]`; + const envTextarea = ((_a5 = this.containerEl.ownerDocument) != null ? _a5 : window.document).querySelector(selector); + if (envTextarea) { + envTextarea.value = value; + } + } +}; + +// src/features/settings/ui/EnvironmentSettingsSection.ts +function renderEnvironmentSettingsSection(options) { + const { + container, + plugin, + scope, + heading, + name, + desc, + placeholder, + renderCustomContextLimits + } = options; + if (heading) { + new import_obsidian6.Setting(container).setName(heading).setHeading(); + } + let envTextarea = null; + const reviewEl = container.createDiv({ + cls: "claudian-env-review-warning claudian-setting-validation claudian-setting-validation-warning claudian-hidden" + }); + const updateReviewWarning = () => { + var _a5; + const reviewKeys = getEnvironmentReviewKeysForScope((_a5 = envTextarea == null ? void 0 : envTextarea.value) != null ? _a5 : "", scope); + if (reviewKeys.length === 0) { + reviewEl.toggleClass("claudian-hidden", true); + reviewEl.empty(); + return; + } + reviewEl.setText(`Review environment ownership for: ${reviewKeys.join(", ")}`); + reviewEl.toggleClass("claudian-hidden", false); + }; + new import_obsidian6.Setting(container).setName(name).setDesc(desc).addTextArea((text) => { + text.setPlaceholder(placeholder).setValue(plugin.getEnvironmentVariablesForScope(scope)); + text.inputEl.rows = 6; + text.inputEl.cols = 50; + text.inputEl.addClass("claudian-settings-env-textarea"); + text.inputEl.dataset.envScope = scope; + text.inputEl.addEventListener("input", () => updateReviewWarning()); + text.inputEl.addEventListener("blur", () => { + void (async () => { + await plugin.applyEnvironmentVariables(scope, text.inputEl.value); + renderCustomContextLimits == null ? void 0 : renderCustomContextLimits(contextLimitsContainer); + updateReviewWarning(); + })(); + }); + envTextarea = text.inputEl; + }); + updateReviewWarning(); + const contextLimitsContainer = container.createDiv({ cls: "claudian-context-limits-container" }); + renderCustomContextLimits == null ? void 0 : renderCustomContextLimits(contextLimitsContainer); + const envSnippetsContainer = container.createDiv({ cls: "claudian-env-snippets-container" }); + new EnvSnippetManager(envSnippetsContainer, plugin, scope, () => { + renderCustomContextLimits == null ? void 0 : renderCustomContextLimits(contextLimitsContainer); + }); +} + +// src/features/settings/ui/McpSettingsManager.ts +var import_obsidian9 = require("obsidian"); + +// src/core/mcp/McpConfigParser.ts +function isRecord4(value) { + return !!value && typeof value === "object" && !Array.isArray(value); +} +function parseClipboardConfig(json2) { + try { + const parsed = JSON.parse(json2); + if (!isRecord4(parsed)) { + throw new Error("Invalid JSON object"); + } + if (isRecord4(parsed.mcpServers)) { + const servers2 = []; + for (const [name, config2] of Object.entries(parsed.mcpServers)) { + if (isValidMcpServerConfig(config2)) { + servers2.push({ name, config: config2 }); + } + } + if (servers2.length === 0) { + throw new Error("No valid server configs found in mcpServers"); + } + return { servers: servers2, needsName: false }; + } + if (isValidMcpServerConfig(parsed)) { + return { + servers: [{ name: "", config: parsed }], + needsName: true + }; + } + const entries = Object.entries(parsed); + if (entries.length === 1) { + const [name, config2] = entries[0]; + if (isValidMcpServerConfig(config2)) { + return { + servers: [{ name, config: config2 }], + needsName: false + }; + } + } + const servers = []; + for (const [name, config2] of entries) { + if (isValidMcpServerConfig(config2)) { + servers.push({ name, config: config2 }); + } + } + if (servers.length > 0) { + return { servers, needsName: false }; + } + throw new Error("Invalid MCP configuration format"); + } catch (error48) { + if (error48 instanceof SyntaxError) { + throw new Error("Invalid JSON", { cause: error48 }); + } + throw error48; + } +} +function tryParseClipboardConfig(text) { + const trimmed = text.trim(); + if (!trimmed.startsWith("{")) { + return null; + } + try { + return parseClipboardConfig(trimmed); + } catch (e2) { + return null; + } +} + +// node_modules/zod/v3/helpers/util.js +var util; +(function(util2) { + util2.assertEqual = (_2) => { + }; + function assertIs2(_arg) { + } + util2.assertIs = assertIs2; + function assertNever2(_x2) { + throw new Error(); + } + util2.assertNever = assertNever2; + util2.arrayToEnum = (items) => { + const obj = {}; + for (const item of items) { + obj[item] = item; + } + return obj; + }; + util2.getValidEnumValues = (obj) => { + const validKeys = util2.objectKeys(obj).filter((k2) => typeof obj[obj[k2]] !== "number"); + const filtered = {}; + for (const k2 of validKeys) { + filtered[k2] = obj[k2]; + } + return util2.objectValues(filtered); + }; + util2.objectValues = (obj) => { + return util2.objectKeys(obj).map(function(e2) { + return obj[e2]; + }); + }; + util2.objectKeys = typeof Object.keys === "function" ? (obj) => Object.keys(obj) : (object3) => { + const keys = []; + for (const key in object3) { + if (Object.prototype.hasOwnProperty.call(object3, key)) { + keys.push(key); + } + } + return keys; + }; + util2.find = (arr, checker) => { + for (const item of arr) { + if (checker(item)) + return item; + } + return void 0; + }; + util2.isInteger = typeof Number.isInteger === "function" ? (val) => Number.isInteger(val) : (val) => typeof val === "number" && Number.isFinite(val) && Math.floor(val) === val; + function joinValues2(array2, separator = " | ") { + return array2.map((val) => typeof val === "string" ? `'${val}'` : val).join(separator); + } + util2.joinValues = joinValues2; + util2.jsonStringifyReplacer = (_2, value) => { + if (typeof value === "bigint") { + return value.toString(); + } + return value; + }; +})(util || (util = {})); +var objectUtil; +(function(objectUtil2) { + objectUtil2.mergeShapes = (first, second) => { + return { + ...first, + ...second + // second overwrites first + }; + }; +})(objectUtil || (objectUtil = {})); +var ZodParsedType = util.arrayToEnum([ + "string", + "nan", + "number", + "integer", + "float", + "boolean", + "date", + "bigint", + "symbol", + "function", + "undefined", + "null", + "array", + "object", + "unknown", + "promise", + "void", + "never", + "map", + "set" +]); +var getParsedType = (data) => { + const t11 = typeof data; + switch (t11) { + case "undefined": + return ZodParsedType.undefined; + case "string": + return ZodParsedType.string; + case "number": + return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number; + case "boolean": + return ZodParsedType.boolean; + case "function": + return ZodParsedType.function; + case "bigint": + return ZodParsedType.bigint; + case "symbol": + return ZodParsedType.symbol; + case "object": + if (Array.isArray(data)) { + return ZodParsedType.array; + } + if (data === null) { + return ZodParsedType.null; + } + if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") { + return ZodParsedType.promise; + } + if (typeof Map !== "undefined" && data instanceof Map) { + return ZodParsedType.map; + } + if (typeof Set !== "undefined" && data instanceof Set) { + return ZodParsedType.set; + } + if (typeof Date !== "undefined" && data instanceof Date) { + return ZodParsedType.date; + } + return ZodParsedType.object; + default: + return ZodParsedType.unknown; + } +}; + +// node_modules/zod/v3/ZodError.js +var ZodIssueCode = util.arrayToEnum([ + "invalid_type", + "invalid_literal", + "custom", + "invalid_union", + "invalid_union_discriminator", + "invalid_enum_value", + "unrecognized_keys", + "invalid_arguments", + "invalid_return_type", + "invalid_date", + "invalid_string", + "too_small", + "too_big", + "invalid_intersection_types", + "not_multiple_of", + "not_finite" +]); +var ZodError = class _ZodError extends Error { + get errors() { + return this.issues; + } + constructor(issues) { + super(); + this.issues = []; + this.addIssue = (sub) => { + this.issues = [...this.issues, sub]; + }; + this.addIssues = (subs = []) => { + this.issues = [...this.issues, ...subs]; + }; + const actualProto = new.target.prototype; + if (Object.setPrototypeOf) { + Object.setPrototypeOf(this, actualProto); + } else { + this.__proto__ = actualProto; + } + this.name = "ZodError"; + this.issues = issues; + } + format(_mapper) { + const mapper = _mapper || function(issue2) { + return issue2.message; + }; + const fieldErrors = { _errors: [] }; + const processError = (error48) => { + for (const issue2 of error48.issues) { + if (issue2.code === "invalid_union") { + issue2.unionErrors.map(processError); + } else if (issue2.code === "invalid_return_type") { + processError(issue2.returnTypeError); + } else if (issue2.code === "invalid_arguments") { + processError(issue2.argumentsError); + } else if (issue2.path.length === 0) { + fieldErrors._errors.push(mapper(issue2)); + } else { + let curr = fieldErrors; + let i = 0; + while (i < issue2.path.length) { + const el2 = issue2.path[i]; + const terminal = i === issue2.path.length - 1; + if (!terminal) { + curr[el2] = curr[el2] || { _errors: [] }; + } else { + curr[el2] = curr[el2] || { _errors: [] }; + curr[el2]._errors.push(mapper(issue2)); + } + curr = curr[el2]; + i++; + } + } + } + }; + processError(this); + return fieldErrors; + } + static assert(value) { + if (!(value instanceof _ZodError)) { + throw new Error(`Not a ZodError: ${value}`); + } + } + toString() { + return this.message; + } + get message() { + return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2); + } + get isEmpty() { + return this.issues.length === 0; + } + flatten(mapper = (issue2) => issue2.message) { + const fieldErrors = /* @__PURE__ */ Object.create(null); + const formErrors = []; + for (const sub of this.issues) { + if (sub.path.length > 0) { + const firstEl = sub.path[0]; + fieldErrors[firstEl] = fieldErrors[firstEl] || []; + fieldErrors[firstEl].push(mapper(sub)); + } else { + formErrors.push(mapper(sub)); + } + } + return { formErrors, fieldErrors }; + } + get formErrors() { + return this.flatten(); + } +}; +ZodError.create = (issues) => { + const error48 = new ZodError(issues); + return error48; +}; + +// node_modules/zod/v3/locales/en.js +var errorMap = (issue2, _ctx) => { + let message; + switch (issue2.code) { + case ZodIssueCode.invalid_type: + if (issue2.received === ZodParsedType.undefined) { + message = "Required"; + } else { + message = `Expected ${issue2.expected}, received ${issue2.received}`; + } + break; + case ZodIssueCode.invalid_literal: + message = `Invalid literal value, expected ${JSON.stringify(issue2.expected, util.jsonStringifyReplacer)}`; + break; + case ZodIssueCode.unrecognized_keys: + message = `Unrecognized key(s) in object: ${util.joinValues(issue2.keys, ", ")}`; + break; + case ZodIssueCode.invalid_union: + message = `Invalid input`; + break; + case ZodIssueCode.invalid_union_discriminator: + message = `Invalid discriminator value. Expected ${util.joinValues(issue2.options)}`; + break; + case ZodIssueCode.invalid_enum_value: + message = `Invalid enum value. Expected ${util.joinValues(issue2.options)}, received '${issue2.received}'`; + break; + case ZodIssueCode.invalid_arguments: + message = `Invalid function arguments`; + break; + case ZodIssueCode.invalid_return_type: + message = `Invalid function return type`; + break; + case ZodIssueCode.invalid_date: + message = `Invalid date`; + break; + case ZodIssueCode.invalid_string: + if (typeof issue2.validation === "object") { + if ("includes" in issue2.validation) { + message = `Invalid input: must include "${issue2.validation.includes}"`; + if (typeof issue2.validation.position === "number") { + message = `${message} at one or more positions greater than or equal to ${issue2.validation.position}`; + } + } else if ("startsWith" in issue2.validation) { + message = `Invalid input: must start with "${issue2.validation.startsWith}"`; + } else if ("endsWith" in issue2.validation) { + message = `Invalid input: must end with "${issue2.validation.endsWith}"`; + } else { + util.assertNever(issue2.validation); + } + } else if (issue2.validation !== "regex") { + message = `Invalid ${issue2.validation}`; + } else { + message = "Invalid"; + } + break; + case ZodIssueCode.too_small: + if (issue2.type === "array") + message = `Array must contain ${issue2.exact ? "exactly" : issue2.inclusive ? `at least` : `more than`} ${issue2.minimum} element(s)`; + else if (issue2.type === "string") + message = `String must contain ${issue2.exact ? "exactly" : issue2.inclusive ? `at least` : `over`} ${issue2.minimum} character(s)`; + else if (issue2.type === "number") + message = `Number must be ${issue2.exact ? `exactly equal to ` : issue2.inclusive ? `greater than or equal to ` : `greater than `}${issue2.minimum}`; + else if (issue2.type === "bigint") + message = `Number must be ${issue2.exact ? `exactly equal to ` : issue2.inclusive ? `greater than or equal to ` : `greater than `}${issue2.minimum}`; + else if (issue2.type === "date") + message = `Date must be ${issue2.exact ? `exactly equal to ` : issue2.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue2.minimum))}`; + else + message = "Invalid input"; + break; + case ZodIssueCode.too_big: + if (issue2.type === "array") + message = `Array must contain ${issue2.exact ? `exactly` : issue2.inclusive ? `at most` : `less than`} ${issue2.maximum} element(s)`; + else if (issue2.type === "string") + message = `String must contain ${issue2.exact ? `exactly` : issue2.inclusive ? `at most` : `under`} ${issue2.maximum} character(s)`; + else if (issue2.type === "number") + message = `Number must be ${issue2.exact ? `exactly` : issue2.inclusive ? `less than or equal to` : `less than`} ${issue2.maximum}`; + else if (issue2.type === "bigint") + message = `BigInt must be ${issue2.exact ? `exactly` : issue2.inclusive ? `less than or equal to` : `less than`} ${issue2.maximum}`; + else if (issue2.type === "date") + message = `Date must be ${issue2.exact ? `exactly` : issue2.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue2.maximum))}`; + else + message = "Invalid input"; + break; + case ZodIssueCode.custom: + message = `Invalid input`; + break; + case ZodIssueCode.invalid_intersection_types: + message = `Intersection results could not be merged`; + break; + case ZodIssueCode.not_multiple_of: + message = `Number must be a multiple of ${issue2.multipleOf}`; + break; + case ZodIssueCode.not_finite: + message = "Number must be finite"; + break; + default: + message = _ctx.defaultError; + util.assertNever(issue2); + } + return { message }; +}; +var en_default2 = errorMap; + +// node_modules/zod/v3/errors.js +var overrideErrorMap = en_default2; +function getErrorMap() { + return overrideErrorMap; +} + +// node_modules/zod/v3/helpers/parseUtil.js +var makeIssue = (params) => { + const { data, path: path27, errorMaps, issueData } = params; + const fullPath = [...path27, ...issueData.path || []]; + const fullIssue = { + ...issueData, + path: fullPath + }; + if (issueData.message !== void 0) { + return { + ...issueData, + path: fullPath, + message: issueData.message + }; + } + let errorMessage = ""; + const maps = errorMaps.filter((m4) => !!m4).slice().reverse(); + for (const map2 of maps) { + errorMessage = map2(fullIssue, { data, defaultError: errorMessage }).message; + } + return { + ...issueData, + path: fullPath, + message: errorMessage + }; +}; +function addIssueToContext(ctx, issueData) { + const overrideMap = getErrorMap(); + const issue2 = makeIssue({ + issueData, + data: ctx.data, + path: ctx.path, + errorMaps: [ + ctx.common.contextualErrorMap, + // contextual error map is first priority + ctx.schemaErrorMap, + // then schema-bound map if available + overrideMap, + // then global override map + overrideMap === en_default2 ? void 0 : en_default2 + // then global default map + ].filter((x2) => !!x2) + }); + ctx.common.issues.push(issue2); +} +var ParseStatus = class _ParseStatus { + constructor() { + this.value = "valid"; + } + dirty() { + if (this.value === "valid") + this.value = "dirty"; + } + abort() { + if (this.value !== "aborted") + this.value = "aborted"; + } + static mergeArray(status, results) { + const arrayValue = []; + for (const s2 of results) { + if (s2.status === "aborted") + return INVALID; + if (s2.status === "dirty") + status.dirty(); + arrayValue.push(s2.value); + } + return { status: status.value, value: arrayValue }; + } + static async mergeObjectAsync(status, pairs) { + const syncPairs = []; + for (const pair of pairs) { + const key = await pair.key; + const value = await pair.value; + syncPairs.push({ + key, + value + }); + } + return _ParseStatus.mergeObjectSync(status, syncPairs); + } + static mergeObjectSync(status, pairs) { + const finalObject = {}; + for (const pair of pairs) { + const { key, value } = pair; + if (key.status === "aborted") + return INVALID; + if (value.status === "aborted") + return INVALID; + if (key.status === "dirty") + status.dirty(); + if (value.status === "dirty") + status.dirty(); + if (key.value !== "__proto__" && (typeof value.value !== "undefined" || pair.alwaysSet)) { + finalObject[key.value] = value.value; + } + } + return { status: status.value, value: finalObject }; + } +}; +var INVALID = Object.freeze({ + status: "aborted" +}); +var DIRTY = (value) => ({ status: "dirty", value }); +var OK2 = (value) => ({ status: "valid", value }); +var isAborted = (x2) => x2.status === "aborted"; +var isDirty = (x2) => x2.status === "dirty"; +var isValid = (x2) => x2.status === "valid"; +var isAsync = (x2) => typeof Promise !== "undefined" && x2 instanceof Promise; + +// node_modules/zod/v3/helpers/errorUtil.js +var errorUtil; +(function(errorUtil2) { + errorUtil2.errToObj = (message) => typeof message === "string" ? { message } : message || {}; + errorUtil2.toString = (message) => typeof message === "string" ? message : message == null ? void 0 : message.message; +})(errorUtil || (errorUtil = {})); + +// node_modules/zod/v3/types.js +var ParseInputLazyPath = class { + constructor(parent, value, path27, key) { + this._cachedPath = []; + this.parent = parent; + this.data = value; + this._path = path27; + this._key = key; + } + get path() { + if (!this._cachedPath.length) { + if (Array.isArray(this._key)) { + this._cachedPath.push(...this._path, ...this._key); + } else { + this._cachedPath.push(...this._path, this._key); + } + } + return this._cachedPath; + } +}; +var handleResult = (ctx, result) => { + if (isValid(result)) { + return { success: true, data: result.value }; + } else { + if (!ctx.common.issues.length) { + throw new Error("Validation failed but no issues detected."); + } + return { + success: false, + get error() { + if (this._error) + return this._error; + const error48 = new ZodError(ctx.common.issues); + this._error = error48; + return this._error; + } + }; + } +}; +function processCreateParams(params) { + if (!params) + return {}; + const { errorMap: errorMap2, invalid_type_error, required_error, description } = params; + if (errorMap2 && (invalid_type_error || required_error)) { + throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`); + } + if (errorMap2) + return { errorMap: errorMap2, description }; + const customMap = (iss, ctx) => { + var _a5, _b3; + const { message } = params; + if (iss.code === "invalid_enum_value") { + return { message: message != null ? message : ctx.defaultError }; + } + if (typeof ctx.data === "undefined") { + return { message: (_a5 = message != null ? message : required_error) != null ? _a5 : ctx.defaultError }; + } + if (iss.code !== "invalid_type") + return { message: ctx.defaultError }; + return { message: (_b3 = message != null ? message : invalid_type_error) != null ? _b3 : ctx.defaultError }; + }; + return { errorMap: customMap, description }; +} +var ZodType = class { + get description() { + return this._def.description; + } + _getType(input) { + return getParsedType(input.data); + } + _getOrReturnCtx(input, ctx) { + return ctx || { + common: input.parent.common, + data: input.data, + parsedType: getParsedType(input.data), + schemaErrorMap: this._def.errorMap, + path: input.path, + parent: input.parent + }; + } + _processInputParams(input) { + return { + status: new ParseStatus(), + ctx: { + common: input.parent.common, + data: input.data, + parsedType: getParsedType(input.data), + schemaErrorMap: this._def.errorMap, + path: input.path, + parent: input.parent + } + }; + } + _parseSync(input) { + const result = this._parse(input); + if (isAsync(result)) { + throw new Error("Synchronous parse encountered promise."); + } + return result; + } + _parseAsync(input) { + const result = this._parse(input); + return Promise.resolve(result); + } + parse(data, params) { + const result = this.safeParse(data, params); + if (result.success) + return result.data; + throw result.error; + } + safeParse(data, params) { + var _a5; + const ctx = { + common: { + issues: [], + async: (_a5 = params == null ? void 0 : params.async) != null ? _a5 : false, + contextualErrorMap: params == null ? void 0 : params.errorMap + }, + path: (params == null ? void 0 : params.path) || [], + schemaErrorMap: this._def.errorMap, + parent: null, + data, + parsedType: getParsedType(data) + }; + const result = this._parseSync({ data, path: ctx.path, parent: ctx }); + return handleResult(ctx, result); + } + "~validate"(data) { + var _a5, _b3; + const ctx = { + common: { + issues: [], + async: !!this["~standard"].async + }, + path: [], + schemaErrorMap: this._def.errorMap, + parent: null, + data, + parsedType: getParsedType(data) + }; + if (!this["~standard"].async) { + try { + const result = this._parseSync({ data, path: [], parent: ctx }); + return isValid(result) ? { + value: result.value + } : { + issues: ctx.common.issues + }; + } catch (err) { + if ((_b3 = (_a5 = err == null ? void 0 : err.message) == null ? void 0 : _a5.toLowerCase()) == null ? void 0 : _b3.includes("encountered")) { + this["~standard"].async = true; + } + ctx.common = { + issues: [], + async: true + }; + } + } + return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result) ? { + value: result.value + } : { + issues: ctx.common.issues + }); + } + async parseAsync(data, params) { + const result = await this.safeParseAsync(data, params); + if (result.success) + return result.data; + throw result.error; + } + async safeParseAsync(data, params) { + const ctx = { + common: { + issues: [], + contextualErrorMap: params == null ? void 0 : params.errorMap, + async: true + }, + path: (params == null ? void 0 : params.path) || [], + schemaErrorMap: this._def.errorMap, + parent: null, + data, + parsedType: getParsedType(data) + }; + const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx }); + const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult)); + return handleResult(ctx, result); + } + refine(check2, message) { + const getIssueProperties = (val) => { + if (typeof message === "string" || typeof message === "undefined") { + return { message }; + } else if (typeof message === "function") { + return message(val); + } else { + return message; + } + }; + return this._refinement((val, ctx) => { + const result = check2(val); + const setError = () => ctx.addIssue({ + code: ZodIssueCode.custom, + ...getIssueProperties(val) + }); + if (typeof Promise !== "undefined" && result instanceof Promise) { + return result.then((data) => { + if (!data) { + setError(); + return false; + } else { + return true; + } + }); + } + if (!result) { + setError(); + return false; + } else { + return true; + } + }); + } + refinement(check2, refinementData) { + return this._refinement((val, ctx) => { + if (!check2(val)) { + ctx.addIssue(typeof refinementData === "function" ? refinementData(val, ctx) : refinementData); + return false; + } else { + return true; + } + }); + } + _refinement(refinement) { + return new ZodEffects({ + schema: this, + typeName: ZodFirstPartyTypeKind.ZodEffects, + effect: { type: "refinement", refinement } + }); + } + superRefine(refinement) { + return this._refinement(refinement); + } + constructor(def) { + this.spa = this.safeParseAsync; + this._def = def; + this.parse = this.parse.bind(this); + this.safeParse = this.safeParse.bind(this); + this.parseAsync = this.parseAsync.bind(this); + this.safeParseAsync = this.safeParseAsync.bind(this); + this.spa = this.spa.bind(this); + this.refine = this.refine.bind(this); + this.refinement = this.refinement.bind(this); + this.superRefine = this.superRefine.bind(this); + this.optional = this.optional.bind(this); + this.nullable = this.nullable.bind(this); + this.nullish = this.nullish.bind(this); + this.array = this.array.bind(this); + this.promise = this.promise.bind(this); + this.or = this.or.bind(this); + this.and = this.and.bind(this); + this.transform = this.transform.bind(this); + this.brand = this.brand.bind(this); + this.default = this.default.bind(this); + this.catch = this.catch.bind(this); + this.describe = this.describe.bind(this); + this.pipe = this.pipe.bind(this); + this.readonly = this.readonly.bind(this); + this.isNullable = this.isNullable.bind(this); + this.isOptional = this.isOptional.bind(this); + this["~standard"] = { + version: 1, + vendor: "zod", + validate: (data) => this["~validate"](data) + }; + } + optional() { + return ZodOptional.create(this, this._def); + } + nullable() { + return ZodNullable.create(this, this._def); + } + nullish() { + return this.nullable().optional(); + } + array() { + return ZodArray.create(this); + } + promise() { + return ZodPromise.create(this, this._def); + } + or(option) { + return ZodUnion.create([this, option], this._def); + } + and(incoming) { + return ZodIntersection.create(this, incoming, this._def); + } + transform(transform2) { + return new ZodEffects({ + ...processCreateParams(this._def), + schema: this, + typeName: ZodFirstPartyTypeKind.ZodEffects, + effect: { type: "transform", transform: transform2 } + }); + } + default(def) { + const defaultValueFunc = typeof def === "function" ? def : () => def; + return new ZodDefault({ + ...processCreateParams(this._def), + innerType: this, + defaultValue: defaultValueFunc, + typeName: ZodFirstPartyTypeKind.ZodDefault + }); + } + brand() { + return new ZodBranded({ + typeName: ZodFirstPartyTypeKind.ZodBranded, + type: this, + ...processCreateParams(this._def) + }); + } + catch(def) { + const catchValueFunc = typeof def === "function" ? def : () => def; + return new ZodCatch({ + ...processCreateParams(this._def), + innerType: this, + catchValue: catchValueFunc, + typeName: ZodFirstPartyTypeKind.ZodCatch + }); + } + describe(description) { + const This = this.constructor; + return new This({ + ...this._def, + description + }); + } + pipe(target) { + return ZodPipeline.create(this, target); + } + readonly() { + return ZodReadonly.create(this); + } + isOptional() { + return this.safeParse(void 0).success; + } + isNullable() { + return this.safeParse(null).success; + } +}; +var cuidRegex = /^c[^\s-]{8,}$/i; +var cuid2Regex = /^[0-9a-z]+$/; +var ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i; +var uuidRegex = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i; +var nanoidRegex = /^[a-z0-9_-]{21}$/i; +var jwtRegex = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/; +var durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/; +var emailRegex = /^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i; +var _emojiRegex = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`; +var emojiRegex; +var ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/; +var ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/; +var ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/; +var ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/; +var base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/; +var base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/; +var dateRegexSource = `((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`; +var dateRegex = new RegExp(`^${dateRegexSource}$`); +function timeRegexSource(args) { + let secondsRegexSource = `[0-5]\\d`; + if (args.precision) { + secondsRegexSource = `${secondsRegexSource}\\.\\d{${args.precision}}`; + } else if (args.precision == null) { + secondsRegexSource = `${secondsRegexSource}(\\.\\d+)?`; + } + const secondsQuantifier = args.precision ? "+" : "?"; + return `([01]\\d|2[0-3]):[0-5]\\d(:${secondsRegexSource})${secondsQuantifier}`; +} +function timeRegex(args) { + return new RegExp(`^${timeRegexSource(args)}$`); +} +function datetimeRegex(args) { + let regex = `${dateRegexSource}T${timeRegexSource(args)}`; + const opts = []; + opts.push(args.local ? `Z?` : `Z`); + if (args.offset) + opts.push(`([+-]\\d{2}:?\\d{2})`); + regex = `${regex}(${opts.join("|")})`; + return new RegExp(`^${regex}$`); +} +function isValidIP(ip, version2) { + if ((version2 === "v4" || !version2) && ipv4Regex.test(ip)) { + return true; + } + if ((version2 === "v6" || !version2) && ipv6Regex.test(ip)) { + return true; + } + return false; +} +function isValidJWT(jwt2, alg) { + if (!jwtRegex.test(jwt2)) + return false; + try { + const [header] = jwt2.split("."); + if (!header) + return false; + const base643 = header.replace(/-/g, "+").replace(/_/g, "/").padEnd(header.length + (4 - header.length % 4) % 4, "="); + const decoded = JSON.parse(atob(base643)); + if (typeof decoded !== "object" || decoded === null) + return false; + if ("typ" in decoded && (decoded == null ? void 0 : decoded.typ) !== "JWT") + return false; + if (!decoded.alg) + return false; + if (alg && decoded.alg !== alg) + return false; + return true; + } catch (e2) { + return false; + } +} +function isValidCidr(ip, version2) { + if ((version2 === "v4" || !version2) && ipv4CidrRegex.test(ip)) { + return true; + } + if ((version2 === "v6" || !version2) && ipv6CidrRegex.test(ip)) { + return true; + } + return false; +} +var ZodString = class _ZodString2 extends ZodType { + _parse(input) { + if (this._def.coerce) { + input.data = String(input.data); + } + const parsedType2 = this._getType(input); + if (parsedType2 !== ZodParsedType.string) { + const ctx2 = this._getOrReturnCtx(input); + addIssueToContext(ctx2, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.string, + received: ctx2.parsedType + }); + return INVALID; + } + const status = new ParseStatus(); + let ctx = void 0; + for (const check2 of this._def.checks) { + if (check2.kind === "min") { + if (input.data.length < check2.value) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.too_small, + minimum: check2.value, + type: "string", + inclusive: true, + exact: false, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "max") { + if (input.data.length > check2.value) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.too_big, + maximum: check2.value, + type: "string", + inclusive: true, + exact: false, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "length") { + const tooBig = input.data.length > check2.value; + const tooSmall = input.data.length < check2.value; + if (tooBig || tooSmall) { + ctx = this._getOrReturnCtx(input, ctx); + if (tooBig) { + addIssueToContext(ctx, { + code: ZodIssueCode.too_big, + maximum: check2.value, + type: "string", + inclusive: true, + exact: true, + message: check2.message + }); + } else if (tooSmall) { + addIssueToContext(ctx, { + code: ZodIssueCode.too_small, + minimum: check2.value, + type: "string", + inclusive: true, + exact: true, + message: check2.message + }); + } + status.dirty(); + } + } else if (check2.kind === "email") { + if (!emailRegex.test(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "email", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "emoji") { + if (!emojiRegex) { + emojiRegex = new RegExp(_emojiRegex, "u"); + } + if (!emojiRegex.test(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "emoji", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "uuid") { + if (!uuidRegex.test(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "uuid", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "nanoid") { + if (!nanoidRegex.test(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "nanoid", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "cuid") { + if (!cuidRegex.test(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "cuid", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "cuid2") { + if (!cuid2Regex.test(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "cuid2", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "ulid") { + if (!ulidRegex.test(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "ulid", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "url") { + try { + new URL(input.data); + } catch (e2) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "url", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "regex") { + check2.regex.lastIndex = 0; + const testResult = check2.regex.test(input.data); + if (!testResult) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "regex", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "trim") { + input.data = input.data.trim(); + } else if (check2.kind === "includes") { + if (!input.data.includes(check2.value, check2.position)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_string, + validation: { includes: check2.value, position: check2.position }, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "toLowerCase") { + input.data = input.data.toLowerCase(); + } else if (check2.kind === "toUpperCase") { + input.data = input.data.toUpperCase(); + } else if (check2.kind === "startsWith") { + if (!input.data.startsWith(check2.value)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_string, + validation: { startsWith: check2.value }, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "endsWith") { + if (!input.data.endsWith(check2.value)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_string, + validation: { endsWith: check2.value }, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "datetime") { + const regex = datetimeRegex(check2); + if (!regex.test(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_string, + validation: "datetime", + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "date") { + const regex = dateRegex; + if (!regex.test(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_string, + validation: "date", + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "time") { + const regex = timeRegex(check2); + if (!regex.test(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_string, + validation: "time", + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "duration") { + if (!durationRegex.test(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "duration", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "ip") { + if (!isValidIP(input.data, check2.version)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "ip", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "jwt") { + if (!isValidJWT(input.data, check2.alg)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "jwt", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "cidr") { + if (!isValidCidr(input.data, check2.version)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "cidr", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "base64") { + if (!base64Regex.test(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "base64", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "base64url") { + if (!base64urlRegex.test(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + validation: "base64url", + code: ZodIssueCode.invalid_string, + message: check2.message + }); + status.dirty(); + } + } else { + util.assertNever(check2); + } + } + return { status: status.value, value: input.data }; + } + _regex(regex, validation, message) { + return this.refinement((data) => regex.test(data), { + validation, + code: ZodIssueCode.invalid_string, + ...errorUtil.errToObj(message) + }); + } + _addCheck(check2) { + return new _ZodString2({ + ...this._def, + checks: [...this._def.checks, check2] + }); + } + email(message) { + return this._addCheck({ kind: "email", ...errorUtil.errToObj(message) }); + } + url(message) { + return this._addCheck({ kind: "url", ...errorUtil.errToObj(message) }); + } + emoji(message) { + return this._addCheck({ kind: "emoji", ...errorUtil.errToObj(message) }); + } + uuid(message) { + return this._addCheck({ kind: "uuid", ...errorUtil.errToObj(message) }); + } + nanoid(message) { + return this._addCheck({ kind: "nanoid", ...errorUtil.errToObj(message) }); + } + cuid(message) { + return this._addCheck({ kind: "cuid", ...errorUtil.errToObj(message) }); + } + cuid2(message) { + return this._addCheck({ kind: "cuid2", ...errorUtil.errToObj(message) }); + } + ulid(message) { + return this._addCheck({ kind: "ulid", ...errorUtil.errToObj(message) }); + } + base64(message) { + return this._addCheck({ kind: "base64", ...errorUtil.errToObj(message) }); + } + base64url(message) { + return this._addCheck({ + kind: "base64url", + ...errorUtil.errToObj(message) + }); + } + jwt(options) { + return this._addCheck({ kind: "jwt", ...errorUtil.errToObj(options) }); + } + ip(options) { + return this._addCheck({ kind: "ip", ...errorUtil.errToObj(options) }); + } + cidr(options) { + return this._addCheck({ kind: "cidr", ...errorUtil.errToObj(options) }); + } + datetime(options) { + var _a5, _b3; + if (typeof options === "string") { + return this._addCheck({ + kind: "datetime", + precision: null, + offset: false, + local: false, + message: options + }); + } + return this._addCheck({ + kind: "datetime", + precision: typeof (options == null ? void 0 : options.precision) === "undefined" ? null : options == null ? void 0 : options.precision, + offset: (_a5 = options == null ? void 0 : options.offset) != null ? _a5 : false, + local: (_b3 = options == null ? void 0 : options.local) != null ? _b3 : false, + ...errorUtil.errToObj(options == null ? void 0 : options.message) + }); + } + date(message) { + return this._addCheck({ kind: "date", message }); + } + time(options) { + if (typeof options === "string") { + return this._addCheck({ + kind: "time", + precision: null, + message: options + }); + } + return this._addCheck({ + kind: "time", + precision: typeof (options == null ? void 0 : options.precision) === "undefined" ? null : options == null ? void 0 : options.precision, + ...errorUtil.errToObj(options == null ? void 0 : options.message) + }); + } + duration(message) { + return this._addCheck({ kind: "duration", ...errorUtil.errToObj(message) }); + } + regex(regex, message) { + return this._addCheck({ + kind: "regex", + regex, + ...errorUtil.errToObj(message) + }); + } + includes(value, options) { + return this._addCheck({ + kind: "includes", + value, + position: options == null ? void 0 : options.position, + ...errorUtil.errToObj(options == null ? void 0 : options.message) + }); + } + startsWith(value, message) { + return this._addCheck({ + kind: "startsWith", + value, + ...errorUtil.errToObj(message) + }); + } + endsWith(value, message) { + return this._addCheck({ + kind: "endsWith", + value, + ...errorUtil.errToObj(message) + }); + } + min(minLength, message) { + return this._addCheck({ + kind: "min", + value: minLength, + ...errorUtil.errToObj(message) + }); + } + max(maxLength, message) { + return this._addCheck({ + kind: "max", + value: maxLength, + ...errorUtil.errToObj(message) + }); + } + length(len, message) { + return this._addCheck({ + kind: "length", + value: len, + ...errorUtil.errToObj(message) + }); + } + /** + * Equivalent to `.min(1)` + */ + nonempty(message) { + return this.min(1, errorUtil.errToObj(message)); + } + trim() { + return new _ZodString2({ + ...this._def, + checks: [...this._def.checks, { kind: "trim" }] + }); + } + toLowerCase() { + return new _ZodString2({ + ...this._def, + checks: [...this._def.checks, { kind: "toLowerCase" }] + }); + } + toUpperCase() { + return new _ZodString2({ + ...this._def, + checks: [...this._def.checks, { kind: "toUpperCase" }] + }); + } + get isDatetime() { + return !!this._def.checks.find((ch2) => ch2.kind === "datetime"); + } + get isDate() { + return !!this._def.checks.find((ch2) => ch2.kind === "date"); + } + get isTime() { + return !!this._def.checks.find((ch2) => ch2.kind === "time"); + } + get isDuration() { + return !!this._def.checks.find((ch2) => ch2.kind === "duration"); + } + get isEmail() { + return !!this._def.checks.find((ch2) => ch2.kind === "email"); + } + get isURL() { + return !!this._def.checks.find((ch2) => ch2.kind === "url"); + } + get isEmoji() { + return !!this._def.checks.find((ch2) => ch2.kind === "emoji"); + } + get isUUID() { + return !!this._def.checks.find((ch2) => ch2.kind === "uuid"); + } + get isNANOID() { + return !!this._def.checks.find((ch2) => ch2.kind === "nanoid"); + } + get isCUID() { + return !!this._def.checks.find((ch2) => ch2.kind === "cuid"); + } + get isCUID2() { + return !!this._def.checks.find((ch2) => ch2.kind === "cuid2"); + } + get isULID() { + return !!this._def.checks.find((ch2) => ch2.kind === "ulid"); + } + get isIP() { + return !!this._def.checks.find((ch2) => ch2.kind === "ip"); + } + get isCIDR() { + return !!this._def.checks.find((ch2) => ch2.kind === "cidr"); + } + get isBase64() { + return !!this._def.checks.find((ch2) => ch2.kind === "base64"); + } + get isBase64url() { + return !!this._def.checks.find((ch2) => ch2.kind === "base64url"); + } + get minLength() { + let min = null; + for (const ch2 of this._def.checks) { + if (ch2.kind === "min") { + if (min === null || ch2.value > min) + min = ch2.value; + } + } + return min; + } + get maxLength() { + let max = null; + for (const ch2 of this._def.checks) { + if (ch2.kind === "max") { + if (max === null || ch2.value < max) + max = ch2.value; + } + } + return max; + } +}; +ZodString.create = (params) => { + var _a5; + return new ZodString({ + checks: [], + typeName: ZodFirstPartyTypeKind.ZodString, + coerce: (_a5 = params == null ? void 0 : params.coerce) != null ? _a5 : false, + ...processCreateParams(params) + }); +}; +function floatSafeRemainder(val, step) { + const valDecCount = (val.toString().split(".")[1] || "").length; + const stepDecCount = (step.toString().split(".")[1] || "").length; + const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount; + const valInt = Number.parseInt(val.toFixed(decCount).replace(".", "")); + const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", "")); + return valInt % stepInt / 10 ** decCount; +} +var ZodNumber = class _ZodNumber extends ZodType { + constructor() { + super(...arguments); + this.min = this.gte; + this.max = this.lte; + this.step = this.multipleOf; + } + _parse(input) { + if (this._def.coerce) { + input.data = Number(input.data); + } + const parsedType2 = this._getType(input); + if (parsedType2 !== ZodParsedType.number) { + const ctx2 = this._getOrReturnCtx(input); + addIssueToContext(ctx2, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.number, + received: ctx2.parsedType + }); + return INVALID; + } + let ctx = void 0; + const status = new ParseStatus(); + for (const check2 of this._def.checks) { + if (check2.kind === "int") { + if (!util.isInteger(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: "integer", + received: "float", + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "min") { + const tooSmall = check2.inclusive ? input.data < check2.value : input.data <= check2.value; + if (tooSmall) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.too_small, + minimum: check2.value, + type: "number", + inclusive: check2.inclusive, + exact: false, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "max") { + const tooBig = check2.inclusive ? input.data > check2.value : input.data >= check2.value; + if (tooBig) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.too_big, + maximum: check2.value, + type: "number", + inclusive: check2.inclusive, + exact: false, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "multipleOf") { + if (floatSafeRemainder(input.data, check2.value) !== 0) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.not_multiple_of, + multipleOf: check2.value, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "finite") { + if (!Number.isFinite(input.data)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.not_finite, + message: check2.message + }); + status.dirty(); + } + } else { + util.assertNever(check2); + } + } + return { status: status.value, value: input.data }; + } + gte(value, message) { + return this.setLimit("min", value, true, errorUtil.toString(message)); + } + gt(value, message) { + return this.setLimit("min", value, false, errorUtil.toString(message)); + } + lte(value, message) { + return this.setLimit("max", value, true, errorUtil.toString(message)); + } + lt(value, message) { + return this.setLimit("max", value, false, errorUtil.toString(message)); + } + setLimit(kind, value, inclusive, message) { + return new _ZodNumber({ + ...this._def, + checks: [ + ...this._def.checks, + { + kind, + value, + inclusive, + message: errorUtil.toString(message) + } + ] + }); + } + _addCheck(check2) { + return new _ZodNumber({ + ...this._def, + checks: [...this._def.checks, check2] + }); + } + int(message) { + return this._addCheck({ + kind: "int", + message: errorUtil.toString(message) + }); + } + positive(message) { + return this._addCheck({ + kind: "min", + value: 0, + inclusive: false, + message: errorUtil.toString(message) + }); + } + negative(message) { + return this._addCheck({ + kind: "max", + value: 0, + inclusive: false, + message: errorUtil.toString(message) + }); + } + nonpositive(message) { + return this._addCheck({ + kind: "max", + value: 0, + inclusive: true, + message: errorUtil.toString(message) + }); + } + nonnegative(message) { + return this._addCheck({ + kind: "min", + value: 0, + inclusive: true, + message: errorUtil.toString(message) + }); + } + multipleOf(value, message) { + return this._addCheck({ + kind: "multipleOf", + value, + message: errorUtil.toString(message) + }); + } + finite(message) { + return this._addCheck({ + kind: "finite", + message: errorUtil.toString(message) + }); + } + safe(message) { + return this._addCheck({ + kind: "min", + inclusive: true, + value: Number.MIN_SAFE_INTEGER, + message: errorUtil.toString(message) + })._addCheck({ + kind: "max", + inclusive: true, + value: Number.MAX_SAFE_INTEGER, + message: errorUtil.toString(message) + }); + } + get minValue() { + let min = null; + for (const ch2 of this._def.checks) { + if (ch2.kind === "min") { + if (min === null || ch2.value > min) + min = ch2.value; + } + } + return min; + } + get maxValue() { + let max = null; + for (const ch2 of this._def.checks) { + if (ch2.kind === "max") { + if (max === null || ch2.value < max) + max = ch2.value; + } + } + return max; + } + get isInt() { + return !!this._def.checks.find((ch2) => ch2.kind === "int" || ch2.kind === "multipleOf" && util.isInteger(ch2.value)); + } + get isFinite() { + let max = null; + let min = null; + for (const ch2 of this._def.checks) { + if (ch2.kind === "finite" || ch2.kind === "int" || ch2.kind === "multipleOf") { + return true; + } else if (ch2.kind === "min") { + if (min === null || ch2.value > min) + min = ch2.value; + } else if (ch2.kind === "max") { + if (max === null || ch2.value < max) + max = ch2.value; + } + } + return Number.isFinite(min) && Number.isFinite(max); + } +}; +ZodNumber.create = (params) => { + return new ZodNumber({ + checks: [], + typeName: ZodFirstPartyTypeKind.ZodNumber, + coerce: (params == null ? void 0 : params.coerce) || false, + ...processCreateParams(params) + }); +}; +var ZodBigInt = class _ZodBigInt extends ZodType { + constructor() { + super(...arguments); + this.min = this.gte; + this.max = this.lte; + } + _parse(input) { + if (this._def.coerce) { + try { + input.data = BigInt(input.data); + } catch (e2) { + return this._getInvalidInput(input); + } + } + const parsedType2 = this._getType(input); + if (parsedType2 !== ZodParsedType.bigint) { + return this._getInvalidInput(input); + } + let ctx = void 0; + const status = new ParseStatus(); + for (const check2 of this._def.checks) { + if (check2.kind === "min") { + const tooSmall = check2.inclusive ? input.data < check2.value : input.data <= check2.value; + if (tooSmall) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.too_small, + type: "bigint", + minimum: check2.value, + inclusive: check2.inclusive, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "max") { + const tooBig = check2.inclusive ? input.data > check2.value : input.data >= check2.value; + if (tooBig) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.too_big, + type: "bigint", + maximum: check2.value, + inclusive: check2.inclusive, + message: check2.message + }); + status.dirty(); + } + } else if (check2.kind === "multipleOf") { + if (input.data % check2.value !== BigInt(0)) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.not_multiple_of, + multipleOf: check2.value, + message: check2.message + }); + status.dirty(); + } + } else { + util.assertNever(check2); + } + } + return { status: status.value, value: input.data }; + } + _getInvalidInput(input) { + const ctx = this._getOrReturnCtx(input); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.bigint, + received: ctx.parsedType + }); + return INVALID; + } + gte(value, message) { + return this.setLimit("min", value, true, errorUtil.toString(message)); + } + gt(value, message) { + return this.setLimit("min", value, false, errorUtil.toString(message)); + } + lte(value, message) { + return this.setLimit("max", value, true, errorUtil.toString(message)); + } + lt(value, message) { + return this.setLimit("max", value, false, errorUtil.toString(message)); + } + setLimit(kind, value, inclusive, message) { + return new _ZodBigInt({ + ...this._def, + checks: [ + ...this._def.checks, + { + kind, + value, + inclusive, + message: errorUtil.toString(message) + } + ] + }); + } + _addCheck(check2) { + return new _ZodBigInt({ + ...this._def, + checks: [...this._def.checks, check2] + }); + } + positive(message) { + return this._addCheck({ + kind: "min", + value: BigInt(0), + inclusive: false, + message: errorUtil.toString(message) + }); + } + negative(message) { + return this._addCheck({ + kind: "max", + value: BigInt(0), + inclusive: false, + message: errorUtil.toString(message) + }); + } + nonpositive(message) { + return this._addCheck({ + kind: "max", + value: BigInt(0), + inclusive: true, + message: errorUtil.toString(message) + }); + } + nonnegative(message) { + return this._addCheck({ + kind: "min", + value: BigInt(0), + inclusive: true, + message: errorUtil.toString(message) + }); + } + multipleOf(value, message) { + return this._addCheck({ + kind: "multipleOf", + value, + message: errorUtil.toString(message) + }); + } + get minValue() { + let min = null; + for (const ch2 of this._def.checks) { + if (ch2.kind === "min") { + if (min === null || ch2.value > min) + min = ch2.value; + } + } + return min; + } + get maxValue() { + let max = null; + for (const ch2 of this._def.checks) { + if (ch2.kind === "max") { + if (max === null || ch2.value < max) + max = ch2.value; + } + } + return max; + } +}; +ZodBigInt.create = (params) => { + var _a5; + return new ZodBigInt({ + checks: [], + typeName: ZodFirstPartyTypeKind.ZodBigInt, + coerce: (_a5 = params == null ? void 0 : params.coerce) != null ? _a5 : false, + ...processCreateParams(params) + }); +}; +var ZodBoolean = class extends ZodType { + _parse(input) { + if (this._def.coerce) { + input.data = Boolean(input.data); + } + const parsedType2 = this._getType(input); + if (parsedType2 !== ZodParsedType.boolean) { + const ctx = this._getOrReturnCtx(input); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.boolean, + received: ctx.parsedType + }); + return INVALID; + } + return OK2(input.data); + } +}; +ZodBoolean.create = (params) => { + return new ZodBoolean({ + typeName: ZodFirstPartyTypeKind.ZodBoolean, + coerce: (params == null ? void 0 : params.coerce) || false, + ...processCreateParams(params) + }); +}; +var ZodDate = class _ZodDate extends ZodType { + _parse(input) { + if (this._def.coerce) { + input.data = new Date(input.data); + } + const parsedType2 = this._getType(input); + if (parsedType2 !== ZodParsedType.date) { + const ctx2 = this._getOrReturnCtx(input); + addIssueToContext(ctx2, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.date, + received: ctx2.parsedType + }); + return INVALID; + } + if (Number.isNaN(input.data.getTime())) { + const ctx2 = this._getOrReturnCtx(input); + addIssueToContext(ctx2, { + code: ZodIssueCode.invalid_date + }); + return INVALID; + } + const status = new ParseStatus(); + let ctx = void 0; + for (const check2 of this._def.checks) { + if (check2.kind === "min") { + if (input.data.getTime() < check2.value) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.too_small, + message: check2.message, + inclusive: true, + exact: false, + minimum: check2.value, + type: "date" + }); + status.dirty(); + } + } else if (check2.kind === "max") { + if (input.data.getTime() > check2.value) { + ctx = this._getOrReturnCtx(input, ctx); + addIssueToContext(ctx, { + code: ZodIssueCode.too_big, + message: check2.message, + inclusive: true, + exact: false, + maximum: check2.value, + type: "date" + }); + status.dirty(); + } + } else { + util.assertNever(check2); + } + } + return { + status: status.value, + value: new Date(input.data.getTime()) + }; + } + _addCheck(check2) { + return new _ZodDate({ + ...this._def, + checks: [...this._def.checks, check2] + }); + } + min(minDate, message) { + return this._addCheck({ + kind: "min", + value: minDate.getTime(), + message: errorUtil.toString(message) + }); + } + max(maxDate, message) { + return this._addCheck({ + kind: "max", + value: maxDate.getTime(), + message: errorUtil.toString(message) + }); + } + get minDate() { + let min = null; + for (const ch2 of this._def.checks) { + if (ch2.kind === "min") { + if (min === null || ch2.value > min) + min = ch2.value; + } + } + return min != null ? new Date(min) : null; + } + get maxDate() { + let max = null; + for (const ch2 of this._def.checks) { + if (ch2.kind === "max") { + if (max === null || ch2.value < max) + max = ch2.value; + } + } + return max != null ? new Date(max) : null; + } +}; +ZodDate.create = (params) => { + return new ZodDate({ + checks: [], + coerce: (params == null ? void 0 : params.coerce) || false, + typeName: ZodFirstPartyTypeKind.ZodDate, + ...processCreateParams(params) + }); +}; +var ZodSymbol = class extends ZodType { + _parse(input) { + const parsedType2 = this._getType(input); + if (parsedType2 !== ZodParsedType.symbol) { + const ctx = this._getOrReturnCtx(input); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.symbol, + received: ctx.parsedType + }); + return INVALID; + } + return OK2(input.data); + } +}; +ZodSymbol.create = (params) => { + return new ZodSymbol({ + typeName: ZodFirstPartyTypeKind.ZodSymbol, + ...processCreateParams(params) + }); +}; +var ZodUndefined = class extends ZodType { + _parse(input) { + const parsedType2 = this._getType(input); + if (parsedType2 !== ZodParsedType.undefined) { + const ctx = this._getOrReturnCtx(input); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.undefined, + received: ctx.parsedType + }); + return INVALID; + } + return OK2(input.data); + } +}; +ZodUndefined.create = (params) => { + return new ZodUndefined({ + typeName: ZodFirstPartyTypeKind.ZodUndefined, + ...processCreateParams(params) + }); +}; +var ZodNull = class extends ZodType { + _parse(input) { + const parsedType2 = this._getType(input); + if (parsedType2 !== ZodParsedType.null) { + const ctx = this._getOrReturnCtx(input); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.null, + received: ctx.parsedType + }); + return INVALID; + } + return OK2(input.data); + } +}; +ZodNull.create = (params) => { + return new ZodNull({ + typeName: ZodFirstPartyTypeKind.ZodNull, + ...processCreateParams(params) + }); +}; +var ZodAny = class extends ZodType { + constructor() { + super(...arguments); + this._any = true; + } + _parse(input) { + return OK2(input.data); + } +}; +ZodAny.create = (params) => { + return new ZodAny({ + typeName: ZodFirstPartyTypeKind.ZodAny, + ...processCreateParams(params) + }); +}; +var ZodUnknown = class extends ZodType { + constructor() { + super(...arguments); + this._unknown = true; + } + _parse(input) { + return OK2(input.data); + } +}; +ZodUnknown.create = (params) => { + return new ZodUnknown({ + typeName: ZodFirstPartyTypeKind.ZodUnknown, + ...processCreateParams(params) + }); +}; +var ZodNever = class extends ZodType { + _parse(input) { + const ctx = this._getOrReturnCtx(input); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.never, + received: ctx.parsedType + }); + return INVALID; + } +}; +ZodNever.create = (params) => { + return new ZodNever({ + typeName: ZodFirstPartyTypeKind.ZodNever, + ...processCreateParams(params) + }); +}; +var ZodVoid = class extends ZodType { + _parse(input) { + const parsedType2 = this._getType(input); + if (parsedType2 !== ZodParsedType.undefined) { + const ctx = this._getOrReturnCtx(input); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.void, + received: ctx.parsedType + }); + return INVALID; + } + return OK2(input.data); + } +}; +ZodVoid.create = (params) => { + return new ZodVoid({ + typeName: ZodFirstPartyTypeKind.ZodVoid, + ...processCreateParams(params) + }); +}; +var ZodArray = class _ZodArray extends ZodType { + _parse(input) { + const { ctx, status } = this._processInputParams(input); + const def = this._def; + if (ctx.parsedType !== ZodParsedType.array) { + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.array, + received: ctx.parsedType + }); + return INVALID; + } + if (def.exactLength !== null) { + const tooBig = ctx.data.length > def.exactLength.value; + const tooSmall = ctx.data.length < def.exactLength.value; + if (tooBig || tooSmall) { + addIssueToContext(ctx, { + code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small, + minimum: tooSmall ? def.exactLength.value : void 0, + maximum: tooBig ? def.exactLength.value : void 0, + type: "array", + inclusive: true, + exact: true, + message: def.exactLength.message + }); + status.dirty(); + } + } + if (def.minLength !== null) { + if (ctx.data.length < def.minLength.value) { + addIssueToContext(ctx, { + code: ZodIssueCode.too_small, + minimum: def.minLength.value, + type: "array", + inclusive: true, + exact: false, + message: def.minLength.message + }); + status.dirty(); + } + } + if (def.maxLength !== null) { + if (ctx.data.length > def.maxLength.value) { + addIssueToContext(ctx, { + code: ZodIssueCode.too_big, + maximum: def.maxLength.value, + type: "array", + inclusive: true, + exact: false, + message: def.maxLength.message + }); + status.dirty(); + } + } + if (ctx.common.async) { + return Promise.all([...ctx.data].map((item, i) => { + return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i)); + })).then((result2) => { + return ParseStatus.mergeArray(status, result2); + }); + } + const result = [...ctx.data].map((item, i) => { + return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i)); + }); + return ParseStatus.mergeArray(status, result); + } + get element() { + return this._def.type; + } + min(minLength, message) { + return new _ZodArray({ + ...this._def, + minLength: { value: minLength, message: errorUtil.toString(message) } + }); + } + max(maxLength, message) { + return new _ZodArray({ + ...this._def, + maxLength: { value: maxLength, message: errorUtil.toString(message) } + }); + } + length(len, message) { + return new _ZodArray({ + ...this._def, + exactLength: { value: len, message: errorUtil.toString(message) } + }); + } + nonempty(message) { + return this.min(1, message); + } +}; +ZodArray.create = (schema, params) => { + return new ZodArray({ + type: schema, + minLength: null, + maxLength: null, + exactLength: null, + typeName: ZodFirstPartyTypeKind.ZodArray, + ...processCreateParams(params) + }); +}; +function deepPartialify(schema) { + if (schema instanceof ZodObject) { + const newShape = {}; + for (const key in schema.shape) { + const fieldSchema = schema.shape[key]; + newShape[key] = ZodOptional.create(deepPartialify(fieldSchema)); + } + return new ZodObject({ + ...schema._def, + shape: () => newShape + }); + } else if (schema instanceof ZodArray) { + return new ZodArray({ + ...schema._def, + type: deepPartialify(schema.element) + }); + } else if (schema instanceof ZodOptional) { + return ZodOptional.create(deepPartialify(schema.unwrap())); + } else if (schema instanceof ZodNullable) { + return ZodNullable.create(deepPartialify(schema.unwrap())); + } else if (schema instanceof ZodTuple) { + return ZodTuple.create(schema.items.map((item) => deepPartialify(item))); + } else { + return schema; + } +} +var ZodObject = class _ZodObject extends ZodType { + constructor() { + super(...arguments); + this._cached = null; + this.nonstrict = this.passthrough; + this.augment = this.extend; + } + _getCached() { + if (this._cached !== null) + return this._cached; + const shape = this._def.shape(); + const keys = util.objectKeys(shape); + this._cached = { shape, keys }; + return this._cached; + } + _parse(input) { + const parsedType2 = this._getType(input); + if (parsedType2 !== ZodParsedType.object) { + const ctx2 = this._getOrReturnCtx(input); + addIssueToContext(ctx2, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.object, + received: ctx2.parsedType + }); + return INVALID; + } + const { status, ctx } = this._processInputParams(input); + const { shape, keys: shapeKeys } = this._getCached(); + const extraKeys = []; + if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === "strip")) { + for (const key in ctx.data) { + if (!shapeKeys.includes(key)) { + extraKeys.push(key); + } + } + } + const pairs = []; + for (const key of shapeKeys) { + const keyValidator = shape[key]; + const value = ctx.data[key]; + pairs.push({ + key: { status: "valid", value: key }, + value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)), + alwaysSet: key in ctx.data + }); + } + if (this._def.catchall instanceof ZodNever) { + const unknownKeys = this._def.unknownKeys; + if (unknownKeys === "passthrough") { + for (const key of extraKeys) { + pairs.push({ + key: { status: "valid", value: key }, + value: { status: "valid", value: ctx.data[key] } + }); + } + } else if (unknownKeys === "strict") { + if (extraKeys.length > 0) { + addIssueToContext(ctx, { + code: ZodIssueCode.unrecognized_keys, + keys: extraKeys + }); + status.dirty(); + } + } else if (unknownKeys === "strip") { + } else { + throw new Error(`Internal ZodObject error: invalid unknownKeys value.`); + } + } else { + const catchall = this._def.catchall; + for (const key of extraKeys) { + const value = ctx.data[key]; + pairs.push({ + key: { status: "valid", value: key }, + value: catchall._parse( + new ParseInputLazyPath(ctx, value, ctx.path, key) + //, ctx.child(key), value, getParsedType(value) + ), + alwaysSet: key in ctx.data + }); + } + } + if (ctx.common.async) { + return Promise.resolve().then(async () => { + const syncPairs = []; + for (const pair of pairs) { + const key = await pair.key; + const value = await pair.value; + syncPairs.push({ + key, + value, + alwaysSet: pair.alwaysSet + }); + } + return syncPairs; + }).then((syncPairs) => { + return ParseStatus.mergeObjectSync(status, syncPairs); + }); + } else { + return ParseStatus.mergeObjectSync(status, pairs); + } + } + get shape() { + return this._def.shape(); + } + strict(message) { + errorUtil.errToObj; + return new _ZodObject({ + ...this._def, + unknownKeys: "strict", + ...message !== void 0 ? { + errorMap: (issue2, ctx) => { + var _a5, _b3, _c2, _d; + const defaultError = (_c2 = (_b3 = (_a5 = this._def).errorMap) == null ? void 0 : _b3.call(_a5, issue2, ctx).message) != null ? _c2 : ctx.defaultError; + if (issue2.code === "unrecognized_keys") + return { + message: (_d = errorUtil.errToObj(message).message) != null ? _d : defaultError + }; + return { + message: defaultError + }; + } + } : {} + }); + } + strip() { + return new _ZodObject({ + ...this._def, + unknownKeys: "strip" + }); + } + passthrough() { + return new _ZodObject({ + ...this._def, + unknownKeys: "passthrough" + }); + } + // const AugmentFactory = + // (def: Def) => + // ( + // augmentation: Augmentation + // ): ZodObject< + // extendShape, Augmentation>, + // Def["unknownKeys"], + // Def["catchall"] + // > => { + // return new ZodObject({ + // ...def, + // shape: () => ({ + // ...def.shape(), + // ...augmentation, + // }), + // }) as any; + // }; + extend(augmentation) { + return new _ZodObject({ + ...this._def, + shape: () => ({ + ...this._def.shape(), + ...augmentation + }) + }); + } + /** + * Prior to zod@1.0.12 there was a bug in the + * inferred type of merged objects. Please + * upgrade if you are experiencing issues. + */ + merge(merging) { + const merged = new _ZodObject({ + unknownKeys: merging._def.unknownKeys, + catchall: merging._def.catchall, + shape: () => ({ + ...this._def.shape(), + ...merging._def.shape() + }), + typeName: ZodFirstPartyTypeKind.ZodObject + }); + return merged; + } + // merge< + // Incoming extends AnyZodObject, + // Augmentation extends Incoming["shape"], + // NewOutput extends { + // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation + // ? Augmentation[k]["_output"] + // : k extends keyof Output + // ? Output[k] + // : never; + // }, + // NewInput extends { + // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation + // ? Augmentation[k]["_input"] + // : k extends keyof Input + // ? Input[k] + // : never; + // } + // >( + // merging: Incoming + // ): ZodObject< + // extendShape>, + // Incoming["_def"]["unknownKeys"], + // Incoming["_def"]["catchall"], + // NewOutput, + // NewInput + // > { + // const merged: any = new ZodObject({ + // unknownKeys: merging._def.unknownKeys, + // catchall: merging._def.catchall, + // shape: () => + // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()), + // typeName: ZodFirstPartyTypeKind.ZodObject, + // }) as any; + // return merged; + // } + setKey(key, schema) { + return this.augment({ [key]: schema }); + } + // merge( + // merging: Incoming + // ): //ZodObject = (merging) => { + // ZodObject< + // extendShape>, + // Incoming["_def"]["unknownKeys"], + // Incoming["_def"]["catchall"] + // > { + // // const mergedShape = objectUtil.mergeShapes( + // // this._def.shape(), + // // merging._def.shape() + // // ); + // const merged: any = new ZodObject({ + // unknownKeys: merging._def.unknownKeys, + // catchall: merging._def.catchall, + // shape: () => + // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()), + // typeName: ZodFirstPartyTypeKind.ZodObject, + // }) as any; + // return merged; + // } + catchall(index) { + return new _ZodObject({ + ...this._def, + catchall: index + }); + } + pick(mask) { + const shape = {}; + for (const key of util.objectKeys(mask)) { + if (mask[key] && this.shape[key]) { + shape[key] = this.shape[key]; + } + } + return new _ZodObject({ + ...this._def, + shape: () => shape + }); + } + omit(mask) { + const shape = {}; + for (const key of util.objectKeys(this.shape)) { + if (!mask[key]) { + shape[key] = this.shape[key]; + } + } + return new _ZodObject({ + ...this._def, + shape: () => shape + }); + } + /** + * @deprecated + */ + deepPartial() { + return deepPartialify(this); + } + partial(mask) { + const newShape = {}; + for (const key of util.objectKeys(this.shape)) { + const fieldSchema = this.shape[key]; + if (mask && !mask[key]) { + newShape[key] = fieldSchema; + } else { + newShape[key] = fieldSchema.optional(); + } + } + return new _ZodObject({ + ...this._def, + shape: () => newShape + }); + } + required(mask) { + const newShape = {}; + for (const key of util.objectKeys(this.shape)) { + if (mask && !mask[key]) { + newShape[key] = this.shape[key]; + } else { + const fieldSchema = this.shape[key]; + let newField = fieldSchema; + while (newField instanceof ZodOptional) { + newField = newField._def.innerType; + } + newShape[key] = newField; + } + } + return new _ZodObject({ + ...this._def, + shape: () => newShape + }); + } + keyof() { + return createZodEnum(util.objectKeys(this.shape)); + } +}; +ZodObject.create = (shape, params) => { + return new ZodObject({ + shape: () => shape, + unknownKeys: "strip", + catchall: ZodNever.create(), + typeName: ZodFirstPartyTypeKind.ZodObject, + ...processCreateParams(params) + }); +}; +ZodObject.strictCreate = (shape, params) => { + return new ZodObject({ + shape: () => shape, + unknownKeys: "strict", + catchall: ZodNever.create(), + typeName: ZodFirstPartyTypeKind.ZodObject, + ...processCreateParams(params) + }); +}; +ZodObject.lazycreate = (shape, params) => { + return new ZodObject({ + shape, + unknownKeys: "strip", + catchall: ZodNever.create(), + typeName: ZodFirstPartyTypeKind.ZodObject, + ...processCreateParams(params) + }); +}; +var ZodUnion = class extends ZodType { + _parse(input) { + const { ctx } = this._processInputParams(input); + const options = this._def.options; + function handleResults(results) { + for (const result of results) { + if (result.result.status === "valid") { + return result.result; + } + } + for (const result of results) { + if (result.result.status === "dirty") { + ctx.common.issues.push(...result.ctx.common.issues); + return result.result; + } + } + const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues)); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_union, + unionErrors + }); + return INVALID; + } + if (ctx.common.async) { + return Promise.all(options.map(async (option) => { + const childCtx = { + ...ctx, + common: { + ...ctx.common, + issues: [] + }, + parent: null + }; + return { + result: await option._parseAsync({ + data: ctx.data, + path: ctx.path, + parent: childCtx + }), + ctx: childCtx + }; + })).then(handleResults); + } else { + let dirty = void 0; + const issues = []; + for (const option of options) { + const childCtx = { + ...ctx, + common: { + ...ctx.common, + issues: [] + }, + parent: null + }; + const result = option._parseSync({ + data: ctx.data, + path: ctx.path, + parent: childCtx + }); + if (result.status === "valid") { + return result; + } else if (result.status === "dirty" && !dirty) { + dirty = { result, ctx: childCtx }; + } + if (childCtx.common.issues.length) { + issues.push(childCtx.common.issues); + } + } + if (dirty) { + ctx.common.issues.push(...dirty.ctx.common.issues); + return dirty.result; + } + const unionErrors = issues.map((issues2) => new ZodError(issues2)); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_union, + unionErrors + }); + return INVALID; + } + } + get options() { + return this._def.options; + } +}; +ZodUnion.create = (types, params) => { + return new ZodUnion({ + options: types, + typeName: ZodFirstPartyTypeKind.ZodUnion, + ...processCreateParams(params) + }); +}; +var getDiscriminator = (type) => { + if (type instanceof ZodLazy) { + return getDiscriminator(type.schema); + } else if (type instanceof ZodEffects) { + return getDiscriminator(type.innerType()); + } else if (type instanceof ZodLiteral) { + return [type.value]; + } else if (type instanceof ZodEnum) { + return type.options; + } else if (type instanceof ZodNativeEnum) { + return util.objectValues(type.enum); + } else if (type instanceof ZodDefault) { + return getDiscriminator(type._def.innerType); + } else if (type instanceof ZodUndefined) { + return [void 0]; + } else if (type instanceof ZodNull) { + return [null]; + } else if (type instanceof ZodOptional) { + return [void 0, ...getDiscriminator(type.unwrap())]; + } else if (type instanceof ZodNullable) { + return [null, ...getDiscriminator(type.unwrap())]; + } else if (type instanceof ZodBranded) { + return getDiscriminator(type.unwrap()); + } else if (type instanceof ZodReadonly) { + return getDiscriminator(type.unwrap()); + } else if (type instanceof ZodCatch) { + return getDiscriminator(type._def.innerType); + } else { + return []; + } +}; +var ZodDiscriminatedUnion = class _ZodDiscriminatedUnion extends ZodType { + _parse(input) { + const { ctx } = this._processInputParams(input); + if (ctx.parsedType !== ZodParsedType.object) { + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.object, + received: ctx.parsedType + }); + return INVALID; + } + const discriminator = this.discriminator; + const discriminatorValue = ctx.data[discriminator]; + const option = this.optionsMap.get(discriminatorValue); + if (!option) { + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_union_discriminator, + options: Array.from(this.optionsMap.keys()), + path: [discriminator] + }); + return INVALID; + } + if (ctx.common.async) { + return option._parseAsync({ + data: ctx.data, + path: ctx.path, + parent: ctx + }); + } else { + return option._parseSync({ + data: ctx.data, + path: ctx.path, + parent: ctx + }); + } + } + get discriminator() { + return this._def.discriminator; + } + get options() { + return this._def.options; + } + get optionsMap() { + return this._def.optionsMap; + } + /** + * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor. + * However, it only allows a union of objects, all of which need to share a discriminator property. This property must + * have a different value for each object in the union. + * @param discriminator the name of the discriminator property + * @param types an array of object schemas + * @param params + */ + static create(discriminator, options, params) { + const optionsMap = /* @__PURE__ */ new Map(); + for (const type of options) { + const discriminatorValues = getDiscriminator(type.shape[discriminator]); + if (!discriminatorValues.length) { + throw new Error(`A discriminator value for key \`${discriminator}\` could not be extracted from all schema options`); + } + for (const value of discriminatorValues) { + if (optionsMap.has(value)) { + throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`); + } + optionsMap.set(value, type); + } + } + return new _ZodDiscriminatedUnion({ + typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion, + discriminator, + options, + optionsMap, + ...processCreateParams(params) + }); + } +}; +function mergeValues(a, b2) { + const aType = getParsedType(a); + const bType = getParsedType(b2); + if (a === b2) { + return { valid: true, data: a }; + } else if (aType === ZodParsedType.object && bType === ZodParsedType.object) { + const bKeys = util.objectKeys(b2); + const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1); + const newObj = { ...a, ...b2 }; + for (const key of sharedKeys) { + const sharedValue = mergeValues(a[key], b2[key]); + if (!sharedValue.valid) { + return { valid: false }; + } + newObj[key] = sharedValue.data; + } + return { valid: true, data: newObj }; + } else if (aType === ZodParsedType.array && bType === ZodParsedType.array) { + if (a.length !== b2.length) { + return { valid: false }; + } + const newArray = []; + for (let index = 0; index < a.length; index++) { + const itemA = a[index]; + const itemB = b2[index]; + const sharedValue = mergeValues(itemA, itemB); + if (!sharedValue.valid) { + return { valid: false }; + } + newArray.push(sharedValue.data); + } + return { valid: true, data: newArray }; + } else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b2) { + return { valid: true, data: a }; + } else { + return { valid: false }; + } +} +var ZodIntersection = class extends ZodType { + _parse(input) { + const { status, ctx } = this._processInputParams(input); + const handleParsed = (parsedLeft, parsedRight) => { + if (isAborted(parsedLeft) || isAborted(parsedRight)) { + return INVALID; + } + const merged = mergeValues(parsedLeft.value, parsedRight.value); + if (!merged.valid) { + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_intersection_types + }); + return INVALID; + } + if (isDirty(parsedLeft) || isDirty(parsedRight)) { + status.dirty(); + } + return { status: status.value, value: merged.data }; + }; + if (ctx.common.async) { + return Promise.all([ + this._def.left._parseAsync({ + data: ctx.data, + path: ctx.path, + parent: ctx + }), + this._def.right._parseAsync({ + data: ctx.data, + path: ctx.path, + parent: ctx + }) + ]).then(([left, right]) => handleParsed(left, right)); + } else { + return handleParsed(this._def.left._parseSync({ + data: ctx.data, + path: ctx.path, + parent: ctx + }), this._def.right._parseSync({ + data: ctx.data, + path: ctx.path, + parent: ctx + })); + } + } +}; +ZodIntersection.create = (left, right, params) => { + return new ZodIntersection({ + left, + right, + typeName: ZodFirstPartyTypeKind.ZodIntersection, + ...processCreateParams(params) + }); +}; +var ZodTuple = class _ZodTuple extends ZodType { + _parse(input) { + const { status, ctx } = this._processInputParams(input); + if (ctx.parsedType !== ZodParsedType.array) { + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.array, + received: ctx.parsedType + }); + return INVALID; + } + if (ctx.data.length < this._def.items.length) { + addIssueToContext(ctx, { + code: ZodIssueCode.too_small, + minimum: this._def.items.length, + inclusive: true, + exact: false, + type: "array" + }); + return INVALID; + } + const rest = this._def.rest; + if (!rest && ctx.data.length > this._def.items.length) { + addIssueToContext(ctx, { + code: ZodIssueCode.too_big, + maximum: this._def.items.length, + inclusive: true, + exact: false, + type: "array" + }); + status.dirty(); + } + const items = [...ctx.data].map((item, itemIndex) => { + const schema = this._def.items[itemIndex] || this._def.rest; + if (!schema) + return null; + return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex)); + }).filter((x2) => !!x2); + if (ctx.common.async) { + return Promise.all(items).then((results) => { + return ParseStatus.mergeArray(status, results); + }); + } else { + return ParseStatus.mergeArray(status, items); + } + } + get items() { + return this._def.items; + } + rest(rest) { + return new _ZodTuple({ + ...this._def, + rest + }); + } +}; +ZodTuple.create = (schemas, params) => { + if (!Array.isArray(schemas)) { + throw new Error("You must pass an array of schemas to z.tuple([ ... ])"); + } + return new ZodTuple({ + items: schemas, + typeName: ZodFirstPartyTypeKind.ZodTuple, + rest: null, + ...processCreateParams(params) + }); +}; +var ZodRecord = class _ZodRecord extends ZodType { + get keySchema() { + return this._def.keyType; + } + get valueSchema() { + return this._def.valueType; + } + _parse(input) { + const { status, ctx } = this._processInputParams(input); + if (ctx.parsedType !== ZodParsedType.object) { + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.object, + received: ctx.parsedType + }); + return INVALID; + } + const pairs = []; + const keyType = this._def.keyType; + const valueType = this._def.valueType; + for (const key in ctx.data) { + pairs.push({ + key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)), + value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)), + alwaysSet: key in ctx.data + }); + } + if (ctx.common.async) { + return ParseStatus.mergeObjectAsync(status, pairs); + } else { + return ParseStatus.mergeObjectSync(status, pairs); + } + } + get element() { + return this._def.valueType; + } + static create(first, second, third) { + if (second instanceof ZodType) { + return new _ZodRecord({ + keyType: first, + valueType: second, + typeName: ZodFirstPartyTypeKind.ZodRecord, + ...processCreateParams(third) + }); + } + return new _ZodRecord({ + keyType: ZodString.create(), + valueType: first, + typeName: ZodFirstPartyTypeKind.ZodRecord, + ...processCreateParams(second) + }); + } +}; +var ZodMap = class extends ZodType { + get keySchema() { + return this._def.keyType; + } + get valueSchema() { + return this._def.valueType; + } + _parse(input) { + const { status, ctx } = this._processInputParams(input); + if (ctx.parsedType !== ZodParsedType.map) { + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.map, + received: ctx.parsedType + }); + return INVALID; + } + const keyType = this._def.keyType; + const valueType = this._def.valueType; + const pairs = [...ctx.data.entries()].map(([key, value], index) => { + return { + key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, "key"])), + value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, "value"])) + }; + }); + if (ctx.common.async) { + const finalMap = /* @__PURE__ */ new Map(); + return Promise.resolve().then(async () => { + for (const pair of pairs) { + const key = await pair.key; + const value = await pair.value; + if (key.status === "aborted" || value.status === "aborted") { + return INVALID; + } + if (key.status === "dirty" || value.status === "dirty") { + status.dirty(); + } + finalMap.set(key.value, value.value); + } + return { status: status.value, value: finalMap }; + }); + } else { + const finalMap = /* @__PURE__ */ new Map(); + for (const pair of pairs) { + const key = pair.key; + const value = pair.value; + if (key.status === "aborted" || value.status === "aborted") { + return INVALID; + } + if (key.status === "dirty" || value.status === "dirty") { + status.dirty(); + } + finalMap.set(key.value, value.value); + } + return { status: status.value, value: finalMap }; + } + } +}; +ZodMap.create = (keyType, valueType, params) => { + return new ZodMap({ + valueType, + keyType, + typeName: ZodFirstPartyTypeKind.ZodMap, + ...processCreateParams(params) + }); +}; +var ZodSet = class _ZodSet extends ZodType { + _parse(input) { + const { status, ctx } = this._processInputParams(input); + if (ctx.parsedType !== ZodParsedType.set) { + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.set, + received: ctx.parsedType + }); + return INVALID; + } + const def = this._def; + if (def.minSize !== null) { + if (ctx.data.size < def.minSize.value) { + addIssueToContext(ctx, { + code: ZodIssueCode.too_small, + minimum: def.minSize.value, + type: "set", + inclusive: true, + exact: false, + message: def.minSize.message + }); + status.dirty(); + } + } + if (def.maxSize !== null) { + if (ctx.data.size > def.maxSize.value) { + addIssueToContext(ctx, { + code: ZodIssueCode.too_big, + maximum: def.maxSize.value, + type: "set", + inclusive: true, + exact: false, + message: def.maxSize.message + }); + status.dirty(); + } + } + const valueType = this._def.valueType; + function finalizeSet(elements2) { + const parsedSet = /* @__PURE__ */ new Set(); + for (const element of elements2) { + if (element.status === "aborted") + return INVALID; + if (element.status === "dirty") + status.dirty(); + parsedSet.add(element.value); + } + return { status: status.value, value: parsedSet }; + } + const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i))); + if (ctx.common.async) { + return Promise.all(elements).then((elements2) => finalizeSet(elements2)); + } else { + return finalizeSet(elements); + } + } + min(minSize, message) { + return new _ZodSet({ + ...this._def, + minSize: { value: minSize, message: errorUtil.toString(message) } + }); + } + max(maxSize, message) { + return new _ZodSet({ + ...this._def, + maxSize: { value: maxSize, message: errorUtil.toString(message) } + }); + } + size(size, message) { + return this.min(size, message).max(size, message); + } + nonempty(message) { + return this.min(1, message); + } +}; +ZodSet.create = (valueType, params) => { + return new ZodSet({ + valueType, + minSize: null, + maxSize: null, + typeName: ZodFirstPartyTypeKind.ZodSet, + ...processCreateParams(params) + }); +}; +var ZodFunction = class _ZodFunction extends ZodType { + constructor() { + super(...arguments); + this.validate = this.implement; + } + _parse(input) { + const { ctx } = this._processInputParams(input); + if (ctx.parsedType !== ZodParsedType.function) { + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.function, + received: ctx.parsedType + }); + return INVALID; + } + function makeArgsIssue(args, error48) { + return makeIssue({ + data: args, + path: ctx.path, + errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), en_default2].filter((x2) => !!x2), + issueData: { + code: ZodIssueCode.invalid_arguments, + argumentsError: error48 + } + }); + } + function makeReturnsIssue(returns, error48) { + return makeIssue({ + data: returns, + path: ctx.path, + errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), en_default2].filter((x2) => !!x2), + issueData: { + code: ZodIssueCode.invalid_return_type, + returnTypeError: error48 + } + }); + } + const params = { errorMap: ctx.common.contextualErrorMap }; + const fn = ctx.data; + if (this._def.returns instanceof ZodPromise) { + const me2 = this; + return OK2(async function(...args) { + const error48 = new ZodError([]); + const parsedArgs = await me2._def.args.parseAsync(args, params).catch((e2) => { + error48.addIssue(makeArgsIssue(args, e2)); + throw error48; + }); + const result = await Reflect.apply(fn, this, parsedArgs); + const parsedReturns = await me2._def.returns._def.type.parseAsync(result, params).catch((e2) => { + error48.addIssue(makeReturnsIssue(result, e2)); + throw error48; + }); + return parsedReturns; + }); + } else { + const me2 = this; + return OK2(function(...args) { + const parsedArgs = me2._def.args.safeParse(args, params); + if (!parsedArgs.success) { + throw new ZodError([makeArgsIssue(args, parsedArgs.error)]); + } + const result = Reflect.apply(fn, this, parsedArgs.data); + const parsedReturns = me2._def.returns.safeParse(result, params); + if (!parsedReturns.success) { + throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]); + } + return parsedReturns.data; + }); + } + } + parameters() { + return this._def.args; + } + returnType() { + return this._def.returns; + } + args(...items) { + return new _ZodFunction({ + ...this._def, + args: ZodTuple.create(items).rest(ZodUnknown.create()) + }); + } + returns(returnType) { + return new _ZodFunction({ + ...this._def, + returns: returnType + }); + } + implement(func) { + const validatedFunc = this.parse(func); + return validatedFunc; + } + strictImplement(func) { + const validatedFunc = this.parse(func); + return validatedFunc; + } + static create(args, returns, params) { + return new _ZodFunction({ + args: args ? args : ZodTuple.create([]).rest(ZodUnknown.create()), + returns: returns || ZodUnknown.create(), + typeName: ZodFirstPartyTypeKind.ZodFunction, + ...processCreateParams(params) + }); + } +}; +var ZodLazy = class extends ZodType { + get schema() { + return this._def.getter(); + } + _parse(input) { + const { ctx } = this._processInputParams(input); + const lazySchema = this._def.getter(); + return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx }); + } +}; +ZodLazy.create = (getter, params) => { + return new ZodLazy({ + getter, + typeName: ZodFirstPartyTypeKind.ZodLazy, + ...processCreateParams(params) + }); +}; +var ZodLiteral = class extends ZodType { + _parse(input) { + if (input.data !== this._def.value) { + const ctx = this._getOrReturnCtx(input); + addIssueToContext(ctx, { + received: ctx.data, + code: ZodIssueCode.invalid_literal, + expected: this._def.value + }); + return INVALID; + } + return { status: "valid", value: input.data }; + } + get value() { + return this._def.value; + } +}; +ZodLiteral.create = (value, params) => { + return new ZodLiteral({ + value, + typeName: ZodFirstPartyTypeKind.ZodLiteral, + ...processCreateParams(params) + }); +}; +function createZodEnum(values, params) { + return new ZodEnum({ + values, + typeName: ZodFirstPartyTypeKind.ZodEnum, + ...processCreateParams(params) + }); +} +var ZodEnum = class _ZodEnum extends ZodType { + _parse(input) { + if (typeof input.data !== "string") { + const ctx = this._getOrReturnCtx(input); + const expectedValues = this._def.values; + addIssueToContext(ctx, { + expected: util.joinValues(expectedValues), + received: ctx.parsedType, + code: ZodIssueCode.invalid_type + }); + return INVALID; + } + if (!this._cache) { + this._cache = new Set(this._def.values); + } + if (!this._cache.has(input.data)) { + const ctx = this._getOrReturnCtx(input); + const expectedValues = this._def.values; + addIssueToContext(ctx, { + received: ctx.data, + code: ZodIssueCode.invalid_enum_value, + options: expectedValues + }); + return INVALID; + } + return OK2(input.data); + } + get options() { + return this._def.values; + } + get enum() { + const enumValues = {}; + for (const val of this._def.values) { + enumValues[val] = val; + } + return enumValues; + } + get Values() { + const enumValues = {}; + for (const val of this._def.values) { + enumValues[val] = val; + } + return enumValues; + } + get Enum() { + const enumValues = {}; + for (const val of this._def.values) { + enumValues[val] = val; + } + return enumValues; + } + extract(values, newDef = this._def) { + return _ZodEnum.create(values, { + ...this._def, + ...newDef + }); + } + exclude(values, newDef = this._def) { + return _ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), { + ...this._def, + ...newDef + }); + } +}; +ZodEnum.create = createZodEnum; +var ZodNativeEnum = class extends ZodType { + _parse(input) { + const nativeEnumValues = util.getValidEnumValues(this._def.values); + const ctx = this._getOrReturnCtx(input); + if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) { + const expectedValues = util.objectValues(nativeEnumValues); + addIssueToContext(ctx, { + expected: util.joinValues(expectedValues), + received: ctx.parsedType, + code: ZodIssueCode.invalid_type + }); + return INVALID; + } + if (!this._cache) { + this._cache = new Set(util.getValidEnumValues(this._def.values)); + } + if (!this._cache.has(input.data)) { + const expectedValues = util.objectValues(nativeEnumValues); + addIssueToContext(ctx, { + received: ctx.data, + code: ZodIssueCode.invalid_enum_value, + options: expectedValues + }); + return INVALID; + } + return OK2(input.data); + } + get enum() { + return this._def.values; + } +}; +ZodNativeEnum.create = (values, params) => { + return new ZodNativeEnum({ + values, + typeName: ZodFirstPartyTypeKind.ZodNativeEnum, + ...processCreateParams(params) + }); +}; +var ZodPromise = class extends ZodType { + unwrap() { + return this._def.type; + } + _parse(input) { + const { ctx } = this._processInputParams(input); + if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) { + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.promise, + received: ctx.parsedType + }); + return INVALID; + } + const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data); + return OK2(promisified.then((data) => { + return this._def.type.parseAsync(data, { + path: ctx.path, + errorMap: ctx.common.contextualErrorMap + }); + })); + } +}; +ZodPromise.create = (schema, params) => { + return new ZodPromise({ + type: schema, + typeName: ZodFirstPartyTypeKind.ZodPromise, + ...processCreateParams(params) + }); +}; +var ZodEffects = class extends ZodType { + innerType() { + return this._def.schema; + } + sourceType() { + return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects ? this._def.schema.sourceType() : this._def.schema; + } + _parse(input) { + const { status, ctx } = this._processInputParams(input); + const effect = this._def.effect || null; + const checkCtx = { + addIssue: (arg) => { + addIssueToContext(ctx, arg); + if (arg.fatal) { + status.abort(); + } else { + status.dirty(); + } + }, + get path() { + return ctx.path; + } + }; + checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx); + if (effect.type === "preprocess") { + const processed = effect.transform(ctx.data, checkCtx); + if (ctx.common.async) { + return Promise.resolve(processed).then(async (processed2) => { + if (status.value === "aborted") + return INVALID; + const result = await this._def.schema._parseAsync({ + data: processed2, + path: ctx.path, + parent: ctx + }); + if (result.status === "aborted") + return INVALID; + if (result.status === "dirty") + return DIRTY(result.value); + if (status.value === "dirty") + return DIRTY(result.value); + return result; + }); + } else { + if (status.value === "aborted") + return INVALID; + const result = this._def.schema._parseSync({ + data: processed, + path: ctx.path, + parent: ctx + }); + if (result.status === "aborted") + return INVALID; + if (result.status === "dirty") + return DIRTY(result.value); + if (status.value === "dirty") + return DIRTY(result.value); + return result; + } + } + if (effect.type === "refinement") { + const executeRefinement = (acc) => { + const result = effect.refinement(acc, checkCtx); + if (ctx.common.async) { + return Promise.resolve(result); + } + if (result instanceof Promise) { + throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead."); + } + return acc; + }; + if (ctx.common.async === false) { + const inner = this._def.schema._parseSync({ + data: ctx.data, + path: ctx.path, + parent: ctx + }); + if (inner.status === "aborted") + return INVALID; + if (inner.status === "dirty") + status.dirty(); + executeRefinement(inner.value); + return { status: status.value, value: inner.value }; + } else { + return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => { + if (inner.status === "aborted") + return INVALID; + if (inner.status === "dirty") + status.dirty(); + return executeRefinement(inner.value).then(() => { + return { status: status.value, value: inner.value }; + }); + }); + } + } + if (effect.type === "transform") { + if (ctx.common.async === false) { + const base = this._def.schema._parseSync({ + data: ctx.data, + path: ctx.path, + parent: ctx + }); + if (!isValid(base)) + return INVALID; + const result = effect.transform(base.value, checkCtx); + if (result instanceof Promise) { + throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`); + } + return { status: status.value, value: result }; + } else { + return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => { + if (!isValid(base)) + return INVALID; + return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ + status: status.value, + value: result + })); + }); + } + } + util.assertNever(effect); + } +}; +ZodEffects.create = (schema, effect, params) => { + return new ZodEffects({ + schema, + typeName: ZodFirstPartyTypeKind.ZodEffects, + effect, + ...processCreateParams(params) + }); +}; +ZodEffects.createWithPreprocess = (preprocess2, schema, params) => { + return new ZodEffects({ + schema, + effect: { type: "preprocess", transform: preprocess2 }, + typeName: ZodFirstPartyTypeKind.ZodEffects, + ...processCreateParams(params) + }); +}; +var ZodOptional = class extends ZodType { + _parse(input) { + const parsedType2 = this._getType(input); + if (parsedType2 === ZodParsedType.undefined) { + return OK2(void 0); + } + return this._def.innerType._parse(input); + } + unwrap() { + return this._def.innerType; + } +}; +ZodOptional.create = (type, params) => { + return new ZodOptional({ + innerType: type, + typeName: ZodFirstPartyTypeKind.ZodOptional, + ...processCreateParams(params) + }); +}; +var ZodNullable = class extends ZodType { + _parse(input) { + const parsedType2 = this._getType(input); + if (parsedType2 === ZodParsedType.null) { + return OK2(null); + } + return this._def.innerType._parse(input); + } + unwrap() { + return this._def.innerType; + } +}; +ZodNullable.create = (type, params) => { + return new ZodNullable({ + innerType: type, + typeName: ZodFirstPartyTypeKind.ZodNullable, + ...processCreateParams(params) + }); +}; +var ZodDefault = class extends ZodType { + _parse(input) { + const { ctx } = this._processInputParams(input); + let data = ctx.data; + if (ctx.parsedType === ZodParsedType.undefined) { + data = this._def.defaultValue(); + } + return this._def.innerType._parse({ + data, + path: ctx.path, + parent: ctx + }); + } + removeDefault() { + return this._def.innerType; + } +}; +ZodDefault.create = (type, params) => { + return new ZodDefault({ + innerType: type, + typeName: ZodFirstPartyTypeKind.ZodDefault, + defaultValue: typeof params.default === "function" ? params.default : () => params.default, + ...processCreateParams(params) + }); +}; +var ZodCatch = class extends ZodType { + _parse(input) { + const { ctx } = this._processInputParams(input); + const newCtx = { + ...ctx, + common: { + ...ctx.common, + issues: [] + } + }; + const result = this._def.innerType._parse({ + data: newCtx.data, + path: newCtx.path, + parent: { + ...newCtx + } + }); + if (isAsync(result)) { + return result.then((result2) => { + return { + status: "valid", + value: result2.status === "valid" ? result2.value : this._def.catchValue({ + get error() { + return new ZodError(newCtx.common.issues); + }, + input: newCtx.data + }) + }; + }); + } else { + return { + status: "valid", + value: result.status === "valid" ? result.value : this._def.catchValue({ + get error() { + return new ZodError(newCtx.common.issues); + }, + input: newCtx.data + }) + }; + } + } + removeCatch() { + return this._def.innerType; + } +}; +ZodCatch.create = (type, params) => { + return new ZodCatch({ + innerType: type, + typeName: ZodFirstPartyTypeKind.ZodCatch, + catchValue: typeof params.catch === "function" ? params.catch : () => params.catch, + ...processCreateParams(params) + }); +}; +var ZodNaN = class extends ZodType { + _parse(input) { + const parsedType2 = this._getType(input); + if (parsedType2 !== ZodParsedType.nan) { + const ctx = this._getOrReturnCtx(input); + addIssueToContext(ctx, { + code: ZodIssueCode.invalid_type, + expected: ZodParsedType.nan, + received: ctx.parsedType + }); + return INVALID; + } + return { status: "valid", value: input.data }; + } +}; +ZodNaN.create = (params) => { + return new ZodNaN({ + typeName: ZodFirstPartyTypeKind.ZodNaN, + ...processCreateParams(params) + }); +}; +var ZodBranded = class extends ZodType { + _parse(input) { + const { ctx } = this._processInputParams(input); + const data = ctx.data; + return this._def.type._parse({ + data, + path: ctx.path, + parent: ctx + }); + } + unwrap() { + return this._def.type; + } +}; +var ZodPipeline = class _ZodPipeline extends ZodType { + _parse(input) { + const { status, ctx } = this._processInputParams(input); + if (ctx.common.async) { + const handleAsync = async () => { + const inResult = await this._def.in._parseAsync({ + data: ctx.data, + path: ctx.path, + parent: ctx + }); + if (inResult.status === "aborted") + return INVALID; + if (inResult.status === "dirty") { + status.dirty(); + return DIRTY(inResult.value); + } else { + return this._def.out._parseAsync({ + data: inResult.value, + path: ctx.path, + parent: ctx + }); + } + }; + return handleAsync(); + } else { + const inResult = this._def.in._parseSync({ + data: ctx.data, + path: ctx.path, + parent: ctx + }); + if (inResult.status === "aborted") + return INVALID; + if (inResult.status === "dirty") { + status.dirty(); + return { + status: "dirty", + value: inResult.value + }; + } else { + return this._def.out._parseSync({ + data: inResult.value, + path: ctx.path, + parent: ctx + }); + } + } + } + static create(a, b2) { + return new _ZodPipeline({ + in: a, + out: b2, + typeName: ZodFirstPartyTypeKind.ZodPipeline + }); + } +}; +var ZodReadonly = class extends ZodType { + _parse(input) { + const result = this._def.innerType._parse(input); + const freeze = (data) => { + if (isValid(data)) { + data.value = Object.freeze(data.value); + } + return data; + }; + return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result); + } + unwrap() { + return this._def.innerType; + } +}; +ZodReadonly.create = (type, params) => { + return new ZodReadonly({ + innerType: type, + typeName: ZodFirstPartyTypeKind.ZodReadonly, + ...processCreateParams(params) + }); +}; +var late = { + object: ZodObject.lazycreate +}; +var ZodFirstPartyTypeKind; +(function(ZodFirstPartyTypeKind3) { + ZodFirstPartyTypeKind3["ZodString"] = "ZodString"; + ZodFirstPartyTypeKind3["ZodNumber"] = "ZodNumber"; + ZodFirstPartyTypeKind3["ZodNaN"] = "ZodNaN"; + ZodFirstPartyTypeKind3["ZodBigInt"] = "ZodBigInt"; + ZodFirstPartyTypeKind3["ZodBoolean"] = "ZodBoolean"; + ZodFirstPartyTypeKind3["ZodDate"] = "ZodDate"; + ZodFirstPartyTypeKind3["ZodSymbol"] = "ZodSymbol"; + ZodFirstPartyTypeKind3["ZodUndefined"] = "ZodUndefined"; + ZodFirstPartyTypeKind3["ZodNull"] = "ZodNull"; + ZodFirstPartyTypeKind3["ZodAny"] = "ZodAny"; + ZodFirstPartyTypeKind3["ZodUnknown"] = "ZodUnknown"; + ZodFirstPartyTypeKind3["ZodNever"] = "ZodNever"; + ZodFirstPartyTypeKind3["ZodVoid"] = "ZodVoid"; + ZodFirstPartyTypeKind3["ZodArray"] = "ZodArray"; + ZodFirstPartyTypeKind3["ZodObject"] = "ZodObject"; + ZodFirstPartyTypeKind3["ZodUnion"] = "ZodUnion"; + ZodFirstPartyTypeKind3["ZodDiscriminatedUnion"] = "ZodDiscriminatedUnion"; + ZodFirstPartyTypeKind3["ZodIntersection"] = "ZodIntersection"; + ZodFirstPartyTypeKind3["ZodTuple"] = "ZodTuple"; + ZodFirstPartyTypeKind3["ZodRecord"] = "ZodRecord"; + ZodFirstPartyTypeKind3["ZodMap"] = "ZodMap"; + ZodFirstPartyTypeKind3["ZodSet"] = "ZodSet"; + ZodFirstPartyTypeKind3["ZodFunction"] = "ZodFunction"; + ZodFirstPartyTypeKind3["ZodLazy"] = "ZodLazy"; + ZodFirstPartyTypeKind3["ZodLiteral"] = "ZodLiteral"; + ZodFirstPartyTypeKind3["ZodEnum"] = "ZodEnum"; + ZodFirstPartyTypeKind3["ZodEffects"] = "ZodEffects"; + ZodFirstPartyTypeKind3["ZodNativeEnum"] = "ZodNativeEnum"; + ZodFirstPartyTypeKind3["ZodOptional"] = "ZodOptional"; + ZodFirstPartyTypeKind3["ZodNullable"] = "ZodNullable"; + ZodFirstPartyTypeKind3["ZodDefault"] = "ZodDefault"; + ZodFirstPartyTypeKind3["ZodCatch"] = "ZodCatch"; + ZodFirstPartyTypeKind3["ZodPromise"] = "ZodPromise"; + ZodFirstPartyTypeKind3["ZodBranded"] = "ZodBranded"; + ZodFirstPartyTypeKind3["ZodPipeline"] = "ZodPipeline"; + ZodFirstPartyTypeKind3["ZodReadonly"] = "ZodReadonly"; +})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {})); +var stringType = ZodString.create; +var numberType = ZodNumber.create; +var nanType = ZodNaN.create; +var bigIntType = ZodBigInt.create; +var booleanType = ZodBoolean.create; +var dateType = ZodDate.create; +var symbolType = ZodSymbol.create; +var undefinedType = ZodUndefined.create; +var nullType = ZodNull.create; +var anyType = ZodAny.create; +var unknownType = ZodUnknown.create; +var neverType = ZodNever.create; +var voidType = ZodVoid.create; +var arrayType = ZodArray.create; +var objectType = ZodObject.create; +var strictObjectType = ZodObject.strictCreate; +var unionType = ZodUnion.create; +var discriminatedUnionType = ZodDiscriminatedUnion.create; +var intersectionType = ZodIntersection.create; +var tupleType = ZodTuple.create; +var recordType = ZodRecord.create; +var mapType = ZodMap.create; +var setType = ZodSet.create; +var functionType = ZodFunction.create; +var lazyType = ZodLazy.create; +var literalType = ZodLiteral.create; +var enumType = ZodEnum.create; +var nativeEnumType = ZodNativeEnum.create; +var promiseType = ZodPromise.create; +var effectsType = ZodEffects.create; +var optionalType = ZodOptional.create; +var nullableType = ZodNullable.create; +var preprocessType = ZodEffects.createWithPreprocess; +var pipelineType = ZodPipeline.create; + +// node_modules/zod/v4/mini/external.js +init_core2(); + +// node_modules/zod/v4/mini/parse.js +init_core2(); + +// node_modules/zod/v4/mini/schemas.js +init_core2(); +init_util(); +var ZodMiniType = /* @__PURE__ */ $constructor("ZodMiniType", (inst, def) => { + if (!inst._zod) + throw new Error("Uninitialized schema in ZodMiniType."); + $ZodType.init(inst, def); + inst.def = def; + inst.type = def.type; + inst.parse = (data, params) => parse(inst, data, params, { callee: inst.parse }); + inst.safeParse = (data, params) => safeParse(inst, data, params); + inst.parseAsync = async (data, params) => parseAsync(inst, data, params, { callee: inst.parseAsync }); + inst.safeParseAsync = async (data, params) => safeParseAsync(inst, data, params); + inst.check = (...checks) => { + var _a5; + return inst.clone({ + ...def, + checks: [ + ...(_a5 = def.checks) != null ? _a5 : [], + ...checks.map((ch2) => typeof ch2 === "function" ? { _zod: { check: ch2, def: { check: "custom" }, onattach: [] } } : ch2) + ] + }, { parent: true }); + }; + inst.with = inst.check; + inst.clone = (_def, params) => clone(inst, _def, params); + inst.brand = () => inst; + inst.register = ((reg, meta3) => { + reg.add(inst, meta3); + return inst; + }); + inst.apply = (fn) => fn(inst); +}); +var ZodMiniString = /* @__PURE__ */ $constructor("ZodMiniString", (inst, def) => { + $ZodString.init(inst, def); + ZodMiniType.init(inst, def); +}); +var ZodMiniStringFormat = /* @__PURE__ */ $constructor("ZodMiniStringFormat", (inst, def) => { + $ZodStringFormat.init(inst, def); + ZodMiniString.init(inst, def); +}); +var ZodMiniNumber = /* @__PURE__ */ $constructor("ZodMiniNumber", (inst, def) => { + $ZodNumber.init(inst, def); + ZodMiniType.init(inst, def); +}); +var ZodMiniBoolean = /* @__PURE__ */ $constructor("ZodMiniBoolean", (inst, def) => { + $ZodBoolean.init(inst, def); + ZodMiniType.init(inst, def); +}); +var ZodMiniBigInt = /* @__PURE__ */ $constructor("ZodMiniBigInt", (inst, def) => { + $ZodBigInt.init(inst, def); + ZodMiniType.init(inst, def); +}); +var ZodMiniDate = /* @__PURE__ */ $constructor("ZodMiniDate", (inst, def) => { + $ZodDate.init(inst, def); + ZodMiniType.init(inst, def); +}); + +// node_modules/zod/v4/mini/checks.js +init_core2(); + +// node_modules/zod/v4/mini/external.js +init_core2(); +init_json_schema_processors(); +init_locales(); + +// node_modules/zod/v4/mini/iso.js +var iso_exports = {}; +__export(iso_exports, { + ZodMiniISODate: () => ZodMiniISODate, + ZodMiniISODateTime: () => ZodMiniISODateTime, + ZodMiniISODuration: () => ZodMiniISODuration, + ZodMiniISOTime: () => ZodMiniISOTime, + date: () => date2, + datetime: () => datetime2, + duration: () => duration2, + time: () => time2 +}); +init_core2(); +var ZodMiniISODateTime = /* @__PURE__ */ $constructor("ZodMiniISODateTime", (inst, def) => { + $ZodISODateTime.init(inst, def); + ZodMiniStringFormat.init(inst, def); +}); +// @__NO_SIDE_EFFECTS__ +function datetime2(params) { + return _isoDateTime(ZodMiniISODateTime, params); +} +var ZodMiniISODate = /* @__PURE__ */ $constructor("ZodMiniISODate", (inst, def) => { + $ZodISODate.init(inst, def); + ZodMiniStringFormat.init(inst, def); +}); +// @__NO_SIDE_EFFECTS__ +function date2(params) { + return _isoDate(ZodMiniISODate, params); +} +var ZodMiniISOTime = /* @__PURE__ */ $constructor("ZodMiniISOTime", (inst, def) => { + $ZodISOTime.init(inst, def); + ZodMiniStringFormat.init(inst, def); +}); +// @__NO_SIDE_EFFECTS__ +function time2(params) { + return _isoTime(ZodMiniISOTime, params); +} +var ZodMiniISODuration = /* @__PURE__ */ $constructor("ZodMiniISODuration", (inst, def) => { + $ZodISODuration.init(inst, def); + ZodMiniStringFormat.init(inst, def); +}); +// @__NO_SIDE_EFFECTS__ +function duration2(params) { + return _isoDuration(ZodMiniISODuration, params); +} + +// node_modules/zod/v4/mini/coerce.js +var coerce_exports = {}; +__export(coerce_exports, { + bigint: () => bigint2, + boolean: () => boolean2, + date: () => date3, + number: () => number2, + string: () => string2 +}); +init_core2(); +// @__NO_SIDE_EFFECTS__ +function string2(params) { + return _coercedString(ZodMiniString, params); +} +// @__NO_SIDE_EFFECTS__ +function number2(params) { + return _coercedNumber(ZodMiniNumber, params); +} +// @__NO_SIDE_EFFECTS__ +function boolean2(params) { + return _coercedBoolean(ZodMiniBoolean, params); +} +// @__NO_SIDE_EFFECTS__ +function bigint2(params) { + return _coercedBigint(ZodMiniBigInt, params); +} +// @__NO_SIDE_EFFECTS__ +function date3(params) { + return _coercedDate(ZodMiniDate, params); +} + +// node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js +function isZ4Schema(s2) { + const schema = s2; + return !!schema._zod; +} +function safeParse2(schema, data) { + if (isZ4Schema(schema)) { + const result2 = safeParse(schema, data); + return result2; + } + const v3Schema = schema; + const result = v3Schema.safeParse(data); + return result; +} +function getObjectShape(schema) { + var _a5, _b3; + if (!schema) + return void 0; + let rawShape; + if (isZ4Schema(schema)) { + const v4Schema = schema; + rawShape = (_b3 = (_a5 = v4Schema._zod) == null ? void 0 : _a5.def) == null ? void 0 : _b3.shape; + } else { + const v3Schema = schema; + rawShape = v3Schema.shape; + } + if (!rawShape) + return void 0; + if (typeof rawShape === "function") { + try { + return rawShape(); + } catch (e2) { + return void 0; + } + } + return rawShape; +} +function getLiteralValue(schema) { + var _a5; + if (isZ4Schema(schema)) { + const v4Schema = schema; + const def2 = (_a5 = v4Schema._zod) == null ? void 0 : _a5.def; + if (def2) { + if (def2.value !== void 0) + return def2.value; + if (Array.isArray(def2.values) && def2.values.length > 0) { + return def2.values[0]; + } + } + } + const v3Schema = schema; + const def = v3Schema._def; + if (def) { + if (def.value !== void 0) + return def.value; + if (Array.isArray(def.values) && def.values.length > 0) { + return def.values[0]; + } + } + const directValue = schema.value; + if (directValue !== void 0) + return directValue; + return void 0; +} + +// node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +init_types(); + +// node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js +function isTerminal(status) { + return status === "completed" || status === "failed" || status === "cancelled"; +} + +// node_modules/zod-to-json-schema/dist/esm/parsers/string.js +var ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789"); + +// node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js +function getMethodLiteral(schema) { + const shape = getObjectShape(schema); + const methodSchema = shape == null ? void 0 : shape.method; + if (!methodSchema) { + throw new Error("Schema is missing a method literal"); + } + const value = getLiteralValue(methodSchema); + if (typeof value !== "string") { + throw new Error("Schema method literal must be a string"); + } + return value; +} +function parseWithCompat(schema, data) { + const result = safeParse2(schema, data); + if (!result.success) { + throw result.error; + } + return result.data; +} + +// node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +var DEFAULT_REQUEST_TIMEOUT_MSEC = 6e4; +var Protocol = class { + constructor(_options) { + this._options = _options; + this._requestMessageId = 0; + this._requestHandlers = /* @__PURE__ */ new Map(); + this._requestHandlerAbortControllers = /* @__PURE__ */ new Map(); + this._notificationHandlers = /* @__PURE__ */ new Map(); + this._responseHandlers = /* @__PURE__ */ new Map(); + this._progressHandlers = /* @__PURE__ */ new Map(); + this._timeoutInfo = /* @__PURE__ */ new Map(); + this._pendingDebouncedNotifications = /* @__PURE__ */ new Set(); + this._taskProgressTokens = /* @__PURE__ */ new Map(); + this._requestResolvers = /* @__PURE__ */ new Map(); + this.setNotificationHandler(CancelledNotificationSchema, (notification) => { + this._oncancel(notification); + }); + this.setNotificationHandler(ProgressNotificationSchema, (notification) => { + this._onprogress(notification); + }); + this.setRequestHandler( + PingRequestSchema, + // Automatic pong by default. + (_request) => ({}) + ); + this._taskStore = _options == null ? void 0 : _options.taskStore; + this._taskMessageQueue = _options == null ? void 0 : _options.taskMessageQueue; + if (this._taskStore) { + this.setRequestHandler(GetTaskRequestSchema, async (request, extra) => { + const task = await this._taskStore.getTask(request.params.taskId, extra.sessionId); + if (!task) { + throw new McpError(ErrorCode.InvalidParams, "Failed to retrieve task: Task not found"); + } + return { + ...task + }; + }); + this.setRequestHandler(GetTaskPayloadRequestSchema, async (request, extra) => { + const handleTaskResult = async () => { + var _a5; + const taskId = request.params.taskId; + if (this._taskMessageQueue) { + let queuedMessage; + while (queuedMessage = await this._taskMessageQueue.dequeue(taskId, extra.sessionId)) { + if (queuedMessage.type === "response" || queuedMessage.type === "error") { + const message = queuedMessage.message; + const requestId = message.id; + const resolver = this._requestResolvers.get(requestId); + if (resolver) { + this._requestResolvers.delete(requestId); + if (queuedMessage.type === "response") { + resolver(message); + } else { + const errorMessage = message; + const error48 = new McpError(errorMessage.error.code, errorMessage.error.message, errorMessage.error.data); + resolver(error48); + } + } else { + const messageType = queuedMessage.type === "response" ? "Response" : "Error"; + this._onerror(new Error(`${messageType} handler missing for request ${requestId}`)); + } + continue; + } + await ((_a5 = this._transport) == null ? void 0 : _a5.send(queuedMessage.message, { relatedRequestId: extra.requestId })); + } + } + const task = await this._taskStore.getTask(taskId, extra.sessionId); + if (!task) { + throw new McpError(ErrorCode.InvalidParams, `Task not found: ${taskId}`); + } + if (!isTerminal(task.status)) { + await this._waitForTaskUpdate(taskId, extra.signal); + return await handleTaskResult(); + } + if (isTerminal(task.status)) { + const result = await this._taskStore.getTaskResult(taskId, extra.sessionId); + this._clearTaskQueue(taskId); + return { + ...result, + _meta: { + ...result._meta, + [RELATED_TASK_META_KEY]: { + taskId + } + } + }; + } + return await handleTaskResult(); + }; + return await handleTaskResult(); + }); + this.setRequestHandler(ListTasksRequestSchema, async (request, extra) => { + var _a5; + try { + const { tasks, nextCursor } = await this._taskStore.listTasks((_a5 = request.params) == null ? void 0 : _a5.cursor, extra.sessionId); + return { + tasks, + nextCursor, + _meta: {} + }; + } catch (error48) { + throw new McpError(ErrorCode.InvalidParams, `Failed to list tasks: ${error48 instanceof Error ? error48.message : String(error48)}`); + } + }); + this.setRequestHandler(CancelTaskRequestSchema, async (request, extra) => { + try { + const task = await this._taskStore.getTask(request.params.taskId, extra.sessionId); + if (!task) { + throw new McpError(ErrorCode.InvalidParams, `Task not found: ${request.params.taskId}`); + } + if (isTerminal(task.status)) { + throw new McpError(ErrorCode.InvalidParams, `Cannot cancel task in terminal status: ${task.status}`); + } + await this._taskStore.updateTaskStatus(request.params.taskId, "cancelled", "Client cancelled task execution.", extra.sessionId); + this._clearTaskQueue(request.params.taskId); + const cancelledTask = await this._taskStore.getTask(request.params.taskId, extra.sessionId); + if (!cancelledTask) { + throw new McpError(ErrorCode.InvalidParams, `Task not found after cancellation: ${request.params.taskId}`); + } + return { + _meta: {}, + ...cancelledTask + }; + } catch (error48) { + if (error48 instanceof McpError) { + throw error48; + } + throw new McpError(ErrorCode.InvalidRequest, `Failed to cancel task: ${error48 instanceof Error ? error48.message : String(error48)}`); + } + }); + } + } + async _oncancel(notification) { + if (!notification.params.requestId) { + return; + } + const controller = this._requestHandlerAbortControllers.get(notification.params.requestId); + controller == null ? void 0 : controller.abort(notification.params.reason); + } + _setupTimeout(messageId, timeout, maxTotalTimeout, onTimeout, resetTimeoutOnProgress = false) { + this._timeoutInfo.set(messageId, { + timeoutId: setTimeout(onTimeout, timeout), + startTime: Date.now(), + timeout, + maxTotalTimeout, + resetTimeoutOnProgress, + onTimeout + }); + } + _resetTimeout(messageId) { + const info = this._timeoutInfo.get(messageId); + if (!info) + return false; + const totalElapsed = Date.now() - info.startTime; + if (info.maxTotalTimeout && totalElapsed >= info.maxTotalTimeout) { + this._timeoutInfo.delete(messageId); + throw McpError.fromError(ErrorCode.RequestTimeout, "Maximum total timeout exceeded", { + maxTotalTimeout: info.maxTotalTimeout, + totalElapsed + }); + } + clearTimeout(info.timeoutId); + info.timeoutId = setTimeout(info.onTimeout, info.timeout); + return true; + } + _cleanupTimeout(messageId) { + const info = this._timeoutInfo.get(messageId); + if (info) { + clearTimeout(info.timeoutId); + this._timeoutInfo.delete(messageId); + } + } + /** + * Attaches to the given transport, starts it, and starts listening for messages. + * + * The Protocol object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward. + */ + async connect(transport) { + var _a5, _b3, _c2; + if (this._transport) { + throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection."); + } + this._transport = transport; + const _onclose = (_a5 = this.transport) == null ? void 0 : _a5.onclose; + this._transport.onclose = () => { + _onclose == null ? void 0 : _onclose(); + this._onclose(); + }; + const _onerror = (_b3 = this.transport) == null ? void 0 : _b3.onerror; + this._transport.onerror = (error48) => { + _onerror == null ? void 0 : _onerror(error48); + this._onerror(error48); + }; + const _onmessage = (_c2 = this._transport) == null ? void 0 : _c2.onmessage; + this._transport.onmessage = (message, extra) => { + _onmessage == null ? void 0 : _onmessage(message, extra); + if (isJSONRPCResultResponse(message) || isJSONRPCErrorResponse(message)) { + this._onresponse(message); + } else if (isJSONRPCRequest(message)) { + this._onrequest(message, extra); + } else if (isJSONRPCNotification(message)) { + this._onnotification(message); + } else { + this._onerror(new Error(`Unknown message type: ${JSON.stringify(message)}`)); + } + }; + await this._transport.start(); + } + _onclose() { + var _a5; + const responseHandlers = this._responseHandlers; + this._responseHandlers = /* @__PURE__ */ new Map(); + this._progressHandlers.clear(); + this._taskProgressTokens.clear(); + this._pendingDebouncedNotifications.clear(); + for (const info of this._timeoutInfo.values()) { + clearTimeout(info.timeoutId); + } + this._timeoutInfo.clear(); + for (const controller of this._requestHandlerAbortControllers.values()) { + controller.abort(); + } + this._requestHandlerAbortControllers.clear(); + const error48 = McpError.fromError(ErrorCode.ConnectionClosed, "Connection closed"); + this._transport = void 0; + (_a5 = this.onclose) == null ? void 0 : _a5.call(this); + for (const handler of responseHandlers.values()) { + handler(error48); + } + } + _onerror(error48) { + var _a5; + (_a5 = this.onerror) == null ? void 0 : _a5.call(this, error48); + } + _onnotification(notification) { + var _a5; + const handler = (_a5 = this._notificationHandlers.get(notification.method)) != null ? _a5 : this.fallbackNotificationHandler; + if (handler === void 0) { + return; + } + Promise.resolve().then(() => handler(notification)).catch((error48) => this._onerror(new Error(`Uncaught error in notification handler: ${error48}`))); + } + _onrequest(request, extra) { + var _a5, _b3, _c2, _d, _e2; + const handler = (_a5 = this._requestHandlers.get(request.method)) != null ? _a5 : this.fallbackRequestHandler; + const capturedTransport = this._transport; + const relatedTaskId = (_d = (_c2 = (_b3 = request.params) == null ? void 0 : _b3._meta) == null ? void 0 : _c2[RELATED_TASK_META_KEY]) == null ? void 0 : _d.taskId; + if (handler === void 0) { + const errorResponse = { + jsonrpc: "2.0", + id: request.id, + error: { + code: ErrorCode.MethodNotFound, + message: "Method not found" + } + }; + if (relatedTaskId && this._taskMessageQueue) { + this._enqueueTaskMessage(relatedTaskId, { + type: "error", + message: errorResponse, + timestamp: Date.now() + }, capturedTransport == null ? void 0 : capturedTransport.sessionId).catch((error48) => this._onerror(new Error(`Failed to enqueue error response: ${error48}`))); + } else { + capturedTransport == null ? void 0 : capturedTransport.send(errorResponse).catch((error48) => this._onerror(new Error(`Failed to send an error response: ${error48}`))); + } + return; + } + const abortController = new AbortController(); + this._requestHandlerAbortControllers.set(request.id, abortController); + const taskCreationParams = isTaskAugmentedRequestParams(request.params) ? request.params.task : void 0; + const taskStore = this._taskStore ? this.requestTaskStore(request, capturedTransport == null ? void 0 : capturedTransport.sessionId) : void 0; + const fullExtra = { + signal: abortController.signal, + sessionId: capturedTransport == null ? void 0 : capturedTransport.sessionId, + _meta: (_e2 = request.params) == null ? void 0 : _e2._meta, + sendNotification: async (notification) => { + if (abortController.signal.aborted) + return; + const notificationOptions = { relatedRequestId: request.id }; + if (relatedTaskId) { + notificationOptions.relatedTask = { taskId: relatedTaskId }; + } + await this.notification(notification, notificationOptions); + }, + sendRequest: async (r, resultSchema, options) => { + var _a6, _b4; + if (abortController.signal.aborted) { + throw new McpError(ErrorCode.ConnectionClosed, "Request was cancelled"); + } + const requestOptions = { ...options, relatedRequestId: request.id }; + if (relatedTaskId && !requestOptions.relatedTask) { + requestOptions.relatedTask = { taskId: relatedTaskId }; + } + const effectiveTaskId = (_b4 = (_a6 = requestOptions.relatedTask) == null ? void 0 : _a6.taskId) != null ? _b4 : relatedTaskId; + if (effectiveTaskId && taskStore) { + await taskStore.updateTaskStatus(effectiveTaskId, "input_required"); + } + return await this.request(r, resultSchema, requestOptions); + }, + authInfo: extra == null ? void 0 : extra.authInfo, + requestId: request.id, + requestInfo: extra == null ? void 0 : extra.requestInfo, + taskId: relatedTaskId, + taskStore, + taskRequestedTtl: taskCreationParams == null ? void 0 : taskCreationParams.ttl, + closeSSEStream: extra == null ? void 0 : extra.closeSSEStream, + closeStandaloneSSEStream: extra == null ? void 0 : extra.closeStandaloneSSEStream + }; + Promise.resolve().then(() => { + if (taskCreationParams) { + this.assertTaskHandlerCapability(request.method); + } + }).then(() => handler(request, fullExtra)).then(async (result) => { + if (abortController.signal.aborted) { + return; + } + const response = { + result, + jsonrpc: "2.0", + id: request.id + }; + if (relatedTaskId && this._taskMessageQueue) { + await this._enqueueTaskMessage(relatedTaskId, { + type: "response", + message: response, + timestamp: Date.now() + }, capturedTransport == null ? void 0 : capturedTransport.sessionId); + } else { + await (capturedTransport == null ? void 0 : capturedTransport.send(response)); + } + }, async (error48) => { + var _a6; + if (abortController.signal.aborted) { + return; + } + const errorResponse = { + jsonrpc: "2.0", + id: request.id, + error: { + code: Number.isSafeInteger(error48["code"]) ? error48["code"] : ErrorCode.InternalError, + message: (_a6 = error48.message) != null ? _a6 : "Internal error", + ...error48["data"] !== void 0 && { data: error48["data"] } + } + }; + if (relatedTaskId && this._taskMessageQueue) { + await this._enqueueTaskMessage(relatedTaskId, { + type: "error", + message: errorResponse, + timestamp: Date.now() + }, capturedTransport == null ? void 0 : capturedTransport.sessionId); + } else { + await (capturedTransport == null ? void 0 : capturedTransport.send(errorResponse)); + } + }).catch((error48) => this._onerror(new Error(`Failed to send response: ${error48}`))).finally(() => { + if (this._requestHandlerAbortControllers.get(request.id) === abortController) { + this._requestHandlerAbortControllers.delete(request.id); + } + }); + } + _onprogress(notification) { + const { progressToken, ...params } = notification.params; + const messageId = Number(progressToken); + const handler = this._progressHandlers.get(messageId); + if (!handler) { + this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(notification)}`)); + return; + } + const responseHandler = this._responseHandlers.get(messageId); + const timeoutInfo = this._timeoutInfo.get(messageId); + if (timeoutInfo && responseHandler && timeoutInfo.resetTimeoutOnProgress) { + try { + this._resetTimeout(messageId); + } catch (error48) { + this._responseHandlers.delete(messageId); + this._progressHandlers.delete(messageId); + this._cleanupTimeout(messageId); + responseHandler(error48); + return; + } + } + handler(params); + } + _onresponse(response) { + const messageId = Number(response.id); + const resolver = this._requestResolvers.get(messageId); + if (resolver) { + this._requestResolvers.delete(messageId); + if (isJSONRPCResultResponse(response)) { + resolver(response); + } else { + const error48 = new McpError(response.error.code, response.error.message, response.error.data); + resolver(error48); + } + return; + } + const handler = this._responseHandlers.get(messageId); + if (handler === void 0) { + this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(response)}`)); + return; + } + this._responseHandlers.delete(messageId); + this._cleanupTimeout(messageId); + let isTaskResponse = false; + if (isJSONRPCResultResponse(response) && response.result && typeof response.result === "object") { + const result = response.result; + if (result.task && typeof result.task === "object") { + const task = result.task; + if (typeof task.taskId === "string") { + isTaskResponse = true; + this._taskProgressTokens.set(task.taskId, messageId); + } + } + } + if (!isTaskResponse) { + this._progressHandlers.delete(messageId); + } + if (isJSONRPCResultResponse(response)) { + handler(response); + } else { + const error48 = McpError.fromError(response.error.code, response.error.message, response.error.data); + handler(error48); + } + } + get transport() { + return this._transport; + } + /** + * Closes the connection. + */ + async close() { + var _a5; + await ((_a5 = this._transport) == null ? void 0 : _a5.close()); + } + /** + * Sends a request and returns an AsyncGenerator that yields response messages. + * The generator is guaranteed to end with either a 'result' or 'error' message. + * + * @example + * ```typescript + * const stream = protocol.requestStream(request, resultSchema, options); + * for await (const message of stream) { + * switch (message.type) { + * case 'taskCreated': + * console.log('Task created:', message.task.taskId); + * break; + * case 'taskStatus': + * console.log('Task status:', message.task.status); + * break; + * case 'result': + * console.log('Final result:', message.result); + * break; + * case 'error': + * console.error('Error:', message.error); + * break; + * } + * } + * ``` + * + * @experimental Use `client.experimental.tasks.requestStream()` to access this method. + */ + async *requestStream(request, resultSchema, options) { + var _a5, _b3, _c2, _d; + const { task } = options != null ? options : {}; + if (!task) { + try { + const result = await this.request(request, resultSchema, options); + yield { type: "result", result }; + } catch (error48) { + yield { + type: "error", + error: error48 instanceof McpError ? error48 : new McpError(ErrorCode.InternalError, String(error48)) + }; + } + return; + } + let taskId; + try { + const createResult = await this.request(request, CreateTaskResultSchema, options); + if (createResult.task) { + taskId = createResult.task.taskId; + yield { type: "taskCreated", task: createResult.task }; + } else { + throw new McpError(ErrorCode.InternalError, "Task creation did not return a task"); + } + while (true) { + const task2 = await this.getTask({ taskId }, options); + yield { type: "taskStatus", task: task2 }; + if (isTerminal(task2.status)) { + if (task2.status === "completed") { + const result = await this.getTaskResult({ taskId }, resultSchema, options); + yield { type: "result", result }; + } else if (task2.status === "failed") { + yield { + type: "error", + error: new McpError(ErrorCode.InternalError, `Task ${taskId} failed`) + }; + } else if (task2.status === "cancelled") { + yield { + type: "error", + error: new McpError(ErrorCode.InternalError, `Task ${taskId} was cancelled`) + }; + } + return; + } + if (task2.status === "input_required") { + const result = await this.getTaskResult({ taskId }, resultSchema, options); + yield { type: "result", result }; + return; + } + const pollInterval = (_c2 = (_b3 = task2.pollInterval) != null ? _b3 : (_a5 = this._options) == null ? void 0 : _a5.defaultTaskPollInterval) != null ? _c2 : 1e3; + await new Promise((resolve8) => setTimeout(resolve8, pollInterval)); + (_d = options == null ? void 0 : options.signal) == null ? void 0 : _d.throwIfAborted(); + } + } catch (error48) { + yield { + type: "error", + error: error48 instanceof McpError ? error48 : new McpError(ErrorCode.InternalError, String(error48)) + }; + } + } + /** + * Sends a request and waits for a response. + * + * Do not use this method to emit notifications! Use notification() instead. + */ + request(request, resultSchema, options) { + const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options != null ? options : {}; + return new Promise((resolve8, reject) => { + var _a5, _b3, _c2, _d, _e2, _f2, _g; + const earlyReject = (error48) => { + reject(error48); + }; + if (!this._transport) { + earlyReject(new Error("Not connected")); + return; + } + if (((_a5 = this._options) == null ? void 0 : _a5.enforceStrictCapabilities) === true) { + try { + this.assertCapabilityForMethod(request.method); + if (task) { + this.assertTaskCapability(request.method); + } + } catch (e2) { + earlyReject(e2); + return; + } + } + (_b3 = options == null ? void 0 : options.signal) == null ? void 0 : _b3.throwIfAborted(); + const messageId = this._requestMessageId++; + const jsonrpcRequest = { + ...request, + jsonrpc: "2.0", + id: messageId + }; + if (options == null ? void 0 : options.onprogress) { + this._progressHandlers.set(messageId, options.onprogress); + jsonrpcRequest.params = { + ...request.params, + _meta: { + ...((_c2 = request.params) == null ? void 0 : _c2._meta) || {}, + progressToken: messageId + } + }; + } + if (task) { + jsonrpcRequest.params = { + ...jsonrpcRequest.params, + task + }; + } + if (relatedTask) { + jsonrpcRequest.params = { + ...jsonrpcRequest.params, + _meta: { + ...((_d = jsonrpcRequest.params) == null ? void 0 : _d._meta) || {}, + [RELATED_TASK_META_KEY]: relatedTask + } + }; + } + const cancel = (reason) => { + var _a6; + this._responseHandlers.delete(messageId); + this._progressHandlers.delete(messageId); + this._cleanupTimeout(messageId); + (_a6 = this._transport) == null ? void 0 : _a6.send({ + jsonrpc: "2.0", + method: "notifications/cancelled", + params: { + requestId: messageId, + reason: String(reason) + } + }, { relatedRequestId, resumptionToken, onresumptiontoken }).catch((error49) => this._onerror(new Error(`Failed to send cancellation: ${error49}`))); + const error48 = reason instanceof McpError ? reason : new McpError(ErrorCode.RequestTimeout, String(reason)); + reject(error48); + }; + this._responseHandlers.set(messageId, (response) => { + var _a6; + if ((_a6 = options == null ? void 0 : options.signal) == null ? void 0 : _a6.aborted) { + return; + } + if (response instanceof Error) { + return reject(response); + } + try { + const parseResult = safeParse2(resultSchema, response.result); + if (!parseResult.success) { + reject(parseResult.error); + } else { + resolve8(parseResult.data); + } + } catch (error48) { + reject(error48); + } + }); + (_e2 = options == null ? void 0 : options.signal) == null ? void 0 : _e2.addEventListener("abort", () => { + var _a6; + cancel((_a6 = options == null ? void 0 : options.signal) == null ? void 0 : _a6.reason); + }); + const timeout = (_f2 = options == null ? void 0 : options.timeout) != null ? _f2 : DEFAULT_REQUEST_TIMEOUT_MSEC; + const timeoutHandler = () => cancel(McpError.fromError(ErrorCode.RequestTimeout, "Request timed out", { timeout })); + this._setupTimeout(messageId, timeout, options == null ? void 0 : options.maxTotalTimeout, timeoutHandler, (_g = options == null ? void 0 : options.resetTimeoutOnProgress) != null ? _g : false); + const relatedTaskId = relatedTask == null ? void 0 : relatedTask.taskId; + if (relatedTaskId) { + const responseResolver = (response) => { + const handler = this._responseHandlers.get(messageId); + if (handler) { + handler(response); + } else { + this._onerror(new Error(`Response handler missing for side-channeled request ${messageId}`)); + } + }; + this._requestResolvers.set(messageId, responseResolver); + this._enqueueTaskMessage(relatedTaskId, { + type: "request", + message: jsonrpcRequest, + timestamp: Date.now() + }).catch((error48) => { + this._cleanupTimeout(messageId); + reject(error48); + }); + } else { + this._transport.send(jsonrpcRequest, { relatedRequestId, resumptionToken, onresumptiontoken }).catch((error48) => { + this._cleanupTimeout(messageId); + reject(error48); + }); + } + }); + } + /** + * Gets the current status of a task. + * + * @experimental Use `client.experimental.tasks.getTask()` to access this method. + */ + async getTask(params, options) { + return this.request({ method: "tasks/get", params }, GetTaskResultSchema, options); + } + /** + * Retrieves the result of a completed task. + * + * @experimental Use `client.experimental.tasks.getTaskResult()` to access this method. + */ + async getTaskResult(params, resultSchema, options) { + return this.request({ method: "tasks/result", params }, resultSchema, options); + } + /** + * Lists tasks, optionally starting from a pagination cursor. + * + * @experimental Use `client.experimental.tasks.listTasks()` to access this method. + */ + async listTasks(params, options) { + return this.request({ method: "tasks/list", params }, ListTasksResultSchema, options); + } + /** + * Cancels a specific task. + * + * @experimental Use `client.experimental.tasks.cancelTask()` to access this method. + */ + async cancelTask(params, options) { + return this.request({ method: "tasks/cancel", params }, CancelTaskResultSchema, options); + } + /** + * Emits a notification, which is a one-way message that does not expect a response. + */ + async notification(notification, options) { + var _a5, _b3, _c2, _d, _e2; + if (!this._transport) { + throw new Error("Not connected"); + } + this.assertNotificationCapability(notification.method); + const relatedTaskId = (_a5 = options == null ? void 0 : options.relatedTask) == null ? void 0 : _a5.taskId; + if (relatedTaskId) { + const jsonrpcNotification2 = { + ...notification, + jsonrpc: "2.0", + params: { + ...notification.params, + _meta: { + ...((_b3 = notification.params) == null ? void 0 : _b3._meta) || {}, + [RELATED_TASK_META_KEY]: options.relatedTask + } + } + }; + await this._enqueueTaskMessage(relatedTaskId, { + type: "notification", + message: jsonrpcNotification2, + timestamp: Date.now() + }); + return; + } + const debouncedMethods = (_d = (_c2 = this._options) == null ? void 0 : _c2.debouncedNotificationMethods) != null ? _d : []; + const canDebounce = debouncedMethods.includes(notification.method) && !notification.params && !(options == null ? void 0 : options.relatedRequestId) && !(options == null ? void 0 : options.relatedTask); + if (canDebounce) { + if (this._pendingDebouncedNotifications.has(notification.method)) { + return; + } + this._pendingDebouncedNotifications.add(notification.method); + Promise.resolve().then(() => { + var _a6, _b4; + this._pendingDebouncedNotifications.delete(notification.method); + if (!this._transport) { + return; + } + let jsonrpcNotification2 = { + ...notification, + jsonrpc: "2.0" + }; + if (options == null ? void 0 : options.relatedTask) { + jsonrpcNotification2 = { + ...jsonrpcNotification2, + params: { + ...jsonrpcNotification2.params, + _meta: { + ...((_a6 = jsonrpcNotification2.params) == null ? void 0 : _a6._meta) || {}, + [RELATED_TASK_META_KEY]: options.relatedTask + } + } + }; + } + (_b4 = this._transport) == null ? void 0 : _b4.send(jsonrpcNotification2, options).catch((error48) => this._onerror(error48)); + }); + return; + } + let jsonrpcNotification = { + ...notification, + jsonrpc: "2.0" + }; + if (options == null ? void 0 : options.relatedTask) { + jsonrpcNotification = { + ...jsonrpcNotification, + params: { + ...jsonrpcNotification.params, + _meta: { + ...((_e2 = jsonrpcNotification.params) == null ? void 0 : _e2._meta) || {}, + [RELATED_TASK_META_KEY]: options.relatedTask + } + } + }; + } + await this._transport.send(jsonrpcNotification, options); + } + /** + * Registers a handler to invoke when this protocol object receives a request with the given method. + * + * Note that this will replace any previous request handler for the same method. + */ + setRequestHandler(requestSchema, handler) { + const method = getMethodLiteral(requestSchema); + this.assertRequestHandlerCapability(method); + this._requestHandlers.set(method, (request, extra) => { + const parsed = parseWithCompat(requestSchema, request); + return Promise.resolve(handler(parsed, extra)); + }); + } + /** + * Removes the request handler for the given method. + */ + removeRequestHandler(method) { + this._requestHandlers.delete(method); + } + /** + * Asserts that a request handler has not already been set for the given method, in preparation for a new one being automatically installed. + */ + assertCanSetRequestHandler(method) { + if (this._requestHandlers.has(method)) { + throw new Error(`A request handler for ${method} already exists, which would be overridden`); + } + } + /** + * Registers a handler to invoke when this protocol object receives a notification with the given method. + * + * Note that this will replace any previous notification handler for the same method. + */ + setNotificationHandler(notificationSchema, handler) { + const method = getMethodLiteral(notificationSchema); + this._notificationHandlers.set(method, (notification) => { + const parsed = parseWithCompat(notificationSchema, notification); + return Promise.resolve(handler(parsed)); + }); + } + /** + * Removes the notification handler for the given method. + */ + removeNotificationHandler(method) { + this._notificationHandlers.delete(method); + } + /** + * Cleans up the progress handler associated with a task. + * This should be called when a task reaches a terminal status. + */ + _cleanupTaskProgressHandler(taskId) { + const progressToken = this._taskProgressTokens.get(taskId); + if (progressToken !== void 0) { + this._progressHandlers.delete(progressToken); + this._taskProgressTokens.delete(taskId); + } + } + /** + * Enqueues a task-related message for side-channel delivery via tasks/result. + * @param taskId The task ID to associate the message with + * @param message The message to enqueue + * @param sessionId Optional session ID for binding the operation to a specific session + * @throws Error if taskStore is not configured or if enqueue fails (e.g., queue overflow) + * + * Note: If enqueue fails, it's the TaskMessageQueue implementation's responsibility to handle + * the error appropriately (e.g., by failing the task, logging, etc.). The Protocol layer + * simply propagates the error. + */ + async _enqueueTaskMessage(taskId, message, sessionId) { + var _a5; + if (!this._taskStore || !this._taskMessageQueue) { + throw new Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured"); + } + const maxQueueSize = (_a5 = this._options) == null ? void 0 : _a5.maxTaskQueueSize; + await this._taskMessageQueue.enqueue(taskId, message, sessionId, maxQueueSize); + } + /** + * Clears the message queue for a task and rejects any pending request resolvers. + * @param taskId The task ID whose queue should be cleared + * @param sessionId Optional session ID for binding the operation to a specific session + */ + async _clearTaskQueue(taskId, sessionId) { + if (this._taskMessageQueue) { + const messages = await this._taskMessageQueue.dequeueAll(taskId, sessionId); + for (const message of messages) { + if (message.type === "request" && isJSONRPCRequest(message.message)) { + const requestId = message.message.id; + const resolver = this._requestResolvers.get(requestId); + if (resolver) { + resolver(new McpError(ErrorCode.InternalError, "Task cancelled or completed")); + this._requestResolvers.delete(requestId); + } else { + this._onerror(new Error(`Resolver missing for request ${requestId} during task ${taskId} cleanup`)); + } + } + } + } + } + /** + * Waits for a task update (new messages or status change) with abort signal support. + * Uses polling to check for updates at the task's configured poll interval. + * @param taskId The task ID to wait for + * @param signal Abort signal to cancel the wait + * @returns Promise that resolves when an update occurs or rejects if aborted + */ + async _waitForTaskUpdate(taskId, signal) { + var _a5, _b3, _c2; + let interval = (_b3 = (_a5 = this._options) == null ? void 0 : _a5.defaultTaskPollInterval) != null ? _b3 : 1e3; + try { + const task = await ((_c2 = this._taskStore) == null ? void 0 : _c2.getTask(taskId)); + if (task == null ? void 0 : task.pollInterval) { + interval = task.pollInterval; + } + } catch (e2) { + } + return new Promise((resolve8, reject) => { + if (signal.aborted) { + reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled")); + return; + } + const timeoutId = setTimeout(resolve8, interval); + signal.addEventListener("abort", () => { + clearTimeout(timeoutId); + reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled")); + }, { once: true }); + }); + } + requestTaskStore(request, sessionId) { + const taskStore = this._taskStore; + if (!taskStore) { + throw new Error("No task store configured"); + } + return { + createTask: async (taskParams) => { + if (!request) { + throw new Error("No request provided"); + } + return await taskStore.createTask(taskParams, request.id, { + method: request.method, + params: request.params + }, sessionId); + }, + getTask: async (taskId) => { + const task = await taskStore.getTask(taskId, sessionId); + if (!task) { + throw new McpError(ErrorCode.InvalidParams, "Failed to retrieve task: Task not found"); + } + return task; + }, + storeTaskResult: async (taskId, status, result) => { + await taskStore.storeTaskResult(taskId, status, result, sessionId); + const task = await taskStore.getTask(taskId, sessionId); + if (task) { + const notification = TaskStatusNotificationSchema.parse({ + method: "notifications/tasks/status", + params: task + }); + await this.notification(notification); + if (isTerminal(task.status)) { + this._cleanupTaskProgressHandler(taskId); + } + } + }, + getTaskResult: (taskId) => { + return taskStore.getTaskResult(taskId, sessionId); + }, + updateTaskStatus: async (taskId, status, statusMessage) => { + const task = await taskStore.getTask(taskId, sessionId); + if (!task) { + throw new McpError(ErrorCode.InvalidParams, `Task "${taskId}" not found - it may have been cleaned up`); + } + if (isTerminal(task.status)) { + throw new McpError(ErrorCode.InvalidParams, `Cannot update task "${taskId}" from terminal status "${task.status}" to "${status}". Terminal states (completed, failed, cancelled) cannot transition to other states.`); + } + await taskStore.updateTaskStatus(taskId, status, statusMessage, sessionId); + const updatedTask = await taskStore.getTask(taskId, sessionId); + if (updatedTask) { + const notification = TaskStatusNotificationSchema.parse({ + method: "notifications/tasks/status", + params: updatedTask + }); + await this.notification(notification); + if (isTerminal(updatedTask.status)) { + this._cleanupTaskProgressHandler(taskId); + } + } + }, + listTasks: (cursor) => { + return taskStore.listTasks(cursor, sessionId); + } + }; + } +}; +function isPlainObject3(value) { + return value !== null && typeof value === "object" && !Array.isArray(value); +} +function mergeCapabilities(base, additional) { + const result = { ...base }; + for (const key in additional) { + const k2 = key; + const addValue = additional[k2]; + if (addValue === void 0) + continue; + const baseValue = result[k2]; + if (isPlainObject3(baseValue) && isPlainObject3(addValue)) { + result[k2] = { ...baseValue, ...addValue }; + } else { + result[k2] = addValue; + } + } + return result; +} + +// node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js +init_types(); + +// node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js +var import_ajv = __toESM(require_ajv(), 1); +var import_ajv_formats = __toESM(require_dist(), 1); +function createDefaultAjvInstance() { + const ajv = new import_ajv.default({ + strict: false, + validateFormats: true, + validateSchema: false, + allErrors: true + }); + const addFormats = import_ajv_formats.default; + addFormats(ajv); + return ajv; +} +var AjvJsonSchemaValidator = class { + /** + * Create an AJV validator + * + * @param ajv - Optional pre-configured AJV instance. If not provided, a default instance will be created. + * + * @example + * ```typescript + * // Use default configuration (recommended for most cases) + * import { AjvJsonSchemaValidator } from '@modelcontextprotocol/sdk/validation/ajv'; + * const validator = new AjvJsonSchemaValidator(); + * + * // Or provide custom AJV instance for advanced configuration + * import { Ajv } from 'ajv'; + * import addFormats from 'ajv-formats'; + * + * const ajv = new Ajv({ validateFormats: true }); + * addFormats(ajv); + * const validator = new AjvJsonSchemaValidator(ajv); + * ``` + */ + constructor(ajv) { + this._ajv = ajv != null ? ajv : createDefaultAjvInstance(); + } + /** + * Create a validator for the given JSON Schema + * + * The validator is compiled once and can be reused multiple times. + * If the schema has an $id, it will be cached by AJV automatically. + * + * @param schema - Standard JSON Schema object + * @returns A validator function that validates input data + */ + getValidator(schema) { + var _a5; + const ajvValidator = "$id" in schema && typeof schema.$id === "string" ? (_a5 = this._ajv.getSchema(schema.$id)) != null ? _a5 : this._ajv.compile(schema) : this._ajv.compile(schema); + return (input) => { + const valid = ajvValidator(input); + if (valid) { + return { + valid: true, + data: input, + errorMessage: void 0 + }; + } else { + return { + valid: false, + data: void 0, + errorMessage: this._ajv.errorsText(ajvValidator.errors) + }; + } + }; + } +}; + +// node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/client.js +init_types(); +var ExperimentalClientTasks = class { + constructor(_client) { + this._client = _client; + } + /** + * Calls a tool and returns an AsyncGenerator that yields response messages. + * The generator is guaranteed to end with either a 'result' or 'error' message. + * + * This method provides streaming access to tool execution, allowing you to + * observe intermediate task status updates for long-running tool calls. + * Automatically validates structured output if the tool has an outputSchema. + * + * @example + * ```typescript + * const stream = client.experimental.tasks.callToolStream({ name: 'myTool', arguments: {} }); + * for await (const message of stream) { + * switch (message.type) { + * case 'taskCreated': + * console.log('Tool execution started:', message.task.taskId); + * break; + * case 'taskStatus': + * console.log('Tool status:', message.task.status); + * break; + * case 'result': + * console.log('Tool result:', message.result); + * break; + * case 'error': + * console.error('Tool error:', message.error); + * break; + * } + * } + * ``` + * + * @param params - Tool call parameters (name and arguments) + * @param resultSchema - Zod schema for validating the result (defaults to CallToolResultSchema) + * @param options - Optional request options (timeout, signal, task creation params, etc.) + * @returns AsyncGenerator that yields ResponseMessage objects + * + * @experimental + */ + async *callToolStream(params, resultSchema = CallToolResultSchema, options) { + var _a5; + const clientInternal = this._client; + const optionsWithTask = { + ...options, + // We check if the tool is known to be a task during auto-configuration, but assume + // the caller knows what they're doing if they pass this explicitly + task: (_a5 = options == null ? void 0 : options.task) != null ? _a5 : clientInternal.isToolTask(params.name) ? {} : void 0 + }; + const stream = clientInternal.requestStream({ method: "tools/call", params }, resultSchema, optionsWithTask); + const validator = clientInternal.getToolOutputValidator(params.name); + for await (const message of stream) { + if (message.type === "result" && validator) { + const result = message.result; + if (!result.structuredContent && !result.isError) { + yield { + type: "error", + error: new McpError(ErrorCode.InvalidRequest, `Tool ${params.name} has an output schema but did not return structured content`) + }; + return; + } + if (result.structuredContent) { + try { + const validationResult = validator(result.structuredContent); + if (!validationResult.valid) { + yield { + type: "error", + error: new McpError(ErrorCode.InvalidParams, `Structured content does not match the tool's output schema: ${validationResult.errorMessage}`) + }; + return; + } + } catch (error48) { + if (error48 instanceof McpError) { + yield { type: "error", error: error48 }; + return; + } + yield { + type: "error", + error: new McpError(ErrorCode.InvalidParams, `Failed to validate structured content: ${error48 instanceof Error ? error48.message : String(error48)}`) + }; + return; + } + } + } + yield message; + } + } + /** + * Gets the current status of a task. + * + * @param taskId - The task identifier + * @param options - Optional request options + * @returns The task status + * + * @experimental + */ + async getTask(taskId, options) { + return this._client.getTask({ taskId }, options); + } + /** + * Retrieves the result of a completed task. + * + * @param taskId - The task identifier + * @param resultSchema - Zod schema for validating the result + * @param options - Optional request options + * @returns The task result + * + * @experimental + */ + async getTaskResult(taskId, resultSchema, options) { + return this._client.getTaskResult({ taskId }, resultSchema, options); + } + /** + * Lists tasks with optional pagination. + * + * @param cursor - Optional pagination cursor + * @param options - Optional request options + * @returns List of tasks with optional next cursor + * + * @experimental + */ + async listTasks(cursor, options) { + return this._client.listTasks(cursor ? { cursor } : void 0, options); + } + /** + * Cancels a running task. + * + * @param taskId - The task identifier + * @param options - Optional request options + * + * @experimental + */ + async cancelTask(taskId, options) { + return this._client.cancelTask({ taskId }, options); + } + /** + * Sends a request and returns an AsyncGenerator that yields response messages. + * The generator is guaranteed to end with either a 'result' or 'error' message. + * + * This method provides streaming access to request processing, allowing you to + * observe intermediate task status updates for task-augmented requests. + * + * @param request - The request to send + * @param resultSchema - Zod schema for validating the result + * @param options - Optional request options (timeout, signal, task creation params, etc.) + * @returns AsyncGenerator that yields ResponseMessage objects + * + * @experimental + */ + requestStream(request, resultSchema, options) { + return this._client.requestStream(request, resultSchema, options); + } +}; + +// node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js +function assertToolsCallTaskCapability(requests, method, entityName) { + var _a5; + if (!requests) { + throw new Error(`${entityName} does not support task creation (required for ${method})`); + } + switch (method) { + case "tools/call": + if (!((_a5 = requests.tools) == null ? void 0 : _a5.call)) { + throw new Error(`${entityName} does not support task creation for tools/call (required for ${method})`); + } + break; + default: + break; + } +} +function assertClientRequestTaskCapability(requests, method, entityName) { + var _a5, _b3; + if (!requests) { + throw new Error(`${entityName} does not support task creation (required for ${method})`); + } + switch (method) { + case "sampling/createMessage": + if (!((_a5 = requests.sampling) == null ? void 0 : _a5.createMessage)) { + throw new Error(`${entityName} does not support task creation for sampling/createMessage (required for ${method})`); + } + break; + case "elicitation/create": + if (!((_b3 = requests.elicitation) == null ? void 0 : _b3.create)) { + throw new Error(`${entityName} does not support task creation for elicitation/create (required for ${method})`); + } + break; + default: + break; + } +} + +// node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js +function applyElicitationDefaults(schema, data) { + if (!schema || data === null || typeof data !== "object") + return; + if (schema.type === "object" && schema.properties && typeof schema.properties === "object") { + const obj = data; + const props = schema.properties; + for (const key of Object.keys(props)) { + const propSchema = props[key]; + if (obj[key] === void 0 && Object.prototype.hasOwnProperty.call(propSchema, "default")) { + obj[key] = propSchema.default; + } + if (obj[key] !== void 0) { + applyElicitationDefaults(propSchema, obj[key]); + } + } + } + if (Array.isArray(schema.anyOf)) { + for (const sub of schema.anyOf) { + if (typeof sub !== "boolean") { + applyElicitationDefaults(sub, data); + } + } + } + if (Array.isArray(schema.oneOf)) { + for (const sub of schema.oneOf) { + if (typeof sub !== "boolean") { + applyElicitationDefaults(sub, data); + } + } + } +} +function getSupportedElicitationModes(capabilities) { + if (!capabilities) { + return { supportsFormMode: false, supportsUrlMode: false }; + } + const hasFormCapability = capabilities.form !== void 0; + const hasUrlCapability = capabilities.url !== void 0; + const supportsFormMode = hasFormCapability || !hasFormCapability && !hasUrlCapability; + const supportsUrlMode = hasUrlCapability; + return { supportsFormMode, supportsUrlMode }; +} +var Client = class extends Protocol { + /** + * Initializes this client with the given name and version information. + */ + constructor(_clientInfo, options) { + var _a5, _b3; + super(options); + this._clientInfo = _clientInfo; + this._cachedToolOutputValidators = /* @__PURE__ */ new Map(); + this._cachedKnownTaskTools = /* @__PURE__ */ new Set(); + this._cachedRequiredTaskTools = /* @__PURE__ */ new Set(); + this._listChangedDebounceTimers = /* @__PURE__ */ new Map(); + this._capabilities = (_a5 = options == null ? void 0 : options.capabilities) != null ? _a5 : {}; + this._jsonSchemaValidator = (_b3 = options == null ? void 0 : options.jsonSchemaValidator) != null ? _b3 : new AjvJsonSchemaValidator(); + if (options == null ? void 0 : options.listChanged) { + this._pendingListChangedConfig = options.listChanged; + } + } + /** + * Set up handlers for list changed notifications based on config and server capabilities. + * This should only be called after initialization when server capabilities are known. + * Handlers are silently skipped if the server doesn't advertise the corresponding listChanged capability. + * @internal + */ + _setupListChangedHandlers(config2) { + var _a5, _b3, _c2, _d, _e2, _f2; + if (config2.tools && ((_b3 = (_a5 = this._serverCapabilities) == null ? void 0 : _a5.tools) == null ? void 0 : _b3.listChanged)) { + this._setupListChangedHandler("tools", ToolListChangedNotificationSchema, config2.tools, async () => { + const result = await this.listTools(); + return result.tools; + }); + } + if (config2.prompts && ((_d = (_c2 = this._serverCapabilities) == null ? void 0 : _c2.prompts) == null ? void 0 : _d.listChanged)) { + this._setupListChangedHandler("prompts", PromptListChangedNotificationSchema, config2.prompts, async () => { + const result = await this.listPrompts(); + return result.prompts; + }); + } + if (config2.resources && ((_f2 = (_e2 = this._serverCapabilities) == null ? void 0 : _e2.resources) == null ? void 0 : _f2.listChanged)) { + this._setupListChangedHandler("resources", ResourceListChangedNotificationSchema, config2.resources, async () => { + const result = await this.listResources(); + return result.resources; + }); + } + } + /** + * Access experimental features. + * + * WARNING: These APIs are experimental and may change without notice. + * + * @experimental + */ + get experimental() { + if (!this._experimental) { + this._experimental = { + tasks: new ExperimentalClientTasks(this) + }; + } + return this._experimental; + } + /** + * Registers new capabilities. This can only be called before connecting to a transport. + * + * The new capabilities will be merged with any existing capabilities previously given (e.g., at initialization). + */ + registerCapabilities(capabilities) { + if (this.transport) { + throw new Error("Cannot register capabilities after connecting to transport"); + } + this._capabilities = mergeCapabilities(this._capabilities, capabilities); + } + /** + * Override request handler registration to enforce client-side validation for elicitation. + */ + setRequestHandler(requestSchema, handler) { + var _a5, _b3, _c2; + const shape = getObjectShape(requestSchema); + const methodSchema = shape == null ? void 0 : shape.method; + if (!methodSchema) { + throw new Error("Schema is missing a method literal"); + } + let methodValue; + if (isZ4Schema(methodSchema)) { + const v4Schema = methodSchema; + const v4Def = (_a5 = v4Schema._zod) == null ? void 0 : _a5.def; + methodValue = (_b3 = v4Def == null ? void 0 : v4Def.value) != null ? _b3 : v4Schema.value; + } else { + const v3Schema = methodSchema; + const legacyDef = v3Schema._def; + methodValue = (_c2 = legacyDef == null ? void 0 : legacyDef.value) != null ? _c2 : v3Schema.value; + } + if (typeof methodValue !== "string") { + throw new Error("Schema method literal must be a string"); + } + const method = methodValue; + if (method === "elicitation/create") { + const wrappedHandler = async (request, extra) => { + var _a6, _b4, _c3; + const validatedRequest = safeParse2(ElicitRequestSchema, request); + if (!validatedRequest.success) { + const errorMessage = validatedRequest.error instanceof Error ? validatedRequest.error.message : String(validatedRequest.error); + throw new McpError(ErrorCode.InvalidParams, `Invalid elicitation request: ${errorMessage}`); + } + const { params } = validatedRequest.data; + params.mode = (_a6 = params.mode) != null ? _a6 : "form"; + const { supportsFormMode, supportsUrlMode } = getSupportedElicitationModes(this._capabilities.elicitation); + if (params.mode === "form" && !supportsFormMode) { + throw new McpError(ErrorCode.InvalidParams, "Client does not support form-mode elicitation requests"); + } + if (params.mode === "url" && !supportsUrlMode) { + throw new McpError(ErrorCode.InvalidParams, "Client does not support URL-mode elicitation requests"); + } + const result = await Promise.resolve(handler(request, extra)); + if (params.task) { + const taskValidationResult = safeParse2(CreateTaskResultSchema, result); + if (!taskValidationResult.success) { + const errorMessage = taskValidationResult.error instanceof Error ? taskValidationResult.error.message : String(taskValidationResult.error); + throw new McpError(ErrorCode.InvalidParams, `Invalid task creation result: ${errorMessage}`); + } + return taskValidationResult.data; + } + const validationResult = safeParse2(ElicitResultSchema, result); + if (!validationResult.success) { + const errorMessage = validationResult.error instanceof Error ? validationResult.error.message : String(validationResult.error); + throw new McpError(ErrorCode.InvalidParams, `Invalid elicitation result: ${errorMessage}`); + } + const validatedResult = validationResult.data; + const requestedSchema = params.mode === "form" ? params.requestedSchema : void 0; + if (params.mode === "form" && validatedResult.action === "accept" && validatedResult.content && requestedSchema) { + if ((_c3 = (_b4 = this._capabilities.elicitation) == null ? void 0 : _b4.form) == null ? void 0 : _c3.applyDefaults) { + try { + applyElicitationDefaults(requestedSchema, validatedResult.content); + } catch (e2) { + } + } + } + return validatedResult; + }; + return super.setRequestHandler(requestSchema, wrappedHandler); + } + if (method === "sampling/createMessage") { + const wrappedHandler = async (request, extra) => { + const validatedRequest = safeParse2(CreateMessageRequestSchema, request); + if (!validatedRequest.success) { + const errorMessage = validatedRequest.error instanceof Error ? validatedRequest.error.message : String(validatedRequest.error); + throw new McpError(ErrorCode.InvalidParams, `Invalid sampling request: ${errorMessage}`); + } + const { params } = validatedRequest.data; + const result = await Promise.resolve(handler(request, extra)); + if (params.task) { + const taskValidationResult = safeParse2(CreateTaskResultSchema, result); + if (!taskValidationResult.success) { + const errorMessage = taskValidationResult.error instanceof Error ? taskValidationResult.error.message : String(taskValidationResult.error); + throw new McpError(ErrorCode.InvalidParams, `Invalid task creation result: ${errorMessage}`); + } + return taskValidationResult.data; + } + const hasTools = params.tools || params.toolChoice; + const resultSchema = hasTools ? CreateMessageResultWithToolsSchema : CreateMessageResultSchema; + const validationResult = safeParse2(resultSchema, result); + if (!validationResult.success) { + const errorMessage = validationResult.error instanceof Error ? validationResult.error.message : String(validationResult.error); + throw new McpError(ErrorCode.InvalidParams, `Invalid sampling result: ${errorMessage}`); + } + return validationResult.data; + }; + return super.setRequestHandler(requestSchema, wrappedHandler); + } + return super.setRequestHandler(requestSchema, handler); + } + assertCapability(capability, method) { + var _a5; + if (!((_a5 = this._serverCapabilities) == null ? void 0 : _a5[capability])) { + throw new Error(`Server does not support ${capability} (required for ${method})`); + } + } + async connect(transport, options) { + await super.connect(transport); + if (transport.sessionId !== void 0) { + return; + } + try { + const result = await this.request({ + method: "initialize", + params: { + protocolVersion: LATEST_PROTOCOL_VERSION, + capabilities: this._capabilities, + clientInfo: this._clientInfo + } + }, InitializeResultSchema, options); + if (result === void 0) { + throw new Error(`Server sent invalid initialize result: ${result}`); + } + if (!SUPPORTED_PROTOCOL_VERSIONS.includes(result.protocolVersion)) { + throw new Error(`Server's protocol version is not supported: ${result.protocolVersion}`); + } + this._serverCapabilities = result.capabilities; + this._serverVersion = result.serverInfo; + if (transport.setProtocolVersion) { + transport.setProtocolVersion(result.protocolVersion); + } + this._instructions = result.instructions; + await this.notification({ + method: "notifications/initialized" + }); + if (this._pendingListChangedConfig) { + this._setupListChangedHandlers(this._pendingListChangedConfig); + this._pendingListChangedConfig = void 0; + } + } catch (error48) { + void this.close(); + throw error48; + } + } + /** + * After initialization has completed, this will be populated with the server's reported capabilities. + */ + getServerCapabilities() { + return this._serverCapabilities; + } + /** + * After initialization has completed, this will be populated with information about the server's name and version. + */ + getServerVersion() { + return this._serverVersion; + } + /** + * After initialization has completed, this may be populated with information about the server's instructions. + */ + getInstructions() { + return this._instructions; + } + assertCapabilityForMethod(method) { + var _a5, _b3, _c2, _d, _e2; + switch (method) { + case "logging/setLevel": + if (!((_a5 = this._serverCapabilities) == null ? void 0 : _a5.logging)) { + throw new Error(`Server does not support logging (required for ${method})`); + } + break; + case "prompts/get": + case "prompts/list": + if (!((_b3 = this._serverCapabilities) == null ? void 0 : _b3.prompts)) { + throw new Error(`Server does not support prompts (required for ${method})`); + } + break; + case "resources/list": + case "resources/templates/list": + case "resources/read": + case "resources/subscribe": + case "resources/unsubscribe": + if (!((_c2 = this._serverCapabilities) == null ? void 0 : _c2.resources)) { + throw new Error(`Server does not support resources (required for ${method})`); + } + if (method === "resources/subscribe" && !this._serverCapabilities.resources.subscribe) { + throw new Error(`Server does not support resource subscriptions (required for ${method})`); + } + break; + case "tools/call": + case "tools/list": + if (!((_d = this._serverCapabilities) == null ? void 0 : _d.tools)) { + throw new Error(`Server does not support tools (required for ${method})`); + } + break; + case "completion/complete": + if (!((_e2 = this._serverCapabilities) == null ? void 0 : _e2.completions)) { + throw new Error(`Server does not support completions (required for ${method})`); + } + break; + case "initialize": + break; + case "ping": + break; + } + } + assertNotificationCapability(method) { + var _a5; + switch (method) { + case "notifications/roots/list_changed": + if (!((_a5 = this._capabilities.roots) == null ? void 0 : _a5.listChanged)) { + throw new Error(`Client does not support roots list changed notifications (required for ${method})`); + } + break; + case "notifications/initialized": + break; + case "notifications/cancelled": + break; + case "notifications/progress": + break; + } + } + assertRequestHandlerCapability(method) { + if (!this._capabilities) { + return; + } + switch (method) { + case "sampling/createMessage": + if (!this._capabilities.sampling) { + throw new Error(`Client does not support sampling capability (required for ${method})`); + } + break; + case "elicitation/create": + if (!this._capabilities.elicitation) { + throw new Error(`Client does not support elicitation capability (required for ${method})`); + } + break; + case "roots/list": + if (!this._capabilities.roots) { + throw new Error(`Client does not support roots capability (required for ${method})`); + } + break; + case "tasks/get": + case "tasks/list": + case "tasks/result": + case "tasks/cancel": + if (!this._capabilities.tasks) { + throw new Error(`Client does not support tasks capability (required for ${method})`); + } + break; + case "ping": + break; + } + } + assertTaskCapability(method) { + var _a5, _b3; + assertToolsCallTaskCapability((_b3 = (_a5 = this._serverCapabilities) == null ? void 0 : _a5.tasks) == null ? void 0 : _b3.requests, method, "Server"); + } + assertTaskHandlerCapability(method) { + var _a5; + if (!this._capabilities) { + return; + } + assertClientRequestTaskCapability((_a5 = this._capabilities.tasks) == null ? void 0 : _a5.requests, method, "Client"); + } + async ping(options) { + return this.request({ method: "ping" }, EmptyResultSchema, options); + } + async complete(params, options) { + return this.request({ method: "completion/complete", params }, CompleteResultSchema, options); + } + async setLoggingLevel(level, options) { + return this.request({ method: "logging/setLevel", params: { level } }, EmptyResultSchema, options); + } + async getPrompt(params, options) { + return this.request({ method: "prompts/get", params }, GetPromptResultSchema, options); + } + async listPrompts(params, options) { + return this.request({ method: "prompts/list", params }, ListPromptsResultSchema, options); + } + async listResources(params, options) { + return this.request({ method: "resources/list", params }, ListResourcesResultSchema, options); + } + async listResourceTemplates(params, options) { + return this.request({ method: "resources/templates/list", params }, ListResourceTemplatesResultSchema, options); + } + async readResource(params, options) { + return this.request({ method: "resources/read", params }, ReadResourceResultSchema, options); + } + async subscribeResource(params, options) { + return this.request({ method: "resources/subscribe", params }, EmptyResultSchema, options); + } + async unsubscribeResource(params, options) { + return this.request({ method: "resources/unsubscribe", params }, EmptyResultSchema, options); + } + /** + * Calls a tool and waits for the result. Automatically validates structured output if the tool has an outputSchema. + * + * For task-based execution with streaming behavior, use client.experimental.tasks.callToolStream() instead. + */ + async callTool(params, resultSchema = CallToolResultSchema, options) { + if (this.isToolTaskRequired(params.name)) { + throw new McpError(ErrorCode.InvalidRequest, `Tool "${params.name}" requires task-based execution. Use client.experimental.tasks.callToolStream() instead.`); + } + const result = await this.request({ method: "tools/call", params }, resultSchema, options); + const validator = this.getToolOutputValidator(params.name); + if (validator) { + if (!result.structuredContent && !result.isError) { + throw new McpError(ErrorCode.InvalidRequest, `Tool ${params.name} has an output schema but did not return structured content`); + } + if (result.structuredContent) { + try { + const validationResult = validator(result.structuredContent); + if (!validationResult.valid) { + throw new McpError(ErrorCode.InvalidParams, `Structured content does not match the tool's output schema: ${validationResult.errorMessage}`); + } + } catch (error48) { + if (error48 instanceof McpError) { + throw error48; + } + throw new McpError(ErrorCode.InvalidParams, `Failed to validate structured content: ${error48 instanceof Error ? error48.message : String(error48)}`); + } + } + } + return result; + } + isToolTask(toolName) { + var _a5, _b3, _c2, _d; + if (!((_d = (_c2 = (_b3 = (_a5 = this._serverCapabilities) == null ? void 0 : _a5.tasks) == null ? void 0 : _b3.requests) == null ? void 0 : _c2.tools) == null ? void 0 : _d.call)) { + return false; + } + return this._cachedKnownTaskTools.has(toolName); + } + /** + * Check if a tool requires task-based execution. + * Unlike isToolTask which includes 'optional' tools, this only checks for 'required'. + */ + isToolTaskRequired(toolName) { + return this._cachedRequiredTaskTools.has(toolName); + } + /** + * Cache validators for tool output schemas. + * Called after listTools() to pre-compile validators for better performance. + */ + cacheToolMetadata(tools) { + var _a5; + this._cachedToolOutputValidators.clear(); + this._cachedKnownTaskTools.clear(); + this._cachedRequiredTaskTools.clear(); + for (const tool of tools) { + if (tool.outputSchema) { + const toolValidator = this._jsonSchemaValidator.getValidator(tool.outputSchema); + this._cachedToolOutputValidators.set(tool.name, toolValidator); + } + const taskSupport = (_a5 = tool.execution) == null ? void 0 : _a5.taskSupport; + if (taskSupport === "required" || taskSupport === "optional") { + this._cachedKnownTaskTools.add(tool.name); + } + if (taskSupport === "required") { + this._cachedRequiredTaskTools.add(tool.name); + } + } + } + /** + * Get cached validator for a tool + */ + getToolOutputValidator(toolName) { + return this._cachedToolOutputValidators.get(toolName); + } + async listTools(params, options) { + const result = await this.request({ method: "tools/list", params }, ListToolsResultSchema, options); + this.cacheToolMetadata(result.tools); + return result; + } + /** + * Set up a single list changed handler. + * @internal + */ + _setupListChangedHandler(listType, notificationSchema, options, fetcher) { + const parseResult = ListChangedOptionsBaseSchema.safeParse(options); + if (!parseResult.success) { + throw new Error(`Invalid ${listType} listChanged options: ${parseResult.error.message}`); + } + if (typeof options.onChanged !== "function") { + throw new Error(`Invalid ${listType} listChanged options: onChanged must be a function`); + } + const { autoRefresh, debounceMs } = parseResult.data; + const { onChanged } = options; + const refresh = async () => { + if (!autoRefresh) { + onChanged(null, null); + return; + } + try { + const items = await fetcher(); + onChanged(null, items); + } catch (e2) { + const error48 = e2 instanceof Error ? e2 : new Error(String(e2)); + onChanged(error48, null); + } + }; + const handler = () => { + if (debounceMs) { + const existingTimer = this._listChangedDebounceTimers.get(listType); + if (existingTimer) { + clearTimeout(existingTimer); + } + const timer = setTimeout(refresh, debounceMs); + this._listChangedDebounceTimers.set(listType, timer); + } else { + refresh(); + } + }; + this.setNotificationHandler(notificationSchema, handler); + } + async sendRootsListChanged() { + return this.notification({ method: "notifications/roots/list_changed" }); + } +}; + +// node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js +var import_cross_spawn = __toESM(require_cross_spawn(), 1); +var import_node_process2 = __toESM(require("node:process"), 1); +var import_node_stream = require("node:stream"); + +// node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js +init_types(); +var ReadBuffer = class { + append(chunk) { + this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk; + } + readMessage() { + if (!this._buffer) { + return null; + } + const index = this._buffer.indexOf("\n"); + if (index === -1) { + return null; + } + const line = this._buffer.toString("utf8", 0, index).replace(/\r$/, ""); + this._buffer = this._buffer.subarray(index + 1); + return deserializeMessage(line); + } + clear() { + this._buffer = void 0; + } +}; +function deserializeMessage(line) { + return JSONRPCMessageSchema.parse(JSON.parse(line)); +} +function serializeMessage(message) { + return JSON.stringify(message) + "\n"; +} + +// node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js +var DEFAULT_INHERITED_ENV_VARS = import_node_process2.default.platform === "win32" ? [ + "APPDATA", + "HOMEDRIVE", + "HOMEPATH", + "LOCALAPPDATA", + "PATH", + "PROCESSOR_ARCHITECTURE", + "SYSTEMDRIVE", + "SYSTEMROOT", + "TEMP", + "USERNAME", + "USERPROFILE", + "PROGRAMFILES" +] : ( + /* list inspired by the default env inheritance of sudo */ + ["HOME", "LOGNAME", "PATH", "SHELL", "TERM", "USER"] +); +function getDefaultEnvironment() { + const env = {}; + for (const key of DEFAULT_INHERITED_ENV_VARS) { + const value = import_node_process2.default.env[key]; + if (value === void 0) { + continue; + } + if (value.startsWith("()")) { + continue; + } + env[key] = value; + } + return env; +} +var StdioClientTransport = class { + constructor(server) { + this._readBuffer = new ReadBuffer(); + this._stderrStream = null; + this._serverParams = server; + if (server.stderr === "pipe" || server.stderr === "overlapped") { + this._stderrStream = new import_node_stream.PassThrough(); + } + } + /** + * Starts the server process and prepares to communicate with it. + */ + async start() { + if (this._process) { + throw new Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically."); + } + return new Promise((resolve8, reject) => { + var _a5, _b3, _c2, _d, _e2; + this._process = (0, import_cross_spawn.default)(this._serverParams.command, (_a5 = this._serverParams.args) != null ? _a5 : [], { + // merge default env with server env because mcp server needs some env vars + env: { + ...getDefaultEnvironment(), + ...this._serverParams.env + }, + stdio: ["pipe", "pipe", (_b3 = this._serverParams.stderr) != null ? _b3 : "inherit"], + shell: false, + windowsHide: import_node_process2.default.platform === "win32", + cwd: this._serverParams.cwd + }); + this._process.on("error", (error48) => { + var _a6; + reject(error48); + (_a6 = this.onerror) == null ? void 0 : _a6.call(this, error48); + }); + this._process.on("spawn", () => { + resolve8(); + }); + this._process.on("close", (_code) => { + var _a6; + this._process = void 0; + (_a6 = this.onclose) == null ? void 0 : _a6.call(this); + }); + (_c2 = this._process.stdin) == null ? void 0 : _c2.on("error", (error48) => { + var _a6; + (_a6 = this.onerror) == null ? void 0 : _a6.call(this, error48); + }); + (_d = this._process.stdout) == null ? void 0 : _d.on("data", (chunk) => { + this._readBuffer.append(chunk); + this.processReadBuffer(); + }); + (_e2 = this._process.stdout) == null ? void 0 : _e2.on("error", (error48) => { + var _a6; + (_a6 = this.onerror) == null ? void 0 : _a6.call(this, error48); + }); + if (this._stderrStream && this._process.stderr) { + this._process.stderr.pipe(this._stderrStream); + } + }); + } + /** + * The stderr stream of the child process, if `StdioServerParameters.stderr` was set to "pipe" or "overlapped". + * + * If stderr piping was requested, a PassThrough stream is returned _immediately_, allowing callers to + * attach listeners before the start method is invoked. This prevents loss of any early + * error output emitted by the child process. + */ + get stderr() { + var _a5, _b3; + if (this._stderrStream) { + return this._stderrStream; + } + return (_b3 = (_a5 = this._process) == null ? void 0 : _a5.stderr) != null ? _b3 : null; + } + /** + * The child process pid spawned by this transport. + * + * This is only available after the transport has been started. + */ + get pid() { + var _a5, _b3; + return (_b3 = (_a5 = this._process) == null ? void 0 : _a5.pid) != null ? _b3 : null; + } + processReadBuffer() { + var _a5, _b3; + while (true) { + try { + const message = this._readBuffer.readMessage(); + if (message === null) { + break; + } + (_a5 = this.onmessage) == null ? void 0 : _a5.call(this, message); + } catch (error48) { + (_b3 = this.onerror) == null ? void 0 : _b3.call(this, error48); + } + } + } + async close() { + var _a5; + if (this._process) { + const processToClose = this._process; + this._process = void 0; + const closePromise = new Promise((resolve8) => { + processToClose.once("close", () => { + resolve8(); + }); + }); + try { + (_a5 = processToClose.stdin) == null ? void 0 : _a5.end(); + } catch (e2) { + } + await Promise.race([closePromise, new Promise((resolve8) => { + const closeTimeout = setTimeout(resolve8, 2e3); + closeTimeout.unref?.(); + })]); + if (processToClose.exitCode === null) { + try { + processToClose.kill("SIGTERM"); + } catch (e2) { + } + await Promise.race([closePromise, new Promise((resolve8) => { + const closeTimeout = setTimeout(resolve8, 2e3); + closeTimeout.unref?.(); + })]); + } + if (processToClose.exitCode === null) { + try { + processToClose.kill("SIGKILL"); + } catch (e2) { + } + } + } + this._readBuffer.clear(); + } + send(message) { + return new Promise((resolve8) => { + var _a5; + if (!((_a5 = this._process) == null ? void 0 : _a5.stdin)) { + throw new Error("Not connected"); + } + const json2 = serializeMessage(message); + if (this._process.stdin.write(json2)) { + resolve8(); + } else { + this._process.stdin.once("drain", resolve8); + } + }); + } +}; + +// node_modules/@modelcontextprotocol/sdk/dist/esm/client/streamableHttp.js +init_transport(); +init_types(); +init_auth2(); + +// node_modules/eventsource-parser/dist/stream.js +init_dist(); +var EventSourceParserStream = class extends TransformStream { + constructor({ onError, onRetry, onComment } = {}) { + let parser; + super({ + start(controller) { + parser = createParser({ + onEvent: (event) => { + controller.enqueue(event); + }, + onError(error48) { + onError === "terminate" ? controller.error(error48) : typeof onError == "function" && onError(error48); + }, + onRetry, + onComment + }); + }, + transform(chunk) { + parser.feed(chunk); + } + }); + } +}; + +// node_modules/@modelcontextprotocol/sdk/dist/esm/client/streamableHttp.js +var DEFAULT_STREAMABLE_HTTP_RECONNECTION_OPTIONS = { + initialReconnectionDelay: 1e3, + maxReconnectionDelay: 3e4, + reconnectionDelayGrowFactor: 1.5, + maxRetries: 2 +}; +var StreamableHTTPError = class extends Error { + constructor(code, message) { + super(`Streamable HTTP error: ${message}`); + this.code = code; + } +}; +var StreamableHTTPClientTransport = class { + constructor(url2, opts) { + var _a5; + this._hasCompletedAuthFlow = false; + this._url = url2; + this._resourceMetadataUrl = void 0; + this._scope = void 0; + this._requestInit = opts == null ? void 0 : opts.requestInit; + this._authProvider = opts == null ? void 0 : opts.authProvider; + this._fetch = opts == null ? void 0 : opts.fetch; + this._fetchWithInit = createFetchWithInit(opts == null ? void 0 : opts.fetch, opts == null ? void 0 : opts.requestInit); + this._sessionId = opts == null ? void 0 : opts.sessionId; + this._reconnectionOptions = (_a5 = opts == null ? void 0 : opts.reconnectionOptions) != null ? _a5 : DEFAULT_STREAMABLE_HTTP_RECONNECTION_OPTIONS; + } + async _authThenStart() { + var _a5; + if (!this._authProvider) { + throw new UnauthorizedError("No auth provider"); + } + let result; + try { + result = await auth(this._authProvider, { + serverUrl: this._url, + resourceMetadataUrl: this._resourceMetadataUrl, + scope: this._scope, + fetchFn: this._fetchWithInit + }); + } catch (error48) { + (_a5 = this.onerror) == null ? void 0 : _a5.call(this, error48); + throw error48; + } + if (result !== "AUTHORIZED") { + throw new UnauthorizedError(); + } + return await this._startOrAuthSse({ resumptionToken: void 0 }); + } + async _commonHeaders() { + var _a5; + const headers = {}; + if (this._authProvider) { + const tokens = await this._authProvider.tokens(); + if (tokens) { + headers["Authorization"] = `Bearer ${tokens.access_token}`; + } + } + if (this._sessionId) { + headers["mcp-session-id"] = this._sessionId; + } + if (this._protocolVersion) { + headers["mcp-protocol-version"] = this._protocolVersion; + } + const extraHeaders = normalizeHeaders((_a5 = this._requestInit) == null ? void 0 : _a5.headers); + return new Headers({ + ...headers, + ...extraHeaders + }); + } + async _startOrAuthSse(options) { + var _a5, _b3, _c2, _d; + const { resumptionToken } = options; + try { + const headers = await this._commonHeaders(); + headers.set("Accept", "text/event-stream"); + if (resumptionToken) { + headers.set("last-event-id", resumptionToken); + } + const response = await ((_a5 = this._fetch) != null ? _a5 : fetch)(this._url, { + method: "GET", + headers, + signal: (_b3 = this._abortController) == null ? void 0 : _b3.signal + }); + if (!response.ok) { + await ((_c2 = response.body) == null ? void 0 : _c2.cancel()); + if (response.status === 401 && this._authProvider) { + return await this._authThenStart(); + } + if (response.status === 405) { + return; + } + throw new StreamableHTTPError(response.status, `Failed to open SSE stream: ${response.statusText}`); + } + this._handleSseStream(response.body, options, true); + } catch (error48) { + (_d = this.onerror) == null ? void 0 : _d.call(this, error48); + throw error48; + } + } + /** + * Calculates the next reconnection delay using backoff algorithm + * + * @param attempt Current reconnection attempt count for the specific stream + * @returns Time to wait in milliseconds before next reconnection attempt + */ + _getNextReconnectionDelay(attempt) { + if (this._serverRetryMs !== void 0) { + return this._serverRetryMs; + } + const initialDelay = this._reconnectionOptions.initialReconnectionDelay; + const growFactor = this._reconnectionOptions.reconnectionDelayGrowFactor; + const maxDelay = this._reconnectionOptions.maxReconnectionDelay; + return Math.min(initialDelay * Math.pow(growFactor, attempt), maxDelay); + } + /** + * Schedule a reconnection attempt using server-provided retry interval or backoff + * + * @param lastEventId The ID of the last received event for resumability + * @param attemptCount Current reconnection attempt count for this specific stream + */ + _scheduleReconnection(options, attemptCount = 0) { + var _a5; + const maxRetries = this._reconnectionOptions.maxRetries; + if (attemptCount >= maxRetries) { + (_a5 = this.onerror) == null ? void 0 : _a5.call(this, new Error(`Maximum reconnection attempts (${maxRetries}) exceeded.`)); + return; + } + const delay = this._getNextReconnectionDelay(attemptCount); + this._reconnectionTimeout = setTimeout(() => { + this._startOrAuthSse(options).catch((error48) => { + var _a6; + (_a6 = this.onerror) == null ? void 0 : _a6.call(this, new Error(`Failed to reconnect SSE stream: ${error48 instanceof Error ? error48.message : String(error48)}`)); + this._scheduleReconnection(options, attemptCount + 1); + }); + }, delay); + } + _handleSseStream(stream, options, isReconnectable) { + if (!stream) { + return; + } + const { onresumptiontoken, replayMessageId } = options; + let lastEventId; + let hasPrimingEvent = false; + let receivedResponse = false; + const processStream = async () => { + var _a5, _b3, _c2, _d; + try { + const reader = stream.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream({ + onRetry: (retryMs) => { + this._serverRetryMs = retryMs; + } + })).getReader(); + while (true) { + const { value: event, done } = await reader.read(); + if (done) { + break; + } + if (event.id) { + lastEventId = event.id; + hasPrimingEvent = true; + onresumptiontoken == null ? void 0 : onresumptiontoken(event.id); + } + if (!event.data) { + continue; + } + if (!event.event || event.event === "message") { + try { + const message = JSONRPCMessageSchema.parse(JSON.parse(event.data)); + if (isJSONRPCResultResponse(message)) { + receivedResponse = true; + if (replayMessageId !== void 0) { + message.id = replayMessageId; + } + } + (_a5 = this.onmessage) == null ? void 0 : _a5.call(this, message); + } catch (error48) { + (_b3 = this.onerror) == null ? void 0 : _b3.call(this, error48); + } + } + } + const canResume = isReconnectable || hasPrimingEvent; + const needsReconnect = canResume && !receivedResponse; + if (needsReconnect && this._abortController && !this._abortController.signal.aborted) { + this._scheduleReconnection({ + resumptionToken: lastEventId, + onresumptiontoken, + replayMessageId + }, 0); + } + } catch (error48) { + (_c2 = this.onerror) == null ? void 0 : _c2.call(this, new Error(`SSE stream disconnected: ${error48}`)); + const canResume = isReconnectable || hasPrimingEvent; + const needsReconnect = canResume && !receivedResponse; + if (needsReconnect && this._abortController && !this._abortController.signal.aborted) { + try { + this._scheduleReconnection({ + resumptionToken: lastEventId, + onresumptiontoken, + replayMessageId + }, 0); + } catch (error49) { + (_d = this.onerror) == null ? void 0 : _d.call(this, new Error(`Failed to reconnect: ${error49 instanceof Error ? error49.message : String(error49)}`)); + } + } + } + }; + processStream(); + } + async start() { + if (this._abortController) { + throw new Error("StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically."); + } + this._abortController = new AbortController(); + } + /** + * Call this method after the user has finished authorizing via their user agent and is redirected back to the MCP client application. This will exchange the authorization code for an access token, enabling the next connection attempt to successfully auth. + */ + async finishAuth(authorizationCode) { + if (!this._authProvider) { + throw new UnauthorizedError("No auth provider"); + } + const result = await auth(this._authProvider, { + serverUrl: this._url, + authorizationCode, + resourceMetadataUrl: this._resourceMetadataUrl, + scope: this._scope, + fetchFn: this._fetchWithInit + }); + if (result !== "AUTHORIZED") { + throw new UnauthorizedError("Failed to authorize"); + } + } + async close() { + var _a5, _b3; + if (this._reconnectionTimeout) { + clearTimeout(this._reconnectionTimeout); + this._reconnectionTimeout = void 0; + } + (_a5 = this._abortController) == null ? void 0 : _a5.abort(); + (_b3 = this.onclose) == null ? void 0 : _b3.call(this); + } + async send(message, options) { + var _a5, _b3, _c2, _d, _e2, _f2, _g; + try { + const { resumptionToken, onresumptiontoken } = options || {}; + if (resumptionToken) { + this._startOrAuthSse({ resumptionToken, replayMessageId: isJSONRPCRequest(message) ? message.id : void 0 }).catch((err) => { + var _a6; + return (_a6 = this.onerror) == null ? void 0 : _a6.call(this, err); + }); + return; + } + const headers = await this._commonHeaders(); + headers.set("content-type", "application/json"); + headers.set("accept", "application/json, text/event-stream"); + const init = { + ...this._requestInit, + method: "POST", + headers, + body: JSON.stringify(message), + signal: (_a5 = this._abortController) == null ? void 0 : _a5.signal + }; + const response = await ((_b3 = this._fetch) != null ? _b3 : fetch)(this._url, init); + const sessionId = response.headers.get("mcp-session-id"); + if (sessionId) { + this._sessionId = sessionId; + } + if (!response.ok) { + const text = await response.text().catch(() => null); + if (response.status === 401 && this._authProvider) { + if (this._hasCompletedAuthFlow) { + throw new StreamableHTTPError(401, "Server returned 401 after successful authentication"); + } + const { resourceMetadataUrl, scope } = extractWWWAuthenticateParams(response); + this._resourceMetadataUrl = resourceMetadataUrl; + this._scope = scope; + const result = await auth(this._authProvider, { + serverUrl: this._url, + resourceMetadataUrl: this._resourceMetadataUrl, + scope: this._scope, + fetchFn: this._fetchWithInit + }); + if (result !== "AUTHORIZED") { + throw new UnauthorizedError(); + } + this._hasCompletedAuthFlow = true; + return this.send(message); + } + if (response.status === 403 && this._authProvider) { + const { resourceMetadataUrl, scope, error: error48 } = extractWWWAuthenticateParams(response); + if (error48 === "insufficient_scope") { + const wwwAuthHeader = response.headers.get("WWW-Authenticate"); + if (this._lastUpscopingHeader === wwwAuthHeader) { + throw new StreamableHTTPError(403, "Server returned 403 after trying upscoping"); + } + if (scope) { + this._scope = scope; + } + if (resourceMetadataUrl) { + this._resourceMetadataUrl = resourceMetadataUrl; + } + this._lastUpscopingHeader = wwwAuthHeader != null ? wwwAuthHeader : void 0; + const result = await auth(this._authProvider, { + serverUrl: this._url, + resourceMetadataUrl: this._resourceMetadataUrl, + scope: this._scope, + fetchFn: this._fetch + }); + if (result !== "AUTHORIZED") { + throw new UnauthorizedError(); + } + return this.send(message); + } + } + throw new StreamableHTTPError(response.status, `Error POSTing to endpoint: ${text}`); + } + this._hasCompletedAuthFlow = false; + this._lastUpscopingHeader = void 0; + if (response.status === 202) { + await ((_c2 = response.body) == null ? void 0 : _c2.cancel()); + if (isInitializedNotification(message)) { + this._startOrAuthSse({ resumptionToken: void 0 }).catch((err) => { + var _a6; + return (_a6 = this.onerror) == null ? void 0 : _a6.call(this, err); + }); + } + return; + } + const messages = Array.isArray(message) ? message : [message]; + const hasRequests = messages.filter((msg) => "method" in msg && "id" in msg && msg.id !== void 0).length > 0; + const contentType = response.headers.get("content-type"); + if (hasRequests) { + if (contentType == null ? void 0 : contentType.includes("text/event-stream")) { + this._handleSseStream(response.body, { onresumptiontoken }, false); + } else if (contentType == null ? void 0 : contentType.includes("application/json")) { + const data = await response.json(); + const responseMessages = Array.isArray(data) ? data.map((msg) => JSONRPCMessageSchema.parse(msg)) : [JSONRPCMessageSchema.parse(data)]; + for (const msg of responseMessages) { + (_d = this.onmessage) == null ? void 0 : _d.call(this, msg); + } + } else { + await ((_e2 = response.body) == null ? void 0 : _e2.cancel()); + throw new StreamableHTTPError(-1, `Unexpected content type: ${contentType}`); + } + } else { + await ((_f2 = response.body) == null ? void 0 : _f2.cancel()); + } + } catch (error48) { + (_g = this.onerror) == null ? void 0 : _g.call(this, error48); + throw error48; + } + } + get sessionId() { + return this._sessionId; + } + /** + * Terminates the current session by sending a DELETE request to the server. + * + * Clients that no longer need a particular session + * (e.g., because the user is leaving the client application) SHOULD send an + * HTTP DELETE to the MCP endpoint with the Mcp-Session-Id header to explicitly + * terminate the session. + * + * The server MAY respond with HTTP 405 Method Not Allowed, indicating that + * the server does not allow clients to terminate sessions. + */ + async terminateSession() { + var _a5, _b3, _c2, _d; + if (!this._sessionId) { + return; + } + try { + const headers = await this._commonHeaders(); + const init = { + ...this._requestInit, + method: "DELETE", + headers, + signal: (_a5 = this._abortController) == null ? void 0 : _a5.signal + }; + const response = await ((_b3 = this._fetch) != null ? _b3 : fetch)(this._url, init); + await ((_c2 = response.body) == null ? void 0 : _c2.cancel()); + if (!response.ok && response.status !== 405) { + throw new StreamableHTTPError(response.status, `Failed to terminate session: ${response.statusText}`); + } + this._sessionId = void 0; + } catch (error48) { + (_d = this.onerror) == null ? void 0 : _d.call(this, error48); + throw error48; + } + } + setProtocolVersion(version2) { + this._protocolVersion = version2; + } + get protocolVersion() { + return this._protocolVersion; + } + /** + * Resume an SSE stream from a previous event ID. + * Opens a GET SSE connection with Last-Event-ID header to replay missed events. + * + * @param lastEventId The event ID to resume from + * @param options Optional callback to receive new resumption tokens + */ + async resumeStream(lastEventId, options) { + await this._startOrAuthSse({ + resumptionToken: lastEventId, + onresumptiontoken: options == null ? void 0 : options.onresumptiontoken + }); + } +}; + +// src/core/mcp/McpTester.ts +var http = __toESM(require("http")); +var https = __toESM(require("https")); +init_env(); +function createLegacySseTransport(url2, options) { + const module2 = (init_sse(), __toCommonJS(sse_exports)); + return new module2.SSEClientTransport(url2, options); +} +function createNodeFetch() { + return async (input, init) => { + var _a5, _b3, _c2; + const requestUrl = getRequestUrl(input); + const method = (_a5 = init == null ? void 0 : init.method) != null ? _a5 : input instanceof Request ? input.method : "GET"; + const headers = mergeHeaders(input, init); + const signal = (_b3 = init == null ? void 0 : init.signal) != null ? _b3 : input instanceof Request ? input.signal : void 0; + const body = await getRequestBody((_c2 = init == null ? void 0 : init.body) != null ? _c2 : input instanceof Request ? input.body : void 0); + const transport = requestUrl.protocol === "https:" ? https : http; + return new Promise((resolve8, reject) => { + let settled = false; + const fail = (error48) => { + if (settled) return; + settled = true; + signal == null ? void 0 : signal.removeEventListener("abort", onAbort); + reject(error48 instanceof Error ? error48 : new Error(String(error48))); + }; + const onAbort = () => { + var _a6; + req.destroy(new Error("Request aborted")); + fail((_a6 = signal == null ? void 0 : signal.reason) != null ? _a6 : new Error("Request aborted")); + }; + const requestHeaders = {}; + headers.forEach((value, key) => { + requestHeaders[key] = value; + }); + if (body) { + requestHeaders["content-length"] = String(body.byteLength); + } + const req = transport.request( + requestUrl, + { + method, + headers: requestHeaders + }, + (res) => { + if (settled) return; + settled = true; + signal == null ? void 0 : signal.removeEventListener("abort", onAbort); + resolve8(createFetchResponse(res)); + } + ); + req.on("error", (error48) => fail(error48)); + if (signal) { + if (signal.aborted) { + onAbort(); + return; + } + signal.addEventListener("abort", onAbort, { once: true }); + } + if (body) { + req.end(body); + } else { + req.end(); + } + }); + }; +} +function createFetchResponse(res) { + var _a5, _b3, _c2, _d; + const responseHeaders = new Headers(); + for (const [key, value] of Object.entries(res.headers)) { + if (value === void 0) continue; + if (Array.isArray(value)) { + for (const headerValue of value) { + responseHeaders.append(key, headerValue); + } + } else { + responseHeaders.append(key, value); + } + } + const body = new ReadableStream({ + start(controller) { + res.on("data", (chunk) => { + const buffer = typeof chunk === "string" ? Buffer.from(chunk) : chunk; + controller.enqueue(new Uint8Array(buffer)); + }); + res.on("end", () => controller.close()); + res.on("error", (error48) => controller.error(error48)); + }, + cancel(reason) { + res.destroy(reason instanceof Error ? reason : new Error("Response body cancelled")); + } + }); + let bodyUsed = false; + const readAsText = async () => { + if (bodyUsed) { + throw new TypeError("Body has already been consumed"); + } + bodyUsed = true; + const reader = body.getReader(); + const chunks = []; + let total = 0; + let done = false; + try { + while (!done) { + const { value, done: streamDone } = await reader.read(); + done = streamDone; + if (done) break; + if (value) { + chunks.push(value); + total += value.byteLength; + } + } + } finally { + reader.releaseLock(); + } + const merged = new Uint8Array(total); + let offset = 0; + for (const chunk of chunks) { + merged.set(chunk, offset); + offset += chunk.byteLength; + } + return new TextDecoder().decode(merged); + }; + return { + ok: ((_a5 = res.statusCode) != null ? _a5 : 500) >= 200 && ((_b3 = res.statusCode) != null ? _b3 : 500) < 300, + status: (_c2 = res.statusCode) != null ? _c2 : 500, + statusText: (_d = res.statusMessage) != null ? _d : "", + headers: responseHeaders, + body, + text: readAsText, + json: async () => { + const parsed = JSON.parse(await readAsText()); + return parsed; + } + }; +} +function getRequestUrl(input) { + if (input instanceof URL) { + return input; + } + if (typeof input === "string") { + return new URL(input); + } + return new URL(input.url); +} +function mergeHeaders(input, init) { + const headers = new Headers(input instanceof Request ? input.headers : void 0); + if (init == null ? void 0 : init.headers) { + const initHeaders = new Headers(init.headers); + initHeaders.forEach((value, key) => { + headers.set(key, value); + }); + } + return headers; +} +async function getRequestBody(body) { + if (body === void 0 || body === null) { + return void 0; + } + const serialized = await new Response(body).arrayBuffer(); + return Buffer.from(serialized); +} +var nodeFetch = createNodeFetch(); +async function testMcpServer(server) { + var _a5; + const type = getMcpServerType(server.config); + let transport; + try { + if (type === "stdio") { + const config2 = server.config; + const { cmd, args } = parseCommand(config2.command, config2.args); + if (!cmd) { + return { success: false, tools: [], error: "Missing command" }; + } + transport = new StdioClientTransport({ + command: cmd, + args, + env: { ...process.env, ...config2.env, PATH: getEnhancedPath((_a5 = config2.env) == null ? void 0 : _a5.PATH) }, + stderr: "ignore" + }); + } else { + const config2 = server.config; + const url2 = new URL(config2.url); + const options = { + fetch: nodeFetch, + requestInit: config2.headers ? { headers: config2.headers } : void 0 + }; + transport = type === "sse" ? createLegacySseTransport(url2, options) : new StreamableHTTPClientTransport(url2, options); + } + } catch (error48) { + return { + success: false, + tools: [], + error: error48 instanceof Error ? error48.message : "Invalid server configuration" + }; + } + const client = new Client({ name: "claudian-tester", version: "1.0.0" }); + const controller = new AbortController(); + const timeout = window.setTimeout(() => controller.abort(), 1e4); + try { + await client.connect(transport, { signal: controller.signal }); + const serverVersion = client.getServerVersion(); + let tools = []; + try { + const result = await client.listTools(void 0, { signal: controller.signal }); + tools = result.tools.map((t11) => ({ + name: t11.name, + description: t11.description, + inputSchema: t11.inputSchema + })); + } catch (e2) { + } + return { + success: true, + serverName: serverVersion == null ? void 0 : serverVersion.name, + serverVersion: serverVersion == null ? void 0 : serverVersion.version, + tools + }; + } catch (error48) { + if (controller.signal.aborted) { + return { success: false, tools: [], error: "Connection timeout (10s)" }; + } + return { + success: false, + tools: [], + error: error48 instanceof Error ? error48.message : "Unknown error" + }; + } finally { + window.clearTimeout(timeout); + try { + await client.close(); + } catch (e2) { + } + } +} + +// src/features/settings/ui/McpServerModal.ts +var import_obsidian7 = require("obsidian"); +var McpServerModal = class extends import_obsidian7.Modal { + constructor(app, existingServer, onSave, initialType, prefillConfig) { + super(app); + this.serverName = ""; + this.serverType = "stdio"; + this.enabled = DEFAULT_MCP_SERVER.enabled; + this.contextSaving = DEFAULT_MCP_SERVER.contextSaving; + this.command = ""; + this.env = ""; + this.url = ""; + this.headers = ""; + this.typeFieldsEl = null; + this.nameInputEl = null; + this.existingServer = existingServer; + this.onSave = onSave; + if (existingServer) { + this.serverName = existingServer.name; + this.serverType = getMcpServerType(existingServer.config); + this.enabled = existingServer.enabled; + this.contextSaving = existingServer.contextSaving; + this.initFromConfig(existingServer.config); + } else if (prefillConfig) { + this.serverName = prefillConfig.name; + this.serverType = getMcpServerType(prefillConfig.config); + this.initFromConfig(prefillConfig.config); + } else if (initialType) { + this.serverType = initialType; + } + } + initFromConfig(config2) { + const type = getMcpServerType(config2); + if (type === "stdio") { + const stdioConfig = config2; + if (stdioConfig.args && stdioConfig.args.length > 0) { + this.command = stdioConfig.command + " " + stdioConfig.args.join(" "); + } else { + this.command = stdioConfig.command; + } + this.env = this.envRecordToString(stdioConfig.env); + } else { + const urlConfig = config2; + this.url = urlConfig.url; + this.headers = this.envRecordToString(urlConfig.headers); + } + } + onOpen() { + this.setTitle(this.existingServer ? "Edit MCP Server" : "Add MCP Server"); + this.modalEl.addClass("claudian-mcp-modal"); + const { contentEl } = this; + new import_obsidian7.Setting(contentEl).setName("Server name").setDesc("Unique identifier for this server").addText((text) => { + this.nameInputEl = text.inputEl; + text.setValue(this.serverName); + text.setPlaceholder("My-mcp-server"); + text.onChange((value) => { + this.serverName = value; + }); + text.inputEl.addEventListener("keydown", (e2) => this.handleKeyDown(e2)); + }); + new import_obsidian7.Setting(contentEl).setName("Type").setDesc("Server connection type").addDropdown((dropdown) => { + dropdown.addOption("stdio", "Stdio (local command)"); + dropdown.addOption("sse", "Sse (server-sent events)"); + dropdown.addOption("http", "HTTP (HTTP endpoint)"); + dropdown.setValue(this.serverType); + dropdown.onChange((value) => { + this.serverType = value; + this.renderTypeFields(); + }); + }); + this.typeFieldsEl = contentEl.createDiv({ cls: "claudian-mcp-type-fields" }); + this.renderTypeFields(); + new import_obsidian7.Setting(contentEl).setName("Enabled").setDesc("Whether this server is active").addToggle((toggle) => { + toggle.setValue(this.enabled); + toggle.onChange((value) => { + this.enabled = value; + }); + }); + new import_obsidian7.Setting(contentEl).setName("Context-saving mode").setDesc("Hide tools from agent unless @-mentioned (saves context window)").addToggle((toggle) => { + toggle.setValue(this.contextSaving); + toggle.onChange((value) => { + this.contextSaving = value; + }); + }); + const buttonContainer = contentEl.createDiv({ cls: "claudian-mcp-buttons" }); + const cancelBtn = buttonContainer.createEl("button", { + text: "Cancel", + cls: "claudian-cancel-btn" + }); + cancelBtn.addEventListener("click", () => this.close()); + const saveBtn = buttonContainer.createEl("button", { + text: this.existingServer ? "Update" : "Add", + cls: "claudian-save-btn mod-cta" + }); + saveBtn.addEventListener("click", () => this.save()); + } + renderTypeFields() { + if (!this.typeFieldsEl) return; + this.typeFieldsEl.empty(); + if (this.serverType === "stdio") { + this.renderStdioFields(); + } else { + this.renderUrlFields(); + } + } + renderStdioFields() { + if (!this.typeFieldsEl) return; + const cmdSetting = new import_obsidian7.Setting(this.typeFieldsEl).setName("Command").setDesc("Full command with arguments"); + cmdSetting.settingEl.addClass("claudian-mcp-cmd-setting"); + const cmdTextarea = cmdSetting.controlEl.createEl("textarea", { + cls: "claudian-mcp-cmd-textarea" + }); + cmdTextarea.value = this.command; + cmdTextarea.placeholder = "Docker exec -i mcp-server python -m src.server"; + cmdTextarea.rows = 2; + cmdTextarea.addEventListener("input", () => { + this.command = cmdTextarea.value; + }); + const envSetting = new import_obsidian7.Setting(this.typeFieldsEl).setName("Environment variables").setDesc("Key=value per line (optional)"); + envSetting.settingEl.addClass("claudian-mcp-env-setting"); + const envTextarea = envSetting.controlEl.createEl("textarea", { + cls: "claudian-mcp-env-textarea" + }); + envTextarea.value = this.env; + envTextarea.placeholder = "API_key=your-key"; + envTextarea.rows = 2; + envTextarea.addEventListener("input", () => { + this.env = envTextarea.value; + }); + } + renderUrlFields() { + if (!this.typeFieldsEl) return; + new import_obsidian7.Setting(this.typeFieldsEl).setName("URL").setDesc(this.serverType === "sse" ? "SSE endpoint URL" : "HTTP endpoint URL").addText((text) => { + text.setValue(this.url); + text.setPlaceholder("HTTP://localhost:3000/sse"); + text.onChange((value) => { + this.url = value; + }); + text.inputEl.addEventListener("keydown", (e2) => this.handleKeyDown(e2)); + }); + const headersSetting = new import_obsidian7.Setting(this.typeFieldsEl).setName("Headers").setDesc("HTTP headers (key=value per line)"); + headersSetting.settingEl.addClass("claudian-mcp-env-setting"); + const headersTextarea = headersSetting.controlEl.createEl("textarea", { + cls: "claudian-mcp-env-textarea" + }); + headersTextarea.value = this.headers; + headersTextarea.placeholder = "Authorization=bearer token\ncontent-type=application/JSON"; + headersTextarea.rows = 3; + headersTextarea.addEventListener("input", () => { + this.headers = headersTextarea.value; + }); + } + handleKeyDown(e2) { + if (e2.key === "Enter" && !e2.shiftKey && !e2.isComposing) { + e2.preventDefault(); + this.save(); + } else if (e2.key === "Escape" && !e2.isComposing) { + e2.preventDefault(); + this.close(); + } + } + save() { + var _a5, _b3, _c2; + const name = this.serverName.trim(); + if (!name) { + new import_obsidian7.Notice("Please enter a server name"); + (_a5 = this.nameInputEl) == null ? void 0 : _a5.focus(); + return; + } + if (!/^[a-zA-Z0-9._-]+$/.test(name)) { + new import_obsidian7.Notice("Server name can only contain letters, numbers, dots, hyphens, and underscores"); + (_b3 = this.nameInputEl) == null ? void 0 : _b3.focus(); + return; + } + let config2; + if (this.serverType === "stdio") { + const fullCommand = this.command.trim(); + if (!fullCommand) { + new import_obsidian7.Notice("Please enter a command"); + return; + } + const { cmd, args } = parseCommand(fullCommand); + const stdioConfig = { command: cmd }; + if (args.length > 0) { + stdioConfig.args = args; + } + const env = this.parseEnvString(this.env); + if (Object.keys(env).length > 0) { + stdioConfig.env = env; + } + config2 = stdioConfig; + } else { + const url2 = this.url.trim(); + if (!url2) { + new import_obsidian7.Notice("Please enter a URL"); + return; + } + if (this.serverType === "sse") { + const sseConfig = { type: "sse", url: url2 }; + const headers = this.parseEnvString(this.headers); + if (Object.keys(headers).length > 0) { + sseConfig.headers = headers; + } + config2 = sseConfig; + } else { + const httpConfig = { type: "http", url: url2 }; + const headers = this.parseEnvString(this.headers); + if (Object.keys(headers).length > 0) { + httpConfig.headers = headers; + } + config2 = httpConfig; + } + } + const server = { + name, + config: config2, + enabled: this.enabled, + contextSaving: this.contextSaving, + disabledTools: (_c2 = this.existingServer) == null ? void 0 : _c2.disabledTools + }; + this.onSave(server); + this.close(); + } + parseEnvString(envStr) { + const result = {}; + if (!envStr.trim()) return result; + for (const line of envStr.split("\n")) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith("#")) continue; + const eqIndex = trimmed.indexOf("="); + if (eqIndex === -1) continue; + const key = trimmed.substring(0, eqIndex).trim(); + const value = trimmed.substring(eqIndex + 1).trim(); + if (key) { + result[key] = value; + } + } + return result; + } + envRecordToString(env) { + if (!env) return ""; + return Object.entries(env).map(([key, value]) => `${key}=${value}`).join("\n"); + } + onClose() { + this.contentEl.empty(); + } +}; + +// src/features/settings/ui/McpTestModal.ts +var import_obsidian8 = require("obsidian"); +function formatToggleError(error48) { + if (!(error48 instanceof Error)) return "Failed to update tool setting"; + const msg = error48.message.toLowerCase(); + if (msg.includes("permission") || msg.includes("eacces")) { + return "Permission denied. Check .claude/ folder permissions."; + } + if (msg.includes("enospc") || msg.includes("disk full") || msg.includes("no space")) { + return "Disk full. Free up space and try again."; + } + if (msg.includes("json") || msg.includes("syntax")) { + return "Config file corrupted. Check .claude/mcp.json"; + } + return error48.message || "Failed to update tool setting"; +} +var SVG_NS = "http://www.w3.org/2000/svg"; +function appendSpinnerSvg(container) { + const svg = container.ownerDocument.createElementNS(SVG_NS, "svg"); + svg.setAttribute("viewBox", "0 0 24 24"); + svg.setAttribute("fill", "none"); + svg.setAttribute("stroke", "currentColor"); + svg.setAttribute("stroke-width", "2"); + const path27 = container.ownerDocument.createElementNS(SVG_NS, "path"); + path27.setAttribute( + "d", + "M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83" + ); + svg.appendChild(path27); + container.appendChild(svg); +} +var McpTestModal = class extends import_obsidian8.Modal { + constructor(app, serverName, initialDisabledTools, onToolToggle, onBulkToggle) { + super(app); + this.result = null; + this.loading = true; + this.contentEl_ = null; + this.toolToggles = /* @__PURE__ */ new Map(); + this.toolElements = /* @__PURE__ */ new Map(); + this.toggleAllBtn = null; + this.pendingToggle = false; + this.serverName = serverName; + this.disabledTools = new Set( + (initialDisabledTools != null ? initialDisabledTools : []).map((tool) => tool.trim()).filter((tool) => tool.length > 0) + ); + this.onToolToggle = onToolToggle; + this.onBulkToggle = onBulkToggle; + } + onOpen() { + this.setTitle(`Verify: ${this.serverName}`); + this.modalEl.addClass("claudian-mcp-test-modal"); + this.contentEl_ = this.contentEl; + this.renderLoading(); + } + setResult(result) { + this.result = result; + this.loading = false; + this.render(); + } + setError(error48) { + this.result = { success: false, tools: [], error: error48 }; + this.loading = false; + this.render(); + } + renderLoading() { + if (!this.contentEl_) return; + this.contentEl_.empty(); + const loadingEl = this.contentEl_.createDiv({ cls: "claudian-mcp-test-loading" }); + const spinnerEl = loadingEl.createDiv({ cls: "claudian-mcp-test-spinner" }); + appendSpinnerSvg(spinnerEl); + loadingEl.createSpan({ text: "Connecting to MCP server..." }); + } + render() { + if (!this.contentEl_) return; + this.contentEl_.empty(); + if (!this.result) { + this.renderLoading(); + return; + } + const statusEl = this.contentEl_.createDiv({ cls: "claudian-mcp-test-status" }); + const iconEl = statusEl.createSpan({ cls: "claudian-mcp-test-icon" }); + if (this.result.success) { + (0, import_obsidian8.setIcon)(iconEl, "check-circle"); + iconEl.addClass("success"); + } else { + (0, import_obsidian8.setIcon)(iconEl, "x-circle"); + iconEl.addClass("error"); + } + const textEl = statusEl.createSpan({ cls: "claudian-mcp-test-text" }); + if (this.result.success) { + let statusText = "Connected successfully"; + if (this.result.serverName) { + statusText += ` to ${this.result.serverName}`; + if (this.result.serverVersion) { + statusText += ` v${this.result.serverVersion}`; + } + } + textEl.setText(statusText); + } else { + textEl.setText("Connection failed"); + } + if (this.result.error) { + const errorEl = this.contentEl_.createDiv({ cls: "claudian-mcp-test-error" }); + errorEl.setText(this.result.error); + } + this.toolToggles.clear(); + this.toolElements.clear(); + if (this.result.tools.length > 0) { + const toolsSection = this.contentEl_.createDiv({ cls: "claudian-mcp-test-tools" }); + const toolsHeader = toolsSection.createDiv({ cls: "claudian-mcp-test-tools-header" }); + toolsHeader.setText(`Available Tools (${this.result.tools.length})`); + const toolsList = toolsSection.createDiv({ cls: "claudian-mcp-test-tools-list" }); + for (const tool of this.result.tools) { + this.renderTool(toolsList, tool); + } + } else if (this.result.success) { + const noToolsEl = this.contentEl_.createDiv({ cls: "claudian-mcp-test-no-tools" }); + noToolsEl.setText("No tools information available. Tools will be loaded when used in chat."); + } + const buttonContainer = this.contentEl_.createDiv({ cls: "claudian-mcp-test-buttons" }); + if (this.result.tools.length > 0 && this.onToolToggle) { + this.toggleAllBtn = buttonContainer.createEl("button", { + cls: "claudian-mcp-toggle-all-btn" + }); + this.updateToggleAllButton(); + this.toggleAllBtn.addEventListener("click", () => { + void this.handleToggleAll(); + }); + } + const closeBtn = buttonContainer.createEl("button", { + text: "Close", + cls: "mod-cta" + }); + closeBtn.addEventListener("click", () => this.close()); + } + renderTool(container, tool) { + const toolEl = container.createDiv({ cls: "claudian-mcp-test-tool" }); + const headerEl = toolEl.createDiv({ cls: "claudian-mcp-test-tool-header" }); + const iconEl = headerEl.createSpan({ cls: "claudian-mcp-test-tool-icon" }); + (0, import_obsidian8.setIcon)(iconEl, "wrench"); + const nameEl = headerEl.createSpan({ cls: "claudian-mcp-test-tool-name" }); + nameEl.setText(tool.name); + const toggleEl = headerEl.createDiv({ cls: "claudian-mcp-test-tool-toggle" }); + const toggleContainer = toggleEl.createDiv({ cls: "checkbox-container" }); + const checkbox = toggleContainer.createEl("input", { + type: "checkbox", + attr: { tabindex: "0" } + }); + const isEnabled = !this.disabledTools.has(tool.name); + checkbox.checked = isEnabled; + toggleContainer.toggleClass("is-enabled", isEnabled); + this.updateToolState(toolEl, isEnabled); + this.toolToggles.set(tool.name, { checkbox, container: toggleContainer }); + this.toolElements.set(tool.name, toolEl); + if (!this.onToolToggle) { + checkbox.disabled = true; + } else { + toggleContainer.addEventListener("click", (e2) => { + e2.preventDefault(); + e2.stopPropagation(); + if (checkbox.disabled) return; + checkbox.checked = !checkbox.checked; + void this.handleToolToggle(tool.name, checkbox, toggleContainer); + }); + } + if (tool.description) { + const descEl = toolEl.createDiv({ cls: "claudian-mcp-test-tool-desc" }); + descEl.setText(tool.description); + } + } + async handleToolToggle(toolName, checkbox, container) { + var _a5; + const toolEl = this.toolElements.get(toolName); + if (!toolEl) return; + const wasDisabled = this.disabledTools.has(toolName); + const nextDisabled = !checkbox.checked; + if (nextDisabled) { + this.disabledTools.add(toolName); + } else { + this.disabledTools.delete(toolName); + } + container.toggleClass("is-enabled", !nextDisabled); + this.updateToolState(toolEl, !nextDisabled); + this.updateToggleAllButton(); + checkbox.disabled = true; + try { + await ((_a5 = this.onToolToggle) == null ? void 0 : _a5.call(this, toolName, !nextDisabled)); + } catch (error48) { + if (nextDisabled) { + this.disabledTools.delete(toolName); + } else { + this.disabledTools.add(toolName); + } + checkbox.checked = !wasDisabled; + container.toggleClass("is-enabled", !wasDisabled); + this.updateToolState(toolEl, !wasDisabled); + this.updateToggleAllButton(); + new import_obsidian8.Notice(formatToggleError(error48)); + } finally { + checkbox.disabled = false; + } + } + updateToolState(toolEl, enabled) { + toolEl.toggleClass("claudian-mcp-test-tool-disabled", !enabled); + } + updateToggleAllButton() { + if (!this.toggleAllBtn || !this.result) return; + const allEnabled = this.disabledTools.size === 0; + const allDisabled = this.disabledTools.size === this.result.tools.length; + if (allEnabled) { + this.toggleAllBtn.setText("Disable all"); + this.toggleAllBtn.toggleClass("is-destructive", true); + } else { + this.toggleAllBtn.setText(allDisabled ? "Enable All" : "Enable All"); + this.toggleAllBtn.toggleClass("is-destructive", false); + } + } + async handleToggleAll() { + if (!this.result || this.pendingToggle || !this.onBulkToggle) return; + const allEnabled = this.disabledTools.size === 0; + const previousDisabled = new Set(this.disabledTools); + const newDisabledTools = allEnabled ? this.result.tools.map((t11) => t11.name) : []; + this.pendingToggle = true; + if (this.toggleAllBtn) this.toggleAllBtn.disabled = true; + for (const { checkbox } of this.toolToggles.values()) { + checkbox.disabled = true; + } + this.disabledTools = new Set(newDisabledTools); + for (const tool of this.result.tools) { + const toggle = this.toolToggles.get(tool.name); + const toolEl = this.toolElements.get(tool.name); + if (!toggle || !toolEl) continue; + const isEnabled = !this.disabledTools.has(tool.name); + toggle.checkbox.checked = isEnabled; + toggle.container.toggleClass("is-enabled", isEnabled); + this.updateToolState(toolEl, isEnabled); + } + this.updateToggleAllButton(); + try { + await this.onBulkToggle(newDisabledTools); + } catch (error48) { + this.disabledTools = previousDisabled; + for (const tool of this.result.tools) { + const toggle = this.toolToggles.get(tool.name); + const toolEl = this.toolElements.get(tool.name); + if (!toggle || !toolEl) continue; + const isEnabled = !this.disabledTools.has(tool.name); + toggle.checkbox.checked = isEnabled; + toggle.container.toggleClass("is-enabled", isEnabled); + this.updateToolState(toolEl, isEnabled); + } + this.updateToggleAllButton(); + new import_obsidian8.Notice(formatToggleError(error48)); + } + for (const { checkbox } of this.toolToggles.values()) { + checkbox.disabled = false; + } + this.pendingToggle = false; + if (this.toggleAllBtn) this.toggleAllBtn.disabled = false; + } + onClose() { + this.contentEl.empty(); + } +}; + +// src/features/settings/ui/McpSettingsManager.ts +var McpSettingsManager = class { + constructor(containerEl, deps) { + this.servers = []; + this.app = deps.app; + this.containerEl = containerEl; + this.mcpStorage = deps.mcpStorage; + this.broadcastMcpReload = deps.broadcastMcpReload; + void this.loadAndRender(); + } + async loadAndRender() { + this.servers = await this.mcpStorage.load(); + this.render(); + } + render() { + var _a5; + this.containerEl.empty(); + const headerEl = this.containerEl.createDiv({ cls: "claudian-mcp-header" }); + headerEl.createSpan({ text: "MCP Servers", cls: "claudian-mcp-label" }); + const addContainer = headerEl.createDiv({ cls: "claudian-mcp-add-container" }); + const addBtn = addContainer.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Add" } + }); + (0, import_obsidian9.setIcon)(addBtn, "plus"); + const dropdown = addContainer.createDiv({ cls: "claudian-mcp-add-dropdown" }); + const stdioOption = dropdown.createDiv({ cls: "claudian-mcp-add-option" }); + (0, import_obsidian9.setIcon)(stdioOption.createSpan({ cls: "claudian-mcp-add-option-icon" }), "terminal"); + stdioOption.createSpan({ text: "stdio (local command)" }); + stdioOption.addEventListener("click", () => { + dropdown.removeClass("is-visible"); + this.openModal(null, "stdio"); + }); + const httpOption = dropdown.createDiv({ cls: "claudian-mcp-add-option" }); + (0, import_obsidian9.setIcon)(httpOption.createSpan({ cls: "claudian-mcp-add-option-icon" }), "globe"); + httpOption.createSpan({ text: "http / sse (remote)" }); + httpOption.addEventListener("click", () => { + dropdown.removeClass("is-visible"); + this.openModal(null, "http"); + }); + const importOption = dropdown.createDiv({ cls: "claudian-mcp-add-option" }); + (0, import_obsidian9.setIcon)(importOption.createSpan({ cls: "claudian-mcp-add-option-icon" }), "clipboard-paste"); + importOption.createSpan({ text: "Import from clipboard" }); + importOption.addEventListener("click", () => { + dropdown.removeClass("is-visible"); + void this.importFromClipboard(); + }); + addBtn.addEventListener("click", (e2) => { + e2.stopPropagation(); + dropdown.toggleClass("is-visible", !dropdown.hasClass("is-visible")); + }); + ((_a5 = this.containerEl.ownerDocument) != null ? _a5 : window.document).addEventListener("click", () => { + dropdown.removeClass("is-visible"); + }); + if (this.servers.length === 0) { + const emptyEl = this.containerEl.createDiv({ cls: "claudian-mcp-empty" }); + emptyEl.setText('No mcp servers configured. Click "add" to add one.'); + return; + } + const listEl = this.containerEl.createDiv({ cls: "claudian-mcp-list" }); + for (const server of this.servers) { + this.renderServerItem(listEl, server); + } + } + renderServerItem(listEl, server) { + const itemEl = listEl.createDiv({ cls: "claudian-mcp-item" }); + if (!server.enabled) { + itemEl.addClass("claudian-mcp-item-disabled"); + } + const statusEl = itemEl.createDiv({ cls: "claudian-mcp-status" }); + statusEl.addClass( + server.enabled ? "claudian-mcp-status-enabled" : "claudian-mcp-status-disabled" + ); + const infoEl = itemEl.createDiv({ cls: "claudian-mcp-info" }); + const nameRow = infoEl.createDiv({ cls: "claudian-mcp-name-row" }); + const nameEl = nameRow.createSpan({ cls: "claudian-mcp-name" }); + nameEl.setText(server.name); + const serverType = getMcpServerType(server.config); + const typeEl = nameRow.createSpan({ cls: "claudian-mcp-type-badge" }); + typeEl.setText(serverType); + if (server.contextSaving) { + const csEl = nameRow.createSpan({ cls: "claudian-mcp-context-saving-badge" }); + csEl.setText("@"); + csEl.setAttribute("title", "Context-saving: mention with @" + server.name + " to enable"); + } + const previewEl = infoEl.createDiv({ cls: "claudian-mcp-preview" }); + if (server.description) { + previewEl.setText(server.description); + } else { + previewEl.setText(this.getServerPreview(server, serverType)); + } + const actionsEl = itemEl.createDiv({ cls: "claudian-mcp-actions" }); + const testBtn = actionsEl.createEl("button", { + cls: "claudian-mcp-action-btn", + attr: { "aria-label": "Verify (show tools)" } + }); + (0, import_obsidian9.setIcon)(testBtn, "zap"); + testBtn.addEventListener("click", () => { + void this.testServer(server); + }); + const toggleBtn = actionsEl.createEl("button", { + cls: "claudian-mcp-action-btn", + attr: { "aria-label": server.enabled ? "Disable" : "Enable" } + }); + (0, import_obsidian9.setIcon)(toggleBtn, server.enabled ? "toggle-right" : "toggle-left"); + toggleBtn.addEventListener("click", () => { + void this.toggleServer(server); + }); + const editBtn = actionsEl.createEl("button", { + cls: "claudian-mcp-action-btn", + attr: { "aria-label": "Edit" } + }); + (0, import_obsidian9.setIcon)(editBtn, "pencil"); + editBtn.addEventListener("click", () => this.openModal(server)); + const deleteBtn = actionsEl.createEl("button", { + cls: "claudian-mcp-action-btn claudian-mcp-delete-btn", + attr: { "aria-label": "Delete" } + }); + (0, import_obsidian9.setIcon)(deleteBtn, "trash-2"); + deleteBtn.addEventListener("click", () => { + void this.deleteServer(server); + }); + } + async testServer(server) { + const modal = new McpTestModal( + this.app, + server.name, + server.disabledTools, + async (toolName, enabled) => { + await this.updateDisabledTool(server, toolName, enabled); + }, + async (disabledTools) => { + await this.updateAllDisabledTools(server, disabledTools); + } + ); + modal.open(); + try { + const result = await testMcpServer(server); + modal.setResult(result); + } catch (error48) { + modal.setError(error48 instanceof Error ? error48.message : "Verification failed"); + } + } + /** Rolls back on save failure; warns on reload failure (since save succeeded). */ + async updateServerDisabledTools(server, newDisabledTools) { + const previous = server.disabledTools ? [...server.disabledTools] : void 0; + server.disabledTools = newDisabledTools; + try { + await this.mcpStorage.save(this.servers); + } catch (error48) { + server.disabledTools = previous; + throw error48; + } + try { + await this.broadcastMcpReload(); + } catch (e2) { + new import_obsidian9.Notice("Setting saved but reload failed. Changes will apply on next session."); + } + } + async updateDisabledTool(server, toolName, enabled) { + var _a5; + const disabledTools = new Set((_a5 = server.disabledTools) != null ? _a5 : []); + if (enabled) { + disabledTools.delete(toolName); + } else { + disabledTools.add(toolName); + } + await this.updateServerDisabledTools( + server, + disabledTools.size > 0 ? Array.from(disabledTools) : void 0 + ); + } + async updateAllDisabledTools(server, disabledTools) { + await this.updateServerDisabledTools( + server, + disabledTools.length > 0 ? disabledTools : void 0 + ); + } + getServerPreview(server, type) { + var _a5; + if (type === "stdio") { + const config2 = server.config; + const args = ((_a5 = config2.args) == null ? void 0 : _a5.join(" ")) || ""; + return args ? `${config2.command} ${args}` : config2.command; + } else { + const config2 = server.config; + return config2.url; + } + } + openModal(existing, initialType) { + const modal = new McpServerModal( + this.app, + existing, + (server) => { + void this.saveServer(server, existing).catch((error48) => { + new import_obsidian9.Notice(error48 instanceof Error ? error48.message : "Failed to save MCP server"); + }); + }, + initialType + ); + modal.open(); + } + async importFromClipboard() { + try { + const text = await navigator.clipboard.readText(); + if (!text.trim()) { + new import_obsidian9.Notice("Clipboard is empty"); + return; + } + const parsed = tryParseClipboardConfig(text); + if (!parsed || parsed.servers.length === 0) { + new import_obsidian9.Notice("No valid mcp configuration found in clipboard"); + return; + } + if (parsed.needsName || parsed.servers.length === 1) { + const server = parsed.servers[0]; + const type = getMcpServerType(server.config); + const modal = new McpServerModal( + this.app, + null, + (savedServer) => { + void this.saveServer(savedServer, null).catch((error48) => { + new import_obsidian9.Notice(error48 instanceof Error ? error48.message : "Failed to save MCP server"); + }); + }, + type, + server + // Pre-fill with parsed config + ); + modal.open(); + if (parsed.needsName) { + new import_obsidian9.Notice("Enter a name for the server"); + } + return; + } + await this.importServers(parsed.servers); + } catch (e2) { + new import_obsidian9.Notice("Failed to read clipboard"); + } + } + async saveServer(server, existing) { + if (existing) { + const index = this.servers.findIndex((s2) => s2.name === existing.name); + if (index !== -1) { + if (server.name !== existing.name) { + const conflict = this.servers.find((s2) => s2.name === server.name); + if (conflict) { + new import_obsidian9.Notice(`Server "${server.name}" already exists`); + return; + } + } + this.servers[index] = server; + } + } else { + const conflict = this.servers.find((s2) => s2.name === server.name); + if (conflict) { + new import_obsidian9.Notice(`Server "${server.name}" already exists`); + return; + } + this.servers.push(server); + } + await this.mcpStorage.save(this.servers); + await this.broadcastMcpReload(); + this.render(); + new import_obsidian9.Notice(existing ? `MCP server "${server.name}" updated` : `MCP server "${server.name}" added`); + } + async importServers(servers) { + const added = []; + const skipped = []; + for (const server of servers) { + const name = server.name.trim(); + if (!name || !/^[a-zA-Z0-9._-]+$/.test(name)) { + skipped.push(server.name || ""); + continue; + } + const conflict = this.servers.find((s2) => s2.name === name); + if (conflict) { + skipped.push(name); + continue; + } + this.servers.push({ + name, + config: server.config, + enabled: DEFAULT_MCP_SERVER.enabled, + contextSaving: DEFAULT_MCP_SERVER.contextSaving + }); + added.push(name); + } + if (added.length === 0) { + new import_obsidian9.Notice("No new mcp servers imported"); + return; + } + await this.mcpStorage.save(this.servers); + await this.broadcastMcpReload(); + this.render(); + let message = `Imported ${added.length} MCP server${added.length > 1 ? "s" : ""}`; + if (skipped.length > 0) { + message += ` (${skipped.length} skipped)`; + } + new import_obsidian9.Notice(message); + } + async toggleServer(server) { + server.enabled = !server.enabled; + await this.mcpStorage.save(this.servers); + await this.broadcastMcpReload(); + this.render(); + new import_obsidian9.Notice(`MCP server "${server.name}" ${server.enabled ? "enabled" : "disabled"}`); + } + async deleteServer(server) { + if (!await confirmDelete(this.app, `Delete MCP server "${server.name}"?`)) { + return; + } + this.servers = this.servers.filter((s2) => s2.name !== server.name); + await this.mcpStorage.save(this.servers); + await this.broadcastMcpReload(); + this.render(); + new import_obsidian9.Notice(`MCP server "${server.name}" deleted`); + } + /** Refresh the server list (call after external changes). */ + refresh() { + void this.loadAndRender(); + } +}; + +// src/providers/claude/ui/ClaudeSettingsTab.ts +init_env(); +init_path(); + +// src/providers/claude/modelLabels.ts +function getFamilyDisplayName(family) { + return family.charAt(0).toUpperCase() + family.slice(1).toLowerCase(); +} +function formatClaudeModelDateTag(date7) { + if (!date7 || date7.length < 6) { + return null; + } + return `(${date7.slice(2, 6)})`; +} +function getCustomModelLabelSource(modelId) { + if (!modelId.includes("/")) { + return modelId; + } + return modelId.split("/").pop() || modelId; +} +function formatGenericCustomModelLabel(labelSource) { + return labelSource.replace(/-/g, " ").replace(/\b\w/g, (letter) => letter.toUpperCase()); +} +function formatCustomModelLabel(modelId) { + const labelSource = getCustomModelLabelSource(modelId); + const claudeLabel = formatClaudeCustomModelLabel(labelSource); + if (claudeLabel) { + return claudeLabel; + } + return modelId.includes("/") ? labelSource : formatGenericCustomModelLabel(labelSource); +} +function formatClaudeCustomModelLabel(labelSource) { + const trimmed = labelSource.trim(); + if (!trimmed) { + return null; + } + const is1M = trimmed.toLowerCase().endsWith("[1m]"); + const without1M = is1M ? trimmed.slice(0, -4) : trimmed; + const claudePrefixIndex = without1M.toLowerCase().indexOf("claude-"); + const candidate = claudePrefixIndex >= 0 ? without1M.slice(claudePrefixIndex) : without1M; + const versionedMatch = candidate.match( + /^claude-(haiku|sonnet|opus)-(\d+)-(\d+)(?:-(\d{8}))?(?:-v\d+:\d+)?$/i + ); + if (versionedMatch) { + const [, family, major, minor, date7] = versionedMatch; + const suffixes = [ + formatClaudeModelDateTag(date7), + is1M ? "(1M)" : null + ].filter(Boolean).join(" "); + return `${getFamilyDisplayName(family)} ${major}.${minor}${suffixes ? ` ${suffixes}` : ""}`; + } + const majorOnlyMatch = candidate.match( + /^claude-(haiku|sonnet|opus)-(\d+)(?:-(\d{8}))?(?:-v\d+:\d+)?$/i + ); + if (majorOnlyMatch) { + const [, family, major, date7] = majorOnlyMatch; + const suffixes = [ + formatClaudeModelDateTag(date7), + is1M ? "(1M)" : null + ].filter(Boolean).join(" "); + return `${getFamilyDisplayName(family)} ${major}${suffixes ? ` ${suffixes}` : ""}`; + } + return null; +} + +// src/providers/claude/env/claudeModelEnv.ts +var CUSTOM_MODEL_ENV_KEYS = [ + "ANTHROPIC_MODEL", + "ANTHROPIC_DEFAULT_OPUS_MODEL", + "ANTHROPIC_DEFAULT_SONNET_MODEL", + "ANTHROPIC_DEFAULT_HAIKU_MODEL" +]; +function getModelTypeFromEnvKey(envKey) { + if (envKey === "ANTHROPIC_MODEL") return "model"; + const match = envKey.match(/ANTHROPIC_DEFAULT_(\w+)_MODEL/); + return match ? match[1].toLowerCase() : envKey; +} +function getModelsFromEnvironment(envVars, modelAliases = {}) { + var _a5; + const modelMap = /* @__PURE__ */ new Map(); + for (const envKey of CUSTOM_MODEL_ENV_KEYS) { + const type = getModelTypeFromEnvKey(envKey); + const modelValue = envVars[envKey]; + if (modelValue) { + const label = (_a5 = modelAliases[modelValue]) != null ? _a5 : formatCustomModelLabel(modelValue); + if (!modelMap.has(modelValue)) { + modelMap.set(modelValue, { types: [type], label }); + } else { + modelMap.get(modelValue).types.push(type); + } + } + } + const models = []; + const typePriority = { "model": 4, "haiku": 3, "sonnet": 2, "opus": 1 }; + const sortedEntries = Array.from(modelMap.entries()).sort(([, aInfo], [, bInfo]) => { + const aPriority = Math.max(...aInfo.types.map((t11) => typePriority[t11] || 0)); + const bPriority = Math.max(...bInfo.types.map((t11) => typePriority[t11] || 0)); + return bPriority - aPriority; + }); + for (const [modelValue, info] of sortedEntries) { + const sortedTypes = info.types.sort( + (a, b2) => (typePriority[b2] || 0) - (typePriority[a] || 0) + ); + models.push({ + value: modelValue, + label: info.label, + description: `Custom model (${sortedTypes.join(", ")})` + }); + } + return models; +} +function getCustomModelIds(envVars) { + const modelIds = /* @__PURE__ */ new Set(); + for (const envKey of CUSTOM_MODEL_ENV_KEYS) { + const modelId = envVars[envKey]; + if (modelId) { + modelIds.add(modelId); + } + } + return modelIds; +} + +// src/providers/claude/types/models.ts +var DEFAULT_CLAUDE_MODELS = [ + { value: "haiku", label: "Haiku", description: "Fast and efficient" }, + { value: "sonnet", label: "Sonnet", description: "Balanced performance" }, + { value: "sonnet[1m]", label: "Sonnet 1M", description: "Balanced performance (1M context window)" }, + { value: "opus", label: "Opus", description: "Most capable" }, + { value: "opus[1m]", label: "Opus 1M", description: "Most capable (1M context window)" } +]; +var EFFORT_LEVELS = [ + { value: "low", label: "Low" }, + { value: "medium", label: "Med" }, + { value: "high", label: "High" }, + { value: "xhigh", label: "XHigh" }, + { value: "max", label: "Max" } +]; +var DEFAULT_EFFORT_LEVEL = { + "haiku": "high", + "sonnet": "high", + "sonnet[1m]": "high", + "opus": "high", + "opus[1m]": "high" +}; +var ONE_M_SUFFIX = "[1m]"; +var DEFAULT_MODEL_VALUES = new Set(DEFAULT_CLAUDE_MODELS.map((m4) => m4.value.toLowerCase())); +function normalizeModelId(model) { + return model.trim().toLowerCase(); +} +function has1MContextSuffix(model) { + return normalizeModelId(model).endsWith(ONE_M_SUFFIX); +} +function isBuiltInFamilyVariant(model, family) { + const normalized = normalizeModelId(model); + return normalized === family || normalized === `${family}${ONE_M_SUFFIX}`; +} +function isValidContextLimit(limit) { + return typeof limit === "number" && limit > 0 && !isNaN(limit) && isFinite(limit); +} +function resolveCustomContextLimit(model, customLimits) { + if (!customLimits) { + return null; + } + const exactLimit = customLimits[model]; + if (isValidContextLimit(exactLimit)) { + return exactLimit; + } + const normalizedModel = normalizeModelId(model); + const matchingLimits = Object.entries(customLimits).filter(([key, limit]) => key !== model && normalizeModelId(key) === normalizedModel && isValidContextLimit(limit)).map(([, limit]) => limit); + return matchingLimits.length === 1 ? matchingLimits[0] : null; +} +function isDefaultClaudeModel(model) { + return DEFAULT_MODEL_VALUES.has(normalizeModelId(model)); +} +function supportsXHighEffort(model) { + const normalized = normalizeModelId(model); + if (isBuiltInFamilyVariant(normalized, "opus")) return true; + return /claude-opus-(4-[7-9]|[5-9])/.test(normalized); +} +function normalizeEffortLevel(model, effortLevel) { + var _a5; + const allowsXHigh = supportsXHighEffort(model); + const isSupported = EFFORT_LEVELS.some( + (level) => level.value === effortLevel && (allowsXHigh || level.value !== "xhigh") + ); + if (isSupported) { + return effortLevel; + } + return (_a5 = DEFAULT_EFFORT_LEVEL[normalizeModelId(model)]) != null ? _a5 : "high"; +} +function resolveEffortLevel(model, effortLevel) { + return normalizeEffortLevel(model, effortLevel); +} +var CONTEXT_WINDOW_STANDARD = 2e5; +var CONTEXT_WINDOW_1M = 1e6; +function filterVisibleModelOptions(models, enableOpus1M, enableSonnet1M) { + return models.filter((model) => { + if (isBuiltInFamilyVariant(model.value, "opus")) { + return enableOpus1M ? has1MContextSuffix(model.value) : normalizeModelId(model.value) === "opus"; + } + if (isBuiltInFamilyVariant(model.value, "sonnet")) { + return enableSonnet1M ? has1MContextSuffix(model.value) : normalizeModelId(model.value) === "sonnet"; + } + return true; + }); +} +function normalizeVisibleModelVariant(model, enableOpus1M, enableSonnet1M) { + if (isBuiltInFamilyVariant(model, "opus")) { + return enableOpus1M ? "opus[1m]" : "opus"; + } + if (isBuiltInFamilyVariant(model, "sonnet")) { + return enableSonnet1M ? "sonnet[1m]" : "sonnet"; + } + return model; +} +function getContextWindowSize(model, customLimits) { + const customLimit = resolveCustomContextLimit(model, customLimits); + if (customLimit !== null) { + return customLimit; + } + if (has1MContextSuffix(model)) { + return CONTEXT_WINDOW_1M; + } + return CONTEXT_WINDOW_STANDARD; +} + +// src/providers/claude/modelOptions.ts +function parseConfiguredCustomModelIds(value) { + const modelIds = []; + const seen = /* @__PURE__ */ new Set(); + for (const line of value.split(/\r?\n/)) { + const modelId = line.trim(); + if (!modelId || seen.has(modelId)) { + continue; + } + seen.add(modelId); + modelIds.push(modelId); + } + return modelIds; +} +function normalizeCustomModelAliases(value) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const aliases = {}; + for (const [rawModelId, rawAlias] of Object.entries(value)) { + if (typeof rawAlias !== "string") { + continue; + } + const modelId = rawModelId.trim(); + const alias = rawAlias.trim(); + if (modelId && alias) { + aliases[modelId] = alias; + } + } + return aliases; +} +function getClaudeModelOptions(settings11) { + var _a5; + const customModelAliases = normalizeCustomModelAliases(settings11.customModelAliases); + const customModels = getModelsFromEnvironment( + getRuntimeEnvironmentVariables(settings11, "claude"), + customModelAliases + ); + if (customModels.length > 0) { + return customModels; + } + const claudeSettings = getClaudeProviderSettings(settings11); + const models = filterVisibleModelOptions( + [...DEFAULT_CLAUDE_MODELS], + claudeSettings.enableOpus1M, + claudeSettings.enableSonnet1M + ); + const seenValues = new Set(models.map((model) => model.value)); + for (const modelId of parseConfiguredCustomModelIds(claudeSettings.customModels)) { + if (seenValues.has(modelId)) { + continue; + } + seenValues.add(modelId); + models.push({ + value: modelId, + label: (_a5 = customModelAliases[modelId]) != null ? _a5 : formatCustomModelLabel(modelId), + description: "Custom model" + }); + } + return models; +} +function resolveClaudeModelSelection(settings11, currentModel) { + var _a5, _b3; + const modelOptions = getClaudeModelOptions(settings11); + if (currentModel && modelOptions.some((option) => option.value === currentModel)) { + return currentModel; + } + const lastModel = getClaudeProviderSettings(settings11).lastModel; + if (lastModel && modelOptions.some((option) => option.value === lastModel)) { + return lastModel; + } + return (_b3 = (_a5 = modelOptions[0]) == null ? void 0 : _a5.value) != null ? _b3 : null; +} + +// src/providers/claude/ui/AgentSettings.ts +var import_obsidian10 = require("obsidian"); +var MODEL_OPTIONS = [ + { value: "inherit", label: "Inherit" }, + { value: "sonnet", label: "Sonnet" }, + { value: "opus", label: "Opus" }, + { value: "haiku", label: "Haiku" } +]; +var AgentModal = class extends import_obsidian10.Modal { + constructor(app, existingAgent, getAvailableAgents, onSave) { + super(app); + this.existingAgent = existingAgent; + this.getAvailableAgents = getAvailableAgents; + this.onSave = onSave; + } + onOpen() { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j; + this.setTitle( + this.existingAgent ? t10("settings.subagents.modal.titleEdit") : t10("settings.subagents.modal.titleAdd") + ); + this.modalEl.addClass("claudian-sp-modal"); + const { contentEl } = this; + let nameInput; + let descInput; + let modelValue = (_b3 = (_a5 = this.existingAgent) == null ? void 0 : _a5.model) != null ? _b3 : "inherit"; + let toolsInput; + let disallowedToolsInput; + let skillsInput; + new import_obsidian10.Setting(contentEl).setName(t10("settings.subagents.modal.name")).setDesc(t10("settings.subagents.modal.nameDesc")).addText((text) => { + var _a6; + nameInput = text.inputEl; + text.setValue(((_a6 = this.existingAgent) == null ? void 0 : _a6.name) || "").setPlaceholder(t10("settings.subagents.modal.namePlaceholder")); + }); + new import_obsidian10.Setting(contentEl).setName(t10("settings.subagents.modal.description")).setDesc(t10("settings.subagents.modal.descriptionDesc")).addText((text) => { + var _a6; + descInput = text.inputEl; + text.setValue(((_a6 = this.existingAgent) == null ? void 0 : _a6.description) || "").setPlaceholder(t10("settings.subagents.modal.descriptionPlaceholder")); + }); + const details = contentEl.createEl("details", { cls: "claudian-sp-advanced-section" }); + details.createEl("summary", { + text: t10("settings.subagents.modal.advancedOptions"), + cls: "claudian-sp-advanced-summary" + }); + if (((_c2 = this.existingAgent) == null ? void 0 : _c2.model) && this.existingAgent.model !== "inherit" || ((_e2 = (_d = this.existingAgent) == null ? void 0 : _d.tools) == null ? void 0 : _e2.length) || ((_g = (_f2 = this.existingAgent) == null ? void 0 : _f2.disallowedTools) == null ? void 0 : _g.length) || ((_i = (_h2 = this.existingAgent) == null ? void 0 : _h2.skills) == null ? void 0 : _i.length)) { + details.open = true; + } + new import_obsidian10.Setting(details).setName(t10("settings.subagents.modal.model")).setDesc(t10("settings.subagents.modal.modelDesc")).addDropdown((dropdown) => { + for (const opt of MODEL_OPTIONS) { + dropdown.addOption(opt.value, opt.label); + } + dropdown.setValue(modelValue).onChange((value) => { + modelValue = value; + }); + }); + new import_obsidian10.Setting(details).setName(t10("settings.subagents.modal.tools")).setDesc(t10("settings.subagents.modal.toolsDesc")).addText((text) => { + var _a6, _b4; + toolsInput = text.inputEl; + text.setValue(((_b4 = (_a6 = this.existingAgent) == null ? void 0 : _a6.tools) == null ? void 0 : _b4.join(", ")) || ""); + }); + new import_obsidian10.Setting(details).setName(t10("settings.subagents.modal.disallowedTools")).setDesc(t10("settings.subagents.modal.disallowedToolsDesc")).addText((text) => { + var _a6, _b4; + disallowedToolsInput = text.inputEl; + text.setValue(((_b4 = (_a6 = this.existingAgent) == null ? void 0 : _a6.disallowedTools) == null ? void 0 : _b4.join(", ")) || ""); + }); + new import_obsidian10.Setting(details).setName(t10("settings.subagents.modal.skills")).setDesc(t10("settings.subagents.modal.skillsDesc")).addText((text) => { + var _a6, _b4; + skillsInput = text.inputEl; + text.setValue(((_b4 = (_a6 = this.existingAgent) == null ? void 0 : _a6.skills) == null ? void 0 : _b4.join(", ")) || ""); + }); + new import_obsidian10.Setting(contentEl).setName(t10("settings.subagents.modal.prompt")).setDesc(t10("settings.subagents.modal.promptDesc")); + const contentArea = contentEl.createEl("textarea", { + cls: "claudian-sp-content-area", + attr: { + rows: "10", + placeholder: t10("settings.subagents.modal.promptPlaceholder") + } + }); + contentArea.value = ((_j = this.existingAgent) == null ? void 0 : _j.prompt) || ""; + const buttonContainer = contentEl.createDiv({ cls: "claudian-sp-modal-buttons" }); + const cancelBtn = buttonContainer.createEl("button", { + text: t10("common.cancel"), + cls: "claudian-cancel-btn" + }); + cancelBtn.addEventListener("click", () => this.close()); + const saveBtn = buttonContainer.createEl("button", { + text: t10("common.save"), + cls: "claudian-save-btn" + }); + saveBtn.addEventListener("click", () => { + void (async () => { + var _a6, _b4, _c3, _d2; + const name = nameInput.value.trim(); + const nameError = validateAgentName(name); + if (nameError) { + new import_obsidian10.Notice(nameError); + return; + } + const description = descInput.value.trim(); + if (!description) { + new import_obsidian10.Notice(t10("settings.subagents.descriptionRequired")); + return; + } + const prompt = contentArea.value; + if (!prompt.trim()) { + new import_obsidian10.Notice(t10("settings.subagents.promptRequired")); + return; + } + const allAgents = this.getAvailableAgents(); + const duplicate = allAgents.find( + (a) => { + var _a7; + return a.id.toLowerCase() === name.toLowerCase() && a.id !== ((_a7 = this.existingAgent) == null ? void 0 : _a7.id); + } + ); + if (duplicate) { + new import_obsidian10.Notice(t10("settings.subagents.duplicateName", { name })); + return; + } + const parseList = (input) => { + const val = input.value.trim(); + if (!val) return void 0; + return val.split(",").map((s2) => s2.trim()).filter(Boolean); + }; + const agent = { + id: name, + name, + description, + prompt, + tools: parseList(toolsInput), + disallowedTools: parseList(disallowedToolsInput), + model: modelValue || "inherit", + source: "vault", + filePath: (_a6 = this.existingAgent) == null ? void 0 : _a6.filePath, + skills: parseList(skillsInput), + permissionMode: (_b4 = this.existingAgent) == null ? void 0 : _b4.permissionMode, + hooks: (_c3 = this.existingAgent) == null ? void 0 : _c3.hooks, + extraFrontmatter: (_d2 = this.existingAgent) == null ? void 0 : _d2.extraFrontmatter + }; + try { + await this.onSave(agent); + } catch (err) { + const message = err instanceof Error ? err.message : "Unknown error"; + new import_obsidian10.Notice(t10("settings.subagents.saveFailed", { message })); + return; + } + this.close(); + })(); + }); + } + onClose() { + this.contentEl.empty(); + } +}; +var AgentSettings = class { + constructor(containerEl, deps) { + this.app = deps.app; + this.containerEl = containerEl; + this.agentManager = deps.agentManager; + this.agentStorage = deps.agentStorage; + this.render(); + } + render() { + this.containerEl.empty(); + const headerEl = this.containerEl.createDiv({ cls: "claudian-sp-header" }); + headerEl.createSpan({ text: t10("settings.subagents.name"), cls: "claudian-sp-label" }); + const actionsEl = headerEl.createDiv({ cls: "claudian-sp-header-actions" }); + const refreshBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": t10("common.refresh") } + }); + (0, import_obsidian10.setIcon)(refreshBtn, "refresh-cw"); + refreshBtn.addEventListener("click", () => { + void this.refreshAgents(); + }); + const addBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": t10("common.add") } + }); + (0, import_obsidian10.setIcon)(addBtn, "plus"); + addBtn.addEventListener("click", () => { + void this.openAgentModal(null); + }); + const allAgents = this.agentManager.getAvailableAgents(); + const vaultAgents = allAgents.filter((a) => a.source === "vault"); + if (vaultAgents.length === 0) { + const emptyEl = this.containerEl.createDiv({ cls: "claudian-sp-empty-state" }); + emptyEl.setText(t10("settings.subagents.noAgents")); + return; + } + const listEl = this.containerEl.createDiv({ cls: "claudian-sp-list" }); + for (const agent of vaultAgents) { + this.renderAgentItem(listEl, agent); + } + } + renderAgentItem(listEl, agent) { + const itemEl = listEl.createDiv({ cls: "claudian-sp-item" }); + const infoEl = itemEl.createDiv({ cls: "claudian-sp-info" }); + const headerRow = infoEl.createDiv({ cls: "claudian-sp-item-header" }); + const nameEl = headerRow.createSpan({ cls: "claudian-sp-item-name" }); + nameEl.setText(agent.name); + if (agent.description) { + const descEl = infoEl.createDiv({ cls: "claudian-sp-item-desc" }); + descEl.setText(agent.description); + } + const actionsEl = itemEl.createDiv({ cls: "claudian-sp-item-actions" }); + const editBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": t10("common.edit") } + }); + (0, import_obsidian10.setIcon)(editBtn, "pencil"); + editBtn.addEventListener("click", () => { + void this.openAgentModal(agent); + }); + const deleteBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn claudian-settings-delete-btn", + attr: { "aria-label": t10("common.delete") } + }); + (0, import_obsidian10.setIcon)(deleteBtn, "trash-2"); + deleteBtn.addEventListener("click", () => { + void (async () => { + const confirmed = await confirmDelete( + this.app, + t10("settings.subagents.deleteConfirm", { name: agent.name }) + ); + if (!confirmed) return; + try { + await this.deleteAgent(agent); + } catch (err) { + const message = err instanceof Error ? err.message : "Unknown error"; + new import_obsidian10.Notice(t10("settings.subagents.deleteFailed", { message })); + } + })(); + }); + } + async refreshAgents() { + try { + await this.agentManager.loadAgents(); + this.render(); + } catch (err) { + const message = err instanceof Error ? err.message : "Unknown error"; + new import_obsidian10.Notice(t10("settings.subagents.refreshFailed", { message })); + } + } + async openAgentModal(existingAgent) { + var _a5; + let fresh; + if (existingAgent) { + try { + fresh = (_a5 = await this.agentStorage.load(existingAgent)) != null ? _a5 : existingAgent; + } catch (err) { + const message = err instanceof Error ? err.message : "Unknown error"; + new import_obsidian10.Notice(`Failed to load subagent "${existingAgent.name}": ${message}`); + return; + } + } else { + fresh = null; + } + new AgentModal( + this.app, + fresh, + () => this.agentManager.getAvailableAgents(), + (agent) => this.saveAgent(agent, fresh) + ).open(); + } + async saveAgent(agent, existing) { + if (existing && existing.name !== agent.name) { + await this.agentStorage.save({ ...agent, filePath: void 0 }); + try { + await this.agentStorage.delete(existing); + } catch (e2) { + new import_obsidian10.Notice(t10("settings.subagents.renameCleanupFailed", { name: existing.name })); + } + } else { + await this.agentStorage.save(agent); + } + try { + await this.agentManager.loadAgents(); + } catch (e2) { + } + this.render(); + new import_obsidian10.Notice( + existing ? t10("settings.subagents.updated", { name: agent.name }) : t10("settings.subagents.created", { name: agent.name }) + ); + } + async deleteAgent(agent) { + await this.agentStorage.delete(agent); + try { + await this.agentManager.loadAgents(); + } catch (e2) { + } + this.render(); + new import_obsidian10.Notice(t10("settings.subagents.deleted", { name: agent.name })); + } +}; + +// src/shared/icons.ts +var SVG_NS2 = "http://www.w3.org/2000/svg"; +var MCP_ICON_PATHS = [ + "M15.688 2.343a2.588 2.588 0 00-3.61 0l-9.626 9.44a.863.863 0 01-1.203 0 .823.823 0 010-1.18l9.626-9.44a4.313 4.313 0 016.016 0 4.116 4.116 0 011.204 3.54 4.3 4.3 0 013.609 1.18l.05.05a4.115 4.115 0 010 5.9l-8.706 8.537a.274.274 0 000 .393l1.788 1.754a.823.823 0 010 1.18.863.863 0 01-1.203 0l-1.788-1.753a1.92 1.92 0 010-2.754l8.706-8.538a2.47 2.47 0 000-3.54l-.05-.049a2.588 2.588 0 00-3.607-.003l-7.172 7.034-.002.002-.098.097a.863.863 0 01-1.204 0 .823.823 0 010-1.18l7.273-7.133a2.47 2.47 0 00-.003-3.537z", + "M14.485 4.703a.823.823 0 000-1.18.863.863 0 00-1.204 0l-7.119 6.982a4.115 4.115 0 000 5.9 4.314 4.314 0 006.016 0l7.12-6.982a.823.823 0 000-1.18.863.863 0 00-1.204 0l-7.119 6.982a2.588 2.588 0 01-3.61 0 2.47 2.47 0 010-3.54l7.12-6.982z" +]; +function createSvgElement(ownerDocument, tagName) { + return ownerDocument.createElementNS(SVG_NS2, tagName); +} +function appendMcpIcon(container) { + container.empty(); + const svg = createSvgElement(container.ownerDocument, "svg"); + svg.setAttribute("fill", "currentColor"); + svg.setAttribute("fill-rule", "evenodd"); + svg.setAttribute("height", "1em"); + svg.setAttribute("viewBox", "0 0 24 24"); + svg.setAttribute("width", "1em"); + const title = createSvgElement(container.ownerDocument, "title"); + title.textContent = "MCP"; + svg.appendChild(title); + for (const pathData of MCP_ICON_PATHS) { + const path27 = createSvgElement(container.ownerDocument, "path"); + path27.setAttribute("d", pathData); + svg.appendChild(path27); + } + container.appendChild(svg); +} +function appendCheckIcon(container) { + container.empty(); + const svg = createSvgElement(container.ownerDocument, "svg"); + svg.setAttribute("width", "12"); + svg.setAttribute("height", "12"); + svg.setAttribute("viewBox", "0 0 24 24"); + svg.setAttribute("fill", "none"); + svg.setAttribute("stroke", "currentColor"); + svg.setAttribute("stroke-width", "3"); + svg.setAttribute("stroke-linecap", "round"); + svg.setAttribute("stroke-linejoin", "round"); + const polyline = createSvgElement(container.ownerDocument, "polyline"); + polyline.setAttribute("points", "20 6 9 17 4 12"); + svg.appendChild(polyline); + container.appendChild(svg); +} +var OPENAI_PROVIDER_ICON = { + viewBox: "-1 -.1 949.1 959.8", + path: "m925.8 456.3c10.4 23.2 17 48 19.7 73.3 2.6 25.3 1.3 50.9-4.1 75.8-5.3 24.9-14.5 48.8-27.3 70.8-8.4 14.7-18.3 28.5-29.7 41.2-11.3 12.6-23.9 24-37.6 34-13.8 10-28.5 18.4-44.1 25.3-15.5 6.8-31.7 12-48.3 15.4-7.8 24.2-19.4 47.1-34.4 67.7-14.9 20.6-33 38.7-53.6 53.6-20.6 15-43.4 26.6-67.6 34.4-24.2 7.9-49.5 11.8-75 11.8-16.9.1-33.9-1.7-50.5-5.1-16.5-3.5-32.7-8.8-48.2-15.7s-30.2-15.5-43.9-25.5c-13.6-10-26.2-21.5-37.4-34.2-25 5.4-50.6 6.7-75.9 4.1-25.3-2.7-50.1-9.3-73.4-19.7-23.2-10.3-44.7-24.3-63.6-41.4s-35-37.1-47.7-59.1c-8.5-14.7-15.5-30.2-20.8-46.3s-8.8-32.7-10.6-49.6c-1.8-16.8-1.7-33.8.1-50.7 1.8-16.8 5.5-33.4 10.8-49.5-17-18.9-31-40.4-41.4-63.6-10.3-23.3-17-48-19.6-73.3-2.7-25.3-1.3-50.9 4-75.8s14.5-48.8 27.3-70.8c8.4-14.7 18.3-28.6 29.6-41.2s24-24 37.7-34 28.5-18.5 44-25.3c15.6-6.9 31.8-12 48.4-15.4 7.8-24.3 19.4-47.1 34.3-67.7 15-20.6 33.1-38.7 53.7-53.7 20.6-14.9 43.4-26.5 67.6-34.4 24.2-7.8 49.5-11.8 75-11.7 16.9-.1 33.9 1.6 50.5 5.1s32.8 8.7 48.3 15.6c15.5 7 30.2 15.5 43.9 25.5 13.7 10.1 26.3 21.5 37.5 34.2 24.9-5.3 50.5-6.6 75.8-4s50 9.3 73.3 19.6c23.2 10.4 44.7 24.3 63.6 41.4 18.9 17 35 36.9 47.7 59 8.5 14.6 15.5 30.1 20.8 46.3 5.3 16.1 8.9 32.7 10.6 49.6 1.8 16.9 1.8 33.9-.1 50.8-1.8 16.9-5.5 33.5-10.8 49.6 17.1 18.9 31 40.3 41.4 63.6zm-333.2 426.9c21.8-9 41.6-22.3 58.3-39s30-36.5 39-58.4c9-21.8 13.7-45.2 13.7-68.8v-223q-.1-.3-.2-.7-.1-.3-.3-.6-.2-.3-.5-.5-.3-.3-.6-.4l-80.7-46.6v269.4c0 2.7-.4 5.5-1.1 8.1-.7 2.7-1.7 5.2-3.1 7.6s-3 4.6-5 6.5a32.1 32.1 0 0 1-6.5 5l-191.1 110.3c-1.6 1-4.3 2.4-5.7 3.2 7.9 6.7 16.5 12.6 25.5 17.8 9.1 5.2 18.5 9.6 28.3 13.2 9.8 3.5 19.9 6.2 30.1 8 10.3 1.8 20.7 2.7 31.1 2.7 23.6 0 47-4.7 68.8-13.8zm-455.1-151.4c11.9 20.5 27.6 38.3 46.3 52.7 18.8 14.4 40.1 24.9 62.9 31s46.6 7.7 70 4.6 45.9-10.7 66.4-22.5l193.2-111.5.5-.5q.2-.2.3-.6.2-.3.3-.6v-94l-233.2 134.9c-2.4 1.4-4.9 2.4-7.5 3.2-2.7.7-5.4 1-8.2 1-2.7 0-5.4-.3-8.1-1-2.6-.8-5.2-1.8-7.6-3.2l-191.1-110.4c-1.7-1-4.2-2.5-5.6-3.4-1.8 10.3-2.7 20.7-2.7 31.1s1 20.8 2.8 31.1c1.8 10.2 4.6 20.3 8.1 30.1 3.6 9.8 8 19.2 13.2 28.2zm-50.2-417c-11.8 20.5-19.4 43.1-22.5 66.5s-1.5 47.1 4.6 70c6.1 22.8 16.6 44.1 31 62.9 14.4 18.7 32.3 34.4 52.7 46.2l193.1 111.6q.3.1.7.2h.7q.4 0 .7-.2.3-.1.6-.3l81-46.8-233.2-134.6c-2.3-1.4-4.5-3.1-6.5-5a32.1 32.1 0 0 1-5-6.5c-1.3-2.4-2.4-4.9-3.1-7.6-.7-2.6-1.1-5.3-1-8.1v-227.1c-9.8 3.6-19.3 8-28.3 13.2-9 5.3-17.5 11.3-25.5 18-7.9 6.7-15.3 14.1-22 22.1-6.7 7.9-12.6 16.5-17.8 25.5zm663.3 154.4c2.4 1.4 4.6 3 6.6 5 1.9 1.9 3.6 4.1 5 6.5 1.3 2.4 2.4 5 3.1 7.6.6 2.7 1 5.4.9 8.2v227.1c32.1-11.8 60.1-32.5 80.8-59.7 20.8-27.2 33.3-59.7 36.2-93.7s-3.9-68.2-19.7-98.5-39.9-55.5-69.5-72.5l-193.1-111.6q-.3-.1-.7-.2h-.7q-.3.1-.7.2-.3.1-.6.3l-80.6 46.6 233.2 134.7zm80.5-121h-.1v.1zm-.1-.1c5.8-33.6 1.9-68.2-11.3-99.7-13.1-31.5-35-58.6-63-78.2-28-19.5-61-30.7-95.1-32.2-34.2-1.4-68 6.9-97.6 23.9l-193.1 111.5q-.3.2-.5.5l-.4.6q-.1.3-.2.7-.1.3-.1.7v93.2l233.2-134.7c2.4-1.4 5-2.4 7.6-3.2 2.7-.7 5.4-1 8.1-1 2.8 0 5.5.3 8.2 1 2.6.8 5.1 1.8 7.5 3.2l191.1 110.4c1.7 1 4.2 2.4 5.6 3.3zm-505.3-103.2c0-2.7.4-5.4 1.1-8.1.7-2.6 1.7-5.2 3.1-7.6 1.4-2.3 3-4.5 5-6.5 1.9-1.9 4.1-3.6 6.5-4.9l191.1-110.3c1.8-1.1 4.3-2.5 5.7-3.2-26.2-21.9-58.2-35.9-92.1-40.2-33.9-4.4-68.3 1-99.2 15.5-31 14.5-57.2 37.6-75.5 66.4-18.3 28.9-28 62.3-28 96.5v223q.1.4.2.7.1.3.3.6.2.3.5.6.2.2.6.4l80.7 46.6zm43.8 294.7 103.9 60 103.9-60v-119.9l-103.8-60-103.9 60z" +}; +var CLAUDE_PROVIDER_ICON = { + viewBox: "0 -.01 39.5 39.53", + path: "m7.75 26.27 7.77-4.36.13-.38-.13-.21h-.38l-1.3-.08-4.44-.12-3.85-.16-3.73-.2-.94-.2-.88-1.16.09-.58.79-.53 1.13.1 2.5.17 3.75.26 2.72.16 4.03.42h.64l.09-.26-.22-.16-.17-.16-3.88-2.63-4.2-2.78-2.2-1.6-1.19-.81-.6-.76-.26-1.66 1.08-1.19 1.45.1.37.1 1.47 1.13 3.14 2.43 4.1 3.02.6.5.24-.17.03-.12-.27-.45-2.23-4.03-2.38-4.1-1.06-1.7-.28-1.02c-.1-.42-.17-.77-.17-1.2l1.23-1.67.68-.22 1.64.22.69.6 1.02 2.33 1.65 3.67 2.56 4.99.75 1.48.4 1.37.15.42h.26v-.24l.21-2.81.39-3.45.38-4.44.13-1.25.62-1.5 1.23-.81.96.46.79 1.13-.11.73-.47 3.05-.92 4.78-.6 3.2h.35l.4-.4 1.62-2.15 2.72-3.4 1.2-1.35 1.4-1.49.9-.71h1.7l1.25 1.86-.56 1.92-1.75 2.22-1.45 1.88-2.08 2.8-1.3 2.24.12.18.31-.03 4.7-1 2.54-.46 3.03-.52 1.37.64.15.65-.54 1.33-3.24.8-3.8.76-5.66 1.34-.07.05.08.1 2.55.24 1.09.06h2.67l4.97.37 1.3.86.78 1.05-.13.8-2 1.02-2.7-.64-6.3-1.5-2.16-.54h-.3v.18l1.8 1.76 3.3 2.98 4.13 3.84.21.95-.53.75-.56-.08-3.63-2.73-1.4-1.23-3.17-2.67h-.21v.28l.73 1.07 3.86 5.8.2 1.78-.28.58-1 .35-1.1-.2-2.26-3.17-2.33-3.57-1.88-3.2-.23.13-1.11 11.95-.52.61-1.2.46-1-.76-.53-1.23.53-2.43.64-3.17.52-2.52.47-3.13.28-1.04-.02-.07-.23.03-2.36 3.24-3.59 4.85-2.84 3.04-.68.27-1.18-.61.11-1.09.66-.97 3.93-5 2.37-3.1 1.53-1.79-.01-.26h-.09l-10.44 6.78-1.86.24-.8-.75.1-1.23.38-.4 3.14-2.16z" +}; +var OPENCODE_PROVIDER_ICON = { + kind: "composite", + viewBox: "0 0 300 300", + children: [ + { + tag: "g", + attributes: { + class: "claudian-provider-icon-variant claudian-provider-icon-variant--light", + transform: "translate(30 0)" + }, + children: [ + { tag: "path", attributes: { d: "M180 240H60V120H180V240Z", fill: "#CFCECD" } }, + { tag: "path", attributes: { d: "M180 60H60V240H180V60ZM240 300H0V0H240V300Z", fill: "#211E1E" } } + ] + }, + { + tag: "g", + attributes: { + class: "claudian-provider-icon-variant claudian-provider-icon-variant--dark", + transform: "translate(30 0)" + }, + children: [ + { tag: "path", attributes: { d: "M180 240H60V120H180V240Z", fill: "#4B4646" } }, + { tag: "path", attributes: { d: "M180 60H60V240H180V60ZM240 300H0V0H240V300Z", fill: "#F1ECEC" } } + ] + } + ] +}; +var PI_PROVIDER_ICON = { + kind: "composite", + viewBox: "0 0 800 800", + children: [ + { + tag: "path", + attributes: { + d: "M165.29 165.29H517.36V400H400V517.36H282.65V634.72H165.29ZM282.65 282.65V400H400V282.65Z", + fill: "currentColor", + "fill-rule": "evenodd" + } + }, + { + tag: "path", + attributes: { + d: "M517.36 400H634.72V634.72H517.36Z", + fill: "currentColor" + } + } + ] +}; +function createProviderIconSvg(icon, options = {}) { + var _a5; + const ownerDocument = (_a5 = options.ownerDocument) != null ? _a5 : window.document; + const svg = ownerDocument.createElementNS(SVG_NS2, "svg"); + svg.setAttribute("viewBox", icon.viewBox); + svg.setAttribute("fill", "none"); + svg.setAttribute("aria-hidden", "true"); + svg.classList.add("claudian-provider-icon"); + if (options.width !== void 0) { + svg.setAttribute("width", String(options.width)); + } + if (options.height !== void 0) { + svg.setAttribute("height", String(options.height)); + } + if (options.className) { + svg.classList.add(...options.className.split(/\s+/).filter(Boolean)); + } + if (options.dataProvider) { + svg.setAttribute("data-provider", options.dataProvider); + } + if (icon.kind === "composite") { + for (const child of icon.children) { + svg.appendChild(createProviderSvgChild(child, ownerDocument)); + } + return svg; + } + const path27 = ownerDocument.createElementNS(SVG_NS2, "path"); + path27.setAttribute("d", icon.path); + path27.setAttribute("fill", "currentColor"); + svg.appendChild(path27); + return svg; +} +function createProviderSvgChild(child, ownerDocument) { + const element = ownerDocument.createElementNS(SVG_NS2, child.tag); + for (const [name, value] of Object.entries(child.attributes)) { + element.setAttribute(name, value); + } + if (child.tag === "g") { + for (const nestedChild of child.children) { + element.appendChild(createProviderSvgChild(nestedChild, ownerDocument)); + } + } + return element; +} + +// src/providers/claude/ui/ClaudeChatUIConfig.ts +var CLAUDE_PERMISSION_MODE_TOGGLE = { + inactiveValue: "normal", + inactiveLabel: "Safe", + activeValue: "yolo", + activeLabel: "YOLO", + planValue: "plan", + planLabel: "PLAN" +}; +var claudeChatUIConfig = { + getModelOptions(settings11) { + return getClaudeModelOptions(settings11); + }, + ownsModel(model, settings11) { + return getClaudeModelOptions(settings11).some((option) => option.value === model); + }, + isAdaptiveReasoningModel(_model, _settings) { + return true; + }, + getReasoningOptions(model, _settings) { + const levels = supportsXHighEffort(model) ? EFFORT_LEVELS : EFFORT_LEVELS.filter((e2) => e2.value !== "xhigh"); + return levels.map((e2) => ({ value: e2.value, label: e2.label })); + }, + getDefaultReasoningValue(model, _settings) { + var _a5; + return (_a5 = DEFAULT_EFFORT_LEVEL[model]) != null ? _a5 : "high"; + }, + getContextWindowSize(model, customLimits) { + return getContextWindowSize(model, customLimits); + }, + isDefaultModel(model) { + return DEFAULT_CLAUDE_MODELS.some((m4) => m4.value === model); + }, + applyModelDefaults(model, settings11) { + var _a5; + const target = settings11; + if (DEFAULT_CLAUDE_MODELS.some((m4) => m4.value === model)) { + target.effortLevel = (_a5 = DEFAULT_EFFORT_LEVEL[model]) != null ? _a5 : "high"; + updateClaudeProviderSettings(target, { lastModel: model }); + } else { + target.lastCustomModel = model; + target.effortLevel = normalizeEffortLevel(model, target.effortLevel); + } + }, + normalizeModelVariant(model, settings11) { + const claudeSettings = getClaudeProviderSettings(settings11); + return normalizeVisibleModelVariant( + model, + claudeSettings.enableOpus1M, + claudeSettings.enableSonnet1M + ); + }, + getCustomModelIds(envVars) { + return getCustomModelIds(envVars); + }, + getPermissionModeToggle() { + return CLAUDE_PERMISSION_MODE_TOGGLE; + }, + isBangBashEnabled(settings11) { + return getClaudeProviderSettings(settings11).enableBangBash; + }, + getProviderIcon() { + return CLAUDE_PROVIDER_ICON; + } +}; + +// src/providers/claude/ui/PluginSettingsManager.ts +var import_obsidian11 = require("obsidian"); +var PluginSettingsManager = class { + constructor(containerEl, deps) { + this.containerEl = containerEl; + this.pluginManager = deps.pluginManager; + this.agentManager = deps.agentManager; + this.restartTabs = deps.restartTabs; + this.render(); + } + render() { + this.containerEl.empty(); + const headerEl = this.containerEl.createDiv({ cls: "claudian-plugin-header" }); + headerEl.createSpan({ text: "Claude Code Plugins", cls: "claudian-plugin-label" }); + const refreshBtn = headerEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Refresh" } + }); + (0, import_obsidian11.setIcon)(refreshBtn, "refresh-cw"); + refreshBtn.addEventListener("click", () => { + void this.refreshPlugins(); + }); + const plugins = this.pluginManager.getPlugins(); + if (plugins.length === 0) { + const emptyEl = this.containerEl.createDiv({ cls: "claudian-plugin-empty" }); + emptyEl.setText("No Claude code plugins found. Enable plugins via the Claude CLI."); + return; + } + const projectPlugins = plugins.filter((p) => p.scope === "project"); + const userPlugins = plugins.filter((p) => p.scope === "user"); + const listEl = this.containerEl.createDiv({ cls: "claudian-plugin-list" }); + if (projectPlugins.length > 0) { + const sectionHeader = listEl.createDiv({ cls: "claudian-plugin-section-header" }); + sectionHeader.setText("Project plugins"); + for (const plugin of projectPlugins) { + this.renderPluginItem(listEl, plugin); + } + } + if (userPlugins.length > 0) { + const sectionHeader = listEl.createDiv({ cls: "claudian-plugin-section-header" }); + sectionHeader.setText("User plugins"); + for (const plugin of userPlugins) { + this.renderPluginItem(listEl, plugin); + } + } + } + renderPluginItem(listEl, plugin) { + const itemEl = listEl.createDiv({ cls: "claudian-plugin-item" }); + if (!plugin.enabled) { + itemEl.addClass("claudian-plugin-item-disabled"); + } + const statusEl = itemEl.createDiv({ cls: "claudian-plugin-status" }); + if (plugin.enabled) { + statusEl.addClass("claudian-plugin-status-enabled"); + } else { + statusEl.addClass("claudian-plugin-status-disabled"); + } + const infoEl = itemEl.createDiv({ cls: "claudian-plugin-info" }); + const nameRow = infoEl.createDiv({ cls: "claudian-plugin-name-row" }); + const nameEl = nameRow.createSpan({ cls: "claudian-plugin-name" }); + nameEl.setText(plugin.name); + const actionsEl = itemEl.createDiv({ cls: "claudian-plugin-actions" }); + const toggleBtn = actionsEl.createEl("button", { + cls: "claudian-plugin-action-btn", + attr: { "aria-label": plugin.enabled ? "Disable" : "Enable" } + }); + (0, import_obsidian11.setIcon)(toggleBtn, plugin.enabled ? "toggle-right" : "toggle-left"); + toggleBtn.addEventListener("click", () => { + void this.togglePlugin(plugin.id); + }); + } + async togglePlugin(pluginId) { + var _a5; + const plugin = this.pluginManager.getPlugins().find((p) => p.id === pluginId); + const wasEnabled = (_a5 = plugin == null ? void 0 : plugin.enabled) != null ? _a5 : false; + try { + await this.pluginManager.togglePlugin(pluginId); + await this.agentManager.loadAgents(); + try { + await this.restartTabs(); + } catch (e2) { + new import_obsidian11.Notice("Plugin toggled, but some tabs failed to restart."); + } + new import_obsidian11.Notice(`Plugin "${pluginId}" ${wasEnabled ? "disabled" : "enabled"}`); + } catch (err) { + await this.pluginManager.togglePlugin(pluginId); + const message = err instanceof Error ? err.message : "Unknown error"; + new import_obsidian11.Notice(`Failed to toggle plugin: ${message}`); + } finally { + this.render(); + } + } + async refreshPlugins() { + try { + await this.pluginManager.loadPlugins(); + await this.agentManager.loadAgents(); + new import_obsidian11.Notice("Plugin list refreshed"); + } catch (err) { + const message = err instanceof Error ? err.message : "Unknown error"; + new import_obsidian11.Notice(`Failed to refresh plugins: ${message}`); + } finally { + this.render(); + } + } + refresh() { + this.render(); + } +}; + +// src/providers/claude/ui/SlashCommandSettings.ts +var import_obsidian12 = require("obsidian"); +function resolveAllowedTools(inputValue, parsedTools) { + const trimmed = inputValue.trim(); + if (trimmed) { + return trimmed.split(",").map((s2) => s2.trim()).filter(Boolean); + } + if (parsedTools && parsedTools.length > 0) { + return parsedTools; + } + return void 0; +} +function isSkillEntry(entry) { + return entry.kind === "skill"; +} +var SlashCommandModal = class extends import_obsidian12.Modal { + constructor(app, entries, existingEntry, onSave) { + super(app); + this.entries = entries; + this.existingEntry = existingEntry; + this.onSave = onSave; + } + onOpen() { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m; + const existingIsSkill = this.existingEntry ? isSkillEntry(this.existingEntry) : false; + let selectedType = existingIsSkill ? "skill" : "command"; + const typeLabel = () => selectedType === "skill" ? "Skill" : "Slash Command"; + this.setTitle(this.existingEntry ? `Edit ${typeLabel()}` : `Add ${typeLabel()}`); + this.modalEl.addClass("claudian-sp-modal"); + const { contentEl } = this; + let nameInput; + let descInput; + let hintInput; + let modelInput; + let toolsInput; + let disableModelToggle = (_b3 = (_a5 = this.existingEntry) == null ? void 0 : _a5.disableModelInvocation) != null ? _b3 : false; + let disableUserInvocation = ((_c2 = this.existingEntry) == null ? void 0 : _c2.userInvocable) === false; + let contextValue = (_e2 = (_d = this.existingEntry) == null ? void 0 : _d.context) != null ? _e2 : ""; + let agentInput; + let disableUserSetting = null; + let disableUserToggle = null; + const updateSkillOnlyFields = () => { + if (!disableUserSetting || !disableUserToggle) return; + const isSkillType = selectedType === "skill"; + disableUserSetting.settingEl.toggleClass("claudian-hidden", !isSkillType); + if (!isSkillType) { + disableUserInvocation = false; + disableUserToggle.setValue(false); + } + }; + new import_obsidian12.Setting(contentEl).setName("Type").setDesc("Command or skill").addDropdown((dropdown) => { + dropdown.addOption("command", "Command").addOption("skill", "Skill").setValue(selectedType).onChange((value) => { + selectedType = value; + this.setTitle(this.existingEntry ? `Edit ${typeLabel()}` : `Add ${typeLabel()}`); + updateSkillOnlyFields(); + }); + if (this.existingEntry) { + dropdown.setDisabled(true); + } + }); + new import_obsidian12.Setting(contentEl).setName("Command name").setDesc('The name used after / (e.g., "review" for /review)').addText((text) => { + var _a6; + nameInput = text.inputEl; + text.setValue(((_a6 = this.existingEntry) == null ? void 0 : _a6.name) || "").setPlaceholder("Review-code"); + }); + new import_obsidian12.Setting(contentEl).setName("Description").setDesc("Optional description shown in dropdown").addText((text) => { + var _a6; + descInput = text.inputEl; + text.setValue(((_a6 = this.existingEntry) == null ? void 0 : _a6.description) || ""); + }); + const details = contentEl.createEl("details", { cls: "claudian-sp-advanced-section" }); + details.createEl("summary", { + text: "Advanced options", + cls: "claudian-sp-advanced-summary" + }); + if (((_f2 = this.existingEntry) == null ? void 0 : _f2.argumentHint) || ((_g = this.existingEntry) == null ? void 0 : _g.model) || ((_i = (_h2 = this.existingEntry) == null ? void 0 : _h2.allowedTools) == null ? void 0 : _i.length) || ((_j = this.existingEntry) == null ? void 0 : _j.disableModelInvocation) || ((_k3 = this.existingEntry) == null ? void 0 : _k3.userInvocable) === false || ((_l2 = this.existingEntry) == null ? void 0 : _l2.context) || ((_m = this.existingEntry) == null ? void 0 : _m.agent)) { + details.open = true; + } + new import_obsidian12.Setting(details).setName("Argument hint").setDesc('Placeholder text for arguments (e.g., "[file] [focus]")').addText((text) => { + var _a6; + hintInput = text.inputEl; + text.setValue(((_a6 = this.existingEntry) == null ? void 0 : _a6.argumentHint) || ""); + }); + new import_obsidian12.Setting(details).setName("Model override").setDesc("Optional model to use for this command").addText((text) => { + var _a6; + modelInput = text.inputEl; + text.setValue(((_a6 = this.existingEntry) == null ? void 0 : _a6.model) || "").setPlaceholder("Claude-sonnet-4-5"); + }); + new import_obsidian12.Setting(details).setName("Allowed tools").setDesc("Comma-separated list of tools to allow (empty = all)").addText((text) => { + var _a6, _b4; + toolsInput = text.inputEl; + text.setValue(((_b4 = (_a6 = this.existingEntry) == null ? void 0 : _a6.allowedTools) == null ? void 0 : _b4.join(", ")) || ""); + }); + new import_obsidian12.Setting(details).setName("Disable model invocation").setDesc("Prevent the model from invoking this command itself").addToggle((toggle) => { + toggle.setValue(disableModelToggle).onChange((value) => { + disableModelToggle = value; + }); + }); + disableUserSetting = new import_obsidian12.Setting(details).setName("Disable user invocation").setDesc("Prevent the user from invoking this skill directly").addToggle((toggle) => { + disableUserToggle = toggle; + toggle.setValue(disableUserInvocation).onChange((value) => { + disableUserInvocation = value; + }); + }); + updateSkillOnlyFields(); + new import_obsidian12.Setting(details).setName("Context").setDesc("Run in a subagent (fork)").addToggle((toggle) => { + toggle.setValue(contextValue === "fork").onChange((value) => { + contextValue = value ? "fork" : ""; + agentSetting.settingEl.toggleClass("claudian-hidden", !value); + }); + }); + const agentSetting = new import_obsidian12.Setting(details).setName("Agent").setDesc("Subagent type when context is fork").addText((text) => { + var _a6; + agentInput = text.inputEl; + text.setValue(((_a6 = this.existingEntry) == null ? void 0 : _a6.agent) || "").setPlaceholder("Code-reviewer"); + }); + agentSetting.settingEl.toggleClass("claudian-hidden", contextValue !== "fork"); + new import_obsidian12.Setting(contentEl).setName("Prompt template").setDesc("Use $ARGUMENTS, $1, $2, @file, !`bash`"); + const contentArea = contentEl.createEl("textarea", { + cls: "claudian-sp-content-area", + attr: { + rows: "10", + placeholder: "Review this code for:\n$ARGUMENTS\n\n@$1" + } + }); + const initialContent = this.existingEntry ? parseSlashCommandContent(this.existingEntry.content).promptContent : ""; + contentArea.value = initialContent; + const buttonContainer = contentEl.createDiv({ cls: "claudian-sp-modal-buttons" }); + const cancelBtn = buttonContainer.createEl("button", { + text: "Cancel", + cls: "claudian-cancel-btn" + }); + cancelBtn.addEventListener("click", () => this.close()); + const saveBtn = buttonContainer.createEl("button", { + text: "Save", + cls: "claudian-save-btn" + }); + saveBtn.addEventListener("click", () => { + void (async () => { + var _a6, _b4, _c3, _d2, _e3, _f3; + const name = nameInput.value.trim(); + const nameError = validateCommandName(name); + if (nameError) { + new import_obsidian12.Notice(nameError); + return; + } + const content = contentArea.value; + if (!content.trim()) { + new import_obsidian12.Notice("Prompt template is required"); + return; + } + const existing = this.entries.find( + (entry2) => { + var _a7; + return entry2.name.toLowerCase() === name.toLowerCase() && entry2.id !== ((_a7 = this.existingEntry) == null ? void 0 : _a7.id); + } + ); + if (existing) { + new import_obsidian12.Notice(`A command named "/${name}" already exists`); + return; + } + const parsed = parseSlashCommandContent(content); + const promptContent = parsed.promptContent; + const isSkillType = selectedType === "skill"; + const entry = { + id: ((_a6 = this.existingEntry) == null ? void 0 : _a6.id) || (isSkillType ? `skill-${name}` : `cmd-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`), + providerId: "claude", + kind: isSkillType ? "skill" : "command", + name, + description: descInput.value.trim() || parsed.description || void 0, + argumentHint: normalizeArgumentHint(hintInput.value.trim()) || parsed.argumentHint || void 0, + allowedTools: resolveAllowedTools(toolsInput.value, parsed.allowedTools), + model: modelInput.value.trim() || parsed.model || void 0, + content: promptContent, + disableModelInvocation: disableModelToggle || void 0, + userInvocable: disableUserInvocation ? false : void 0, + context: contextValue || void 0, + agent: contextValue === "fork" ? agentInput.value.trim() || void 0 : void 0, + hooks: (_c3 = parsed.hooks) != null ? _c3 : (_b4 = this.existingEntry) == null ? void 0 : _b4.hooks, + scope: "vault", + source: (_e3 = (_d2 = this.existingEntry) == null ? void 0 : _d2.source) != null ? _e3 : "user", + isEditable: true, + isDeletable: true, + displayPrefix: "/", + insertPrefix: "/", + persistenceKey: (_f3 = this.existingEntry) == null ? void 0 : _f3.persistenceKey + }; + try { + await this.onSave(entry); + } catch (e2) { + const label = isSkillType ? "skill" : "slash command"; + new import_obsidian12.Notice(`Failed to save ${label}`); + return; + } + this.close(); + })(); + }); + const handleKeyDown = (e2) => { + if (e2.key === "Escape") { + e2.preventDefault(); + this.close(); + } + }; + contentEl.addEventListener("keydown", handleKeyDown); + } + onClose() { + this.contentEl.empty(); + } +}; +var SlashCommandSettings = class { + constructor(containerEl, app, catalog) { + this.commands = []; + this.app = app; + this.containerEl = containerEl; + this.catalog = catalog; + void this.loadAndRender(); + } + async loadAndRender() { + if (!this.catalog) { + this.renderUnavailable(); + return; + } + this.commands = await this.catalog.listVaultEntries(); + this.render(); + } + renderUnavailable() { + this.containerEl.empty(); + const emptyEl = this.containerEl.createDiv({ cls: "claudian-sp-empty-state" }); + emptyEl.setText("Claude command catalog is unavailable."); + } + render() { + this.containerEl.empty(); + const headerEl = this.containerEl.createDiv({ cls: "claudian-sp-header" }); + headerEl.createSpan({ text: t10("settings.slashCommands.name"), cls: "claudian-sp-label" }); + const actionsEl = headerEl.createDiv({ cls: "claudian-sp-header-actions" }); + const addBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Add" } + }); + (0, import_obsidian12.setIcon)(addBtn, "plus"); + addBtn.addEventListener("click", () => this.openCommandModal(null)); + if (this.commands.length === 0) { + const emptyEl = this.containerEl.createDiv({ cls: "claudian-sp-empty-state" }); + emptyEl.setText("No commands or skills configured. Click + to create one."); + return; + } + const listEl = this.containerEl.createDiv({ cls: "claudian-sp-list" }); + for (const cmd of this.commands) { + this.renderCommandItem(listEl, cmd); + } + } + renderCommandItem(listEl, cmd) { + const itemEl = listEl.createDiv({ cls: "claudian-sp-item" }); + const infoEl = itemEl.createDiv({ cls: "claudian-sp-info" }); + const headerRow = infoEl.createDiv({ cls: "claudian-sp-item-header" }); + const nameEl = headerRow.createSpan({ cls: "claudian-sp-item-name" }); + nameEl.setText(`/${cmd.name}`); + if (isSkillEntry(cmd)) { + headerRow.createSpan({ text: "skill", cls: "claudian-slash-item-badge" }); + } + if (cmd.argumentHint) { + const hintEl = headerRow.createSpan({ cls: "claudian-slash-item-hint" }); + hintEl.setText(cmd.argumentHint); + } + if (cmd.description) { + const descEl = infoEl.createDiv({ cls: "claudian-sp-item-desc" }); + descEl.setText(cmd.description); + } + const actionsEl = itemEl.createDiv({ cls: "claudian-sp-item-actions" }); + if (cmd.isEditable) { + const editBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Edit" } + }); + (0, import_obsidian12.setIcon)(editBtn, "pencil"); + editBtn.addEventListener("click", () => this.openCommandModal(cmd)); + } + if (!isSkillEntry(cmd) && cmd.isEditable) { + const convertBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Convert to skill" } + }); + (0, import_obsidian12.setIcon)(convertBtn, "package"); + convertBtn.addEventListener("click", () => { + void (async () => { + try { + await this.transformToSkill(cmd); + } catch (e2) { + new import_obsidian12.Notice("Failed to convert to skill"); + } + })(); + }); + } + if (cmd.isDeletable) { + const deleteBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn claudian-settings-delete-btn", + attr: { "aria-label": "Delete" } + }); + (0, import_obsidian12.setIcon)(deleteBtn, "trash-2"); + deleteBtn.addEventListener("click", () => { + void (async () => { + try { + await this.deleteCommand(cmd); + } catch (e2) { + const label = isSkillEntry(cmd) ? "skill" : "slash command"; + new import_obsidian12.Notice(`Failed to delete ${label}`); + } + })(); + }); + } + } + openCommandModal(existingCmd) { + const modal = new SlashCommandModal( + this.app, + this.commands, + existingCmd, + async (cmd) => { + await this.saveCommand(cmd, existingCmd); + } + ); + modal.open(); + } + async saveCommand(cmd, existing) { + if (!this.catalog) { + return; + } + await this.catalog.saveVaultEntry(cmd); + if (existing && existing.name !== cmd.name) { + await this.catalog.deleteVaultEntry(existing); + } + await this.reloadCommands(); + this.render(); + const label = isSkillEntry(cmd) ? "Skill" : "Slash command"; + new import_obsidian12.Notice(`${label} "/${cmd.name}" ${existing ? "updated" : "created"}`); + } + async deleteCommand(cmd) { + if (!this.catalog) { + return; + } + await this.catalog.deleteVaultEntry(cmd); + await this.reloadCommands(); + this.render(); + const label = isSkillEntry(cmd) ? "Skill" : "Slash command"; + new import_obsidian12.Notice(`${label} "/${cmd.name}" deleted`); + } + async transformToSkill(cmd) { + if (!this.catalog) { + return; + } + const skillName = cmd.name.toLowerCase().replace(/[^a-z0-9-]/g, "-").slice(0, 64); + const existingSkill = this.commands.find( + (entry) => isSkillEntry(entry) && entry.name === skillName + ); + if (existingSkill) { + new import_obsidian12.Notice(`A skill named "/${skillName}" already exists`); + return; + } + const skill = { + ...cmd, + id: `skill-${skillName}`, + kind: "skill", + name: skillName, + description: cmd.description || extractFirstParagraph(cmd.content), + source: "user", + scope: "vault", + isEditable: true, + isDeletable: true, + displayPrefix: "/", + insertPrefix: "/" + }; + await this.catalog.saveVaultEntry(skill); + await this.catalog.deleteVaultEntry(cmd); + await this.reloadCommands(); + this.render(); + new import_obsidian12.Notice(`Converted "/${cmd.name}" to skill`); + } + async reloadCommands() { + if (!this.catalog) { + this.commands = []; + return; + } + this.commands = await this.catalog.listVaultEntries(); + } + refresh() { + void this.loadAndRender(); + } +}; + +// src/providers/claude/ui/ClaudeSettingsTab.ts +var claudeSettingsTabRenderer = { + render(container, context) { + const claudeWorkspace = getClaudeWorkspaceServices(); + const settingsBag = context.plugin.settings; + const claudeSettings = getClaudeProviderSettings(settingsBag); + const reconcileActiveClaudeModelSelection = () => { + const activeProvider = settingsBag.settingsProvider; + if (activeProvider !== void 0 && activeProvider !== "claude") { + return; + } + const currentModel = typeof settingsBag.model === "string" ? settingsBag.model : ""; + const nextModel = resolveClaudeModelSelection(settingsBag, currentModel); + if (!nextModel || nextModel === currentModel) { + return; + } + settingsBag.model = nextModel; + claudeChatUIConfig.applyModelDefaults(nextModel, settingsBag); + }; + new import_obsidian13.Setting(container).setName(t10("settings.setup")).setHeading(); + const hostnameKey = getHostnameKey(); + const platformDesc = process.platform === "win32" ? t10("settings.cliPath.descWindows") : t10("settings.cliPath.descUnix"); + const cliPathDescription = `${t10("settings.cliPath.desc")} ${platformDesc}`; + const cliPathSetting = new import_obsidian13.Setting(container).setName(t10("settings.cliPath.name")).setDesc(cliPathDescription); + const validationEl = container.createDiv({ + cls: "claudian-cli-path-validation claudian-setting-validation claudian-setting-validation-error claudian-hidden" + }); + const validatePath = (value) => { + const trimmed = value.trim(); + if (!trimmed) return null; + const expandedPath = expandHomePath(trimmed); + if (!fs8.existsSync(expandedPath)) { + return t10("settings.cliPath.validation.notExist"); + } + const stat = fs8.statSync(expandedPath); + if (!stat.isFile()) { + return t10("settings.cliPath.validation.isDirectory"); + } + return null; + }; + const updateCliPathValidation = (value, inputEl) => { + const error48 = validatePath(value); + if (error48) { + validationEl.setText(error48); + validationEl.toggleClass("claudian-hidden", false); + if (inputEl) { + inputEl.toggleClass("claudian-input-error", true); + } + return false; + } + validationEl.toggleClass("claudian-hidden", true); + if (inputEl) { + inputEl.toggleClass("claudian-input-error", false); + } + return true; + }; + const currentValue = claudeSettings.cliPathsByHost[hostnameKey] || ""; + const cliPathsByHost = { ...claudeSettings.cliPathsByHost }; + let cliPathInputEl = null; + const persistCliPath = async (value) => { + var _a5; + const isValid2 = updateCliPathValidation(value, cliPathInputEl != null ? cliPathInputEl : void 0); + if (!isValid2) { + return false; + } + const trimmed = value.trim(); + if (trimmed) { + cliPathsByHost[hostnameKey] = trimmed; + } else { + delete cliPathsByHost[hostnameKey]; + } + updateClaudeProviderSettings(settingsBag, { cliPathsByHost: { ...cliPathsByHost } }); + await context.plugin.saveSettings(); + claudeWorkspace.cliResolver.reset(); + const view = context.plugin.getView(); + await ((_a5 = view == null ? void 0 : view.getTabManager()) == null ? void 0 : _a5.broadcastToAllTabs( + (service) => Promise.resolve(service.cleanup()) + )); + return true; + }; + cliPathSetting.addText((text) => { + const placeholder = process.platform === "win32" ? "D:\\nodejs\\node_global\\node_modules\\@anthropic-ai\\claude-code\\cli-wrapper.cjs" : "/usr/local/lib/node_modules/@anthropic-ai/claude-code/cli-wrapper.cjs"; + text.setPlaceholder(placeholder).setValue(currentValue).onChange(async (value) => { + await persistCliPath(value); + }); + text.inputEl.addClass("claudian-settings-cli-path-input"); + cliPathInputEl = text.inputEl; + updateCliPathValidation(currentValue, text.inputEl); + }); + new import_obsidian13.Setting(container).setName(t10("settings.safety")).setHeading(); + new import_obsidian13.Setting(container).setName(t10("settings.claudeSafeMode.name")).setDesc(t10("settings.claudeSafeMode.desc")).addDropdown((dropdown) => { + for (const mode of CLAUDE_SAFE_MODES) { + dropdown.addOption(mode, mode); + } + dropdown.setValue(claudeSettings.safeMode).onChange(async (value) => { + updateClaudeProviderSettings( + settingsBag, + { safeMode: value } + ); + await context.plugin.saveSettings(); + }); + }); + new import_obsidian13.Setting(container).setName(t10("settings.loadUserSettings.name")).setDesc(t10("settings.loadUserSettings.desc")).addToggle( + (toggle) => toggle.setValue(claudeSettings.loadUserSettings).onChange(async (value) => { + updateClaudeProviderSettings(settingsBag, { loadUserSettings: value }); + await context.plugin.saveSettings(); + }) + ); + new import_obsidian13.Setting(container).setName(t10("settings.models")).setHeading(); + new import_obsidian13.Setting(container).setName(t10("settings.enableOpus1M.name")).setDesc(t10("settings.enableOpus1M.desc")).addToggle( + (toggle) => toggle.setValue(claudeSettings.enableOpus1M).onChange(async (value) => { + updateClaudeProviderSettings(settingsBag, { enableOpus1M: value }); + context.plugin.normalizeModelVariantSettings(); + await context.plugin.saveSettings(); + context.refreshModelSelectors(); + }) + ); + new import_obsidian13.Setting(container).setName(t10("settings.enableSonnet1M.name")).setDesc(t10("settings.enableSonnet1M.desc")).addToggle( + (toggle) => toggle.setValue(claudeSettings.enableSonnet1M).onChange(async (value) => { + updateClaudeProviderSettings(settingsBag, { enableSonnet1M: value }); + context.plugin.normalizeModelVariantSettings(); + await context.plugin.saveSettings(); + context.refreshModelSelectors(); + }) + ); + new import_obsidian13.Setting(container).setName(t10("settings.customModels.name")).setDesc(t10("settings.customModels.desc")).addTextArea((text) => { + let pendingCustomModels = claudeSettings.customModels; + let savedCustomModels = claudeSettings.customModels; + const commitCustomModels = async () => { + const previousCustomModels = savedCustomModels; + const previousModel = typeof settingsBag.model === "string" ? settingsBag.model : ""; + const previousTitleModel = typeof settingsBag.titleGenerationModel === "string" ? settingsBag.titleGenerationModel : ""; + if (pendingCustomModels !== savedCustomModels) { + updateClaudeProviderSettings(settingsBag, { customModels: pendingCustomModels }); + savedCustomModels = pendingCustomModels; + } + reconcileActiveClaudeModelSelection(); + const didReconcileTitleModel = ProviderSettingsCoordinator.reconcileTitleGenerationModelSelection(settingsBag); + const nextModel = typeof settingsBag.model === "string" ? settingsBag.model : ""; + const nextTitleModel = typeof settingsBag.titleGenerationModel === "string" ? settingsBag.titleGenerationModel : ""; + const didModelSelectionChange = previousModel !== nextModel; + const didCustomModelsChange = previousCustomModels !== savedCustomModels; + if (!didCustomModelsChange && !didModelSelectionChange && !didReconcileTitleModel && previousTitleModel === nextTitleModel) { + return; + } + await context.plugin.saveSettings(); + context.refreshModelSelectors(); + }; + text.setPlaceholder(t10("settings.customModels.placeholder")).setValue(claudeSettings.customModels).onChange((value) => { + pendingCustomModels = value; + }); + text.inputEl.rows = 6; + text.inputEl.cols = 40; + text.inputEl.addEventListener("blur", () => { + void commitCustomModels(); + }); + }); + new import_obsidian13.Setting(container).setName(t10("settings.slashCommands.name")).setHeading(); + const slashCommandsDesc = container.createDiv({ cls: "claudian-sp-settings-desc" }); + const descP = slashCommandsDesc.createEl("p", { cls: "setting-item-description" }); + descP.appendText(t10("settings.slashCommands.desc") + " "); + descP.createEl("a", { + text: "Learn more", + href: "https://code.claude.com/docs/en/skills" + }); + const slashCommandsContainer = container.createDiv({ cls: "claudian-slash-commands-container" }); + new SlashCommandSettings( + slashCommandsContainer, + context.plugin.app, + claudeWorkspace.commandCatalog + ); + context.renderHiddenProviderCommandSetting(container, "claude", { + name: t10("settings.hiddenSlashCommands.name"), + desc: t10("settings.hiddenSlashCommands.desc"), + placeholder: t10("settings.hiddenSlashCommands.placeholder") + }); + new import_obsidian13.Setting(container).setName(t10("settings.subagents.name")).setHeading(); + const agentsDesc = container.createDiv({ cls: "claudian-sp-settings-desc" }); + agentsDesc.createEl("p", { + text: t10("settings.subagents.desc"), + cls: "setting-item-description" + }); + const agentsContainer = container.createDiv({ cls: "claudian-agents-container" }); + new AgentSettings(agentsContainer, { + app: context.plugin.app, + agentManager: claudeWorkspace.agentManager, + agentStorage: claudeWorkspace.agentStorage + }); + new import_obsidian13.Setting(container).setName(t10("settings.mcpServers.name")).setHeading(); + const mcpDesc = container.createDiv({ cls: "claudian-mcp-settings-desc" }); + mcpDesc.createEl("p", { + text: t10("settings.mcpServers.desc"), + cls: "setting-item-description" + }); + const mcpContainer = container.createDiv({ cls: "claudian-mcp-container" }); + new McpSettingsManager(mcpContainer, { + app: context.plugin.app, + mcpStorage: claudeWorkspace.mcpStorage, + broadcastMcpReload: async () => { + var _a5; + for (const view of context.plugin.getAllViews()) { + await ((_a5 = view.getTabManager()) == null ? void 0 : _a5.broadcastToAllTabs( + (service) => service.reloadMcpServers() + )); + } + } + }); + new import_obsidian13.Setting(container).setName(t10("settings.plugins.name")).setHeading(); + const pluginsDesc = container.createDiv({ cls: "claudian-plugin-settings-desc" }); + pluginsDesc.createEl("p", { + text: t10("settings.plugins.desc"), + cls: "setting-item-description" + }); + const pluginsContainer = container.createDiv({ cls: "claudian-plugins-container" }); + new PluginSettingsManager(pluginsContainer, { + pluginManager: claudeWorkspace.pluginManager, + agentManager: claudeWorkspace.agentManager, + restartTabs: async () => { + const view = context.plugin.getView(); + const tabManager = view == null ? void 0 : view.getTabManager(); + if (!tabManager) { + return; + } + await tabManager.broadcastToAllTabs( + async (service) => { + await service.ensureReady({ force: true }); + } + ); + } + }); + renderEnvironmentSettingsSection({ + container, + plugin: context.plugin, + scope: "provider:claude", + heading: t10("settings.environment"), + name: t10("settings.customVariables.name"), + desc: "Claude-owned runtime variables only. Use this for ANTHROPIC_* and Claude-specific toggles.", + placeholder: "ANTHROPIC_API_KEY=your-key\nANTHROPIC_BASE_URL=https://api.example.com\nANTHROPIC_MODEL=custom-model\nCLAUDE_CODE_USE_BEDROCK=1", + renderCustomContextLimits: (target) => context.renderCustomContextLimits(target, "claude") + }); + new import_obsidian13.Setting(container).setName(t10("settings.experimental")).setHeading(); + new import_obsidian13.Setting(container).setName(t10("settings.enableChrome.name")).setDesc(t10("settings.enableChrome.desc")).addToggle( + (toggle) => toggle.setValue(claudeSettings.enableChrome).onChange(async (value) => { + updateClaudeProviderSettings(settingsBag, { enableChrome: value }); + await context.plugin.saveSettings(); + }) + ); + new import_obsidian13.Setting(container).setName(t10("settings.enableBangBash.name")).setDesc(t10("settings.enableBangBash.desc")).addToggle( + (toggle) => toggle.setValue(claudeSettings.enableBangBash).onChange(async (value) => { + bangBashValidationEl.toggleClass("claudian-hidden", true); + if (value) { + const { findNodeExecutable: findNodeExecutable2, getEnhancedPath: getEnhancedPath2 } = await Promise.resolve().then(() => (init_env(), env_exports)); + const nodePath2 = findNodeExecutable2(getEnhancedPath2()); + if (!nodePath2) { + bangBashValidationEl.setText(t10("settings.enableBangBash.validation.noNode")); + bangBashValidationEl.toggleClass("claudian-hidden", false); + toggle.setValue(false); + return; + } + } + updateClaudeProviderSettings(settingsBag, { enableBangBash: value }); + await context.plugin.saveSettings(); + }) + ); + const bangBashValidationEl = container.createDiv({ + cls: "claudian-bang-bash-validation claudian-setting-validation claudian-setting-validation-error claudian-hidden" + }); + } +}; + +// src/providers/claude/app/ClaudeWorkspaceServices.ts +async function createClaudeWorkspaceServices(plugin, adapter) { + var _a5; + const claudeStorage = new StorageService(plugin, adapter); + await claudeStorage.ensureDirectories(); + const cliResolver = new ClaudeCliResolver(); + const mcpStorage = claudeStorage.mcp; + const mcpManager = new McpServerManager(mcpStorage); + await mcpManager.loadServers(); + const vaultPath = (_a5 = getVaultPath(plugin.app)) != null ? _a5 : ""; + const pluginManager = new PluginManager(vaultPath, claudeStorage.ccSettings); + await pluginManager.loadPlugins(); + const agentStorage = claudeStorage.agents; + const agentManager = new AgentManager(vaultPath, pluginManager); + await agentManager.loadAgents(); + const commandCatalog = new ClaudeCommandCatalog( + claudeStorage.commands, + claudeStorage.skills, + () => probeRuntimeCommands(plugin) + ); + return { + claudeStorage, + cliResolver, + mcpStorage, + mcpServerManager: mcpManager, + mcpManager, + pluginManager, + agentStorage, + agentManager, + commandCatalog, + agentMentionProvider: agentManager, + settingsTabRenderer: claudeSettingsTabRenderer, + refreshAgentMentions: async () => { + await agentManager.loadAgents(); + } + }; +} +var claudeWorkspaceRegistration = { + initialize: async ({ plugin, vaultAdapter }) => createClaudeWorkspaceServices(plugin, vaultAdapter) +}; +function getClaudeWorkspaceServices() { + return ProviderWorkspaceRegistry.requireServices("claude"); +} + +// src/utils/context.ts +var CURRENT_NOTE_PREFIX_REGEX = /^\n[\s\S]*?<\/current_note>\n\n/; +var CURRENT_NOTE_SUFFIX_REGEX = /\n\n\n[\s\S]*?<\/current_note>$/; +var XML_CONTEXT_PATTERN = /\n\n<(?:current_note|editor_selection|editor_cursor|context_files|canvas_selection|browser_selection)[\s>]/; +function formatCurrentNote(notePath) { + return ` +${notePath} +`; +} +function appendCurrentNote(prompt, notePath) { + return `${prompt} + +${formatCurrentNote(notePath)}`; +} +function stripCurrentNoteContext(prompt) { + const strippedPrefix = prompt.replace(CURRENT_NOTE_PREFIX_REGEX, ""); + if (strippedPrefix !== prompt) { + return strippedPrefix; + } + return prompt.replace(CURRENT_NOTE_SUFFIX_REGEX, ""); +} +function extractContentBeforeXmlContext(text) { + if (!text) return void 0; + const queryMatch = text.match(/\n?([\s\S]*?)\n?<\/query>/); + if (queryMatch) { + return queryMatch[1].trim(); + } + const xmlMatch = text.match(XML_CONTEXT_PATTERN); + if ((xmlMatch == null ? void 0 : xmlMatch.index) !== void 0) { + return text.substring(0, xmlMatch.index).trim(); + } + return void 0; +} +function extractUserQuery(prompt) { + if (!prompt) return ""; + const extracted = extractContentBeforeXmlContext(prompt); + if (extracted !== void 0) { + return extracted; + } + return prompt.replace(/[\s\S]*?<\/current_note>\s*/g, "").replace(/\s*/g, "").replace(/\s*/g, "").replace(/[\s\S]*?<\/context_files>\s*/g, "").replace(/\s*/g, "").replace(/\s*/g, "").trim(); +} +function formatContextFilesLine(files) { + return ` +${files.join(", ")} +`; +} +function appendContextFiles(prompt, files) { + return `${prompt} + +${formatContextFilesLine(files)}`; +} + +// src/utils/date.ts +function getTodayDate() { + const now = /* @__PURE__ */ new Date(); + const readable = now.toLocaleDateString("en-US", { + weekday: "long", + year: "numeric", + month: "long", + day: "numeric" + }); + const iso = now.toISOString().split("T")[0]; + return `${readable} (${iso})`; +} +function formatDurationMmSs(seconds) { + if (!Number.isFinite(seconds) || seconds < 0) { + return "0s"; + } + const mins = Math.floor(seconds / 60); + const secs = seconds % 60; + if (mins === 0) { + return `${secs}s`; + } + return `${mins}m ${secs}s`; +} + +// src/core/prompt/inlineEdit.ts +function parseInlineEditResponse(responseText) { + const replacementMatch = responseText.match(/([\s\S]*?)<\/replacement>/); + if (replacementMatch) { + return { success: true, editedText: replacementMatch[1] }; + } + const insertionMatch = responseText.match(/([\s\S]*?)<\/insertion>/); + if (insertionMatch) { + return { success: true, insertedText: insertionMatch[1] }; + } + const trimmed = responseText.trim(); + if (trimmed) { + return { success: true, clarification: trimmed }; + } + return { success: false, error: "Empty response" }; +} +function buildCursorPrompt(request) { + const ctx = request.cursorContext; + const lineAttr = ` line="${ctx.line + 1}"`; + let cursorContent; + if (ctx.isInbetween) { + const parts = []; + if (ctx.beforeCursor) parts.push(ctx.beforeCursor); + parts.push("| #inbetween"); + if (ctx.afterCursor) parts.push(ctx.afterCursor); + cursorContent = parts.join("\n"); + } else { + cursorContent = `${ctx.beforeCursor}|${ctx.afterCursor} #inline`; + } + return [ + request.instruction, + "", + ``, + cursorContent, + "" + ].join("\n"); +} +function buildInlineEditPrompt(request) { + let prompt; + if (request.mode === "cursor") { + prompt = buildCursorPrompt(request); + } else { + const lineAttr = request.startLine && request.lineCount ? ` lines="${request.startLine}-${request.startLine + request.lineCount - 1}"` : ""; + prompt = [ + request.instruction, + "", + ``, + request.selectedText, + "" + ].join("\n"); + } + if (request.contextFiles && request.contextFiles.length > 0) { + prompt = appendContextFiles(prompt, request.contextFiles); + } + return prompt; +} +function getInlineEditSystemPrompt() { + const pathRules = '- **Paths**: Must be RELATIVE to vault root (e.g., "notes/file.md").'; + return `Today is ${getTodayDate()}. + +You are **Claudian**, an expert editor and writing assistant embedded in Obsidian. You help users refine their text, answer questions, and generate content with high precision. + +## Core Directives + +1. **Style Matching**: Mimic the user's tone, voice, and formatting style (indentation, bullet points, capitalization). +2. **Context Awareness**: Always Read the full file (or significant context) to understand the broader topic before editing. Do not rely solely on the selection. +3. **Silent Execution**: Use tools (Read, WebSearch) silently. Your final output must be ONLY the result. +4. **No Fluff**: No pleasantries, no "Here is the text", no "I have updated...". Just the content. + +## Input Format + +User messages have the instruction first, followed by XML context tags: + +### Selection Mode +\`\`\` +user's instruction + + +selected text here + +\`\`\` +Use \`\` tags for edits. + +### Cursor Mode +\`\`\` +user's instruction + + +text before|text after #inline + +\`\`\` +Or between paragraphs: +\`\`\` +user's instruction + + +Previous paragraph +| #inbetween +Next paragraph + +\`\`\` +Use \`\` tags to insert new content at the cursor position (\`|\`). + +## Tools & Path Rules + +- **Tools**: Read, Grep, Glob, LS, WebSearch, WebFetch. (All read-only). +${pathRules} + +## Thinking Process + +Before generating the final output, mentally check: +1. **Context**: Have I read enough of the file to understand the *topic* and *structure*? +2. **Style**: What is the user's indentation (2 vs 4 spaces, tabs)? What is their tone? +3. **Type**: Is this **Prose** (flow, grammar, clarity) or **Code** (syntax, logic, variable names)? + - *Prose*: Ensure smooth transitions. + - *Code*: Preserve syntax validity; do not break surrounding brackets/indentation. + +## Output Rules - CRITICAL + +**ABSOLUTE RULE**: Your text output must contain ONLY the final answer, replacement, or insertion. NEVER output: +- "I'll read the file..." / "Let me check..." / "I will..." +- "I'm asked about..." / "The user wants..." +- "Based on my analysis..." / "After reading..." +- "Here's..." / "The answer is..." +- ANY announcement of what you're about to do or did + +Use tools silently. Your text output = final result only. + +### When Replacing Selected Text (Selection Mode) + +If the user wants to MODIFY or REPLACE the selected text, wrap the replacement in tags: + +your replacement text here + +The content inside the tags should be ONLY the replacement text - no explanation. + +### When Inserting at Cursor (Cursor Mode) + +If the user wants to INSERT new content at the cursor position, wrap the insertion in tags: + +your inserted text here + +The content inside the tags should be ONLY the text to insert - no explanation. + +### When Answering Questions or Providing Information + +If the user is asking a QUESTION, respond WITHOUT tags. Output the answer directly. + +WRONG: "I'll read the full context of this file to give you a better explanation. This is a guide about..." +CORRECT: "This is a guide about..." + +### When Clarification is Needed + +If the request is ambiguous, ask a clarifying question. Keep questions concise and specific. + +## Examples + +### Selection Mode +Input: +\`\`\` +translate to French + + +Hello world + +\`\`\` + +CORRECT (replacement): +Bonjour le monde + +Input: +\`\`\` +what does this do? + + +const x = arr.reduce((a, b) => a + b, 0); + +\`\`\` + +CORRECT (question - no tags): +This code sums all numbers in the array \`arr\`. It uses \`reduce\` to iterate through the array, accumulating the total starting from 0. + +### Cursor Mode + +Input: +\`\`\` +what animal? + + +The quick brown | jumps over the lazy dog. #inline + +\`\`\` + +CORRECT (insertion): +fox + +### Q&A +Input: +\`\`\` +add a brief description section + + +# Introduction +This is my project. +| #inbetween +## Features + +\`\`\` + +CORRECT (insertion): + +## Description + +This project provides tools for managing your notes efficiently. + + +Input: +\`\`\` +translate to Spanish + + +The bank was steep. + +\`\`\` + +CORRECT (asking for clarification): +"Bank" can mean a financial institution (banco) or a river bank (orilla). Which meaning should I use? + +Then after user clarifies "river bank": +La orilla era empinada.`; +} + +// src/core/tools/toolNames.ts +var TOOL_AGENT_OUTPUT = "TaskOutput"; +var TOOL_ASK_USER_QUESTION = "AskUserQuestion"; +var TOOL_BASH = "Bash"; +var TOOL_BASH_OUTPUT = "BashOutput"; +var TOOL_EDIT = "Edit"; +var TOOL_GLOB = "Glob"; +var TOOL_GREP = "Grep"; +var TOOL_KILL_SHELL = "KillShell"; +var TOOL_LS = "LS"; +var TOOL_LIST_MCP_RESOURCES = "ListMcpResources"; +var TOOL_MCP = "Mcp"; +var TOOL_NOTEBOOK_EDIT = "NotebookEdit"; +var TOOL_READ = "Read"; +var TOOL_READ_MCP_RESOURCE = "ReadMcpResource"; +var TOOL_SKILL = "Skill"; +var TOOL_SUBAGENT = "Agent"; +var TOOL_SUBAGENT_LEGACY = "Task"; +var TOOL_TASK = TOOL_SUBAGENT; +var TOOL_TODO_WRITE = "TodoWrite"; +var TOOL_TOOL_SEARCH = "ToolSearch"; +var TOOL_WEB_FETCH = "WebFetch"; +var TOOL_WEB_SEARCH = "WebSearch"; +var TOOL_WRITE = "Write"; +var TOOL_ENTER_PLAN_MODE = "EnterPlanMode"; +var TOOL_EXIT_PLAN_MODE = "ExitPlanMode"; +var TOOL_APPLY_PATCH = "apply_patch"; +var TOOL_WRITE_STDIN = "write_stdin"; +var TOOL_SPAWN_AGENT = "spawn_agent"; +var TOOL_SEND_INPUT = "send_input"; +var TOOL_WAIT = "wait"; +var TOOL_WAIT_AGENT = "wait_agent"; +var TOOL_RESUME_AGENT = "resume_agent"; +var TOOL_CLOSE_AGENT = "close_agent"; +var AGENT_LIFECYCLE_TOOLS = [ + TOOL_SPAWN_AGENT, + TOOL_SEND_INPUT, + TOOL_WAIT, + TOOL_WAIT_AGENT, + TOOL_RESUME_AGENT, + TOOL_CLOSE_AGENT +]; +function isAgentLifecycleTool(name) { + return AGENT_LIFECYCLE_TOOLS.includes(name); +} +var TOOLS_SKIP_BLOCKED_DETECTION = [ + TOOL_ENTER_PLAN_MODE, + TOOL_EXIT_PLAN_MODE, + TOOL_ASK_USER_QUESTION +]; +var SUBAGENT_TOOL_NAMES = [ + TOOL_SUBAGENT, + TOOL_SUBAGENT_LEGACY +]; +function skipsBlockedDetection(name) { + return TOOLS_SKIP_BLOCKED_DETECTION.includes(name); +} +function isSubagentToolName(name) { + return SUBAGENT_TOOL_NAMES.includes(name); +} +var EDIT_TOOLS = [TOOL_WRITE, TOOL_EDIT, TOOL_NOTEBOOK_EDIT]; +var WRITE_EDIT_TOOLS = [TOOL_WRITE, TOOL_EDIT]; +var READ_ONLY_TOOLS = [ + TOOL_READ, + TOOL_GREP, + TOOL_GLOB, + TOOL_LS, + TOOL_WEB_SEARCH, + TOOL_WEB_FETCH +]; +function isEditTool(toolName) { + return EDIT_TOOLS.includes(toolName); +} +function isWriteEditTool(toolName) { + return WRITE_EDIT_TOOLS.includes(toolName); +} +function isReadOnlyTool(toolName) { + return READ_ONLY_TOOLS.includes(toolName); +} + +// src/providers/claude/runtime/claudeColdStartQuery.ts +init_env(); +init_path(); + +// src/providers/claude/auxiliary/extractAssistantText.ts +function extractAssistantText(message) { + if (message.type !== "assistant") { + return ""; + } + const payload = message.message; + if (!payload || typeof payload !== "object" || Array.isArray(payload)) { + return ""; + } + const content = payload.content; + if (!Array.isArray(content)) { + return ""; + } + return content.filter((block) => { + if (!block || typeof block !== "object" || Array.isArray(block)) { + return false; + } + const record2 = block; + return record2.type === "text" && typeof record2.text === "string"; + }).map((block) => block.text).join(""); +} + +// src/providers/claude/runtime/claudeColdStartQuery.ts +async function runColdStartQuery(config2, prompt) { + var _a5, _b3, _c2, _d, _e2; + const vaultPath = getVaultPath(config2.plugin.app); + if (!vaultPath) { + throw new Error("Could not determine vault path"); + } + const resolvedClaudePath = config2.plugin.getResolvedProviderCliPath("claude"); + if (!resolvedClaudePath) { + throw new Error("Claude CLI not found"); + } + const customEnv = parseEnvironmentVariables( + config2.plugin.getActiveEnvironmentVariables("claude") + ); + const enhancedPath = getEnhancedPath(customEnv.PATH, resolvedClaudePath); + const missingNodeError = getMissingNodeError(resolvedClaudePath, enhancedPath); + if (missingNodeError) { + throw new Error(missingNodeError); + } + const settings11 = (_a5 = config2.providerSettings) != null ? _a5 : ProviderSettingsCoordinator.getProviderSettingsSnapshot( + config2.plugin.settings, + "claude" + ); + const claudeSettings = getClaudeProviderSettings(settings11); + const selectedModel = (_b3 = config2.model) != null ? _b3 : settings11.model; + const options = { + cwd: vaultPath, + systemPrompt: config2.systemPrompt, + model: selectedModel, + abortController: config2.abortController, + pathToClaudeCodeExecutable: resolvedClaudePath, + env: { + ...process.env, + ...customEnv, + PATH: enhancedPath + }, + permissionMode: "bypassPermissions", + allowDangerouslySkipPermissions: true, + settingSources: resolveClaudeSettingSources(claudeSettings.loadUserSettings), + spawnClaudeCodeProcess: createCustomSpawnFunction(enhancedPath) + }; + if (config2.tools !== void 0) { + options.tools = config2.tools; + } + if (config2.hooks) { + options.hooks = config2.hooks; + } + if (config2.persistSession === false) { + options.persistSession = false; + } + if (config2.resumeSessionId) { + options.resume = config2.resumeSessionId; + } + if (claudeSettings.safeMode === "auto") { + options.extraArgs = { ...options.extraArgs, "enable-auto-mode": null }; + } + if (!((_c2 = config2.thinking) == null ? void 0 : _c2.disabled)) { + const effortLevel = resolveEffortLevel(selectedModel, settings11.effortLevel); + options.thinking = { type: "adaptive" }; + options.effort = effortLevel; + } + const response = jA$({ prompt, options }); + let responseText = ""; + let sessionId = null; + for await (const message of response) { + if ((_d = config2.abortController) == null ? void 0 : _d.signal.aborted) { + await response.interrupt(); + throw new Error("Cancelled"); + } + if (message.type === "system" && message.subtype === "init" && message.session_id) { + sessionId = message.session_id; + } + const text = extractAssistantText(message); + if (text) { + responseText += text; + (_e2 = config2.onTextChunk) == null ? void 0 : _e2.call(config2, responseText); + } + } + return { text: responseText, sessionId }; +} + +// src/providers/claude/auxiliary/ClaudeInlineEditService.ts +function createReadOnlyHook() { + return { + hooks: [ + async (hookInput) => { + const input = hookInput; + const toolName = input.tool_name; + if (isReadOnlyTool(toolName)) { + return { continue: true }; + } + return { + continue: false, + hookSpecificOutput: { + hookEventName: "PreToolUse", + permissionDecision: "deny", + permissionDecisionReason: `Inline edit mode: tool "${toolName}" is not allowed (read-only)` + } + }; + } + ] + }; +} +var InlineEditService = class { + constructor(plugin) { + this.abortController = null; + this.sessionId = null; + this.plugin = plugin; + } + getScopedSettings() { + return ProviderSettingsCoordinator.getProviderSettingsSnapshot( + this.plugin.settings, + "claude" + ); + } + resetConversation() { + this.sessionId = null; + } + async editText(request) { + this.sessionId = null; + const prompt = buildInlineEditPrompt(request); + return this.sendMessage(prompt); + } + async continueConversation(message, contextFiles) { + if (!this.sessionId) { + return { success: false, error: "No active conversation to continue" }; + } + let prompt = message; + if (contextFiles && contextFiles.length > 0) { + prompt = appendContextFiles(message, contextFiles); + } + return this.sendMessage(prompt); + } + async sendMessage(prompt) { + var _a5; + const settings11 = this.getScopedSettings(); + this.abortController = new AbortController(); + const hooks = { + PreToolUse: [createReadOnlyHook()] + }; + try { + const result = await runColdStartQuery({ + plugin: this.plugin, + systemPrompt: getInlineEditSystemPrompt(), + tools: [...READ_ONLY_TOOLS], + hooks, + resumeSessionId: (_a5 = this.sessionId) != null ? _a5 : void 0, + abortController: this.abortController, + providerSettings: settings11 + }, prompt); + this.sessionId = result.sessionId; + return parseInlineEditResponse(result.text); + } catch (error48) { + const msg = error48 instanceof Error ? error48.message : "Unknown error"; + return { success: false, error: msg }; + } finally { + this.abortController = null; + } + } + cancel() { + if (this.abortController) { + this.abortController.abort(); + } + } +}; + +// src/core/prompt/instructionRefine.ts +function buildRefineSystemPrompt(existingInstructions) { + const existingSection = existingInstructions.trim() ? ` + +EXISTING INSTRUCTIONS (already in the user's system prompt): +\`\`\` +${existingInstructions.trim()} +\`\`\` + +When refining the new instruction: +- Consider how it fits with existing instructions +- Avoid duplicating existing instructions +- If the new instruction conflicts with an existing one, refine it to be complementary or note the conflict +- Match the format of existing instructions (section, heading, bullet points, style, etc.)` : ""; + return `You are an expert Prompt Engineer. You help users craft precise, effective system instructions for their AI assistant. + +**Your Goal**: Transform vague or simple user requests into **high-quality, actionable, and non-conflicting** system prompt instructions. + +**Process**: +1. **Analyze Intent**: What behavior does the user want to enforce or change? +2. **Check Context**: Does this conflict with existing instructions? + - *No Conflict*: Add as new. + - *Conflict*: Propose a **merged instruction** that resolves the contradiction (or ask if unsure). +3. **Refine**: Draft a clear, positive instruction (e.g., "Do X" instead of "Don't do Y"). +4. **Format**: Return *only* the Markdown snippet wrapped in \`\` tags. + +**Guidelines**: +- **Clarity**: Use precise language. Avoid ambiguity. +- **Scope**: Keep it focused. Don't add unrelated rules. +- **Format**: Valid Markdown (bullets \`-\` or sections \`##\`). +- **No Header**: Do NOT include a top-level header like \`# Custom Instructions\`. +- **Conflict Handling**: If the new rule directly contradicts an existing one, rewrite the *new* one to override specific cases or ask for clarification. + +**Output Format**: +- **Success**: \`...markdown content...\` +- **Ambiguity**: Plain text question. + +${existingSection} + +**Examples**: + +Input: "typescript for code" +Output: - **Code Language**: Always use TypeScript for code examples. Include proper type annotations and interfaces. + +Input: "be concise" +Output: - **Conciseness**: Provide brief, direct responses. Omit conversational filler and unnecessary explanations. + +Input: "organize coding style rules" +Output: ## Coding Standards + +- **Language**: Use TypeScript. +- **Style**: Prefer functional patterns. +- **Review**: Keep diffs small. + +Input: "use that thing from before" +Output: I'm not sure what you're referring to. Could you please clarify?`; +} +function parseInstructionRefineResponse(responseText) { + const instructionMatch = responseText.match(/([\s\S]*?)<\/instruction>/); + if (instructionMatch) { + return { success: true, refinedInstruction: instructionMatch[1].trim() }; + } + const trimmed = responseText.trim(); + if (trimmed) { + return { success: true, clarification: trimmed }; + } + return { success: false, error: "Empty response" }; +} + +// src/providers/claude/auxiliary/ClaudeInstructionRefineService.ts +var InstructionRefineService = class { + constructor(plugin) { + this.abortController = null; + this.sessionId = null; + this.existingInstructions = ""; + this.plugin = plugin; + } + resetConversation() { + this.sessionId = null; + } + async refineInstruction(rawInstruction, existingInstructions, onProgress) { + this.sessionId = null; + this.existingInstructions = existingInstructions; + const prompt = `Please refine this instruction: "${rawInstruction}"`; + return this.sendMessage(prompt, onProgress); + } + async continueConversation(message, onProgress) { + if (!this.sessionId) { + return { success: false, error: "No active conversation to continue" }; + } + return this.sendMessage(message, onProgress); + } + cancel() { + if (this.abortController) { + this.abortController.abort(); + this.abortController = null; + } + } + async sendMessage(prompt, onProgress) { + var _a5; + this.abortController = new AbortController(); + try { + const result = await runColdStartQuery({ + plugin: this.plugin, + systemPrompt: buildRefineSystemPrompt(this.existingInstructions), + tools: [], + resumeSessionId: (_a5 = this.sessionId) != null ? _a5 : void 0, + abortController: this.abortController, + onTextChunk: onProgress ? (accumulatedText) => onProgress(this.parseResponse(accumulatedText)) : void 0 + }, prompt); + this.sessionId = result.sessionId; + return this.parseResponse(result.text); + } catch (error48) { + const msg = error48 instanceof Error ? error48.message : "Unknown error"; + return { success: false, error: msg }; + } finally { + this.abortController = null; + } + } + parseResponse(responseText) { + const instructionMatch = responseText.match(/([\s\S]*?)<\/instruction>/); + if (instructionMatch) { + return { success: true, refinedInstruction: instructionMatch[1].trim() }; + } + const trimmed = responseText.trim(); + if (trimmed) { + return { success: true, clarification: trimmed }; + } + return { success: false, error: "Empty response" }; + } +}; + +// src/core/prompt/titleGeneration.ts +var MAX_TITLE_INPUT_LENGTH = 500; +var MAX_TITLE_LENGTH = 50; +var TITLE_GENERATION_SYSTEM_PROMPT = `You are a specialist in summarizing user intent. + +**Task**: Generate a **concise, descriptive title** (max 50 chars) summarizing the user's task/request. + +**Rules**: +1. **Format**: Sentence case. No periods/quotes. +2. **Structure**: Start with a **strong verb** (e.g., Create, Fix, Debug, Explain, Analyze). +3. **Forbidden**: "Conversation with...", "Help me...", "Question about...", "I need...". +4. **Tech Context**: Detect and include the primary language/framework if code is present (e.g., "Debug Python script", "Refactor React hook"). + +**Output**: Return ONLY the raw title text.`; +function buildTitleGenerationPrompt(userMessage) { + const truncated = userMessage.length > MAX_TITLE_INPUT_LENGTH ? `${userMessage.slice(0, MAX_TITLE_INPUT_LENGTH)}...` : userMessage; + return `User's request: +""" +${truncated} +""" + +Generate a title for this conversation:`; +} +function parseTitleGenerationResponse(responseText) { + const trimmed = responseText.trim(); + if (!trimmed) { + return null; + } + let title = trimmed; + if (title.startsWith('"') && title.endsWith('"') || title.startsWith("'") && title.endsWith("'")) { + title = title.slice(1, -1); + } + title = title.replace(/[.!?:;,]+$/, ""); + if (title.length > MAX_TITLE_LENGTH) { + title = `${title.slice(0, MAX_TITLE_LENGTH - 3)}...`; + } + return title || null; +} + +// src/providers/claude/auxiliary/ClaudeTitleGenerationService.ts +init_env(); +var TitleGenerationService = class { + constructor(plugin) { + this.activeGenerations = /* @__PURE__ */ new Map(); + this.plugin = plugin; + } + async generateTitle(conversationId, userMessage, callback) { + const existingController = this.activeGenerations.get(conversationId); + if (existingController) { + existingController.abort(); + } + const abortController = new AbortController(); + this.activeGenerations.set(conversationId, abortController); + const truncatedUser = this.truncateText(userMessage, 500); + const prompt = `User's request: +""" +${truncatedUser} +""" + +Generate a title for this conversation:`; + try { + const result = await runColdStartQuery({ + plugin: this.plugin, + systemPrompt: TITLE_GENERATION_SYSTEM_PROMPT, + tools: [], + model: this.resolveTitleModel(), + thinking: { disabled: true }, + persistSession: false, + abortController + }, prompt); + const title = this.parseTitle(result.text); + if (title) { + await this.safeCallback(callback, conversationId, { success: true, title }); + } else { + await this.safeCallback(callback, conversationId, { + success: false, + error: "Failed to parse title from response" + }); + } + } catch (error48) { + const msg = error48 instanceof Error ? error48.message : "Unknown error"; + await this.safeCallback(callback, conversationId, { success: false, error: msg }); + } finally { + this.activeGenerations.delete(conversationId); + } + } + cancel() { + for (const controller of this.activeGenerations.values()) { + controller.abort(); + } + this.activeGenerations.clear(); + } + resolveTitleModel() { + const envVars = parseEnvironmentVariables( + this.plugin.getActiveEnvironmentVariables("claude") + ); + const titleModel = this.plugin.settings.titleGenerationModel; + if (titleModel && claudeChatUIConfig.ownsModel( + titleModel, + this.plugin.settings + )) { + return titleModel; + } + return envVars.ANTHROPIC_DEFAULT_HAIKU_MODEL || "claude-haiku-4-5"; + } + truncateText(text, maxLength) { + if (text.length <= maxLength) return text; + return text.substring(0, maxLength) + "..."; + } + parseTitle(responseText) { + const trimmed = responseText.trim(); + if (!trimmed) return null; + let title = trimmed; + if (title.startsWith('"') && title.endsWith('"') || title.startsWith("'") && title.endsWith("'")) { + title = title.slice(1, -1); + } + title = title.replace(/[.!?:;,]+$/, ""); + if (title.length > 50) { + title = title.substring(0, 47) + "..."; + } + return title || null; + } + async safeCallback(callback, conversationId, result) { + try { + await callback(conversationId, result); + } catch (e2) { + } + } +}; + +// src/providers/claude/capabilities.ts +var CLAUDE_PROVIDER_CAPABILITIES = Object.freeze({ + providerId: "claude", + supportsPersistentRuntime: true, + supportsNativeHistory: true, + supportsPlanMode: true, + supportsRewind: true, + supportsFork: true, + supportsProviderCommands: true, + supportsImageAttachments: true, + supportsInstructionMode: true, + supportsMcpTools: true, + supportsTurnSteer: false, + reasoningControl: "effort", + planPathPrefix: "/.claude/plans/" +}); + +// src/providers/claude/env/ClaudeSettingsReconciler.ts +init_env(); +var ENV_HASH_MODEL_KEYS = [ + "ANTHROPIC_MODEL", + "ANTHROPIC_DEFAULT_OPUS_MODEL", + "ANTHROPIC_DEFAULT_SONNET_MODEL", + "ANTHROPIC_DEFAULT_HAIKU_MODEL" +]; +var ENV_HASH_PROVIDER_KEYS = ["ANTHROPIC_BASE_URL"]; +function computeEnvHash(envText) { + const envVars = parseEnvironmentVariables(envText || ""); + const allKeys = [...ENV_HASH_MODEL_KEYS, ...ENV_HASH_PROVIDER_KEYS]; + return allKeys.filter((key) => envVars[key]).map((key) => `${key}=${envVars[key]}`).sort().join("|"); +} +var claudeSettingsReconciler = { + reconcileModelWithEnvironment(settings11, conversations) { + const envText = getRuntimeEnvironmentText(settings11, "claude"); + const currentHash = computeEnvHash(envText); + const savedHash = getClaudeProviderSettings(settings11).environmentHash; + if (currentHash === savedHash) { + return { changed: false, invalidatedConversations: [] }; + } + const invalidatedConversations = []; + for (const conv of conversations) { + if (conv.sessionId) { + conv.sessionId = null; + invalidatedConversations.push(conv); + } + } + const currentModel = typeof settings11.model === "string" ? settings11.model : ""; + const nextModel = resolveClaudeModelSelection(settings11, currentModel); + if (nextModel) { + settings11.model = nextModel; + } + updateClaudeProviderSettings(settings11, { environmentHash: currentHash }); + return { changed: true, invalidatedConversations }; + }, + normalizeModelVariantSettings(settings11) { + const claudeSettings = getClaudeProviderSettings(settings11); + let changed = false; + const normalize3 = (model2) => normalizeVisibleModelVariant( + model2, + claudeSettings.enableOpus1M, + claudeSettings.enableSonnet1M + ); + const model = settings11.model; + const normalizedModel = normalize3(model); + if (model !== normalizedModel) { + settings11.model = normalizedModel; + changed = true; + } + const titleModel = settings11.titleGenerationModel; + if (titleModel) { + const normalizedTitleModel = normalize3(titleModel); + if (titleModel !== normalizedTitleModel) { + settings11.titleGenerationModel = normalizedTitleModel; + changed = true; + } + } + const lastClaudeModel = claudeSettings.lastModel; + if (lastClaudeModel) { + const normalizedLastClaudeModel = normalize3(lastClaudeModel); + if (lastClaudeModel !== normalizedLastClaudeModel) { + updateClaudeProviderSettings(settings11, { lastModel: normalizedLastClaudeModel }); + changed = true; + } + } + return changed; + } +}; + +// src/providers/claude/types/providerState.ts +function getClaudeState(providerState) { + return providerState != null ? providerState : {}; +} + +// src/providers/claude/history/sdkAsyncSubagent.ts +function extractAgentIdFromToolUseResult(toolUseResult) { + var _a5, _b3; + if (!toolUseResult || typeof toolUseResult !== "object") { + return null; + } + const record2 = toolUseResult; + const directAgentId = (_a5 = record2.agentId) != null ? _a5 : record2.agent_id; + if (typeof directAgentId === "string" && directAgentId.length > 0) { + return directAgentId; + } + const data = record2.data; + if (data && typeof data === "object") { + const nested = data; + const nestedAgentId = (_b3 = nested.agent_id) != null ? _b3 : nested.agentId; + if (typeof nestedAgentId === "string" && nestedAgentId.length > 0) { + return nestedAgentId; + } + } + return null; +} +function resolveToolUseResultStatus(toolUseResult, fallbackStatus) { + var _a5; + if (!toolUseResult || typeof toolUseResult !== "object") { + return fallbackStatus; + } + const record2 = toolUseResult; + const rawStatus = (_a5 = record2.retrieval_status) != null ? _a5 : record2.status; + const status = typeof rawStatus === "string" ? rawStatus.toLowerCase() : ""; + if (status === "error" || status === "failed" || status === "stopped" || status === "killed") { + return "error"; + } + if (status === "completed" || status === "success") { + return "completed"; + } + if (record2.isAsync === true || status === "async_launched") { + return "running"; + } + return fallbackStatus; +} +function buildAsyncSubagentInfo(toolCall, toolUseResult, asyncResults) { + var _a5, _b3, _c2; + const agentId = extractAgentIdFromToolUseResult(toolUseResult); + if (!agentId) { + return null; + } + const queueResult = asyncResults.get(agentId); + const description = ((_a5 = toolCall.input) == null ? void 0 : _a5.description) || "Background task"; + const prompt = ((_b3 = toolCall.input) == null ? void 0 : _b3.prompt) || ""; + const finalResult = (_c2 = queueResult == null ? void 0 : queueResult.result) != null ? _c2 : toolCall.result; + let toolCallFallback = "running"; + if (toolCall.status === "error") { + toolCallFallback = "error"; + } else if (toolCall.status === "completed") { + toolCallFallback = "completed"; + } + const status = queueResult ? resolveToolUseResultStatus({ status: queueResult.status }, "completed") : resolveToolUseResultStatus(toolUseResult, toolCallFallback); + const taskStatus = status === "orphaned" ? "error" : status; + return { + id: toolCall.id, + description, + prompt, + mode: "async", + isExpanded: false, + status: taskStatus, + toolCalls: [], + asyncStatus: status, + agentId, + result: finalResult + }; +} + +// src/providers/claude/history/sdkBranchFilter.ts +function filterActiveBranch(entries, resumeAtMessageId) { + var _a5, _b3; + if (entries.length === 0) { + return []; + } + function isRealUserBranchChild(entry) { + return !!entry && entry.type === "user" && !("toolUseResult" in entry) && !entry.isMeta && !("sourceToolUseID" in entry); + } + function isDirectRealUserBranchChild(parentUuid, entry) { + return !!entry && entry.parentUuid === parentUuid && isRealUserBranchChild(entry); + } + const seen = /* @__PURE__ */ new Set(); + const deduped = []; + for (const entry of entries) { + if (entry.uuid) { + if (seen.has(entry.uuid)) { + continue; + } + seen.add(entry.uuid); + } + deduped.push(entry); + } + const progressUuids = /* @__PURE__ */ new Set(); + const progressParentOf = /* @__PURE__ */ new Map(); + for (const entry of deduped) { + if (entry.type === "progress" && entry.uuid) { + progressUuids.add(entry.uuid); + progressParentOf.set(entry.uuid, (_a5 = entry.parentUuid) != null ? _a5 : null); + } + } + function resolveParent(parentUuid) { + var _a6; + if (!parentUuid) { + return parentUuid; + } + let current2 = parentUuid; + let guard = progressUuids.size + 1; + while (current2 && progressUuids.has(current2)) { + if (--guard < 0) { + break; + } + current2 = (_a6 = progressParentOf.get(current2)) != null ? _a6 : null; + } + return current2; + } + const conversationEntries = deduped.filter((entry) => entry.type !== "progress"); + const byUuid = /* @__PURE__ */ new Map(); + const childrenOf = /* @__PURE__ */ new Map(); + for (const entry of conversationEntries) { + if (entry.uuid) { + byUuid.set(entry.uuid, entry); + } + const effectiveParent = (_b3 = resolveParent(entry.parentUuid)) != null ? _b3 : null; + if (effectiveParent && entry.uuid) { + let children = childrenOf.get(effectiveParent); + if (!children) { + children = /* @__PURE__ */ new Set(); + childrenOf.set(effectiveParent, children); + } + children.add(entry.uuid); + } + } + function findLatestLeaf() { + for (let i = conversationEntries.length - 1; i >= 0; i--) { + const uuid3 = conversationEntries[i].uuid; + if (uuid3 && !childrenOf.has(uuid3)) { + return conversationEntries[i]; + } + } + return void 0; + } + const latestLeaf = findLatestLeaf(); + const latestBranchUuids = /* @__PURE__ */ new Set(); + const activeChildOf = /* @__PURE__ */ new Map(); + let latestCurrent = latestLeaf; + while (latestCurrent == null ? void 0 : latestCurrent.uuid) { + latestBranchUuids.add(latestCurrent.uuid); + const parent = resolveParent(latestCurrent.parentUuid); + if (parent) { + activeChildOf.set(parent, latestCurrent.uuid); + } + latestCurrent = parent ? byUuid.get(parent) : void 0; + } + const conversationContentCache = /* @__PURE__ */ new Map(); + function hasConversationContent(uuid3) { + const cached2 = conversationContentCache.get(uuid3); + if (cached2 !== void 0) { + return cached2; + } + const entry = byUuid.get(uuid3); + let result = false; + if ((entry == null ? void 0 : entry.type) === "assistant") { + result = true; + } else if ((entry == null ? void 0 : entry.type) === "user" && !entry.isMeta && !("sourceToolUseID" in entry)) { + result = true; + } else { + const children = childrenOf.get(uuid3); + if (children) { + for (const childUuid of children) { + if (hasConversationContent(childUuid)) { + result = true; + break; + } + } + } + } + conversationContentCache.set(uuid3, result); + return result; + } + const hasBranching = [...latestBranchUuids].some((uuid3) => { + const children = childrenOf.get(uuid3); + if (!children || children.size <= 1) { + return false; + } + const activeChildUuid = activeChildOf.get(uuid3); + let sawRealUserChild = false; + let sawAlternateConversationChild = false; + for (const childUuid of children) { + const child = byUuid.get(childUuid); + if (isDirectRealUserBranchChild(uuid3, child)) { + sawRealUserChild = true; + } + if (childUuid !== activeChildUuid && hasConversationContent(childUuid)) { + sawAlternateConversationChild = true; + } + if (sawRealUserChild && sawAlternateConversationChild) { + return true; + } + } + return false; + }); + let leaf; + if (hasBranching) { + leaf = latestLeaf; + if (resumeAtMessageId && (leaf == null ? void 0 : leaf.uuid) && byUuid.has(resumeAtMessageId)) { + let current2 = leaf; + while (current2 == null ? void 0 : current2.uuid) { + if (current2.uuid === resumeAtMessageId) { + leaf = current2; + break; + } + const parent = resolveParent(current2.parentUuid); + current2 = parent ? byUuid.get(parent) : void 0; + } + } + } else if (resumeAtMessageId) { + leaf = byUuid.get(resumeAtMessageId); + } else { + return conversationEntries; + } + if (!(leaf == null ? void 0 : leaf.uuid)) { + return conversationEntries; + } + const activeUuids = /* @__PURE__ */ new Set(); + let current = leaf; + while (current == null ? void 0 : current.uuid) { + activeUuids.add(current.uuid); + const parent = resolveParent(current.parentUuid); + current = parent ? byUuid.get(parent) : void 0; + } + if (hasBranching) { + const ancestorUuids = [...activeUuids]; + const pending = []; + for (const uuid3 of ancestorUuids) { + const children = childrenOf.get(uuid3); + if (!children || children.size <= 1) { + continue; + } + const activeChildUuid = activeChildOf.get(uuid3); + if (activeChildUuid && isDirectRealUserBranchChild(uuid3, byUuid.get(activeChildUuid))) { + continue; + } + for (const childUuid of children) { + if (activeUuids.has(childUuid)) { + continue; + } + const child = byUuid.get(childUuid); + if (!child || isRealUserBranchChild(child)) { + continue; + } + activeUuids.add(childUuid); + pending.push(childUuid); + } + } + while (pending.length > 0) { + const parentUuid = pending.pop(); + const children = childrenOf.get(parentUuid); + if (!children) { + continue; + } + for (const childUuid of children) { + if (activeUuids.has(childUuid)) { + continue; + } + const child = byUuid.get(childUuid); + if (!child || isRealUserBranchChild(child)) { + continue; + } + activeUuids.add(childUuid); + pending.push(childUuid); + } + } + } + const entryCount = conversationEntries.length; + const prevIsActive = new Array(entryCount); + const nextIsActive = new Array(entryCount); + let lastPrevActive = false; + for (let i = 0; i < entryCount; i++) { + if (conversationEntries[i].uuid) { + lastPrevActive = activeUuids.has(conversationEntries[i].uuid); + } + prevIsActive[i] = lastPrevActive; + } + let lastNextActive = false; + for (let i = entryCount - 1; i >= 0; i--) { + if (conversationEntries[i].uuid) { + lastNextActive = activeUuids.has(conversationEntries[i].uuid); + } + nextIsActive[i] = lastNextActive; + } + return conversationEntries.filter((entry, idx) => { + if (entry.uuid) { + return activeUuids.has(entry.uuid); + } + return prevIsActive[idx] && nextIsActive[idx]; + }); +} + +// src/core/tools/toolInput.ts +function extractResolvedAnswers(toolUseResult) { + if (typeof toolUseResult !== "object" || toolUseResult === null) return void 0; + const r = toolUseResult; + return normalizeAnswersObject(r.answers); +} +function normalizeAnswerValue(value) { + if (typeof value === "string") return value; + if (Array.isArray(value)) { + const normalized = value.map((item) => typeof item === "string" ? item : String(item)).filter(Boolean).filter((item) => item.length > 0); + if (normalized.length === 0) return void 0; + return normalized.length === 1 ? normalized[0] : normalized; + } + if (typeof value === "object" && value !== null) { + const record2 = value; + if ("answers" in record2) return normalizeAnswerValue(record2.answers); + if ("answer" in record2) return normalizeAnswerValue(record2.answer); + if ("value" in record2) return normalizeAnswerValue(record2.value); + } + if (typeof value === "number" || typeof value === "boolean") return String(value); + return void 0; +} +function normalizeAnswersObject(value) { + if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0; + const answers = {}; + for (const [question, rawValue] of Object.entries(value)) { + const normalized = normalizeAnswerValue(rawValue); + if (normalized) { + answers[question] = normalized; + } + } + return Object.keys(answers).length > 0 ? answers : void 0; +} +function parseAnswersFromJsonObject(resultText) { + var _a5; + const start = resultText.indexOf("{"); + const end = resultText.lastIndexOf("}"); + if (start < 0 || end <= start) return void 0; + try { + const parsed = JSON.parse(resultText.slice(start, end + 1)); + if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) { + const record2 = parsed; + return (_a5 = normalizeAnswersObject(record2.answers)) != null ? _a5 : normalizeAnswersObject(parsed); + } + return normalizeAnswersObject(parsed); + } catch (e2) { + return void 0; + } +} +function parseAnswersFromQuotedPairs(resultText) { + var _a5, _b3; + const answers = {}; + const pattern = /"([^"]+)"="([^"]*)"/g; + for (const match of resultText.matchAll(pattern)) { + const question = (_a5 = match[1]) == null ? void 0 : _a5.trim(); + if (!question) continue; + answers[question] = (_b3 = match[2]) != null ? _b3 : ""; + } + return Object.keys(answers).length > 0 ? answers : void 0; +} +function extractResolvedAnswersFromResultText(result) { + var _a5; + if (typeof result !== "string") return void 0; + const trimmed = result.trim(); + if (!trimmed) return void 0; + return (_a5 = parseAnswersFromJsonObject(trimmed)) != null ? _a5 : parseAnswersFromQuotedPairs(trimmed); +} + +// src/utils/diff.ts +function structuredPatchToDiffLines(hunks) { + const result = []; + for (const hunk of hunks) { + let oldLineNum = hunk.oldStart; + let newLineNum = hunk.newStart; + for (const line of hunk.lines) { + const prefix = line[0]; + const text = line.slice(1); + if (prefix === "+") { + result.push({ type: "insert", text, newLineNum: newLineNum++ }); + } else if (prefix === "-") { + result.push({ type: "delete", text, oldLineNum: oldLineNum++ }); + } else { + result.push({ type: "equal", text, oldLineNum: oldLineNum++, newLineNum: newLineNum++ }); + } + } + } + return result; +} +function countLineChanges(diffLines) { + let added = 0; + let removed = 0; + for (const line of diffLines) { + if (line.type === "insert") added++; + else if (line.type === "delete") removed++; + } + return { added, removed }; +} +function parseApplyPatchDiffs(patchText) { + if (!patchText.trim()) return []; + const fileDiffs = []; + const lines = patchText.split(/\r?\n/); + let current = null; + const flushCurrent = () => { + if (!current) return; + fileDiffs.push(buildApplyPatchFileDiff(current)); + current = null; + }; + for (const line of lines) { + if (line.startsWith("*** Begin Patch") || line.startsWith("*** End Patch")) { + continue; + } + if (line.startsWith("*** Add File: ")) { + flushCurrent(); + current = { + filePath: line.slice("*** Add File: ".length).trim(), + operation: "add", + rawLines: [] + }; + continue; + } + if (line.startsWith("*** Update File: ")) { + flushCurrent(); + current = { + filePath: line.slice("*** Update File: ".length).trim(), + operation: "update", + rawLines: [] + }; + continue; + } + if (line.startsWith("*** Delete File: ")) { + flushCurrent(); + fileDiffs.push({ + filePath: line.slice("*** Delete File: ".length).trim(), + operation: "delete", + diffLines: [], + stats: { added: 0, removed: 0 } + }); + continue; + } + if (!current) continue; + if (line.startsWith("*** Move to: ")) { + current.movedTo = line.slice("*** Move to: ".length).trim(); + continue; + } + if (line === "*** End of File" || line.startsWith("@@") || line.startsWith("--- ") || line.startsWith("+++ ")) { + continue; + } + const prefix = line[0]; + if (prefix === "+" || prefix === "-" || prefix === " ") { + current.rawLines.push(line); + } + } + flushCurrent(); + return fileDiffs; +} +function parseFileUpdateChangeDiffs(changes) { + if (!Array.isArray(changes)) return []; + return changes.map(parseFileUpdateChangeDiff).filter((diff) => diff !== null); +} +function extractDiffData(toolUseResult, toolCall) { + var _a5, _b3; + const filePath = (_b3 = (_a5 = getNonEmptyStringValue(toolCall.input.file_path)) != null ? _a5 : getNonEmptyStringValue(toolCall.input.path)) != null ? _b3 : "file"; + if (toolUseResult && typeof toolUseResult === "object") { + const result = toolUseResult; + if (Array.isArray(result.structuredPatch) && result.structuredPatch.length > 0) { + const resultFilePath = (typeof result.filePath === "string" ? result.filePath : null) || filePath; + const hunks = result.structuredPatch; + const diffLines = structuredPatchToDiffLines(hunks); + const stats = countLineChanges(diffLines); + return { filePath: resultFilePath, diffLines, stats }; + } + const unifiedDiff = getUnifiedDiffText(result); + if (unifiedDiff) { + const diffLines = parseUnifiedDiffLines(unifiedDiff); + if (diffLines.length > 0) { + const resultFilePath = (typeof result.filePath === "string" ? result.filePath : null) || (typeof result.path === "string" ? result.path : null) || filePath; + return { filePath: resultFilePath, diffLines, stats: countLineChanges(diffLines) }; + } + } + } + return diffFromToolInput(toolCall, filePath); +} +function diffFromToolInput(toolCall, filePath) { + if (toolCall.name === "Edit") { + const oldStr = toolCall.input.old_string; + const newStr = toolCall.input.new_string; + if (typeof oldStr === "string" && typeof newStr === "string") { + const diffLines = buildReplacementDiffLines([{ oldText: oldStr, newText: newStr }]); + return { filePath, diffLines, stats: countLineChanges(diffLines) }; + } + const editPairs = getEditPairs(toolCall.input); + if (editPairs.length > 0) { + const diffLines = buildReplacementDiffLines(editPairs); + return { filePath, diffLines, stats: countLineChanges(diffLines) }; + } + } + if (toolCall.name === "Write") { + const content = toolCall.input.content; + if (typeof content === "string") { + const newLines = content.split("\n"); + const diffLines = newLines.map((text, i) => ({ + type: "insert", + text, + newLineNum: i + 1 + })); + return { filePath, diffLines, stats: { added: newLines.length, removed: 0 } }; + } + } + return void 0; +} +function getUnifiedDiffText(result) { + if (typeof result.diff === "string" && result.diff.trim()) { + return result.diff; + } + const details = result.details; + if (details && typeof details === "object" && !Array.isArray(details)) { + const diff = details.diff; + if (typeof diff === "string" && diff.trim()) { + return diff; + } + } + return null; +} +function getEditPairs(input) { + const topLevelPair = getReplacementPair(input); + if (topLevelPair) { + return [topLevelPair]; + } + const edits = input.edits; + if (!Array.isArray(edits)) { + return []; + } + return edits.map(getReplacementPair).filter((pair) => pair !== null); +} +function getReplacementPair(value) { + var _a5, _b3, _c2, _d; + if (!value || typeof value !== "object" || Array.isArray(value)) { + return null; + } + const record2 = value; + const oldText = getStringValue((_b3 = (_a5 = record2.oldText) != null ? _a5 : record2.old_text) != null ? _b3 : record2.old_string); + const newText = getStringValue((_d = (_c2 = record2.newText) != null ? _c2 : record2.new_text) != null ? _d : record2.new_string); + return oldText !== null && newText !== null ? { oldText, newText } : null; +} +function getStringValue(value) { + return typeof value === "string" ? value : null; +} +function getNonEmptyStringValue(value) { + return typeof value === "string" && value.trim() ? value : null; +} +function buildReplacementDiffLines(pairs) { + const diffLines = []; + let oldLineNum = 1; + let newLineNum = 1; + for (const pair of pairs) { + for (const line of pair.oldText.split("\n")) { + diffLines.push({ type: "delete", text: line, oldLineNum: oldLineNum++ }); + } + for (const line of pair.newText.split("\n")) { + diffLines.push({ type: "insert", text: line, newLineNum: newLineNum++ }); + } + } + return diffLines; +} +function buildApplyPatchFileDiff(current) { + const diffLines = []; + let oldLineNum = 1; + let newLineNum = 1; + for (const line of current.rawLines) { + const prefix = line[0]; + const text = line.slice(1); + if (prefix === "+") { + diffLines.push({ type: "insert", text, newLineNum: newLineNum++ }); + continue; + } + if (prefix === "-") { + diffLines.push({ type: "delete", text, oldLineNum: oldLineNum++ }); + continue; + } + diffLines.push({ type: "equal", text, oldLineNum: oldLineNum++, newLineNum: newLineNum++ }); + } + const result = { + filePath: current.filePath, + operation: current.operation, + diffLines, + stats: countLineChanges(diffLines) + }; + if (current.movedTo) result.movedTo = current.movedTo; + return result; +} +function parseFileUpdateChangeDiff(change) { + var _a5; + if (!change || typeof change !== "object" || Array.isArray(change)) { + return null; + } + const record2 = change; + const filePath = typeof record2.path === "string" ? record2.path : ""; + const diff = typeof record2.diff === "string" ? record2.diff : ""; + if (!filePath || !diff.trim()) { + return null; + } + const kindInfo = parseFileUpdateKind((_a5 = record2.kind) != null ? _a5 : record2.type); + const diffLines = parseUnifiedDiffLines(diff); + return { + filePath, + operation: kindInfo.operation, + ...kindInfo.movedTo ? { movedTo: kindInfo.movedTo } : {}, + diffLines, + stats: countLineChanges(diffLines) + }; +} +function parseFileUpdateKind(value) { + if (typeof value === "string") { + return { operation: normalizePatchOperation(value) }; + } + if (value && typeof value === "object" && !Array.isArray(value)) { + const record2 = value; + const type = typeof record2.type === "string" ? record2.type : ""; + const movedTo = typeof record2.move_path === "string" ? record2.move_path : void 0; + return { + operation: normalizePatchOperation(type), + ...movedTo ? { movedTo } : {} + }; + } + return { operation: "update" }; +} +function normalizePatchOperation(value) { + if (value === "add" || value === "delete" || value === "update") { + return value; + } + return "update"; +} +function parseUnifiedDiffLines(diffText) { + const diffLines = []; + let oldLineNum = 1; + let newLineNum = 1; + for (const line of diffText.split(/\r?\n/)) { + if (!line) continue; + if (line.startsWith("--- ") || line.startsWith("+++ ")) continue; + if (line.startsWith("@@")) { + const match = line.match(/^@@\s+-(\d+)(?:,\d+)?\s+\+(\d+)(?:,\d+)?\s+@@/); + if (match) { + oldLineNum = Number(match[1]); + newLineNum = Number(match[2]); + } + continue; + } + const prefix = line[0]; + const text = line.slice(1); + if (prefix === "+") { + diffLines.push({ type: "insert", text, newLineNum: newLineNum++ }); + } else if (prefix === "-") { + diffLines.push({ type: "delete", text, oldLineNum: oldLineNum++ }); + } else if (prefix === " ") { + diffLines.push({ type: "equal", text, oldLineNum: oldLineNum++, newLineNum: newLineNum++ }); + } + } + return diffLines; +} + +// src/utils/interrupt.ts +var INTERRUPT_MARKERS = /* @__PURE__ */ new Set([ + "[Request interrupted by user]", + "[Request interrupted by user for tool use]" +]); +var COMPACTION_CANCELED_STDERR_PATTERN = /^\s*Error:\s*Compaction canceled\.?\s*<\/local-command-stderr>$/i; +function normalize2(text) { + return text.trim(); +} +function isBracketInterruptText(text) { + return INTERRUPT_MARKERS.has(normalize2(text)); +} +function isCompactionCanceledStderr(text) { + return COMPACTION_CANCELED_STDERR_PATTERN.test(normalize2(text)); +} +function isInterruptSignalText(text) { + return isBracketInterruptText(text) || isCompactionCanceledStderr(text); +} + +// src/core/tools/toolResultContent.ts +function extractToolResultContent(content, options) { + if (typeof content === "string") return content; + if (content == null) return ""; + if (Array.isArray(content)) { + const textParts = content.filter(isTextBlock).map((block) => block.text); + if (textParts.length > 0) return textParts.join("\n"); + if (content.length > 0) return JSON.stringify(content, null, options == null ? void 0 : options.fallbackIndent); + return ""; + } + return JSON.stringify(content, null, options == null ? void 0 : options.fallbackIndent); +} +function isTextBlock(block) { + if (!block || typeof block !== "object") return false; + const record2 = block; + return record2.type === "text" && typeof record2.text === "string"; +} + +// src/providers/claude/history/sdkMessageParsing.ts +function extractTextContent(content) { + if (!content) { + return ""; + } + if (typeof content === "string") { + return content; + } + return content.filter((block) => block.type === "text" && typeof block.text === "string" && block.text.trim() !== "(no content)").map((block) => block.text).join("\n"); +} +function isRebuiltContextContent(textContent) { + if (!/^(User|Assistant):\s/.test(textContent)) { + return false; + } + return textContent.includes("\n\nUser:") || textContent.includes("\n\nAssistant:") || textContent.includes("\n\nA:"); +} +function extractDisplayContent(textContent) { + return extractContentBeforeXmlContext(textContent); +} +function extractImages(content) { + if (!content || typeof content === "string") { + return void 0; + } + const imageBlocks = content.filter( + (block) => { + var _a5; + return block.type === "image" && !!((_a5 = block.source) == null ? void 0 : _a5.data); + } + ); + if (imageBlocks.length === 0) { + return void 0; + } + return imageBlocks.map((block, index) => ({ + id: `sdk-img-${Date.now()}-${index}`, + name: `image-${index + 1}`, + mediaType: block.source.media_type, + data: block.source.data, + size: Math.ceil(block.source.data.length * 0.75), + source: "paste" + })); +} +function extractToolCalls(content, toolResults) { + var _a5; + if (!content || typeof content === "string") { + return void 0; + } + const toolUses = content.filter( + (block) => block.type === "tool_use" && !!block.id && !!block.name + ); + if (toolUses.length === 0) { + return void 0; + } + const results = toolResults != null ? toolResults : /* @__PURE__ */ new Map(); + if (!toolResults) { + for (const block of content) { + if (block.type === "tool_result" && block.tool_use_id) { + results.set(block.tool_use_id, { + content: extractToolResultContent(block.content), + isError: (_a5 = block.is_error) != null ? _a5 : false + }); + } + } + } + return toolUses.map((block) => { + var _a6; + const result = results.get(block.id); + return { + id: block.id, + name: block.name, + input: (_a6 = block.input) != null ? _a6 : {}, + status: result ? result.isError ? "error" : "completed" : "running", + result: result == null ? void 0 : result.content, + isExpanded: false + }; + }); +} +function mapContentBlocks(content) { + if (!content || typeof content === "string") { + return void 0; + } + const blocks = []; + for (const block of content) { + switch (block.type) { + case "text": { + const text = block.text; + const trimmed = text == null ? void 0 : text.trim(); + if (text && trimmed && trimmed !== "(no content)") { + blocks.push({ type: "text", content: text }); + } + break; + } + case "thinking": + if (block.thinking) { + blocks.push({ type: "thinking", content: block.thinking }); + } + break; + case "tool_use": + if (block.id) { + blocks.push({ type: "tool_use", toolId: block.id }); + } + break; + default: + break; + } + } + return blocks.length > 0 ? blocks : void 0; +} +function parseSDKMessageToChat(sdkMsg, toolResults) { + var _a5; + if (sdkMsg.type === "file-history-snapshot") { + return null; + } + if (sdkMsg.type === "system") { + if (sdkMsg.subtype === "compact_boundary") { + const timestamp2 = sdkMsg.timestamp ? new Date(sdkMsg.timestamp).getTime() : Date.now(); + return { + id: sdkMsg.uuid || `compact-${timestamp2}-${Math.random().toString(36).slice(2)}`, + role: "assistant", + content: "", + timestamp: timestamp2, + contentBlocks: [{ type: "context_compacted" }] + }; + } + return null; + } + if (sdkMsg.type === "result") { + return null; + } + if (sdkMsg.type !== "user" && sdkMsg.type !== "assistant") { + return null; + } + const content = (_a5 = sdkMsg.message) == null ? void 0 : _a5.content; + const textContent = extractTextContent(content); + const images = sdkMsg.type === "user" ? extractImages(content) : void 0; + const hasToolUse = Array.isArray(content) && content.some((block) => block.type === "tool_use"); + const hasImages = !!images && images.length > 0; + if (!textContent && !hasToolUse && !hasImages && (!content || typeof content === "string")) { + return null; + } + const timestamp = sdkMsg.timestamp ? new Date(sdkMsg.timestamp).getTime() : Date.now(); + const commandNameMatch = sdkMsg.type === "user" ? textContent.match(/(\/[^<]+)<\/command-name>/) : null; + let displayContent; + if (sdkMsg.type === "user") { + displayContent = commandNameMatch ? commandNameMatch[1] : extractDisplayContent(textContent); + } + const isInterrupt = sdkMsg.type === "user" && isInterruptSignalText(textContent); + const isRebuiltContext = sdkMsg.type === "user" && isRebuiltContextContent(textContent); + return { + id: sdkMsg.uuid || `sdk-${timestamp}-${Math.random().toString(36).slice(2)}`, + role: sdkMsg.type, + content: textContent, + displayContent, + timestamp, + toolCalls: sdkMsg.type === "assistant" ? extractToolCalls(content, toolResults) : void 0, + contentBlocks: sdkMsg.type === "assistant" ? mapContentBlocks(content) : void 0, + images, + ...sdkMsg.type === "user" && sdkMsg.uuid && { userMessageId: sdkMsg.uuid }, + ...sdkMsg.type === "assistant" && sdkMsg.uuid && { assistantMessageId: sdkMsg.uuid }, + ...isInterrupt && { isInterrupt: true }, + ...isRebuiltContext && { isRebuiltContext: true } + }; +} +function collectToolResults(sdkMessages) { + var _a5, _b3; + const results = /* @__PURE__ */ new Map(); + for (const sdkMsg of sdkMessages) { + const content = (_a5 = sdkMsg.message) == null ? void 0 : _a5.content; + if (!content || typeof content === "string") { + continue; + } + for (const block of content) { + if (block.type === "tool_result" && block.tool_use_id) { + results.set(block.tool_use_id, { + content: extractToolResultContent(block.content), + isError: (_b3 = block.is_error) != null ? _b3 : false + }); + } + } + } + return results; +} +function collectStructuredPatchResults(sdkMessages) { + var _a5; + const results = /* @__PURE__ */ new Map(); + for (const sdkMsg of sdkMessages) { + if (sdkMsg.type !== "user" || !sdkMsg.toolUseResult) { + continue; + } + const content = (_a5 = sdkMsg.message) == null ? void 0 : _a5.content; + if (!content || typeof content === "string") { + continue; + } + for (const block of content) { + if (block.type === "tool_result" && block.tool_use_id) { + results.set(block.tool_use_id, sdkMsg.toolUseResult); + } + } + } + return results; +} +function collectAsyncSubagentResults(sdkMessages) { + const results = /* @__PURE__ */ new Map(); + for (const sdkMsg of sdkMessages) { + if (sdkMsg.type !== "queue-operation") { + continue; + } + if (sdkMsg.operation !== "enqueue") { + continue; + } + if (typeof sdkMsg.content !== "string") { + continue; + } + if (!sdkMsg.content.includes("")) { + continue; + } + const taskId = extractXmlTag(sdkMsg.content, "task-id"); + const status = extractXmlTag(sdkMsg.content, "status"); + const result = extractXmlTag(sdkMsg.content, "result"); + if (!taskId || !result) { + continue; + } + results.set(taskId, { + result, + status: status != null ? status : "completed" + }); + } + return results; +} +function extractXmlTag(content, tagName) { + const regex = new RegExp(`<${tagName}>\\s*([\\s\\S]*?)\\s*`, "i"); + const match = content.match(regex); + if (!match || !match[1]) { + return null; + } + const trimmed = match[1].trim(); + return trimmed.length > 0 ? trimmed : null; +} +function isSystemInjectedMessage(sdkMsg) { + var _a5; + if (sdkMsg.type !== "user") { + return false; + } + if ("toolUseResult" in sdkMsg || "sourceToolUseID" in sdkMsg || !!sdkMsg.isMeta) { + return true; + } + const text = extractTextContent((_a5 = sdkMsg.message) == null ? void 0 : _a5.content); + if (!text) { + return false; + } + if (text.includes("") && text.includes("")) { + return false; + } + if (isCompactionCanceledStderr(text)) { + return false; + } + if (text.startsWith("This session is being continued from a previous conversation")) { + return true; + } + if (text.includes("")) { + return true; + } + if (text.includes("") || text.includes("")) { + return true; + } + if (text.includes("")) { + return true; + } + return false; +} +function mergeAssistantMessage(target, source) { + if (source.content) { + target.content = target.content ? `${target.content} + +${source.content}` : source.content; + } + if (source.toolCalls) { + target.toolCalls = [...target.toolCalls || [], ...source.toolCalls]; + } + if (source.contentBlocks) { + target.contentBlocks = [...target.contentBlocks || [], ...source.contentBlocks]; + } + if (source.assistantMessageId) { + target.assistantMessageId = source.assistantMessageId; + } +} +function hydrateStructuredToolResults(messages, toolUseResults) { + var _a5; + if (toolUseResults.size === 0) { + return; + } + for (const msg of messages) { + if (msg.role !== "assistant" || !msg.toolCalls) { + continue; + } + for (const toolCall of msg.toolCalls) { + const toolUseResult = toolUseResults.get(toolCall.id); + if (!toolUseResult) { + continue; + } + if (!toolCall.diffData) { + toolCall.diffData = extractDiffData(toolUseResult, toolCall); + } + if (toolCall.name === TOOL_ASK_USER_QUESTION) { + const answers = (_a5 = extractResolvedAnswers(toolUseResult)) != null ? _a5 : extractResolvedAnswersFromResultText(toolCall.result); + if (answers) { + toolCall.resolvedAnswers = answers; + } + } + } + } +} +function hydrateFallbackAskUserAnswers(messages) { + for (const msg of messages) { + if (msg.role !== "assistant" || !msg.toolCalls) { + continue; + } + for (const toolCall of msg.toolCalls) { + if (toolCall.name !== TOOL_ASK_USER_QUESTION || toolCall.resolvedAnswers) { + continue; + } + const answers = extractResolvedAnswersFromResultText(toolCall.result); + if (answers) { + toolCall.resolvedAnswers = answers; + } + } + } +} + +// src/providers/claude/history/sdkSessionPaths.ts +var import_fs9 = require("fs"); +var fs9 = __toESM(require("fs/promises")); +var os7 = __toESM(require("os")); +var path7 = __toESM(require("path")); +function encodeVaultPathForSDK(vaultPath) { + const absolutePath = path7.resolve(vaultPath); + return absolutePath.replace(/[^a-zA-Z0-9]/g, "-"); +} +function getSDKProjectsPath() { + return path7.join(os7.homedir(), ".claude", "projects"); +} +function isPathSafeId(value) { + if (!value || value.length === 0 || value.length > 128) { + return false; + } + if (value.includes("..") || value.includes("/") || value.includes("\\")) { + return false; + } + return /^[a-zA-Z0-9_-]+$/.test(value); +} +function isValidSessionId(sessionId) { + return isPathSafeId(sessionId); +} +function getSDKSessionPath(vaultPath, sessionId) { + if (!isValidSessionId(sessionId)) { + throw new Error(`Invalid session ID: ${sessionId}`); + } + const projectsPath = getSDKProjectsPath(); + const encodedVault = encodeVaultPathForSDK(vaultPath); + return path7.join(projectsPath, encodedVault, `${sessionId}.jsonl`); +} +function sdkSessionExists(vaultPath, sessionId) { + try { + const sessionPath = getSDKSessionPath(vaultPath, sessionId); + return (0, import_fs9.existsSync)(sessionPath); + } catch (e2) { + return false; + } +} +async function deleteSDKSession(vaultPath, sessionId) { + try { + const sessionPath = getSDKSessionPath(vaultPath, sessionId); + if (!(0, import_fs9.existsSync)(sessionPath)) { + return; + } + await fs9.unlink(sessionPath); + } catch (e2) { + } +} +async function readSDKSession(vaultPath, sessionId) { + try { + const sessionPath = getSDKSessionPath(vaultPath, sessionId); + if (!(0, import_fs9.existsSync)(sessionPath)) { + return { messages: [], skippedLines: 0 }; + } + const content = await fs9.readFile(sessionPath, "utf-8"); + const lines = content.split("\n").filter((line) => line.trim()); + const messages = []; + let skippedLines = 0; + for (const line of lines) { + try { + const msg = JSON.parse(line); + messages.push(msg); + } catch (e2) { + skippedLines++; + } + } + return { messages, skippedLines }; + } catch (error48) { + const errorMsg = error48 instanceof Error ? error48.message : String(error48); + return { messages: [], skippedLines: 0, error: errorMsg }; + } +} + +// src/providers/claude/history/sdkSubagentSidecar.ts +var import_fs10 = require("fs"); +var fs10 = __toESM(require("fs/promises")); +var path8 = __toESM(require("path")); + +// src/utils/subagentJsonl.ts +function extractFinalResultFromSubagentJsonl(content) { + var _a5; + const lines = content.split("\n").map((line) => line.trim()).filter((line) => line.length > 0 && line.startsWith("{")); + let lastAssistantText = null; + let lastResultText = null; + for (const line of lines) { + let raw; + try { + raw = JSON.parse(line); + } catch (e2) { + continue; + } + if (!raw || typeof raw !== "object") { + continue; + } + const record2 = raw; + if (typeof record2.result === "string" && record2.result.trim().length > 0) { + lastResultText = record2.result.trim(); + } + if (((_a5 = record2.message) == null ? void 0 : _a5.role) !== "assistant" || !Array.isArray(record2.message.content)) { + continue; + } + for (const blockRaw of record2.message.content) { + if (!blockRaw || typeof blockRaw !== "object") { + continue; + } + const block = blockRaw; + if (block.type === "text" && typeof block.text === "string" && block.text.trim().length > 0) { + lastAssistantText = block.text.trim(); + } + } + } + return lastAssistantText != null ? lastAssistantText : lastResultText; +} + +// src/providers/claude/history/sdkSubagentSidecar.ts +function isValidAgentId(agentId) { + return isPathSafeId(agentId); +} +function parseTimestampMs(raw) { + if (typeof raw !== "string") { + return Date.now(); + } + const parsed = Date.parse(raw); + return Number.isNaN(parsed) ? Date.now() : parsed; +} +function parseSubagentEvents(entry) { + var _a5; + if (!entry || typeof entry !== "object") { + return []; + } + const record2 = entry; + const content = (_a5 = record2.message) == null ? void 0 : _a5.content; + if (!Array.isArray(content)) { + return []; + } + const timestamp = parseTimestampMs(record2.timestamp); + const events = []; + for (const blockRaw of content) { + if (!blockRaw || typeof blockRaw !== "object") { + continue; + } + const block = blockRaw; + if (block.type === "tool_use") { + if (typeof block.id !== "string" || typeof block.name !== "string") { + continue; + } + events.push({ + type: "tool_use", + toolUseId: block.id, + toolName: block.name, + toolInput: block.input && typeof block.input === "object" ? block.input : {}, + timestamp + }); + continue; + } + if (block.type === "tool_result") { + if (typeof block.tool_use_id !== "string") { + continue; + } + events.push({ + type: "tool_result", + toolUseId: block.tool_use_id, + content: extractToolResultContent(block.content), + isError: block.is_error === true, + timestamp + }); + } + } + return events; +} +function buildToolCallsFromSubagentEvents(events) { + const toolsById = /* @__PURE__ */ new Map(); + for (const event of events) { + const existing = toolsById.get(event.toolUseId); + if (event.type === "tool_use") { + if (!existing) { + toolsById.set(event.toolUseId, { + toolCall: { + id: event.toolUseId, + name: event.toolName, + input: { ...event.toolInput }, + status: "running", + isExpanded: false + }, + hasToolUse: true, + hasToolResult: false, + timestamp: event.timestamp + }); + } else { + existing.toolCall.name = event.toolName; + existing.toolCall.input = { ...event.toolInput }; + existing.hasToolUse = true; + existing.timestamp = event.timestamp; + } + continue; + } + if (!existing) { + toolsById.set(event.toolUseId, { + toolCall: { + id: event.toolUseId, + name: "Unknown", + input: {}, + status: event.isError ? "error" : "completed", + result: event.content, + isExpanded: false + }, + hasToolUse: false, + hasToolResult: true, + timestamp: event.timestamp + }); + continue; + } + existing.toolCall.status = event.isError ? "error" : "completed"; + existing.toolCall.result = event.content; + existing.hasToolResult = true; + } + return Array.from(toolsById.values()).filter((entry) => entry.hasToolUse).sort((a, b2) => a.timestamp - b2.timestamp).map((entry) => entry.toolCall); +} +function getSubagentSidecarPath(vaultPath, sessionId, agentId) { + if (!isValidSessionId(sessionId) || !isValidAgentId(agentId)) { + return null; + } + const encodedVault = encodeVaultPathForSDK(vaultPath); + return path8.join( + getSDKProjectsPath(), + encodedVault, + sessionId, + "subagents", + `agent-${agentId}.jsonl` + ); +} +async function loadSubagentToolCalls(vaultPath, sessionId, agentId) { + const subagentFilePath = getSubagentSidecarPath(vaultPath, sessionId, agentId); + if (!subagentFilePath) { + return []; + } + try { + if (!(0, import_fs10.existsSync)(subagentFilePath)) { + return []; + } + const content = await fs10.readFile(subagentFilePath, "utf-8"); + const lines = content.split("\n").filter((line) => line.trim()); + const events = []; + const seen = /* @__PURE__ */ new Set(); + for (const line of lines) { + let raw; + try { + raw = JSON.parse(line); + } catch (e2) { + continue; + } + for (const event of parseSubagentEvents(raw)) { + const key = `${event.type}:${event.toolUseId}`; + if (seen.has(key)) { + continue; + } + seen.add(key); + events.push(event); + } + } + if (events.length === 0) { + return []; + } + return buildToolCallsFromSubagentEvents(events); + } catch (e2) { + return []; + } +} +async function loadSubagentFinalResult(vaultPath, sessionId, agentId) { + const subagentFilePath = getSubagentSidecarPath(vaultPath, sessionId, agentId); + if (!subagentFilePath) { + return null; + } + try { + if (!(0, import_fs10.existsSync)(subagentFilePath)) { + return null; + } + const content = await fs10.readFile(subagentFilePath, "utf-8"); + return extractFinalResultFromSubagentJsonl(content); + } catch (e2) { + return null; + } +} + +// src/providers/claude/history/ClaudeHistoryStore.ts +async function loadSDKSessionMessages(vaultPath, sessionId, resumeAtMessageId) { + var _a5, _b3, _c2; + const result = await readSDKSession(vaultPath, sessionId); + if (result.error) { + return { messages: [], skippedLines: result.skippedLines, error: result.error }; + } + const filteredEntries = filterActiveBranch(result.messages, resumeAtMessageId); + const toolResults = collectToolResults(filteredEntries); + const toolUseResults = collectStructuredPatchResults(filteredEntries); + const asyncSubagentResults = collectAsyncSubagentResults(filteredEntries); + const chatMessages = []; + let pendingAssistant = null; + for (const sdkMsg of filteredEntries) { + if (isSystemInjectedMessage(sdkMsg)) continue; + if (sdkMsg.type === "assistant" && ((_a5 = sdkMsg.message) == null ? void 0 : _a5.model) === "") continue; + const chatMsg = parseSDKMessageToChat(sdkMsg, toolResults); + if (!chatMsg) continue; + if (chatMsg.role === "assistant") { + const isCompactBoundary = (_b3 = chatMsg.contentBlocks) == null ? void 0 : _b3.some((b2) => b2.type === "context_compacted"); + if (isCompactBoundary) { + if (pendingAssistant) { + chatMessages.push(pendingAssistant); + } + chatMessages.push(chatMsg); + pendingAssistant = null; + } else if (pendingAssistant) { + mergeAssistantMessage(pendingAssistant, chatMsg); + } else { + pendingAssistant = chatMsg; + } + } else { + if (pendingAssistant) { + chatMessages.push(pendingAssistant); + pendingAssistant = null; + } + chatMessages.push(chatMsg); + } + } + if (pendingAssistant) { + chatMessages.push(pendingAssistant); + } + hydrateStructuredToolResults(chatMessages, toolUseResults); + hydrateFallbackAskUserAnswers(chatMessages); + if (toolUseResults.size > 0 || asyncSubagentResults.size > 0) { + const sidecarLoads = []; + for (const msg of chatMessages) { + if (msg.role !== "assistant" || !msg.toolCalls) continue; + for (const toolCall of msg.toolCalls) { + if (!isSubagentToolName(toolCall.name)) continue; + if (toolCall.subagent) continue; + if (((_c2 = toolCall.input) == null ? void 0 : _c2.run_in_background) !== true) continue; + const toolUseResult = toolUseResults.get(toolCall.id); + const subagent = buildAsyncSubagentInfo( + toolCall, + toolUseResult, + asyncSubagentResults + ); + if (subagent) { + toolCall.subagent = subagent; + if (subagent.result !== void 0) { + toolCall.result = subagent.result; + } + toolCall.status = subagent.status; + if (subagent.agentId && isValidAgentId(subagent.agentId)) { + sidecarLoads.push({ + subagent, + promise: loadSubagentToolCalls(vaultPath, sessionId, subagent.agentId) + }); + } + } + } + } + if (sidecarLoads.length > 0) { + const results = await Promise.all(sidecarLoads.map((s2) => s2.promise)); + for (let i = 0; i < sidecarLoads.length; i++) { + const toolCalls = results[i]; + if (toolCalls.length > 0) { + sidecarLoads[i].subagent.toolCalls = toolCalls; + } + } + } + } + chatMessages.sort((a, b2) => a.timestamp - b2.timestamp); + return { messages: chatMessages, skippedLines: result.skippedLines }; +} + +// src/providers/claude/history/ClaudeConversationHistoryService.ts +function chooseRicherResult(sdkResult, cachedResult) { + const sdkText = typeof sdkResult === "string" ? sdkResult.trim() : ""; + const cachedText = typeof cachedResult === "string" ? cachedResult.trim() : ""; + if (sdkText.length === 0 && cachedText.length === 0) return void 0; + if (sdkText.length === 0) return cachedResult; + if (cachedText.length === 0) return sdkResult; + return sdkText.length >= cachedText.length ? sdkResult : cachedResult; +} +function chooseRicherToolCalls(sdkToolCalls = [], cachedToolCalls = []) { + if (sdkToolCalls.length >= cachedToolCalls.length) { + return sdkToolCalls; + } + return cachedToolCalls; +} +function normalizeAsyncStatus(subagent, modeOverride) { + var _a5; + if (!subagent) return void 0; + const mode = modeOverride != null ? modeOverride : subagent.mode; + if (mode === "sync") return void 0; + if (mode === "async") return (_a5 = subagent.asyncStatus) != null ? _a5 : subagent.status; + return subagent.asyncStatus; +} +function isTerminalAsyncStatus(status) { + return status === "completed" || status === "error" || status === "orphaned"; +} +function mergeSubagentInfo(taskToolCall, cachedSubagent) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2; + const sdkSubagent = taskToolCall.subagent; + const cachedAsyncStatus = normalizeAsyncStatus(cachedSubagent); + if (!sdkSubagent) { + return { + ...cachedSubagent, + asyncStatus: cachedAsyncStatus, + result: chooseRicherResult(taskToolCall.result, cachedSubagent.result) + }; + } + const sdkAsyncStatus = normalizeAsyncStatus(sdkSubagent); + const sdkIsTerminal = isTerminalAsyncStatus(sdkAsyncStatus); + const cachedIsTerminal = isTerminalAsyncStatus(cachedAsyncStatus); + const sdkResult = (_a5 = taskToolCall.result) != null ? _a5 : sdkSubagent.result; + const preferred = !sdkIsTerminal && cachedIsTerminal ? cachedSubagent : sdkSubagent; + const mergedMode = (_d = (_b3 = sdkSubagent.mode) != null ? _b3 : cachedSubagent.mode) != null ? _d : ((_c2 = taskToolCall.input) == null ? void 0 : _c2.run_in_background) === true ? "async" : void 0; + const fallbackResult = chooseRicherResult(sdkResult, cachedSubagent.result); + const mergedResult = preferred === cachedSubagent ? (_e2 = cachedSubagent.result) != null ? _e2 : fallbackResult : fallbackResult; + const mergedAsyncStatus = normalizeAsyncStatus(preferred, mergedMode); + return { + ...cachedSubagent, + ...sdkSubagent, + description: sdkSubagent.description || cachedSubagent.description, + prompt: sdkSubagent.prompt || cachedSubagent.prompt, + mode: mergedMode, + status: preferred.status, + asyncStatus: mergedAsyncStatus, + result: mergedResult, + toolCalls: chooseRicherToolCalls(sdkSubagent.toolCalls, cachedSubagent.toolCalls), + agentId: sdkSubagent.agentId || cachedSubagent.agentId, + outputToolId: sdkSubagent.outputToolId || cachedSubagent.outputToolId, + startedAt: (_f2 = sdkSubagent.startedAt) != null ? _f2 : cachedSubagent.startedAt, + completedAt: (_g = sdkSubagent.completedAt) != null ? _g : cachedSubagent.completedAt, + isExpanded: (_h2 = sdkSubagent.isExpanded) != null ? _h2 : cachedSubagent.isExpanded + }; +} +function ensureTaskToolCall(msg, subagentId, subagent) { + msg.toolCalls = msg.toolCalls || []; + let taskToolCall = msg.toolCalls.find( + (tc2) => tc2.id === subagentId && isSubagentToolName(tc2.name) + ); + if (!taskToolCall) { + taskToolCall = { + id: subagentId, + name: TOOL_TASK, + input: { + description: subagent.description, + prompt: subagent.prompt || "", + ...subagent.mode === "async" ? { run_in_background: true } : {} + }, + status: subagent.status, + result: subagent.result, + isExpanded: false, + subagent + }; + msg.toolCalls.push(taskToolCall); + return taskToolCall; + } + if (!taskToolCall.input.description) { + taskToolCall.input.description = subagent.description; + } + if (!taskToolCall.input.prompt) { + taskToolCall.input.prompt = subagent.prompt || ""; + } + if (subagent.mode === "async") { + taskToolCall.input.run_in_background = true; + } + const mergedSubagent = mergeSubagentInfo(taskToolCall, subagent); + taskToolCall.status = mergedSubagent.status; + if (mergedSubagent.mode === "async") { + taskToolCall.input.run_in_background = true; + } + if (mergedSubagent.result !== void 0) { + taskToolCall.result = mergedSubagent.result; + } + taskToolCall.subagent = mergedSubagent; + return taskToolCall; +} +function dedupeMessages(messages) { + const seen = /* @__PURE__ */ new Set(); + const result = []; + for (const message of messages) { + if (seen.has(message.id)) continue; + seen.add(message.id); + result.push(message); + } + return result; +} +async function enrichAsyncSubagentToolCalls(subagentData, vaultPath, sessionIds) { + var _a5, _b3; + const uniqueSessionIds = [...new Set(sessionIds)]; + if (uniqueSessionIds.length === 0) return; + const loaderCache = /* @__PURE__ */ new Map(); + for (const subagent of Object.values(subagentData)) { + if (subagent.mode !== "async") continue; + if (!subagent.agentId) continue; + if (((_b3 = (_a5 = subagent.toolCalls) == null ? void 0 : _a5.length) != null ? _b3 : 0) > 0) continue; + for (const sessionId of uniqueSessionIds) { + const cacheKey = `${sessionId}:${subagent.agentId}`; + let loader = loaderCache.get(cacheKey); + if (!loader) { + loader = loadSubagentToolCalls(vaultPath, sessionId, subagent.agentId); + loaderCache.set(cacheKey, loader); + } + const recoveredToolCalls = await loader; + if (recoveredToolCalls.length === 0) continue; + subagent.toolCalls = recoveredToolCalls.map((toolCall) => ({ + ...toolCall, + input: { ...toolCall.input } + })); + break; + } + } +} +function applySubagentData(messages, subagentData) { + var _a5, _b3, _c2, _d, _e2; + const attachedSubagentIds = /* @__PURE__ */ new Set(); + for (const msg of messages) { + if (msg.role !== "assistant") continue; + for (const [subagentId, subagent] of Object.entries(subagentData)) { + const hasSubagentBlock = (_a5 = msg.contentBlocks) == null ? void 0 : _a5.some( + (block) => block.type === "subagent" && block.subagentId === subagentId || block.type === "tool_use" && block.toolId === subagentId + ); + const hasTaskToolCall = (_c2 = (_b3 = msg.toolCalls) == null ? void 0 : _b3.some((tc2) => tc2.id === subagentId)) != null ? _c2 : false; + if (!hasSubagentBlock && !hasTaskToolCall) continue; + ensureTaskToolCall(msg, subagentId, subagent); + if (!msg.contentBlocks) { + msg.contentBlocks = []; + } + let hasNormalizedSubagentBlock = false; + for (let i = 0; i < msg.contentBlocks.length; i++) { + const block = msg.contentBlocks[i]; + if (block.type === "tool_use" && block.toolId === subagentId) { + msg.contentBlocks[i] = { + type: "subagent", + subagentId, + mode: subagent.mode + }; + hasNormalizedSubagentBlock = true; + } else if (block.type === "subagent" && block.subagentId === subagentId && !block.mode) { + block.mode = subagent.mode; + hasNormalizedSubagentBlock = true; + } else if (block.type === "subagent" && block.subagentId === subagentId) { + hasNormalizedSubagentBlock = true; + } + } + if (!hasNormalizedSubagentBlock && hasTaskToolCall) { + msg.contentBlocks.push({ + type: "subagent", + subagentId, + mode: subagent.mode + }); + } + attachedSubagentIds.add(subagentId); + } + } + for (const [subagentId, subagent] of Object.entries(subagentData)) { + if (attachedSubagentIds.has(subagentId)) continue; + let anchor = [...messages].reverse().find((msg) => msg.role === "assistant"); + if (!anchor) { + anchor = { + id: `subagent-recovery-${subagentId}`, + role: "assistant", + content: "", + timestamp: (_e2 = (_d = subagent.completedAt) != null ? _d : subagent.startedAt) != null ? _e2 : Date.now(), + contentBlocks: [] + }; + messages.push(anchor); + } + ensureTaskToolCall(anchor, subagentId, subagent); + anchor.contentBlocks = anchor.contentBlocks || []; + const hasSubagentBlock = anchor.contentBlocks.some( + (block) => block.type === "subagent" && block.subagentId === subagentId + ); + if (!hasSubagentBlock) { + anchor.contentBlocks.push({ + type: "subagent", + subagentId, + mode: subagent.mode + }); + } + } +} +function buildPersistedSubagentData(messages) { + const result = {}; + for (const msg of messages) { + if (msg.role !== "assistant" || !msg.toolCalls) continue; + for (const toolCall of msg.toolCalls) { + if (!isSubagentToolName(toolCall.name) || !toolCall.subagent) continue; + result[toolCall.subagent.id] = toolCall.subagent; + } + } + return result; +} +function sanitizeProviderState(providerState) { + const sanitizedEntries = Object.entries(providerState).filter(([, value]) => value !== void 0); + if (sanitizedEntries.length === 0) { + return void 0; + } + return Object.fromEntries(sanitizedEntries); +} +var ClaudeConversationHistoryService = class { + constructor() { + this.hydratedConversationIds = /* @__PURE__ */ new Set(); + } + isPendingForkConversation(conversation) { + const state = getClaudeState(conversation.providerState); + return !!state.forkSource && !state.providerSessionId && !conversation.sessionId; + } + resolveSessionIdForConversation(conversation) { + var _a5, _b3, _c2, _d; + if (!conversation) return null; + const state = getClaudeState(conversation.providerState); + return (_d = (_c2 = (_a5 = state.providerSessionId) != null ? _a5 : conversation.sessionId) != null ? _c2 : (_b3 = state.forkSource) == null ? void 0 : _b3.sessionId) != null ? _d : null; + } + buildForkProviderState(sourceSessionId, resumeAt, _sourceProviderState) { + const state = { + forkSource: { sessionId: sourceSessionId, resumeAt } + }; + return state; + } + buildPersistedProviderState(conversation) { + const providerState = { + ...getClaudeState(conversation.providerState) + }; + const subagentData = buildPersistedSubagentData(conversation.messages); + if (Object.keys(subagentData).length > 0) { + providerState.subagentData = subagentData; + } else { + delete providerState.subagentData; + } + return sanitizeProviderState(providerState); + } + async hydrateConversationHistory(conversation, vaultPath) { + var _a5, _b3; + if (!vaultPath || this.hydratedConversationIds.has(conversation.id)) { + return; + } + const state = getClaudeState(conversation.providerState); + const isPendingFork = this.isPendingForkConversation(conversation); + const allSessionIds = isPendingFork ? [state.forkSource.sessionId] : [ + ...state.previousProviderSessionIds || [], + (_a5 = state.providerSessionId) != null ? _a5 : conversation.sessionId + ].filter((id) => !!id); + if (allSessionIds.length === 0) { + return; + } + const allSdkMessages = []; + let missingSessionCount = 0; + let errorCount = 0; + let successCount = 0; + const currentSessionId = isPendingFork ? state.forkSource.sessionId : (_b3 = state.providerSessionId) != null ? _b3 : conversation.sessionId; + for (const sessionId of allSessionIds) { + if (!sdkSessionExists(vaultPath, sessionId)) { + missingSessionCount++; + continue; + } + const isCurrentSession = sessionId === currentSessionId; + const truncateAt = isCurrentSession ? isPendingFork ? state.forkSource.resumeAt : conversation.resumeAtMessageId : void 0; + const result = await loadSDKSessionMessages(vaultPath, sessionId, truncateAt); + if (result.error) { + errorCount++; + continue; + } + successCount++; + allSdkMessages.push(...result.messages); + } + const allSessionsMissing = missingSessionCount === allSessionIds.length; + const hasLoadErrors = errorCount > 0 && successCount === 0 && !allSessionsMissing; + if (hasLoadErrors) { + return; + } + const filteredSdkMessages = allSdkMessages.filter((msg) => !msg.isRebuiltContext); + const merged = dedupeMessages([ + ...conversation.messages, + ...filteredSdkMessages + ]).sort((a, b2) => a.timestamp - b2.timestamp); + if (state.subagentData) { + await enrichAsyncSubagentToolCalls( + state.subagentData, + vaultPath, + allSessionIds + ); + applySubagentData(merged, state.subagentData); + } + conversation.messages = merged; + this.hydratedConversationIds.add(conversation.id); + } + async deleteConversationSession(conversation, vaultPath) { + var _a5; + const state = getClaudeState(conversation.providerState); + const sessionId = (_a5 = state.providerSessionId) != null ? _a5 : conversation.sessionId; + if (!vaultPath || !sessionId) { + return; + } + await deleteSDKSession(vaultPath, sessionId); + } +}; + +// src/providers/claude/runtime/ClaudeChatRuntime.ts +var import_obsidian14 = require("obsidian"); +init_env(); +init_path(); + +// src/utils/session.ts +var SESSION_ERROR_PATTERNS = [ + "session expired", + "session not found", + "invalid session", + "session invalid", + "process exited with code" +]; +var SESSION_ERROR_COMPOUND_PATTERNS = [ + { includes: ["session", "expired"] }, + { includes: ["resume", "failed"] }, + { includes: ["resume", "error"] } +]; +function isSessionExpiredError(error48) { + const msg = error48 instanceof Error ? error48.message.toLowerCase() : ""; + for (const pattern of SESSION_ERROR_PATTERNS) { + if (msg.includes(pattern)) { + return true; + } + } + for (const { includes } of SESSION_ERROR_COMPOUND_PATTERNS) { + if (includes.every((part) => msg.includes(part))) { + return true; + } + } + return false; +} +function formatToolInput(input, maxLength = 200) { + if (!input || Object.keys(input).length === 0) return ""; + try { + const parts = []; + for (const [key, value] of Object.entries(input)) { + if (value === void 0 || value === null) continue; + let valueStr; + if (typeof value === "string") { + valueStr = value.length > 100 ? `${value.slice(0, 100)}...` : value; + } else if (typeof value === "object") { + valueStr = "[object]"; + } else if (typeof value === "function") { + valueStr = "[function]"; + } else if (typeof value === "symbol") { + valueStr = value.description ? `[symbol:${value.description}]` : "[symbol]"; + } else if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") { + valueStr = `${value}`; + } else { + valueStr = "[unknown]"; + } + parts.push(`${key}=${valueStr}`); + } + const result = parts.join(", "); + return result.length > maxLength ? `${result.slice(0, maxLength)}...` : result; + } catch (e2) { + return "[input formatting error]"; + } +} +function formatToolCallForContext(toolCall, maxErrorLength = 500) { + var _a5; + const status = (_a5 = toolCall.status) != null ? _a5 : "completed"; + const isFailed = status === "error" || status === "blocked"; + const inputStr = formatToolInput(toolCall.input); + const inputPart = inputStr ? ` input: ${inputStr}` : ""; + if (!isFailed) { + return `[Tool ${toolCall.name}${inputPart} status=${status}]`; + } + const hasResult = typeof toolCall.result === "string" && toolCall.result.trim().length > 0; + if (!hasResult) { + return `[Tool ${toolCall.name}${inputPart} status=${status}]`; + } + const errorMsg = truncateToolResult(toolCall.result, maxErrorLength); + return `[Tool ${toolCall.name}${inputPart} status=${status}] error: ${errorMsg}`; +} +function truncateToolResult(result, maxLength = 500) { + if (result.length > maxLength) { + return `${result.slice(0, maxLength)}... (truncated)`; + } + return result; +} +function formatContextLine(message) { + if (!message.currentNote) { + return null; + } + return formatCurrentNote(message.currentNote); +} +function formatThinkingBlocks(message) { + if (!message.contentBlocks) return []; + const thinkingBlocks = message.contentBlocks.filter( + (block) => block.type === "thinking" + ); + if (thinkingBlocks.length === 0) return []; + const totalDuration = thinkingBlocks.reduce( + (sum, block) => { + var _a5; + return sum + ((_a5 = block.durationSeconds) != null ? _a5 : 0); + }, + 0 + ); + const durationPart = totalDuration > 0 ? `, ${totalDuration.toFixed(1)}s total` : ""; + return [`[Thinking: ${thinkingBlocks.length} block(s)${durationPart}]`]; +} +function buildContextFromHistory(messages) { + var _a5, _b3, _c2; + const parts = []; + for (const message of messages) { + if (message.role !== "user" && message.role !== "assistant") { + continue; + } + if (message.isInterrupt) { + continue; + } + if (message.role === "assistant") { + const hasContent = message.content && message.content.trim().length > 0; + const hasToolCalls = message.toolCalls && message.toolCalls.length > 0; + const hasThinking = (_a5 = message.contentBlocks) == null ? void 0 : _a5.some((b2) => b2.type === "thinking"); + if (!hasContent && !hasToolCalls && !hasThinking) { + continue; + } + } + const role = message.role === "user" ? "User" : "Assistant"; + const lines = []; + const content = (_b3 = message.content) == null ? void 0 : _b3.trim(); + const contextLine = formatContextLine(message); + const userPayload = contextLine ? content ? `${contextLine} + +${content}` : contextLine : content; + lines.push(userPayload ? `${role}: ${userPayload}` : `${role}:`); + if (message.role === "assistant") { + const thinkingLines = formatThinkingBlocks(message); + if (thinkingLines.length > 0) { + lines.push(...thinkingLines); + } + } + if (message.role === "assistant" && ((_c2 = message.toolCalls) == null ? void 0 : _c2.length)) { + const toolLines = message.toolCalls.map((tc2) => formatToolCallForContext(tc2)).filter(Boolean); + if (toolLines.length > 0) { + lines.push(...toolLines); + } + } + parts.push(lines.join("\n")); + } + return parts.join("\n\n"); +} +function getLastUserMessage(messages) { + for (let i = messages.length - 1; i >= 0; i--) { + if (messages[i].role === "user") { + return messages[i]; + } + } + return void 0; +} +function buildPromptWithHistoryContext(historyContext, prompt, actualPrompt, conversationHistory) { + var _a5, _b3; + if (!historyContext) return prompt; + const lastUserMessage = getLastUserMessage(conversationHistory); + const lastUserQuery = (_b3 = lastUserMessage == null ? void 0 : lastUserMessage.displayContent) != null ? _b3 : extractUserQuery((_a5 = lastUserMessage == null ? void 0 : lastUserMessage.content) != null ? _a5 : ""); + const currentUserQuery = extractUserQuery(actualPrompt); + const shouldAppendPrompt = !lastUserMessage || lastUserQuery.trim() !== currentUserQuery.trim(); + return shouldAppendPrompt ? `${historyContext} + +User: ${prompt}` : historyContext; +} + +// src/providers/claude/hooks/SubagentHooks.ts +var STOP_BLOCK_REASON = 'Background subagents are still running. Use `TaskOutput task_id="..." block=true` to wait for their results before ending your turn.'; +function createStopSubagentHook(getState) { + return { + hooks: [ + async () => { + let hasRunning; + try { + hasRunning = getState().hasRunning; + } catch (e2) { + hasRunning = true; + } + if (hasRunning) { + return { decision: "block", reason: STOP_BLOCK_REASON }; + } + return {}; + } + ] + }; +} + +// src/utils/browser.ts +function escapeXmlAttribute(value) { + return value.replace(/&/g, "&").replace(/"/g, """).replace(//g, ">"); +} +function buildAttributeList(context) { + var _a5, _b3; + const attrs = []; + const source = context.source.trim() || "unknown"; + attrs.push(`source="${escapeXmlAttribute(source)}"`); + if ((_a5 = context.title) == null ? void 0 : _a5.trim()) { + attrs.push(`title="${escapeXmlAttribute(context.title.trim())}"`); + } + if ((_b3 = context.url) == null ? void 0 : _b3.trim()) { + attrs.push(`url="${escapeXmlAttribute(context.url.trim())}"`); + } + return attrs.join(" "); +} +function escapeXmlBody(text) { + return text.replace(/<\/browser_selection>/gi, "</browser_selection>"); +} +function formatBrowserContext(context) { + const selectedText = context.selectedText.trim(); + if (!selectedText) return ""; + const attrs = buildAttributeList(context); + return ` +${escapeXmlBody(selectedText)} +`; +} +function appendBrowserContext(prompt, context) { + const formatted = formatBrowserContext(context); + return formatted ? `${prompt} + +${formatted}` : prompt; +} + +// src/utils/canvas.ts +function formatCanvasContext(context) { + if (context.nodeIds.length === 0) return ""; + return ` +${context.nodeIds.join(", ")} +`; +} +function appendCanvasContext(prompt, context) { + const formatted = formatCanvasContext(context); + return formatted ? `${prompt} + +${formatted}` : prompt; +} + +// src/utils/editor.ts +function getEditorView(editor) { + return editor.cm; +} +function findNearestNonEmptyLine(getLine, lineCount, startLine, direction) { + const step = direction === "before" ? -1 : 1; + for (let i = startLine + step; i >= 0 && i < lineCount; i += step) { + const content = getLine(i); + if (content.trim().length > 0) { + return content; + } + } + return ""; +} +function buildCursorContext(getLine, lineCount, line, column) { + const lineContent = getLine(line); + const beforeCursor = lineContent.substring(0, column); + const afterCursor = lineContent.substring(column); + const lineIsEmpty = lineContent.trim().length === 0; + const nothingBefore = beforeCursor.trim().length === 0; + const nothingAfter = afterCursor.trim().length === 0; + const isInbetween = lineIsEmpty || nothingBefore && nothingAfter; + let contextBefore = beforeCursor; + let contextAfter = afterCursor; + if (isInbetween) { + contextBefore = findNearestNonEmptyLine(getLine, lineCount, line, "before"); + contextAfter = findNearestNonEmptyLine(getLine, lineCount, line, "after"); + } + return { beforeCursor: contextBefore, afterCursor: contextAfter, isInbetween, line, column }; +} +function formatEditorContext(context) { + if (context.mode === "selection" && context.selectedText) { + const lineAttr = context.startLine && context.lineCount ? ` lines="${context.startLine}-${context.startLine + context.lineCount - 1}"` : ""; + return ` +${context.selectedText} +`; + } else if (context.mode === "cursor" && context.cursorContext) { + const ctx = context.cursorContext; + let content; + if (ctx.isInbetween) { + const parts = []; + if (ctx.beforeCursor) parts.push(ctx.beforeCursor); + parts.push("| #inbetween"); + if (ctx.afterCursor) parts.push(ctx.afterCursor); + content = parts.join("\n"); + } else { + content = `${ctx.beforeCursor}|${ctx.afterCursor} #inline`; + } + return ` +${content} +`; + } + return ""; +} +function appendEditorContext(prompt, context) { + const formatted = formatEditorContext(context); + return formatted ? `${prompt} + +${formatted}` : prompt; +} + +// src/providers/claude/prompt/ClaudeTurnEncoder.ts +function isCompactCommand(text) { + return /^\/compact(\s|$)/i.test(text); +} +function encodeClaudeTurn(request, mcpManager) { + const isCompact = isCompactCommand(request.text); + let persistedContent = request.text; + if (!isCompact) { + if (request.currentNotePath) { + persistedContent = appendCurrentNote(persistedContent, request.currentNotePath); + } + if (request.editorSelection) { + persistedContent = appendEditorContext(persistedContent, request.editorSelection); + } + if (request.browserSelection) { + persistedContent = appendBrowserContext(persistedContent, request.browserSelection); + } + if (request.canvasSelection) { + persistedContent = appendCanvasContext(persistedContent, request.canvasSelection); + } + } + const mcpMentions = mcpManager.extractMentions(persistedContent); + return { + request, + persistedContent, + prompt: mcpManager.transformMentions(persistedContent), + isCompact, + mcpMentions + }; +} + +// src/providers/claude/sdk/typeGuards.ts +function isSessionInitEvent(event) { + return event.type === "session_init"; +} +function isContextWindowEvent(event) { + return event.type === "context_window"; +} +function isStreamChunk(event) { + return event.type !== "session_init" && event.type !== "context_window"; +} + +// src/providers/claude/sdk/messages.ts +function isBlockedMessage(message) { + return message.type === "user" && "_blocked" in message && message._blocked === true && "_blockReason" in message; +} + +// src/providers/claude/stream/toolInputStreamState.ts +var MAIN_AGENT_STREAM = "__main__"; +function isRecord5(value) { + return !!value && typeof value === "object" && !Array.isArray(value); +} +function normalizeToolInput(value) { + return isRecord5(value) ? value : {}; +} +function getContentBlockKey(parentToolUseId, index) { + return `${parentToolUseId != null ? parentToolUseId : MAIN_AGENT_STREAM}:${index}`; +} +function getParentPrefix(parentToolUseId) { + return `${parentToolUseId != null ? parentToolUseId : MAIN_AGENT_STREAM}:`; +} +function findClosingTokenIndex(tokens, value) { + var _a5; + for (let index = tokens.length - 1; index >= 0; index -= 1) { + if (((_a5 = tokens[index]) == null ? void 0 : _a5.value) === value) { + return index; + } + } + return -1; +} +function tokenizePartialJson(input) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2; + const tokens = []; + let index = 0; + while (index < input.length) { + let char = (_a5 = input[index]) != null ? _a5 : ""; + if (char === "\\") { + index += 1; + continue; + } + if (char === "{" || char === "}") { + tokens.push({ type: "brace", value: char }); + index += 1; + continue; + } + if (char === "[" || char === "]") { + tokens.push({ type: "bracket", value: char }); + index += 1; + continue; + } + if (char === ":") { + tokens.push({ type: "separator", value: char }); + index += 1; + continue; + } + if (char === ",") { + tokens.push({ type: "delimiter", value: char }); + index += 1; + continue; + } + if (char === '"') { + let value = ""; + let isDanglingString = false; + index += 1; + char = (_b3 = input[index]) != null ? _b3 : ""; + while (char !== '"') { + if (index === input.length) { + isDanglingString = true; + break; + } + if (char === "\\") { + index += 1; + if (index === input.length) { + isDanglingString = true; + break; + } + value += char + ((_c2 = input[index]) != null ? _c2 : ""); + index += 1; + char = (_d = input[index]) != null ? _d : ""; + continue; + } + value += char; + index += 1; + char = (_e2 = input[index]) != null ? _e2 : ""; + } + index += 1; + if (!isDanglingString) { + tokens.push({ type: "string", value }); + } + continue; + } + if (/\s/.test(char)) { + index += 1; + continue; + } + if (/[0-9]/.test(char) || char === "-" || char === ".") { + let value = ""; + if (char === "-") { + value += char; + index += 1; + char = (_f2 = input[index]) != null ? _f2 : ""; + } + while (/[0-9]/.test(char) || char === ".") { + value += char; + index += 1; + char = (_g = input[index]) != null ? _g : ""; + } + tokens.push({ type: "number", value }); + continue; + } + if (/[a-z]/i.test(char)) { + let value = ""; + while (/[a-z]/i.test(char)) { + value += char; + index += 1; + char = (_h2 = input[index]) != null ? _h2 : ""; + } + if (value === "true" || value === "false" || value === "null") { + tokens.push({ type: "name", value }); + } else { + index += 1; + } + continue; + } + index += 1; + } + return tokens; +} +function stripIncompleteTail(tokens) { + if (tokens.length === 0) { + return tokens; + } + const lastToken = tokens[tokens.length - 1]; + if (!lastToken) { + return tokens; + } + switch (lastToken.type) { + case "separator": + case "delimiter": + return stripIncompleteTail(tokens.slice(0, -1)); + case "number": { + const lastChar = lastToken.value[lastToken.value.length - 1]; + return lastChar === "." || lastChar === "-" ? stripIncompleteTail(tokens.slice(0, -1)) : tokens; + } + case "string": { + const previousToken = tokens[tokens.length - 2]; + if ((previousToken == null ? void 0 : previousToken.type) === "delimiter") { + return stripIncompleteTail(tokens.slice(0, -1)); + } + if ((previousToken == null ? void 0 : previousToken.type) === "brace" && previousToken.value === "{") { + return stripIncompleteTail(tokens.slice(0, -1)); + } + return tokens; + } + default: + return tokens; + } +} +function closeOpenContainers(tokens) { + const completedTokens = [...tokens]; + const closingTokens = []; + for (const token of completedTokens) { + if (token.type === "brace") { + if (token.value === "{") { + closingTokens.push({ type: "brace", value: "}" }); + } else { + const closingIndex = findClosingTokenIndex(closingTokens, "}"); + if (closingIndex >= 0) { + closingTokens.splice(closingIndex, 1); + } + } + continue; + } + if (token.type === "bracket") { + if (token.value === "[") { + closingTokens.push({ type: "bracket", value: "]" }); + } else { + const closingIndex = findClosingTokenIndex(closingTokens, "]"); + if (closingIndex >= 0) { + closingTokens.splice(closingIndex, 1); + } + } + } + } + for (let index = closingTokens.length - 1; index >= 0; index -= 1) { + const token = closingTokens[index]; + if (token) { + completedTokens.push(token); + } + } + return completedTokens; +} +function renderJson(tokens) { + return tokens.map((token) => token.type === "string" ? `"${token.value}"` : token.value).join(""); +} +function parsePartialToolInput(input) { + const tokens = tokenizePartialJson(input); + if (tokens.length === 0) { + return {}; + } + try { + const repairedJson = renderJson(closeOpenContainers(stripIncompleteTail(tokens))); + return normalizeToolInput(JSON.parse(repairedJson)); + } catch (e2) { + return null; + } +} +function createTransformStreamState() { + const activeToolUses = /* @__PURE__ */ new Map(); + return { + registerToolUse(parentToolUseId, index, toolUse) { + activeToolUses.set(getContentBlockKey(parentToolUseId, index), { + ...toolUse, + input: { ...toolUse.input }, + partialJson: "" + }); + }, + applyInputJsonDelta(parentToolUseId, index, partialJson) { + const snapshot = activeToolUses.get(getContentBlockKey(parentToolUseId, index)); + if (!snapshot) { + return null; + } + snapshot.partialJson += partialJson; + const parsedInput = parsePartialToolInput(snapshot.partialJson); + if (parsedInput === null) { + return null; + } + snapshot.input = { + ...snapshot.input, + ...parsedInput + }; + return { + id: snapshot.id, + name: snapshot.name, + input: { ...snapshot.input } + }; + }, + clearContentBlock(parentToolUseId, index) { + activeToolUses.delete(getContentBlockKey(parentToolUseId, index)); + }, + clearParent(parentToolUseId) { + const parentPrefix = getParentPrefix(parentToolUseId); + for (const key of activeToolUses.keys()) { + if (key.startsWith(parentPrefix)) { + activeToolUses.delete(key); + } + } + }, + clearAll() { + activeToolUses.clear(); + } + }; +} + +// src/providers/claude/stream/transformClaudeMessage.ts +function getToolInput(input) { + if (!input || typeof input !== "object" || Array.isArray(input)) { + return {}; + } + return input; +} +function emitToolUse(parentToolUseId, fields) { + if (parentToolUseId === null) { + return { type: "tool_use", ...fields }; + } + return { type: "subagent_tool_use", subagentId: parentToolUseId, ...fields }; +} +function emitToolResult(parentToolUseId, fields) { + if (parentToolUseId === null) { + return { type: "tool_result", ...fields }; + } + return { type: "subagent_tool_result", subagentId: parentToolUseId, ...fields }; +} +function normalizeTaskNotificationStatus(status) { + return status === "completed" ? "completed" : "error"; +} +function normalizeTaskNotificationResult(status, summary) { + if (typeof summary === "string" && summary.trim().length > 0) { + return summary.trim(); + } + return status === "completed" ? "Background task completed." : "Background task failed."; +} +function transformTaskNotification(message) { + if (message.type !== "system" || message.subtype !== "task_notification") { + return null; + } + const record2 = message; + const taskId = record2.task_id; + if (typeof taskId !== "string" || taskId.length === 0) { + return null; + } + const status = normalizeTaskNotificationStatus(record2.status); + return { + type: "async_subagent_result", + agentId: taskId, + status, + result: normalizeTaskNotificationResult(status, record2.summary) + }; +} +function isResultError(message) { + return !!message.subtype && message.subtype !== "success"; +} +function normalizeClaudeModelId(model) { + const normalized = model.trim().toLowerCase(); + const claudeIndex = normalized.indexOf("claude-"); + return claudeIndex >= 0 ? normalized.slice(claudeIndex) : normalized; +} +function parseClaudeModelSignature(model) { + const normalized = normalizeClaudeModelId(model); + if (normalized === "haiku") { + return { normalizedModel: normalized, family: "haiku", is1M: false }; + } + if (normalized === "sonnet" || normalized === "sonnet[1m]") { + return { normalizedModel: normalized, family: "sonnet", is1M: normalized.endsWith("[1m]") }; + } + if (normalized === "opus" || normalized === "opus[1m]") { + return { normalizedModel: normalized, family: "opus", is1M: normalized.endsWith("[1m]") }; + } + const versionedMatch = normalized.match( + /^claude-(haiku|sonnet|opus)-(\d+)(?:-(\d+))?(?:-(\d{8}))?(?:-v\d+:\d+)?(\[1m\])?$/ + ); + if (versionedMatch) { + const [, familyMatch, major, minor, date7, oneMillionSuffix] = versionedMatch; + const family = familyMatch; + return { + normalizedModel: normalized, + family, + is1M: oneMillionSuffix === "[1m]", + major, + minor, + date: date7 + }; + } + return null; +} +function findUniqueEntry(entries, predicate) { + const matches = entries.filter(predicate); + return matches.length === 1 ? matches[0] : null; +} +function matchClaudeModelSignature(entrySignature, intendedSignature, options) { + if (!entrySignature || entrySignature.family !== intendedSignature.family) { + return false; + } + if (!(options == null ? void 0 : options.ignoreIs1M) && entrySignature.is1M !== intendedSignature.is1M) { + return false; + } + if (intendedSignature.major && entrySignature.major !== intendedSignature.major) { + return false; + } + if (intendedSignature.minor && entrySignature.minor !== intendedSignature.minor) { + return false; + } + if (intendedSignature.date && entrySignature.date !== intendedSignature.date) { + return false; + } + return true; +} +function selectContextWindowEntry(modelUsage, intendedModel) { + const entries = Object.entries(modelUsage).flatMap( + ([model, usage]) => typeof (usage == null ? void 0 : usage.contextWindow) === "number" && usage.contextWindow > 0 ? [{ model, contextWindow: usage.contextWindow }] : [] + ); + if (entries.length === 0) { + return null; + } + if (entries.length === 1) { + return entries[0]; + } + if (!intendedModel) { + return null; + } + const literalExactMatch = entries.find((entry) => entry.model === intendedModel); + if (literalExactMatch) { + return literalExactMatch; + } + const normalizedIntendedModel = normalizeClaudeModelId(intendedModel); + const exactMatch = findUniqueEntry(entries, (entry) => normalizeClaudeModelId(entry.model) === normalizedIntendedModel); + if (exactMatch) { + return exactMatch; + } + if (!isDefaultClaudeModel(intendedModel)) { + return null; + } + const intendedSignature = parseClaudeModelSignature(intendedModel); + if (!intendedSignature) { + return null; + } + const strictSignatureMatch = findUniqueEntry( + entries, + (entry) => matchClaudeModelSignature(parseClaudeModelSignature(entry.model), intendedSignature) + ); + if (strictSignatureMatch) { + return strictSignatureMatch; + } + const hasVersionedTarget = Boolean(intendedSignature.major || intendedSignature.date); + if (!hasVersionedTarget) { + return null; + } + return findUniqueEntry( + entries, + (entry) => matchClaudeModelSignature(parseClaudeModelSignature(entry.model), intendedSignature, { ignoreIs1M: true }) + ); +} +var EMPTY_PROMPT_USAGE = { + inputTokens: 0, + cacheCreationInputTokens: 0, + cacheReadInputTokens: 0, + contextTokens: 0 +}; +function normalizeTokenCount(value) { + return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : 0; +} +function hasPromptUsageField(usage) { + if (!usage || typeof usage !== "object" || Array.isArray(usage)) { + return false; + } + const record2 = usage; + return typeof record2.input_tokens === "number" || typeof record2.cache_creation_input_tokens === "number" || typeof record2.cache_read_input_tokens === "number"; +} +function toPromptUsageSnapshot(usage) { + const inputTokens = normalizeTokenCount(usage.input_tokens); + const cacheCreationInputTokens = normalizeTokenCount(usage.cache_creation_input_tokens); + const cacheReadInputTokens = normalizeTokenCount(usage.cache_read_input_tokens); + return { + inputTokens, + cacheCreationInputTokens, + cacheReadInputTokens, + contextTokens: inputTokens + cacheCreationInputTokens + cacheReadInputTokens + }; +} +function mergePromptUsage(current, usage) { + const next = toPromptUsageSnapshot(usage); + const inputTokens = Math.max(current.inputTokens, next.inputTokens); + const cacheCreationInputTokens = Math.max(current.cacheCreationInputTokens, next.cacheCreationInputTokens); + const cacheReadInputTokens = Math.max(current.cacheReadInputTokens, next.cacheReadInputTokens); + return { + inputTokens, + cacheCreationInputTokens, + cacheReadInputTokens, + contextTokens: inputTokens + cacheCreationInputTokens + cacheReadInputTokens + }; +} +function samePromptUsage(a, b2) { + return a.inputTokens === b2.inputTokens && a.cacheCreationInputTokens === b2.cacheCreationInputTokens && a.cacheReadInputTokens === b2.cacheReadInputTokens && a.contextTokens === b2.contextTokens; +} +function buildUsageInfo(promptUsage, options) { + var _a5; + const model = (_a5 = options == null ? void 0 : options.intendedModel) != null ? _a5 : "sonnet"; + const contextWindow = getContextWindowSize(model, options == null ? void 0 : options.customContextLimits); + const percentage = Math.min(100, Math.max(0, Math.round(promptUsage.contextTokens / contextWindow * 100))); + return { + model, + inputTokens: promptUsage.inputTokens, + cacheCreationInputTokens: promptUsage.cacheCreationInputTokens, + cacheReadInputTokens: promptUsage.cacheReadInputTokens, + contextWindow, + contextTokens: promptUsage.contextTokens, + percentage + }; +} +function createTransformUsageState() { + let promptUsage = { ...EMPTY_PROMPT_USAGE }; + let lastEmittedPromptUsage = null; + return { + clear() { + promptUsage = { ...EMPTY_PROMPT_USAGE }; + lastEmittedPromptUsage = null; + }, + mergePromptUsage(usage) { + promptUsage = mergePromptUsage(promptUsage, usage); + return promptUsage; + }, + getPromptUsage() { + return { ...promptUsage }; + }, + hasEmitted(nextPromptUsage) { + return lastEmittedPromptUsage !== null && samePromptUsage(lastEmittedPromptUsage, nextPromptUsage); + }, + markEmitted(nextPromptUsage) { + lastEmittedPromptUsage = { ...nextPromptUsage }; + } + }; +} +function maybeEmitUsageFromPromptUsage(promptUsage, options, behavior = {}) { + var _a5, _b3; + if (promptUsage.contextTokens <= 0) { + return behavior.emitZeroUsage ? { type: "usage", usage: buildUsageInfo(promptUsage, options) } : null; + } + if ((_a5 = options == null ? void 0 : options.usageState) == null ? void 0 : _a5.hasEmitted(promptUsage)) { + return null; + } + (_b3 = options == null ? void 0 : options.usageState) == null ? void 0 : _b3.markEmitted(promptUsage); + return { type: "usage", usage: buildUsageInfo(promptUsage, options) }; +} +function* transformSDKMessage(message, options) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m, _n, _o, _p, _q3, _r, _s, _t, _u2; + switch (message.type) { + case "system": + if (message.subtype === "init" && message.session_id) { + yield { + type: "session_init", + sessionId: message.session_id, + agents: message.agents, + permissionMode: message.permissionMode + }; + } else if (message.subtype === "compact_boundary") { + yield { type: "context_compacted" }; + } else if (message.subtype === "task_notification") { + const notification = transformTaskNotification(message); + if (notification) { + yield notification; + } + } + break; + case "assistant": { + const parentToolUseId = (_a5 = message.parent_tool_use_id) != null ? _a5 : null; + if (message.error) { + yield { type: "error", content: message.error }; + } + if (((_b3 = message.message) == null ? void 0 : _b3.content) && Array.isArray(message.message.content)) { + for (const block of message.message.content) { + if (block.type === "thinking" && block.thinking) { + if (parentToolUseId === null) { + yield { type: "thinking", content: block.thinking }; + } + } else if (block.type === "text" && block.text && block.text.trim() !== "(no content)") { + if (parentToolUseId === null) { + yield { type: "text", content: block.text }; + } + } else if (block.type === "tool_use") { + yield emitToolUse(parentToolUseId, { + id: block.id || `tool-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`, + name: block.name || "unknown", + input: getToolInput(block.input) + }); + } + } + } + (_c2 = options == null ? void 0 : options.streamState) == null ? void 0 : _c2.clearParent(parentToolUseId); + const usage = (_d = message.message) == null ? void 0 : _d.usage; + if (parentToolUseId === null && usage) { + if (options == null ? void 0 : options.usageState) { + const promptUsage = options.usageState.mergePromptUsage(usage); + const usageChunk = maybeEmitUsageFromPromptUsage(promptUsage, options, { emitZeroUsage: true }); + if (usageChunk) { + yield usageChunk; + } + } else { + yield { type: "usage", usage: buildUsageInfo(toPromptUsageSnapshot(usage), options) }; + } + } + break; + } + case "user": { + const parentToolUseId = (_e2 = message.parent_tool_use_id) != null ? _e2 : null; + if (isBlockedMessage(message)) { + yield { + type: "notice", + content: message._blockReason, + level: "warning" + }; + break; + } + if (message.tool_use_result !== void 0 && message.parent_tool_use_id) { + const toolUseResult = (_f2 = message.tool_use_result) != null ? _f2 : void 0; + yield emitToolResult(parentToolUseId, { + id: message.parent_tool_use_id, + content: extractToolResultContent(message.tool_use_result, { fallbackIndent: 2 }), + isError: false, + ...toolUseResult !== void 0 ? { toolUseResult } : {} + }); + } + if (((_g = message.message) == null ? void 0 : _g.content) && Array.isArray(message.message.content)) { + for (const block of message.message.content) { + if (block.type === "tool_result") { + const toolUseResult = (_h2 = message.tool_use_result) != null ? _h2 : void 0; + yield emitToolResult(parentToolUseId, { + id: block.tool_use_id || message.parent_tool_use_id || "", + content: extractToolResultContent(block.content, { fallbackIndent: 2 }), + isError: block.is_error || false, + ...toolUseResult !== void 0 ? { toolUseResult } : {} + }); + } + } + } + break; + } + case "stream_event": { + const parentToolUseId = (_i = message.parent_tool_use_id) != null ? _i : null; + const event = message.event; + if (parentToolUseId === null && (event == null ? void 0 : event.type) === "message_start") { + (_j = options == null ? void 0 : options.usageState) == null ? void 0 : _j.clear(); + const usage = (_k3 = event.message) == null ? void 0 : _k3.usage; + if (usage && hasPromptUsageField(usage)) { + if (options == null ? void 0 : options.usageState) { + options.usageState.mergePromptUsage(usage); + } else { + const usageChunk = maybeEmitUsageFromPromptUsage(toPromptUsageSnapshot(usage), options); + if (usageChunk) { + yield usageChunk; + } + } + } + } else if (parentToolUseId === null && (event == null ? void 0 : event.type) === "message_delta" && hasPromptUsageField(event.usage)) { + if (options == null ? void 0 : options.usageState) { + const previousPromptUsage = options.usageState.getPromptUsage(); + const promptUsage = options.usageState.mergePromptUsage(event.usage); + const shouldEmitDeltaUsage = previousPromptUsage.contextTokens <= 0 || options.usageState.hasEmitted(previousPromptUsage); + if (shouldEmitDeltaUsage) { + const usageChunk = maybeEmitUsageFromPromptUsage(promptUsage, options); + if (usageChunk) { + yield usageChunk; + } + } + } else { + const usageChunk = maybeEmitUsageFromPromptUsage(toPromptUsageSnapshot(event.usage), options); + if (usageChunk) { + yield usageChunk; + } + } + } else if ((event == null ? void 0 : event.type) === "content_block_start" && ((_l2 = event.content_block) == null ? void 0 : _l2.type) === "tool_use") { + const toolUseFields = { + id: event.content_block.id || `tool-${Date.now()}`, + name: event.content_block.name || "unknown", + input: getToolInput(event.content_block.input) + }; + if (typeof event.index === "number") { + (_m = options == null ? void 0 : options.streamState) == null ? void 0 : _m.registerToolUse(parentToolUseId, event.index, toolUseFields); + } + yield emitToolUse(parentToolUseId, toolUseFields); + } else if ((event == null ? void 0 : event.type) === "content_block_start" && ((_n = event.content_block) == null ? void 0 : _n.type) === "thinking") { + if (parentToolUseId === null && event.content_block.thinking) { + yield { type: "thinking", content: event.content_block.thinking }; + } + } else if ((event == null ? void 0 : event.type) === "content_block_start" && ((_o = event.content_block) == null ? void 0 : _o.type) === "text") { + if (parentToolUseId === null && event.content_block.text) { + yield { type: "text", content: event.content_block.text }; + } + } else if ((event == null ? void 0 : event.type) === "content_block_delta") { + if (((_p = event.delta) == null ? void 0 : _p.type) === "input_json_delta" && typeof event.index === "number") { + const toolUseFields = (_q3 = options == null ? void 0 : options.streamState) == null ? void 0 : _q3.applyInputJsonDelta( + parentToolUseId, + event.index, + event.delta.partial_json + ); + if (toolUseFields) { + yield emitToolUse(parentToolUseId, toolUseFields); + } + } else if (parentToolUseId === null && ((_r = event.delta) == null ? void 0 : _r.type) === "thinking_delta" && event.delta.thinking) { + yield { type: "thinking", content: event.delta.thinking }; + } else if (parentToolUseId === null && ((_s = event.delta) == null ? void 0 : _s.type) === "text_delta" && event.delta.text) { + yield { type: "text", content: event.delta.text }; + } + } else if ((event == null ? void 0 : event.type) === "content_block_stop" && typeof event.index === "number") { + (_t = options == null ? void 0 : options.streamState) == null ? void 0 : _t.clearContentBlock(parentToolUseId, event.index); + } + break; + } + case "result": + (_u2 = options == null ? void 0 : options.streamState) == null ? void 0 : _u2.clearAll(); + if (options == null ? void 0 : options.usageState) { + const usageChunk = maybeEmitUsageFromPromptUsage(options.usageState.getPromptUsage(), options); + if (usageChunk) { + yield usageChunk; + } + options.usageState.clear(); + } + if (isResultError(message)) { + const content = message.errors.filter((e2) => e2.trim().length > 0).join("\n"); + yield { + type: "error", + content: content || `Result error: ${message.subtype}` + }; + } + if ("modelUsage" in message && message.modelUsage) { + const modelUsage = message.modelUsage; + const selectedEntry = selectContextWindowEntry(modelUsage, options == null ? void 0 : options.intendedModel); + if (selectedEntry) { + yield { type: "context_window", contextWindow: selectedEntry.contextWindow }; + } + } + break; + default: + break; + } +} + +// src/core/security/ApprovalManager.ts +function getActionPattern(toolName, input) { + switch (toolName) { + case TOOL_BASH: + return typeof input.command === "string" ? input.command.trim() : ""; + case TOOL_READ: + case TOOL_WRITE: + case TOOL_EDIT: + return typeof input.file_path === "string" && input.file_path ? input.file_path : null; + case TOOL_NOTEBOOK_EDIT: + if (typeof input.notebook_path === "string" && input.notebook_path) { + return input.notebook_path; + } + return typeof input.file_path === "string" && input.file_path ? input.file_path : null; + case TOOL_GLOB: + return typeof input.pattern === "string" && input.pattern ? input.pattern : null; + case TOOL_GREP: + return typeof input.pattern === "string" && input.pattern ? input.pattern : null; + default: + return JSON.stringify(input); + } +} +function getActionDescription(toolName, input) { + var _a5; + const pattern = (_a5 = getActionPattern(toolName, input)) != null ? _a5 : "(unknown)"; + switch (toolName) { + case TOOL_BASH: + return `Run command: ${pattern}`; + case TOOL_READ: + return `Read file: ${pattern}`; + case TOOL_WRITE: + return `Write to file: ${pattern}`; + case TOOL_EDIT: + return `Edit file: ${pattern}`; + case TOOL_GLOB: + return `Search files matching: ${pattern}`; + case TOOL_GREP: + return `Search content matching: ${pattern}`; + default: + return `${toolName}: ${pattern}`; + } +} + +// src/providers/claude/security/ClaudePermissionUpdates.ts +function buildPermissionUpdates(toolName, input, decision, suggestions) { + const destination = decision === "allow-always" ? "projectSettings" : "session"; + const processed = []; + let hasRuleUpdate = false; + if (suggestions) { + for (const suggestion of suggestions) { + if (suggestion.type === "addRules" || suggestion.type === "replaceRules") { + hasRuleUpdate = true; + processed.push({ ...suggestion, behavior: "allow", destination }); + } else { + processed.push(suggestion); + } + } + } + if (!hasRuleUpdate) { + const pattern = getActionPattern(toolName, input); + const ruleValue = { toolName }; + if (pattern && !pattern.startsWith("{")) { + ruleValue.ruleContent = pattern; + } + processed.unshift({ + type: "addRules", + behavior: "allow", + rules: [ruleValue], + destination + }); + } + return processed; +} + +// src/providers/claude/runtime/ClaudeApprovalHandler.ts +function createClaudeApprovalCallback(deps) { + return async (toolName, input, options) => { + const currentAllowedTools = deps.getAllowedTools(); + if (currentAllowedTools !== null) { + if (!currentAllowedTools.includes(toolName) && toolName !== TOOL_SKILL) { + const allowedList = currentAllowedTools.length > 0 ? ` Allowed tools: ${currentAllowedTools.join(", ")}.` : " No tools are allowed for this query type."; + return { + behavior: "deny", + message: `Tool "${toolName}" is not allowed for this query.${allowedList}` + }; + } + } + const exitPlanModeCallback = deps.getExitPlanModeCallback(); + if (toolName === TOOL_EXIT_PLAN_MODE && exitPlanModeCallback) { + try { + const decision = await exitPlanModeCallback(input, options.signal); + if (decision === null) { + return { behavior: "deny", message: "User cancelled.", interrupt: true }; + } + if (decision.type === "feedback") { + return { behavior: "deny", message: decision.text, interrupt: false }; + } + const permissionMode = deps.getPermissionMode(); + const sdkMode = deps.resolveSDKPermissionMode(permissionMode); + deps.syncPermissionMode(permissionMode, sdkMode); + return { + behavior: "allow", + updatedInput: input, + updatedPermissions: [ + { type: "setMode", mode: sdkMode, destination: "session" } + ] + }; + } catch (error48) { + return { + behavior: "deny", + message: `Failed to handle plan mode exit: ${error48 instanceof Error ? error48.message : "Unknown error"}`, + interrupt: true + }; + } + } + const askUserQuestionCallback = deps.getAskUserQuestionCallback(); + if (toolName === TOOL_ASK_USER_QUESTION && askUserQuestionCallback) { + try { + const questions = input.questions; + if (Array.isArray(questions)) { + for (const q of questions) { + if (q && typeof q === "object" && !("isOther" in q)) { + q.isOther = true; + } + } + } + const answers = await askUserQuestionCallback(input, options.signal); + if (answers === null) { + return { behavior: "deny", message: "User declined to answer.", interrupt: true }; + } + return { behavior: "allow", updatedInput: { ...input, answers } }; + } catch (error48) { + return { + behavior: "deny", + message: `Failed to get user answers: ${error48 instanceof Error ? error48.message : "Unknown error"}`, + interrupt: true + }; + } + } + const approvalCallback = deps.getApprovalCallback(); + if (!approvalCallback) { + return { behavior: "deny", message: "No approval handler available." }; + } + try { + const { decisionReason, blockedPath, agentID } = options; + const description = getActionDescription(toolName, input); + const decision = await approvalCallback( + toolName, + input, + description, + { decisionReason, blockedPath, agentID } + ); + if (decision === "cancel") { + return { behavior: "deny", message: "User interrupted.", interrupt: true }; + } + if (decision === "allow" || decision === "allow-always") { + const updatedPermissions = buildPermissionUpdates( + toolName, + input, + decision, + options.suggestions + ); + return { behavior: "allow", updatedInput: input, updatedPermissions }; + } + return { behavior: "deny", message: "User denied this action.", interrupt: false }; + } catch (error48) { + return { + behavior: "deny", + message: `Approval request failed: ${error48 instanceof Error ? error48.message : "Unknown error"}`, + interrupt: false + }; + } + }; +} + +// src/providers/claude/runtime/ClaudeDynamicUpdates.ts +async function applyClaudeDynamicUpdates(deps, queryOptions, restartOptions, allowRestart = true) { + var _a5, _b3, _c2; + const persistentQuery = deps.getPersistentQuery(); + if (!persistentQuery) { + return; + } + const vaultPath = deps.getVaultPath(); + if (!vaultPath) { + return; + } + const cliPath = deps.getCliPath(); + if (!cliPath) { + return; + } + const settings11 = deps.getScopedSettings(); + const selectedModel = (queryOptions == null ? void 0 : queryOptions.model) || settings11.model; + const permissionMode = deps.getPermissionMode(); + const currentConfig = deps.getCurrentConfig(); + if (currentConfig && selectedModel !== currentConfig.model) { + try { + await persistentQuery.setModel(selectedModel); + deps.mutateCurrentConfig((config2) => { + config2.model = selectedModel; + }); + } catch (e2) { + deps.notifyFailure("Failed to update model"); + } + } + const effortLevel = resolveEffortLevel(selectedModel, settings11.effortLevel); + const currentEffort = (_b3 = (_a5 = deps.getCurrentConfig()) == null ? void 0 : _a5.effortLevel) != null ? _b3 : null; + if (effortLevel !== currentEffort) { + try { + await persistentQuery.applyFlagSettings({ effortLevel }); + deps.mutateCurrentConfig((config2) => { + config2.effortLevel = effortLevel; + }); + } catch (e2) { + deps.notifyFailure("Failed to update effort level"); + } + } + const configBeforePermissionUpdate = deps.getCurrentConfig(); + if (configBeforePermissionUpdate) { + const sdkMode = deps.resolveSDKPermissionMode(permissionMode); + const currentSdkMode = (_c2 = configBeforePermissionUpdate.sdkPermissionMode) != null ? _c2 : null; + const requiresAutoModeRestart = sdkMode === "auto" && !configBeforePermissionUpdate.enableAutoMode; + if (requiresAutoModeRestart) { + } else if (sdkMode !== currentSdkMode) { + try { + await persistentQuery.setPermissionMode(sdkMode); + deps.mutateCurrentConfig((config2) => { + config2.permissionMode = permissionMode; + config2.sdkPermissionMode = sdkMode; + }); + } catch (e2) { + deps.notifyFailure("Failed to update permission mode"); + } + } else { + deps.mutateCurrentConfig((config2) => { + config2.permissionMode = permissionMode; + config2.sdkPermissionMode = sdkMode; + }); + } + } + const mcpMentions = (queryOptions == null ? void 0 : queryOptions.mcpMentions) || /* @__PURE__ */ new Set(); + const uiEnabledServers = (queryOptions == null ? void 0 : queryOptions.enabledMcpServers) || /* @__PURE__ */ new Set(); + const combinedMentions = /* @__PURE__ */ new Set([...mcpMentions, ...uiEnabledServers]); + const mcpServers = deps.mcpManager.getActiveServers(combinedMentions); + const mcpServersKey = JSON.stringify(mcpServers); + if (deps.getCurrentConfig() && mcpServersKey !== deps.getCurrentConfig().mcpServersKey) { + const serverConfigs = {}; + for (const [name, config2] of Object.entries(mcpServers)) { + serverConfigs[name] = config2; + } + try { + await persistentQuery.setMcpServers(serverConfigs); + deps.mutateCurrentConfig((config2) => { + config2.mcpServersKey = mcpServersKey; + }); + } catch (e2) { + deps.notifyFailure("Failed to update MCP servers"); + } + } + const newExternalContextPaths = (queryOptions == null ? void 0 : queryOptions.externalContextPaths) || []; + deps.setCurrentExternalContextPaths(newExternalContextPaths); + if (!allowRestart) { + return; + } + const newConfig = deps.buildPersistentQueryConfig(vaultPath, cliPath, newExternalContextPaths); + if (!deps.needsRestart(newConfig)) { + return; + } + const restarted = await deps.ensureReady({ + externalContextPaths: newExternalContextPaths, + preserveHandlers: restartOptions == null ? void 0 : restartOptions.preserveHandlers, + force: true + }); + if (restarted && deps.getPersistentQuery()) { + await applyClaudeDynamicUpdates(deps, queryOptions, restartOptions, false); + } +} + +// src/providers/claude/runtime/types.ts +var MESSAGE_CHANNEL_CONFIG = { + MAX_QUEUED_MESSAGES: 8, + // Memory protection from rapid user input + MAX_MERGED_CHARS: 12e3 + // ~3k tokens — batch size under context limits +}; +function createResponseHandler(options) { + let _sawStreamText = false; + let _sawStreamThinking = false; + let _sawAnyChunk = false; + return { + id: options.id, + onChunk: options.onChunk, + onDone: options.onDone, + onError: options.onError, + get sawStreamText() { + return _sawStreamText; + }, + get sawStreamThinking() { + return _sawStreamThinking; + }, + get sawAnyChunk() { + return _sawAnyChunk; + }, + markStreamTextSeen() { + _sawStreamText = true; + }, + markStreamThinkingSeen() { + _sawStreamThinking = true; + }, + resetStreamText() { + _sawStreamText = false; + }, + resetStreamThinking() { + _sawStreamThinking = false; + }, + markChunkSeen() { + _sawAnyChunk = true; + } + }; +} +var UNSUPPORTED_SDK_TOOLS = []; +var DISABLED_BUILTIN_SUBAGENTS = [ + "Task(statusline-setup)" +]; +function isTurnCompleteMessage(message) { + return message.type === "result"; +} + +// src/providers/claude/runtime/ClaudeMessageChannel.ts +var MessageChannel = class { + constructor(onWarning = () => { + }) { + this.queue = []; + this.turnActive = false; + this.closed = false; + this.resolveNext = null; + this.currentSessionId = null; + this.onWarning = onWarning; + } + setSessionId(sessionId) { + this.currentSessionId = sessionId; + } + isTurnActive() { + return this.turnActive; + } + isClosed() { + return this.closed; + } + /** + * Enqueue a message. If a turn is active: + * - Text-only: merge with queued text (up to MAX_MERGED_CHARS) + * - With attachments: replace any existing queued attachment (one at a time) + */ + enqueue(message) { + if (this.closed) { + throw new Error("MessageChannel is closed"); + } + const hasAttachments = this.messageHasAttachments(message); + if (!this.turnActive) { + if (this.resolveNext) { + this.turnActive = true; + const resolve8 = this.resolveNext; + this.resolveNext = null; + resolve8({ value: message, done: false }); + } else { + if (this.queue.length >= MESSAGE_CHANNEL_CONFIG.MAX_QUEUED_MESSAGES) { + this.onWarning(`[MessageChannel] Queue full (${MESSAGE_CHANNEL_CONFIG.MAX_QUEUED_MESSAGES}), dropping newest`); + return; + } + if (hasAttachments) { + this.queue.push({ type: "attachment", message }); + } else { + this.queue.push({ type: "text", content: this.extractTextContent(message) }); + } + } + return; + } + if (hasAttachments) { + const existingIdx = this.queue.findIndex((m4) => m4.type === "attachment"); + if (existingIdx >= 0) { + this.queue[existingIdx] = { type: "attachment", message }; + this.onWarning("[MessageChannel] Attachment message replaced (only one can be queued)"); + } else { + this.queue.push({ type: "attachment", message }); + } + return; + } + const textContent = this.extractTextContent(message); + const existingTextIdx = this.queue.findIndex((m4) => m4.type === "text"); + if (existingTextIdx >= 0) { + const existing = this.queue[existingTextIdx]; + const mergedContent = existing.content + "\n\n" + textContent; + if (mergedContent.length > MESSAGE_CHANNEL_CONFIG.MAX_MERGED_CHARS) { + this.onWarning(`[MessageChannel] Merged content exceeds ${MESSAGE_CHANNEL_CONFIG.MAX_MERGED_CHARS} chars, dropping newest`); + return; + } + existing.content = mergedContent; + } else { + if (this.queue.length >= MESSAGE_CHANNEL_CONFIG.MAX_QUEUED_MESSAGES) { + this.onWarning(`[MessageChannel] Queue full (${MESSAGE_CHANNEL_CONFIG.MAX_QUEUED_MESSAGES}), dropping newest`); + return; + } + this.queue.push({ type: "text", content: textContent }); + } + } + onTurnComplete() { + this.turnActive = false; + if (this.queue.length > 0 && this.resolveNext) { + const pending = this.queue.shift(); + this.turnActive = true; + const resolve8 = this.resolveNext; + this.resolveNext = null; + resolve8({ value: this.pendingToMessage(pending), done: false }); + } + } + close() { + this.closed = true; + this.queue = []; + if (this.resolveNext) { + const resolve8 = this.resolveNext; + this.resolveNext = null; + resolve8({ value: void 0, done: true }); + } + } + reset() { + this.queue = []; + this.turnActive = false; + this.closed = false; + this.resolveNext = null; + } + getQueueLength() { + return this.queue.length; + } + [Symbol.asyncIterator]() { + return { + next: () => { + if (this.closed) { + return Promise.resolve({ value: void 0, done: true }); + } + if (this.queue.length > 0 && !this.turnActive) { + const pending = this.queue.shift(); + this.turnActive = true; + return Promise.resolve({ value: this.pendingToMessage(pending), done: false }); + } + return new Promise((resolve8) => { + this.resolveNext = resolve8; + }); + } + }; + } + messageHasAttachments(message) { + var _a5; + if (!((_a5 = message.message) == null ? void 0 : _a5.content)) return false; + if (typeof message.message.content === "string") return false; + return message.message.content.some((block) => block.type === "image"); + } + extractTextContent(message) { + var _a5; + if (!((_a5 = message.message) == null ? void 0 : _a5.content)) return ""; + if (typeof message.message.content === "string") return message.message.content; + return message.message.content.filter((block) => block.type === "text").map((block) => block.text).join("\n\n"); + } + pendingToMessage(pending) { + if (pending.type === "attachment") { + return pending.message; + } + return { + type: "user", + message: { + role: "user", + content: pending.content + }, + parent_tool_use_id: null, + session_id: this.currentSessionId || "" + }; + } +}; + +// src/core/prompt/mainAgent.ts +function getPathRules(vaultPath) { + return `## Path Conventions + +| Location | Access | Path Format | Example | +|----------|--------|-------------|---------| +| **Vault** | Read/Write | Relative from vault root | \`notes/my-note.md\`, \`.\` | +| **External contexts** | Full access | Absolute path | \`/Users/me/Workspace/file.ts\` | + +**Vault files** (default working directory): +- \u2713 Correct: \`notes/my-note.md\`, \`my-note.md\`, \`folder/subfolder/file.md\`, \`.\` +- \u2717 WRONG: \`/notes/my-note.md\`, \`${vaultPath || "/absolute/path"}/file.md\` +- A leading slash or absolute path will FAIL for vault operations. + +**External context paths**: When external directories are selected, use absolute paths to access files there. These directories are explicitly granted for the current session.`; +} +function getBaseSystemPrompt(vaultPath, userName) { + const vaultInfo = vaultPath ? ` + +Vault absolute path: ${vaultPath}` : ""; + const trimmedUserName = userName == null ? void 0 : userName.trim(); + const userContext = trimmedUserName ? `## User Context + +You are collaborating with **${trimmedUserName}**. + +` : ""; + const pathRules = getPathRules(vaultPath); + return `${userContext}## Time Context + +- **Current Date**: Use \`bash: date\` to get the current date and time. Never guess or assume. +- **Knowledge Status**: You possess extensive internal knowledge up to your training cutoff. You do not know the exact date of your cutoff, but you must assume that your internal weights are static and "past," while the Current Date is "present." + +## Identity & Role + +You are **Claudian**, an expert AI assistant specialized in Obsidian vault management, knowledge organization, and code analysis. You operate directly inside the user's Obsidian vault. + +**Core Principles:** +1. **Obsidian Native**: You understand Markdown, YAML frontmatter, Wiki-links, and the "second brain" philosophy. +2. **Safety First**: You never overwrite data without understanding context. You always use relative paths. +3. **Proactive Thinking**: You do not just execute; you *plan* and *verify*. You anticipate potential issues (like broken links or missing files). +4. **Clarity**: Your changes are precise, minimizing "noise" in the user's notes or code. + +The current working directory is the user's vault root.${vaultInfo} + +${pathRules} + +## User Message Format + +User messages have the query first, followed by optional XML context tags: + +\`\`\` +User's question or request here + + +path/to/note.md + + + +selected text content + + + +selected content from an Obsidian browser view + +\`\`\` + +- The user's query/instruction always comes first in the message. +- \`\`: The note the user is currently viewing/focused on. Read this to understand context. +- \`\`: Text currently selected in the editor, with file path and line numbers. +- \`\`: Text selected in an Obsidian browser/web view (for example Surfing), including optional source/title/url metadata. +- \`@filename.md\`: Files mentioned with @ in the query. Read these files when referenced. + +## Obsidian Context + +- **Structure**: Files are Markdown (.md). Folders organize content. +- **Frontmatter**: YAML at the top of files (metadata). Respect existing fields. +- **Links**: Internal Wiki-links \`[[note-name]]\` or \`[[folder/note-name]]\`. External links \`[text](url)\`. + - When reading a note with wikilinks, consider reading linked notes; they often contain related context that helps understand the current note. +- **Tags**: #tag-name for categorization. +- **Dataview**: You may encounter Dataview queries (in \`\`\`dataview\`\`\` blocks). Do not break them unless asked. +- **Vault Config**: \`.obsidian/\` contains internal config. Touch only if you know what you are doing. + +**File References in Responses:** +When mentioning vault files in your responses, use wikilink format so users can click to open them: +- \u2713 Use: \`[[folder/note.md]]\` or \`[[note]]\` +- \u2717 Avoid: plain paths like \`folder/note.md\` (not clickable) + +**Image embeds:** Use \`![[image.png]]\` to display images directly in chat. Images render visually, making it easy to show diagrams, screenshots, or visual content you're discussing. + +Examples: +- "I found your notes in [[30.areas/finance/Investment lessons/2024.Current trading lessons.md]]" +- "See [[daily notes/2024-01-15]] for more details" +- "Here's the diagram: ![[attachments/architecture.png]]" + +## Selection Context + +User messages may include an \`\` tag showing text the user selected: + +\`\`\`xml + +selected text here +possibly multiple lines + +\`\`\` + +User messages may also include a \`\` tag when selection comes from an Obsidian browser view: + +\`\`\`xml + +selected webpage content + +\`\`\` + +**When present:** The user selected this text before sending their message. Use this context to understand what they're referring to.`; +} +function getImageInstructions(mediaFolder) { + const folder = mediaFolder.trim(); + const mediaPath = folder ? `./${folder}` : "."; + const examplePath = folder ? `${folder}/` : ""; + return ` + +## Embedded Images in Notes + +**Proactive image reading**: When reading a note with embedded images, read them alongside text for full context. Images often contain critical information (diagrams, screenshots, charts). + +**Local images** (\`![[image.jpg]]\`): +- Located in media folder: \`${mediaPath}\` +- Read with: \`Read file_path="${examplePath}image.jpg"\` +- Formats: PNG, JPG/JPEG, GIF, WebP + +**External images** (\`![alt](url)\`): +- WebFetch does NOT support images +- Download to media folder -> Read -> Replace URL with wiki-link: + +\`\`\`bash +# Download to media folder with descriptive name +mkdir -p ${mediaPath} +img_name="downloaded_\\$(date +%s).png" +curl -sfo "${examplePath}$img_name" 'URL' +\`\`\` + +Then read with \`Read file_path="${examplePath}$img_name"\`, and replace the markdown link \`![alt](url)\` with \`![[${examplePath}$img_name]]\` in the note. + +**Benefits**: Image becomes a permanent vault asset, works offline, and uses Obsidian's native embed syntax.`; +} +function getAppendixSections(appendices) { + if (!appendices || appendices.length === 0) { + return ""; + } + const sections = appendices.map((appendix) => appendix.trim()).filter(Boolean); + if (sections.length === 0) { + return ""; + } + return ` + +${sections.join("\n\n")}`; +} +function buildSystemPrompt(settings11 = {}, options = {}) { + var _a5; + let prompt = getBaseSystemPrompt(settings11.vaultPath, settings11.userName); + prompt += getImageInstructions(settings11.mediaFolder || ""); + prompt += getAppendixSections(options.appendices); + if ((_a5 = settings11.customPrompt) == null ? void 0 : _a5.trim()) { + prompt += ` + +## Custom Instructions + +${settings11.customPrompt.trim()}`; + } + return prompt; +} +function computeSystemPromptKey(settings11, options = {}) { + const appendixKey = (options.appendices || []).map((appendix) => appendix.trim()).filter(Boolean).join("||"); + const parts = [ + settings11.mediaFolder || "", + settings11.customPrompt || "", + settings11.vaultPath || "", + (settings11.userName || "").trim() + ]; + if (appendixKey) { + parts.push(appendixKey); + } + return parts.join("::"); +} + +// src/providers/claude/runtime/ClaudeQueryOptionsBuilder.ts +var QueryOptionsBuilder = class _QueryOptionsBuilder { + static needsRestart(currentConfig, newConfig) { + if (!currentConfig) return true; + if (currentConfig.systemPromptKey !== newConfig.systemPromptKey) return true; + if (currentConfig.disallowedToolsKey !== newConfig.disallowedToolsKey) return true; + if (currentConfig.pluginsKey !== newConfig.pluginsKey) return true; + if (currentConfig.settingSources !== newConfig.settingSources) return true; + if (currentConfig.claudeCliPath !== newConfig.claudeCliPath) return true; + if (currentConfig.enableChrome !== newConfig.enableChrome) return true; + if (currentConfig.enableAutoMode !== newConfig.enableAutoMode) return true; + if (_QueryOptionsBuilder.pathsChanged(currentConfig.externalContextPaths, newConfig.externalContextPaths)) { + return true; + } + return false; + } + static buildPersistentQueryConfig(ctx, externalContextPaths) { + const claudeSettings = getClaudeProviderSettings(ctx.settings); + const systemPromptSettings = { + mediaFolder: ctx.settings.mediaFolder, + customPrompt: ctx.settings.systemPrompt, + vaultPath: ctx.vaultPath, + userName: ctx.settings.userName + }; + const sdkPermissionMode = _QueryOptionsBuilder.resolveClaudeSdkPermissionMode( + ctx.settings.permissionMode, + claudeSettings.safeMode + ); + const disallowedToolsKey = ctx.mcpManager.getAllDisallowedMcpTools().join("|"); + const pluginsKey = ctx.pluginManager.getPluginsKey(); + const settingSources = resolveClaudeSettingSources(claudeSettings.loadUserSettings); + return { + model: ctx.settings.model, + effortLevel: resolveEffortLevel(ctx.settings.model, ctx.settings.effortLevel), + permissionMode: ctx.settings.permissionMode, + sdkPermissionMode, + systemPromptKey: computeSystemPromptKey(systemPromptSettings), + disallowedToolsKey, + mcpServersKey: "", + // Dynamic via setMcpServers, not tracked for restart + pluginsKey, + externalContextPaths: externalContextPaths || [], + settingSources: settingSources.join(","), + claudeCliPath: ctx.cliPath, + enableChrome: claudeSettings.enableChrome, + enableAutoMode: claudeSettings.safeMode === "auto" + }; + } + static buildPersistentQueryOptions(ctx) { + const { options, claudeSettings } = _QueryOptionsBuilder.buildBaseOptions( + ctx, + ctx.settings.model, + ctx.abortController + ); + options.disallowedTools = [ + ...ctx.mcpManager.getAllDisallowedMcpTools(), + ...UNSUPPORTED_SDK_TOOLS, + ...DISABLED_BUILTIN_SUBAGENTS + ]; + _QueryOptionsBuilder.applyPermissionMode( + options, + ctx.settings.permissionMode, + claudeSettings.safeMode, + ctx.canUseTool + ); + _QueryOptionsBuilder.applyThinking(options, ctx.settings, ctx.settings.model); + options.hooks = ctx.hooks; + options.enableFileCheckpointing = true; + if (ctx.resume) { + options.resume = ctx.resume.sessionId; + if (ctx.resume.sessionAt) { + options.resumeSessionAt = ctx.resume.sessionAt; + } + if (ctx.resume.fork) { + options.forkSession = true; + } + } + if (ctx.externalContextPaths && ctx.externalContextPaths.length > 0) { + options.additionalDirectories = ctx.externalContextPaths; + } + return options; + } + static buildColdStartQueryOptions(ctx) { + var _a5, _b3; + const selectedModel = (_a5 = ctx.modelOverride) != null ? _a5 : ctx.settings.model; + const { options, claudeSettings } = _QueryOptionsBuilder.buildBaseOptions( + ctx, + selectedModel, + ctx.abortController + ); + const mcpMentions = ctx.mcpMentions || /* @__PURE__ */ new Set(); + const uiEnabledServers = ctx.enabledMcpServers || /* @__PURE__ */ new Set(); + const combinedMentions = /* @__PURE__ */ new Set([...mcpMentions, ...uiEnabledServers]); + const mcpServers = ctx.mcpManager.getActiveServers(combinedMentions); + if (Object.keys(mcpServers).length > 0) { + options.mcpServers = mcpServers; + } + const disallowedMcpTools = ctx.mcpManager.getDisallowedMcpTools(combinedMentions); + options.disallowedTools = [ + ...disallowedMcpTools, + ...UNSUPPORTED_SDK_TOOLS, + ...DISABLED_BUILTIN_SUBAGENTS + ]; + _QueryOptionsBuilder.applyPermissionMode( + options, + ctx.settings.permissionMode, + claudeSettings.safeMode, + ctx.canUseTool + ); + options.hooks = ctx.hooks; + _QueryOptionsBuilder.applyThinking(options, ctx.settings, (_b3 = ctx.modelOverride) != null ? _b3 : ctx.settings.model); + if (ctx.allowedTools !== void 0 && ctx.allowedTools.length > 0) { + options.tools = ctx.allowedTools; + } + if (ctx.sessionId) { + options.resume = ctx.sessionId; + } + if (ctx.externalContextPaths && ctx.externalContextPaths.length > 0) { + options.additionalDirectories = ctx.externalContextPaths; + } + return options; + } + static resolveClaudeSdkPermissionMode(permissionMode, claudeSafeMode = "acceptEdits") { + if (permissionMode === "yolo") return "bypassPermissions"; + if (permissionMode === "plan") return "plan"; + return claudeSafeMode; + } + static applyPermissionMode(options, permissionMode, claudeSafeMode, canUseTool) { + options.allowDangerouslySkipPermissions = true; + if (canUseTool) { + options.canUseTool = canUseTool; + } + options.permissionMode = _QueryOptionsBuilder.resolveClaudeSdkPermissionMode( + permissionMode, + claudeSafeMode + ); + } + static applyExtraArgs(options, settings11) { + if (settings11.safeMode === "auto") { + options.extraArgs = { ...options.extraArgs, "enable-auto-mode": null }; + } + if (settings11.enableChrome) { + options.extraArgs = { ...options.extraArgs, chrome: null }; + } + } + static buildBaseOptions(ctx, model, abortController) { + const claudeSettings = getClaudeProviderSettings(ctx.settings); + const systemPromptSettings = { + mediaFolder: ctx.settings.mediaFolder, + customPrompt: ctx.settings.systemPrompt, + vaultPath: ctx.vaultPath, + userName: ctx.settings.userName + }; + const options = { + cwd: ctx.vaultPath, + systemPrompt: buildSystemPrompt(systemPromptSettings), + model, + abortController, + pathToClaudeCodeExecutable: ctx.cliPath, + settingSources: resolveClaudeSettingSources(claudeSettings.loadUserSettings), + env: { + ...process.env, + ...ctx.customEnv, + PATH: ctx.enhancedPath + }, + includePartialMessages: true + }; + _QueryOptionsBuilder.applyExtraArgs(options, claudeSettings); + options.spawnClaudeCodeProcess = createCustomSpawnFunction(ctx.enhancedPath); + return { options, claudeSettings }; + } + static applyThinking(options, settings11, model) { + const effortLevel = resolveEffortLevel(model, settings11.effortLevel); + options.thinking = { type: "adaptive" }; + options.effort = effortLevel; + } + static pathsChanged(a, b2) { + const aKey = [...a || []].sort().join("|"); + const bKey = [...b2 || []].sort().join("|"); + return aKey !== bKey; + } +}; + +// src/providers/claude/runtime/ClaudeRewindService.ts +var fs11 = __toESM(require("fs/promises")); +var os8 = __toESM(require("os")); +var path9 = __toESM(require("path")); +function resolveRewindFilePath(filePath, vaultPath) { + if (path9.isAbsolute(filePath)) { + return filePath; + } + if (vaultPath) { + return path9.join(vaultPath, filePath); + } + return filePath; +} +async function copyDir(from, to) { + await fs11.mkdir(to, { recursive: true }); + const dirents = await fs11.readdir(from, { withFileTypes: true }); + for (const dirent of dirents) { + const srcPath = path9.join(from, dirent.name); + const destPath = path9.join(to, dirent.name); + if (dirent.isDirectory()) { + await copyDir(srcPath, destPath); + continue; + } + if (dirent.isSymbolicLink()) { + const target = await fs11.readlink(srcPath); + await fs11.symlink(target, destPath); + continue; + } + if (dirent.isFile()) { + await fs11.copyFile(srcPath, destPath); + } + } +} +async function createClaudeRewindBackup(filesChanged, vaultPath) { + if (!filesChanged || filesChanged.length === 0) { + return null; + } + const backupRoot = await fs11.mkdtemp(path9.join(os8.tmpdir(), "claudian-rewind-")); + const entries = []; + const backupPathForIndex = (index) => path9.join(backupRoot, String(index)); + for (let i = 0; i < filesChanged.length; i++) { + const originalPath = resolveRewindFilePath(filesChanged[i], vaultPath); + try { + const stats = await fs11.lstat(originalPath); + if (stats.isSymbolicLink()) { + const target = await fs11.readlink(originalPath); + entries.push({ originalPath, existedBefore: true, kind: "symlink", symlinkTarget: target }); + continue; + } + const backupPath = backupPathForIndex(i); + if (stats.isDirectory()) { + await copyDir(originalPath, backupPath); + entries.push({ originalPath, existedBefore: true, kind: "dir", backupPath }); + continue; + } + if (stats.isFile()) { + await fs11.copyFile(originalPath, backupPath); + entries.push({ originalPath, existedBefore: true, kind: "file", backupPath }); + continue; + } + entries.push({ originalPath, existedBefore: false }); + } catch (error48) { + const err = error48; + if (err.code === "ENOENT") { + entries.push({ originalPath, existedBefore: false }); + continue; + } + await fs11.rm(backupRoot, { recursive: true, force: true }); + throw error48; + } + } + const restore = async () => { + const errors = []; + for (const entry of entries) { + try { + if (!entry.existedBefore) { + await fs11.rm(entry.originalPath, { recursive: true, force: true }); + continue; + } + await fs11.rm(entry.originalPath, { recursive: true, force: true }); + await fs11.mkdir(path9.dirname(entry.originalPath), { recursive: true }); + if (entry.kind === "symlink") { + await fs11.symlink(entry.symlinkTarget, entry.originalPath); + continue; + } + if (entry.kind === "dir") { + await copyDir(entry.backupPath, entry.originalPath); + continue; + } + await fs11.copyFile(entry.backupPath, entry.originalPath); + } catch (error48) { + errors.push(error48); + } + } + if (errors.length > 0) { + throw new Error(`Failed to restore ${errors.length} file(s) after rewind failure.`); + } + }; + const cleanup = async () => { + await fs11.rm(backupRoot, { recursive: true, force: true }); + }; + return { restore, cleanup }; +} +async function executeClaudeRewind(userMessageId, deps) { + if (deps.mode === "conversation") { + deps.setPendingResumeAt(deps.assistantMessageId); + deps.closePersistentQuery("conversation rewind"); + return { canRewind: true, filesChanged: [] }; + } + const preview = await deps.rewindFiles(userMessageId, true); + if (!preview.canRewind) { + return preview; + } + const backup = await createClaudeRewindBackup(preview.filesChanged, deps.vaultPath); + try { + const result = await deps.rewindFiles(userMessageId); + if (!result.canRewind) { + await (backup == null ? void 0 : backup.restore()); + deps.closePersistentQuery("rewind failed"); + return result; + } + deps.setPendingResumeAt(deps.assistantMessageId); + deps.closePersistentQuery("rewind"); + return { + ...result, + filesChanged: preview.filesChanged, + insertions: preview.insertions, + deletions: preview.deletions + }; + } catch (error48) { + try { + await (backup == null ? void 0 : backup.restore()); + } catch (rollbackError) { + deps.closePersistentQuery("rewind failed"); + throw new Error( + `Rewind failed and files could not be fully restored: ${rollbackError instanceof Error ? rollbackError.message : "Unknown error"}`, + { cause: rollbackError } + ); + } + deps.closePersistentQuery("rewind failed"); + throw new Error( + `Rewind failed but files were restored: ${error48 instanceof Error ? error48.message : "Unknown error"}`, + { cause: error48 } + ); + } finally { + await (backup == null ? void 0 : backup.cleanup()); + } +} + +// src/providers/claude/runtime/ClaudeSessionManager.ts +var SessionManager = class { + constructor() { + this.state = { + sessionId: null, + sessionModel: null, + pendingSessionModel: null, + wasInterrupted: false, + needsHistoryRebuild: false, + sessionInvalidated: false + }; + } + getSessionId() { + return this.state.sessionId; + } + setSessionId(id, defaultModel) { + this.state.sessionId = id; + this.state.sessionModel = id ? defaultModel != null ? defaultModel : null : null; + this.state.needsHistoryRebuild = false; + this.state.sessionInvalidated = false; + } + wasInterrupted() { + return this.state.wasInterrupted; + } + markInterrupted() { + this.state.wasInterrupted = true; + } + clearInterrupted() { + this.state.wasInterrupted = false; + } + setPendingModel(model) { + this.state.pendingSessionModel = model; + } + clearPendingModel() { + this.state.pendingSessionModel = null; + } + captureSession(sessionId) { + const hadSession = this.state.sessionId !== null; + const isDifferent = this.state.sessionId !== sessionId; + if (hadSession && isDifferent) { + this.state.needsHistoryRebuild = true; + } + this.state.sessionId = sessionId; + this.state.sessionModel = this.state.pendingSessionModel; + this.state.pendingSessionModel = null; + this.state.sessionInvalidated = false; + } + needsHistoryRebuild() { + return this.state.needsHistoryRebuild; + } + clearHistoryRebuild() { + this.state.needsHistoryRebuild = false; + } + invalidateSession() { + this.state.sessionId = null; + this.state.sessionModel = null; + this.state.sessionInvalidated = true; + } + /** Consume the invalidation flag (returns true once). */ + consumeInvalidation() { + const wasInvalidated = this.state.sessionInvalidated; + this.state.sessionInvalidated = false; + return wasInvalidated; + } + reset() { + this.state = { + sessionId: null, + sessionModel: null, + pendingSessionModel: null, + wasInterrupted: false, + needsHistoryRebuild: false, + sessionInvalidated: false + }; + } +}; + +// src/providers/claude/runtime/ClaudeUserMessageFactory.ts +var import_crypto7 = require("crypto"); +function buildUserContentBlocks(prompt, images) { + const content = []; + for (const image of images != null ? images : []) { + content.push({ + type: "image", + source: { + type: "base64", + media_type: image.mediaType, + data: image.data + } + }); + } + if (prompt.trim()) { + content.push({ + type: "text", + text: prompt + }); + } + return content; +} +function buildClaudeSDKUserMessage(prompt, sessionId, images) { + if (!images || images.length === 0) { + return { + type: "user", + message: { + role: "user", + content: prompt + }, + parent_tool_use_id: null, + session_id: sessionId, + uuid: (0, import_crypto7.randomUUID)() + }; + } + return { + type: "user", + message: { + role: "user", + content: buildUserContentBlocks(prompt, images) + }, + parent_tool_use_id: null, + session_id: sessionId, + uuid: (0, import_crypto7.randomUUID)() + }; +} +function buildClaudePromptWithImages(prompt, images) { + if (!images || images.length === 0) { + return prompt; + } + const content = buildUserContentBlocks(prompt, images); + async function* messageGenerator() { + yield { + type: "user", + message: { + role: "user", + content + }, + parent_tool_use_id: null + }; + } + return messageGenerator(); +} + +// src/providers/claude/runtime/ClaudeChatRuntime.ts +function isChatMessageArray(value) { + return Array.isArray(value) && value.length > 0 && !!value[0] && typeof value[0] === "object" && "role" in value[0] && "content" in value[0]; +} +function isImageAttachmentArray(value) { + return Array.isArray(value) && value.length > 0 && !!value[0] && typeof value[0] === "object" && "mediaType" in value[0] && "data" in value[0]; +} +var ClaudianService = class { + constructor(plugin, services) { + this.providerId = CLAUDE_PROVIDER_CAPABILITIES.providerId; + this.abortController = null; + this.approvalCallback = null; + this.approvalDismisser = null; + this.askUserQuestionCallback = null; + this.exitPlanModeCallback = null; + this.permissionModeSyncCallback = null; + this.vaultPath = null; + this.currentExternalContextPaths = []; + this.readyStateListeners = /* @__PURE__ */ new Set(); + // Modular components + this.sessionManager = new SessionManager(); + this.persistentQuery = null; + this.messageChannel = null; + this.queryAbortController = null; + this.responseHandlers = []; + this.responseConsumerRunning = false; + this.responseConsumerPromise = null; + this.shuttingDown = false; + // Tracked configuration for detecting changes that require restart + this.currentConfig = null; + // Current allowed tools for canUseTool enforcement (null = no restriction) + this.currentAllowedTools = null; + this.pendingForkSession = false; + // Last sent message for crash recovery (Phase 1.3) + this.lastSentMessage = null; + this.lastSentQueryOptions = null; + this.crashRecoveryAttempted = false; + this.coldStartInProgress = false; + // Prevent consumer error restarts during cold-start + // SDK command cache — populated on system/init, cleared on persistent query close + this.cachedSdkCommands = []; + // Subagent hook state provider (set from feature layer to avoid core→feature dependency) + this._subagentStateProvider = null; + // Auto-triggered turn handling (e.g., task-notification delivery by the SDK) + this._autoTurnBuffer = []; + this._autoTurnSawStreamText = false; + this._autoTurnSawStreamThinking = false; + this._autoTurnCallback = null; + this.turnMetadata = {}; + this.bufferedUsageChunk = null; + this.streamTransformState = createTransformStreamState(); + this.usageTransformState = createTransformUsageState(); + var _a5, _b3, _c2, _d, _e2, _f2; + this.plugin = plugin; + const legacyPlugin = this.getLegacyPluginDeps(); + if ("mcpManager" in services) { + this.mcpManager = services.mcpManager; + this.pluginManager = (_b3 = (_a5 = services.pluginManager) != null ? _a5 : legacyPlugin.pluginManager) != null ? _b3 : null; + this.agentManager = (_d = (_c2 = services.agentManager) != null ? _c2 : legacyPlugin.agentManager) != null ? _d : null; + return; + } + this.mcpManager = services; + this.pluginManager = (_e2 = legacyPlugin.pluginManager) != null ? _e2 : null; + this.agentManager = (_f2 = legacyPlugin.agentManager) != null ? _f2 : null; + } + getLegacyPluginDeps() { + return this.plugin; + } + getCapabilities() { + return CLAUDE_PROVIDER_CAPABILITIES; + } + prepareTurn(request) { + return encodeClaudeTurn(request, this.mcpManager); + } + consumeTurnMetadata() { + const metadata = { ...this.turnMetadata }; + this.turnMetadata = {}; + this.bufferedUsageChunk = null; + return metadata; + } + onReadyStateChange(listener) { + this.readyStateListeners.add(listener); + try { + listener(this.isReady()); + } catch (e2) { + } + return () => { + this.readyStateListeners.delete(listener); + }; + } + notifyReadyStateChange() { + if (this.readyStateListeners.size === 0) { + return; + } + const isReady = this.isReady(); + for (const listener of this.readyStateListeners) { + try { + listener(isReady); + } catch (e2) { + } + } + } + resetTurnMetadata() { + this.turnMetadata = {}; + this.bufferedUsageChunk = null; + this.usageTransformState.clear(); + } + recordTurnMetadata(update) { + this.turnMetadata = { + ...this.turnMetadata, + ...update + }; + } + bufferUsageChunk(chunk) { + this.bufferedUsageChunk = chunk; + return chunk; + } + updateBufferedUsageContextWindow(contextWindow) { + if (!this.bufferedUsageChunk || contextWindow <= 0) { + return null; + } + const usage = this.bufferedUsageChunk.usage; + const percentage = Math.min( + 100, + Math.max(0, Math.round(usage.contextTokens / contextWindow * 100)) + ); + const nextChunk = { + ...this.bufferedUsageChunk, + usage: { + ...usage, + contextWindow, + contextWindowIsAuthoritative: true, + percentage + } + }; + this.bufferedUsageChunk = nextChunk; + return nextChunk; + } + setPendingResumeAt(uuid3) { + this.pendingResumeAt = uuid3; + } + setResumeCheckpoint(checkpointId) { + this.setPendingResumeAt(checkpointId); + } + /** One-shot: consumed on the next query, then cleared by routeMessage on session init. */ + applyForkState(conv) { + var _a5, _b3, _c2; + const state = getClaudeState(conv.providerState); + const isPending = !conv.sessionId && !state.providerSessionId && !!state.forkSource; + this.pendingForkSession = isPending; + if (isPending) { + this.pendingResumeAt = state.forkSource.resumeAt; + } else { + this.pendingResumeAt = void 0; + } + return (_c2 = (_b3 = conv.sessionId) != null ? _b3 : (_a5 = state.forkSource) == null ? void 0 : _a5.sessionId) != null ? _c2 : null; + } + syncConversationState(conversation, externalContextPaths) { + if (!conversation) { + this.pendingForkSession = false; + this.pendingResumeAt = void 0; + this.setSessionId(null, externalContextPaths); + return; + } + const resolvedSessionId = this.applyForkState(conversation); + this.setSessionId(resolvedSessionId, externalContextPaths); + } + buildSessionUpdates({ conversation, sessionInvalidated }) { + var _a5, _b3; + const sessionId = this.getSessionId(); + const existingState = getClaudeState(conversation == null ? void 0 : conversation.providerState); + const oldSdkSessionId = existingState.providerSessionId; + const sessionChanged = sessionId && oldSdkSessionId && sessionId !== oldSdkSessionId; + const previousProviderSessionIds = sessionChanged ? [.../* @__PURE__ */ new Set([...existingState.previousProviderSessionIds || [], oldSdkSessionId])] : existingState.previousProviderSessionIds; + const isForkSourceOnly = !!existingState.forkSource && !existingState.providerSessionId && sessionId === existingState.forkSource.sessionId; + let resolvedSessionId; + if (sessionInvalidated) { + resolvedSessionId = null; + } else if (isForkSourceOnly) { + resolvedSessionId = (_a5 = conversation == null ? void 0 : conversation.sessionId) != null ? _a5 : null; + } else { + resolvedSessionId = (_b3 = sessionId != null ? sessionId : conversation == null ? void 0 : conversation.sessionId) != null ? _b3 : null; + } + const newProviderState = { + ...existingState, + providerSessionId: sessionId && !isForkSourceOnly ? sessionId : existingState.providerSessionId, + previousProviderSessionIds + }; + if (existingState.forkSource && sessionId && sessionId !== existingState.forkSource.sessionId) { + delete newProviderState.forkSource; + } + return { + updates: { + sessionId: resolvedSessionId, + providerState: newProviderState + } + }; + } + resolveSessionIdForFork(conversation) { + var _a5, _b3, _c2, _d; + const sessionId = this.getSessionId(); + if (sessionId) return sessionId; + if (!conversation) return null; + const state = getClaudeState(conversation.providerState); + return (_d = (_c2 = (_a5 = state.providerSessionId) != null ? _a5 : conversation.sessionId) != null ? _c2 : (_b3 = state.forkSource) == null ? void 0 : _b3.sessionId) != null ? _d : null; + } + async loadSubagentToolCalls(agentId) { + const sessionId = this.getSessionId(); + const vaultPath = getVaultPath(this.plugin.app); + if (!sessionId || !vaultPath) return []; + return loadSubagentToolCalls(vaultPath, sessionId, agentId); + } + async loadSubagentFinalResult(agentId) { + const sessionId = this.getSessionId(); + const vaultPath = getVaultPath(this.plugin.app); + if (!sessionId || !vaultPath) return null; + return loadSubagentFinalResult(vaultPath, sessionId, agentId); + } + async reloadMcpServers() { + await this.mcpManager.loadServers(); + } + /** + * Ensures the persistent query is running with current configuration. + * Unified API that replaces preWarm() and restartPersistentQuery(). + * + * Behavior: + * - If not running → start (if paths available) + * - If running and force=true → close and restart + * - If running and config changed → close and restart + * - If running and config unchanged → no-op + * + * Note: When restart is needed, the query is closed BEFORE checking if we can + * start a new one. This ensures fallback to cold-start if CLI becomes unavailable. + * + * @returns true if the query was (re)started, false otherwise + */ + async ensureReady(options) { + var _a5, _b3, _c2; + const vaultPath = getVaultPath(this.plugin.app); + if (options && options.externalContextPaths !== void 0) { + this.currentExternalContextPaths = options.externalContextPaths; + } + const effectiveSessionId = (_b3 = (_a5 = options == null ? void 0 : options.sessionId) != null ? _a5 : this.sessionManager.getSessionId()) != null ? _b3 : void 0; + const externalContextPaths = (_c2 = options == null ? void 0 : options.externalContextPaths) != null ? _c2 : this.currentExternalContextPaths; + if (!this.persistentQuery) { + if (!vaultPath) return false; + const cliPath2 = this.plugin.getResolvedProviderCliPath("claude"); + if (!cliPath2) return false; + await this.startPersistentQuery(vaultPath, cliPath2, effectiveSessionId, externalContextPaths); + return true; + } + if (options == null ? void 0 : options.force) { + this.closePersistentQuery("forced restart", { preserveHandlers: options.preserveHandlers }); + if (!vaultPath) return false; + const cliPath2 = this.plugin.getResolvedProviderCliPath("claude"); + if (!cliPath2) return false; + await this.startPersistentQuery(vaultPath, cliPath2, effectiveSessionId, externalContextPaths); + return true; + } + if (!vaultPath) return false; + const cliPath = this.plugin.getResolvedProviderCliPath("claude"); + if (!cliPath) return false; + const newConfig = this.buildPersistentQueryConfig(vaultPath, cliPath, externalContextPaths); + if (this.needsRestart(newConfig)) { + this.closePersistentQuery("config changed", { preserveHandlers: options == null ? void 0 : options.preserveHandlers }); + const cliPathAfterClose = this.plugin.getResolvedProviderCliPath("claude"); + if (cliPathAfterClose) { + await this.startPersistentQuery(vaultPath, cliPathAfterClose, effectiveSessionId, externalContextPaths); + return true; + } + return false; + } + return false; + } + /** + * Starts the persistent query for the active chat conversation. + */ + async startPersistentQuery(vaultPath, cliPath, resumeSessionId, externalContextPaths) { + if (this.persistentQuery) { + return; + } + this.shuttingDown = false; + this.vaultPath = vaultPath; + this.messageChannel = new MessageChannel(); + if (resumeSessionId) { + this.messageChannel.setSessionId(resumeSessionId); + this.sessionManager.setSessionId(resumeSessionId, this.getScopedSettings().model); + } + this.queryAbortController = new AbortController(); + const config2 = this.buildPersistentQueryConfig(vaultPath, cliPath, externalContextPaths); + this.currentConfig = config2; + const resumeAtMessageId = this.pendingResumeAt; + const options = this.buildPersistentQueryOptions( + vaultPath, + cliPath, + resumeSessionId, + resumeAtMessageId, + externalContextPaths + ); + this.persistentQuery = jA$({ + prompt: this.messageChannel, + options + }); + if (this.pendingResumeAt === resumeAtMessageId) { + this.pendingResumeAt = void 0; + } + this.attachPersistentQueryStdinErrorHandler(this.persistentQuery); + this.startResponseConsumer(); + this.notifyReadyStateChange(); + } + attachPersistentQueryStdinErrorHandler(query) { + var _a5; + const stdin = (_a5 = query.transport) == null ? void 0 : _a5.processStdin; + if (!stdin || typeof stdin.on !== "function" || typeof stdin.once !== "function") { + return; + } + const handler = (error48) => { + if (this.shuttingDown || this.isPipeError(error48)) { + return; + } + this.closePersistentQuery("stdin error"); + }; + stdin.on("error", handler); + stdin.once("close", () => { + stdin.removeListener("error", handler); + }); + } + isPipeError(error48) { + if (!error48 || typeof error48 !== "object") return false; + const e2 = error48; + return e2.code === "EPIPE" || typeof e2.message === "string" && e2.message.includes("EPIPE"); + } + /** + * Closes the persistent query and cleans up resources. + */ + closePersistentQuery(_reason, options) { + var _a5, _b3, _c2; + if (!this.persistentQuery) { + return; + } + const preserveHandlers = (_a5 = options == null ? void 0 : options.preserveHandlers) != null ? _a5 : false; + this.shuttingDown = true; + (_b3 = this.messageChannel) == null ? void 0 : _b3.close(); + void this.persistentQuery.interrupt().catch(() => { + }); + (_c2 = this.queryAbortController) == null ? void 0 : _c2.abort(); + if (!preserveHandlers) { + for (const handler of this.responseHandlers) { + handler.onDone(); + } + } + this.shuttingDown = false; + this.notifyReadyStateChange(); + this.persistentQuery = null; + this.messageChannel = null; + this.queryAbortController = null; + this.responseConsumerRunning = false; + this.responseConsumerPromise = null; + this.currentConfig = null; + this.cachedSdkCommands = []; + this.streamTransformState.clearAll(); + this.usageTransformState.clear(); + this._autoTurnBuffer = []; + this._autoTurnSawStreamText = false; + this._autoTurnSawStreamThinking = false; + if (!preserveHandlers) { + this.responseHandlers = []; + this.currentAllowedTools = null; + } + } + /** + * Checks if the persistent query needs to be restarted based on configuration changes. + */ + needsRestart(newConfig) { + return QueryOptionsBuilder.needsRestart(this.currentConfig, newConfig); + } + /** + * Builds configuration object for tracking changes. + */ + buildPersistentQueryConfig(vaultPath, cliPath, externalContextPaths) { + return QueryOptionsBuilder.buildPersistentQueryConfig( + this.buildQueryOptionsContext(vaultPath, cliPath), + externalContextPaths + ); + } + /** + * Builds the base query options context from current state. + */ + getScopedSettings() { + return ProviderSettingsCoordinator.getProviderSettingsSnapshot( + this.plugin.settings, + this.providerId + ); + } + buildQueryOptionsContext(vaultPath, cliPath) { + const customEnv = parseEnvironmentVariables(this.plugin.getActiveEnvironmentVariables(this.providerId)); + const enhancedPath = getEnhancedPath(customEnv.PATH, cliPath); + return { + vaultPath, + cliPath, + settings: this.getScopedSettings(), + customEnv, + enhancedPath, + mcpManager: this.mcpManager, + pluginManager: this.requirePluginManager() + }; + } + requirePluginManager() { + var _a5, _b3; + const pluginManager = (_b3 = (_a5 = this.pluginManager) != null ? _a5 : this.getLegacyPluginDeps().pluginManager) != null ? _b3 : null; + if (!pluginManager) { + throw new Error("Claude plugin manager is unavailable."); + } + return pluginManager; + } + getAgentManager() { + var _a5, _b3; + return (_b3 = (_a5 = this.agentManager) != null ? _a5 : this.getLegacyPluginDeps().agentManager) != null ? _b3 : null; + } + /** + * Builds SDK options for the persistent query. + */ + buildPersistentQueryOptions(vaultPath, cliPath, resumeSessionId, resumeAtMessageId, externalContextPaths) { + var _a5; + const baseContext = this.buildQueryOptionsContext(vaultPath, cliPath); + const hooks = this.buildHooks(); + const ctx = { + ...baseContext, + abortController: (_a5 = this.queryAbortController) != null ? _a5 : void 0, + resume: resumeSessionId ? { sessionId: resumeSessionId, sessionAt: resumeAtMessageId, fork: this.pendingForkSession || void 0 } : void 0, + canUseTool: this.createApprovalCallback(), + hooks, + externalContextPaths + }; + return QueryOptionsBuilder.buildPersistentQueryOptions(ctx); + } + /** + * Builds the hooks for SDK options. + * Hooks need access to `this` for dynamic settings, so they're built here. + */ + buildHooks() { + const hooks = {}; + hooks.Stop = [createStopSubagentHook( + () => { + var _a5, _b3; + return (_b3 = (_a5 = this._subagentStateProvider) == null ? void 0 : _a5.call(this)) != null ? _b3 : { hasRunning: false }; + } + )]; + return hooks; + } + /** + * Starts the background consumer loop that routes chunks to handlers. + */ + startResponseConsumer() { + if (this.responseConsumerRunning) { + return; + } + this.responseConsumerRunning = true; + const queryForThisConsumer = this.persistentQuery; + this.responseConsumerPromise = (async () => { + var _a5; + if (!this.persistentQuery) return; + try { + for await (const message of this.persistentQuery) { + if (this.shuttingDown) break; + await this.routeMessage(message); + } + } catch (error48) { + if (this.persistentQuery !== queryForThisConsumer && this.persistentQuery !== null) { + return; + } + if (!this.shuttingDown && !this.coldStartInProgress) { + const handler = this.responseHandlers[this.responseHandlers.length - 1]; + const errorInstance = error48 instanceof Error ? error48 : new Error(String(error48)); + const messageToReplay = this.lastSentMessage; + if (!this.crashRecoveryAttempted && messageToReplay && handler && !handler.sawAnyChunk) { + this.crashRecoveryAttempted = true; + try { + await this.ensureReady({ force: true, preserveHandlers: true }); + if (!this.messageChannel) { + throw new Error("Persistent query restart did not create message channel", { + cause: error48 + }); + } + await this.applyDynamicUpdates((_a5 = this.lastSentQueryOptions) != null ? _a5 : void 0, { preserveHandlers: true }); + this.messageChannel.enqueue(messageToReplay); + return; + } catch (restartError) { + if (isSessionExpiredError(restartError)) { + this.sessionManager.invalidateSession(); + } + handler.onError(errorInstance); + return; + } + } + if (handler) { + handler.onError(errorInstance); + } + if (!this.crashRecoveryAttempted) { + this.crashRecoveryAttempted = true; + try { + await this.ensureReady({ force: true }); + } catch (restartError) { + if (isSessionExpiredError(restartError)) { + this.sessionManager.invalidateSession(); + } + } + } + } + } finally { + if (this.persistentQuery === queryForThisConsumer || this.persistentQuery === null) { + this.responseConsumerRunning = false; + } + } + })(); + } + /** @param modelOverride - Optional model override for cold-start queries */ + getTransformOptions(modelOverride, streamState = this.streamTransformState, usageState = this.usageTransformState) { + const settings11 = this.getScopedSettings(); + return { + intendedModel: modelOverride != null ? modelOverride : settings11.model, + customContextLimits: settings11.customContextLimits, + streamState, + usageState + }; + } + /** + * Routes an SDK message to the active response handler. + * + * Design: Only one handler exists at a time because MessageChannel enforces + * single-turn processing. When a turn is active, new messages are queued/merged. + * The next message only dequeues after onTurnComplete(), which calls onDone() + * on the current handler. A new handler is registered only when the next query starts. + */ + async routeMessage(message) { + var _a5, _b3, _c2; + const handler = this.responseHandlers[this.responseHandlers.length - 1]; + const autoTurnBufferStartLength = this._autoTurnBuffer.length; + for (const event of transformSDKMessage(message, this.getTransformOptions())) { + this.noteVisibleStreamContent(message, event, { + onText: () => { + if (handler) { + handler.markStreamTextSeen(); + } else { + this._autoTurnSawStreamText = true; + } + }, + onThinking: () => { + if (handler) { + handler.markStreamThinkingSeen(); + } else { + this._autoTurnSawStreamThinking = true; + } + } + }); + if (isSessionInitEvent(event)) { + const wasFork = this.pendingForkSession; + this.sessionManager.captureSession(event.sessionId); + if (wasFork) { + this.sessionManager.clearHistoryRebuild(); + this.pendingForkSession = false; + } + (_a5 = this.messageChannel) == null ? void 0 : _a5.setSessionId(event.sessionId); + if (event.agents) { + try { + (_b3 = this.getAgentManager()) == null ? void 0 : _b3.setBuiltinAgentNames(event.agents); + } catch (e2) { + } + } + if (event.permissionMode && this.permissionModeSyncCallback) { + try { + this.permissionModeSyncCallback(event.permissionMode); + } catch (e2) { + } + } + void this.fetchAndCacheCommands(this.persistentQuery); + } else if (isContextWindowEvent(event)) { + const usageChunk = this.updateBufferedUsageContextWindow(event.contextWindow); + if (!usageChunk) { + continue; + } + if (handler) { + handler.onChunk(usageChunk); + } else { + this._autoTurnBuffer.push(usageChunk); + } + } else if (isStreamChunk(event)) { + if (message.type === "assistant" && event.type === "text") { + if ((handler == null ? void 0 : handler.sawStreamText) || !handler && this._autoTurnSawStreamText) { + continue; + } + } + if (message.type === "assistant" && event.type === "thinking") { + if ((handler == null ? void 0 : handler.sawStreamThinking) || !handler && this._autoTurnSawStreamThinking) { + continue; + } + } + if (event.type === "tool_use" && event.name === TOOL_ENTER_PLAN_MODE) { + if (this.currentConfig) { + this.currentConfig.permissionMode = "plan"; + this.currentConfig.sdkPermissionMode = "plan"; + } + if (this.permissionModeSyncCallback) { + try { + this.permissionModeSyncCallback("plan"); + } catch (e2) { + } + } + } + const normalizedChunk = event.type === "usage" ? this.bufferUsageChunk({ ...event, sessionId: this.sessionManager.getSessionId() }) : event; + if (handler) { + handler.onChunk(normalizedChunk); + } else { + this._autoTurnBuffer.push(normalizedChunk); + } + } + } + if (!handler && message.type === "system" && message.subtype === "task_notification" && this._autoTurnBuffer.length > autoTurnBufferStartLength) { + await this.flushAutoTurnBuffer(); + } + if (message.type === "assistant" && message.uuid) { + this.recordTurnMetadata({ assistantMessageId: message.uuid }); + } + if (isTurnCompleteMessage(message)) { + (_c2 = this.messageChannel) == null ? void 0 : _c2.onTurnComplete(); + if (handler) { + handler.resetStreamText(); + handler.resetStreamThinking(); + handler.onDone(); + } else { + await this.flushAutoTurnBuffer(); + } + } + } + async flushAutoTurnBuffer() { + var _a5; + this._autoTurnSawStreamText = false; + this._autoTurnSawStreamThinking = false; + if (this._autoTurnBuffer.length === 0) { + return; + } + const chunks = [...this._autoTurnBuffer]; + const metadata = this.consumeTurnMetadata(); + this._autoTurnBuffer = []; + try { + await ((_a5 = this._autoTurnCallback) == null ? void 0 : _a5.call(this, { chunks, metadata })); + } catch (e2) { + new import_obsidian14.Notice("Background task completed, but the result could not be rendered."); + } + } + registerResponseHandler(handler) { + this.responseHandlers.push(handler); + } + unregisterResponseHandler(handlerId) { + const idx = this.responseHandlers.findIndex((h2) => h2.id === handlerId); + if (idx >= 0) { + this.responseHandlers.splice(idx, 1); + } + } + buildLegacyTurnRequest(prompt, images, queryOptions) { + return { + text: prompt, + images, + externalContextPaths: queryOptions == null ? void 0 : queryOptions.externalContextPaths, + enabledMcpServers: queryOptions == null ? void 0 : queryOptions.enabledMcpServers + }; + } + buildQueryOptionsFromTurnRequest(request, encodedTurn, legacyQueryOptions) { + var _a5, _b3, _c2, _d; + const mcpMentions = (legacyQueryOptions == null ? void 0 : legacyQueryOptions.mcpMentions) ? /* @__PURE__ */ new Set([...legacyQueryOptions.mcpMentions, ...encodedTurn.mcpMentions]) : encodedTurn.mcpMentions; + const effectiveQueryOptions = { + allowedTools: legacyQueryOptions == null ? void 0 : legacyQueryOptions.allowedTools, + model: legacyQueryOptions == null ? void 0 : legacyQueryOptions.model, + mcpMentions, + enabledMcpServers: (_a5 = request.enabledMcpServers) != null ? _a5 : legacyQueryOptions == null ? void 0 : legacyQueryOptions.enabledMcpServers, + forceColdStart: legacyQueryOptions == null ? void 0 : legacyQueryOptions.forceColdStart, + externalContextPaths: (_b3 = request.externalContextPaths) != null ? _b3 : legacyQueryOptions == null ? void 0 : legacyQueryOptions.externalContextPaths + }; + if (effectiveQueryOptions.allowedTools === void 0 && effectiveQueryOptions.model === void 0 && effectiveQueryOptions.enabledMcpServers === void 0 && effectiveQueryOptions.forceColdStart === void 0 && effectiveQueryOptions.externalContextPaths === void 0 && ((_d = (_c2 = effectiveQueryOptions.mcpMentions) == null ? void 0 : _c2.size) != null ? _d : 0) === 0) { + return void 0; + } + return effectiveQueryOptions; + } + normalizeTurnInvocation(turnOrPrompt, imagesOrHistory, conversationHistoryOrQueryOptions, legacyQueryOptions) { + if (typeof turnOrPrompt !== "string") { + const turn = turnOrPrompt; + const conversationHistory2 = isChatMessageArray(imagesOrHistory) ? imagesOrHistory : void 0; + const explicitQueryOptions = isChatMessageArray(conversationHistoryOrQueryOptions) ? void 0 : conversationHistoryOrQueryOptions; + return { + request: turn.request, + encodedTurn: turn, + conversationHistory: conversationHistory2, + queryOptions: this.buildQueryOptionsFromTurnRequest(turn.request, turn, explicitQueryOptions) + }; + } + const images = isImageAttachmentArray(imagesOrHistory) ? imagesOrHistory : void 0; + const conversationHistory = isChatMessageArray(conversationHistoryOrQueryOptions) ? conversationHistoryOrQueryOptions : void 0; + const queryOptions = isChatMessageArray(conversationHistoryOrQueryOptions) ? legacyQueryOptions : conversationHistoryOrQueryOptions != null ? conversationHistoryOrQueryOptions : legacyQueryOptions; + const request = this.buildLegacyTurnRequest(turnOrPrompt, images, queryOptions); + const encodedTurn = this.prepareTurn(request); + return { + request, + encodedTurn, + conversationHistory, + queryOptions: this.buildQueryOptionsFromTurnRequest(request, encodedTurn, queryOptions) + }; + } + isPersistentQueryActive() { + return this.persistentQuery !== null && !this.shuttingDown; + } + async *query(turnOrPrompt, imagesOrHistory, conversationHistoryOrQueryOptions, legacyQueryOptions) { + var _a5; + const normalized = this.normalizeTurnInvocation( + turnOrPrompt, + imagesOrHistory, + conversationHistoryOrQueryOptions, + legacyQueryOptions + ); + const prompt = normalized.encodedTurn.prompt; + const images = normalized.request.images; + const conversationHistory = normalized.conversationHistory; + const queryOptions = normalized.queryOptions; + const vaultPath = getVaultPath(this.plugin.app); + if (!vaultPath) { + yield { type: "error", content: "Could not determine vault path" }; + return; + } + const resolvedClaudePath = this.plugin.getResolvedProviderCliPath("claude"); + if (!resolvedClaudePath) { + yield { type: "error", content: "Claude CLI not found. Please install Claude Code CLI." }; + return; + } + const customEnv = parseEnvironmentVariables(this.plugin.getActiveEnvironmentVariables(this.providerId)); + const enhancedPath = getEnhancedPath(customEnv.PATH, resolvedClaudePath); + const missingNodeError = getMissingNodeError(resolvedClaudePath, enhancedPath); + if (missingNodeError) { + yield { type: "error", content: missingNodeError }; + return; + } + let promptToSend = prompt; + let forceColdStart = false; + if (this.sessionManager.wasInterrupted()) { + this.sessionManager.clearInterrupted(); + } + if (this.sessionManager.needsHistoryRebuild() && conversationHistory && conversationHistory.length > 0) { + const historyContext = buildContextFromHistory(conversationHistory); + const actualPrompt = stripCurrentNoteContext(prompt); + promptToSend = buildPromptWithHistoryContext(historyContext, prompt, actualPrompt, conversationHistory); + this.sessionManager.clearHistoryRebuild(); + } + const noSessionButHasHistory = !this.sessionManager.getSessionId() && conversationHistory && conversationHistory.length > 0; + if (noSessionButHasHistory) { + const historyContext = buildContextFromHistory(conversationHistory); + const actualPrompt = stripCurrentNoteContext(prompt); + promptToSend = buildPromptWithHistoryContext(historyContext, prompt, actualPrompt, conversationHistory); + forceColdStart = true; + } + const effectiveQueryOptions = forceColdStart ? { ...queryOptions, forceColdStart: true } : queryOptions; + if (forceColdStart) { + this.coldStartInProgress = true; + this.closePersistentQuery("session invalidated"); + } + const shouldUsePersistent = !(effectiveQueryOptions == null ? void 0 : effectiveQueryOptions.forceColdStart); + if (shouldUsePersistent) { + if (!this.persistentQuery && !this.shuttingDown) { + await this.startPersistentQuery( + vaultPath, + resolvedClaudePath, + (_a5 = this.sessionManager.getSessionId()) != null ? _a5 : void 0 + ); + } + if (this.persistentQuery && !this.shuttingDown) { + try { + yield* this.queryViaPersistent(promptToSend, images, vaultPath, resolvedClaudePath, effectiveQueryOptions); + return; + } catch (error48) { + if (isSessionExpiredError(error48) && conversationHistory && conversationHistory.length > 0) { + this.sessionManager.invalidateSession(); + const retryRequest = this.buildHistoryRebuildRequest(prompt, conversationHistory); + this.coldStartInProgress = true; + this.abortController = new AbortController(); + try { + yield* this.queryViaSDK( + retryRequest.prompt, + vaultPath, + resolvedClaudePath, + // Use current message's images, fallback to history images + images != null ? images : retryRequest.images, + effectiveQueryOptions + ); + } catch (retryError) { + const msg = retryError instanceof Error ? retryError.message : "Unknown error"; + yield { type: "error", content: msg }; + } finally { + this.coldStartInProgress = false; + this.abortController = null; + } + return; + } + throw error48; + } + } + } + this.coldStartInProgress = true; + this.abortController = new AbortController(); + try { + yield* this.queryViaSDK(promptToSend, vaultPath, resolvedClaudePath, images, effectiveQueryOptions); + } catch (error48) { + if (isSessionExpiredError(error48) && conversationHistory && conversationHistory.length > 0) { + this.sessionManager.invalidateSession(); + const retryRequest = this.buildHistoryRebuildRequest(prompt, conversationHistory); + try { + yield* this.queryViaSDK( + retryRequest.prompt, + vaultPath, + resolvedClaudePath, + // Use current message's images, fallback to history images + images != null ? images : retryRequest.images, + effectiveQueryOptions + ); + } catch (retryError) { + const msg2 = retryError instanceof Error ? retryError.message : "Unknown error"; + yield { type: "error", content: msg2 }; + } + return; + } + const msg = error48 instanceof Error ? error48.message : "Unknown error"; + yield { type: "error", content: msg }; + } finally { + this.coldStartInProgress = false; + this.abortController = null; + } + } + buildHistoryRebuildRequest(prompt, conversationHistory) { + const historyContext = buildContextFromHistory(conversationHistory); + const actualPrompt = stripCurrentNoteContext(prompt); + const fullPrompt = buildPromptWithHistoryContext(historyContext, prompt, actualPrompt, conversationHistory); + const lastUserMessage = getLastUserMessage(conversationHistory); + return { + prompt: fullPrompt, + images: lastUserMessage == null ? void 0 : lastUserMessage.images + }; + } + /** + * Query via persistent query (Phase 1.5). + * Uses the message channel to send messages without cold-start latency. + */ + async *queryViaPersistent(prompt, images, vaultPath, cliPath, queryOptions) { + var _a5; + this.resetTurnMetadata(); + if (!this.persistentQuery || !this.messageChannel) { + yield* this.queryViaSDK(prompt, vaultPath, cliPath, images, queryOptions); + return; + } + if ((queryOptions == null ? void 0 : queryOptions.allowedTools) !== void 0) { + this.currentAllowedTools = queryOptions.allowedTools.length > 0 ? [...queryOptions.allowedTools, TOOL_SKILL] : []; + } else { + this.currentAllowedTools = null; + } + const savedAllowedTools = this.currentAllowedTools; + await this.applyDynamicUpdates(queryOptions); + this.currentAllowedTools = savedAllowedTools; + if (!this.persistentQuery || !this.messageChannel) { + yield* this.queryViaSDK(prompt, vaultPath, cliPath, images, queryOptions); + return; + } + if (!this.responseConsumerRunning) { + yield* this.queryViaSDK(prompt, vaultPath, cliPath, images, queryOptions); + return; + } + const message = this.buildSDKUserMessage(prompt, images); + const state = { + chunks: [], + resolveChunk: null, + done: false, + error: null + }; + const handlerId = `handler-${Date.now()}-${Math.random().toString(36).slice(2)}`; + const handler = createResponseHandler({ + id: handlerId, + onChunk: (chunk) => { + handler.markChunkSeen(); + if (state.resolveChunk) { + state.resolveChunk(chunk); + state.resolveChunk = null; + } else { + state.chunks.push(chunk); + } + }, + onDone: () => { + state.done = true; + if (state.resolveChunk) { + state.resolveChunk(null); + state.resolveChunk = null; + } + }, + onError: (err) => { + state.error = err; + state.done = true; + if (state.resolveChunk) { + state.resolveChunk(null); + state.resolveChunk = null; + } + } + }); + this.registerResponseHandler(handler); + try { + this.lastSentMessage = message; + this.lastSentQueryOptions = queryOptions != null ? queryOptions : null; + this.crashRecoveryAttempted = false; + try { + this.messageChannel.enqueue(message); + } catch (error48) { + if (error48 instanceof Error && error48.message.includes("closed")) { + yield* this.queryViaSDK(prompt, vaultPath, cliPath, images, queryOptions); + return; + } + throw error48; + } + this.recordTurnMetadata({ + userMessageId: (_a5 = message.uuid) != null ? _a5 : void 0, + wasSent: true + }); + while (!state.done) { + if (state.chunks.length > 0) { + yield state.chunks.shift(); + } else { + const chunk = await new Promise((resolve8) => { + state.resolveChunk = resolve8; + }); + if (chunk) { + yield chunk; + } + } + } + while (state.chunks.length > 0) { + yield state.chunks.shift(); + } + if (state.error) { + if (isSessionExpiredError(state.error)) { + throw state.error; + } + yield { type: "error", content: state.error.message }; + } + this.lastSentMessage = null; + this.lastSentQueryOptions = null; + yield { type: "done" }; + } finally { + this.unregisterResponseHandler(handlerId); + this.currentAllowedTools = null; + } + } + buildSDKUserMessage(prompt, images) { + return buildClaudeSDKUserMessage( + prompt, + this.sessionManager.getSessionId() || "", + images + ); + } + /** + * Apply dynamic updates to the persistent query before sending a message (Phase 1.6). + */ + async applyDynamicUpdates(queryOptions, restartOptions, allowRestart = true) { + await applyClaudeDynamicUpdates( + { + getPersistentQuery: () => this.persistentQuery, + getCurrentConfig: () => this.currentConfig, + mutateCurrentConfig: (mutate) => { + if (this.currentConfig) { + mutate(this.currentConfig); + } + }, + getVaultPath: () => this.vaultPath, + getCliPath: () => this.plugin.getResolvedProviderCliPath("claude"), + getScopedSettings: () => this.getScopedSettings(), + getPermissionMode: () => this.plugin.settings.permissionMode, + resolveSDKPermissionMode: (mode) => this.resolveSDKPermissionMode(mode), + mcpManager: this.mcpManager, + buildPersistentQueryConfig: (vaultPath, cliPath, externalContextPaths) => this.buildPersistentQueryConfig(vaultPath, cliPath, externalContextPaths), + needsRestart: (newConfig) => this.needsRestart(newConfig), + ensureReady: (options) => this.ensureReady(options), + setCurrentExternalContextPaths: (paths) => { + this.currentExternalContextPaths = paths; + }, + notifyFailure: (message) => { + new import_obsidian14.Notice(message); + } + }, + queryOptions, + restartOptions, + allowRestart + ); + } + noteVisibleStreamContent(message, event, callbacks) { + if (message.type !== "stream_event") { + return; + } + if (event.type === "text") { + callbacks.onText(); + } else if (event.type === "thinking") { + callbacks.onThinking(); + } + } + buildPromptWithImages(prompt, images) { + return buildClaudePromptWithImages(prompt, images); + } + async *queryViaSDK(prompt, cwd, cliPath, images, queryOptions) { + var _a5, _b3, _c2; + this.resetTurnMetadata(); + const selectedModel = (queryOptions == null ? void 0 : queryOptions.model) || this.getScopedSettings().model; + this.sessionManager.setPendingModel(selectedModel); + this.vaultPath = cwd; + const queryPrompt = this.buildPromptWithImages(prompt, images); + const baseContext = this.buildQueryOptionsContext(cwd, cliPath); + const externalContextPaths = (queryOptions == null ? void 0 : queryOptions.externalContextPaths) || []; + const hooks = this.buildHooks(); + const hasEditorContext = prompt.includes(" 0) { + const toolSet = /* @__PURE__ */ new Set([...queryOptions.allowedTools, TOOL_SKILL]); + allowedTools = [...toolSet]; + } + const ctx = { + ...baseContext, + abortController: (_a5 = this.abortController) != null ? _a5 : void 0, + sessionId: (_b3 = this.sessionManager.getSessionId()) != null ? _b3 : void 0, + modelOverride: queryOptions == null ? void 0 : queryOptions.model, + canUseTool: this.createApprovalCallback(), + hooks, + mcpMentions: queryOptions == null ? void 0 : queryOptions.mcpMentions, + enabledMcpServers: queryOptions == null ? void 0 : queryOptions.enabledMcpServers, + allowedTools, + hasEditorContext, + externalContextPaths + }; + const options = QueryOptionsBuilder.buildColdStartQueryOptions(ctx); + let sawStreamText = false; + let sawStreamThinking = false; + const streamState = createTransformStreamState(); + const usageState = createTransformUsageState(); + try { + const response = jA$({ prompt: queryPrompt, options }); + this.recordTurnMetadata({ wasSent: true }); + let streamSessionId = this.sessionManager.getSessionId(); + for await (const message of response) { + if ((_c2 = this.abortController) == null ? void 0 : _c2.signal.aborted) { + await response.interrupt(); + break; + } + for (const event of transformSDKMessage(message, this.getTransformOptions(selectedModel, streamState, usageState))) { + this.noteVisibleStreamContent(message, event, { + onText: () => { + sawStreamText = true; + }, + onThinking: () => { + sawStreamThinking = true; + } + }); + if (isSessionInitEvent(event)) { + this.sessionManager.captureSession(event.sessionId); + streamSessionId = event.sessionId; + } else if (isContextWindowEvent(event)) { + const usageChunk = this.updateBufferedUsageContextWindow(event.contextWindow); + if (usageChunk) { + yield usageChunk; + } + } else if (isStreamChunk(event)) { + if (message.type === "assistant" && sawStreamText && event.type === "text") { + continue; + } + if (message.type === "assistant" && sawStreamThinking && event.type === "thinking") { + continue; + } + if (event.type === "usage") { + yield this.bufferUsageChunk({ ...event, sessionId: streamSessionId }); + } else { + yield event; + } + } + } + if (message.type === "assistant" && message.uuid) { + this.recordTurnMetadata({ assistantMessageId: message.uuid }); + } + if (message.type === "result") { + sawStreamText = false; + sawStreamThinking = false; + } + } + } catch (error48) { + if (isSessionExpiredError(error48)) { + throw error48; + } + const msg = error48 instanceof Error ? error48.message : "Unknown error"; + yield { type: "error", content: msg }; + } finally { + this.sessionManager.clearPendingModel(); + this.currentAllowedTools = null; + } + yield { type: "done" }; + } + cancel() { + var _a5; + (_a5 = this.approvalDismisser) == null ? void 0 : _a5.call(this); + if (this.abortController) { + this.abortController.abort(); + this.sessionManager.markInterrupted(); + } + if (this.persistentQuery && !this.shuttingDown) { + void this.persistentQuery.interrupt().catch(() => { + }); + } + } + /** + * Reset the conversation session. + * Closes the persistent query since session is changing. + */ + resetSession() { + this.closePersistentQuery("session reset"); + this.crashRecoveryAttempted = false; + this.sessionManager.reset(); + } + getSessionId() { + return this.sessionManager.getSessionId(); + } + /** Consume session invalidation flag for persistence updates. */ + consumeSessionInvalidation() { + return this.sessionManager.consumeInvalidation(); + } + /** + * Check if the service is ready (persistent query is active). + * Used to determine if SDK skills are available. + */ + isReady() { + return this.isPersistentQueryActive(); + } + /** + * Get supported commands (SDK skills). + * Returns cached commands populated on system/init. Falls back to a fresh + * supportedCommands() call if the cache is empty (e.g., dropdown opened + * before the first init event). + */ + async getSupportedCommands() { + if (this.cachedSdkCommands.length > 0) { + return this.cachedSdkCommands; + } + if (!this.persistentQuery) { + return []; + } + return this.fetchAndCacheCommands(this.persistentQuery); + } + /** + * Fetches commands from the SDK and caches them. Called on system/init + * (fire-and-forget) and as a fallback from getSupportedCommands(). + */ + async fetchAndCacheCommands(query) { + if (!query) return []; + try { + const sdkCommands = await query.supportedCommands(); + const mappedCommands = sdkCommands.map((cmd) => ({ + id: `sdk:${cmd.name}`, + name: cmd.name, + description: cmd.description, + argumentHint: cmd.argumentHint, + content: "", + source: "sdk" + })); + if (this.persistentQuery !== query) { + return this.cachedSdkCommands; + } + this.cachedSdkCommands = mappedCommands; + return this.cachedSdkCommands; + } catch (e2) { + return []; + } + } + /** + * Set the session ID (for restoring from saved conversation). + * Closes persistent query synchronously if session is changing, then ensures query is ready. + * + * @param id - Session ID to restore, or null for new session + * @param externalContextPaths - External context paths for the session (prevents stale contexts) + */ + setSessionId(id, externalContextPaths) { + const currentId = this.sessionManager.getSessionId(); + const sessionChanged = currentId !== id; + if (sessionChanged) { + this.closePersistentQuery("session switch"); + this.crashRecoveryAttempted = false; + } + this.sessionManager.setSessionId(id, this.getScopedSettings().model); + if (externalContextPaths !== void 0) { + this.currentExternalContextPaths = externalContextPaths; + } + } + /** + * Cleanup resources (Phase 5). + * Called on plugin unload to close persistent query and abort any cold-start query. + */ + cleanup() { + this.closePersistentQuery("plugin cleanup"); + this.cancel(); + this.resetSession(); + } + async rewindFiles(userMessageId, dryRun) { + if (!this.persistentQuery) throw new Error("No active query"); + if (this.shuttingDown) throw new Error("Service is shutting down"); + return this.persistentQuery.rewindFiles(userMessageId, { dryRun }); + } + async rewind(userMessageId, assistantMessageId, mode = "code-and-conversation") { + return executeClaudeRewind(userMessageId, { + assistantMessageId, + mode, + rewindFiles: (id, dryRun) => this.rewindFiles(id, dryRun), + closePersistentQuery: (reason) => this.closePersistentQuery(reason), + setPendingResumeAt: (resumeAt) => { + this.pendingResumeAt = resumeAt; + }, + vaultPath: this.vaultPath + }); + } + setApprovalCallback(callback) { + this.approvalCallback = callback; + } + setApprovalDismisser(dismisser) { + this.approvalDismisser = dismisser; + } + setAskUserQuestionCallback(callback) { + this.askUserQuestionCallback = callback; + } + setExitPlanModeCallback(callback) { + this.exitPlanModeCallback = callback; + } + setPermissionModeSyncCallback(callback) { + this.permissionModeSyncCallback = callback; + } + setSubagentHookProvider(getState) { + this._subagentStateProvider = getState; + } + setAutoTurnCallback(callback) { + this._autoTurnCallback = callback; + } + createApprovalCallback() { + return createClaudeApprovalCallback({ + getAllowedTools: () => this.currentAllowedTools, + getApprovalCallback: () => this.approvalCallback, + getAskUserQuestionCallback: () => this.askUserQuestionCallback, + getExitPlanModeCallback: () => this.exitPlanModeCallback, + getPermissionMode: () => this.plugin.settings.permissionMode, + resolveSDKPermissionMode: (mode) => this.resolveSDKPermissionMode(mode), + syncPermissionMode: (mode, sdkMode) => { + if (this.currentConfig) { + this.currentConfig.permissionMode = mode; + this.currentConfig.sdkPermissionMode = sdkMode; + } + } + }); + } + resolveSDKPermissionMode(mode) { + return QueryOptionsBuilder.resolveClaudeSdkPermissionMode( + mode, + getClaudeProviderSettings(this.plugin.settings).safeMode + ); + } +}; + +// src/providers/claude/runtime/ClaudeTaskResultInterpreter.ts +function extractAgentIdFromString(value) { + const regexPatterns = [ + /"agent_id"\s*:\s*"([^"]+)"/, + /"agentId"\s*:\s*"([^"]+)"/, + /agent_id[=:]\s*"?([a-zA-Z0-9_-]+)"?/i, + /agentId[=:]\s*"?([a-zA-Z0-9_-]+)"?/i + ]; + for (const pattern of regexPatterns) { + const match = value.match(pattern); + if (match && match[1]) { + return match[1]; + } + } + return null; +} +function extractResultFromTaskObject(task) { + if (!task || typeof task !== "object") { + return null; + } + const record2 = task; + const result = typeof record2.result === "string" ? record2.result.trim() : ""; + if (result.length > 0) { + return result; + } + const output = typeof record2.output === "string" ? record2.output.trim() : ""; + return output.length > 0 ? output : null; +} +function extractTextFromContentBlocks(content) { + if (!Array.isArray(content)) { + return null; + } + const firstTextBlock = content.find((block) => block && typeof block === "object" && block.type === "text" && typeof block.text === "string"); + if (!firstTextBlock || typeof firstTextBlock.text !== "string") { + return null; + } + const text = firstTextBlock.text.trim(); + return text.length > 0 ? text : null; +} +var ClaudeTaskResultInterpreter = class { + hasAsyncLaunchMarker(toolUseResult) { + var _a5; + if (!toolUseResult || typeof toolUseResult !== "object") { + return false; + } + const record2 = toolUseResult; + if (record2.isAsync === true) { + return true; + } + const rawStatus = (_a5 = record2.retrieval_status) != null ? _a5 : record2.status; + if (typeof rawStatus === "string" && rawStatus.toLowerCase() === "async_launched") { + return true; + } + return typeof record2.outputFile === "string" && record2.outputFile.length > 0; + } + extractAgentId(toolUseResult) { + const directId = extractAgentIdFromToolUseResult(toolUseResult); + if (directId) { + return directId; + } + if (!toolUseResult || typeof toolUseResult !== "object") { + return null; + } + const record2 = toolUseResult; + if (Array.isArray(record2.content)) { + for (const block of record2.content) { + if (typeof block === "string") { + const extracted2 = extractAgentIdFromString(block); + if (extracted2) { + return extracted2; + } + continue; + } + if (!block || typeof block !== "object") { + continue; + } + const text = block.text; + if (typeof text !== "string") { + continue; + } + const extracted = extractAgentIdFromString(text); + if (extracted) { + return extracted; + } + } + } + if (typeof record2.content === "string") { + return extractAgentIdFromString(record2.content); + } + return null; + } + extractStructuredResult(toolUseResult) { + if (!toolUseResult || typeof toolUseResult !== "object") { + return null; + } + const record2 = toolUseResult; + if (record2.retrieval_status === "error") { + const errorMsg = typeof record2.error === "string" ? record2.error : "Task retrieval failed"; + return `Error: ${errorMsg}`; + } + const taskResult = extractResultFromTaskObject(record2.task); + if (taskResult) { + return taskResult; + } + const result = typeof record2.result === "string" ? record2.result.trim() : ""; + if (result.length > 0) { + return result; + } + const output = typeof record2.output === "string" ? record2.output.trim() : ""; + if (output.length > 0) { + return output; + } + return extractTextFromContentBlocks(record2.content); + } + resolveTerminalStatus(toolUseResult, fallbackStatus) { + const resolved = resolveToolUseResultStatus(toolUseResult, fallbackStatus); + if (resolved === "error") { + return "error"; + } + if (resolved === "completed") { + return "completed"; + } + return fallbackStatus; + } + extractTagValue(payload, tagName) { + return extractXmlTag(payload, tagName); + } +}; + +// src/providers/claude/registration.ts +var claudeProviderRegistration = { + displayName: "Claude", + blankTabOrder: 20, + isEnabled: () => true, + capabilities: CLAUDE_PROVIDER_CAPABILITIES, + environmentKeyPatterns: [/^ANTHROPIC_/i, /^CLAUDE_/i], + chatUIConfig: claudeChatUIConfig, + settingsReconciler: claudeSettingsReconciler, + createRuntime: ({ plugin }) => { + const workspace = getClaudeWorkspaceServices(); + const resolvedMcpManager = workspace == null ? void 0 : workspace.mcpManager; + if (!resolvedMcpManager) { + throw new Error("Claude workspace services are not initialized."); + } + return new ClaudianService(plugin, { + mcpManager: resolvedMcpManager, + pluginManager: workspace == null ? void 0 : workspace.pluginManager, + agentManager: workspace == null ? void 0 : workspace.agentManager + }); + }, + createTitleGenerationService: (plugin) => new TitleGenerationService(plugin), + createInstructionRefineService: (plugin) => new InstructionRefineService(plugin), + createInlineEditService: (plugin) => new InlineEditService(plugin), + historyService: new ClaudeConversationHistoryService(), + taskResultInterpreter: new ClaudeTaskResultInterpreter() +}; + +// src/providers/codex/app/CodexWorkspaceServices.ts +init_path(); + +// src/providers/codex/agents/CodexAgentMentionProvider.ts +var CodexAgentMentionProvider = class { + constructor(storage) { + this.storage = storage; + this.agents = []; + } + async loadAgents() { + this.agents = await this.storage.loadAll(); + } + searchAgents(query) { + const q = query.toLowerCase(); + return this.agents.filter( + (a) => a.name.toLowerCase().includes(q) || a.description.toLowerCase().includes(q) + ).map((a) => ({ + id: a.name, + name: a.name, + description: a.description, + source: "vault" + })); + } +}; + +// src/providers/codex/runtime/CodexAppServerProcess.ts +var import_child_process7 = require("child_process"); +var SIGKILL_TIMEOUT_MS = 3e3; +var CodexAppServerProcess = class { + constructor(launchSpec) { + this.launchSpec = launchSpec; + this.proc = null; + this.alive = false; + this.exitCallbacks = []; + this.resolvedSpawnSpec = null; + } + start() { + const resolvedSpawnSpec = resolveWindowsCmdShimSpawnSpec(this.launchSpec); + this.resolvedSpawnSpec = resolvedSpawnSpec; + this.proc = (0, import_child_process7.spawn)(resolvedSpawnSpec.command, resolvedSpawnSpec.args, { + stdio: ["pipe", "pipe", "pipe"], + cwd: this.launchSpec.spawnCwd, + env: this.launchSpec.env, + windowsHide: true, + ...resolvedSpawnSpec.windowsVerbatimArguments ? { windowsVerbatimArguments: true } : {} + }); + this.alive = true; + this.proc.on("exit", (code, signal) => { + this.alive = false; + for (const cb2 of this.exitCallbacks) { + cb2(code, signal); + } + }); + this.proc.on("error", () => { + this.alive = false; + }); + } + get stdin() { + var _a5; + if (!((_a5 = this.proc) == null ? void 0 : _a5.stdin)) throw new Error("Process not started"); + return this.proc.stdin; + } + get stdout() { + var _a5; + if (!((_a5 = this.proc) == null ? void 0 : _a5.stdout)) throw new Error("Process not started"); + return this.proc.stdout; + } + get stderr() { + var _a5; + if (!((_a5 = this.proc) == null ? void 0 : _a5.stderr)) throw new Error("Process not started"); + return this.proc.stderr; + } + isAlive() { + return this.alive; + } + onExit(callback) { + this.exitCallbacks.push(callback); + } + offExit(callback) { + const idx = this.exitCallbacks.indexOf(callback); + if (idx !== -1) this.exitCallbacks.splice(idx, 1); + } + async shutdown() { + if (!this.proc || !this.alive) return; + return new Promise((resolve8) => { + const onExit = () => { + window.clearTimeout(killTimer); + resolve8(); + }; + this.proc.once("exit", onExit); + this.killProc("SIGTERM"); + const killTimer = window.setTimeout(() => { + if (this.alive) { + this.killProc("SIGKILL"); + } + }, SIGKILL_TIMEOUT_MS); + }); + } + killProc(signal) { + if (!this.proc) { + return false; + } + return terminateSpawnedProcess(this.proc, signal, import_child_process7.spawn, this.resolvedSpawnSpec); + } +}; + +// src/providers/codex/runtime/codexAppServerSupport.ts +init_env(); +init_path(); + +// src/providers/codex/runtime/CodexExecutionTargetResolver.ts +var import_child_process8 = require("child_process"); +function resolveHostPlatformOs(hostPlatform) { + if (hostPlatform === "win32") { + return "windows"; + } + if (hostPlatform === "darwin") { + return "macos"; + } + return "linux"; +} +function resolveHostPlatformFamily(hostPlatform) { + return hostPlatform === "win32" ? "windows" : "unix"; +} +function inferWslDistroFromWindowsPath(hostPath) { + if (!hostPath) { + return void 0; + } + const normalized = hostPath.replace(/\//g, "\\"); + const match = normalized.match(/^\\\\wsl\$\\([^\\]+)(?:\\|$)/i); + return (match == null ? void 0 : match[1]) || void 0; +} +function parseDefaultWslDistroListOutput(output) { + var _a5; + for (const line of output.replace(/\uFEFF/g, "").split(/\r?\n/)) { + const trimmed = line.trimStart(); + if (!trimmed.startsWith("*")) { + continue; + } + const candidate = (_a5 = trimmed.slice(1).trimStart().split(/\s{2,}/)[0]) == null ? void 0 : _a5.trim(); + if (candidate) { + return candidate; + } + } + return void 0; +} +function resolveDefaultWslDistroName() { + try { + const output = (0, import_child_process8.execFileSync)("wsl.exe", ["--list", "--verbose"], { + encoding: "utf8", + stdio: ["ignore", "pipe", "ignore"], + windowsHide: true + }); + return parseDefaultWslDistroListOutput(output); + } catch (e2) { + return void 0; + } +} +function resolveCodexExecutionTarget(options) { + var _a5, _b3; + const hostPlatform = (_a5 = options.hostPlatform) != null ? _a5 : process.platform; + if (hostPlatform !== "win32") { + return { + method: "host-native", + platformFamily: resolveHostPlatformFamily(hostPlatform), + platformOs: resolveHostPlatformOs(hostPlatform) + }; + } + const codexSettings = getCodexProviderSettings(options.settings); + if (codexSettings.installationMethod === "wsl") { + const distroName = codexSettings.wslDistroOverride || inferWslDistroFromWindowsPath(options.hostVaultPath) || ((_b3 = options.resolveDefaultWslDistro) == null ? void 0 : _b3.call(options)) || resolveDefaultWslDistroName(); + return { + method: "wsl", + platformFamily: "unix", + platformOs: "linux", + distroName + }; + } + return { + method: "native-windows", + platformFamily: "windows", + platformOs: "windows" + }; +} + +// src/providers/codex/runtime/CodexPathMapper.ts +var path10 = __toESM(require("path")); +function normalizeWindowsPath(value) { + if (!value) { + return ""; + } + let normalized = value.replace(/\//g, "\\"); + if (normalized.startsWith("\\\\?\\UNC\\")) { + normalized = `\\\\${normalized.slice("\\\\?\\UNC\\".length)}`; + } else if (normalized.startsWith("\\\\?\\")) { + normalized = normalized.slice("\\\\?\\".length); + } + return path10.win32.normalize(normalized); +} +function normalizePosixPath(value) { + if (!value) { + return ""; + } + const normalized = path10.posix.normalize(value.replace(/\\/g, "/")); + return normalized === "/" ? normalized : normalized.replace(/\/+$/, ""); +} +function maybeMapWindowsDriveToWsl(hostPath) { + var _a5; + const normalized = normalizeWindowsPath(hostPath); + const match = normalized.match(/^([A-Za-z]):(?:\\(.*))?$/); + if (!match) { + return null; + } + const drive = match[1].toLowerCase(); + const tail = ((_a5 = match[2]) != null ? _a5 : "").replace(/\\/g, "/"); + return tail ? `/mnt/${drive}/${tail}` : `/mnt/${drive}`; +} +function maybeMapWslUncToLinux(hostPath, distroName) { + const normalized = normalizeWindowsPath(hostPath); + const match = normalized.match(/^\\\\wsl\$\\([^\\]+)(?:\\(.*))?$/i); + if (!match) { + return null; + } + const uncDistro = match[1]; + if (distroName && uncDistro.toLowerCase() !== distroName.toLowerCase()) { + return null; + } + const tail = match[2] ? match[2].replace(/\\/g, "/") : ""; + return tail ? `/${tail}` : "/"; +} +function maybeMapLinuxToWindowsDrive(targetPath) { + const normalized = normalizePosixPath(targetPath); + const match = normalized.match(/^\/mnt\/([a-zA-Z])(?:\/(.*))?$/); + if (!match) { + return null; + } + const drive = match[1].toUpperCase(); + const tail = match[2] ? match[2].replace(/\//g, "\\") : ""; + return tail ? `${drive}:\\${tail}` : `${drive}:\\`; +} +function maybeMapLinuxToWslUnc(targetPath, distroName) { + if (!distroName) { + return null; + } + const normalized = normalizePosixPath(targetPath); + if (!normalized.startsWith("/")) { + return null; + } + const tail = normalized === "/" ? "" : normalized.slice(1).replace(/\//g, "\\"); + return tail ? `\\\\wsl$\\${distroName}\\${tail}` : `\\\\wsl$\\${distroName}`; +} +function createIdentityMapper(target) { + const toTargetPath = (hostPath) => { + if (!hostPath) { + return null; + } + return target.platformFamily === "windows" ? normalizeWindowsPath(hostPath) : normalizePosixPath(hostPath); + }; + const toHostPath = (targetPath) => { + if (!targetPath) { + return null; + } + return target.platformFamily === "windows" ? normalizeWindowsPath(targetPath) : normalizePosixPath(targetPath); + }; + return { + target, + toTargetPath, + toHostPath, + mapTargetPathList(hostPaths) { + return hostPaths.map(toTargetPath).filter((value) => typeof value === "string" && value.length > 0); + }, + canRepresentHostPath(hostPath) { + return toTargetPath(hostPath) !== null; + } + }; +} +function createWslPathMapper(target) { + const toTargetPath = (hostPath) => { + var _a5; + if (!hostPath) { + return null; + } + return (_a5 = maybeMapWslUncToLinux(hostPath, target.distroName)) != null ? _a5 : maybeMapWindowsDriveToWsl(hostPath); + }; + const toHostPath = (targetPath) => { + var _a5; + if (!targetPath) { + return null; + } + return (_a5 = maybeMapLinuxToWindowsDrive(targetPath)) != null ? _a5 : maybeMapLinuxToWslUnc(targetPath, target.distroName); + }; + return { + target, + toTargetPath, + toHostPath, + mapTargetPathList(hostPaths) { + return hostPaths.map(toTargetPath).filter((value) => typeof value === "string" && value.length > 0); + }, + canRepresentHostPath(hostPath) { + return toTargetPath(hostPath) !== null; + } + }; +} +function createCodexPathMapper(target) { + return target.method === "wsl" ? createWslPathMapper(target) : createIdentityMapper(target); +} + +// src/providers/codex/runtime/CodexLaunchSpecBuilder.ts +var CODEX_APP_SERVER_ARGS = Object.freeze(["app-server", "--listen", "stdio://"]); +function buildCodexLaunchSpec(options) { + var _a5, _b3; + const target = resolveCodexExecutionTarget({ + settings: options.settings, + hostPlatform: options.hostPlatform, + hostVaultPath: options.hostVaultPath, + resolveDefaultWslDistro: options.resolveDefaultWslDistro + }); + const pathMapper = createCodexPathMapper(target); + const spawnCwd = (_a5 = options.hostVaultPath) != null ? _a5 : process.cwd(); + const workspaceDistro = inferWslDistroFromWindowsPath(options.hostVaultPath); + if (target.method === "wsl" && target.distroName && workspaceDistro && target.distroName.toLowerCase() !== workspaceDistro.toLowerCase()) { + throw new Error( + `WSL distro override "${target.distroName}" does not match workspace distro "${workspaceDistro}"` + ); + } + if (target.method === "wsl" && !target.distroName) { + throw new Error( + "Unable to determine the WSL distro. Set WSL distro override or configure a default WSL distro." + ); + } + const targetCwd = pathMapper.toTargetPath(spawnCwd); + if (!targetCwd) { + throw new Error("WSL mode only supports Windows drive paths and \\\\wsl$ workspace paths"); + } + const resolvedCliCommand = ((_b3 = options.resolvedCliCommand) == null ? void 0 : _b3.trim()) || "codex"; + if (target.method === "wsl") { + const args = [ + ...target.distroName ? ["--distribution", target.distroName] : [], + "--cd", + targetCwd, + resolvedCliCommand, + ...CODEX_APP_SERVER_ARGS + ]; + return { + target, + command: "wsl.exe", + args, + spawnCwd, + targetCwd, + env: options.env, + pathMapper + }; + } + return { + target, + command: resolvedCliCommand, + args: [...CODEX_APP_SERVER_ARGS], + spawnCwd, + targetCwd, + env: options.env, + pathMapper + }; +} + +// src/providers/codex/runtime/codexAppServerSupport.ts +var CODEX_APP_SERVER_CLIENT_INFO = Object.freeze({ + name: "claudian", + version: "1.0.0" +}); +function getCodexAppServerWorkingDirectory(plugin) { + var _a5; + return (_a5 = getVaultPath(plugin.app)) != null ? _a5 : process.cwd(); +} +function buildCodexAppServerEnvironment(plugin, providerId = "codex") { + const customEnv = parseEnvironmentVariables(plugin.getActiveEnvironmentVariables(providerId)); + const baseEnv = Object.fromEntries( + Object.entries(process.env).filter((entry) => entry[1] !== void 0) + ); + const enhancedPath = getEnhancedPath(customEnv.PATH); + return { + ...baseEnv, + ...customEnv, + PATH: enhancedPath + }; +} +function resolveCodexAppServerLaunchSpec(plugin, providerId = "codex") { + return buildCodexLaunchSpec({ + settings: plugin.settings, + resolvedCliCommand: plugin.getResolvedProviderCliPath(providerId), + hostVaultPath: getCodexAppServerWorkingDirectory(plugin), + env: buildCodexAppServerEnvironment(plugin, providerId) + }); +} +async function initializeCodexAppServerTransport(transport) { + const result = await transport.request("initialize", { + clientInfo: CODEX_APP_SERVER_CLIENT_INFO, + capabilities: { experimentalApi: true } + }); + transport.notify("initialized"); + return result; +} + +// src/providers/codex/runtime/CodexRpcTransport.ts +var import_readline3 = require("readline"); +var DEFAULT_TIMEOUT_MS = 3e4; +var CodexRpcTransport = class { + constructor(proc) { + this.proc = proc; + this.nextId = 1; + this.pending = /* @__PURE__ */ new Map(); + this.notificationHandlers = /* @__PURE__ */ new Map(); + this.serverRequestHandlers = /* @__PURE__ */ new Map(); + this.disposed = false; + } + start() { + const rl2 = (0, import_readline3.createInterface)({ input: this.proc.stdout }); + rl2.on("line", (line) => this.handleLine(line)); + this.proc.onExit(() => { + this.rejectAllPending(new Error("App-server process exited")); + }); + } + request(method, params, timeoutMs = DEFAULT_TIMEOUT_MS) { + const id = this.nextId++; + const msg = { jsonrpc: "2.0", id, method, params }; + return new Promise((resolve8, reject) => { + const timer = timeoutMs > 0 ? window.setTimeout(() => { + this.pending.delete(id); + reject(new Error(`Request timeout: ${method} (${timeoutMs}ms)`)); + }, timeoutMs) : null; + const resolvePending = (result) => { + resolve8(result); + }; + this.pending.set(id, { + resolve: resolvePending, + reject, + timer + }); + this.sendRaw(msg); + }); + } + notify(method, params) { + const msg = { jsonrpc: "2.0", method }; + if (params !== void 0) msg.params = params; + this.sendRaw(msg); + } + onNotification(method, handler) { + this.notificationHandlers.set(method, handler); + } + onServerRequest(method, handler) { + this.serverRequestHandlers.set(method, handler); + } + dispose() { + this.disposed = true; + this.rejectAllPending(new Error("Transport disposed")); + } + // ----------------------------------------------------------------------- + // Private + // ----------------------------------------------------------------------- + sendRaw(msg) { + if (this.disposed) return; + this.proc.stdin.write(JSON.stringify(msg) + "\n"); + } + handleLine(line) { + let msg; + try { + msg = JSON.parse(line); + } catch (e2) { + return; + } + const id = msg.id; + const method = msg.method; + if (typeof id === "number" && !method) { + this.handleResponse(id, msg); + return; + } + if (method && id === void 0) { + this.handleNotification(method, msg.params); + return; + } + if (method && id !== void 0) { + this.handleServerRequest(id, method, msg.params); + return; + } + } + handleResponse(id, msg) { + const pending = this.pending.get(id); + if (!pending) return; + this.pending.delete(id); + if (pending.timer) window.clearTimeout(pending.timer); + if (msg.error) { + const err = msg.error; + pending.reject(new Error(err.message)); + } else { + pending.resolve(msg.result); + } + } + handleNotification(method, params) { + const handler = this.notificationHandlers.get(method); + if (handler) handler(params); + } + handleServerRequest(id, method, params) { + const handler = this.serverRequestHandlers.get(method); + if (!handler) { + this.sendRaw({ + jsonrpc: "2.0", + id, + error: { code: -32601, message: `Unhandled server request: ${method}` } + }); + return; + } + handler(id, params).then( + (result) => { + this.sendRaw({ jsonrpc: "2.0", id, result }); + }, + (err) => { + this.sendRaw({ + jsonrpc: "2.0", + id, + error: { code: -32603, message: err instanceof Error ? err.message : "Internal error" } + }); + } + ); + } + rejectAllPending(error48) { + for (const [, pending] of this.pending) { + if (pending.timer) window.clearTimeout(pending.timer); + pending.reject(error48); + } + this.pending.clear(); + } +}; + +// src/providers/codex/runtime/CodexRuntimeContext.ts +var path11 = __toESM(require("path")); +function normalizeTargetPath(launchSpec, value) { + return launchSpec.target.platformFamily === "windows" ? path11.win32.normalize(value) : path11.posix.normalize(value.replace(/\\/g, "/")); +} +function joinTargetPath(launchSpec, ...parts) { + return launchSpec.target.platformFamily === "windows" ? path11.win32.join(...parts) : path11.posix.join(...parts.map((part) => part.replace(/\\/g, "/"))); +} +function normalizeOptionalTargetPath(launchSpec, value) { + const trimmed = typeof value === "string" ? value.trim() : ""; + return trimmed ? normalizeTargetPath(launchSpec, trimmed) : null; +} +function resolveFallbackCodexHomeTarget(launchSpec) { + const rawCodexHome = typeof launchSpec.env.CODEX_HOME === "string" ? launchSpec.env.CODEX_HOME.trim() : ""; + const envCodexHome = launchSpec.target.method === "wsl" ? normalizeOptionalTargetPath( + launchSpec, + rawCodexHome.startsWith("/") ? rawCodexHome : launchSpec.pathMapper.toTargetPath(rawCodexHome) + ) : normalizeOptionalTargetPath(launchSpec, rawCodexHome); + if (envCodexHome) { + return envCodexHome; + } + if (launchSpec.target.method === "wsl") { + return null; + } + const homeVar = launchSpec.target.platformFamily === "windows" ? launchSpec.env.USERPROFILE : launchSpec.env.HOME; + const homeDir = normalizeOptionalTargetPath(launchSpec, homeVar); + return homeDir ? joinTargetPath(launchSpec, homeDir, ".codex") : null; +} +function resolveCodexHomeTarget(launchSpec, initializeResult) { + var _a5; + return (_a5 = normalizeOptionalTargetPath(launchSpec, initializeResult.codexHome)) != null ? _a5 : resolveFallbackCodexHomeTarget(launchSpec); +} +function validateInitializeTarget(launchSpec, initializeResult) { + if (initializeResult.platformOs !== launchSpec.target.platformOs) { + throw new Error( + `Codex target mismatch: expected ${launchSpec.target.platformOs}, received ${initializeResult.platformOs}` + ); + } + if (initializeResult.platformFamily !== launchSpec.target.platformFamily) { + throw new Error( + `Codex target mismatch: expected ${launchSpec.target.platformFamily}, received ${initializeResult.platformFamily}` + ); + } +} +function createCodexRuntimeContext(launchSpec, initializeResult) { + validateInitializeTarget(launchSpec, initializeResult); + const codexHomeTarget = resolveCodexHomeTarget(launchSpec, initializeResult); + const sessionsDirTarget = codexHomeTarget ? joinTargetPath(launchSpec, codexHomeTarget, "sessions") : null; + const memoriesDirTarget = codexHomeTarget ? joinTargetPath(launchSpec, codexHomeTarget, "memories") : null; + return { + launchSpec, + initializeResult, + codexHomeTarget, + codexHomeHost: codexHomeTarget ? launchSpec.pathMapper.toHostPath(codexHomeTarget) : null, + sessionsDirTarget, + sessionsDirHost: sessionsDirTarget ? launchSpec.pathMapper.toHostPath(sessionsDirTarget) : null, + memoriesDirTarget + }; +} + +// src/providers/codex/skills/CodexSkillListingService.ts +var DEFAULT_SKILL_LIST_TTL_MS = 5e3; +var SKILL_SCOPE_PRIORITY = { + repo: 0, + user: 1, + system: 2, + admin: 3 +}; +function compareCodexSkillPriority(left, right) { + const scopeDelta = SKILL_SCOPE_PRIORITY[left.scope] - SKILL_SCOPE_PRIORITY[right.scope]; + if (scopeDelta !== 0) { + return scopeDelta; + } + const nameDelta = left.name.localeCompare(right.name); + if (nameDelta !== 0) { + return nameDelta; + } + return left.path.localeCompare(right.path); +} +function extractExplicitCodexSkillNames(text) { + const matches = text.matchAll(/(^|\s)\$([A-Za-z0-9_-]+)/g); + const names = []; + const seen = /* @__PURE__ */ new Set(); + for (const match of matches) { + const name = match[2]; + if (!name) { + continue; + } + const normalized = name.toLowerCase(); + if (seen.has(normalized)) { + continue; + } + seen.add(normalized); + names.push(name); + } + return names; +} +function getCodexSkillDescription(skill) { + var _a5, _b3, _c2, _d; + return (_d = (_c2 = (_b3 = (_a5 = skill.interface) == null ? void 0 : _a5.shortDescription) != null ? _b3 : skill.shortDescription) != null ? _c2 : skill.description) != null ? _d : void 0; +} +function findPreferredCodexSkillByName(skills, name) { + var _a5; + const normalized = name.toLowerCase(); + const candidates = skills.filter((skill) => skill.enabled && skill.name.toLowerCase() === normalized).sort(compareCodexSkillPriority); + return (_a5 = candidates[0]) != null ? _a5 : null; +} +var CodexSkillListingService = class { + constructor(plugin, options = {}) { + this.plugin = plugin; + this.cache = null; + this.cacheExpiresAt = 0; + this.pending = null; + var _a5, _b3; + this.ttlMs = (_a5 = options.ttlMs) != null ? _a5 : DEFAULT_SKILL_LIST_TTL_MS; + this.now = (_b3 = options.now) != null ? _b3 : (() => Date.now()); + } + async listSkills(options) { + if (options == null ? void 0 : options.forceReload) { + const skills = await this.fetchSkills(true); + this.storeCache(skills); + return skills; + } + if (this.cache && this.now() < this.cacheExpiresAt) { + return this.cache; + } + if (this.pending) { + return this.pending; + } + this.pending = this.fetchSkills(false).then((skills) => { + this.storeCache(skills); + return skills; + }).finally(() => { + this.pending = null; + }); + return this.pending; + } + invalidate() { + this.cache = null; + this.cacheExpiresAt = 0; + } + async fetchSkills(forceReload) { + var _a5, _b3; + const launchSpec = resolveCodexAppServerLaunchSpec(this.plugin, "codex"); + const process4 = new CodexAppServerProcess(launchSpec); + process4.start(); + const transport = new CodexRpcTransport(process4); + transport.start(); + try { + const initializeResult = await initializeCodexAppServerTransport(transport); + createCodexRuntimeContext(launchSpec, initializeResult); + const result = await transport.request("skills/list", { + cwds: [launchSpec.targetCwd], + ...forceReload ? { forceReload: true } : {} + }); + const entry = (_a5 = result.data.find((candidate) => candidate.cwd === launchSpec.targetCwd)) != null ? _a5 : result.data[0]; + return ((_b3 = entry == null ? void 0 : entry.skills) != null ? _b3 : []).map((skill) => { + var _a6; + return { + ...skill, + path: (_a6 = launchSpec.pathMapper.toHostPath(skill.path)) != null ? _a6 : skill.path + }; + }); + } finally { + transport.dispose(); + await process4.shutdown(); + } + } + storeCache(skills) { + this.cache = skills; + this.cacheExpiresAt = this.now() + this.ttlMs; + } +}; + +// src/providers/codex/storage/CodexSkillStorage.ts +var path12 = __toESM(require("path")); +var CODEX_VAULT_SKILLS_PATH = ".codex/skills"; +var AGENTS_VAULT_SKILLS_PATH = ".agents/skills"; +var CODEX_SKILL_ROOT_OPTIONS = [ + { id: "vault-codex", label: CODEX_VAULT_SKILLS_PATH }, + { id: "vault-agents", label: AGENTS_VAULT_SKILLS_PATH } +]; +var ROOT_PATH_BY_ID = { + "vault-codex": CODEX_VAULT_SKILLS_PATH, + "vault-agents": AGENTS_VAULT_SKILLS_PATH +}; +var ROOT_ID_BY_PATH = new Map( + Object.entries(ROOT_PATH_BY_ID).map(([rootId, rootPath]) => [rootPath, rootId]) +); +var ALL_SCAN_ROOTS = ["vault-codex", "vault-agents"]; +var SKILL_PERSISTENCE_PREFIX = "codex-skill"; +function createCodexSkillPersistenceKey(state) { + const parts = [SKILL_PERSISTENCE_PREFIX, state.rootId]; + if (state.currentName) { + parts.push(encodeURIComponent(state.currentName)); + } + return parts.join(":"); +} +function parseCodexSkillPersistenceKey(persistenceKey) { + if (!persistenceKey) { + return null; + } + const legacyRootId = ROOT_ID_BY_PATH.get(persistenceKey); + if (legacyRootId) { + return { rootId: legacyRootId }; + } + const [prefix, rootId, encodedName] = persistenceKey.split(":"); + if (prefix !== SKILL_PERSISTENCE_PREFIX) { + return null; + } + if (rootId !== "vault-codex" && rootId !== "vault-agents") { + return null; + } + return { + rootId, + ...encodedName ? { currentName: decodeURIComponent(encodedName) } : {} + }; +} +function resolveCodexSkillLocationFromPath(skillPath, vaultPath) { + const usesWindowsPathSemantics = /^[A-Za-z]:[\\/]/.test(skillPath) || /^[A-Za-z]:[\\/]/.test(vaultPath) || skillPath.startsWith("\\\\") || vaultPath.startsWith("\\\\"); + const pathApi = usesWindowsPathSemantics ? path12.win32 : path12.posix; + const normalizedSkillPath = pathApi.normalize(skillPath); + const normalizedVaultPath = pathApi.normalize(vaultPath); + for (const [rootId, rootPath] of Object.entries(ROOT_PATH_BY_ID)) { + const rootDir = pathApi.normalize(pathApi.join(normalizedVaultPath, rootPath)); + const relative4 = pathApi.relative(rootDir, normalizedSkillPath); + if (!relative4 || relative4.startsWith(`..${pathApi.sep}`) || relative4 === "..") { + continue; + } + const parts = relative4.split(pathApi.sep); + if (parts.length !== 2 || parts[1] !== "SKILL.md" || !parts[0]) { + continue; + } + return { + name: parts[0], + rootId + }; + } + return null; +} +var CodexSkillStorage = class { + constructor(vaultAdapter, homeAdapter) { + this.vaultAdapter = vaultAdapter; + this.homeAdapter = homeAdapter; + } + async scanAll() { + const vaultSkills = await this.scanRoots(this.vaultAdapter, ALL_SCAN_ROOTS, "vault"); + const homeSkills = this.homeAdapter ? await this.scanRoots(this.homeAdapter, ALL_SCAN_ROOTS, "home") : []; + const seen = new Set(vaultSkills.map((s2) => s2.name.toLowerCase())); + const deduped = homeSkills.filter((s2) => !seen.has(s2.name.toLowerCase())); + return [...vaultSkills, ...deduped]; + } + async scanVault() { + return this.scanRoots(this.vaultAdapter, ALL_SCAN_ROOTS, "vault"); + } + async save(input) { + var _a5; + const targetRootId = (_a5 = input.rootId) != null ? _a5 : "vault-codex"; + const targetLocation = { rootId: targetRootId, name: input.name }; + const { dirPath, filePath } = this.buildLocationPaths(targetLocation); + const previousLocation = input.previousLocation; + await this.vaultAdapter.ensureFolder(dirPath); + const markdown = serializeSlashCommandMarkdown( + { name: input.name, description: input.description }, + input.content + ); + await this.vaultAdapter.write(filePath, markdown); + if (previousLocation && (previousLocation.rootId !== targetRootId || previousLocation.name !== input.name)) { + await this.delete(previousLocation); + } + } + async delete(location) { + const { dirPath, filePath } = this.buildLocationPaths(location); + await this.vaultAdapter.delete(filePath); + await this.vaultAdapter.deleteFolder(dirPath); + } + async load(location) { + const { filePath } = this.buildLocationPaths(location); + try { + const content = await this.vaultAdapter.read(filePath); + const parsed = parseSlashCommandContent(content); + return { + name: location.name, + description: parsed.description, + content: parsed.promptContent, + provenance: "vault", + rootId: location.rootId + }; + } catch (e2) { + return null; + } + } + async scanRoots(adapter, roots, provenance) { + const results = []; + for (const rootId of roots) { + const rootPath = ROOT_PATH_BY_ID[rootId]; + try { + const folders = await adapter.listFolders(rootPath); + for (const folder of folders) { + const skillName = folder.split("/").pop(); + const skillPath = `${rootPath}/${skillName}/SKILL.md`; + try { + const content = await adapter.read(skillPath); + const parsed = parseSlashCommandContent(content); + results.push({ + name: skillName, + description: parsed.description, + content: parsed.promptContent, + provenance, + rootId + }); + } catch (e2) { + } + } + } catch (e2) { + } + } + return results; + } + buildLocationPaths(location) { + const rootPath = ROOT_PATH_BY_ID[location.rootId]; + const dirPath = `${rootPath}/${location.name}`; + return { + dirPath, + filePath: `${dirPath}/SKILL.md` + }; + } +}; + +// src/providers/codex/commands/CodexSkillCatalog.ts +var CODEX_SKILL_ID_PREFIX = "codex-skill-"; +var CODEX_COMPACT_COMMAND = { + id: "codex-builtin-compact", + providerId: "codex", + kind: "command", + name: "compact", + description: "Compact conversation history", + content: "", + scope: "system", + source: "builtin", + isEditable: false, + isDeletable: false, + displayPrefix: "/", + insertPrefix: "/" +}; +function buildSkillId(skill, location) { + if (location) { + return `${CODEX_SKILL_ID_PREFIX}${location.rootId}-${location.name}`; + } + const encodedPath = encodeURIComponent(skill.path); + return `${CODEX_SKILL_ID_PREFIX}${skill.scope}-${encodedPath}`; +} +function listedSkillToProviderEntry(skill, vaultPath) { + const location = vaultPath ? resolveCodexSkillLocationFromPath(skill.path, vaultPath) : null; + const isVault = skill.scope === "repo" && location !== null; + return { + id: buildSkillId(skill, isVault ? location : null), + providerId: "codex", + kind: "skill", + name: skill.name, + description: getCodexSkillDescription(skill), + content: "", + scope: isVault ? "vault" : "user", + source: "user", + isEditable: isVault, + isDeletable: isVault, + displayPrefix: "$", + insertPrefix: "$", + ...isVault ? { + persistenceKey: createCodexSkillPersistenceKey({ + rootId: location.rootId, + currentName: location.name + }) + } : {} + }; +} +var CodexSkillCatalog = class { + constructor(storage, listProvider, vaultPath) { + this.storage = storage; + this.listProvider = listProvider; + this.vaultPath = vaultPath; + } + setRuntimeCommands(_commands) { + } + async listDropdownEntries(context) { + const skills = (await this.listProvider.listSkills()).filter((skill) => skill.enabled).sort(compareCodexSkillPriority); + const entries = skills.map((skill) => listedSkillToProviderEntry(skill, this.vaultPath)); + return context.includeBuiltIns ? [CODEX_COMPACT_COMMAND, ...entries] : entries; + } + async listVaultEntries() { + var _a5; + if (!this.vaultPath) { + return []; + } + const listedSkills = (await this.listProvider.listSkills()).filter((skill) => skill.scope === "repo").sort(compareCodexSkillPriority); + const entries = []; + for (const listedSkill of listedSkills) { + const location = resolveCodexSkillLocationFromPath(listedSkill.path, this.vaultPath); + if (!location) { + continue; + } + const storedSkill = await this.storage.load(location); + if (!storedSkill) { + continue; + } + entries.push({ + id: `${CODEX_SKILL_ID_PREFIX}${location.rootId}-${storedSkill.name}`, + providerId: "codex", + kind: "skill", + name: storedSkill.name, + description: (_a5 = storedSkill.description) != null ? _a5 : getCodexSkillDescription(listedSkill), + content: storedSkill.content, + scope: "vault", + source: "user", + isEditable: true, + isDeletable: true, + displayPrefix: "$", + insertPrefix: "$", + persistenceKey: createCodexSkillPersistenceKey({ + rootId: location.rootId, + currentName: location.name + }) + }); + } + return entries; + } + async saveVaultEntry(entry) { + const persistenceState = parseCodexSkillPersistenceKey(entry.persistenceKey); + await this.storage.save({ + name: entry.name, + description: entry.description, + content: entry.content, + rootId: persistenceState == null ? void 0 : persistenceState.rootId, + previousLocation: (persistenceState == null ? void 0 : persistenceState.currentName) ? { rootId: persistenceState.rootId, name: persistenceState.currentName } : void 0 + }); + this.listProvider.invalidate(); + } + async deleteVaultEntry(entry) { + var _a5, _b3; + const persistenceState = parseCodexSkillPersistenceKey(entry.persistenceKey); + await this.storage.delete({ + name: (_a5 = persistenceState == null ? void 0 : persistenceState.currentName) != null ? _a5 : entry.name, + rootId: (_b3 = persistenceState == null ? void 0 : persistenceState.rootId) != null ? _b3 : "vault-codex" + }); + this.listProvider.invalidate(); + } + getDropdownConfig() { + return { + providerId: "codex", + triggerChars: ["/", "$"], + builtInPrefix: "/", + skillPrefix: "$", + commandPrefix: "/" + }; + } + async refresh() { + this.listProvider.invalidate(); + await this.listProvider.listSkills({ forceReload: true }); + } +}; + +// src/providers/codex/runtime/CodexCliResolver.ts +init_env(); + +// src/utils/cliBinaryLocator.ts +var fs12 = __toESM(require("fs")); +var path13 = __toESM(require("path")); +init_env(); +init_path(); +function isExistingFile2(filePath) { + try { + return fs12.statSync(filePath).isFile(); + } catch (e2) { + return false; + } +} +function resolveConfiguredCliPath(configuredPath) { + const trimmed = (configuredPath != null ? configuredPath : "").trim(); + if (!trimmed) { + return null; + } + try { + const expandedPath = expandHomePath(trimmed); + return isExistingFile2(expandedPath) ? expandedPath : null; + } catch (e2) { + return null; + } +} +function findCliBinaryPath(binaryName, additionalPath, platform = process.platform) { + const binaryNames = platform === "win32" ? [`${binaryName}.exe`, `${binaryName}.cmd`, binaryName] : [binaryName]; + const searchEntries = platform === process.platform ? parsePathEntries(getEnhancedPath(additionalPath)) : parsePathEntriesForPlatform(additionalPath, platform); + for (const dir of searchEntries) { + if (!dir) continue; + for (const candidateName of binaryNames) { + const candidate = path13.join(dir, candidateName); + if (isExistingFile2(candidate)) { + return candidate; + } + } + } + return null; +} +function parsePathEntriesForPlatform(pathValue, platform) { + if (!pathValue) { + return []; + } + const delimiter = platform === "win32" ? ";" : ":"; + return pathValue.split(delimiter).map((segment) => stripSurroundingQuotes2(segment.trim())).filter((segment) => { + if (!segment) return false; + const upper = segment.toUpperCase(); + return upper !== "$PATH" && upper !== "${PATH}" && upper !== "%PATH%"; + }).map((segment) => translateMsysPathForPlatform(expandHomePath(segment), platform)); +} +function stripSurroundingQuotes2(value) { + if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) { + return value.slice(1, -1); + } + return value; +} +function translateMsysPathForPlatform(value, platform) { + var _a5; + if (platform !== "win32") { + return value; + } + const msysMatch = value.match(/^\/([a-zA-Z])(?:\/(.*))?$/); + if (!msysMatch) { + return value; + } + const driveLetter = msysMatch[1].toUpperCase(); + const restOfPath = (_a5 = msysMatch[2]) != null ? _a5 : ""; + return restOfPath ? `${driveLetter}:\\${restOfPath.replace(/\//g, "\\")}` : `${driveLetter}:`; +} + +// src/providers/codex/runtime/CodexBinaryLocator.ts +init_env(); +function isWindowsStyleCliReference(value) { + const trimmed = (value != null ? value : "").trim(); + if (!trimmed) { + return false; + } + return /^[A-Za-z]:[\\/]/.test(trimmed) || trimmed.startsWith("\\\\") || /\.(?:exe|cmd|bat|ps1)$/i.test(trimmed); +} +function findCodexBinaryPath(additionalPath, platform = process.platform) { + return findCliBinaryPath("codex", additionalPath, platform); +} +function resolveCodexCliPath(hostnamePath, legacyPath, envText, options = {}) { + var _a5; + const hostPlatform = (_a5 = options.hostPlatform) != null ? _a5 : process.platform; + if (hostPlatform === "win32" && options.installationMethod === "wsl") { + const configuredCommand = [hostnamePath, legacyPath].map((value) => (value != null ? value : "").trim()).find((value) => value.length > 0 && !isWindowsStyleCliReference(value)); + return configuredCommand || "codex"; + } + const configuredHostnamePath = resolveConfiguredCliPath(hostnamePath); + if (configuredHostnamePath) { + return configuredHostnamePath; + } + const configuredLegacyPath = resolveConfiguredCliPath(legacyPath); + if (configuredLegacyPath) { + return configuredLegacyPath; + } + const customEnv = parseEnvironmentVariables(envText || ""); + return findCodexBinaryPath(customEnv.PATH, hostPlatform); +} + +// src/providers/codex/runtime/CodexCliResolver.ts +var CodexCliResolver = class { + constructor() { + this.resolvedPath = null; + this.lastHostnamePath = ""; + this.lastLegacyPath = ""; + this.lastEnvText = ""; + this.lastInstallationMethod = ""; + this.cachedHostname = getHostnameKey(); + } + resolveFromSettings(settings11) { + var _a5; + const codexSettings = getCodexProviderSettings(settings11); + const hostnamePath = ((_a5 = codexSettings.cliPathsByHost[this.cachedHostname]) != null ? _a5 : "").trim(); + const legacyPath = codexSettings.cliPath.trim(); + const envText = getRuntimeEnvironmentText(settings11, "codex"); + const installationMethod = codexSettings.installationMethod; + if (this.resolvedPath && hostnamePath === this.lastHostnamePath && legacyPath === this.lastLegacyPath && envText === this.lastEnvText && installationMethod === this.lastInstallationMethod) { + return this.resolvedPath; + } + this.lastHostnamePath = hostnamePath; + this.lastLegacyPath = legacyPath; + this.lastEnvText = envText; + this.lastInstallationMethod = installationMethod; + this.resolvedPath = resolveCodexCliPath(hostnamePath, legacyPath, envText, { + installationMethod + }); + return this.resolvedPath; + } + resolve(hostnamePaths, legacyPath, envText, options = {}) { + var _a5; + const hostnamePath = ((_a5 = hostnamePaths == null ? void 0 : hostnamePaths[this.cachedHostname]) != null ? _a5 : "").trim(); + const normalizedLegacyPath = (legacyPath != null ? legacyPath : "").trim(); + return resolveCodexCliPath(hostnamePath, normalizedLegacyPath, envText, options); + } + reset() { + this.resolvedPath = null; + this.lastHostnamePath = ""; + this.lastLegacyPath = ""; + this.lastEnvText = ""; + this.lastInstallationMethod = ""; + } +}; + +// node_modules/smol-toml/dist/error.js +function getLineColFromPtr(string5, ptr) { + let lines = string5.slice(0, ptr).split(/\r\n|\n|\r/g); + return [lines.length, lines.pop().length + 1]; +} +function makeCodeBlock(string5, line, column) { + let lines = string5.split(/\r\n|\n|\r/g); + let codeblock = ""; + let numberLen = (Math.log10(line + 1) | 0) + 1; + for (let i = line - 1; i <= line + 1; i++) { + let l2 = lines[i - 1]; + if (!l2) + continue; + codeblock += i.toString().padEnd(numberLen, " "); + codeblock += ": "; + codeblock += l2; + codeblock += "\n"; + if (i === line) { + codeblock += " ".repeat(numberLen + column + 2); + codeblock += "^\n"; + } + } + return codeblock; +} +var TomlError = class extends Error { + constructor(message, options) { + const [line, column] = getLineColFromPtr(options.toml, options.ptr); + const codeblock = makeCodeBlock(options.toml, line, column); + super(`Invalid TOML document: ${message} + +${codeblock}`, options); + __publicField(this, "line"); + __publicField(this, "column"); + __publicField(this, "codeblock"); + this.line = line; + this.column = column; + this.codeblock = codeblock; + } +}; + +// node_modules/smol-toml/dist/util.js +function isEscaped(str, ptr) { + let i = 0; + while (str[ptr - ++i] === "\\") + ; + return --i && i % 2; +} +function indexOfNewline(str, start = 0, end = str.length) { + let idx = str.indexOf("\n", start); + if (str[idx - 1] === "\r") + idx--; + return idx <= end ? idx : -1; +} +function skipComment(str, ptr) { + for (let i = ptr; i < str.length; i++) { + let c = str[i]; + if (c === "\n") + return i; + if (c === "\r" && str[i + 1] === "\n") + return i + 1; + if (c < " " && c !== " " || c === "\x7F") { + throw new TomlError("control characters are not allowed in comments", { + toml: str, + ptr + }); + } + } + return str.length; +} +function skipVoid(str, ptr, banNewLines, banComments) { + let c; + while (1) { + while ((c = str[ptr]) === " " || c === " " || !banNewLines && (c === "\n" || c === "\r" && str[ptr + 1] === "\n")) + ptr++; + if (banComments || c !== "#") + break; + ptr = skipComment(str, ptr); + } + return ptr; +} +function skipUntil(str, ptr, sep2, end, banNewLines = false) { + if (!end) { + ptr = indexOfNewline(str, ptr); + return ptr < 0 ? str.length : ptr; + } + for (let i = ptr; i < str.length; i++) { + let c = str[i]; + if (c === "#") { + i = indexOfNewline(str, i); + } else if (c === sep2) { + return i + 1; + } else if (c === end || banNewLines && (c === "\n" || c === "\r" && str[i + 1] === "\n")) { + return i; + } + } + throw new TomlError("cannot find end of structure", { + toml: str, + ptr + }); +} +function getStringEnd(str, seek) { + let first = str[seek]; + let target = first === str[seek + 1] && str[seek + 1] === str[seek + 2] ? str.slice(seek, seek + 3) : first; + seek += target.length - 1; + do + seek = str.indexOf(target, ++seek); + while (seek > -1 && first !== "'" && isEscaped(str, seek)); + if (seek > -1) { + seek += target.length; + if (target.length > 1) { + if (str[seek] === first) + seek++; + if (str[seek] === first) + seek++; + } + } + return seek; +} + +// node_modules/smol-toml/dist/date.js +var DATE_TIME_RE = /^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i; +var _hasDate, _hasTime, _offset; +var _TomlDate = class _TomlDate extends Date { + constructor(date7) { + let hasDate = true; + let hasTime = true; + let offset = "Z"; + if (typeof date7 === "string") { + let match = date7.match(DATE_TIME_RE); + if (match) { + if (!match[1]) { + hasDate = false; + date7 = `0000-01-01T${date7}`; + } + hasTime = !!match[2]; + hasTime && date7[10] === " " && (date7 = date7.replace(" ", "T")); + if (match[2] && +match[2] > 23) { + date7 = ""; + } else { + offset = match[3] || null; + date7 = date7.toUpperCase(); + if (!offset && hasTime) + date7 += "Z"; + } + } else { + date7 = ""; + } + } + super(date7); + __privateAdd(this, _hasDate, false); + __privateAdd(this, _hasTime, false); + __privateAdd(this, _offset, null); + if (!isNaN(this.getTime())) { + __privateSet(this, _hasDate, hasDate); + __privateSet(this, _hasTime, hasTime); + __privateSet(this, _offset, offset); + } + } + isDateTime() { + return __privateGet(this, _hasDate) && __privateGet(this, _hasTime); + } + isLocal() { + return !__privateGet(this, _hasDate) || !__privateGet(this, _hasTime) || !__privateGet(this, _offset); + } + isDate() { + return __privateGet(this, _hasDate) && !__privateGet(this, _hasTime); + } + isTime() { + return __privateGet(this, _hasTime) && !__privateGet(this, _hasDate); + } + isValid() { + return __privateGet(this, _hasDate) || __privateGet(this, _hasTime); + } + toISOString() { + let iso = super.toISOString(); + if (this.isDate()) + return iso.slice(0, 10); + if (this.isTime()) + return iso.slice(11, 23); + if (__privateGet(this, _offset) === null) + return iso.slice(0, -1); + if (__privateGet(this, _offset) === "Z") + return iso; + let offset = +__privateGet(this, _offset).slice(1, 3) * 60 + +__privateGet(this, _offset).slice(4, 6); + offset = __privateGet(this, _offset)[0] === "-" ? offset : -offset; + let offsetDate = new Date(this.getTime() - offset * 6e4); + return offsetDate.toISOString().slice(0, -1) + __privateGet(this, _offset); + } + static wrapAsOffsetDateTime(jsDate, offset = "Z") { + let date7 = new _TomlDate(jsDate); + __privateSet(date7, _offset, offset); + return date7; + } + static wrapAsLocalDateTime(jsDate) { + let date7 = new _TomlDate(jsDate); + __privateSet(date7, _offset, null); + return date7; + } + static wrapAsLocalDate(jsDate) { + let date7 = new _TomlDate(jsDate); + __privateSet(date7, _hasTime, false); + __privateSet(date7, _offset, null); + return date7; + } + static wrapAsLocalTime(jsDate) { + let date7 = new _TomlDate(jsDate); + __privateSet(date7, _hasDate, false); + __privateSet(date7, _offset, null); + return date7; + } +}; +_hasDate = new WeakMap(); +_hasTime = new WeakMap(); +_offset = new WeakMap(); +var TomlDate = _TomlDate; + +// node_modules/smol-toml/dist/primitive.js +var INT_REGEX = /^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/; +var FLOAT_REGEX = /^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/; +var LEADING_ZERO = /^[+-]?0[0-9_]/; +var ESCAPE_REGEX = /^[0-9a-f]{2,8}$/i; +var ESC_MAP = { + b: "\b", + t: " ", + n: "\n", + f: "\f", + r: "\r", + e: "\x1B", + '"': '"', + "\\": "\\" +}; +function parseString(str, ptr = 0, endPtr = str.length) { + let isLiteral = str[ptr] === "'"; + let isMultiline = str[ptr++] === str[ptr] && str[ptr] === str[ptr + 1]; + if (isMultiline) { + endPtr -= 2; + if (str[ptr += 2] === "\r") + ptr++; + if (str[ptr] === "\n") + ptr++; + } + let tmp = 0; + let isEscape; + let parsed = ""; + let sliceStart = ptr; + while (ptr < endPtr - 1) { + let c = str[ptr++]; + if (c === "\n" || c === "\r" && str[ptr] === "\n") { + if (!isMultiline) { + throw new TomlError("newlines are not allowed in strings", { + toml: str, + ptr: ptr - 1 + }); + } + } else if (c < " " && c !== " " || c === "\x7F") { + throw new TomlError("control characters are not allowed in strings", { + toml: str, + ptr: ptr - 1 + }); + } + if (isEscape) { + isEscape = false; + if (c === "x" || c === "u" || c === "U") { + let code = str.slice(ptr, ptr += c === "x" ? 2 : c === "u" ? 4 : 8); + if (!ESCAPE_REGEX.test(code)) { + throw new TomlError("invalid unicode escape", { + toml: str, + ptr: tmp + }); + } + try { + parsed += String.fromCodePoint(parseInt(code, 16)); + } catch (e2) { + throw new TomlError("invalid unicode escape", { + toml: str, + ptr: tmp + }); + } + } else if (isMultiline && (c === "\n" || c === " " || c === " " || c === "\r")) { + ptr = skipVoid(str, ptr - 1, true); + if (str[ptr] !== "\n" && str[ptr] !== "\r") { + throw new TomlError("invalid escape: only line-ending whitespace may be escaped", { + toml: str, + ptr: tmp + }); + } + ptr = skipVoid(str, ptr); + } else if (c in ESC_MAP) { + parsed += ESC_MAP[c]; + } else { + throw new TomlError("unrecognized escape sequence", { + toml: str, + ptr: tmp + }); + } + sliceStart = ptr; + } else if (!isLiteral && c === "\\") { + tmp = ptr - 1; + isEscape = true; + parsed += str.slice(sliceStart, tmp); + } + } + return parsed + str.slice(sliceStart, endPtr - 1); +} +function parseValue(value, toml, ptr, integersAsBigInt) { + if (value === "true") + return true; + if (value === "false") + return false; + if (value === "-inf") + return -Infinity; + if (value === "inf" || value === "+inf") + return Infinity; + if (value === "nan" || value === "+nan" || value === "-nan") + return NaN; + if (value === "-0") + return integersAsBigInt ? /* @__PURE__ */ BigInt("0") : 0; + let isInt = INT_REGEX.test(value); + if (isInt || FLOAT_REGEX.test(value)) { + if (LEADING_ZERO.test(value)) { + throw new TomlError("leading zeroes are not allowed", { + toml, + ptr + }); + } + value = value.replace(/_/g, ""); + let numeric = +value; + if (isNaN(numeric)) { + throw new TomlError("invalid number", { + toml, + ptr + }); + } + if (isInt) { + if ((isInt = !Number.isSafeInteger(numeric)) && !integersAsBigInt) { + throw new TomlError("integer value cannot be represented losslessly", { + toml, + ptr + }); + } + if (isInt || integersAsBigInt === true) + numeric = BigInt(value); + } + return numeric; + } + const date7 = new TomlDate(value); + if (!date7.isValid()) { + throw new TomlError("invalid value", { + toml, + ptr + }); + } + return date7; +} + +// node_modules/smol-toml/dist/extract.js +function sliceAndTrimEndOf(str, startPtr, endPtr) { + let value = str.slice(startPtr, endPtr); + let commentIdx = value.indexOf("#"); + if (commentIdx > -1) { + skipComment(str, commentIdx); + value = value.slice(0, commentIdx); + } + return [value.trimEnd(), commentIdx]; +} +function extractValue(str, ptr, end, depth, integersAsBigInt) { + if (depth === 0) { + throw new TomlError("document contains excessively nested structures. aborting.", { + toml: str, + ptr + }); + } + let c = str[ptr]; + if (c === "[" || c === "{") { + let [value, endPtr2] = c === "[" ? parseArray(str, ptr, depth, integersAsBigInt) : parseInlineTable(str, ptr, depth, integersAsBigInt); + if (end) { + endPtr2 = skipVoid(str, endPtr2); + if (str[endPtr2] === ",") + endPtr2++; + else if (str[endPtr2] !== end) { + throw new TomlError("expected comma or end of structure", { + toml: str, + ptr: endPtr2 + }); + } + } + return [value, endPtr2]; + } + let endPtr; + if (c === '"' || c === "'") { + endPtr = getStringEnd(str, ptr); + let parsed = parseString(str, ptr, endPtr); + if (end) { + endPtr = skipVoid(str, endPtr); + if (str[endPtr] && str[endPtr] !== "," && str[endPtr] !== end && str[endPtr] !== "\n" && str[endPtr] !== "\r") { + throw new TomlError("unexpected character encountered", { + toml: str, + ptr: endPtr + }); + } + endPtr += +(str[endPtr] === ","); + } + return [parsed, endPtr]; + } + endPtr = skipUntil(str, ptr, ",", end); + let slice = sliceAndTrimEndOf(str, ptr, endPtr - +(str[endPtr - 1] === ",")); + if (!slice[0]) { + throw new TomlError("incomplete key-value declaration: no value specified", { + toml: str, + ptr + }); + } + if (end && slice[1] > -1) { + endPtr = skipVoid(str, ptr + slice[1]); + endPtr += +(str[endPtr] === ","); + } + return [ + parseValue(slice[0], str, ptr, integersAsBigInt), + endPtr + ]; +} + +// node_modules/smol-toml/dist/struct.js +var KEY_PART_RE = /^[a-zA-Z0-9-_]+[ \t]*$/; +function parseKey(str, ptr, end = "=") { + let dot = ptr - 1; + let parsed = []; + let endPtr = str.indexOf(end, ptr); + if (endPtr < 0) { + throw new TomlError("incomplete key-value: cannot find end of key", { + toml: str, + ptr + }); + } + do { + let c = str[ptr = ++dot]; + if (c !== " " && c !== " ") { + if (c === '"' || c === "'") { + if (c === str[ptr + 1] && c === str[ptr + 2]) { + throw new TomlError("multiline strings are not allowed in keys", { + toml: str, + ptr + }); + } + let eos = getStringEnd(str, ptr); + if (eos < 0) { + throw new TomlError("unfinished string encountered", { + toml: str, + ptr + }); + } + dot = str.indexOf(".", eos); + let strEnd = str.slice(eos, dot < 0 || dot > endPtr ? endPtr : dot); + let newLine = indexOfNewline(strEnd); + if (newLine > -1) { + throw new TomlError("newlines are not allowed in keys", { + toml: str, + ptr: ptr + dot + newLine + }); + } + if (strEnd.trimStart()) { + throw new TomlError("found extra tokens after the string part", { + toml: str, + ptr: eos + }); + } + if (endPtr < eos) { + endPtr = str.indexOf(end, eos); + if (endPtr < 0) { + throw new TomlError("incomplete key-value: cannot find end of key", { + toml: str, + ptr + }); + } + } + parsed.push(parseString(str, ptr, eos)); + } else { + dot = str.indexOf(".", ptr); + let part = str.slice(ptr, dot < 0 || dot > endPtr ? endPtr : dot); + if (!KEY_PART_RE.test(part)) { + throw new TomlError("only letter, numbers, dashes and underscores are allowed in keys", { + toml: str, + ptr + }); + } + parsed.push(part.trimEnd()); + } + } + } while (dot + 1 && dot < endPtr); + return [parsed, skipVoid(str, endPtr + 1, true, true)]; +} +function parseInlineTable(str, ptr, depth, integersAsBigInt) { + let res = {}; + let seen = /* @__PURE__ */ new Set(); + let c; + ptr++; + while ((c = str[ptr++]) !== "}" && c) { + if (c === ",") { + throw new TomlError("expected value, found comma", { + toml: str, + ptr: ptr - 1 + }); + } else if (c === "#") + ptr = skipComment(str, ptr); + else if (c !== " " && c !== " " && c !== "\n" && c !== "\r") { + let k2; + let t11 = res; + let hasOwn = false; + let [key, keyEndPtr] = parseKey(str, ptr - 1); + for (let i = 0; i < key.length; i++) { + if (i) + t11 = hasOwn ? t11[k2] : t11[k2] = {}; + k2 = key[i]; + if ((hasOwn = Object.hasOwn(t11, k2)) && (typeof t11[k2] !== "object" || seen.has(t11[k2]))) { + throw new TomlError("trying to redefine an already defined value", { + toml: str, + ptr + }); + } + if (!hasOwn && k2 === "__proto__") { + Object.defineProperty(t11, k2, { enumerable: true, configurable: true, writable: true }); + } + } + if (hasOwn) { + throw new TomlError("trying to redefine an already defined value", { + toml: str, + ptr + }); + } + let [value, valueEndPtr] = extractValue(str, keyEndPtr, "}", depth - 1, integersAsBigInt); + seen.add(value); + t11[k2] = value; + ptr = valueEndPtr; + } + } + if (!c) { + throw new TomlError("unfinished table encountered", { + toml: str, + ptr + }); + } + return [res, ptr]; +} +function parseArray(str, ptr, depth, integersAsBigInt) { + let res = []; + let c; + ptr++; + while ((c = str[ptr++]) !== "]" && c) { + if (c === ",") { + throw new TomlError("expected value, found comma", { + toml: str, + ptr: ptr - 1 + }); + } else if (c === "#") + ptr = skipComment(str, ptr); + else if (c !== " " && c !== " " && c !== "\n" && c !== "\r") { + let e2 = extractValue(str, ptr - 1, "]", depth - 1, integersAsBigInt); + res.push(e2[0]); + ptr = e2[1]; + } + } + if (!c) { + throw new TomlError("unfinished array encountered", { + toml: str, + ptr + }); + } + return [res, ptr]; +} + +// node_modules/smol-toml/dist/parse.js +function peekTable(key, table, meta3, type) { + var _a5, _b3; + let t11 = table; + let m4 = meta3; + let k2; + let hasOwn = false; + let state; + for (let i = 0; i < key.length; i++) { + if (i) { + t11 = hasOwn ? t11[k2] : t11[k2] = {}; + m4 = (state = m4[k2]).c; + if (type === 0 && (state.t === 1 || state.t === 2)) { + return null; + } + if (state.t === 2) { + let l2 = t11.length - 1; + t11 = t11[l2]; + m4 = m4[l2].c; + } + } + k2 = key[i]; + if ((hasOwn = Object.hasOwn(t11, k2)) && ((_a5 = m4[k2]) == null ? void 0 : _a5.t) === 0 && ((_b3 = m4[k2]) == null ? void 0 : _b3.d)) { + return null; + } + if (!hasOwn) { + if (k2 === "__proto__") { + Object.defineProperty(t11, k2, { enumerable: true, configurable: true, writable: true }); + Object.defineProperty(m4, k2, { enumerable: true, configurable: true, writable: true }); + } + m4[k2] = { + t: i < key.length - 1 && type === 2 ? 3 : type, + d: false, + i: 0, + c: {} + }; + } + } + state = m4[k2]; + if (state.t !== type && !(type === 1 && state.t === 3)) { + return null; + } + if (type === 2) { + if (!state.d) { + state.d = true; + t11[k2] = []; + } + t11[k2].push(t11 = {}); + state.c[state.i++] = state = { t: 1, d: false, i: 0, c: {} }; + } + if (state.d) { + return null; + } + state.d = true; + if (type === 1) { + t11 = hasOwn ? t11[k2] : t11[k2] = {}; + } else if (type === 0 && hasOwn) { + return null; + } + return [k2, t11, state.c]; +} +function parse3(toml, { maxDepth = 1e3, integersAsBigInt } = {}) { + let res = {}; + let meta3 = {}; + let tbl = res; + let m4 = meta3; + for (let ptr = skipVoid(toml, 0); ptr < toml.length; ) { + if (toml[ptr] === "[") { + let isTableArray = toml[++ptr] === "["; + let k2 = parseKey(toml, ptr += +isTableArray, "]"); + if (isTableArray) { + if (toml[k2[1] - 1] !== "]") { + throw new TomlError("expected end of table declaration", { + toml, + ptr: k2[1] - 1 + }); + } + k2[1]++; + } + let p = peekTable( + k2[0], + res, + meta3, + isTableArray ? 2 : 1 + /* Type.EXPLICIT */ + ); + if (!p) { + throw new TomlError("trying to redefine an already defined table or value", { + toml, + ptr + }); + } + m4 = p[2]; + tbl = p[1]; + ptr = k2[1]; + } else { + let k2 = parseKey(toml, ptr); + let p = peekTable( + k2[0], + tbl, + m4, + 0 + /* Type.DOTTED */ + ); + if (!p) { + throw new TomlError("trying to redefine an already defined table or value", { + toml, + ptr + }); + } + let v2 = extractValue(toml, k2[1], void 0, maxDepth, integersAsBigInt); + p[1][p[0]] = v2[0]; + ptr = v2[1]; + } + ptr = skipVoid(toml, ptr, true); + if (toml[ptr] && toml[ptr] !== "\n" && toml[ptr] !== "\r") { + throw new TomlError("each key-value declaration must be followed by an end-of-line", { + toml, + ptr + }); + } + ptr = skipVoid(toml, ptr); + } + return res; +} + +// node_modules/smol-toml/dist/stringify.js +var BARE_KEY = /^[a-z0-9-_]+$/i; +function extendedTypeOf(obj) { + let type = typeof obj; + if (type === "object") { + if (Array.isArray(obj)) + return "array"; + if (obj instanceof Date) + return "date"; + } + return type; +} +function isArrayOfTables(obj) { + for (let i = 0; i < obj.length; i++) { + if (extendedTypeOf(obj[i]) !== "object") + return false; + } + return obj.length != 0; +} +function formatString(s2) { + return JSON.stringify(s2).replace(/\x7f/g, "\\u007f"); +} +function stringifyValue(val, type, depth, numberAsFloat) { + if (depth === 0) { + throw new Error("Could not stringify the object: maximum object depth exceeded"); + } + if (type === "number") { + if (isNaN(val)) + return "nan"; + if (val === Infinity) + return "inf"; + if (val === -Infinity) + return "-inf"; + if (numberAsFloat && Number.isInteger(val)) + return val.toFixed(1); + return val.toString(); + } + if (type === "bigint" || type === "boolean") { + return val.toString(); + } + if (type === "string") { + return formatString(val); + } + if (type === "date") { + if (isNaN(val.getTime())) { + throw new TypeError("cannot serialize invalid date"); + } + return val.toISOString(); + } + if (type === "object") { + return stringifyInlineTable(val, depth, numberAsFloat); + } + if (type === "array") { + return stringifyArray(val, depth, numberAsFloat); + } +} +function stringifyInlineTable(obj, depth, numberAsFloat) { + let keys = Object.keys(obj); + if (keys.length === 0) + return "{}"; + let res = "{ "; + for (let i = 0; i < keys.length; i++) { + let k2 = keys[i]; + if (i) + res += ", "; + res += BARE_KEY.test(k2) ? k2 : formatString(k2); + res += " = "; + res += stringifyValue(obj[k2], extendedTypeOf(obj[k2]), depth - 1, numberAsFloat); + } + return res + " }"; +} +function stringifyArray(array2, depth, numberAsFloat) { + if (array2.length === 0) + return "[]"; + let res = "[ "; + for (let i = 0; i < array2.length; i++) { + if (i) + res += ", "; + if (array2[i] === null || array2[i] === void 0) { + throw new TypeError("arrays cannot contain null or undefined values"); + } + res += stringifyValue(array2[i], extendedTypeOf(array2[i]), depth - 1, numberAsFloat); + } + return res + " ]"; +} +function stringifyArrayTable(array2, key, depth, numberAsFloat) { + if (depth === 0) { + throw new Error("Could not stringify the object: maximum object depth exceeded"); + } + let res = ""; + for (let i = 0; i < array2.length; i++) { + res += `${res && "\n"}[[${key}]] +`; + res += stringifyTable(0, array2[i], key, depth, numberAsFloat); + } + return res; +} +function stringifyTable(tableKey, obj, prefix, depth, numberAsFloat) { + if (depth === 0) { + throw new Error("Could not stringify the object: maximum object depth exceeded"); + } + let preamble = ""; + let tables = ""; + let keys = Object.keys(obj); + for (let i = 0; i < keys.length; i++) { + let k2 = keys[i]; + if (obj[k2] !== null && obj[k2] !== void 0) { + let type = extendedTypeOf(obj[k2]); + if (type === "symbol" || type === "function") { + throw new TypeError(`cannot serialize values of type '${type}'`); + } + let key = BARE_KEY.test(k2) ? k2 : formatString(k2); + if (type === "array" && isArrayOfTables(obj[k2])) { + tables += (tables && "\n") + stringifyArrayTable(obj[k2], prefix ? `${prefix}.${key}` : key, depth - 1, numberAsFloat); + } else if (type === "object") { + let tblKey = prefix ? `${prefix}.${key}` : key; + tables += (tables && "\n") + stringifyTable(tblKey, obj[k2], tblKey, depth - 1, numberAsFloat); + } else { + preamble += key; + preamble += " = "; + preamble += stringifyValue(obj[k2], type, depth, numberAsFloat); + preamble += "\n"; + } + } + } + if (tableKey && (preamble || !tables)) + preamble = preamble ? `[${tableKey}] +${preamble}` : `[${tableKey}]`; + return preamble && tables ? `${preamble} +${tables}` : preamble || tables; +} +function stringify(obj, { maxDepth = 1e3, numbersAsFloat = false } = {}) { + if (extendedTypeOf(obj) !== "object") { + throw new TypeError("stringify can only be called with an object"); + } + let str = stringifyTable(0, obj, "", maxDepth, numbersAsFloat); + if (str[str.length - 1] !== "\n") + return str + "\n"; + return str; +} + +// src/providers/codex/types/subagent.ts +var CODEX_SUBAGENT_KNOWN_KEYS = /* @__PURE__ */ new Set([ + "name", + "description", + "developer_instructions", + "nickname_candidates", + "model", + "model_reasoning_effort", + "sandbox_mode" +]); + +// src/providers/codex/storage/CodexSubagentStorage.ts +var CODEX_AGENTS_PATH = ".codex/agents"; +var SUBAGENT_PERSISTENCE_PREFIX = "codex-subagent"; +function createCodexSubagentPersistenceKey(location) { + return `${SUBAGENT_PERSISTENCE_PREFIX}:${encodeURIComponent(location.fileName)}`; +} +function parseCodexSubagentPersistenceKey(persistenceKey) { + if (!persistenceKey) { + return null; + } + if (persistenceKey.startsWith(`${CODEX_AGENTS_PATH}/`) && persistenceKey.endsWith(".toml")) { + return { fileName: persistenceKey.slice(CODEX_AGENTS_PATH.length + 1) }; + } + const [prefix, encodedFileName] = persistenceKey.split(":"); + if (prefix !== SUBAGENT_PERSISTENCE_PREFIX || !encodedFileName) { + return null; + } + const fileName = decodeURIComponent(encodedFileName); + return fileName.endsWith(".toml") ? { fileName } : null; +} +var CodexSubagentStorage = class { + constructor(vaultAdapter) { + this.vaultAdapter = vaultAdapter; + } + async loadAll() { + return this.scanAdapter(this.vaultAdapter); + } + async load(agent) { + const filePath = this.resolveCurrentPath(agent); + try { + if (!await this.vaultAdapter.exists(filePath)) return null; + const content = await this.vaultAdapter.read(filePath); + return parseSubagentToml(content, filePath); + } catch (e2) { + return null; + } + } + async save(agent, previous) { + const filePath = this.resolveTargetPath(agent, previous); + const previousPath = previous ? this.resolveCurrentPath(previous) : null; + await this.vaultAdapter.ensureFolder(CODEX_AGENTS_PATH); + const content = serializeSubagentToml(agent); + await this.vaultAdapter.write(filePath, content); + if (previousPath && previousPath !== filePath) { + await this.vaultAdapter.delete(previousPath); + } + } + async delete(agent) { + const filePath = this.resolveCurrentPath(agent); + await this.vaultAdapter.delete(filePath); + } + resolveCurrentPath(agent) { + const persistedLocation = parseCodexSubagentPersistenceKey(agent.persistenceKey); + if (persistedLocation) { + return `${CODEX_AGENTS_PATH}/${persistedLocation.fileName}`; + } + return `${CODEX_AGENTS_PATH}/${agent.name}.toml`; + } + resolveTargetPath(agent, previous) { + if (previous && previous.name === agent.name) { + return this.resolveCurrentPath(previous); + } + return `${CODEX_AGENTS_PATH}/${agent.name}.toml`; + } + async scanAdapter(adapter) { + const results = []; + try { + const files = await adapter.listFiles(CODEX_AGENTS_PATH); + for (const filePath of files) { + if (!filePath.endsWith(".toml")) continue; + try { + const content = await adapter.read(filePath); + const agent = parseSubagentToml(content, filePath); + if (agent) results.push(agent); + } catch (e2) { + } + } + } catch (e2) { + } + return results; + } +}; +function parseSubagentToml(content, filePath) { + var _a5; + let parsed; + try { + parsed = parse3(content); + } catch (e2) { + return null; + } + const name = typeof parsed.name === "string" ? parsed.name : void 0; + const description = typeof parsed.description === "string" ? parsed.description : void 0; + const developerInstructions = typeof parsed.developer_instructions === "string" ? parsed.developer_instructions : void 0; + if (!name || !description || !developerInstructions) return null; + const result = { + name, + description, + developerInstructions, + persistenceKey: createCodexSubagentPersistenceKey({ + fileName: filePath.startsWith(`${CODEX_AGENTS_PATH}/`) ? filePath.slice(CODEX_AGENTS_PATH.length + 1) : (_a5 = filePath.split("/").pop()) != null ? _a5 : filePath + }) + }; + if (typeof parsed.model === "string") { + result.model = parsed.model; + } + if (typeof parsed.model_reasoning_effort === "string") { + result.modelReasoningEffort = parsed.model_reasoning_effort; + } + if (typeof parsed.sandbox_mode === "string") { + result.sandboxMode = parsed.sandbox_mode; + } + if (Array.isArray(parsed.nickname_candidates)) { + const candidates = parsed.nickname_candidates.filter( + (v2) => typeof v2 === "string" + ); + if (candidates.length > 0) result.nicknameCandidates = candidates; + } + const extraFields = {}; + for (const [key, value] of Object.entries(parsed)) { + if (!CODEX_SUBAGENT_KNOWN_KEYS.has(key)) { + extraFields[key] = value; + } + } + if (Object.keys(extraFields).length > 0) { + result.extraFields = extraFields; + } + return result; +} +function serializeSubagentToml(agent) { + const doc = { + name: agent.name, + description: agent.description, + developer_instructions: agent.developerInstructions + }; + if (agent.nicknameCandidates && agent.nicknameCandidates.length > 0) { + doc.nickname_candidates = agent.nicknameCandidates; + } + if (agent.model) { + doc.model = agent.model; + } + if (agent.modelReasoningEffort) { + doc.model_reasoning_effort = agent.modelReasoningEffort; + } + if (agent.sandboxMode) { + doc.sandbox_mode = agent.sandboxMode; + } + if (agent.extraFields) { + for (const [key, value] of Object.entries(agent.extraFields)) { + doc[key] = value; + } + } + return stringify(doc); +} + +// src/providers/codex/ui/CodexSettingsTab.ts +var fs13 = __toESM(require("fs")); +var import_obsidian17 = require("obsidian"); +init_env(); +init_path(); + +// src/providers/codex/modelOptions.ts +function createCustomCodexModelOption(modelId, description) { + return { + value: modelId, + label: formatCodexModelLabel(modelId), + description + }; +} +function getConfiguredEnvModel(settings11) { + var _a5; + const modelId = (_a5 = getRuntimeEnvironmentVariables(settings11, "codex").OPENAI_MODEL) == null ? void 0 : _a5.trim(); + return modelId ? modelId : null; +} +function getConfiguredEnvCustomModel(settings11) { + const modelId = getConfiguredEnvModel(settings11); + return modelId && !DEFAULT_CODEX_MODEL_SET.has(modelId) ? modelId : null; +} +function parseConfiguredCustomModelIds2(value) { + const modelIds = []; + const seen = /* @__PURE__ */ new Set(); + for (const line of value.split(/\r?\n/)) { + const modelId = line.trim(); + if (!modelId || seen.has(modelId)) { + continue; + } + seen.add(modelId); + modelIds.push(modelId); + } + return modelIds; +} +function getCodexModelOptions(settings11) { + const models = [...DEFAULT_CODEX_MODELS]; + const seenValues = new Set(models.map((model) => model.value)); + const envModel = getConfiguredEnvCustomModel(settings11); + if (envModel) { + seenValues.add(envModel); + models.unshift(createCustomCodexModelOption(envModel, "Custom (env)")); + } + const codexSettings = getCodexProviderSettings(settings11); + for (const modelId of parseConfiguredCustomModelIds2(codexSettings.customModels)) { + if (seenValues.has(modelId)) { + continue; + } + seenValues.add(modelId); + models.push(createCustomCodexModelOption(modelId, "Custom model")); + } + return models; +} +function resolveCodexModelSelection(settings11, currentModel) { + var _a5, _b3; + const envModel = getConfiguredEnvModel(settings11); + if (envModel) { + return envModel; + } + const modelOptions = getCodexModelOptions(settings11); + if (currentModel && modelOptions.some((option) => option.value === currentModel)) { + return currentModel; + } + return (_b3 = (_a5 = modelOptions[0]) == null ? void 0 : _a5.value) != null ? _b3 : DEFAULT_CODEX_PRIMARY_MODEL; +} + +// src/providers/codex/ui/CodexSkillSettings.ts +var import_obsidian15 = require("obsidian"); +var CodexSkillModal = class extends import_obsidian15.Modal { + constructor(app, existing, onSave) { + var _a5, _b3; + super(app); + this.existing = existing; + this.onSave = onSave; + this._selectedRootId = (_b3 = (_a5 = parseCodexSkillPersistenceKey(existing == null ? void 0 : existing.persistenceKey)) == null ? void 0 : _a5.rootId) != null ? _b3 : "vault-codex"; + } + /** Exposed for unit tests only. */ + getTestInputs() { + return { + nameInput: this._nameInput, + descInput: this._descInput, + contentArea: this._contentArea, + setDirectory: (rootId) => { + this._selectedRootId = rootId; + }, + triggerSave: this._triggerSave + }; + } + onOpen() { + var _a5; + this.setTitle(this.existing ? "Edit Codex Skill" : "Add Codex Skill"); + this.modalEl.addClass("claudian-sp-modal"); + const { contentEl } = this; + new import_obsidian15.Setting(contentEl).setName("Directory").setDesc("Where to store the skill").addDropdown((dropdown) => { + for (const opt of CODEX_SKILL_ROOT_OPTIONS) { + dropdown.addOption(opt.id, opt.label); + } + dropdown.setValue(this._selectedRootId); + dropdown.onChange((value) => { + this._selectedRootId = value; + }); + }); + new import_obsidian15.Setting(contentEl).setName("Skill name").setDesc('The name used after $ (e.g., "analyze" for $analyze)').addText((text) => { + var _a6; + this._nameInput = text.inputEl; + text.setValue(((_a6 = this.existing) == null ? void 0 : _a6.name) || "").setPlaceholder("Analyze-code"); + }); + new import_obsidian15.Setting(contentEl).setName("Description").setDesc("Optional description shown in dropdown").addText((text) => { + var _a6; + this._descInput = text.inputEl; + text.setValue(((_a6 = this.existing) == null ? void 0 : _a6.description) || ""); + }); + new import_obsidian15.Setting(contentEl).setName("Instructions").setDesc("The skill instructions (SKILL.md content)"); + const contentArea = contentEl.createEl("textarea", { + cls: "claudian-sp-content-area", + attr: { rows: "10", placeholder: "Analyze the code for..." } + }); + contentArea.value = ((_a5 = this.existing) == null ? void 0 : _a5.content) || ""; + this._contentArea = contentArea; + const doSave = async () => { + var _a6, _b3; + const name = this._nameInput.value.trim(); + const nameError = validateCommandName(name); + if (nameError) { + new import_obsidian15.Notice(nameError); + return; + } + const content = this._contentArea.value; + if (!content.trim()) { + new import_obsidian15.Notice("Instructions are required"); + return; + } + const entry = { + id: ((_a6 = this.existing) == null ? void 0 : _a6.id) || `codex-skill-${name}`, + providerId: "codex", + kind: "skill", + name, + description: this._descInput.value.trim() || void 0, + content, + scope: "vault", + source: "user", + isEditable: true, + isDeletable: true, + displayPrefix: "$", + insertPrefix: "$", + persistenceKey: createCodexSkillPersistenceKey({ + rootId: this._selectedRootId, + ...((_b3 = this.existing) == null ? void 0 : _b3.name) ? { currentName: this.existing.name } : {} + }) + }; + try { + await this.onSave(entry); + } catch (e2) { + new import_obsidian15.Notice("Failed to save Codex skill"); + return; + } + this.close(); + }; + this._triggerSave = doSave; + const buttonContainer = contentEl.createDiv({ cls: "claudian-sp-modal-buttons" }); + const cancelBtn = buttonContainer.createEl("button", { + text: "Cancel", + cls: "claudian-cancel-btn" + }); + cancelBtn.addEventListener("click", () => this.close()); + const saveBtn = buttonContainer.createEl("button", { + text: "Save", + cls: "claudian-save-btn" + }); + saveBtn.addEventListener("click", () => { + void doSave(); + }); + } + onClose() { + this.contentEl.empty(); + } +}; +var CodexSkillSettings = class { + constructor(containerEl, catalog, app) { + this.entries = []; + this.containerEl = containerEl; + this.catalog = catalog; + this.app = app; + void this.render(); + } + async deleteEntry(entry) { + await this.catalog.deleteVaultEntry(entry); + await this.render(); + } + async refresh() { + await this.catalog.refresh(); + await this.render(); + } + async render() { + this.containerEl.empty(); + try { + this.entries = await this.catalog.listVaultEntries(); + } catch (e2) { + this.entries = []; + } + const headerEl = this.containerEl.createDiv({ cls: "claudian-sp-header" }); + headerEl.createSpan({ text: "Codex Skills", cls: "claudian-sp-label" }); + const actionsEl = headerEl.createDiv({ cls: "claudian-sp-header-actions" }); + const refreshBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Refresh" } + }); + (0, import_obsidian15.setIcon)(refreshBtn, "refresh-cw"); + refreshBtn.addEventListener("click", () => { + void this.refresh(); + }); + const addBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Add" } + }); + (0, import_obsidian15.setIcon)(addBtn, "plus"); + addBtn.addEventListener("click", () => this.openModal(null)); + if (this.entries.length === 0) { + const emptyEl = this.containerEl.createDiv({ cls: "claudian-sp-empty-state" }); + emptyEl.setText("No Codex skills in vault. Click + to create one."); + return; + } + const listEl = this.containerEl.createDiv({ cls: "claudian-sp-list" }); + for (const entry of this.entries) { + this.renderItem(listEl, entry); + } + } + renderItem(listEl, entry) { + const itemEl = listEl.createDiv({ cls: "claudian-sp-item" }); + const infoEl = itemEl.createDiv({ cls: "claudian-sp-info" }); + const headerRow = infoEl.createDiv({ cls: "claudian-sp-item-header" }); + const nameEl = headerRow.createSpan({ cls: "claudian-sp-item-name" }); + nameEl.setText(`$${entry.name}`); + headerRow.createSpan({ text: "skill", cls: "claudian-slash-item-badge" }); + if (entry.description) { + const descEl = infoEl.createDiv({ cls: "claudian-sp-item-desc" }); + descEl.setText(entry.description); + } + const actionsEl = itemEl.createDiv({ cls: "claudian-sp-item-actions" }); + if (entry.isEditable) { + const editBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Edit" } + }); + (0, import_obsidian15.setIcon)(editBtn, "pencil"); + editBtn.addEventListener("click", () => this.openModal(entry)); + } + if (entry.isDeletable) { + const deleteBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn claudian-settings-delete-btn", + attr: { "aria-label": "Delete" } + }); + (0, import_obsidian15.setIcon)(deleteBtn, "trash-2"); + deleteBtn.addEventListener("click", () => { + void (async () => { + try { + await this.deleteEntry(entry); + new import_obsidian15.Notice(`Codex skill "$${entry.name}" deleted`); + } catch (e2) { + new import_obsidian15.Notice("Failed to delete Codex skill"); + } + })(); + }); + } + } + openModal(existing) { + if (!this.app) return; + const modal = new CodexSkillModal( + this.app, + existing, + async (entry) => { + await this.catalog.saveVaultEntry(entry); + await this.render(); + new import_obsidian15.Notice(`Codex skill "$${entry.name}" ${existing ? "updated" : "created"}`); + } + ); + modal.open(); + } +}; + +// src/providers/codex/ui/CodexSubagentSettings.ts +var import_obsidian16 = require("obsidian"); +var REASONING_EFFORT_OPTIONS = [ + { value: "", label: "Inherit" }, + { value: "low", label: "Low" }, + { value: "medium", label: "Medium" }, + { value: "high", label: "High" }, + { value: "xhigh", label: "Extra High" } +]; +var SANDBOX_MODE_OPTIONS = [ + { value: "", label: "Inherit" }, + { value: "read-only", label: "Read only" }, + { value: "danger-full-access", label: "Danger full access" }, + { value: "workspace-write", label: "Workspace write" } +]; +var MAX_NAME_LENGTH = 64; +var CODEX_AGENT_NAME_PATTERN = /^[a-z0-9_-]+$/; +var CODEX_NICKNAME_PATTERN = /^[A-Za-z0-9 _-]+$/; +function validateCodexSubagentName(name) { + if (!name) return "Subagent name is required"; + if (name.length > MAX_NAME_LENGTH) return `Subagent name must be ${MAX_NAME_LENGTH} characters or fewer`; + if (!CODEX_AGENT_NAME_PATTERN.test(name)) return "Subagent name can only contain lowercase letters, numbers, hyphens, and underscores"; + return null; +} +function validateCodexNicknameCandidates(candidates) { + const normalized = candidates.map((candidate) => candidate.trim()).filter(Boolean); + if (normalized.length === 0) return null; + const seen = /* @__PURE__ */ new Set(); + for (const candidate of normalized) { + if (!CODEX_NICKNAME_PATTERN.test(candidate)) { + return "Nickname candidates can only contain ASCII letters, numbers, spaces, hyphens, and underscores"; + } + const dedupeKey = candidate.toLowerCase(); + if (seen.has(dedupeKey)) { + return "Nickname candidates must be unique"; + } + seen.add(dedupeKey); + } + return null; +} +var CodexSubagentModal = class extends import_obsidian16.Modal { + constructor(app, existing, allAgents, onSave) { + var _a5, _b3; + super(app); + this._reasoningEffort = ""; + this._sandboxMode = ""; + this.existing = existing; + this.allAgents = allAgents; + this.onSave = onSave; + this._reasoningEffort = (_a5 = existing == null ? void 0 : existing.modelReasoningEffort) != null ? _a5 : ""; + this._sandboxMode = (_b3 = existing == null ? void 0 : existing.sandboxMode) != null ? _b3 : ""; + } + getTestInputs() { + return { + nameInput: this._nameInput, + descInput: this._descInput, + instructionsArea: this._instructionsArea, + nicknamesInput: this._nicknamesInput, + modelInput: this._modelInput, + setReasoningEffort: (v2) => { + this._reasoningEffort = v2; + }, + setSandboxMode: (v2) => { + this._sandboxMode = v2; + }, + triggerSave: this._triggerSave + }; + } + onOpen() { + var _a5, _b3, _c2, _d, _e2, _f2, _g; + this.setTitle(this.existing ? "Edit Codex Subagent" : "Add Codex Subagent"); + this.modalEl.addClass("claudian-sp-modal"); + const { contentEl } = this; + new import_obsidian16.Setting(contentEl).setName("Name").setDesc("Agent name Codex uses when spawning (lowercase, hyphens, underscores)").addText((text) => { + var _a6, _b4; + this._nameInput = text.inputEl; + text.setValue((_b4 = (_a6 = this.existing) == null ? void 0 : _a6.name) != null ? _b4 : "").setPlaceholder("Code_reviewer"); + }); + new import_obsidian16.Setting(contentEl).setName("Description").setDesc("When Codex should use this agent").addText((text) => { + var _a6, _b4; + this._descInput = text.inputEl; + text.setValue((_b4 = (_a6 = this.existing) == null ? void 0 : _a6.description) != null ? _b4 : "").setPlaceholder("Reviews code for correctness and security"); + }); + const details = contentEl.createEl("details", { cls: "claudian-sp-advanced-section" }); + details.createEl("summary", { + text: "Advanced options", + cls: "claudian-sp-advanced-summary" + }); + if (((_a5 = this.existing) == null ? void 0 : _a5.model) || ((_b3 = this.existing) == null ? void 0 : _b3.modelReasoningEffort) || ((_c2 = this.existing) == null ? void 0 : _c2.sandboxMode) || ((_e2 = (_d = this.existing) == null ? void 0 : _d.nicknameCandidates) == null ? void 0 : _e2.length)) { + details.open = true; + } + new import_obsidian16.Setting(details).setName("Model").setDesc("Model override (leave empty to inherit)").addText((text) => { + var _a6, _b4; + this._modelInput = text.inputEl; + text.setValue((_b4 = (_a6 = this.existing) == null ? void 0 : _a6.model) != null ? _b4 : "").setPlaceholder(DEFAULT_CODEX_PRIMARY_MODEL); + }); + new import_obsidian16.Setting(details).setName("Reasoning effort").setDesc("Model reasoning effort level").addDropdown((dropdown) => { + for (const opt of REASONING_EFFORT_OPTIONS) { + dropdown.addOption(opt.value, opt.label); + } + dropdown.setValue(this._reasoningEffort); + dropdown.onChange((v2) => { + this._reasoningEffort = v2; + }); + }); + new import_obsidian16.Setting(details).setName("Sandbox mode").setDesc("Sandbox restriction for this agent").addDropdown((dropdown) => { + for (const opt of SANDBOX_MODE_OPTIONS) { + dropdown.addOption(opt.value, opt.label); + } + dropdown.setValue(this._sandboxMode); + dropdown.onChange((v2) => { + this._sandboxMode = v2; + }); + }); + new import_obsidian16.Setting(details).setName("Nickname candidates").setDesc("Comma-separated display nicknames (e.g., atlas, delta, echo)").addText((text) => { + var _a6, _b4, _c3; + this._nicknamesInput = text.inputEl; + text.setValue((_c3 = (_b4 = (_a6 = this.existing) == null ? void 0 : _a6.nicknameCandidates) == null ? void 0 : _b4.join(", ")) != null ? _c3 : ""); + }); + new import_obsidian16.Setting(contentEl).setName("Developer instructions").setDesc("Core instructions that define the agent's behavior"); + const instructionsArea = contentEl.createEl("textarea", { + cls: "claudian-sp-content-area", + attr: { + rows: "10", + placeholder: "Review code like an owner.\nPrioritize correctness, security, and missing test coverage." + } + }); + instructionsArea.value = (_g = (_f2 = this.existing) == null ? void 0 : _f2.developerInstructions) != null ? _g : ""; + this._instructionsArea = instructionsArea; + const doSave = async () => { + var _a6, _b4; + const name = this._nameInput.value.trim(); + const nameError = validateCodexSubagentName(name); + if (nameError) { + new import_obsidian16.Notice(nameError); + return; + } + const description = this._descInput.value.trim(); + if (!description) { + new import_obsidian16.Notice("Description is required"); + return; + } + const developerInstructions = this._instructionsArea.value; + if (!developerInstructions.trim()) { + new import_obsidian16.Notice("Developer instructions are required"); + return; + } + const nicknameCandidates = this._nicknamesInput.value.split(",").map((s2) => s2.trim()).filter(Boolean); + const nicknameError = validateCodexNicknameCandidates(nicknameCandidates); + if (nicknameError) { + new import_obsidian16.Notice(nicknameError); + return; + } + const duplicate = this.allAgents.find( + (a) => { + var _a7; + return a.name.toLowerCase() === name.toLowerCase() && a.persistenceKey !== ((_a7 = this.existing) == null ? void 0 : _a7.persistenceKey); + } + ); + if (duplicate) { + new import_obsidian16.Notice(`A subagent named "${name}" already exists`); + return; + } + const agent = { + name, + description, + developerInstructions, + nicknameCandidates: nicknameCandidates.length > 0 ? nicknameCandidates : void 0, + model: this._modelInput.value.trim() || void 0, + modelReasoningEffort: this._reasoningEffort || void 0, + sandboxMode: this._sandboxMode || void 0, + persistenceKey: (_a6 = this.existing) == null ? void 0 : _a6.persistenceKey, + extraFields: (_b4 = this.existing) == null ? void 0 : _b4.extraFields + }; + try { + await this.onSave(agent); + } catch (err) { + const message = err instanceof Error ? err.message : "Unknown error"; + new import_obsidian16.Notice(`Failed to save subagent: ${message}`); + return; + } + this.close(); + }; + this._triggerSave = doSave; + const buttonContainer = contentEl.createDiv({ cls: "claudian-sp-modal-buttons" }); + const cancelBtn = buttonContainer.createEl("button", { + text: "Cancel", + cls: "claudian-cancel-btn" + }); + cancelBtn.addEventListener("click", () => this.close()); + const saveBtn = buttonContainer.createEl("button", { + text: "Save", + cls: "claudian-save-btn" + }); + saveBtn.addEventListener("click", () => { + void doSave(); + }); + } + onClose() { + this.contentEl.empty(); + } +}; +var CodexSubagentSettings = class { + constructor(containerEl, storage, app, onChanged) { + this.agents = []; + this.containerEl = containerEl; + this.storage = storage; + this.app = app; + this.onChanged = onChanged; + void this.render(); + } + async render() { + this.containerEl.empty(); + try { + this.agents = await this.storage.loadAll(); + } catch (e2) { + this.agents = []; + } + const headerEl = this.containerEl.createDiv({ cls: "claudian-sp-header" }); + headerEl.createSpan({ text: "Codex Subagents", cls: "claudian-sp-label" }); + const actionsEl = headerEl.createDiv({ cls: "claudian-sp-header-actions" }); + const refreshBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Refresh" } + }); + (0, import_obsidian16.setIcon)(refreshBtn, "refresh-cw"); + refreshBtn.addEventListener("click", () => { + void this.render(); + }); + const addBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Add" } + }); + (0, import_obsidian16.setIcon)(addBtn, "plus"); + addBtn.addEventListener("click", () => this.openModal(null)); + if (this.agents.length === 0) { + const emptyEl = this.containerEl.createDiv({ cls: "claudian-sp-empty-state" }); + emptyEl.setText("No Codex subagents in vault. Click + to create one."); + return; + } + const listEl = this.containerEl.createDiv({ cls: "claudian-sp-list" }); + for (const agent of this.agents) { + this.renderItem(listEl, agent); + } + } + renderItem(listEl, agent) { + const itemEl = listEl.createDiv({ cls: "claudian-sp-item" }); + const infoEl = itemEl.createDiv({ cls: "claudian-sp-info" }); + const headerRow = infoEl.createDiv({ cls: "claudian-sp-item-header" }); + const nameEl = headerRow.createSpan({ cls: "claudian-sp-item-name" }); + nameEl.setText(agent.name); + if (agent.model) { + headerRow.createSpan({ text: agent.model, cls: "claudian-slash-item-badge" }); + } + if (agent.description) { + const descEl = infoEl.createDiv({ cls: "claudian-sp-item-desc" }); + descEl.setText(agent.description); + } + const actionsEl = itemEl.createDiv({ cls: "claudian-sp-item-actions" }); + const editBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Edit" } + }); + (0, import_obsidian16.setIcon)(editBtn, "pencil"); + editBtn.addEventListener("click", () => this.openModal(agent)); + const deleteBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn claudian-settings-delete-btn", + attr: { "aria-label": "Delete" } + }); + (0, import_obsidian16.setIcon)(deleteBtn, "trash-2"); + deleteBtn.addEventListener("click", () => { + void (async () => { + var _a5; + if (!this.app) return; + const confirmed = await confirmDelete( + this.app, + `Delete subagent "${agent.name}"?` + ); + if (!confirmed) return; + try { + await this.storage.delete(agent); + await this.render(); + (_a5 = this.onChanged) == null ? void 0 : _a5.call(this); + new import_obsidian16.Notice(`Subagent "${agent.name}" deleted`); + } catch (e2) { + new import_obsidian16.Notice("Failed to delete subagent"); + } + })(); + }); + } + openModal(existing) { + if (!this.app) return; + const modal = new CodexSubagentModal( + this.app, + existing, + this.agents, + async (agent) => { + var _a5; + await this.storage.save(agent, existing); + await this.render(); + (_a5 = this.onChanged) == null ? void 0 : _a5.call(this); + new import_obsidian16.Notice( + existing ? `Subagent "${agent.name}" updated` : `Subagent "${agent.name}" created` + ); + } + ); + modal.open(); + } +}; + +// src/providers/codex/ui/CodexSettingsTab.ts +var codexSettingsTabRenderer = { + render(container, context) { + const codexWorkspace = getCodexWorkspaceServices(); + const settingsBag = context.plugin.settings; + const codexSettings = getCodexProviderSettings(settingsBag); + const hostnameKey = getHostnameKey(); + const isWindowsHost = process.platform === "win32"; + let installationMethod = codexSettings.installationMethod; + const reconcileActiveCodexModelSelection = () => { + const activeProvider = settingsBag.settingsProvider; + if (activeProvider !== "codex") { + return; + } + const currentModel = typeof settingsBag.model === "string" ? settingsBag.model : ""; + const nextModel = resolveCodexModelSelection(settingsBag, currentModel); + if (!nextModel || nextModel === currentModel) { + return; + } + settingsBag.model = nextModel; + }; + new import_obsidian17.Setting(container).setName(t10("settings.setup")).setHeading(); + new import_obsidian17.Setting(container).setName("Enable Codex provider").setDesc("When enabled, Codex models appear in the model selector for new conversations. Existing Codex sessions are preserved.").addToggle( + (toggle) => toggle.setValue(codexSettings.enabled).onChange(async (value) => { + updateCodexProviderSettings(settingsBag, { enabled: value }); + await context.plugin.saveSettings(); + context.refreshModelSelectors(); + }) + ); + if (isWindowsHost) { + new import_obsidian17.Setting(container).setName("Installation method").setDesc("How Claudian should launch Codex on Windows. Native Windows uses a Windows executable path. WSL launches the Linux CLI inside a selected distro.").addDropdown((dropdown) => { + dropdown.addOption("native-windows", "Native Windows").addOption("wsl", "WSL").setValue(installationMethod).onChange(async (value) => { + installationMethod = value === "wsl" ? "wsl" : "native-windows"; + updateCodexProviderSettings(settingsBag, { installationMethod }); + refreshInstallationMethodUI(); + await context.plugin.saveSettings(); + }); + }); + } + const getCliPathCopy = () => { + if (!isWindowsHost) { + return { + desc: "Custom path to the local Codex CLI. Leave empty for auto-detection from PATH.", + placeholder: "/usr/local/bin/codex" + }; + } + if (installationMethod === "wsl") { + return { + desc: "Linux-side Codex command or absolute path to run inside WSL. Leave empty for PATH lookup inside the selected distro.", + placeholder: "codex" + }; + } + return { + desc: "Custom path to the local Codex CLI. Leave empty for auto-detection from PATH. Use the native Windows executable path, usually `codex.exe`.", + placeholder: "C:\\Users\\you\\AppData\\Roaming\\npm\\codex.exe" + }; + }; + const shouldValidateCliPathAsFile = () => !isWindowsHost || installationMethod !== "wsl"; + const cliPathSetting = new import_obsidian17.Setting(container).setName("Codex CLI path").setDesc(getCliPathCopy().desc); + const validationEl = container.createDiv({ + cls: "claudian-cli-path-validation claudian-setting-validation claudian-setting-validation-error claudian-hidden" + }); + const validatePath = (value) => { + const trimmed = value.trim(); + if (!trimmed) return null; + if (!shouldValidateCliPathAsFile()) { + if (isWindowsStyleCliReference(trimmed)) { + return "WSL mode expects a Linux command or Linux absolute path, not a Windows executable path."; + } + return null; + } + const expandedPath = expandHomePath(trimmed); + if (!fs13.existsSync(expandedPath)) { + return t10("settings.cliPath.validation.notExist"); + } + const stat = fs13.statSync(expandedPath); + if (!stat.isFile()) { + return t10("settings.cliPath.validation.isDirectory"); + } + return null; + }; + const updateCliPathValidation = (value, inputEl) => { + const error48 = validatePath(value); + if (error48) { + validationEl.setText(error48); + validationEl.toggleClass("claudian-hidden", false); + if (inputEl) { + inputEl.toggleClass("claudian-input-error", true); + } + return false; + } + validationEl.toggleClass("claudian-hidden", true); + if (inputEl) { + inputEl.toggleClass("claudian-input-error", false); + } + return true; + }; + const cliPathsByHost = { ...codexSettings.cliPathsByHost }; + let cliPathInputEl = null; + let wslDistroSettingEl = null; + let wslDistroInputEl = null; + const refreshInstallationMethodUI = () => { + const cliCopy = getCliPathCopy(); + cliPathSetting.setDesc(cliCopy.desc); + if (cliPathInputEl) { + cliPathInputEl.placeholder = cliCopy.placeholder; + updateCliPathValidation(cliPathInputEl.value, cliPathInputEl); + } + if (wslDistroSettingEl) { + wslDistroSettingEl.toggleClass("claudian-hidden", installationMethod !== "wsl"); + } + if (wslDistroInputEl) { + wslDistroInputEl.disabled = installationMethod !== "wsl"; + } + }; + const persistCliPath = async (value) => { + var _a5; + const isValid2 = updateCliPathValidation(value, cliPathInputEl != null ? cliPathInputEl : void 0); + if (!isValid2) { + return false; + } + const trimmed = value.trim(); + if (trimmed) { + cliPathsByHost[hostnameKey] = trimmed; + } else { + delete cliPathsByHost[hostnameKey]; + } + updateCodexProviderSettings(settingsBag, { cliPathsByHost: { ...cliPathsByHost } }); + await context.plugin.saveSettings(); + const view = context.plugin.getView(); + await ((_a5 = view == null ? void 0 : view.getTabManager()) == null ? void 0 : _a5.broadcastToAllTabs( + (service) => Promise.resolve(service.cleanup()) + )); + return true; + }; + const currentValue = codexSettings.cliPathsByHost[hostnameKey] || ""; + cliPathSetting.addText((text) => { + text.setPlaceholder(getCliPathCopy().placeholder).setValue(currentValue).onChange(async (value) => { + await persistCliPath(value); + }); + text.inputEl.addClass("claudian-settings-cli-path-input"); + cliPathInputEl = text.inputEl; + updateCliPathValidation(currentValue, text.inputEl); + }); + if (isWindowsHost) { + const wslDistroSetting = new import_obsidian17.Setting(container).setName("WSL distro override").setDesc("Optional advanced override. Leave empty to infer the distro from a WSL workspace path when possible, otherwise use the default WSL distro."); + wslDistroSettingEl = wslDistroSetting.settingEl; + wslDistroSetting.addText((text) => { + text.setPlaceholder("Ubuntu").setValue(codexSettings.wslDistroOverride).onChange(async (value) => { + updateCodexProviderSettings(settingsBag, { wslDistroOverride: value }); + await context.plugin.saveSettings(); + }); + text.inputEl.addClass("claudian-settings-cli-path-input"); + text.inputEl.disabled = installationMethod !== "wsl"; + wslDistroInputEl = text.inputEl; + }); + } + refreshInstallationMethodUI(); + new import_obsidian17.Setting(container).setName(t10("settings.safety")).setHeading(); + new import_obsidian17.Setting(container).setName(t10("settings.codexSafeMode.name")).setDesc(t10("settings.codexSafeMode.desc")).addDropdown((dropdown) => { + dropdown.addOption("workspace-write", "Workspace write").addOption("read-only", "Read only").setValue(codexSettings.safeMode).onChange(async (value) => { + updateCodexProviderSettings( + settingsBag, + { safeMode: value } + ); + await context.plugin.saveSettings(); + }); + }); + new import_obsidian17.Setting(container).setName(t10("settings.models")).setHeading(); + const SUMMARY_OPTIONS = [ + { value: "auto", label: "Auto" }, + { value: "concise", label: "Concise" }, + { value: "detailed", label: "Detailed" }, + { value: "none", label: "Off" } + ]; + new import_obsidian17.Setting(container).setName("Custom models").setDesc("Append additional Codex model ids to the picker, one per line. `OPENAI_MODEL` still takes precedence when set.").addTextArea((text) => { + let pendingCustomModels = codexSettings.customModels; + let savedCustomModels = codexSettings.customModels; + const reconcileInactiveCodexProjection = (previousCustomModels) => { + if (settingsBag.settingsProvider === "codex") { + return false; + } + const savedProviderModel = settingsBag.savedProviderModel && typeof settingsBag.savedProviderModel === "object" ? settingsBag.savedProviderModel : {}; + const currentSavedModel = typeof savedProviderModel.codex === "string" ? savedProviderModel.codex : ""; + if (!currentSavedModel) { + return false; + } + const previousCustomModelIds = new Set(parseConfiguredCustomModelIds2(previousCustomModels)); + if (!previousCustomModelIds.has(currentSavedModel)) { + return false; + } + const nextSavedModel = resolveCodexModelSelection(settingsBag, currentSavedModel); + if (!nextSavedModel || nextSavedModel === currentSavedModel) { + return false; + } + settingsBag.savedProviderModel = { + ...savedProviderModel, + codex: nextSavedModel + }; + return true; + }; + const commitCustomModels = async () => { + const previousCustomModels = savedCustomModels; + const previousModel = typeof settingsBag.model === "string" ? settingsBag.model : ""; + const previousTitleModel = typeof settingsBag.titleGenerationModel === "string" ? settingsBag.titleGenerationModel : ""; + if (pendingCustomModels !== savedCustomModels) { + updateCodexProviderSettings(settingsBag, { customModels: pendingCustomModels }); + savedCustomModels = pendingCustomModels; + } + reconcileActiveCodexModelSelection(); + const didReconcileInactiveProjection = reconcileInactiveCodexProjection(previousCustomModels); + const didReconcileTitleModel = ProviderSettingsCoordinator.reconcileTitleGenerationModelSelection(settingsBag); + const nextModel = typeof settingsBag.model === "string" ? settingsBag.model : ""; + const nextTitleModel = typeof settingsBag.titleGenerationModel === "string" ? settingsBag.titleGenerationModel : ""; + const didModelSelectionChange = previousModel !== nextModel; + const didCustomModelsChange = previousCustomModels !== savedCustomModels; + if (!didCustomModelsChange && !didModelSelectionChange && !didReconcileInactiveProjection && !didReconcileTitleModel && previousTitleModel === nextTitleModel) { + return; + } + await context.plugin.saveSettings(); + context.refreshModelSelectors(); + }; + text.setPlaceholder("gpt-5.4\ngpt-5.3-codex-spark").setValue(codexSettings.customModels).onChange((value) => { + pendingCustomModels = value; + }); + text.inputEl.rows = 4; + text.inputEl.cols = 40; + text.inputEl.addEventListener("blur", () => { + void commitCustomModels(); + }); + }); + new import_obsidian17.Setting(container).setName("Reasoning summary").setDesc("Show a summary of the model's reasoning process in the thinking block.").addDropdown((dropdown) => { + for (const opt of SUMMARY_OPTIONS) { + dropdown.addOption(opt.value, opt.label); + } + dropdown.setValue(codexSettings.reasoningSummary); + dropdown.onChange(async (value) => { + updateCodexProviderSettings( + settingsBag, + { reasoningSummary: value } + ); + await context.plugin.saveSettings(); + }); + }); + const codexCatalog = codexWorkspace.commandCatalog; + if (codexCatalog) { + new import_obsidian17.Setting(container).setName("Codex skills").setHeading(); + const skillsDesc = container.createDiv({ cls: "claudian-sp-settings-desc" }); + skillsDesc.createEl("p", { + cls: "setting-item-description", + text: "Manage vault-level Codex skills stored in .codex/skills/ or .agents/skills/. Home-level skills are excluded here." + }); + const skillsContainer = container.createDiv({ cls: "claudian-slash-commands-container" }); + new CodexSkillSettings(skillsContainer, codexCatalog, context.plugin.app); + } + context.renderHiddenProviderCommandSetting(container, "codex", { + name: "Hidden Skills", + desc: "Hide specific Codex skills from the dropdown. Enter skill names without the leading $, one per line.", + placeholder: "analyze\nexplain\nfix" + }); + new import_obsidian17.Setting(container).setName("Codex subagents").setHeading(); + const subagentDesc = container.createDiv({ cls: "claudian-sp-settings-desc" }); + subagentDesc.createEl("p", { + cls: "setting-item-description", + text: "Manage vault-level Codex subagents stored in .codex/agents/. Each TOML file defines one custom agent." + }); + const subagentContainer = container.createDiv({ cls: "claudian-slash-commands-container" }); + new CodexSubagentSettings(subagentContainer, codexWorkspace.subagentStorage, context.plugin.app, () => { + var _a5; + void ((_a5 = codexWorkspace.refreshAgentMentions) == null ? void 0 : _a5.call(codexWorkspace)); + }); + new import_obsidian17.Setting(container).setName(t10("settings.mcpServers.name")).setHeading(); + const mcpNotice = container.createDiv({ cls: "claudian-mcp-settings-desc" }); + const mcpDesc = mcpNotice.createEl("p", { cls: "setting-item-description" }); + mcpDesc.appendText("Codex manages MCP servers via its own CLI. Configure with "); + mcpDesc.createEl("code").appendText("codex mcp"); + mcpDesc.appendText(" and they will be available in Claudian. "); + mcpDesc.createEl("a", { + text: "Learn more", + href: "https://developers.openai.com/codex/mcp" + }); + renderEnvironmentSettingsSection({ + container, + plugin: context.plugin, + scope: "provider:codex", + heading: t10("settings.environment"), + name: "Codex environment", + desc: "Codex-owned runtime variables only. Use this for OPENAI_* and CODEX_* settings. If Codex auto-detection needs help, add its install directory to shared PATH instead of this provider section.", + placeholder: `OPENAI_API_KEY=your-key +OPENAI_BASE_URL=https://api.openai.com/v1 +OPENAI_MODEL=${DEFAULT_CODEX_PRIMARY_MODEL} +CODEX_SANDBOX=workspace-write`, + renderCustomContextLimits: (target) => context.renderCustomContextLimits(target, "codex") + }); + } +}; + +// src/providers/codex/app/CodexWorkspaceServices.ts +function createCodexCliResolver() { + return new CodexCliResolver(); +} +async function createCodexWorkspaceServices(plugin, vaultAdapter, homeAdapter) { + const subagentStorage = new CodexSubagentStorage(vaultAdapter); + const agentMentionProvider = new CodexAgentMentionProvider(subagentStorage); + await agentMentionProvider.loadAgents(); + const skillListProvider = new CodexSkillListingService(plugin); + const commandCatalog = new CodexSkillCatalog( + new CodexSkillStorage( + vaultAdapter, + homeAdapter + ), + skillListProvider, + getVaultPath(plugin.app) + ); + return { + subagentStorage, + commandCatalog, + agentMentionProvider, + cliResolver: createCodexCliResolver(), + settingsTabRenderer: codexSettingsTabRenderer, + refreshAgentMentions: async () => { + await agentMentionProvider.loadAgents(); + } + }; +} +var codexWorkspaceRegistration = { + initialize: async ({ plugin, vaultAdapter, homeAdapter }) => createCodexWorkspaceServices( + plugin, + vaultAdapter, + homeAdapter + ) +}; +function getCodexWorkspaceServices() { + return ProviderWorkspaceRegistry.requireServices("codex"); +} + +// src/core/auxiliary/QueryBackedInlineEditService.ts +var QueryBackedInlineEditService = class { + constructor(runner) { + this.runner = runner; + this.abortController = null; + this.hasConversation = false; + } + setModelOverride(model) { + const trimmed = model == null ? void 0 : model.trim(); + this.modelOverride = trimmed ? trimmed : void 0; + } + resetConversation() { + this.runner.reset(); + this.hasConversation = false; + } + async editText(request) { + this.resetConversation(); + return this.sendMessage(buildInlineEditPrompt(request)); + } + async continueConversation(message, contextFiles) { + if (!this.hasConversation) { + return { success: false, error: "No active conversation to continue" }; + } + let prompt = message; + if (contextFiles && contextFiles.length > 0) { + prompt = appendContextFiles(message, contextFiles); + } + return this.sendMessage(prompt); + } + cancel() { + var _a5; + (_a5 = this.abortController) == null ? void 0 : _a5.abort(); + this.abortController = null; + } + async sendMessage(prompt) { + this.abortController = new AbortController(); + try { + const text = await this.runner.query({ + abortController: this.abortController, + model: this.modelOverride, + systemPrompt: getInlineEditSystemPrompt() + }, prompt); + this.hasConversation = true; + return parseInlineEditResponse(text); + } catch (error48) { + return { + success: false, + error: error48 instanceof Error ? error48.message : "Unknown error" + }; + } finally { + this.abortController = null; + } + } +}; + +// src/providers/codex/runtime/CodexAuxQueryRunner.ts +var CodexAuxQueryRunner = class { + constructor(plugin) { + this.plugin = plugin; + this.process = null; + this.transport = null; + this.threadId = null; + this.launchSpec = null; + } + async query(config2, prompt) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i; + if (!this.process || !this.transport) { + await this.startProcess(); + } + if (!this.threadId) { + const model = (_a5 = config2.model) != null ? _a5 : this.resolveProviderModel(); + const result = await this.transport.request("thread/start", { + model, + cwd: (_c2 = (_b3 = this.launchSpec) == null ? void 0 : _b3.targetCwd) != null ? _c2 : process.cwd(), + approvalPolicy: "never", + sandbox: "read-only", + baseInstructions: config2.systemPrompt, + experimentalRawEvents: true, + persistExtendedHistory: false + }); + this.threadId = result.thread.id; + } + let accumulatedText = ""; + let turnError = null; + let resolveWait = null; + const donePromise = new Promise((resolve8) => { + resolveWait = resolve8; + }); + this.transport.onNotification("item/agentMessage/delta", (params) => { + var _a6; + const p = params; + accumulatedText += p.delta; + (_a6 = config2.onTextChunk) == null ? void 0 : _a6.call(config2, accumulatedText); + }); + this.transport.onNotification("turn/completed", (params) => { + const p = params; + if (p.turn.status === "failed" && p.turn.error) { + turnError = p.turn.error.message; + } + resolveWait == null ? void 0 : resolveWait(); + }); + this.transport.onNotification("error", (params) => { + const p = params; + if (!p.willRetry) { + turnError = p.error.message; + resolveWait == null ? void 0 : resolveWait(); + } + }); + const exitHandler = () => { + if (!turnError) turnError = "Codex app-server process exited unexpectedly"; + resolveWait == null ? void 0 : resolveWait(); + }; + this.process.onExit(exitHandler); + let turnId = null; + const abortHandler = () => { + if (this.transport && this.threadId && turnId) { + this.transport.request("turn/interrupt", { + threadId: this.threadId, + turnId + }).catch(() => { + }); + } + resolveWait == null ? void 0 : resolveWait(); + }; + (_d = config2.abortController) == null ? void 0 : _d.signal.addEventListener("abort", abortHandler, { once: true }); + if ((_e2 = config2.abortController) == null ? void 0 : _e2.signal.aborted) { + config2.abortController.signal.removeEventListener("abort", abortHandler); + (_f2 = this.process) == null ? void 0 : _f2.offExit(exitHandler); + throw new Error("Cancelled"); + } + const turnResult = await this.transport.request("turn/start", { + threadId: this.threadId, + input: [{ type: "text", text: prompt }], + model: config2.model + }); + turnId = turnResult.turn.id; + try { + await donePromise; + } finally { + (_g = config2.abortController) == null ? void 0 : _g.signal.removeEventListener("abort", abortHandler); + (_h2 = this.process) == null ? void 0 : _h2.offExit(exitHandler); + } + if ((_i = config2.abortController) == null ? void 0 : _i.signal.aborted) { + throw new Error("Cancelled"); + } + if (turnError) { + throw new Error(turnError); + } + return accumulatedText; + } + reset() { + this.threadId = null; + this.launchSpec = null; + if (this.transport) { + this.transport.dispose(); + this.transport = null; + } + if (this.process) { + this.process.shutdown().catch(() => { + }); + this.process = null; + } + } + resolveProviderModel() { + var _a5; + const providerSettings = ProviderSettingsCoordinator.getProviderSettingsSnapshot( + this.plugin.settings, + "codex" + ); + return (_a5 = providerSettings.model) != null ? _a5 : DEFAULT_CODEX_PRIMARY_MODEL; + } + async startProcess() { + this.launchSpec = resolveCodexAppServerLaunchSpec(this.plugin, "codex"); + this.process = new CodexAppServerProcess(this.launchSpec); + this.process.start(); + this.transport = new CodexRpcTransport(this.process); + this.transport.start(); + const initializeResult = await this.transport.request("initialize", { + clientInfo: { name: "claudian-aux", version: "1.0.0" }, + capabilities: { experimentalApi: true } + }); + createCodexRuntimeContext(this.launchSpec, initializeResult); + this.transport.notify("initialized"); + } +}; + +// src/providers/codex/auxiliary/CodexInlineEditService.ts +var CodexInlineEditService = class extends QueryBackedInlineEditService { + constructor(plugin) { + super(new CodexAuxQueryRunner(plugin)); + } +}; + +// src/core/auxiliary/QueryBackedInstructionRefineService.ts +var QueryBackedInstructionRefineService = class { + constructor(runner) { + this.runner = runner; + this.abortController = null; + this.existingInstructions = ""; + this.hasConversation = false; + } + setModelOverride(model) { + const trimmed = model == null ? void 0 : model.trim(); + this.modelOverride = trimmed ? trimmed : void 0; + } + resetConversation() { + this.runner.reset(); + this.hasConversation = false; + } + async refineInstruction(rawInstruction, existingInstructions, onProgress) { + this.resetConversation(); + this.existingInstructions = existingInstructions; + return this.sendMessage(`Please refine this instruction: "${rawInstruction}"`, onProgress); + } + async continueConversation(message, onProgress) { + if (!this.hasConversation) { + return { success: false, error: "No active conversation to continue" }; + } + return this.sendMessage(message, onProgress); + } + cancel() { + var _a5; + (_a5 = this.abortController) == null ? void 0 : _a5.abort(); + this.abortController = null; + } + async sendMessage(prompt, onProgress) { + this.abortController = new AbortController(); + try { + const text = await this.runner.query({ + abortController: this.abortController, + model: this.modelOverride, + onTextChunk: onProgress ? (accumulatedText) => onProgress(parseInstructionRefineResponse(accumulatedText)) : void 0, + systemPrompt: buildRefineSystemPrompt(this.existingInstructions) + }, prompt); + this.hasConversation = true; + return parseInstructionRefineResponse(text); + } catch (error48) { + return { + success: false, + error: error48 instanceof Error ? error48.message : "Unknown error" + }; + } finally { + this.abortController = null; + } + } +}; + +// src/providers/codex/auxiliary/CodexInstructionRefineService.ts +var CodexInstructionRefineService = class extends QueryBackedInstructionRefineService { + constructor(plugin) { + super(new CodexAuxQueryRunner(plugin)); + } +}; + +// src/providers/codex/auxiliary/CodexTaskResultInterpreter.ts +var CodexTaskResultInterpreter = class { + hasAsyncLaunchMarker(_toolUseResult) { + return false; + } + extractAgentId(_toolUseResult) { + return null; + } + extractStructuredResult(_toolUseResult) { + return null; + } + resolveTerminalStatus(_toolUseResult, fallbackStatus) { + return fallbackStatus; + } + extractTagValue(_payload, _tagName) { + return null; + } +}; + +// src/core/auxiliary/QueryBackedTitleGenerationService.ts +var QueryBackedTitleGenerationService = class { + constructor(options) { + this.options = options; + this.activeGenerations = /* @__PURE__ */ new Map(); + } + async generateTitle(conversationId, userMessage, callback) { + var _a5, _b3; + const existing = this.activeGenerations.get(conversationId); + if (existing) { + existing.abortController.abort(); + existing.runner.reset(); + } + const abortController = new AbortController(); + const runner = this.options.createRunner(); + const generation = { abortController, runner }; + this.activeGenerations.set(conversationId, generation); + try { + const text = await runner.query({ + abortController, + model: (_b3 = (_a5 = this.options).resolveModel) == null ? void 0 : _b3.call(_a5), + systemPrompt: TITLE_GENERATION_SYSTEM_PROMPT + }, buildTitleGenerationPrompt(userMessage)); + const title = parseTitleGenerationResponse(text); + await this.safeCallback( + callback, + conversationId, + title ? { success: true, title } : { success: false, error: "Failed to parse title from response" } + ); + } catch (error48) { + await this.safeCallback(callback, conversationId, { + success: false, + error: error48 instanceof Error ? error48.message : "Unknown error" + }); + } finally { + runner.reset(); + if (this.activeGenerations.get(conversationId) === generation) { + this.activeGenerations.delete(conversationId); + } + } + } + cancel() { + for (const active of this.activeGenerations.values()) { + active.abortController.abort(); + active.runner.reset(); + } + this.activeGenerations.clear(); + } + async safeCallback(callback, conversationId, result) { + try { + await callback(conversationId, result); + } catch (e2) { + } + } +}; + +// src/providers/codex/ui/CodexChatUIConfig.ts +var EFFORT_LEVELS2 = [ + { value: "low", label: "Low" }, + { value: "medium", label: "Medium" }, + { value: "high", label: "High" }, + { value: "xhigh", label: "XHigh" } +]; +var CODEX_PERMISSION_MODE_TOGGLE = { + inactiveValue: "normal", + inactiveLabel: "Safe", + activeValue: "yolo", + activeLabel: "YOLO", + planValue: "plan", + planLabel: "Plan" +}; +var CODEX_SERVICE_TIER_TOGGLE = { + inactiveValue: "default", + inactiveLabel: "Standard", + activeValue: "fast", + activeLabel: "Fast", + description: FAST_TIER_CODEX_DESCRIPTION +}; +var DEFAULT_CONTEXT_WINDOW = 2e5; +function looksLikeCodexModel(model) { + return /^gpt-/i.test(model) || /^o\d/i.test(model); +} +var codexChatUIConfig = { + getModelOptions(settings11) { + return getCodexModelOptions(settings11); + }, + ownsModel(model, settings11) { + if (getCodexModelOptions(settings11).some((option) => option.value === model)) { + return true; + } + return looksLikeCodexModel(model); + }, + isAdaptiveReasoningModel(_model, _settings) { + return true; + }, + getReasoningOptions(_model, _settings) { + return [...EFFORT_LEVELS2]; + }, + getDefaultReasoningValue(_model, _settings) { + return "medium"; + }, + getContextWindowSize() { + return DEFAULT_CONTEXT_WINDOW; + }, + isDefaultModel(model) { + return DEFAULT_CODEX_MODEL_SET.has(model); + }, + applyModelDefaults(model, settings11) { + if (!settings11 || typeof settings11 !== "object") { + return; + } + applyCodexModelDefaults(model, settings11); + }, + normalizeModelVariant(model, settings11) { + if (getCodexModelOptions(settings11).some((option) => option.value === model)) { + return model; + } + return DEFAULT_CODEX_PRIMARY_MODEL; + }, + getCustomModelIds(envVars) { + const ids = /* @__PURE__ */ new Set(); + if (envVars.OPENAI_MODEL && !DEFAULT_CODEX_MODEL_SET.has(envVars.OPENAI_MODEL)) { + ids.add(envVars.OPENAI_MODEL); + } + return ids; + }, + getPermissionModeToggle() { + return CODEX_PERMISSION_MODE_TOGGLE; + }, + getServiceTierToggle(settings11) { + return settings11.model === FAST_TIER_CODEX_MODEL ? CODEX_SERVICE_TIER_TOGGLE : null; + }, + getProviderIcon() { + return OPENAI_PROVIDER_ICON; + } +}; + +// src/providers/codex/auxiliary/CodexTitleGenerationService.ts +var CodexTitleGenerationService = class extends QueryBackedTitleGenerationService { + constructor(plugin) { + super({ + createRunner: () => new CodexAuxQueryRunner(plugin), + resolveModel: () => { + const settings11 = plugin.settings; + const titleModel = typeof settings11.titleGenerationModel === "string" ? settings11.titleGenerationModel : ""; + return codexChatUIConfig.ownsModel(titleModel, settings11) ? titleModel : void 0; + } + }); + } +}; + +// src/providers/codex/capabilities.ts +var CODEX_PROVIDER_CAPABILITIES = Object.freeze({ + providerId: "codex", + supportsPersistentRuntime: true, + supportsNativeHistory: true, + supportsPlanMode: true, + supportsRewind: false, + supportsFork: true, + supportsProviderCommands: false, + supportsImageAttachments: true, + supportsInstructionMode: true, + supportsMcpTools: false, + supportsTurnSteer: true, + reasoningControl: "effort" +}); + +// src/providers/codex/env/CodexSettingsReconciler.ts +init_env(); + +// src/providers/codex/types/index.ts +function getCodexState(providerState) { + return providerState != null ? providerState : {}; +} + +// src/providers/codex/env/CodexSettingsReconciler.ts +var ENV_HASH_KEYS = ["OPENAI_MODEL", "OPENAI_BASE_URL", "OPENAI_API_KEY"]; +function computeCodexEnvHash(envText) { + const envVars = parseEnvironmentVariables(envText || ""); + return ENV_HASH_KEYS.filter((key) => envVars[key]).map((key) => `${key}=${envVars[key]}`).sort().join("|"); +} +var codexSettingsReconciler = { + reconcileModelWithEnvironment(settings11, conversations) { + const envText = getRuntimeEnvironmentText(settings11, "codex"); + const currentHash = computeCodexEnvHash(envText); + const savedHash = getCodexProviderSettings(settings11).environmentHash; + if (currentHash === savedHash) { + return { changed: false, invalidatedConversations: [] }; + } + const invalidatedConversations = []; + for (const conv of conversations) { + const state = getCodexState(conv.providerState); + if (conv.providerId === "codex" && (conv.sessionId || state.threadId)) { + conv.sessionId = null; + conv.providerState = void 0; + invalidatedConversations.push(conv); + } + } + const currentModel = typeof settings11.model === "string" ? settings11.model : ""; + const nextModel = resolveCodexModelSelection(settings11, currentModel); + if (nextModel) { + settings11.model = nextModel; + } + updateCodexProviderSettings(settings11, { environmentHash: currentHash }); + return { changed: true, invalidatedConversations }; + }, + normalizeModelVariantSettings(settings11) { + const model = settings11.model; + if (!model) { + return false; + } + const normalizedModel = codexChatUIConfig.normalizeModelVariant(model, settings11); + if (normalizedModel === model) { + return false; + } + settings11.model = normalizedModel; + return true; + } +}; + +// src/providers/codex/history/CodexConversationHistoryService.ts +var fs15 = __toESM(require("fs")); + +// src/providers/codex/history/CodexHistoryStore.ts +var fs14 = __toESM(require("fs")); +var os9 = __toESM(require("os")); +var path14 = __toESM(require("path")); + +// src/providers/codex/normalization/codexToolNormalization.ts +var TOOL_NAME_MAP = { + command_execution: "Bash", + shell_command: "Bash", + shell: "Bash", + exec_command: "Bash", + update_plan: "TodoWrite", + request_user_input: "AskUserQuestion", + view_image: "Read", + web_search: "WebSearch", + web_search_call: "WebSearch", + file_change: "apply_patch" +}; +var NATIVE_TOOLS = /* @__PURE__ */ new Set([ + "apply_patch", + "write_stdin", + "spawn_agent", + "send_input", + "wait", + "wait_agent", + "resume_agent", + "close_agent" +]); +function normalizeCodexToolName(rawName) { + var _a5; + if (!rawName) return "tool"; + if (NATIVE_TOOLS.has(rawName)) return rawName; + return (_a5 = TOOL_NAME_MAP[rawName]) != null ? _a5 : rawName; +} +function normalizeCodexToolInput(rawName, input) { + var _a5, _b3, _c2; + switch (rawName) { + case "command_execution": + case "shell_command": + case "shell": + case "exec_command": + return { command: normalizeCommandValue((_b3 = (_a5 = input.command) != null ? _a5 : input.cmd) != null ? _b3 : "") }; + case "update_plan": + return { todos: normalizeUpdatePlanTodos(input) }; + case "request_user_input": + return { questions: normalizeQuestions(input) }; + case "view_image": + return { + ...input, + file_path: stringifyCodexValue((_c2 = input.path) != null ? _c2 : input.file_path) + }; + case "web_search": + case "web_search_call": + return normalizeWebSearchInput(input); + case "apply_patch": + return normalizeApplyPatchInput(input); + default: + return input; + } +} +function normalizeUpdatePlanTodos(input) { + const plan = input.plan; + if (!Array.isArray(plan)) return []; + return plan.map((entry) => { + var _a5, _b3; + if (!entry || typeof entry !== "object") return { id: "", title: "", status: "pending" }; + const item = entry; + const text = stringifyCodexValue((_b3 = (_a5 = item.step) != null ? _a5 : item.title) != null ? _b3 : item.content); + return { + id: stringifyCodexValue(item.id), + content: text, + activeForm: text, + status: stringifyCodexValue(item.status) || "pending" + }; + }); +} +function normalizeQuestions(input) { + const questions = input.questions; + if (!Array.isArray(questions)) return []; + return questions.map((entry, index) => { + var _a5; + if (!entry || typeof entry !== "object") { + return { + question: `Question ${index + 1}`, + header: `Q${index + 1}`, + options: [], + multiSelect: false + }; + } + const item = entry; + const options = Array.isArray(item.options) ? item.options.map((option) => { + if (typeof option === "string") { + return { label: option, description: "" }; + } + if (!option || typeof option !== "object") { + return null; + } + const raw = option; + const label = typeof raw.label === "string" ? raw.label : ""; + const description = typeof raw.description === "string" ? raw.description : ""; + if (!label) return null; + return { label, description }; + }).filter((option) => option !== null) : []; + return { + question: stringifyCodexValue(item.question) || `Question ${index + 1}`, + ...item.id ? { id: stringifyCodexValue(item.id) } : {}, + header: typeof item.header === "string" && item.header.trim() ? String(item.header) : `Q${index + 1}`, + options, + multiSelect: Boolean((_a5 = item.multiSelect) != null ? _a5 : item.multi_select) + }; + }); +} +function normalizeCommandValue(value) { + if (typeof value === "string") return value; + if (Array.isArray(value)) { + return value.map(stringifyCodexValue).filter(Boolean).join(" ").trim(); + } + return stringifyCodexValue(value); +} +function stringifyCodexValue(value) { + if (typeof value === "string") return value; + if (typeof value === "number" || typeof value === "boolean") return String(value); + if (value === null || value === void 0) return ""; + try { + return JSON.stringify(value); + } catch (e2) { + return ""; + } +} +function normalizeWebSearchInput(input) { + var _a5; + const action = input.action && typeof input.action === "object" ? input.action : {}; + const queries = normalizeStringArray2((_a5 = action.queries) != null ? _a5 : input.queries); + const query = firstNonEmptyString(action.query, input.query, queries[0]); + const url2 = firstNonEmptyString(action.url, input.url); + const pattern = firstNonEmptyString(action.pattern, input.pattern); + const explicitType = firstNonEmptyString(action.type, input.actionType, input.action_type); + const actionType = explicitType || (url2 && pattern ? "find_in_page" : url2 ? "open_page" : query || queries.length > 0 ? "search" : ""); + const normalized = {}; + if (actionType) normalized.actionType = actionType; + if (query) normalized.query = query; + if (queries.length > 0) normalized.queries = queries; + if (url2) normalized.url = url2; + if (pattern) normalized.pattern = pattern; + return normalized; +} +function normalizeApplyPatchInput(input) { + const patch = firstNonEmptyString(input.patch, input.raw, input.value); + if (!patch) return input; + const normalized = { ...input, patch }; + delete normalized.raw; + delete normalized.value; + return normalized; +} +function firstNonEmptyString(...values) { + for (const value of values) { + if (typeof value === "string" && value.trim()) { + return value; + } + } + return ""; +} +function normalizeStringArray2(value) { + if (!Array.isArray(value)) return []; + const uniqueValues = /* @__PURE__ */ new Set(); + for (const entry of value) { + if (typeof entry !== "string") continue; + const trimmed = entry.trim(); + if (!trimmed) continue; + uniqueValues.add(trimmed); + } + return [...uniqueValues]; +} +function normalizeCodexMcpToolName(server, tool) { + const serverName = typeof server === "string" ? server : ""; + const toolName = typeof tool === "string" ? tool : ""; + if (!serverName && !toolName) return "tool"; + return `mcp__${serverName}__${toolName}`; +} +function normalizeCodexMcpToolInput(rawArguments) { + if (typeof rawArguments === "string") { + return parseCodexArguments(rawArguments); + } + if (rawArguments && typeof rawArguments === "object" && !Array.isArray(rawArguments)) { + return rawArguments; + } + return {}; +} +function normalizeCodexMcpToolState(rawStatus, resultPayload, rawError) { + const status = typeof rawStatus === "string" ? rawStatus : ""; + const error48 = typeof rawError === "string" ? rawError : ""; + const resultText = extractCodexMcpResultText(resultPayload); + const isTerminalStatus = status === "completed" || status === "failed" || status === "error" || status === "cancelled"; + const isTerminal2 = isTerminalStatus || Boolean(error48) || Boolean(resultText); + const isError = Boolean(error48) || status === "failed" || status === "error" || status === "cancelled"; + let result = error48 || resultText; + if (!result && isTerminalStatus) { + result = status === "completed" ? "Completed" : "Failed"; + } + return { + isTerminal: isTerminal2, + isError, + status: isTerminal2 ? isError ? "error" : "completed" : "running", + ...result ? { result } : {} + }; +} +function extractCodexMcpResultText(resultPayload) { + if (!resultPayload || typeof resultPayload !== "object") return ""; + const content = resultPayload.content; + if (!Array.isArray(content)) return ""; + return content.map((item) => typeof (item == null ? void 0 : item.text) === "string" ? item.text : "").filter(Boolean).join("\n"); +} +var TERMINAL_RESULT_TOOLS = /* @__PURE__ */ new Set([ + "Bash", + "write_stdin" +]); +function normalizeCodexToolResult(normalizedName, rawResult) { + if (!rawResult) return rawResult; + if (!TERMINAL_RESULT_TOOLS.has(normalizedName)) return rawResult; + return unwrapTerminalResult(rawResult); +} +function unwrapTerminalResult(raw) { + let result = raw; + const trimmed = result.trim(); + if (trimmed.startsWith("{")) { + try { + const parsed = JSON.parse(trimmed); + if (typeof parsed.output === "string") { + result = parsed.output; + } + } catch (e2) { + } + } + const outputMarker = "Output:\n"; + const markerIndex = result.indexOf(outputMarker); + if (markerIndex >= 0) { + result = result.slice(markerIndex + outputMarker.length); + } + return result; +} +function isCodexToolOutputError(output) { + const exitCodeMatch = output.match(/(?:Exit code:|Process exited with code)\s*(\d+)/i); + if (exitCodeMatch) { + return Number(exitCodeMatch[1]) !== 0; + } + const trimmed = output.trim(); + if (/^[Ee]rror:/.test(trimmed)) return true; + if (trimmed.startsWith("{")) { + try { + const parsed = JSON.parse(trimmed); + if ("error" in parsed) return true; + } catch (e2) { + } + } + return false; +} +function parseCodexArguments(raw) { + if (!raw) return {}; + try { + const parsed = JSON.parse(raw); + if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) { + return parsed; + } + return { value: parsed }; + } catch (e2) { + return { raw }; + } +} + +// src/providers/codex/history/CodexHistoryStore.ts +function newBubble(timestamp) { + return { + contentChunks: [], + thinkingChunks: [], + toolCalls: [], + toolIndexesById: /* @__PURE__ */ new Map(), + contentBlocks: [], + startedAt: timestamp, + lastEventAt: timestamp, + interrupted: false + }; +} +function newTurnState(id, timestamp) { + return { + id, + startedAt: timestamp, + lastEventAt: timestamp, + userChunks: [], + assistantBubbles: [], + activeBubbleIndex: null + }; +} +function createPersistedParseContext() { + return { + turns: /* @__PURE__ */ new Map(), + turnOrder: [], + currentTurnId: null, + toolCallToTurn: /* @__PURE__ */ new Map(), + suppressedToolOutputIds: /* @__PURE__ */ new Set(), + terminalSessionToCommandId: /* @__PURE__ */ new Map(), + stdinCallToCommandId: /* @__PURE__ */ new Map(), + turnCounter: 0 + }; +} +function ensureTurn(turns, turnOrder, preferredTurnId, currentTurnId, timestamp) { + const id = currentTurnId != null ? currentTurnId : preferredTurnId; + const existing = turns.get(id); + if (existing) { + if (timestamp > 0 && timestamp > existing.lastEventAt) { + existing.lastEventAt = timestamp; + } + return existing; + } + const turn = newTurnState(id, timestamp); + turns.set(id, turn); + turnOrder.push(id); + return turn; +} +function ensureAssistantBubble(turn, timestamp) { + if (turn.activeBubbleIndex !== null) { + const bubble2 = turn.assistantBubbles[turn.activeBubbleIndex]; + if (timestamp > 0 && timestamp > bubble2.lastEventAt) { + bubble2.lastEventAt = timestamp; + } + return bubble2; + } + const bubble = newBubble(timestamp); + turn.assistantBubbles.push(bubble); + turn.activeBubbleIndex = turn.assistantBubbles.length - 1; + return bubble; +} +function closeAssistantBubble(turn) { + turn.activeBubbleIndex = null; +} +function pushToolInvocation(bubble, toolCall) { + const existingIndex = bubble.toolIndexesById.get(toolCall.id); + if (existingIndex !== void 0) { + bubble.toolCalls[existingIndex] = toolCall; + return; + } + bubble.toolIndexesById.set(toolCall.id, bubble.toolCalls.length); + bubble.toolCalls.push(toolCall); + bubble.contentBlocks.push({ type: "tool_use", toolId: toolCall.id }); +} +function appendUniqueChunk(chunks, value) { + const trimmed = value.trim(); + if (!trimmed) return; + if (chunks[chunks.length - 1] === trimmed) return; + chunks.push(trimmed); +} +function replaceLatestChunk(chunks, value) { + const trimmed = value.trim(); + if (!trimmed) return; + chunks.length = 0; + chunks.push(trimmed); +} +function appendUserChunk(turn, value, timestamp) { + const chunkCountBefore = turn.userChunks.length; + appendUniqueChunk(turn.userChunks, value); + if (turn.userChunks.length > chunkCountBefore && !turn.userTimestamp && timestamp > 0) { + turn.userTimestamp = timestamp; + } +} +function newTurn(timestamp = 0) { + return { + assistantText: "", + thinkingText: "", + toolCalls: [], + contentBlocks: [], + interrupted: false, + timestamp + }; +} +function flushTurn(turn, messages, msgIndex) { + if (!turn.assistantText && !turn.thinkingText && turn.toolCalls.length === 0) { + return msgIndex; + } + const msg = { + id: `codex-msg-${msgIndex}`, + role: "assistant", + content: turn.assistantText, + timestamp: turn.timestamp || Date.now(), + toolCalls: turn.toolCalls.length > 0 ? turn.toolCalls : void 0, + contentBlocks: turn.contentBlocks.length > 0 ? turn.contentBlocks : void 0 + }; + if (turn.interrupted) { + msg.isInterrupt = true; + } + messages.push(msg); + return msgIndex + 1; +} +function setTextBlock(turn, content) { + const index = turn.contentBlocks.findIndex((block) => block.type === "text"); + if (index === -1) { + turn.contentBlocks.push({ type: "text", content }); + return; + } + turn.contentBlocks[index] = { type: "text", content }; +} +function setThinkingBlock(turn, content) { + const normalized = content.trim(); + if (!normalized) { + return; + } + turn.thinkingText = normalized; + const index = turn.contentBlocks.findIndex((block) => block.type === "thinking"); + if (index === -1) { + turn.contentBlocks.push({ type: "thinking", content: normalized }); + return; + } + turn.contentBlocks[index] = { type: "thinking", content: normalized }; +} +function parseTimestamp(value) { + if (typeof value !== "string") { + return 0; + } + const parsed = Date.parse(value); + return Number.isFinite(parsed) ? parsed : 0; +} +function parseSessionRecord(line) { + let parsed; + try { + parsed = JSON.parse(line); + } catch (e2) { + return null; + } + return { + timestamp: parseTimestamp(parsed.timestamp), + type: parsed.type, + event: parsed.event, + payload: parsed.payload + }; +} +var CODEX_SYSTEM_MESSAGE_PREFIXES = [ + "# AGENTS.md instructions", + "", + "", + "" +]; +var CODEX_BRACKET_CONTEXT_PATTERN = /\n\[(?:Current note|Editor selection from|Browser selection from|Canvas selection from)\b/; +function isCodexSystemMessage(text) { + const trimmed = text.trimStart(); + return CODEX_SYSTEM_MESSAGE_PREFIXES.some((prefix) => trimmed.startsWith(prefix)); +} +function extractCodexDisplayContent(text) { + if (!text) return void 0; + const bracketMatch = text.match(CODEX_BRACKET_CONTEXT_PATTERN); + if ((bracketMatch == null ? void 0 : bracketMatch.index) !== void 0) { + return text.substring(0, bracketMatch.index).trim(); + } + return void 0; +} +function extractMessageText(content) { + if (!Array.isArray(content)) { + return ""; + } + return content.map((part) => typeof (part == null ? void 0 : part.text) === "string" ? part.text : "").join(""); +} +function joinTextParts(parts) { + return parts.map((part) => { + if (typeof part === "string") return part; + return typeof (part == null ? void 0 : part.text) === "string" ? part.text : ""; + }).map((part) => part.trim()).filter(Boolean).join("\n\n").trim(); +} +function extractReasoningText(payload) { + if ("summary" in payload && Array.isArray(payload.summary) && payload.summary.length > 0) { + return joinTextParts(payload.summary); + } + if ("content" in payload && Array.isArray(payload.content) && payload.content.length > 0) { + return joinTextParts(payload.content); + } + return typeof payload.text === "string" ? payload.text.trim() : ""; +} +function processLegacyItem(eventType, item, turn) { + var _a5, _b3, _c2, _d, _e2, _f2; + switch (item.type) { + case "agent_message": + if (eventType === "item.completed" || eventType === "item.updated") { + if (item.text) { + turn.assistantText = item.text; + setTextBlock(turn, item.text); + } + } + break; + case "reasoning": + if (eventType === "item.completed" || eventType === "item.updated") { + if (item.text) { + setThinkingBlock(turn, item.text); + } + } + break; + case "command_execution": + if (eventType === "item.started") { + turn.toolCalls.push({ + id: item.id, + name: normalizeCodexToolName(item.type), + input: normalizeCodexToolInput(item.type, { command: (_a5 = item.command) != null ? _a5 : "" }), + status: "running" + }); + turn.contentBlocks.push({ type: "tool_use", toolId: item.id }); + } else if (eventType === "item.completed") { + const tc2 = turn.toolCalls.find((tool) => tool.id === item.id); + if (tc2) { + const rawOutput = (_b3 = item.aggregated_output) != null ? _b3 : ""; + tc2.result = normalizeCodexToolResult(tc2.name, rawOutput); + tc2.status = item.exit_code === 0 ? "completed" : "error"; + } + } + break; + case "file_change": { + const changes = (_c2 = item.changes) != null ? _c2 : []; + if (eventType === "item.started" || eventType === "item.completed") { + const existing = turn.toolCalls.find((tool) => tool.id === item.id); + if (!existing) { + const paths = changes.map((change) => `${change.kind}: ${change.path}`).join(", "); + turn.toolCalls.push({ + id: item.id, + name: normalizeCodexToolName("file_change"), + input: { changes }, + status: item.status === "completed" ? "completed" : "error", + result: paths ? `Applied: ${paths}` : "Applied" + }); + turn.contentBlocks.push({ type: "tool_use", toolId: item.id }); + } else if (eventType === "item.completed") { + existing.status = item.status === "completed" ? "completed" : "error"; + } + } + break; + } + case "web_search": + if (eventType === "item.started") { + turn.toolCalls.push({ + id: item.id, + name: normalizeCodexToolName(item.type), + input: normalizeCodexToolInput(item.type, { query: (_d = item.query) != null ? _d : "" }), + status: "running" + }); + turn.contentBlocks.push({ type: "tool_use", toolId: item.id }); + } else if (eventType === "item.completed") { + const tc2 = turn.toolCalls.find((tool) => tool.id === item.id); + if (tc2) { + tc2.result = "Search complete"; + tc2.status = "completed"; + } + } + break; + case "mcp_tool_call": + if (eventType === "item.started") { + const server = (_e2 = item.server) != null ? _e2 : ""; + const tool = (_f2 = item.tool) != null ? _f2 : ""; + turn.toolCalls.push({ + id: item.id, + name: `mcp__${server}__${tool}`, + input: {}, + status: "running" + }); + turn.contentBlocks.push({ type: "tool_use", toolId: item.id }); + } else if (eventType === "item.completed") { + const tc2 = turn.toolCalls.find((tool) => tool.id === item.id); + if (tc2) { + tc2.status = item.status === "completed" ? "completed" : "error"; + tc2.result = item.status === "completed" ? "Completed" : "Failed"; + } + } + break; + default: + break; + } +} +function nextTurnId(ctx) { + ctx.turnCounter += 1; + return `turn-${ctx.turnCounter}`; +} +function processPersistedToolCall(payload, timestamp, ctx) { + var _a5, _b3; + const callId = payload.call_id; + if (!callId) return; + if (payload.name === "write_stdin") { + const parsedArgs2 = parseCodexArguments((_a5 = payload.arguments) != null ? _a5 : payload.input); + if (isSilentWriteStdinInput(parsedArgs2)) { + const terminalSessionId = readTerminalSessionIdArgument(parsedArgs2); + const parentCallId = terminalSessionId ? ctx.terminalSessionToCommandId.get(terminalSessionId) : void 0; + if (parentCallId) { + ctx.stdinCallToCommandId.set(callId, parentCallId); + } + ctx.suppressedToolOutputIds.add(callId); + return; + } + } + const turn = ensureTurn(ctx.turns, ctx.turnOrder, nextTurnId(ctx), ctx.currentTurnId, timestamp); + const bubble = ensureAssistantBubble(turn, timestamp); + const rawArgs = (_b3 = payload.arguments) != null ? _b3 : payload.input; + const parsedArgs = parseCodexArguments(rawArgs); + const normalizedName = normalizeCodexToolName(payload.name); + const normalizedInput = normalizeCodexToolInput(payload.name, parsedArgs); + const toolCall = { + id: callId, + name: normalizedName, + input: normalizedInput, + status: "running" + }; + pushToolInvocation(bubble, toolCall); + ctx.toolCallToTurn.set(callId, { + turnId: turn.id, + bubbleIndex: turn.activeBubbleIndex + }); +} +function processPersistedToolOutput(payload, timestamp, ctx) { + const callId = payload.call_id; + if (!callId) return; + const rawOutput = typeof payload.output === "string" ? payload.output : Array.isArray(payload.output) ? JSON.stringify(payload.output) : ""; + const parentCommandId = ctx.stdinCallToCommandId.get(callId); + if (parentCommandId) { + const parentToolCall = findPersistedToolCallById(ctx, parentCommandId); + if (parentToolCall) { + applyPersistedToolOutput(parentToolCall, payload.output, rawOutput, ctx, { + allowImplicitCommandCompletion: false + }); + } + ctx.stdinCallToCommandId.delete(callId); + ctx.suppressedToolOutputIds.delete(callId); + return; + } + if (ctx.suppressedToolOutputIds.delete(callId)) { + return; + } + const origin = ctx.toolCallToTurn.get(callId); + if (origin) { + const originTurn = ctx.turns.get(origin.turnId); + if (originTurn && origin.bubbleIndex < originTurn.assistantBubbles.length) { + const originBubble = originTurn.assistantBubbles[origin.bubbleIndex]; + const existing = originBubble.toolCalls.find((tool) => tool.id === callId); + if (existing) { + applyPersistedToolOutput(existing, payload.output, rawOutput, ctx); + return; + } + } + } + if (payload.type === "custom_tool_call_output") { + return; + } + const turn = ensureTurn(ctx.turns, ctx.turnOrder, nextTurnId(ctx), ctx.currentTurnId, timestamp); + const bubble = ensureAssistantBubble(turn, timestamp); + const normalizedResult = normalizeCodexToolResult("tool", rawOutput); + pushToolInvocation(bubble, { + id: callId, + name: "tool", + input: {}, + status: isCodexToolOutputError(rawOutput) ? "error" : "completed", + result: normalizedResult + }); +} +function findPersistedToolCallById(ctx, callId) { + var _a5; + const origin = ctx.toolCallToTurn.get(callId); + if (!origin) { + return null; + } + const turn = ctx.turns.get(origin.turnId); + if (!turn || origin.bubbleIndex >= turn.assistantBubbles.length) { + return null; + } + return (_a5 = turn.assistantBubbles[origin.bubbleIndex].toolCalls.find((tool) => tool.id === callId)) != null ? _a5 : null; +} +function readTerminalSessionIdArgument(input) { + var _a5; + const value = (_a5 = input.session_id) != null ? _a5 : input.sessionId; + if (typeof value === "string" && value) return value; + if (typeof value === "number" && Number.isFinite(value)) return String(value); + return void 0; +} +function isSilentWriteStdinInput(input) { + return typeof input.chars !== "string" || input.chars.length === 0; +} +function appendCommandOutput(previous, next) { + if (!next) return previous != null ? previous : ""; + if (!previous) return next; + if (previous.endsWith("\n") || next.startsWith("\n")) return previous + next; + return `${previous} +${next}`; +} +function readPersistedCommandToolResult(rawOutputText) { + var _a5, _b3; + const output = normalizeCodexToolResult("Bash", rawOutputText); + const exitCodeMatch = rawOutputText.match(/(?:Exit code:|Process exited with code)\s*(-?\d+)/i); + const runningMatch = rawOutputText.match(/Process running with session ID\s*([^\n]+)/i); + return { + output, + status: exitCodeMatch ? "completed" : runningMatch ? "running" : "unknown", + ...exitCodeMatch ? { exitCode: Number((_a5 = exitCodeMatch[1]) != null ? _a5 : 0) } : {}, + ...runningMatch ? { terminalSessionId: ((_b3 = runningMatch[1]) != null ? _b3 : "").trim() } : {} + }; +} +function applyPersistedToolOutput(toolCall, rawOutputValue, rawOutputText, ctx, options = {}) { + if (toolCall.name === "Bash") { + const commandResult = readPersistedCommandToolResult(rawOutputText); + toolCall.result = appendCommandOutput(toolCall.result, commandResult.output); + if (commandResult.terminalSessionId) { + ctx.terminalSessionToCommandId.set(commandResult.terminalSessionId, toolCall.id); + } + if (commandResult.status === "running") { + toolCall.status = "running"; + return; + } + if (commandResult.status === "unknown" && options.allowImplicitCommandCompletion === false) { + return; + } + toolCall.status = commandResult.exitCode !== void 0 ? commandResult.exitCode === 0 ? "completed" : "error" : isCodexToolOutputError(rawOutputText) ? "error" : "completed"; + return; + } + toolCall.result = normalizePersistedToolOutput(toolCall, rawOutputValue, rawOutputText); + toolCall.status = isCodexToolOutputError(rawOutputText) ? "error" : "completed"; +} +function normalizePersistedToolOutput(toolCall, rawOutputValue, rawOutputText) { + if (Array.isArray(rawOutputValue) && toolCall.name === "Read") { + const filePath = toolCall.input.file_path; + if (typeof filePath === "string" && filePath) { + return filePath; + } + } + return normalizeCodexToolResult(toolCall.name, rawOutputText); +} +function processPersistedWebSearchCall(payload, timestamp, lineIndex, ctx) { + var _a5; + const turn = ensureTurn(ctx.turns, ctx.turnOrder, nextTurnId(ctx), ctx.currentTurnId, timestamp); + const bubble = ensureAssistantBubble(turn, timestamp); + const callId = payload.call_id || `tail-ws-${lineIndex}`; + if (bubble.toolIndexesById.has(callId)) return; + const input = normalizeCodexToolInput("web_search_call", { + action: (_a5 = payload.action) != null ? _a5 : {} + }); + const isTerminal2 = payload.status === "completed" || payload.status === "failed" || payload.status === "error" || payload.status === "cancelled"; + const toolCall = { + id: callId, + name: "WebSearch", + input, + status: isTerminal2 ? payload.status === "completed" ? "completed" : "error" : "running", + ...isTerminal2 ? { result: "Search complete" } : {} + }; + pushToolInvocation(bubble, toolCall); + ctx.toolCallToTurn.set(callId, { + turnId: turn.id, + bubbleIndex: turn.assistantBubbles.indexOf(bubble) + }); +} +function processPersistedMcpToolCall(payload, timestamp, ctx) { + const callId = payload.call_id; + if (!callId) return; + const turn = ensureTurn(ctx.turns, ctx.turnOrder, nextTurnId(ctx), ctx.currentTurnId, timestamp); + const bubble = ensureAssistantBubble(turn, timestamp); + if (bubble.toolIndexesById.has(callId)) return; + const normalizedInput = normalizeCodexMcpToolInput(payload.arguments); + const normalizedState = normalizeCodexMcpToolState(payload.status, payload.result, payload.error); + const toolCall = { + id: callId, + name: normalizeCodexMcpToolName(payload.server, payload.tool), + input: normalizedInput, + status: normalizedState.status, + ...normalizedState.result ? { result: normalizedState.result } : {} + }; + pushToolInvocation(bubble, toolCall); + ctx.toolCallToTurn.set(callId, { + turnId: turn.id, + bubbleIndex: turn.activeBubbleIndex + }); +} +function processPersistedPayload(payload, timestamp, lineIndex, ctx) { + if (!(payload == null ? void 0 : payload.type)) { + return; + } + switch (payload.type) { + case "message": { + const messagePayload = payload; + const text = extractMessageText(messagePayload.content); + if (messagePayload.role === "user") { + if (isCodexSystemMessage(text)) break; + if (ctx.currentTurnId) { + const prevTurn = ctx.turns.get(ctx.currentTurnId); + if (prevTurn) closeAssistantBubble(prevTurn); + } + ctx.currentTurnId = null; + const turn = ensureTurn(ctx.turns, ctx.turnOrder, nextTurnId(ctx), null, timestamp); + ctx.currentTurnId = turn.id; + if (text) { + appendUserChunk(turn, text, timestamp); + } + } else if (messagePayload.role === "assistant") { + const turn = ensureTurn(ctx.turns, ctx.turnOrder, nextTurnId(ctx), ctx.currentTurnId, timestamp); + const bubble = ensureAssistantBubble(turn, timestamp); + if (text) { + appendUniqueChunk(bubble.contentChunks, text); + } + } + break; + } + case "reasoning": { + const reasoningPayload = payload; + const text = extractReasoningText(reasoningPayload); + if (!text) break; + const turn = ensureTurn(ctx.turns, ctx.turnOrder, nextTurnId(ctx), ctx.currentTurnId, timestamp); + const bubble = ensureAssistantBubble(turn, timestamp); + appendUniqueChunk(bubble.thinkingChunks, text); + break; + } + case "function_call": + case "custom_tool_call": + processPersistedToolCall(payload, timestamp, ctx); + break; + case "function_call_output": + case "custom_tool_call_output": + processPersistedToolOutput(payload, timestamp, ctx); + break; + case "web_search_call": + processPersistedWebSearchCall(payload, timestamp, lineIndex, ctx); + break; + case "mcp_tool_call": + processPersistedMcpToolCall(payload, timestamp, ctx); + break; + case "compaction": + break; + default: + break; + } +} +function applyCompactedReplacementHistory(payload, timestamp, ctx) { + ctx.turns.clear(); + ctx.turnOrder.length = 0; + ctx.currentTurnId = null; + ctx.toolCallToTurn.clear(); + ctx.suppressedToolOutputIds.clear(); + ctx.terminalSessionToCommandId.clear(); + ctx.stdinCallToCommandId.clear(); + ctx.turnCounter = 0; + const replacementHistory = Array.isArray(payload == null ? void 0 : payload.replacement_history) ? payload.replacement_history : []; + for (const [index, item] of replacementHistory.entries()) { + processPersistedPayload(item, timestamp + index, index, ctx); + } + if (ctx.currentTurnId) { + const turn = ctx.turns.get(ctx.currentTurnId); + if (turn) { + closeAssistantBubble(turn); + } + ctx.currentTurnId = null; + } +} +function extractServerTurnId(payload) { + const turnId = payload.turn_id; + return typeof turnId === "string" ? turnId : void 0; +} +function processEventMsg(payload, timestamp, ctx) { + if (!(payload == null ? void 0 : payload.type)) return; + switch (payload.type) { + case "task_started": { + const serverTurnId = extractServerTurnId(payload); + const id = nextTurnId(ctx); + const turn = ensureTurn(ctx.turns, ctx.turnOrder, id, null, timestamp); + turn.startedAt = timestamp; + if (serverTurnId) turn.serverTurnId = serverTurnId; + ctx.currentTurnId = turn.id; + break; + } + case "task_complete": { + if (ctx.currentTurnId) { + const turn = ctx.turns.get(ctx.currentTurnId); + if (turn) { + turn.completedAt = timestamp; + turn.completed = true; + closeAssistantBubble(turn); + const serverTurnId = extractServerTurnId(payload); + if (serverTurnId && !turn.serverTurnId) turn.serverTurnId = serverTurnId; + } + } + ctx.currentTurnId = null; + break; + } + case "turn_aborted": { + if (ctx.currentTurnId) { + const turn = ctx.turns.get(ctx.currentTurnId); + if (turn) { + const bubble = ensureAssistantBubble(turn, timestamp); + bubble.interrupted = true; + closeAssistantBubble(turn); + turn.completedAt = timestamp; + } + } + ctx.currentTurnId = null; + break; + } + case "user_message": { + const turn = ensureTurn(ctx.turns, ctx.turnOrder, nextTurnId(ctx), ctx.currentTurnId, timestamp); + const msg = payload.message; + if (typeof msg === "string" && msg.trim()) { + appendUserChunk(turn, msg, timestamp); + } + break; + } + case "agent_message": { + const turn = ensureTurn(ctx.turns, ctx.turnOrder, nextTurnId(ctx), ctx.currentTurnId, timestamp); + const bubble = ensureAssistantBubble(turn, timestamp); + const msg = payload.message; + if (typeof msg === "string") { + appendUniqueChunk(bubble.contentChunks, msg); + } + break; + } + case "agent_reasoning": { + const text = extractReasoningText(payload); + if (!text) break; + const turn = ensureTurn(ctx.turns, ctx.turnOrder, nextTurnId(ctx), ctx.currentTurnId, timestamp); + const bubble = ensureAssistantBubble(turn, timestamp); + appendUniqueChunk(bubble.thinkingChunks, text); + break; + } + case "context_compacted": { + if (ctx.currentTurnId) { + const prevTurn = ctx.turns.get(ctx.currentTurnId); + if (prevTurn) closeAssistantBubble(prevTurn); + } + const id = nextTurnId(ctx); + const turn = ensureTurn(ctx.turns, ctx.turnOrder, id, null, timestamp); + const bubble = ensureAssistantBubble(turn, timestamp); + bubble.contentBlocks.push({ type: "context_compacted" }); + closeAssistantBubble(turn); + ctx.currentTurnId = null; + break; + } + default: + break; + } +} +function flushBubbleTurnMessages(turn, msgIndex) { + const messages = []; + const userText = turn.userChunks.join("\n").trim(); + if (userText && !isCodexSystemMessage(userText)) { + const displayContent = extractCodexDisplayContent(userText); + messages.push({ + id: `codex-msg-${msgIndex}`, + role: "user", + content: userText, + ...displayContent !== void 0 ? { displayContent } : {}, + ...turn.serverTurnId ? { userMessageId: turn.serverTurnId } : {}, + timestamp: turn.userTimestamp || turn.startedAt || Date.now() + }); + msgIndex += 1; + } + let lastAssistantTimestamp = 0; + const assistantMessages = []; + for (const bubble of turn.assistantBubbles) { + const contentText = bubble.contentChunks.join("\n\n"); + const thinkingText = bubble.thinkingChunks.join("\n\n"); + const hasContent = contentText.trim().length > 0; + const hasThinking = thinkingText.trim().length > 0; + const hasToolCalls = bubble.toolCalls.length > 0; + const hasCompactBoundary = bubble.contentBlocks.some((b2) => b2.type === "context_compacted"); + if (!hasContent && !hasThinking && !hasToolCalls && !hasCompactBoundary) { + if (bubble.interrupted) { + messages.push({ + id: `codex-msg-${msgIndex}`, + role: "assistant", + content: "", + timestamp: bubble.startedAt || turn.startedAt || Date.now(), + isInterrupt: true + }); + msgIndex += 1; + } + continue; + } + const contentBlocks = []; + if (hasThinking) { + contentBlocks.push({ type: "thinking", content: thinkingText.trim() }); + } + contentBlocks.push(...bubble.contentBlocks); + if (hasContent) { + contentBlocks.push({ type: "text", content: contentText.trim() }); + } + const msg = { + id: `codex-msg-${msgIndex}`, + role: "assistant", + content: contentText.trim(), + timestamp: bubble.startedAt || turn.startedAt || Date.now(), + toolCalls: hasToolCalls ? bubble.toolCalls : void 0, + contentBlocks: contentBlocks.length > 0 ? contentBlocks : void 0 + }; + if (bubble.interrupted) { + msg.isInterrupt = true; + } + if (bubble.lastEventAt > lastAssistantTimestamp) { + lastAssistantTimestamp = bubble.lastEventAt; + } + assistantMessages.push(msg); + messages.push(msg); + msgIndex += 1; + } + if (assistantMessages.length > 0 && turn.userTimestamp && lastAssistantTimestamp > turn.userTimestamp) { + const durationMs = lastAssistantTimestamp - turn.userTimestamp; + const lastMsg = assistantMessages[assistantMessages.length - 1]; + lastMsg.durationSeconds = Math.round(durationMs / 1e3); + } + if (turn.serverTurnId && turn.completed && assistantMessages.length > 0) { + const lastNonInterrupt = [...assistantMessages].reverse().find((m4) => !m4.isInterrupt); + if (lastNonInterrupt) { + lastNonInterrupt.assistantMessageId = turn.serverTurnId; + } + } + return { messages, nextMsgIndex: msgIndex }; +} +var SAFE_SESSION_ID_PATTERN = /^[A-Za-z0-9_-]+$/; +function getPathModuleForSessionPath(sessionPath) { + return sessionPath.includes("\\") || /^[A-Za-z]:/.test(sessionPath) ? path14.win32 : path14.posix; +} +function deriveCodexSessionsRootFromSessionPath(sessionFilePath) { + if (!sessionFilePath) { + return null; + } + const pathModule = getPathModuleForSessionPath(sessionFilePath); + let current = pathModule.dirname(pathModule.normalize(sessionFilePath)); + let previous = null; + while (current && current !== previous) { + if (pathModule.basename(current).toLowerCase() === "sessions") { + return current; + } + previous = current; + current = pathModule.dirname(current); + } + return null; +} +function deriveCodexMemoriesDirFromSessionsRoot(sessionsDir) { + if (!sessionsDir) { + return null; + } + const pathModule = getPathModuleForSessionPath(sessionsDir); + return pathModule.join(pathModule.dirname(sessionsDir), "memories"); +} +function findCodexSessionFile(threadId, root = path14.join(os9.homedir(), ".codex", "sessions")) { + if (!threadId || !SAFE_SESSION_ID_PATTERN.test(threadId) || !fs14.existsSync(root)) { + return null; + } + const directPath = path14.join(root, `${threadId}.jsonl`); + if (fs14.existsSync(directPath)) { + return directPath; + } + const stack = [root]; + while (stack.length > 0) { + const current = stack.pop(); + if (!current) { + continue; + } + let entries; + try { + entries = fs14.readdirSync(current, { withFileTypes: true }); + } catch (e2) { + continue; + } + for (const entry of entries) { + const fullPath = path14.join(current, entry.name); + if (entry.isDirectory()) { + stack.push(fullPath); + continue; + } + if (entry.isFile() && entry.name.endsWith(`-${threadId}.jsonl`)) { + return fullPath; + } + } + } + return null; +} +function parseCodexSessionFile(filePath) { + let content; + try { + content = fs14.readFileSync(filePath, "utf-8"); + } catch (e2) { + return []; + } + return parseCodexSessionContent(content); +} +function parseCodexSessionContent(content) { + const turns = parseCodexSessionTurns(content); + return turns.flatMap((t11) => t11.messages); +} +function parseCodexSessionTurns(content) { + const records = content.split("\n").filter((line) => line.trim()).map(parseSessionRecord).filter((record2) => record2 !== null); + let hasLegacy = false; + let hasModern = false; + for (const record2 of records) { + if (record2.type === "event") hasLegacy = true; + else if (record2.type === "event_msg" || record2.type === "response_item" || record2.type === "compacted") hasModern = true; + if (hasLegacy && hasModern) break; + } + if (hasLegacy && !hasModern) { + const messages = parseLegacySession(records); + return messages.length > 0 ? [{ turnId: null, messages }] : []; + } + return parseModernSessionTurns(records); +} +function parseLegacySession(records) { + const messages = []; + let turn = newTurn(); + let msgIndex = 0; + for (const parsed of records) { + if (parsed.type === "event" && parsed.event) { + const event = parsed.event; + switch (event.type) { + case "turn.started": + if (turn.assistantText || turn.thinkingText || turn.toolCalls.length > 0) { + msgIndex = flushTurn(turn, messages, msgIndex); + } + turn = newTurn(); + break; + case "item.started": + case "item.updated": + case "item.completed": + if (event.item) { + processLegacyItem(event.type, event.item, turn); + } + break; + case "turn.completed": + msgIndex = flushTurn(turn, messages, msgIndex); + turn = newTurn(); + break; + case "turn.failed": + turn.interrupted = true; + msgIndex = flushTurn(turn, messages, msgIndex); + turn = newTurn(); + break; + default: + break; + } + } + } + flushTurn(turn, messages, msgIndex); + return messages; +} +function parseModernSessionTurns(records) { + const ctx = createPersistedParseContext(); + for (const [lineIndex, parsed] of records.entries()) { + const timestamp = parsed.timestamp; + if (parsed.type === "event" && parsed.event) { + processLegacyEventInModernContext(parsed.event, timestamp, ctx); + continue; + } + if (parsed.type === "event_msg") { + processEventMsg(parsed.payload, timestamp, ctx); + continue; + } + if (parsed.type === "compacted") { + applyCompactedReplacementHistory(parsed.payload, timestamp, ctx); + continue; + } + if (parsed.type === "response_item") { + processPersistedPayload(parsed.payload, timestamp, lineIndex, ctx); + } + } + return flushBubbleTurnsGrouped(ctx.turns, ctx.turnOrder); +} +function flushBubbleTurnsGrouped(turns, turnOrder) { + var _a5; + const result = []; + let messageOffset = 0; + for (const turnId of turnOrder) { + const turn = turns.get(turnId); + if (!turn) continue; + const { messages: turnMessages, nextMsgIndex } = flushBubbleTurnMessages(turn, messageOffset); + if (turnMessages.length === 0) continue; + messageOffset = nextMsgIndex; + result.push({ + turnId: (_a5 = turn.serverTurnId) != null ? _a5 : null, + messages: turnMessages + }); + } + return result; +} +function findToolCallOrigin(ctx, callId) { + var _a5; + const origin = ctx.toolCallToTurn.get(callId); + if (!origin) { + return null; + } + const turn = ctx.turns.get(origin.turnId); + if (!turn || origin.bubbleIndex >= turn.assistantBubbles.length) { + return null; + } + return (_a5 = turn.assistantBubbles[origin.bubbleIndex].toolCalls.find((tool) => tool.id === callId)) != null ? _a5 : null; +} +function trackToolCallOrigin(ctx, callId, turn) { + ctx.toolCallToTurn.set(callId, { + turnId: turn.id, + bubbleIndex: turn.activeBubbleIndex + }); +} +function ensureModernLegacyToolCall(ctx, timestamp, item, build) { + const existing = findToolCallOrigin(ctx, item.id); + if (existing) { + return existing; + } + const turn = ensureTurn(ctx.turns, ctx.turnOrder, nextTurnId(ctx), ctx.currentTurnId, timestamp); + const bubble = ensureAssistantBubble(turn, timestamp); + const toolCall = build(); + pushToolInvocation(bubble, toolCall); + trackToolCallOrigin(ctx, item.id, turn); + return toolCall; +} +function processLegacyItemInModernContext(eventType, item, timestamp, ctx) { + var _a5, _b3; + switch (item.type) { + case "agent_message": { + if ((eventType === "item.updated" || eventType === "item.completed") && item.text) { + const turn = ensureTurn(ctx.turns, ctx.turnOrder, nextTurnId(ctx), ctx.currentTurnId, timestamp); + const bubble = ensureAssistantBubble(turn, timestamp); + replaceLatestChunk(bubble.contentChunks, item.text); + } + break; + } + case "reasoning": { + if ((eventType === "item.updated" || eventType === "item.completed") && item.text) { + const turn = ensureTurn(ctx.turns, ctx.turnOrder, nextTurnId(ctx), ctx.currentTurnId, timestamp); + const bubble = ensureAssistantBubble(turn, timestamp); + replaceLatestChunk(bubble.thinkingChunks, item.text); + } + break; + } + case "command_execution": { + if (eventType === "item.started") { + ensureModernLegacyToolCall(ctx, timestamp, item, () => { + var _a6; + return { + id: item.id, + name: normalizeCodexToolName(item.type), + input: normalizeCodexToolInput(item.type, { command: (_a6 = item.command) != null ? _a6 : "" }), + status: "running" + }; + }); + break; + } + if (eventType === "item.completed") { + const toolCall = ensureModernLegacyToolCall(ctx, timestamp, item, () => { + var _a6; + return { + id: item.id, + name: normalizeCodexToolName(item.type), + input: normalizeCodexToolInput(item.type, { command: (_a6 = item.command) != null ? _a6 : "" }), + status: "running" + }; + }); + const rawOutput = (_a5 = item.aggregated_output) != null ? _a5 : ""; + toolCall.result = normalizeCodexToolResult(toolCall.name, rawOutput); + toolCall.status = item.exit_code === 0 ? "completed" : "error"; + } + break; + } + case "file_change": { + if (eventType !== "item.started" && eventType !== "item.completed") { + break; + } + const changes = (_b3 = item.changes) != null ? _b3 : []; + const toolCall = ensureModernLegacyToolCall(ctx, timestamp, item, () => ({ + id: item.id, + name: normalizeCodexToolName("file_change"), + input: { changes }, + status: "running" + })); + if (eventType === "item.completed") { + const paths = changes.map((change) => `${change.kind}: ${change.path}`).join(", "); + toolCall.result = paths ? `Applied: ${paths}` : "Applied"; + toolCall.status = item.status === "completed" ? "completed" : "error"; + } + break; + } + case "web_search": { + if (eventType === "item.started") { + ensureModernLegacyToolCall(ctx, timestamp, item, () => { + var _a6; + return { + id: item.id, + name: normalizeCodexToolName(item.type), + input: normalizeCodexToolInput(item.type, { query: (_a6 = item.query) != null ? _a6 : "" }), + status: "running" + }; + }); + break; + } + if (eventType === "item.completed") { + const toolCall = ensureModernLegacyToolCall(ctx, timestamp, item, () => { + var _a6; + return { + id: item.id, + name: normalizeCodexToolName(item.type), + input: normalizeCodexToolInput(item.type, { query: (_a6 = item.query) != null ? _a6 : "" }), + status: "running" + }; + }); + toolCall.result = "Search complete"; + toolCall.status = "completed"; + } + break; + } + case "mcp_tool_call": { + if (eventType === "item.started") { + ensureModernLegacyToolCall(ctx, timestamp, item, () => { + var _a6, _b4; + return { + id: item.id, + name: `mcp__${(_a6 = item.server) != null ? _a6 : ""}__${(_b4 = item.tool) != null ? _b4 : ""}`, + input: {}, + status: "running" + }; + }); + break; + } + if (eventType === "item.completed") { + const toolCall = ensureModernLegacyToolCall(ctx, timestamp, item, () => { + var _a6, _b4; + return { + id: item.id, + name: `mcp__${(_a6 = item.server) != null ? _a6 : ""}__${(_b4 = item.tool) != null ? _b4 : ""}`, + input: {}, + status: "running" + }; + }); + toolCall.status = item.status === "completed" ? "completed" : "error"; + toolCall.result = item.status === "completed" ? "Completed" : "Failed"; + } + break; + } + default: + break; + } +} +function processLegacyEventInModernContext(event, timestamp, ctx) { + switch (event.type) { + case "turn.started": { + if (ctx.currentTurnId) { + const previousTurn = ctx.turns.get(ctx.currentTurnId); + if (previousTurn) { + closeAssistantBubble(previousTurn); + } + } + const id = nextTurnId(ctx); + ensureTurn(ctx.turns, ctx.turnOrder, id, null, timestamp); + ctx.currentTurnId = id; + break; + } + case "turn.completed": { + if (ctx.currentTurnId) { + const turn = ctx.turns.get(ctx.currentTurnId); + if (turn) closeAssistantBubble(turn); + } + ctx.currentTurnId = null; + break; + } + case "turn.failed": { + if (ctx.currentTurnId) { + const turn = ctx.turns.get(ctx.currentTurnId); + if (turn) { + const bubble = ensureAssistantBubble(turn, timestamp); + bubble.interrupted = true; + closeAssistantBubble(turn); + } + } + ctx.currentTurnId = null; + break; + } + case "item.started": + case "item.updated": + case "item.completed": + if (event.item) { + processLegacyItemInModernContext(event.type, event.item, timestamp, ctx); + } + break; + default: + break; + } +} + +// src/providers/codex/history/CodexConversationHistoryService.ts +function readSessionTurns(sessionFilePath) { + let content; + try { + content = fs15.readFileSync(sessionFilePath, "utf-8"); + } catch (e2) { + return []; + } + return parseCodexSessionTurns(content); +} +var CodexConversationHistoryService = class { + constructor() { + this.hydratedConversationPaths = /* @__PURE__ */ new Map(); + } + async hydrateConversationHistory(conversation, _vaultPath) { + var _a5, _b3, _c2, _d, _e2, _f2, _g; + const state = getCodexState(conversation.providerState); + const transcriptRootPath = (_a5 = state.transcriptRootPath) != null ? _a5 : deriveCodexSessionsRootFromSessionPath(state.sessionFilePath); + if (this.isPendingForkConversation(conversation) && conversation.messages.length > 0) { + return; + } + if (this.isPendingForkConversation(conversation)) { + const sourceSessionFile = this.resolveSourceSessionFile(state); + if (!sourceSessionFile) return; + const turns = readSessionTurns(sourceSessionFile); + const resumeAt = state.forkSource.resumeAt; + const truncated = this.truncateTurnsAtCheckpoint(turns, resumeAt); + if (!truncated) { + this.hydratedConversationPaths.delete(conversation.id); + return; + } + conversation.messages = truncated.flatMap((t11) => t11.messages); + return; + } + if (state.forkSource && state.threadId) { + const sourceSessionFile = this.resolveSourceSessionFile(state); + const forkSessionFile = (_b3 = state.sessionFilePath) != null ? _b3 : state.threadId ? findCodexSessionFile(state.threadId, transcriptRootPath != null ? transcriptRootPath : void 0) : null; + if (sourceSessionFile && forkSessionFile) { + const sourceTurns = readSessionTurns(sourceSessionFile); + const forkTurns = readSessionTurns(forkSessionFile); + const resumeAt = state.forkSource.resumeAt; + const sourcePrefix = this.truncateTurnsAtCheckpoint(sourceTurns, resumeAt); + if (!sourcePrefix) { + this.hydratedConversationPaths.delete(conversation.id); + return; + } + const sourceTurnIds = new Set(sourceTurns.map((t11) => t11.turnId).filter(Boolean)); + const forkOnlyTurns = forkTurns.filter((t11) => !t11.turnId || !sourceTurnIds.has(t11.turnId)); + const messages = [ + ...sourcePrefix.flatMap((t11) => t11.messages), + ...forkOnlyTurns.flatMap((t11) => t11.messages) + ]; + if (messages.length === 0) { + this.hydratedConversationPaths.delete(conversation.id); + return; + } + conversation.messages = messages; + this.hydratedConversationPaths.set(conversation.id, `fork::${state.threadId}`); + return; + } + } + const threadId = (_d = (_c2 = state.threadId) != null ? _c2 : conversation.sessionId) != null ? _d : null; + const sessionFilePath = (_e2 = state.sessionFilePath) != null ? _e2 : threadId ? findCodexSessionFile(threadId, transcriptRootPath != null ? transcriptRootPath : void 0) : null; + const resolvedTranscriptRootPath = transcriptRootPath != null ? transcriptRootPath : deriveCodexSessionsRootFromSessionPath(sessionFilePath); + if (!sessionFilePath) { + this.hydratedConversationPaths.delete(conversation.id); + return; + } + const hydrationKey = `${threadId != null ? threadId : ""}::${sessionFilePath}`; + if (conversation.messages.length > 0 && this.hydratedConversationPaths.get(conversation.id) === hydrationKey) { + return; + } + if (sessionFilePath !== state.sessionFilePath) { + conversation.providerState = { + ...(_f2 = conversation.providerState) != null ? _f2 : {}, + ...threadId ? { threadId } : {}, + sessionFilePath, + ...resolvedTranscriptRootPath ? { transcriptRootPath: resolvedTranscriptRootPath } : {} + }; + } else if (resolvedTranscriptRootPath && resolvedTranscriptRootPath !== state.transcriptRootPath) { + conversation.providerState = { + ...(_g = conversation.providerState) != null ? _g : {}, + ...threadId ? { threadId } : {}, + transcriptRootPath: resolvedTranscriptRootPath + }; + } + const sdkMessages = parseCodexSessionFile(sessionFilePath); + if (sdkMessages.length === 0) { + this.hydratedConversationPaths.delete(conversation.id); + return; + } + conversation.messages = sdkMessages; + this.hydratedConversationPaths.set(conversation.id, hydrationKey); + } + async deleteConversationSession(_conversation, _vaultPath) { + } + resolveSessionIdForConversation(conversation) { + var _a5, _b3, _c2, _d; + if (!conversation) return null; + const state = getCodexState(conversation.providerState); + return (_d = (_c2 = (_a5 = state.threadId) != null ? _a5 : conversation.sessionId) != null ? _c2 : (_b3 = state.forkSource) == null ? void 0 : _b3.sessionId) != null ? _d : null; + } + isPendingForkConversation(conversation) { + const state = getCodexState(conversation.providerState); + return !!state.forkSource && !state.threadId && !conversation.sessionId; + } + buildForkProviderState(sourceSessionId, resumeAt, sourceProviderState) { + var _a5; + const sourceState = getCodexState(sourceProviderState); + const sourceTranscriptRootPath = (_a5 = sourceState.transcriptRootPath) != null ? _a5 : deriveCodexSessionsRootFromSessionPath(sourceState.sessionFilePath); + const providerState = { + forkSource: { sessionId: sourceSessionId, resumeAt }, + ...sourceState.sessionFilePath ? { forkSourceSessionFilePath: sourceState.sessionFilePath } : {}, + ...sourceTranscriptRootPath ? { forkSourceTranscriptRootPath: sourceTranscriptRootPath } : {} + }; + return providerState; + } + buildPersistedProviderState(conversation) { + const entries = Object.entries(getCodexState(conversation.providerState)).filter(([, value]) => value !== void 0); + return entries.length > 0 ? Object.fromEntries(entries) : void 0; + } + // --------------------------------------------------------------------------- + // Private helpers + // --------------------------------------------------------------------------- + resolveSourceSessionFile(state) { + var _a5, _b3; + if (!state.forkSource) return null; + const sourceTranscriptRootPath = (_a5 = state.forkSourceTranscriptRootPath) != null ? _a5 : deriveCodexSessionsRootFromSessionPath(state.forkSourceSessionFilePath); + return (_b3 = state.forkSourceSessionFilePath) != null ? _b3 : findCodexSessionFile(state.forkSource.sessionId, sourceTranscriptRootPath != null ? sourceTranscriptRootPath : void 0); + } + truncateTurnsAtCheckpoint(turns, resumeAt) { + const checkpointIndex = turns.findIndex((turn) => turn.turnId === resumeAt); + if (checkpointIndex < 0) { + return null; + } + return turns.slice(0, checkpointIndex + 1); + } +}; + +// src/providers/codex/normalization/codexSubagentNormalization.ts +function parseJsonObject(raw) { + if (!raw) return null; + try { + const parsed = JSON.parse(raw); + if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) { + return parsed; + } + } catch (e2) { + return null; + } + return null; +} +function extractCodexSpawnResult(raw) { + const parsed = parseJsonObject(raw); + if (!parsed) return {}; + return { + agentId: typeof parsed.agent_id === "string" ? parsed.agent_id : void 0, + nickname: typeof parsed.nickname === "string" ? parsed.nickname : void 0 + }; +} +function extractCodexWaitResult(raw) { + const parsed = parseJsonObject(raw); + if (!parsed) { + return { statuses: {}, timedOut: false }; + } + const rawStatuses = parsed.status; + const statuses = {}; + if (rawStatuses && typeof rawStatuses === "object" && !Array.isArray(rawStatuses)) { + for (const [agentId, value] of Object.entries(rawStatuses)) { + if (!value || typeof value !== "object" || Array.isArray(value)) continue; + const status = value; + statuses[agentId] = { + completed: typeof status.completed === "string" ? status.completed : void 0, + error: typeof status.error === "string" ? status.error : void 0, + failed: typeof status.failed === "string" ? status.failed : void 0 + }; + } + } + return { + statuses, + timedOut: parsed.timed_out === true + }; +} +function getCodexSubagentPrompt(input) { + return typeof input.message === "string" ? input.message : ""; +} +function getCodexSubagentModel(input) { + return typeof input.model === "string" ? input.model : ""; +} +function getCodexSubagentDescription(nickname, model) { + if (nickname && model) return `${nickname} (${model})`; + if (nickname) return nickname; + if (model) return `Codex subagent (${model})`; + return "Codex subagent"; +} +function resolveCodexWaitCompletion(spawnResult, siblingToolCalls) { + var _a5; + for (const toolCall of siblingToolCalls) { + if (toolCall.name !== TOOL_WAIT && toolCall.name !== TOOL_WAIT_AGENT) { + continue; + } + const waitResult = extractCodexWaitResult(toolCall.result); + const statusEntries = Object.entries(waitResult.statuses); + if (statusEntries.length === 0 && !waitResult.timedOut) { + continue; + } + let agentStatus; + if (spawnResult.agentId) { + agentStatus = waitResult.statuses[spawnResult.agentId]; + } else if (statusEntries.length === 1) { + agentStatus = statusEntries[0][1]; + } + if (agentStatus == null ? void 0 : agentStatus.completed) { + return { status: "completed", result: agentStatus.completed }; + } + const failure = (_a5 = agentStatus == null ? void 0 : agentStatus.error) != null ? _a5 : agentStatus == null ? void 0 : agentStatus.failed; + if (failure) { + return { status: "error", result: failure }; + } + if (waitResult.timedOut) { + return { status: "error", result: "Timed out" }; + } + } + return { status: "running" }; +} +function buildCodexSubagentInfo(spawnToolCall, siblingToolCalls = []) { + const prompt = getCodexSubagentPrompt(spawnToolCall.input); + const model = getCodexSubagentModel(spawnToolCall.input); + const spawnResult = extractCodexSpawnResult(spawnToolCall.result); + const description = getCodexSubagentDescription(spawnResult.nickname, model); + if (spawnToolCall.status === "error") { + return { + id: spawnToolCall.id, + description, + prompt, + mode: "sync", + isExpanded: false, + status: "error", + result: spawnToolCall.result, + toolCalls: [] + }; + } + const completion = resolveCodexWaitCompletion(spawnResult, siblingToolCalls); + return { + id: spawnToolCall.id, + description, + prompt, + mode: "sync", + isExpanded: false, + status: completion.status, + result: completion.result, + toolCalls: [], + ...spawnResult.agentId ? { agentId: spawnResult.agentId } : {} + }; +} +var codexSubagentLifecycleAdapter = { + isHiddenTool(name) { + return name === TOOL_WAIT || name === TOOL_WAIT_AGENT || name === TOOL_CLOSE_AGENT; + }, + isSpawnTool(name) { + return name === TOOL_SPAWN_AGENT; + }, + isWaitTool(name) { + return name === TOOL_WAIT || name === TOOL_WAIT_AGENT; + }, + isCloseTool(name) { + return name === TOOL_CLOSE_AGENT; + }, + resolveSpawnToolIds(waitToolCall, agentIdToSpawnId) { + const spawnIds = /* @__PURE__ */ new Set(); + const waitResult = extractCodexWaitResult(waitToolCall.result); + for (const agentId of Object.keys(waitResult.statuses)) { + const spawnId = agentIdToSpawnId.get(agentId); + if (spawnId) { + spawnIds.add(spawnId); + } + } + const targets = Array.isArray(waitToolCall.input.targets) ? waitToolCall.input.targets : Array.isArray(waitToolCall.input.ids) ? waitToolCall.input.ids : []; + for (const target of targets) { + if (typeof target !== "string") continue; + const spawnId = agentIdToSpawnId.get(target); + if (spawnId) { + spawnIds.add(spawnId); + } + } + return [...spawnIds]; + }, + buildSubagentInfo(spawnToolCall, siblingToolCalls = []) { + return buildCodexSubagentInfo(spawnToolCall, siblingToolCalls); + }, + extractSpawnResult(raw) { + return extractCodexSpawnResult(raw); + }, + extractWaitResult(raw) { + return extractCodexWaitResult(raw); + } +}; + +// src/providers/codex/runtime/CodexChatRuntime.ts +var fs16 = __toESM(require("fs")); +var os10 = __toESM(require("os")); +var path15 = __toESM(require("path")); +init_path(); + +// src/providers/codex/prompt/encodeCodexTurn.ts +function isCompactCommand2(text) { + return /^\/compact(\s|$)/i.test(text); +} +function encodeCodexTurn(request) { + var _a5, _b3, _c2; + const isCompact = isCompactCommand2(request.text); + if (isCompact) { + return { + request, + persistedContent: request.text, + prompt: request.text, + isCompact: true, + mcpMentions: /* @__PURE__ */ new Set() + }; + } + const sections = []; + sections.push(request.text); + if (request.currentNotePath) { + sections.push(` +[Current note: ${request.currentNotePath}]`); + } + if ((_a5 = request.editorSelection) == null ? void 0 : _a5.selectedText) { + sections.push( + ` +[Editor selection from ${request.editorSelection.notePath || "current note"}: +${request.editorSelection.selectedText} +]` + ); + } + if ((_b3 = request.browserSelection) == null ? void 0 : _b3.selectedText) { + sections.push( + ` +[Browser selection from ${(_c2 = request.browserSelection.url) != null ? _c2 : "unknown page"}: +${request.browserSelection.selectedText} +]` + ); + } + if (request.canvasSelection) { + const nodeList = request.canvasSelection.nodeIds.join(", "); + if (nodeList) { + sections.push( + ` +[Canvas selection from ${request.canvasSelection.canvasPath}: +${nodeList} +]` + ); + } + } + const prompt = sections.join(""); + return { + request, + persistedContent: request.text, + prompt, + isCompact: false, + mcpMentions: /* @__PURE__ */ new Set() + }; +} + +// src/providers/codex/runtime/CodexNotificationRouter.ts +var COLLAB_AGENT_TOOL_MAP = { + spawnAgent: "spawn_agent", + wait: "wait", + sendInput: "send_input", + resumeAgent: "resume_agent", + closeAgent: "close_agent" +}; +var CodexNotificationRouter = class { + constructor(emit, onTurnMetadata) { + this.emit = emit; + this.onTurnMetadata = onTurnMetadata; + this.seenWebSearchIds = /* @__PURE__ */ new Set(); + this.planUpdateCounter = 0; + this.isPlanTurn = false; + this.sawPlanDelta = false; + this.startedUserMessageIds = /* @__PURE__ */ new Set(); + this.startedAgentMessageIds = /* @__PURE__ */ new Set(); + this.agentMessageDeltaIds = /* @__PURE__ */ new Set(); + this.streamedAssistantTurnText = ""; + this.currentAssistantSegmentText = ""; + this.rawStartedCallIds = /* @__PURE__ */ new Set(); + this.rawToolNamesByCallId = /* @__PURE__ */ new Map(); + this.rawToolInputsByCallId = /* @__PURE__ */ new Map(); + this.rawToolOutputsByCallId = /* @__PURE__ */ new Map(); + this.suppressedRawCallIds = /* @__PURE__ */ new Set(); + this.fileChangeInputsById = /* @__PURE__ */ new Map(); + } + resetAssistantTextTracking() { + this.streamedAssistantTurnText = ""; + this.resetAssistantSegmentText(); + } + resetAssistantSegmentText() { + this.currentAssistantSegmentId = void 0; + this.currentAssistantSegmentText = ""; + } + beginAssistantSegment(itemId) { + if (this.currentAssistantSegmentId === itemId) { + return; + } + this.currentAssistantSegmentId = itemId; + this.currentAssistantSegmentText = ""; + } + claimAssistantSegment(itemId) { + if (!itemId) { + return; + } + if (this.currentAssistantSegmentId && this.currentAssistantSegmentId !== itemId) { + this.beginAssistantSegment(itemId); + return; + } + if (!this.currentAssistantSegmentId) { + this.currentAssistantSegmentId = itemId; + } + } + appendAssistantText(text, itemId) { + if (!text) { + return; + } + this.claimAssistantSegment(itemId); + this.currentAssistantSegmentText += text; + this.streamedAssistantTurnText += text; + } + beginTurn(params) { + this.isPlanTurn = params.isPlanTurn; + this.sawPlanDelta = false; + this.startedUserMessageIds.clear(); + this.startedAgentMessageIds.clear(); + this.agentMessageDeltaIds.clear(); + this.resetAssistantTextTracking(); + this.rawStartedCallIds.clear(); + this.rawToolNamesByCallId.clear(); + this.rawToolInputsByCallId.clear(); + this.rawToolOutputsByCallId.clear(); + this.suppressedRawCallIds.clear(); + this.fileChangeInputsById.clear(); + } + endTurn() { + this.isPlanTurn = false; + this.sawPlanDelta = false; + this.startedUserMessageIds.clear(); + this.startedAgentMessageIds.clear(); + this.agentMessageDeltaIds.clear(); + this.resetAssistantTextTracking(); + this.rawStartedCallIds.clear(); + this.rawToolNamesByCallId.clear(); + this.rawToolInputsByCallId.clear(); + this.rawToolOutputsByCallId.clear(); + this.suppressedRawCallIds.clear(); + this.fileChangeInputsById.clear(); + } + handleNotification(method, params) { + switch (method) { + case "item/agentMessage/delta": + this.onAgentMessageDelta(params); + break; + case "item/started": + this.onItemStarted(params); + break; + case "item/completed": + this.onItemCompleted(params); + break; + case "item/reasoning/summaryTextDelta": + this.onReasoningSummaryDelta(params); + break; + case "item/reasoning/textDelta": + this.onReasoningTextDelta(params); + break; + case "item/reasoning/summaryPartAdded": + break; + case "item/plan/delta": + this.onPlanDelta(params); + break; + case "item/commandExecution/outputDelta": + case "item/fileChange/outputDelta": + this.onOutputDelta(params); + break; + case "item/fileChange/patchUpdated": + this.onFileChangePatchUpdated(params); + break; + case "rawResponseItem/completed": + this.onRawResponseItemCompleted(params); + break; + case "event_msg": + this.onEventMsg(params); + break; + case "thread/tokenUsage/updated": + this.onTokenUsageUpdated(params); + break; + case "turn/plan/updated": + this.onPlanUpdated(params); + break; + case "turn/completed": + this.onTurnCompleted(params); + break; + case "error": + this.onError(params); + break; + default: + break; + } + } + onAgentMessageDelta(params) { + this.agentMessageDeltaIds.add(params.itemId); + this.appendAssistantText(params.delta, params.itemId); + this.emit({ type: "text", content: params.delta }); + } + onReasoningSummaryDelta(params) { + this.emit({ type: "thinking", content: params.delta }); + } + onReasoningTextDelta(params) { + this.emit({ type: "thinking", content: params.delta }); + } + onPlanDelta(params) { + this.sawPlanDelta = true; + this.emit({ type: "text", content: params.delta }); + } + onItemStarted(params) { + const item = params.item; + const itemId = getItemId(item); + if (itemId && this.rawStartedCallIds.has(itemId)) { + return; + } + switch (item.type) { + case "userMessage": + this.emitUserMessageBoundary(item); + break; + case "agentMessage": + this.emitAgentMessageBoundary(item); + break; + case "reasoning": + break; + case "commandExecution": + this.emitToolUseFromCommand(item); + break; + case "fileChange": + this.emitToolUseFromFileChange(item); + break; + case "imageView": + this.emitToolUseFromImageView(item); + break; + case "webSearch": + this.emitToolUseFromWebSearch(item); + break; + case "collabAgentToolCall": + this.emitToolUseFromCollabAgent(item); + break; + case "mcpToolCall": + this.emitToolUseFromMcp(item); + break; + default: + break; + } + } + onItemCompleted(params) { + const item = params.item; + const itemId = getItemId(item); + const rawResult = itemId ? this.consumeRawToolOutput(itemId) : void 0; + switch (item.type) { + case "userMessage": + if (!this.startedUserMessageIds.has(item.id)) { + this.emitUserMessageBoundary(item); + } + break; + case "agentMessage": + this.completeAgentMessage(item); + break; + case "commandExecution": + this.emitToolResultFromCommand(item, rawResult); + break; + case "fileChange": + this.emitToolUseFromFileChange(item); + this.emitToolResultFromFileChange(item); + break; + case "imageView": + this.emitToolResultFromImageView(item); + break; + case "webSearch": + this.emitToolResultFromWebSearch(item); + break; + case "collabAgentToolCall": + this.emitToolResultFromCollabAgent(item); + break; + case "mcpToolCall": + this.emitToolResultFromMcp(item); + break; + case "contextCompaction": + this.emitContextCompactionBoundary(item); + break; + default: + if (itemId && rawResult) { + this.emit({ type: "tool_result", id: itemId, ...rawResult }); + } + break; + } + } + onRawResponseItemCompleted(params) { + var _a5; + const item = asRecord((_a5 = asRecord(params)) == null ? void 0 : _a5.item); + const itemType = typeof (item == null ? void 0 : item.type) === "string" ? item.type : void 0; + if (!item || !itemType) { + return; + } + switch (itemType) { + case "function_call": + this.handleRawFunctionCall(item); + break; + case "custom_tool_call": + this.handleRawCustomToolCall(item); + break; + case "function_call_output": + case "custom_tool_call_output": + this.handleRawToolOutput(item); + break; + case "agentMessage": + case "message": + this.emitMissingRawAgentMessageText(item); + break; + default: + break; + } + } + onEventMsg(params) { + const payload = asRecord(params); + if (!payload) { + return; + } + const payloadType = typeof payload.type === "string" ? payload.type : void 0; + if (payloadType !== "agent_message") { + return; + } + const text = firstString2(payload.text, payload.message); + this.emitMissingAssistantTurnText(text); + } + handleRawFunctionCall(item) { + const rawName = firstString2(item.name, item.type); + const callId = readRawCallId(item); + if (!callId) { + return; + } + const rawArguments = parseRawArguments(item); + if (rawName === "write_stdin" && isSilentWriteStdinInput2(rawArguments)) { + this.suppressedRawCallIds.add(callId); + return; + } + this.emitRawToolUse(callId, rawName, item, rawArguments); + } + handleRawCustomToolCall(item) { + const rawName = firstString2(item.name, item.type); + const callId = readRawCallId(item); + if (!callId) { + return; + } + if (rawName === "apply_patch") { + const input = normalizeCodexToolInput(rawName, parseRawArguments(item)); + this.rememberFileChangeInput(callId, input); + this.suppressedRawCallIds.add(callId); + this.resetAssistantSegmentText(); + return; + } + this.emitRawToolUse(callId, rawName, item); + } + emitRawToolUse(callId, rawName, item, rawArguments) { + const normalizedName = normalizeCodexToolName(rawName); + const input = normalizeCodexToolInput(rawName, rawArguments != null ? rawArguments : parseRawArguments(item)); + if (this.rawStartedCallIds.has(callId)) { + this.rawToolNamesByCallId.set(callId, normalizedName); + this.rawToolInputsByCallId.set(callId, input); + return; + } + this.rawStartedCallIds.add(callId); + this.rawToolNamesByCallId.set(callId, normalizedName); + this.rawToolInputsByCallId.set(callId, input); + this.resetAssistantSegmentText(); + this.emit({ + type: "tool_use", + id: callId, + name: normalizedName, + input + }); + } + handleRawToolOutput(item) { + const callId = readRawCallId(item); + if (!callId) { + return; + } + if (this.suppressedRawCallIds.delete(callId)) { + return; + } + const normalizedName = this.rawToolNamesByCallId.get(callId); + if (!normalizedName) { + return; + } + const rawOutput = item.output; + const content = normalizeRawToolOutput( + normalizedName, + rawOutput, + this.rawToolInputsByCallId.get(callId) + ); + this.rawToolOutputsByCallId.set(callId, { + content, + isError: isCodexToolOutputError(stringifyRawOutput(rawOutput)) + }); + } + emitMissingRawAgentMessageText(item) { + const text = item.type === "message" ? readAssistantMessageText(item) : firstString2(item.text, item.message); + this.emitMissingAssistantSegmentText(text); + } + emitMissingAssistantSegmentText(text, itemId) { + this.claimAssistantSegment(itemId); + const missingText = normalizeAgentMessageCompletionText( + text, + this.currentAssistantSegmentText + ); + if (text) { + this.currentAssistantSegmentText = text; + } + if (!missingText) { + return; + } + this.streamedAssistantTurnText += missingText; + this.emit({ type: "text", content: missingText }); + } + emitMissingAssistantTurnText(text) { + const missingText = normalizeAgentMessageCompletionText( + text, + this.streamedAssistantTurnText + ); + if (!missingText) { + return; + } + this.streamedAssistantTurnText += missingText; + this.currentAssistantSegmentText += missingText; + this.emit({ type: "text", content: missingText }); + } + consumeRawToolOutput(callId) { + const result = this.rawToolOutputsByCallId.get(callId); + this.rawToolOutputsByCallId.delete(callId); + return result; + } + flushPendingRawToolOutputs() { + for (const [callId, result] of this.rawToolOutputsByCallId) { + this.emit({ type: "tool_result", id: callId, ...result }); + } + this.rawToolOutputsByCallId.clear(); + } + // -- commandExecution ------------------------------------------------------- + emitToolUseFromCommand(item) { + var _a5, _b3, _c2; + const rawAction = (_c2 = (_b3 = (_a5 = item.commandActions) == null ? void 0 : _a5[0]) == null ? void 0 : _b3.command) != null ? _c2 : item.command; + const normalizedName = normalizeCodexToolName("command_execution"); + const input = normalizeCodexToolInput("command_execution", { command: rawAction }); + this.resetAssistantSegmentText(); + this.emit({ type: "tool_use", id: item.id, name: normalizedName, input }); + } + emitToolResultFromCommand(item, rawResult) { + var _a5, _b3, _c2; + const normalizedName = normalizeCodexToolName("command_execution"); + const output = (_a5 = item.aggregatedOutput) != null ? _a5 : ""; + const content = (_b3 = rawResult == null ? void 0 : rawResult.content) != null ? _b3 : normalizeCodexToolResult(normalizedName, output); + const isError = item.exitCode !== null ? item.exitCode !== 0 : (_c2 = rawResult == null ? void 0 : rawResult.isError) != null ? _c2 : isCodexToolOutputError(output); + this.emit({ type: "tool_result", id: item.id, content, isError }); + } + // -- fileChange ------------------------------------------------------------- + emitToolUseFromFileChange(item) { + var _a5; + const input = this.rememberFileChangeInput( + item.id, + buildFileChangeInput((_a5 = item.changes) != null ? _a5 : []) + ); + this.resetAssistantSegmentText(); + this.emit({ + type: "tool_use", + id: item.id, + name: normalizeCodexToolName("file_change"), + input + }); + } + emitToolResultFromFileChange(item) { + var _a5; + const input = this.rememberFileChangeInput( + item.id, + buildFileChangeInput((_a5 = item.changes) != null ? _a5 : []) + ); + const changes = Array.isArray(input.changes) ? input.changes : []; + const paths = changes.map((change) => formatFileChangeSummary(change)).filter(Boolean).join(", "); + this.emit({ + type: "tool_result", + id: item.id, + content: paths || "File change completed", + isError: item.status === "failed" || item.status === "declined" + }); + } + onFileChangePatchUpdated(params) { + var _a5; + const itemId = firstString2(params.itemId); + if (!itemId) { + return; + } + const input = this.rememberFileChangeInput( + itemId, + buildFileChangeInput((_a5 = params.changes) != null ? _a5 : []) + ); + this.resetAssistantSegmentText(); + this.emit({ + type: "tool_use", + id: itemId, + name: normalizeCodexToolName("file_change"), + input + }); + } + rememberFileChangeInput(itemId, input) { + const previous = this.fileChangeInputsById.get(itemId); + const merged = mergeApplyPatchInputs(previous, input); + this.fileChangeInputsById.set(itemId, merged); + return merged; + } + // -- imageView -------------------------------------------------------------- + emitToolUseFromImageView(item) { + this.resetAssistantSegmentText(); + this.emit({ + type: "tool_use", + id: item.id, + name: normalizeCodexToolName("view_image"), + input: normalizeCodexToolInput("view_image", { path: item.path }) + }); + } + emitToolResultFromImageView(item) { + this.emit({ type: "tool_result", id: item.id, content: item.path, isError: false }); + } + // -- webSearch -------------------------------------------------------------- + emitToolUseFromWebSearch(item) { + var _a5, _b3, _c2, _d, _e2; + if (this.seenWebSearchIds.has(item.id)) return; + this.seenWebSearchIds.add(item.id); + this.resetAssistantSegmentText(); + this.emit({ + type: "tool_use", + id: item.id, + name: "WebSearch", + input: normalizeCodexToolInput("web_search", { + query: (_a5 = item.query) != null ? _a5 : "", + queries: (_b3 = item.queries) != null ? _b3 : [], + url: (_c2 = item.url) != null ? _c2 : "", + pattern: (_d = item.pattern) != null ? _d : "", + action: (_e2 = item.action) != null ? _e2 : {} + }) + }); + } + emitToolResultFromWebSearch(item) { + this.emit({ + type: "tool_result", + id: item.id, + content: "Search complete", + isError: item.status === "failed" || item.status === "error" + }); + } + // -- collabAgentToolCall ---------------------------------------------------- + emitToolUseFromCollabAgent(item) { + var _a5, _b3; + const toolName = (_a5 = COLLAB_AGENT_TOOL_MAP[item.tool]) != null ? _a5 : item.tool; + this.resetAssistantSegmentText(); + this.emit({ + type: "tool_use", + id: item.id, + name: toolName, + input: (_b3 = item.arguments) != null ? _b3 : {} + }); + } + emitToolResultFromCollabAgent(item) { + var _a5; + const resultText = item.result && typeof item.result === "object" ? JSON.stringify(item.result) : item.status === "completed" ? "Completed" : (_a5 = item.status) != null ? _a5 : "Done"; + this.emit({ + type: "tool_result", + id: item.id, + content: resultText, + isError: item.status === "failed" || item.status === "error" + }); + } + // -- mcpToolCall ------------------------------------------------------------ + emitToolUseFromMcp(item) { + var _a5; + this.resetAssistantSegmentText(); + this.emit({ + type: "tool_use", + id: item.id, + name: `mcp__${item.server}__${item.tool}`, + input: (_a5 = item.arguments) != null ? _a5 : {} + }); + } + emitToolResultFromMcp(item) { + var _a5; + let content = ""; + if (item.error) { + content = item.error; + } else if ((_a5 = item.result) == null ? void 0 : _a5.content) { + content = item.result.content.map((c) => { + var _a6; + return (_a6 = c.text) != null ? _a6 : ""; + }).filter(Boolean).join("\n"); + } + if (!content) { + content = item.status === "completed" ? "Completed" : "Failed"; + } + this.emit({ + type: "tool_result", + id: item.id, + content, + isError: item.status === "failed" || item.status === "error" + }); + } + emitContextCompactionBoundary(_item) { + this.emit({ type: "context_compacted" }); + } + emitUserMessageBoundary(item) { + if (this.startedUserMessageIds.has(item.id)) { + return; + } + this.startedUserMessageIds.add(item.id); + this.emit({ + type: "user_message_start", + itemId: item.id, + content: this.extractUserMessageText(item.content) + }); + } + emitAgentMessageBoundary(item) { + if (this.startedAgentMessageIds.has(item.id)) { + return; + } + this.startedAgentMessageIds.add(item.id); + this.claimAssistantSegment(item.id); + this.emit({ type: "assistant_message_start", itemId: item.id }); + } + completeAgentMessage(item) { + if (!this.startedAgentMessageIds.has(item.id)) { + this.emitAgentMessageBoundary(item); + } + if (this.agentMessageDeltaIds.has(item.id) || !item.text) { + return; + } + this.emitMissingAssistantSegmentText(item.text, item.id); + } + extractUserMessageText(content) { + return content.map((part) => part.type === "text" ? part.text : "").filter((text) => text.length > 0).join("\n\n"); + } + // -- turn/plan/updated (update_plan) ---------------------------------------- + onPlanUpdated(params) { + var _a5; + this.planUpdateCounter += 1; + const syntheticId = `plan-update-${(_a5 = params.turnId) != null ? _a5 : this.planUpdateCounter}`; + const PLAN_STATUS_MAP = { + inProgress: "in_progress", + in_progress: "in_progress" + }; + const todos = params.plan.map((item) => { + var _a6; + return { + id: "", + content: item.step, + activeForm: item.step, + status: (_a6 = PLAN_STATUS_MAP[item.status]) != null ? _a6 : item.status + }; + }); + this.resetAssistantSegmentText(); + this.emit({ type: "tool_use", id: syntheticId, name: "TodoWrite", input: { todos } }); + this.emit({ type: "tool_result", id: syntheticId, content: "Plan updated", isError: false }); + } + // -- outputDelta (commandExecution + fileChange) ---------------------------- + onOutputDelta(params) { + this.emit({ type: "tool_output", id: params.itemId, content: params.delta }); + } + // -- tokenUsage / turnCompleted / error ------------------------------------- + onTokenUsageUpdated(params) { + const last = params.tokenUsage.last; + const contextTokens = last.inputTokens; + const contextWindow = params.tokenUsage.modelContextWindow; + const usage = { + inputTokens: last.inputTokens, + cacheCreationInputTokens: 0, + cacheReadInputTokens: last.cachedInputTokens, + contextWindow, + contextWindowIsAuthoritative: contextWindow > 0, + contextTokens, + percentage: contextWindow > 0 ? Math.min(100, Math.max(0, Math.round(contextTokens / contextWindow * 100))) : 0 + }; + this.emit({ type: "usage", usage, sessionId: params.threadId }); + } + onTurnCompleted(params) { + var _a5; + const turn = params.turn; + if (turn.status === "failed" && turn.error) { + this.emit({ type: "error", content: turn.error.message }); + } + if (turn.status === "completed") { + (_a5 = this.onTurnMetadata) == null ? void 0 : _a5.call(this, { + assistantMessageId: turn.id, + ...this.isPlanTurn && this.sawPlanDelta ? { planCompleted: true } : {} + }); + } + this.flushPendingRawToolOutputs(); + this.emit({ type: "done" }); + } + onError(params) { + if (params.willRetry) return; + this.emit({ type: "error", content: params.error.message }); + } +}; +function asRecord(value) { + return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null; +} +function firstString2(...values) { + for (const value of values) { + if (typeof value === "string") { + return value; + } + } + return ""; +} +function getItemId(item) { + return typeof item.id === "string" ? item.id : void 0; +} +function readRawCallId(item) { + return firstString2(item.call_id, item.id); +} +function parseRawArguments(item) { + const rawArgs = typeof item.arguments === "string" ? item.arguments : typeof item.input === "string" ? item.input : void 0; + return parseCodexArguments(rawArgs); +} +function isSilentWriteStdinInput2(input) { + return typeof input.chars !== "string" || input.chars.length === 0; +} +function normalizeRawToolOutput(normalizedName, rawOutput, input) { + if (Array.isArray(rawOutput) && normalizedName === "Read") { + const filePath = firstString2(input == null ? void 0 : input.file_path, input == null ? void 0 : input.path); + if (filePath) { + return filePath; + } + } + return normalizeCodexToolResult(normalizedName, stringifyRawOutput(rawOutput)); +} +function stringifyRawOutput(value) { + if (typeof value === "string") { + return value; + } + if (value === void 0) { + return ""; + } + try { + const result = JSON.stringify(value); + return typeof result === "string" ? result : String(value); + } catch (e2) { + return String(value); + } +} +function buildFileChangeInput(changes) { + return { changes: normalizeFileChanges(changes) }; +} +function mergeApplyPatchInputs(previous, next) { + if (!previous) { + return next; + } + const patch = typeof next.patch === "string" ? next.patch : typeof previous.patch === "string" ? previous.patch : void 0; + const changes = mergeFileChanges(previous.changes, next.changes); + return { + ...previous, + ...next, + ...patch ? { patch } : {}, + ...changes.length > 0 ? { changes } : {} + }; +} +function normalizeFileChanges(changes) { + if (!Array.isArray(changes)) { + return []; + } + return changes.map(normalizeFileChange).filter((change) => change !== null); +} +function normalizeFileChange(change) { + var _a5; + const record2 = asRecord(change); + const path27 = firstString2(record2 == null ? void 0 : record2.path); + if (!record2 || !path27) { + return null; + } + const kindInfo = normalizeFileChangeKind((_a5 = record2.kind) != null ? _a5 : record2.type); + const diff = firstString2(record2.diff); + return { + ...record2, + path: path27, + kind: kindInfo.kind, + type: kindInfo.kind, + ...kindInfo.movePath ? { movePath: kindInfo.movePath } : {}, + ...diff ? { diff } : {} + }; +} +function normalizeFileChangeKind(value) { + if (typeof value === "string" && value) { + return { kind: value }; + } + const record2 = asRecord(value); + const kind = firstString2(record2 == null ? void 0 : record2.type) || "change"; + const movePath = firstString2(record2 == null ? void 0 : record2.move_path); + return { + kind, + ...movePath ? { movePath } : {} + }; +} +function mergeFileChanges(previous, next) { + const previousChanges = normalizeFileChanges(previous); + const nextChanges = normalizeFileChanges(next); + if (previousChanges.length === 0) return nextChanges; + if (nextChanges.length === 0) return previousChanges; + const merged = /* @__PURE__ */ new Map(); + for (const change of previousChanges) { + merged.set(fileChangeKey(change), change); + } + for (const change of nextChanges) { + const key = fileChangeKey(change); + const previousChange = merged.get(key); + merged.set(key, previousChange ? mergeFileChange(previousChange, change) : change); + } + return [...merged.values()]; +} +function mergeFileChange(previous, next) { + return { + ...previous, + ...next, + ...typeof next.diff === "string" ? { diff: next.diff } : typeof previous.diff === "string" ? { diff: previous.diff } : {} + }; +} +function fileChangeKey(change) { + return `${firstString2(change.path)}\0${firstString2(change.movePath)}`; +} +function formatFileChangeSummary(change) { + const record2 = asRecord(change); + const path27 = firstString2(record2 == null ? void 0 : record2.path); + if (!record2 || !path27) { + return ""; + } + const kind = firstString2(record2.kind, record2.type) || "change"; + return `${kind}: ${path27}`; +} +function readContentText(value) { + if (!Array.isArray(value)) { + return ""; + } + return value.map((entry) => { + var _a5; + return firstString2((_a5 = asRecord(entry)) == null ? void 0 : _a5.text); + }).join(""); +} +function readAssistantMessageText(item) { + if (firstString2(item.role) !== "assistant") { + return ""; + } + return readContentText(item.content); +} +function normalizeAgentMessageCompletionText(text, streamedAssistantText) { + if (!text) { + return ""; + } + if (!streamedAssistantText) { + return text; + } + if (text.startsWith(streamedAssistantText)) { + return text.slice(streamedAssistantText.length); + } + return text; +} + +// src/providers/codex/runtime/CodexServerRequestRouter.ts +var CodexServerRequestRouter = class { + constructor() { + this.approvalCallback = null; + this.askUserCallback = null; + this.pendingApprovalRequests = /* @__PURE__ */ new Map(); + this.askUserAbortController = null; + this.pendingAskUserRequestId = null; + this.pendingAskUserThreadId = null; + } + setApprovalCallback(callback) { + this.approvalCallback = callback; + } + setAskUserCallback(callback) { + this.askUserCallback = callback; + } + async handleServerRequest(requestIdOrMethod, methodOrParams, maybeParams) { + const hasExplicitRequestId = maybeParams !== void 0; + const requestId = hasExplicitRequestId ? requestIdOrMethod : void 0; + const method = hasExplicitRequestId ? methodOrParams : requestIdOrMethod; + const params = hasExplicitRequestId ? maybeParams : methodOrParams; + switch (method) { + case "item/commandExecution/requestApproval": + return this.handleCommandApproval(requestId, params); + case "item/fileChange/requestApproval": + return this.handleFileChangeApproval(requestId, params); + case "item/permissions/requestApproval": + return this.handlePermissionsApproval(requestId, params); + case "item/tool/requestUserInput": + return this.handleUserInputRequest(requestId, params); + default: + throw new Error(`Unsupported server request: ${method}`); + } + } + hasPendingApprovalRequest(requestId, threadId) { + return this.pendingApprovalRequests.get(requestId) === threadId; + } + async handleCommandApproval(requestId, params) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j; + if (!this.approvalCallback) return { decision: "decline" }; + const command = (_a5 = params.command) != null ? _a5 : ""; + const toolName = normalizeCodexToolName("command_execution"); + const input = { + command, + cwd: (_b3 = params.cwd) != null ? _b3 : null, + reason: (_c2 = params.reason) != null ? _c2 : null, + commandActions: (_d = params.commandActions) != null ? _d : null, + approvalId: (_e2 = params.approvalId) != null ? _e2 : null, + networkApprovalContext: (_f2 = params.networkApprovalContext) != null ? _f2 : null, + additionalPermissions: (_g = params.additionalPermissions) != null ? _g : null, + skillMetadata: (_h2 = params.skillMetadata) != null ? _h2 : null, + proposedExecpolicyAmendment: (_i = params.proposedExecpolicyAmendment) != null ? _i : null, + proposedNetworkPolicyAmendments: (_j = params.proposedNetworkPolicyAmendments) != null ? _j : null + }; + const description = describeCommandApproval(params); + if (requestId !== void 0) { + this.pendingApprovalRequests.set(requestId, params.threadId); + } + try { + const decision = await this.approvalCallback(toolName, input, description, { + ...params.reason ? { decisionReason: params.reason } : {}, + ...params.networkApprovalContext ? { networkApprovalContext: params.networkApprovalContext } : {}, + ...params.additionalPermissions ? { additionalPermissions: params.additionalPermissions } : {}, + decisionOptions: buildCommandApprovalDecisionOptions(params) + }); + return { decision: mapCommandApprovalDecision(decision) }; + } finally { + if (requestId !== void 0) { + this.pendingApprovalRequests.delete(requestId); + } + } + } + async handleFileChangeApproval(requestId, params) { + var _a5; + if (!this.approvalCallback) return { decision: "decline" }; + const reason = (_a5 = params.reason) != null ? _a5 : void 0; + const toolName = normalizeCodexToolName("file_change"); + const input = { reason: reason != null ? reason : null }; + const description = reason ? `File change: ${reason}` : "File change"; + if (requestId !== void 0) { + this.pendingApprovalRequests.set(requestId, params.threadId); + } + try { + const decision = await this.approvalCallback(toolName, input, description, {}); + return { decision: mapFileChangeApprovalDecision(decision) }; + } finally { + if (requestId !== void 0) { + this.pendingApprovalRequests.delete(requestId); + } + } + } + async handlePermissionsApproval(requestId, params) { + var _a5, _b3; + if (!this.approvalCallback) return { permissions: {}, scope: "turn" }; + const requestedPermissions = (_a5 = params.permissions) != null ? _a5 : {}; + const reason = (_b3 = params.reason) != null ? _b3 : void 0; + const toolName = "permissions"; + const description = reason ? `Permission request: ${reason}` : "Permission request"; + if (requestId !== void 0) { + this.pendingApprovalRequests.set(requestId, params.threadId); + } + let decision; + try { + decision = await this.approvalCallback(toolName, requestedPermissions, description, {}); + } finally { + if (requestId !== void 0) { + this.pendingApprovalRequests.delete(requestId); + } + } + if (decision === "allow") { + return { permissions: requestedPermissions, scope: "turn" }; + } + if (decision === "allow-always") { + return { permissions: requestedPermissions, scope: "session" }; + } + return { permissions: {}, scope: "turn" }; + } + abortPendingAskUser(requestId, threadId) { + if (!this.askUserAbortController) { + return false; + } + if (requestId !== void 0 && requestId !== this.pendingAskUserRequestId) { + return false; + } + if (threadId !== void 0 && threadId !== this.pendingAskUserThreadId) { + return false; + } + this.askUserAbortController.abort(); + this.askUserAbortController = null; + this.pendingAskUserRequestId = null; + this.pendingAskUserThreadId = null; + return true; + } + async handleUserInputRequest(requestId, params) { + var _a5; + if (!this.askUserCallback) return { answers: {} }; + const questions = (_a5 = params.questions) != null ? _a5 : []; + const input = { questions }; + this.askUserAbortController = new AbortController(); + this.pendingAskUserRequestId = requestId != null ? requestId : null; + this.pendingAskUserThreadId = params.threadId; + let userAnswers; + try { + userAnswers = await this.askUserCallback(input, this.askUserAbortController.signal); + } finally { + this.askUserAbortController = null; + this.pendingAskUserRequestId = null; + this.pendingAskUserThreadId = null; + } + if (!userAnswers) return { answers: {} }; + const answers = {}; + for (const [key, value] of Object.entries(userAnswers)) { + answers[key] = { answers: normalizeAnswers(value) }; + } + return { answers }; + } +}; +function describeCommandApproval(params) { + var _a5; + const networkContext = params.networkApprovalContext; + if (networkContext) { + return `Allow ${networkContext.protocol} access to ${networkContext.host}`; + } + const command = (_a5 = params.command) != null ? _a5 : ""; + return command ? `Execute: ${command}` : "Execute command"; +} +function buildCommandApprovalDecisionOptions(params) { + var _a5; + const availableDecisions = (_a5 = params.availableDecisions) != null ? _a5 : ["accept", "acceptForSession", "decline"]; + return availableDecisions.map((decision) => mapDecisionOption(decision, params)); +} +function mapDecisionOption(decision, params) { + var _a5; + if (decision === "accept") { + return { label: "Allow once", value: "allow-once", decision: "allow" }; + } + if (decision === "acceptForSession") { + return { label: "Always allow", value: "allow-always", decision: "allow-always" }; + } + if (decision === "decline") { + return { label: "Deny", value: "deny", decision: "deny" }; + } + if (decision === "cancel") { + return { label: "Cancel", value: "cancel", decision: "cancel" }; + } + if ("acceptWithExecpolicyAmendment" in decision) { + return { + label: "Allow similar commands", + description: "Approve and store an exec policy amendment.", + value: encodeCommandApprovalDecision(decision) + }; + } + const networkPolicyAmendment = decision.applyNetworkPolicyAmendment.network_policy_amendment; + const host = networkPolicyAmendment.host || ((_a5 = params.networkApprovalContext) == null ? void 0 : _a5.host) || "host"; + const action = networkPolicyAmendment.action === "deny" ? "Deny" : "Allow"; + return { + label: `${action} ${host} for this session`, + description: `Apply a ${networkPolicyAmendment.action} rule for ${host}.`, + value: encodeCommandApprovalDecision(decision) + }; +} +function normalizeAnswers(value) { + if (Array.isArray(value)) { + return value.map((item) => typeof item === "string" ? item : String(item)).filter((item) => item.trim().length > 0); + } + return [value]; +} +function mapCommandApprovalDecision(decision) { + switch (decision) { + case "allow": + return "accept"; + case "allow-always": + return "acceptForSession"; + case "deny": + return "decline"; + case "cancel": + return "cancel"; + default: + if (typeof decision === "object" && decision !== null && decision.type === "select-option") { + const decoded = decodeCommandApprovalDecision(decision.value); + if (decoded) { + return decoded; + } + } + return "decline"; + } +} +function mapFileChangeApprovalDecision(decision) { + switch (decision) { + case "allow": + return "accept"; + case "allow-always": + return "acceptForSession"; + case "deny": + return "decline"; + case "cancel": + return "cancel"; + default: + return "decline"; + } +} +function encodeCommandApprovalDecision(decision) { + return JSON.stringify(decision); +} +function decodeCommandApprovalDecision(value) { + try { + return JSON.parse(value); + } catch (e2) { + return null; + } +} + +// src/providers/codex/runtime/CodexSessionManager.ts +var CodexSessionManager = class { + constructor() { + this.threadId = null; + this.sessionFilePath = null; + this.sessionInvalidated = false; + } + getThreadId() { + return this.threadId; + } + getSessionFilePath() { + return this.sessionFilePath; + } + setThread(threadId, sessionFilePath) { + const threadChanged = this.threadId !== threadId; + this.threadId = threadId; + if (sessionFilePath) { + this.sessionFilePath = sessionFilePath; + } else if (threadChanged) { + this.sessionFilePath = null; + } + } + reset() { + this.threadId = null; + this.sessionFilePath = null; + this.sessionInvalidated = false; + } + invalidateSession() { + this.sessionInvalidated = true; + } + consumeInvalidation() { + const was = this.sessionInvalidated; + this.sessionInvalidated = false; + return was; + } +}; + +// src/providers/codex/runtime/CodexChatRuntime.ts +function resolveCodexSandboxConfig(permissionMode, codexSafeMode = "workspace-write") { + if (permissionMode === "yolo") { + return { approvalPolicy: "never", sandbox: "danger-full-access" }; + } + if (permissionMode === "plan") { + return { approvalPolicy: "on-request", sandbox: "workspace-write" }; + } + return { approvalPolicy: "on-request", sandbox: codexSafeMode }; +} +function resolveCodexServiceTier(serviceTier, model) { + if (model !== FAST_TIER_CODEX_MODEL) { + return null; + } + return serviceTier === "fast" ? "fast" : null; +} +var EFFORT_MAP = { + low: "low", + medium: "medium", + high: "high", + xhigh: "xhigh" +}; +var CodexChatRuntime = class { + constructor(plugin) { + this.providerId = "codex"; + this.session = new CodexSessionManager(); + this.process = null; + this.transport = null; + this.launchSpec = null; + this.runtimeContext = null; + this.notificationRouter = null; + this.serverRequestRouter = new CodexServerRequestRouter(); + this.ready = false; + this.readyListeners = /* @__PURE__ */ new Set(); + this.clientConfigKey = null; + this.currentTurnId = null; + this.currentQueryThreadId = null; + this.loadedThreadId = null; + this.currentThreadPath = null; + this.pendingTurnNotifications = []; + // Chunk buffer: notifications push here, query() drains + this.chunkBuffer = []; + this.chunkResolve = null; + this.approvalCallback = null; + this.approvalDismisser = null; + this.askUserCallback = null; + this.exitPlanModeCallback = null; + this.permissionModeSyncCallback = null; + this.subagentHookProvider = null; + this.autoTurnCallback = null; + this.activeInputBundles = /* @__PURE__ */ new Set(); + // Fork state + this.pendingFork = null; + // Cancellation + this.canceled = false; + this.turnMetadata = {}; + this.plugin = plugin; + } + getCapabilities() { + return CODEX_PROVIDER_CAPABILITIES; + } + prepareTurn(request) { + return encodeCodexTurn(request); + } + consumeTurnMetadata() { + const metadata = { ...this.turnMetadata }; + this.turnMetadata = {}; + return metadata; + } + onReadyStateChange(listener) { + this.readyListeners.add(listener); + return () => { + this.readyListeners.delete(listener); + }; + } + setResumeCheckpoint(checkpointId) { + this.resumeCheckpoint = checkpointId; + } + syncConversationState(conversation, _externalContextPaths) { + var _a5, _b3; + if (!conversation) { + this.session.reset(); + this.loadedThreadId = null; + this.currentThreadPath = null; + this.pendingFork = null; + return; + } + const state = getCodexState(conversation.providerState); + if (state.forkSource && !state.threadId && !conversation.sessionId) { + this.pendingFork = state.forkSource; + this.session.reset(); + this.loadedThreadId = null; + this.currentThreadPath = null; + return; + } + this.pendingFork = null; + const threadId = (_b3 = (_a5 = state.threadId) != null ? _a5 : conversation.sessionId) != null ? _b3 : null; + if (!threadId) { + this.session.reset(); + this.loadedThreadId = null; + this.currentThreadPath = null; + return; + } + this.session.setThread(threadId, state.sessionFilePath); + } + async reloadMcpServers() { + } + async ensureReady(options) { + const promptSettings = this.getSystemPromptSettings(); + const promptKey = computeSystemPromptKey(promptSettings); + const launchSpec = resolveCodexAppServerLaunchSpec(this.plugin, this.providerId); + const clientConfigKey = [promptKey, JSON.stringify({ + command: launchSpec.command, + args: launchSpec.args, + spawnCwd: launchSpec.spawnCwd, + targetCwd: launchSpec.targetCwd, + target: launchSpec.target + })].join("::"); + const shouldRebuild = !this.process || !this.transport || !this.process.isAlive() || (options == null ? void 0 : options.force) === true || this.clientConfigKey !== clientConfigKey; + if (shouldRebuild) { + await this.shutdownProcess(); + await this.startAppServer(launchSpec, clientConfigKey); + } + this.setReady(true); + return shouldRebuild; + } + async *query(originalTurn, _conversationHistory, queryOptions) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m, _n, _o, _p, _q3, _r; + this.resetTurnMetadata(); + let turn = originalTurn; + await this.ensureReady(); + this.canceled = false; + this.cleanupActiveInputBundles(); + this.chunkBuffer = []; + this.chunkResolve = null; + this.currentQueryThreadId = null; + this.pendingTurnNotifications = []; + const model = this.resolveModel(queryOptions); + const promptSettings = this.getSystemPromptSettings(); + const promptText = buildSystemPrompt(promptSettings); + const enqueueChunk = (chunk) => { + this.chunkBuffer.push(chunk); + if (this.chunkResolve) { + this.chunkResolve(); + this.chunkResolve = null; + } + }; + this.notificationRouter = new CodexNotificationRouter( + (chunk) => enqueueChunk(chunk), + (update) => this.recordTurnMetadata(update) + ); + this.wireTransportHandlers(); + const compactValidationError = this.validateCompactTurn(originalTurn); + if (compactValidationError) { + yield { type: "error", content: compactValidationError }; + yield { type: "done" }; + return; + } + try { + const existingThreadId = this.session.getThreadId(); + let threadId; + let threadPath = null; + let threadTargetPath = null; + let completedPendingFork = false; + if (this.pendingFork) { + const fork = this.pendingFork; + const forkResult = await this.transport.request("thread/fork", { + threadId: fork.sessionId + }); + threadId = forkResult.thread.id; + threadTargetPath = (_a5 = forkResult.thread.path) != null ? _a5 : null; + threadPath = this.toHostSessionPath(threadTargetPath); + const forkTurns = (_b3 = forkResult.thread.turns) != null ? _b3 : []; + const checkpointIndex = forkTurns.findIndex((t11) => t11.id === fork.resumeAt); + if (checkpointIndex < 0) { + throw new Error(`Fork checkpoint not found: ${fork.resumeAt}`); + } + const numTurnsToRollback = forkTurns.length - checkpointIndex - 1; + const permissionMode = this.resolveSandboxConfig(); + await this.transport.request("thread/resume", { + threadId, + model: model != null ? model : DEFAULT_CODEX_PRIMARY_MODEL, + approvalPolicy: permissionMode.approvalPolicy, + sandbox: permissionMode.sandbox, + serviceTier: resolveCodexServiceTier(this.getProviderSettings().serviceTier, model != null ? model : DEFAULT_CODEX_PRIMARY_MODEL), + baseInstructions: promptText, + experimentalRawEvents: true, + persistExtendedHistory: true + }); + if (numTurnsToRollback > 0) { + await this.transport.request("thread/rollback", { + threadId, + numTurns: numTurnsToRollback + }); + } + this.loadedThreadId = threadId; + completedPendingFork = true; + if (_conversationHistory && _conversationHistory.length > 0) { + const checkpointIdx = _conversationHistory.findIndex( + (m4) => m4.assistantMessageId === fork.resumeAt + ); + if (checkpointIdx >= 0 && checkpointIdx < _conversationHistory.length - 1) { + const suffix = _conversationHistory.slice(checkpointIdx + 1); + const replayContext = buildContextFromHistory(suffix); + if (replayContext.trim()) { + turn = { + ...turn, + prompt: `${replayContext} + +User: ${turn.prompt}` + }; + } + } + } + } else if (existingThreadId && existingThreadId !== this.loadedThreadId) { + const permissionMode = this.resolveSandboxConfig(); + const resumeResult = await this.transport.request("thread/resume", { + threadId: existingThreadId, + model: model != null ? model : DEFAULT_CODEX_PRIMARY_MODEL, + approvalPolicy: permissionMode.approvalPolicy, + sandbox: permissionMode.sandbox, + serviceTier: resolveCodexServiceTier(this.getProviderSettings().serviceTier, model != null ? model : DEFAULT_CODEX_PRIMARY_MODEL), + baseInstructions: promptText, + experimentalRawEvents: true, + persistExtendedHistory: true + }); + threadId = resumeResult.thread.id; + threadTargetPath = (_c2 = resumeResult.thread.path) != null ? _c2 : null; + threadPath = this.toHostSessionPath(threadTargetPath); + this.loadedThreadId = threadId; + } else if (existingThreadId && existingThreadId === this.loadedThreadId) { + threadId = existingThreadId; + } else { + const permissionMode = this.resolveSandboxConfig(); + const startResult = await this.transport.request("thread/start", { + model: model != null ? model : DEFAULT_CODEX_PRIMARY_MODEL, + cwd: (_f2 = (_e2 = (_d = this.launchSpec) == null ? void 0 : _d.targetCwd) != null ? _e2 : getVaultPath(this.plugin.app)) != null ? _f2 : void 0, + approvalPolicy: permissionMode.approvalPolicy, + sandbox: permissionMode.sandbox, + serviceTier: resolveCodexServiceTier(this.getProviderSettings().serviceTier, model != null ? model : DEFAULT_CODEX_PRIMARY_MODEL), + baseInstructions: promptText, + experimentalRawEvents: true, + persistExtendedHistory: true + }); + threadId = startResult.thread.id; + threadTargetPath = (_g = startResult.thread.path) != null ? _g : null; + threadPath = this.toHostSessionPath(threadTargetPath); + this.loadedThreadId = threadId; + } + this.session.setThread(threadId, (_h2 = threadPath != null ? threadPath : this.currentThreadPath) != null ? _h2 : void 0); + if (threadPath) this.currentThreadPath = threadPath; + this.currentQueryThreadId = threadId; + if (completedPendingFork) { + this.pendingFork = null; + } + if (turn.isCompact) { + (_i = this.notificationRouter) == null ? void 0 : _i.beginTurn({ isPlanTurn: false }); + await this.transport.request( + "thread/compact/start", + { threadId } + ); + this.recordTurnMetadata({ wasSent: true }); + } else { + const sessionFilePathHint = (_j = threadPath != null ? threadPath : this.session.getSessionFilePath()) != null ? _j : null; + const skillInputs = await this.resolveSkillInputs(turn.request.text); + const turnInputBundle = this.buildInput(turn.prompt, turn.request.images, skillInputs); + this.registerActiveInputBundle(turnInputBundle); + const providerSettings = this.getProviderSettings(); + const effort = (_k3 = EFFORT_MAP[providerSettings.effortLevel]) != null ? _k3 : "medium"; + const resolvedModel = model != null ? model : DEFAULT_CODEX_PRIMARY_MODEL; + const isPlanMode = providerSettings.permissionMode === "plan"; + const externalContextPaths = this.resolveExternalContextPaths(turn, queryOptions); + const permissionMode = this.resolveSandboxConfig(); + const transcriptRootTarget = (_n = (_m = (_l2 = this.runtimeContext) == null ? void 0 : _l2.sessionsDirTarget) != null ? _m : deriveCodexSessionsRootFromSessionPath(threadTargetPath)) != null ? _n : this.resolveTranscriptRootTarget(sessionFilePathHint); + const sandboxPolicy = this.buildTurnSandboxPolicy( + externalContextPaths, + permissionMode.sandbox, + transcriptRootTarget, + sessionFilePathHint + ); + const collaborationMode = { + mode: isPlanMode ? "plan" : "default", + settings: { + model: resolvedModel, + reasoning_effort: effort, + developer_instructions: null + } + }; + const summary = getEffectiveCodexReasoningSummary(providerSettings, resolvedModel); + const serviceTier = resolveCodexServiceTier(providerSettings.serviceTier, resolvedModel); + (_o = this.notificationRouter) == null ? void 0 : _o.beginTurn({ isPlanTurn: isPlanMode }); + const turnResult = await this.transport.request("turn/start", { + threadId, + input: turnInputBundle.input, + approvalPolicy: permissionMode.approvalPolicy, + model: resolvedModel, + serviceTier, + effort, + summary, + sandboxPolicy, + collaborationMode + }); + this.currentTurnId = turnResult.turn.id; + this.recordTurnMetadata({ + userMessageId: turnResult.turn.id, + wasSent: true + }); + this.flushPendingTurnNotifications(); + } + while (true) { + if (this.canceled) { + while (this.chunkBuffer.length > 0) { + const chunk = this.chunkBuffer.shift(); + yield chunk; + if (chunk.type === "done") return; + } + yield { type: "done" }; + return; + } + if (this.chunkBuffer.length === 0) { + await new Promise((resolve8) => { + this.chunkResolve = resolve8; + if (this.chunkBuffer.length > 0 || this.canceled) { + resolve8(); + this.chunkResolve = null; + } + }); + } + while (this.chunkBuffer.length > 0) { + const chunk = this.chunkBuffer.shift(); + yield chunk; + if (chunk.type === "done") { + return; + } + } + } + } catch (err) { + if (this.canceled) { + yield { type: "done" }; + return; + } + const message = err instanceof Error ? err.message : "Unknown Codex error"; + yield { type: "error", content: message }; + yield { type: "done" }; + return; + } finally { + (_p = this.notificationRouter) == null ? void 0 : _p.endTurn(); + this.cleanupActiveInputBundles(); + this.currentTurnId = null; + this.currentQueryThreadId = null; + this.pendingTurnNotifications = []; + if (!this.session.getSessionFilePath()) { + const threadId = this.session.getThreadId(); + if (threadId) { + const sessionFilePath = findCodexSessionFile( + threadId, + (_r = this.resolveTranscriptRootHost((_q3 = this.session.getSessionFilePath()) != null ? _q3 : this.currentThreadPath)) != null ? _r : void 0 + ); + if (sessionFilePath) { + this.session.setThread(threadId, sessionFilePath); + } + } + } + } + } + async steer(turn) { + if (turn.isCompact || this.canceled) { + return false; + } + const transport = this.transport; + const threadId = this.currentQueryThreadId; + const turnId = this.currentTurnId; + if (!transport || !threadId || !turnId) { + return false; + } + const skillInputs = await this.resolveSkillInputs(turn.request.text); + const inputBundle = this.buildInput(turn.prompt, turn.request.images, skillInputs); + this.registerActiveInputBundle(inputBundle); + try { + const result = await transport.request("turn/steer", { + threadId, + input: inputBundle.input, + expectedTurnId: turnId + }); + if (result.turnId !== turnId) { + return false; + } + return this.currentQueryThreadId === threadId && this.currentTurnId === turnId && !this.canceled; + } catch (error48) { + this.disposeInputBundle(inputBundle); + throw error48; + } + } + cancel() { + this.canceled = true; + this.dismissAllPendingPrompts(); + const threadId = this.session.getThreadId(); + const turnId = this.currentTurnId; + if (this.transport && threadId && turnId) { + this.transport.request("turn/interrupt", { threadId, turnId }).catch(() => { + }); + } + if (this.chunkResolve) { + this.chunkResolve(); + this.chunkResolve = null; + } + } + resetSession() { + this.teardownState(); + } + getSessionId() { + return this.session.getThreadId(); + } + consumeSessionInvalidation() { + return this.session.consumeInvalidation(); + } + isReady() { + return this.ready; + } + resetTurnMetadata() { + this.turnMetadata = {}; + } + recordTurnMetadata(update) { + this.turnMetadata = { + ...this.turnMetadata, + ...update + }; + } + async getSupportedCommands() { + return []; + } + cleanup() { + this.cancel(); + this.teardownState(); + this.readyListeners.clear(); + } + async rewind(_userMessageId, _assistantMessageId, _mode) { + return { canRewind: false, error: "Codex does not support rewind" }; + } + setApprovalCallback(callback) { + this.approvalCallback = callback; + this.serverRequestRouter.setApprovalCallback(callback); + } + setApprovalDismisser(dismisser) { + this.approvalDismisser = dismisser; + } + setAskUserQuestionCallback(callback) { + this.askUserCallback = callback; + this.serverRequestRouter.setAskUserCallback(callback); + } + setExitPlanModeCallback(callback) { + this.exitPlanModeCallback = callback; + } + setPermissionModeSyncCallback(callback) { + this.permissionModeSyncCallback = callback; + } + setSubagentHookProvider(getState) { + this.subagentHookProvider = getState; + } + setAutoTurnCallback(callback) { + this.autoTurnCallback = callback; + } + buildSessionUpdates(params) { + var _a5; + const threadId = this.session.getThreadId(); + const sessionFilePath = (_a5 = this.session.getSessionFilePath()) != null ? _a5 : this.currentThreadPath; + const transcriptRootPath = this.resolveTranscriptRootHost(sessionFilePath); + const existingState = params.conversation ? getCodexState(params.conversation.providerState) : null; + const providerState = { + ...threadId ? { threadId } : {}, + ...sessionFilePath ? { sessionFilePath } : {}, + ...transcriptRootPath || (existingState == null ? void 0 : existingState.transcriptRootPath) ? { transcriptRootPath: transcriptRootPath != null ? transcriptRootPath : existingState == null ? void 0 : existingState.transcriptRootPath } : {}, + ...(existingState == null ? void 0 : existingState.forkSource) ? { forkSource: existingState.forkSource } : {}, + ...(existingState == null ? void 0 : existingState.forkSourceSessionFilePath) ? { forkSourceSessionFilePath: existingState.forkSourceSessionFilePath } : {}, + ...(existingState == null ? void 0 : existingState.forkSourceTranscriptRootPath) ? { forkSourceTranscriptRootPath: existingState.forkSourceTranscriptRootPath } : {} + }; + const updates = { + sessionId: threadId, + providerState + }; + if (params.sessionInvalidated && params.conversation) { + updates.sessionId = null; + updates.providerState = void 0; + } + return { updates }; + } + resolveSessionIdForFork(conversation) { + var _a5, _b3, _c2, _d; + const threadId = this.session.getThreadId(); + if (threadId) return threadId; + if (!conversation) return null; + const state = getCodexState(conversation.providerState); + return (_d = (_c2 = (_a5 = state.threadId) != null ? _a5 : conversation.sessionId) != null ? _c2 : (_b3 = state.forkSource) == null ? void 0 : _b3.sessionId) != null ? _d : null; + } + // ----------------------------------------------------------------------- + // Private helpers + // ----------------------------------------------------------------------- + teardownState() { + this.cleanupActiveInputBundles(); + this.session.reset(); + this.launchSpec = null; + this.runtimeContext = null; + this.loadedThreadId = null; + this.currentThreadPath = null; + this.currentTurnId = null; + this.currentQueryThreadId = null; + this.pendingTurnNotifications = []; + this.pendingFork = null; + this.clientConfigKey = null; + this.shutdownProcess().catch(() => { + }); + this.setReady(false); + } + dismissApprovalUI() { + if (this.approvalDismisser) { + this.approvalDismisser(); + } + } + dismissAllPendingPrompts() { + this.dismissApprovalUI(); + this.serverRequestRouter.abortPendingAskUser(); + } + registerActiveInputBundle(bundle) { + this.activeInputBundles.add(bundle); + } + disposeInputBundle(bundle) { + if (this.activeInputBundles.delete(bundle)) { + bundle.cleanup(); + return; + } + bundle.cleanup(); + } + cleanupActiveInputBundles() { + for (const bundle of this.activeInputBundles) { + bundle.cleanup(); + } + this.activeInputBundles.clear(); + } + setReady(ready) { + this.ready = ready; + for (const listener of this.readyListeners) { + listener(ready); + } + } + getSystemPromptSettings() { + var _a5; + const settings11 = this.plugin.settings; + return { + mediaFolder: settings11.mediaFolder, + customPrompt: settings11.systemPrompt, + vaultPath: (_a5 = getVaultPath(this.plugin.app)) != null ? _a5 : void 0, + userName: settings11.userName + }; + } + getProviderSettings() { + return ProviderSettingsCoordinator.getProviderSettingsSnapshot( + this.plugin.settings, + this.providerId + ); + } + getAuxiliaryModel() { + var _a5; + return (_a5 = this.resolveModel()) != null ? _a5 : null; + } + resolveModel(queryOptions) { + var _a5; + const providerSettings = this.getProviderSettings(); + return (_a5 = queryOptions == null ? void 0 : queryOptions.model) != null ? _a5 : providerSettings.model; + } + resolveSandboxConfig() { + const providerSettings = this.getProviderSettings(); + return resolveCodexSandboxConfig( + providerSettings.permissionMode, + getCodexProviderSettings(providerSettings).safeMode + ); + } + async startAppServer(launchSpec, clientConfigKey) { + this.launchSpec = launchSpec; + this.process = new CodexAppServerProcess(launchSpec); + this.process.start(); + this.transport = new CodexRpcTransport(this.process); + this.transport.start(); + const initializeResult = await initializeCodexAppServerTransport(this.transport); + this.runtimeContext = createCodexRuntimeContext(launchSpec, initializeResult); + this.clientConfigKey = clientConfigKey; + } + wireTransportHandlers() { + if (!this.transport || !this.notificationRouter) return; + const router = this.notificationRouter; + const methods = [ + "item/agentMessage/delta", + "item/started", + "item/completed", + "item/plan/delta", + "item/reasoning/textDelta", + "item/reasoning/summaryTextDelta", + "item/reasoning/summaryPartAdded", + "thread/tokenUsage/updated", + "turn/plan/updated", + "turn/completed", + "error", + "thread/started", + "thread/status/changed", + "turn/started", + "serverRequest/resolved", + "item/commandExecution/outputDelta", + "item/fileChange/outputDelta", + "item/fileChange/patchUpdated", + "rawResponseItem/completed", + "event_msg" + ]; + for (const method of methods) { + this.transport.onNotification(method, (params) => { + if (method === "serverRequest/resolved") { + this.handleServerRequestResolved(params); + return; + } + if (!this.routeNotification(method, params)) { + return; + } + router.handleNotification(method, params); + }); + } + const requestMethods = [ + "item/commandExecution/requestApproval", + "item/fileChange/requestApproval", + "item/permissions/requestApproval", + "item/tool/requestUserInput" + ]; + for (const method of requestMethods) { + this.transport.onServerRequest(method, (requestId, params) => { + return this.serverRequestRouter.handleServerRequest(requestId, method, params); + }); + } + } + async shutdownProcess() { + if (this.transport) { + this.transport.dispose(); + this.transport = null; + } + if (this.process) { + await this.process.shutdown(); + this.process = null; + } + this.launchSpec = null; + this.runtimeContext = null; + this.notificationRouter = null; + this.currentTurnId = null; + this.currentQueryThreadId = null; + this.pendingTurnNotifications = []; + this.loadedThreadId = null; + } + resolveExternalContextPaths(turn, queryOptions) { + var _a5, _b3; + const externalContextPaths = (_b3 = (_a5 = turn.request.externalContextPaths) != null ? _a5 : queryOptions == null ? void 0 : queryOptions.externalContextPaths) != null ? _b3 : []; + return [...new Set(externalContextPaths.filter((value) => typeof value === "string" && value.trim().length > 0))]; + } + buildTurnSandboxPolicy(externalContextPaths, sandboxMode, transcriptRootTargetHint, sessionFilePathHint) { + var _a5, _b3, _c2, _d, _e2, _f2; + if (sandboxMode === "danger-full-access") { + return { type: "dangerFullAccess" }; + } + if (sandboxMode === "read-only") { + return { + type: "readOnly", + access: { type: "fullAccess" }, + networkAccess: false + }; + } + if (sandboxMode !== "workspace-write") { + return void 0; + } + const mappedExternalContextPaths = this.mapRequiredHostPathsToTarget( + externalContextPaths, + "external context path" + ); + const memoriesDirTarget = (_c2 = (_a5 = deriveCodexMemoriesDirFromSessionsRoot(transcriptRootTargetHint)) != null ? _a5 : this.resolveMemoriesDirTarget(sessionFilePathHint)) != null ? _c2 : ((_b3 = this.launchSpec) == null ? void 0 : _b3.target.method) === "wsl" ? null : path15.join(os10.homedir(), ".codex", "memories"); + const writableRoots = [ + (_e2 = (_d = this.launchSpec) == null ? void 0 : _d.targetCwd) != null ? _e2 : getVaultPath(this.plugin.app), + ...mappedExternalContextPaths, + memoriesDirTarget, + this.mapHostPathToTarget(os10.tmpdir()), + ((_f2 = this.launchSpec) == null ? void 0 : _f2.target.platformFamily) === "unix" ? "/tmp" : null, + this.mapHostPathToTarget(process.env.TMPDIR) + ].filter((value) => typeof value === "string" && value.trim().length > 0); + return { + type: "workspaceWrite", + writableRoots: [...new Set(writableRoots)], + readOnlyAccess: { type: "fullAccess" }, + networkAccess: false, + excludeTmpdirEnvVar: false, + excludeSlashTmp: false + }; + } + handleServerRequestResolved(params) { + if (this.serverRequestRouter.hasPendingApprovalRequest(params.requestId, params.threadId)) { + this.dismissApprovalUI(); + return; + } + this.serverRequestRouter.abortPendingAskUser(params.requestId, params.threadId); + } + routeNotification(method, params) { + if (method === "turn/started") { + this.handleTurnStartedNotification(params); + return false; + } + const scope = this.extractNotificationScope(method, params); + if (!scope) { + return true; + } + if (!this.currentQueryThreadId || scope.threadId !== this.currentQueryThreadId) { + return false; + } + if (!this.currentTurnId) { + this.pendingTurnNotifications.push({ method, params }); + return false; + } + if (scope.turnId !== this.currentTurnId) { + return false; + } + return true; + } + handleTurnStartedNotification(params) { + var _a5; + if (!params || typeof params !== "object") return; + const notification = params; + const threadId = notification.threadId; + const turnId = (_a5 = notification.turn) == null ? void 0 : _a5.id; + if (!threadId || !turnId) return; + if (threadId !== this.currentQueryThreadId) return; + if (!this.currentTurnId) { + this.currentTurnId = turnId; + this.flushPendingTurnNotifications(); + } + } + validateCompactTurn(turn) { + if (!turn.isCompact) { + return null; + } + if (turn.request.text.trim() !== "/compact") { + return "/compact does not accept arguments"; + } + return null; + } + flushPendingTurnNotifications() { + if (!this.notificationRouter || !this.currentTurnId) { + this.pendingTurnNotifications = []; + return; + } + const pending = this.pendingTurnNotifications; + this.pendingTurnNotifications = []; + for (const notification of pending) { + const scope = this.extractNotificationScope(notification.method, notification.params); + if (!scope) { + this.notificationRouter.handleNotification(notification.method, notification.params); + continue; + } + if (scope.threadId === this.currentQueryThreadId && scope.turnId === this.currentTurnId) { + this.notificationRouter.handleNotification(notification.method, notification.params); + } + } + } + extractNotificationScope(method, params) { + if (!params || typeof params !== "object") { + return null; + } + const notification = params; + const threadId = typeof notification.threadId === "string" ? notification.threadId : null; + if (method === "turn/completed") { + const turn = notification.turn; + const turnId2 = turn && typeof turn === "object" && typeof turn.id === "string" ? turn.id : null; + return threadId && turnId2 ? { threadId, turnId: turnId2 } : null; + } + const turnId = typeof notification.turnId === "string" ? notification.turnId : typeof notification.turn_id === "string" ? notification.turn_id : null; + return threadId && turnId ? { threadId, turnId } : null; + } + async resolveSkillInputs(text) { + var _a5, _b3, _c2, _d, _e2, _f2, _g; + const skillNames = extractExplicitCodexSkillNames(text); + if (skillNames.length === 0 || !this.transport) { + return []; + } + try { + const cwd = (_c2 = (_b3 = (_a5 = this.launchSpec) == null ? void 0 : _a5.targetCwd) != null ? _b3 : getVaultPath(this.plugin.app)) != null ? _c2 : process.cwd(); + const result = await this.transport.request("skills/list", { + cwds: [cwd] + }); + const skills = (_g = (_f2 = (_d = result.data.find((entry) => entry.cwd === cwd)) == null ? void 0 : _d.skills) != null ? _f2 : (_e2 = result.data[0]) == null ? void 0 : _e2.skills) != null ? _g : []; + const resolvedInputs = []; + for (const skillName of skillNames) { + const resolvedSkill = findPreferredCodexSkillByName(skills, skillName); + if (!resolvedSkill) { + continue; + } + resolvedInputs.push({ + type: "skill", + name: resolvedSkill.name, + path: resolvedSkill.path + }); + } + return resolvedInputs; + } catch (e2) { + return []; + } + } + buildInput(text, images, skills) { + const input = []; + let tempDir = null; + const cleanup = () => { + if (!tempDir) { + return; + } + try { + fs16.rmSync(tempDir, { recursive: true, force: true }); + } catch (e2) { + } + }; + try { + if (images && images.length > 0) { + tempDir = fs16.mkdtempSync(path15.join(os10.tmpdir(), "claudian-codex-images-")); + for (let i = 0; i < images.length; i++) { + const img = images[i]; + if (!img.mediaType.startsWith("image/")) continue; + const filename = toAttachmentFilename(img, i); + const filePath = path15.join(tempDir, `${i + 1}-${filename}`); + fs16.writeFileSync(filePath, Buffer.from(img.data, "base64")); + const targetFilePath = this.mapHostPathToTarget(filePath); + if (!targetFilePath) { + throw new Error(`Codex cannot access image attachment path from the selected target: ${filePath}`); + } + input.push({ type: "localImage", path: targetFilePath }); + } + } + if (text) { + input.push({ type: "text", text, text_elements: [] }); + } + if (skills && skills.length > 0) { + input.push(...skills); + } + return { input, cleanup }; + } catch (error48) { + cleanup(); + throw error48; + } + } + toHostSessionPath(targetPath) { + var _a5, _b3; + if (!targetPath) { + return null; + } + return (_b3 = (_a5 = this.launchSpec) == null ? void 0 : _a5.pathMapper.toHostPath(targetPath)) != null ? _b3 : targetPath; + } + toTargetSessionPath(sessionPath) { + var _a5; + if (!sessionPath) { + return null; + } + if (!this.launchSpec) { + return sessionPath; + } + if (this.launchSpec.target.platformFamily === "unix" && sessionPath.startsWith("/")) { + return sessionPath; + } + if (this.launchSpec.target.platformFamily === "windows" && (/^[A-Za-z]:[\\/]/.test(sessionPath) || sessionPath.startsWith("\\\\"))) { + return sessionPath; + } + return (_a5 = this.launchSpec.pathMapper.toTargetPath(sessionPath)) != null ? _a5 : sessionPath; + } + mapHostPathToTarget(hostPath) { + var _a5, _b3; + if (!hostPath) { + return null; + } + return (_b3 = (_a5 = this.launchSpec) == null ? void 0 : _a5.pathMapper.toTargetPath(hostPath)) != null ? _b3 : hostPath; + } + mapRequiredHostPathsToTarget(hostPaths, label) { + if (!this.launchSpec) { + return hostPaths; + } + return hostPaths.map((hostPath) => { + const targetPath = this.launchSpec.pathMapper.toTargetPath(hostPath); + if (!targetPath) { + throw new Error(`Codex cannot access ${label} from the selected target: ${hostPath}`); + } + return targetPath; + }); + } + resolveTranscriptRootHost(sessionFilePath) { + var _a5, _b3, _c2; + return (_c2 = (_a5 = this.runtimeContext) == null ? void 0 : _a5.sessionsDirHost) != null ? _c2 : deriveCodexSessionsRootFromSessionPath( + (_b3 = sessionFilePath != null ? sessionFilePath : this.session.getSessionFilePath()) != null ? _b3 : this.currentThreadPath + ); + } + resolveTranscriptRootTarget(sessionFilePath) { + var _a5, _b3; + if ((_a5 = this.runtimeContext) == null ? void 0 : _a5.sessionsDirTarget) { + return this.runtimeContext.sessionsDirTarget; + } + const targetSessionPath = this.toTargetSessionPath( + (_b3 = sessionFilePath != null ? sessionFilePath : this.session.getSessionFilePath()) != null ? _b3 : this.currentThreadPath + ); + return deriveCodexSessionsRootFromSessionPath(targetSessionPath); + } + resolveMemoriesDirTarget(sessionFilePath) { + var _a5; + if ((_a5 = this.runtimeContext) == null ? void 0 : _a5.memoriesDirTarget) { + return this.runtimeContext.memoriesDirTarget; + } + return deriveCodexMemoriesDirFromSessionsRoot( + this.resolveTranscriptRootTarget(sessionFilePath) + ); + } +}; +function toAttachmentFilename(attachment, index) { + var _a5, _b3; + const base = ((_a5 = attachment.filename) != null ? _a5 : "").trim().replace(/[^A-Za-z0-9._-]/g, "_") || `image-${index + 1}`; + if (base.includes(".")) return base; + const subtype = (_b3 = attachment.mediaType.split("/")[1]) != null ? _b3 : "img"; + const extension = subtype === "jpeg" ? "jpg" : subtype; + return `${base}.${extension}`; +} + +// src/providers/codex/registration.ts +var codexProviderRegistration = { + displayName: "Codex", + blankTabOrder: 15, + isEnabled: (settings11) => getCodexProviderSettings(settings11).enabled, + capabilities: CODEX_PROVIDER_CAPABILITIES, + environmentKeyPatterns: [/^OPENAI_/i, /^CODEX_/i], + chatUIConfig: codexChatUIConfig, + settingsReconciler: codexSettingsReconciler, + createRuntime: ({ plugin }) => new CodexChatRuntime(plugin), + createTitleGenerationService: (plugin) => new CodexTitleGenerationService(plugin), + createInstructionRefineService: (plugin) => new CodexInstructionRefineService(plugin), + createInlineEditService: (plugin) => new CodexInlineEditService(plugin), + historyService: new CodexConversationHistoryService(), + taskResultInterpreter: new CodexTaskResultInterpreter(), + subagentLifecycleAdapter: codexSubagentLifecycleAdapter +}; + +// src/providers/opencode/agents/OpencodeAgentMentionProvider.ts +var OpencodeAgentMentionProvider = class { + constructor(storage) { + this.storage = storage; + this.agents = []; + } + async loadAgents() { + this.agents = await this.storage.loadAll(); + } + searchAgents(query) { + const q = query.toLowerCase(); + return this.agents.filter((agent) => isMentionableSubagent(agent)).filter((agent) => agent.name.toLowerCase().includes(q) || agent.description.toLowerCase().includes(q)).map((agent) => ({ + id: agent.name, + name: agent.name, + description: agent.description, + source: "vault" + })); + } +}; +function isMentionableSubagent(agent) { + if (agent.hidden || agent.disable) { + return false; + } + return agent.mode === "subagent"; +} + +// src/providers/opencode/commands/OpencodeCommandCatalog.ts +function slashCommandToEntry2(command) { + var _a5; + return { + id: command.id, + providerId: "opencode", + kind: "command", + name: command.name, + description: command.description, + content: command.content, + argumentHint: command.argumentHint, + allowedTools: command.allowedTools, + model: command.model, + disableModelInvocation: command.disableModelInvocation, + userInvocable: command.userInvocable, + context: command.context, + agent: command.agent, + hooks: command.hooks, + scope: "runtime", + source: (_a5 = command.source) != null ? _a5 : "sdk", + isEditable: false, + isDeletable: false, + displayPrefix: "/", + insertPrefix: "/" + }; +} +function dedupeRuntimeCommands(commands) { + const deduped = []; + const seen = /* @__PURE__ */ new Set(); + for (const command of commands) { + const normalizedName = command.name.trim().replace(/^\/+/, ""); + if (!normalizedName) { + continue; + } + const key = normalizedName.toLowerCase(); + if (seen.has(key)) { + continue; + } + seen.add(key); + deduped.push({ + ...command, + name: normalizedName + }); + } + return deduped; +} +var OpencodeCommandCatalog = class { + constructor() { + this.runtimeCommands = []; + } + setRuntimeCommands(commands) { + this.runtimeCommands = dedupeRuntimeCommands(commands); + } + async listDropdownEntries(_context) { + return this.runtimeCommands.map(slashCommandToEntry2); + } + async listVaultEntries() { + return []; + } + async saveVaultEntry(_entry) { + throw new Error("OpenCode runtime commands are not editable from Claudian."); + } + async deleteVaultEntry(_entry) { + throw new Error("OpenCode runtime commands are not deletable from Claudian."); + } + getDropdownConfig() { + return { + providerId: "opencode", + triggerChars: ["/"], + builtInPrefix: "/", + skillPrefix: "/", + commandPrefix: "/" + }; + } + async refresh() { + } +}; + +// src/providers/opencode/runtime/OpencodeCliResolver.ts +init_env(); +var OpencodeCliResolver = class { + constructor() { + this.cachedHostname = getHostnameKey(); + this.lastCliPath = ""; + this.lastHostnamePath = ""; + this.lastEnvText = ""; + this.resolvedPath = null; + } + resolveFromSettings(settings11) { + var _a5; + const opencodeSettings = getOpencodeProviderSettings(settings11); + const cliPath = opencodeSettings.cliPath.trim(); + const hostnamePath = ((_a5 = opencodeSettings.cliPathsByHost[this.cachedHostname]) != null ? _a5 : "").trim(); + const envText = getRuntimeEnvironmentText(settings11, "opencode"); + if (this.resolvedPath !== null && cliPath === this.lastCliPath && hostnamePath === this.lastHostnamePath && envText === this.lastEnvText) { + return this.resolvedPath; + } + this.lastCliPath = cliPath; + this.lastHostnamePath = hostnamePath; + this.lastEnvText = envText; + this.resolvedPath = this.resolve( + opencodeSettings.cliPathsByHost, + cliPath, + envText + ); + return this.resolvedPath; + } + resolve(hostnamePaths, legacyPath, envText) { + var _a5, _b3, _c2; + const hostnamePath = ((_a5 = hostnamePaths == null ? void 0 : hostnamePaths[this.cachedHostname]) != null ? _a5 : "").trim(); + const customEnv = parseEnvironmentVariables(envText || ""); + return (_c2 = (_b3 = resolveConfiguredCliPath(hostnamePath)) != null ? _b3 : resolveConfiguredCliPath(legacyPath.trim())) != null ? _c2 : findCliBinaryPath("opencode", customEnv.PATH); + } + reset() { + this.lastCliPath = ""; + this.lastHostnamePath = ""; + this.lastEnvText = ""; + this.resolvedPath = null; + } +}; + +// src/providers/opencode/storage/OpencodeAgentStorage.ts +var path16 = __toESM(require("node:path")); + +// src/providers/opencode/types/agent.ts +var OPENCODE_AGENT_KNOWN_KEYS = /* @__PURE__ */ new Set([ + "name", + "description", + "mode", + "model", + "variant", + "temperature", + "top_p", + "steps", + "maxSteps", + "hidden", + "color", + "disable", + "tools", + "options", + "permission" +]); + +// src/providers/opencode/storage/OpencodeAgentStorage.ts +var OPENCODE_AGENT_PATH = ".opencode/agent"; +var OPENCODE_AGENTS_PATH = ".opencode/agents"; +var OPENCODE_AGENT_SCAN_PATHS = [ + OPENCODE_AGENTS_PATH, + OPENCODE_AGENT_PATH +]; +var OPENCODE_DEFAULT_AGENT_SAVE_PATH = OPENCODE_AGENT_PATH; +var OPENCODE_AGENT_PERSISTENCE_PREFIX = "opencode-agent"; +function createOpencodeAgentPersistenceKey(location) { + return `${OPENCODE_AGENT_PERSISTENCE_PREFIX}:${encodeURIComponent(normalizeVaultPath(location.filePath))}`; +} +function parseOpencodeAgentPersistenceKey(persistenceKey) { + if (!persistenceKey) { + return null; + } + const normalizedKey = normalizeVaultPath(persistenceKey); + if (isSupportedAgentFilePath(normalizedKey)) { + return { filePath: normalizedKey }; + } + const [prefix, encodedRelativePath] = persistenceKey.split(":"); + if (prefix !== OPENCODE_AGENT_PERSISTENCE_PREFIX || !encodedRelativePath) { + return null; + } + const decoded = normalizeVaultPath(decodeURIComponent(encodedRelativePath)); + if (isSupportedAgentFilePath(decoded)) { + return { filePath: decoded }; + } + return decoded.endsWith(".md") ? { filePath: `${OPENCODE_AGENTS_PATH}/${decoded}` } : null; +} +var OpencodeAgentStorage = class { + constructor(vaultAdapter) { + this.vaultAdapter = vaultAdapter; + } + async loadAll() { + return this.scanAdapter(this.vaultAdapter); + } + async load(agent) { + const filePath = this.resolveCurrentPath(agent); + try { + if (!await this.vaultAdapter.exists(filePath)) return null; + const content = await this.vaultAdapter.read(filePath); + return parseOpencodeAgentMarkdown(content, filePath); + } catch (e2) { + return null; + } + } + async save(agent, previous) { + const filePath = this.resolveTargetPath(agent, previous); + const previousPath = previous ? this.resolveCurrentPath(previous) : null; + await this.vaultAdapter.ensureFolder(path16.posix.dirname(filePath)); + const content = serializeOpencodeAgentMarkdown(agent); + await this.vaultAdapter.write(filePath, content); + if (previousPath && previousPath !== filePath) { + await this.vaultAdapter.delete(previousPath); + } + } + async delete(agent) { + const filePath = this.resolveCurrentPath(agent); + await this.vaultAdapter.delete(filePath); + } + resolveCurrentPath(agent) { + const persistedLocation = parseOpencodeAgentPersistenceKey(agent.persistenceKey); + if (persistedLocation) { + return persistedLocation.filePath; + } + return `${OPENCODE_DEFAULT_AGENT_SAVE_PATH}/${agent.name}.md`; + } + resolveTargetPath(agent, previous) { + if (previous && previous.name === agent.name) { + return this.resolveCurrentPath(previous); + } + return `${OPENCODE_DEFAULT_AGENT_SAVE_PATH}/${agent.name}.md`; + } + async scanAdapter(adapter) { + const agentsByName = /* @__PURE__ */ new Map(); + for (const rootPath of OPENCODE_AGENT_SCAN_PATHS) { + try { + const files = await adapter.listFilesRecursive(rootPath); + for (const filePath of files) { + if (!filePath.endsWith(".md")) continue; + try { + const content = await adapter.read(filePath); + const agent = parseOpencodeAgentMarkdown(content, filePath); + if (!agent) continue; + const dedupeKey = agent.name.toLowerCase(); + agentsByName.delete(dedupeKey); + agentsByName.set(dedupeKey, agent); + } catch (e2) { + } + } + } catch (e2) { + } + } + return Array.from(agentsByName.values()); + } +}; +function parseOpencodeAgentMarkdown(content, filePath) { + var _a5; + const parsed = parseFrontmatter(content); + if (!parsed) { + return null; + } + const fileName = normalizeAgentNameFromPath(filePath); + const frontmatter = parsed.frontmatter; + const rawName = typeof frontmatter.name === "string" ? frontmatter.name.trim() : ""; + const name = rawName || fileName; + const description = typeof frontmatter.description === "string" ? frontmatter.description.trim() : ""; + if (!name || !description) { + return null; + } + const result = { + name, + description, + prompt: parsed.body.trim(), + persistenceKey: createOpencodeAgentPersistenceKey({ + filePath: normalizeVaultPath(filePath) + }) + }; + const mode = normalizeMode(frontmatter.mode); + if (mode) result.mode = mode; + if (typeof frontmatter.model === "string" && frontmatter.model.trim()) { + result.model = frontmatter.model.trim(); + } + if (typeof frontmatter.variant === "string" && frontmatter.variant.trim()) { + result.variant = frontmatter.variant.trim(); + } + if (typeof frontmatter.temperature === "number" && Number.isFinite(frontmatter.temperature)) { + result.temperature = frontmatter.temperature; + } + const topP = normalizeFiniteNumber(frontmatter.top_p); + if (topP !== void 0) { + result.topP = topP; + } + if (typeof frontmatter.color === "string" && frontmatter.color.trim()) { + result.color = frontmatter.color.trim(); + } + const steps = (_a5 = normalizePositiveInteger(frontmatter.steps)) != null ? _a5 : normalizePositiveInteger(frontmatter.maxSteps); + if (steps !== void 0) { + result.steps = steps; + } + if (extractBoolean(frontmatter, "hidden") !== void 0) { + result.hidden = extractBoolean(frontmatter, "hidden"); + } + if (extractBoolean(frontmatter, "disable") !== void 0) { + result.disable = extractBoolean(frontmatter, "disable"); + } + if (isBooleanRecord(frontmatter.tools)) { + result.tools = { ...frontmatter.tools }; + } + if (isRecord(frontmatter.options)) { + result.options = { ...frontmatter.options }; + } + if (frontmatter.permission !== void 0) { + result.permission = frontmatter.permission; + } + const extraFrontmatter = {}; + for (const [key, value] of Object.entries(frontmatter)) { + if (!OPENCODE_AGENT_KNOWN_KEYS.has(key)) { + extraFrontmatter[key] = value; + } + } + if (Object.keys(extraFrontmatter).length > 0) { + result.extraFrontmatter = extraFrontmatter; + } + return result; +} +function serializeOpencodeAgentMarkdown(agent) { + const lines = ["---"]; + lines.push(`name: ${yamlString(agent.name)}`); + lines.push(`description: ${yamlString(agent.description)}`); + if (agent.mode) { + lines.push(`mode: ${agent.mode}`); + } + if (agent.model) { + lines.push(`model: ${serializeYamlValue(agent.model)}`); + } + if (agent.variant) { + lines.push(`variant: ${serializeYamlValue(agent.variant)}`); + } + if (agent.temperature !== void 0) { + lines.push(`temperature: ${serializeYamlValue(agent.temperature)}`); + } + if (agent.topP !== void 0) { + lines.push(`top_p: ${serializeYamlValue(agent.topP)}`); + } + if (agent.color) { + lines.push(`color: ${serializeYamlValue(agent.color)}`); + } + if (agent.steps !== void 0) { + lines.push(`steps: ${serializeYamlValue(agent.steps)}`); + } + if (agent.hidden) { + lines.push("hidden: true"); + } + if (agent.disable) { + lines.push("disable: true"); + } + if (agent.tools && Object.keys(agent.tools).length > 0) { + lines.push(`tools: ${serializeYamlValue(agent.tools)}`); + } + if (agent.options && Object.keys(agent.options).length > 0) { + lines.push(`options: ${serializeYamlValue(agent.options)}`); + } + if (agent.permission !== void 0) { + lines.push(`permission: ${serializeYamlValue(agent.permission)}`); + } + if (agent.extraFrontmatter) { + for (const [key, value] of Object.entries(agent.extraFrontmatter)) { + lines.push(`${key}: ${serializeYamlValue(value)}`); + } + } + lines.push("---"); + lines.push(agent.prompt); + return lines.join("\n"); +} +function normalizeAgentNameFromPath(filePath) { + const relativePath = toRelativeAgentPath(filePath); + return relativePath.replace(/\.md$/i, ""); +} +function toRelativeAgentPath(filePath) { + var _a5; + const normalized = normalizeVaultPath(filePath); + for (const rootPath of OPENCODE_AGENT_SCAN_PATHS) { + const prefix = `${rootPath}/`; + const index = normalized.lastIndexOf(prefix); + if (index >= 0) { + return normalized.slice(index + prefix.length); + } + } + return (_a5 = normalized.split("/").pop()) != null ? _a5 : normalized; +} +function normalizeMode(value) { + return value === "subagent" || value === "primary" || value === "all" ? value : void 0; +} +function normalizeFiniteNumber(value) { + return typeof value === "number" && Number.isFinite(value) ? value : void 0; +} +function normalizePositiveInteger(value) { + return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : void 0; +} +function isBooleanRecord(value) { + if (!isRecord(value)) { + return false; + } + return Object.values(value).every((entry) => typeof entry === "boolean"); +} +function serializeYamlValue(value) { + if (typeof value === "string") { + return yamlString(value); + } + if (typeof value === "number" || typeof value === "boolean") { + return String(value); + } + if (value === null) { + return "null"; + } + return JSON.stringify(value); +} +function normalizeVaultPath(filePath) { + return filePath.replace(/\\/g, "/"); +} +function isSupportedAgentFilePath(filePath) { + return OPENCODE_AGENT_SCAN_PATHS.some((rootPath) => filePath.startsWith(`${rootPath}/`)) && filePath.endsWith(".md"); +} + +// src/providers/opencode/ui/OpencodeSettingsTab.ts +var fs20 = __toESM(require("fs")); +var import_obsidian19 = require("obsidian"); +init_env(); +init_path(); + +// src/providers/opencode/runtime/OpencodeChatRuntime.ts +var fs19 = __toESM(require("node:fs/promises")); +var path19 = __toESM(require("node:path")); +init_env(); +init_path(); + +// src/providers/acp/AcpJsonRpcTransport.ts +var import_node_readline = require("node:readline"); +var DEFAULT_TIMEOUT_MS2 = 3e4; +var JsonRpcTransportClosedError = class extends Error { + constructor(message = "JSON-RPC transport closed") { + super(message); + this.name = "JsonRpcTransportClosedError"; + } +}; +var JsonRpcErrorResponse = class extends Error { + constructor(method, code, message, data) { + super(message); + this.method = method; + this.code = code; + this.data = data; + this.name = "JsonRpcErrorResponse"; + } +}; +var AcpJsonRpcTransport = class { + constructor(streams, defaultTimeoutMs = DEFAULT_TIMEOUT_MS2) { + this.streams = streams; + this.defaultTimeoutMs = defaultTimeoutMs; + this.abortController = new AbortController(); + this.closeListeners = /* @__PURE__ */ new Set(); + this.disposed = false; + this.nextId = 1; + this.notificationHandlers = /* @__PURE__ */ new Map(); + this.pending = /* @__PURE__ */ new Map(); + this.readline = null; + this.requestHandlers = /* @__PURE__ */ new Map(); + this.streamUnsubscribers = []; + } + get signal() { + return this.abortController.signal; + } + get isClosed() { + return this.disposed; + } + start() { + var _a5, _b3; + if (this.readline || this.disposed) { + return; + } + this.readline = (0, import_node_readline.createInterface)({ + crlfDelay: Infinity, + input: this.streams.input + }); + this.readline.on("line", (line) => this.handleLine(line)); + this.readline.on("close", () => { + if (!this.disposed) { + this.dispose(new JsonRpcTransportClosedError("JSON-RPC input closed")); + } + }); + this.streamUnsubscribers.push( + subscribeStreamEvent(this.streams.input, "error", (error48) => { + if (!this.disposed) { + this.dispose(error48 instanceof Error ? error48 : new JsonRpcTransportClosedError("JSON-RPC input error")); + } + }), + subscribeStreamEvent(this.streams.output, "close", () => { + if (!this.disposed) { + this.dispose(new JsonRpcTransportClosedError("JSON-RPC output closed")); + } + }), + subscribeStreamEvent(this.streams.output, "error", (error48) => { + if (!this.disposed) { + this.dispose(error48 instanceof Error ? error48 : new JsonRpcTransportClosedError("JSON-RPC output error")); + } + }) + ); + this.unregisterClose = (_b3 = (_a5 = this.streams).onClose) == null ? void 0 : _b3.call(_a5, (error48) => { + if (!this.disposed) { + this.dispose(error48 != null ? error48 : new JsonRpcTransportClosedError()); + } + }); + } + onClose(listener) { + this.closeListeners.add(listener); + return () => { + this.closeListeners.delete(listener); + }; + } + onNotification(method, handler) { + let handlers = this.notificationHandlers.get(method); + if (!handlers) { + handlers = /* @__PURE__ */ new Set(); + this.notificationHandlers.set(method, handlers); + } + handlers.add(handler); + return () => { + const current = this.notificationHandlers.get(method); + if (!current) return; + current.delete(handler); + if (current.size === 0) { + this.notificationHandlers.delete(method); + } + }; + } + onRequest(method, handler) { + this.requestHandlers.set(method, handler); + return () => { + if (this.requestHandlers.get(method) === handler) { + this.requestHandlers.delete(method); + } + }; + } + async request(method, params, options = {}) { + var _a5; + this.start(); + if (this.disposed) { + throw new JsonRpcTransportClosedError(); + } + const id = this.nextId++; + const timeoutMs = (_a5 = options.timeoutMs) != null ? _a5 : this.defaultTimeoutMs; + return new Promise((resolve8, reject) => { + let timer; + let onAbort; + const cleanup = () => { + if (timer) window.clearTimeout(timer); + if (onAbort && options.signal) { + options.signal.removeEventListener("abort", onAbort); + } + }; + const resolvePending = (result) => { + resolve8(result); + }; + const pending = { + cleanup, + method, + reject, + resolve: resolvePending + }; + if (timeoutMs > 0) { + timer = window.setTimeout(() => { + this.pending.delete(id); + cleanup(); + reject(new Error(`Request timeout: ${method} (${timeoutMs}ms)`)); + }, timeoutMs); + } + if (options.signal) { + if (options.signal.aborted) { + cleanup(); + reject(new Error(`Request aborted: ${method}`)); + return; + } + onAbort = () => { + this.pending.delete(id); + cleanup(); + reject(new Error(`Request aborted: ${method}`)); + }; + options.signal.addEventListener("abort", onAbort, { once: true }); + } + this.pending.set(id, pending); + try { + this.sendRaw({ id, jsonrpc: "2.0", method, params }); + } catch (error48) { + this.pending.delete(id); + cleanup(); + const transportError = error48 instanceof Error ? error48 : new Error(String(error48)); + this.dispose(transportError); + reject(transportError); + } + }); + } + notify(method, params) { + this.start(); + if (this.disposed) { + return; + } + this.trySendRaw({ jsonrpc: "2.0", method, params }); + } + dispose(error48 = new JsonRpcTransportClosedError("JSON-RPC transport disposed")) { + var _a5, _b3; + if (this.disposed) { + return; + } + this.disposed = true; + this.abortController.abort(); + (_a5 = this.unregisterClose) == null ? void 0 : _a5.call(this); + this.unregisterClose = void 0; + while (this.streamUnsubscribers.length > 0) { + (_b3 = this.streamUnsubscribers.pop()) == null ? void 0 : _b3(); + } + if (this.readline) { + this.readline.removeAllListeners(); + this.readline.close(); + this.readline = null; + } + for (const [id, pending] of this.pending) { + pending.cleanup(); + pending.reject(error48); + this.pending.delete(id); + } + for (const listener of this.closeListeners) { + try { + listener(error48); + } catch (e2) { + } + } + } + handleLine(line) { + if (line.trim().length === 0) { + return; + } + let message; + try { + message = JSON.parse(line); + } catch (e2) { + return; + } + if ("id" in message && !("method" in message)) { + this.handleResponse(message); + return; + } + if ("method" in message && "id" in message) { + this.handleRequest(message); + return; + } + if ("method" in message) { + this.handleNotification(message); + } + } + handleResponse(message) { + if (typeof message.id !== "number") { + return; + } + const pending = this.pending.get(message.id); + if (!pending) { + return; + } + this.pending.delete(message.id); + pending.cleanup(); + if (message.error) { + pending.reject(new JsonRpcErrorResponse( + pending.method, + message.error.code, + message.error.message, + message.error.data + )); + return; + } + pending.resolve(message.result); + } + handleNotification(message) { + const handlers = this.notificationHandlers.get(message.method); + if (!handlers || handlers.size === 0) { + return; + } + for (const handler of handlers) { + void Promise.resolve(handler(message.params)).catch(() => { + }); + } + } + handleRequest(message) { + const handler = this.requestHandlers.get(message.method); + if (!handler) { + this.trySendRaw({ + error: { + code: -32601, + message: `Unhandled server request: ${message.method}` + }, + id: message.id, + jsonrpc: "2.0" + }); + return; + } + void Promise.resolve(handler(message.params)).then( + (result) => { + this.trySendRaw({ id: message.id, jsonrpc: "2.0", result }); + }, + (error48) => { + this.trySendRaw({ + error: { + code: -32603, + message: error48 instanceof Error ? error48.message : "Internal error" + }, + id: message.id, + jsonrpc: "2.0" + }); + } + ); + } + sendRaw(message) { + if (this.disposed) { + throw new JsonRpcTransportClosedError(); + } + this.streams.output.write(`${JSON.stringify(message)} +`); + } + trySendRaw(message) { + try { + this.sendRaw(message); + } catch (error48) { + const transportError = error48 instanceof Error ? error48 : new Error(String(error48)); + this.dispose(transportError); + } + } +}; +function subscribeStreamEvent(stream, eventName, listener) { + var _a5; + const evented = stream; + (_a5 = evented.on) == null ? void 0 : _a5.call(evented, eventName, listener); + return () => { + var _a6; + if (typeof evented.off === "function") { + evented.off(eventName, listener); + return; + } + (_a6 = evented.removeListener) == null ? void 0 : _a6.call(evented, eventName, listener); + }; +} + +// src/providers/acp/methodNames.ts +var ACP_METHOD_CANDIDATES = { + authenticate: ["authenticate"], + cancel: ["session/cancel", "cancel"], + initialize: ["initialize"], + listSessions: ["session/list", "listSessions"], + loadSession: ["session/load", "loadSession"], + newSession: ["session/new", "newSession"], + prompt: ["session/prompt", "prompt"], + setConfigOption: ["session/set_config_option", "setSessionConfigOption"], + setMode: ["session/set_mode", "setSessionMode"] +}; +var ACP_SERVER_NOTIFICATION_ALIASES = { + sessionUpdate: ["session/update", "sessionUpdate"] +}; +var ACP_SERVER_REQUEST_ALIASES = { + createTerminal: ["terminal/create", "terminalCreate"], + killTerminal: ["terminal/kill", "terminalKill"], + readTextFile: ["fs/read_text_file", "fs/readTextFile"], + releaseTerminal: ["terminal/release", "terminalRelease"], + requestPermission: ["session/request_permission", "requestPermission"], + terminalOutput: ["terminal/output", "terminalOutput"], + waitForTerminalExit: ["terminal/wait_for_exit", "terminalWaitForExit"], + writeTextFile: ["fs/write_text_file", "fs/writeTextFile"] +}; +function getAcpMethodCandidates(logicalMethod, overrides) { + const override = overrides == null ? void 0 : overrides[logicalMethod]; + if (override) { + return Array.isArray(override) ? [...override] : [override]; + } + return [...ACP_METHOD_CANDIDATES[logicalMethod]]; +} + +// src/providers/acp/AcpClientConnection.ts +var ACP_PROMPT_TURN_TIMEOUT_MS = 0; +var AcpClientConnection = class { + constructor(options) { + this.options = options; + this.agentInfo = null; + this.agentCapabilities = null; + this.authMethods = null; + this.methodCache = /* @__PURE__ */ new Map(); + this.sessionNotificationListeners = /* @__PURE__ */ new Set(); + this.unsubscribeHandlers = []; + this.registerServerHandlers(); + } + get signal() { + return this.options.transport.signal; + } + get negotiatedAgentInfo() { + return this.agentInfo; + } + get negotiatedAgentCapabilities() { + return this.agentCapabilities; + } + get negotiatedAuthMethods() { + return this.authMethods; + } + onSessionNotification(listener) { + this.sessionNotificationListeners.add(listener); + return () => { + this.sessionNotificationListeners.delete(listener); + }; + } + dispose() { + var _a5; + while (this.unsubscribeHandlers.length > 0) { + (_a5 = this.unsubscribeHandlers.pop()) == null ? void 0 : _a5(); + } + this.sessionNotificationListeners.clear(); + } + async initialize(partialRequest = {}) { + var _a5, _b3, _c2, _d, _e2, _f2; + const request = { + clientCapabilities: mergeCapabilities2( + this.buildClientCapabilities(), + partialRequest.clientCapabilities + ), + clientInfo: (_b3 = (_a5 = partialRequest.clientInfo) != null ? _a5 : this.options.clientInfo) != null ? _b3 : null, + protocolVersion: (_c2 = partialRequest.protocolVersion) != null ? _c2 : 1 + }; + const response = await this.requestWithFallback("initialize", request); + this.agentInfo = (_d = response.agentInfo) != null ? _d : null; + this.agentCapabilities = (_e2 = response.agentCapabilities) != null ? _e2 : null; + this.authMethods = (_f2 = response.authMethods) != null ? _f2 : null; + return response; + } + authenticate(request) { + return this.requestWithFallback("authenticate", request); + } + newSession(request) { + return this.requestWithFallback("newSession", request); + } + loadSession(request) { + return this.requestWithFallback("loadSession", request); + } + listSessions(request = {}) { + return this.requestWithFallback("listSessions", request); + } + prompt(request) { + return this.requestWithFallback("prompt", request, { + timeoutMs: ACP_PROMPT_TURN_TIMEOUT_MS + }); + } + cancel(notification) { + this.notifyLogicalMethod("cancel", notification, { sendAllCandidatesIfUncached: true }); + } + setMode(request) { + return this.requestWithFallback("setMode", request); + } + setConfigOption(request) { + return this.requestWithFallback("setConfigOption", request); + } + buildClientCapabilities() { + var _a5, _b3; + const capabilities = { ...this.options.clientCapabilities }; + const fileSystem = (_a5 = this.options.delegate) == null ? void 0 : _a5.fileSystem; + const terminal = (_b3 = this.options.delegate) == null ? void 0 : _b3.terminal; + if ((fileSystem == null ? void 0 : fileSystem.readTextFile) || (fileSystem == null ? void 0 : fileSystem.writeTextFile)) { + capabilities.fs = { + ...capabilities.fs, + ...fileSystem.readTextFile ? { readTextFile: true } : {}, + ...fileSystem.writeTextFile ? { writeTextFile: true } : {} + }; + } + if (terminal) { + capabilities.terminal = true; + } + return Object.keys(capabilities).length === 0 ? void 0 : capabilities; + } + registerServerHandlers() { + const transport = this.options.transport; + const delegate = this.options.delegate; + const subscribeNotification = (aliases, handler) => { + for (const alias of aliases) { + this.unsubscribeHandlers.push(transport.onNotification(alias, handler)); + } + }; + const subscribeRequest = (aliases, handler) => { + for (const alias of aliases) { + this.unsubscribeHandlers.push(transport.onRequest(alias, handler)); + } + }; + subscribeNotification( + ACP_SERVER_NOTIFICATION_ALIASES.sessionUpdate, + async (params) => this.dispatchSessionNotification(params) + ); + if (delegate == null ? void 0 : delegate.requestPermission) { + const requestPermission = delegate.requestPermission; + subscribeRequest( + ACP_SERVER_REQUEST_ALIASES.requestPermission, + (params) => requestPermission(params) + ); + } + const fileSystem = delegate == null ? void 0 : delegate.fileSystem; + if (fileSystem == null ? void 0 : fileSystem.readTextFile) { + const readTextFile = fileSystem.readTextFile; + subscribeRequest( + ACP_SERVER_REQUEST_ALIASES.readTextFile, + (params) => readTextFile(params) + ); + } + if (fileSystem == null ? void 0 : fileSystem.writeTextFile) { + const writeTextFile = fileSystem.writeTextFile; + subscribeRequest( + ACP_SERVER_REQUEST_ALIASES.writeTextFile, + (params) => writeTextFile(params) + ); + } + const terminal = delegate == null ? void 0 : delegate.terminal; + if (terminal) { + subscribeRequest( + ACP_SERVER_REQUEST_ALIASES.createTerminal, + (params) => terminal.createTerminal(params) + ); + subscribeRequest( + ACP_SERVER_REQUEST_ALIASES.terminalOutput, + (params) => terminal.terminalOutput(params) + ); + subscribeRequest( + ACP_SERVER_REQUEST_ALIASES.waitForTerminalExit, + (params) => terminal.waitForTerminalExit(params) + ); + subscribeRequest( + ACP_SERVER_REQUEST_ALIASES.killTerminal, + (params) => terminal.killTerminal(params) + ); + subscribeRequest( + ACP_SERVER_REQUEST_ALIASES.releaseTerminal, + (params) => terminal.releaseTerminal(params) + ); + } + } + async dispatchSessionNotification(notification) { + var _a5; + if ((_a5 = this.options.delegate) == null ? void 0 : _a5.onSessionNotification) { + await this.options.delegate.onSessionNotification(notification); + } + for (const listener of this.sessionNotificationListeners) { + await listener(notification); + } + } + // -32601 (Method not found) is the only error we absorb; agents that advertise legacy + // method names only reject unknown candidates with it, so every other code is real. + async requestWithFallback(logicalMethod, params, requestOptions) { + const cachedMethod = this.methodCache.get(logicalMethod); + if (cachedMethod) { + return this.options.transport.request(cachedMethod, params, requestOptions); + } + const candidates = getAcpMethodCandidates(logicalMethod, this.options.methodOverrides); + let lastError = null; + for (const methodName of candidates) { + try { + const result = await this.options.transport.request(methodName, params, requestOptions); + this.methodCache.set(logicalMethod, methodName); + return result; + } catch (error48) { + if (!(error48 instanceof JsonRpcErrorResponse) || error48.code !== -32601) { + throw error48; + } + lastError = error48; + } + } + if (lastError) { + throw lastError; + } + throw new Error(`No ACP method candidates configured for ${logicalMethod}`); + } + notifyLogicalMethod(logicalMethod, params, options = {}) { + const cachedMethod = this.methodCache.get(logicalMethod); + if (cachedMethod) { + this.options.transport.notify(cachedMethod, params); + return; + } + const candidates = getAcpMethodCandidates(logicalMethod, this.options.methodOverrides); + const methodNames = options.sendAllCandidatesIfUncached ? Array.from(new Set(candidates)) : candidates.slice(0, 1); + for (const methodName of methodNames) { + this.options.transport.notify(methodName, params); + } + } +}; +function mergeCapabilities2(base, override) { + if (!base && !override) { + return void 0; + } + const merged = { ...base, ...override }; + if ((base == null ? void 0 : base.auth) || (override == null ? void 0 : override.auth)) { + merged.auth = { ...base == null ? void 0 : base.auth, ...override == null ? void 0 : override.auth }; + } + if ((base == null ? void 0 : base.fs) || (override == null ? void 0 : override.fs)) { + merged.fs = { ...base == null ? void 0 : base.fs, ...override == null ? void 0 : override.fs }; + } + return Object.keys(merged).length === 0 ? void 0 : merged; +} + +// src/providers/acp/AcpSessionConfig.ts +function flattenAcpSessionConfigSelectOptions(options) { + if (options.length === 0) { + return []; + } + if (isSelectGroup(options[0])) { + return options.flatMap((group) => group.options); + } + return options; +} +function extractAcpSessionModelState(params) { + var _a5, _b3, _c2, _d; + const { items, current } = resolveSelectItems(params.configOptions, "model"); + if (items) { + return { availableModels: items, currentModelId: current }; + } + return { + availableModels: (_b3 = (_a5 = params.models) == null ? void 0 : _a5.availableModels) != null ? _b3 : [], + currentModelId: (_d = (_c2 = params.models) == null ? void 0 : _c2.currentModelId) != null ? _d : current + }; +} +function extractAcpSessionModeState(params) { + var _a5, _b3, _c2, _d; + const { items, current } = resolveSelectItems(params.configOptions, "mode"); + if (items) { + return { availableModes: items, currentModeId: current }; + } + return { + availableModes: (_b3 = (_a5 = params.modes) == null ? void 0 : _a5.availableModes) != null ? _b3 : [], + currentModeId: (_d = (_c2 = params.modes) == null ? void 0 : _c2.currentModeId) != null ? _d : current + }; +} +function extractAcpSessionThoughtLevelState(params) { + const { configId, items, current } = resolveSelectItems(params.configOptions, "thought_level"); + return { + availableLevels: items != null ? items : [], + configId, + currentLevel: current + }; +} +function resolveSelectItems(configOptions, category) { + const selectOption = findSessionConfigSelectOption(configOptions, category); + if (!selectOption) { + return { configId: null, current: null, items: null }; + } + const items = flattenAcpSessionConfigSelectOptions(selectOption.options).map((option) => ({ + ...option.description ? { description: option.description } : {}, + id: option.value, + name: option.name + })); + return { + configId: selectOption.id, + current: selectOption.currentValue, + items: items.length > 0 ? items : null + }; +} +function findSessionConfigSelectOption(configOptions, category) { + if (!configOptions) { + return null; + } + const byCategory = configOptions.find((option) => option.type === "select" && normalizeComparableKey(option.category) === category); + if ((byCategory == null ? void 0 : byCategory.type) === "select") { + return byCategory; + } + const byLegacyId = configOptions.find((option) => option.type === "select" && normalizeComparableKey(option.id) === legacyConfigIdForCategory(category)); + return (byLegacyId == null ? void 0 : byLegacyId.type) === "select" ? byLegacyId : null; +} +function legacyConfigIdForCategory(category) { + return category === "thought_level" ? "effort" : category; +} +function isSelectGroup(option) { + return "options" in option; +} +function normalizeComparableKey(value) { + return typeof value === "string" ? value.trim().toLowerCase() : ""; +} + +// src/providers/acp/AcpSessionUpdateNormalizer.ts +var ANONYMOUS_MESSAGE_KEY = "\0anonymous"; +var AcpSessionUpdateNormalizer = class { + constructor() { + this.seenMessages = /* @__PURE__ */ new Map(); + this.toolCalls = /* @__PURE__ */ new Map(); + } + reset() { + this.seenMessages.clear(); + this.toolCalls.clear(); + } + normalize(update) { + switch (update.sessionUpdate) { + case "user_message_chunk": + return this.normalizeMessageChunk("user", update); + case "agent_message_chunk": + return this.normalizeMessageChunk("assistant", update); + case "agent_thought_chunk": + return this.normalizeMessageChunk("thinking", update); + case "tool_call": + return this.normalizeToolCall(update); + case "tool_call_update": + return this.normalizeToolCallUpdate(update); + case "plan": + return { plan: update, type: "plan" }; + case "available_commands_update": + return { + commands: update.availableCommands.map(mapAcpCommandToSlashCommand), + type: "commands" + }; + case "current_mode_update": + return { currentModeId: update.currentModeId, type: "current_mode" }; + case "config_option_update": + return { configOptions: update.configOptions, type: "config_options" }; + case "session_info_update": + return { + sessionInfo: { ...update, updatedAtMs: parseIsoDate(update.updatedAt) }, + type: "session_info" + }; + case "usage_update": + return { type: "usage", usage: update }; + } + } + normalizeMessageChunk(role, update) { + var _a5, _b3, _c2; + const streamChunks = []; + if (role === "user" && this.claimMessageStart("user", update.messageId)) { + streamChunks.push({ + content: extractPrimaryText(update.content), + itemId: (_a5 = update.messageId) != null ? _a5 : void 0, + type: "user_message_start" + }); + } else if (role === "assistant" && this.claimMessageStart("assistant", update.messageId)) { + streamChunks.push({ + itemId: (_b3 = update.messageId) != null ? _b3 : void 0, + type: "assistant_message_start" + }); + } + const text = renderAcpContentBlock(update.content); + if (text && role === "thinking") { + streamChunks.push({ content: text, type: "thinking" }); + } else if (text && role === "assistant") { + streamChunks.push({ content: text, type: "text" }); + } + return { + content: update.content, + messageId: (_c2 = update.messageId) != null ? _c2 : null, + role, + streamChunks, + type: "message_chunk" + }; + } + normalizeToolCall(toolCall) { + const toolState = { + input: normalizeToolInput2(toolCall.rawInput), + name: normalizeToolName(toolCall.title, toolCall.kind), + output: renderToolPayload(toolCall.content, toolCall.rawOutput), + status: toolCall.status + }; + this.toolCalls.set(toolCall.toolCallId, toolState); + const streamChunks = [{ + id: toolCall.toolCallId, + input: toolState.input, + name: toolState.name, + type: "tool_use" + }]; + if (toolState.status === "completed" || toolState.status === "failed") { + streamChunks.push({ + content: toolState.output || defaultToolResultText(toolState.status), + id: toolCall.toolCallId, + isError: toolState.status === "failed", + type: "tool_result" + }); + } + return { streamChunks, toolCall, toolState, type: "tool_call" }; + } + normalizeToolCallUpdate(toolCallUpdate) { + var _a5, _b3, _c2; + const current = (_a5 = this.toolCalls.get(toolCallUpdate.toolCallId)) != null ? _a5 : { + input: {}, + name: "tool", + output: "", + status: null + }; + if (toolCallUpdate.title) { + current.name = normalizeToolName(toolCallUpdate.title, (_b3 = toolCallUpdate.kind) != null ? _b3 : null); + } else if (toolCallUpdate.kind && current.name === "tool") { + current.name = normalizeToolName(void 0, toolCallUpdate.kind); + } + if (toolCallUpdate.rawInput !== void 0) { + current.input = normalizeToolInput2(toolCallUpdate.rawInput); + } + const nextOutput = renderToolPayload((_c2 = toolCallUpdate.content) != null ? _c2 : void 0, toolCallUpdate.rawOutput) || current.output; + const streamChunks = []; + if (nextOutput.length > current.output.length && nextOutput.startsWith(current.output)) { + streamChunks.push({ + content: nextOutput.slice(current.output.length), + id: toolCallUpdate.toolCallId, + type: "tool_output" + }); + } + current.output = nextOutput; + if (toolCallUpdate.status !== void 0) { + current.status = toolCallUpdate.status; + } + if (current.status === "completed" || current.status === "failed") { + streamChunks.push({ + content: current.output || defaultToolResultText(current.status), + id: toolCallUpdate.toolCallId, + isError: current.status === "failed", + type: "tool_result" + }); + } + this.toolCalls.set(toolCallUpdate.toolCallId, current); + return { + streamChunks, + toolCallUpdate, + toolState: { ...current }, + type: "tool_call_update" + }; + } + // A message-start chunk must fire exactly once per (role, messageId). Anonymous streams + // share a single slot per role so repeated chunks without an id do not restart the message. + claimMessageStart(role, messageId) { + const key = messageId != null ? messageId : ANONYMOUS_MESSAGE_KEY; + let seen = this.seenMessages.get(role); + if (!seen) { + seen = /* @__PURE__ */ new Set(); + this.seenMessages.set(role, seen); + } + if (seen.has(key)) { + return false; + } + seen.add(key); + return true; + } +}; +function mapAcpCommandToSlashCommand(command) { + var _a5, _b3, _c2; + const name = command.name.replace(/^\//, ""); + return { + argumentHint: (_b3 = (_a5 = command.input) == null ? void 0 : _a5.hint) != null ? _b3 : void 0, + content: "", + description: (_c2 = command.description) != null ? _c2 : void 0, + id: `acp:${name}`, + name, + source: "sdk" + }; +} +function normalizeToolName(title, kind) { + return (title == null ? void 0 : title.trim()) || (kind == null ? void 0 : kind.trim()) || "tool"; +} +function normalizeToolInput2(rawInput) { + if (isPlainObject4(rawInput)) { + return rawInput; + } + if (rawInput === void 0) { + return {}; + } + return { value: rawInput }; +} +function renderToolPayload(content, rawOutput) { + if (Array.isArray(content) && content.length > 0) { + return content.map(renderToolCallContent).filter((text) => text.length > 0).join("\n\n"); + } + return rawOutput === void 0 ? "" : formatUnknownValue(rawOutput); +} +function renderToolCallContent(content) { + switch (content.type) { + case "content": + return renderAcpContentBlock(content.content); + case "diff": + return `Diff: ${content.path}`; + case "terminal": + return `Terminal: ${content.terminalId}`; + } +} +function defaultToolResultText(status) { + return status === "failed" ? "Tool failed" : "Tool completed"; +} +function extractPrimaryText(content) { + if (content.type === "text") { + return content.text; + } + if (content.type === "resource" && "text" in content.resource) { + return content.resource.text; + } + return ""; +} +function renderAcpContentBlock(content) { + switch (content.type) { + case "text": + return content.text; + case "image": + return content.uri ? `[image: ${content.uri}]` : `[image: ${content.mimeType}]`; + case "audio": + return `[audio: ${content.mimeType}]`; + case "resource_link": + return content.title || content.name || content.uri; + case "resource": + return "text" in content.resource ? content.resource.text : `[resource: ${content.resource.uri}]`; + } +} +function formatUnknownValue(value) { + var _a5; + if (typeof value === "string") { + return value; + } + if (value === null) { + return "null"; + } + if (value === void 0) { + return ""; + } + if (typeof value === "number" || typeof value === "boolean") { + return `${value}`; + } + try { + return (_a5 = JSON.stringify(value, null, 2)) != null ? _a5 : ""; + } catch (e2) { + return "[unserializable]"; + } +} +function isPlainObject4(value) { + return Boolean(value) && typeof value === "object" && !Array.isArray(value); +} +function parseIsoDate(value) { + if (value === void 0) { + return void 0; + } + if (value === null) { + return null; + } + const timestamp = Date.parse(value); + return Number.isNaN(timestamp) ? null : timestamp; +} + +// src/providers/acp/AcpSubprocess.ts +var import_node_child_process = require("node:child_process"); +var SIGKILL_TIMEOUT_MS2 = 3e3; +var STDERR_BUFFER_LIMIT = 8e3; +var AcpSubprocess = class { + constructor(launchSpec) { + this.launchSpec = launchSpec; + this.closeError = null; + this.closeListeners = /* @__PURE__ */ new Set(); + this.notifiedClose = false; + this.proc = null; + this.resolvedSpawnSpec = null; + this.stderrBuffer = ""; + } + get stdin() { + return this.requireProc().stdin; + } + get stdout() { + return this.requireProc().stdout; + } + get stderr() { + return this.requireProc().stderr; + } + requireProc() { + if (!this.proc) { + throw new Error("ACP subprocess is not started"); + } + return this.proc; + } + start() { + if (this.proc) { + return; + } + const resolvedSpawnSpec = resolveWindowsCmdShimSpawnSpec(this.launchSpec); + this.resolvedSpawnSpec = resolvedSpawnSpec; + const proc = (0, import_node_child_process.spawn)(resolvedSpawnSpec.command, resolvedSpawnSpec.args, { + cwd: this.launchSpec.cwd, + env: this.launchSpec.env, + stdio: "pipe", + windowsHide: true, + ...resolvedSpawnSpec.windowsVerbatimArguments ? { windowsVerbatimArguments: true } : {} + }); + proc.stderr.on("data", (chunk) => { + const text = typeof chunk === "string" ? chunk : chunk.toString("utf-8"); + this.stderrBuffer = `${this.stderrBuffer}${text}`.slice(-STDERR_BUFFER_LIMIT); + }); + proc.on("error", (error48) => { + this.closeError = error48; + this.notifyClose(error48); + }); + proc.on("exit", (code, signal) => { + var _a5; + const exitError = (_a5 = this.closeError) != null ? _a5 : code === 0 && signal === null ? void 0 : new Error(`ACP subprocess exited (${formatExit(code, signal)})`); + this.notifyClose(exitError); + }); + this.proc = proc; + } + isAlive() { + return this.proc !== null && this.proc.exitCode === null && !this.proc.killed; + } + getStderrSnapshot() { + return this.stderrBuffer.trim(); + } + onClose(listener) { + this.closeListeners.add(listener); + return () => { + this.closeListeners.delete(listener); + }; + } + async shutdown() { + if (!this.proc || this.proc.exitCode !== null) { + return; + } + await new Promise((resolve8) => { + const proc = this.proc; + const onClose = () => { + cleanup(); + resolve8(); + }; + const killTimer = window.setTimeout(() => { + this.killProc(proc, "SIGKILL"); + }, SIGKILL_TIMEOUT_MS2); + const cleanup = () => { + window.clearTimeout(killTimer); + proc.off("exit", onClose); + }; + proc.once("exit", onClose); + this.killProc(proc, "SIGTERM"); + }); + } + killProc(proc, signal) { + return terminateSpawnedProcess(proc, signal, import_node_child_process.spawn, this.resolvedSpawnSpec); + } + notifyClose(error48) { + if (this.notifiedClose) { + return; + } + this.notifiedClose = true; + for (const listener of this.closeListeners) { + try { + listener(error48); + } catch (e2) { + } + } + } +}; +function formatExit(code, signal) { + if (signal) { + return `signal ${signal}`; + } + if (code === null) { + return "unknown"; + } + return `code ${code}`; +} + +// src/providers/acp/AcpToolStreamAdapter.ts +var AcpToolStreamAdapter = class { + constructor(adapter) { + this.adapter = adapter; + this.toolStates = /* @__PURE__ */ new Map(); + } + reset() { + this.toolStates.clear(); + } + normalizeToolCall(toolCall, chunks) { + const state = this.updateToolState(void 0, { + kind: toolCall.kind, + rawInput: toolCall.rawInput, + title: toolCall.title + }); + this.toolStates.set(toolCall.toolCallId, state); + return chunks.map((chunk) => this.normalizeChunk(chunk, state, toolCall.rawOutput)); + } + normalizeToolCallUpdate(toolCallUpdate, chunks) { + const state = this.updateToolState(this.toolStates.get(toolCallUpdate.toolCallId), { + kind: toolCallUpdate.kind, + rawInput: toolCallUpdate.rawInput, + title: toolCallUpdate.title + }); + this.toolStates.set(toolCallUpdate.toolCallId, state); + const result = []; + if (toolCallUpdate.rawInput !== void 0) { + result.push({ + id: toolCallUpdate.toolCallId, + input: state.input, + name: this.adapter.normalizeToolName(state.rawName), + type: "tool_use" + }); + } + for (const chunk of chunks) { + result.push(this.normalizeChunk(chunk, state, toolCallUpdate.rawOutput)); + } + return result; + } + updateToolState(current, update) { + var _a5; + const nextRawName = this.adapter.resolveRawToolName(current == null ? void 0 : current.rawName, update); + const nextInput = (_a5 = current == null ? void 0 : current.input) != null ? _a5 : {}; + if (update.rawInput !== void 0) { + const rawInput = normalizeRawToolInput(update.rawInput); + return this.buildToolState(nextRawName, { ...nextInput, ...rawInput }); + } + if (nextRawName !== (current == null ? void 0 : current.rawName)) { + return this.buildToolState(nextRawName, nextInput); + } + return current != null ? current : this.buildToolState(nextRawName, {}); + } + buildToolState(rawName, input) { + return { + input: this.adapter.normalizeToolInput(rawName, input), + rawName + }; + } + normalizeChunk(chunk, state, rawOutput) { + switch (chunk.type) { + case "tool_use": + return { + ...chunk, + input: state.input, + name: this.adapter.normalizeToolName(state.rawName) + }; + case "tool_result": { + const toolUseResult = this.adapter.normalizeToolUseResult(state.rawName, state.input, rawOutput); + return toolUseResult ? { ...chunk, toolUseResult } : chunk; + } + default: + return chunk; + } + } +}; +function normalizeRawToolInput(rawInput) { + return rawInput && typeof rawInput === "object" && !Array.isArray(rawInput) ? rawInput : {}; +} + +// src/providers/acp/buildAcpUsageInfo.ts +function buildAcpUsageInfo(params) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2; + const promptUsage = (_a5 = params.promptUsage) != null ? _a5 : null; + const contextWindow = (_b3 = params.contextWindow) != null ? _b3 : null; + if (!promptUsage && !contextWindow) { + return null; + } + const contextTokens = (_d = (_c2 = contextWindow == null ? void 0 : contextWindow.used) != null ? _c2 : promptUsage == null ? void 0 : promptUsage.totalTokens) != null ? _d : 0; + const contextWindowSize = (_e2 = contextWindow == null ? void 0 : contextWindow.size) != null ? _e2 : 0; + return { + cacheCreationInputTokens: (_f2 = promptUsage == null ? void 0 : promptUsage.cachedWriteTokens) != null ? _f2 : 0, + cacheReadInputTokens: (_g = promptUsage == null ? void 0 : promptUsage.cachedReadTokens) != null ? _g : 0, + contextTokens, + contextWindow: contextWindowSize, + // Only the contextWindow update speaks authoritatively about window size; falling back + // to promptUsage alone is a best-effort approximation. + contextWindowIsAuthoritative: Boolean(contextWindow), + inputTokens: (_h2 = promptUsage == null ? void 0 : promptUsage.inputTokens) != null ? _h2 : 0, + model: params.model, + percentage: computePercentage(contextTokens, contextWindowSize) + }; +} +function computePercentage(used, total) { + if (total <= 0) { + return 0; + } + const ratio = Math.round(used / total * 100); + return Math.min(100, Math.max(0, ratio)); +} + +// src/providers/opencode/capabilities.ts +var OPENCODE_PROVIDER_CAPABILITIES = Object.freeze({ + providerId: "opencode", + supportsPersistentRuntime: true, + supportsNativeHistory: true, + supportsPlanMode: true, + supportsRewind: false, + supportsFork: false, + supportsProviderCommands: true, + supportsImageAttachments: true, + supportsInstructionMode: true, + supportsMcpTools: false, + supportsTurnSteer: false, + reasoningControl: "effort" +}); + +// src/providers/opencode/normalization/opencodeToolNormalization.ts +var TOOL_NAME_MAP2 = { + bash: TOOL_BASH, + edit: TOOL_EDIT, + glob: TOOL_GLOB, + grep: TOOL_GREP, + question: TOOL_ASK_USER_QUESTION, + read: TOOL_READ, + skill: TOOL_SKILL, + task: TOOL_TASK, + todowrite: TOOL_TODO_WRITE, + webfetch: TOOL_WEB_FETCH, + websearch: TOOL_WEB_SEARCH, + write: TOOL_WRITE +}; +function isPlainObject5(value) { + return value !== null && typeof value === "object" && !Array.isArray(value); +} +function isKnownToolName(value) { + if (typeof value !== "string") { + return false; + } + return value.trim().toLowerCase() in TOOL_NAME_MAP2; +} +function toKnownToolName(value) { + if (!value) { + return null; + } + const normalized = value.trim().toLowerCase(); + return isKnownToolName(normalized) ? normalized : null; +} +function firstString3(...values) { + for (const value of values) { + if (typeof value === "string") { + return value; + } + } + return void 0; +} +function firstTrimmedString(...values) { + for (const value of values) { + if (typeof value !== "string") { + continue; + } + const trimmed = value.trim(); + if (trimmed.length > 0) { + return trimmed; + } + } + return void 0; +} +function firstNonEmptyString2(...values) { + var _a5; + return (_a5 = firstTrimmedString(...values)) != null ? _a5 : ""; +} +function normalizeStringArray3(value) { + if (!Array.isArray(value)) { + return []; + } + const uniqueValues = /* @__PURE__ */ new Set(); + for (const entry of value) { + if (typeof entry !== "string") { + continue; + } + const trimmed = entry.trim(); + if (!trimmed) { + continue; + } + uniqueValues.add(trimmed); + } + return [...uniqueValues]; +} +function normalizeQuestionOptions(value) { + if (!Array.isArray(value)) { + return []; + } + return value.flatMap((option) => { + if (typeof option === "string") { + const label2 = option.trim(); + return label2 ? [{ description: "", label: label2 }] : []; + } + if (!isPlainObject5(option)) { + return []; + } + const label = typeof option.label === "string" ? option.label.trim() : ""; + if (!label) { + return []; + } + return [{ + description: typeof option.description === "string" ? option.description : "", + label + }]; + }); +} +function normalizeQuestionItems(value) { + if (!Array.isArray(value)) { + return []; + } + return value.map((item, index) => { + var _a5, _b3; + const record2 = isPlainObject5(item) ? item : {}; + const question = (_a5 = firstTrimmedString(record2.question)) != null ? _a5 : `Question ${index + 1}`; + const header = (_b3 = firstTrimmedString(record2.header)) != null ? _b3 : `Q${index + 1}`; + return { + ...typeof record2.id === "string" && record2.id.trim() ? { id: record2.id } : {}, + header, + multiSelect: record2.multiSelect === true || record2.multi_select === true || record2.multiple === true, + options: normalizeQuestionOptions(record2.options), + question + }; + }); +} +function normalizeTodoStatus(value) { + switch (value) { + case "completed": + case "cancelled": + return "completed"; + case "in_progress": + return "in_progress"; + default: + return "pending"; + } +} +function normalizeTodos(value) { + if (!Array.isArray(value)) { + return []; + } + return value.flatMap((item) => { + var _a5; + if (!isPlainObject5(item)) { + return []; + } + const content = firstTrimmedString(item.content, item.title, item.description); + if (!content) { + return []; + } + return [{ + activeForm: (_a5 = firstTrimmedString(item.activeForm, item.active_form)) != null ? _a5 : content, + content, + ...typeof item.id === "string" ? { id: item.id } : {}, + status: normalizeTodoStatus(item.status) + }]; + }); +} +function normalizeQuestionAnswers(rawAnswers, questions) { + if (!Array.isArray(rawAnswers) || questions.length === 0) { + return void 0; + } + const answers = {}; + for (let index = 0; index < Math.min(rawAnswers.length, questions.length); index += 1) { + const question = questions[index]; + const rawEntry = rawAnswers[index]; + if (!question) { + continue; + } + const values = Array.isArray(rawEntry) ? rawEntry.filter((value) => typeof value === "string" && value.trim().length > 0) : typeof rawEntry === "string" && rawEntry.trim().length > 0 ? [rawEntry] : []; + if (values.length === 0) { + continue; + } + const normalizedValue = values.length === 1 ? values[0] : values; + answers[question.question] = normalizedValue; + if (question.id) { + answers[question.id] = normalizedValue; + } + } + return Object.keys(answers).length > 0 ? answers : void 0; +} +function extractToolMetadata(rawOutput) { + if (!isPlainObject5(rawOutput)) { + return null; + } + return isPlainObject5(rawOutput.metadata) ? rawOutput.metadata : null; +} +function resolveOpencodeRawToolName(currentRawName, update) { + const titleName = firstTrimmedString(update.title); + const knownTitleName = titleName && isKnownToolName(titleName) ? titleName.trim().toLowerCase() : void 0; + if (knownTitleName) { + return knownTitleName; + } + if (currentRawName) { + return currentRawName; + } + switch (update.kind) { + case "execute": + return "bash"; + case "fetch": + return "webfetch"; + case "read": + return "read"; + default: + return titleName != null ? titleName : "tool"; + } +} +function normalizeWebSearchInput2(input) { + var _a5; + const action = isPlainObject5(input.action) ? input.action : {}; + const queries = normalizeStringArray3((_a5 = action.queries) != null ? _a5 : input.queries); + const query = firstNonEmptyString2(action.query, input.query, queries[0]); + const url2 = firstNonEmptyString2(action.url, input.url); + const pattern = firstNonEmptyString2(action.pattern, input.pattern); + const explicitType = firstNonEmptyString2(action.type, input.actionType, input.action_type); + const actionType = explicitType || (url2 && pattern ? "find_in_page" : url2 ? "open_page" : query || queries.length > 0 ? "search" : ""); + const normalized = {}; + if (actionType) { + normalized.actionType = actionType; + } + if (query) { + normalized.query = query; + } + if (queries.length > 0) { + normalized.queries = queries; + } + if (url2) { + normalized.url = url2; + } + if (pattern) { + normalized.pattern = pattern; + } + return normalized; +} +function normalizeOpencodeToolName(rawName) { + const knownName = toKnownToolName(rawName); + if (!knownName) { + return (rawName == null ? void 0 : rawName.trim()) || "tool"; + } + return TOOL_NAME_MAP2[knownName]; +} +function normalizeOpencodeToolInput(rawName, input) { + const knownName = toKnownToolName(rawName); + switch (knownName) { + case "question": + return { questions: normalizeQuestionItems(input.questions) }; + case "read": + return { + ...firstString3(input.file_path, input.filePath) ? { file_path: firstString3(input.file_path, input.filePath) } : {}, + ...typeof input.limit === "number" ? { limit: input.limit } : {}, + ...typeof input.offset === "number" ? { offset: input.offset } : {} + }; + case "write": + return { + ...typeof input.content === "string" ? { content: input.content } : {}, + ...firstString3(input.file_path, input.filePath) ? { file_path: firstString3(input.file_path, input.filePath) } : {} + }; + case "edit": + return { + ...firstString3(input.file_path, input.filePath) ? { file_path: firstString3(input.file_path, input.filePath) } : {}, + ...firstString3(input.old_string, input.oldString) ? { old_string: firstString3(input.old_string, input.oldString) } : {}, + ...firstString3(input.new_string, input.newString) ? { new_string: firstString3(input.new_string, input.newString) } : {}, + ...typeof input.replace_all === "boolean" ? { replace_all: input.replace_all } : typeof input.replaceAll === "boolean" ? { replace_all: input.replaceAll } : {} + }; + case "task": + return { + ...firstTrimmedString(input.command) ? { command: firstTrimmedString(input.command) } : {}, + ...firstTrimmedString(input.description) ? { description: firstTrimmedString(input.description) } : {}, + ...firstTrimmedString(input.prompt) ? { prompt: firstTrimmedString(input.prompt) } : {}, + ...input.run_in_background === true || input.run_in_background === false ? { run_in_background: input.run_in_background } : {}, + ...firstTrimmedString(input.subagent_type) ? { subagent_type: firstTrimmedString(input.subagent_type) } : {}, + ...firstTrimmedString(input.task_id) ? { task_id: firstTrimmedString(input.task_id) } : {} + }; + case "todowrite": + return { todos: normalizeTodos(input.todos) }; + case "skill": + return firstTrimmedString(input.skill, input.name) ? { skill: firstTrimmedString(input.skill, input.name) } : {}; + case "websearch": + return normalizeWebSearchInput2(input); + default: + return input; + } +} +function normalizeOpencodeToolUseResult(rawName, input, rawOutput) { + const knownName = toKnownToolName(rawName); + const metadata = extractToolMetadata(rawOutput); + const normalized = {}; + if ((knownName === "write" || knownName === "edit") && firstString3(input.file_path, input.filePath, metadata == null ? void 0 : metadata.filepath, metadata == null ? void 0 : metadata.filePath)) { + normalized.filePath = firstString3(input.file_path, input.filePath, metadata == null ? void 0 : metadata.filepath, metadata == null ? void 0 : metadata.filePath); + } + if (knownName === "question") { + const questions = Array.isArray(input.questions) ? input.questions : []; + const answers = normalizeQuestionAnswers(metadata == null ? void 0 : metadata.answers, questions); + if (answers) { + normalized.answers = answers; + } + } + return Object.keys(normalized).length > 0 ? normalized : void 0; +} +function createOpencodeToolStreamAdapter() { + return new AcpToolStreamAdapter({ + normalizeToolInput: normalizeOpencodeToolInput, + normalizeToolName: normalizeOpencodeToolName, + normalizeToolUseResult: normalizeOpencodeToolUseResult, + resolveRawToolName: resolveOpencodeRawToolName + }); +} + +// src/providers/opencode/types/index.ts +function getOpencodeState(providerState) { + return providerState != null ? providerState : {}; +} + +// src/providers/opencode/runtime/buildOpencodePrompt.ts +function buildOpencodePromptText(request, conversationHistory = []) { + let prompt = request.text; + if (request.currentNotePath) { + prompt = appendCurrentNote(prompt, request.currentNotePath); + } + if (request.editorSelection && request.editorSelection.mode !== "none") { + prompt = appendEditorContext(prompt, request.editorSelection); + } + if (request.browserSelection) { + prompt = appendBrowserContext(prompt, request.browserSelection); + } + if (request.canvasSelection) { + prompt = appendCanvasContext(prompt, request.canvasSelection); + } + if (conversationHistory.length > 0) { + const historyContext = buildContextFromHistory(conversationHistory); + prompt = buildPromptWithHistoryContext( + historyContext, + prompt, + prompt, + conversationHistory + ); + } + return prompt; +} +function buildOpencodePromptBlocks(request, conversationHistory = []) { + var _a5; + const blocks = [ + { type: "text", text: buildOpencodePromptText(request, conversationHistory) } + ]; + for (const image of (_a5 = request.images) != null ? _a5 : []) { + if (!image.data) { + continue; + } + blocks.push({ + data: image.data, + mimeType: image.mediaType, + type: "image" + }); + } + return blocks; +} + +// src/providers/opencode/runtime/OpencodeLaunchArtifacts.ts +var fs18 = __toESM(require("node:fs/promises")); +var path18 = __toESM(require("node:path")); +init_path(); + +// src/providers/opencode/runtime/OpencodePaths.ts +var fs17 = __toESM(require("node:fs")); +var os11 = __toESM(require("node:os")); +var path17 = __toESM(require("node:path")); +var OPENCODE_APP_NAME = "opencode"; +var DEFAULT_DATABASE_NAME = "opencode.db"; +var DATABASE_NAME_PATTERN = /^opencode(?:-[a-z0-9._-]+)?\.db$/i; +function resolveOpencodeDataDir(env = process.env) { + var _a5; + const xdgDataHome = (_a5 = env.XDG_DATA_HOME) == null ? void 0 : _a5.trim(); + if (xdgDataHome) { + return path17.join(xdgDataHome, OPENCODE_APP_NAME); + } + const home = env.HOME || os11.homedir(); + if (process.platform === "win32") { + const appData = env.APPDATA || env.LOCALAPPDATA || path17.join(home, "AppData", "Roaming"); + return path17.join(appData, OPENCODE_APP_NAME); + } + return path17.join(home, ".local", "share", OPENCODE_APP_NAME); +} +function resolveOpencodeDatabasePath(env = process.env) { + var _a5, _b3; + const override = (_a5 = env.OPENCODE_DB) == null ? void 0 : _a5.trim(); + if (override) { + if (override === ":memory:" || path17.isAbsolute(override)) { + return override; + } + return path17.join(resolveOpencodeDataDir(env), override); + } + const candidates = getOpencodeDatabasePathCandidates(env); + for (const candidate of candidates) { + if (fs17.existsSync(candidate)) { + return candidate; + } + } + return (_b3 = candidates[0]) != null ? _b3 : null; +} +function resolveExistingOpencodeDatabasePath(preferredPath, env = process.env) { + const preferred = preferredPath == null ? void 0 : preferredPath.trim(); + if (preferred) { + if (preferred === ":memory:") { + return preferred; + } + if (fs17.existsSync(preferred)) { + return preferred; + } + } + const resolved = resolveOpencodeDatabasePath(env); + if (resolved && (resolved === ":memory:" || fs17.existsSync(resolved))) { + return resolved; + } + return preferred != null ? preferred : resolved; +} +function getOpencodeDatabasePathCandidates(env) { + const candidates = []; + const seen = /* @__PURE__ */ new Set(); + const home = env.HOME || os11.homedir(); + const dataDirs = [ + resolveOpencodeDataDir(env), + path17.join(home, "Library", "Application Support", OPENCODE_APP_NAME) + ]; + for (const dataDir of dataDirs) { + pushCandidate(candidates, seen, path17.join(dataDir, DEFAULT_DATABASE_NAME)); + try { + const matches = fs17.readdirSync(dataDir).filter((entry) => DATABASE_NAME_PATTERN.test(entry)).sort((left, right) => { + if (left === DEFAULT_DATABASE_NAME) return -1; + if (right === DEFAULT_DATABASE_NAME) return 1; + return left.localeCompare(right); + }); + for (const entry of matches) { + pushCandidate(candidates, seen, path17.join(dataDir, entry)); + } + } catch (e2) { + } + } + return candidates; +} +function pushCandidate(candidates, seen, candidate) { + if (seen.has(candidate)) { + return; + } + seen.add(candidate); + candidates.push(candidate); +} + +// src/providers/opencode/runtime/OpencodeLaunchArtifacts.ts +var DEFAULT_OPENCODE_MANAGED_AGENT_CONFIGS = [ + { id: OPENCODE_BUILD_MODE_ID }, + { + definition: { + mode: "primary", + permission: { + plan_enter: "allow", + question: "allow" + } + }, + id: OPENCODE_YOLO_MODE_ID + }, + { + definition: { + mode: "primary", + permission: { + plan_enter: "allow", + question: "allow", + bash: "ask", + edit: "ask" + } + }, + id: OPENCODE_SAFE_MODE_ID + }, + { id: OPENCODE_PLAN_MODE_ID } +]; +async function prepareOpencodeLaunchArtifacts(params) { + var _a5, _b3, _c2, _d, _e2, _f2; + const artifactsDir = path18.join( + params.workspaceRoot, + CLAUDIAN_STORAGE_PATH, + (_a5 = params.artifactsSubdir) != null ? _a5 : "opencode" + ); + const systemPromptPath = path18.join(artifactsDir, "system.md"); + const configPath = path18.join(artifactsDir, "config.json"); + const systemPrompt = normalizeSystemPrompt( + (_b3 = params.systemPromptText) != null ? _b3 : buildSystemPrompt(requireSettings(params)) + ); + const promptKey = (_c2 = params.systemPromptKey) != null ? _c2 : params.systemPromptText !== void 0 ? params.systemPromptText : computeSystemPromptKey(requireSettings(params)); + const baseConfig = await loadOpencodeBaseConfig( + params.runtimeEnv.OPENCODE_CONFIG, + params.workspaceRoot + ); + const configContent = `${JSON.stringify( + buildOpencodeManagedConfig( + baseConfig, + systemPromptPath, + (_e2 = params.userName) != null ? _e2 : (_d = params.settings) == null ? void 0 : _d.userName, + params.managedAgents, + params.defaultAgentId + ), + null, + 2 + )} +`; + const databasePath = resolveOpencodeDatabasePath(params.runtimeEnv); + await fs18.mkdir(artifactsDir, { recursive: true }); + await ensureOpencodeDatabaseDirectory(databasePath); + await writeIfChanged(systemPromptPath, systemPrompt); + await writeIfChanged(configPath, configContent); + return { + configPath, + configContent, + databasePath, + launchKey: [ + promptKey, + configContent, + databasePath != null ? databasePath : "", + (_f2 = params.runtimeEnv.XDG_DATA_HOME) != null ? _f2 : "" + ].join("::"), + systemPromptPath + }; +} +async function ensureOpencodeDatabaseDirectory(databasePath) { + if (!databasePath || databasePath === ":memory:") { + return; + } + await fs18.mkdir(path18.dirname(databasePath), { recursive: true }); +} +function buildOpencodeManagedConfig(baseConfig, systemPromptPath, userName, managedAgents = DEFAULT_OPENCODE_MANAGED_AGENT_CONFIGS, defaultAgentId) { + const config2 = { + ...baseConfig, + $schema: typeof baseConfig.$schema === "string" ? baseConfig.$schema : "https://opencode.ai/config.json" + }; + const existingAgents = isPlainObject6(baseConfig.agent) ? { ...baseConfig.agent } : {}; + const nextAgents = { ...existingAgents }; + const agentConfigs = managedAgents.length > 0 ? managedAgents : DEFAULT_OPENCODE_MANAGED_AGENT_CONFIGS; + for (const agentConfig of agentConfigs) { + const existingAgentValue = existingAgents[agentConfig.id]; + const existingAgent = isPlainObject6(existingAgentValue) ? { ...existingAgentValue } : {}; + nextAgents[agentConfig.id] = { + ...existingAgent, + ...isPlainObject6(agentConfig.definition) ? agentConfig.definition : {}, + prompt: `{file:${systemPromptPath}}` + }; + } + config2.agent = nextAgents; + const trimmedDefaultAgentId = defaultAgentId == null ? void 0 : defaultAgentId.trim(); + if (trimmedDefaultAgentId) { + config2.default_agent = trimmedDefaultAgentId; + } + const trimmedUserName = userName == null ? void 0 : userName.trim(); + if (trimmedUserName) { + config2.username = trimmedUserName; + } + return config2; +} +async function writeIfChanged(filePath, content) { + try { + const existing = await fs18.readFile(filePath, "utf-8"); + if (existing === content) { + return; + } + } catch (e2) { + } + await fs18.writeFile(filePath, content, "utf-8"); +} +async function loadOpencodeBaseConfig(configuredPath, workspaceRoot) { + const trimmedPath = configuredPath == null ? void 0 : configuredPath.trim(); + if (!trimmedPath) { + return {}; + } + const expandedPath = expandHomePath(trimmedPath); + const resolvedPath = path18.isAbsolute(expandedPath) ? expandedPath : path18.resolve(workspaceRoot, expandedPath); + try { + const rawConfig = await fs18.readFile(resolvedPath, "utf8"); + const parsedConfig = JSON.parse(rawConfig); + return isPlainObject6(parsedConfig) ? parsedConfig : {}; + } catch (e2) { + return {}; + } +} +function isPlainObject6(value) { + return value !== null && typeof value === "object" && !Array.isArray(value); +} +function normalizeSystemPrompt(systemPrompt) { + return systemPrompt.endsWith("\n") ? systemPrompt : `${systemPrompt} +`; +} +function requireSettings(params) { + if (params.settings) { + return params.settings; + } + throw new Error("prepareOpencodeLaunchArtifacts requires settings when no systemPromptText is provided"); +} + +// src/providers/opencode/runtime/OpencodeRuntimeEnvironment.ts +init_env(); +function buildOpencodeRuntimeEnv(settings11, cliPath, databasePathOverride) { + const envText = getRuntimeEnvironmentText(settings11, "opencode"); + const envVars = parseEnvironmentVariables(envText); + return { + ...process.env, + ...envVars, + OPENCODE_DISABLE_CLAUDE_CODE_PROMPT: "true", + ...databasePathOverride ? { OPENCODE_DB: databasePathOverride } : {}, + PATH: getEnhancedPath(envVars.PATH, cliPath || void 0) + }; +} + +// src/providers/opencode/runtime/OpencodeChatRuntime.ts +var StreamChunkQueue = class { + constructor() { + this.closed = false; + this.items = []; + this.waiters = []; + } + push(chunk) { + const waiter = this.waiters.shift(); + if (waiter) { + waiter(chunk); + return; + } + this.items.push(chunk); + } + close() { + var _a5; + if (this.closed) { + return; + } + this.closed = true; + while (this.waiters.length > 0) { + (_a5 = this.waiters.shift()) == null ? void 0 : _a5(null); + } + } + async next() { + var _a5; + if (this.items.length > 0) { + return (_a5 = this.items.shift()) != null ? _a5 : null; + } + if (this.closed) { + return null; + } + return new Promise((resolve8) => { + this.waiters.push(resolve8); + }); + } +}; +var OpencodeChatRuntime = class { + constructor(plugin) { + this.plugin = plugin; + this.providerId = "opencode"; + this.activeTurn = null; + this.approvalCallback = null; + this.connection = null; + this.contextUsage = null; + this.currentDatabasePath = null; + this.currentLaunchKey = null; + this.currentSessionEffortConfigId = null; + this.currentSessionEffortValue = null; + this.currentSessionEffortValues = /* @__PURE__ */ new Set(); + this.currentSessionModelId = null; + this.currentSessionModeId = null; + this.currentTurnMetadata = {}; + this.loadedSessionId = null; + this.permissionModeSyncCallback = null; + this.process = null; + this.promptUsage = null; + this.readyListeners = []; + this.ready = false; + this.sessionInvalidated = false; + this.supportedCommandWaiters = []; + this.supportedCommands = []; + this.sessionCwds = /* @__PURE__ */ new Map(); + this.sessionId = null; + this.sessionUpdateNormalizer = new AcpSessionUpdateNormalizer(); + this.toolStreamAdapter = createOpencodeToolStreamAdapter(); + this.transport = null; + this.unregisterTransportClose = null; + } + getCapabilities() { + return OPENCODE_PROVIDER_CAPABILITIES; + } + prepareTurn(request) { + var _a5; + return { + isCompact: false, + mcpMentions: (_a5 = request.enabledMcpServers) != null ? _a5 : /* @__PURE__ */ new Set(), + persistedContent: "", + prompt: buildOpencodePromptText(request), + request + }; + } + onReadyStateChange(listener) { + this.readyListeners.push(listener); + return () => { + const index = this.readyListeners.indexOf(listener); + if (index >= 0) { + this.readyListeners.splice(index, 1); + } + }; + } + setResumeCheckpoint(_checkpointId) { + } + syncConversationState(conversation) { + var _a5; + const previousSessionId = this.sessionId; + const nextSessionId = (_a5 = conversation == null ? void 0 : conversation.sessionId) != null ? _a5 : null; + if (this.sessionId !== nextSessionId) { + this.currentSessionEffortConfigId = null; + this.currentSessionEffortValue = null; + this.currentSessionEffortValues = /* @__PURE__ */ new Set(); + this.currentSessionModelId = null; + this.currentSessionModeId = null; + this.sessionInvalidated = false; + this.setSupportedCommands([]); + } + this.sessionId = nextSessionId; + const state = getOpencodeState(conversation == null ? void 0 : conversation.providerState); + if (state.databasePath) { + this.currentDatabasePath = state.databasePath; + return; + } + if (!nextSessionId || nextSessionId !== previousSessionId) { + this.currentDatabasePath = null; + } + } + async reloadMcpServers() { + } + async warmModelMetadata(model) { + const selectedRawModelId = decodeOpencodeModelId(model); + if (!selectedRawModelId) { + return false; + } + if (!await this.ensureReady({ allowSessionCreation: true })) { + return false; + } + if (!this.connection || !this.sessionId) { + return false; + } + const discoveredModels = getOpencodeProviderSettings(this.plugin.settings).discoveredModels; + const selectedBaseRawModelId = resolveOpencodeBaseModelRawId(selectedRawModelId, discoveredModels); + if (!selectedBaseRawModelId) { + return false; + } + const availableModelIds = new Set(discoveredModels.map((entry) => entry.rawId)); + if (availableModelIds.size > 0 && !availableModelIds.has(selectedBaseRawModelId)) { + return false; + } + const response = await this.connection.setConfigOption({ + configId: "model", + sessionId: this.sessionId, + type: "select", + value: selectedBaseRawModelId + }); + this.currentSessionModelId = selectedBaseRawModelId; + await this.syncSessionModelState({ + configOptions: response.configOptions + }); + return true; + } + async ensureReady(options) { + var _a5, _b3; + const settings11 = getOpencodeProviderSettings(this.plugin.settings); + if (!settings11.enabled) { + this.setReady(false); + return false; + } + const cwd = (_a5 = getVaultPath(this.plugin.app)) != null ? _a5 : process.cwd(); + const targetSessionId = this.sessionId; + const resolvedCliPath = (_b3 = this.plugin.getResolvedProviderCliPath("opencode")) != null ? _b3 : "opencode"; + const runtimeEnv = this.buildRuntimeEnv( + resolvedCliPath, + this.currentDatabasePath + ); + const promptSettings = this.getSystemPromptSettings(cwd); + const artifacts = await prepareOpencodeLaunchArtifacts({ + runtimeEnv, + settings: promptSettings, + workspaceRoot: cwd + }); + this.currentDatabasePath = artifacts.databasePath; + const nextLaunchKey = JSON.stringify({ + command: resolvedCliPath, + configPath: artifacts.configPath, + envText: getRuntimeEnvironmentText(this.plugin.settings, "opencode"), + promptKey: computeSystemPromptKey(promptSettings), + artifactKey: artifacts.launchKey + }); + const shouldRestart = !this.process || !this.transport || !this.connection || !this.process.isAlive() || this.transport.isClosed || (options == null ? void 0 : options.force) === true || this.currentLaunchKey !== nextLaunchKey; + if (shouldRestart) { + await this.shutdownProcess(); + await this.startProcess({ + command: resolvedCliPath, + configPath: artifacts.configPath, + cwd, + runtimeEnv + }); + this.currentLaunchKey = nextLaunchKey; + this.loadedSessionId = null; + } + if (targetSessionId) { + if (this.loadedSessionId !== targetSessionId) { + const loaded = await this.loadSession(targetSessionId, cwd); + if (!loaded) { + this.sessionInvalidated = true; + this.clearActiveSession(); + } + } + return true; + } + if (!this.sessionId && !this.sessionInvalidated) { + if ((options == null ? void 0 : options.allowSessionCreation) === false) { + return true; + } + return Boolean(await this.createSession(cwd)); + } + return true; + } + async *query(turn, conversationHistory, queryOptions) { + var _a5, _b3; + const previousMessages = conversationHistory != null ? conversationHistory : []; + const expectedSessionId = this.sessionId; + let shouldBootstrapHistory = previousMessages.length > 0 && (!expectedSessionId || this.sessionInvalidated); + if (!await this.ensureReady()) { + yield { type: "error", content: "Failed to start OpenCode. Check the CLI path and login state." }; + yield { type: "done" }; + return; + } + if (!this.connection) { + yield { type: "error", content: "OpenCode runtime is not ready." }; + yield { type: "done" }; + return; + } + const cwd = (_a5 = getVaultPath(this.plugin.app)) != null ? _a5 : process.cwd(); + if (expectedSessionId && !this.sessionId) { + shouldBootstrapHistory = previousMessages.length > 0; + } + if (!this.sessionId) { + const sessionId2 = await this.createSession(cwd); + if (!sessionId2) { + yield { type: "error", content: "Failed to create an OpenCode session." }; + yield { type: "done" }; + return; + } + } + const sessionId = this.sessionId; + (_b3 = this.activeTurn) == null ? void 0 : _b3.queue.close(); + this.activeTurn = { + queue: new StreamChunkQueue(), + sessionId + }; + this.currentTurnMetadata = {}; + this.contextUsage = null; + this.promptUsage = null; + this.sessionUpdateNormalizer.reset(); + this.toolStreamAdapter.reset(); + const activeTurn = this.activeTurn; + try { + await this.applySelectedMode(sessionId); + await this.applySelectedModel(sessionId, queryOptions); + await this.applySelectedEffort(sessionId); + } catch (error48) { + yield { + type: "error", + content: this.formatRuntimeError(error48) + }; + yield { type: "done" }; + activeTurn.queue.close(); + this.activeTurn = null; + return; + } + const promptPromise = this.connection.prompt({ + prompt: buildOpencodePromptBlocks( + turn.request, + shouldBootstrapHistory ? previousMessages : [] + ), + sessionId + }).then((response) => { + var _a6; + if (response.userMessageId) { + this.currentTurnMetadata.userMessageId = response.userMessageId; + } + this.promptUsage = (_a6 = response.usage) != null ? _a6 : null; + const usage = buildAcpUsageInfo({ + contextWindow: this.contextUsage, + model: this.getActiveDisplayModel(queryOptions), + promptUsage: this.promptUsage + }); + if (usage) { + activeTurn.queue.push({ sessionId, type: "usage", usage }); + } + activeTurn.queue.push({ type: "done" }); + activeTurn.queue.close(); + }).catch((error48) => { + activeTurn.queue.push({ + type: "error", + content: this.formatRuntimeError(error48) + }); + activeTurn.queue.push({ type: "done" }); + activeTurn.queue.close(); + }).finally(() => { + if (this.activeTurn === activeTurn) { + this.activeTurn = null; + } + }); + try { + while (true) { + const chunk = await activeTurn.queue.next(); + if (!chunk) { + break; + } + yield chunk; + } + await promptPromise; + } finally { + if (this.activeTurn === activeTurn) { + this.activeTurn = null; + } + } + } + cancel() { + if (this.connection && this.sessionId) { + this.connection.cancel({ sessionId: this.sessionId }); + } + } + resetSession() { + this.clearActiveSession(); + this.sessionInvalidated = false; + } + getSessionId() { + return this.sessionId; + } + consumeSessionInvalidation() { + const invalidated = this.sessionInvalidated; + this.sessionInvalidated = false; + return invalidated; + } + isReady() { + return this.ready; + } + async getSupportedCommands() { + if (this.supportedCommands.length > 0 && this.loadedSessionId === this.sessionId) { + return [...this.supportedCommands]; + } + if (this.sessionId && this.loadedSessionId !== this.sessionId) { + const ready = await this.ensureReady({ allowSessionCreation: false }); + if (!ready) { + return []; + } + } + if (!this.sessionId) { + return []; + } + if (this.supportedCommands.length > 0) { + return [...this.supportedCommands]; + } + if (!this.sessionId || this.loadedSessionId !== this.sessionId) { + return []; + } + return this.waitForSupportedCommands(); + } + cleanup() { + var _a5; + (_a5 = this.activeTurn) == null ? void 0 : _a5.queue.close(); + void this.shutdownProcess(); + } + async rewind(_userMessageId, _assistantMessageId, _mode) { + return { canRewind: false }; + } + setApprovalCallback(callback) { + this.approvalCallback = callback; + } + setApprovalDismisser(_dismisser) { + } + setAskUserQuestionCallback(_callback) { + } + setExitPlanModeCallback(_callback) { + } + setPermissionModeSyncCallback(callback) { + this.permissionModeSyncCallback = callback; + } + setSubagentHookProvider(_getState) { + } + setAutoTurnCallback(_callback) { + } + consumeTurnMetadata() { + const metadata = this.currentTurnMetadata; + this.currentTurnMetadata = {}; + return metadata; + } + buildSessionUpdates(params) { + var _a5; + const existingState = params.conversation ? getOpencodeState(params.conversation.providerState) : null; + const providerState = { + ...this.currentDatabasePath || (existingState == null ? void 0 : existingState.databasePath) ? { databasePath: (_a5 = this.currentDatabasePath) != null ? _a5 : existingState == null ? void 0 : existingState.databasePath } : {} + }; + const updates = { + providerState: Object.keys(providerState).length > 0 ? providerState : void 0, + sessionId: this.sessionId + }; + if (params.sessionInvalidated) { + if (!this.sessionId) { + updates.providerState = void 0; + updates.sessionId = null; + } + } + return { updates }; + } + resolveSessionIdForFork(conversation) { + var _a5, _b3; + return (_b3 = (_a5 = this.sessionId) != null ? _a5 : conversation == null ? void 0 : conversation.sessionId) != null ? _b3 : null; + } + async loadSubagentToolCalls(_agentId) { + return []; + } + async loadSubagentFinalResult(_agentId) { + return null; + } + async startProcess(params) { + var _a5, _b3; + const processEnv = { + ...process.env, + ...params.runtimeEnv, + OPENCODE_CONFIG: params.configPath, + PATH: getEnhancedPath( + params.runtimeEnv.PATH, + path19.isAbsolute(params.command) ? params.command : void 0 + ) + }; + this.process = new AcpSubprocess({ + args: ["acp", `--cwd=${params.cwd}`], + command: params.command, + cwd: params.cwd, + env: processEnv + }); + this.process.start(); + this.transport = new AcpJsonRpcTransport({ + input: this.process.stdout, + onClose: (listener) => this.process.onClose(listener), + output: this.process.stdin + }); + const transport = this.transport; + this.unregisterTransportClose = transport.onClose(() => { + if (this.transport === transport) { + this.setReady(false); + } + }); + this.connection = new AcpClientConnection({ + clientInfo: { + name: "claudian", + version: (_b3 = (_a5 = this.plugin.manifest) == null ? void 0 : _a5.version) != null ? _b3 : "0.0.0" + }, + delegate: { + fileSystem: { + readTextFile: (request) => this.readTextFile(request), + writeTextFile: (request) => this.writeTextFile(request) + }, + onSessionNotification: (notification) => this.handleSessionNotification(notification), + requestPermission: (request) => this.handlePermissionRequest(request) + }, + transport: this.transport + }); + this.transport.start(); + await this.connection.initialize(); + this.setReady(true); + } + async shutdownProcess() { + var _a5, _b3, _c2, _d; + this.setReady(false); + (_a5 = this.activeTurn) == null ? void 0 : _a5.queue.close(); + this.activeTurn = null; + this.currentSessionModelId = null; + this.currentSessionModeId = null; + this.setSupportedCommands([]); + (_b3 = this.unregisterTransportClose) == null ? void 0 : _b3.call(this); + this.unregisterTransportClose = null; + (_c2 = this.connection) == null ? void 0 : _c2.dispose(); + this.connection = null; + (_d = this.transport) == null ? void 0 : _d.dispose(); + this.transport = null; + if (this.process) { + await this.process.shutdown().catch(() => { + }); + this.process = null; + } + } + setReady(ready) { + if (this.ready === ready) { + return; + } + this.ready = ready; + for (const listener of this.readyListeners) { + listener(ready); + } + } + getSystemPromptSettings(vaultPath) { + return { + customPrompt: this.plugin.settings.systemPrompt, + mediaFolder: this.plugin.settings.mediaFolder, + userName: this.plugin.settings.userName, + vaultPath + }; + } + buildRuntimeEnv(cliPath, databasePathOverride) { + return buildOpencodeRuntimeEnv( + this.plugin.settings, + cliPath, + databasePathOverride + ); + } + getProviderSettings() { + return ProviderSettingsCoordinator.getProviderSettingsSnapshot( + this.plugin.settings, + this.providerId + ); + } + resolveSelectedRawModelId(queryOptions) { + const providerSettings = this.getProviderSettings(); + const selectedModel = typeof (queryOptions == null ? void 0 : queryOptions.model) === "string" ? queryOptions.model : typeof providerSettings.model === "string" ? providerSettings.model : ""; + if (!isOpencodeModelSelectionId(selectedModel)) { + return null; + } + const selectedBaseRawModelId = decodeOpencodeModelId(selectedModel); + if (!selectedBaseRawModelId) { + return null; + } + const discoveredModels = getOpencodeProviderSettings(providerSettings).discoveredModels; + const normalizedBaseRawModelId = resolveOpencodeBaseModelRawId(selectedBaseRawModelId, discoveredModels); + if (!normalizedBaseRawModelId) { + return null; + } + const availableModelIds = new Set(discoveredModels.map((model) => model.rawId)); + if (availableModelIds.size > 0 && !availableModelIds.has(normalizedBaseRawModelId)) { + return null; + } + return normalizedBaseRawModelId; + } + getAuxiliaryModel() { + var _a5; + return (_a5 = this.getActiveDisplayModel()) != null ? _a5 : null; + } + getActiveDisplayModel(queryOptions) { + const providerSettings = this.getProviderSettings(); + const selectedModel = typeof (queryOptions == null ? void 0 : queryOptions.model) === "string" ? queryOptions.model : typeof providerSettings.model === "string" ? providerSettings.model : ""; + if (selectedModel && selectedModel !== OPENCODE_SYNTHETIC_MODEL_ID && isOpencodeModelSelectionId(selectedModel)) { + const selectedRawModelId = this.resolveSelectedRawModelId(queryOptions); + return selectedRawModelId ? encodeOpencodeModelId(selectedRawModelId) : selectedModel; + } + return this.currentSessionModelId ? encodeOpencodeModelId(this.currentSessionModelId) : selectedModel && isOpencodeModelSelectionId(selectedModel) ? selectedModel : void 0; + } + resolveSelectedModeId() { + var _a5; + const providerSettings = this.getProviderSettings(); + const opencodeSettings = getOpencodeProviderSettings(providerSettings); + const availableModes = getManagedOpencodeModes(opencodeSettings.availableModes); + const mappedModeId = resolveOpencodeModeForPermissionMode( + providerSettings.permissionMode, + opencodeSettings.availableModes + ); + if (mappedModeId) { + return mappedModeId; + } + if (opencodeSettings.selectedMode) { + if (availableModes.some((mode) => mode.id === opencodeSettings.selectedMode)) { + return opencodeSettings.selectedMode; + } + } + return ((_a5 = availableModes[0]) == null ? void 0 : _a5.id) || null; + } + async applySelectedMode(sessionId) { + if (!this.connection) { + return; + } + const selectedModeId = this.resolveSelectedModeId(); + if (!selectedModeId || selectedModeId === this.currentSessionModeId) { + return; + } + const response = await this.connection.setConfigOption({ + configId: "mode", + sessionId, + type: "select", + value: selectedModeId + }); + this.currentSessionModeId = selectedModeId; + await this.syncSessionModeState({ + configOptions: response.configOptions + }); + } + async applySelectedModel(sessionId, queryOptions) { + if (!this.connection) { + return; + } + const selectedRawModelId = this.resolveSelectedRawModelId(queryOptions); + if (!selectedRawModelId || selectedRawModelId === this.currentSessionModelId) { + return; + } + const response = await this.connection.setConfigOption({ + configId: "model", + sessionId, + type: "select", + value: selectedRawModelId + }); + this.currentSessionModelId = selectedRawModelId; + await this.syncSessionModelState({ + configOptions: response.configOptions + }); + } + resolveSelectedEffortValue() { + const providerSettings = this.getProviderSettings(); + const selectedEffort = typeof providerSettings.effortLevel === "string" ? providerSettings.effortLevel.trim() : ""; + if (!selectedEffort || selectedEffort === OPENCODE_DEFAULT_THINKING_LEVEL) { + return null; + } + return this.currentSessionEffortValues.has(selectedEffort) ? selectedEffort : null; + } + async applySelectedEffort(sessionId) { + if (!this.connection || !this.currentSessionEffortConfigId) { + return; + } + const selectedEffort = this.resolveSelectedEffortValue(); + if (!selectedEffort || selectedEffort === this.currentSessionEffortValue) { + return; + } + const response = await this.connection.setConfigOption({ + configId: this.currentSessionEffortConfigId, + sessionId, + type: "select", + value: selectedEffort + }); + this.currentSessionEffortValue = selectedEffort; + await this.syncSessionModelState({ + configOptions: response.configOptions + }); + } + async syncSessionModelState(params) { + var _a5; + const acpState = extractAcpSessionModelState(params); + const currentRawModelId = (_a5 = acpState.currentModelId) != null ? _a5 : this.currentSessionModelId; + const discoveredModels = normalizeOpencodeDiscoveredModels( + acpState.availableModels.map((model) => ({ + ...model.description ? { description: model.description } : {}, + label: model.name, + rawId: model.id + })) + ); + if (currentRawModelId) { + this.currentSessionModelId = currentRawModelId; + } + const settingsBag = this.plugin.settings; + const currentSettings = getOpencodeProviderSettings(settingsBag); + const currentBaseRawModelId = currentRawModelId ? resolveOpencodeBaseModelRawId(currentRawModelId, discoveredModels) : null; + const thoughtLevelState = extractAcpSessionThoughtLevelState(params); + const currentThinkingOptions = normalizeOpencodeModelVariants( + thoughtLevelState.availableLevels.map((level) => ({ + ...level.description ? { description: level.description } : {}, + label: level.name, + value: level.id + })) + ); + const currentThinkingLevel = thoughtLevelState.currentLevel; + this.currentSessionEffortConfigId = currentThinkingOptions.length > 0 ? thoughtLevelState.configId : null; + this.currentSessionEffortValue = currentThinkingOptions.length > 0 ? currentThinkingLevel : null; + this.currentSessionEffortValues = new Set(currentThinkingOptions.map((option) => option.value)); + const nextThinkingOptionsByModel = { ...currentSettings.thinkingOptionsByModel }; + if (currentBaseRawModelId) { + if (currentThinkingOptions.length > 0) { + nextThinkingOptionsByModel[currentBaseRawModelId] = currentThinkingOptions; + } else { + delete nextThinkingOptionsByModel[currentBaseRawModelId]; + } + } + const nextVisibleModels = currentSettings.visibleModels.length === 0 && currentBaseRawModelId ? [currentBaseRawModelId] : currentSettings.visibleModels; + const currentPreferredThinking = currentBaseRawModelId ? currentSettings.preferredThinkingByModel[currentBaseRawModelId] : ""; + const shouldSeedCurrentThinking = currentBaseRawModelId && currentThinkingLevel && (!currentPreferredThinking || currentThinkingOptions.length > 0 && !this.currentSessionEffortValues.has(currentPreferredThinking)); + const nextPreferredThinkingByModel = shouldSeedCurrentThinking && currentBaseRawModelId && currentThinkingLevel ? { + ...currentSettings.preferredThinkingByModel, + [currentBaseRawModelId]: currentThinkingLevel + } : currentSettings.preferredThinkingByModel; + const shouldSeedVisibleModels = !sameStringList(currentSettings.visibleModels, nextVisibleModels); + const shouldSeedPreferredThinking = !sameStringMap( + currentSettings.preferredThinkingByModel, + nextPreferredThinkingByModel + ); + const shouldUpdateDiscoveredModels = discoveredModels.length > 0 && !sameDiscoveredModels(currentSettings.discoveredModels, discoveredModels); + const shouldUpdateThinkingOptions = !sameThinkingOptionsByModel( + currentSettings.thinkingOptionsByModel, + nextThinkingOptionsByModel + ); + const discoveryChanged = shouldUpdateDiscoveredModels && updateOpencodeDiscoveryState(settingsBag, { discoveredModels }); + let changed = shouldSeedVisibleModels || shouldSeedPreferredThinking; + if (currentBaseRawModelId) { + const seeded = this.seedActiveModelSelection( + settingsBag, + encodeOpencodeModelId(currentBaseRawModelId), + currentThinkingLevel + ); + changed = changed || seeded; + } + if (shouldUpdateThinkingOptions || shouldSeedPreferredThinking || shouldSeedVisibleModels) { + updateOpencodeProviderSettings(settingsBag, { + ...shouldSeedPreferredThinking ? { preferredThinkingByModel: nextPreferredThinkingByModel } : {}, + ...shouldUpdateThinkingOptions ? { thinkingOptionsByModel: nextThinkingOptionsByModel } : {}, + ...shouldSeedVisibleModels ? { visibleModels: nextVisibleModels } : {} + }); + } + if (!changed && !discoveryChanged && !shouldUpdateThinkingOptions) { + return; + } + if (changed || shouldUpdateThinkingOptions) { + await this.plugin.saveSettings(); + } + this.refreshModelSelectors(); + } + seedActiveModelSelection(settingsBag, modelSelection, thinkingLevel) { + let changed = false; + const savedProviderModel = ensureProviderProjectionMap(settingsBag, "savedProviderModel"); + const savedModel = typeof savedProviderModel.opencode === "string" ? savedProviderModel.opencode : ""; + if (!savedModel || savedModel === OPENCODE_SYNTHETIC_MODEL_ID) { + savedProviderModel.opencode = modelSelection; + changed = true; + } + if (thinkingLevel) { + const savedProviderEffort = ensureProviderProjectionMap(settingsBag, "savedProviderEffort"); + const savedEffort = typeof savedProviderEffort.opencode === "string" ? savedProviderEffort.opencode.trim() : ""; + if (!savedEffort || savedEffort === OPENCODE_DEFAULT_THINKING_LEVEL) { + savedProviderEffort.opencode = thinkingLevel; + changed = true; + } + } + if (ProviderRegistry.resolveSettingsProviderId(settingsBag) !== this.providerId) { + return changed; + } + const activeModel = typeof settingsBag.model === "string" ? settingsBag.model : ""; + if (!activeModel || activeModel === OPENCODE_SYNTHETIC_MODEL_ID) { + settingsBag.model = modelSelection; + changed = true; + } + if (thinkingLevel) { + const activeEffort = typeof settingsBag.effortLevel === "string" ? settingsBag.effortLevel : ""; + if (!activeEffort || activeEffort === OPENCODE_DEFAULT_THINKING_LEVEL) { + settingsBag.effortLevel = thinkingLevel; + changed = true; + } + } + return changed; + } + async syncSessionModeState(params) { + var _a5; + const acpState = extractAcpSessionModeState(params); + const availableModes = normalizeOpencodeAvailableModes(acpState.availableModes); + const currentModeId = (_a5 = params.currentModeId) != null ? _a5 : acpState.currentModeId; + if (currentModeId) { + this.currentSessionModeId = currentModeId; + this.emitPermissionModeSync(currentModeId); + } + const settingsBag = this.plugin.settings; + const currentSettings = getOpencodeProviderSettings(settingsBag); + const shouldSeedSelectedMode = typeof currentModeId === "string" && !currentSettings.selectedMode && isManagedOpencodeModeId(currentModeId); + const discoveryChanged = availableModes.length > 0 && !sameModes(currentSettings.availableModes, availableModes) && updateOpencodeDiscoveryState(settingsBag, { availableModes }); + if (!discoveryChanged && !shouldSeedSelectedMode) { + return; + } + if (shouldSeedSelectedMode && currentModeId) { + updateOpencodeProviderSettings(settingsBag, { selectedMode: currentModeId }); + await this.plugin.saveSettings(); + } + this.refreshModelSelectors(); + } + refreshModelSelectors() { + for (const view of this.plugin.getAllViews()) { + view.refreshModelSelector(); + } + } + emitPermissionModeSync(modeId) { + const permissionMode = resolvePermissionModeForManagedOpencodeMode(modeId); + if (!permissionMode || !this.permissionModeSyncCallback) { + return; + } + try { + this.permissionModeSyncCallback(permissionMode); + } catch (e2) { + } + } + async createSession(cwd) { + var _a5, _b3, _c2, _d; + if (!this.connection) { + return null; + } + try { + this.setSupportedCommands([]); + const response = await this.connection.newSession({ + cwd, + mcpServers: [] + }); + this.loadedSessionId = response.sessionId; + this.sessionId = response.sessionId; + this.sessionCwds.set(response.sessionId, cwd); + await this.syncSessionModelState({ + configOptions: (_a5 = response.configOptions) != null ? _a5 : null, + models: (_b3 = response.models) != null ? _b3 : null + }); + await this.syncSessionModeState({ + configOptions: (_c2 = response.configOptions) != null ? _c2 : null, + modes: (_d = response.modes) != null ? _d : null + }); + return response.sessionId; + } catch (e2) { + return null; + } + } + async loadSession(sessionId, cwd) { + var _a5, _b3, _c2, _d; + if (!this.connection) { + return false; + } + try { + this.setSupportedCommands([]); + const response = await this.connection.loadSession({ + cwd, + mcpServers: [], + sessionId + }); + this.sessionInvalidated = false; + this.loadedSessionId = response.sessionId; + this.sessionId = response.sessionId; + this.sessionCwds.set(response.sessionId, cwd); + await this.syncSessionModelState({ + configOptions: (_a5 = response.configOptions) != null ? _a5 : null, + models: (_b3 = response.models) != null ? _b3 : null + }); + await this.syncSessionModeState({ + configOptions: (_c2 = response.configOptions) != null ? _c2 : null, + modes: (_d = response.modes) != null ? _d : null + }); + return true; + } catch (e2) { + return false; + } + } + async handleSessionNotification(notification) { + if (notification.sessionId !== this.sessionId) { + return; + } + const normalized = this.sessionUpdateNormalizer.normalize(notification.update); + if (normalized.type === "config_options") { + await this.syncSessionModelState({ + configOptions: normalized.configOptions + }); + await this.syncSessionModeState({ + configOptions: normalized.configOptions + }); + return; + } + if (normalized.type === "current_mode") { + await this.syncSessionModeState({ + currentModeId: normalized.currentModeId + }); + return; + } + if (normalized.type === "commands") { + this.setSupportedCommands(normalized.commands); + return; + } + if (!this.activeTurn || this.activeTurn.sessionId !== notification.sessionId) { + return; + } + switch (normalized.type) { + case "message_chunk": { + if (normalized.role === "assistant" && normalized.messageId) { + this.currentTurnMetadata.assistantMessageId = normalized.messageId; + } + if (normalized.role === "user" && normalized.messageId) { + this.currentTurnMetadata.userMessageId = normalized.messageId; + } + for (const chunk of normalized.streamChunks) { + this.activeTurn.queue.push(chunk); + } + return; + } + case "tool_call": + case "tool_call_update": { + const streamChunks = normalized.type === "tool_call" ? this.toolStreamAdapter.normalizeToolCall(normalized.toolCall, normalized.streamChunks) : this.toolStreamAdapter.normalizeToolCallUpdate(normalized.toolCallUpdate, normalized.streamChunks); + for (const chunk of streamChunks) { + this.activeTurn.queue.push(chunk); + } + return; + } + case "usage": { + this.contextUsage = normalized.usage; + const usage = buildAcpUsageInfo({ + contextWindow: normalized.usage, + model: this.getActiveDisplayModel(), + promptUsage: this.promptUsage + }); + if (usage) { + this.activeTurn.queue.push({ + sessionId: notification.sessionId, + type: "usage", + usage + }); + } + return; + } + default: + return; + } + } + async handlePermissionRequest(request) { + if (!this.approvalCallback) { + return { outcome: { outcome: "cancelled" } }; + } + const input = normalizeApprovalInput(request.toolCall.rawInput); + const presentation = buildOpencodePermissionPresentation(request.toolCall.title, input, request.toolCall.locations); + const decision = await this.approvalCallback( + presentation.toolName, + input, + presentation.description, + { + ...presentation.blockedPath ? { blockedPath: presentation.blockedPath } : {}, + ...presentation.decisionReason ? { decisionReason: presentation.decisionReason } : {}, + decisionOptions: buildAcpApprovalDecisionOptions(request.options) + } + ); + return mapApprovalDecision(decision, request.options); + } + setSupportedCommands(commands) { + this.supportedCommands = commands.map((command) => ({ ...command })); + const waiters = this.supportedCommandWaiters.splice(0); + for (const waiter of waiters) { + waiter(this.supportedCommands); + } + } + waitForSupportedCommands(timeoutMs = 250) { + if (this.supportedCommands.length > 0) { + return Promise.resolve([...this.supportedCommands]); + } + return new Promise((resolve8) => { + const waiter = (commands) => { + window.clearTimeout(timeoutId); + resolve8([...commands]); + }; + const timeoutId = window.setTimeout(() => { + const index = this.supportedCommandWaiters.indexOf(waiter); + if (index >= 0) { + this.supportedCommandWaiters.splice(index, 1); + } + resolve8([...this.supportedCommands]); + }, timeoutMs); + this.supportedCommandWaiters.push(waiter); + }); + } + async readTextFile(request) { + var _a5; + const resolvedPath = this.resolveSessionPath(request.sessionId, request.path); + const content = await fs19.readFile(resolvedPath, "utf-8"); + if (request.line === void 0 && request.limit === void 0) { + return { content }; + } + const lines = content.split(/\r?\n/); + const startIndex = Math.max(0, ((_a5 = request.line) != null ? _a5 : 1) - 1); + const endIndex = request.limit ? startIndex + Math.max(0, request.limit) : lines.length; + return { + content: lines.slice(startIndex, endIndex).join("\n") + }; + } + async writeTextFile(request) { + const resolvedPath = this.resolveSessionPath(request.sessionId, request.path); + await fs19.mkdir(path19.dirname(resolvedPath), { recursive: true }); + await fs19.writeFile(resolvedPath, request.content, "utf-8"); + return {}; + } + resolveSessionPath(sessionId, rawPath) { + var _a5, _b3; + if (path19.isAbsolute(rawPath)) { + return rawPath; + } + const cwd = (_b3 = (_a5 = this.sessionCwds.get(sessionId)) != null ? _a5 : getVaultPath(this.plugin.app)) != null ? _b3 : process.cwd(); + return path19.resolve(cwd, rawPath); + } + formatRuntimeError(error48) { + var _a5; + const baseMessage = error48 instanceof Error ? error48.message : "OpenCode request failed"; + const stderr = (_a5 = this.process) == null ? void 0 : _a5.getStderrSnapshot(); + return stderr ? `${baseMessage} + +${stderr}` : baseMessage; + } + clearActiveSession() { + this.currentDatabasePath = null; + this.sessionId = null; + this.loadedSessionId = null; + this.currentSessionModelId = null; + this.currentSessionModeId = null; + this.setSupportedCommands([]); + } +}; +function normalizeApprovalInput(rawInput) { + if (rawInput && typeof rawInput === "object" && !Array.isArray(rawInput)) { + return rawInput; + } + if (rawInput === void 0) { + return {}; + } + return { value: rawInput }; +} +function buildOpencodePermissionPresentation(rawTitle, input, locations) { + const permissionId = normalizePermissionId(rawTitle); + const blockedPath = extractPermissionPath(input, locations); + switch (permissionId) { + case "bash": + return { + decisionReason: "Command execution permission required", + description: "OpenCode wants to run a shell command.", + toolName: "bash" + }; + case "codesearch": + return { + description: "OpenCode wants to search indexed code outside the active buffer.", + toolName: "codesearch" + }; + case "doom_loop": { + const repeatedTool = typeof input.tool === "string" ? input.tool.trim() : ""; + return { + decisionReason: "OpenCode detected repeated identical tool calls", + description: repeatedTool ? `Allow another repeated \`${repeatedTool}\` call.` : "Allow another repeated tool call.", + toolName: "Doom Loop Guard" + }; + } + case "edit": + return { + ...blockedPath ? { blockedPath } : {}, + decisionReason: "File write permission required", + description: blockedPath ? "OpenCode wants to modify this file." : "OpenCode wants to apply file changes.", + toolName: "edit" + }; + case "external_directory": + return { + ...blockedPath ? { blockedPath } : {}, + decisionReason: "Path is outside the session working directory", + description: blockedPath ? "OpenCode wants to access a path outside the working directory." : "OpenCode wants to access files outside the working directory.", + toolName: "External Directory" + }; + case "glob": + return { + description: "OpenCode wants to scan file paths with a glob pattern.", + toolName: "glob" + }; + case "grep": + return { + description: "OpenCode wants to search file contents with a pattern.", + toolName: "grep" + }; + case "lsp": + return { + description: "OpenCode wants to query language server data.", + toolName: "lsp" + }; + case "plan_enter": + return { + description: "OpenCode wants to switch this session into planning mode.", + toolName: "Enter Plan Mode" + }; + case "plan_exit": + return { + description: "OpenCode wants to leave planning mode and resume implementation.", + toolName: "Exit Plan Mode" + }; + case "question": + return { + description: "OpenCode wants to ask you a direct question before continuing.", + toolName: "Ask Question" + }; + case "read": + return { + ...blockedPath ? { blockedPath } : {}, + description: blockedPath ? "OpenCode wants to read this path." : "OpenCode wants to read project files.", + toolName: "read" + }; + case "skill": + return { + description: "OpenCode wants to load a skill into the current session.", + toolName: "skill" + }; + case "todowrite": + return { + description: "OpenCode wants to update the shared task list.", + toolName: "todowrite" + }; + case "webfetch": + return { + description: "OpenCode wants to fetch content from a URL.", + toolName: "webfetch" + }; + case "websearch": + return { + description: "OpenCode wants to search the web.", + toolName: "websearch" + }; + case "workflow_tool_approval": { + const summary = summarizeWorkflowTools(input); + return { + decisionReason: "Session-level workflow approval requested", + description: summary ? `Pre-approve workflow tools for this session: ${summary}.` : "Pre-approve workflow tools for this session.", + toolName: "Workflow Approval" + }; + } + default: + return { + ...blockedPath ? { blockedPath } : {}, + description: blockedPath ? `OpenCode wants permission to use ${formatPermissionLabel(permissionId)} on this path.` : `OpenCode wants permission to use ${formatPermissionLabel(permissionId)}.`, + toolName: formatPermissionLabel(permissionId) + }; + } +} +function normalizePermissionId(value) { + return (value == null ? void 0 : value.trim().toLowerCase()) || "tool"; +} +function extractPermissionPath(input, locations) { + var _a5; + const candidateKeys = ["filepath", "filePath", "path", "parentDir"]; + for (const key of candidateKeys) { + const value = input[key]; + if (typeof value === "string" && value.trim()) { + return value.trim(); + } + } + const locationPath = (_a5 = locations == null ? void 0 : locations.find((location) => location.path.trim())) == null ? void 0 : _a5.path; + return (locationPath == null ? void 0 : locationPath.trim()) || void 0; +} +function summarizeWorkflowTools(input) { + const tools = Array.isArray(input.tools) ? input.tools : []; + const names = tools.flatMap((tool) => { + if (!tool || typeof tool !== "object" || Array.isArray(tool)) { + return []; + } + const entry = tool; + const name = typeof entry.name === "string" ? entry.name.trim() : ""; + if (!name) { + return []; + } + let title = ""; + if (typeof entry.args === "string") { + try { + const parsedArgs = JSON.parse(entry.args); + title = typeof parsedArgs.title === "string" ? parsedArgs.title.trim() : typeof parsedArgs.name === "string" ? parsedArgs.name.trim() : ""; + } catch (e2) { + title = ""; + } + } + return [title ? `${name}: ${title}` : name]; + }); + if (names.length === 0) { + return ""; + } + if (names.length <= 3) { + return names.join(", "); + } + return `${names.slice(0, 3).join(", ")} +${names.length - 3} more`; +} +function formatPermissionLabel(permissionId) { + return permissionId.split(/[_\s]+/).filter(Boolean).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)).join(" "); +} +function mapApprovalDecision(decision, options) { + if (decision === "allow") { + return selectPermissionOption(options, ["allow_once", "allow_always"]); + } + if (decision === "allow-always") { + return selectPermissionOption(options, ["allow_always", "allow_once"]); + } + if (decision === "deny") { + return selectPermissionOption(options, ["reject_once", "reject_always"]); + } + if (typeof decision === "object" && decision.type === "select-option") { + return { + outcome: { + optionId: decision.value, + outcome: "selected" + } + }; + } + return { outcome: { outcome: "cancelled" } }; +} +function buildAcpApprovalDecisionOptions(options) { + return options.map((option) => ({ + ...option.kind === "allow_once" ? { decision: "allow" } : option.kind === "allow_always" ? { decision: "allow-always" } : {}, + label: option.name, + value: option.optionId + })); +} +function selectPermissionOption(options, preferredKinds) { + for (const kind of preferredKinds) { + const option = options.find((entry) => entry.kind === kind); + if (option) { + return { + outcome: { + optionId: option.optionId, + outcome: "selected" + } + }; + } + } + return { outcome: { outcome: "cancelled" } }; +} + +// src/providers/opencode/ui/OpencodeAgentSettings.ts +var import_obsidian18 = require("obsidian"); +var OPENCODE_AGENT_INVALID_SEGMENT_PATTERN = /[<>:"\\|?*]/; +function validateOpencodeAgentName(name) { + if (!name) return "Agent name is required"; + const segments = name.split("/"); + if (segments.length === 0 || segments.some((segment) => segment.length === 0)) { + return "Agent name must use slash-separated path segments without leading or trailing slashes"; + } + for (const segment of segments) { + if (!segment.trim()) { + return "Agent name path segments cannot be empty or whitespace-only"; + } + if (segment !== segment.trim()) { + return "Agent name path segments cannot start or end with whitespace"; + } + if (segment === "." || segment === "..") { + return 'Agent name cannot include "." or ".." path segments'; + } + if (segment.includes("\0") || OPENCODE_AGENT_INVALID_SEGMENT_PATTERN.test(segment)) { + return "Agent name path segments cannot contain Windows-reserved filename characters"; + } + } + return null; +} +function findOpencodeAgentNameConflict(agents, name, currentPersistenceKey) { + var _a5; + const normalizedName = name.toLowerCase(); + return (_a5 = agents.find( + (agent) => agent.name.toLowerCase() === normalizedName && agent.persistenceKey !== currentPersistenceKey + )) != null ? _a5 : null; +} +var OpencodeAgentModal = class extends import_obsidian18.Modal { + constructor(app, existing, allAgents, onSave) { + super(app); + this.existing = existing; + this.allAgents = allAgents; + this.onSave = onSave; + } + onOpen() { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m, _n, _o, _p, _q3; + this.setTitle(this.existing ? "Edit OpenCode Subagent" : "Add OpenCode Subagent"); + this.modalEl.addClass("claudian-sp-modal"); + const { contentEl } = this; + let nameInput; + let descriptionInput; + let modelInput; + let variantInput; + let temperatureInput; + let topPInput; + let colorInput; + let stepsInput; + let hiddenValue = (_b3 = (_a5 = this.existing) == null ? void 0 : _a5.hidden) != null ? _b3 : false; + let disableValue = (_d = (_c2 = this.existing) == null ? void 0 : _c2.disable) != null ? _d : false; + let toolsInput; + let permissionInput; + let optionsInput; + new import_obsidian18.Setting(contentEl).setName("Name").setDesc("OpenCode agent name. Use slash-separated segments for nested agents.").addText((text) => { + var _a6, _b4; + nameInput = text.inputEl; + text.setValue((_b4 = (_a6 = this.existing) == null ? void 0 : _a6.name) != null ? _b4 : "").setPlaceholder("Review"); + }); + new import_obsidian18.Setting(contentEl).setName("Description").setDesc("When OpenCode should use this subagent").addText((text) => { + var _a6, _b4; + descriptionInput = text.inputEl; + text.setValue((_b4 = (_a6 = this.existing) == null ? void 0 : _a6.description) != null ? _b4 : "").setPlaceholder("Reviews code for correctness and maintainability"); + }); + const details = contentEl.createEl("details", { cls: "claudian-sp-advanced-section" }); + details.createEl("summary", { + text: "Advanced options", + cls: "claudian-sp-advanced-summary" + }); + if (((_e2 = this.existing) == null ? void 0 : _e2.model) || ((_f2 = this.existing) == null ? void 0 : _f2.variant) || ((_g = this.existing) == null ? void 0 : _g.temperature) !== void 0 || ((_h2 = this.existing) == null ? void 0 : _h2.topP) !== void 0 || ((_i = this.existing) == null ? void 0 : _i.color) || ((_j = this.existing) == null ? void 0 : _j.steps) !== void 0 || ((_k3 = this.existing) == null ? void 0 : _k3.hidden) || ((_l2 = this.existing) == null ? void 0 : _l2.disable) || ((_m = this.existing) == null ? void 0 : _m.tools) || ((_n = this.existing) == null ? void 0 : _n.permission) !== void 0 || ((_o = this.existing) == null ? void 0 : _o.options)) { + details.open = true; + } + new import_obsidian18.Setting(details).setName("Model").setDesc("Model override in provider/model format").addText((text) => { + var _a6, _b4; + modelInput = text.inputEl; + text.setValue((_b4 = (_a6 = this.existing) == null ? void 0 : _a6.model) != null ? _b4 : "").setPlaceholder("Anthropic/Claude-sonnet-4-20250514"); + }); + new import_obsidian18.Setting(details).setName("Variant").setDesc("Model variant override").addText((text) => { + var _a6, _b4; + variantInput = text.inputEl; + text.setValue((_b4 = (_a6 = this.existing) == null ? void 0 : _a6.variant) != null ? _b4 : "").setPlaceholder("High"); + }); + new import_obsidian18.Setting(details).setName("Temperature").setDesc("Optional sampling temperature").addText((text) => { + var _a6; + temperatureInput = text.inputEl; + text.setValue(((_a6 = this.existing) == null ? void 0 : _a6.temperature) !== void 0 ? String(this.existing.temperature) : "").setPlaceholder("0.1"); + }); + new import_obsidian18.Setting(details).setName("Top p").setDesc("Optional nucleus sampling value").addText((text) => { + var _a6; + topPInput = text.inputEl; + text.setValue(((_a6 = this.existing) == null ? void 0 : _a6.topP) !== void 0 ? String(this.existing.topP) : "").setPlaceholder("0.9"); + }); + new import_obsidian18.Setting(details).setName("Color").setDesc("Hex color or theme token").addText((text) => { + var _a6, _b4; + colorInput = text.inputEl; + text.setValue((_b4 = (_a6 = this.existing) == null ? void 0 : _a6.color) != null ? _b4 : "").setPlaceholder("#Ff5733"); + }); + new import_obsidian18.Setting(details).setName("Steps").setDesc("Maximum agentic iterations before forcing text-only output").addText((text) => { + var _a6; + stepsInput = text.inputEl; + text.setValue(((_a6 = this.existing) == null ? void 0 : _a6.steps) !== void 0 ? String(this.existing.steps) : "").setPlaceholder("10"); + }); + new import_obsidian18.Setting(details).setName("Hide from @mention").setDesc("Hide this subagent from the @ autocomplete menu").addToggle((toggle) => { + toggle.setValue(hiddenValue).onChange((value) => { + hiddenValue = value; + }); + }); + new import_obsidian18.Setting(details).setName("Disable agent").setDesc("Disable the agent without deleting the file").addToggle((toggle) => { + toggle.setValue(disableValue).onChange((value) => { + disableValue = value; + }); + }); + new import_obsidian18.Setting(details).setName("Enabled tools (JSON)").setDesc('Optional deprecated tools map, e.g. {"write":false,"edit":false}').addTextArea((text) => { + var _a6; + toolsInput = text.inputEl; + text.setValue(((_a6 = this.existing) == null ? void 0 : _a6.tools) ? JSON.stringify(this.existing.tools, null, 2) : "").setPlaceholder('{\n "write": false,\n "edit": false\n}'); + }); + new import_obsidian18.Setting(details).setName("Permission (JSON)").setDesc('Optional permission config, e.g. {"edit":"deny","bash":"allow"}').addTextArea((text) => { + var _a6; + permissionInput = text.inputEl; + text.setValue(((_a6 = this.existing) == null ? void 0 : _a6.permission) !== void 0 ? JSON.stringify(this.existing.permission, null, 2) : "").setPlaceholder('{\n "edit": "deny"\n}'); + }); + new import_obsidian18.Setting(details).setName("Options (JSON)").setDesc("Optional custom agent options").addTextArea((text) => { + var _a6; + optionsInput = text.inputEl; + text.setValue(((_a6 = this.existing) == null ? void 0 : _a6.options) ? JSON.stringify(this.existing.options, null, 2) : "").setPlaceholder('{\n "focus": "security"\n}'); + }); + new import_obsidian18.Setting(contentEl).setName("Prompt").setDesc("Markdown body used as the agent prompt"); + const promptArea = contentEl.createEl("textarea", { + cls: "claudian-sp-content-area", + attr: { + rows: "10", + placeholder: "Review code changes carefully and call out correctness, regressions, and missing coverage." + } + }); + promptArea.value = (_q3 = (_p = this.existing) == null ? void 0 : _p.prompt) != null ? _q3 : ""; + const buttonContainer = contentEl.createDiv({ cls: "claudian-sp-modal-buttons" }); + const cancelBtn = buttonContainer.createEl("button", { + text: "Cancel", + cls: "claudian-cancel-btn" + }); + cancelBtn.addEventListener("click", () => this.close()); + const saveBtn = buttonContainer.createEl("button", { + text: "Save", + cls: "claudian-save-btn" + }); + saveBtn.addEventListener("click", () => { + void (async () => { + var _a6, _b4, _c3; + const name = nameInput.value.trim(); + const nameError = validateOpencodeAgentName(name); + if (nameError) { + new import_obsidian18.Notice(nameError); + return; + } + const description = descriptionInput.value.trim(); + if (!description) { + new import_obsidian18.Notice("Description is required"); + return; + } + const prompt = promptArea.value; + if (!prompt.trim()) { + new import_obsidian18.Notice("Prompt is required"); + return; + } + const duplicate = findOpencodeAgentNameConflict( + this.allAgents, + name, + (_a6 = this.existing) == null ? void 0 : _a6.persistenceKey + ); + if (duplicate) { + new import_obsidian18.Notice(`A subagent named "${name}" already exists`); + return; + } + const temperature = parseOptionalNumber(temperatureInput.value, "Temperature"); + if (temperature.error) { + new import_obsidian18.Notice(temperature.error); + return; + } + const topP = parseOptionalNumber(topPInput.value, "Top P"); + if (topP.error) { + new import_obsidian18.Notice(topP.error); + return; + } + const steps = parseOptionalPositiveInteger(stepsInput.value, "Steps"); + if (steps.error) { + new import_obsidian18.Notice(steps.error); + return; + } + const tools = parseOptionalJsonObjectOfBooleans(toolsInput.value, "Enabled Tools"); + if (tools.error) { + new import_obsidian18.Notice(tools.error); + return; + } + const permission = parseOptionalJson(permissionInput.value, "Permission"); + if (permission.error) { + new import_obsidian18.Notice(permission.error); + return; + } + const options = parseOptionalJsonObject(optionsInput.value, "Options"); + if (options.error) { + new import_obsidian18.Notice(options.error); + return; + } + const agent = { + name, + description, + prompt, + mode: "subagent", + hidden: hiddenValue || void 0, + disable: disableValue || void 0, + model: modelInput.value.trim() || void 0, + variant: variantInput.value.trim() || void 0, + temperature: temperature.value, + topP: topP.value, + color: colorInput.value.trim() || void 0, + steps: steps.value, + tools: tools.value, + permission: permission.value, + options: options.value, + persistenceKey: (_b4 = this.existing) == null ? void 0 : _b4.persistenceKey, + extraFrontmatter: (_c3 = this.existing) == null ? void 0 : _c3.extraFrontmatter + }; + try { + await this.onSave(agent); + } catch (error48) { + const message = error48 instanceof Error ? error48.message : "Unknown error"; + new import_obsidian18.Notice(`Failed to save subagent: ${message}`); + return; + } + this.close(); + })(); + }); + } + onClose() { + this.contentEl.empty(); + } +}; +var OpencodeAgentSettings = class { + constructor(containerEl, storage, app, onChanged) { + this.agents = []; + this.containerEl = containerEl; + this.storage = storage; + this.app = app; + this.onChanged = onChanged; + void this.render(); + } + async render() { + this.containerEl.empty(); + try { + this.agents = await this.storage.loadAll(); + } catch (e2) { + this.agents = []; + } + const visibleAgents = this.agents.filter((agent) => agent.mode === "subagent"); + const headerEl = this.containerEl.createDiv({ cls: "claudian-sp-header" }); + headerEl.createSpan({ text: "OpenCode Subagents", cls: "claudian-sp-label" }); + const actionsEl = headerEl.createDiv({ cls: "claudian-sp-header-actions" }); + const refreshBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Refresh" } + }); + (0, import_obsidian18.setIcon)(refreshBtn, "refresh-cw"); + refreshBtn.addEventListener("click", () => { + void this.render(); + }); + const addBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Add" } + }); + (0, import_obsidian18.setIcon)(addBtn, "plus"); + addBtn.addEventListener("click", () => this.openModal(null)); + if (visibleAgents.length === 0) { + const emptyEl = this.containerEl.createDiv({ cls: "claudian-sp-empty-state" }); + emptyEl.setText("No OpenCode subagents in vault. Click + to create one."); + return; + } + const listEl = this.containerEl.createDiv({ cls: "claudian-sp-list" }); + for (const agent of visibleAgents) { + this.renderItem(listEl, agent); + } + } + renderItem(listEl, agent) { + const itemEl = listEl.createDiv({ cls: "claudian-sp-item" }); + const infoEl = itemEl.createDiv({ cls: "claudian-sp-info" }); + const headerRow = infoEl.createDiv({ cls: "claudian-sp-item-header" }); + const nameEl = headerRow.createSpan({ cls: "claudian-sp-item-name" }); + nameEl.setText(agent.name); + headerRow.createSpan({ + text: "subagent", + cls: "claudian-slash-item-badge" + }); + if (agent.model) { + headerRow.createSpan({ text: agent.model, cls: "claudian-slash-item-badge" }); + } + if (agent.description) { + const descEl = infoEl.createDiv({ cls: "claudian-sp-item-desc" }); + descEl.setText(agent.description); + } + const actionsEl = itemEl.createDiv({ cls: "claudian-sp-item-actions" }); + const editBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn", + attr: { "aria-label": "Edit" } + }); + (0, import_obsidian18.setIcon)(editBtn, "pencil"); + editBtn.addEventListener("click", () => this.openModal(agent)); + const deleteBtn = actionsEl.createEl("button", { + cls: "claudian-settings-action-btn claudian-settings-delete-btn", + attr: { "aria-label": "Delete" } + }); + (0, import_obsidian18.setIcon)(deleteBtn, "trash-2"); + deleteBtn.addEventListener("click", () => { + void (async () => { + var _a5; + if (!this.app) return; + const confirmed = await confirmDelete( + this.app, + `Delete subagent "${agent.name}"?` + ); + if (!confirmed) return; + try { + await this.storage.delete(agent); + await this.render(); + await ((_a5 = this.onChanged) == null ? void 0 : _a5.call(this)); + new import_obsidian18.Notice(`Subagent "${agent.name}" deleted`); + } catch (e2) { + new import_obsidian18.Notice("Failed to delete subagent"); + } + })(); + }); + } + openModal(existing) { + if (!this.app) return; + const modal = new OpencodeAgentModal( + this.app, + existing, + this.agents, + async (agent) => { + var _a5; + await this.storage.save(agent, existing); + await this.render(); + await ((_a5 = this.onChanged) == null ? void 0 : _a5.call(this)); + new import_obsidian18.Notice( + existing ? `Subagent "${agent.name}" updated` : `Subagent "${agent.name}" created` + ); + } + ); + modal.open(); + } +}; +function parseOptionalNumber(value, label) { + const trimmed = value.trim(); + if (!trimmed) { + return {}; + } + const parsed = Number(trimmed); + if (!Number.isFinite(parsed)) { + return { error: `${label} must be a valid number` }; + } + return { value: parsed }; +} +function parseOptionalPositiveInteger(value, label) { + const trimmed = value.trim(); + if (!trimmed) { + return {}; + } + const parsed = Number(trimmed); + if (!Number.isInteger(parsed) || parsed <= 0) { + return { error: `${label} must be a positive integer` }; + } + return { value: parsed }; +} +function parseOptionalJson(value, label) { + const trimmed = value.trim(); + if (!trimmed) { + return {}; + } + try { + return { value: JSON.parse(trimmed) }; + } catch (e2) { + return { error: `${label} must be valid JSON` }; + } +} +function parseOptionalJsonObject(value, label) { + const parsed = parseOptionalJson(value, label); + if (parsed.error || parsed.value === void 0) { + return parsed.error ? { error: parsed.error } : {}; + } + if (!isJsonObject(parsed.value)) { + return { error: `${label} must be a JSON object` }; + } + return { value: parsed.value }; +} +function parseOptionalJsonObjectOfBooleans(value, label) { + const parsed = parseOptionalJsonObject(value, label); + if (parsed.error || parsed.value === void 0) { + return parsed.error ? { error: parsed.error } : {}; + } + if (!Object.values(parsed.value).every((entry) => typeof entry === "boolean")) { + return { error: `${label} must map tool names to boolean values` }; + } + return { value: parsed.value }; +} +function isJsonObject(value) { + return Boolean(value) && typeof value === "object" && !Array.isArray(value); +} + +// src/providers/opencode/ui/OpencodeSettingsTab.ts +var ALL_PROVIDERS_KEY = "all"; +var OPENCODE_METADATA_WARMUP_DB = ":memory:"; +var opencodeSettingsTabRenderer = { + render(container, context) { + const opencodeWorkspace = maybeGetOpencodeWorkspaceServices(); + const settingsBag = context.plugin.settings; + const opencodeSettings = getOpencodeProviderSettings(settingsBag); + const hostnameKey = getHostnameKey(); + new import_obsidian19.Setting(container).setName("Setup").setHeading(); + new import_obsidian19.Setting(container).setName("Enable OpenCode").setDesc("Launch `opencode acp` as a provider.").addToggle( + (toggle) => toggle.setValue(opencodeSettings.enabled).onChange(async (value) => { + updateOpencodeProviderSettings(settingsBag, { enabled: value }); + await context.plugin.saveSettings(); + context.refreshModelSelectors(); + }) + ); + const cliPathSetting = new import_obsidian19.Setting(container).setName("CLI path").setDesc("Optional absolute path to the OpenCode CLI for this computer. Leave empty to use `opencode` from PATH."); + const validationEl = container.createDiv({ + cls: "claudian-cli-path-validation claudian-setting-validation claudian-setting-validation-error claudian-hidden" + }); + const validatePath = (value) => { + const trimmed = value.trim(); + if (!trimmed) { + return null; + } + const expandedPath = expandHomePath(trimmed); + if (!fs20.existsSync(expandedPath)) { + return "Path does not exist"; + } + const stat = fs20.statSync(expandedPath); + if (!stat.isFile()) { + return "Path must point to a file"; + } + return null; + }; + const updateCliPathValidation = (value, inputEl) => { + const error48 = validatePath(value); + if (error48) { + validationEl.setText(error48); + validationEl.toggleClass("claudian-hidden", false); + if (inputEl) { + inputEl.toggleClass("claudian-input-error", true); + } + return false; + } + validationEl.toggleClass("claudian-hidden", true); + if (inputEl) { + inputEl.toggleClass("claudian-input-error", false); + } + return true; + }; + const cliPathsByHost = { ...opencodeSettings.cliPathsByHost }; + const currentValue = opencodeSettings.cliPathsByHost[hostnameKey] || ""; + let cliPathInputEl = null; + const persistCliPath = async (value) => { + var _a5; + const isValid2 = updateCliPathValidation(value, cliPathInputEl != null ? cliPathInputEl : void 0); + if (!isValid2) { + return false; + } + const trimmed = value.trim(); + if (trimmed) { + cliPathsByHost[hostnameKey] = trimmed; + } else { + delete cliPathsByHost[hostnameKey]; + } + updateOpencodeProviderSettings(settingsBag, { cliPathsByHost: { ...cliPathsByHost } }); + clearOpencodeDiscoveryState(settingsBag); + await context.plugin.saveSettings(); + (_a5 = opencodeWorkspace == null ? void 0 : opencodeWorkspace.cliResolver) == null ? void 0 : _a5.reset(); + await recycleOpencodeRuntime(); + return true; + }; + const recycleOpencodeRuntime = async () => { + var _a5, _b3; + for (const view of context.plugin.getAllViews()) { + const tabManager = view.getTabManager(); + if (tabManager == null ? void 0 : tabManager.broadcastToProviderTabs) { + await tabManager.broadcastToProviderTabs("opencode", (service) => Promise.resolve(service.cleanup())); + } else { + await (tabManager == null ? void 0 : tabManager.broadcastToAllTabs( + (service) => Promise.resolve(service.cleanup()) + )); + } + (_a5 = view.invalidateProviderCommandCaches) == null ? void 0 : _a5.call(view, ["opencode"]); + (_b3 = view.refreshModelSelector) == null ? void 0 : _b3.call(view); + } + }; + cliPathSetting.addText((text) => { + text.setPlaceholder(process.platform === "win32" ? "C:\\Users\\you\\AppData\\Roaming\\npm\\opencode.cmd" : "/usr/local/bin/opencode").setValue(currentValue).onChange(async (value) => { + await persistCliPath(value); + }); + text.inputEl.addClass("claudian-settings-cli-path-input"); + cliPathInputEl = text.inputEl; + updateCliPathValidation(currentValue, text.inputEl); + }); + new import_obsidian19.Setting(container).setName("Models").setHeading(); + new import_obsidian19.Setting(container).setName("Visible models").setDesc("Choose which OpenCode models appear in the chat selector. Filter by provider or type to search. The current session model stays pinned even if it is not selected here."); + const pickerEl = container.createDiv({ cls: "claudian-opencode-model-picker" }); + let searchQuery = ""; + let providerFilter = ALL_PROVIDERS_KEY; + const summaryEl = pickerEl.createDiv({ cls: "claudian-opencode-model-picker-summary" }); + const selectedEl = pickerEl.createDiv({ cls: "claudian-opencode-model-picker-selected" }); + const catalogEl = pickerEl.createEl("details", { cls: "claudian-opencode-model-picker-catalog" }); + catalogEl.open = getOpencodeProviderSettings(settingsBag).visibleModels.length === 0; + const catalogSummaryEl = catalogEl.createEl("summary", { + cls: "claudian-opencode-model-picker-catalog-summary" + }); + catalogSummaryEl.createSpan({ + cls: "claudian-opencode-model-picker-catalog-caret", + text: "\u25B8" + }); + catalogSummaryEl.createSpan({ + cls: "claudian-opencode-model-picker-catalog-title", + text: "Browse models" + }); + const catalogSummaryCountEl = catalogSummaryEl.createSpan({ + cls: "claudian-opencode-model-picker-catalog-count" + }); + const controlsEl = catalogEl.createDiv({ cls: "claudian-opencode-model-picker-controls" }); + const searchInput = controlsEl.createEl("input", { + cls: "claudian-opencode-model-picker-search", + type: "search" + }); + searchInput.placeholder = "Filter by model, provider, or ID\u2026"; + searchInput.addEventListener("input", () => { + searchQuery = searchInput.value.trim().toLowerCase(); + renderList(); + }); + const providerSelectEl = controlsEl.createEl("select", { + cls: "claudian-opencode-model-picker-provider" + }); + providerSelectEl.addEventListener("change", () => { + providerFilter = providerSelectEl.value; + renderList(); + }); + const listEl = catalogEl.createDiv({ cls: "claudian-opencode-model-picker-list" }); + let loadingModelCatalog = false; + let modelCatalogLoadFailed = false; + const getEnrichedModels = () => { + const current = getOpencodeProviderSettings(settingsBag); + return buildEnrichedModels(current.discoveredModels, current.visibleModels); + }; + const filterModels = (models) => { + return models.filter((model) => { + if (providerFilter !== ALL_PROVIDERS_KEY && model.providerKey !== providerFilter) { + return false; + } + if (!searchQuery) { + return true; + } + return model.rawId.toLowerCase().includes(searchQuery) || model.modelLabel.toLowerCase().includes(searchQuery) || model.providerLabel.toLowerCase().includes(searchQuery) || model.description.toLowerCase().includes(searchQuery); + }); + }; + const persistVisibleModels = async (visibleModels) => { + const currentVisibleModels = getOpencodeProviderSettings(settingsBag).visibleModels; + const normalized = normalizeOpencodeVisibleModels( + visibleModels, + getOpencodeProviderSettings(settingsBag).discoveredModels + ); + if (sameStringList(currentVisibleModels, normalized)) { + return; + } + updateOpencodeProviderSettings(settingsBag, { visibleModels: normalized }); + await context.plugin.saveSettings(); + renderAll(); + context.refreshModelSelectors(); + }; + const persistModelMetadata = async (rawId) => { + const runtime = new OpencodeChatRuntime(context.plugin); + try { + runtime.syncConversationState({ + providerState: { databasePath: OPENCODE_METADATA_WARMUP_DB }, + sessionId: null + }); + const loaded = await runtime.warmModelMetadata(encodeOpencodeModelId(rawId)); + if (loaded) { + context.refreshModelSelectors(); + } + } catch (e2) { + } finally { + runtime.cleanup(); + } + }; + const persistModelAliases = async (modelAliases) => { + updateOpencodeProviderSettings(settingsBag, { modelAliases }); + await context.plugin.saveSettings(); + renderSelected(); + context.refreshModelSelectors(); + }; + const renderSummary = () => { + summaryEl.empty(); + const current = getOpencodeProviderSettings(settingsBag); + const enriched = getEnrichedModels(); + const providerCount = new Set(enriched.map((model) => model.providerKey)).size; + const providerWord = providerCount === 1 ? "provider" : "providers"; + summaryEl.createSpan({ text: "Visible: " }); + summaryEl.createSpan({ + cls: "claudian-opencode-model-picker-summary-value", + text: String(current.visibleModels.length) + }); + summaryEl.createSpan({ + text: ` of ${current.discoveredModels.length} discovered \u2022 ${providerCount} ${providerWord}` + }); + let catalogSummary = "No models discovered yet"; + if (loadingModelCatalog) { + catalogSummary = "Loading models..."; + } else if (current.discoveredModels.length > 0) { + catalogSummary = `${current.discoveredModels.length} available`; + } + catalogSummaryCountEl.setText(catalogSummary); + }; + const renderSelected = () => { + var _a5; + selectedEl.empty(); + const current = getOpencodeProviderSettings(settingsBag); + if (current.visibleModels.length === 0) { + selectedEl.toggleClass("claudian-hidden", true); + return; + } + selectedEl.toggleClass("claudian-hidden", false); + const enrichedByRawId = new Map( + getEnrichedModels().map((model) => [model.rawId, model]) + ); + const headerEl = selectedEl.createDiv({ cls: "claudian-opencode-model-picker-selected-header" }); + headerEl.createEl("span", { + cls: "claudian-opencode-model-picker-selected-label", + text: `Selected (${current.visibleModels.length})` + }); + const clearAllBtn = headerEl.createEl("button", { + cls: "claudian-opencode-model-picker-selected-clear", + text: "Clear all" + }); + clearAllBtn.setAttribute("aria-label", "Clear all selected models"); + clearAllBtn.addEventListener("click", () => { + void persistVisibleModels([]); + }); + const rowsEl = selectedEl.createDiv({ cls: "claudian-opencode-model-picker-selected-rows" }); + for (const rawId of current.visibleModels) { + const enriched = enrichedByRawId.get(rawId); + const defaultLabel = enriched ? `${enriched.providerLabel}/${enriched.modelLabel}` : rawId; + const rowEl = rowsEl.createDiv({ cls: "claudian-opencode-model-picker-selected-row" }); + if (enriched && !enriched.isAvailable) { + rowEl.classList.add("claudian-opencode-model-picker-selected-row--unavailable"); + } + const infoEl = rowEl.createDiv({ cls: "claudian-opencode-model-picker-selected-info" }); + const titleEl = infoEl.createDiv({ cls: "claudian-opencode-model-picker-selected-title" }); + if (enriched) { + titleEl.createEl("span", { + cls: "claudian-opencode-model-picker-selected-badge", + text: enriched.providerLabel + }); + titleEl.createEl("span", { + cls: "claudian-opencode-model-picker-selected-name", + text: enriched.modelLabel + }); + } else { + titleEl.createEl("span", { + cls: "claudian-opencode-model-picker-selected-name", + text: rawId + }); + } + if (enriched && !enriched.isAvailable) { + infoEl.createEl("div", { + cls: "claudian-opencode-model-picker-selected-unavailable", + text: "Not currently reported by OpenCode" + }); + } + infoEl.createEl("div", { + cls: "claudian-opencode-model-picker-selected-id", + text: rawId + }); + const controlsEl2 = rowEl.createDiv({ cls: "claudian-opencode-model-picker-selected-controls" }); + const aliasInput = controlsEl2.createEl("input", { + cls: "claudian-opencode-model-picker-selected-alias", + type: "text" + }); + aliasInput.placeholder = defaultLabel; + aliasInput.value = (_a5 = current.modelAliases[rawId]) != null ? _a5 : ""; + aliasInput.setAttribute("aria-label", `Alias for ${defaultLabel}`); + aliasInput.title = "Custom label shown in the model selector. Leave empty to use the default."; + const commitAlias = () => { + var _a6; + const latest = getOpencodeProviderSettings(settingsBag); + const existing = (_a6 = latest.modelAliases[rawId]) != null ? _a6 : ""; + const next = aliasInput.value.trim(); + if (next === existing) { + aliasInput.value = existing; + return; + } + const nextAliases = { ...latest.modelAliases }; + if (next) { + nextAliases[rawId] = next; + } else { + delete nextAliases[rawId]; + } + void persistModelAliases(nextAliases); + }; + aliasInput.addEventListener("blur", commitAlias); + aliasInput.addEventListener("keydown", (event) => { + var _a6; + if (event.key === "Enter") { + event.preventDefault(); + aliasInput.blur(); + } else if (event.key === "Escape") { + event.preventDefault(); + aliasInput.value = (_a6 = getOpencodeProviderSettings(settingsBag).modelAliases[rawId]) != null ? _a6 : ""; + aliasInput.blur(); + } + }); + const removeBtn = controlsEl2.createEl("button", { + cls: "claudian-opencode-model-picker-selected-remove", + text: "\xD7" + }); + removeBtn.setAttribute("aria-label", `Remove ${defaultLabel}`); + removeBtn.addEventListener("click", () => { + void persistVisibleModels(current.visibleModels.filter((entry) => entry !== rawId)); + }); + } + }; + const renderProviderSelect = () => { + const enriched = getEnrichedModels(); + const providers = /* @__PURE__ */ new Map(); + for (const model of enriched) { + const existing = providers.get(model.providerKey); + if (existing) { + existing.count += 1; + } else { + providers.set(model.providerKey, { count: 1, label: model.providerLabel }); + } + } + providerSelectEl.empty(); + providerSelectEl.createEl("option", { + text: `All providers (${enriched.length})`, + value: ALL_PROVIDERS_KEY + }); + const sortedProviders = Array.from(providers.entries()).sort(([, left], [, right]) => left.label.localeCompare(right.label)); + for (const [key, { count, label }] of sortedProviders) { + providerSelectEl.createEl("option", { + text: `${label} (${count})`, + value: key + }); + } + if (providerFilter !== ALL_PROVIDERS_KEY && !providers.has(providerFilter)) { + providerFilter = ALL_PROVIDERS_KEY; + } + providerSelectEl.value = providerFilter; + }; + const renderList = () => { + listEl.empty(); + const current = getOpencodeProviderSettings(settingsBag); + const selectedIds = new Set(current.visibleModels); + const enriched = getEnrichedModels(); + const filtered = filterModels(enriched); + if (filtered.length === 0) { + const emptyEl = listEl.createDiv({ cls: "claudian-opencode-model-picker-empty" }); + let emptyText = "No models match your filter."; + if (loadingModelCatalog) { + emptyText = "Loading OpenCode model catalog..."; + } else if (modelCatalogLoadFailed) { + emptyText = "Could not load the OpenCode model catalog. Check the CLI path and login state, then expand this section again."; + } else if (enriched.length === 0) { + emptyText = "Start OpenCode once to load its model catalog. Claudian will then let you pick visible models."; + } + emptyEl.setText(emptyText); + return; + } + for (const model of filtered) { + const rowEl = listEl.createEl("label", { cls: "claudian-opencode-model-picker-row" }); + const isSelected = selectedIds.has(model.rawId); + if (isSelected) { + rowEl.classList.add("claudian-opencode-model-picker-row--selected"); + } + rowEl.title = model.rawId; + const checkboxEl = rowEl.createEl("input", { type: "checkbox" }); + checkboxEl.checked = isSelected; + checkboxEl.addEventListener("change", () => { + const currentVisibleModels = getOpencodeProviderSettings(settingsBag).visibleModels; + const next = checkboxEl.checked ? [...currentVisibleModels, model.rawId] : currentVisibleModels.filter((id) => id !== model.rawId); + void (async () => { + await persistVisibleModels(next); + if (checkboxEl.checked) { + await persistModelMetadata(model.rawId); + } + })(); + }); + const textEl = rowEl.createDiv({ cls: "claudian-opencode-model-picker-row-text" }); + const headerEl = textEl.createDiv({ cls: "claudian-opencode-model-picker-row-header" }); + headerEl.createEl("span", { + cls: "claudian-opencode-model-picker-row-name", + text: model.modelLabel + }); + const badgeEl = headerEl.createEl("span", { + cls: "claudian-opencode-model-picker-row-badge", + text: model.providerLabel + }); + if (!model.isAvailable) { + badgeEl.classList.add("claudian-opencode-model-picker-row-badge--unavailable"); + badgeEl.setText("Unavailable"); + badgeEl.title = "Configured model not currently reported by OpenCode"; + } + textEl.createDiv({ + cls: "claudian-opencode-model-picker-row-meta", + text: model.rawId + }); + if (model.description) { + textEl.createDiv({ + cls: "claudian-opencode-model-picker-row-desc", + text: model.description + }); + } + } + }; + const renderAll = () => { + renderSummary(); + renderSelected(); + renderProviderSelect(); + renderList(); + }; + renderAll(); + const loadModelCatalog = async () => { + if (loadingModelCatalog || getOpencodeProviderSettings(settingsBag).discoveredModels.length > 0) { + return; + } + loadingModelCatalog = true; + modelCatalogLoadFailed = false; + renderAll(); + const runtime = new OpencodeChatRuntime(context.plugin); + try { + runtime.syncConversationState({ + providerState: { databasePath: OPENCODE_METADATA_WARMUP_DB }, + sessionId: null + }); + const loaded = await runtime.ensureReady({ allowSessionCreation: true }); + modelCatalogLoadFailed = !loaded || getOpencodeProviderSettings(settingsBag).discoveredModels.length === 0; + if (!modelCatalogLoadFailed) { + context.refreshModelSelectors(); + } + } catch (e2) { + modelCatalogLoadFailed = true; + } finally { + loadingModelCatalog = false; + runtime.cleanup(); + renderAll(); + } + }; + catalogEl.addEventListener("toggle", () => { + if (catalogEl.open) { + void loadModelCatalog(); + } + }); + if (catalogEl.open) { + void loadModelCatalog(); + } + new import_obsidian19.Setting(container).setName("Commands and skills").setHeading(); + const commandsDesc = container.createDiv({ cls: "claudian-sp-settings-desc" }); + commandsDesc.createEl("p", { + cls: "setting-item-description", + text: "OpenCode can auto-detect vault-level Claude slash commands from .claude/commands/ and skills from .claude/skills/, .codex/skills/, and .agents/skills/. Manage those entries in the Claude or Codex settings tab. This setting only hides entries from the OpenCode dropdown." + }); + context.renderHiddenProviderCommandSetting(container, "opencode", { + name: "Hidden Commands and Skills", + desc: "Hide specific OpenCode commands and skills from the dropdown. Enter names without the leading slash, one per line.", + placeholder: "compact\nreview\nfix" + }); + if (opencodeWorkspace == null ? void 0 : opencodeWorkspace.agentStorage) { + new import_obsidian19.Setting(container).setName("Subagents").setHeading(); + const subagentsDesc = container.createDiv({ cls: "claudian-sp-settings-desc" }); + subagentsDesc.createEl("p", { + cls: "setting-item-description", + text: "Manage vault-level OpenCode subagents from .opencode/agent/ and legacy .opencode/agents/. New entries are saved as subagent-only files and appear in the @mention menu." + }); + const subagentsContainer = container.createDiv({ cls: "claudian-slash-commands-container" }); + new OpencodeAgentSettings( + subagentsContainer, + opencodeWorkspace.agentStorage, + context.plugin.app, + async () => { + var _a5; + await ((_a5 = opencodeWorkspace.refreshAgentMentions) == null ? void 0 : _a5.call(opencodeWorkspace)); + await recycleOpencodeRuntime(); + } + ); + } + renderEnvironmentSettingsSection({ + container, + plugin: context.plugin, + scope: "provider:opencode", + heading: "Environment", + name: "Environment Variables", + desc: "Extra environment variables passed to OpenCode. `OPENCODE_ENABLE_EXA=1` is enabled by default.", + placeholder: `${OPENCODE_DEFAULT_ENVIRONMENT_VARIABLES} +OPENCODE_DB=/path/to/opencode.db`, + renderCustomContextLimits: (target) => context.renderCustomContextLimits(target, "opencode") + }); + } +}; +function buildEnrichedModels(discoveredModels, visibleModels) { + var _a5; + const enriched = []; + const discoveredIds = /* @__PURE__ */ new Set(); + const baseModels = buildOpencodeBaseModels(discoveredModels); + for (const model of baseModels) { + const { modelLabel, providerLabel } = splitOpencodeModelLabel(model.label || model.rawId); + discoveredIds.add(model.rawId); + enriched.push({ + description: (_a5 = model.description) != null ? _a5 : "", + isAvailable: true, + modelLabel, + providerKey: providerLabel.toLowerCase(), + providerLabel, + rawId: model.rawId + }); + } + for (const rawId of visibleModels) { + if (discoveredIds.has(rawId)) { + continue; + } + const { modelLabel, providerLabel } = splitOpencodeModelLabel(rawId); + enriched.push({ + description: "", + isAvailable: false, + modelLabel, + providerKey: providerLabel.toLowerCase(), + providerLabel, + rawId + }); + } + return enriched.sort((left, right) => { + const providerCmp = left.providerLabel.localeCompare(right.providerLabel); + if (providerCmp !== 0) { + return providerCmp; + } + return left.modelLabel.localeCompare(right.modelLabel); + }); +} + +// src/providers/opencode/app/OpencodeRuntimeCommandLoader.ts +var OPENCODE_METADATA_WARMUP_DB2 = ":memory:"; +var OpencodeRuntimeCommandLoader = class { + isAvailable(settings11) { + return getOpencodeProviderSettings(settings11).enabled; + } + async loadCommands(context) { + var _a5, _b3, _c2; + const shouldWarmBlankSession = context.allowSessionCreation === true && !((_a5 = context.conversation) == null ? void 0 : _a5.sessionId); + const shouldWarmPreSessionConversation = !!context.conversation && !context.conversation.sessionId && context.conversation.messages.length > 0; + if (!context.runtime && !((_b3 = context.conversation) == null ? void 0 : _b3.sessionId) && !shouldWarmBlankSession && !shouldWarmPreSessionConversation) { + return []; + } + const canReuseRuntime = ((_c2 = context.runtime) == null ? void 0 : _c2.providerId) === "opencode" && !shouldWarmPreSessionConversation; + const runtime = canReuseRuntime ? context.runtime : new OpencodeChatRuntime(context.plugin); + try { + if (context.conversation) { + runtime.syncConversationState(context.conversation, context.externalContextPaths); + } else if (shouldWarmBlankSession) { + runtime.syncConversationState({ + providerState: { databasePath: OPENCODE_METADATA_WARMUP_DB2 }, + sessionId: null + }); + } + const ready = await runtime.ensureReady({ + allowSessionCreation: shouldWarmBlankSession || shouldWarmPreSessionConversation + }); + if (!ready) { + return []; + } + return await runtime.getSupportedCommands(); + } finally { + if (runtime !== context.runtime) { + runtime.cleanup(); + } + } + } +}; + +// src/providers/opencode/app/OpencodeWorkspaceServices.ts +var opencodeTabWarmupPolicy = { + resolveMode() { + return "commands"; + } +}; +async function createOpencodeWorkspaceServices(vaultAdapter) { + const agentStorage = new OpencodeAgentStorage(vaultAdapter); + const agentMentionProvider = new OpencodeAgentMentionProvider(agentStorage); + await agentMentionProvider.loadAgents(); + return { + agentStorage, + agentMentionProvider, + commandCatalog: new OpencodeCommandCatalog(), + cliResolver: new OpencodeCliResolver(), + runtimeCommandLoader: new OpencodeRuntimeCommandLoader(), + settingsTabRenderer: opencodeSettingsTabRenderer, + tabWarmupPolicy: opencodeTabWarmupPolicy, + refreshAgentMentions: async () => { + await agentMentionProvider.loadAgents(); + } + }; +} +var opencodeWorkspaceRegistration = { + initialize: async ({ vaultAdapter }) => createOpencodeWorkspaceServices(vaultAdapter) +}; +function maybeGetOpencodeWorkspaceServices() { + return ProviderWorkspaceRegistry.getServices("opencode"); +} + +// src/providers/opencode/runtime/OpencodeAuxQueryRunner.ts +var fs21 = __toESM(require("node:fs/promises")); +var path20 = __toESM(require("node:path")); +init_path(); + +// src/providers/opencode/ui/OpencodeChatUIConfig.ts +var OPENCODE_MODELS = [ + { value: OPENCODE_SYNTHETIC_MODEL_ID, label: "OpenCode", description: "ACP runtime" } +]; +var DEFAULT_CONTEXT_WINDOW2 = 2e5; +var OPENCODE_METADATA_WARMUP_DB3 = ":memory:"; +var OPENCODE_PERMISSION_MODE_TOGGLE = { + inactiveValue: "normal", + inactiveLabel: "Safe", + activeValue: "yolo", + activeLabel: "YOLO", + planValue: "plan", + planLabel: "Plan" +}; +var opencodeChatUIConfig = { + getModelOptions(settings11) { + var _a5, _b3; + const opencodeSettings = getOpencodeProviderSettings(settings11); + const applyAlias = (rawId, option) => { + const alias = opencodeSettings.modelAliases[rawId]; + return alias ? { ...option, label: alias } : option; + }; + const discoveredModels = new Map(buildOpencodeBaseModels(opencodeSettings.discoveredModels).map((model) => { + var _a6; + return [ + encodeOpencodeModelId(model.rawId), + applyAlias(model.rawId, { + description: (_a6 = model.description) != null ? _a6 : "ACP runtime", + label: model.label, + value: encodeOpencodeModelId(model.rawId) + }) + ]; + })); + const savedProviderModel = settings11.savedProviderModel && typeof settings11.savedProviderModel === "object" && !Array.isArray(settings11.savedProviderModel) ? settings11.savedProviderModel : null; + const seenValues = /* @__PURE__ */ new Set(); + const options = []; + for (const rawModelId of opencodeSettings.visibleModels) { + const encodedModelId = encodeOpencodeModelId(rawModelId); + pushOption( + options, + seenValues, + encodedModelId, + (_a5 = discoveredModels.get(encodedModelId)) != null ? _a5 : applyAlias(rawModelId, { + description: "Configured model", + label: rawModelId, + value: encodedModelId + }) + ); + } + const selectedModelValues = [ + typeof settings11.model === "string" ? settings11.model : "", + typeof (savedProviderModel == null ? void 0 : savedProviderModel.opencode) === "string" ? savedProviderModel.opencode : "" + ]; + for (const model of selectedModelValues) { + const rawModelId = decodeOpencodeModelId(model); + if (!model || !isOpencodeModelSelectionId(model) || model === OPENCODE_SYNTHETIC_MODEL_ID || !rawModelId) { + continue; + } + const baseRawId = resolveOpencodeBaseModelRawId(rawModelId, opencodeSettings.discoveredModels); + const baseModelId = encodeOpencodeModelId(baseRawId); + pushOption( + options, + seenValues, + baseModelId, + (_b3 = discoveredModels.get(baseModelId)) != null ? _b3 : applyAlias(baseRawId, { + description: "Selected in an existing session", + label: baseRawId, + value: baseModelId + }) + ); + } + return options.length > 0 ? options : [...OPENCODE_MODELS]; + }, + ownsModel(model) { + return isOpencodeModelSelectionId(model); + }, + isAdaptiveReasoningModel(model, settings11) { + return getOpencodeThinkingOptions(model, settings11).length > 0; + }, + getReasoningOptions(model, settings11) { + return getOpencodeThinkingOptions(model, settings11).map((variant) => ({ + description: variant.description, + label: variant.label, + value: variant.value + })); + }, + getDefaultReasoningValue(model, settings11) { + const rawModelId = decodeOpencodeModelId(model); + if (!rawModelId) { + return OPENCODE_DEFAULT_THINKING_LEVEL; + } + const opencodeSettings = getOpencodeProviderSettings(settings11); + const baseRawId = resolveOpencodeBaseModelRawId(rawModelId, opencodeSettings.discoveredModels); + return getDefaultThinkingLevelForModel(baseRawId, settings11); + }, + getContextWindowSize(model, customLimits) { + var _a5; + return (_a5 = customLimits == null ? void 0 : customLimits[model]) != null ? _a5 : DEFAULT_CONTEXT_WINDOW2; + }, + isDefaultModel(model) { + return isOpencodeModelSelectionId(model); + }, + applyModelDefaults(model, settings11) { + if (!settings11 || typeof settings11 !== "object" || Array.isArray(settings11)) { + return; + } + const settingsBag = settings11; + const rawModelId = decodeOpencodeModelId(model); + if (!rawModelId) { + settingsBag.effortLevel = OPENCODE_DEFAULT_THINKING_LEVEL; + return; + } + const opencodeSettings = getOpencodeProviderSettings(settingsBag); + const baseRawId = resolveOpencodeBaseModelRawId(rawModelId, opencodeSettings.discoveredModels); + settingsBag.model = encodeOpencodeModelId(baseRawId); + settingsBag.effortLevel = getDefaultThinkingLevelForModel(baseRawId, settingsBag); + }, + async prepareModelMetadata(model, _settings, context) { + const rawModelId = decodeOpencodeModelId(model); + if (!rawModelId) { + return; + } + const opencodeSettings = getOpencodeProviderSettings(context.plugin.settings); + const baseRawId = resolveOpencodeBaseModelRawId(rawModelId, opencodeSettings.discoveredModels); + if (baseRawId && opencodeSettings.thinkingOptionsByModel[baseRawId]) { + return; + } + const runtime = new OpencodeChatRuntime(context.plugin); + try { + runtime.syncConversationState({ + providerState: { databasePath: OPENCODE_METADATA_WARMUP_DB3 }, + sessionId: null + }); + await runtime.warmModelMetadata(model); + } catch (e2) { + } finally { + runtime.cleanup(); + } + }, + applyReasoningSelection(model, value, settings11) { + var _a5; + if (!settings11 || typeof settings11 !== "object" || Array.isArray(settings11)) { + return; + } + const settingsBag = settings11; + const rawModelId = decodeOpencodeModelId(model); + if (!rawModelId) { + return; + } + const opencodeSettings = getOpencodeProviderSettings(settingsBag); + const baseRawId = resolveOpencodeBaseModelRawId(rawModelId, opencodeSettings.discoveredModels); + const supportedValues = new Set( + ((_a5 = opencodeSettings.thinkingOptionsByModel[baseRawId]) != null ? _a5 : []).map((variant) => variant.value) + ); + const nextPreferredThinkingByModel = { + ...opencodeSettings.preferredThinkingByModel + }; + if (!value || value === OPENCODE_DEFAULT_THINKING_LEVEL || !supportedValues.has(value)) { + delete nextPreferredThinkingByModel[baseRawId]; + } else { + nextPreferredThinkingByModel[baseRawId] = value; + } + updateOpencodeProviderSettings(settingsBag, { + preferredThinkingByModel: nextPreferredThinkingByModel + }); + }, + normalizeModelVariant(model, settings11) { + const rawModelId = decodeOpencodeModelId(model); + if (!rawModelId) { + return model; + } + const opencodeSettings = getOpencodeProviderSettings(settings11); + const baseRawId = resolveOpencodeBaseModelRawId(rawModelId, opencodeSettings.discoveredModels); + return encodeOpencodeModelId(baseRawId); + }, + getCustomModelIds() { + return /* @__PURE__ */ new Set(); + }, + getModeSelector() { + return null; + }, + getPermissionModeToggle() { + return OPENCODE_PERMISSION_MODE_TOGGLE; + }, + resolvePermissionMode(settings11) { + const selectedMode = getOpencodeProviderSettings(settings11).selectedMode; + return resolvePermissionModeForManagedOpencodeMode(selectedMode); + }, + applyPermissionMode(value, settings11) { + if (!settings11 || typeof settings11 !== "object" || Array.isArray(settings11)) { + return; + } + const settingsBag = settings11; + settingsBag.permissionMode = value; + updateOpencodeProviderSettings(settingsBag, { + selectedMode: resolveOpencodeModeForPermissionMode( + value, + getOpencodeProviderSettings(settingsBag).availableModes + ) + }); + }, + getProviderIcon() { + return OPENCODE_PROVIDER_ICON; + } +}; +function getDefaultThinkingLevelForModel(baseRawId, settings11) { + var _a5, _b3, _c2, _d; + const opencodeSettings = getOpencodeProviderSettings(settings11); + const preferred = opencodeSettings.preferredThinkingByModel[baseRawId]; + const supportedValues = new Set( + ((_a5 = opencodeSettings.thinkingOptionsByModel[baseRawId]) != null ? _a5 : []).map((variant) => variant.value) + ); + if (preferred && supportedValues.has(preferred)) { + return preferred; + } + return (_d = (_c2 = (_b3 = opencodeSettings.thinkingOptionsByModel[baseRawId]) == null ? void 0 : _b3[0]) == null ? void 0 : _c2.value) != null ? _d : OPENCODE_DEFAULT_THINKING_LEVEL; +} +function getOpencodeThinkingOptions(model, settings11) { + var _a5; + const rawModelId = decodeOpencodeModelId(model); + if (!rawModelId) { + return []; + } + const opencodeSettings = getOpencodeProviderSettings(settings11); + const baseRawId = resolveOpencodeBaseModelRawId(rawModelId, opencodeSettings.discoveredModels); + return (_a5 = opencodeSettings.thinkingOptionsByModel[baseRawId]) != null ? _a5 : []; +} +function pushOption(target, seenValues, value, option) { + if (seenValues.has(value)) { + return; + } + seenValues.add(value); + target.push(option); +} + +// src/providers/opencode/runtime/OpencodeAuxQueryRunner.ts +var OPENCODE_AUX_AGENT_IDS = { + passive: "claudian-aux-passive", + readonly: "claudian-aux-readonly" +}; +var OPENCODE_AUX_READ_PERMISSION = Object.freeze({ + "*": "allow", + "*.env": "deny", + "*.env.*": "deny", + "*.env.example": "allow" +}); +var OpencodeAuxQueryRunner = class { + constructor(plugin, options) { + this.plugin = plugin; + this.options = options; + this.availableModelIds = /* @__PURE__ */ new Set(); + this.connection = null; + this.currentModelId = null; + this.currentLaunchKey = null; + this.process = null; + this.sessionCwds = /* @__PURE__ */ new Map(); + this.sessionId = null; + this.sessionUpdateNormalizer = new AcpSessionUpdateNormalizer(); + this.transport = null; + } + async query(config2, prompt) { + var _a5, _b3, _c2, _d, _e2, _f2; + const cwd = (_a5 = getVaultPath(this.plugin.app)) != null ? _a5 : process.cwd(); + await this.ensureReady(cwd, config2.systemPrompt); + if (!this.connection) { + throw new Error("OpenCode runtime is not ready."); + } + if (!this.sessionId) { + const sessionId2 = await this.createSession(cwd); + if (!sessionId2) { + throw new Error("Failed to create an OpenCode session."); + } + } + const sessionId = this.sessionId; + const selectedModel = this.resolveSelectedRawModel(config2.model); + const nextModel = this.resolveApplicableModel(selectedModel); + if (nextModel) { + const response = await this.connection.setConfigOption({ + configId: "model", + sessionId, + type: "select", + value: nextModel + }); + this.syncSessionModelState({ + configOptions: response.configOptions + }); + } + this.sessionUpdateNormalizer.reset(); + let accumulatedText = ""; + const removeListener = this.connection.onSessionNotification((notification) => { + var _a6; + if (notification.sessionId !== sessionId) { + return; + } + const normalized = this.sessionUpdateNormalizer.normalize(notification.update); + if (normalized.type !== "message_chunk" || normalized.role !== "assistant") { + return; + } + for (const chunk of normalized.streamChunks) { + if (chunk.type !== "text") { + continue; + } + accumulatedText += chunk.content; + (_a6 = config2.onTextChunk) == null ? void 0 : _a6.call(config2, accumulatedText); + } + }); + const abortHandler = () => { + if (this.connection && this.sessionId) { + this.connection.cancel({ sessionId: this.sessionId }); + } + }; + (_b3 = config2.abortController) == null ? void 0 : _b3.signal.addEventListener("abort", abortHandler, { once: true }); + try { + if ((_c2 = config2.abortController) == null ? void 0 : _c2.signal.aborted) { + throw new Error("Cancelled"); + } + await this.connection.prompt({ + prompt: [{ type: "text", text: prompt }], + sessionId + }); + if ((_d = config2.abortController) == null ? void 0 : _d.signal.aborted) { + throw new Error("Cancelled"); + } + return accumulatedText; + } catch (error48) { + const message = error48 instanceof Error ? error48.message : "OpenCode request failed"; + const stderr = (_e2 = this.process) == null ? void 0 : _e2.getStderrSnapshot(); + throw new Error( + stderr ? `${message} + +${stderr}` : message, + error48 instanceof Error ? { cause: error48 } : void 0 + ); + } finally { + (_f2 = config2.abortController) == null ? void 0 : _f2.signal.removeEventListener("abort", abortHandler); + removeListener(); + } + } + reset() { + var _a5, _b3; + this.availableModelIds.clear(); + this.sessionId = null; + this.sessionCwds.clear(); + this.currentModelId = null; + this.currentLaunchKey = null; + (_a5 = this.connection) == null ? void 0 : _a5.dispose(); + this.connection = null; + (_b3 = this.transport) == null ? void 0 : _b3.dispose(); + this.transport = null; + if (this.process) { + void this.process.shutdown().catch(() => { + }); + } + this.process = null; + this.sessionUpdateNormalizer.reset(); + } + async ensureReady(cwd, systemPrompt) { + var _a5; + const resolvedCliPath = (_a5 = this.plugin.getResolvedProviderCliPath("opencode")) != null ? _a5 : "opencode"; + const settings11 = this.plugin.settings; + const runtimeEnv = buildOpencodeRuntimeEnv(settings11, resolvedCliPath); + const auxAgentId = OPENCODE_AUX_AGENT_IDS[this.options.agentProfile]; + const artifacts = await prepareOpencodeLaunchArtifacts({ + artifactsSubdir: `opencode/auxiliary/${this.options.artifactPurpose}`, + defaultAgentId: auxAgentId, + managedAgents: [buildOpencodeAuxAgentConfig(this.options.agentProfile)], + runtimeEnv, + systemPromptKey: systemPrompt, + systemPromptText: systemPrompt, + userName: typeof settings11.userName === "string" ? settings11.userName : void 0, + workspaceRoot: cwd + }); + const nextLaunchKey = JSON.stringify({ + artifactKey: artifacts.launchKey, + command: resolvedCliPath, + configPath: artifacts.configPath, + envText: getRuntimeEnvironmentText(settings11, "opencode") + }); + const shouldRestart = !this.process || !this.transport || !this.connection || !this.process.isAlive() || this.transport.isClosed || this.currentLaunchKey !== nextLaunchKey; + if (!shouldRestart) { + return; + } + this.reset(); + await this.startProcess({ + command: resolvedCliPath, + configPath: artifacts.configPath, + configContent: artifacts.configContent, + cwd, + runtimeEnv + }); + this.currentLaunchKey = nextLaunchKey; + } + async createSession(cwd) { + var _a5, _b3; + if (!this.connection) { + return null; + } + try { + const response = await this.connection.newSession({ + cwd, + mcpServers: [] + }); + this.syncSessionModelState({ + configOptions: (_a5 = response.configOptions) != null ? _a5 : null, + models: (_b3 = response.models) != null ? _b3 : null + }); + await this.connection.setConfigOption({ + configId: "mode", + sessionId: response.sessionId, + type: "select", + value: OPENCODE_AUX_AGENT_IDS[this.options.agentProfile] + }); + this.sessionId = response.sessionId; + this.sessionCwds.set(response.sessionId, cwd); + return response.sessionId; + } catch (e2) { + return null; + } + } + async startProcess(params) { + var _a5, _b3; + const processEnv = { + ...process.env, + ...params.runtimeEnv, + OPENCODE_CONFIG: params.configPath, + OPENCODE_CONFIG_CONTENT: params.configContent, + PATH: params.runtimeEnv.PATH + }; + this.process = new AcpSubprocess({ + args: ["acp", `--cwd=${params.cwd}`], + command: params.command, + cwd: params.cwd, + env: processEnv + }); + this.process.start(); + this.transport = new AcpJsonRpcTransport({ + input: this.process.stdout, + onClose: (listener) => this.process.onClose(listener), + output: this.process.stdin + }); + this.connection = new AcpClientConnection({ + clientInfo: { + name: "claudian-aux", + version: (_b3 = (_a5 = this.plugin.manifest) == null ? void 0 : _a5.version) != null ? _b3 : "0.0.0" + }, + delegate: { + fileSystem: this.options.allowReadTextFile ? { + readTextFile: (request) => this.readTextFile(request) + } : void 0, + requestPermission: (request) => this.handlePermissionRequest(request) + }, + transport: this.transport + }); + this.transport.start(); + await this.connection.initialize(); + } + async readTextFile(request) { + var _a5; + const resolvedPath = this.resolveSessionPath(request.sessionId, request.path); + const content = await fs21.readFile(resolvedPath, "utf-8"); + if (request.line === void 0 && request.limit === void 0) { + return { content }; + } + const lines = content.split(/\r?\n/); + const startIndex = Math.max(0, ((_a5 = request.line) != null ? _a5 : 1) - 1); + const endIndex = request.limit ? startIndex + Math.max(0, request.limit) : lines.length; + return { + content: lines.slice(startIndex, endIndex).join("\n") + }; + } + async handlePermissionRequest(request) { + return selectPermissionOption2(request.options, ["reject_once", "reject_always"]); + } + resolveSelectedRawModel(explicitModel) { + var _a5, _b3; + const projectedSettings = ProviderSettingsCoordinator.getProviderSettingsSnapshot( + this.plugin.settings, + "opencode" + ); + if (explicitModel) { + const trimmed = explicitModel.trim(); + if (!trimmed) { + return void 0; + } + return opencodeChatUIConfig.ownsModel(trimmed, projectedSettings) ? (_a5 = decodeOpencodeModelId(trimmed)) != null ? _a5 : void 0 : trimmed; + } + const selectedModel = typeof projectedSettings.model === "string" ? projectedSettings.model : ""; + return opencodeChatUIConfig.ownsModel(selectedModel, projectedSettings) ? (_b3 = decodeOpencodeModelId(selectedModel)) != null ? _b3 : void 0 : void 0; + } + resolveApplicableModel(selectedModel) { + if (!selectedModel) { + return null; + } + if (selectedModel === this.currentModelId) { + return null; + } + if (this.availableModelIds.size === 0) { + return selectedModel; + } + return this.availableModelIds.has(selectedModel) ? selectedModel : null; + } + syncSessionModelState(params) { + const state = extractAcpSessionModelState(params); + this.currentModelId = state.currentModelId; + this.availableModelIds = new Set(state.availableModels.map((model) => model.id)); + } + resolveSessionPath(sessionId, rawPath) { + var _a5, _b3; + const cwd = (_b3 = (_a5 = this.sessionCwds.get(sessionId)) != null ? _a5 : getVaultPath(this.plugin.app)) != null ? _b3 : process.cwd(); + const resolvedPath = path20.isAbsolute(rawPath) ? path20.resolve(rawPath) : path20.resolve(cwd, rawPath); + const relative4 = path20.relative(cwd, resolvedPath); + if (relative4 === "" || !relative4.startsWith("..") && !path20.isAbsolute(relative4)) { + return resolvedPath; + } + throw new Error("OpenCode aux read access is limited to the current workspace."); + } +}; +function buildOpencodeAuxAgentConfig(profile) { + const id = OPENCODE_AUX_AGENT_IDS[profile]; + if (profile === "readonly") { + return { + definition: { + description: "Internal Claudian read-only agent for OpenCode auxiliary tasks.", + mode: "primary", + permission: { + "*": "deny", + codesearch: "allow", + external_directory: "deny", + glob: "allow", + grep: "allow", + lsp: "allow", + read: OPENCODE_AUX_READ_PERMISSION, + webfetch: "allow", + websearch: "allow" + } + }, + id + }; + } + return { + definition: { + description: "Internal Claudian no-tool agent for OpenCode auxiliary tasks.", + mode: "primary", + permission: { + "*": "deny", + external_directory: "deny" + } + }, + id + }; +} +function selectPermissionOption2(options, preferredKinds) { + for (const kind of preferredKinds) { + const option = options.find((entry) => entry.kind === kind); + if (option) { + return { + outcome: { + optionId: option.optionId, + outcome: "selected" + } + }; + } + } + return { outcome: { outcome: "cancelled" } }; +} + +// src/providers/opencode/auxiliary/OpencodeInlineEditService.ts +var OpencodeInlineEditService = class extends QueryBackedInlineEditService { + constructor(plugin) { + super(new OpencodeAuxQueryRunner(plugin, { + agentProfile: "readonly", + artifactPurpose: "inline", + allowReadTextFile: true + })); + } +}; + +// src/providers/opencode/auxiliary/OpencodeInstructionRefineService.ts +var OpencodeInstructionRefineService = class extends QueryBackedInstructionRefineService { + constructor(plugin) { + super(new OpencodeAuxQueryRunner(plugin, { + agentProfile: "passive", + artifactPurpose: "instructions" + })); + } +}; + +// src/providers/opencode/auxiliary/OpencodeTaskResultInterpreter.ts +var OpencodeTaskResultInterpreter = class { + hasAsyncLaunchMarker(_toolUseResult) { + return false; + } + extractAgentId(_toolUseResult) { + return null; + } + extractStructuredResult(_toolUseResult) { + return null; + } + resolveTerminalStatus(_toolUseResult, fallbackStatus) { + return fallbackStatus; + } + extractTagValue(_payload, _tagName) { + return null; + } +}; + +// src/providers/opencode/auxiliary/OpencodeTitleGenerationService.ts +var OpencodeTitleGenerationService = class extends QueryBackedTitleGenerationService { + constructor(plugin) { + super({ + createRunner: () => new OpencodeAuxQueryRunner(plugin, { + agentProfile: "passive", + artifactPurpose: "title-gen" + }), + resolveModel: () => { + var _a5; + const settings11 = plugin.settings; + const titleModel = typeof settings11.titleGenerationModel === "string" ? settings11.titleGenerationModel : ""; + if (!opencodeChatUIConfig.ownsModel(titleModel, settings11)) { + return void 0; + } + return (_a5 = decodeOpencodeModelId(titleModel)) != null ? _a5 : void 0; + } + }); + } +}; + +// src/providers/opencode/env/OpencodeSettingsReconciler.ts +init_env(); +var OPENCODE_ENV_HASH_KEYS = [ + "OPENCODE_CONFIG", + "OPENCODE_DB", + "OPENCODE_DISABLE_PROJECT_CONFIG", + "XDG_DATA_HOME" +]; +function computeOpencodeEnvHash(envText) { + const envVars = parseEnvironmentVariables(envText || ""); + return OPENCODE_ENV_HASH_KEYS.filter((key) => envVars[key]).map((key) => `${key}=${envVars[key]}`).sort().join("|"); +} +var opencodeSettingsReconciler = { + handleEnvironmentChange(settings11) { + return clearOpencodeDiscoveryState(settings11); + }, + reconcileModelWithEnvironment(settings11, conversations) { + const envText = getRuntimeEnvironmentText(settings11, "opencode"); + const currentHash = computeOpencodeEnvHash(envText); + const savedHash = getOpencodeProviderSettings(settings11).environmentHash; + if (currentHash === savedHash) { + return { changed: false, invalidatedConversations: [] }; + } + const invalidatedConversations = []; + for (const conversation of conversations) { + if (conversation.providerId !== "opencode") { + continue; + } + const state = getOpencodeState(conversation.providerState); + if (!conversation.sessionId && !state.databasePath) { + continue; + } + conversation.sessionId = null; + conversation.providerState = void 0; + invalidatedConversations.push(conversation); + } + updateOpencodeProviderSettings(settings11, { environmentHash: currentHash }); + return { changed: true, invalidatedConversations }; + }, + normalizeModelVariantSettings(settings11) { + const hadLegacyDiscoveryFields = hasLegacyOpencodeDiscoveryFields(settings11); + if (hadLegacyDiscoveryFields) { + updateOpencodeProviderSettings(settings11, {}); + } + const opencodeSettings = getOpencodeProviderSettings(settings11); + let changed = hadLegacyDiscoveryFields; + const normalizeSelection = (value) => { + if (typeof value !== "string" || !isOpencodeModelSelectionId(value)) { + return { baseModelId: null, variant: null }; + } + const rawModelId = decodeOpencodeModelId(value); + if (!rawModelId) { + return { baseModelId: value, variant: null }; + } + const baseRawId = resolveOpencodeBaseModelRawId(rawModelId, opencodeSettings.discoveredModels); + return { + baseModelId: encodeOpencodeModelId(baseRawId), + variant: extractOpencodeModelVariantValue(rawModelId, opencodeSettings.discoveredModels) + }; + }; + const modelSelection = normalizeSelection(settings11.model); + if (typeof settings11.model === "string" && modelSelection.baseModelId && settings11.model !== modelSelection.baseModelId) { + settings11.model = modelSelection.baseModelId; + changed = true; + } + if (modelSelection.variant && (typeof settings11.effortLevel !== "string" || settings11.effortLevel.trim().length === 0)) { + settings11.effortLevel = modelSelection.variant; + changed = true; + } + const titleModelSelection = normalizeSelection(settings11.titleGenerationModel); + if (typeof settings11.titleGenerationModel === "string" && titleModelSelection.baseModelId && settings11.titleGenerationModel !== titleModelSelection.baseModelId) { + settings11.titleGenerationModel = titleModelSelection.baseModelId; + changed = true; + } + const savedProviderModelRaw = settings11.savedProviderModel; + if (savedProviderModelRaw && typeof savedProviderModelRaw === "object" && !Array.isArray(savedProviderModelRaw)) { + const savedProviderModel = savedProviderModelRaw; + const savedSelection = normalizeSelection(savedProviderModel.opencode); + if (typeof savedProviderModel.opencode === "string" && savedSelection.baseModelId && savedProviderModel.opencode !== savedSelection.baseModelId) { + savedProviderModel.opencode = savedSelection.baseModelId; + changed = true; + } + if (savedSelection.variant) { + const savedEffort = ensureProviderProjectionMap(settings11, "savedProviderEffort"); + if (typeof savedEffort.opencode !== "string") { + savedEffort.opencode = savedSelection.variant; + changed = true; + } + } + } + const normalizedVisibleModels = normalizeOpencodeVisibleModels( + opencodeSettings.visibleModels, + opencodeSettings.discoveredModels + ); + const normalizedPreferredThinking = normalizeOpencodePreferredThinkingByModel( + opencodeSettings.preferredThinkingByModel, + opencodeSettings.discoveredModels + ); + const shouldUpdateProviderSettings = !sameStringList(normalizedVisibleModels, opencodeSettings.visibleModels) || !sameStringMap(normalizedPreferredThinking, opencodeSettings.preferredThinkingByModel); + if (shouldUpdateProviderSettings) { + updateOpencodeProviderSettings(settings11, { + preferredThinkingByModel: normalizedPreferredThinking, + visibleModels: normalizedVisibleModels + }); + changed = true; + } + if (typeof settings11.effortLevel === "string" && !settings11.effortLevel.trim()) { + settings11.effortLevel = OPENCODE_DEFAULT_THINKING_LEVEL; + changed = true; + } + return changed; + } +}; + +// src/providers/opencode/history/OpencodeHistoryStore.ts +var import_node_child_process2 = require("node:child_process"); +var fs22 = __toESM(require("node:fs")); +var OPENCODE_MESSAGE_ROW_SQL = buildOpencodeMessageRowsSql("?"); +var OPENCODE_PART_ROW_SQL = buildOpencodePartRowsSql("?"); +var OPENCODE_HYDRATION_DIAGNOSTIC_ID_PREFIX = "opencode-hydration-error"; +async function loadOpencodeSessionMessages(sessionId, providerState) { + const databasePath = resolveExistingOpencodeDatabasePath(providerState == null ? void 0 : providerState.databasePath); + if (!databasePath || databasePath === ":memory:" || !fs22.existsSync(databasePath)) { + return []; + } + const rows = await loadOpencodeSessionRows(databasePath, sessionId); + if (!rows) { + return [createOpencodeHydrationDiagnosticMessage({ + databasePath, + reason: "Could not read OpenCode session rows from SQLite.", + sessionId + })]; + } + return mapOpencodeMessages( + hydrateStoredMessages(rows.messageRows, rows.partRows), + { databasePath, sessionId } + ); +} +function mapOpencodeMessages(messages, context = {}) { + var _a5; + const mappedMessages = []; + for (const message of messages) { + try { + const mappedMessage = mapStoredMessage(message, context); + if (mappedMessage) { + mappedMessages.push(mappedMessage); + } + } catch (error48) { + mappedMessages.push(createOpencodeHydrationDiagnosticMessage({ + ...context, + messageId: (_a5 = getString(message.info.id)) != null ? _a5 : void 0, + reason: formatUnknownError(error48) + })); + } + } + return mergeAdjacentAssistantMessages(mappedMessages); +} +function hydrateStoredMessages(messageRows, partRows) { + var _a5; + const partsByMessage = /* @__PURE__ */ new Map(); + for (const row of partRows) { + const messageId = getString(row.message_id); + const id = getString(row.id); + const data = parseJsonObject2(row.data); + if (!messageId || !id || !data) { + continue; + } + const parts = (_a5 = partsByMessage.get(messageId)) != null ? _a5 : []; + parts.push({ ...data, id }); + partsByMessage.set(messageId, parts); + } + return messageRows.flatMap((row) => { + var _a6; + const id = getString(row.id); + if (!id) { + return []; + } + const data = parseJsonObject2(row.data); + return [{ + info: data ? { ...data, id, time_created: row.time_created } : { + data_time_completed: row.data_time_completed, + data_time_created: row.data_time_created, + data_valid: row.data_valid, + id, + role: row.role, + time_created: row.time_created + }, + parts: (_a6 = partsByMessage.get(id)) != null ? _a6 : [] + }]; + }); +} +function mapStoredMessage(message, context) { + var _a5; + const role = getString(message.info.role); + const id = getString(message.info.id); + if (!id) { + return null; + } + if (isInvalidStoredMessageData(message.info)) { + return createOpencodeHydrationDiagnosticMessage({ + ...context, + messageId: id, + reason: "OpenCode message metadata is not valid JSON." + }); + } + if (role !== "user" && role !== "assistant") { + return null; + } + const createdAt = (_a5 = getMessageCreatedAt(message.info)) != null ? _a5 : Date.now(); + if (role === "user") { + const promptText = extractUserQuery(getJoinedTextParts(message.parts)); + return { + assistantMessageId: void 0, + content: promptText, + id, + role: "user", + timestamp: createdAt, + userMessageId: id + }; + } + const contentBlocks = buildAssistantContentBlocks(message.parts); + const toolCalls = buildAssistantToolCalls(message.parts); + const completedAt = getMessageCompletedAt(message.info); + const durationSeconds = completedAt && completedAt >= createdAt ? Math.max(0, (completedAt - createdAt) / 1e3) : void 0; + return { + assistantMessageId: id, + content: contentBlocks.filter((block) => block.type === "text").map((block) => block.content).join(""), + contentBlocks: contentBlocks.length > 0 ? contentBlocks : void 0, + durationSeconds, + id, + role: "assistant", + timestamp: createdAt, + toolCalls: toolCalls.length > 0 ? toolCalls : void 0 + }; +} +function mergeAdjacentAssistantMessages(messages) { + var _a5, _b3; + const merged = []; + for (const message of messages) { + const previous = merged[merged.length - 1]; + if (message.role === "assistant" && (previous == null ? void 0 : previous.role) === "assistant" && !message.isInterrupt && !previous.isInterrupt && !isOpencodeHydrationDiagnosticMessage(message) && !isOpencodeHydrationDiagnosticMessage(previous)) { + previous.content += message.content; + previous.assistantMessageId = (_a5 = message.assistantMessageId) != null ? _a5 : previous.assistantMessageId; + previous.durationFlavorWord = (_b3 = message.durationFlavorWord) != null ? _b3 : previous.durationFlavorWord; + previous.durationSeconds = mergeAssistantDurationSeconds(previous, message); + previous.toolCalls = mergeOptionalArrays(previous.toolCalls, message.toolCalls); + previous.contentBlocks = mergeOptionalArrays(previous.contentBlocks, message.contentBlocks); + continue; + } + merged.push(message); + } + return merged; +} +function mergeOptionalArrays(left, right) { + if (!(left == null ? void 0 : left.length) && !(right == null ? void 0 : right.length)) { + return void 0; + } + return [ + ...left != null ? left : [], + ...right != null ? right : [] + ]; +} +function mergeAssistantDurationSeconds(first, next) { + const firstEnd = getMessageCompletionTime(first); + const nextEnd = getMessageCompletionTime(next); + if (firstEnd === null && nextEnd === null) { + return void 0; + } + const end = Math.max(firstEnd != null ? firstEnd : first.timestamp, nextEnd != null ? nextEnd : next.timestamp); + return Math.max(0, (end - first.timestamp) / 1e3); +} +function getMessageCompletionTime(message) { + if (typeof message.durationSeconds !== "number") { + return null; + } + return message.timestamp + message.durationSeconds * 1e3; +} +function getMessageCreatedAt(info) { + var _a5, _b3; + return (_b3 = (_a5 = getNestedNumber(info, ["time", "created"])) != null ? _a5 : getNumber(info.data_time_created)) != null ? _b3 : getNumber(info.time_created); +} +function getMessageCompletedAt(info) { + var _a5; + return (_a5 = getNestedNumber(info, ["time", "completed"])) != null ? _a5 : getNumber(info.data_time_completed); +} +function isInvalidStoredMessageData(info) { + return getNumber(info.data_valid) === 0; +} +function createOpencodeHydrationDiagnosticMessage(params) { + const detailLines = [ + "Failed to hydrate OpenCode session.", + "provider: OpenCode", + ...params.sessionId ? [`sessionId: ${params.sessionId}`] : [], + ...params.databasePath ? [`databasePath: ${params.databasePath}`] : [], + ...params.messageId ? [`messageId: ${params.messageId}`] : [], + `reason: ${params.reason}` + ]; + const content = detailLines.join("\n"); + return { + assistantMessageId: void 0, + content, + contentBlocks: [{ content, type: "text" }], + id: buildOpencodeHydrationDiagnosticId(params), + role: "assistant", + timestamp: Date.now() + }; +} +function buildOpencodeHydrationDiagnosticId(params) { + var _a5, _b3; + const scope = params.messageId ? "message" : "session"; + const rawId = (_b3 = (_a5 = params.messageId) != null ? _a5 : params.sessionId) != null ? _b3 : String(Date.now()); + const safeId = rawId.replace(/[^a-zA-Z0-9._-]/g, "-").slice(0, 120) || String(Date.now()); + return `${OPENCODE_HYDRATION_DIAGNOSTIC_ID_PREFIX}-${scope}-${safeId}`; +} +function isOpencodeSessionHydrationDiagnosticMessage(message) { + return message.id.startsWith(`${OPENCODE_HYDRATION_DIAGNOSTIC_ID_PREFIX}-session-`); +} +function isOpencodeHydrationDiagnosticMessage(message) { + return message.id.startsWith(OPENCODE_HYDRATION_DIAGNOSTIC_ID_PREFIX); +} +function formatUnknownError(error48) { + return error48 instanceof Error ? error48.message : String(error48); +} +function buildAssistantContentBlocks(parts) { + var _a5; + const blocks = []; + for (const part of parts) { + switch (getString(part.type)) { + case "reasoning": { + const text = (_a5 = getString(part.text)) == null ? void 0 : _a5.trim(); + if (!text) { + break; + } + blocks.push({ + content: text, + durationSeconds: getDurationSeconds(part), + type: "thinking" + }); + break; + } + case "text": { + const text = getString(part.text); + if (!text || getBoolean(part.ignored)) { + break; + } + blocks.push({ + content: text, + type: "text" + }); + break; + } + case "tool": { + const toolId = getString(part.callID); + if (!toolId) { + break; + } + blocks.push({ + toolId, + type: "tool_use" + }); + break; + } + } + } + return blocks; +} +function buildAssistantToolCalls(parts) { + return parts.flatMap((part) => { + var _a5, _b3, _c2, _d; + if (getString(part.type) !== "tool") { + return []; + } + const id = getString(part.callID); + const rawName = getString(part.tool); + const state = getObject(part.state); + const status = mapToolStatus(getString(state == null ? void 0 : state.status)); + if (!id || !rawName || !status) { + return []; + } + const input = normalizeOpencodeToolInput(rawName, (_a5 = getObject(state == null ? void 0 : state.input)) != null ? _a5 : {}); + const name = normalizeOpencodeToolName(rawName); + const result = (_c2 = (_b3 = getString(state == null ? void 0 : state.output)) != null ? _b3 : getString(state == null ? void 0 : state.error)) != null ? _c2 : void 0; + const toolUseResult = normalizeOpencodeToolUseResult(rawName, input, { + ...result ? { output: result } : {}, + ...getObject(state == null ? void 0 : state.metadata) ? { metadata: getObject(state == null ? void 0 : state.metadata) } : {} + }); + const toolCall = { + id, + input, + name, + result, + status + }; + if (name === TOOL_ASK_USER_QUESTION) { + toolCall.resolvedAnswers = (_d = toolUseResult == null ? void 0 : toolUseResult.answers) != null ? _d : extractResolvedAnswersFromResultText(result); + } + if (status === "completed" && isWriteEditTool(name)) { + const diffData = extractDiffData(toolUseResult, toolCall); + if (diffData) { + toolCall.diffData = diffData; + } + } + return [toolCall]; + }); +} +function getJoinedTextParts(parts) { + return parts.filter((part) => getString(part.type) === "text" && !getBoolean(part.ignored)).map((part) => { + var _a5; + return (_a5 = getString(part.text)) != null ? _a5 : ""; + }).join(""); +} +function getDurationSeconds(part) { + const start = getNestedNumber(part, ["time", "start"]); + const end = getNestedNumber(part, ["time", "end"]); + if (start === null || end === null || end < start) { + return void 0; + } + return Math.max(0, (end - start) / 1e3); +} +function mapToolStatus(status) { + switch (status) { + case "pending": + case "running": + return "running"; + case "completed": + return "completed"; + case "error": + return "error"; + default: + return null; + } +} +function parseJsonObject2(value) { + if (typeof value !== "string") { + return null; + } + try { + const parsed = JSON.parse(value); + return isPlainObject7(parsed) ? parsed : null; + } catch (e2) { + return null; + } +} +function isPlainObject7(value) { + return value !== null && typeof value === "object" && !Array.isArray(value); +} +function getBoolean(value) { + return value === true; +} +function getObject(value) { + return isPlainObject7(value) ? value : null; +} +function getString(value) { + return typeof value === "string" ? value : null; +} +function getNumber(value) { + return typeof value === "number" ? value : null; +} +function getNestedNumber(value, keys) { + let current = value; + for (const key of keys) { + if (!isPlainObject7(current)) { + return null; + } + current = current[key]; + } + return getNumber(current); +} +async function loadSqliteModule() { + try { + return await import("node:sqlite"); + } catch (e2) { + return null; + } +} +async function loadOpencodeSessionRows(databasePath, sessionId) { + const viaNodeSqlite = await loadSessionRowsWithNodeSqlite(databasePath, sessionId); + if (viaNodeSqlite) { + return viaNodeSqlite; + } + return loadSessionRowsWithSqliteCli(databasePath, sessionId); +} +async function loadSessionRowsWithNodeSqlite(databasePath, sessionId) { + const sqlite = await loadSqliteModule(); + if (!sqlite) { + return null; + } + let db2 = null; + try { + db2 = new sqlite.DatabaseSync(databasePath, { readonly: true }); + const messageRows = db2.prepare(OPENCODE_MESSAGE_ROW_SQL).all(sessionId); + const partRows = db2.prepare(OPENCODE_PART_ROW_SQL).all(sessionId); + return { messageRows, partRows }; + } catch (e2) { + return null; + } finally { + db2 == null ? void 0 : db2.close(); + } +} +function loadSessionRowsWithSqliteCli(databasePath, sessionId) { + const escapedSessionId = escapeSqlLiteral(sessionId); + const messageRows = runSqlite3JsonQuery( + databasePath, + buildOpencodeMessageRowsSql(`'${escapedSessionId}'`) + ); + const partRows = runSqlite3JsonQuery( + databasePath, + buildOpencodePartRowsSql(`'${escapedSessionId}'`) + ); + if (!messageRows || !partRows) { + return null; + } + return { messageRows, partRows }; +} +function runSqlite3JsonQuery(databasePath, sql) { + const result = (0, import_node_child_process2.spawnSync)( + "sqlite3", + ["-json", databasePath, sql], + { + encoding: "utf8" + } + ); + if (result.error || result.status !== 0) { + return null; + } + try { + const parsed = JSON.parse(result.stdout || "[]"); + return Array.isArray(parsed) ? parsed.filter((row) => isPlainObject7(row)) : null; + } catch (e2) { + return null; + } +} +function escapeSqlLiteral(value) { + return value.replaceAll("'", "''"); +} +function buildOpencodeMessageRowsSql(sessionIdExpression) { + return ` +with message_json as ( + select + id, + time_created, + data, + json_valid(data) as data_valid + from message + where session_id = ${sessionIdExpression} +) +select + id, + time_created, + data_valid, + case when data_valid then json_extract(data, '$.role') end as role, + case when data_valid then json_extract(data, '$.time.created') end as data_time_created, + case when data_valid then json_extract(data, '$.time.completed') end as data_time_completed +from message_json +order by time_created asc, id asc;`.trim(); +} +function buildOpencodePartRowsSql(sessionIdExpression) { + return ` +select id, message_id, data +from part +where session_id = ${sessionIdExpression} +order by message_id asc, id asc;`.trim(); +} + +// src/providers/opencode/history/OpencodeConversationHistoryService.ts +var OpencodeConversationHistoryService = class { + constructor() { + this.hydratedKeys = /* @__PURE__ */ new Map(); + } + async hydrateConversationHistory(conversation, _vaultPath) { + var _a5; + const sessionId = conversation.sessionId; + if (!sessionId) { + this.hydratedKeys.delete(conversation.id); + return; + } + const state = getOpencodeState(conversation.providerState); + const hydrationKey = `${sessionId}::${(_a5 = state.databasePath) != null ? _a5 : ""}`; + if (conversation.messages.length > 0 && this.hydratedKeys.get(conversation.id) === hydrationKey) { + return; + } + const messages = await loadOpencodeSessionMessages(sessionId, state); + if (messages.length === 0) { + this.hydratedKeys.delete(conversation.id); + return; + } + conversation.messages = messages; + if (messages.length === 1 && isOpencodeSessionHydrationDiagnosticMessage(messages[0])) { + this.hydratedKeys.delete(conversation.id); + return; + } + this.hydratedKeys.set(conversation.id, hydrationKey); + } + async deleteConversationSession(_conversation, _vaultPath) { + } + resolveSessionIdForConversation(conversation) { + var _a5; + return (_a5 = conversation == null ? void 0 : conversation.sessionId) != null ? _a5 : null; + } + isPendingForkConversation(_conversation) { + return false; + } + buildForkProviderState(_sourceSessionId, _resumeAt, _sourceProviderState) { + return {}; + } + buildPersistedProviderState(conversation) { + const state = getOpencodeState(conversation.providerState); + const providerState = { + ...state.databasePath ? { databasePath: state.databasePath } : {} + }; + return Object.keys(providerState).length > 0 ? providerState : void 0; + } +}; + +// src/providers/opencode/registration.ts +var opencodeProviderRegistration = { + blankTabOrder: 10, + capabilities: OPENCODE_PROVIDER_CAPABILITIES, + chatUIConfig: opencodeChatUIConfig, + createInlineEditService: (plugin) => new OpencodeInlineEditService(plugin), + createInstructionRefineService: (plugin) => new OpencodeInstructionRefineService(plugin), + createRuntime: ({ plugin }) => new OpencodeChatRuntime(plugin), + createTitleGenerationService: (plugin) => new OpencodeTitleGenerationService(plugin), + displayName: "OpenCode", + environmentKeyPatterns: [/^OPENCODE_/i], + historyService: new OpencodeConversationHistoryService(), + isEnabled: (settings11) => getOpencodeProviderSettings(settings11).enabled, + settingsReconciler: opencodeSettingsReconciler, + taskResultInterpreter: new OpencodeTaskResultInterpreter() +}; + +// src/providers/pi/commands/PiCommandCatalog.ts +function slashCommandToEntry3(command) { + var _a5, _b3; + return { + agent: command.agent, + allowedTools: command.allowedTools, + argumentHint: command.argumentHint, + content: command.content, + context: command.context, + description: command.description, + disableModelInvocation: command.disableModelInvocation, + displayPrefix: "/", + hooks: command.hooks, + id: command.id, + insertPrefix: "/", + isDeletable: false, + isEditable: false, + kind: (_a5 = command.kind) != null ? _a5 : "command", + model: command.model, + name: command.name, + providerId: "pi", + scope: "runtime", + source: (_b3 = command.source) != null ? _b3 : "sdk", + userInvocable: command.userInvocable + }; +} +function dedupeRuntimeCommands2(commands) { + const deduped = []; + const seen = /* @__PURE__ */ new Set(); + for (const command of commands) { + const normalizedName = command.name.trim().replace(/^\/+/, ""); + if (!normalizedName) { + continue; + } + const key = normalizedName.toLowerCase(); + if (seen.has(key)) { + continue; + } + seen.add(key); + deduped.push({ + ...command, + name: normalizedName + }); + } + return deduped; +} +var PiCommandCatalog = class { + constructor() { + this.runtimeCommands = []; + } + setRuntimeCommands(commands) { + this.runtimeCommands = dedupeRuntimeCommands2(commands); + } + async listDropdownEntries(_context) { + return this.runtimeCommands.map(slashCommandToEntry3); + } + async listVaultEntries() { + return []; + } + async saveVaultEntry(_entry) { + throw new Error("Pi runtime commands are not editable from Claudian."); + } + async deleteVaultEntry(_entry) { + throw new Error("Pi runtime commands are not deletable from Claudian."); + } + getDropdownConfig() { + return { + builtInPrefix: "/", + commandPrefix: "/", + providerId: "pi", + skillPrefix: "/", + triggerChars: ["/"] + }; + } + async refresh() { + } +}; + +// src/providers/pi/runtime/PiCliResolver.ts +init_env(); +var PiCliResolver = class { + constructor() { + this.cachedHostname = getHostnameKey(); + this.lastCliPath = ""; + this.lastEnvText = ""; + this.lastHostnamePath = ""; + this.resolvedPath = null; + } + resolveFromSettings(settings11) { + var _a5; + const piSettings = getPiProviderSettings(settings11); + const cliPath = piSettings.cliPath.trim(); + const hostnamePath = ((_a5 = piSettings.cliPathsByHost[this.cachedHostname]) != null ? _a5 : "").trim(); + const envText = getRuntimeEnvironmentText(settings11, "pi"); + if (this.resolvedPath !== null && cliPath === this.lastCliPath && hostnamePath === this.lastHostnamePath && envText === this.lastEnvText) { + return this.resolvedPath; + } + this.lastCliPath = cliPath; + this.lastHostnamePath = hostnamePath; + this.lastEnvText = envText; + this.resolvedPath = this.resolve(piSettings.cliPathsByHost, cliPath, envText); + return this.resolvedPath; + } + resolve(hostnamePaths, legacyPath, envText = "") { + var _a5, _b3, _c2; + const hostnamePath = ((_a5 = hostnamePaths == null ? void 0 : hostnamePaths[this.cachedHostname]) != null ? _a5 : "").trim(); + const customEnv = parseEnvironmentVariables(envText || ""); + return (_c2 = (_b3 = resolveConfiguredCliPath(hostnamePath)) != null ? _b3 : resolveConfiguredCliPath(legacyPath.trim())) != null ? _c2 : findCliBinaryPath("pi", customEnv.PATH); + } + reset() { + this.lastCliPath = ""; + this.lastHostnamePath = ""; + this.lastEnvText = ""; + this.resolvedPath = null; + } +}; + +// src/providers/pi/ui/PiSettingsTab.ts +var fs23 = __toESM(require("node:fs")); +var import_obsidian20 = require("obsidian"); +init_env(); +init_path(); + +// src/providers/pi/internal/compareCollections.ts +function sameStringList2(left, right) { + return left.length === right.length && left.every((value, index) => value === right[index]); +} + +// src/providers/pi/runtime/PiModelDiscoveryService.ts +init_env(); +init_path(); + +// src/providers/pi/runtime/PiLaunchSpec.ts +var READONLY_TOOLS = "read,grep,find,ls"; +function buildPiLaunchSpec(params) { + var _a5, _b3, _c2, _d, _e2, _f2; + const args = ["--mode", "rpc"]; + const systemPrompt = (_a5 = params.systemPrompt) == null ? void 0 : _a5.trim(); + if (systemPrompt) { + args.push("--system-prompt", systemPrompt); + } + if (params.noSession) { + args.push("--no-session"); + } else if (((_b3 = params.providerState) == null ? void 0 : _b3.sessionFile) || ((_c2 = params.providerState) == null ? void 0 : _c2.sessionId)) { + args.push("--session", (_d = params.providerState.sessionFile) != null ? _d : params.providerState.sessionId); + } + if (params.noTools) { + args.push("--no-tools"); + } else if (params.settings.toolMode === "readonly") { + args.push("--tools", READONLY_TOOLS); + } + const decodedModel = typeof params.model === "string" ? decodePiModelId(params.model) : null; + if (decodedModel) { + args.push("--provider", decodedModel.provider, "--model", decodedModel.modelId); + } + const thinkingLevel = normalizePiThinkingLevel(params.thinkingLevel); + if (thinkingLevel && thinkingLevel !== "off") { + args.push("--thinking", thinkingLevel); + } + return { + args, + command: params.command, + cwd: params.cwd, + env: (_e2 = params.env) != null ? _e2 : process.env, + launchKey: JSON.stringify({ + args, + command: params.command, + cwd: params.cwd, + envText: (_f2 = params.envText) != null ? _f2 : params.settings.environmentVariables + }) + }; +} + +// src/providers/pi/runtime/PiJsonl.ts +function subscribePiJsonlLines(input, onLine, onEnd, onError) { + let buffer = ""; + const handleData = (chunk) => { + buffer += typeof chunk === "string" ? chunk : chunk.toString("utf8"); + while (true) { + const newlineIndex = buffer.indexOf("\n"); + if (newlineIndex < 0) { + break; + } + const line = stripTrailingCarriageReturn(buffer.slice(0, newlineIndex)); + buffer = buffer.slice(newlineIndex + 1); + onLine(line); + } + }; + const handleEnd = () => { + if (buffer.length > 0) { + onLine(stripTrailingCarriageReturn(buffer)); + buffer = ""; + } + onEnd == null ? void 0 : onEnd(); + }; + const handleError = (error48) => { + onError == null ? void 0 : onError(error48 instanceof Error ? error48 : new Error(String(error48))); + }; + input.on("data", handleData); + input.on("end", handleEnd); + input.on("close", handleEnd); + input.on("error", handleError); + return () => { + input.off("data", handleData); + input.off("end", handleEnd); + input.off("close", handleEnd); + input.off("error", handleError); + }; +} +function writePiJsonl(output, record2) { + output.write(`${JSON.stringify(record2)} +`); +} +function stripTrailingCarriageReturn(value) { + return value.endsWith("\r") ? value.slice(0, -1) : value; +} + +// src/providers/pi/runtime/PiRpcTransport.ts +var DEFAULT_TIMEOUT_MS3 = 3e4; +var PiRpcTransportClosedError = class extends Error { + constructor(message = "Pi RPC transport closed") { + super(message); + this.name = "PiRpcTransportClosedError"; + } +}; +var PiRpcResponseError = class extends Error { + constructor(commandType, message) { + super(message); + this.commandType = commandType; + this.name = "PiRpcResponseError"; + } +}; +var PiRpcTransport = class { + constructor(streams, defaultTimeoutMs = DEFAULT_TIMEOUT_MS3) { + this.streams = streams; + this.defaultTimeoutMs = defaultTimeoutMs; + this.closeListeners = /* @__PURE__ */ new Set(); + this.disposed = false; + this.eventHandlers = /* @__PURE__ */ new Set(); + this.nextId = 1; + this.pending = /* @__PURE__ */ new Map(); + } + get isClosed() { + return this.disposed; + } + start() { + var _a5, _b3; + if (this.unsubscribeLines || this.disposed) { + return; + } + this.unsubscribeLines = subscribePiJsonlLines( + this.streams.input, + (line) => this.handleLine(line), + () => { + if (!this.disposed) { + this.dispose(new PiRpcTransportClosedError("Pi RPC input closed")); + } + }, + (error48) => { + if (!this.disposed) { + this.dispose(error48); + } + } + ); + this.unregisterClose = (_b3 = (_a5 = this.streams).onClose) == null ? void 0 : _b3.call(_a5, (error48) => { + if (!this.disposed) { + this.dispose(error48 != null ? error48 : new PiRpcTransportClosedError()); + } + }); + } + onEvent(handler) { + this.eventHandlers.add(handler); + return () => { + this.eventHandlers.delete(handler); + }; + } + onClose(listener) { + this.closeListeners.add(listener); + return () => { + this.closeListeners.delete(listener); + }; + } + request(commandType, payload = {}, timeoutMs = this.defaultTimeoutMs) { + this.start(); + if (this.disposed) { + return Promise.reject(new PiRpcTransportClosedError()); + } + const id = `req_${this.nextId++}`; + return new Promise((resolve8, reject) => { + let timer; + const cleanup = () => { + if (timer !== void 0) { + window.clearTimeout(timer); + } + }; + if (timeoutMs > 0) { + timer = window.setTimeout(() => { + this.pending.delete(id); + cleanup(); + reject(new Error(`Request timeout: ${commandType} (${timeoutMs}ms)`)); + }, timeoutMs); + } + this.pending.set(id, { + cleanup, + reject, + resolve: (response) => resolve8(response), + type: commandType + }); + try { + this.sendRaw({ id, type: commandType, ...payload }); + } catch (error48) { + this.pending.delete(id); + cleanup(); + const transportError = error48 instanceof Error ? error48 : new Error(String(error48)); + this.dispose(transportError); + reject(transportError); + } + }); + } + send(record2) { + this.start(); + if (this.disposed) { + return; + } + this.sendRaw(record2); + } + dispose(error48 = new PiRpcTransportClosedError("Pi RPC transport disposed")) { + var _a5, _b3; + if (this.disposed) { + return; + } + this.disposed = true; + (_a5 = this.unsubscribeLines) == null ? void 0 : _a5.call(this); + this.unsubscribeLines = void 0; + (_b3 = this.unregisterClose) == null ? void 0 : _b3.call(this); + this.unregisterClose = void 0; + this.rejectAllPending(error48); + for (const listener of this.closeListeners) { + try { + listener(error48); + } catch (e2) { + } + } + this.closeListeners.clear(); + this.eventHandlers.clear(); + } + sendRaw(record2) { + writePiJsonl(this.streams.output, record2); + } + handleLine(line) { + if (!line.trim()) { + return; + } + let record2; + try { + const parsed = JSON.parse(line); + if (!isPlainObject8(parsed)) { + return; + } + record2 = parsed; + } catch (e2) { + return; + } + if (record2.type === "response" && typeof record2.id === "string") { + this.handleResponse(record2.id, record2); + return; + } + for (const handler of this.eventHandlers) { + handler(record2); + } + } + handleResponse(id, record2) { + const pending = this.pending.get(id); + if (!pending) { + return; + } + this.pending.delete(id); + pending.cleanup(); + if (record2.success === false) { + const errorText = typeof record2.error === "string" ? record2.error : `Pi RPC command failed: ${pending.type}`; + pending.reject(new PiRpcResponseError(pending.type, errorText)); + return; + } + if ("result" in record2) { + pending.resolve(record2.result); + return; + } + if ("data" in record2) { + pending.resolve(record2.data); + return; + } + pending.resolve(record2); + } + rejectAllPending(error48) { + for (const pending of this.pending.values()) { + pending.cleanup(); + pending.reject(error48); + } + this.pending.clear(); + } +}; +function isPlainObject8(value) { + return value !== null && typeof value === "object" && !Array.isArray(value); +} + +// src/providers/pi/runtime/PiSubprocess.ts +var import_node_child_process3 = require("node:child_process"); +var path21 = __toESM(require("node:path")); +init_env(); +var SIGKILL_TIMEOUT_MS3 = 3e3; +var STDERR_BUFFER_LIMIT2 = 8e3; +var PiSubprocess = class { + constructor(launchSpec) { + this.launchSpec = launchSpec; + this.closeError = null; + this.closeListeners = /* @__PURE__ */ new Set(); + this.notifiedClose = false; + this.proc = null; + this.resolvedSpawnSpec = null; + this.stderrBuffer = ""; + } + get stdin() { + return this.requireProc().stdin; + } + get stdout() { + return this.requireProc().stdout; + } + requireProc() { + if (!this.proc) { + throw new Error("Pi subprocess is not started"); + } + return this.proc; + } + start() { + if (this.proc) { + return; + } + const resolvedSpawnSpec = resolveWindowsCmdShimSpawnSpec(this.launchSpec); + this.resolvedSpawnSpec = resolvedSpawnSpec; + const proc = (0, import_node_child_process3.spawn)(resolvedSpawnSpec.command, resolvedSpawnSpec.args, { + cwd: this.launchSpec.cwd, + env: { + ...this.launchSpec.env, + PATH: getEnhancedPath( + this.launchSpec.env.PATH, + path21.isAbsolute(this.launchSpec.command) ? this.launchSpec.command : void 0 + ) + }, + stdio: "pipe", + windowsHide: true, + ...resolvedSpawnSpec.windowsVerbatimArguments ? { windowsVerbatimArguments: true } : {} + }); + proc.stderr.on("data", (chunk) => { + const text = typeof chunk === "string" ? chunk : chunk.toString("utf-8"); + this.stderrBuffer = `${this.stderrBuffer}${text}`.slice(-STDERR_BUFFER_LIMIT2); + }); + proc.on("error", (error48) => { + this.closeError = error48; + this.notifyClose(error48); + }); + proc.on("exit", (code, signal) => { + var _a5; + const exitError = (_a5 = this.closeError) != null ? _a5 : code === 0 && signal === null ? void 0 : new Error(`Pi subprocess exited (${formatExit2(code, signal)})`); + this.notifyClose(exitError); + }); + this.proc = proc; + } + isAlive() { + return this.proc !== null && this.proc.exitCode === null && !this.proc.killed; + } + getStderrSnapshot() { + return this.stderrBuffer.trim(); + } + onClose(listener) { + this.closeListeners.add(listener); + return () => { + this.closeListeners.delete(listener); + }; + } + async shutdown() { + if (!this.proc || this.proc.exitCode !== null) { + return; + } + await new Promise((resolve8) => { + const proc = this.proc; + const onClose = () => { + cleanup(); + resolve8(); + }; + const killTimer = window.setTimeout(() => { + this.killProc(proc, "SIGKILL"); + }, SIGKILL_TIMEOUT_MS3); + const cleanup = () => { + window.clearTimeout(killTimer); + proc.off("exit", onClose); + }; + proc.once("exit", onClose); + this.killProc(proc, "SIGTERM"); + }); + } + killProc(proc, signal) { + return terminateSpawnedProcess(proc, signal, import_node_child_process3.spawn, this.resolvedSpawnSpec); + } + notifyClose(error48) { + if (this.notifiedClose) { + return; + } + this.notifiedClose = true; + for (const listener of this.closeListeners) { + try { + listener(error48); + } catch (e2) { + } + } + } +}; +function formatExit2(code, signal) { + if (signal) { + return `signal ${signal}`; + } + if (code === null) { + return "unknown"; + } + return `code ${code}`; +} + +// src/providers/pi/runtime/PiModelDiscoveryService.ts +var PiModelDiscoveryService = class { + constructor(plugin) { + this.plugin = plugin; + } + async discoverModels() { + var _a5, _b3; + const settings11 = getPiProviderSettings(this.plugin.settings); + const cwd = (_a5 = getVaultPath(this.plugin.app)) != null ? _a5 : process.cwd(); + const command = (_b3 = this.plugin.getResolvedProviderCliPath("pi")) != null ? _b3 : "pi"; + const envText = getRuntimeEnvironmentText(this.plugin.settings, "pi"); + const env = { + ...process.env, + ...parseEnvironmentVariables(envText) + }; + const launchSpec = buildPiLaunchSpec({ + command, + cwd, + env, + envText, + noSession: true, + settings: settings11 + }); + const subprocess = new PiSubprocess(launchSpec); + let transport = null; + let removeEventListener = null; + try { + subprocess.start(); + transport = new PiRpcTransport({ + input: subprocess.stdout, + onClose: (listener) => subprocess.onClose(listener), + output: subprocess.stdin + }); + transport.start(); + removeEventListener = transport.onEvent((event) => { + if (event.type !== "extension_ui_request") { + return; + } + const id = typeof event.id === "string" && event.id.trim() ? event.id.trim() : ""; + if (id) { + transport == null ? void 0 : transport.send({ + cancelled: true, + id, + type: "extension_ui_response" + }); + } + }); + const response = await transport.request("get_available_models", {}, 2e4); + const models = normalizePiDiscoveredModels(extractModels(response)); + return { models }; + } catch (error48) { + const message = error48 instanceof Error ? error48.message : "Pi model discovery failed"; + const stderr = subprocess.getStderrSnapshot(); + return { + diagnostics: stderr ? `${message} + +${stderr}` : message, + models: [] + }; + } finally { + removeEventListener == null ? void 0 : removeEventListener(); + transport == null ? void 0 : transport.dispose(); + await subprocess.shutdown().catch(() => { + }); + } + } +}; +function extractModels(response) { + var _a5, _b3, _c2; + if (Array.isArray(response)) { + return response; + } + if (response && typeof response === "object" && !Array.isArray(response)) { + const record2 = response; + return (_c2 = (_b3 = (_a5 = record2.models) != null ? _a5 : record2.availableModels) != null ? _b3 : record2.available_models) != null ? _c2 : []; + } + return []; +} + +// src/providers/pi/ui/PiSettingsTab.ts +var piSettingsTabRenderer = { + render(container, context) { + const settingsBag = context.plugin.settings; + const piSettings = getPiProviderSettings(settingsBag); + const hostnameKey = getHostnameKey(); + const workspace = maybeGetPiWorkspaceServices(); + new import_obsidian20.Setting(container).setName("Setup").setHeading(); + new import_obsidian20.Setting(container).setName("Enable Pi").setDesc("Launch `pi --mode rpc` as a provider.").addToggle( + (toggle) => toggle.setValue(piSettings.enabled).onChange(async (value) => { + updatePiProviderSettings(settingsBag, { enabled: value }); + await context.plugin.saveSettings(); + context.refreshModelSelectors(); + }) + ); + const validationEl = container.createDiv({ + cls: "claudian-cli-path-validation claudian-setting-validation claudian-setting-validation-error claudian-hidden" + }); + const cliPathsByHost = { ...piSettings.cliPathsByHost }; + let cliPathInputEl = null; + const updateCliPathValidation = (value, inputEl) => { + const error48 = validateCliPath(value); + if (error48) { + validationEl.setText(error48); + validationEl.toggleClass("claudian-hidden", false); + inputEl == null ? void 0 : inputEl.toggleClass("claudian-input-error", true); + return false; + } + validationEl.toggleClass("claudian-hidden", true); + inputEl == null ? void 0 : inputEl.toggleClass("claudian-input-error", false); + return true; + }; + const persistCliPath = async (value) => { + var _a5; + if (!updateCliPathValidation(value, cliPathInputEl != null ? cliPathInputEl : void 0)) { + return; + } + const trimmed = value.trim(); + if (trimmed) { + cliPathsByHost[hostnameKey] = trimmed; + } else { + delete cliPathsByHost[hostnameKey]; + } + updatePiProviderSettings(settingsBag, { + cliPathsByHost: { ...cliPathsByHost }, + discoveredModels: [] + }); + (_a5 = workspace == null ? void 0 : workspace.cliResolver) == null ? void 0 : _a5.reset(); + await context.plugin.saveSettings(); + context.refreshModelSelectors(); + }; + new import_obsidian20.Setting(container).setName("CLI path").setDesc("Optional absolute path to the Pi CLI for this computer. Leave empty to use `pi` from PATH.").addText((text) => { + const currentValue = piSettings.cliPathsByHost[hostnameKey] || ""; + text.setPlaceholder(process.platform === "win32" ? "C:\\Users\\you\\AppData\\Roaming\\npm\\pi.cmd" : "/usr/local/bin/pi").setValue(currentValue).onChange((value) => { + void persistCliPath(value); + }); + cliPathInputEl = text.inputEl; + updateCliPathValidation(currentValue, text.inputEl); + }); + new import_obsidian20.Setting(container).setName("Models").setHeading(); + const modelContainer = container.createDiv({ cls: "claudian-pi-models" }); + const renderModels = () => { + modelContainer.empty(); + const current = getPiProviderSettings(settingsBag); + new import_obsidian20.Setting(modelContainer).setName("Discover models").setDesc(current.discoveredModels.length > 0 ? `${current.discoveredModels.length} Pi models cached.` : "Fetch models from `pi --mode rpc --no-session`.").addButton((button) => { + button.setButtonText("Discover").onClick(async () => { + button.setDisabled(true); + const result = await new PiModelDiscoveryService(context.plugin).discoverModels(); + if (result.diagnostics) { + new import_obsidian20.Notice(`Pi discovery failed: ${result.diagnostics}`); + button.setDisabled(false); + return; + } + updatePiProviderSettings(settingsBag, { + discoveredModels: result.models, + visibleModels: normalizePiVisibleModels( + current.visibleModels, + result.models + ) + }); + await context.plugin.saveSettings(); + renderModels(); + context.refreshModelSelectors(); + }); + }); + if (current.discoveredModels.length === 0) { + modelContainer.createDiv({ + cls: "setting-item-description", + text: "No Pi models discovered yet." + }); + return; + } + for (const model of current.discoveredModels) { + new import_obsidian20.Setting(modelContainer).setName(current.modelAliases[model.encodedId] || model.label).setDesc(model.encodedId).addToggle((toggle) => { + toggle.setValue(current.visibleModels.includes(model.encodedId)).onChange(async (value) => { + const visibleModels = value ? [...current.visibleModels, model.encodedId] : current.visibleModels.filter((id) => id !== model.encodedId); + const normalized = normalizePiVisibleModels(visibleModels, current.discoveredModels); + if (!sameStringList2(current.visibleModels, normalized)) { + updatePiProviderSettings(settingsBag, { visibleModels: normalized }); + await context.plugin.saveSettings(); + renderModels(); + context.refreshModelSelectors(); + } + }); + }).addText((text) => { + var _a5; + text.setPlaceholder("Alias").setValue((_a5 = current.modelAliases[model.encodedId]) != null ? _a5 : "").onChange(async (value) => { + updatePiProviderSettings(settingsBag, { + modelAliases: { + ...getPiProviderSettings(settingsBag).modelAliases, + [model.encodedId]: value + } + }); + await context.plugin.saveSettings(); + context.refreshModelSelectors(); + }); + }); + } + }; + renderModels(); + renderEnvironmentSettingsSection({ + container, + desc: "Environment variables passed only to Pi.", + heading: "Environment", + name: "Pi environment variables", + placeholder: "PI_CODING_AGENT_SESSION_DIR=/path/to/sessions", + plugin: context.plugin, + scope: "provider:pi" + }); + } +}; +function validateCliPath(value) { + const trimmed = value.trim(); + if (!trimmed) { + return null; + } + const expandedPath = expandHomePath(trimmed); + if (!fs23.existsSync(expandedPath)) { + return "Path does not exist"; + } + if (!fs23.statSync(expandedPath).isFile()) { + return "Path must point to a file"; + } + return null; +} + +// src/providers/pi/runtime/PiChatRuntime.ts +var fsp2 = __toESM(require("node:fs/promises")); +var path23 = __toESM(require("node:path")); +init_env(); +init_path(); + +// src/providers/pi/capabilities.ts +var PI_PROVIDER_CAPABILITIES = Object.freeze({ + providerId: "pi", + supportsPersistentRuntime: true, + supportsNativeHistory: true, + supportsPlanMode: false, + supportsRewind: false, + supportsFork: true, + supportsProviderCommands: true, + supportsImageAttachments: true, + supportsInstructionMode: true, + supportsMcpTools: false, + supportsTurnSteer: true, + reasoningControl: "effort" +}); + +// src/providers/pi/history/PiHistoryStore.ts +var import_node_crypto = require("node:crypto"); +var fs24 = __toESM(require("node:fs")); +var fsp = __toESM(require("node:fs/promises")); +var os12 = __toESM(require("node:os")); +var path22 = __toESM(require("node:path")); + +// src/providers/pi/normalizations/piToolNormalization.ts +var PI_BUILT_IN_TOOL_NAMES = { + bash: TOOL_BASH, + edit: TOOL_EDIT, + find: TOOL_GLOB, + grep: TOOL_GREP, + ls: TOOL_LS, + read: TOOL_READ, + write: TOOL_WRITE +}; +function extractPiToolTextContent(value) { + var _a5; + if (typeof value === "string") { + return value; + } + if (Array.isArray(value)) { + return value.map(extractPiToolTextContent).filter(Boolean).join("\n"); + } + if (!isPlainObject9(value)) { + return ""; + } + if (typeof value.text === "string") { + return value.text; + } + if (typeof value.content === "string") { + return value.content; + } + if (Array.isArray(value.content)) { + return extractPiToolTextContent(value.content); + } + if (isPlainObject9(value.partialResult)) { + return extractPiToolTextContent(value.partialResult.content); + } + if (isPlainObject9(value.result)) { + return extractPiToolTextContent((_a5 = value.result.content) != null ? _a5 : value.result); + } + return ""; +} +function normalizePiToolInput(value, toolName) { + const input = isPlainObject9(value) ? { ...value } : {}; + const normalizedToolName = toolName ? normalizePiToolName(toolName) : ""; + if ((normalizedToolName === TOOL_READ || normalizedToolName === TOOL_WRITE || normalizedToolName === TOOL_EDIT) && typeof input.path === "string" && typeof input.file_path !== "string") { + input.file_path = input.path; + } + return input; +} +function getPiToolId(value) { + var _a5; + return (_a5 = firstString4(value.id, value.toolCallId, value.callId, value.call_id)) != null ? _a5 : ""; +} +function getPiToolName(value) { + var _a5; + return normalizePiToolName((_a5 = firstString4(value.name, value.tool, value.toolName, value.tool_name)) != null ? _a5 : "tool"); +} +function normalizePiToolName(name) { + var _a5; + return (_a5 = PI_BUILT_IN_TOOL_NAMES[name.trim().toLowerCase()]) != null ? _a5 : name; +} +function firstString4(...values) { + for (const value of values) { + if (typeof value === "string") { + const trimmed = value.trim(); + if (trimmed) { + return trimmed; + } + } + } + return void 0; +} +function isPlainObject9(value) { + return value !== null && typeof value === "object" && !Array.isArray(value); +} + +// src/providers/pi/history/PiHistoryStore.ts +function parsePiSessionContent(content, options = {}) { + var _a5; + const parsed = parsePiSessionEntries(content); + const leafEntryId = (_a5 = options.leafEntryId) == null ? void 0 : _a5.trim(); + if (options.requireLeafEntryId && (!leafEntryId || !parsed.entries.some((entry) => entry.id === leafEntryId))) { + return []; + } + return mapPiSessionEntries(resolvePiActivePath( + parsed.entries, + leafEntryId + )); +} +function parsePiSessionEntries(content) { + var _a5, _b3, _c2, _d, _e2, _f2; + const entries = []; + let header = null; + for (const line of content.split(/\r?\n/)) { + if (!line.trim()) { + continue; + } + let record2; + try { + const parsed = JSON.parse(line); + if (!isPlainObject10(parsed)) { + continue; + } + record2 = parsed; + } catch (e2) { + continue; + } + const type = (_b3 = (_a5 = getString2(record2.type)) != null ? _a5 : getString2(record2.kind)) != null ? _b3 : ""; + if (type === "session") { + header = record2; + continue; + } + const message = (_d = (_c2 = getRecord(record2.message)) != null ? _c2 : getRecord(record2.data)) != null ? _d : inferMessageRecord(record2); + entries.push({ + ...getString2(record2.id) ? { id: getString2(record2.id) } : {}, + ...message ? { message } : {}, + ...((_e2 = getString2(record2.parentId)) != null ? _e2 : getString2(record2.parent_id)) ? { parentId: (_f2 = getString2(record2.parentId)) != null ? _f2 : getString2(record2.parent_id) } : {}, + raw: record2, + type + }); + } + return { entries, header }; +} +function resolvePiActivePath(entries, leafId) { + var _a5; + const entriesWithIds = entries.filter((entry) => !!entry.id); + if (entriesWithIds.length === 0) { + return entries; + } + const hasBranchGraph = hasPiBranchGraph(entriesWithIds); + if (!leafId && !hasBranchGraph) { + return entries; + } + const byId = new Map(entriesWithIds.map((entry) => [entry.id, entry])); + const targetLeafId = leafId && byId.has(leafId) ? leafId : (_a5 = entriesWithIds[entriesWithIds.length - 1]) == null ? void 0 : _a5.id; + if (!targetLeafId) { + return entries; + } + const activePath = hasBranchGraph ? resolvePiGraphEntryPath(byId, targetLeafId) : resolvePiLinearEntryPath(entries, targetLeafId); + if (activePath.length === 0) { + return entries; + } + return hasBranchGraph ? includePiGraphPathEntries(entries, activePath) : includePiLinearPathEntries(entries, activePath); +} +function resolvePiEntryPath(entries, leafId) { + const entriesWithIds = entries.filter((entry) => !!entry.id); + const byId = new Map(entriesWithIds.map((entry) => [entry.id, entry])); + if (!byId.has(leafId)) { + return []; + } + const hasBranchGraph = hasPiBranchGraph(entriesWithIds); + const activePath = hasBranchGraph ? resolvePiGraphEntryPath(byId, leafId) : resolvePiLinearEntryPath(entries, leafId); + if (activePath.length === 0) { + return []; + } + return hasBranchGraph ? includePiGraphPathEntries(entries, activePath) : includePiLinearPathEntries(entries, activePath); +} +function hasPiBranchGraph(entriesWithIds) { + return entriesWithIds.some((entry) => !!entry.parentId && !isToolResultEntry(entry)); +} +function resolvePiGraphEntryPath(byId, targetLeafId) { + const activePath = []; + const seen = /* @__PURE__ */ new Set(); + let current = byId.get(targetLeafId); + while (current) { + if (!current.id || seen.has(current.id)) { + break; + } + seen.add(current.id); + activePath.push(current); + current = current.parentId ? byId.get(current.parentId) : void 0; + } + return activePath; +} +function resolvePiLinearEntryPath(entries, targetLeafId) { + const leafIndex = entries.findIndex((entry) => entry.id === targetLeafId); + if (leafIndex < 0) { + return []; + } + return entries.slice(0, leafIndex + 1); +} +function includePiGraphPathEntries(entries, activePath) { + const activeIds = new Set(activePath.map((entry) => entry.id).filter((id) => !!id)); + const activeToolCallIds = collectToolCallIds(activePath); + return entries.filter((entry) => { + if (isToolResultEntry(entry)) { + const toolCallId = getToolResultCallId(entry); + return !!toolCallId && activeToolCallIds.has(toolCallId) || !!entry.id && activeIds.has(entry.id) || !!entry.parentId && activeIds.has(entry.parentId); + } + if (entry.id) { + return activeIds.has(entry.id); + } + if (entry.parentId && activeIds.has(entry.parentId)) { + return true; + } + return false; + }); +} +function includePiLinearPathEntries(entries, activePath) { + const activeEntries = new Set(activePath); + const activeToolCallIds = collectToolCallIds(activePath); + return entries.filter((entry) => { + if (activeEntries.has(entry)) { + return true; + } + if (!isToolResultEntry(entry)) { + return false; + } + const toolCallId = getToolResultCallId(entry); + return !!toolCallId && activeToolCallIds.has(toolCallId); + }); +} +async function createPiForkSessionFile(sourceSessionFile, resumeAt, options = {}) { + var _a5, _b3, _c2, _d, _e2; + const sourceContent = await fsp.readFile(sourceSessionFile, "utf-8"); + const parsed = parsePiSessionEntries(sourceContent); + const branchEntries = resolvePiEntryPath(parsed.entries, resumeAt); + if (branchEntries.length === 0) { + throw new Error(`Pi fork checkpoint not found: ${resumeAt}`); + } + const timestamp = (_a5 = options.now) != null ? _a5 : /* @__PURE__ */ new Date(); + const timestampText = timestamp.toISOString(); + const sessionId = (_b3 = options.sessionId) != null ? _b3 : (0, import_node_crypto.randomUUID)(); + const sessionDir = (_c2 = options.sessionDir) != null ? _c2 : path22.dirname(sourceSessionFile); + const sessionFile = path22.join( + sessionDir, + `${timestampText.replace(/[:.]/g, "-")}_${sessionId}.jsonl` + ); + const sourceCwd = typeof ((_d = parsed.header) == null ? void 0 : _d.cwd) === "string" && parsed.header.cwd.trim() ? parsed.header.cwd.trim() : process.cwd(); + const header = { + type: "session", + version: 3, + id: sessionId, + timestamp: timestampText, + cwd: (_e2 = options.targetCwd) != null ? _e2 : sourceCwd, + parentSession: sourceSessionFile + }; + const lines = [ + JSON.stringify(header), + ...branchEntries.map((entry) => JSON.stringify(entry.raw)) + ]; + await fsp.mkdir(sessionDir, { recursive: true }); + await fsp.writeFile(sessionFile, `${lines.join("\n")} +`, { flag: "wx" }); + return { + leafEntryId: resumeAt, + parentSession: sourceSessionFile, + sessionFile, + sessionId + }; +} +function findPiSessionFile(sessionIdOrFile, cwd, sessionDir) { + const trimmed = sessionIdOrFile.trim(); + if (!trimmed) { + return null; + } + if (path22.isAbsolute(trimmed) && fileExists(trimmed)) { + return trimmed; + } + const roots = [ + sessionDir, + cwd ? path22.join(cwd, ".pi", "agent", "sessions") : null, + path22.join(os12.homedir(), ".pi", "agent", "sessions") + ].filter((root) => !!root); + for (const root of roots) { + const direct = path22.join(root, trimmed.endsWith(".jsonl") ? trimmed : `${trimmed}.jsonl`); + if (fileExists(direct)) { + return direct; + } + const found = findSessionFileInRoot(root, trimmed); + if (found) { + return found; + } + } + return null; +} +function mapPiSessionEntries(entries) { + const messages = []; + for (const entry of entries) { + const mapped = mapPiSessionEntry(entry, messages); + if (mapped) { + const previous = messages[messages.length - 1]; + if (isAssistantMessageEntry(entry) && canMergeAssistantContinuation(previous, mapped)) { + mergeAssistantContinuation(previous, mapped); + } else { + messages.push(mapped); + } + } + } + return messages; +} +function isAssistantMessageEntry(entry) { + var _a5, _b3; + const message = (_a5 = entry.message) != null ? _a5 : entry.raw; + return ((_b3 = getString2(message.role)) != null ? _b3 : inferRole(entry.type)) === "assistant"; +} +function isBoundaryMessage(message) { + var _a5; + return ((_a5 = message.contentBlocks) == null ? void 0 : _a5.some((block) => block.type === "context_compacted")) === true; +} +function canMergeAssistantContinuation(previous, next) { + return (previous == null ? void 0 : previous.role) === "assistant" && next.role === "assistant" && !isBoundaryMessage(previous) && !isBoundaryMessage(next); +} +function mergeAssistantContinuation(target, source) { + var _a5, _b3, _c2, _d, _e2; + target.content += source.content; + target.assistantMessageId = (_a5 = source.assistantMessageId) != null ? _a5 : target.assistantMessageId; + if (source.contentBlocks && source.contentBlocks.length > 0) { + target.contentBlocks = [ + ...(_b3 = target.contentBlocks) != null ? _b3 : [], + ...source.contentBlocks + ]; + } + if (source.toolCalls && source.toolCalls.length > 0) { + const existingToolIds = new Set((_d = (_c2 = target.toolCalls) == null ? void 0 : _c2.map((toolCall) => toolCall.id)) != null ? _d : []); + const newToolCalls = source.toolCalls.filter((toolCall) => !existingToolIds.has(toolCall.id)); + if (newToolCalls.length > 0) { + target.toolCalls = [ + ...(_e2 = target.toolCalls) != null ? _e2 : [], + ...newToolCalls + ]; + } + } +} +function mapPiSessionEntry(entry, messages) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m, _n, _o; + const message = (_a5 = entry.message) != null ? _a5 : entry.raw; + const role = (_b3 = getString2(message.role)) != null ? _b3 : inferRole(entry.type); + const timestamp = getTimestamp((_c2 = message.timestamp) != null ? _c2 : entry.raw.timestamp); + if (role === "user") { + return { + content: extractTextContent2((_e2 = (_d = message.content) != null ? _d : message.text) != null ? _e2 : message.message), + id: (_f2 = entry.id) != null ? _f2 : `pi-user-${messages.length}`, + role: "user", + timestamp, + userMessageId: entry.id + }; + } + if (role === "assistant") { + const contentBlocks = extractAssistantContentBlocks((_h2 = (_g = message.content) != null ? _g : message.parts) != null ? _h2 : message.blocks); + const toolCalls = extractAssistantToolCalls((_j = (_i = message.content) != null ? _i : message.parts) != null ? _j : message.blocks); + const text = contentBlocks.filter((block) => block.type === "text").map((block) => block.content).join(""); + return { + assistantMessageId: entry.id, + content: text, + ...contentBlocks.length > 0 ? { contentBlocks } : {}, + id: (_k3 = entry.id) != null ? _k3 : `pi-assistant-${messages.length}`, + role: "assistant", + timestamp, + ...toolCalls.length > 0 ? { toolCalls } : {} + }; + } + if (isToolResultEntry(entry)) { + applyToolResult(messages, entry); + return null; + } + if (entry.type === "compaction") { + return { + content: "", + contentBlocks: [{ type: "context_compacted" }], + id: (_l2 = entry.id) != null ? _l2 : `pi-compaction-${messages.length}`, + role: "assistant", + timestamp + }; + } + if ((entry.type === "branch_summary" || entry.type === "compactionSummary" || entry.type === "custom_message") && entry.raw.display !== false) { + const content = extractTextContent2((_n = (_m = entry.raw.content) != null ? _m : entry.raw.summary) != null ? _n : entry.raw.message); + if (!content) { + return null; + } + return { + content, + contentBlocks: [{ type: "text", content }], + id: (_o = entry.id) != null ? _o : `pi-notice-${messages.length}`, + role: "assistant", + timestamp + }; + } + return null; +} +function extractAssistantContentBlocks(value) { + var _a5, _b3, _c2, _d, _e2; + const blocks = []; + const parts = Array.isArray(value) ? value : [{ type: "text", text: extractTextContent2(value) }]; + for (const part of parts) { + if (!isPlainObject10(part)) { + continue; + } + const type = getString2(part.type); + if (type === "thinking" || type === "reasoning") { + const content2 = extractTextContent2((_b3 = (_a5 = part.thinking) != null ? _a5 : part.text) != null ? _b3 : part.content); + if (content2) { + blocks.push({ type: "thinking", content: content2 }); + } + continue; + } + if (type === "toolCall" || type === "tool_call" || type === "toolUse" || type === "tool_use") { + const toolId = (_d = (_c2 = getString2(part.id)) != null ? _c2 : getString2(part.toolCallId)) != null ? _d : getString2(part.callId); + if (toolId) { + blocks.push({ type: "tool_use", toolId }); + } + continue; + } + const content = extractTextContent2((_e2 = part.text) != null ? _e2 : part.content); + if (content) { + blocks.push({ type: "text", content }); + } + } + return blocks; +} +function extractAssistantToolCalls(value) { + const parts = Array.isArray(value) ? value : []; + return parts.flatMap((part) => { + var _a5, _b3, _c2, _d, _e2, _f2; + if (!isPlainObject10(part)) { + return []; + } + const type = getString2(part.type); + if (type !== "toolCall" && type !== "tool_call" && type !== "toolUse" && type !== "tool_use") { + return []; + } + const id = (_b3 = (_a5 = getString2(part.id)) != null ? _a5 : getString2(part.toolCallId)) != null ? _b3 : getString2(part.callId); + const rawName = (_d = (_c2 = getString2(part.name)) != null ? _c2 : getString2(part.tool)) != null ? _d : getString2(part.toolName); + if (!id || !rawName) { + return []; + } + const name = normalizePiToolName(rawName); + return [{ + id, + input: normalizePiToolInput((_f2 = (_e2 = part.input) != null ? _e2 : part.arguments) != null ? _f2 : part.args, name), + name, + status: "running" + }]; + }); +} +function collectToolCallIds(entries) { + var _a5, _b3, _c2; + const ids = /* @__PURE__ */ new Set(); + for (const entry of entries) { + const message = (_a5 = entry.message) != null ? _a5 : entry.raw; + const parts = (_c2 = (_b3 = message.content) != null ? _b3 : message.parts) != null ? _c2 : message.blocks; + for (const toolCall of extractAssistantToolCalls(parts)) { + ids.add(toolCall.id); + } + } + return ids; +} +function isToolResultEntry(entry) { + var _a5; + const message = (_a5 = entry.message) != null ? _a5 : entry.raw; + return entry.type === "toolResult" || entry.type === "tool_result" || getString2(message.role) === "toolResult" || getString2(message.role) === "tool_result"; +} +function getToolResultCallId(entry) { + var _a5, _b3, _c2, _d, _e2, _f2; + const message = (_a5 = entry.message) != null ? _a5 : entry.raw; + return (_f2 = (_e2 = (_d = (_c2 = (_b3 = getString2(message.toolCallId)) != null ? _b3 : getString2(message.tool_call_id)) != null ? _c2 : getString2(message.id)) != null ? _d : getString2(entry.raw.toolCallId)) != null ? _e2 : getString2(entry.raw.tool_call_id)) != null ? _f2 : getString2(entry.raw.id); +} +function applyToolResult(messages, entry) { + var _a5, _b3, _c2, _d; + const toolCallId = getToolResultCallId(entry); + if (!toolCallId) { + return; + } + for (let index = messages.length - 1; index >= 0; index--) { + const chatMessage = messages[index]; + const toolCall = (_a5 = chatMessage.toolCalls) == null ? void 0 : _a5.find((call) => call.id === toolCallId); + if (!toolCall) { + continue; + } + const resultMessage = (_b3 = entry.message) != null ? _b3 : entry.raw; + toolCall.status = resultMessage.error === true || resultMessage.isError === true ? "error" : "completed"; + toolCall.result = extractPiToolTextContent((_d = (_c2 = resultMessage.result) != null ? _c2 : resultMessage.content) != null ? _d : resultMessage.output); + if (toolCall.status === "completed" && isWriteEditTool(toolCall.name)) { + const diffData = extractDiffData(resultMessage, toolCall); + if (diffData) { + toolCall.diffData = diffData; + } + } + return; + } +} +function inferMessageRecord(record2) { + return getString2(record2.role) ? record2 : void 0; +} +function inferRole(type) { + if (type === "user" || type === "assistant") { + return type; + } + return null; +} +function extractTextContent2(value) { + if (typeof value === "string") { + return value; + } + if (Array.isArray(value)) { + return value.map(extractTextContent2).filter(Boolean).join(""); + } + if (!isPlainObject10(value)) { + return ""; + } + if (typeof value.text === "string") { + return value.text; + } + if (typeof value.content === "string") { + return value.content; + } + return ""; +} +function findSessionFileInRoot(root, sessionId) { + try { + const entries = fs24.readdirSync(root, { withFileTypes: true }); + for (const entry of entries) { + const candidate = path22.join(root, entry.name); + if (entry.isDirectory()) { + const nested = findSessionFileInRoot(candidate, sessionId); + if (nested) { + return nested; + } + } else if (entry.isFile() && entry.name.endsWith(".jsonl") && entry.name.includes(sessionId)) { + return candidate; + } + } + } catch (e2) { + return null; + } + return null; +} +function fileExists(filePath) { + try { + return fs24.existsSync(filePath) && fs24.statSync(filePath).isFile(); + } catch (e2) { + return false; + } +} +function getTimestamp(value) { + if (typeof value === "number" && Number.isFinite(value)) { + return value; + } + if (typeof value === "string") { + const parsed = Date.parse(value); + if (!Number.isNaN(parsed)) { + return parsed; + } + } + return Date.now(); +} +function getRecord(value) { + return isPlainObject10(value) ? value : null; +} +function getString2(value) { + return typeof value === "string" && value.trim() ? value.trim() : null; +} +function isPlainObject10(value) { + return value !== null && typeof value === "object" && !Array.isArray(value); +} + +// src/providers/pi/normalizations/piEventNormalization.ts +function createPiEventNormalizationState() { + return { + emittedToolIds: /* @__PURE__ */ new Set(), + toolOutputs: /* @__PURE__ */ new Map() + }; +} +function normalizePiRpcEvent(event, state) { + var _a5, _b3, _c2; + switch (event.type) { + case "agent_start": + return []; + case "message_update": + return normalizeMessageUpdate(event); + case "toolcall_end": + return normalizeToolUse((_a5 = getNestedRecord(event, "toolCall")) != null ? _a5 : event, state); + case "tool_execution_start": + return normalizeToolUse((_b3 = getNestedRecord(event, "toolCall")) != null ? _b3 : event, state); + case "tool_execution_update": + return normalizeToolOutput(event, state); + case "tool_execution_end": + return normalizeToolResult(event, state); + case "message_end": + case "turn_end": + return normalizeTerminalError(event); + case "compaction_end": + return [{ type: "context_compacted" }]; + case "auto_retry_start": + return [{ type: "notice", content: "Pi is retrying the turn.", level: "warning" }]; + case "auto_retry_end": + return [{ type: "notice", content: "Pi retry finished.", level: "info" }]; + case "extension_error": + return [{ type: "notice", content: (_c2 = getString3(event.error)) != null ? _c2 : "Pi extension error.", level: "warning" }]; + default: + return []; + } +} +function getPiTerminalErrorMessage(event) { + var _a5, _b3, _c2, _d; + if (event.type !== "message_end" && event.type !== "turn_end") { + return null; + } + const terminalEvent = (_b3 = (_a5 = getNestedRecord(event, "assistantMessageEvent")) != null ? _a5 : getNestedRecord(event, "assistant_message_event")) != null ? _b3 : event; + const records = terminalEvent === event ? [event] : [terminalEvent, event]; + const stopReason = getStringField(records, ["stopReason", "stop_reason"]); + if ((stopReason == null ? void 0 : stopReason.toLowerCase()) !== "error") { + return null; + } + return (_d = (_c2 = getStringField(records, ["errorMessage", "error_message", "error", "message"])) != null ? _c2 : getNestedStringField(records, "error", ["message"])) != null ? _d : "Pi turn failed."; +} +function normalizeMessageUpdate(event) { + var _a5, _b3, _c2, _d, _e2, _f2; + const assistantEvent = (_b3 = (_a5 = getNestedRecord(event, "assistantMessageEvent")) != null ? _a5 : getNestedRecord(event, "assistant_message_event")) != null ? _b3 : event; + const textDelta = (_d = (_c2 = getString3(assistantEvent.text_delta)) != null ? _c2 : getString3(assistantEvent.textDelta)) != null ? _d : assistantEvent.type === "text_delta" ? getString3(assistantEvent.delta) : null; + if (textDelta) { + return [{ type: "text", content: textDelta }]; + } + const thinkingDelta = (_f2 = (_e2 = getString3(assistantEvent.thinking_delta)) != null ? _e2 : getString3(assistantEvent.thinkingDelta)) != null ? _f2 : assistantEvent.type === "thinking_delta" ? getString3(assistantEvent.delta) : null; + if (thinkingDelta) { + return [{ type: "thinking", content: thinkingDelta }]; + } + return []; +} +function normalizeTerminalError(event) { + const message = getPiTerminalErrorMessage(event); + return message ? [{ type: "error", content: message }] : []; +} +function normalizeToolUse(event, state) { + var _a5, _b3; + const id = getPiToolId(event); + if (!id || state.emittedToolIds.has(id)) { + return []; + } + state.emittedToolIds.add(id); + const name = getPiToolName(event); + return [{ + type: "tool_use", + id, + input: normalizePiToolInput((_b3 = (_a5 = event.input) != null ? _a5 : event.arguments) != null ? _b3 : event.args, name), + name + }]; +} +function normalizeToolOutput(event, state) { + var _a5, _b3, _c2; + const id = getPiToolId(event); + if (!id) { + return []; + } + const content = extractPiToolTextContent((_c2 = (_b3 = (_a5 = event.partialResult) != null ? _a5 : event.output) != null ? _b3 : event.result) != null ? _c2 : event.content); + if (!content) { + return []; + } + state.toolOutputs.set(id, content); + return [{ type: "tool_output", id, content }]; +} +function normalizeToolResult(event, state) { + var _a5, _b3; + const id = getPiToolId(event); + if (!id) { + return []; + } + const content = extractPiToolTextContent((_b3 = (_a5 = event.result) != null ? _a5 : event.output) != null ? _b3 : event.content) || state.toolOutputs.get(id) || ""; + const toolUseResult = getNestedRecord(event, "result"); + return [{ + type: "tool_result", + content, + id, + isError: event.isError === true || event.error === true || event.success === false, + ...toolUseResult ? { toolUseResult } : {} + }]; +} +function getNestedRecord(event, key) { + const value = event[key]; + return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null; +} +function getString3(value) { + return typeof value === "string" ? value : null; +} +function getStringField(records, keys) { + for (const record2 of records) { + for (const key of keys) { + const value = getString3(record2[key]); + if (value) { + return value; + } + } + } + return null; +} +function getNestedStringField(records, parentKey, keys) { + for (const record2 of records) { + const nested = getNestedRecord(record2, parentKey); + if (!nested) { + continue; + } + const value = getStringField([nested], keys); + if (value) { + return value; + } + } + return null; +} + +// src/providers/pi/types.ts +function getPiState(value) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return {}; + } + const record2 = value; + const forkSource = getPiForkSource(record2.forkSource); + return { + ...forkSource ? { forkSource } : {}, + ...typeof record2.forkSourceSessionFile === "string" && record2.forkSourceSessionFile.trim() ? { forkSourceSessionFile: record2.forkSourceSessionFile.trim() } : {}, + ...typeof record2.leafEntryId === "string" && record2.leafEntryId.trim() ? { leafEntryId: record2.leafEntryId.trim() } : {}, + ...typeof record2.parentSession === "string" && record2.parentSession.trim() ? { parentSession: record2.parentSession.trim() } : {}, + ...typeof record2.sessionFile === "string" && record2.sessionFile.trim() ? { sessionFile: record2.sessionFile.trim() } : {}, + ...typeof record2.sessionId === "string" && record2.sessionId.trim() ? { sessionId: record2.sessionId.trim() } : {} + }; +} +function buildPersistedPiState(state) { + const persisted = { + ...state.forkSource ? { forkSource: state.forkSource } : {}, + ...state.forkSourceSessionFile ? { forkSourceSessionFile: state.forkSourceSessionFile } : {}, + ...state.leafEntryId ? { leafEntryId: state.leafEntryId } : {}, + ...state.parentSession ? { parentSession: state.parentSession } : {}, + ...state.sessionFile ? { sessionFile: state.sessionFile } : {}, + ...state.sessionId ? { sessionId: state.sessionId } : {} + }; + return Object.keys(persisted).length > 0 ? persisted : void 0; +} +function getPiForkSource(value) { + if (!value || typeof value !== "object" || Array.isArray(value)) { + return void 0; + } + const record2 = value; + const sessionId = typeof record2.sessionId === "string" ? record2.sessionId.trim() : ""; + const resumeAt = typeof record2.resumeAt === "string" ? record2.resumeAt.trim() : ""; + return sessionId && resumeAt ? { resumeAt, sessionId } : void 0; +} + +// src/providers/pi/runtime/buildPiPrompt.ts +function buildPiPromptText(request, conversationHistory = []) { + let prompt = request.text; + if (request.currentNotePath) { + prompt = appendCurrentNote(prompt, request.currentNotePath); + } + if (request.editorSelection && request.editorSelection.mode !== "none") { + prompt = appendEditorContext(prompt, request.editorSelection); + } + if (request.browserSelection) { + prompt = appendBrowserContext(prompt, request.browserSelection); + } + if (request.canvasSelection) { + prompt = appendCanvasContext(prompt, request.canvasSelection); + } + if (conversationHistory.length > 0) { + const historyContext = buildContextFromHistory(conversationHistory); + prompt = buildPromptWithHistoryContext( + historyContext, + prompt, + prompt, + conversationHistory + ); + } + return prompt; +} +function buildPiPromptImages(images) { + return (images != null ? images : []).flatMap((image) => { + if (!image.data) { + return []; + } + return [{ + data: image.data, + mimeType: image.mediaType, + type: "image" + }]; + }); +} + +// src/providers/pi/runtime/buildPiUsageInfo.ts +function buildPiUsageInfo(response, model, fallbackContextWindow = 2e5) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m, _n; + const stats = getRecord2(response); + const contextUsage = getRecord2((_b3 = (_a5 = stats.contextUsage) != null ? _a5 : stats.context_usage) != null ? _b3 : stats); + const providerContextWindow = (_d = (_c2 = getNumber2(contextUsage.contextWindow)) != null ? _c2 : getNumber2(contextUsage.context_window)) != null ? _d : getNumber2(contextUsage.window); + const contextWindow = providerContextWindow != null ? providerContextWindow : fallbackContextWindow; + const contextTokens = (_h2 = (_g = (_f2 = (_e2 = getNumber2(contextUsage.contextTokens)) != null ? _e2 : getNumber2(contextUsage.context_tokens)) != null ? _f2 : getNumber2(contextUsage.tokens)) != null ? _g : getNumber2(contextUsage.used)) != null ? _h2 : 0; + const inputTokens = (_j = (_i = getNumber2(contextUsage.inputTokens)) != null ? _i : getNumber2(contextUsage.input_tokens)) != null ? _j : contextTokens; + if (contextTokens === 0 && inputTokens === 0) { + return null; + } + return { + cacheCreationInputTokens: (_l2 = (_k3 = getNumber2(contextUsage.cacheCreationInputTokens)) != null ? _k3 : getNumber2(contextUsage.cache_creation_input_tokens)) != null ? _l2 : 0, + cacheReadInputTokens: (_n = (_m = getNumber2(contextUsage.cacheReadInputTokens)) != null ? _m : getNumber2(contextUsage.cache_read_input_tokens)) != null ? _n : 0, + contextTokens, + contextWindow, + contextWindowIsAuthoritative: providerContextWindow !== null, + inputTokens, + ...model ? { model } : {}, + percentage: normalizePiUsagePercentage( + getNumber2(contextUsage.percentage), + contextTokens, + contextWindow + ) + }; +} +function normalizePiUsagePercentage(providerPercentage, contextTokens, contextWindow) { + const rawPercentage = providerPercentage != null ? providerPercentage : contextWindow > 0 ? contextTokens / contextWindow * 100 : 0; + const wholePercentage = providerPercentage !== null && rawPercentage >= 0 && rawPercentage <= 1 ? rawPercentage * 100 : rawPercentage; + return Math.min(100, Math.max(0, Math.round(wholePercentage))); +} +function getRecord2(value) { + return value !== null && typeof value === "object" && !Array.isArray(value) ? value : {}; +} +function getNumber2(value) { + return typeof value === "number" && Number.isFinite(value) ? value : null; +} + +// src/providers/pi/runtime/PiExtensionUiBridge.ts +var PiExtensionUiBridge = class { + constructor(transport, renderer, emit) { + this.transport = transport; + this.renderer = renderer; + this.emit = emit; + this.pending = /* @__PURE__ */ new Map(); + } + handleRequest(request) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j; + if (request.type !== "extension_ui_request") { + return false; + } + const method = (_b3 = (_a5 = getString4(request.method)) != null ? _a5 : getString4(request.action)) != null ? _b3 : getString4(request.uiType); + switch (method) { + case "select": + this.handleDialog(request, (renderer, signal) => renderer.select(requireDialogRequest(request), signal)); + return true; + case "confirm": + this.handleDialog(request, (renderer, signal) => renderer.confirm(requireDialogRequest(request), signal)); + return true; + case "input": + this.handleDialog(request, (renderer, signal) => renderer.input(requireDialogRequest(request), signal)); + return true; + case "editor": + this.handleDialog(request, (renderer, signal) => renderer.editor(requireDialogRequest(request), signal)); + return true; + case "notify": + (_c2 = this.renderer) == null ? void 0 : _c2.notify(request); + (_f2 = this.emit) == null ? void 0 : _f2.call(this, { + type: "notice", + content: (_e2 = (_d = getString4(request.message)) != null ? _d : getString4(request.title)) != null ? _e2 : "Pi extension notification.", + level: "info" + }); + return true; + case "setStatus": + case "set_status": + (_g = this.renderer) == null ? void 0 : _g.setStatus(request); + return true; + case "setWidget": + case "set_widget": + (_h2 = this.renderer) == null ? void 0 : _h2.setWidget(request); + return true; + case "setTitle": + case "set_title": + (_i = this.renderer) == null ? void 0 : _i.setTitle(request); + return true; + case "setEditorText": + case "set_editor_text": + (_j = this.renderer) == null ? void 0 : _j.setEditorText(request); + return true; + default: + this.sendCancellation(request); + return true; + } + } + cleanup() { + for (const [id, controller] of this.pending) { + controller.abort(); + this.sendResponse(id, { cancelled: true }); + } + this.pending.clear(); + } + handleDialog(request, render) { + const id = getString4(request.id); + if (!id || !this.renderer) { + this.sendCancellation(request); + return; + } + const controller = new AbortController(); + this.pending.set(id, controller); + render(this.renderer, controller.signal).then((response) => { + if (!controller.signal.aborted) { + this.sendResponse(id, response.cancelled ? { cancelled: true } : response); + } + }).catch(() => { + if (!controller.signal.aborted) { + this.sendResponse(id, { cancelled: true }); + } + }).finally(() => { + this.pending.delete(id); + }); + } + sendCancellation(request) { + const id = getString4(request.id); + if (id) { + this.sendResponse(id, { cancelled: true }); + } + } + sendResponse(id, response) { + this.transport.send({ + id, + type: "extension_ui_response", + ...response + }); + } +}; +function requireDialogRequest(request) { + return request; +} +function getString4(value) { + return typeof value === "string" && value.trim() ? value.trim() : null; +} + +// src/providers/pi/runtime/PiRpcPayloads.ts +function buildPiSetModelPayload(model) { + const decoded = decodePiModelId(model); + if (!decoded) { + return null; + } + return { + modelId: decoded.modelId, + provider: decoded.provider + }; +} + +// src/providers/pi/runtime/PiChatRuntime.ts +var StreamChunkQueue2 = class { + constructor() { + this.closed = false; + this.items = []; + this.waiters = []; + } + push(chunk) { + if (this.closed) { + return; + } + const waiter = this.waiters.shift(); + if (waiter) { + waiter(chunk); + return; + } + this.items.push(chunk); + } + close() { + var _a5; + if (this.closed) { + return; + } + this.closed = true; + while (this.waiters.length > 0) { + (_a5 = this.waiters.shift()) == null ? void 0 : _a5(null); + } + } + async next() { + var _a5; + if (this.items.length > 0) { + return (_a5 = this.items.shift()) != null ? _a5 : null; + } + if (this.closed) { + return null; + } + return new Promise((resolve8) => { + this.waiters.push(resolve8); + }); + } +}; +var PiChatRuntime = class { + constructor(plugin, options = {}) { + this.plugin = plugin; + this.options = options; + this.providerId = "pi"; + this.activeTurn = null; + this.currentLaunchKey = null; + this.currentModel = null; + this.currentSessionTarget = null; + this.currentThinkingLevel = null; + this.currentTurnMetadata = {}; + this.extensionBridge = null; + this.leafEntryId = null; + this.parentSession = null; + this.pendingFork = null; + this.pendingForkSourceSessionFile = null; + this.process = null; + this.ready = false; + this.readyListeners = /* @__PURE__ */ new Set(); + this.sessionFile = null; + this.sessionId = null; + this.sessionInvalidated = false; + this.supportedCommands = []; + this.shutdownPromise = null; + this.transport = null; + this.unregisterTransportClose = null; + this.normalizationState = createPiEventNormalizationState(); + } + getCapabilities() { + return PI_PROVIDER_CAPABILITIES; + } + prepareTurn(request) { + var _a5; + const isCompact = isCompactCommand3(request.text); + return { + isCompact, + mcpMentions: (_a5 = request.enabledMcpServers) != null ? _a5 : /* @__PURE__ */ new Set(), + persistedContent: "", + prompt: buildPiPromptText(request), + request + }; + } + onReadyStateChange(listener) { + this.readyListeners.add(listener); + return () => { + this.readyListeners.delete(listener); + }; + } + setResumeCheckpoint(_checkpointId) { + } + syncConversationState(conversation) { + var _a5, _b3, _c2, _d, _e2, _f2; + if (!conversation) { + this.sessionId = null; + this.sessionFile = null; + this.leafEntryId = null; + this.parentSession = null; + this.pendingFork = null; + this.pendingForkSourceSessionFile = null; + this.sessionInvalidated = false; + return; + } + const state = getPiState(conversation.providerState); + if (state.forkSource && !state.sessionId && !state.sessionFile && !conversation.sessionId) { + this.sessionId = null; + this.sessionFile = null; + this.leafEntryId = null; + this.parentSession = null; + this.pendingFork = state.forkSource; + this.pendingForkSourceSessionFile = (_a5 = state.forkSourceSessionFile) != null ? _a5 : null; + this.sessionInvalidated = false; + return; + } + this.sessionId = (_c2 = (_b3 = state.sessionId) != null ? _b3 : conversation.sessionId) != null ? _c2 : null; + this.sessionFile = (_d = state.sessionFile) != null ? _d : null; + this.leafEntryId = (_e2 = state.leafEntryId) != null ? _e2 : null; + this.parentSession = (_f2 = state.parentSession) != null ? _f2 : null; + this.pendingFork = null; + this.pendingForkSourceSessionFile = null; + this.sessionInvalidated = false; + } + async reloadMcpServers() { + } + async ensureReady(options) { + var _a5, _b3, _c2, _d; + const settings11 = getPiProviderSettings(this.plugin.settings); + if (!settings11.enabled) { + this.setReady(false); + return false; + } + const allowSessionCreation = (options == null ? void 0 : options.allowSessionCreation) !== false; + const cwd = (_a5 = getVaultPath(this.plugin.app)) != null ? _a5 : process.cwd(); + const resolvedCliPath = (_b3 = this.plugin.getResolvedProviderCliPath("pi")) != null ? _b3 : "pi"; + const runtimeEnvText = getRuntimeEnvironmentText(this.plugin.settings, "pi"); + if (allowSessionCreation) { + await this.materializePendingFork(cwd, runtimeEnvText); + } + const hasSessionTarget = Boolean(this.sessionId || this.sessionFile); + const promptSettings = this.getSystemPromptSettings(cwd); + const systemPrompt = buildSystemPrompt(promptSettings); + const noSession = !allowSessionCreation && !hasSessionTarget; + const launchSpec = buildPiLaunchSpec({ + command: resolvedCliPath, + cwd, + env: this.buildRuntimeEnv(runtimeEnvText), + envText: runtimeEnvText, + noSession, + providerState: this.getCurrentProviderState(), + settings: settings11, + systemPrompt + }); + const sessionTarget = (_d = (_c2 = this.sessionFile) != null ? _c2 : this.sessionId) != null ? _d : null; + const nextLaunchKey = JSON.stringify({ + command: resolvedCliPath, + cwd, + envText: runtimeEnvText, + noSession, + promptKey: computeSystemPromptKey(promptSettings), + systemPrompt, + toolMode: settings11.toolMode + }); + const sessionTargetChanged = sessionTarget !== this.currentSessionTarget; + const canSwitchSessionTarget = sessionTargetChanged && this.isSwitchableSessionFile(this.sessionFile); + const unSwitchableSessionTargetChanged = sessionTargetChanged && !canSwitchSessionTarget; + const shouldRestart = !this.process || !this.transport || !this.process.isAlive() || this.transport.isClosed || (options == null ? void 0 : options.force) === true || this.currentLaunchKey !== nextLaunchKey || unSwitchableSessionTargetChanged; + if (shouldRestart) { + await this.shutdownProcess(); + await this.startProcess(launchSpec); + this.currentLaunchKey = nextLaunchKey; + this.currentSessionTarget = sessionTarget; + } else if (canSwitchSessionTarget && this.sessionFile) { + await this.switchSession(this.sessionFile, launchSpec, nextLaunchKey); + } + if (allowSessionCreation || hasSessionTarget) { + await this.refreshStateAndSessionTarget(); + } + this.setReady(true); + return true; + } + async *query(turn, conversationHistory, queryOptions) { + var _a5, _b3; + this.currentTurnMetadata = {}; + let isReady; + try { + isReady = await this.ensureReady(); + } catch (error48) { + yield { type: "error", content: this.formatRuntimeError(error48) }; + yield { type: "done" }; + return; + } + if (!isReady) { + yield { type: "error", content: "Failed to start Pi. Check the CLI path and login state." }; + yield { type: "done" }; + return; + } + if (!this.transport) { + yield { type: "error", content: "Pi runtime is not ready." }; + yield { type: "done" }; + return; + } + const activeTurn = this.createActiveTurn(); + this.activeTurn = activeTurn; + this.normalizationState = createPiEventNormalizationState(); + const shouldBootstrapHistory = ((_a5 = conversationHistory == null ? void 0 : conversationHistory.length) != null ? _a5 : 0) > 0 && !this.sessionId && !this.sessionFile; + const promptText = buildPiPromptText( + turn.request, + shouldBootstrapHistory ? conversationHistory : [] + ); + const images = buildPiPromptImages(turn.request.images); + const runTurn = this.runTurn( + activeTurn, + turn, + promptText, + images, + queryOptions + ); + try { + while (true) { + const chunk = await activeTurn.queue.next(); + if (!chunk) { + break; + } + yield chunk; + } + await runTurn; + } finally { + if (this.activeTurn === activeTurn) { + (_b3 = this.transport) == null ? void 0 : _b3.send({ type: "abort" }); + activeTurn.cancel(new Error("Pi turn cancelled")); + activeTurn.queue.close(); + this.activeTurn = null; + void this.shutdownProcess(); + } + } + } + async steer(turn) { + var _a5; + if (!this.transport || this.transport.isClosed) { + return false; + } + try { + const images = buildPiPromptImages(turn.request.images); + await this.transport.request("steer", { + ...images.length > 0 ? { images } : {}, + message: buildPiPromptText(turn.request) + }); + (_a5 = this.activeTurn) == null ? void 0 : _a5.queue.push({ + type: "user_message_start", + content: turn.request.text + }); + return true; + } catch (e2) { + return false; + } + } + cancel() { + var _a5; + (_a5 = this.transport) == null ? void 0 : _a5.send({ type: "abort" }); + } + resetSession() { + this.sessionInvalidated = true; + this.sessionId = null; + this.sessionFile = null; + this.leafEntryId = null; + this.parentSession = null; + this.pendingFork = null; + this.pendingForkSourceSessionFile = null; + this.currentSessionTarget = null; + if (this.transport && !this.transport.isClosed) { + void this.transport.request("new_session").then((response) => { + var _a5, _b3; + this.applyStateResponse(response); + this.currentSessionTarget = (_b3 = (_a5 = this.sessionFile) != null ? _a5 : this.sessionId) != null ? _b3 : null; + }).catch(() => { + }); + } + } + getSessionId() { + return this.sessionId; + } + consumeSessionInvalidation() { + const invalidated = this.sessionInvalidated; + this.sessionInvalidated = false; + return invalidated; + } + isReady() { + return this.ready; + } + async getSupportedCommands() { + if (this.supportedCommands.length > 0) { + return [...this.supportedCommands]; + } + if (!this.transport || this.transport.isClosed) { + return []; + } + try { + const response = await this.transport.request("get_commands", {}, 1e4); + this.supportedCommands = normalizePiRuntimeCommands(response); + return [...this.supportedCommands]; + } catch (e2) { + return []; + } + } + getAuxiliaryModel() { + return this.currentModel; + } + cleanup() { + var _a5, _b3; + (_a5 = this.activeTurn) == null ? void 0 : _a5.queue.close(); + (_b3 = this.extensionBridge) == null ? void 0 : _b3.cleanup(); + void this.shutdownProcess(); + } + async rewind(_userMessageId, _assistantMessageId, _mode) { + return { canRewind: false }; + } + setApprovalCallback(_callback) { + } + setApprovalDismisser(_dismisser) { + } + setAskUserQuestionCallback(_callback) { + } + setExitPlanModeCallback(_callback) { + } + setPermissionModeSyncCallback(_callback) { + } + setSubagentHookProvider(_getState) { + } + setAutoTurnCallback(_callback) { + } + consumeTurnMetadata() { + const metadata = this.currentTurnMetadata; + this.currentTurnMetadata = {}; + return metadata; + } + buildSessionUpdates(params) { + const providerState = buildPersistedPiState(this.getCurrentProviderState()); + const updates = { + providerState, + sessionId: this.sessionId + }; + if (params.sessionInvalidated && !this.sessionId) { + updates.providerState = void 0; + updates.sessionId = null; + } + return { updates }; + } + resolveSessionIdForFork(conversation) { + var _a5, _b3, _c2, _d, _e2, _f2, _g; + const state = getPiState(conversation == null ? void 0 : conversation.providerState); + return (_g = (_f2 = (_d = (_c2 = (_b3 = (_a5 = this.sessionFile) != null ? _a5 : this.sessionId) != null ? _b3 : state.sessionFile) != null ? _c2 : state.sessionId) != null ? _d : conversation == null ? void 0 : conversation.sessionId) != null ? _f2 : (_e2 = state.forkSource) == null ? void 0 : _e2.sessionId) != null ? _g : null; + } + async loadSubagentToolCalls(_agentId) { + return []; + } + async loadSubagentFinalResult(_agentId) { + return null; + } + createActiveTurn() { + let terminalSettled = false; + let resolveTerminal; + let rejectTerminal; + const terminalPromise = new Promise((resolve8, reject) => { + resolveTerminal = () => { + if (terminalSettled) { + return; + } + terminalSettled = true; + resolve8(); + }; + rejectTerminal = (error48) => { + if (terminalSettled) { + return; + } + terminalSettled = true; + reject(error48); + }; + }); + terminalPromise.catch(() => { + }); + const activeTurn = { + cancel: (error48) => { + activeTurn.cancelled = true; + rejectTerminal(error48); + }, + cancelled: false, + queue: new StreamChunkQueue2(), + rejectTerminal, + resolveTerminal, + terminalPromise + }; + return activeTurn; + } + async runTurn(activeTurn, turn, promptText, images, queryOptions) { + try { + const turnStartLeafId = await this.resolveCurrentLeafEntryId(); + await this.applySelectedModel(queryOptions); + await this.applySelectedThinkingLevel(queryOptions); + if (activeTurn.cancelled) { + throw new Error("Pi turn cancelled"); + } + if (turn.isCompact) { + await this.transport.request("compact", { + customInstructions: stripCompactCommand(turn.request.text) + }); + this.currentTurnMetadata.wasSent = true; + activeTurn.queue.push({ type: "context_compacted" }); + } else { + activeTurn.queue.push({ + type: "user_message_start", + content: turn.request.text + }); + await this.transport.request("prompt", { + ...images.length > 0 ? { images } : {}, + message: promptText + }); + this.currentTurnMetadata.wasSent = true; + await activeTurn.terminalPromise; + } + await this.refreshStateAndSessionTarget(); + await this.updateTurnMetadataFromSessionFile(turnStartLeafId); + const usage = await this.fetchUsage(queryOptions).catch(() => null); + if (usage) { + activeTurn.queue.push({ sessionId: this.sessionId, type: "usage", usage }); + } + activeTurn.queue.push({ type: "done" }); + } catch (error48) { + activeTurn.queue.push({ + type: "error", + content: this.formatRuntimeError(error48) + }); + activeTurn.queue.push({ type: "done" }); + } finally { + activeTurn.queue.close(); + if (this.activeTurn === activeTurn) { + this.activeTurn = null; + } + } + } + async startProcess(launchSpec) { + var _a5; + this.process = new PiSubprocess(launchSpec); + this.process.start(); + this.transport = new PiRpcTransport({ + input: this.process.stdout, + onClose: (listener) => this.process.onClose(listener), + output: this.process.stdin + }); + this.transport.start(); + this.extensionBridge = new PiExtensionUiBridge( + this.transport, + (_a5 = this.options.extensionUiRenderer) != null ? _a5 : null, + (chunk) => { + var _a6; + return (_a6 = this.activeTurn) == null ? void 0 : _a6.queue.push(chunk); + } + ); + this.transport.onEvent((event) => this.handleRpcEvent(event)); + this.unregisterTransportClose = this.transport.onClose((error48) => { + var _a6, _b3; + this.setReady(false); + (_a6 = this.extensionBridge) == null ? void 0 : _a6.cleanup(); + (_b3 = this.activeTurn) == null ? void 0 : _b3.rejectTerminal(error48 != null ? error48 : new Error("Pi runtime closed")); + }); + this.setReady(true); + } + async shutdownProcess() { + if (this.shutdownPromise) { + return this.shutdownPromise; + } + this.shutdownPromise = this.doShutdownProcess().finally(() => { + this.shutdownPromise = null; + }); + return this.shutdownPromise; + } + async doShutdownProcess() { + var _a5, _b3, _c2, _d, _e2; + this.setReady(false); + (_a5 = this.activeTurn) == null ? void 0 : _a5.cancel(new Error("Pi runtime stopped")); + (_b3 = this.activeTurn) == null ? void 0 : _b3.queue.close(); + this.activeTurn = null; + (_c2 = this.extensionBridge) == null ? void 0 : _c2.cleanup(); + this.extensionBridge = null; + (_d = this.unregisterTransportClose) == null ? void 0 : _d.call(this); + this.unregisterTransportClose = null; + (_e2 = this.transport) == null ? void 0 : _e2.dispose(); + this.transport = null; + const process4 = this.process; + this.process = null; + this.currentModel = null; + this.currentSessionTarget = null; + this.currentThinkingLevel = null; + if (process4) { + await process4.shutdown().catch(() => { + }); + } + this.supportedCommands = []; + } + handleRpcEvent(event) { + var _a5, _b3, _c2, _d, _e2, _f2; + if ((_a5 = this.extensionBridge) == null ? void 0 : _a5.handleRequest(event)) { + return; + } + if (event.type === "agent_end") { + (_b3 = this.activeTurn) == null ? void 0 : _b3.resolveTerminal(); + return; + } + if (event.type === "error") { + (_c2 = this.activeTurn) == null ? void 0 : _c2.queue.push({ + type: "error", + content: typeof event.error === "string" ? event.error : "Pi runtime error." + }); + (_d = this.activeTurn) == null ? void 0 : _d.resolveTerminal(); + return; + } + const state = this.getNormalizationState(); + const chunks = normalizePiRpcEvent(event, state); + for (const chunk of chunks) { + (_e2 = this.activeTurn) == null ? void 0 : _e2.queue.push(chunk); + } + if (getPiTerminalErrorMessage(event)) { + (_f2 = this.activeTurn) == null ? void 0 : _f2.resolveTerminal(); + } + } + getNormalizationState() { + if (!this.activeTurn) { + this.normalizationState = createPiEventNormalizationState(); + return this.normalizationState; + } + return this.normalizationState; + } + async applySelectedModel(queryOptions) { + if (!this.transport) { + return; + } + const selectedModel = this.resolveSelectedModel(this.getProviderSettings(), queryOptions); + const payload = selectedModel ? buildPiSetModelPayload(selectedModel) : null; + if (!payload || this.currentModel === selectedModel) { + return; + } + await this.transport.request("set_model", payload); + this.currentModel = selectedModel; + this.currentThinkingLevel = null; + } + async applySelectedThinkingLevel(queryOptions) { + if (!this.transport) { + return; + } + const providerSettings = this.getProviderSettings(); + const selectedThinkingLevel = this.resolveSelectedThinkingLevel(providerSettings, queryOptions); + if (!selectedThinkingLevel || this.currentThinkingLevel === selectedThinkingLevel) { + return; + } + await this.transport.request("set_thinking_level", { + level: selectedThinkingLevel + }); + this.currentThinkingLevel = selectedThinkingLevel; + } + async refreshState() { + if (!this.transport || this.transport.isClosed) { + return; + } + const response = await this.transport.request("get_state", {}, 1e4); + this.applyStateResponse(response); + } + async refreshStateAndSessionTarget() { + var _a5, _b3; + try { + await this.refreshState(); + this.currentSessionTarget = (_b3 = (_a5 = this.sessionFile) != null ? _a5 : this.sessionId) != null ? _b3 : null; + } catch (e2) { + } + } + applyStateResponse(response) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m; + const state = extractStateRecord(response); + this.sessionId = (_d = (_c2 = (_a5 = getString5(state.sessionId)) != null ? _a5 : getString5(state.session_id)) != null ? _c2 : getString5((_b3 = getRecord3(state.session)) == null ? void 0 : _b3.id)) != null ? _d : this.sessionId; + this.sessionFile = (_i = (_h2 = (_g = (_f2 = (_e2 = getString5(state.sessionFile)) != null ? _e2 : getString5(state.session_file)) != null ? _f2 : getString5(state.sessionPath)) != null ? _g : getString5(state.session_path)) != null ? _h2 : getString5(state.path)) != null ? _i : this.sessionFile; + this.leafEntryId = (_k3 = (_j = getString5(state.leafEntryId)) != null ? _j : getString5(state.leaf_entry_id)) != null ? _k3 : this.leafEntryId; + this.parentSession = (_m = (_l2 = getString5(state.parentSession)) != null ? _l2 : getString5(state.parent_session)) != null ? _m : this.parentSession; + } + async fetchUsage(queryOptions) { + var _a5; + if (!this.transport || this.transport.isClosed) { + return null; + } + const providerSettings = this.getProviderSettings(); + const selectedModel = this.resolveSelectedModel(providerSettings, queryOptions); + const fallbackContextWindow = selectedModel ? (_a5 = findPiModel(getPiProviderSettings(providerSettings), selectedModel)) == null ? void 0 : _a5.contextWindow : void 0; + const response = await this.transport.request("get_session_stats", {}, 1e4); + return buildPiUsageInfo(response, selectedModel, fallbackContextWindow); + } + async materializePendingFork(cwd, runtimeEnvText) { + var _a5; + if (!this.pendingFork) { + return; + } + const env = parseEnvironmentVariables(runtimeEnvText); + const sourceSessionFile = (_a5 = this.pendingForkSourceSessionFile) != null ? _a5 : findPiSessionFile( + this.pendingFork.sessionId, + cwd, + typeof env.PI_CODING_AGENT_SESSION_DIR === "string" ? env.PI_CODING_AGENT_SESSION_DIR : null + ); + if (!sourceSessionFile) { + throw new Error(`Pi fork source session not found: ${this.pendingFork.sessionId}`); + } + const forkedSession = await createPiForkSessionFile( + sourceSessionFile, + this.pendingFork.resumeAt, + { targetCwd: cwd } + ); + this.sessionId = forkedSession.sessionId; + this.sessionFile = forkedSession.sessionFile; + this.leafEntryId = forkedSession.leafEntryId; + this.parentSession = forkedSession.parentSession; + this.pendingFork = null; + this.pendingForkSourceSessionFile = null; + this.sessionInvalidated = false; + this.currentSessionTarget = null; + } + async resolveCurrentLeafEntryId() { + if (this.leafEntryId) { + return this.leafEntryId; + } + if (!this.sessionFile) { + return null; + } + try { + const content = await fsp2.readFile(this.sessionFile, "utf-8"); + const entries = parsePiSessionEntries(content).entries; + const activePath = resolvePiActivePath(entries); + const leafEntryId = getLastPiEntryId(activePath); + this.leafEntryId = leafEntryId; + return leafEntryId; + } catch (e2) { + return null; + } + } + async updateTurnMetadataFromSessionFile(previousLeafEntryId) { + var _a5; + if (!this.sessionFile) { + return; + } + try { + const content = await fsp2.readFile(this.sessionFile, "utf-8"); + const entries = parsePiSessionEntries(content).entries; + const activePath = resolvePiActivePath(entries); + if (activePath.length === 0) { + return; + } + this.leafEntryId = (_a5 = getLastPiEntryId(activePath)) != null ? _a5 : this.leafEntryId; + const previousLeafIndex = previousLeafEntryId ? activePath.findIndex((entry) => entry.id === previousLeafEntryId) : -1; + const newEntries = previousLeafIndex >= 0 ? activePath.slice(previousLeafIndex + 1) : activePath; + const userEntry = previousLeafIndex >= 0 ? newEntries.find((entry) => getPiEntryRole(entry) === "user") : findLastPiEntryByRole(newEntries, "user"); + const assistantEntry = findLastPiEntryByRole(newEntries, "assistant"); + if (userEntry == null ? void 0 : userEntry.id) { + this.currentTurnMetadata.userMessageId = userEntry.id; + } + if (assistantEntry == null ? void 0 : assistantEntry.id) { + this.currentTurnMetadata.assistantMessageId = assistantEntry.id; + } + } catch (e2) { + } + } + getSystemPromptSettings(vaultPath) { + return { + customPrompt: this.plugin.settings.systemPrompt, + mediaFolder: this.plugin.settings.mediaFolder, + userName: this.plugin.settings.userName, + vaultPath + }; + } + getProviderSettings() { + return ProviderSettingsCoordinator.getProviderSettingsSnapshot( + this.plugin.settings, + this.providerId + ); + } + resolveSelectedModel(providerSettings, queryOptions) { + const selectedModel = typeof (queryOptions == null ? void 0 : queryOptions.model) === "string" ? queryOptions.model : typeof providerSettings.model === "string" ? providerSettings.model : ""; + if (!selectedModel || selectedModel === PI_SYNTHETIC_MODEL_ID || !decodePiModelId(selectedModel)) { + return null; + } + return selectedModel; + } + resolveSelectedThinkingLevel(providerSettings, queryOptions) { + const selectedModel = this.resolveSelectedModel(providerSettings, queryOptions); + if (!selectedModel) { + return null; + } + const piSettings = getPiProviderSettings(providerSettings); + const selectedThinkingLevel = typeof providerSettings.effortLevel === "string" && providerSettings.effortLevel.trim() ? providerSettings.effortLevel.trim() : piSettings.preferredThinkingByModel[selectedModel]; + const selectedPiModel = findPiModel(piSettings, selectedModel); + if (selectedPiModel) { + return clampPiThinkingLevel(selectedThinkingLevel, selectedPiModel.thinkingLevels); + } + return selectedThinkingLevel != null ? selectedThinkingLevel : null; + } + buildRuntimeEnv(runtimeEnvText) { + return { + ...process.env, + ...parseEnvironmentVariables(runtimeEnvText) + }; + } + getCurrentProviderState() { + if (this.pendingFork) { + return { + forkSource: this.pendingFork, + ...this.pendingForkSourceSessionFile ? { forkSourceSessionFile: this.pendingForkSourceSessionFile } : {} + }; + } + return { + ...this.leafEntryId ? { leafEntryId: this.leafEntryId } : {}, + ...this.parentSession ? { parentSession: this.parentSession } : {}, + ...this.sessionFile ? { sessionFile: this.sessionFile } : {}, + ...this.sessionId ? { sessionId: this.sessionId } : {} + }; + } + setReady(ready) { + if (this.ready === ready) { + return; + } + this.ready = ready; + for (const listener of this.readyListeners) { + listener(ready); + } + } + formatRuntimeError(error48) { + var _a5; + const message = error48 instanceof Error ? error48.message : "Pi request failed"; + const stderr = (_a5 = this.process) == null ? void 0 : _a5.getStderrSnapshot(); + return stderr ? `${message} + +${stderr}` : message; + } + isSwitchableSessionFile(sessionFile) { + return typeof sessionFile === "string" && sessionFile.trim().length > 0 && path23.isAbsolute(sessionFile); + } + async switchSession(sessionFile, launchSpec, nextLaunchKey) { + var _a5, _b3; + try { + await this.transport.request("switch_session", { sessionPath: sessionFile }); + this.currentLaunchKey = nextLaunchKey; + this.currentSessionTarget = sessionFile; + this.sessionInvalidated = false; + } catch (e2) { + await this.shutdownProcess(); + await this.startProcess(launchSpec); + this.currentLaunchKey = nextLaunchKey; + this.currentSessionTarget = (_b3 = (_a5 = this.sessionFile) != null ? _a5 : this.sessionId) != null ? _b3 : null; + } + } +}; +function stripCompactCommand(text) { + return text.trim().replace(/^\/compact(?:\s|$)/i, "").trim(); +} +function isCompactCommand3(text) { + return /^\/compact(\s|$)/i.test(text); +} +function normalizePiRuntimeCommands(response) { + var _a5, _b3; + const records = Array.isArray(response) ? response : Array.isArray(getRecord3(response).commands) ? getRecord3(response).commands : []; + const commands = []; + const seen = /* @__PURE__ */ new Set(); + for (const record2 of records) { + const entry = getRecord3(record2); + const name = (_a5 = getString5(entry.name)) == null ? void 0 : _a5.replace(/^\/+/, ""); + if (!name || seen.has(name.toLowerCase())) { + continue; + } + seen.add(name.toLowerCase()); + const source = getString5(entry.source); + commands.push({ + content: "", + description: (_b3 = getString5(entry.description)) != null ? _b3 : void 0, + id: `pi:${source != null ? source : "runtime"}:${name}`, + kind: source === "skill" ? "skill" : "command", + name, + source: "sdk" + }); + } + return commands; +} +function extractStateRecord(response) { + var _a5, _b3; + const record2 = getRecord3(response); + return getRecord3((_b3 = (_a5 = record2.state) != null ? _a5 : record2.session) != null ? _b3 : response); +} +function getPiEntryRole(entry) { + var _a5; + const message = (_a5 = entry.message) != null ? _a5 : {}; + const role = getString5(message.role); + if (role) { + return role; + } + if (entry.type === "toolResult") { + return "toolResult"; + } + return null; +} +function getLastPiEntryId(entries) { + for (let i = entries.length - 1; i >= 0; i--) { + const id = entries[i].id; + if (id) { + return id; + } + } + return null; +} +function findLastPiEntryByRole(entries, role) { + for (let i = entries.length - 1; i >= 0; i--) { + if (getPiEntryRole(entries[i]) === role) { + return entries[i]; + } + } + return void 0; +} +function getRecord3(value) { + return value !== null && typeof value === "object" && !Array.isArray(value) ? value : {}; +} +function getString5(value) { + return typeof value === "string" && value.trim() ? value.trim() : null; +} + +// src/providers/pi/app/PiRuntimeCommandLoader.ts +var PiRuntimeCommandLoader = class { + isAvailable(settings11) { + return getPiProviderSettings(settings11).enabled; + } + async loadCommands(context) { + var _a5, _b3, _c2; + const persistedState = getPiState((_a5 = context.conversation) == null ? void 0 : _a5.providerState); + const hasPersistedSession = Boolean( + ((_b3 = context.conversation) == null ? void 0 : _b3.sessionId) || persistedState.sessionId || persistedState.sessionFile + ); + const shouldWarmBlankSession = context.allowSessionCreation === true && !context.conversation; + const shouldWarmPreSessionConversation = context.allowSessionCreation === true && !!context.conversation && !hasPersistedSession && context.conversation.messages.length > 0; + if (!hasPersistedSession && !shouldWarmBlankSession && !shouldWarmPreSessionConversation) { + return []; + } + const canReuseRuntime = ((_c2 = context.runtime) == null ? void 0 : _c2.providerId) === "pi" && context.runtime.isReady(); + const runtime = canReuseRuntime ? context.runtime : new PiChatRuntime(context.plugin); + try { + if (canReuseRuntime && context.conversation) { + runtime.syncConversationState(context.conversation, context.externalContextPaths); + } + const ready = await runtime.ensureReady({ + allowSessionCreation: false + }); + if (!ready) { + return []; + } + return await runtime.getSupportedCommands(); + } finally { + if (runtime !== context.runtime) { + runtime.cleanup(); + } + } + } +}; + +// src/providers/pi/app/PiWorkspaceServices.ts +var piTabWarmupPolicy = { + resolveMode() { + return "commands"; + } +}; +async function createPiWorkspaceServices() { + return { + cliResolver: new PiCliResolver(), + commandCatalog: new PiCommandCatalog(), + runtimeCommandLoader: new PiRuntimeCommandLoader(), + settingsTabRenderer: piSettingsTabRenderer, + tabWarmupPolicy: piTabWarmupPolicy + }; +} +var piWorkspaceRegistration = { + initialize: async () => createPiWorkspaceServices() +}; +function maybeGetPiWorkspaceServices() { + return ProviderWorkspaceRegistry.getServices("pi"); +} + +// src/providers/pi/runtime/PiAuxQueryRunner.ts +init_env(); +init_path(); +var PiAuxQueryRunner = class { + constructor(plugin, options) { + this.plugin = plugin; + this.options = options; + this.currentLaunchKey = null; + this.process = null; + this.transport = null; + } + async query(config2, prompt) { + var _a5, _b3, _c2, _d, _e2, _f2; + await this.ensureReady(config2.systemPrompt); + const transport = this.transport; + if (!transport) { + throw new Error("Pi auxiliary runtime is not ready."); + } + const model = this.resolveSelectedModel(config2.model); + if (model) { + const payload = buildPiSetModelPayload(model); + if (payload) { + await transport.request("set_model", payload); + } + } + let accumulatedText = ""; + const normalizationState = createPiEventNormalizationState(); + let terminalSettled = false; + let resolveTerminal; + let rejectTerminal; + const terminalPromise = new Promise((resolve8, reject) => { + resolveTerminal = () => { + if (terminalSettled) { + return; + } + terminalSettled = true; + resolve8(); + }; + rejectTerminal = (error48) => { + if (terminalSettled) { + return; + } + terminalSettled = true; + reject(error48); + }; + }); + terminalPromise.catch(() => { + }); + const removeListener = transport.onEvent((event) => { + var _a6; + if (event.type === "extension_ui_request") { + const id = typeof event.id === "string" && event.id.trim() ? event.id.trim() : ""; + if (id) { + transport.send({ + cancelled: true, + id, + type: "extension_ui_response" + }); + } + return; + } + if (event.type === "agent_end") { + resolveTerminal(); + return; + } + if (event.type === "error") { + rejectTerminal(new Error( + typeof event.error === "string" ? event.error : "Pi auxiliary request failed" + )); + return; + } + for (const chunk of normalizePiRpcEvent(event, normalizationState)) { + if (chunk.type === "error") { + rejectTerminal(new Error(chunk.content)); + continue; + } + if (chunk.type !== "text") { + continue; + } + accumulatedText += chunk.content; + (_a6 = config2.onTextChunk) == null ? void 0 : _a6.call(config2, accumulatedText); + } + }); + const removeCloseListener = transport.onClose((error48) => { + rejectTerminal(error48 != null ? error48 : new Error("Pi auxiliary runtime closed before completion.")); + }); + const abortHandler = () => { + transport.send({ type: "abort" }); + rejectTerminal(new Error("Cancelled")); + }; + (_a5 = config2.abortController) == null ? void 0 : _a5.signal.addEventListener("abort", abortHandler, { once: true }); + try { + if ((_b3 = config2.abortController) == null ? void 0 : _b3.signal.aborted) { + throw new Error("Cancelled"); + } + const promptRequest = transport.request("prompt", { message: prompt }); + promptRequest.catch(() => { + }); + await Promise.race([promptRequest, terminalPromise]); + await terminalPromise; + if ((_c2 = config2.abortController) == null ? void 0 : _c2.signal.aborted) { + throw new Error("Cancelled"); + } + return accumulatedText; + } catch (error48) { + const message = error48 instanceof Error ? error48.message : "Pi request failed"; + const stderr = (_d = this.process) == null ? void 0 : _d.getStderrSnapshot(); + if ((_e2 = config2.abortController) == null ? void 0 : _e2.signal.aborted) { + this.reset(); + } + throw new Error( + stderr ? `${message} + +${stderr}` : message, + error48 instanceof Error ? { cause: error48 } : void 0 + ); + } finally { + (_f2 = config2.abortController) == null ? void 0 : _f2.signal.removeEventListener("abort", abortHandler); + removeCloseListener(); + removeListener(); + } + } + reset() { + var _a5; + this.currentLaunchKey = null; + (_a5 = this.transport) == null ? void 0 : _a5.dispose(); + this.transport = null; + if (this.process) { + void this.process.shutdown().catch(() => { + }); + this.process = null; + } + } + async ensureReady(systemPrompt) { + var _a5, _b3; + const settingsBag = this.plugin.settings; + const settings11 = getPiProviderSettings(settingsBag); + const command = (_a5 = this.plugin.getResolvedProviderCliPath("pi")) != null ? _a5 : "pi"; + const cwd = (_b3 = getVaultPath(this.plugin.app)) != null ? _b3 : process.cwd(); + const envText = getRuntimeEnvironmentText(settingsBag, "pi"); + const env = { + ...process.env, + ...parseEnvironmentVariables(envText) + }; + const launchSpec = buildPiLaunchSpec({ + command, + cwd, + env, + envText, + noSession: true, + noTools: this.options.profile === "passive", + settings: { + ...settings11, + toolMode: this.options.profile === "readonly" ? "readonly" : settings11.toolMode + }, + systemPrompt + }); + if (this.process && this.transport && this.process.isAlive() && !this.transport.isClosed && this.currentLaunchKey === launchSpec.launchKey) { + return; + } + this.reset(); + this.process = new PiSubprocess(launchSpec); + this.process.start(); + this.transport = new PiRpcTransport({ + input: this.process.stdout, + onClose: (listener) => this.process.onClose(listener), + output: this.process.stdin + }); + this.transport.start(); + this.currentLaunchKey = launchSpec.launchKey; + } + resolveSelectedModel(explicitModel) { + if (explicitModel && decodePiModelId(explicitModel)) { + return explicitModel; + } + const projectedSettings = ProviderSettingsCoordinator.getProviderSettingsSnapshot( + this.plugin.settings, + "pi" + ); + const selectedModel = typeof projectedSettings.model === "string" ? projectedSettings.model : ""; + return decodePiModelId(selectedModel) ? selectedModel : void 0; + } +}; + +// src/providers/pi/auxiliary/PiInlineEditService.ts +var PiInlineEditService = class extends QueryBackedInlineEditService { + constructor(plugin) { + super(new PiAuxQueryRunner(plugin, { profile: "readonly" })); + } +}; + +// src/providers/pi/auxiliary/PiInstructionRefineService.ts +var PiInstructionRefineService = class extends QueryBackedInstructionRefineService { + constructor(plugin) { + super(new PiAuxQueryRunner(plugin, { profile: "passive" })); + } +}; + +// src/providers/pi/auxiliary/PiTaskResultInterpreter.ts +var PiTaskResultInterpreter = class { + hasAsyncLaunchMarker(_toolUseResult) { + return false; + } + extractAgentId(_toolUseResult) { + return null; + } + extractStructuredResult(_toolUseResult) { + return null; + } + resolveTerminalStatus(_toolUseResult, fallbackStatus) { + return fallbackStatus; + } + extractTagValue(_payload, _tagName) { + return null; + } +}; + +// src/providers/pi/ui/PiChatUIConfig.ts +var PI_MODELS = [ + { value: PI_SYNTHETIC_MODEL_ID, label: "Pi", description: "Configure models in settings" } +]; +var DEFAULT_PI_REASONING_LEVELS = getPiSupportedThinkingLevels({ reasoning: true }); +var DEFAULT_CONTEXT_WINDOW3 = 2e5; +var PI_PERMISSION_MODE_TOGGLE = { + inactiveValue: "normal", + inactiveLabel: "Read-only", + activeValue: "yolo", + activeLabel: "All tools" +}; +var piChatUIConfig = { + getModelOptions(settings11) { + var _a5, _b3, _c2, _d; + const piSettings = getPiProviderSettings(settings11); + const discoveredModels = new Map(piSettings.discoveredModels.map((model) => [ + model.encodedId, + buildModelOption(model, piSettings.modelAliases[model.encodedId]) + ])); + const savedProviderModel = settings11.savedProviderModel && typeof settings11.savedProviderModel === "object" && !Array.isArray(settings11.savedProviderModel) ? settings11.savedProviderModel : null; + const options = []; + const seen = /* @__PURE__ */ new Set(); + for (const encodedId of piSettings.visibleModels) { + pushOption2( + options, + seen, + encodedId, + (_b3 = discoveredModels.get(encodedId)) != null ? _b3 : { + description: "Configured model", + label: (_a5 = piSettings.modelAliases[encodedId]) != null ? _a5 : formatFallbackLabel(encodedId), + value: encodedId + } + ); + } + const selectedModelValues = [ + typeof settings11.model === "string" ? settings11.model : "", + typeof (savedProviderModel == null ? void 0 : savedProviderModel.pi) === "string" ? savedProviderModel.pi : "" + ]; + for (const model of selectedModelValues) { + if (!model || model === PI_SYNTHETIC_MODEL_ID || !decodePiModelId(model)) { + continue; + } + pushOption2( + options, + seen, + model, + (_d = discoveredModels.get(model)) != null ? _d : { + description: "Selected in an existing session", + label: (_c2 = piSettings.modelAliases[model]) != null ? _c2 : formatFallbackLabel(model), + value: model + } + ); + } + return options.length > 0 ? options : [...PI_MODELS]; + }, + ownsModel(model) { + return model === PI_SYNTHETIC_MODEL_ID || decodePiModelId(model) !== null; + }, + isAdaptiveReasoningModel(model, settings11) { + const piModel = getCachedModel(model, settings11); + if (piModel) { + return piModel.thinkingLevels.some((level) => level !== "off"); + } + return !!decodePiModelId(model); + }, + getReasoningOptions(model, settings11) { + var _a5; + const piModel = getCachedModel(model, settings11); + const levels = (_a5 = piModel == null ? void 0 : piModel.thinkingLevels) != null ? _a5 : decodePiModelId(model) ? DEFAULT_PI_REASONING_LEVELS : ["off"]; + return levels.map((level) => ({ + label: formatThinkingLevelLabel(level), + value: level + })); + }, + getDefaultReasoningValue(model, settings11) { + const piModel = getCachedModel(model, settings11); + if (!piModel) { + return decodePiModelId(model) ? PI_DEFAULT_THINKING_LEVEL : "off"; + } + const piSettings = getPiProviderSettings(settings11); + return clampPiThinkingLevel( + piSettings.preferredThinkingByModel[piModel.encodedId], + piModel.thinkingLevels + ); + }, + getContextWindowSize(model, customLimits, settings11) { + var _a5, _b3; + const metadataContextWindow = settings11 ? (_a5 = getCachedModel(model, settings11)) == null ? void 0 : _a5.contextWindow : void 0; + return (_b3 = metadataContextWindow != null ? metadataContextWindow : customLimits == null ? void 0 : customLimits[model]) != null ? _b3 : DEFAULT_CONTEXT_WINDOW3; + }, + isDefaultModel(model) { + return isPiModelSelectionId(model); + }, + applyModelDefaults(model, settings11) { + if (!settings11 || typeof settings11 !== "object" || Array.isArray(settings11)) { + return; + } + const settingsBag = settings11; + if (!decodePiModelId(model)) { + settingsBag.effortLevel = "off"; + return; + } + settingsBag.model = model; + settingsBag.effortLevel = this.getDefaultReasoningValue(model, settingsBag); + }, + applyReasoningSelection(model, value, settings11) { + var _a5, _b3; + if (!settings11 || typeof settings11 !== "object" || Array.isArray(settings11)) { + return; + } + const settingsBag = settings11; + const piModel = getCachedModel(model, settingsBag); + const encodedId = (_a5 = piModel == null ? void 0 : piModel.encodedId) != null ? _a5 : decodePiModelId(model) ? model : ""; + if (!encodedId) { + return; + } + const supportedLevels = (_b3 = piModel == null ? void 0 : piModel.thinkingLevels) != null ? _b3 : DEFAULT_PI_REASONING_LEVELS; + const nextPreferredThinkingByModel = { + ...getPiProviderSettings(settingsBag).preferredThinkingByModel + }; + const normalizedValue = value; + if (!supportedLevels.includes(normalizedValue)) { + delete nextPreferredThinkingByModel[encodedId]; + } else { + nextPreferredThinkingByModel[encodedId] = normalizedValue; + } + updatePiProviderSettings(settingsBag, { + preferredThinkingByModel: nextPreferredThinkingByModel + }); + }, + normalizeModelVariant(model) { + return decodePiModelId(model) ? model : model; + }, + getCustomModelIds() { + return /* @__PURE__ */ new Set(); + }, + getModeSelector() { + return null; + }, + getPermissionModeToggle() { + return PI_PERMISSION_MODE_TOGGLE; + }, + resolvePermissionMode(settings11) { + return getPiProviderSettings(settings11).toolMode === "readonly" ? "normal" : "yolo"; + }, + applyPermissionMode(value, settings11) { + if (!settings11 || typeof settings11 !== "object" || Array.isArray(settings11)) { + return; + } + const settingsBag = settings11; + settingsBag.permissionMode = value; + updatePiProviderSettings(settingsBag, { + toolMode: value === "normal" ? "readonly" : "all" + }); + }, + getProviderIcon() { + return PI_PROVIDER_ICON; + } +}; +function getCachedModel(model, settings11) { + var _a5; + if (!decodePiModelId(model)) { + return null; + } + return (_a5 = getPiProviderSettings(settings11).discoveredModels.find((entry) => entry.encodedId === model)) != null ? _a5 : null; +} +function buildModelOption(model, alias) { + return { + description: `${model.provider} runtime`, + group: model.provider, + label: alias != null ? alias : model.label, + value: model.encodedId + }; +} +function formatFallbackLabel(encodedId) { + const decoded = decodePiModelId(encodedId); + return decoded ? `${decoded.provider}/${decoded.modelId}` : "Pi"; +} +function formatThinkingLevelLabel(value) { + return value === "xhigh" ? "XHigh" : value.charAt(0).toUpperCase() + value.slice(1); +} +function pushOption2(target, seenValues, value, option) { + if (seenValues.has(value)) { + return; + } + seenValues.add(value); + target.push(option); +} + +// src/providers/pi/auxiliary/PiTitleGenerationService.ts +var PiTitleGenerationService = class extends QueryBackedTitleGenerationService { + constructor(plugin) { + super({ + createRunner: () => new PiAuxQueryRunner(plugin, { profile: "passive" }), + resolveModel: () => { + const settings11 = plugin.settings; + const titleModel = typeof settings11.titleGenerationModel === "string" ? settings11.titleGenerationModel : ""; + return piChatUIConfig.ownsModel(titleModel, settings11) ? titleModel : void 0; + } + }); + } +}; + +// src/providers/pi/env/PiSettingsReconciler.ts +init_env(); +var PI_ENV_HASH_KEYS = [ + "PI_CODING_AGENT_DIR", + "PI_CODING_AGENT_SESSION_DIR", + "PI_PACKAGE_DIR", + "PI_OFFLINE", + "PI_SKIP_VERSION_CHECK", + "PI_TELEMETRY", + "PI_CACHE_RETENTION" +]; +function computePiEnvHash(envText) { + const envVars = parseEnvironmentVariables(envText || ""); + return PI_ENV_HASH_KEYS.filter((key) => envVars[key]).map((key) => `${key}=${envVars[key]}`).sort().join("|"); +} +var piSettingsReconciler = { + handleEnvironmentChange(settings11) { + const current = getPiProviderSettings(settings11); + if (current.discoveredModels.length === 0) { + return false; + } + updatePiProviderSettings(settings11, { + discoveredModels: [] + }); + return true; + }, + reconcileModelWithEnvironment(settings11, conversations) { + const envText = getRuntimeEnvironmentText(settings11, "pi"); + const currentHash = computePiEnvHash(envText); + const savedHash = getPiProviderSettings(settings11).environmentHash; + if (currentHash === savedHash) { + return { changed: false, invalidatedConversations: [] }; + } + const invalidatedConversations = []; + for (const conversation of conversations) { + if (conversation.providerId !== "pi") { + continue; + } + const state = getPiState(conversation.providerState); + if (!conversation.sessionId && !state.sessionId && !state.sessionFile) { + continue; + } + conversation.sessionId = null; + conversation.providerState = void 0; + invalidatedConversations.push(conversation); + } + updatePiProviderSettings(settings11, { environmentHash: currentHash }); + return { changed: true, invalidatedConversations }; + }, + normalizeModelVariantSettings(settings11) { + const piSettings = getPiProviderSettings(settings11); + let changed = false; + const normalizeSelection = (value, fallback) => { + if (typeof value !== "string" || !isPiModelSelectionId(value)) { + return null; + } + if (value === "pi") { + return value; + } + const decoded = decodePiModelId(value); + if (decoded) { + return encodePiModelId(decoded.provider, decoded.modelId); + } + return fallback === "synthetic" ? "pi" : ""; + }; + const modelSelection = normalizeSelection(settings11.model, "synthetic"); + if (typeof settings11.model === "string" && modelSelection && settings11.model !== modelSelection) { + settings11.model = modelSelection; + changed = true; + } + const titleModelSelection = normalizeSelection(settings11.titleGenerationModel, "clear"); + if (typeof settings11.titleGenerationModel === "string" && titleModelSelection !== null && settings11.titleGenerationModel !== titleModelSelection) { + settings11.titleGenerationModel = titleModelSelection; + changed = true; + } + const savedProviderModelRaw = settings11.savedProviderModel; + if (savedProviderModelRaw && typeof savedProviderModelRaw === "object" && !Array.isArray(savedProviderModelRaw)) { + const savedProviderModel = savedProviderModelRaw; + const savedSelection = normalizeSelection(savedProviderModel.pi, "clear"); + if (typeof savedProviderModel.pi === "string" && savedSelection !== null && savedProviderModel.pi !== savedSelection) { + if (savedSelection) { + savedProviderModel.pi = savedSelection; + } else { + delete savedProviderModel.pi; + } + changed = true; + } + } + const normalizedVisibleModels = normalizePiVisibleModels( + piSettings.visibleModels, + piSettings.discoveredModels + ); + const shouldUpdateProviderSettings = !sameStringList2(normalizedVisibleModels, piSettings.visibleModels); + if (shouldUpdateProviderSettings) { + updatePiProviderSettings(settings11, { + visibleModels: normalizedVisibleModels + }); + changed = true; + } + if (typeof settings11.effortLevel === "string" && !settings11.effortLevel.trim()) { + settings11.effortLevel = getDefaultPiEffortForSelection(settings11.model, piSettings); + changed = true; + } + return changed; + } +}; +function getDefaultPiEffortForSelection(selection, piSettings) { + if (typeof selection !== "string") { + return "off"; + } + const decoded = decodePiModelId(selection); + if (!decoded) { + return "off"; + } + const model = findPiModel(piSettings, encodePiModelId(decoded.provider, decoded.modelId)); + return model ? clampPiThinkingLevel(PI_DEFAULT_THINKING_LEVEL, model.thinkingLevels) : PI_DEFAULT_THINKING_LEVEL; +} + +// src/providers/pi/history/PiConversationHistoryService.ts +var fs25 = __toESM(require("node:fs/promises")); +var PiConversationHistoryService = class { + constructor() { + this.hydratedKeys = /* @__PURE__ */ new Map(); + } + async hydrateConversationHistory(conversation, vaultPath) { + var _a5, _b3, _c2, _d, _e2; + const state = getPiState(conversation.providerState); + if (this.isPendingForkConversation(conversation)) { + if (conversation.messages.length > 0) { + return; + } + const sourceSessionFile = (_a5 = state.forkSourceSessionFile) != null ? _a5 : findPiSessionFile(state.forkSource.sessionId, vaultPath); + if (!sourceSessionFile) { + this.hydratedKeys.delete(conversation.id); + return; + } + try { + const content = await fs25.readFile(sourceSessionFile, "utf-8"); + const messages = parsePiSessionContent(content, { + leafEntryId: state.forkSource.resumeAt, + requireLeafEntryId: true + }); + if (messages.length === 0) { + this.hydratedKeys.delete(conversation.id); + return; + } + conversation.messages = messages; + this.hydratedKeys.set(conversation.id, `fork::${sourceSessionFile}::${state.forkSource.resumeAt}`); + } catch (e2) { + this.hydratedKeys.delete(conversation.id); + } + return; + } + const sessionTarget = (_c2 = (_b3 = state.sessionFile) != null ? _b3 : state.sessionId) != null ? _c2 : conversation.sessionId; + if (!sessionTarget) { + this.hydratedKeys.delete(conversation.id); + return; + } + const sessionFile = (_d = state.sessionFile) != null ? _d : findPiSessionFile(sessionTarget, vaultPath); + if (!sessionFile) { + this.hydratedKeys.delete(conversation.id); + return; + } + const hydrationKey = `${sessionFile}::${(_e2 = state.leafEntryId) != null ? _e2 : ""}`; + if (conversation.messages.length > 0 && this.hydratedKeys.get(conversation.id) === hydrationKey) { + return; + } + try { + const content = await fs25.readFile(sessionFile, "utf-8"); + const messages = parsePiSessionContent(content, { + leafEntryId: state.leafEntryId + }); + if (messages.length === 0) { + this.hydratedKeys.delete(conversation.id); + return; + } + conversation.messages = messages; + this.hydratedKeys.set(conversation.id, hydrationKey); + } catch (e2) { + this.hydratedKeys.delete(conversation.id); + } + } + async deleteConversationSession(_conversation, _vaultPath) { + } + resolveSessionIdForConversation(conversation) { + var _a5, _b3, _c2, _d, _e2; + const state = getPiState(conversation == null ? void 0 : conversation.providerState); + return (_e2 = (_d = (_b3 = (_a5 = state.sessionFile) != null ? _a5 : state.sessionId) != null ? _b3 : conversation == null ? void 0 : conversation.sessionId) != null ? _d : (_c2 = state.forkSource) == null ? void 0 : _c2.sessionId) != null ? _e2 : null; + } + isPendingForkConversation(_conversation) { + const state = getPiState(_conversation.providerState); + return !!state.forkSource && !state.sessionId && !state.sessionFile && !_conversation.sessionId; + } + buildForkProviderState(sourceSessionId, resumeAt, sourceProviderState) { + var _a5; + const sourceState = getPiState(sourceProviderState); + const sourceSessionFile = (_a5 = sourceState.sessionFile) != null ? _a5 : sourceState.forkSourceSessionFile; + return buildPersistedPiState({ + forkSource: { sessionId: sourceSessionId, resumeAt }, + ...sourceSessionFile ? { forkSourceSessionFile: sourceSessionFile } : {} + }); + } + buildPersistedProviderState(conversation) { + return buildPersistedPiState(getPiState(conversation.providerState)); + } +}; + +// src/providers/pi/ui/ObsidianPiExtensionUiRenderer.ts +var import_obsidian21 = require("obsidian"); +var ObsidianPiExtensionUiRenderer = class { + constructor(app) { + this.app = app; + } + async select(request, signal) { + return new PiSelectModal(this.app, request, signal).openAndWait(); + } + async confirm(request, signal) { + return new PiConfirmModal(this.app, request, signal).openAndWait(); + } + async input(request, signal) { + return new PiTextModal(this.app, request, signal, false).openAndWait(); + } + async editor(request, signal) { + return new PiTextModal(this.app, request, signal, true).openAndWait(); + } + notify(request) { + new import_obsidian21.Notice(getDisplayText(request)); + } + setStatus(_request) { + } + setWidget(_request) { + } + setTitle(_request) { + } + setEditorText(_request) { + } +}; +function getDisplayText(request) { + const message = typeof request.message === "string" ? request.message.trim() : ""; + const title = typeof request.title === "string" ? request.title.trim() : ""; + return message || title || "Pi extension notification."; +} +function getTitle(request, fallback) { + return typeof request.title === "string" && request.title.trim() ? request.title.trim() : fallback; +} +function getMessage(request) { + return typeof request.message === "string" ? request.message.trim() : ""; +} +function getSelectOptions(request) { + const rawOptions = Array.isArray(request.options) ? request.options : []; + return rawOptions.flatMap((option) => { + if (typeof option === "string" && option.trim()) { + return [{ label: option.trim(), value: option.trim() }]; + } + if (!option || typeof option !== "object" || Array.isArray(option)) { + return []; + } + const record2 = option; + const value = typeof record2.value === "string" ? record2.value.trim() : ""; + const label = typeof record2.label === "string" && record2.label.trim() ? record2.label.trim() : value; + return value ? [{ label, value }] : []; + }); +} +var PiExtensionModal = class extends import_obsidian21.Modal { + constructor(app, request, signal) { + super(app); + this.request = request; + this.signal = signal; + this.done = false; + this.resultPromise = new Promise((resolve8) => { + this.resolve = resolve8; + }); + } + openAndWait() { + if (this.signal.aborted) { + return Promise.resolve(this.cancelledResult()); + } + const abortHandler = () => { + this.finish(this.cancelledResult()); + this.close(); + }; + this.signal.addEventListener("abort", abortHandler, { once: true }); + this.resultPromise.finally(() => { + this.signal.removeEventListener("abort", abortHandler); + }); + this.open(); + return this.resultPromise; + } + onOpen() { + this.contentEl.empty(); + this.contentEl.addClass("claudian-pi-extension-modal"); + this.render(); + } + onClose() { + this.finish(this.cancelledResult()); + } + finish(result) { + if (this.done) { + return; + } + this.done = true; + this.resolve(result); + } + renderHeader(fallbackTitle) { + this.contentEl.createEl("h2", { text: getTitle(this.request, fallbackTitle) }); + const message = getMessage(this.request); + if (message) { + this.contentEl.createEl("p", { text: message }); + } + } +}; +var PiSelectModal = class extends PiExtensionModal { + cancelledResult() { + return { cancelled: true }; + } + render() { + this.renderHeader("Pi extension"); + const options = getSelectOptions(this.request); + const listEl = this.contentEl.createDiv({ cls: "claudian-pi-extension-options" }); + for (const option of options) { + const button = listEl.createEl("button", { text: option.label }); + button.addEventListener("click", () => { + this.finish({ value: option.value }); + this.close(); + }); + } + this.renderCancelButton(); + } + renderCancelButton() { + const cancelButton = this.contentEl.createEl("button", { text: "Cancel" }); + cancelButton.addEventListener("click", () => { + this.finish({ cancelled: true }); + this.close(); + }); + } +}; +var PiConfirmModal = class extends PiExtensionModal { + cancelledResult() { + return { cancelled: true }; + } + render() { + this.renderHeader("Pi extension"); + const actionsEl = this.contentEl.createDiv({ cls: "claudian-pi-extension-actions" }); + const confirmButton = actionsEl.createEl("button", { text: "Confirm" }); + confirmButton.addEventListener("click", () => { + this.finish({ confirmed: true }); + this.close(); + }); + const cancelButton = actionsEl.createEl("button", { text: "Cancel" }); + cancelButton.addEventListener("click", () => { + this.finish({ confirmed: false }); + this.close(); + }); + } +}; +var PiTextModal = class extends PiExtensionModal { + constructor(app, request, signal, multiline) { + super(app, request, signal); + this.multiline = multiline; + } + cancelledResult() { + return { cancelled: true }; + } + render() { + this.renderHeader("Pi extension"); + const initialValue = typeof this.request.value === "string" ? this.request.value : typeof this.request.defaultValue === "string" ? this.request.defaultValue : ""; + const input = this.multiline ? this.contentEl.createEl("textarea") : this.contentEl.createEl("input", { type: "text" }); + input.value = initialValue; + if (this.multiline) { + input.rows = 8; + } + const actionsEl = this.contentEl.createDiv({ cls: "claudian-pi-extension-actions" }); + const submitButton = actionsEl.createEl("button", { text: "Submit" }); + submitButton.addEventListener("click", () => { + this.finish({ value: input.value }); + this.close(); + }); + const cancelButton = actionsEl.createEl("button", { text: "Cancel" }); + cancelButton.addEventListener("click", () => { + this.finish({ cancelled: true }); + this.close(); + }); + window.setTimeout(() => input.focus(), 0); + } +}; + +// src/providers/pi/registration.ts +var piProviderRegistration = { + blankTabOrder: 11, + capabilities: PI_PROVIDER_CAPABILITIES, + chatUIConfig: piChatUIConfig, + createInlineEditService: (plugin) => new PiInlineEditService(plugin), + createInstructionRefineService: (plugin) => new PiInstructionRefineService(plugin), + createRuntime: ({ plugin }) => new PiChatRuntime(plugin, { + extensionUiRenderer: new ObsidianPiExtensionUiRenderer(plugin.app) + }), + createTitleGenerationService: (plugin) => new PiTitleGenerationService(plugin), + displayName: "Pi", + environmentKeyPatterns: [/^PI_/i], + historyService: new PiConversationHistoryService(), + isEnabled: (settings11) => getPiProviderSettings(settings11).enabled, + settingsReconciler: piSettingsReconciler, + taskResultInterpreter: new PiTaskResultInterpreter() +}; + +// src/providers/index.ts +var builtInProvidersRegistered = false; +function registerBuiltInProviders() { + if (builtInProvidersRegistered) { + return; + } + ProviderRegistry.register("claude", claudeProviderRegistration); + ProviderRegistry.register("codex", codexProviderRegistration); + ProviderRegistry.register("opencode", opencodeProviderRegistration); + ProviderRegistry.register("pi", piProviderRegistration); + ProviderWorkspaceRegistry.register("claude", claudeWorkspaceRegistration); + ProviderWorkspaceRegistry.register("codex", codexWorkspaceRegistration); + ProviderWorkspaceRegistry.register("opencode", opencodeWorkspaceRegistration); + ProviderWorkspaceRegistry.register("pi", piWorkspaceRegistration); + builtInProvidersRegistered = true; +} +registerBuiltInProviders(); + +// src/main.ts +var import_obsidian50 = require("obsidian"); + +// src/app/storage/SharedStorageService.ts +var import_obsidian22 = require("obsidian"); +function isRecord6(value) { + return !!value && typeof value === "object" && !Array.isArray(value); +} +var SharedStorageService = class { + constructor(plugin) { + this.plugin = plugin; + this.adapter = new VaultFileAdapter(plugin.app); + this.claudianSettings = new ClaudianSettingsStorage(this.adapter); + this.sessions = new SessionStorage(this.adapter); + } + async initialize() { + await this.ensureDirectories(); + const claudian = await this.claudianSettings.load(); + return { claudian }; + } + async saveClaudianSettings(settings11) { + await this.claudianSettings.save(settings11); + } + async setTabManagerState(state) { + try { + const loaded = await this.plugin.loadData(); + const data = isRecord6(loaded) ? loaded : {}; + data.tabManagerState = state; + await this.plugin.saveData(data); + } catch (e2) { + new import_obsidian22.Notice("Failed to save tab layout"); + } + } + async getTabManagerState() { + try { + const data = await this.plugin.loadData(); + if (!isRecord6(data) || !data.tabManagerState) { + return null; + } + return this.validateTabManagerState(data.tabManagerState); + } catch (e2) { + return null; + } + } + getAdapter() { + return this.adapter; + } + async ensureDirectories() { + await this.adapter.ensureFolder(CLAUDIAN_STORAGE_PATH); + await this.adapter.ensureFolder(SESSIONS_PATH); + } + validateTabManagerState(data) { + if (!data || typeof data !== "object") { + return null; + } + const state = data; + if (!Array.isArray(state.openTabs)) { + return null; + } + const validatedTabs = []; + for (const tab of state.openTabs) { + if (!tab || typeof tab !== "object") { + continue; + } + const tabObj = tab; + if (typeof tabObj.tabId !== "string") { + continue; + } + validatedTabs.push({ + tabId: tabObj.tabId, + conversationId: typeof tabObj.conversationId === "string" ? tabObj.conversationId : null, + ...typeof tabObj.draftModel === "string" ? { draftModel: tabObj.draftModel } : {} + }); + } + return { + openTabs: validatedTabs, + activeTabId: typeof state.activeTabId === "string" ? state.activeTabId : null + }; + } +}; + +// src/features/chat/ClaudianView.ts +var import_obsidian46 = require("obsidian"); + +// src/utils/animationFrame.ts +function getRendererWindow() { + return typeof window === "undefined" ? null : window; +} +function scheduleAnimationFrame(callback, ownerWindow = getRendererWindow()) { + const targetWindow = ownerWindow != null ? ownerWindow : getRendererWindow(); + if (!targetWindow) { + callback(); + return { kind: "timeout", id: 0, ownerWindow: null }; + } + if (typeof targetWindow.requestAnimationFrame === "function") { + return { + kind: "raf", + id: targetWindow.requestAnimationFrame(() => callback()), + ownerWindow: targetWindow + }; + } + return { + kind: "timeout", + id: targetWindow.setTimeout(callback, 16), + ownerWindow: targetWindow + }; +} +function cancelScheduledAnimationFrame(frame) { + var _a5; + const targetWindow = (_a5 = frame.ownerWindow) != null ? _a5 : getRendererWindow(); + if (!targetWindow) return; + if (frame.kind === "raf" && typeof targetWindow.cancelAnimationFrame === "function") { + targetWindow.cancelAnimationFrame(frame.id); + return; + } + targetWindow.clearTimeout(frame.id); +} + +// src/features/chat/tabs/Tab.ts +var import_obsidian43 = require("obsidian"); + +// src/core/providers/modelRouting.ts +function getProviderForModel(model, settings11) { + return ProviderRegistry.resolveProviderForModel(model, settings11); +} +function getEnabledProviderForModel(model, settings11, fallbackProviderId) { + return ProviderRegistry.resolveProviderForModel(model, settings11, { + onlyEnabledProviders: true, + fallbackProviderId + }); +} + +// src/core/commands/builtInCommands.ts +var BUILT_IN_COMMANDS = [ + { + name: "clear", + aliases: ["new"], + description: "Start a new conversation", + action: "clear" + }, + { + name: "add-dir", + description: "Add external context directory", + action: "add-dir", + hasArgs: true, + argumentHint: "[path/to/directory]" + }, + { + name: "resume", + description: "Resume a previous conversation", + action: "resume", + requiredCapability: "supportsNativeHistory" + }, + { + name: "fork", + description: "Fork entire conversation to new session", + action: "fork", + requiredCapability: "supportsFork" + } +]; +var commandMap = /* @__PURE__ */ new Map(); +for (const cmd of BUILT_IN_COMMANDS) { + commandMap.set(cmd.name.toLowerCase(), cmd); + if (cmd.aliases) { + for (const alias of cmd.aliases) { + commandMap.set(alias.toLowerCase(), cmd); + } + } +} +function resolveCapabilities(context) { + if (typeof context !== "string") { + return context; + } + try { + return ProviderRegistry.getCapabilities(context); + } catch (e2) { + return null; + } +} +function isBuiltInCommandSupported(command, context) { + if (!command.requiredCapability || !context) { + return true; + } + const capabilities = resolveCapabilities(context); + return capabilities ? capabilities[command.requiredCapability] : false; +} +function detectBuiltInCommand(input) { + const trimmed = input.trim(); + if (!trimmed.startsWith("/")) return null; + const match = trimmed.match(/^\/([a-zA-Z0-9_-]+)(?:\s(.*))?$/); + if (!match) return null; + const cmdName = match[1].toLowerCase(); + const command = commandMap.get(cmdName); + if (!command) return null; + const args = (match[2] || "").trim(); + return { command, args }; +} +function getBuiltInCommandsForDropdown(context) { + return BUILT_IN_COMMANDS.filter((cmd) => isBuiltInCommandSupported(cmd, context)).map((cmd) => ({ + id: `builtin:${cmd.name}`, + name: cmd.name, + description: cmd.description, + content: "", + // Built-in commands don't have prompt content + argumentHint: cmd.argumentHint + })); +} + +// src/shared/components/SlashCommandDropdown.ts +var SlashCommandDropdown = class { + constructor(containerEl, inputEl, callbacks, options = {}) { + this.dropdownEl = null; + this.enabled = true; + this.triggerStartIndex = -1; + this.activeTriggerChar = "/"; + this.selectedIndex = 0; + this.filteredItems = []; + this.cachedProviderEntries = []; + this.providerEntriesFetched = false; + this.requestId = 0; + var _a5, _b3, _c2, _d; + this.containerEl = containerEl; + this.inputEl = inputEl; + this.callbacks = callbacks; + this.isFixed = (_a5 = options.fixed) != null ? _a5 : false; + this.hiddenCommands = (_b3 = options.hiddenCommands) != null ? _b3 : /* @__PURE__ */ new Set(); + this.providerConfig = (_c2 = options.providerConfig) != null ? _c2 : null; + this.getProviderEntries = (_d = options.getProviderEntries) != null ? _d : null; + this.onInput = () => this.handleInputChange(); + this.inputEl.addEventListener("input", this.onInput); + } + setEnabled(enabled) { + this.enabled = enabled; + if (!enabled) { + this.hide(); + } + } + setHiddenCommands(commands) { + this.hiddenCommands = commands; + } + setProviderCatalog(config2, getEntries) { + this.providerConfig = config2; + this.getProviderEntries = getEntries; + this.cachedProviderEntries = []; + this.providerEntriesFetched = false; + this.requestId = 0; + } + handleInputChange() { + var _a5, _b3; + if (!this.enabled) return; + const text = this.getInputValue(); + const cursorPos = this.getCursorPosition(); + const textBeforeCursor = text.substring(0, cursorPos); + const triggerChars = (_b3 = (_a5 = this.providerConfig) == null ? void 0 : _a5.triggerChars) != null ? _b3 : ["/"]; + let triggerIndex = -1; + let triggerChar = ""; + for (let i = cursorPos - 1; i >= 0; i--) { + const ch2 = textBeforeCursor.charAt(i); + if (/\s/.test(ch2)) break; + if (triggerChars.includes(ch2)) { + if (i === 0 || /\s/.test(textBeforeCursor.charAt(i - 1))) { + triggerIndex = i; + triggerChar = ch2; + } + break; + } + } + if (triggerIndex === -1) { + this.hide(); + return; + } + const searchText = textBeforeCursor.substring(triggerIndex + 1); + if (/\s/.test(searchText)) { + this.hide(); + return; + } + this.triggerStartIndex = triggerIndex; + this.activeTriggerChar = triggerChar; + const isAtPosition0 = triggerIndex === 0; + void this.showDropdown(searchText, isAtPosition0); + } + handleKeydown(e2) { + if (!this.enabled || !this.isVisible()) return false; + switch (e2.key) { + case "ArrowDown": + e2.preventDefault(); + this.navigate(1); + return true; + case "ArrowUp": + e2.preventDefault(); + this.navigate(-1); + return true; + case "Enter": + case "Tab": + if (this.filteredItems.length > 0) { + e2.preventDefault(); + this.selectItem(); + return true; + } + return false; + case "Escape": + e2.preventDefault(); + this.hide(); + return true; + } + return false; + } + isVisible() { + var _a5, _b3; + return (_b3 = (_a5 = this.dropdownEl) == null ? void 0 : _a5.hasClass("visible")) != null ? _b3 : false; + } + hide() { + if (this.dropdownEl) { + this.dropdownEl.removeClass("visible"); + } + this.triggerStartIndex = -1; + this.callbacks.onHide(); + } + destroy() { + this.inputEl.removeEventListener("input", this.onInput); + if (this.dropdownEl) { + this.dropdownEl.remove(); + this.dropdownEl = null; + } + } + resetSdkSkillsCache() { + this.cachedProviderEntries = []; + this.providerEntriesFetched = false; + this.requestId = 0; + } + getInputValue() { + return this.inputEl.value; + } + getCursorPosition() { + return this.inputEl.selectionStart || 0; + } + setInputValue(value) { + this.inputEl.value = value; + } + setCursorPosition(pos) { + this.inputEl.selectionStart = pos; + this.inputEl.selectionEnd = pos; + } + async showDropdown(searchText, isAtPosition0 = true) { + const currentRequest = ++this.requestId; + const searchLower = searchText.toLowerCase(); + await this.fetchProviderEntries(currentRequest); + if (currentRequest !== this.requestId) return; + const includeBuiltIns = isAtPosition0 && this.activeTriggerChar === "/"; + const allItems = this.buildItemList(includeBuiltIns); + this.filteredItems = allItems.filter( + (item) => { + var _a5; + return item.name.toLowerCase().includes(searchLower) || ((_a5 = item.description) == null ? void 0 : _a5.toLowerCase().includes(searchLower)); + } + ).sort((a, b2) => a.name.localeCompare(b2.name)); + if (currentRequest !== this.requestId) return; + if (searchText.length > 0 && this.filteredItems.length === 0) { + this.hide(); + return; + } + this.selectedIndex = 0; + this.render(); + } + async fetchProviderEntries(currentRequest) { + if (this.providerEntriesFetched || !this.getProviderEntries) return; + try { + const entries = await this.getProviderEntries(); + if (currentRequest !== this.requestId) return; + if (entries.length > 0) { + this.cachedProviderEntries = entries; + this.providerEntriesFetched = true; + } + } catch (e2) { + if (currentRequest !== this.requestId) return; + } + } + buildItemList(includeBuiltIns) { + var _a5; + const seenNames = /* @__PURE__ */ new Set(); + const items = []; + if (includeBuiltIns) { + const builtIns = getBuiltInCommandsForDropdown((_a5 = this.providerConfig) == null ? void 0 : _a5.providerId); + for (const cmd of builtIns) { + const nameLower = cmd.name.toLowerCase(); + if (!seenNames.has(nameLower)) { + seenNames.add(nameLower); + items.push({ + name: cmd.name, + description: cmd.description, + argumentHint: cmd.argumentHint, + content: cmd.content, + displayPrefix: "/", + insertPrefix: "/", + isBuiltIn: true, + slashCommand: cmd + }); + } + } + } + for (const entry of this.cachedProviderEntries) { + const nameLower = entry.name.toLowerCase(); + if (seenNames.has(nameLower) || this.hiddenCommands.has(nameLower)) { + continue; + } + seenNames.add(nameLower); + items.push({ + name: entry.name, + description: entry.description, + argumentHint: entry.argumentHint, + content: entry.content, + displayPrefix: entry.displayPrefix, + insertPrefix: entry.insertPrefix, + isBuiltIn: false, + providerEntry: entry, + slashCommand: { + id: entry.id, + name: entry.name, + description: entry.description, + content: entry.content, + argumentHint: entry.argumentHint, + allowedTools: entry.allowedTools, + model: entry.model, + source: entry.source, + kind: entry.kind, + disableModelInvocation: entry.disableModelInvocation, + userInvocable: entry.userInvocable, + context: entry.context, + agent: entry.agent, + hooks: entry.hooks + } + }); + } + return items; + } + render() { + if (!this.dropdownEl) { + this.dropdownEl = this.createDropdownElement(); + } + this.dropdownEl.empty(); + if (this.filteredItems.length === 0) { + const emptyEl = this.dropdownEl.createDiv({ cls: "claudian-slash-empty" }); + emptyEl.setText("No matching commands"); + } else { + for (let i = 0; i < this.filteredItems.length; i++) { + const item = this.filteredItems[i]; + const itemEl = this.dropdownEl.createDiv({ cls: "claudian-slash-item" }); + if (i === this.selectedIndex) { + itemEl.addClass("selected"); + } + const nameEl = itemEl.createSpan({ cls: "claudian-slash-name" }); + nameEl.setText(`${item.displayPrefix}${item.name}`); + if (item.argumentHint) { + const hintEl = itemEl.createSpan({ cls: "claudian-slash-hint" }); + hintEl.setText(normalizeArgumentHint(item.argumentHint)); + } + if (item.description) { + const descEl = itemEl.createDiv({ cls: "claudian-slash-desc" }); + descEl.setText(item.description); + } + itemEl.addEventListener("click", () => { + this.selectedIndex = i; + this.selectItem(); + }); + itemEl.addEventListener("mouseenter", () => { + this.selectedIndex = i; + this.updateSelection(); + }); + } + } + this.dropdownEl.addClass("visible"); + if (this.isFixed) { + this.positionFixed(); + } + } + createDropdownElement() { + if (this.isFixed) { + return this.containerEl.createDiv({ + cls: "claudian-slash-dropdown claudian-slash-dropdown-fixed" + }); + } else { + return this.containerEl.createDiv({ cls: "claudian-slash-dropdown" }); + } + } + positionFixed() { + if (!this.dropdownEl || !this.isFixed) return; + const inputRect = this.inputEl.getBoundingClientRect(); + this.dropdownEl.setCssProps({ + "--claudian-fixed-dropdown-bottom": `${window.innerHeight - inputRect.top + 4}px`, + "--claudian-fixed-dropdown-left": `${inputRect.left}px`, + "--claudian-fixed-dropdown-width": `${Math.max(inputRect.width, 280)}px` + }); + } + navigate(direction) { + const maxIndex = this.filteredItems.length - 1; + this.selectedIndex = Math.max(0, Math.min(maxIndex, this.selectedIndex + direction)); + this.updateSelection(); + } + updateSelection() { + var _a5; + const items = (_a5 = this.dropdownEl) == null ? void 0 : _a5.querySelectorAll(".claudian-slash-item"); + items == null ? void 0 : items.forEach((item, index) => { + if (index === this.selectedIndex) { + item.addClass("selected"); + item.scrollIntoView({ block: "nearest" }); + } else { + item.removeClass("selected"); + } + }); + } + selectItem() { + if (this.filteredItems.length === 0) return; + const selected = this.filteredItems[this.selectedIndex]; + if (!selected) return; + const text = this.getInputValue(); + const beforeTrigger = text.substring(0, this.triggerStartIndex); + const afterCursor = text.substring(this.getCursorPosition()); + const replacement = `${selected.insertPrefix}${selected.name} `; + this.setInputValue(beforeTrigger + replacement + afterCursor); + this.setCursorPosition(beforeTrigger.length + replacement.length); + this.hide(); + if (selected.slashCommand) { + this.callbacks.onSelect(selected.slashCommand); + } + this.inputEl.focus(); + } +}; + +// src/features/chat/tabs/Tab.ts +init_env(); +init_path(); + +// src/features/chat/controllers/contextRowVisibility.ts +function updateContextRowHasContent(contextRowEl) { + const editorIndicator = contextRowEl.querySelector(".claudian-selection-indicator"); + const browserIndicator = contextRowEl.querySelector(".claudian-browser-selection-indicator"); + const canvasIndicator = contextRowEl.querySelector(".claudian-canvas-indicator"); + const fileIndicator = contextRowEl.querySelector(".claudian-file-indicator"); + const imagePreview = contextRowEl.querySelector(".claudian-image-preview"); + const hasEditorSelection = !!editorIndicator && !editorIndicator.hasClass("claudian-hidden"); + const hasBrowserSelection = !!browserIndicator && !browserIndicator.hasClass("claudian-hidden"); + const hasCanvasSelection = !!canvasIndicator && !canvasIndicator.hasClass("claudian-hidden"); + const hasFileChips = !!fileIndicator && fileIndicator.hasClass("claudian-visible-flex"); + const hasImageChips = !!imagePreview && imagePreview.hasClass("claudian-visible-flex"); + contextRowEl.classList.toggle( + "has-content", + hasEditorSelection || hasBrowserSelection || hasCanvasSelection || hasFileChips || hasImageChips + ); +} + +// src/features/chat/controllers/BrowserSelectionController.ts +var BROWSER_SELECTION_POLL_INTERVAL = 250; +var BrowserSelectionController = class { + constructor(app, indicatorEl, inputEl, contextRowEl, onVisibilityChange) { + this.storedSelection = null; + this.pollInterval = null; + this.pollInFlight = false; + this.app = app; + this.indicatorEl = indicatorEl; + this.inputEl = inputEl; + this.contextRowEl = contextRowEl; + this.onVisibilityChange = onVisibilityChange != null ? onVisibilityChange : null; + } + start() { + if (this.pollInterval) return; + this.pollInterval = window.setInterval(() => { + void this.poll(); + }, BROWSER_SELECTION_POLL_INTERVAL); + } + stop() { + if (this.pollInterval) { + window.clearInterval(this.pollInterval); + this.pollInterval = null; + } + this.clear(); + } + async poll() { + if (this.pollInFlight) return; + this.pollInFlight = true; + try { + const browserView = this.getActiveBrowserView(); + if (!browserView) { + this.clearWhenInputIsNotFocused(); + return; + } + const selectedText = await this.extractSelectedText(browserView.containerEl); + if (selectedText) { + const nextContext = this.buildContext(browserView.view, browserView.viewType, browserView.containerEl, selectedText); + if (!this.isSameSelection(nextContext, this.storedSelection)) { + this.storedSelection = nextContext; + this.updateIndicator(); + } + } else { + this.clearWhenInputIsNotFocused(); + } + } catch (e2) { + } finally { + this.pollInFlight = false; + } + } + getActiveBrowserView() { + var _a5, _b3, _c2, _d; + const activeLeaf = (_b3 = (_a5 = this.app.workspace).getMostRecentLeaf) == null ? void 0 : _b3.call(_a5); + const activeView = activeLeaf == null ? void 0 : activeLeaf.view; + const containerEl = activeView.containerEl; + if (!activeView || !containerEl) return null; + const viewType = (_d = (_c2 = activeView.getViewType) == null ? void 0 : _c2.call(activeView)) != null ? _d : ""; + if (!this.isBrowserLikeView(viewType, containerEl)) return null; + return { view: activeView, viewType, containerEl }; + } + isBrowserLikeView(viewType, containerEl) { + const normalized = viewType.toLowerCase(); + if (normalized.includes("surfing") || normalized.includes("browser") || normalized.includes("webview")) { + return true; + } + return Boolean(containerEl.querySelector("iframe, webview")); + } + async extractSelectedText(containerEl) { + const ownerDoc = containerEl.ownerDocument; + const docSelection = this.extractSelectionFromDocument(ownerDoc, containerEl); + if (docSelection) return docSelection; + const frameSelection = this.extractSelectionFromIframes(containerEl); + if (frameSelection) return frameSelection; + return await this.extractSelectionFromWebviews(containerEl); + } + extractSelectionFromDocument(doc, scopeEl) { + const selection = doc.getSelection(); + const selectedText = selection == null ? void 0 : selection.toString().trim(); + if (selectedText) { + const anchorNode = selection == null ? void 0 : selection.anchorNode; + const focusNode = selection == null ? void 0 : selection.focusNode; + if (anchorNode && scopeEl.contains(anchorNode) || focusNode && scopeEl.contains(focusNode)) { + return selectedText; + } + } + return this.extractSelectionFromActiveInput(doc, scopeEl); + } + extractSelectionFromActiveInput(doc, scopeEl) { + const activeEl = doc.activeElement; + if (!activeEl || !scopeEl.contains(activeEl)) return null; + if (activeEl.instanceOf(HTMLTextAreaElement) || activeEl.instanceOf(HTMLInputElement)) { + const { value, selectionStart, selectionEnd } = activeEl; + if (typeof selectionStart !== "number" || typeof selectionEnd !== "number" || selectionStart === selectionEnd) return null; + return value.slice(selectionStart, selectionEnd).trim() || null; + } + return null; + } + extractSelectionFromIframes(containerEl) { + var _a5, _b3; + const iframes = Array.from(containerEl.querySelectorAll("iframe")); + for (const iframe of iframes) { + try { + const frameDoc = (_b3 = iframe.contentDocument) != null ? _b3 : (_a5 = iframe.contentWindow) == null ? void 0 : _a5.document; + if (!frameDoc || !frameDoc.body) continue; + const frameSelection = this.extractSelectionFromDocument(frameDoc, frameDoc.body); + if (frameSelection) return frameSelection; + } catch (e2) { + } + } + return null; + } + async extractSelectionFromWebviews(containerEl) { + const webviews = Array.from(containerEl.querySelectorAll("webview")); + for (const webview of webviews) { + if (typeof webview.executeJavaScript !== "function") continue; + try { + const result = await webview.executeJavaScript( + 'window.getSelection ? window.getSelection().toString() : ""', + true + ); + if (typeof result === "string" && result.trim()) { + return result.trim(); + } + } catch (e2) { + } + } + return null; + } + buildContext(view, viewType, containerEl, selectedText) { + const title = this.extractViewTitle(view); + const url2 = this.extractViewUrl(view, containerEl); + const source = url2 ? `browser:${url2}` : `browser:${viewType || "unknown"}`; + return { + source, + selectedText, + title, + url: url2 + }; + } + extractViewTitle(view) { + var _a5; + const displayText = (_a5 = view.getDisplayText) == null ? void 0 : _a5.call(view); + if (displayText == null ? void 0 : displayText.trim()) return displayText.trim(); + const title = view.title; + return typeof title === "string" && title.trim() ? title.trim() : void 0; + } + extractViewUrl(view, containerEl) { + const rawView = view; + const directCandidates = [ + rawView.url, + rawView.currentUrl, + rawView.currentURL, + rawView.src + ]; + for (const candidate of directCandidates) { + if (typeof candidate === "string" && candidate.trim()) { + return candidate.trim(); + } + } + const embeddableEl = containerEl.querySelector("iframe[src], webview[src]"); + const embeddedSrc = embeddableEl == null ? void 0 : embeddableEl.getAttribute("src"); + if (embeddedSrc == null ? void 0 : embeddedSrc.trim()) { + return embeddedSrc.trim(); + } + return void 0; + } + isSameSelection(left, right) { + if (!left || !right) return false; + return left.source === right.source && left.selectedText === right.selectedText && left.title === right.title && left.url === right.url; + } + clearWhenInputIsNotFocused() { + if (this.inputEl.ownerDocument.activeElement === this.inputEl) return; + if (this.storedSelection) { + this.storedSelection = null; + this.updateIndicator(); + } + } + updateIndicator() { + if (!this.indicatorEl) return; + if (this.storedSelection) { + const lineCount = this.storedSelection.selectedText.split(/\r?\n/).length; + const lineLabel = lineCount === 1 ? "line" : "lines"; + this.indicatorEl.textContent = `${lineCount} ${lineLabel} selected`; + this.indicatorEl.setAttribute("title", this.buildIndicatorTitle()); + this.indicatorEl.removeClass("claudian-hidden"); + } else { + this.indicatorEl.addClass("claudian-hidden"); + this.indicatorEl.textContent = ""; + this.indicatorEl.removeAttribute("title"); + } + this.updateContextRowVisibility(); + } + buildIndicatorTitle() { + if (!this.storedSelection) return ""; + const charCount = this.storedSelection.selectedText.length; + const charLabel = charCount === 1 ? "char" : "chars"; + const lines = [`${charCount} ${charLabel} selected`, `source=${this.storedSelection.source}`]; + if (this.storedSelection.title) { + lines.push(`title=${this.storedSelection.title}`); + } + if (this.storedSelection.url) { + lines.push(this.storedSelection.url); + } + return lines.join("\n"); + } + updateContextRowVisibility() { + var _a5; + if (!this.contextRowEl) return; + updateContextRowHasContent(this.contextRowEl); + (_a5 = this.onVisibilityChange) == null ? void 0 : _a5.call(this); + } + getContext() { + return this.storedSelection; + } + hasSelection() { + return this.storedSelection !== null; + } + clear() { + this.storedSelection = null; + this.updateIndicator(); + } +}; + +// src/features/chat/controllers/CanvasSelectionController.ts +var CANVAS_POLL_INTERVAL = 250; +var CanvasSelectionController = class { + constructor(app, indicatorEl, inputEl, contextRowEl, onVisibilityChange) { + this.storedSelection = null; + this.pollInterval = null; + this.app = app; + this.indicatorEl = indicatorEl; + this.inputEl = inputEl; + this.contextRowEl = contextRowEl; + this.onVisibilityChange = onVisibilityChange != null ? onVisibilityChange : null; + } + start() { + if (this.pollInterval) return; + this.pollInterval = window.setInterval(() => this.poll(), CANVAS_POLL_INTERVAL); + } + stop() { + if (this.pollInterval) { + window.clearInterval(this.pollInterval); + this.pollInterval = null; + } + this.clear(); + } + poll() { + var _a5; + const canvasView = this.getCanvasView(); + if (!canvasView) return; + const canvas = canvasView.canvas; + if (!(canvas == null ? void 0 : canvas.selection)) return; + const selection = canvas.selection; + const canvasPath = (_a5 = canvasView.file) == null ? void 0 : _a5.path; + if (typeof canvasPath !== "string" || !canvasPath) return; + const nodeIds = [...selection].map((node) => node.id).filter((id) => typeof id === "string" && id.length > 0); + if (nodeIds.length > 0) { + const sameSelection = this.storedSelection && this.storedSelection.canvasPath === canvasPath && this.storedSelection.nodeIds.length === nodeIds.length && this.storedSelection.nodeIds.every((id) => nodeIds.includes(id)); + if (!sameSelection) { + this.storedSelection = { canvasPath, nodeIds }; + this.updateIndicator(); + } + } else if (this.getActiveElement() !== this.inputEl) { + if (this.storedSelection) { + this.storedSelection = null; + this.updateIndicator(); + } + } + } + getActiveElement() { + var _a5, _b3; + return (_b3 = (_a5 = this.inputEl.ownerDocument) == null ? void 0 : _a5.activeElement) != null ? _b3 : null; + } + getCanvasView() { + var _a5, _b3, _c2; + const activeLeaf = (_b3 = (_a5 = this.app.workspace).getMostRecentLeaf) == null ? void 0 : _b3.call(_a5); + const activeView = activeLeaf == null ? void 0 : activeLeaf.view; + if (((_c2 = activeView == null ? void 0 : activeView.getViewType) == null ? void 0 : _c2.call(activeView)) === "canvas" && activeView.file) { + return activeView; + } + const leaves = this.app.workspace.getLeavesOfType("canvas"); + if (leaves.length === 0) return null; + const leaf = leaves.find((l2) => l2.view.file); + return leaf ? leaf.view : null; + } + updateIndicator() { + if (!this.indicatorEl) return; + if (this.storedSelection) { + const { nodeIds } = this.storedSelection; + this.indicatorEl.textContent = nodeIds.length === 1 ? `node "${nodeIds[0]}" selected` : `${nodeIds.length} nodes selected`; + this.indicatorEl.removeClass("claudian-hidden"); + } else { + this.indicatorEl.addClass("claudian-hidden"); + } + this.updateContextRowVisibility(); + } + updateContextRowVisibility() { + var _a5; + if (!this.contextRowEl) return; + updateContextRowHasContent(this.contextRowEl); + (_a5 = this.onVisibilityChange) == null ? void 0 : _a5.call(this); + } + getContext() { + if (!this.storedSelection) return null; + return { + canvasPath: this.storedSelection.canvasPath, + nodeIds: [...this.storedSelection.nodeIds] + }; + } + hasSelection() { + return this.storedSelection !== null; + } + clear() { + this.storedSelection = null; + this.updateIndicator(); + } +}; + +// src/features/chat/controllers/ConversationController.ts +var import_obsidian23 = require("obsidian"); + +// src/features/chat/rendering/collapsible.ts +function setupCollapsible(wrapperEl, headerEl, contentEl, state, options = {}) { + const { initiallyExpanded = false, onToggle, baseAriaLabel } = options; + const updateAriaLabel = (isExpanded) => { + if (baseAriaLabel) { + const action = isExpanded ? "click to collapse" : "click to expand"; + headerEl.setAttribute("aria-label", `${baseAriaLabel} - ${action}`); + } + }; + state.isExpanded = initiallyExpanded; + if (initiallyExpanded) { + wrapperEl.addClass("expanded"); + contentEl.removeClass("claudian-hidden"); + headerEl.setAttribute("aria-expanded", "true"); + } else { + contentEl.addClass("claudian-hidden"); + headerEl.setAttribute("aria-expanded", "false"); + } + updateAriaLabel(initiallyExpanded); + const toggleExpand = () => { + state.isExpanded = !state.isExpanded; + if (state.isExpanded) { + wrapperEl.addClass("expanded"); + contentEl.removeClass("claudian-hidden"); + headerEl.setAttribute("aria-expanded", "true"); + } else { + wrapperEl.removeClass("expanded"); + contentEl.addClass("claudian-hidden"); + headerEl.setAttribute("aria-expanded", "false"); + } + updateAriaLabel(state.isExpanded); + onToggle == null ? void 0 : onToggle(state.isExpanded); + }; + headerEl.addEventListener("click", toggleExpand); + headerEl.addEventListener("keydown", (e2) => { + if (e2.key === "Enter" || e2.key === " ") { + e2.preventDefault(); + toggleExpand(); + } + }); +} +function collapseElement(wrapperEl, headerEl, contentEl, state) { + state.isExpanded = false; + wrapperEl.removeClass("expanded"); + contentEl.addClass("claudian-hidden"); + headerEl.setAttribute("aria-expanded", "false"); +} + +// src/features/chat/rendering/ThinkingBlockRenderer.ts +function createThinkingBlock(parentEl, renderContent) { + const wrapperEl = parentEl.createDiv({ cls: "claudian-thinking-block" }); + const header = wrapperEl.createDiv({ cls: "claudian-thinking-header" }); + header.setAttribute("tabindex", "0"); + header.setAttribute("role", "button"); + header.setAttribute("aria-expanded", "false"); + header.setAttribute("aria-label", "Extended thinking - click to expand"); + const labelEl = header.createSpan({ cls: "claudian-thinking-label" }); + const startTime = Date.now(); + labelEl.setText("Thinking 0s..."); + const timerInterval = window.setInterval(() => { + const elapsed = Math.floor((Date.now() - startTime) / 1e3); + labelEl.setText(`Thinking ${elapsed}s...`); + }, 1e3); + const contentEl = wrapperEl.createDiv({ cls: "claudian-thinking-content" }); + const state = { + wrapperEl, + contentEl, + labelEl, + content: "", + startTime, + timerInterval, + isExpanded: false + }; + setupCollapsible(wrapperEl, header, contentEl, state); + return state; +} +function finalizeThinkingBlock(state) { + if (state.timerInterval) { + window.clearInterval(state.timerInterval); + state.timerInterval = null; + } + const durationSeconds = Math.floor((Date.now() - state.startTime) / 1e3); + state.labelEl.setText(`Thought for ${durationSeconds}s`); + const header = state.wrapperEl.querySelector(".claudian-thinking-header"); + if (header) { + collapseElement(state.wrapperEl, header, state.contentEl, state); + } + return durationSeconds; +} +function cleanupThinkingBlock(state) { + if (state == null ? void 0 : state.timerInterval) { + window.clearInterval(state.timerInterval); + } +} +function renderStoredThinkingBlock(parentEl, content, durationSeconds, renderContent) { + const wrapperEl = parentEl.createDiv({ cls: "claudian-thinking-block" }); + const header = wrapperEl.createDiv({ cls: "claudian-thinking-header" }); + header.setAttribute("tabindex", "0"); + header.setAttribute("role", "button"); + header.setAttribute("aria-label", "Extended thinking - click to expand"); + const labelEl = header.createSpan({ cls: "claudian-thinking-label" }); + const labelText = durationSeconds !== void 0 ? `Thought for ${durationSeconds}s` : "Thought"; + labelEl.setText(labelText); + const contentEl = wrapperEl.createDiv({ cls: "claudian-thinking-content" }); + void renderContent(contentEl, content).catch(() => { + contentEl.setText(content); + }); + const state = { isExpanded: false }; + setupCollapsible(wrapperEl, header, contentEl, state); + return wrapperEl; +} + +// src/features/chat/rewind.ts +function findRewindContext(messages, userIndex) { + let prevAssistantUuid; + for (let i = userIndex - 1; i >= 0; i--) { + if (messages[i].role === "assistant" && messages[i].assistantMessageId) { + prevAssistantUuid = messages[i].assistantMessageId; + break; + } + } + let hasResponse = false; + for (let i = userIndex + 1; i < messages.length; i++) { + if (messages[i].role === "user") break; + if (messages[i].role === "assistant" && messages[i].assistantMessageId) { + hasResponse = true; + break; + } + } + return { prevAssistantUuid, hasResponse }; +} + +// src/features/chat/controllers/ConversationController.ts +function runConversationAction(action, failureMessage) { + void action().catch(() => { + new import_obsidian23.Notice(failureMessage); + }); +} +var ConversationController = class { + constructor(deps, callbacks = {}) { + this.deps = deps; + this.callbacks = callbacks; + } + getAgentService() { + var _a5, _b3, _c2; + return (_c2 = (_b3 = (_a5 = this.deps).getAgentService) == null ? void 0 : _b3.call(_a5)) != null ? _c2 : null; + } + // ============================================ + // Conversation Lifecycle + // ============================================ + /** + * Resets to entry point state (New Chat). + * + * Entry point is a blank UI state - no conversation is created until the + * first message is sent. This prevents empty conversations cluttering history. + */ + async createNew(options = {}) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3; + const { plugin, state, subagentManager } = this.deps; + const force = !!options.force; + if (state.isStreaming && !force) return; + if (state.isCreatingConversation) return; + if (state.isSwitchingConversation) return; + state.isCreatingConversation = true; + try { + (_b3 = (_a5 = this.deps).dismissPendingInlinePrompts) == null ? void 0 : _b3.call(_a5); + if (force && state.isStreaming) { + state.cancelRequested = true; + state.bumpStreamGeneration(); + (_c2 = this.getAgentService()) == null ? void 0 : _c2.cancel(); + } + if (state.currentConversationId && state.messages.length > 0) { + await this.save(); + } + subagentManager.orphanAllActive(); + subagentManager.clear(); + cleanupThinkingBlock(state.currentThinkingState); + state.currentContentEl = null; + state.currentTextEl = null; + state.currentTextContent = ""; + state.currentThinkingState = null; + state.toolCallElements.clear(); + state.writeEditStates.clear(); + state.isStreaming = false; + state.currentConversationId = null; + state.clearMessages(); + state.usage = null; + state.currentTodos = null; + state.pendingNewSessionPlan = null; + state.planFilePath = null; + state.prePlanPermissionMode = null; + state.autoScrollEnabled = (_d = plugin.settings.enableAutoScroll) != null ? _d : true; + state.hasPendingConversationSave = false; + (_e2 = this.getAgentService()) == null ? void 0 : _e2.syncConversationState( + null, + plugin.settings.persistentExternalContextPaths || [] + ); + const messagesEl = this.deps.getMessagesEl(); + messagesEl.empty(); + const welcomeEl = messagesEl.createDiv({ cls: "claudian-welcome" }); + welcomeEl.createDiv({ cls: "claudian-welcome-greeting", text: this.getGreeting() }); + this.deps.setWelcomeEl(welcomeEl); + (_f2 = this.deps.getStatusPanel()) == null ? void 0 : _f2.remount(); + this.deps.getInputEl().value = ""; + const fileCtx = this.deps.getFileContextManager(); + fileCtx == null ? void 0 : fileCtx.resetForNewConversation(); + fileCtx == null ? void 0 : fileCtx.autoAttachActiveFile(); + (_g = this.deps.getImageContextManager()) == null ? void 0 : _g.clearImages(); + (_h2 = this.deps.getMcpServerSelector()) == null ? void 0 : _h2.clearEnabled(); + (_i = this.deps.getExternalContextSelector()) == null ? void 0 : _i.clearExternalContexts( + plugin.settings.persistentExternalContextPaths || [] + ); + this.deps.clearQueuedMessage(); + (_k3 = (_j = this.callbacks).onNewConversation) == null ? void 0 : _k3.call(_j); + } finally { + state.isCreatingConversation = false; + } + } + /** + * Loads the current tab conversation, or starts at entry point if none. + * + * Entry point (no conversation) shows welcome screen without + * creating a conversation. Conversation is created lazily on first message. + */ + async loadActive() { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j; + const { plugin, state, renderer } = this.deps; + const conversationId = state.currentConversationId; + const conversation = conversationId ? await plugin.getConversationById(conversationId) : null; + if (!conversation) { + state.currentConversationId = null; + state.clearMessages(); + state.usage = null; + state.currentTodos = null; + state.pendingNewSessionPlan = null; + state.planFilePath = null; + state.prePlanPermissionMode = null; + state.autoScrollEnabled = (_a5 = plugin.settings.enableAutoScroll) != null ? _a5 : true; + state.hasPendingConversationSave = false; + (_b3 = this.getAgentService()) == null ? void 0 : _b3.syncConversationState( + null, + plugin.settings.persistentExternalContextPaths || [] + ); + const fileCtx = this.deps.getFileContextManager(); + fileCtx == null ? void 0 : fileCtx.resetForNewConversation(); + fileCtx == null ? void 0 : fileCtx.autoAttachActiveFile(); + (_c2 = this.deps.getExternalContextSelector()) == null ? void 0 : _c2.clearExternalContexts( + plugin.settings.persistentExternalContextPaths || [] + ); + (_d = this.deps.getMcpServerSelector()) == null ? void 0 : _d.clearEnabled(); + const welcomeEl = renderer.renderMessages( + [], + () => this.getGreeting() + ); + this.deps.setWelcomeEl(welcomeEl); + this.updateWelcomeVisibility(); + (_f2 = (_e2 = this.callbacks).onConversationLoaded) == null ? void 0 : _f2.call(_e2); + return; + } + await ((_h2 = (_g = this.deps).ensureServiceForConversation) == null ? void 0 : _h2.call(_g, conversation)); + this.restoreConversation(conversation, { autoAttachFile: true }); + this.updateWelcomeVisibility(); + (_j = (_i = this.callbacks).onConversationLoaded) == null ? void 0 : _j.call(_i); + } + /** Switches to a different conversation. */ + async switchTo(id) { + var _a5, _b3, _c2, _d, _e2, _f2, _g; + const { plugin, state, subagentManager } = this.deps; + if (id === state.currentConversationId) return; + if (state.isStreaming) return; + if (state.isSwitchingConversation) return; + if (state.isCreatingConversation) return; + state.isSwitchingConversation = true; + try { + (_b3 = (_a5 = this.deps).dismissPendingInlinePrompts) == null ? void 0 : _b3.call(_a5); + await this.save(); + subagentManager.orphanAllActive(); + subagentManager.clear(); + const conversation = await plugin.switchConversation(id); + if (!conversation) { + return; + } + await ((_d = (_c2 = this.deps).ensureServiceForConversation) == null ? void 0 : _d.call(_c2, conversation)); + this.deps.getInputEl().value = ""; + this.deps.clearQueuedMessage(); + this.restoreConversation(conversation); + (_e2 = this.deps.getHistoryDropdown()) == null ? void 0 : _e2.removeClass("visible"); + this.updateWelcomeVisibility(); + (_g = (_f2 = this.callbacks).onConversationSwitched) == null ? void 0 : _g.call(_f2); + } finally { + state.isSwitchingConversation = false; + } + } + async rewind(userMessageId, mode = "code-and-conversation") { + var _a5, _b3, _c2; + const { plugin, state, renderer } = this.deps; + const agentServiceForCheck = this.getAgentService(); + if (agentServiceForCheck && !agentServiceForCheck.getCapabilities().supportsRewind) { + new import_obsidian23.Notice(t10("chat.rewind.failed", { error: "Rewind is not supported by this provider." })); + return; + } + if (state.isStreaming) { + new import_obsidian23.Notice(t10("chat.rewind.unavailableStreaming")); + return; + } + const msgs = state.messages; + const userIdx = msgs.findIndex((m4) => m4.id === userMessageId); + if (userIdx === -1) { + new import_obsidian23.Notice(t10("chat.rewind.failed", { error: "Message not found" })); + return; + } + const userMsg = msgs[userIdx]; + if (!userMsg.userMessageId) { + new import_obsidian23.Notice(t10("chat.rewind.unavailableNoUuid")); + return; + } + const rewindCtx = findRewindContext(msgs, userIdx); + if (!rewindCtx.hasResponse || !rewindCtx.prevAssistantUuid) { + new import_obsidian23.Notice(t10("chat.rewind.unavailableNoUuid")); + return; + } + const prevAssistantUuid = rewindCtx.prevAssistantUuid; + const confirmed = await confirm( + plugin.app, + mode === "conversation" ? t10("chat.rewind.confirmMessageConversationOnly") : t10("chat.rewind.confirmMessage"), + t10("chat.rewind.confirmButton") + ); + if (!confirmed) return; + if (state.isStreaming) { + new import_obsidian23.Notice(t10("chat.rewind.unavailableStreaming")); + return; + } + const agentService = this.getAgentService(); + if (!agentService) { + new import_obsidian23.Notice(t10("chat.rewind.failed", { error: "Agent service not available" })); + return; + } + let result; + try { + result = await agentService.rewind(userMsg.userMessageId, prevAssistantUuid, mode); + } catch (e2) { + new import_obsidian23.Notice(t10("chat.rewind.failed", { error: e2 instanceof Error ? e2.message : "Unknown error" })); + return; + } + if (!result.canRewind) { + new import_obsidian23.Notice(t10("chat.rewind.cannot", { error: (_a5 = result.error) != null ? _a5 : "Unknown error" })); + return; + } + state.truncateAt(userMessageId); + const inputEl = this.deps.getInputEl(); + inputEl.value = userMsg.content; + inputEl.focus(); + const welcomeEl = renderer.renderMessages(state.messages, () => this.getGreeting()); + this.deps.setWelcomeEl(welcomeEl); + this.updateWelcomeVisibility(); + const filesChanged = (_c2 = (_b3 = result.filesChanged) == null ? void 0 : _b3.length) != null ? _c2 : 0; + let saveError = null; + try { + await this.save(false, { resumeAtMessageId: prevAssistantUuid }); + } catch (e2) { + saveError = e2 instanceof Error ? e2.message : "Failed to save"; + } + if (saveError) { + new import_obsidian23.Notice( + mode === "conversation" ? t10("chat.rewind.noticeConversationOnlySaveFailed", { error: saveError }) : t10("chat.rewind.noticeSaveFailed", { count: String(filesChanged), error: saveError }) + ); + return; + } + new import_obsidian23.Notice( + mode === "conversation" ? t10("chat.rewind.noticeConversationOnly") : t10("chat.rewind.notice", { count: String(filesChanged) }) + ); + } + /** + * Saves the current conversation. + * + * If we're at an entry point (no conversation yet) and have messages, + * creates a new conversation first (lazy creation). + * + * For native sessions (new conversations with sessionId from SDK), + * only metadata is saved - the SDK handles message persistence. + */ + async save(updateLastResponse = false, options) { + var _a5, _b3, _c2, _d, _e2; + const { plugin, state } = this.deps; + if (!state.currentConversationId && state.messages.length === 0) { + return; + } + const agentService = this.getAgentService(); + const sessionInvalidated = (_b3 = (_a5 = agentService == null ? void 0 : agentService.consumeSessionInvalidation) == null ? void 0 : _a5.call(agentService)) != null ? _b3 : false; + if (!state.currentConversationId && state.messages.length > 0) { + const initialSessionId = (_c2 = agentService == null ? void 0 : agentService.getSessionId()) != null ? _c2 : void 0; + const conversation2 = await plugin.createConversation({ + providerId: agentService == null ? void 0 : agentService.providerId, + sessionId: initialSessionId + }); + state.currentConversationId = conversation2.id; + } + const fileCtx = this.deps.getFileContextManager(); + const currentNote = (fileCtx == null ? void 0 : fileCtx.getCurrentNotePath()) || void 0; + const externalContextSelector = this.deps.getExternalContextSelector(); + const externalContextPaths = (_d = externalContextSelector == null ? void 0 : externalContextSelector.getExternalContexts()) != null ? _d : []; + const mcpServerSelector = this.deps.getMcpServerSelector(); + const enabledMcpServers = mcpServerSelector ? Array.from(mcpServerSelector.getEnabledServers()) : []; + const conversation = plugin.getConversationSync(state.currentConversationId); + const { updates: sessionUpdates } = agentService ? agentService.buildSessionUpdates({ conversation, sessionInvalidated }) : { updates: {} }; + const updates = { + ...sessionUpdates, + messages: state.messages, + currentNote, + externalContextPaths: externalContextPaths.length > 0 ? externalContextPaths : void 0, + usage: (_e2 = state.usage) != null ? _e2 : void 0, + enabledMcpServers: enabledMcpServers.length > 0 ? enabledMcpServers : void 0 + }; + if (updateLastResponse) { + updates.lastResponseAt = Date.now(); + } + if (options) { + updates.resumeAtMessageId = options.resumeAtMessageId; + } + await plugin.updateConversation(state.currentConversationId, updates); + state.hasPendingConversationSave = false; + } + /** + * Shared logic for restoring a conversation into the current tab. + * Used by both loadActive() and switchTo() to avoid duplication. + */ + restoreConversation(conversation, options) { + var _a5, _b3, _c2; + const { plugin, state, renderer } = this.deps; + state.currentConversationId = conversation.id; + state.messages = [...conversation.messages]; + state.usage = (_a5 = conversation.usage) != null ? _a5 : null; + state.autoScrollEnabled = (_b3 = plugin.settings.enableAutoScroll) != null ? _b3 : true; + state.hasPendingConversationSave = false; + state.currentTodos = null; + const hasMessages = state.messages.length > 0; + const externalContextPaths = hasMessages ? conversation.externalContextPaths || [] : plugin.settings.persistentExternalContextPaths || []; + (_c2 = this.getAgentService()) == null ? void 0 : _c2.syncConversationState(conversation, externalContextPaths); + const fileCtx = this.deps.getFileContextManager(); + fileCtx == null ? void 0 : fileCtx.resetForLoadedConversation(hasMessages); + if (conversation.currentNote) { + fileCtx == null ? void 0 : fileCtx.setCurrentNote(conversation.currentNote); + } else if (!hasMessages && (options == null ? void 0 : options.autoAttachFile)) { + fileCtx == null ? void 0 : fileCtx.autoAttachActiveFile(); + } + this.restoreExternalContextPaths(conversation.externalContextPaths, !hasMessages); + const mcpServerSelector = this.deps.getMcpServerSelector(); + if (conversation.enabledMcpServers && conversation.enabledMcpServers.length > 0) { + mcpServerSelector == null ? void 0 : mcpServerSelector.setEnabledServers(conversation.enabledMcpServers); + } else { + mcpServerSelector == null ? void 0 : mcpServerSelector.clearEnabled(); + } + const welcomeEl = renderer.renderMessages( + state.messages, + () => this.getGreeting() + ); + this.deps.setWelcomeEl(welcomeEl); + } + /** + * Restores external context paths based on session state. + * New or empty sessions get current persistent paths from settings. + * Sessions with messages restore exactly what was saved. + */ + restoreExternalContextPaths(savedPaths, isEmptySession) { + const { plugin } = this.deps; + const externalContextSelector = this.deps.getExternalContextSelector(); + if (!externalContextSelector) { + return; + } + if (isEmptySession) { + externalContextSelector.clearExternalContexts( + plugin.settings.persistentExternalContextPaths || [] + ); + } else { + externalContextSelector.setExternalContexts(savedPaths || []); + } + } + // ============================================ + // History Dropdown + // ============================================ + toggleHistoryDropdown() { + const dropdown = this.deps.getHistoryDropdown(); + if (!dropdown) return; + const isVisible = dropdown.hasClass("visible"); + if (isVisible) { + dropdown.removeClass("visible"); + } else { + this.updateHistoryDropdown(); + dropdown.addClass("visible"); + } + } + updateHistoryDropdown() { + const dropdown = this.deps.getHistoryDropdown(); + if (!dropdown) return; + this.renderHistoryItems(dropdown, { + onSelectConversation: (id) => this.switchTo(id), + onRerender: () => this.updateHistoryDropdown() + }); + } + /** + * Renders history dropdown items to a container. + * Shared implementation for updateHistoryDropdown() and renderHistoryDropdown(). + */ + renderHistoryItems(container, options) { + var _a5; + const { plugin, state } = this.deps; + container.empty(); + const dropdownHeader = container.createDiv({ cls: "claudian-history-header" }); + dropdownHeader.createSpan({ text: "Conversations" }); + const list = container.createDiv({ cls: "claudian-history-list" }); + const allConversations = plugin.getConversationList(); + if (allConversations.length === 0) { + list.createDiv({ cls: "claudian-history-empty", text: "No conversations" }); + return; + } + const conversations = [...allConversations].sort((a, b2) => { + var _a6, _b3; + return ((_a6 = b2.lastResponseAt) != null ? _a6 : b2.createdAt) - ((_b3 = a.lastResponseAt) != null ? _b3 : a.createdAt); + }); + for (const conv of conversations) { + const isCurrent = conv.id === state.currentConversationId; + const item = list.createDiv({ + cls: `claudian-history-item${isCurrent ? " active" : ""}` + }); + const iconEl = item.createDiv({ cls: "claudian-history-item-icon" }); + (0, import_obsidian23.setIcon)(iconEl, isCurrent ? "message-square-dot" : "message-square"); + const content = item.createDiv({ cls: "claudian-history-item-content" }); + const titleEl = content.createDiv({ cls: "claudian-history-item-title", text: conv.title }); + titleEl.setAttribute("title", conv.title); + content.createDiv({ + cls: "claudian-history-item-date", + text: isCurrent ? "Current session" : this.formatDate((_a5 = conv.lastResponseAt) != null ? _a5 : conv.createdAt) + }); + if (!isCurrent) { + content.addEventListener("click", (e2) => { + e2.stopPropagation(); + if (this.isHistoryNewTabModifierClick(e2) && options.onOpenConversationInNewTab) { + e2.preventDefault(); + runConversationAction( + () => this.runHistoryAction( + () => { + var _a6; + return (_a6 = options.onOpenConversationInNewTab) == null ? void 0 : _a6.call(options, conv.id, true); + }, + "Failed to load conversation" + ), + "Failed to load conversation" + ); + return; + } + runConversationAction( + () => this.runHistoryAction( + () => options.onSelectConversation(conv.id), + "Failed to load conversation" + ), + "Failed to load conversation" + ); + }); + if (options.onOpenConversationInNewTab) { + content.addEventListener("auxclick", (e2) => { + if (e2.button !== 1) return; + e2.preventDefault(); + e2.stopPropagation(); + runConversationAction( + () => this.runHistoryAction( + () => { + var _a6; + return (_a6 = options.onOpenConversationInNewTab) == null ? void 0 : _a6.call(options, conv.id, true); + }, + "Failed to load conversation" + ), + "Failed to load conversation" + ); + }); + } + } + item.addEventListener("contextmenu", (e2) => { + e2.preventDefault(); + e2.stopPropagation(); + this.showHistoryContextMenu(item, conv.id, conv.title, isCurrent, options, e2); + }); + const actions = item.createDiv({ cls: "claudian-history-item-actions" }); + if (conv.titleGenerationStatus === "pending") { + const loadingEl = actions.createEl("span", { cls: "claudian-action-btn claudian-action-loading" }); + (0, import_obsidian23.setIcon)(loadingEl, "loader-2"); + loadingEl.setAttribute("aria-label", "Generating title..."); + } else if (conv.titleGenerationStatus === "failed") { + const regenerateBtn = actions.createEl("button", { cls: "claudian-action-btn" }); + (0, import_obsidian23.setIcon)(regenerateBtn, "refresh-cw"); + regenerateBtn.setAttribute("aria-label", "Regenerate title"); + regenerateBtn.addEventListener("click", (e2) => { + e2.stopPropagation(); + runConversationAction( + () => this.regenerateTitle(conv.id), + "Failed to regenerate response" + ); + }); + } + const renameBtn = actions.createEl("button", { cls: "claudian-action-btn" }); + (0, import_obsidian23.setIcon)(renameBtn, "pencil"); + renameBtn.setAttribute("aria-label", "Rename"); + renameBtn.addEventListener("click", (e2) => { + e2.stopPropagation(); + this.showRenameInput(item, conv.id, conv.title); + }); + const deleteBtn = actions.createEl("button", { cls: "claudian-action-btn claudian-delete-btn" }); + (0, import_obsidian23.setIcon)(deleteBtn, "trash-2"); + deleteBtn.setAttribute("aria-label", "Delete"); + deleteBtn.addEventListener("click", (e2) => { + e2.stopPropagation(); + runConversationAction( + () => this.runHistoryAction( + () => this.deleteHistoryConversation(conv.id, options), + "Failed to delete conversation" + ), + "Failed to delete conversation" + ); + }); + } + } + isHistoryNewTabModifierClick(event) { + return !event.altKey && !event.shiftKey && (event.metaKey || event.ctrlKey); + } + async runHistoryAction(action, errorMessage) { + try { + await action(); + } catch (e2) { + new import_obsidian23.Notice(errorMessage); + } + } + showHistoryContextMenu(item, conversationId, title, isCurrent, options, event) { + var _a5, _b3; + const menu = new import_obsidian23.Menu(); + const openState = (_b3 = (_a5 = options.getConversationOpenState) == null ? void 0 : _a5.call(options, conversationId)) != null ? _b3 : isCurrent ? "current" : "closed"; + if (!isCurrent) { + if (openState === "closed" && options.onOpenConversationInNewTab) { + menu.addItem((menuItem) => menuItem.setTitle("Open in new tab").onClick(() => { + void this.runHistoryAction( + () => { + var _a6; + return (_a6 = options.onOpenConversationInNewTab) == null ? void 0 : _a6.call(options, conversationId, true); + }, + "Failed to load conversation" + ); + })); + menu.addItem((menuItem) => menuItem.setTitle("Open in background tab").onClick(() => { + void this.runHistoryAction( + () => { + var _a6; + return (_a6 = options.onOpenConversationInNewTab) == null ? void 0 : _a6.call(options, conversationId, false); + }, + "Failed to load conversation" + ); + })); + } else if (openState === "open") { + menu.addItem((menuItem) => menuItem.setTitle("Switch to open session").onClick(() => { + void this.runHistoryAction( + () => options.onSelectConversation(conversationId), + "Failed to load conversation" + ); + })); + } + } + menu.addItem((menuItem) => menuItem.setTitle("Rename").onClick(() => { + this.showRenameInput(item, conversationId, title); + })); + menu.addItem((menuItem) => menuItem.setTitle("Delete").onClick(() => { + void this.runHistoryAction( + () => this.deleteHistoryConversation(conversationId, options), + "Failed to delete conversation" + ); + })); + menu.showAtMouseEvent(event); + } + async deleteHistoryConversation(conversationId, options) { + const { plugin, state } = this.deps; + if (state.isStreaming) return; + await plugin.deleteConversation(conversationId); + options.onRerender(); + if (conversationId === state.currentConversationId) { + await this.loadActive(); + } + } + /** Shows inline rename input for a conversation. */ + showRenameInput(item, convId, currentTitle) { + var _a5; + const titleEl = item.querySelector(".claudian-history-item-title"); + if (!titleEl) return; + const input = ((_a5 = item.ownerDocument) != null ? _a5 : window.document).createElement("input"); + input.type = "text"; + input.className = "claudian-rename-input"; + input.value = currentTitle; + titleEl.replaceWith(input); + input.focus(); + input.select(); + const finishRename = async () => { + try { + const newTitle = input.value.trim() || currentTitle; + await this.deps.plugin.renameConversation(convId, newTitle); + this.updateHistoryDropdown(); + } catch (e2) { + new import_obsidian23.Notice("Failed to rename conversation"); + } + }; + input.addEventListener("blur", () => { + runConversationAction(finishRename, "Failed to rename conversation"); + }); + input.addEventListener("keydown", (e2) => { + if (e2.key === "Enter" && !e2.isComposing) { + input.blur(); + } else if (e2.key === "Escape" && !e2.isComposing) { + input.value = currentTitle; + input.blur(); + } + }); + } + // ============================================ + // Welcome & Greeting + // ============================================ + /** Generates a dynamic greeting based on time/day. */ + getGreeting() { + var _a5; + const now = /* @__PURE__ */ new Date(); + const hour = now.getHours(); + const day = now.getDay(); + const name = (_a5 = this.deps.plugin.settings.userName) == null ? void 0 : _a5.trim(); + const personalize = (base, noNameFallback) => name ? `${base}, ${name}` : noNameFallback != null ? noNameFallback : base; + const dayGreetings = { + 0: [personalize("Happy Sunday"), "Sunday session?", "Welcome to the weekend"], + 1: [personalize("Happy Monday"), personalize("Back at it", "Back at it!")], + 2: [personalize("Happy Tuesday")], + 3: [personalize("Happy Wednesday")], + 4: [personalize("Happy Thursday")], + 5: [personalize("Happy Friday"), personalize("That Friday feeling")], + 6: [personalize("Happy Saturday", "Happy Saturday!"), personalize("Welcome to the weekend")] + }; + const getTimeGreetings = () => { + if (hour >= 5 && hour < 12) { + return [personalize("Good morning"), "Coffee and Claudian time?"]; + } else if (hour >= 12 && hour < 18) { + return [personalize("Good afternoon"), personalize("Hey there"), personalize("How's it going") + "?"]; + } else if (hour >= 18 && hour < 22) { + return [personalize("Good evening"), personalize("Evening"), personalize("How was your day") + "?"]; + } else { + return ["Hello, night owl", personalize("Evening")]; + } + }; + const generalGreetings = [ + personalize("Hey there"), + name ? `Hi ${name}, how are you?` : "Hi, how are you?", + personalize("How's it going") + "?", + personalize("Welcome back") + "!", + personalize("What's new") + "?", + ...name ? [`${name} returns!`] : [], + "You are absolutely right!" + ]; + const allGreetings = [ + ...dayGreetings[day] || [], + ...getTimeGreetings(), + ...generalGreetings + ]; + return allGreetings[Math.floor(Math.random() * allGreetings.length)]; + } + /** Updates welcome element visibility based on message count. */ + updateWelcomeVisibility() { + const welcomeEl = this.deps.getWelcomeEl(); + if (!welcomeEl) return; + if (this.deps.state.messages.length === 0) { + welcomeEl.removeClass("claudian-hidden"); + } else { + welcomeEl.addClass("claudian-hidden"); + } + } + /** + * Initializes the welcome greeting for a new tab without a conversation. + * Called when a new tab is activated and has no conversation loaded. + */ + initializeWelcome() { + const welcomeEl = this.deps.getWelcomeEl(); + if (!welcomeEl) return; + const fileCtx = this.deps.getFileContextManager(); + fileCtx == null ? void 0 : fileCtx.resetForNewConversation(); + fileCtx == null ? void 0 : fileCtx.autoAttachActiveFile(); + if (!welcomeEl.querySelector(".claudian-welcome-greeting")) { + welcomeEl.createDiv({ cls: "claudian-welcome-greeting", text: this.getGreeting() }); + } + this.updateWelcomeVisibility(); + } + // ============================================ + // Utilities + // ============================================ + /** Generates a fallback title from the first message (used when AI fails). */ + generateFallbackTitle(firstMessage) { + const firstSentence = firstMessage.split(/[.!?\n]/)[0].trim(); + const autoTitle = firstSentence.substring(0, 50); + const suffix = firstSentence.length > 50 ? "..." : ""; + return `${autoTitle}${suffix}`; + } + /** Regenerates AI title for a conversation. */ + async regenerateTitle(conversationId) { + const { plugin } = this.deps; + if (!plugin.settings.enableAutoTitleGeneration) return; + const fullConv = await plugin.getConversationById(conversationId); + if (!fullConv || fullConv.messages.length < 1) return; + const titleService = this.deps.getTitleGenerationService(); + if (!titleService) return; + const firstUserMsg = fullConv.messages.find((m4) => m4.role === "user"); + if (!firstUserMsg) return; + const userContent = firstUserMsg.displayContent || firstUserMsg.content; + const expectedTitle = fullConv.title; + await plugin.updateConversation(conversationId, { titleGenerationStatus: "pending" }); + this.updateHistoryDropdown(); + await titleService.generateTitle( + conversationId, + userContent, + async (convId, result) => { + const currentConv = await plugin.getConversationById(convId); + if (!currentConv) return; + const userManuallyRenamed = currentConv.title !== expectedTitle; + if (result.success && !userManuallyRenamed) { + await plugin.renameConversation(convId, result.title); + await plugin.updateConversation(convId, { titleGenerationStatus: "success" }); + } else if (!userManuallyRenamed) { + await plugin.updateConversation(convId, { titleGenerationStatus: "failed" }); + } else { + await plugin.updateConversation(convId, { titleGenerationStatus: void 0 }); + } + this.updateHistoryDropdown(); + } + ); + } + /** Formats a timestamp for display. */ + formatDate(timestamp) { + const date7 = new Date(timestamp); + const now = /* @__PURE__ */ new Date(); + if (date7.toDateString() === now.toDateString()) { + return date7.toLocaleTimeString(void 0, { hour: "2-digit", minute: "2-digit", hour12: false }); + } + return date7.toLocaleDateString(void 0, { month: "short", day: "numeric" }); + } + // ============================================ + // History Dropdown Rendering (for ClaudianView) + // ============================================ + /** + * Renders the history dropdown content to a provided container. + * Used by ClaudianView to render the dropdown with custom selection callback. + */ + renderHistoryDropdown(container, options) { + this.renderHistoryItems(container, { + ...options, + onRerender: () => this.renderHistoryDropdown(container, options) + }); + } +}; + +// src/features/chat/controllers/InputController.ts +var import_obsidian28 = require("obsidian"); + +// src/core/runtime/QueuedTurn.ts +function cloneChatTurnRequest(request) { + return { + ...request, + images: cloneImages(request.images), + externalContextPaths: request.externalContextPaths ? [...request.externalContextPaths] : void 0, + enabledMcpServers: request.enabledMcpServers ? new Set(request.enabledMcpServers) : void 0 + }; +} +function mergeQueuedChatTurns(existing, incoming) { + var _a5; + const existingRequest = existing.request; + const incomingRequest = incoming.request; + return { + displayContent: mergeText(existing.displayContent, incoming.displayContent), + request: { + ...cloneChatTurnRequest(incomingRequest), + text: mergeText(existingRequest.text, incomingRequest.text), + images: mergeImages(existingRequest.images, incomingRequest.images), + currentNotePath: (_a5 = incomingRequest.currentNotePath) != null ? _a5 : existingRequest.currentNotePath, + externalContextPaths: mergeStringLists( + existingRequest.externalContextPaths, + incomingRequest.externalContextPaths + ), + enabledMcpServers: mergeSets( + existingRequest.enabledMcpServers, + incomingRequest.enabledMcpServers + ) + } + }; +} +function mergeText(first, second) { + return [first, second].map((part) => part.trim()).filter((part) => part.length > 0).join("\n\n"); +} +function cloneImages(images) { + return images && images.length > 0 ? [...images] : void 0; +} +function mergeImages(first, second) { + const merged = [...first != null ? first : [], ...second != null ? second : []]; + return merged.length > 0 ? merged : void 0; +} +function mergeStringLists(first, second) { + const merged = [...first != null ? first : [], ...second != null ? second : []]; + if (merged.length === 0) { + return void 0; + } + return Array.from(new Set(merged)); +} +function mergeSets(first, second) { + const merged = /* @__PURE__ */ new Set(); + for (const value of first != null ? first : []) { + merged.add(value); + } + for (const value of second != null ? second : []) { + merged.add(value); + } + return merged.size > 0 ? merged : void 0; +} + +// src/shared/components/ResumeSessionDropdown.ts +var import_obsidian24 = require("obsidian"); +var ResumeSessionDropdown = class { + constructor(containerEl, inputEl, conversations, currentConversationId, callbacks) { + this.selectedIndex = 0; + this.containerEl = containerEl; + this.inputEl = inputEl; + this.conversations = this.sortConversations(conversations); + this.currentConversationId = currentConversationId; + this.callbacks = callbacks; + this.dropdownEl = this.containerEl.createDiv({ cls: "claudian-resume-dropdown" }); + this.render(); + this.dropdownEl.addClass("visible"); + this.onInput = () => this.dismiss(); + this.inputEl.addEventListener("input", this.onInput); + } + handleKeydown(e2) { + if (!this.isVisible()) return false; + switch (e2.key) { + case "ArrowDown": + e2.preventDefault(); + this.navigate(1); + return true; + case "ArrowUp": + e2.preventDefault(); + this.navigate(-1); + return true; + case "Enter": + case "Tab": + if (this.conversations.length > 0) { + e2.preventDefault(); + this.selectItem(); + return true; + } + return false; + case "Escape": + e2.preventDefault(); + this.dismiss(); + return true; + } + return false; + } + isVisible() { + var _a5, _b3; + return (_b3 = (_a5 = this.dropdownEl) == null ? void 0 : _a5.hasClass("visible")) != null ? _b3 : false; + } + destroy() { + var _a5; + this.inputEl.removeEventListener("input", this.onInput); + (_a5 = this.dropdownEl) == null ? void 0 : _a5.remove(); + } + dismiss() { + this.dropdownEl.removeClass("visible"); + this.callbacks.onDismiss(); + } + selectItem() { + if (this.conversations.length === 0) return; + const selected = this.conversations[this.selectedIndex]; + if (!selected) return; + if (selected.id === this.currentConversationId) { + this.dismiss(); + return; + } + this.callbacks.onSelect(selected.id); + } + navigate(direction) { + const maxIndex = this.conversations.length - 1; + this.selectedIndex = Math.max(0, Math.min(maxIndex, this.selectedIndex + direction)); + this.updateSelection(); + } + updateSelection() { + const items = this.dropdownEl.querySelectorAll(".claudian-resume-item"); + items == null ? void 0 : items.forEach((item, index) => { + if (index === this.selectedIndex) { + item.addClass("selected"); + item.scrollIntoView({ block: "nearest" }); + } else { + item.removeClass("selected"); + } + }); + } + sortConversations(conversations) { + return [...conversations].sort((a, b2) => { + var _a5, _b3; + return ((_a5 = b2.lastResponseAt) != null ? _a5 : b2.createdAt) - ((_b3 = a.lastResponseAt) != null ? _b3 : a.createdAt); + }); + } + render() { + var _a5; + this.dropdownEl.empty(); + const header = this.dropdownEl.createDiv({ cls: "claudian-resume-header" }); + header.createSpan({ text: "Resume conversation" }); + if (this.conversations.length === 0) { + this.dropdownEl.createDiv({ cls: "claudian-resume-empty", text: "No conversations" }); + return; + } + const list = this.dropdownEl.createDiv({ cls: "claudian-resume-list" }); + for (let i = 0; i < this.conversations.length; i++) { + const conv = this.conversations[i]; + const isCurrent = conv.id === this.currentConversationId; + const item = list.createDiv({ cls: "claudian-resume-item" }); + if (isCurrent) item.addClass("current"); + if (i === this.selectedIndex) item.addClass("selected"); + const iconEl = item.createDiv({ cls: "claudian-resume-item-icon" }); + (0, import_obsidian24.setIcon)(iconEl, isCurrent ? "message-square-dot" : "message-square"); + const content = item.createDiv({ cls: "claudian-resume-item-content" }); + const titleEl = content.createDiv({ cls: "claudian-resume-item-title", text: conv.title }); + titleEl.setAttribute("title", conv.title); + content.createDiv({ + cls: "claudian-resume-item-date", + text: isCurrent ? "Current session" : this.formatDate((_a5 = conv.lastResponseAt) != null ? _a5 : conv.createdAt) + }); + item.addEventListener("click", () => { + if (isCurrent) { + this.dismiss(); + return; + } + this.callbacks.onSelect(conv.id); + }); + item.addEventListener("mouseenter", () => { + this.selectedIndex = i; + this.updateSelection(); + }); + } + } + formatDate(timestamp) { + const date7 = new Date(timestamp); + const now = /* @__PURE__ */ new Date(); + if (date7.toDateString() === now.toDateString()) { + return date7.toLocaleTimeString(void 0, { hour: "2-digit", minute: "2-digit", hour12: false }); + } + return date7.toLocaleDateString(void 0, { month: "short", day: "numeric" }); + } +}; + +// src/shared/modals/InstructionConfirmModal.ts +var import_obsidian25 = require("obsidian"); +var InstructionModal = class extends import_obsidian25.Modal { + constructor(app, rawInstruction, callbacks) { + super(app); + this.state = "loading"; + this.resolved = false; + // UI elements + this.contentSectionEl = null; + this.loadingEl = null; + this.clarificationEl = null; + this.confirmationEl = null; + this.buttonsEl = null; + // Clarification state + this.clarificationTextEl = null; + this.responseTextarea = null; + this.isSubmitting = false; + // Confirmation state + this.refinedInstruction = ""; + this.editTextarea = null; + this.isEditing = false; + this.refinedDisplayEl = null; + this.editContainerEl = null; + this.editBtnEl = null; + this.rawInstruction = rawInstruction; + this.callbacks = callbacks; + } + onOpen() { + const { contentEl } = this; + contentEl.addClass("claudian-instruction-modal"); + this.setTitle("Add custom instruction"); + const inputSection = contentEl.createDiv({ cls: "claudian-instruction-section" }); + const inputLabel = inputSection.createDiv({ cls: "claudian-instruction-label" }); + inputLabel.setText("Your input:"); + const inputText = inputSection.createDiv({ cls: "claudian-instruction-original" }); + inputText.setText(this.rawInstruction); + this.contentSectionEl = contentEl.createDiv({ cls: "claudian-instruction-content-section" }); + this.loadingEl = this.contentSectionEl.createDiv({ cls: "claudian-instruction-loading" }); + this.loadingEl.createDiv({ cls: "claudian-instruction-spinner" }); + this.loadingEl.createSpan({ text: "Processing your instruction..." }); + this.clarificationEl = this.contentSectionEl.createDiv({ cls: "claudian-instruction-clarification-section" }); + this.clarificationEl.addClass("claudian-hidden"); + this.clarificationTextEl = this.clarificationEl.createDiv({ cls: "claudian-instruction-clarification" }); + const responseSection = this.clarificationEl.createDiv({ cls: "claudian-instruction-section" }); + const responseLabel = responseSection.createDiv({ cls: "claudian-instruction-label" }); + responseLabel.setText("Your response:"); + this.responseTextarea = new import_obsidian25.TextAreaComponent(responseSection); + this.responseTextarea.inputEl.addClass("claudian-instruction-response-textarea"); + this.responseTextarea.inputEl.rows = 3; + this.responseTextarea.inputEl.placeholder = "Provide more details..."; + this.responseTextarea.inputEl.addEventListener("keydown", (e2) => { + if (e2.key === "Enter" && !e2.shiftKey && !e2.isComposing && !this.isSubmitting) { + e2.preventDefault(); + void this.submitClarification(); + } + }); + this.confirmationEl = this.contentSectionEl.createDiv({ cls: "claudian-instruction-confirmation-section" }); + this.confirmationEl.addClass("claudian-hidden"); + const refinedSection = this.confirmationEl.createDiv({ cls: "claudian-instruction-section" }); + const refinedLabel = refinedSection.createDiv({ cls: "claudian-instruction-label" }); + refinedLabel.setText("Refined snippet:"); + this.refinedDisplayEl = refinedSection.createDiv({ cls: "claudian-instruction-refined" }); + this.editContainerEl = refinedSection.createDiv({ cls: "claudian-instruction-edit-container" }); + this.editContainerEl.addClass("claudian-hidden"); + this.editTextarea = new import_obsidian25.TextAreaComponent(this.editContainerEl); + this.editTextarea.inputEl.addClass("claudian-instruction-edit-textarea"); + this.editTextarea.inputEl.rows = 4; + this.buttonsEl = contentEl.createDiv({ cls: "claudian-instruction-buttons" }); + this.updateButtons(); + this.showState("loading"); + } + showClarification(clarification) { + var _a5; + if (this.clarificationTextEl) { + this.clarificationTextEl.setText(clarification); + } + if (this.responseTextarea) { + this.responseTextarea.setValue(""); + } + this.isSubmitting = false; + this.showState("clarification"); + (_a5 = this.responseTextarea) == null ? void 0 : _a5.inputEl.focus(); + } + showConfirmation(refinedInstruction) { + this.refinedInstruction = refinedInstruction; + if (this.refinedDisplayEl) { + this.refinedDisplayEl.setText(refinedInstruction); + } + if (this.editTextarea) { + this.editTextarea.setValue(refinedInstruction); + } + this.showState("confirmation"); + } + showError(error48) { + this.resolved = true; + this.close(); + } + showClarificationLoading() { + this.isSubmitting = true; + if (this.loadingEl) { + this.loadingEl.querySelector(".claudian-instruction-spinner"); + const text = this.loadingEl.querySelector("span"); + if (text) text.textContent = "Processing..."; + } + this.showState("loading"); + } + showState(state) { + this.state = state; + if (this.loadingEl) { + this.loadingEl.toggleClass("claudian-hidden", state !== "loading"); + } + if (this.clarificationEl) { + this.clarificationEl.toggleClass("claudian-hidden", state !== "clarification"); + } + if (this.confirmationEl) { + this.confirmationEl.toggleClass("claudian-hidden", state !== "confirmation"); + } + this.updateButtons(); + } + updateButtons() { + if (!this.buttonsEl) return; + this.buttonsEl.empty(); + const cancelBtn = this.buttonsEl.createEl("button", { + text: "Cancel", + cls: "claudian-instruction-btn claudian-instruction-reject-btn", + attr: { "aria-label": "Cancel" } + }); + cancelBtn.addEventListener("click", () => this.handleReject()); + if (this.state === "clarification") { + const submitBtn = this.buttonsEl.createEl("button", { + text: "Submit", + cls: "claudian-instruction-btn claudian-instruction-accept-btn", + attr: { "aria-label": "Submit response" } + }); + submitBtn.addEventListener("click", () => { + void this.submitClarification(); + }); + } else if (this.state === "confirmation") { + this.editBtnEl = this.buttonsEl.createEl("button", { + text: "Edit", + cls: "claudian-instruction-btn claudian-instruction-edit-btn", + attr: { "aria-label": "Edit instruction" } + }); + this.editBtnEl.addEventListener("click", () => this.toggleEdit()); + const acceptBtn = this.buttonsEl.createEl("button", { + text: "Accept", + cls: "claudian-instruction-btn claudian-instruction-accept-btn", + attr: { "aria-label": "Accept instruction" } + }); + acceptBtn.addEventListener("click", () => this.handleAccept()); + acceptBtn.focus(); + } + } + async submitClarification() { + var _a5; + const response = (_a5 = this.responseTextarea) == null ? void 0 : _a5.getValue().trim(); + if (!response || this.isSubmitting) return; + this.showClarificationLoading(); + try { + await this.callbacks.onClarificationSubmit(response); + } catch (e2) { + this.isSubmitting = false; + this.showState("clarification"); + } + } + toggleEdit() { + var _a5, _b3, _c2, _d, _e2; + this.isEditing = !this.isEditing; + if (this.isEditing) { + (_a5 = this.refinedDisplayEl) == null ? void 0 : _a5.addClass("claudian-hidden"); + (_b3 = this.editContainerEl) == null ? void 0 : _b3.removeClass("claudian-hidden"); + if (this.editBtnEl) this.editBtnEl.setText("Preview"); + (_c2 = this.editTextarea) == null ? void 0 : _c2.inputEl.focus(); + } else { + const edited = ((_d = this.editTextarea) == null ? void 0 : _d.getValue()) || this.refinedInstruction; + this.refinedInstruction = edited; + if (this.refinedDisplayEl) { + this.refinedDisplayEl.setText(edited); + this.refinedDisplayEl.removeClass("claudian-hidden"); + } + (_e2 = this.editContainerEl) == null ? void 0 : _e2.addClass("claudian-hidden"); + if (this.editBtnEl) this.editBtnEl.setText("Edit"); + } + } + handleAccept() { + var _a5; + if (this.resolved) return; + this.resolved = true; + const finalInstruction = this.isEditing ? ((_a5 = this.editTextarea) == null ? void 0 : _a5.getValue()) || this.refinedInstruction : this.refinedInstruction; + this.callbacks.onAccept(finalInstruction); + this.close(); + } + handleReject() { + if (this.resolved) return; + this.resolved = true; + this.callbacks.onReject(); + this.close(); + } + onClose() { + if (!this.resolved) { + this.resolved = true; + this.callbacks.onReject(); + } + this.contentEl.empty(); + } +}; + +// src/utils/markdown.ts +function appendMarkdownSnippet(existingPrompt, snippet) { + const trimmedSnippet = snippet.trim(); + if (!trimmedSnippet) { + return existingPrompt; + } + if (!existingPrompt.trim()) { + return trimmedSnippet; + } + const separator = existingPrompt.endsWith("\n\n") ? "" : existingPrompt.endsWith("\n") ? "\n" : "\n\n"; + return existingPrompt + separator + trimmedSnippet; +} + +// src/features/chat/constants.ts +var COMPLETION_FLAVOR_WORDS = [ + "Baked", + "Cooked", + "Crunched", + "Brewed", + "Crafted", + "Forged", + "Conjured", + "Whipped up", + "Stirred", + "Simmered", + "Toasted", + "Saut\xE9ed", + "Finagled", + "Marinated", + "Distilled", + "Fermented", + "Percolated", + "Steeped", + "Roasted", + "Cured", + "Smoked", + "Cogitated" +]; +var FLAVOR_TEXTS = [ + // Classic + "Thinking...", + "Pondering...", + "Processing...", + "Analyzing...", + "Considering...", + "Working on it...", + "Vibing...", + "One moment...", + "On it...", + // Thoughtful + "Ruminating...", + "Contemplating...", + "Reflecting...", + "Mulling it over...", + "Let me think...", + "Hmm...", + "Cogitating...", + "Deliberating...", + "Weighing options...", + "Gathering thoughts...", + // Playful + "Brewing ideas...", + "Connecting dots...", + "Assembling thoughts...", + "Spinning up neurons...", + "Loading brilliance...", + "Consulting the oracle...", + "Summoning knowledge...", + "Crunching thoughts...", + "Dusting off neurons...", + "Wrangling ideas...", + "Herding thoughts...", + "Juggling concepts...", + "Untangling this...", + "Piecing it together...", + // Cozy + "Sipping coffee...", + "Warming up...", + "Getting cozy with this...", + "Settling in...", + "Making tea...", + "Grabbing a snack...", + // Technical + "Parsing...", + "Compiling thoughts...", + "Running inference...", + "Querying the void...", + "Defragmenting brain...", + "Allocating memory...", + "Optimizing...", + "Indexing...", + "Syncing neurons...", + // Zen + "Breathing...", + "Finding clarity...", + "Channeling focus...", + "Centering...", + "Aligning chakras...", + "Meditating on this...", + // Whimsical + "Asking the stars...", + "Reading tea leaves...", + "Shaking the magic 8-ball...", + "Consulting ancient scrolls...", + "Decoding the matrix...", + "Communing with the ether...", + "Peering into the abyss...", + "Channeling the cosmos...", + // Action + "Diving in...", + "Rolling up sleeves...", + "Getting to work...", + "Tackling this...", + "On the case...", + "Investigating...", + "Exploring...", + "Digging deeper...", + // Casual + "Bear with me...", + "Hang tight...", + "Just a sec...", + "Working my magic...", + "Almost there...", + "Give me a moment..." +]; + +// src/features/chat/rendering/InlineAskUserQuestion.ts +var HINTS_TEXT = "Enter to select \xB7 Tab/Arrow keys to navigate \xB7 Esc to cancel"; +var HINTS_TEXT_IMMEDIATE = "Enter to select \xB7 Arrow keys to navigate \xB7 Esc to cancel"; +var InlineAskUserQuestion = class { + constructor(containerEl, input, resolve8, signal, config2) { + this.resolved = false; + this.questions = []; + this.answers = /* @__PURE__ */ new Map(); + this.customInputs = /* @__PURE__ */ new Map(); + this.activeTabIndex = 0; + this.focusedItemIndex = 0; + this.isInputFocused = false; + this.tabElements = []; + this.currentItems = []; + this.abortHandler = null; + var _a5, _b3, _c2; + this.containerEl = containerEl; + this.input = input; + this.resolveCallback = resolve8; + this.signal = signal; + this.config = { + title: (_a5 = config2 == null ? void 0 : config2.title) != null ? _a5 : "Question", + headerEl: config2 == null ? void 0 : config2.headerEl, + showCustomInput: (_b3 = config2 == null ? void 0 : config2.showCustomInput) != null ? _b3 : true, + immediateSelect: (_c2 = config2 == null ? void 0 : config2.immediateSelect) != null ? _c2 : false + }; + this.boundKeyDown = (event) => this.handleKeyDown(event); + } + render() { + this.rootEl = this.containerEl.createDiv({ cls: "claudian-ask-question-inline" }); + const titleEl = this.rootEl.createDiv({ cls: "claudian-ask-inline-title" }); + titleEl.setText(this.config.title); + if (this.config.headerEl) { + this.rootEl.appendChild(this.config.headerEl); + } + this.questions = this.parseQuestions(); + if (this.questions.length === 0) { + this.handleResolve(null); + return; + } + if (this.config.immediateSelect && this.questions.length !== 1) { + this.config.immediateSelect = false; + } + for (let i = 0; i < this.questions.length; i++) { + this.answers.set(i, /* @__PURE__ */ new Set()); + this.customInputs.set(i, ""); + } + if (!this.config.immediateSelect) { + this.tabBar = this.rootEl.createDiv({ cls: "claudian-ask-tab-bar" }); + this.renderTabBar(); + } + this.contentArea = this.rootEl.createDiv({ cls: "claudian-ask-content" }); + this.renderTabContent(); + this.rootEl.setAttribute("tabindex", "0"); + this.rootEl.addEventListener("keydown", this.boundKeyDown); + window.requestAnimationFrame(() => { + this.rootEl.focus(); + this.rootEl.scrollIntoView({ block: "nearest", behavior: "smooth" }); + }); + if (this.signal) { + this.abortHandler = () => this.handleResolve(null); + this.signal.addEventListener("abort", this.abortHandler, { once: true }); + } + } + destroy() { + this.handleResolve(null); + } + parseQuestions() { + const raw = this.input.questions; + if (!Array.isArray(raw)) return []; + return raw.filter( + (q) => { + if (!q || typeof q !== "object" || Array.isArray(q)) { + return false; + } + const record2 = q; + return typeof record2.question === "string" && (Array.isArray(record2.options) && record2.options.length > 0 || record2.isOther === true); + } + ).map((q, idx) => { + var _a5; + return { + question: q.question, + id: typeof q.id === "string" ? q.id : void 0, + header: typeof q.header === "string" ? q.header.slice(0, 12) : `Q${idx + 1}`, + options: this.deduplicateOptions(((_a5 = q.options) != null ? _a5 : []).map((o2) => this.coerceOption(o2))), + multiSelect: q.multiSelect === true, + isOther: q.isOther === true, + isSecret: q.isSecret === true + }; + }); + } + coerceOption(opt) { + if (typeof opt === "object" && opt !== null) { + const obj = opt; + const label = this.extractLabel(obj); + const description = typeof obj.description === "string" ? obj.description : ""; + const value = this.extractValue(obj, label); + return { label, description, ...value !== label ? { value } : {} }; + } + return { label: this.stringifyOptionValue(opt), description: "" }; + } + deduplicateOptions(options) { + const seen = /* @__PURE__ */ new Set(); + return options.filter((o2) => { + if (seen.has(o2.label)) return false; + seen.add(o2.label); + return true; + }); + } + extractLabel(obj) { + if (typeof obj.label === "string") return obj.label; + if (typeof obj.value === "string") return obj.value; + if (typeof obj.text === "string") return obj.text; + if (typeof obj.name === "string") return obj.name; + return "Option"; + } + stringifyOptionValue(value) { + if (typeof value === "string") return value; + if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") { + return `${value}`; + } + return "Option"; + } + extractValue(obj, fallback) { + if (typeof obj.value === "string") return obj.value; + if (typeof obj.id === "string") return obj.id; + return fallback; + } + renderTabBar() { + this.tabBar.empty(); + this.tabElements = []; + for (let idx = 0; idx < this.questions.length; idx++) { + const answered = this.isQuestionAnswered(idx); + const tab = this.tabBar.createSpan({ cls: "claudian-ask-tab" }); + tab.createSpan({ text: this.questions[idx].header, cls: "claudian-ask-tab-label" }); + tab.createSpan({ text: answered ? " \u2713" : "", cls: "claudian-ask-tab-tick" }); + tab.setAttribute("title", this.questions[idx].question); + if (idx === this.activeTabIndex) tab.addClass("is-active"); + if (answered) tab.addClass("is-answered"); + tab.addEventListener("click", () => this.switchTab(idx)); + this.tabElements.push(tab); + } + const allAnswered = this.questions.every((_2, i) => this.isQuestionAnswered(i)); + const submitTab = this.tabBar.createSpan({ cls: "claudian-ask-tab" }); + submitTab.createSpan({ text: allAnswered ? "\u2713 " : "", cls: "claudian-ask-tab-submit-check" }); + submitTab.createSpan({ text: "Submit", cls: "claudian-ask-tab-label" }); + if (this.activeTabIndex === this.questions.length) submitTab.addClass("is-active"); + submitTab.addEventListener("click", () => this.switchTab(this.questions.length)); + this.tabElements.push(submitTab); + } + isQuestionAnswered(idx) { + return this.answers.get(idx).size > 0 || this.customInputs.get(idx).trim().length > 0; + } + switchTab(index) { + const clamped = Math.max(0, Math.min(index, this.questions.length)); + if (clamped === this.activeTabIndex) return; + this.activeTabIndex = clamped; + this.focusedItemIndex = 0; + this.isInputFocused = false; + if (!this.config.immediateSelect) { + this.renderTabBar(); + } + this.renderTabContent(); + this.rootEl.focus(); + } + renderTabContent() { + this.contentArea.empty(); + this.currentItems = []; + if (this.activeTabIndex < this.questions.length) { + this.renderQuestionTab(this.activeTabIndex); + } else { + this.renderSubmitTab(); + } + } + renderQuestionTab(idx) { + var _a5; + const q = this.questions[idx]; + const isMulti = q.multiSelect; + const selected = this.answers.get(idx); + this.contentArea.createDiv({ + text: q.question, + cls: "claudian-ask-question-text" + }); + const listEl = this.contentArea.createDiv({ cls: "claudian-ask-list" }); + for (let optIdx = 0; optIdx < q.options.length; optIdx++) { + const option = q.options[optIdx]; + const isFocused = optIdx === this.focusedItemIndex; + const optionValue = this.getOptionValue(option); + const isSelected = selected.has(optionValue); + const row = listEl.createDiv({ cls: "claudian-ask-item" }); + if (isFocused) row.addClass("is-focused"); + if (isSelected) row.addClass("is-selected"); + row.createSpan({ text: isFocused ? "\u203A" : "\xA0", cls: "claudian-ask-cursor" }); + row.createSpan({ text: `${optIdx + 1}. `, cls: "claudian-ask-item-num" }); + if (isMulti) { + this.renderMultiSelectCheckbox(row, isSelected); + } + const labelBlock = row.createDiv({ cls: "claudian-ask-item-content" }); + const labelRow = labelBlock.createDiv({ cls: "claudian-ask-label-row" }); + labelRow.createSpan({ text: option.label, cls: "claudian-ask-item-label" }); + if (!isMulti && isSelected) { + labelRow.createSpan({ text: " \u2713", cls: "claudian-ask-check-mark" }); + } + if (option.description) { + labelBlock.createDiv({ text: option.description, cls: "claudian-ask-item-desc" }); + } + row.addEventListener("click", () => { + this.focusedItemIndex = optIdx; + this.updateFocusIndicator(); + this.selectOption(idx, option); + }); + this.currentItems.push(row); + } + if (this.canShowCustomInputForQuestion(q)) { + const customIdx = q.options.length; + const customFocused = customIdx === this.focusedItemIndex; + const customText = (_a5 = this.customInputs.get(idx)) != null ? _a5 : ""; + const hasCustomText = customText.trim().length > 0; + const customRow = listEl.createDiv({ cls: "claudian-ask-item claudian-ask-custom-item" }); + if (customFocused) customRow.addClass("is-focused"); + customRow.createSpan({ text: customFocused ? "\u203A" : "\xA0", cls: "claudian-ask-cursor" }); + customRow.createSpan({ text: `${customIdx + 1}. `, cls: "claudian-ask-item-num" }); + if (isMulti) { + this.renderMultiSelectCheckbox(customRow, hasCustomText); + } + const inputEl = customRow.createEl("input", { + cls: "claudian-ask-custom-text", + value: customText + }); + inputEl.setAttribute("type", q.isSecret ? "password" : "text"); + inputEl.setAttribute("placeholder", q.isSecret ? "Enter secret." : "Type something."); + inputEl.addEventListener("input", () => { + this.customInputs.set(idx, inputEl.value); + if (!isMulti && inputEl.value.trim()) { + selected.clear(); + this.updateOptionVisuals(idx); + } + this.updateTabIndicators(); + }); + inputEl.addEventListener("focus", () => { + this.isInputFocused = true; + }); + inputEl.addEventListener("blur", () => { + this.isInputFocused = false; + }); + customRow.addEventListener("click", () => { + this.focusedItemIndex = customIdx; + this.updateFocusIndicator(); + inputEl.focus(); + }); + this.currentItems.push(customRow); + } + this.contentArea.createDiv({ + text: this.config.immediateSelect ? HINTS_TEXT_IMMEDIATE : HINTS_TEXT, + cls: "claudian-ask-hints" + }); + } + renderSubmitTab() { + this.contentArea.createDiv({ + text: "Review your answers", + cls: "claudian-ask-review-title" + }); + const reviewEl = this.contentArea.createDiv({ cls: "claudian-ask-review" }); + for (let idx = 0; idx < this.questions.length; idx++) { + const q = this.questions[idx]; + const answerText = this.getAnswerText(idx); + const pairEl = reviewEl.createDiv({ cls: "claudian-ask-review-pair" }); + pairEl.createDiv({ text: `${idx + 1}.`, cls: "claudian-ask-review-num" }); + const bodyEl = pairEl.createDiv({ cls: "claudian-ask-review-body" }); + bodyEl.createDiv({ text: q.question, cls: "claudian-ask-review-q-text" }); + bodyEl.createDiv({ + text: answerText || "Not answered", + cls: answerText ? "claudian-ask-review-a-text" : "claudian-ask-review-empty" + }); + pairEl.addEventListener("click", () => this.switchTab(idx)); + } + this.contentArea.createDiv({ + text: "Ready to submit your answers?", + cls: "claudian-ask-review-prompt" + }); + const actionsEl = this.contentArea.createDiv({ cls: "claudian-ask-list" }); + const allAnswered = this.questions.every((_2, i) => this.isQuestionAnswered(i)); + const submitRow = actionsEl.createDiv({ cls: "claudian-ask-item" }); + if (this.focusedItemIndex === 0) submitRow.addClass("is-focused"); + if (!allAnswered) submitRow.addClass("is-disabled"); + submitRow.createSpan({ text: this.focusedItemIndex === 0 ? "\u203A" : "\xA0", cls: "claudian-ask-cursor" }); + submitRow.createSpan({ text: "1. ", cls: "claudian-ask-item-num" }); + submitRow.createSpan({ text: "Submit answers", cls: "claudian-ask-item-label" }); + submitRow.addEventListener("click", () => { + this.focusedItemIndex = 0; + this.updateFocusIndicator(); + this.handleSubmit(); + }); + this.currentItems.push(submitRow); + const cancelRow = actionsEl.createDiv({ cls: "claudian-ask-item" }); + if (this.focusedItemIndex === 1) cancelRow.addClass("is-focused"); + cancelRow.createSpan({ text: this.focusedItemIndex === 1 ? "\u203A" : "\xA0", cls: "claudian-ask-cursor" }); + cancelRow.createSpan({ text: "2. ", cls: "claudian-ask-item-num" }); + cancelRow.createSpan({ text: "Cancel", cls: "claudian-ask-item-label" }); + cancelRow.addEventListener("click", () => { + this.focusedItemIndex = 1; + this.handleResolve(null); + }); + this.currentItems.push(cancelRow); + this.contentArea.createDiv({ + text: HINTS_TEXT, + cls: "claudian-ask-hints" + }); + } + getAnswerText(idx) { + const selected = this.getSelectedLabels(idx); + const custom2 = this.customInputs.get(idx); + const parts = []; + if (selected.length > 0) parts.push(selected.join(", ")); + if (custom2.trim()) parts.push(custom2.trim()); + return parts.join(", "); + } + selectOption(qIdx, option) { + var _a5; + const q = this.questions[qIdx]; + const selected = this.answers.get(qIdx); + const isMulti = q.multiSelect; + const optionValue = this.getOptionValue(option); + if (isMulti) { + if (selected.has(optionValue)) { + selected.delete(optionValue); + } else { + selected.add(optionValue); + } + } else { + selected.clear(); + selected.add(optionValue); + this.customInputs.set(qIdx, ""); + } + this.updateOptionVisuals(qIdx); + if (this.config.immediateSelect) { + const key = (_a5 = q.id) != null ? _a5 : q.question; + const result = {}; + result[key] = optionValue; + this.handleResolve(result); + return; + } + this.updateTabIndicators(); + if (!isMulti) { + this.switchTab(this.activeTabIndex + 1); + } + } + renderMultiSelectCheckbox(parent, checked) { + parent.createSpan({ + text: checked ? "[\u2713] " : "[ ] ", + cls: `claudian-ask-check${checked ? " is-checked" : ""}` + }); + } + updateOptionVisuals(qIdx) { + const q = this.questions[qIdx]; + const selected = this.answers.get(qIdx); + const isMulti = q.multiSelect; + for (let i = 0; i < q.options.length; i++) { + const item = this.currentItems[i]; + const isSelected = selected.has(this.getOptionValue(q.options[i])); + item.toggleClass("is-selected", isSelected); + if (isMulti) { + const checkSpan = item.querySelector(".claudian-ask-check"); + if (checkSpan) { + checkSpan.textContent = isSelected ? "[\u2713] " : "[ ] "; + checkSpan.toggleClass("is-checked", isSelected); + } + } else { + const labelRow = item.querySelector(".claudian-ask-label-row"); + const existingMark = item.querySelector(".claudian-ask-check-mark"); + if (isSelected && !existingMark && labelRow) { + labelRow.createSpan({ text: " \u2713", cls: "claudian-ask-check-mark" }); + } else if (!isSelected && existingMark) { + existingMark.remove(); + } + } + } + } + updateFocusIndicator() { + for (let i = 0; i < this.currentItems.length; i++) { + const item = this.currentItems[i]; + const cursor = item.querySelector(".claudian-ask-cursor"); + if (i === this.focusedItemIndex) { + item.addClass("is-focused"); + if (cursor) cursor.textContent = "\u203A"; + item.scrollIntoView({ block: "nearest" }); + } else { + item.removeClass("is-focused"); + if (cursor) cursor.textContent = "\xA0"; + } + } + } + updateTabIndicators() { + for (let idx = 0; idx < this.questions.length; idx++) { + const tab = this.tabElements[idx]; + const tick = tab.querySelector(".claudian-ask-tab-tick"); + const answered = this.isQuestionAnswered(idx); + tab.toggleClass("is-answered", answered); + if (tick) tick.textContent = answered ? " \u2713" : ""; + } + const submitTab = this.tabElements[this.questions.length]; + if (submitTab) { + const submitCheck = submitTab.querySelector(".claudian-ask-tab-submit-check"); + const allAnswered = this.questions.every((_2, i) => this.isQuestionAnswered(i)); + if (submitCheck) submitCheck.textContent = allAnswered ? "\u2713 " : ""; + } + } + handleNavigationKey(e2, maxFocusIndex) { + switch (e2.key) { + case "ArrowDown": + e2.preventDefault(); + e2.stopPropagation(); + this.focusedItemIndex = Math.min(this.focusedItemIndex + 1, maxFocusIndex); + this.updateFocusIndicator(); + return true; + case "ArrowUp": + e2.preventDefault(); + e2.stopPropagation(); + this.focusedItemIndex = Math.max(this.focusedItemIndex - 1, 0); + this.updateFocusIndicator(); + return true; + case "ArrowLeft": + if (this.config.immediateSelect) return false; + e2.preventDefault(); + e2.stopPropagation(); + this.switchTab(this.activeTabIndex - 1); + return true; + case "Tab": + if (this.config.immediateSelect) return false; + e2.preventDefault(); + e2.stopPropagation(); + if (e2.shiftKey) { + this.switchTab(this.activeTabIndex - 1); + } else { + this.switchTab(this.activeTabIndex + 1); + } + return true; + case "Escape": + e2.preventDefault(); + e2.stopPropagation(); + this.handleResolve(null); + return true; + default: + return false; + } + } + handleKeyDown(e2) { + var _a5, _b3, _c2; + if (this.isInputFocused) { + if (e2.key === "Escape") { + e2.preventDefault(); + e2.stopPropagation(); + this.isInputFocused = false; + (_a5 = this.rootEl.ownerDocument.activeElement) == null ? void 0 : _a5.blur(); + this.rootEl.focus(); + return; + } + if (e2.key === "Tab" || e2.key === "Enter") { + e2.preventDefault(); + e2.stopPropagation(); + this.isInputFocused = false; + (_b3 = this.rootEl.ownerDocument.activeElement) == null ? void 0 : _b3.blur(); + if (e2.key === "Tab" && e2.shiftKey) { + this.switchTab(this.activeTabIndex - 1); + } else { + this.switchTab(this.activeTabIndex + 1); + } + return; + } + if (e2.key === "ArrowUp" || e2.key === "ArrowDown") { + e2.preventDefault(); + e2.stopPropagation(); + (_c2 = this.rootEl.ownerDocument.activeElement) == null ? void 0 : _c2.blur(); + this.isInputFocused = false; + const q4 = this.questions[this.activeTabIndex]; + const maxIdx = this.canShowCustomInputForQuestion(q4) ? q4.options.length : q4.options.length - 1; + if (e2.key === "ArrowUp") { + this.focusedItemIndex = Math.max(this.focusedItemIndex - 1, 0); + } else { + this.focusedItemIndex = Math.min(this.focusedItemIndex + 1, maxIdx); + } + this.updateFocusIndicator(); + this.rootEl.focus(); + return; + } + return; + } + if (this.config.immediateSelect) { + const q4 = this.questions[this.activeTabIndex]; + const maxIdx = q4.options.length - 1; + if (this.handleNavigationKey(e2, maxIdx)) return; + if (e2.key === "Enter") { + e2.preventDefault(); + e2.stopPropagation(); + if (this.focusedItemIndex <= maxIdx) { + this.selectOption(this.activeTabIndex, q4.options[this.focusedItemIndex]); + } + } + return; + } + const isSubmitTab = this.activeTabIndex === this.questions.length; + const q = this.questions[this.activeTabIndex]; + const maxFocusIndex = isSubmitTab ? 1 : this.canShowCustomInputForQuestion(q) ? q.options.length : q.options.length - 1; + if (this.handleNavigationKey(e2, maxFocusIndex)) return; + if (isSubmitTab) { + if (e2.key === "Enter") { + e2.preventDefault(); + e2.stopPropagation(); + if (this.focusedItemIndex === 0) this.handleSubmit(); + else this.handleResolve(null); + } + return; + } + switch (e2.key) { + case "ArrowRight": + e2.preventDefault(); + e2.stopPropagation(); + this.switchTab(this.activeTabIndex + 1); + break; + case "Enter": + e2.preventDefault(); + e2.stopPropagation(); + if (this.focusedItemIndex < q.options.length) { + this.selectOption(this.activeTabIndex, q.options[this.focusedItemIndex]); + } else if (this.canShowCustomInputForQuestion(q)) { + this.isInputFocused = true; + const customRow = this.currentItems[this.focusedItemIndex]; + const input = customRow == null ? void 0 : customRow.querySelector(".claudian-ask-custom-text"); + input == null ? void 0 : input.focus(); + } + break; + } + } + handleSubmit() { + var _a5; + const allAnswered = this.questions.every((_2, i) => this.isQuestionAnswered(i)); + if (!allAnswered) return; + const result = {}; + for (let i = 0; i < this.questions.length; i++) { + const question = this.questions[i]; + const key = (_a5 = question.id) != null ? _a5 : question.question; + const selectedValues = [...this.answers.get(i)]; + const customInput = this.customInputs.get(i).trim(); + if (question.multiSelect) { + const answers = [...selectedValues]; + if (customInput) { + answers.push(customInput); + } + result[key] = answers; + continue; + } + result[key] = customInput || selectedValues[0] || ""; + } + this.handleResolve(result); + } + canShowCustomInputForQuestion(question) { + return this.config.showCustomInput && question.isOther === true; + } + getOptionValue(option) { + var _a5; + return (_a5 = option.value) != null ? _a5 : option.label; + } + getSelectedLabels(idx) { + const selected = this.answers.get(idx); + const question = this.questions[idx]; + return question.options.filter((option) => selected.has(this.getOptionValue(option))).map((option) => option.label); + } + handleResolve(result) { + var _a5, _b3; + if (!this.resolved) { + this.resolved = true; + (_a5 = this.rootEl) == null ? void 0 : _a5.removeEventListener("keydown", this.boundKeyDown); + if (this.signal && this.abortHandler) { + this.signal.removeEventListener("abort", this.abortHandler); + this.abortHandler = null; + } + (_b3 = this.rootEl) == null ? void 0 : _b3.remove(); + this.resolveCallback(result); + } + } +}; + +// src/features/chat/rendering/InlineExitPlanMode.ts +var fs26 = __toESM(require("fs")); +var nodePath = __toESM(require("path")); +var HINTS_TEXT2 = "Arrow keys to navigate \xB7 Enter to select \xB7 Esc to cancel"; +var InlineExitPlanMode = class { + constructor(containerEl, input, resolve8, signal, renderContent, planPathPrefix) { + this.resolved = false; + this.planContent = null; + this.planReadError = null; + this.focusedIndex = 0; + this.items = []; + this.isInputFocused = false; + this.abortHandler = null; + this.containerEl = containerEl; + this.input = input; + this.resolveCallback = resolve8; + this.signal = signal; + this.renderContent = renderContent; + this.planPathPrefix = planPathPrefix; + this.boundKeyDown = (event) => this.handleKeyDown(event); + } + render() { + this.rootEl = this.containerEl.createDiv({ cls: "claudian-plan-approval-inline" }); + const titleEl = this.rootEl.createDiv({ cls: "claudian-plan-inline-title" }); + titleEl.setText("Plan complete"); + this.planContent = this.readPlanContent(); + if (this.planContent) { + const contentEl = this.rootEl.createDiv({ cls: "claudian-plan-content-preview" }); + if (this.renderContent) { + void this.renderContent(contentEl, this.planContent); + } else { + contentEl.createDiv({ cls: "claudian-plan-content-text", text: this.planContent }); + } + } else if (this.planReadError) { + this.rootEl.createDiv({ + cls: "claudian-plan-content-preview claudian-plan-read-error", + text: `Could not read plan file: ${this.planReadError}. "Approve (new session)" will not include plan details.` + }); + } + const allowedPrompts = this.input.allowedPrompts; + if (allowedPrompts && Array.isArray(allowedPrompts) && allowedPrompts.length > 0) { + const permEl = this.rootEl.createDiv({ cls: "claudian-plan-permissions" }); + permEl.createDiv({ text: "Requested permissions:", cls: "claudian-plan-permissions-label" }); + const listEl = permEl.createEl("ul", { cls: "claudian-plan-permissions-list" }); + for (const perm of allowedPrompts) { + listEl.createEl("li", { text: perm.prompt }); + } + } + const actionsEl = this.rootEl.createDiv({ cls: "claudian-ask-list" }); + const newSessionRow = actionsEl.createDiv({ cls: "claudian-ask-item" }); + newSessionRow.addClass("is-focused"); + newSessionRow.createSpan({ text: "\u203A", cls: "claudian-ask-cursor" }); + newSessionRow.createSpan({ text: "1. ", cls: "claudian-ask-item-num" }); + newSessionRow.createSpan({ text: "Approve (new session)", cls: "claudian-ask-item-label" }); + newSessionRow.addEventListener("click", () => { + this.focusedIndex = 0; + this.updateFocus(); + this.handleResolve({ + type: "approve-new-session", + planContent: this.extractPlanContent() + }); + }); + this.items.push(newSessionRow); + const approveRow = actionsEl.createDiv({ cls: "claudian-ask-item" }); + approveRow.createSpan({ text: "\xA0", cls: "claudian-ask-cursor" }); + approveRow.createSpan({ text: "2. ", cls: "claudian-ask-item-num" }); + approveRow.createSpan({ text: "Approve (current session)", cls: "claudian-ask-item-label" }); + approveRow.addEventListener("click", () => { + this.focusedIndex = 1; + this.updateFocus(); + this.handleResolve({ type: "approve" }); + }); + this.items.push(approveRow); + const feedbackRow = actionsEl.createDiv({ cls: "claudian-ask-item claudian-ask-custom-item" }); + feedbackRow.createSpan({ text: "\xA0", cls: "claudian-ask-cursor" }); + feedbackRow.createSpan({ text: "3. ", cls: "claudian-ask-item-num" }); + this.feedbackInput = feedbackRow.createEl("input", { + type: "text", + cls: "claudian-ask-custom-text", + placeholder: "Enter feedback to continue planning..." + }); + this.feedbackInput.addEventListener("focus", () => { + this.isInputFocused = true; + }); + this.feedbackInput.addEventListener("blur", () => { + this.isInputFocused = false; + }); + feedbackRow.addEventListener("click", () => { + this.focusedIndex = 2; + this.updateFocus(); + }); + this.items.push(feedbackRow); + this.rootEl.createDiv({ text: HINTS_TEXT2, cls: "claudian-ask-hints" }); + this.rootEl.setAttribute("tabindex", "0"); + this.rootEl.addEventListener("keydown", this.boundKeyDown); + window.requestAnimationFrame(() => { + this.rootEl.focus(); + this.rootEl.scrollIntoView({ block: "nearest", behavior: "smooth" }); + }); + if (this.signal) { + this.abortHandler = () => this.handleResolve(null); + this.signal.addEventListener("abort", this.abortHandler, { once: true }); + } + } + destroy() { + this.handleResolve(null); + } + readPlanContent() { + const planFilePath = this.input.planFilePath; + if (!planFilePath) return null; + const resolved = nodePath.resolve(planFilePath).replace(/\\/g, "/"); + if (!this.planPathPrefix || !resolved.includes(this.planPathPrefix)) { + this.planReadError = "path outside allowed plan directory"; + return null; + } + try { + const content = fs26.readFileSync(planFilePath, "utf-8"); + return content.trim() || null; + } catch (err) { + this.planReadError = err instanceof Error ? err.message : "unknown error"; + return null; + } + } + extractPlanContent() { + if (this.planContent) { + return `Implement this plan: + +${this.planContent}`; + } + return "Implement the approved plan."; + } + handleKeyDown(e2) { + if (this.isInputFocused) { + if (e2.key === "Escape") { + e2.preventDefault(); + e2.stopPropagation(); + this.isInputFocused = false; + this.feedbackInput.blur(); + this.rootEl.focus(); + return; + } + if (e2.key === "Enter" && this.feedbackInput.value.trim()) { + e2.preventDefault(); + e2.stopPropagation(); + this.handleResolve({ type: "feedback", text: this.feedbackInput.value.trim() }); + return; + } + return; + } + switch (e2.key) { + case "ArrowDown": + e2.preventDefault(); + e2.stopPropagation(); + this.focusedIndex = Math.min(this.focusedIndex + 1, this.items.length - 1); + this.updateFocus(); + break; + case "ArrowUp": + e2.preventDefault(); + e2.stopPropagation(); + this.focusedIndex = Math.max(this.focusedIndex - 1, 0); + this.updateFocus(); + break; + case "Enter": + e2.preventDefault(); + e2.stopPropagation(); + if (this.focusedIndex === 0) { + this.handleResolve({ + type: "approve-new-session", + planContent: this.extractPlanContent() + }); + } else if (this.focusedIndex === 1) { + this.handleResolve({ type: "approve" }); + } else if (this.focusedIndex === 2) { + this.feedbackInput.focus(); + } + break; + case "Escape": + e2.preventDefault(); + e2.stopPropagation(); + this.handleResolve(null); + break; + } + } + updateFocus() { + for (let i = 0; i < this.items.length; i++) { + const item = this.items[i]; + const cursor = item.querySelector(".claudian-ask-cursor"); + if (i === this.focusedIndex) { + item.addClass("is-focused"); + if (cursor) cursor.textContent = "\u203A"; + item.scrollIntoView({ block: "nearest" }); + if (item.hasClass("claudian-ask-custom-item")) { + const input = item.querySelector(".claudian-ask-custom-text"); + if (input) { + input.focus(); + this.isInputFocused = true; + } + } + } else { + item.removeClass("is-focused"); + if (cursor) cursor.textContent = "\xA0"; + if (item.hasClass("claudian-ask-custom-item")) { + const input = item.querySelector(".claudian-ask-custom-text"); + if (input && this.rootEl.ownerDocument.activeElement === input) { + input.blur(); + this.isInputFocused = false; + } + } + } + } + } + handleResolve(decision) { + var _a5, _b3; + if (!this.resolved) { + this.resolved = true; + (_a5 = this.rootEl) == null ? void 0 : _a5.removeEventListener("keydown", this.boundKeyDown); + if (this.signal && this.abortHandler) { + this.signal.removeEventListener("abort", this.abortHandler); + this.abortHandler = null; + } + (_b3 = this.rootEl) == null ? void 0 : _b3.remove(); + this.resolveCallback(decision); + } + } +}; + +// src/features/chat/rendering/InlinePlanApproval.ts +var HINTS_TEXT3 = "Arrow keys to navigate \xB7 Enter to select \xB7 Esc to cancel"; +var InlinePlanApproval = class { + constructor(containerEl, resolve8) { + this.resolved = false; + this.focusedIndex = 0; + this.items = []; + this.isInputFocused = false; + this.containerEl = containerEl; + this.resolveCallback = resolve8; + this.boundKeyDown = (event) => this.handleKeyDown(event); + } + render() { + this.rootEl = this.containerEl.createDiv({ cls: "claudian-plan-approval-inline" }); + this.rootEl.createDiv({ cls: "claudian-plan-inline-title", text: "Plan complete" }); + const actionsEl = this.rootEl.createDiv({ cls: "claudian-ask-list" }); + const implementRow = actionsEl.createDiv({ cls: "claudian-ask-item" }); + implementRow.addClass("is-focused"); + implementRow.createSpan({ text: "\u203A", cls: "claudian-ask-cursor" }); + implementRow.createSpan({ text: "1. ", cls: "claudian-ask-item-num" }); + implementRow.createSpan({ text: "Implement", cls: "claudian-ask-item-label" }); + implementRow.addEventListener("click", () => { + this.focusedIndex = 0; + this.updateFocus(); + this.handleResolve({ type: "implement" }); + }); + this.items.push(implementRow); + const reviseRow = actionsEl.createDiv({ cls: "claudian-ask-item claudian-ask-custom-item" }); + reviseRow.createSpan({ text: "\xA0", cls: "claudian-ask-cursor" }); + reviseRow.createSpan({ text: "2. ", cls: "claudian-ask-item-num" }); + this.feedbackInput = reviseRow.createEl("input", { + type: "text", + cls: "claudian-ask-custom-text", + placeholder: "Enter feedback to revise plan..." + }); + this.feedbackInput.addEventListener("focus", () => { + this.isInputFocused = true; + }); + this.feedbackInput.addEventListener("blur", () => { + this.isInputFocused = false; + }); + reviseRow.addEventListener("click", () => { + this.focusedIndex = 1; + this.updateFocus(); + }); + this.items.push(reviseRow); + const cancelRow = actionsEl.createDiv({ cls: "claudian-ask-item" }); + cancelRow.createSpan({ text: "\xA0", cls: "claudian-ask-cursor" }); + cancelRow.createSpan({ text: "3. ", cls: "claudian-ask-item-num" }); + cancelRow.createSpan({ text: "Cancel", cls: "claudian-ask-item-label" }); + cancelRow.addEventListener("click", () => { + this.focusedIndex = 2; + this.updateFocus(); + this.handleResolve({ type: "cancel" }); + }); + this.items.push(cancelRow); + this.rootEl.createDiv({ text: HINTS_TEXT3, cls: "claudian-ask-hints" }); + this.rootEl.setAttribute("tabindex", "0"); + this.rootEl.addEventListener("keydown", this.boundKeyDown); + window.requestAnimationFrame(() => { + this.rootEl.focus(); + this.rootEl.scrollIntoView({ block: "nearest", behavior: "smooth" }); + }); + } + destroy() { + this.handleResolve(null); + } + handleKeyDown(e2) { + if (this.isInputFocused) { + if (e2.key === "Escape") { + e2.preventDefault(); + e2.stopPropagation(); + this.isInputFocused = false; + this.feedbackInput.blur(); + this.rootEl.focus(); + return; + } + if (e2.key === "Enter" && this.feedbackInput.value.trim()) { + e2.preventDefault(); + e2.stopPropagation(); + this.handleResolve({ type: "revise", text: this.feedbackInput.value.trim() }); + return; + } + return; + } + switch (e2.key) { + case "ArrowDown": + e2.preventDefault(); + e2.stopPropagation(); + this.focusedIndex = Math.min(this.focusedIndex + 1, this.items.length - 1); + this.updateFocus(); + break; + case "ArrowUp": + e2.preventDefault(); + e2.stopPropagation(); + this.focusedIndex = Math.max(this.focusedIndex - 1, 0); + this.updateFocus(); + break; + case "Enter": + e2.preventDefault(); + e2.stopPropagation(); + if (this.focusedIndex === 0) { + this.handleResolve({ type: "implement" }); + } else if (this.focusedIndex === 1) { + this.feedbackInput.focus(); + } else if (this.focusedIndex === 2) { + this.handleResolve({ type: "cancel" }); + } + break; + case "Escape": + e2.preventDefault(); + e2.stopPropagation(); + this.handleResolve(null); + break; + } + } + updateFocus() { + for (let i = 0; i < this.items.length; i++) { + const item = this.items[i]; + const cursor = item.querySelector(".claudian-ask-cursor"); + if (i === this.focusedIndex) { + item.addClass("is-focused"); + if (cursor) cursor.textContent = "\u203A"; + item.scrollIntoView({ block: "nearest" }); + if (item.hasClass("claudian-ask-custom-item")) { + const input = item.querySelector(".claudian-ask-custom-text"); + if (input) { + input.focus(); + this.isInputFocused = true; + } + } + } else { + item.removeClass("is-focused"); + if (cursor) cursor.textContent = "\xA0"; + if (item.hasClass("claudian-ask-custom-item") && this.isInputFocused) { + const input = item.querySelector(".claudian-ask-custom-text"); + if (input) { + input.blur(); + this.isInputFocused = false; + } + } + } + } + } + handleResolve(decision) { + var _a5, _b3; + if (!this.resolved) { + this.resolved = true; + (_a5 = this.rootEl) == null ? void 0 : _a5.removeEventListener("keydown", this.boundKeyDown); + (_b3 = this.rootEl) == null ? void 0 : _b3.remove(); + this.resolveCallback(decision); + } + } +}; + +// src/features/chat/rendering/ToolCallRenderer.ts +var import_obsidian27 = require("obsidian"); + +// src/core/tools/toolIcons.ts +var TOOL_ICONS = { + [TOOL_READ]: "file-text", + [TOOL_WRITE]: "file-plus", + [TOOL_EDIT]: "file-pen", + [TOOL_NOTEBOOK_EDIT]: "file-pen", + [TOOL_BASH]: "terminal", + [TOOL_BASH_OUTPUT]: "terminal", + [TOOL_KILL_SHELL]: "terminal", + [TOOL_GLOB]: "folder-search", + [TOOL_GREP]: "search", + [TOOL_LS]: "list", + [TOOL_TODO_WRITE]: "list-checks", + [TOOL_TASK]: "bot", + [TOOL_SUBAGENT_LEGACY]: "bot", + [TOOL_LIST_MCP_RESOURCES]: "list", + [TOOL_READ_MCP_RESOURCE]: "file-text", + [TOOL_MCP]: "wrench", + [TOOL_WEB_SEARCH]: "globe", + [TOOL_WEB_FETCH]: "download", + [TOOL_AGENT_OUTPUT]: "bot", + [TOOL_ASK_USER_QUESTION]: "help-circle", + [TOOL_SKILL]: "zap", + [TOOL_TOOL_SEARCH]: "search-check", + [TOOL_ENTER_PLAN_MODE]: "map", + [TOOL_EXIT_PLAN_MODE]: "check-circle", + // Runtime-managed tools + [TOOL_APPLY_PATCH]: "file-pen", + [TOOL_WRITE_STDIN]: "terminal", + [TOOL_SPAWN_AGENT]: "bot", + [TOOL_SEND_INPUT]: "bot", + [TOOL_WAIT]: "clock", + [TOOL_WAIT_AGENT]: "clock", + [TOOL_RESUME_AGENT]: "bot", + [TOOL_CLOSE_AGENT]: "bot" +}; +var MCP_ICON_MARKER = "__mcp_icon__"; +function getToolIcon(toolName) { + if (toolName.startsWith("mcp__")) { + return MCP_ICON_MARKER; + } + return TOOL_ICONS[toolName] || "wrench"; +} + +// src/features/chat/rendering/DiffRenderer.ts +function renderDiffStats(statsEl, stats) { + if (stats.added > 0) { + const addedEl = statsEl.createSpan({ cls: "added" }); + addedEl.setText(`+${stats.added}`); + } + if (stats.removed > 0) { + if (stats.added > 0) { + statsEl.createSpan({ text: " " }); + } + const removedEl = statsEl.createSpan({ cls: "removed" }); + removedEl.setText(`-${stats.removed}`); + } +} +function splitIntoHunks(diffLines, contextLines = 3) { + if (diffLines.length === 0) return []; + const changedIndices = []; + for (let i = 0; i < diffLines.length; i++) { + if (diffLines[i].type !== "equal") { + changedIndices.push(i); + } + } + if (changedIndices.length === 0) return []; + const ranges = []; + for (const idx of changedIndices) { + const start = Math.max(0, idx - contextLines); + const end = Math.min(diffLines.length - 1, idx + contextLines); + if (ranges.length > 0 && start <= ranges[ranges.length - 1].end + 1) { + ranges[ranges.length - 1].end = end; + } else { + ranges.push({ start, end }); + } + } + const hunks = []; + for (const range of ranges) { + const lines = diffLines.slice(range.start, range.end + 1); + let oldStart = 1; + let newStart = 1; + for (let i = 0; i < range.start; i++) { + const line = diffLines[i]; + if (line.type === "equal" || line.type === "delete") oldStart++; + if (line.type === "equal" || line.type === "insert") newStart++; + } + hunks.push({ lines, oldStart, newStart }); + } + return hunks; +} +var NEW_FILE_DISPLAY_CAP = 20; +function renderDiffContent(containerEl, diffLines, contextLines = 3) { + containerEl.empty(); + const allInserts = diffLines.length > 0 && diffLines.every((l2) => l2.type === "insert"); + if (allInserts && diffLines.length > NEW_FILE_DISPLAY_CAP) { + const hunkEl = containerEl.createDiv({ cls: "claudian-diff-hunk" }); + for (const line of diffLines.slice(0, NEW_FILE_DISPLAY_CAP)) { + const lineEl = hunkEl.createDiv({ cls: "claudian-diff-line claudian-diff-insert" }); + const prefixEl = lineEl.createSpan({ cls: "claudian-diff-prefix" }); + prefixEl.setText("+"); + const contentEl = lineEl.createSpan({ cls: "claudian-diff-text" }); + contentEl.setText(line.text || " "); + } + const remaining = diffLines.length - NEW_FILE_DISPLAY_CAP; + const separator = containerEl.createDiv({ cls: "claudian-diff-separator" }); + separator.setText(`... ${remaining} more lines`); + return; + } + const hunks = splitIntoHunks(diffLines, contextLines); + if (hunks.length === 0) { + const noChanges = containerEl.createDiv({ cls: "claudian-diff-no-changes" }); + noChanges.setText("No changes"); + return; + } + hunks.forEach((hunk, hunkIndex) => { + if (hunkIndex > 0) { + const separator = containerEl.createDiv({ cls: "claudian-diff-separator" }); + separator.setText("..."); + } + const hunkEl = containerEl.createDiv({ cls: "claudian-diff-hunk" }); + for (const line of hunk.lines) { + const lineEl = hunkEl.createDiv({ cls: `claudian-diff-line claudian-diff-${line.type}` }); + const prefix = line.type === "insert" ? "+" : line.type === "delete" ? "-" : " "; + const prefixEl = lineEl.createSpan({ cls: "claudian-diff-prefix" }); + prefixEl.setText(prefix); + const contentEl = lineEl.createSpan({ cls: "claudian-diff-text" }); + contentEl.setText(line.text || " "); + } + }); +} + +// src/features/chat/rendering/todoUtils.ts +var import_obsidian26 = require("obsidian"); +function getTodoStatusIcon(status) { + return status === "completed" ? "check" : "dot"; +} +function getTodoDisplayText(todo) { + return todo.status === "in_progress" ? todo.activeForm : todo.content; +} +function renderTodoItems(container, todos) { + container.empty(); + for (const todo of todos) { + const item = container.createDiv({ cls: `claudian-todo-item claudian-todo-${todo.status}` }); + const icon = item.createSpan({ cls: "claudian-todo-status-icon" }); + icon.setAttribute("aria-hidden", "true"); + (0, import_obsidian26.setIcon)(icon, getTodoStatusIcon(todo.status)); + const text = item.createSpan({ cls: "claudian-todo-text" }); + text.setText(getTodoDisplayText(todo)); + } +} + +// src/features/chat/rendering/ToolCallRenderer.ts +function setToolIcon(el2, name) { + const icon = getToolIcon(name); + if (icon === MCP_ICON_MARKER) { + appendMcpIcon(el2); + } else { + (0, import_obsidian27.setIcon)(el2, icon); + } +} +function stringifyToolValue(value) { + if (typeof value === "string") return value; + if (typeof value === "number" || typeof value === "boolean") return String(value); + if (value === null || value === void 0) return ""; + try { + return JSON.stringify(value); + } catch (e2) { + return ""; + } +} +function getInputText(input, key, fallback = "") { + return stringifyToolValue(input[key]) || fallback; +} +function getToolName(name, input) { + switch (name) { + case TOOL_TODO_WRITE: { + const todos = input.todos; + if (todos && Array.isArray(todos) && todos.length > 0) { + const completed = todos.filter((t11) => t11.status === "completed").length; + return `Tasks ${completed}/${todos.length}`; + } + return "Tasks"; + } + case TOOL_ENTER_PLAN_MODE: + return "Entering plan mode"; + case TOOL_EXIT_PLAN_MODE: + return "Plan complete"; + default: + return name; + } +} +function getToolSummary(name, input) { + switch (name) { + case TOOL_READ: + case TOOL_WRITE: + case TOOL_EDIT: { + const filePath = getInputText(input, "file_path"); + return fileNameOnly(filePath); + } + case TOOL_BASH: { + const cmd = getInputText(input, "command"); + return truncateText(cmd, 60); + } + case TOOL_GLOB: + case TOOL_GREP: + return getInputText(input, "pattern"); + case TOOL_WEB_SEARCH: + return getWebSearchSummary(input, 60); + case TOOL_WEB_FETCH: + return truncateText(getInputText(input, "url"), 60); + case TOOL_LS: + return fileNameOnly(getInputText(input, "path", ".")); + case TOOL_SKILL: + return getInputText(input, "skill"); + case TOOL_TOOL_SEARCH: + return truncateText(parseToolSearchQuery(getInputText(input, "query")), 60); + case TOOL_TODO_WRITE: + return ""; + case TOOL_APPLY_PATCH: + return getApplyPatchSummary(input); + case TOOL_WRITE_STDIN: + return getWriteStdinSummary(input); + default: + if (isAgentLifecycleTool(name)) { + return getAgentLifecycleSummary(name, input); + } + return ""; + } +} +function getToolLabel(name, input) { + switch (name) { + case TOOL_READ: + return `Read: ${shortenPath(getInputText(input, "file_path")) || "file"}`; + case TOOL_WRITE: + return `Write: ${shortenPath(getInputText(input, "file_path")) || "file"}`; + case TOOL_EDIT: + return `Edit: ${shortenPath(getInputText(input, "file_path")) || "file"}`; + case TOOL_BASH: { + const cmd = getInputText(input, "command", "command"); + return `Bash: ${cmd.length > 40 ? cmd.substring(0, 40) + "..." : cmd}`; + } + case TOOL_GLOB: + return `Glob: ${getInputText(input, "pattern", "files")}`; + case TOOL_GREP: + return `Grep: ${getInputText(input, "pattern", "pattern")}`; + case TOOL_WEB_SEARCH: { + return getWebSearchLabel(input, 40); + } + case TOOL_WEB_FETCH: { + const url2 = getInputText(input, "url", "url"); + return `WebFetch: ${url2.length > 40 ? url2.substring(0, 40) + "..." : url2}`; + } + case TOOL_LS: + return `LS: ${shortenPath(getInputText(input, "path")) || "."}`; + case TOOL_TODO_WRITE: { + const todos = input.todos; + if (todos && Array.isArray(todos)) { + const completed = todos.filter((t11) => t11.status === "completed").length; + return `Tasks (${completed}/${todos.length})`; + } + return "Tasks"; + } + case TOOL_SKILL: { + const skillName = getInputText(input, "skill", "skill"); + return `Skill: ${skillName}`; + } + case TOOL_TOOL_SEARCH: { + const tools = parseToolSearchQuery(getInputText(input, "query")); + return `ToolSearch: ${tools || "tools"}`; + } + case TOOL_ENTER_PLAN_MODE: + return "Entering plan mode"; + case TOOL_EXIT_PLAN_MODE: + return "Plan complete"; + case TOOL_APPLY_PATCH: { + const summary = getApplyPatchSummary(input); + return summary ? `apply_patch: ${summary}` : "apply_patch"; + } + case TOOL_WRITE_STDIN: { + const summary = getWriteStdinSummary(input); + return summary ? `write_stdin: ${summary}` : "write_stdin"; + } + default: + if (isAgentLifecycleTool(name)) { + const summary = getAgentLifecycleSummary(name, input); + return summary ? `${name}: ${summary}` : name; + } + return name; + } +} +function fileNameOnly(filePath) { + var _a5; + if (!filePath) return ""; + const normalized = filePath.replace(/\\/g, "/"); + return (_a5 = normalized.split("/").pop()) != null ? _a5 : normalized; +} +function getApplyPatchSummary(input) { + const patchText = typeof input.patch === "string" ? input.patch : ""; + const patchFiles = [...patchText.matchAll(/^\*\*\* (?:Add|Update|Delete) File: (.+)$/gm)].map((m4) => { + var _a5, _b3; + return (_b3 = (_a5 = m4[1]) == null ? void 0 : _a5.trim()) != null ? _b3 : ""; + }); + const changes = input.changes; + const changeFiles = Array.isArray(changes) ? changes.map((c) => c.path).filter((p) => !!p) : []; + const files = [.../* @__PURE__ */ new Set([...patchFiles, ...changeFiles])]; + if (files.length === 0) return patchText ? "patch" : ""; + if (files.length === 1) return fileNameOnly(files[0]); + return `${files.length} files`; +} +function getWriteStdinSummary(input) { + var _a5; + const sessionId = stringifyToolValue((_a5 = input.session_id) != null ? _a5 : input.sessionId); + const chars = typeof input.chars === "string" ? input.chars.replace(/\n/g, "\\n") : ""; + if (chars) { + const preview = chars.length > 24 ? `${chars.slice(0, 24)}...` : chars; + return sessionId ? `#${sessionId} ${preview}` : preview; + } + return sessionId ? `#${sessionId}` : ""; +} +function getAgentLifecycleSummary(name, input) { + switch (name) { + case "spawn_agent": { + const msg = typeof input.message === "string" ? input.message : ""; + return msg.length > 50 ? `${msg.slice(0, 50)}...` : msg; + } + case "send_input": { + const msg = typeof input.message === "string" ? input.message : ""; + return msg.length > 40 ? `${msg.slice(0, 40)}...` : msg; + } + case "wait": { + const ids = Array.isArray(input.ids) ? input.ids.length : 0; + const timeoutMs = typeof input.timeout_ms === "number" ? input.timeout_ms : void 0; + const parts = []; + if (ids > 0) parts.push(`${ids} agent${ids === 1 ? "" : "s"}`); + if (timeoutMs !== void 0) parts.push(`${Math.round(timeoutMs / 1e3)}s`); + return parts.join(", "); + } + case "resume_agent": + case "close_agent": + return ""; + default: + return ""; + } +} +function shortenPath(filePath) { + if (!filePath) return ""; + const normalized = filePath.replace(/\\/g, "/"); + const parts = normalized.split("/"); + if (parts.length <= 3) return normalized; + return ".../" + parts.slice(-2).join("/"); +} +function truncateText(text, maxLength) { + if (text.length <= maxLength) return text; + return text.substring(0, maxLength) + "..."; +} +function parseToolSearchQuery(query) { + if (!query) return ""; + const selectPrefix = "select:"; + const body = query.startsWith(selectPrefix) ? query.slice(selectPrefix.length) : query; + return body.split(",").map((s2) => s2.trim()).filter(Boolean).join(", "); +} +function normalizeWebSearchDisplayData(input) { + var _a5; + const queries = Array.isArray(input.queries) ? input.queries.filter((entry) => typeof entry === "string" && entry.trim().length > 0).map((entry) => entry.trim()) : []; + const query = typeof input.query === "string" && input.query.trim() ? input.query.trim() : (_a5 = queries[0]) != null ? _a5 : ""; + const url2 = typeof input.url === "string" && input.url.trim() ? input.url.trim() : ""; + const pattern = typeof input.pattern === "string" && input.pattern.trim() ? input.pattern.trim() : ""; + const explicitActionType = typeof input.actionType === "string" && input.actionType.trim() ? input.actionType.trim() : ""; + const actionType = explicitActionType || (url2 && pattern ? "find_in_page" : url2 ? "open_page" : query || queries.length > 0 ? "search" : ""); + return { actionType, query, queries, url: url2, pattern }; +} +function getWebSearchSummary(input, maxLength) { + const data = normalizeWebSearchDisplayData(input); + switch (data.actionType) { + case "open_page": + return truncateText(`Open ${data.url || "page"}`, maxLength); + case "find_in_page": { + const target = data.pattern ? `Find "${data.pattern}"` : "Find in page"; + const suffix = data.url ? ` in ${data.url}` : ""; + return truncateText(target + suffix, maxLength); + } + case "search": + return truncateText(data.query || data.queries[0] || "", maxLength); + default: + return truncateText(data.query || data.url || data.pattern || "", maxLength); + } +} +function getWebSearchLabel(input, maxLength) { + const summary = getWebSearchSummary(input, maxLength); + return `WebSearch: ${summary || "search"}`; +} +function appendToolLink(parent, title, url2) { + const linkEl = parent.createEl("a", { cls: "claudian-tool-link" }); + linkEl.setAttribute("href", url2); + linkEl.setAttribute("target", "_blank"); + linkEl.setAttribute("rel", "noopener noreferrer"); + const iconEl = linkEl.createSpan({ cls: "claudian-tool-link-icon" }); + (0, import_obsidian27.setIcon)(iconEl, "external-link"); + linkEl.createSpan({ cls: "claudian-tool-link-title", text: title }); +} +function isPlaceholderWebSearchResult(result) { + if (!result) return true; + const normalized = result.trim().toLowerCase(); + return normalized === "" || normalized === "search complete"; +} +function parseWebSearchResult(result) { + const linksMatch = result.match(/Links:\s*(\[[\s\S]*?\])(?:\n|$)/); + if (!linksMatch) return null; + try { + const parsed = JSON.parse(linksMatch[1]); + if (!Array.isArray(parsed) || parsed.length === 0) return null; + const linksEndIndex = result.indexOf(linksMatch[0]) + linksMatch[0].length; + const summary = result.slice(linksEndIndex).trim(); + return { links: parsed.filter((l2) => l2.title && l2.url), summary }; + } catch (e2) { + return null; + } +} +function renderWebSearchActionExpanded(container, input) { + const data = normalizeWebSearchDisplayData(input); + const hasStructuredData = Boolean(data.actionType || data.query || data.queries.length || data.url || data.pattern); + if (!hasStructuredData) { + return false; + } + const linesEl = container.createDiv({ cls: "claudian-tool-lines" }); + switch (data.actionType) { + case "open_page": + linesEl.createDiv({ cls: "claudian-tool-line", text: "Open page" }); + if (data.url) { + appendToolLink(linesEl, data.url, data.url); + } else { + linesEl.createDiv({ cls: "claudian-tool-line", text: "URL unavailable" }); + } + return true; + case "find_in_page": + linesEl.createDiv({ cls: "claudian-tool-line", text: "Find in page" }); + if (data.url) { + appendToolLink(linesEl, data.url, data.url); + } else { + linesEl.createDiv({ cls: "claudian-tool-line", text: "URL unavailable" }); + } + if (data.pattern) { + linesEl.createDiv({ cls: "claudian-tool-line", text: `Pattern: ${data.pattern}` }); + } + return true; + case "search": + default: { + const primaryQuery = data.query || data.queries[0]; + linesEl.createDiv({ + cls: "claudian-tool-line", + text: primaryQuery ? `Query: ${primaryQuery}` : "Search web" + }); + const alternateQueries = data.queries.filter((query) => query !== primaryQuery); + for (const query of alternateQueries.slice(0, 4)) { + linesEl.createDiv({ cls: "claudian-tool-line", text: `Alt query: ${query}` }); + } + if (alternateQueries.length > 4) { + linesEl.createDiv({ + cls: "claudian-tool-truncated", + text: `... ${alternateQueries.length - 4} more queries` + }); + } + return true; + } + } +} +function renderWebSearchExpanded(container, input, result) { + const parsed = result ? parseWebSearchResult(result) : null; + if (parsed && parsed.links.length > 0) { + const linksEl = container.createDiv({ cls: "claudian-tool-lines" }); + for (const link of parsed.links) { + appendToolLink(linksEl, link.title, link.url); + } + if (parsed.summary) { + const summaryEl = container.createDiv({ cls: "claudian-tool-web-summary" }); + summaryEl.setText(parsed.summary.length > 800 ? parsed.summary.slice(0, 800) + "..." : parsed.summary); + } + return; + } + const data = normalizeWebSearchDisplayData(input); + const shouldRenderAction = Boolean(data.actionType || data.query || data.queries.length || data.url || data.pattern) && (!result || isPlaceholderWebSearchResult(result) || data.actionType === "open_page" || data.actionType === "find_in_page"); + if (shouldRenderAction && renderWebSearchActionExpanded(container, input)) { + if (result && !isPlaceholderWebSearchResult(result)) { + renderLinesExpanded(container, result, 12); + } + return; + } + if (result) { + renderLinesExpanded(container, result, 20); + return; + } + if (renderWebSearchActionExpanded(container, input)) { + return; + } + container.createDiv({ cls: "claudian-tool-empty", text: "No result" }); +} +function renderFileSearchExpanded(container, result) { + const lines = result.split(/\r?\n/).filter((line) => line.trim()); + if (lines.length === 0) { + container.createDiv({ cls: "claudian-tool-empty", text: "No matches found" }); + return; + } + renderLinesExpanded(container, result, 15, true); +} +function renderLinesExpanded(container, result, maxLines, hoverable = false) { + const lines = result.split(/\r?\n/); + const truncated = lines.length > maxLines; + const displayLines = truncated ? lines.slice(0, maxLines) : lines; + const linesEl = container.createDiv({ cls: "claudian-tool-lines" }); + for (const line of displayLines) { + const stripped = line.replace(/^\s*\d+→/, ""); + const lineEl = linesEl.createDiv({ cls: "claudian-tool-line" }); + if (hoverable) lineEl.addClass("hoverable"); + lineEl.setText(stripped || " "); + } + if (truncated) { + linesEl.createDiv({ + cls: "claudian-tool-truncated", + text: `... ${lines.length - maxLines} more lines` + }); + } +} +function renderToolSearchExpanded(container, result) { + let toolNames = []; + try { + const parsed = JSON.parse(result); + if (Array.isArray(parsed)) { + toolNames = parsed.filter((item) => item.type === "tool_reference" && item.tool_name).map((item) => item.tool_name); + } + } catch (e2) { + } + if (toolNames.length === 0) { + renderLinesExpanded(container, result, 20); + return; + } + for (const name of toolNames) { + const lineEl = container.createDiv({ cls: "claudian-tool-search-item" }); + const iconEl = lineEl.createSpan({ cls: "claudian-tool-search-icon" }); + setToolIcon(iconEl, name); + lineEl.createSpan({ text: name }); + } +} +function renderWebFetchExpanded(container, result) { + const maxChars = 500; + const linesEl = container.createDiv({ cls: "claudian-tool-lines" }); + const lineEl = linesEl.createDiv({ cls: "claudian-tool-line claudian-tool-line-wrap" }); + if (result.length > maxChars) { + lineEl.setText(result.slice(0, maxChars)); + linesEl.createDiv({ + cls: "claudian-tool-truncated", + text: `... ${result.length - maxChars} more characters` + }); + } else { + lineEl.setText(result); + } +} +function renderApplyPatchExpanded(container, input, result) { + var _a5; + const patchText = typeof input.patch === "string" ? input.patch : ""; + const parsedDiffs = getApplyPatchFileDiffs(input); + if (result && /verification failed|^[Ee]rror:/.test(result.trim())) { + renderLinesExpanded(container, result, 20); + } + if (parsedDiffs.length > 0) { + renderApplyPatchDiffSections(container, parsedDiffs); + return; + } + const changes = Array.isArray(input.changes) ? input.changes : []; + if (changes.length > 0) { + const linesEl = container.createDiv({ cls: "claudian-tool-lines" }); + for (const change of changes) { + if (!change || typeof change !== "object" || Array.isArray(change)) continue; + const changeRecord = change; + const path27 = typeof changeRecord.path === "string" ? changeRecord.path : ""; + if (!path27) continue; + const movedTo = readMoveTarget(changeRecord.kind); + const pathText = movedTo ? `${path27} -> ${movedTo}` : path27; + linesEl.createDiv({ cls: "claudian-tool-line", text: pathText }); + } + return; + } + if (patchText) { + renderLinesExpanded(container, patchText, 80); + return; + } + if (result) { + const fileMatches = [...result.matchAll(/(?:update|add|delete|create|modify|Applied:\s*)(?:\w+:\s*)?([^\n,]+)/gi)]; + if (fileMatches.length > 0) { + const linesEl = container.createDiv({ cls: "claudian-tool-lines" }); + for (const match of fileMatches) { + const filePath = (_a5 = match[1]) == null ? void 0 : _a5.trim(); + if (filePath) { + const lineEl = linesEl.createDiv({ cls: "claudian-tool-line" }); + lineEl.setText(filePath); + } + } + return; + } + renderLinesExpanded(container, result, 20); + return; + } + container.createDiv({ cls: "claudian-tool-empty", text: "No result" }); +} +function renderApplyPatchDiffSections(container, fileDiffs) { + for (const fileDiff of fileDiffs) { + const sectionEl = container.createDiv({ cls: "claudian-tool-patch-section" }); + if (fileDiff.operation === "delete" && fileDiff.diffLines.length === 0) { + sectionEl.createDiv({ cls: "claudian-tool-empty", text: "File deleted" }); + continue; + } + if (fileDiff.diffLines.length === 0) { + sectionEl.createDiv({ cls: "claudian-tool-empty", text: "No textual diff available" }); + continue; + } + const diffRow = sectionEl.createDiv({ cls: "claudian-write-edit-diff-row" }); + const diffEl = diffRow.createDiv({ cls: "claudian-write-edit-diff" }); + renderDiffContent(diffEl, fileDiff.diffLines); + } +} +function readMoveTarget(kind) { + if (!kind || typeof kind !== "object" || Array.isArray(kind)) { + return void 0; + } + const record2 = kind; + return typeof record2.move_path === "string" ? record2.move_path : void 0; +} +function getApplyPatchFileDiffs(input) { + const patchText = typeof input.patch === "string" ? input.patch : ""; + const parsedDiffs = patchText ? parseApplyPatchDiffs(patchText) : []; + return parsedDiffs.length > 0 ? parsedDiffs : parseFileUpdateChangeDiffs(input.changes); +} +function getApplyPatchDiffStats(input) { + const fileDiffs = getApplyPatchFileDiffs(input); + if (fileDiffs.length === 0) return void 0; + const stats = fileDiffs.reduce( + (acc, fileDiff) => ({ + added: acc.added + fileDiff.stats.added, + removed: acc.removed + fileDiff.stats.removed + }), + { added: 0, removed: 0 } + ); + return stats.added > 0 || stats.removed > 0 ? stats : void 0; +} +function getDiffStatsAriaLabel(stats) { + return `Changes: +${stats.added} -${stats.removed}`; +} +function renderAgentLifecycleExpanded(container, result) { + const trimmed = result.trim(); + if (trimmed.startsWith("{")) { + try { + const parsed = JSON.parse(trimmed); + const linesEl = container.createDiv({ cls: "claudian-tool-lines" }); + for (const [key, value] of Object.entries(parsed)) { + const lineEl = linesEl.createDiv({ cls: "claudian-tool-line" }); + const displayValue = formatToolDisplayValue(value); + lineEl.setText(`${key}: ${displayValue}`); + } + return; + } catch (e2) { + } + } + renderLinesExpanded(container, result, 20); +} +function formatToolDisplayValue(value) { + if (typeof value === "string") return value; + if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") { + return `${value}`; + } + if (value === null || value === void 0) { + return ""; + } + return JSON.stringify(value); +} +function renderExpandedContent(container, toolName, result, input = {}) { + if (!result && toolName !== TOOL_WEB_SEARCH && toolName !== TOOL_BASH && toolName !== TOOL_APPLY_PATCH) { + container.createDiv({ cls: "claudian-tool-empty", text: "No result" }); + return; + } + const resolvedResult = result != null ? result : ""; + if (isAgentLifecycleTool(toolName)) { + renderAgentLifecycleExpanded(container, resolvedResult); + return; + } + switch (toolName) { + case TOOL_BASH: + renderBashContent(container, input, resolvedResult); + break; + case TOOL_WRITE_STDIN: + renderLinesExpanded(container, resolvedResult, 20); + break; + case TOOL_READ: + renderLinesExpanded(container, resolvedResult, 15); + break; + case TOOL_GLOB: + case TOOL_GREP: + case TOOL_LS: + renderFileSearchExpanded(container, resolvedResult); + break; + case TOOL_WEB_SEARCH: + renderWebSearchExpanded(container, input, result); + break; + case TOOL_WEB_FETCH: + renderWebFetchExpanded(container, resolvedResult); + break; + case TOOL_TOOL_SEARCH: + renderToolSearchExpanded(container, resolvedResult); + break; + case TOOL_APPLY_PATCH: + renderApplyPatchExpanded(container, input, result); + break; + default: + renderLinesExpanded(container, resolvedResult, 20); + break; + } +} +function getTodos(input) { + const todos = input.todos; + if (!todos || !Array.isArray(todos)) return void 0; + return todos; +} +function getCurrentTask(input) { + const todos = getTodos(input); + if (!todos) return void 0; + return todos.find((t11) => t11.status === "in_progress"); +} +function areAllTodosCompleted(input) { + const todos = getTodos(input); + if (!todos || todos.length === 0) return false; + return todos.every((t11) => t11.status === "completed"); +} +function resetStatusElement(statusEl, statusClass, ariaLabel) { + statusEl.className = "claudian-tool-status"; + statusEl.empty(); + statusEl.addClass(statusClass); + statusEl.setAttribute("aria-label", ariaLabel); +} +var STATUS_ICONS = { + completed: "check", + error: "x", + blocked: "shield-off" +}; +function setTodoWriteStatus(statusEl, input) { + const isComplete = areAllTodosCompleted(input); + const status = isComplete ? "completed" : "running"; + const ariaLabel = isComplete ? "Status: completed" : "Status: in progress"; + resetStatusElement(statusEl, `status-${status}`, ariaLabel); + if (isComplete) (0, import_obsidian27.setIcon)(statusEl, "check"); +} +function setToolStatus(statusEl, status) { + resetStatusElement(statusEl, `status-${status}`, `Status: ${status}`); + const icon = STATUS_ICONS[status]; + if (icon) (0, import_obsidian27.setIcon)(statusEl, icon); +} +function setApplyPatchHeaderRight(statusEl, toolCall) { + const isError = toolCall.status === "error" || toolCall.status === "blocked"; + const stats = isError ? void 0 : getApplyPatchDiffStats(toolCall.input); + if (!stats) { + setToolStatus(statusEl, toolCall.status); + return; + } + statusEl.className = "claudian-tool-status claudian-write-edit-stats"; + statusEl.empty(); + statusEl.setAttribute("aria-label", getDiffStatsAriaLabel(stats)); + renderDiffStats(statusEl, stats); +} +function setGenericToolHeaderRight(statusEl, toolCall) { + if (toolCall.name === TOOL_APPLY_PATCH) { + setApplyPatchHeaderRight(statusEl, toolCall); + return; + } + setToolStatus(statusEl, toolCall.status); +} +function renderTodoWriteResult(container, input) { + container.empty(); + container.addClass("claudian-todo-panel-content"); + container.addClass("claudian-todo-list-container"); + const todos = input.todos; + if (!todos || !Array.isArray(todos)) { + const item = container.createSpan({ cls: "claudian-tool-result-item" }); + item.setText("Tasks updated"); + return; + } + renderTodoItems(container, todos); +} +function isBlockedToolResult(content, isError) { + const lower = extractToolResultContent(content, { fallbackIndent: 2 }).toLowerCase(); + if (lower.includes("outside the vault")) return true; + if (lower.includes("access denied")) return true; + if (lower.includes("user denied")) return true; + if (lower.includes("approval")) return true; + if (isError && lower.includes("deny")) return true; + return false; +} +function createToolElementStructure(parentEl, toolCall) { + const toolEl = parentEl.createDiv({ cls: "claudian-tool-call" }); + if (toolCall.name === TOOL_BASH) { + toolEl.addClass("claudian-tool-call-bash"); + } + const header = toolEl.createDiv({ cls: "claudian-tool-header" }); + header.setAttribute("tabindex", "0"); + header.setAttribute("role", "button"); + const iconEl = header.createSpan({ cls: "claudian-tool-icon" }); + iconEl.setAttribute("aria-hidden", "true"); + setToolIcon(iconEl, toolCall.name); + const nameEl = header.createSpan({ cls: "claudian-tool-name" }); + nameEl.setText(getToolName(toolCall.name, toolCall.input)); + const summaryEl = header.createSpan({ cls: "claudian-tool-summary" }); + summaryEl.setText(getToolSummary(toolCall.name, toolCall.input)); + const currentTaskEl = toolCall.name === TOOL_TODO_WRITE ? createCurrentTaskPreview(header, toolCall.input) : null; + const statusEl = header.createSpan({ cls: "claudian-tool-status" }); + const content = toolEl.createDiv({ cls: "claudian-tool-content" }); + return { toolEl, header, iconEl, nameEl, summaryEl, statusEl, content, currentTaskEl }; +} +function formatAnswer(raw) { + if (Array.isArray(raw)) return raw.join(", "); + if (typeof raw === "string") return raw; + return ""; +} +function resolveAskUserAnswers(toolCall) { + if (toolCall.resolvedAnswers) return toolCall.resolvedAnswers; + const parsed = extractResolvedAnswersFromResultText(toolCall.result); + if (parsed) { + toolCall.resolvedAnswers = parsed; + return parsed; + } + return void 0; +} +function renderAskUserQuestionResult(container, toolCall) { + var _a5; + container.empty(); + const questions = toolCall.input.questions; + const answers = resolveAskUserAnswers(toolCall); + if (!questions || !Array.isArray(questions) || !answers) return false; + const reviewEl = container.createDiv({ cls: "claudian-ask-review" }); + for (let i = 0; i < questions.length; i++) { + const q = questions[i]; + const answer = formatAnswer( + (_a5 = q.id ? answers[q.id] : void 0) != null ? _a5 : answers[q.question] + ); + const pairEl = reviewEl.createDiv({ cls: "claudian-ask-review-pair" }); + pairEl.createDiv({ text: `${i + 1}.`, cls: "claudian-ask-review-num" }); + const bodyEl = pairEl.createDiv({ cls: "claudian-ask-review-body" }); + bodyEl.createDiv({ text: q.question, cls: "claudian-ask-review-q-text" }); + bodyEl.createDiv({ + text: answer || "Not answered", + cls: answer ? "claudian-ask-review-a-text" : "claudian-ask-review-empty" + }); + } + return true; +} +function renderAskUserQuestionFallback(container, toolCall, initialText) { + container.empty(); + const questions = Array.isArray(toolCall.input.questions) ? toolCall.input.questions : []; + if (questions.length === 0) { + contentFallback(container, initialText || toolCall.result || "Waiting for answer..."); + return; + } + if (initialText || toolCall.result) { + container.createDiv({ + cls: "claudian-ask-review-prompt", + text: initialText || toolCall.result || "Waiting for answer..." + }); + } + for (let questionIndex = 0; questionIndex < questions.length; questionIndex++) { + const question = questions[questionIndex]; + const reviewEl = container.createDiv({ cls: "claudian-ask-review" }); + const pairEl = reviewEl.createDiv({ cls: "claudian-ask-review-pair" }); + pairEl.createDiv({ text: `${questionIndex + 1}.`, cls: "claudian-ask-review-num" }); + const bodyEl = pairEl.createDiv({ cls: "claudian-ask-review-body" }); + bodyEl.createDiv({ text: question.question, cls: "claudian-ask-review-q-text" }); + if (!Array.isArray(question.options) || question.options.length === 0) { + bodyEl.createDiv({ cls: "claudian-ask-review-empty", text: "No options recorded" }); + continue; + } + const listEl = bodyEl.createDiv({ cls: "claudian-ask-list" }); + question.options.forEach((option, optionIndex) => { + renderAskUserQuestionOption(listEl, option, optionIndex, question.multiSelect === true); + }); + } +} +function renderAskUserQuestionOption(parentEl, option, optionIndex, isMultiSelect) { + const itemEl = parentEl.createDiv({ cls: "claudian-ask-item is-disabled" }); + if (isMultiSelect) { + itemEl.createDiv({ cls: "claudian-ask-check", text: "[ ] " }); + } else { + itemEl.createDiv({ cls: "claudian-ask-item-num", text: `${optionIndex + 1}. ` }); + } + const contentEl = itemEl.createDiv({ cls: "claudian-ask-item-content" }); + const labelRowEl = contentEl.createDiv({ cls: "claudian-ask-label-row" }); + labelRowEl.createDiv({ cls: "claudian-ask-item-label", text: option.label }); + if (option.description) { + contentEl.createDiv({ cls: "claudian-ask-item-desc", text: option.description }); + } +} +function contentFallback(container, text) { + const resultRow = container.createDiv({ cls: "claudian-tool-result-row" }); + const resultText = resultRow.createSpan({ cls: "claudian-tool-result-text" }); + resultText.setText(text); +} +function renderBashContent(container, input, result, initialText) { + const command = input.command || ""; + if (command) { + const cmdEl = container.createDiv({ cls: "claudian-tool-bash-command" }); + cmdEl.setText(`$ ${command}`); + } + if (initialText) { + contentFallback(container, initialText); + } else if (result) { + renderLinesExpanded(container, result, 20); + } else { + container.createDiv({ cls: "claudian-tool-empty", text: "No result" }); + } +} +function createCurrentTaskPreview(header, input) { + const currentTaskEl = header.createSpan({ cls: "claudian-tool-current" }); + const currentTask = getCurrentTask(input); + if (currentTask) { + currentTaskEl.setText(currentTask.activeForm); + } + return currentTaskEl; +} +function createTodoToggleHandler(currentTaskEl, statusEl, onExpandChange) { + return (expanded) => { + if (onExpandChange) onExpandChange(expanded); + if (currentTaskEl) { + currentTaskEl.toggleClass("claudian-hidden", expanded); + } + if (statusEl) { + statusEl.toggleClass("claudian-hidden", expanded); + } + }; +} +function renderToolContent(content, toolCall, initialText) { + var _a5; + if (toolCall.name === TOOL_TODO_WRITE) { + content.addClass("claudian-tool-content-todo"); + renderTodoWriteResult(content, toolCall.input); + } else if (toolCall.name === TOOL_ASK_USER_QUESTION) { + content.addClass("claudian-tool-content-ask"); + if (initialText) { + renderAskUserQuestionFallback(content, toolCall, "Waiting for answer..."); + } else if (!renderAskUserQuestionResult(content, toolCall)) { + renderAskUserQuestionFallback(content, toolCall); + } + } else if (toolCall.name === TOOL_BASH) { + renderBashContent(content, toolCall.input, (_a5 = toolCall.result) != null ? _a5 : "", initialText); + } else if (initialText) { + contentFallback(content, initialText); + } else { + renderExpandedContent(content, toolCall.name, toolCall.result, toolCall.input); + } +} +function renderToolCall(parentEl, toolCall, toolCallElements) { + const { toolEl, header, statusEl, content, currentTaskEl } = createToolElementStructure(parentEl, toolCall); + toolEl.dataset.toolId = toolCall.id; + toolCallElements.set(toolCall.id, toolEl); + setGenericToolHeaderRight(statusEl, toolCall); + renderToolContent(content, toolCall, "Running..."); + const state = { isExpanded: false }; + toolCall.isExpanded = false; + const todoStatusEl = toolCall.name === TOOL_TODO_WRITE ? statusEl : null; + setupCollapsible(toolEl, header, content, state, { + initiallyExpanded: false, + onToggle: createTodoToggleHandler(currentTaskEl, todoStatusEl, (expanded) => { + toolCall.isExpanded = expanded; + }), + baseAriaLabel: getToolLabel(toolCall.name, toolCall.input) + }); + return toolEl; +} +function updateToolCallResult(toolId, toolCall, toolCallElements) { + const toolEl = toolCallElements.get(toolId); + if (!toolEl) return; + if (toolCall.name === TOOL_TODO_WRITE) { + const statusEl2 = toolEl.querySelector(".claudian-tool-status"); + if (statusEl2) { + setTodoWriteStatus(statusEl2, toolCall.input); + } + const content2 = toolEl.querySelector(".claudian-tool-content"); + if (content2) { + renderTodoWriteResult(content2, toolCall.input); + } + const nameEl = toolEl.querySelector(".claudian-tool-name"); + if (nameEl) { + nameEl.setText(getToolName(toolCall.name, toolCall.input)); + } + const currentTaskEl = toolEl.querySelector(".claudian-tool-current"); + if (currentTaskEl) { + const currentTask = getCurrentTask(toolCall.input); + currentTaskEl.setText(currentTask ? currentTask.activeForm : ""); + } + return; + } + const statusEl = toolEl.querySelector(".claudian-tool-status"); + if (statusEl) { + setGenericToolHeaderRight(statusEl, toolCall); + } + if (toolCall.name === TOOL_ASK_USER_QUESTION) { + const content2 = toolEl.querySelector(".claudian-tool-content"); + if (content2) { + content2.addClass("claudian-tool-content-ask"); + if (!renderAskUserQuestionResult(content2, toolCall)) { + renderAskUserQuestionFallback(content2, toolCall); + } + } + return; + } + const content = toolEl.querySelector(".claudian-tool-content"); + if (content) { + content.empty(); + renderExpandedContent(content, toolCall.name, toolCall.result, toolCall.input); + } +} +function renderStoredToolCall(parentEl, toolCall) { + const { toolEl, header, statusEl, content, currentTaskEl } = createToolElementStructure(parentEl, toolCall); + if (toolCall.name === TOOL_TODO_WRITE) { + setTodoWriteStatus(statusEl, toolCall.input); + } else { + setGenericToolHeaderRight(statusEl, toolCall); + } + renderToolContent(content, toolCall); + const state = { isExpanded: false }; + const todoStatusEl = toolCall.name === TOOL_TODO_WRITE ? statusEl : null; + setupCollapsible(toolEl, header, content, state, { + initiallyExpanded: false, + onToggle: createTodoToggleHandler(currentTaskEl, todoStatusEl), + baseAriaLabel: getToolLabel(toolCall.name, toolCall.input) + }); + return toolEl; +} + +// src/features/chat/controllers/InputController.ts +var APPROVAL_OPTION_MAP = { + "Deny": "deny", + "Allow once": "allow", + "Always allow": "allow-always" +}; +var DEFAULT_APPROVAL_DECISION_OPTIONS = Object.entries(APPROVAL_OPTION_MAP).map(([label, decision]) => ({ + label, + value: label, + decision +})); +function toError(error48) { + return error48 instanceof Error ? error48 : new Error(String(error48)); +} +var InputController = class { + constructor(deps) { + this.pendingApprovalInline = null; + this.pendingAskInline = null; + this.pendingExitPlanModeInline = null; + this.pendingPlanApproval = null; + this.pendingPlanApprovalInvalidated = false; + this.activeResumeDropdown = null; + this.inputContainerHideDepth = 0; + this.steerInFlight = false; + this.pendingSteerMessage = null; + this.activeStreamingAssistantMessage = null; + this.pendingProviderUserMessages = []; + this.sawInitialProviderUserMessage = false; + this.awaitingProviderAssistantStart = false; + this.deps = deps; + } + getAgentService() { + var _a5, _b3, _c2; + return (_c2 = (_b3 = (_a5 = this.deps).getAgentService) == null ? void 0 : _b3.call(_a5)) != null ? _c2 : null; + } + getAuxiliaryModel() { + var _a5, _b3, _c2, _d, _e2, _f2; + return (_f2 = (_e2 = (_b3 = (_a5 = this.deps).getAuxiliaryModel) == null ? void 0 : _b3.call(_a5)) != null ? _e2 : (_d = (_c2 = this.getAgentService()) == null ? void 0 : _c2.getAuxiliaryModel) == null ? void 0 : _d.call(_c2)) != null ? _f2 : null; + } + syncInstructionRefineModelOverride(instructionRefineService) { + var _a5, _b3; + (_b3 = instructionRefineService.setModelOverride) == null ? void 0 : _b3.call(instructionRefineService, (_a5 = this.getAuxiliaryModel()) != null ? _a5 : void 0); + } + getActiveProviderId() { + var _a5, _b3, _c2, _d, _e2, _f2; + const agentService = this.getAgentService(); + const conversationId = this.deps.state.currentConversationId; + if (!conversationId) { + return (_d = (_c2 = (_b3 = (_a5 = this.deps).getTabProviderId) == null ? void 0 : _b3.call(_a5)) != null ? _c2 : agentService == null ? void 0 : agentService.providerId) != null ? _d : DEFAULT_CHAT_PROVIDER_ID; + } + if (agentService == null ? void 0 : agentService.providerId) { + return agentService.providerId; + } + return (_f2 = (_e2 = this.deps.plugin.getConversationSync(conversationId)) == null ? void 0 : _e2.providerId) != null ? _f2 : DEFAULT_CHAT_PROVIDER_ID; + } + getActiveCapabilities() { + const providerId = this.getActiveProviderId(); + const agentService = this.getAgentService(); + if ((agentService == null ? void 0 : agentService.providerId) === providerId) { + return agentService.getCapabilities(); + } + return ProviderRegistry.getCapabilities(providerId); + } + isResumeSessionAtStillNeeded(resumeUuid, previousMessages) { + for (let i = previousMessages.length - 1; i >= 0; i--) { + if (previousMessages[i].role === "assistant" && previousMessages[i].assistantMessageId === resumeUuid) { + return i === previousMessages.length - 1; + } + } + return false; + } + // ============================================ + // Message Sending + // ============================================ + async sendMessage(options) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m, _n; + const { + plugin, + state, + renderer, + streamController, + selectionController, + browserSelectionController, + canvasSelectionController, + conversationController + } = this.deps; + if (state.isCreatingConversation || state.isSwitchingConversation) return; + const inputEl = this.deps.getInputEl(); + const imageContextManager = this.deps.getImageContextManager(); + const fileContextManager = this.deps.getFileContextManager(); + const contentOverride = options == null ? void 0 : options.content; + const shouldUseInput = contentOverride === void 0; + const content = (contentOverride != null ? contentOverride : inputEl.value).trim(); + const imageOverride = options == null ? void 0 : options.images; + const hasImages = imageOverride !== void 0 ? imageOverride.length > 0 : (_a5 = imageContextManager == null ? void 0 : imageContextManager.hasImages()) != null ? _a5 : false; + if (!content && !hasImages) return; + const builtInCmd = detectBuiltInCommand(content); + if (builtInCmd) { + if (shouldUseInput) { + inputEl.value = ""; + this.deps.resetInputHeight(); + } + await this.executeBuiltInCommand(builtInCmd.command, builtInCmd.args); + return; + } + if (state.isStreaming) { + const images2 = hasImages ? [...(_b3 = imageOverride != null ? imageOverride : imageContextManager == null ? void 0 : imageContextManager.getAttachedImages()) != null ? _b3 : []] : void 0; + const editorContext = selectionController.getContext(); + const browserContext = (_c2 = browserSelectionController == null ? void 0 : browserSelectionController.getContext()) != null ? _c2 : null; + const canvasContext = canvasSelectionController.getContext(); + const { displayContent: displayContent2, turnRequest: turnRequest2 } = this.buildTurnSubmission({ + content, + images: images2, + editorContextOverride: editorContext, + browserContextOverride: browserContext, + canvasContextOverride: canvasContext + }); + state.queuedMessage = this.mergeQueuedMessages( + state.queuedMessage, + this.createQueuedMessage(displayContent2, turnRequest2) + ); + if (shouldUseInput) { + inputEl.value = ""; + this.deps.resetInputHeight(); + } + if (shouldUseInput) { + imageContextManager == null ? void 0 : imageContextManager.clearImages(); + } + this.updateQueueIndicator(); + return; + } + if (shouldUseInput) { + inputEl.value = ""; + this.deps.resetInputHeight(); + } + state.isStreaming = true; + state.cancelRequested = false; + state.ignoreUsageUpdates = false; + this.deps.getSubagentManager().resetSpawnedCount(); + state.autoScrollEnabled = (_d = plugin.settings.enableAutoScroll) != null ? _d : true; + const streamGeneration = state.bumpStreamGeneration(); + const welcomeEl = this.deps.getWelcomeEl(); + if (welcomeEl) { + welcomeEl.addClass("claudian-hidden"); + } + fileContextManager == null ? void 0 : fileContextManager.startSession(); + const images = (_e2 = imageOverride != null ? imageOverride : imageContextManager == null ? void 0 : imageContextManager.getAttachedImages()) != null ? _e2 : []; + const imagesForMessage = images.length > 0 ? [...images] : void 0; + const isCompact = /^\/compact(\s|$)/i.test(content); + if (shouldUseInput) { + imageContextManager == null ? void 0 : imageContextManager.clearImages(); + } + const turnSubmission = (options == null ? void 0 : options.turnRequestOverride) ? { + displayContent: content, + turnRequest: cloneChatTurnRequest(options.turnRequestOverride) + } : this.buildTurnSubmission({ + content, + images: imagesForMessage, + editorContextOverride: options == null ? void 0 : options.editorContextOverride, + browserContextOverride: options == null ? void 0 : options.browserContextOverride, + canvasContextOverride: options == null ? void 0 : options.canvasContextOverride + }); + const { displayContent, turnRequest } = turnSubmission; + fileContextManager == null ? void 0 : fileContextManager.markCurrentNoteSent(); + const userMsg = { + id: this.deps.generateId(), + role: "user", + content: displayContent, + displayContent, + // Original user input (for UI display) + timestamp: Date.now(), + images: imagesForMessage + }; + state.addMessage(userMsg); + state.hasPendingConversationSave = true; + renderer.addMessage(userMsg); + await this.triggerTitleGeneration(); + const assistantMsg = { + id: this.deps.generateId(), + role: "assistant", + content: "", + timestamp: Date.now(), + toolCalls: [], + contentBlocks: [] + }; + state.addMessage(assistantMsg); + this.activeStreamingAssistantMessage = assistantMsg; + this.activateStreamingAssistantMessage(assistantMsg); + this.pendingProviderUserMessages = [{ + displayContent, + images: imagesForMessage + }]; + this.sawInitialProviderUserMessage = false; + this.awaitingProviderAssistantStart = true; + streamController.showThinkingIndicator( + isCompact ? "Compacting..." : void 0, + isCompact ? "claudian-thinking--compact" : void 0 + ); + state.responseStartTime = performance.now(); + let wasInterrupted = false; + let wasInvalidated = false; + let didEnqueueToSdk = false; + let planCompleted = false; + if (this.deps.ensureServiceInitialized) { + const ready = await this.deps.ensureServiceInitialized(); + if (!ready) { + new import_obsidian28.Notice("Failed to initialize agent service. Please try again."); + streamController.hideThinkingIndicator(); + state.isStreaming = false; + this.activeStreamingAssistantMessage = null; + this.resetProviderMessageBoundaryState(); + return; + } + } + const agentService = this.getAgentService(); + if (!agentService) { + new import_obsidian28.Notice("Agent service not available. Please reload the plugin."); + this.activeStreamingAssistantMessage = null; + this.resetProviderMessageBoundaryState(); + return; + } + const conversationIdForSend = state.currentConversationId; + if (conversationIdForSend) { + const conv = plugin.getConversationSync(conversationIdForSend); + if (conv == null ? void 0 : conv.resumeAtMessageId) { + if (this.isResumeSessionAtStillNeeded(conv.resumeAtMessageId, state.messages.slice(0, -2))) { + agentService.setResumeCheckpoint(conv.resumeAtMessageId); + } else { + try { + await plugin.updateConversation(conversationIdForSend, { resumeAtMessageId: void 0 }); + } catch (e2) { + } + } + } + } + try { + const preparedTurn = agentService.prepareTurn(turnRequest); + userMsg.content = preparedTurn.persistedContent; + userMsg.currentNote = preparedTurn.isCompact ? void 0 : preparedTurn.request.currentNotePath; + const previousMessages = state.messages.slice(0, -2); + for await (const chunk of agentService.query(preparedTurn, previousMessages)) { + if (state.streamGeneration !== streamGeneration) { + wasInvalidated = true; + break; + } + if (state.cancelRequested) { + wasInterrupted = true; + break; + } + if (await this.handleProviderMessageBoundaryChunk(chunk)) { + continue; + } + await streamController.handleStreamChunk( + chunk, + (_f2 = this.activeStreamingAssistantMessage) != null ? _f2 : assistantMsg + ); + } + } catch (error48) { + const errorMsg = error48 instanceof Error ? error48.message : "Unknown error"; + await streamController.appendText(` + +**Error:** ${errorMsg}`); + } finally { + const finalAssistantMsg = (_g = this.activeStreamingAssistantMessage) != null ? _g : assistantMsg; + const turnMetadata = agentService.consumeTurnMetadata(); + userMsg.userMessageId = (_h2 = turnMetadata.userMessageId) != null ? _h2 : userMsg.userMessageId; + finalAssistantMsg.assistantMessageId = (_i = turnMetadata.assistantMessageId) != null ? _i : finalAssistantMsg.assistantMessageId; + didEnqueueToSdk = didEnqueueToSdk || turnMetadata.wasSent === true; + planCompleted = planCompleted || turnMetadata.planCompleted === true; + state.clearFlavorTimerInterval(); + if (!wasInvalidated && state.streamGeneration === streamGeneration) { + const didCancelThisTurn = wasInterrupted || state.cancelRequested; + if (didCancelThisTurn && !state.pendingNewSessionPlan) { + await streamController.appendText('\n\nInterrupted \xB7 What should Claudian do instead?'); + } + streamController.hideThinkingIndicator(); + state.isStreaming = false; + state.cancelRequested = false; + this.restorePendingSteerMessageToQueue(); + const hasCompactBoundary = (_j = finalAssistantMsg.contentBlocks) == null ? void 0 : _j.some((b2) => b2.type === "context_compacted"); + if (!didCancelThisTurn && !hasCompactBoundary) { + const durationSeconds = state.responseStartTime ? Math.floor((performance.now() - state.responseStartTime) / 1e3) : 0; + if (durationSeconds > 0) { + const flavorWord = COMPLETION_FLAVOR_WORDS[Math.floor(Math.random() * COMPLETION_FLAVOR_WORDS.length)]; + finalAssistantMsg.durationSeconds = durationSeconds; + finalAssistantMsg.durationFlavorWord = flavorWord; + if (state.currentContentEl) { + const footerEl = state.currentContentEl.createDiv({ cls: "claudian-response-footer" }); + footerEl.createSpan({ + text: `* ${flavorWord} for ${formatDurationMmSs(durationSeconds)}`, + cls: "claudian-baked-duration" + }); + } + } + } + state.currentContentEl = null; + await streamController.finalizeCurrentThinkingBlock(finalAssistantMsg); + await streamController.finalizeCurrentTextBlock(finalAssistantMsg); + this.deps.getSubagentManager().resetStreamingState(); + if (state.currentTodos && state.currentTodos.every((t11) => t11.status === "completed")) { + state.currentTodos = null; + } + this.syncScrollToBottomAfterRenderUpdates(); + if (state.pendingNewSessionPlan && finalAssistantMsg.toolCalls) { + for (const tc2 of finalAssistantMsg.toolCalls) { + if (tc2.name === TOOL_EXIT_PLAN_MODE && !tc2.result) { + tc2.status = "completed"; + tc2.result = "User approved the plan and started a new session."; + updateToolCallResult(tc2.id, tc2, state.toolCallElements); + } + } + } + let planAutoSendContent = null; + let planApprovalInvalidated = false; + let shouldProcessQueuedMessage = true; + if (planCompleted && !didCancelThisTurn) { + const { decision, invalidated } = await this.showPlanApproval(); + if (state.streamGeneration !== streamGeneration || invalidated) { + planApprovalInvalidated = true; + } else if ((decision == null ? void 0 : decision.type) === "implement") { + (_l2 = (_k3 = this.deps).restorePrePlanPermissionModeIfNeeded) == null ? void 0 : _l2.call(_k3); + planAutoSendContent = "Implement the plan."; + } else if ((decision == null ? void 0 : decision.type) === "revise") { + this.deps.getInputEl().value = decision.text; + shouldProcessQueuedMessage = false; + } else { + (_n = (_m = this.deps).restorePrePlanPermissionModeIfNeeded) == null ? void 0 : _n.call(_m); + } + } + if (!planApprovalInvalidated) { + const saveExtras = didEnqueueToSdk ? { resumeAtMessageId: void 0 } : void 0; + await conversationController.save(true, saveExtras); + const userMsgIndex = state.messages.indexOf(userMsg); + renderer.refreshActionButtons(userMsg, state.messages, userMsgIndex >= 0 ? userMsgIndex : void 0); + if (planAutoSendContent) { + this.deps.getInputEl().value = planAutoSendContent; + this.sendMessage().catch(() => { + }); + } else { + const planContent = state.pendingNewSessionPlan; + if (planContent) { + state.pendingNewSessionPlan = null; + await conversationController.createNew(); + this.deps.getInputEl().value = planContent; + this.sendMessage().catch(() => { + }); + } else if (shouldProcessQueuedMessage) { + this.processQueuedMessage(); + } + } + } + } + if (wasInvalidated) { + this.clearPendingSteerState(); + this.updateQueueIndicator(); + } + this.activeStreamingAssistantMessage = null; + this.resetProviderMessageBoundaryState(); + } + } + // ============================================ + // Queue Management + // ============================================ + updateQueueIndicator() { + var _a5; + const { state } = this.deps; + const indicatorEl = state.queueIndicatorEl; + if (!indicatorEl) return; + indicatorEl.empty(); + const visibleQueuedMessage = (_a5 = state.queuedMessage) != null ? _a5 : this.pendingSteerMessage; + if (visibleQueuedMessage) { + const isPendingSteerOnly = !state.queuedMessage && !!this.pendingSteerMessage; + indicatorEl.createSpan({ + cls: "claudian-queue-indicator-text", + text: `${isPendingSteerOnly ? "\u2319 Steering: " : "\u2319 Queued: "}${this.getQueuedMessageDisplay(visibleQueuedMessage)}` + }); + if (state.queuedMessage) { + const actionsEl = indicatorEl.createDiv({ cls: "claudian-queue-indicator-actions" }); + if (this.canSteerQueuedMessage()) { + const steerButton = actionsEl.createEl("button", { + cls: "claudian-queue-indicator-action", + text: this.steerInFlight ? "Steering..." : "Steer Now" + }); + steerButton.setAttribute("type", "button"); + if (this.steerInFlight) { + steerButton.setAttribute("disabled", "true"); + } else { + steerButton.addEventListener("click", (event) => { + event.stopPropagation(); + void this.steerQueuedMessage(); + }); + } + } + const editButton = this.createQueueIconButton( + actionsEl, + "pencil", + "Edit queued message" + ); + editButton.addEventListener("click", (event) => { + event.stopPropagation(); + this.withdrawQueuedMessageToComposer(); + }); + const discardButton = this.createQueueIconButton( + actionsEl, + "trash-2", + "Discard queued message" + ); + discardButton.addEventListener("click", (event) => { + event.stopPropagation(); + this.clearQueuedMessage(); + }); + } + indicatorEl.addClass("claudian-visible-flex"); + indicatorEl.removeClass("claudian-hidden"); + return; + } + indicatorEl.removeClass("claudian-visible-flex"); + indicatorEl.addClass("claudian-hidden"); + } + clearQueuedMessage() { + const { state } = this.deps; + state.queuedMessage = null; + this.updateQueueIndicator(); + } + withdrawQueuedMessageToComposer() { + const { state } = this.deps; + if (!state.queuedMessage) return; + const queuedMessage = this.cloneQueuedMessage(state.queuedMessage); + state.queuedMessage = null; + this.restoreMessageToInput(queuedMessage, { mergeWithComposer: true }); + this.updateQueueIndicator(); + } + restoreMessageToInput(message, options = {}) { + var _a5; + if (!message) return; + const { content, images } = message; + const inputEl = this.deps.getInputEl(); + const currentContent = options.mergeWithComposer ? inputEl.value.trim() : ""; + inputEl.value = currentContent ? appendMarkdownSnippet(content, currentContent) : content; + const imageContextManager = this.deps.getImageContextManager(); + const currentImages = options.mergeWithComposer ? (_a5 = imageContextManager == null ? void 0 : imageContextManager.getAttachedImages()) != null ? _a5 : [] : []; + const restoredImages = [...images != null ? images : [], ...currentImages]; + if (restoredImages.length > 0) { + imageContextManager == null ? void 0 : imageContextManager.setImages(restoredImages); + } + this.deps.resetInputHeight(); + inputEl.focus(); + } + restorePendingMessagesToInput() { + const { state } = this.deps; + const combinedMessage = this.mergePendingMessages( + this.pendingSteerMessage, + state.queuedMessage + ); + this.restoreMessageToInput(combinedMessage, { mergeWithComposer: true }); + state.queuedMessage = null; + this.clearPendingSteerState(); + this.updateQueueIndicator(); + } + processQueuedMessage() { + const { state } = this.deps; + if (!state.queuedMessage) return; + const queuedMessage = this.cloneQueuedMessage(state.queuedMessage); + state.queuedMessage = null; + this.updateQueueIndicator(); + window.setTimeout( + () => { + void this.sendMessage({ + content: queuedMessage.content, + images: queuedMessage.images, + turnRequestOverride: this.toQueuedChatTurn(queuedMessage).request + }); + }, + 0 + ); + } + buildTurnSubmission(options) { + var _a5, _b3; + const { + selectionController, + browserSelectionController, + canvasSelectionController + } = this.deps; + const fileContextManager = this.deps.getFileContextManager(); + const mcpServerSelector = this.deps.getMcpServerSelector(); + const externalContextSelector = this.deps.getExternalContextSelector(); + const currentNotePath = (fileContextManager == null ? void 0 : fileContextManager.getCurrentNotePath()) || null; + const shouldSendCurrentNote = (_a5 = fileContextManager == null ? void 0 : fileContextManager.shouldSendCurrentNote(currentNotePath)) != null ? _a5 : false; + const editorContext = options.editorContextOverride !== void 0 ? options.editorContextOverride : selectionController.getContext(); + const browserContext = options.browserContextOverride !== void 0 ? options.browserContextOverride : (_b3 = browserSelectionController == null ? void 0 : browserSelectionController.getContext()) != null ? _b3 : null; + const canvasContext = options.canvasContextOverride !== void 0 ? options.canvasContextOverride : canvasSelectionController.getContext(); + const externalContextPaths = externalContextSelector == null ? void 0 : externalContextSelector.getExternalContexts(); + const isCompact = /^\/compact(\s|$)/i.test(options.content); + const transformedText = !isCompact && fileContextManager ? fileContextManager.transformContextMentions(options.content) : options.content; + const enabledMcpServers = mcpServerSelector == null ? void 0 : mcpServerSelector.getEnabledServers(); + return { + displayContent: options.content, + turnRequest: { + text: transformedText, + images: options.images, + currentNotePath: shouldSendCurrentNote && currentNotePath ? currentNotePath : void 0, + editorSelection: editorContext, + browserSelection: browserContext, + canvasSelection: canvasContext, + externalContextPaths: externalContextPaths && externalContextPaths.length > 0 ? externalContextPaths : void 0, + enabledMcpServers: enabledMcpServers && enabledMcpServers.size > 0 ? enabledMcpServers : void 0 + } + }; + } + getQueuedMessageDisplay(message) { + var _a5, _b3; + if (!message) { + return ""; + } + const rawContent = message.content.trim(); + const preview = rawContent.length > 40 ? rawContent.slice(0, 40) + "..." : rawContent; + const hasImages = ((_b3 = (_a5 = message.images) == null ? void 0 : _a5.length) != null ? _b3 : 0) > 0; + if (hasImages) { + return preview ? `${preview} [images]` : "[images]"; + } + return preview; + } + createQueueIconButton(parentEl, icon, label) { + const button = parentEl.createEl("button", { + cls: "claudian-queue-indicator-icon-action", + attr: { + "aria-label": label, + title: label, + type: "button" + } + }); + (0, import_obsidian28.setIcon)(button, icon); + return button; + } + canSteerQueuedMessage() { + const agentService = this.getAgentService(); + return this.deps.state.isStreaming && this.getActiveCapabilities().supportsTurnSteer === true && typeof (agentService == null ? void 0 : agentService.steer) === "function"; + } + cloneQueuedMessage(message) { + return { + ...message, + images: message.images ? [...message.images] : void 0, + turnRequest: message.turnRequest ? cloneChatTurnRequest(message.turnRequest) : void 0 + }; + } + createQueuedMessage(displayContent, turnRequest) { + var _a5, _b3, _c2; + const request = cloneChatTurnRequest(turnRequest); + return { + content: displayContent, + images: request.images, + editorContext: (_a5 = request.editorSelection) != null ? _a5 : null, + browserContext: (_b3 = request.browserSelection) != null ? _b3 : null, + canvasContext: (_c2 = request.canvasSelection) != null ? _c2 : null, + turnRequest: request + }; + } + toQueuedChatTurn(message) { + var _a5; + if (message.turnRequest) { + return { + displayContent: message.content, + request: cloneChatTurnRequest(message.turnRequest) + }; + } + return { + displayContent: message.content, + request: { + text: message.content, + images: message.images ? [...message.images] : void 0, + editorSelection: message.editorContext, + browserSelection: (_a5 = message.browserContext) != null ? _a5 : null, + canvasSelection: message.canvasContext + } + }; + } + mergePendingMessages(first, second) { + if (first && second) { + return this.mergeQueuedMessages(first, second); + } + if (first) { + return this.cloneQueuedMessage(first); + } + if (second) { + return this.cloneQueuedMessage(second); + } + return null; + } + clearPendingSteerState() { + this.pendingSteerMessage = null; + this.steerInFlight = false; + } + restorePendingSteerMessageToQueue() { + if (!this.pendingSteerMessage) { + return; + } + const { state } = this.deps; + const pendingSteerMessage = this.cloneQueuedMessage(this.pendingSteerMessage); + this.clearPendingSteerState(); + state.queuedMessage = state.queuedMessage ? this.mergeQueuedMessages(pendingSteerMessage, state.queuedMessage) : pendingSteerMessage; + this.updateQueueIndicator(); + } + mergeQueuedMessages(existing, incoming) { + if (!existing) { + return this.cloneQueuedMessage(incoming); + } + const mergedTurn = mergeQueuedChatTurns( + this.toQueuedChatTurn(existing), + this.toQueuedChatTurn(incoming) + ); + return this.createQueuedMessage(mergedTurn.displayContent, mergedTurn.request); + } + async steerQueuedMessage() { + var _a5; + if (this.steerInFlight) { + return; + } + const { state } = this.deps; + const agentService = this.getAgentService(); + if (!state.queuedMessage || !this.canSteerQueuedMessage() || !(agentService == null ? void 0 : agentService.steer)) { + return; + } + const queuedMessage = this.cloneQueuedMessage(state.queuedMessage); + state.queuedMessage = null; + this.pendingSteerMessage = queuedMessage; + this.steerInFlight = true; + this.updateQueueIndicator(); + try { + const { displayContent, request } = this.toQueuedChatTurn(queuedMessage); + const preparedTurn = agentService.prepareTurn(request); + const accepted = await agentService.steer(preparedTurn); + if (state.cancelRequested || !this.pendingSteerMessage) { + return; + } + if (!accepted) { + this.restoreQueuedMessageAfterSteerFailure(queuedMessage); + return; + } + (_a5 = this.deps.getFileContextManager()) == null ? void 0 : _a5.markCurrentNoteSent(); + this.pendingProviderUserMessages.push({ + displayContent, + persistedContent: preparedTurn.persistedContent, + currentNote: preparedTurn.isCompact ? void 0 : preparedTurn.request.currentNotePath, + images: request.images + }); + } catch (e2) { + this.restoreQueuedMessageAfterSteerFailure(queuedMessage); + new import_obsidian28.Notice("Failed to steer the queued Codex message. It is still available."); + } + } + restoreQueuedMessageAfterSteerFailure(message) { + const { state } = this.deps; + this.clearPendingSteerState(); + if (state.cancelRequested) { + this.updateQueueIndicator(); + return; + } + if (state.isStreaming) { + state.queuedMessage = state.queuedMessage ? this.mergeQueuedMessages(message, state.queuedMessage) : message; + this.updateQueueIndicator(); + return; + } + this.restoreMessageToInput(message, { mergeWithComposer: true }); + this.updateQueueIndicator(); + } + activateStreamingAssistantMessage(message) { + const { state, renderer } = this.deps; + const msgEl = renderer.addMessage(message); + const contentEl = msgEl.querySelector(".claudian-message-content"); + if (!contentEl) { + return; + } + if (!state.currentContentEl) { + state.toolCallElements.clear(); + } + state.currentContentEl = contentEl; + state.currentTextEl = null; + state.currentTextContent = ""; + state.currentThinkingState = null; + } + resetProviderMessageBoundaryState() { + this.pendingProviderUserMessages = []; + this.sawInitialProviderUserMessage = false; + this.awaitingProviderAssistantStart = false; + } + async handleProviderMessageBoundaryChunk(chunk) { + switch (chunk.type) { + case "user_message_start": + await this.handleProviderUserMessageStart(chunk); + return true; + case "assistant_message_start": + await this.handleProviderAssistantMessageStart(); + return true; + default: + return false; + } + } + async handleProviderUserMessageStart(chunk) { + var _a5, _b3, _c2; + const expected = this.pendingProviderUserMessages.shift(); + if (!this.sawInitialProviderUserMessage) { + this.sawInitialProviderUserMessage = true; + return; + } + this.clearPendingSteerState(); + this.updateQueueIndicator(); + const previousAssistant = this.activeStreamingAssistantMessage; + const shouldDiscardPlaceholder = this.shouldDiscardPendingAssistantPlaceholder(previousAssistant); + if (previousAssistant) { + if (shouldDiscardPlaceholder) { + this.discardStreamingAssistantMessage(previousAssistant.id); + } else { + await this.deps.streamController.finalizeCurrentThinkingBlock(previousAssistant); + await this.deps.streamController.finalizeCurrentTextBlock(previousAssistant); + } + } + this.deps.streamController.hideThinkingIndicator(); + const displayContent = (_a5 = expected == null ? void 0 : expected.displayContent) != null ? _a5 : chunk.content; + const persistedContent = (_b3 = expected == null ? void 0 : expected.persistedContent) != null ? _b3 : displayContent; + const images = expected == null ? void 0 : expected.images; + if (displayContent || ((_c2 = images == null ? void 0 : images.length) != null ? _c2 : 0) > 0) { + const userMessage = { + id: this.deps.generateId(), + role: "user", + content: persistedContent, + displayContent, + timestamp: Date.now(), + currentNote: expected == null ? void 0 : expected.currentNote, + images + }; + this.deps.state.addMessage(userMessage); + this.deps.renderer.addMessage(userMessage); + } + const assistantMessage = { + id: this.deps.generateId(), + role: "assistant", + content: "", + timestamp: Date.now(), + toolCalls: [], + contentBlocks: [] + }; + this.deps.state.addMessage(assistantMessage); + this.activeStreamingAssistantMessage = assistantMessage; + this.activateStreamingAssistantMessage(assistantMessage); + this.deps.streamController.showThinkingIndicator(); + this.deps.state.responseStartTime = performance.now(); + this.awaitingProviderAssistantStart = true; + } + async handleProviderAssistantMessageStart() { + if (this.awaitingProviderAssistantStart) { + this.awaitingProviderAssistantStart = false; + return; + } + const previousAssistant = this.activeStreamingAssistantMessage; + if (previousAssistant) { + await this.deps.streamController.finalizeCurrentThinkingBlock(previousAssistant); + await this.deps.streamController.finalizeCurrentTextBlock(previousAssistant); + } + const assistantMessage = { + id: this.deps.generateId(), + role: "assistant", + content: "", + timestamp: Date.now(), + toolCalls: [], + contentBlocks: [] + }; + this.deps.state.addMessage(assistantMessage); + this.activeStreamingAssistantMessage = assistantMessage; + this.activateStreamingAssistantMessage(assistantMessage); + this.deps.streamController.showThinkingIndicator(); + } + shouldDiscardPendingAssistantPlaceholder(message) { + var _a5, _b3, _c2, _d; + return this.awaitingProviderAssistantStart && !!message && !message.content.trim() && ((_b3 = (_a5 = message.toolCalls) == null ? void 0 : _a5.length) != null ? _b3 : 0) === 0 && ((_d = (_c2 = message.contentBlocks) == null ? void 0 : _c2.length) != null ? _d : 0) === 0; + } + discardStreamingAssistantMessage(messageId) { + const { state, renderer } = this.deps; + state.messages = state.messages.filter((message) => message.id !== messageId); + renderer.removeMessage(messageId); + state.currentContentEl = null; + state.currentTextEl = null; + state.currentTextContent = ""; + state.currentThinkingState = null; + } + // ============================================ + // Title Generation + // ============================================ + /** + * Triggers AI title generation after first user message. + * Handles setting fallback title, firing async generation, and updating UI. + */ + async triggerTitleGeneration() { + var _a5, _b3; + const { plugin, state, conversationController } = this.deps; + if (state.messages.length !== 1) { + return; + } + if (!state.currentConversationId) { + const sessionId = (_b3 = (_a5 = this.getAgentService()) == null ? void 0 : _a5.getSessionId()) != null ? _b3 : void 0; + const conversation = await plugin.createConversation({ + providerId: this.getActiveProviderId(), + sessionId + }); + state.currentConversationId = conversation.id; + } + const firstUserMsg = state.messages.find((m4) => m4.role === "user"); + if (!firstUserMsg) { + return; + } + const userContent = firstUserMsg.displayContent || firstUserMsg.content; + const fallbackTitle = conversationController.generateFallbackTitle(userContent); + await plugin.renameConversation(state.currentConversationId, fallbackTitle); + if (!plugin.settings.enableAutoTitleGeneration) { + return; + } + const titleService = this.deps.getTitleGenerationService(); + if (!titleService) { + return; + } + await plugin.updateConversation(state.currentConversationId, { titleGenerationStatus: "pending" }); + conversationController.updateHistoryDropdown(); + const convId = state.currentConversationId; + const expectedTitle = fallbackTitle; + titleService.generateTitle( + convId, + userContent, + async (conversationId, result) => { + const currentConv = await plugin.getConversationById(conversationId); + if (!currentConv) return; + const userManuallyRenamed = currentConv.title !== expectedTitle; + if (result.success && !userManuallyRenamed) { + await plugin.renameConversation(conversationId, result.title); + await plugin.updateConversation(conversationId, { titleGenerationStatus: "success" }); + } else if (!userManuallyRenamed) { + await plugin.updateConversation(conversationId, { titleGenerationStatus: "failed" }); + } else { + await plugin.updateConversation(conversationId, { titleGenerationStatus: void 0 }); + } + conversationController.updateHistoryDropdown(); + } + ).catch(() => { + }); + } + // ============================================ + // Streaming Control + // ============================================ + cancelStreaming() { + var _a5; + const { state, streamController } = this.deps; + if (!state.isStreaming) return; + state.cancelRequested = true; + this.restorePendingMessagesToInput(); + (_a5 = this.getAgentService()) == null ? void 0 : _a5.cancel(); + streamController.hideThinkingIndicator(); + } + syncScrollToBottomAfterRenderUpdates() { + var _a5; + const { plugin, state } = this.deps; + if (!((_a5 = plugin.settings.enableAutoScroll) != null ? _a5 : true)) return; + if (!state.autoScrollEnabled) return; + window.requestAnimationFrame(() => { + var _a6; + if (!((_a6 = this.deps.plugin.settings.enableAutoScroll) != null ? _a6 : true)) return; + if (!this.deps.state.autoScrollEnabled) return; + const messagesEl = this.deps.getMessagesEl(); + messagesEl.scrollTop = messagesEl.scrollHeight; + }); + } + // ============================================ + // Instruction Mode + // ============================================ + async handleInstructionSubmit(rawInstruction) { + const { plugin } = this.deps; + const instructionRefineService = this.deps.getInstructionRefineService(); + const instructionModeManager = this.deps.getInstructionModeManager(); + if (!instructionRefineService) return; + const existingPrompt = plugin.settings.systemPrompt; + let modal = null; + let wasCancelled = false; + try { + modal = new InstructionModal( + plugin.app, + rawInstruction, + { + onAccept: (finalInstruction) => { + void (async () => { + const currentPrompt = plugin.settings.systemPrompt; + plugin.settings.systemPrompt = appendMarkdownSnippet(currentPrompt, finalInstruction); + await plugin.saveSettings(); + new import_obsidian28.Notice("Instruction added to custom system prompt"); + instructionModeManager == null ? void 0 : instructionModeManager.clear(); + })(); + }, + onReject: () => { + wasCancelled = true; + instructionRefineService.cancel(); + instructionModeManager == null ? void 0 : instructionModeManager.clear(); + }, + onClarificationSubmit: async (response) => { + this.syncInstructionRefineModelOverride(instructionRefineService); + const result2 = await instructionRefineService.continueConversation(response); + if (wasCancelled) { + return; + } + if (!result2.success) { + if (result2.error === "Cancelled") { + return; + } + new import_obsidian28.Notice(result2.error || "Failed to process response"); + modal == null ? void 0 : modal.showError(result2.error || "Failed to process response"); + return; + } + if (result2.clarification) { + modal == null ? void 0 : modal.showClarification(result2.clarification); + } else if (result2.refinedInstruction) { + modal == null ? void 0 : modal.showConfirmation(result2.refinedInstruction); + } + } + } + ); + modal.open(); + this.syncInstructionRefineModelOverride(instructionRefineService); + instructionRefineService.resetConversation(); + const result = await instructionRefineService.refineInstruction( + rawInstruction, + existingPrompt + ); + if (wasCancelled) { + return; + } + if (!result.success) { + if (result.error === "Cancelled") { + instructionModeManager == null ? void 0 : instructionModeManager.clear(); + return; + } + new import_obsidian28.Notice(result.error || "Failed to refine instruction"); + modal.showError(result.error || "Failed to refine instruction"); + instructionModeManager == null ? void 0 : instructionModeManager.clear(); + return; + } + if (result.clarification) { + modal.showClarification(result.clarification); + } else if (result.refinedInstruction) { + modal.showConfirmation(result.refinedInstruction); + } else { + new import_obsidian28.Notice("No instruction received"); + modal.showError("No instruction received"); + instructionModeManager == null ? void 0 : instructionModeManager.clear(); + } + } catch (error48) { + const errorMsg = error48 instanceof Error ? error48.message : "Unknown error"; + new import_obsidian28.Notice(`Error: ${errorMsg}`); + modal == null ? void 0 : modal.showError(errorMsg); + instructionModeManager == null ? void 0 : instructionModeManager.clear(); + } + } + // ============================================ + // Approval Dialogs + // ============================================ + async handleApprovalRequest(toolName, _input, description, approvalOptions) { + var _a5; + const inputContainerEl = this.deps.getInputContainerEl(); + const parentEl = inputContainerEl.parentElement; + if (!parentEl) { + throw new Error("Input container is detached from DOM"); + } + const headerEl = parentEl.createDiv({ cls: "claudian-ask-approval-info" }); + headerEl.remove(); + const toolEl = headerEl.createDiv({ cls: "claudian-ask-approval-tool" }); + const iconEl = toolEl.createSpan({ cls: "claudian-ask-approval-icon" }); + iconEl.setAttribute("aria-hidden", "true"); + setToolIcon(iconEl, toolName); + toolEl.createSpan({ text: toolName, cls: "claudian-ask-approval-tool-name" }); + if (approvalOptions == null ? void 0 : approvalOptions.decisionReason) { + headerEl.createDiv({ text: approvalOptions.decisionReason, cls: "claudian-ask-approval-reason" }); + } + if (approvalOptions == null ? void 0 : approvalOptions.blockedPath) { + headerEl.createDiv({ text: approvalOptions.blockedPath, cls: "claudian-ask-approval-blocked-path" }); + } + if (approvalOptions == null ? void 0 : approvalOptions.agentID) { + headerEl.createDiv({ text: `Agent: ${approvalOptions.agentID}`, cls: "claudian-ask-approval-agent" }); + } + headerEl.createDiv({ text: description, cls: "claudian-ask-approval-desc" }); + const decisionOptions = (_a5 = approvalOptions == null ? void 0 : approvalOptions.decisionOptions) != null ? _a5 : DEFAULT_APPROVAL_DECISION_OPTIONS; + const optionDecisionMap = /* @__PURE__ */ new Map(); + const questionOptions = decisionOptions.map((option, index) => { + var _a6; + const value = option.value || `approval-option-${index}`; + if (option.decision) { + optionDecisionMap.set(value, option.decision); + } + return { + label: option.label, + description: (_a6 = option.description) != null ? _a6 : "", + value + }; + }); + const input = { + questions: [{ + question: "Allow this action?", + options: questionOptions, + isOther: false, + isSecret: false + }] + }; + const result = await this.showInlineQuestion( + parentEl, + inputContainerEl, + input, + (inline) => { + this.pendingApprovalInline = inline; + }, + void 0, + { title: "Permission required", headerEl, showCustomInput: false, immediateSelect: true } + ); + if (!result) return "cancel"; + const selected = Object.values(result)[0]; + const selectedValue = Array.isArray(selected) ? selected[0] : selected; + if (typeof selectedValue !== "string") { + new import_obsidian28.Notice(`Unexpected approval selection: "${String(selectedValue)}"`); + return "cancel"; + } + const decision = optionDecisionMap.get(selectedValue); + if (decision) { + return decision; + } + return { + type: "select-option", + value: selectedValue + }; + } + async handleAskUserQuestion(input, signal) { + const inputContainerEl = this.deps.getInputContainerEl(); + const parentEl = inputContainerEl.parentElement; + if (!parentEl) { + throw new Error("Input container is detached from DOM"); + } + return this.showInlineQuestion( + parentEl, + inputContainerEl, + input, + (inline) => { + this.pendingAskInline = inline; + }, + signal + ); + } + showInlineQuestion(parentEl, inputContainerEl, input, setPending, signal, config2) { + this.deps.streamController.hideThinkingIndicator(); + this.hideInputContainer(inputContainerEl); + return new Promise((resolve8, reject) => { + const inline = new InlineAskUserQuestion( + parentEl, + input, + (result) => { + setPending(null); + this.restoreInputContainer(inputContainerEl); + resolve8(result); + }, + signal, + config2 + ); + setPending(inline); + try { + inline.render(); + } catch (err) { + setPending(null); + this.restoreInputContainer(inputContainerEl); + reject(toError(err)); + } + }); + } + async handleExitPlanMode(input, signal) { + const { state, streamController } = this.deps; + const inputContainerEl = this.deps.getInputContainerEl(); + const parentEl = inputContainerEl.parentElement; + if (!parentEl) { + throw new Error("Input container is detached from DOM"); + } + streamController.hideThinkingIndicator(); + this.hideInputContainer(inputContainerEl); + const enrichedInput = state.planFilePath ? { ...input, planFilePath: state.planFilePath } : input; + const renderContent = (el2, markdown) => this.deps.renderer.renderContent(el2, markdown); + const planPathPrefix = this.getActiveCapabilities().planPathPrefix; + return new Promise((resolve8, reject) => { + const inline = new InlineExitPlanMode( + parentEl, + enrichedInput, + (decision) => { + this.pendingExitPlanModeInline = null; + this.restoreInputContainer(inputContainerEl); + resolve8(decision); + }, + signal, + renderContent, + planPathPrefix + ); + this.pendingExitPlanModeInline = inline; + try { + inline.render(); + } catch (err) { + this.pendingExitPlanModeInline = null; + this.restoreInputContainer(inputContainerEl); + reject(toError(err)); + } + }); + } + dismissPendingApprovalPrompt() { + if (this.pendingApprovalInline) { + this.pendingApprovalInline.destroy(); + this.pendingApprovalInline = null; + } + } + dismissPendingApproval() { + this.dismissPendingApprovalPrompt(); + if (this.pendingAskInline) { + this.pendingAskInline.destroy(); + this.pendingAskInline = null; + } + if (this.pendingExitPlanModeInline) { + this.pendingExitPlanModeInline.destroy(); + this.pendingExitPlanModeInline = null; + } + this.dismissPendingPlanApproval(true); + this.resetInputContainerVisibility(); + } + showPlanApproval() { + const inputContainerEl = this.deps.getInputContainerEl(); + const parentEl = inputContainerEl.parentElement; + if (!parentEl) { + return Promise.resolve({ decision: null, invalidated: false }); + } + this.hideInputContainer(inputContainerEl); + this.pendingPlanApprovalInvalidated = false; + return new Promise((resolve8, reject) => { + const inline = new InlinePlanApproval( + parentEl, + (decision) => { + const invalidated = this.pendingPlanApprovalInvalidated; + this.pendingPlanApprovalInvalidated = false; + this.pendingPlanApproval = null; + this.restoreInputContainer(inputContainerEl); + resolve8({ decision, invalidated }); + } + ); + this.pendingPlanApproval = inline; + try { + inline.render(); + } catch (err) { + this.pendingPlanApproval = null; + this.pendingPlanApprovalInvalidated = false; + this.restoreInputContainer(inputContainerEl); + reject(toError(err)); + } + }); + } + dismissPendingPlanApproval(invalidated) { + if (!this.pendingPlanApproval) { + return; + } + if (invalidated) { + this.pendingPlanApprovalInvalidated = true; + } + this.pendingPlanApproval.destroy(); + this.pendingPlanApproval = null; + } + hideInputContainer(inputContainerEl) { + this.inputContainerHideDepth++; + inputContainerEl.addClass("claudian-hidden"); + } + restoreInputContainer(inputContainerEl) { + if (this.inputContainerHideDepth <= 0) return; + this.inputContainerHideDepth--; + if (this.inputContainerHideDepth === 0) { + inputContainerEl.removeClass("claudian-hidden"); + } + } + resetInputContainerVisibility() { + if (this.inputContainerHideDepth > 0) { + this.inputContainerHideDepth = 0; + this.deps.getInputContainerEl().removeClass("claudian-hidden"); + } + } + // ============================================ + // Built-in Commands + // ============================================ + async executeBuiltInCommand(command, args) { + const { conversationController } = this.deps; + const capabilities = this.getActiveCapabilities(); + if (!isBuiltInCommandSupported(command, capabilities)) { + new import_obsidian28.Notice(`/${command.name} is not supported by this provider.`); + return; + } + switch (command.action) { + case "clear": + await conversationController.createNew(); + break; + case "add-dir": { + const externalContextSelector = this.deps.getExternalContextSelector(); + if (!externalContextSelector) { + new import_obsidian28.Notice("External context selector not available."); + return; + } + const result = externalContextSelector.addExternalContext(args); + if (result.success) { + new import_obsidian28.Notice(`Added external context: ${result.normalizedPath}`); + } else { + new import_obsidian28.Notice(result.error); + } + break; + } + case "resume": + this.showResumeDropdown(); + break; + case "fork": { + if (!this.getActiveCapabilities().supportsFork) { + new import_obsidian28.Notice("Fork is not supported by this provider."); + return; + } + if (!this.deps.onForkAll) { + new import_obsidian28.Notice("Fork not available."); + return; + } + await this.deps.onForkAll(); + break; + } + default: { + const unknownAction = typeof command.action === "string" ? command.action : "unknown"; + new import_obsidian28.Notice(`Unknown command: ${unknownAction}`); + break; + } + } + } + // ============================================ + // Resume Session Dropdown + // ============================================ + handleResumeKeydown(e2) { + var _a5; + if (!((_a5 = this.activeResumeDropdown) == null ? void 0 : _a5.isVisible())) return false; + return this.activeResumeDropdown.handleKeydown(e2); + } + isResumeDropdownVisible() { + var _a5, _b3; + return (_b3 = (_a5 = this.activeResumeDropdown) == null ? void 0 : _a5.isVisible()) != null ? _b3 : false; + } + destroyResumeDropdown() { + if (this.activeResumeDropdown) { + this.activeResumeDropdown.destroy(); + this.activeResumeDropdown = null; + } + } + showResumeDropdown() { + var _a5; + const { plugin, state, conversationController } = this.deps; + this.destroyResumeDropdown(); + const conversations = plugin.getConversationList(); + if (conversations.length === 0) { + new import_obsidian28.Notice("No conversations to resume"); + return; + } + const openConversation = (_a5 = this.deps.openConversation) != null ? _a5 : ((id) => conversationController.switchTo(id)); + this.activeResumeDropdown = new ResumeSessionDropdown( + this.deps.getInputContainerEl(), + this.deps.getInputEl(), + conversations, + state.currentConversationId, + { + onSelect: (id) => { + this.destroyResumeDropdown(); + openConversation(id).catch((err) => { + const msg = err instanceof Error ? err.message : String(err); + new import_obsidian28.Notice(`Failed to open conversation: ${msg}`); + }); + }, + onDismiss: () => { + this.destroyResumeDropdown(); + } + } + ); + } +}; + +// src/features/chat/controllers/NavigationController.ts +var SCROLL_SPEED = 8; +var NavigationController = class { + constructor(deps) { + this.scrollDirection = null; + this.animationFrame = null; + this.keyboardDocument = null; + this.initialized = false; + this.disposed = false; + this.scrollLoop = () => { + var _a5; + if (this.scrollDirection === null || this.disposed) return; + const messagesEl = this.deps.getMessagesEl(); + if (!messagesEl) { + this.stopScrolling(); + return; + } + const scrollAmount = this.scrollDirection === "up" ? -SCROLL_SPEED : SCROLL_SPEED; + messagesEl.scrollTop += scrollAmount; + this.animationFrame = scheduleAnimationFrame( + this.scrollLoop, + (_a5 = messagesEl.ownerDocument.defaultView) != null ? _a5 : null + ); + }; + this.deps = deps; + this.boundMessagesKeydown = (e2) => this.handleMessagesKeydown(e2); + this.boundKeyup = (e2) => this.handleKeyup(e2); + this.boundInputKeydown = (e2) => this.handleInputKeydown(e2); + } + initialize() { + if (this.initialized || this.disposed) return; + const messagesEl = this.deps.getMessagesEl(); + const inputEl = this.deps.getInputEl(); + if (!messagesEl || !inputEl) return; + messagesEl.setAttribute("tabindex", "0"); + messagesEl.addClass("claudian-messages-focusable"); + messagesEl.addEventListener("keydown", this.boundMessagesKeydown); + this.keyboardDocument = messagesEl.ownerDocument; + this.keyboardDocument.addEventListener("keyup", this.boundKeyup); + inputEl.addEventListener("keydown", this.boundInputKeydown, { capture: true }); + this.initialized = true; + } + /** Cleans up event listeners and animation frames. */ + dispose() { + var _a5; + if (this.disposed) return; + this.disposed = true; + this.stopScrolling(); + (_a5 = this.keyboardDocument) == null ? void 0 : _a5.removeEventListener("keyup", this.boundKeyup); + this.keyboardDocument = null; + const messagesEl = this.deps.getMessagesEl(); + messagesEl == null ? void 0 : messagesEl.removeEventListener("keydown", this.boundMessagesKeydown); + messagesEl == null ? void 0 : messagesEl.removeClass("claudian-messages-focusable"); + const inputEl = this.deps.getInputEl(); + inputEl == null ? void 0 : inputEl.removeEventListener("keydown", this.boundInputKeydown, { capture: true }); + } + // ============================================ + // Messages Panel Keyboard Handling + // ============================================ + handleMessagesKeydown(e2) { + if (e2.ctrlKey || e2.metaKey || e2.altKey || e2.shiftKey) return; + const settings11 = this.deps.getSettings(); + const key = e2.key.toLowerCase(); + if (key === settings11.scrollUpKey.toLowerCase()) { + e2.preventDefault(); + this.startScrolling("up"); + return; + } + if (key === settings11.scrollDownKey.toLowerCase()) { + e2.preventDefault(); + this.startScrolling("down"); + return; + } + if (key === settings11.focusInputKey.toLowerCase()) { + e2.preventDefault(); + this.deps.getInputEl().focus(); + return; + } + } + handleKeyup(e2) { + const settings11 = this.deps.getSettings(); + const key = e2.key.toLowerCase(); + if (key === settings11.scrollUpKey.toLowerCase() || key === settings11.scrollDownKey.toLowerCase()) { + this.stopScrolling(); + } + } + // ============================================ + // Input Keyboard Handling (Escape) + // ============================================ + handleInputKeydown(e2) { + var _a5, _b3; + if (e2.key !== "Escape") return; + if (e2.isComposing) return; + if (this.deps.isStreaming()) { + return; + } + if ((_b3 = (_a5 = this.deps).shouldSkipEscapeHandling) == null ? void 0 : _b3.call(_a5)) { + return; + } + e2.preventDefault(); + e2.stopPropagation(); + this.deps.getInputEl().blur(); + this.deps.getMessagesEl().focus(); + } + // ============================================ + // Continuous Scrolling with requestAnimationFrame + // ============================================ + startScrolling(direction) { + if (this.scrollDirection === direction) { + return; + } + this.scrollDirection = direction; + this.scrollLoop(); + } + stopScrolling() { + this.scrollDirection = null; + if (this.animationFrame !== null) { + cancelScheduledAnimationFrame(this.animationFrame); + this.animationFrame = null; + } + } + // ============================================ + // Public API + // ============================================ + /** Focuses the messages panel. */ + focusMessages() { + this.deps.getMessagesEl().focus(); + } + /** Focuses the input. */ + focusInput() { + this.deps.getInputEl().focus(); + } +}; + +// src/features/chat/controllers/SelectionController.ts +var import_obsidian29 = require("obsidian"); + +// src/shared/components/SelectionHighlight.ts +var import_state = require("@codemirror/state"); +var import_view = require("@codemirror/view"); +function createSelectionHighlighter() { + const showHighlight = import_state.StateEffect.define(); + const hideHighlight = import_state.StateEffect.define(); + const selectionHighlightField = import_state.StateField.define({ + create: () => import_view.Decoration.none, + update: (deco, tr) => { + for (const e2 of tr.effects) { + if (e2.is(showHighlight)) { + const builder = new import_state.RangeSetBuilder(); + builder.add(e2.value.from, e2.value.to, import_view.Decoration.mark({ + class: "claudian-selection-highlight" + })); + return builder.finish(); + } else if (e2.is(hideHighlight)) { + return import_view.Decoration.none; + } + } + return deco.map(tr.changes); + }, + provide: (f9) => import_view.EditorView.decorations.from(f9) + }); + const installedEditors2 = /* @__PURE__ */ new WeakSet(); + function ensureHighlightField(editorView) { + if (!installedEditors2.has(editorView)) { + editorView.dispatch({ + effects: import_state.StateEffect.appendConfig.of(selectionHighlightField) + }); + installedEditors2.add(editorView); + } + } + function show(editorView, from, to) { + ensureHighlightField(editorView); + editorView.dispatch({ + effects: showHighlight.of({ from, to }) + }); + } + function hide(editorView) { + if (installedEditors2.has(editorView)) { + editorView.dispatch({ + effects: hideHighlight.of(null) + }); + } + } + return { show, hide }; +} +var defaultHighlighter = createSelectionHighlighter(); +function showSelectionHighlight(editorView, from, to) { + defaultHighlighter.show(editorView, from, to); +} +function hideSelectionHighlight(editorView) { + defaultHighlighter.hide(editorView); +} + +// src/features/chat/controllers/SelectionController.ts +var SELECTION_POLL_INTERVAL = 250; +var INPUT_HANDOFF_GRACE_MS = 1500; +var HIGHLIGHT_KEY = "claudian-selection"; +var SelectionController = class { + constructor(app, indicatorEl, inputEl, contextRowEl, onVisibilityChange, focusScopeEl) { + this.storedSelection = null; + this.inputHandoffGraceUntil = null; + this.pollInterval = null; + this.focusScopePointerDownHandler = () => { + if (!this.storedSelection) return; + this.inputHandoffGraceUntil = Date.now() + INPUT_HANDOFF_GRACE_MS; + }; + this.app = app; + this.indicatorEl = indicatorEl; + this.inputEl = inputEl; + this.focusScopeEl = focusScopeEl != null ? focusScopeEl : inputEl; + this.contextRowEl = contextRowEl; + this.onVisibilityChange = onVisibilityChange != null ? onVisibilityChange : null; + } + start() { + if (this.pollInterval) return; + this.inputEl.addEventListener("pointerdown", this.focusScopePointerDownHandler); + if (this.focusScopeEl !== this.inputEl) { + this.focusScopeEl.addEventListener("pointerdown", this.focusScopePointerDownHandler); + } + this.pollInterval = window.setInterval(() => this.poll(), SELECTION_POLL_INTERVAL); + } + stop() { + if (this.pollInterval) { + window.clearInterval(this.pollInterval); + this.pollInterval = null; + } + this.inputEl.removeEventListener("pointerdown", this.focusScopePointerDownHandler); + if (this.focusScopeEl !== this.inputEl) { + this.focusScopeEl.removeEventListener("pointerdown", this.focusScopePointerDownHandler); + } + this.clear(); + } + dispose() { + this.stop(); + } + // ============================================ + // Selection Polling + // ============================================ + poll() { + var _a5; + const view = this.app.workspace.getActiveViewOfType(import_obsidian29.MarkdownView); + if (!view) { + this.clearWhenMarkdownContextIsUnavailable(); + return; + } + if (view.getMode() === "preview") { + this.pollReadingMode(view); + return; + } + const editor = view.editor; + const editorView = getEditorView(editor); + if (!editorView) { + this.clearWhenMarkdownContextIsUnavailable(); + return; + } + const selectedText = editor.getSelection(); + if (selectedText.trim()) { + this.inputHandoffGraceUntil = null; + const fromPos = editor.getCursor("from"); + const toPos = editor.getCursor("to"); + const from = editor.posToOffset(fromPos); + const to = editor.posToOffset(toPos); + const startLine = fromPos.line + 1; + const notePath = ((_a5 = view.file) == null ? void 0 : _a5.path) || "unknown"; + const lineCount = selectedText.split(/\r?\n/).length; + const s2 = this.storedSelection; + const sameRange = s2 && s2.editorView === editorView && s2.from === from && s2.to === to && s2.notePath === notePath; + const unchanged = sameRange && s2.selectedText === selectedText && s2.lineCount === lineCount && s2.startLine === startLine; + if (!unchanged) { + if (s2 && !sameRange) { + this.clearHighlight(); + } + this.storedSelection = { notePath, selectedText, lineCount, startLine, from, to, editorView }; + this.updateIndicator(); + } + } else { + this.handleDeselection(); + } + } + pollReadingMode(view) { + var _a5, _b3; + const containerEl = view.containerEl; + if (!containerEl) { + this.clearWhenMarkdownContextIsUnavailable(); + return; + } + const selection = this.getDocumentSelection(containerEl.ownerDocument); + const selectedText = (_a5 = selection == null ? void 0 : selection.toString()) != null ? _a5 : ""; + if (selectedText.trim()) { + const anchorNode = selection == null ? void 0 : selection.anchorNode; + const focusNode = selection == null ? void 0 : selection.focusNode; + if ((!anchorNode || !containerEl.contains(anchorNode)) && (!focusNode || !containerEl.contains(focusNode))) { + this.handleDeselection(); + return; + } + this.inputHandoffGraceUntil = null; + const notePath = ((_b3 = view.file) == null ? void 0 : _b3.path) || "unknown"; + const lineCount = selectedText.split(/\r?\n/).length; + const domRanges = this.cloneDOMRanges(selection); + const unchanged = this.storedSelection && this.storedSelection.editorView === void 0 && this.storedSelection.notePath === notePath && this.storedSelection.selectedText === selectedText && this.storedSelection.lineCount === lineCount && this.rangeListsMatch(this.storedSelection.domRanges, domRanges); + if (!unchanged) { + this.clearHighlight(); + this.storedSelection = { notePath, selectedText, lineCount, domRanges }; + this.updateIndicator(); + } + } else { + this.handleDeselection(); + } + } + get cssHighlights() { + var _a5; + const css = typeof CSS === "undefined" ? null : CSS; + return (_a5 = css == null ? void 0 : css.highlights) != null ? _a5 : null; + } + get highlightConstructor() { + var _a5, _b3; + const ownerWindow = this.inputEl.ownerDocument.defaultView; + const rendererWindow = typeof window === "undefined" ? null : window; + return (_b3 = (_a5 = ownerWindow == null ? void 0 : ownerWindow.Highlight) != null ? _a5 : rendererWindow == null ? void 0 : rendererWindow.Highlight) != null ? _b3 : null; + } + rangesMatch(a, b2) { + return a.startContainer === b2.startContainer && a.startOffset === b2.startOffset && a.endContainer === b2.endContainer && a.endOffset === b2.endOffset; + } + rangeListsMatch(left, right) { + return left !== void 0 && left.length === right.length && left.every((range, index) => this.rangesMatch(range, right[index])); + } + selectionMatchesRanges(selection, ranges) { + if (!selection || selection.rangeCount !== ranges.length) return false; + for (let i = 0; i < ranges.length; i++) { + if (!this.rangesMatch(selection.getRangeAt(i), ranges[i])) { + return false; + } + } + return true; + } + cloneDOMRanges(selection) { + if (!selection) return []; + const ranges = []; + for (let i = 0; i < selection.rangeCount; i++) { + ranges.push(selection.getRangeAt(i).cloneRange()); + } + return ranges; + } + getDocumentSelection(ownerDocument) { + if (ownerDocument && typeof ownerDocument.getSelection === "function") { + return ownerDocument.getSelection(); + } + const fallbackDocument = this.inputEl.ownerDocument; + if (fallbackDocument && typeof fallbackDocument.getSelection === "function") { + return fallbackDocument.getSelection(); + } + return null; + } + getActiveElement(ownerDocument) { + var _a5, _b3, _c2; + return (_c2 = (_b3 = ownerDocument == null ? void 0 : ownerDocument.activeElement) != null ? _b3 : (_a5 = this.inputEl.ownerDocument) == null ? void 0 : _a5.activeElement) != null ? _c2 : null; + } + isFocusWithinChatSidebar() { + const activeElement = this.getActiveElement(this.focusScopeEl.ownerDocument); + return activeElement !== null && (activeElement === this.focusScopeEl || this.focusScopeEl.contains(activeElement)); + } + isNativeEditorSelectionVisible(sel) { + if (!sel.editorView || sel.from === void 0 || sel.to === void 0) { + return false; + } + const activeElement = this.getActiveElement(sel.editorView.dom.ownerDocument); + if (activeElement === null || !sel.editorView.dom.contains(activeElement)) { + return false; + } + const cmSel = sel.editorView.state.selection.main; + return cmSel.from === sel.from && cmSel.to === sel.to; + } + isNativePreviewSelectionVisible(ranges) { + if (this.isFocusWithinChatSidebar()) { + return false; + } + return this.selectionMatchesRanges(this.getDocumentSelection(this.focusScopeEl.ownerDocument), ranges); + } + clearWhenMarkdownContextIsUnavailable() { + if (!this.storedSelection) return; + if (this.isFocusWithinChatSidebar()) { + this.inputHandoffGraceUntil = null; + return; + } + if (this.inputHandoffGraceUntil !== null && Date.now() <= this.inputHandoffGraceUntil) { + return; + } + this.inputHandoffGraceUntil = null; + this.clearHighlight(); + this.storedSelection = null; + this.updateIndicator(); + } + handleDeselection() { + if (!this.storedSelection) return; + if (this.isFocusWithinChatSidebar()) { + this.inputHandoffGraceUntil = null; + return; + } + if (this.inputHandoffGraceUntil !== null && Date.now() <= this.inputHandoffGraceUntil) { + return; + } + this.inputHandoffGraceUntil = null; + this.clearHighlight(); + this.storedSelection = null; + this.updateIndicator(); + } + // ============================================ + // Highlight Management + // ============================================ + showHighlight() { + var _a5, _b3, _c2; + const sel = this.storedSelection; + if (!sel) return; + if (sel.editorView && sel.from !== void 0 && sel.to !== void 0) { + if (this.isNativeEditorSelectionVisible(sel)) { + hideSelectionHighlight(sel.editorView); + return; + } + showSelectionHighlight(sel.editorView, sel.from, sel.to); + return; + } + if ((_a5 = sel.domRanges) == null ? void 0 : _a5.length) { + if (this.isNativePreviewSelectionVisible(sel.domRanges)) { + (_b3 = this.cssHighlights) == null ? void 0 : _b3.delete(HIGHLIGHT_KEY); + return; + } + const validRanges = sel.domRanges.filter((r) => r.startContainer.isConnected); + const HighlightCtor = this.highlightConstructor; + if (validRanges.length && HighlightCtor) { + (_c2 = this.cssHighlights) == null ? void 0 : _c2.set(HIGHLIGHT_KEY, new HighlightCtor(...validRanges)); + } + } + } + clearHighlight() { + var _a5, _b3; + if ((_a5 = this.storedSelection) == null ? void 0 : _a5.editorView) { + hideSelectionHighlight(this.storedSelection.editorView); + } + (_b3 = this.cssHighlights) == null ? void 0 : _b3.delete(HIGHLIGHT_KEY); + } + // ============================================ + // Indicator + // ============================================ + updateIndicator() { + if (!this.indicatorEl) return; + if (this.storedSelection) { + const lineText = this.storedSelection.lineCount === 1 ? "line" : "lines"; + this.indicatorEl.textContent = `${this.storedSelection.lineCount} ${lineText} selected`; + this.indicatorEl.removeClass("claudian-hidden"); + } else { + this.indicatorEl.addClass("claudian-hidden"); + } + this.updateContextRowVisibility(); + } + updateContextRowVisibility() { + var _a5; + if (!this.contextRowEl) return; + updateContextRowHasContent(this.contextRowEl); + (_a5 = this.onVisibilityChange) == null ? void 0 : _a5.call(this); + } + // ============================================ + // Context Access + // ============================================ + getContext() { + if (!this.storedSelection) return null; + return { + notePath: this.storedSelection.notePath, + mode: "selection", + selectedText: this.storedSelection.selectedText, + lineCount: this.storedSelection.lineCount, + ...this.storedSelection.startLine !== void 0 && { startLine: this.storedSelection.startLine } + }; + } + hasSelection() { + return this.storedSelection !== null; + } + // ============================================ + // Clear + // ============================================ + clear() { + this.inputHandoffGraceUntil = null; + this.clearHighlight(); + this.storedSelection = null; + this.updateIndicator(); + } +}; + +// src/features/chat/controllers/StreamController.ts +var import_obsidian32 = require("obsidian"); + +// src/core/tools/todo.ts +function isValidTodoItem(item) { + if (typeof item !== "object" || item === null) return false; + const record2 = item; + return typeof record2.content === "string" && record2.content.length > 0 && typeof record2.activeForm === "string" && record2.activeForm.length > 0 && typeof record2.status === "string" && ["pending", "in_progress", "completed"].includes(record2.status); +} +function parseTodoInput(input) { + if (!input.todos || !Array.isArray(input.todos)) { + return null; + } + const validTodos = []; + for (const item of input.todos) { + if (isValidTodoItem(item)) { + validTodos.push(item); + } + } + return validTodos.length > 0 ? validTodos : null; +} + +// src/utils/markdownMath.ts +function getFenceRun(line) { + var _a5; + const match = line.match(/^ {0,3}(`{3,}|~{3,})/); + return (_a5 = match == null ? void 0 : match[1]) != null ? _a5 : null; +} +function isClosingFence(line, fence) { + const run = getFenceRun(line); + return !!run && run[0] === fence.marker && run.length >= fence.length; +} +function isHtmlTagStart(line, index) { + const next = line[index + 1]; + return !!next && /[A-Za-z/!?]/.test(next); +} +function readBacktickRun(line, index) { + let length = 0; + while (line[index + length] === "`") { + length += 1; + } + return length; +} +function escapeMathDelimitersInLine(line) { + let escaped = ""; + let inlineCodeRunLength = 0; + let inHtmlTag = false; + for (let index = 0; index < line.length; index += 1) { + const char = line[index]; + if (char === "`") { + const runLength = readBacktickRun(line, index); + escaped += line.slice(index, index + runLength); + index += runLength - 1; + if (inlineCodeRunLength === 0) { + inlineCodeRunLength = runLength; + } else if (runLength === inlineCodeRunLength) { + inlineCodeRunLength = 0; + } + continue; + } + if (inlineCodeRunLength > 0) { + escaped += char; + continue; + } + if (inHtmlTag) { + escaped += char; + if (char === ">") { + inHtmlTag = false; + } + continue; + } + if (char === "<" && isHtmlTagStart(line, index)) { + inHtmlTag = true; + escaped += char; + continue; + } + if (char === "\\" && line[index + 1] === "$") { + escaped += "\\$"; + index += 1; + continue; + } + escaped += char === "$" ? "\\$" : char; + } + return escaped; +} +function escapeMathDelimitersForStreaming(markdown) { + if (!markdown.includes("$")) { + return markdown; + } + let result = ""; + let fence = null; + let lineStart = 0; + while (lineStart < markdown.length) { + const newlineIndex = markdown.indexOf("\n", lineStart); + const lineEnd = newlineIndex === -1 ? markdown.length : newlineIndex + 1; + const line = markdown.slice(lineStart, lineEnd); + const lineWithoutNewline = line.endsWith("\n") ? line.slice(0, -1) : line; + if (fence) { + result += line; + if (isClosingFence(lineWithoutNewline, fence)) { + fence = null; + } + } else { + const fenceRun = getFenceRun(lineWithoutNewline); + if (fenceRun) { + result += line; + fence = { + marker: fenceRun[0], + length: fenceRun.length + }; + } else { + result += escapeMathDelimitersInLine(line); + } + } + lineStart = lineEnd; + } + return result; +} +function hasStreamingMathDelimiters(markdown) { + if (!markdown.includes("$")) { + return false; + } + return escapeMathDelimitersForStreaming(markdown) !== markdown; +} + +// src/features/chat/controllers/StreamController.ts +init_path(); + +// src/features/chat/rendering/subagentLifecycleResolution.ts +function resolveSubagentLifecycleAdapter(activeProviderId, toolName) { + const activeAdapter = ProviderRegistry.getSubagentLifecycleAdapter(activeProviderId); + if (!toolName) { + return activeAdapter; + } + return activeAdapter && adapterOwnsTool(activeAdapter, toolName) ? activeAdapter : null; +} +function adapterOwnsTool(adapter, toolName) { + return adapter.isSpawnTool(toolName) || adapter.isHiddenTool(toolName) || adapter.isWaitTool(toolName) || adapter.isCloseTool(toolName); +} + +// src/features/chat/rendering/SubagentRenderer.ts +var import_obsidian30 = require("obsidian"); +var SUBAGENT_TOOL_STATUS_ICONS = { + completed: "check", + error: "x", + blocked: "shield-off" +}; +function extractTaskDescription(input) { + return input.description || "Subagent task"; +} +function extractTaskPrompt(input) { + return input.prompt || ""; +} +function truncateDescription(description, maxLength = 40) { + if (description.length <= maxLength) return description; + return description.substring(0, maxLength) + "..."; +} +function createSection(parentEl, title, bodyClass) { + const wrapperEl = parentEl.createDiv({ cls: "claudian-subagent-section" }); + const headerEl = wrapperEl.createDiv({ cls: "claudian-subagent-section-header" }); + headerEl.setAttribute("tabindex", "0"); + headerEl.setAttribute("role", "button"); + const titleEl = headerEl.createDiv({ cls: "claudian-subagent-section-title" }); + titleEl.setText(title); + const bodyEl = wrapperEl.createDiv({ cls: "claudian-subagent-section-body" }); + if (bodyClass) bodyEl.addClass(bodyClass); + const state = { isExpanded: false }; + setupCollapsible(wrapperEl, headerEl, bodyEl, state, { + baseAriaLabel: title + }); + return { wrapperEl, bodyEl }; +} +function setPromptText(promptBodyEl, prompt) { + promptBodyEl.empty(); + const textEl = promptBodyEl.createDiv({ cls: "claudian-subagent-prompt-text" }); + textEl.setText(prompt || "No prompt provided"); +} +function updateSyncHeaderAria(state) { + state.headerEl.setAttribute( + "aria-label", + `Subagent task: ${truncateDescription(state.info.description)} - Status: ${state.info.status} - click to expand` + ); + state.statusEl.setAttribute("aria-label", `Status: ${state.info.status}`); +} +function renderSubagentToolContent(contentEl, toolCall) { + contentEl.empty(); + if (!toolCall.result && toolCall.status === "running") { + const emptyEl = contentEl.createDiv({ cls: "claudian-subagent-tool-empty" }); + emptyEl.setText("Running..."); + return; + } + renderExpandedContent(contentEl, toolCall.name, toolCall.result, toolCall.input); +} +function setSubagentToolStatus(view, status) { + view.statusEl.className = "claudian-subagent-tool-status"; + view.statusEl.addClass(`status-${status}`); + view.statusEl.empty(); + view.statusEl.setAttribute("aria-label", `Status: ${status}`); + const statusIcon = SUBAGENT_TOOL_STATUS_ICONS[status]; + if (statusIcon) { + (0, import_obsidian30.setIcon)(view.statusEl, statusIcon); + } +} +function updateSubagentToolView(view, toolCall) { + view.wrapperEl.className = `claudian-subagent-tool-item claudian-subagent-tool-${toolCall.status}`; + view.nameEl.setText(getToolName(toolCall.name, toolCall.input)); + view.summaryEl.setText(getToolSummary(toolCall.name, toolCall.input)); + setSubagentToolStatus(view, toolCall.status); + renderSubagentToolContent(view.contentEl, toolCall); +} +function createSubagentToolView(parentEl, toolCall) { + var _a5, _b3; + const wrapperEl = parentEl.createDiv({ + cls: `claudian-subagent-tool-item claudian-subagent-tool-${toolCall.status}` + }); + wrapperEl.dataset.toolId = toolCall.id; + const headerEl = wrapperEl.createDiv({ cls: "claudian-subagent-tool-header" }); + headerEl.setAttribute("tabindex", "0"); + headerEl.setAttribute("role", "button"); + const iconEl = headerEl.createDiv({ cls: "claudian-subagent-tool-icon" }); + iconEl.setAttribute("aria-hidden", "true"); + setToolIcon(iconEl, toolCall.name); + const nameEl = headerEl.createDiv({ cls: "claudian-subagent-tool-name" }); + const summaryEl = headerEl.createDiv({ cls: "claudian-subagent-tool-summary" }); + const statusEl = headerEl.createDiv({ cls: "claudian-subagent-tool-status" }); + const contentEl = wrapperEl.createDiv({ cls: "claudian-subagent-tool-content" }); + const collapseState = { isExpanded: (_a5 = toolCall.isExpanded) != null ? _a5 : false }; + setupCollapsible(wrapperEl, headerEl, contentEl, collapseState, { + initiallyExpanded: (_b3 = toolCall.isExpanded) != null ? _b3 : false, + onToggle: (expanded) => { + toolCall.isExpanded = expanded; + }, + baseAriaLabel: getToolLabel(toolCall.name, toolCall.input) + }); + const view = { + wrapperEl, + nameEl, + summaryEl, + statusEl, + contentEl + }; + updateSubagentToolView(view, toolCall); + return view; +} +function ensureResultSection(state) { + if (state.resultSectionEl && state.resultBodyEl) { + return { wrapperEl: state.resultSectionEl, bodyEl: state.resultBodyEl }; + } + const section = createSection(state.contentEl, "Result", "claudian-subagent-result-body"); + section.wrapperEl.addClass("claudian-subagent-section-result"); + state.resultSectionEl = section.wrapperEl; + state.resultBodyEl = section.bodyEl; + return section; +} +function setResultText(state, text) { + const section = ensureResultSection(state); + section.bodyEl.empty(); + const resultEl = section.bodyEl.createDiv({ cls: "claudian-subagent-result-output" }); + resultEl.setText(text); +} +function hydrateSyncSubagentStateFromStored(state, subagent) { + state.info.description = subagent.description; + state.info.prompt = subagent.prompt; + state.info.mode = subagent.mode; + state.info.status = subagent.status; + state.info.result = subagent.result; + state.labelEl.setText(truncateDescription(subagent.description)); + setPromptText(state.promptBodyEl, subagent.prompt || ""); + for (const originalToolCall of subagent.toolCalls) { + const toolCall = { + ...originalToolCall, + input: { ...originalToolCall.input } + }; + addSubagentToolCall(state, toolCall); + if (toolCall.status !== "running" || toolCall.result) { + updateSubagentToolResult(state, toolCall.id, toolCall); + } + } + if (subagent.status === "completed" || subagent.status === "error") { + const fallback = subagent.status === "error" ? "ERROR" : "DONE"; + finalizeSubagentBlock(state, subagent.result || fallback, subagent.status === "error"); + } else { + state.statusEl.className = "claudian-subagent-status status-running"; + state.statusEl.empty(); + updateSyncHeaderAria(state); + } +} +function createSubagentBlock(parentEl, taskToolId, taskInput) { + const description = extractTaskDescription(taskInput); + const prompt = extractTaskPrompt(taskInput); + const info = { + id: taskToolId, + description, + prompt, + status: "running", + toolCalls: [], + isExpanded: false + }; + const wrapperEl = parentEl.createDiv({ cls: "claudian-subagent-list" }); + wrapperEl.dataset.subagentId = taskToolId; + const headerEl = wrapperEl.createDiv({ cls: "claudian-subagent-header" }); + headerEl.setAttribute("tabindex", "0"); + headerEl.setAttribute("role", "button"); + const iconEl = headerEl.createDiv({ cls: "claudian-subagent-icon" }); + iconEl.setAttribute("aria-hidden", "true"); + (0, import_obsidian30.setIcon)(iconEl, getToolIcon(TOOL_TASK)); + const labelEl = headerEl.createDiv({ cls: "claudian-subagent-label" }); + labelEl.setText(truncateDescription(description)); + const statusEl = headerEl.createDiv({ cls: "claudian-subagent-status status-running" }); + statusEl.setAttribute("aria-label", "Status: running"); + const contentEl = wrapperEl.createDiv({ cls: "claudian-subagent-content" }); + const promptSection = createSection(contentEl, "Prompt", "claudian-subagent-prompt-body"); + promptSection.wrapperEl.addClass("claudian-subagent-section-prompt"); + setPromptText(promptSection.bodyEl, prompt); + const toolsContainerEl = contentEl.createDiv({ cls: "claudian-subagent-tools" }); + setupCollapsible(wrapperEl, headerEl, contentEl, info); + const state = { + wrapperEl, + contentEl, + headerEl, + labelEl, + statusEl, + promptSectionEl: promptSection.wrapperEl, + promptBodyEl: promptSection.bodyEl, + toolsContainerEl, + resultSectionEl: null, + resultBodyEl: null, + toolElements: /* @__PURE__ */ new Map(), + info + }; + updateSyncHeaderAria(state); + return state; +} +function addSubagentToolCall(state, toolCall) { + var _a5, _b3; + const existingIndex = state.info.toolCalls.findIndex((tc2) => tc2.id === toolCall.id); + if (existingIndex >= 0) { + const existingToolCall = state.info.toolCalls[existingIndex]; + const mergedToolCall = { + ...existingToolCall, + ...toolCall, + input: { + ...existingToolCall.input, + ...toolCall.input + }, + result: (_a5 = toolCall.result) != null ? _a5 : existingToolCall.result, + isExpanded: (_b3 = toolCall.isExpanded) != null ? _b3 : existingToolCall.isExpanded + }; + state.info.toolCalls[existingIndex] = mergedToolCall; + const existingView = state.toolElements.get(toolCall.id); + if (existingView) { + updateSubagentToolView(existingView, mergedToolCall); + } + updateSyncHeaderAria(state); + return; + } + state.info.toolCalls.push(toolCall); + const toolView = createSubagentToolView(state.toolsContainerEl, toolCall); + state.toolElements.set(toolCall.id, toolView); + updateSyncHeaderAria(state); +} +function updateSubagentToolResult(state, toolId, toolCall) { + const idx = state.info.toolCalls.findIndex((tc2) => tc2.id === toolId); + if (idx !== -1) { + state.info.toolCalls[idx] = toolCall; + } + const toolView = state.toolElements.get(toolId); + if (!toolView) { + return; + } + updateSubagentToolView(toolView, toolCall); +} +function finalizeSubagentBlock(state, result, isError) { + state.info.status = isError ? "error" : "completed"; + state.info.result = result; + state.labelEl.setText(truncateDescription(state.info.description)); + state.statusEl.className = "claudian-subagent-status"; + state.statusEl.addClass(`status-${state.info.status}`); + state.statusEl.empty(); + if (state.info.status === "completed") { + (0, import_obsidian30.setIcon)(state.statusEl, "check"); + state.wrapperEl.removeClass("error"); + state.wrapperEl.addClass("done"); + } else { + (0, import_obsidian30.setIcon)(state.statusEl, "x"); + state.wrapperEl.removeClass("done"); + state.wrapperEl.addClass("error"); + } + const finalText = (result == null ? void 0 : result.trim()) ? result : isError ? "ERROR" : "DONE"; + setResultText(state, finalText); + updateSyncHeaderAria(state); +} +function renderStoredSubagent(parentEl, subagent) { + const state = createSubagentBlock(parentEl, subagent.id, { + description: subagent.description, + prompt: subagent.prompt + }); + hydrateSyncSubagentStateFromStored(state, subagent); + return state.wrapperEl; +} +function setAsyncWrapperStatus(wrapperEl, status) { + const classes = ["pending", "running", "awaiting", "completed", "error", "orphaned", "async"]; + classes.forEach((cls) => wrapperEl.removeClass(cls)); + wrapperEl.addClass("async"); + wrapperEl.addClass(status); +} +function getAsyncDisplayStatus(asyncStatus) { + switch (asyncStatus) { + case "completed": + return "completed"; + case "error": + return "error"; + case "orphaned": + return "orphaned"; + default: + return "running"; + } +} +function getAsyncStatusText(asyncStatus) { + switch (asyncStatus) { + case "pending": + return "Initializing"; + case "completed": + return ""; + // Just show tick icon, no text + case "error": + return "Error"; + case "orphaned": + return "Orphaned"; + default: + return "Running in background"; + } +} +function getAsyncStatusAriaLabel(asyncStatus) { + switch (asyncStatus) { + case "pending": + return "Initializing"; + case "completed": + return "Completed"; + case "error": + return "Error"; + case "orphaned": + return "Orphaned"; + default: + return "Running in background"; + } +} +function updateAsyncLabel(state) { + state.labelEl.setText(truncateDescription(state.info.description)); + const statusLabel = getAsyncStatusAriaLabel(state.info.asyncStatus); + state.headerEl.setAttribute( + "aria-label", + `Background task: ${truncateDescription(state.info.description)} - ${statusLabel} - click to expand` + ); +} +function renderAsyncContentLikeSync(contentEl, subagent, displayStatus) { + var _a5; + contentEl.empty(); + const promptSection = createSection(contentEl, "Prompt", "claudian-subagent-prompt-body"); + promptSection.wrapperEl.addClass("claudian-subagent-section-prompt"); + setPromptText(promptSection.bodyEl, subagent.prompt || ""); + const toolsContainerEl = contentEl.createDiv({ cls: "claudian-subagent-tools" }); + for (const originalToolCall of subagent.toolCalls) { + const toolCall = { + ...originalToolCall, + input: { ...originalToolCall.input } + }; + createSubagentToolView(toolsContainerEl, toolCall); + } + if (displayStatus === "running") { + return; + } + const resultSection = createSection(contentEl, "Result", "claudian-subagent-result-body"); + resultSection.wrapperEl.addClass("claudian-subagent-section-result"); + const resultEl = resultSection.bodyEl.createDiv({ cls: "claudian-subagent-result-output" }); + if (displayStatus === "orphaned") { + resultEl.setText(subagent.result || "Conversation ended before task completed"); + return; + } + const fallback = displayStatus === "error" ? "ERROR" : "DONE"; + const finalText = ((_a5 = subagent.result) == null ? void 0 : _a5.trim()) ? subagent.result : fallback; + resultEl.setText(finalText); +} +function createAsyncSubagentBlock(parentEl, taskToolId, taskInput) { + const description = taskInput.description || "Background task"; + const prompt = taskInput.prompt || ""; + const info = { + id: taskToolId, + description, + prompt, + mode: "async", + status: "running", + toolCalls: [], + isExpanded: false, + asyncStatus: "pending" + }; + const wrapperEl = parentEl.createDiv({ cls: "claudian-subagent-list" }); + setAsyncWrapperStatus(wrapperEl, "pending"); + wrapperEl.dataset.asyncSubagentId = taskToolId; + const headerEl = wrapperEl.createDiv({ cls: "claudian-subagent-header" }); + headerEl.setAttribute("tabindex", "0"); + headerEl.setAttribute("role", "button"); + headerEl.setAttribute("aria-expanded", "false"); + headerEl.setAttribute("aria-label", `Background task: ${description} - Initializing - click to expand`); + const iconEl = headerEl.createDiv({ cls: "claudian-subagent-icon" }); + iconEl.setAttribute("aria-hidden", "true"); + (0, import_obsidian30.setIcon)(iconEl, getToolIcon(TOOL_TASK)); + const labelEl = headerEl.createDiv({ cls: "claudian-subagent-label" }); + labelEl.setText(truncateDescription(description)); + const statusTextEl = headerEl.createDiv({ cls: "claudian-subagent-status-text" }); + statusTextEl.setText("Initializing"); + const statusEl = headerEl.createDiv({ cls: "claudian-subagent-status status-running" }); + statusEl.setAttribute("aria-label", "Status: running"); + const contentEl = wrapperEl.createDiv({ cls: "claudian-subagent-content" }); + renderAsyncContentLikeSync(contentEl, info, "running"); + setupCollapsible(wrapperEl, headerEl, contentEl, info); + return { + wrapperEl, + contentEl, + headerEl, + labelEl, + statusTextEl, + statusEl, + info + }; +} +function updateAsyncSubagentRunning(state, agentId) { + state.info.asyncStatus = "running"; + state.info.agentId = agentId; + setAsyncWrapperStatus(state.wrapperEl, "running"); + updateAsyncLabel(state); + state.statusTextEl.setText("Running in background"); + renderAsyncContentLikeSync(state.contentEl, state.info, "running"); +} +function finalizeAsyncSubagent(state, result, isError) { + state.info.asyncStatus = isError ? "error" : "completed"; + state.info.status = isError ? "error" : "completed"; + state.info.result = result; + setAsyncWrapperStatus(state.wrapperEl, isError ? "error" : "completed"); + updateAsyncLabel(state); + state.statusTextEl.setText(isError ? "Error" : ""); + state.statusEl.className = "claudian-subagent-status"; + state.statusEl.addClass(`status-${isError ? "error" : "completed"}`); + state.statusEl.empty(); + if (isError) { + (0, import_obsidian30.setIcon)(state.statusEl, "x"); + } else { + (0, import_obsidian30.setIcon)(state.statusEl, "check"); + } + if (isError) { + state.wrapperEl.addClass("error"); + } else { + state.wrapperEl.addClass("done"); + } + renderAsyncContentLikeSync(state.contentEl, state.info, isError ? "error" : "completed"); +} +function markAsyncSubagentOrphaned(state) { + state.info.asyncStatus = "orphaned"; + state.info.status = "error"; + state.info.result = "Conversation ended before task completed"; + setAsyncWrapperStatus(state.wrapperEl, "orphaned"); + updateAsyncLabel(state); + state.statusTextEl.setText("Orphaned"); + state.statusEl.className = "claudian-subagent-status status-error"; + state.statusEl.empty(); + (0, import_obsidian30.setIcon)(state.statusEl, "alert-circle"); + state.wrapperEl.addClass("error"); + state.wrapperEl.addClass("orphaned"); + renderAsyncContentLikeSync(state.contentEl, state.info, "orphaned"); +} +function renderStoredAsyncSubagent(parentEl, subagent) { + const wrapperEl = parentEl.createDiv({ cls: "claudian-subagent-list" }); + const displayStatus = getAsyncDisplayStatus(subagent.asyncStatus); + setAsyncWrapperStatus(wrapperEl, displayStatus); + if (displayStatus === "completed") { + wrapperEl.addClass("done"); + } else if (displayStatus === "error" || displayStatus === "orphaned") { + wrapperEl.addClass("error"); + } + wrapperEl.dataset.asyncSubagentId = subagent.id; + const statusText = getAsyncStatusText(subagent.asyncStatus); + const statusAriaLabel = getAsyncStatusAriaLabel(subagent.asyncStatus); + const headerEl = wrapperEl.createDiv({ cls: "claudian-subagent-header" }); + headerEl.setAttribute("tabindex", "0"); + headerEl.setAttribute("role", "button"); + headerEl.setAttribute("aria-expanded", "false"); + headerEl.setAttribute( + "aria-label", + `Background task: ${subagent.description} - ${statusAriaLabel} - click to expand` + ); + const iconEl = headerEl.createDiv({ cls: "claudian-subagent-icon" }); + iconEl.setAttribute("aria-hidden", "true"); + (0, import_obsidian30.setIcon)(iconEl, getToolIcon(TOOL_TASK)); + const labelEl = headerEl.createDiv({ cls: "claudian-subagent-label" }); + labelEl.setText(truncateDescription(subagent.description)); + const statusTextEl = headerEl.createDiv({ cls: "claudian-subagent-status-text" }); + statusTextEl.setText(statusText); + let statusIconClass; + switch (displayStatus) { + case "error": + case "orphaned": + statusIconClass = "status-error"; + break; + case "completed": + statusIconClass = "status-completed"; + break; + default: + statusIconClass = "status-running"; + } + const statusEl = headerEl.createDiv({ cls: `claudian-subagent-status ${statusIconClass}` }); + statusEl.setAttribute("aria-label", `Status: ${statusAriaLabel}`); + switch (displayStatus) { + case "completed": + (0, import_obsidian30.setIcon)(statusEl, "check"); + break; + case "error": + (0, import_obsidian30.setIcon)(statusEl, "x"); + break; + case "orphaned": + (0, import_obsidian30.setIcon)(statusEl, "alert-circle"); + break; + } + const contentEl = wrapperEl.createDiv({ cls: "claudian-subagent-content" }); + renderAsyncContentLikeSync(contentEl, subagent, displayStatus); + const state = { isExpanded: false }; + setupCollapsible(wrapperEl, headerEl, contentEl, state); + return wrapperEl; +} + +// src/features/chat/rendering/WriteEditRenderer.ts +var import_obsidian31 = require("obsidian"); +function shortenPath2(filePath, maxLength = 40) { + if (!filePath) return "file"; + const normalized = filePath.replace(/\\/g, "/"); + if (normalized.length <= maxLength) return normalized; + const parts = normalized.split("/"); + if (parts.length <= 2) { + return "..." + normalized.slice(-maxLength + 3); + } + const filename = parts[parts.length - 1]; + const firstDir = parts[0]; + const available = maxLength - firstDir.length - filename.length - 5; + if (available < 0) { + return "..." + filename.slice(-maxLength + 3); + } + return `${firstDir}/.../${filename}`; +} +function createWriteEditBlock(parentEl, toolCall) { + const filePath = toolCall.input.file_path || "file"; + const toolName = toolCall.name; + const wrapperEl = parentEl.createDiv({ cls: "claudian-write-edit-block" }); + wrapperEl.dataset.toolId = toolCall.id; + const headerEl = wrapperEl.createDiv({ cls: "claudian-write-edit-header" }); + headerEl.setAttribute("tabindex", "0"); + headerEl.setAttribute("role", "button"); + headerEl.setAttribute("aria-label", `${toolName}: ${shortenPath2(filePath)} - click to expand`); + const iconEl = headerEl.createDiv({ cls: "claudian-write-edit-icon" }); + iconEl.setAttribute("aria-hidden", "true"); + (0, import_obsidian31.setIcon)(iconEl, getToolIcon(toolName)); + const nameEl = headerEl.createDiv({ cls: "claudian-write-edit-name" }); + nameEl.setText(toolName); + const summaryEl = headerEl.createDiv({ cls: "claudian-write-edit-summary" }); + summaryEl.setText(fileNameOnly(filePath) || "file"); + const statsEl = headerEl.createDiv({ cls: "claudian-write-edit-stats" }); + const statusEl = headerEl.createDiv({ cls: "claudian-write-edit-status status-running" }); + statusEl.setAttribute("aria-label", "Status: running"); + const contentEl = wrapperEl.createDiv({ cls: "claudian-write-edit-content" }); + const loadingRow = contentEl.createDiv({ cls: "claudian-write-edit-diff-row" }); + const loadingEl = loadingRow.createDiv({ cls: "claudian-write-edit-loading" }); + loadingEl.setText("Writing..."); + const state = { + wrapperEl, + contentEl, + headerEl, + nameEl, + summaryEl, + statsEl, + statusEl, + toolCall, + isExpanded: false + }; + setupCollapsible(wrapperEl, headerEl, contentEl, state); + return state; +} +function updateWriteEditWithDiff(state, diffData) { + state.statsEl.empty(); + state.contentEl.empty(); + const { diffLines, stats } = diffData; + state.diffLines = diffLines; + renderDiffStats(state.statsEl, stats); + const row = state.contentEl.createDiv({ cls: "claudian-write-edit-diff-row" }); + const diffEl = row.createDiv({ cls: "claudian-write-edit-diff" }); + renderDiffContent(diffEl, diffLines); +} +function finalizeWriteEditBlock(state, isError) { + state.statusEl.className = "claudian-write-edit-status"; + state.statusEl.empty(); + if (isError) { + state.statusEl.addClass("status-error"); + (0, import_obsidian31.setIcon)(state.statusEl, "x"); + state.statusEl.setAttribute("aria-label", "Status: error"); + if (!state.diffLines) { + state.contentEl.empty(); + const row = state.contentEl.createDiv({ cls: "claudian-write-edit-diff-row" }); + const errorEl = row.createDiv({ cls: "claudian-write-edit-error" }); + errorEl.setText(state.toolCall.result || "Error"); + } + } else if (!state.diffLines) { + state.contentEl.empty(); + const row = state.contentEl.createDiv({ cls: "claudian-write-edit-diff-row" }); + const doneEl = row.createDiv({ cls: "claudian-write-edit-done-text" }); + doneEl.setText("DONE"); + } + if (isError) { + state.wrapperEl.addClass("error"); + } else { + state.wrapperEl.addClass("done"); + } +} +function renderStoredWriteEdit(parentEl, toolCall) { + const filePath = toolCall.input.file_path || "file"; + const toolName = toolCall.name; + const isError = toolCall.status === "error" || toolCall.status === "blocked"; + const wrapperEl = parentEl.createDiv({ cls: "claudian-write-edit-block" }); + if (isError) { + wrapperEl.addClass("error"); + } else if (toolCall.status === "completed") { + wrapperEl.addClass("done"); + } + wrapperEl.dataset.toolId = toolCall.id; + const headerEl = wrapperEl.createDiv({ cls: "claudian-write-edit-header" }); + headerEl.setAttribute("tabindex", "0"); + headerEl.setAttribute("role", "button"); + const iconEl = headerEl.createDiv({ cls: "claudian-write-edit-icon" }); + iconEl.setAttribute("aria-hidden", "true"); + (0, import_obsidian31.setIcon)(iconEl, getToolIcon(toolName)); + const nameEl = headerEl.createDiv({ cls: "claudian-write-edit-name" }); + nameEl.setText(toolName); + const summaryEl = headerEl.createDiv({ cls: "claudian-write-edit-summary" }); + summaryEl.setText(fileNameOnly(filePath) || "file"); + const statsEl = headerEl.createDiv({ cls: "claudian-write-edit-stats" }); + if (toolCall.diffData) { + renderDiffStats(statsEl, toolCall.diffData.stats); + } + const statusEl = headerEl.createDiv({ cls: "claudian-write-edit-status" }); + if (isError) { + statusEl.addClass("status-error"); + (0, import_obsidian31.setIcon)(statusEl, "x"); + } + const contentEl = wrapperEl.createDiv({ cls: "claudian-write-edit-content" }); + const row = contentEl.createDiv({ cls: "claudian-write-edit-diff-row" }); + if (toolCall.diffData && toolCall.diffData.diffLines.length > 0) { + const diffEl = row.createDiv({ cls: "claudian-write-edit-diff" }); + renderDiffContent(diffEl, toolCall.diffData.diffLines); + } else if (isError && toolCall.result) { + const errorEl = row.createDiv({ cls: "claudian-write-edit-error" }); + errorEl.setText(toolCall.result); + } else { + const doneEl = row.createDiv({ cls: "claudian-write-edit-done-text" }); + doneEl.setText(isError ? "ERROR" : "DONE"); + } + const state = { isExpanded: false }; + setupCollapsible(wrapperEl, headerEl, contentEl, state); + return wrapperEl; +} + +// src/features/chat/controllers/StreamController.ts +var _StreamController = class _StreamController { + // agentId → spawn callId + constructor(deps) { + this.pendingTextRenderFrame = null; + this.pendingTextRenderPromise = null; + this.resolvePendingTextRender = null; + this.isTextRenderRunning = false; + this.pendingThinkingRenderFrame = null; + this.pendingThinkingRenderPromise = null; + this.resolvePendingThinkingRender = null; + this.isThinkingRenderRunning = false; + this.pendingToolOutputFrames = /* @__PURE__ */ new Map(); + this.pendingScrollFrame = null; + // Provider lifecycle agent tracking (spawn → wait/close lifecycle) + this.lifecycleSubagentStates = /* @__PURE__ */ new Map(); + // spawn callId → SubagentState + this.lifecycleAgentIdToSpawnId = /* @__PURE__ */ new Map(); + this.deps = deps; + } + getActiveProviderId() { + var _a5, _b3, _c2, _d; + return (_d = (_c2 = (_b3 = (_a5 = this.deps).getAgentService) == null ? void 0 : _b3.call(_a5)) == null ? void 0 : _c2.providerId) != null ? _d : DEFAULT_CHAT_PROVIDER_ID; + } + getSubagentLifecycleAdapter(toolName) { + return resolveSubagentLifecycleAdapter(this.getActiveProviderId(), toolName); + } + normalizeToolResultContent(content) { + return extractToolResultContent(content, { fallbackIndent: 2 }); + } + // ============================================ + // Stream Chunk Handling + // ============================================ + async handleStreamChunk(chunk, msg) { + var _a5, _b3, _c2, _d, _e2; + const { state } = this.deps; + switch (chunk.type) { + case "thinking": + this.flushPendingTools(); + if (state.currentTextEl) { + await this.finalizeCurrentTextBlock(msg); + } + await this.appendThinking(chunk.content); + break; + case "text": + this.flushPendingTools(); + if (state.currentThinkingState) { + await this.finalizeCurrentThinkingBlock(msg); + } + msg.content += chunk.content; + await this.appendText(chunk.content); + break; + case "tool_use": { + if (state.currentThinkingState) { + await this.finalizeCurrentThinkingBlock(msg); + } + await this.finalizeCurrentTextBlock(msg); + if (isSubagentToolName(chunk.name)) { + this.flushPendingTools(); + this.handleTaskToolUseViaManager(chunk, msg); + break; + } + if (chunk.name === TOOL_AGENT_OUTPUT) { + this.handleAgentOutputToolUse(chunk, msg); + break; + } + const subagentLifecycleAdapter = this.getSubagentLifecycleAdapter(chunk.name); + if (subagentLifecycleAdapter == null ? void 0 : subagentLifecycleAdapter.isSpawnTool(chunk.name)) { + this.handleProviderSubagentSpawn(chunk, msg, subagentLifecycleAdapter); + break; + } + if (subagentLifecycleAdapter == null ? void 0 : subagentLifecycleAdapter.isHiddenTool(chunk.name)) { + this.handleProviderHiddenSubagentTool(chunk, msg); + break; + } + this.handleRegularToolUse(chunk, msg); + break; + } + case "tool_result": { + await this.handleToolResult(chunk, msg); + break; + } + case "subagent_tool_use": + case "subagent_tool_result": + await this.handleSubagentChunk(chunk, msg); + break; + case "async_subagent_result": + await this.handleAsyncSubagentResult(chunk); + break; + case "tool_output": + this.handleToolOutput(chunk, msg); + break; + case "notice": + this.flushPendingTools(); + await this.appendText(` + +\u26A0\uFE0F **${chunk.level === "warning" ? "Blocked" : "Notice"}:** ${chunk.content}`); + break; + case "error": + this.flushPendingTools(); + await this.appendText(` + +\u274C **Error:** ${chunk.content}`); + break; + case "done": + this.flushPendingTools(); + break; + case "context_compacted": { + this.flushPendingTools(); + if (state.currentThinkingState) { + await this.finalizeCurrentThinkingBlock(msg); + } + await this.finalizeCurrentTextBlock(msg); + msg.contentBlocks = msg.contentBlocks || []; + msg.contentBlocks.push({ type: "context_compacted" }); + this.renderCompactBoundary(); + break; + } + case "usage": { + const currentSessionId = (_d = (_c2 = (_b3 = (_a5 = this.deps).getAgentService) == null ? void 0 : _b3.call(_a5)) == null ? void 0 : _c2.getSessionId()) != null ? _d : null; + const chunkSessionId = (_e2 = chunk.sessionId) != null ? _e2 : null; + if (chunkSessionId && currentSessionId && chunkSessionId !== currentSessionId || chunkSessionId && !currentSessionId) { + break; + } + if (this.deps.subagentManager.subagentsSpawnedThisStream > 0) { + break; + } + if (!state.ignoreUsageUpdates) { + const activeModel = this.getActiveProviderModel(); + state.usage = activeModel && !chunk.usage.model ? { ...chunk.usage, model: activeModel } : chunk.usage; + } + break; + } + default: + break; + } + this.scrollToBottom(); + } + // ============================================ + // Tool Use Handling + // ============================================ + /** + * Handles regular tool_use chunks by buffering them. + * Tools are rendered when flushPendingTools is called (on next content type or tool_result). + */ + handleRegularToolUse(chunk, msg) { + var _a5, _b3, _c2; + const { state } = this.deps; + const existingToolCall = (_a5 = msg.toolCalls) == null ? void 0 : _a5.find((tc2) => tc2.id === chunk.id); + if (existingToolCall) { + const newInput = chunk.input || {}; + if (Object.keys(newInput).length > 0) { + existingToolCall.input = { ...existingToolCall.input, ...newInput }; + if (existingToolCall.name === TOOL_TODO_WRITE) { + const todos = parseTodoInput(existingToolCall.input); + if (todos) { + this.deps.state.currentTodos = todos; + } + } + if (existingToolCall.name === TOOL_WRITE) { + this.capturePlanFilePath(existingToolCall.input); + } + const toolEl = state.toolCallElements.get(chunk.id); + if (toolEl) { + const nameEl = (_b3 = toolEl.querySelector(".claudian-tool-name")) != null ? _b3 : toolEl.querySelector(".claudian-write-edit-name"); + if (nameEl) { + nameEl.setText(getToolName(existingToolCall.name, existingToolCall.input)); + } + const summaryEl = (_c2 = toolEl.querySelector(".claudian-tool-summary")) != null ? _c2 : toolEl.querySelector(".claudian-write-edit-summary"); + if (summaryEl) { + summaryEl.setText(getToolSummary(existingToolCall.name, existingToolCall.input)); + } + } + } + return; + } + const toolCall = { + id: chunk.id, + name: chunk.name, + input: chunk.input, + status: "running", + isExpanded: false + }; + msg.toolCalls = msg.toolCalls || []; + msg.toolCalls.push(toolCall); + msg.contentBlocks = msg.contentBlocks || []; + msg.contentBlocks.push({ type: "tool_use", toolId: chunk.id }); + if (chunk.name === TOOL_TODO_WRITE) { + const todos = parseTodoInput(chunk.input); + if (todos) { + this.deps.state.currentTodos = todos; + } + } + if (chunk.name === TOOL_WRITE) { + this.capturePlanFilePath(chunk.input); + } + if (state.currentContentEl) { + state.pendingTools.set(chunk.id, { + toolCall, + parentEl: state.currentContentEl + }); + this.showThinkingIndicator(); + } + } + getActiveProviderModel() { + var _a5, _b3, _c2; + const providerId = (_c2 = (_b3 = (_a5 = this.deps).getAgentService) == null ? void 0 : _b3.call(_a5)) == null ? void 0 : _c2.providerId; + if (!providerId) { + return void 0; + } + const settings11 = ProviderSettingsCoordinator.getProviderSettingsSnapshot( + this.deps.plugin.settings, + providerId + ); + return typeof settings11.model === "string" ? settings11.model : void 0; + } + shouldDeferMathRendering() { + return this.deps.plugin.settings.deferMathRenderingDuringStreaming !== false; + } + getStreamingRenderOptions(content) { + return this.shouldDeferMathRendering() && hasStreamingMathDelimiters(content) ? { deferMath: true } : void 0; + } + capturePlanFilePath(input) { + var _a5, _b3, _c2; + const filePath = input.file_path; + if (!filePath) return; + const planPathPrefix = (_c2 = (_b3 = (_a5 = this.deps).getAgentService) == null ? void 0 : _b3.call(_a5)) == null ? void 0 : _c2.getCapabilities().planPathPrefix; + if (planPathPrefix && filePath.replace(/\\/g, "/").includes(planPathPrefix)) { + this.deps.state.planFilePath = filePath; + } + } + /** + * Flushes all pending tool calls by rendering them. + * Called when a different content type arrives or stream ends. + */ + flushPendingTools() { + const { state } = this.deps; + if (state.pendingTools.size === 0) { + return; + } + for (const toolId of state.pendingTools.keys()) { + this.renderPendingTool(toolId); + } + state.pendingTools.clear(); + } + /** + * Renders a single pending tool call and moves it from pending to rendered state. + */ + renderPendingTool(toolId) { + const { state } = this.deps; + const pending = state.pendingTools.get(toolId); + if (!pending) return; + const { toolCall, parentEl } = pending; + if (!parentEl) return; + if (isWriteEditTool(toolCall.name)) { + const writeEditState = createWriteEditBlock(parentEl, toolCall); + state.writeEditStates.set(toolId, writeEditState); + state.toolCallElements.set(toolId, writeEditState.wrapperEl); + } else { + renderToolCall(parentEl, toolCall, state.toolCallElements); + } + state.pendingTools.delete(toolId); + } + handleToolOutput(chunk, msg) { + var _a5, _b3; + const { state } = this.deps; + if (state.pendingTools.has(chunk.id)) { + this.renderPendingTool(chunk.id); + } + const existingToolCall = (_a5 = msg.toolCalls) == null ? void 0 : _a5.find((tc2) => tc2.id === chunk.id); + if (!existingToolCall) { + return; + } + existingToolCall.result = ((_b3 = existingToolCall.result) != null ? _b3 : "") + chunk.content; + this.scheduleToolOutputRender(chunk.id, existingToolCall); + this.showThinkingIndicator(); + } + // ============================================ + // Provider lifecycle subagents (spawn → wait/close) + // ============================================ + handleProviderSubagentSpawn(chunk, msg, adapter) { + const { state } = this.deps; + const toolCall = { + id: chunk.id, + name: chunk.name, + input: chunk.input, + status: "running", + isExpanded: false + }; + msg.toolCalls = msg.toolCalls || []; + msg.toolCalls.push(toolCall); + msg.contentBlocks = msg.contentBlocks || []; + msg.contentBlocks.push({ type: "tool_use", toolId: chunk.id }); + if (state.currentContentEl) { + this.flushPendingTools(); + const subagentInfo = adapter.buildSubagentInfo(toolCall, msg.toolCalls); + const subagentState = createSubagentBlock(state.currentContentEl, chunk.id, { + description: subagentInfo.description, + prompt: subagentInfo.prompt + }); + this.lifecycleSubagentStates.set(chunk.id, subagentState); + } + } + handleProviderHiddenSubagentTool(chunk, msg) { + const toolCall = { + id: chunk.id, + name: chunk.name, + input: chunk.input, + status: "running", + isExpanded: false + }; + msg.toolCalls = msg.toolCalls || []; + msg.toolCalls.push(toolCall); + } + /** + * Handles tool_result for provider lifecycle subagent tools. + * Returns true if the result was consumed (caller should return early). + */ + handleProviderSubagentResult(chunk, msg) { + var _a5, _b3, _c2, _d; + const existingToolCall = (_a5 = msg.toolCalls) == null ? void 0 : _a5.find((tc2) => tc2.id === chunk.id); + if (!existingToolCall) return false; + const normalizedContent = this.normalizeToolResultContent(chunk.content); + const adapter = this.getSubagentLifecycleAdapter(existingToolCall.name); + if (!adapter) return false; + if (adapter.isSpawnTool(existingToolCall.name)) { + existingToolCall.status = chunk.isError ? "error" : "completed"; + existingToolCall.result = normalizedContent; + const spawnResult = adapter.extractSpawnResult(normalizedContent); + if (spawnResult.agentId) { + this.lifecycleAgentIdToSpawnId.set(spawnResult.agentId, chunk.id); + } + const subagentInfo = adapter.buildSubagentInfo(existingToolCall, (_b3 = msg.toolCalls) != null ? _b3 : []); + const subagentState = this.lifecycleSubagentStates.get(chunk.id); + if (subagentState) { + subagentState.info.description = subagentInfo.description; + subagentState.info.prompt = subagentInfo.prompt; + subagentState.labelEl.setText( + subagentInfo.description.length > 40 ? subagentInfo.description.substring(0, 40) + "..." : subagentInfo.description + ); + } + if (chunk.isError) { + if (subagentState) { + finalizeSubagentBlock(subagentState, normalizedContent || "Error", true); + } + } + return true; + } + if (adapter.isWaitTool(existingToolCall.name)) { + existingToolCall.status = chunk.isError ? "error" : "completed"; + existingToolCall.result = normalizedContent; + for (const spawnId of adapter.resolveSpawnToolIds( + existingToolCall, + this.lifecycleAgentIdToSpawnId + )) { + const spawnToolCall = (_c2 = msg.toolCalls) == null ? void 0 : _c2.find((tc2) => tc2.id === spawnId); + const subagentState = this.lifecycleSubagentStates.get(spawnId); + if (!spawnToolCall || !subagentState) continue; + const subagentInfo = adapter.buildSubagentInfo(spawnToolCall, (_d = msg.toolCalls) != null ? _d : []); + subagentState.info.description = subagentInfo.description; + subagentState.info.prompt = subagentInfo.prompt; + if (subagentInfo.status === "completed" || subagentInfo.status === "error") { + finalizeSubagentBlock( + subagentState, + subagentInfo.result || (subagentInfo.status === "error" ? "Error" : "DONE"), + subagentInfo.status === "error" + ); + } + } + return true; + } + if (adapter.isCloseTool(existingToolCall.name)) { + existingToolCall.status = chunk.isError ? "error" : "completed"; + existingToolCall.result = normalizedContent; + return true; + } + return false; + } + async handleToolResult(chunk, msg) { + var _a5, _b3; + const { state, subagentManager } = this.deps; + const normalizedContent = this.normalizeToolResultContent(chunk.content); + if (subagentManager.hasPendingTask(chunk.id)) { + this.renderPendingTaskFromTaskResultViaManager(chunk, msg); + } + const subagentState = subagentManager.getSyncSubagent(chunk.id); + if (subagentState) { + this.finalizeSubagent(chunk, msg); + return; + } + if (this.handleAsyncTaskToolResult(chunk)) { + this.showThinkingIndicator(); + return; + } + if (await this.handleAgentOutputToolResult(chunk)) { + this.showThinkingIndicator(); + return; + } + if (this.handleProviderSubagentResult(chunk, msg)) { + this.showThinkingIndicator(); + return; + } + if (state.pendingTools.has(chunk.id)) { + this.renderPendingTool(chunk.id); + } + const existingToolCall = (_a5 = msg.toolCalls) == null ? void 0 : _a5.find((tc2) => tc2.id === chunk.id); + const isBlocked = isBlockedToolResult(normalizedContent, chunk.isError); + if (existingToolCall) { + if (chunk.isError) { + existingToolCall.status = "error"; + } else if (!skipsBlockedDetection(existingToolCall.name) && isBlocked) { + existingToolCall.status = "blocked"; + } else { + existingToolCall.status = "completed"; + } + existingToolCall.result = normalizedContent; + if (existingToolCall.name === TOOL_ASK_USER_QUESTION) { + const answers = (_b3 = extractResolvedAnswers(chunk.toolUseResult)) != null ? _b3 : extractResolvedAnswersFromResultText(normalizedContent); + if (answers) existingToolCall.resolvedAnswers = answers; + } + const writeEditState = state.writeEditStates.get(chunk.id); + if (writeEditState && isWriteEditTool(existingToolCall.name)) { + if (!chunk.isError && !isBlocked) { + const diffData = extractDiffData(chunk.toolUseResult, existingToolCall); + if (diffData) { + existingToolCall.diffData = diffData; + updateWriteEditWithDiff(writeEditState, diffData); + } + } + finalizeWriteEditBlock(writeEditState, chunk.isError || isBlocked); + } else { + this.cancelPendingToolOutputRender(chunk.id); + updateToolCallResult(chunk.id, existingToolCall, state.toolCallElements); + } + if (!chunk.isError && !isBlocked && isEditTool(existingToolCall.name)) { + this.notifyVaultFileChange(existingToolCall.input); + } + if (!chunk.isError && !isBlocked && existingToolCall.name === TOOL_APPLY_PATCH) { + this.notifyApplyPatchFileChanges(existingToolCall.input); + } + } + this.showThinkingIndicator(); + } + // ============================================ + // Text Block Management + // ============================================ + async appendText(text) { + const { state } = this.deps; + if (!state.currentContentEl) return; + this.hideThinkingIndicator(); + if (!state.currentTextEl) { + state.currentTextEl = state.currentContentEl.createDiv({ cls: "claudian-text-block" }); + state.currentTextContent = ""; + } + state.currentTextContent += text; + void this.scheduleCurrentTextRender(); + } + async finalizeCurrentTextBlock(msg) { + const { state, renderer } = this.deps; + await this.flushPendingTextRender(); + if (msg && state.currentTextContent) { + if (state.currentTextEl && this.shouldDeferMathRendering() && hasStreamingMathDelimiters(state.currentTextContent)) { + await renderer.renderContent(state.currentTextEl, state.currentTextContent); + } + msg.contentBlocks = msg.contentBlocks || []; + msg.contentBlocks.push({ type: "text", content: state.currentTextContent }); + if (state.currentTextEl) { + renderer.addTextCopyButton(state.currentTextEl, state.currentTextContent); + } + } + state.currentTextEl = null; + state.currentTextContent = ""; + } + scheduleCurrentTextRender() { + if (!this.pendingTextRenderPromise) { + this.pendingTextRenderPromise = new Promise((resolve8) => { + this.resolvePendingTextRender = resolve8; + }); + } + if (this.pendingTextRenderFrame === null && !this.isTextRenderRunning) { + this.pendingTextRenderFrame = scheduleAnimationFrame(() => { + this.pendingTextRenderFrame = null; + void this.renderPendingText(); + }, this.getStreamingRenderWindow()); + } + return this.pendingTextRenderPromise; + } + async flushPendingTextRender() { + const pendingRender = this.pendingTextRenderPromise; + if (!pendingRender) return; + if (this.pendingTextRenderFrame !== null) { + cancelScheduledAnimationFrame(this.pendingTextRenderFrame); + this.pendingTextRenderFrame = null; + void this.renderPendingText(); + } + await pendingRender; + } + async renderPendingText() { + if (this.isTextRenderRunning) return; + this.isTextRenderRunning = true; + const { state, renderer } = this.deps; + const textEl = state.currentTextEl; + const content = state.currentTextContent; + try { + if (textEl) { + const options = this.getStreamingRenderOptions(content); + if (options) { + await renderer.renderContent(textEl, content, options); + } else { + await renderer.renderContent(textEl, content); + } + this.scrollToBottom(); + } + } catch (e2) { + } finally { + this.isTextRenderRunning = false; + } + if (state.currentTextEl === textEl && state.currentTextContent !== content) { + this.pendingTextRenderFrame = scheduleAnimationFrame(() => { + this.pendingTextRenderFrame = null; + void this.renderPendingText(); + }, this.getStreamingRenderWindow()); + return; + } + const resolve8 = this.resolvePendingTextRender; + this.pendingTextRenderPromise = null; + this.resolvePendingTextRender = null; + resolve8 == null ? void 0 : resolve8(); + } + cancelPendingTextRender() { + if (this.pendingTextRenderFrame !== null) { + cancelScheduledAnimationFrame(this.pendingTextRenderFrame); + this.pendingTextRenderFrame = null; + } + const resolve8 = this.resolvePendingTextRender; + this.pendingTextRenderPromise = null; + this.resolvePendingTextRender = null; + resolve8 == null ? void 0 : resolve8(); + } + scheduleToolOutputRender(toolId, toolCall) { + if (this.pendingToolOutputFrames.has(toolId)) return; + const frame = scheduleAnimationFrame(() => { + this.pendingToolOutputFrames.delete(toolId); + updateToolCallResult(toolId, toolCall, this.deps.state.toolCallElements); + this.scrollToBottom(); + }, this.getMessagesWindow()); + this.pendingToolOutputFrames.set(toolId, frame); + } + cancelPendingToolOutputRender(toolId) { + const frame = this.pendingToolOutputFrames.get(toolId); + if (!frame) return; + cancelScheduledAnimationFrame(frame); + this.pendingToolOutputFrames.delete(toolId); + } + cancelPendingToolOutputRenders() { + for (const frame of this.pendingToolOutputFrames.values()) { + cancelScheduledAnimationFrame(frame); + } + this.pendingToolOutputFrames.clear(); + } + // ============================================ + // Thinking Block Management + // ============================================ + async appendThinking(content) { + const { state, renderer } = this.deps; + if (!state.currentContentEl) return; + this.hideThinkingIndicator(); + if (!state.currentThinkingState) { + state.currentThinkingState = createThinkingBlock( + state.currentContentEl, + (el2, md) => renderer.renderContent(el2, md) + ); + } + state.currentThinkingState.content += content; + void this.scheduleCurrentThinkingRender(); + } + async finalizeCurrentThinkingBlock(msg) { + const { state, renderer } = this.deps; + if (!state.currentThinkingState) return; + await this.flushPendingThinkingRender(); + const thinkingState = state.currentThinkingState; + if (this.getStreamingRenderOptions(thinkingState.content)) { + await renderer.renderContent(thinkingState.contentEl, thinkingState.content); + } + const durationSeconds = finalizeThinkingBlock(thinkingState); + if (msg && thinkingState.content) { + msg.contentBlocks = msg.contentBlocks || []; + msg.contentBlocks.push({ + type: "thinking", + content: thinkingState.content, + durationSeconds + }); + } + state.currentThinkingState = null; + } + scheduleCurrentThinkingRender() { + if (!this.pendingThinkingRenderPromise) { + this.pendingThinkingRenderPromise = new Promise((resolve8) => { + this.resolvePendingThinkingRender = resolve8; + }); + } + if (this.pendingThinkingRenderFrame === null && !this.isThinkingRenderRunning) { + this.pendingThinkingRenderFrame = scheduleAnimationFrame(() => { + this.pendingThinkingRenderFrame = null; + void this.renderPendingThinking(); + }, this.getThinkingRenderWindow()); + } + return this.pendingThinkingRenderPromise; + } + async flushPendingThinkingRender() { + const pendingRender = this.pendingThinkingRenderPromise; + if (!pendingRender) return; + if (this.pendingThinkingRenderFrame !== null) { + cancelScheduledAnimationFrame(this.pendingThinkingRenderFrame); + this.pendingThinkingRenderFrame = null; + void this.renderPendingThinking(); + } + await pendingRender; + } + async renderPendingThinking() { + var _a5; + if (this.isThinkingRenderRunning) return; + this.isThinkingRenderRunning = true; + const { state, renderer } = this.deps; + const thinkingState = state.currentThinkingState; + const content = (_a5 = thinkingState == null ? void 0 : thinkingState.content) != null ? _a5 : ""; + try { + if (thinkingState) { + const options = this.getStreamingRenderOptions(content); + if (options) { + await renderer.renderContent(thinkingState.contentEl, content, options); + } else { + await renderer.renderContent(thinkingState.contentEl, content); + } + this.scrollToBottom(); + } + } catch (e2) { + } finally { + this.isThinkingRenderRunning = false; + } + if (state.currentThinkingState === thinkingState && thinkingState && thinkingState.content !== content) { + this.pendingThinkingRenderFrame = scheduleAnimationFrame(() => { + this.pendingThinkingRenderFrame = null; + void this.renderPendingThinking(); + }, this.getThinkingRenderWindow()); + return; + } + const resolve8 = this.resolvePendingThinkingRender; + this.pendingThinkingRenderPromise = null; + this.resolvePendingThinkingRender = null; + resolve8 == null ? void 0 : resolve8(); + } + cancelPendingThinkingRender() { + if (this.pendingThinkingRenderFrame !== null) { + cancelScheduledAnimationFrame(this.pendingThinkingRenderFrame); + this.pendingThinkingRenderFrame = null; + } + const resolve8 = this.resolvePendingThinkingRender; + this.pendingThinkingRenderPromise = null; + this.resolvePendingThinkingRender = null; + resolve8 == null ? void 0 : resolve8(); + } + // ============================================ + // Subagent Tool Handling (via SubagentManager) + // ============================================ + /** Delegates Agent tool_use to SubagentManager and updates message based on result. */ + handleTaskToolUseViaManager(chunk, msg) { + const { state, subagentManager } = this.deps; + this.ensureTaskToolCall(msg, chunk.id, chunk.input); + const result = subagentManager.handleTaskToolUse(chunk.id, chunk.input, state.currentContentEl); + switch (result.action) { + case "created_sync": + this.recordSubagentInMessage(msg, result.subagentState.info, chunk.id); + this.showThinkingIndicator(); + break; + case "created_async": + this.recordSubagentInMessage(msg, result.info, chunk.id, "async"); + this.showThinkingIndicator(); + break; + case "buffered": + this.showThinkingIndicator(); + break; + case "label_updated": + break; + } + } + /** Renders a pending Agent tool call via SubagentManager and updates message. */ + renderPendingTaskViaManager(toolId, msg) { + const result = this.deps.subagentManager.renderPendingTask(toolId, this.deps.state.currentContentEl); + if (!result) return; + if (result.mode === "sync") { + this.recordSubagentInMessage(msg, result.subagentState.info, toolId); + } else { + this.recordSubagentInMessage(msg, result.info, toolId, "async"); + } + } + /** Resolves a pending Agent tool call when its own tool_result arrives. */ + renderPendingTaskFromTaskResultViaManager(chunk, msg) { + const result = this.deps.subagentManager.renderPendingTaskFromTaskResult( + chunk.id, + chunk.content, + chunk.isError || false, + this.deps.state.currentContentEl, + chunk.toolUseResult + ); + if (!result) return; + if (result.mode === "sync") { + this.recordSubagentInMessage(msg, result.subagentState.info, chunk.id); + } else { + this.recordSubagentInMessage(msg, result.info, chunk.id, "async"); + } + } + recordSubagentInMessage(msg, info, toolId, mode) { + const taskToolCall = this.ensureTaskToolCall(msg, toolId); + this.applySubagentToTaskToolCall(taskToolCall, info); + msg.contentBlocks = msg.contentBlocks || []; + const existingBlock = msg.contentBlocks.find( + (block) => block.type === "subagent" && block.subagentId === toolId + ); + if (existingBlock && mode && existingBlock.type === "subagent") { + existingBlock.mode = mode; + } else if (!existingBlock) { + msg.contentBlocks.push( + mode ? { type: "subagent", subagentId: toolId, mode } : { type: "subagent", subagentId: toolId } + ); + } + } + async handleSubagentChunk(chunk, msg) { + const parentToolUseId = chunk.subagentId; + const { subagentManager } = this.deps; + if (subagentManager.hasPendingTask(parentToolUseId)) { + this.renderPendingTaskViaManager(parentToolUseId, msg); + } + const subagentState = subagentManager.getSyncSubagent(parentToolUseId); + if (!subagentState) { + return; + } + switch (chunk.type) { + case "subagent_tool_use": { + const toolCall = { + id: chunk.id, + name: chunk.name, + input: chunk.input, + status: "running", + isExpanded: false + }; + subagentManager.addSyncToolCall(parentToolUseId, toolCall); + this.showThinkingIndicator(); + break; + } + case "subagent_tool_result": { + const toolCall = subagentState.info.toolCalls.find((tc2) => tc2.id === chunk.id); + if (toolCall) { + const normalizedContent = this.normalizeToolResultContent(chunk.content); + const isBlocked = isBlockedToolResult(normalizedContent, chunk.isError); + toolCall.status = isBlocked ? "blocked" : chunk.isError ? "error" : "completed"; + toolCall.result = normalizedContent; + subagentManager.updateSyncToolResult(parentToolUseId, chunk.id, toolCall); + } + break; + } + default: + break; + } + } + /** Finalizes a sync subagent when its Agent tool_result is received. */ + finalizeSubagent(chunk, msg) { + var _a5; + const isError = chunk.isError || false; + const normalizedContent = this.normalizeToolResultContent(chunk.content); + const finalized = this.deps.subagentManager.finalizeSyncSubagent( + chunk.id, + chunk.content, + isError, + chunk.toolUseResult + ); + const extractedResult = (_a5 = finalized == null ? void 0 : finalized.result) != null ? _a5 : normalizedContent; + const taskToolCall = this.ensureTaskToolCall(msg, chunk.id); + taskToolCall.status = isError ? "error" : "completed"; + taskToolCall.result = extractedResult; + if (taskToolCall.subagent) { + taskToolCall.subagent.status = isError ? "error" : "completed"; + taskToolCall.subagent.result = extractedResult; + } + if (finalized) { + this.applySubagentToTaskToolCall(taskToolCall, finalized); + } + this.showThinkingIndicator(); + } + // ============================================ + // Async Subagent Handling + // ============================================ + /** Handles TaskOutput tool_use (invisible, links to async subagent). */ + handleAgentOutputToolUse(chunk, _msg) { + const toolCall = { + id: chunk.id, + name: chunk.name, + input: chunk.input, + status: "running", + isExpanded: false + }; + this.deps.subagentManager.handleAgentOutputToolUse(toolCall); + this.showThinkingIndicator(); + } + handleAsyncTaskToolResult(chunk) { + const { subagentManager } = this.deps; + if (!subagentManager.isPendingAsyncTask(chunk.id)) { + return false; + } + subagentManager.handleTaskToolResult(chunk.id, chunk.content, chunk.isError, chunk.toolUseResult); + return true; + } + /** Handles TaskOutput result to finalize async subagent. */ + async handleAgentOutputToolResult(chunk) { + const { subagentManager } = this.deps; + const isLinked = subagentManager.isLinkedAgentOutputTool(chunk.id); + const handled = subagentManager.handleAgentOutputToolResult( + chunk.id, + chunk.content, + chunk.isError || false, + chunk.toolUseResult + ); + await this.hydrateAsyncSubagentToolCalls(handled); + return isLinked || handled !== void 0; + } + async handleAsyncSubagentResult(chunk) { + const handled = this.deps.subagentManager.handleAsyncSubagentResult( + chunk.agentId, + chunk.status, + chunk.result + ); + await this.hydrateAsyncSubagentToolCalls(handled); + if (handled) { + this.showThinkingIndicator(); + } + } + async hydrateAsyncSubagentToolCalls(subagent) { + var _a5, _b3, _c2; + if (!subagent) return; + if (subagent.mode !== "async") return; + if (!subagent.agentId) return; + const asyncStatus = (_a5 = subagent.asyncStatus) != null ? _a5 : subagent.status; + if (asyncStatus !== "completed" && asyncStatus !== "error") return; + const runtime = (_c2 = (_b3 = this.deps).getAgentService) == null ? void 0 : _c2.call(_b3); + if (!runtime) return; + const { hasHydrated, finalResultHydrated } = await this.tryHydrateAsyncSubagent( + subagent, + runtime, + true + ); + if (hasHydrated) { + this.deps.subagentManager.refreshAsyncSubagent(subagent); + } + if (!finalResultHydrated) { + this.scheduleAsyncSubagentResultRetry(subagent, runtime, 0); + } + } + async tryHydrateAsyncSubagent(subagent, runtime, hydrateToolCalls) { + var _a5, _b3, _c2, _d, _e2; + let hasHydrated = false; + let finalResultHydrated = false; + if (hydrateToolCalls && !((_a5 = subagent.toolCalls) == null ? void 0 : _a5.length)) { + const recoveredToolCalls = (_c2 = await ((_b3 = runtime.loadSubagentToolCalls) == null ? void 0 : _b3.call( + runtime, + subagent.agentId || "" + ))) != null ? _c2 : []; + if (recoveredToolCalls.length > 0) { + subagent.toolCalls = recoveredToolCalls.map((toolCall) => ({ + ...toolCall, + input: { ...toolCall.input } + })); + hasHydrated = true; + } + } + const recoveredFinalResult = (_e2 = await ((_d = runtime.loadSubagentFinalResult) == null ? void 0 : _d.call( + runtime, + subagent.agentId || "" + ))) != null ? _e2 : null; + if (recoveredFinalResult && recoveredFinalResult.trim().length > 0) { + finalResultHydrated = true; + if (recoveredFinalResult !== subagent.result) { + subagent.result = recoveredFinalResult; + hasHydrated = true; + } + } + return { hasHydrated, finalResultHydrated }; + } + scheduleAsyncSubagentResultRetry(subagent, runtime, attempt) { + if (!subagent.agentId) return; + if (attempt >= _StreamController.ASYNC_SUBAGENT_RESULT_RETRY_DELAYS_MS.length) return; + const delay = _StreamController.ASYNC_SUBAGENT_RESULT_RETRY_DELAYS_MS[attempt]; + window.setTimeout(() => { + void this.retryAsyncSubagentResult(subagent, runtime, attempt); + }, delay); + } + async retryAsyncSubagentResult(subagent, runtime, attempt) { + var _a5; + if (!subagent.agentId) return; + const asyncStatus = (_a5 = subagent.asyncStatus) != null ? _a5 : subagent.status; + if (asyncStatus !== "completed" && asyncStatus !== "error") return; + const { hasHydrated, finalResultHydrated } = await this.tryHydrateAsyncSubagent( + subagent, + runtime, + false + ); + if (hasHydrated) { + this.deps.subagentManager.refreshAsyncSubagent(subagent); + } + if (!finalResultHydrated) { + this.scheduleAsyncSubagentResultRetry(subagent, runtime, attempt + 1); + } + } + /** Callback from SubagentManager when async state changes. Updates messages only (DOM handled by manager). */ + onAsyncSubagentStateChange(subagent) { + this.updateSubagentInMessages(subagent); + this.scrollToBottom(); + } + updateSubagentInMessages(subagent) { + const { state } = this.deps; + for (let i = state.messages.length - 1; i >= 0; i--) { + const msg = state.messages[i]; + if (msg.role !== "assistant") continue; + if (this.linkTaskToolCallToSubagent(msg, subagent)) { + return; + } + } + } + ensureTaskToolCall(msg, toolId, input) { + msg.toolCalls = msg.toolCalls || []; + const existing = msg.toolCalls.find( + (tc2) => tc2.id === toolId && isSubagentToolName(tc2.name) + ); + if (existing) { + if (input && Object.keys(input).length > 0) { + existing.input = { ...existing.input, ...input }; + } + return existing; + } + const taskToolCall = { + id: toolId, + name: TOOL_TASK, + input: input ? { ...input } : {}, + status: "running", + isExpanded: false + }; + msg.toolCalls.push(taskToolCall); + return taskToolCall; + } + applySubagentToTaskToolCall(taskToolCall, subagent) { + taskToolCall.subagent = subagent; + if (subagent.status === "completed") taskToolCall.status = "completed"; + else if (subagent.status === "error") taskToolCall.status = "error"; + else taskToolCall.status = "running"; + if (subagent.result !== void 0) { + taskToolCall.result = subagent.result; + } + } + linkTaskToolCallToSubagent(msg, subagent) { + var _a5; + const taskToolCall = (_a5 = msg.toolCalls) == null ? void 0 : _a5.find( + (tc2) => tc2.id === subagent.id && isSubagentToolName(tc2.name) + ); + if (!taskToolCall) return false; + this.applySubagentToTaskToolCall(taskToolCall, subagent); + return true; + } + /** + * Schedules showing the thinking indicator after a delay. + * If content arrives before the delay, the indicator won't show. + * This prevents the indicator from appearing during active streaming. + * Note: Flavor text is hidden when model thinking block is active (thinking takes priority). + */ + showThinkingIndicator(overrideText, overrideCls) { + var _a5, _b3; + const { state } = this.deps; + if (!state.currentContentEl) return; + if (state.thinkingIndicatorTimeout) { + const timerWindow2 = (_a5 = state.currentContentEl.ownerDocument.defaultView) != null ? _a5 : window; + state.clearThinkingIndicatorTimeout(timerWindow2); + } + if (state.currentThinkingState) { + return; + } + if (state.thinkingEl) { + state.currentContentEl.appendChild(state.thinkingEl); + this.deps.updateQueueIndicator(); + return; + } + const timerWindow = (_b3 = state.currentContentEl.ownerDocument.defaultView) != null ? _b3 : window; + state.setThinkingIndicatorTimeout(timerWindow.setTimeout(() => { + var _a6; + state.setThinkingIndicatorTimeout(null, null); + if (!state.currentContentEl || state.thinkingEl || state.currentThinkingState) return; + const cls = overrideCls ? `claudian-thinking ${overrideCls}` : "claudian-thinking"; + state.thinkingEl = state.currentContentEl.createDiv({ cls }); + const text = overrideText || FLAVOR_TEXTS[Math.floor(Math.random() * FLAVOR_TEXTS.length)]; + state.thinkingEl.createSpan({ text }); + const timerSpan = state.thinkingEl.createSpan({ cls: "claudian-thinking-hint" }); + const updateTimer = () => { + if (!state.responseStartTime) return; + if (!timerSpan.isConnected) { + if (state.flavorTimerInterval) { + state.clearFlavorTimerInterval(); + } + return; + } + const elapsedSeconds = Math.floor((performance.now() - state.responseStartTime) / 1e3); + timerSpan.setText(` (esc to interrupt \xB7 ${formatDurationMmSs(elapsedSeconds)})`); + }; + updateTimer(); + if (state.flavorTimerInterval) { + state.clearFlavorTimerInterval(); + } + const thinkingWindow = (_a6 = state.currentContentEl.ownerDocument.defaultView) != null ? _a6 : timerWindow; + state.setFlavorTimerInterval(thinkingWindow.setInterval(updateTimer, 1e3), thinkingWindow); + }, _StreamController.THINKING_INDICATOR_DELAY), timerWindow); + } + /** Hides the thinking indicator and cancels any pending show timeout. */ + hideThinkingIndicator() { + var _a5; + const { state } = this.deps; + if (state.thinkingIndicatorTimeout) { + const activeWindow = (_a5 = this.deps.getMessagesEl().ownerDocument.defaultView) != null ? _a5 : window; + state.clearThinkingIndicatorTimeout(activeWindow); + } + state.clearFlavorTimerInterval(); + if (state.thinkingEl) { + state.thinkingEl.remove(); + state.thinkingEl = null; + } + } + // ============================================ + // Compact Boundary + // ============================================ + renderCompactBoundary() { + const { state } = this.deps; + if (!state.currentContentEl) return; + this.hideThinkingIndicator(); + const el2 = state.currentContentEl.createDiv({ cls: "claudian-compact-boundary" }); + el2.createSpan({ cls: "claudian-compact-boundary-label", text: "Conversation compacted" }); + } + // ============================================ + // Utilities + // ============================================ + /** + * Nudges Obsidian's vault after a Write/Edit/NotebookEdit so the file tree + * refreshes. Direct `fs` writes bypass the Vault API, and macOS + iCloud + * FSWatcher often misses the event. + */ + notifyVaultFileChange(input) { + var _a5; + const rawPathValue = (_a5 = input.file_path) != null ? _a5 : input.notebook_path; + const rawPath = typeof rawPathValue === "string" ? rawPathValue : void 0; + const vaultPath = getVaultPath(this.deps.plugin.app); + const relativePath = normalizePathForVault(rawPath, vaultPath); + if (!relativePath || relativePath.startsWith("/")) return; + window.setTimeout(() => { + const { vault } = this.deps.plugin.app; + const file2 = vault.getAbstractFileByPath(relativePath); + if (file2 instanceof import_obsidian32.TFile) { + vault.trigger("modify", file2); + } else { + const parentDir = relativePath.includes("/") ? relativePath.substring(0, relativePath.lastIndexOf("/")) : ""; + vault.adapter.list(parentDir).catch(() => { + }); + } + }, 200); + } + /** Refreshes vault for each file path in an apply_patch changes array or patch text. */ + notifyApplyPatchFileChanges(input) { + var _a5; + const notified = /* @__PURE__ */ new Set(); + const changes = input.changes; + if (Array.isArray(changes)) { + for (const change of changes) { + if (change && typeof change === "object" && !Array.isArray(change)) { + const changeRecord = change; + if (typeof changeRecord.path === "string") { + notified.add(changeRecord.path); + this.notifyVaultFileChange({ file_path: changeRecord.path }); + } + } + } + } + const patchText = typeof input.patch === "string" ? input.patch : ""; + if (patchText) { + for (const match of patchText.matchAll(/^\*\*\* (?:Add|Update|Delete) File: (.+)$/gm)) { + const filePath = (_a5 = match[1]) == null ? void 0 : _a5.trim(); + if (filePath && !notified.has(filePath)) { + this.notifyVaultFileChange({ file_path: filePath }); + } + } + } + } + /** Scrolls messages to bottom if auto-scroll is enabled. */ + scrollToBottom() { + if (this.pendingScrollFrame !== null) return; + this.pendingScrollFrame = scheduleAnimationFrame(() => { + this.pendingScrollFrame = null; + this.applyScrollToBottom(); + }, this.getMessagesWindow()); + } + applyScrollToBottom() { + var _a5; + const { state, plugin } = this.deps; + if (!((_a5 = plugin.settings.enableAutoScroll) != null ? _a5 : true)) return; + if (!state.autoScrollEnabled) return; + const messagesEl = this.deps.getMessagesEl(); + messagesEl.scrollTop = messagesEl.scrollHeight; + } + cancelPendingScroll() { + if (this.pendingScrollFrame === null) return; + cancelScheduledAnimationFrame(this.pendingScrollFrame); + this.pendingScrollFrame = null; + } + getMessagesWindow() { + var _a5; + return (_a5 = this.deps.getMessagesEl().ownerDocument.defaultView) != null ? _a5 : null; + } + getStreamingRenderWindow() { + var _a5, _b3, _c2, _d, _e2, _f2; + const { state } = this.deps; + return (_f2 = (_e2 = (_b3 = (_a5 = state.currentTextEl) == null ? void 0 : _a5.ownerDocument) == null ? void 0 : _b3.defaultView) != null ? _e2 : (_d = (_c2 = state.currentContentEl) == null ? void 0 : _c2.ownerDocument) == null ? void 0 : _d.defaultView) != null ? _f2 : this.getMessagesWindow(); + } + getThinkingRenderWindow() { + var _a5, _b3, _c2, _d, _e2, _f2; + const { state } = this.deps; + return (_f2 = (_e2 = (_b3 = (_a5 = state.currentThinkingState) == null ? void 0 : _a5.contentEl.ownerDocument) == null ? void 0 : _b3.defaultView) != null ? _e2 : (_d = (_c2 = state.currentContentEl) == null ? void 0 : _c2.ownerDocument) == null ? void 0 : _d.defaultView) != null ? _f2 : this.getMessagesWindow(); + } + resetStreamingState() { + const { state } = this.deps; + this.cancelPendingTextRender(); + this.cancelPendingThinkingRender(); + this.cancelPendingToolOutputRenders(); + this.cancelPendingScroll(); + this.hideThinkingIndicator(); + state.currentContentEl = null; + state.currentTextEl = null; + state.currentTextContent = ""; + state.currentThinkingState = null; + this.deps.subagentManager.resetStreamingState(); + state.pendingTools.clear(); + state.responseStartTime = null; + } +}; +_StreamController.ASYNC_SUBAGENT_RESULT_RETRY_DELAYS_MS = [200, 600, 1500]; +// ============================================ +// Thinking Indicator +// ============================================ +/** Debounce delay before showing thinking indicator (ms). */ +_StreamController.THINKING_INDICATOR_DELAY = 400; +var StreamController = _StreamController; + +// src/features/chat/rendering/MessageRenderer.ts +var import_obsidian33 = require("obsidian"); + +// src/utils/obsidianCompat.ts +function getVaultFileByPath(app, filePath) { + const file2 = app.vault.getAbstractFileByPath(filePath); + if (isVaultFile(file2)) { + return file2; + } + return null; +} +async function revealWorkspaceLeaf(workspace, leaf) { + await workspace.revealLeaf(leaf); +} +function isVaultFile(value) { + if (!value || typeof value !== "object") { + return false; + } + const candidate = value; + return typeof candidate.path === "string" && typeof candidate.basename === "string"; +} + +// src/utils/fileLink.ts +var WIKILINK_PATTERN_SOURCE = "(? 0 ? fullMatch.slice(pipeIndex + 1, -2) : linkPath; + return { + index, + fullMatch, + linkPath, + linkTarget: extractLinkTarget(fullMatch), + displayText + }; +} +function extractLinkTarget(fullMatch) { + const inner = fullMatch.slice(2, -2); + const pipeIndex = inner.indexOf("|"); + return pipeIndex >= 0 ? inner.slice(0, pipeIndex) : inner; +} +function findWikilinks(app, text) { + const pattern = createWikilinkPattern(); + const matches = []; + let match; + while ((match = pattern.exec(text)) !== null) { + const fullMatch = match[0]; + const linkPath = match[1]; + if (!fileExistsInVault(app, linkPath)) continue; + matches.push(buildWikilinkMatch(fullMatch, linkPath, match.index)); + } + return matches.sort((a, b2) => b2.index - a.index); +} +function fileExistsInVault(app, linkPath) { + const file2 = app.metadataCache.getFirstLinkpathDest(linkPath, ""); + if (file2) { + return true; + } + const directFile = getVaultFileByPath(app, linkPath); + if (directFile) { + return true; + } + if (!linkPath.endsWith(".md")) { + const withExt = getVaultFileByPath(app, linkPath + ".md"); + if (withExt) { + return true; + } + } + return false; +} +function extractLinkPathFromTarget(linkTarget) { + const subpathIndex = linkTarget.search(/[#^]/); + return subpathIndex >= 0 ? linkTarget.slice(0, subpathIndex) : linkTarget; +} +function createWikilink(ownerDocument, linkTarget, displayText) { + const link = ownerDocument.createElement("a"); + link.className = "claudian-file-link internal-link"; + link.textContent = displayText; + link.setAttribute("data-href", linkTarget); + link.setAttribute("href", linkTarget); + return link; +} +function repairEmptyInternalLink(app, link) { + if ((link.textContent || "").trim()) return; + const linkTarget = link.dataset.href || link.getAttribute("data-href") || link.getAttribute("href"); + if (!linkTarget) return; + const linkPath = extractLinkPathFromTarget(linkTarget); + if (!linkPath || !fileExistsInVault(app, linkPath)) return; + link.classList.add("claudian-file-link"); + if (!link.dataset.href) { + link.setAttribute("data-href", linkTarget); + } + link.textContent = linkTarget; +} +function registerFileLinkHandler(app, container, component) { + component.registerDomEvent(container, "click", (event) => { + const target = event.target; + const link = target.closest(".claudian-file-link, .internal-link"); + if (link) { + event.preventDefault(); + const linkTarget = link.dataset.href || link.getAttribute("href"); + if (linkTarget) { + void app.workspace.openLinkText(linkTarget, "", "tab"); + } + } + }); +} +function buildFragmentWithLinks(ownerDocument, text, matches) { + const fragment = ownerDocument.createDocumentFragment(); + let currentIndex = text.length; + for (const { index, fullMatch, linkTarget, displayText } of matches) { + const endIndex = index + fullMatch.length; + if (endIndex < currentIndex) { + fragment.insertBefore( + ownerDocument.createTextNode(text.slice(endIndex, currentIndex)), + fragment.firstChild + ); + } + fragment.insertBefore(createWikilink(ownerDocument, linkTarget, displayText), fragment.firstChild); + currentIndex = index; + } + if (currentIndex > 0) { + fragment.insertBefore( + ownerDocument.createTextNode(text.slice(0, currentIndex)), + fragment.firstChild + ); + } + return fragment; +} +function processTextNode(app, node) { + var _a5; + const text = node.textContent; + if (!text || !text.includes("[[")) return false; + const matches = findWikilinks(app, text); + if (matches.length === 0) return false; + (_a5 = node.parentNode) == null ? void 0 : _a5.replaceChild(buildFragmentWithLinks(node.ownerDocument, text, matches), node); + return true; +} +function processFileLinks(app, container) { + if (!app || !container) return; + container.querySelectorAll("a.internal-link").forEach((linkEl) => { + repairEmptyInternalLink(app, linkEl); + }); + container.querySelectorAll("code").forEach((codeEl) => { + var _a5; + if (((_a5 = codeEl.parentElement) == null ? void 0 : _a5.tagName) === "PRE") return; + const text = codeEl.textContent; + if (!text || !text.includes("[[")) return; + const matches = findWikilinks(app, text); + if (matches.length === 0) return; + codeEl.textContent = ""; + codeEl.appendChild(buildFragmentWithLinks(container.ownerDocument, text, matches)); + }); + const walker = container.ownerDocument.createTreeWalker( + container, + NodeFilter.SHOW_TEXT, + { + acceptNode(node2) { + const parent = node2.parentElement; + if (!parent) return NodeFilter.FILTER_REJECT; + const tagName = parent.tagName.toUpperCase(); + if (tagName === "PRE" || tagName === "CODE" || tagName === "A") { + return NodeFilter.FILTER_REJECT; + } + if (parent.closest("pre, code, a, .claudian-file-link, .internal-link")) { + return NodeFilter.FILTER_REJECT; + } + return NodeFilter.FILTER_ACCEPT; + } + } + ); + const textNodes = []; + let node; + while (node = walker.nextNode()) { + textNodes.push(node); + } + for (const textNode of textNodes) { + processTextNode(app, textNode); + } +} + +// src/utils/inlineEdit.ts +function normalizeInsertionText(text) { + return text.replace(/^(?:\r?\n)+|(?:\r?\n)+$/g, ""); +} +function escapeHtml(text) { + return text.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """); +} + +// src/utils/imageEmbed.ts +var IMAGE_EXTENSIONS = /* @__PURE__ */ new Set([ + "png", + "jpg", + "jpeg", + "gif", + "webp", + "svg", + "bmp", + "ico" +]); +var IMAGE_EMBED_PATTERN = /!\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g; +function isImagePath(path27) { + var _a5; + const ext = (_a5 = path27.split(".").pop()) == null ? void 0 : _a5.toLowerCase(); + return ext ? IMAGE_EXTENSIONS.has(ext) : false; +} +function resolveImageFile(app, imagePath, options) { + let file2 = getVaultFileByPath(app, imagePath); + if (file2) return file2; + if (options.mediaFolder) { + const withFolder = `${options.mediaFolder}/${imagePath}`; + file2 = getVaultFileByPath(app, withFolder); + if (file2) return file2; + } + const resolved = app.metadataCache.getFirstLinkpathDest(imagePath, options.sourcePath); + if (resolved) return resolved; + return null; +} +function buildStyleAttribute(altText) { + if (!altText) return ""; + const dimMatch = altText.match(/^(\d+)(?:x(\d+))?$/); + if (!dimMatch) return ""; + const width = dimMatch[1]; + const height = dimMatch[2]; + if (height) { + return ` style="width: ${width}px; height: ${height}px;"`; + } + return ` style="width: ${width}px;"`; +} +function createImageHtml(app, file2, altText) { + const src = app.vault.getResourcePath(file2); + const alt = escapeHtml(altText || file2.basename); + const style = buildStyleAttribute(altText); + return `${alt}`; +} +function createFallbackHtml(wikilink) { + return `${escapeHtml(wikilink)}`; +} +function normalizeOptions(options) { + var _a5, _b3; + if (typeof options === "string") { + return { mediaFolder: options, sourcePath: "" }; + } + return { + mediaFolder: (_a5 = options == null ? void 0 : options.mediaFolder) != null ? _a5 : "", + sourcePath: (_b3 = options == null ? void 0 : options.sourcePath) != null ? _b3 : "" + }; +} +function replaceImageEmbedsWithHtml(markdown, app, options) { + if (!(app == null ? void 0 : app.vault) || !(app == null ? void 0 : app.metadataCache)) { + return markdown; + } + const normalizedOptions = normalizeOptions(options); + IMAGE_EMBED_PATTERN.lastIndex = 0; + return markdown.replace( + IMAGE_EMBED_PATTERN, + (match, imagePath, altText) => { + try { + if (!isImagePath(imagePath)) { + return match; + } + const file2 = resolveImageFile(app, imagePath, normalizedOptions); + if (!file2) { + return createFallbackHtml(match); + } + return createImageHtml(app, file2, altText); + } catch (e2) { + return createFallbackHtml(match); + } + } + ); +} + +// src/features/chat/rendering/MessageRenderer.ts +function runRendererAction(action) { + void action().catch(() => { + }); +} +var MessageRenderer = class { + constructor(plugin, component, messagesEl, rewindCallback, forkCallback, getCapabilities) { + this.liveMessageEls = /* @__PURE__ */ new Map(); + this.app = plugin.app; + this.plugin = plugin; + this.component = component; + this.messagesEl = messagesEl; + this.rewindCallback = rewindCallback; + this.forkCallback = forkCallback; + this.getCapabilities = getCapabilities != null ? getCapabilities : (() => ({ + providerId: DEFAULT_CHAT_PROVIDER_ID, + supportsPersistentRuntime: false, + supportsNativeHistory: false, + supportsPlanMode: false, + supportsRewind: false, + supportsFork: false, + supportsProviderCommands: false, + supportsImageAttachments: false, + supportsInstructionMode: false, + supportsMcpTools: false, + supportsTurnSteer: false, + reasoningControl: "none" + })); + registerFileLinkHandler(this.app, this.messagesEl, this.component); + } + /** Sets the messages container element. */ + setMessagesEl(el2) { + this.messagesEl = el2; + } + getSubagentLifecycleAdapter(toolName) { + return resolveSubagentLifecycleAdapter(this.getCapabilities().providerId, toolName); + } + // ============================================ + // Streaming Message Rendering + // ============================================ + /** + * Adds a new message to the chat during streaming. + * Returns the message element for content updates. + */ + addMessage(msg) { + var _a5, _b3; + if (msg.role === "user" && msg.images && msg.images.length > 0) { + this.renderMessageImages(this.messagesEl, msg.images); + } + if (msg.role === "user") { + const textToShow = (_a5 = msg.displayContent) != null ? _a5 : msg.content; + if (!textToShow) { + this.scrollToBottom(); + const lastChild = this.messagesEl.lastElementChild; + return lastChild != null ? lastChild : this.messagesEl; + } + } + const msgEl = this.messagesEl.createDiv({ + cls: `claudian-message claudian-message-${msg.role}`, + attr: { + "data-message-id": msg.id, + "data-role": msg.role + } + }); + const contentEl = msgEl.createDiv({ cls: "claudian-message-content", attr: { dir: "auto" } }); + if (msg.role === "user") { + const textToShow = (_b3 = msg.displayContent) != null ? _b3 : msg.content; + if (textToShow) { + const textEl = contentEl.createDiv({ cls: "claudian-text-block" }); + void this.renderContent(textEl, textToShow); + this.addUserCopyButton(msgEl, textToShow); + } + if (this.rewindCallback || this.forkCallback) { + this.liveMessageEls.set(msg.id, msgEl); + } + } + this.scrollToBottom(); + return msgEl; + } + updateLiveUserMessage(msg) { + var _a5, _b3; + if (msg.role !== "user") { + return; + } + const msgEl = (_a5 = this.liveMessageEls.get(msg.id)) != null ? _a5 : this.messagesEl.querySelector(`[data-message-id="${msg.id}"]`); + if (!msgEl) { + return; + } + const contentEl = msgEl.querySelector(".claudian-message-content"); + if (!contentEl) { + return; + } + contentEl.empty(); + const textToShow = (_b3 = msg.displayContent) != null ? _b3 : msg.content; + if (textToShow) { + const textEl = contentEl.createDiv({ cls: "claudian-text-block" }); + void this.renderContent(textEl, textToShow); + } + const toolbar = msgEl.querySelector(".claudian-user-msg-actions"); + if (toolbar) { + toolbar.querySelectorAll(".claudian-user-msg-copy-btn").forEach((el2) => el2.remove()); + } + if (textToShow) { + this.addUserCopyButton(msgEl, textToShow); + } + } + removeMessage(messageId) { + var _a5; + const msgEl = (_a5 = this.liveMessageEls.get(messageId)) != null ? _a5 : this.messagesEl.querySelector(`[data-message-id="${messageId}"]`); + if (!msgEl) { + return; + } + msgEl.remove(); + this.liveMessageEls.delete(messageId); + } + // ============================================ + // Stored Message Rendering (Batch/Replay) + // ============================================ + /** + * Renders all messages for conversation load/switch. + * @param messages Array of messages to render + * @param getGreeting Function to get greeting text + * @returns The newly created welcome element + */ + renderMessages(messages, getGreeting) { + this.messagesEl.empty(); + this.liveMessageEls.clear(); + const newWelcomeEl = this.messagesEl.createDiv({ cls: "claudian-welcome" }); + newWelcomeEl.createDiv({ cls: "claudian-welcome-greeting", text: getGreeting() }); + for (let i = 0; i < messages.length; i++) { + this.renderStoredMessage(messages[i], messages, i); + } + this.scrollToBottom(); + return newWelcomeEl; + } + renderStoredMessage(msg, allMessages, index) { + var _a5, _b3; + if (msg.isInterrupt && (msg.role === "user" || !this.hasVisibleContent(msg))) { + this.renderInterruptMessage(); + return; + } + if (msg.isRebuiltContext) { + return; + } + if (msg.role === "user" && msg.images && msg.images.length > 0) { + this.renderMessageImages(this.messagesEl, msg.images); + } + if (msg.role === "user") { + const textToShow = (_a5 = msg.displayContent) != null ? _a5 : msg.content; + if (!textToShow) { + return; + } + } + if (msg.role === "assistant" && !this.hasVisibleContent(msg)) { + return; + } + const msgEl = this.messagesEl.createDiv({ + cls: `claudian-message claudian-message-${msg.role}`, + attr: { + "data-message-id": msg.id, + "data-role": msg.role + } + }); + const contentEl = msgEl.createDiv({ cls: "claudian-message-content", attr: { dir: "auto" } }); + if (msg.role === "user") { + const textToShow = (_b3 = msg.displayContent) != null ? _b3 : msg.content; + if (textToShow) { + const textEl = contentEl.createDiv({ cls: "claudian-text-block" }); + void this.renderContent(textEl, textToShow); + this.addUserCopyButton(msgEl, textToShow); + } + if (msg.userMessageId && this.isRewindEligible(allMessages, index)) { + if (this.rewindCallback) { + this.addRewindButton(msgEl, msg.id); + } + if (this.forkCallback) { + this.addForkButton(msgEl, msg.id); + } + } + } else if (msg.role === "assistant") { + this.renderAssistantContent(msg, contentEl); + if (msg.isInterrupt) { + this.appendInterruptIndicator(contentEl); + } + } + } + hasVisibleContent(msg) { + var _a5, _b3; + if (msg.content && msg.content.trim().length > 0) return true; + if (msg.contentBlocks && msg.contentBlocks.length > 0) { + for (const block of msg.contentBlocks) { + if (block.type === "thinking" && block.content.trim().length > 0) return true; + if (block.type === "text" && block.content.trim().length > 0) return true; + if (block.type === "context_compacted") return true; + if (block.type === "subagent") return true; + if (block.type === "tool_use") { + const toolCall = (_a5 = msg.toolCalls) == null ? void 0 : _a5.find((tc2) => tc2.id === block.toolId); + if (toolCall && this.shouldRenderToolCall(toolCall)) return true; + } + } + } + if ((_b3 = msg.toolCalls) == null ? void 0 : _b3.some((toolCall) => this.shouldRenderToolCall(toolCall))) return true; + return false; + } + isRewindEligible(allMessages, index) { + if (!allMessages || index === void 0) return false; + const ctx = findRewindContext(allMessages, index); + return !!ctx.prevAssistantUuid && ctx.hasResponse; + } + renderInterruptMessage() { + const msgEl = this.messagesEl.createDiv({ cls: "claudian-message claudian-message-assistant" }); + const contentEl = msgEl.createDiv({ cls: "claudian-message-content", attr: { dir: "auto" } }); + this.appendInterruptIndicator(contentEl); + } + appendInterruptIndicator(contentEl) { + const textEl = contentEl.createDiv({ cls: "claudian-text-block" }); + textEl.createSpan({ cls: "claudian-interrupted", text: "Interrupted" }); + textEl.appendText(" "); + textEl.createSpan({ + cls: "claudian-interrupted-hint", + text: "\xB7 What should Claudian do instead?" + }); + } + /** + * Renders assistant message content (content blocks or fallback). + */ + renderAssistantContent(msg, contentEl) { + var _a5, _b3, _c2; + if (msg.contentBlocks && msg.contentBlocks.length > 0) { + const renderedToolIds = /* @__PURE__ */ new Set(); + for (const block of msg.contentBlocks) { + if (block.type === "thinking") { + renderStoredThinkingBlock( + contentEl, + block.content, + block.durationSeconds, + (el2, md) => this.renderContent(el2, md) + ); + } else if (block.type === "text") { + if (!block.content || !block.content.trim()) { + continue; + } + const textEl = contentEl.createDiv({ cls: "claudian-text-block" }); + void this.renderContent(textEl, block.content); + this.addTextCopyButton(textEl, block.content); + } else if (block.type === "tool_use") { + const toolCall = (_a5 = msg.toolCalls) == null ? void 0 : _a5.find((tc2) => tc2.id === block.toolId); + if (toolCall) { + this.renderToolCall(contentEl, toolCall, msg); + renderedToolIds.add(toolCall.id); + } + } else if (block.type === "context_compacted") { + const boundaryEl = contentEl.createDiv({ cls: "claudian-compact-boundary" }); + boundaryEl.createSpan({ cls: "claudian-compact-boundary-label", text: "Conversation compacted" }); + } else if (block.type === "subagent") { + const taskToolCall = (_b3 = msg.toolCalls) == null ? void 0 : _b3.find( + (tc2) => tc2.id === block.subagentId && isSubagentToolName(tc2.name) + ); + if (!taskToolCall) continue; + this.renderTaskSubagent(contentEl, taskToolCall, block.mode); + renderedToolIds.add(taskToolCall.id); + } + } + if (msg.toolCalls && msg.toolCalls.length > 0) { + for (const toolCall of msg.toolCalls) { + if (renderedToolIds.has(toolCall.id)) continue; + this.renderToolCall(contentEl, toolCall, msg); + renderedToolIds.add(toolCall.id); + } + } + } else { + if (msg.content) { + const textEl = contentEl.createDiv({ cls: "claudian-text-block" }); + void this.renderContent(textEl, msg.content); + this.addTextCopyButton(textEl, msg.content); + } + if (msg.toolCalls) { + for (const toolCall of msg.toolCalls) { + this.renderToolCall(contentEl, toolCall, msg); + } + } + } + const hasCompactBoundary = (_c2 = msg.contentBlocks) == null ? void 0 : _c2.some((b2) => b2.type === "context_compacted"); + if (msg.durationSeconds && msg.durationSeconds > 0 && !hasCompactBoundary) { + const flavorWord = msg.durationFlavorWord || "Baked"; + const footerEl = contentEl.createDiv({ cls: "claudian-response-footer" }); + footerEl.createSpan({ + text: `* ${flavorWord} for ${formatDurationMmSs(msg.durationSeconds)}`, + cls: "claudian-baked-duration" + }); + } + } + /** + * Renders a tool call with special handling for Write/Edit, Agent (subagent), + * and Codex collab agent lifecycle tools. + */ + renderToolCall(contentEl, toolCall, msg) { + if (!this.shouldRenderToolCall(toolCall)) return; + const subagentLifecycleAdapter = this.getSubagentLifecycleAdapter(toolCall.name); + if (isWriteEditTool(toolCall.name)) { + renderStoredWriteEdit(contentEl, toolCall); + } else if (isSubagentToolName(toolCall.name)) { + this.renderTaskSubagent(contentEl, toolCall); + } else if ((subagentLifecycleAdapter == null ? void 0 : subagentLifecycleAdapter.isSpawnTool(toolCall.name)) && msg) { + this.renderProviderLifecycleSubagent(contentEl, toolCall, msg); + } else { + renderStoredToolCall(contentEl, toolCall); + } + } + shouldRenderToolCall(toolCall) { + if (toolCall.name === TOOL_AGENT_OUTPUT) return false; + if (toolCall.name === TOOL_WRITE_STDIN && this.isSilentWriteStdinTool(toolCall)) return false; + if (toolCall.name === "custom_tool_call_output") return false; + const subagentLifecycleAdapter = this.getSubagentLifecycleAdapter(toolCall.name); + if (subagentLifecycleAdapter == null ? void 0 : subagentLifecycleAdapter.isHiddenTool(toolCall.name)) return false; + return true; + } + isSilentWriteStdinTool(toolCall) { + return typeof toolCall.input.chars !== "string" || toolCall.input.chars.length === 0; + } + renderTaskSubagent(contentEl, toolCall, modeHint) { + const subagentInfo = this.resolveTaskSubagent(toolCall, modeHint); + if (subagentInfo.mode === "async") { + renderStoredAsyncSubagent(contentEl, subagentInfo); + return; + } + renderStoredSubagent(contentEl, subagentInfo); + } + /** + * Consolidates provider lifecycle tools (spawn + wait/close) + * into a single subagent block with prompt and result. + */ + renderProviderLifecycleSubagent(contentEl, spawnToolCall, msg) { + var _a5; + const subagentLifecycleAdapter = this.getSubagentLifecycleAdapter(spawnToolCall.name); + if (!subagentLifecycleAdapter) { + renderStoredToolCall(contentEl, spawnToolCall); + return; + } + const subagentInfo = subagentLifecycleAdapter.buildSubagentInfo( + spawnToolCall, + (_a5 = msg.toolCalls) != null ? _a5 : [] + ); + renderStoredSubagent(contentEl, subagentInfo); + } + resolveTaskSubagent(toolCall, modeHint) { + var _a5, _b3, _c2; + if (toolCall.subagent) { + if (!modeHint || toolCall.subagent.mode === modeHint) { + return toolCall.subagent; + } + return { + ...toolCall.subagent, + mode: modeHint + }; + } + const description = ((_a5 = toolCall.input) == null ? void 0 : _a5.description) || "Subagent task"; + const prompt = ((_b3 = toolCall.input) == null ? void 0 : _b3.prompt) || ""; + const mode = modeHint != null ? modeHint : ((_c2 = toolCall.input) == null ? void 0 : _c2.run_in_background) === true ? "async" : "sync"; + if (mode !== "async") { + return { + id: toolCall.id, + description, + prompt, + status: this.mapToolStatusToSubagentStatus(toolCall.status), + toolCalls: [], + isExpanded: false, + result: toolCall.result + }; + } + const asyncStatus = this.inferAsyncStatusFromTaskTool(toolCall); + return { + id: toolCall.id, + description, + prompt, + mode: "async", + status: asyncStatus, + asyncStatus, + toolCalls: [], + isExpanded: false, + result: toolCall.result + }; + } + mapToolStatusToSubagentStatus(status) { + switch (status) { + case "completed": + return "completed"; + case "error": + case "blocked": + return "error"; + default: + return "running"; + } + } + inferAsyncStatusFromTaskTool(toolCall) { + if (toolCall.status === "error" || toolCall.status === "blocked") return "error"; + if (toolCall.status === "running") return "running"; + const lowerResult = extractToolResultContent(toolCall.result, { fallbackIndent: 2 }).toLowerCase(); + if (lowerResult.includes("not_ready") || lowerResult.includes("not ready") || lowerResult.includes('"status":"running"') || lowerResult.includes('"status":"pending"') || lowerResult.includes('"retrieval_status":"running"') || lowerResult.includes('"retrieval_status":"not_ready"')) { + return "running"; + } + return "completed"; + } + // ============================================ + // Image Rendering + // ============================================ + /** + * Renders image attachments above a message. + */ + renderMessageImages(containerEl, images) { + const imagesEl = containerEl.createDiv({ cls: "claudian-message-images" }); + for (const image of images) { + const imageWrapper = imagesEl.createDiv({ cls: "claudian-message-image" }); + const imgEl = imageWrapper.createEl("img", { + attr: { + alt: image.name + } + }); + void this.setImageSrc(imgEl, image); + imgEl.addEventListener("click", () => { + void this.showFullImage(image); + }); + } + } + /** + * Shows full-size image in modal overlay. + */ + showFullImage(image) { + var _a5; + const dataUri = `data:${image.mediaType};base64,${image.data}`; + const ownerDocument = (_a5 = this.messagesEl.ownerDocument) != null ? _a5 : window.document; + const overlay = ownerDocument.body.createDiv({ cls: "claudian-image-modal-overlay" }); + const modal = overlay.createDiv({ cls: "claudian-image-modal" }); + modal.createEl("img", { + attr: { + src: dataUri, + alt: image.name + } + }); + const closeBtn = modal.createDiv({ cls: "claudian-image-modal-close" }); + closeBtn.setText("\xD7"); + const handleEsc = (e2) => { + if (e2.key === "Escape") { + close(); + } + }; + const close = () => { + ownerDocument.removeEventListener("keydown", handleEsc); + overlay.remove(); + }; + closeBtn.addEventListener("click", close); + overlay.addEventListener("click", (e2) => { + if (e2.target === overlay) close(); + }); + ownerDocument.addEventListener("keydown", handleEsc); + } + /** + * Sets image src from attachment data. + */ + setImageSrc(imgEl, image) { + const dataUri = `data:${image.mediaType};base64,${image.data}`; + imgEl.setAttribute("src", dataUri); + } + // ============================================ + // Content Rendering + // ============================================ + /** + * Renders markdown content with code block enhancements. + */ + async renderContent(el2, markdown, options) { + el2.empty(); + try { + const renderMarkdown = (options == null ? void 0 : options.deferMath) ? escapeMathDelimitersForStreaming(markdown) : markdown; + const processedMarkdown = replaceImageEmbedsWithHtml( + renderMarkdown, + this.app, + { mediaFolder: this.plugin.settings.mediaFolder } + ); + await import_obsidian33.MarkdownRenderer.render( + this.app, + processedMarkdown, + el2, + "", + this.component + ); + el2.querySelectorAll("pre").forEach((pre) => { + var _a5, _b3; + if ((_a5 = pre.parentElement) == null ? void 0 : _a5.classList.contains("claudian-code-wrapper")) return; + const wrapper = createEl("div", { cls: "claudian-code-wrapper" }); + (_b3 = pre.parentElement) == null ? void 0 : _b3.insertBefore(wrapper, pre); + wrapper.appendChild(pre); + const code = pre.querySelector('code[class*="language-"]'); + if (code) { + const match = code.className.match(/language-(\w+)/); + if (match) { + wrapper.classList.add("has-language"); + const label = createEl("span", { + cls: "claudian-code-lang-label", + text: match[1] + }); + wrapper.appendChild(label); + label.addEventListener("click", () => { + runRendererAction(async () => { + const originalLabel = match[1]; + if (!originalLabel) return; + try { + await navigator.clipboard.writeText(code.textContent || ""); + label.setText("Copied!"); + window.setTimeout(() => label.setText(originalLabel), 1500); + } catch (e2) { + } + }); + }); + } + } + const copyBtn = pre.querySelector(".copy-code-button"); + if (copyBtn) { + wrapper.appendChild(copyBtn); + } + }); + if (processedMarkdown.includes("[[")) { + processFileLinks(this.app, el2); + } + } catch (e2) { + el2.createDiv({ + cls: "claudian-render-error", + text: "Failed to render message content." + }); + } + } + // ============================================ + // Copy Button + // ============================================ + /** + * Adds a copy button to a text block. + * Button shows clipboard icon on hover, changes to "copied!" on click. + * @param textEl The rendered text element + * @param markdown The original markdown content to copy + */ + addTextCopyButton(textEl, markdown) { + const copyBtn = textEl.createSpan({ cls: "claudian-text-copy-btn" }); + (0, import_obsidian33.setIcon)(copyBtn, "copy"); + let feedbackTimeout = null; + copyBtn.addEventListener("click", (e2) => { + e2.stopPropagation(); + runRendererAction(async () => { + try { + await navigator.clipboard.writeText(markdown); + } catch (e4) { + return; + } + if (feedbackTimeout) { + window.clearTimeout(feedbackTimeout); + } + copyBtn.empty(); + copyBtn.setText("Copied!"); + copyBtn.classList.add("copied"); + feedbackTimeout = window.setTimeout(() => { + copyBtn.empty(); + (0, import_obsidian33.setIcon)(copyBtn, "copy"); + copyBtn.classList.remove("copied"); + feedbackTimeout = null; + }, 1500); + }); + }); + } + refreshActionButtons(msg, allMessages, index) { + if (!msg.userMessageId) return; + if (!this.isRewindEligible(allMessages, index)) return; + const msgEl = this.liveMessageEls.get(msg.id); + if (!msgEl) return; + if (this.rewindCallback && !msgEl.querySelector(".claudian-message-rewind-btn")) { + this.addRewindButton(msgEl, msg.id); + } + if (this.forkCallback && !msgEl.querySelector(".claudian-message-fork-btn")) { + this.addForkButton(msgEl, msg.id); + } + this.cleanupLiveMessageEl(msg.id, msgEl); + } + cleanupLiveMessageEl(msgId, msgEl) { + const needsRewind = this.rewindCallback && !msgEl.querySelector(".claudian-message-rewind-btn"); + const needsFork = this.forkCallback && !msgEl.querySelector(".claudian-message-fork-btn"); + if (!needsRewind && !needsFork) { + this.liveMessageEls.delete(msgId); + } + } + getOrCreateActionsToolbar(msgEl) { + const existing = msgEl.querySelector(".claudian-user-msg-actions"); + if (existing) return existing; + return msgEl.createDiv({ cls: "claudian-user-msg-actions" }); + } + addUserCopyButton(msgEl, content) { + const toolbar = this.getOrCreateActionsToolbar(msgEl); + const copyBtn = toolbar.createSpan({ cls: "claudian-user-msg-copy-btn" }); + (0, import_obsidian33.setIcon)(copyBtn, "copy"); + copyBtn.setAttribute("aria-label", "Copy message"); + let feedbackTimeout = null; + copyBtn.addEventListener("click", (e2) => { + e2.stopPropagation(); + runRendererAction(async () => { + try { + await navigator.clipboard.writeText(content); + } catch (e4) { + return; + } + if (feedbackTimeout) window.clearTimeout(feedbackTimeout); + copyBtn.empty(); + copyBtn.setText("Copied!"); + copyBtn.classList.add("copied"); + feedbackTimeout = window.setTimeout(() => { + copyBtn.empty(); + (0, import_obsidian33.setIcon)(copyBtn, "copy"); + copyBtn.classList.remove("copied"); + feedbackTimeout = null; + }, 1500); + }); + }); + } + addRewindButton(msgEl, messageId) { + if (!this.getCapabilities().supportsRewind) return; + const toolbar = this.getOrCreateActionsToolbar(msgEl); + const btn = toolbar.createSpan({ cls: "claudian-message-rewind-btn" }); + if (toolbar.firstChild !== btn) toolbar.insertBefore(btn, toolbar.firstChild); + (0, import_obsidian33.setIcon)(btn, "rotate-ccw"); + btn.setAttribute("aria-label", t10("chat.rewind.ariaLabel")); + btn.addEventListener("click", (e2) => { + e2.stopPropagation(); + this.showRewindMenu(e2, messageId); + }); + } + showRewindMenu(event, messageId) { + const menu = new import_obsidian33.Menu(); + this.addRewindMenuItem(menu, messageId, "conversation"); + this.addRewindMenuItem(menu, messageId, "code-and-conversation"); + menu.showAtMouseEvent(event); + } + addRewindMenuItem(menu, messageId, mode) { + menu.addItem((item) => { + item.setTitle( + mode === "conversation" ? t10("chat.rewind.menuConversationOnly") : t10("chat.rewind.menuCodeAndConversation") + ).setIcon(mode === "conversation" ? "message-square" : "rotate-ccw").onClick(() => { + runRendererAction(async () => { + var _a5; + try { + await ((_a5 = this.rewindCallback) == null ? void 0 : _a5.call(this, messageId, mode)); + } catch (err) { + new import_obsidian33.Notice(t10("chat.rewind.failed", { error: err instanceof Error ? err.message : "Unknown error" })); + } + }); + }); + }); + } + addForkButton(msgEl, messageId) { + if (!this.getCapabilities().supportsFork) return; + const toolbar = this.getOrCreateActionsToolbar(msgEl); + const btn = toolbar.createSpan({ cls: "claudian-message-fork-btn" }); + if (toolbar.firstChild !== btn) toolbar.insertBefore(btn, toolbar.firstChild); + (0, import_obsidian33.setIcon)(btn, "git-fork"); + btn.setAttribute("aria-label", t10("chat.fork.ariaLabel")); + btn.addEventListener("click", (e2) => { + e2.stopPropagation(); + runRendererAction(async () => { + var _a5; + try { + await ((_a5 = this.forkCallback) == null ? void 0 : _a5.call(this, messageId)); + } catch (err) { + new import_obsidian33.Notice(t10("chat.fork.failed", { error: err instanceof Error ? err.message : "Unknown error" })); + } + }); + }); + } + // ============================================ + // Utilities + // ============================================ + /** Scrolls messages container to bottom. */ + scrollToBottom() { + this.messagesEl.scrollTop = this.messagesEl.scrollHeight; + } + /** Scrolls to bottom if already near bottom (within threshold). */ + scrollToBottomIfNeeded(threshold = 100) { + const { scrollTop, scrollHeight, clientHeight } = this.messagesEl; + const isNearBottom = scrollHeight - scrollTop - clientHeight < threshold; + if (isNearBottom) { + window.requestAnimationFrame(() => { + this.messagesEl.scrollTop = this.messagesEl.scrollHeight; + }); + } + } +}; + +// src/features/chat/services/BangBashService.ts +var import_child_process9 = require("child_process"); +var TIMEOUT_MS = 3e4; +var MAX_BUFFER = 1024 * 1024; +var BangBashService = class { + constructor(cwd, enhancedPath) { + this.cwd = cwd; + this.enhancedPath = enhancedPath; + } + execute(command) { + return new Promise((resolve8) => { + (0, import_child_process9.exec)(command, { + cwd: this.cwd, + env: { ...process.env, PATH: this.enhancedPath }, + timeout: TIMEOUT_MS, + maxBuffer: MAX_BUFFER, + shell: process.platform === "win32" ? "cmd.exe" : "/bin/bash" + }, (error48, stdout, stderr) => { + if (error48 && "killed" in error48 && error48.killed) { + const isMaxBuffer = "code" in error48 && error48.code === "ERR_CHILD_PROCESS_STDIO_MAXBUFFER"; + resolve8({ + command, + stdout: stdout != null ? stdout : "", + stderr: stderr != null ? stderr : "", + exitCode: 124, + error: isMaxBuffer ? "Output exceeded maximum buffer size (1MB)" : `Command timed out after ${TIMEOUT_MS / 1e3}s` + }); + return; + } + resolve8({ + command, + stdout: stdout != null ? stdout : "", + stderr: stderr != null ? stderr : "", + exitCode: typeof (error48 == null ? void 0 : error48.code) === "number" ? error48.code : error48 ? 1 : 0 + }); + }); + }); + } +}; + +// src/features/chat/services/SubagentManager.ts +var import_fs11 = require("fs"); +var import_os6 = require("os"); +var import_path41 = require("path"); +function isRecord7(value) { + return !!value && typeof value === "object" && !Array.isArray(value); +} +function parseJsonRecord(value) { + try { + const parsed = JSON.parse(value); + return isRecord7(parsed) ? parsed : null; + } catch (e2) { + return null; + } +} +function parseJsonValue(value) { + try { + const parsed = JSON.parse(value); + return parsed; + } catch (e2) { + return null; + } +} +var _SubagentManager = class _SubagentManager { + constructor(onStateChange, taskResultInterpreter = ProviderRegistry.getTaskResultInterpreter()) { + this.syncSubagents = /* @__PURE__ */ new Map(); + this.pendingTasks = /* @__PURE__ */ new Map(); + this._spawnedThisStream = 0; + this.activeAsyncSubagents = /* @__PURE__ */ new Map(); + this.pendingAsyncSubagents = /* @__PURE__ */ new Map(); + this.taskIdToAgentId = /* @__PURE__ */ new Map(); + this.outputToolIdToAgentId = /* @__PURE__ */ new Map(); + this.asyncDomStates = /* @__PURE__ */ new Map(); + this.onStateChange = onStateChange; + this.taskResultInterpreter = taskResultInterpreter; + } + setCallback(callback) { + this.onStateChange = callback; + } + setTaskResultInterpreter(interpreter) { + this.taskResultInterpreter = interpreter; + } + // ============================================ + // Unified Subagent Entry Point + // ============================================ + /** + * Handles an Agent tool_use chunk with minimal buffering to determine sync vs async. + * Returns a typed result so StreamController can update messages accordingly. + */ + handleTaskToolUse(taskToolId, taskInput, currentContentEl) { + const existingSyncState = this.syncSubagents.get(taskToolId); + if (existingSyncState) { + this.updateSubagentLabel(existingSyncState.wrapperEl, existingSyncState.info, taskInput); + return { action: "label_updated" }; + } + const existingAsyncState = this.asyncDomStates.get(taskToolId); + if (existingAsyncState) { + this.updateSubagentLabel(existingAsyncState.wrapperEl, existingAsyncState.info, taskInput); + const canonical = this.getByTaskId(taskToolId); + if (canonical && canonical !== existingAsyncState.info) { + if (taskInput.description) canonical.description = taskInput.description; + if (taskInput.prompt) canonical.prompt = taskInput.prompt; + } + return { action: "label_updated" }; + } + const pending = this.pendingTasks.get(taskToolId); + if (pending) { + const newInput = taskInput || {}; + if (Object.keys(newInput).length > 0) { + pending.toolCall.input = { ...pending.toolCall.input, ...newInput }; + } + if (currentContentEl) { + pending.parentEl = currentContentEl; + } + if (this.resolveTaskMode(pending.toolCall.input)) { + const result = this.renderPendingTask(taskToolId, currentContentEl); + if (result) { + return result.mode === "sync" ? { action: "created_sync", subagentState: result.subagentState } : { action: "created_async", info: result.info, domState: result.domState }; + } + } + return { action: "buffered" }; + } + if (!currentContentEl) { + const toolCall = { + id: taskToolId, + name: TOOL_TASK, + input: taskInput || {}, + status: "running", + isExpanded: false + }; + this.pendingTasks.set(taskToolId, { toolCall, parentEl: null }); + return { action: "buffered" }; + } + const mode = this.resolveTaskMode(taskInput); + if (!mode) { + const toolCall = { + id: taskToolId, + name: TOOL_TASK, + input: taskInput || {}, + status: "running", + isExpanded: false + }; + this.pendingTasks.set(taskToolId, { toolCall, parentEl: currentContentEl }); + return { action: "buffered" }; + } + this._spawnedThisStream++; + if (mode === "async") { + return this.createAsyncTask(taskToolId, taskInput, currentContentEl); + } + return this.createSyncTask(taskToolId, taskInput, currentContentEl); + } + // ============================================ + // Pending Task Resolution + // ============================================ + hasPendingTask(toolId) { + return this.pendingTasks.has(toolId); + } + /** + * Renders a buffered pending task. Called when a child chunk or tool_result + * confirms the task is sync, or when run_in_background becomes known. + * Uses the optional parentEl override, falling back to the stored parentEl. + */ + renderPendingTask(toolId, parentElOverride) { + const pending = this.pendingTasks.get(toolId); + if (!pending) return null; + const input = pending.toolCall.input; + const targetEl = parentElOverride != null ? parentElOverride : pending.parentEl; + if (!targetEl) return null; + this.pendingTasks.delete(toolId); + try { + if (input.run_in_background === true) { + const result = this.createAsyncTask(pending.toolCall.id, input, targetEl); + if (result.action === "created_async") { + this._spawnedThisStream++; + return { mode: "async", info: result.info, domState: result.domState }; + } + } else { + const result = this.createSyncTask(pending.toolCall.id, input, targetEl); + if (result.action === "created_sync") { + this._spawnedThisStream++; + return { mode: "sync", subagentState: result.subagentState }; + } + } + } catch (e2) { + } + return null; + } + /** + * Resolves a pending Task when its own tool_result arrives. + * If mode is still unknown, infer async from task result shape (agent_id/agentId), + * otherwise fall back to sync so it never remains pending indefinitely. + */ + renderPendingTaskFromTaskResult(toolId, taskResult, isError, parentElOverride, taskToolUseResult) { + const pending = this.pendingTasks.get(toolId); + if (!pending) return null; + const input = pending.toolCall.input; + const targetEl = parentElOverride != null ? parentElOverride : pending.parentEl; + if (!targetEl) return null; + const explicitMode = this.resolveTaskMode(input); + const taskResultText = extractToolResultContent(taskResult, { fallbackIndent: 2 }); + const inferredMode = explicitMode != null ? explicitMode : this.inferModeFromTaskResult(taskResultText, isError, taskToolUseResult); + this.pendingTasks.delete(toolId); + try { + if (inferredMode === "async") { + const result = this.createAsyncTask(pending.toolCall.id, input, targetEl); + if (result.action === "created_async") { + this._spawnedThisStream++; + return { mode: "async", info: result.info, domState: result.domState }; + } + } else { + const result = this.createSyncTask(pending.toolCall.id, input, targetEl); + if (result.action === "created_sync") { + this._spawnedThisStream++; + return { mode: "sync", subagentState: result.subagentState }; + } + } + } catch (e2) { + } + return null; + } + // ============================================ + // Sync Subagent Operations + // ============================================ + getSyncSubagent(toolId) { + return this.syncSubagents.get(toolId); + } + addSyncToolCall(parentToolUseId, toolCall) { + const subagentState = this.syncSubagents.get(parentToolUseId); + if (!subagentState) return; + addSubagentToolCall(subagentState, toolCall); + } + updateSyncToolResult(parentToolUseId, toolId, toolCall) { + const subagentState = this.syncSubagents.get(parentToolUseId); + if (!subagentState) return; + updateSubagentToolResult(subagentState, toolId, toolCall); + } + finalizeSyncSubagent(toolId, result, isError, toolUseResult) { + const subagentState = this.syncSubagents.get(toolId); + if (!subagentState) return null; + const resultText = extractToolResultContent(result, { fallbackIndent: 2 }); + const extractedResult = this.extractAgentResult(resultText, "", toolUseResult); + finalizeSubagentBlock(subagentState, extractedResult, isError); + this.syncSubagents.delete(toolId); + return subagentState.info; + } + // ============================================ + // Async Subagent Lifecycle + // ============================================ + handleTaskToolResult(taskToolId, result, isError, toolUseResult) { + var _a5; + const subagent = this.pendingAsyncSubagents.get(taskToolId); + if (!subagent) return; + const resultText = extractToolResultContent(result, { fallbackIndent: 2 }); + if (isError) { + this.transitionToError(subagent, taskToolId, resultText || "Task failed to start"); + return; + } + const agentId = (_a5 = this.taskResultInterpreter.extractAgentId(toolUseResult)) != null ? _a5 : this.parseAgentId(resultText); + if (!agentId) { + const truncatedResult = resultText.length > 100 ? resultText.substring(0, 100) + "..." : resultText; + this.transitionToError(subagent, taskToolId, `Failed to parse agent_id. Result: ${truncatedResult}`); + return; + } + subagent.asyncStatus = "running"; + subagent.agentId = agentId; + subagent.startedAt = Date.now(); + this.pendingAsyncSubagents.delete(taskToolId); + this.activeAsyncSubagents.set(agentId, subagent); + this.taskIdToAgentId.set(taskToolId, agentId); + this.updateAsyncDomState(subagent); + this.onStateChange(subagent); + } + handleAgentOutputToolUse(toolCall) { + const agentId = this.extractAgentIdFromInput(toolCall.input); + if (!agentId) return; + const subagent = this.activeAsyncSubagents.get(agentId); + if (!subagent) return; + subagent.outputToolId = toolCall.id; + this.outputToolIdToAgentId.set(toolCall.id, agentId); + } + handleAgentOutputToolResult(toolId, result, isError, toolUseResult) { + const resultText = extractToolResultContent(result, { fallbackIndent: 2 }); + let agentId = this.outputToolIdToAgentId.get(toolId); + let subagent = agentId ? this.activeAsyncSubagents.get(agentId) : void 0; + if (!subagent) { + const inferredAgentId = this.inferAgentIdFromResult(resultText); + if (inferredAgentId) { + agentId = inferredAgentId; + subagent = this.activeAsyncSubagents.get(inferredAgentId); + } + } + if (!subagent) return void 0; + if (agentId) { + subagent.agentId = subagent.agentId || agentId; + this.outputToolIdToAgentId.set(toolId, agentId); + } + if (subagent.asyncStatus !== "running") { + return void 0; + } + const stillRunning = this.isStillRunningResult(resultText, isError); + if (stillRunning) { + this.outputToolIdToAgentId.delete(toolId); + return subagent; + } + const extractedResult = this.extractAgentResult(resultText, agentId != null ? agentId : "", toolUseResult); + const finalStatus = this.taskResultInterpreter.resolveTerminalStatus( + toolUseResult, + isError ? "error" : "completed" + ); + subagent.asyncStatus = finalStatus; + subagent.status = finalStatus; + subagent.result = extractedResult; + subagent.completedAt = Date.now(); + if (agentId) this.activeAsyncSubagents.delete(agentId); + this.outputToolIdToAgentId.delete(toolId); + this.updateAsyncDomState(subagent); + this.onStateChange(subagent); + return subagent; + } + handleAsyncSubagentResult(agentId, status, result) { + const subagent = this.activeAsyncSubagents.get(agentId); + if (!subagent || subagent.asyncStatus !== "running") { + return void 0; + } + subagent.agentId = subagent.agentId || agentId; + subagent.asyncStatus = status; + subagent.status = status; + subagent.result = (result == null ? void 0 : result.trim()) || (status === "error" ? "Background task failed." : "Background task completed."); + subagent.completedAt = Date.now(); + this.activeAsyncSubagents.delete(agentId); + for (const [toolId, mappedAgentId] of this.outputToolIdToAgentId.entries()) { + if (mappedAgentId === agentId) { + this.outputToolIdToAgentId.delete(toolId); + } + } + this.updateAsyncDomState(subagent); + this.onStateChange(subagent); + return subagent; + } + isPendingAsyncTask(taskToolId) { + return this.pendingAsyncSubagents.has(taskToolId); + } + isLinkedAgentOutputTool(toolId) { + return this.outputToolIdToAgentId.has(toolId); + } + getByTaskId(taskToolId) { + const pending = this.pendingAsyncSubagents.get(taskToolId); + if (pending) return pending; + const agentId = this.taskIdToAgentId.get(taskToolId); + if (agentId) { + return this.activeAsyncSubagents.get(agentId); + } + return void 0; + } + /** + * Re-renders an async subagent after data-only updates (for example, + * hydrating tool calls from SDK sidecar files) without changing lifecycle state. + */ + refreshAsyncSubagent(subagent) { + this.updateAsyncDomState(subagent); + this.onStateChange(subagent); + } + // ============================================ + // Hook State + // ============================================ + hasRunningSubagents() { + return this.pendingAsyncSubagents.size > 0 || this.activeAsyncSubagents.size > 0; + } + // ============================================ + // Lifecycle + // ============================================ + get subagentsSpawnedThisStream() { + return this._spawnedThisStream; + } + resetSpawnedCount() { + this._spawnedThisStream = 0; + } + resetStreamingState() { + this.syncSubagents.clear(); + this.pendingTasks.clear(); + } + orphanAllActive() { + const orphaned = []; + for (const subagent of this.pendingAsyncSubagents.values()) { + this.markOrphaned(subagent); + orphaned.push(subagent); + } + for (const subagent of this.activeAsyncSubagents.values()) { + if (subagent.asyncStatus === "running") { + this.markOrphaned(subagent); + orphaned.push(subagent); + } + } + this.pendingAsyncSubagents.clear(); + this.activeAsyncSubagents.clear(); + this.taskIdToAgentId.clear(); + this.outputToolIdToAgentId.clear(); + return orphaned; + } + clear() { + this.syncSubagents.clear(); + this.pendingTasks.clear(); + this.pendingAsyncSubagents.clear(); + this.activeAsyncSubagents.clear(); + this.taskIdToAgentId.clear(); + this.outputToolIdToAgentId.clear(); + this.asyncDomStates.clear(); + } + // ============================================ + // Private: State Transitions + // ============================================ + markOrphaned(subagent) { + subagent.asyncStatus = "orphaned"; + subagent.status = "error"; + subagent.result = "Conversation ended before task completed"; + subagent.completedAt = Date.now(); + this.updateAsyncDomState(subagent); + this.onStateChange(subagent); + } + transitionToError(subagent, taskToolId, errorResult) { + subagent.asyncStatus = "error"; + subagent.status = "error"; + subagent.result = errorResult; + subagent.completedAt = Date.now(); + this.pendingAsyncSubagents.delete(taskToolId); + this.updateAsyncDomState(subagent); + this.onStateChange(subagent); + } + // ============================================ + // Private: Task Creation + // ============================================ + createSyncTask(taskToolId, taskInput, parentEl) { + const subagentState = createSubagentBlock(parentEl, taskToolId, taskInput); + this.syncSubagents.set(taskToolId, subagentState); + return { action: "created_sync", subagentState }; + } + createAsyncTask(taskToolId, taskInput, parentEl) { + const description = taskInput.description || "Background task"; + const prompt = taskInput.prompt || ""; + const info = { + id: taskToolId, + description, + prompt, + mode: "async", + isExpanded: false, + status: "running", + toolCalls: [], + asyncStatus: "pending" + }; + this.pendingAsyncSubagents.set(taskToolId, info); + const domState = createAsyncSubagentBlock(parentEl, taskToolId, taskInput); + this.asyncDomStates.set(taskToolId, domState); + return { action: "created_async", info, domState }; + } + // ============================================ + // Private: Label Update + // ============================================ + updateSubagentLabel(wrapperEl, info, newInput) { + if (!newInput || Object.keys(newInput).length === 0) return; + const description = newInput.description || ""; + if (description) { + info.description = description; + const labelEl = wrapperEl.querySelector(".claudian-subagent-label"); + if (labelEl) { + const truncated = description.length > 40 ? description.substring(0, 40) + "..." : description; + labelEl.setText(truncated); + } + } + const prompt = newInput.prompt || ""; + if (prompt) { + info.prompt = prompt; + const promptEl = wrapperEl.querySelector(".claudian-subagent-prompt-text"); + if (promptEl) { + promptEl.setText(prompt); + } + } + } + resolveTaskMode(taskInput) { + if (!Object.prototype.hasOwnProperty.call(taskInput, "run_in_background")) { + return null; + } + if (taskInput.run_in_background === true) { + return "async"; + } + if (taskInput.run_in_background === false) { + return "sync"; + } + return null; + } + inferModeFromTaskResult(taskResult, isError, taskToolUseResult) { + if (isError) { + return "sync"; + } + if (this.taskResultInterpreter.hasAsyncLaunchMarker(taskToolUseResult)) { + return "async"; + } + return this.parseAgentIdStrict(taskResult) ? "async" : "sync"; + } + parseAgentIdStrict(result) { + var _a5, _b3; + const payload = this.unwrapTextPayload(result).trim(); + if (!payload) { + return null; + } + const parsed = parseJsonRecord(payload); + if (parsed) { + if (this.hasTerminalTaskStatus(parsed)) { + return null; + } + const directAgentId = this.extractAgentIdFromRecord(parsed); + if (directAgentId) { + return directAgentId; + } + const taskRecord = parsed.task; + if (isRecord7(taskRecord)) { + return this.extractAgentIdFromRecord(taskRecord); + } + } + const xmlStatus = (_a5 = this.taskResultInterpreter.extractTagValue(payload, "retrieval_status")) != null ? _a5 : this.taskResultInterpreter.extractTagValue(payload, "status"); + if (this.isTerminalTaskStatusValue(xmlStatus)) { + return null; + } + const exactLineMatch = payload.match(/^\s*(?:agent_id|agentId)\s*[=:]\s*"?([a-zA-Z0-9_-]+)"?\s*$/i); + return (_b3 = exactLineMatch == null ? void 0 : exactLineMatch[1]) != null ? _b3 : null; + } + hasTerminalTaskStatus(value) { + var _a5; + if (!value || typeof value !== "object" || Array.isArray(value)) { + return false; + } + const record2 = value; + const rawStatus = (_a5 = record2.retrieval_status) != null ? _a5 : record2.status; + return this.isTerminalTaskStatusValue(rawStatus); + } + isTerminalTaskStatusValue(rawStatus) { + if (typeof rawStatus !== "string") { + return false; + } + const normalized = rawStatus.toLowerCase(); + return normalized === "completed" || normalized === "success" || normalized === "error"; + } + extractAgentIdFromRecord(record2) { + var _a5, _b3; + const direct = (_a5 = record2.agent_id) != null ? _a5 : record2.agentId; + if (typeof direct === "string" && direct.length > 0) { + return direct; + } + const data = record2.data; + if (!data || typeof data !== "object" || Array.isArray(data)) { + return null; + } + const nested = (_b3 = data.agent_id) != null ? _b3 : data.agentId; + return typeof nested === "string" && nested.length > 0 ? nested : null; + } + extractAgentIdFromString(value) { + const regexPatterns = [ + /"agent_id"\s*:\s*"([^"]+)"/, + /"agentId"\s*:\s*"([^"]+)"/, + /agent_id[=:]\s*"?([a-zA-Z0-9_-]+)"?/i, + /agentId[=:]\s*"?([a-zA-Z0-9_-]+)"?/i + ]; + for (const pattern of regexPatterns) { + const match = value.match(pattern); + if (match && match[1]) { + return match[1]; + } + } + return null; + } + // ============================================ + // Private: Async DOM State Updates + // ============================================ + updateAsyncDomState(subagent) { + let asyncState = this.asyncDomStates.get(subagent.id); + if (!asyncState) { + for (const s2 of this.asyncDomStates.values()) { + if (s2.info.agentId === subagent.agentId) { + asyncState = s2; + break; + } + } + if (!asyncState) return; + } + asyncState.info = subagent; + switch (subagent.asyncStatus) { + case "running": + updateAsyncSubagentRunning(asyncState, subagent.agentId || ""); + break; + case "completed": + case "error": + finalizeAsyncSubagent(asyncState, subagent.result || "", subagent.asyncStatus === "error"); + break; + case "orphaned": + markAsyncSubagentOrphaned(asyncState); + break; + } + } + // ============================================ + // Private: Async Parsing Logic + // ============================================ + isStillRunningResult(result, isError) { + var _a5; + const trimmed = (result == null ? void 0 : result.trim()) || ""; + const payload = this.unwrapTextPayload(trimmed); + if (isError) return false; + if (!trimmed) return false; + const parsed = parseJsonRecord(payload); + if (parsed) { + const status = (_a5 = parsed.retrieval_status) != null ? _a5 : parsed.status; + const agents = isRecord7(parsed.agents) ? parsed.agents : null; + const hasAgents = agents !== null && Object.keys(agents).length > 0; + if (status === "not_ready" || status === "running" || status === "pending") { + return true; + } + if (hasAgents && agents) { + const agentStatuses = Object.values(agents).map((agent) => isRecord7(agent) && typeof agent.status === "string" ? agent.status.toLowerCase() : ""); + const anyRunning = agentStatuses.some( + (s2) => s2 === "running" || s2 === "pending" || s2 === "not_ready" + ); + if (anyRunning) return true; + return false; + } + if (status === "success" || status === "completed") { + return false; + } + return false; + } + const lowerResult = payload.toLowerCase(); + if (lowerResult.includes("not_ready") || lowerResult.includes("not ready")) { + return true; + } + const xmlStatusMatch = lowerResult.match(/([^<]+)<\/status>/); + if (xmlStatusMatch) { + const status = xmlStatusMatch[1].trim(); + if (status === "running" || status === "pending" || status === "not_ready") { + return true; + } + } + return false; + } + extractAgentResult(result, agentId, toolUseResult) { + const structuredResult = this.taskResultInterpreter.extractStructuredResult(toolUseResult); + const normalizedStructuredResult = this.extractResultFromCandidateString(structuredResult); + if (normalizedStructuredResult) { + return normalizedStructuredResult; + } + if (structuredResult) { + return structuredResult; + } + const payload = this.unwrapTextPayload(result); + const parsed = parseJsonRecord(payload); + if (parsed) { + const taskResult = this.extractResultFromTaskObject(parsed.task); + if (taskResult) { + return taskResult; + } + const agents = isRecord7(parsed.agents) ? parsed.agents : null; + const agentData = agents && agentId ? agents[agentId] : null; + if (isRecord7(agentData)) { + const parsedResult2 = this.extractResultFromCandidateString(agentData.result); + if (parsedResult2) { + return parsedResult2; + } + const parsedOutput2 = this.extractResultFromCandidateString(agentData.output); + if (parsedOutput2) { + return parsedOutput2; + } + return JSON.stringify(agentData, null, 2); + } + if (agents) { + const agentIds = Object.keys(agents); + if (agentIds.length > 0) { + const firstAgent = agents[agentIds[0]]; + if (isRecord7(firstAgent)) { + const parsedResult2 = this.extractResultFromCandidateString(firstAgent.result); + if (parsedResult2) { + return parsedResult2; + } + const parsedOutput2 = this.extractResultFromCandidateString(firstAgent.output); + if (parsedOutput2) { + return parsedOutput2; + } + } + return JSON.stringify(firstAgent, null, 2); + } + } + const parsedResult = this.extractResultFromCandidateString(parsed.result); + if (parsedResult) { + return parsedResult; + } + const parsedOutput = this.extractResultFromCandidateString(parsed.output); + if (parsedOutput) { + return parsedOutput; + } + } + const taggedResult = this.extractResultFromTaggedPayload(payload); + if (taggedResult) { + return taggedResult; + } + return payload; + } + extractResultFromTaskObject(task) { + var _a5; + if (!task || typeof task !== "object") { + return null; + } + const taskRecord = task; + return (_a5 = this.extractResultFromCandidateString(taskRecord.result)) != null ? _a5 : this.extractResultFromCandidateString(taskRecord.output); + } + extractResultFromCandidateString(candidate) { + if (typeof candidate !== "string") { + return null; + } + const trimmed = candidate.trim(); + if (!trimmed) { + return null; + } + const taggedResult = this.extractResultFromTaggedPayload(trimmed); + if (taggedResult) { + return taggedResult; + } + const jsonlResult = this.extractResultFromOutputJsonl(trimmed); + if (jsonlResult) { + return jsonlResult; + } + return trimmed; + } + parseAgentId(result) { + const regexPatterns = [ + /"agent_id"\s*:\s*"([^"]+)"/, + /"agentId"\s*:\s*"([^"]+)"/, + /agent_id[=:]\s*"?([a-zA-Z0-9_-]+)"?/i, + /agentId[=:]\s*"?([a-zA-Z0-9_-]+)"?/i, + /\b([a-f0-9]{8})\b/ + ]; + for (const pattern of regexPatterns) { + const match = result.match(pattern); + if (match && match[1]) { + return match[1]; + } + } + const parsed = parseJsonRecord(result); + if (parsed) { + const agentId = parsed.agent_id || parsed.agentId; + if (typeof agentId === "string" && agentId.length > 0) { + return agentId; + } + const data = parsed.data; + if (isRecord7(data) && typeof data.agent_id === "string") { + return data.agent_id; + } + if (parsed.id && typeof parsed.id === "string") { + return parsed.id; + } + } + return null; + } + inferAgentIdFromResult(result) { + var _a5; + const parsed = parseJsonRecord(result); + if (parsed) { + const agents = isRecord7(parsed.agents) ? parsed.agents : null; + if (agents) { + return (_a5 = Object.keys(agents)[0]) != null ? _a5 : null; + } + } + return null; + } + unwrapTextPayload(raw) { + const parsed = parseJsonValue(raw); + if (parsed !== null) { + if (Array.isArray(parsed)) { + const textBlock = parsed.find((block) => isRecord7(block) && typeof block.text === "string"); + if (isRecord7(textBlock) && typeof textBlock.text === "string") return textBlock.text; + } else if (isRecord7(parsed) && typeof parsed.text === "string") { + return parsed.text; + } + } + return raw; + } + extractResultFromTaggedPayload(payload) { + const directResult = this.taskResultInterpreter.extractTagValue(payload, "result"); + if (directResult) return directResult; + const outputContent = this.taskResultInterpreter.extractTagValue(payload, "output"); + if (!outputContent) return null; + const extractedFromJsonl = this.extractResultFromOutputJsonl(outputContent); + if (extractedFromJsonl) return extractedFromJsonl; + const nestedResult = this.taskResultInterpreter.extractTagValue(outputContent, "result"); + if (nestedResult) return nestedResult; + const trimmed = outputContent.trim(); + return trimmed.length > 0 ? trimmed : null; + } + extractResultFromOutputJsonl(outputContent) { + const inlineResult = extractFinalResultFromSubagentJsonl(outputContent); + if (inlineResult) { + return inlineResult; + } + const fullOutputPath = this.extractFullOutputPath(outputContent); + if (!fullOutputPath) { + return null; + } + const fullOutput = this.readFullOutputFile(fullOutputPath); + if (!fullOutput) { + return null; + } + return extractFinalResultFromSubagentJsonl(fullOutput); + } + extractFullOutputPath(content) { + const truncatedPattern = /\[Truncated\.\s*Full output:\s*([^\]\n]+)\]/i; + const match = content.match(truncatedPattern); + if (!match || !match[1]) { + return null; + } + const outputPath = match[1].trim(); + return outputPath.length > 0 ? outputPath : null; + } + readFullOutputFile(fullOutputPath) { + try { + if (!this.isTrustedOutputPath(fullOutputPath)) { + return null; + } + if (!(0, import_fs11.existsSync)(fullOutputPath)) { + return null; + } + const fileContent = (0, import_fs11.readFileSync)(fullOutputPath, "utf-8"); + const trimmed = fileContent.trim(); + return trimmed.length > 0 ? trimmed : null; + } catch (e2) { + return null; + } + } + extractAgentIdFromInput(input) { + const agentId = input.task_id || input.agentId || input.agent_id; + return agentId || null; + } + static resolveTrustedTmpRoots() { + const roots = /* @__PURE__ */ new Set(); + const candidates = [(0, import_os6.tmpdir)(), "/tmp", "/private/tmp"]; + for (const candidate of candidates) { + try { + roots.add((0, import_fs11.realpathSync)(candidate)); + } catch (e2) { + } + } + return Array.from(roots); + } + isTrustedOutputPath(fullOutputPath) { + if (!(0, import_path41.isAbsolute)(fullOutputPath)) { + return false; + } + if (!fullOutputPath.toLowerCase().endsWith(_SubagentManager.TRUSTED_OUTPUT_EXT)) { + return false; + } + let resolvedPath; + try { + resolvedPath = (0, import_fs11.realpathSync)(fullOutputPath); + } catch (e2) { + return false; + } + return _SubagentManager.TRUSTED_TMP_ROOTS.some( + (root) => resolvedPath === root || resolvedPath.startsWith(`${root}${import_path41.sep}`) + ); + } +}; +_SubagentManager.TRUSTED_OUTPUT_EXT = ".output"; +_SubagentManager.TRUSTED_TMP_ROOTS = _SubagentManager.resolveTrustedTmpRoots(); +var SubagentManager = _SubagentManager; + +// src/features/chat/state/ChatState.ts +function createInitialState() { + return { + messages: [], + isStreaming: false, + cancelRequested: false, + streamGeneration: 0, + isCreatingConversation: false, + isSwitchingConversation: false, + hasPendingConversationSave: false, + currentConversationId: null, + queuedMessage: null, + currentContentEl: null, + currentTextEl: null, + currentTextContent: "", + currentThinkingState: null, + thinkingEl: null, + queueIndicatorEl: null, + thinkingIndicatorTimeout: null, + toolCallElements: /* @__PURE__ */ new Map(), + writeEditStates: /* @__PURE__ */ new Map(), + pendingTools: /* @__PURE__ */ new Map(), + usage: null, + ignoreUsageUpdates: false, + currentTodos: null, + needsAttention: false, + autoScrollEnabled: true, + // Default; controllers will override based on settings + responseStartTime: null, + flavorTimerInterval: null, + pendingNewSessionPlan: null, + planFilePath: null, + prePlanPermissionMode: null + }; +} +var ChatState = class { + constructor(callbacks = {}) { + this.thinkingIndicatorTimeoutWindow = null; + this.flavorTimerIntervalWindow = null; + this.state = createInitialState(); + this._callbacks = callbacks; + } + get callbacks() { + return this._callbacks; + } + set callbacks(value) { + this._callbacks = value; + } + // ============================================ + // Messages + // ============================================ + get messages() { + return [...this.state.messages]; + } + set messages(value) { + var _a5, _b3; + this.state.messages = value; + (_b3 = (_a5 = this._callbacks).onMessagesChanged) == null ? void 0 : _b3.call(_a5); + } + addMessage(msg) { + var _a5, _b3; + this.state.messages.push(msg); + (_b3 = (_a5 = this._callbacks).onMessagesChanged) == null ? void 0 : _b3.call(_a5); + } + clearMessages() { + var _a5, _b3; + this.state.messages = []; + (_b3 = (_a5 = this._callbacks).onMessagesChanged) == null ? void 0 : _b3.call(_a5); + } + truncateAt(messageId) { + var _a5, _b3; + const idx = this.state.messages.findIndex((m4) => m4.id === messageId); + if (idx === -1) return 0; + const removed = this.state.messages.length - idx; + this.state.messages = this.state.messages.slice(0, idx); + (_b3 = (_a5 = this._callbacks).onMessagesChanged) == null ? void 0 : _b3.call(_a5); + return removed; + } + // ============================================ + // Streaming Control + // ============================================ + get isStreaming() { + return this.state.isStreaming; + } + set isStreaming(value) { + var _a5, _b3; + this.state.isStreaming = value; + (_b3 = (_a5 = this._callbacks).onStreamingStateChanged) == null ? void 0 : _b3.call(_a5, value); + } + get cancelRequested() { + return this.state.cancelRequested; + } + set cancelRequested(value) { + this.state.cancelRequested = value; + } + get streamGeneration() { + return this.state.streamGeneration; + } + bumpStreamGeneration() { + this.state.streamGeneration += 1; + return this.state.streamGeneration; + } + get isCreatingConversation() { + return this.state.isCreatingConversation; + } + set isCreatingConversation(value) { + this.state.isCreatingConversation = value; + } + get isSwitchingConversation() { + return this.state.isSwitchingConversation; + } + set isSwitchingConversation(value) { + this.state.isSwitchingConversation = value; + } + get hasPendingConversationSave() { + return this.state.hasPendingConversationSave; + } + set hasPendingConversationSave(value) { + this.state.hasPendingConversationSave = value; + } + // ============================================ + // Conversation + // ============================================ + get currentConversationId() { + return this.state.currentConversationId; + } + set currentConversationId(value) { + var _a5, _b3; + this.state.currentConversationId = value; + (_b3 = (_a5 = this._callbacks).onConversationChanged) == null ? void 0 : _b3.call(_a5, value); + } + // ============================================ + // Queued Message + // ============================================ + get queuedMessage() { + return this.state.queuedMessage; + } + set queuedMessage(value) { + this.state.queuedMessage = value; + } + // ============================================ + // Streaming DOM State + // ============================================ + get currentContentEl() { + return this.state.currentContentEl; + } + set currentContentEl(value) { + this.state.currentContentEl = value; + } + get currentTextEl() { + return this.state.currentTextEl; + } + set currentTextEl(value) { + this.state.currentTextEl = value; + } + get currentTextContent() { + return this.state.currentTextContent; + } + set currentTextContent(value) { + this.state.currentTextContent = value; + } + get currentThinkingState() { + return this.state.currentThinkingState; + } + set currentThinkingState(value) { + this.state.currentThinkingState = value; + } + get thinkingEl() { + return this.state.thinkingEl; + } + set thinkingEl(value) { + this.state.thinkingEl = value; + } + get queueIndicatorEl() { + return this.state.queueIndicatorEl; + } + set queueIndicatorEl(value) { + this.state.queueIndicatorEl = value; + } + get thinkingIndicatorTimeout() { + return this.state.thinkingIndicatorTimeout; + } + set thinkingIndicatorTimeout(value) { + this.state.thinkingIndicatorTimeout = value; + this.thinkingIndicatorTimeoutWindow = value === null ? null : this.getDefaultTimerWindow(); + } + // ============================================ + // Tool Tracking Maps (mutable references) + // ============================================ + get toolCallElements() { + return this.state.toolCallElements; + } + get writeEditStates() { + return this.state.writeEditStates; + } + get pendingTools() { + return this.state.pendingTools; + } + // ============================================ + // Usage State + // ============================================ + get usage() { + return this.state.usage; + } + set usage(value) { + var _a5, _b3; + this.state.usage = value; + (_b3 = (_a5 = this._callbacks).onUsageChanged) == null ? void 0 : _b3.call(_a5, value); + } + get ignoreUsageUpdates() { + return this.state.ignoreUsageUpdates; + } + set ignoreUsageUpdates(value) { + this.state.ignoreUsageUpdates = value; + } + // ============================================ + // Current Todos (for persistent bottom panel) + // ============================================ + get currentTodos() { + return this.state.currentTodos ? [...this.state.currentTodos] : null; + } + set currentTodos(value) { + var _a5, _b3; + const normalizedValue = value && value.length > 0 ? value : null; + this.state.currentTodos = normalizedValue; + (_b3 = (_a5 = this._callbacks).onTodosChanged) == null ? void 0 : _b3.call(_a5, normalizedValue); + } + // ============================================ + // Attention State (approval pending, error, etc.) + // ============================================ + get needsAttention() { + return this.state.needsAttention; + } + set needsAttention(value) { + var _a5, _b3; + this.state.needsAttention = value; + (_b3 = (_a5 = this._callbacks).onAttentionChanged) == null ? void 0 : _b3.call(_a5, value); + } + // ============================================ + // Auto-Scroll Control + // ============================================ + get autoScrollEnabled() { + return this.state.autoScrollEnabled; + } + set autoScrollEnabled(value) { + var _a5, _b3; + const changed = this.state.autoScrollEnabled !== value; + this.state.autoScrollEnabled = value; + if (changed) { + (_b3 = (_a5 = this._callbacks).onAutoScrollChanged) == null ? void 0 : _b3.call(_a5, value); + } + } + // ============================================ + // Response Timer State + // ============================================ + get responseStartTime() { + return this.state.responseStartTime; + } + set responseStartTime(value) { + this.state.responseStartTime = value; + } + get flavorTimerInterval() { + return this.state.flavorTimerInterval; + } + set flavorTimerInterval(value) { + this.state.flavorTimerInterval = value; + this.flavorTimerIntervalWindow = value === null ? null : this.getDefaultTimerWindow(); + } + get pendingNewSessionPlan() { + return this.state.pendingNewSessionPlan; + } + set pendingNewSessionPlan(value) { + this.state.pendingNewSessionPlan = value; + } + get planFilePath() { + return this.state.planFilePath; + } + set planFilePath(value) { + this.state.planFilePath = value; + } + get prePlanPermissionMode() { + return this.state.prePlanPermissionMode; + } + set prePlanPermissionMode(value) { + this.state.prePlanPermissionMode = value; + } + // ============================================ + // Reset Methods + // ============================================ + setThinkingIndicatorTimeout(value, ownerWindow) { + this.state.thinkingIndicatorTimeout = value; + this.thinkingIndicatorTimeoutWindow = value === null ? null : ownerWindow; + } + clearThinkingIndicatorTimeout(fallbackWindow = null) { + var _a5, _b3; + if (this.state.thinkingIndicatorTimeout) { + const ownerWindow = (_b3 = (_a5 = this.thinkingIndicatorTimeoutWindow) != null ? _a5 : fallbackWindow) != null ? _b3 : this.getDefaultTimerWindow(); + ownerWindow == null ? void 0 : ownerWindow.clearTimeout(this.state.thinkingIndicatorTimeout); + this.state.thinkingIndicatorTimeout = null; + this.thinkingIndicatorTimeoutWindow = null; + } + } + setFlavorTimerInterval(value, ownerWindow) { + this.state.flavorTimerInterval = value; + this.flavorTimerIntervalWindow = value === null ? null : ownerWindow; + } + clearFlavorTimerInterval() { + var _a5; + if (this.state.flavorTimerInterval) { + const ownerWindow = (_a5 = this.flavorTimerIntervalWindow) != null ? _a5 : this.getDefaultTimerWindow(); + ownerWindow == null ? void 0 : ownerWindow.clearInterval(this.state.flavorTimerInterval); + this.state.flavorTimerInterval = null; + this.flavorTimerIntervalWindow = null; + } + } + resetStreamingState() { + this.state.currentContentEl = null; + this.state.currentTextEl = null; + this.state.currentTextContent = ""; + this.state.currentThinkingState = null; + this.state.isStreaming = false; + this.state.cancelRequested = false; + this.clearThinkingIndicatorTimeout(); + this.clearFlavorTimerInterval(); + this.state.responseStartTime = null; + } + clearMaps() { + this.state.toolCallElements.clear(); + this.state.writeEditStates.clear(); + this.state.pendingTools.clear(); + } + resetForNewConversation() { + this.clearMessages(); + this.resetStreamingState(); + this.clearMaps(); + this.state.queuedMessage = null; + this.usage = null; + this.currentTodos = null; + this.autoScrollEnabled = true; + } + getPersistedMessages() { + return this.state.messages; + } + getDefaultTimerWindow() { + return typeof window === "undefined" ? null : window; + } +}; + +// src/features/chat/ui/BangBashModeManager.ts +var import_obsidian34 = require("obsidian"); +var BangBashModeManager = class { + constructor(inputEl, callbacks) { + this.state = { active: false, rawCommand: "" }; + this.isSubmitting = false; + this.originalPlaceholder = ""; + this.inputEl = inputEl; + this.callbacks = callbacks; + this.originalPlaceholder = inputEl.placeholder; + } + handleTriggerKey(e2) { + if (!this.state.active && this.inputEl.value === "" && e2.key === "!") { + if (this.enterMode()) { + e2.preventDefault(); + return true; + } + } + return false; + } + handleInputChange() { + if (!this.state.active) return; + this.state.rawCommand = this.inputEl.value; + } + enterMode() { + const wrapper = this.callbacks.getInputWrapper(); + if (!wrapper) return false; + wrapper.addClass("claudian-input-bang-bash-mode"); + this.state = { active: true, rawCommand: "" }; + this.inputEl.placeholder = t10("chat.bangBash.placeholder"); + return true; + } + exitMode() { + const wrapper = this.callbacks.getInputWrapper(); + if (wrapper) { + wrapper.removeClass("claudian-input-bang-bash-mode"); + } + this.state = { active: false, rawCommand: "" }; + this.inputEl.placeholder = this.originalPlaceholder; + } + handleKeydown(e2) { + if (!this.state.active) return false; + if (e2.key === "Enter" && !e2.shiftKey && !e2.isComposing) { + e2.preventDefault(); + if (this.state.rawCommand.trim()) { + void this.submit(); + } + return true; + } + if (e2.key === "Escape" && !e2.isComposing) { + e2.preventDefault(); + this.clear(); + return true; + } + return false; + } + isActive() { + return this.state.active; + } + getRawCommand() { + return this.state.rawCommand; + } + async submit() { + if (this.isSubmitting) return; + const rawCommand = this.state.rawCommand.trim(); + if (!rawCommand) return; + this.isSubmitting = true; + try { + this.clear(); + await this.callbacks.onSubmit(rawCommand); + } catch (e2) { + new import_obsidian34.Notice(`Command failed: ${e2 instanceof Error ? e2.message : String(e2)}`); + } finally { + this.isSubmitting = false; + } + } + clear() { + var _a5, _b3; + this.inputEl.value = ""; + this.exitMode(); + (_b3 = (_a5 = this.callbacks).resetInputHeight) == null ? void 0 : _b3.call(_a5); + } + destroy() { + this.exitMode(); + } +}; + +// src/features/chat/ui/FileContext.ts +var import_obsidian38 = require("obsidian"); + +// src/shared/mention/MentionDropdownController.ts +var import_obsidian35 = require("obsidian"); + +// src/utils/externalContext.ts +var fs27 = __toESM(require("fs")); +init_path(); +function normalizePathForComparison3(p) { + return normalizePathForComparison(p); +} +function normalizePathForDisplay(p) { + if (!p) return ""; + return p.replace(/\\/g, "/").replace(/\/+$/, ""); +} +function findConflictingPath(newPath, existingPaths) { + const normalizedNew = normalizePathForComparison3(newPath); + for (const existing of existingPaths) { + const normalizedExisting = normalizePathForComparison3(existing); + if (normalizedNew.startsWith(normalizedExisting + "/")) { + return { path: existing, type: "parent" }; + } + if (normalizedExisting.startsWith(normalizedNew + "/")) { + return { path: existing, type: "child" }; + } + } + return null; +} +function getFolderName(p) { + const normalized = normalizePathForDisplay(p); + const segments = normalized.split("/"); + return segments[segments.length - 1] || normalized; +} +function getContextDisplayName(normalizedPath, folderName, needsDisambiguation) { + if (!needsDisambiguation) return folderName; + const segments = normalizedPath.split("/").filter(Boolean); + if (segments.length < 2) return folderName; + const parent = segments[segments.length - 2]; + if (!parent) return folderName; + return `${parent}/${folderName}`; +} +function buildExternalContextDisplayEntries(externalContexts) { + var _a5; + const counts = /* @__PURE__ */ new Map(); + const normalizedPaths = /* @__PURE__ */ new Map(); + for (const contextPath of externalContexts) { + const normalized = normalizePathForComparison3(contextPath); + normalizedPaths.set(contextPath, normalized); + const folderName = getFolderName(normalized); + counts.set(folderName, ((_a5 = counts.get(folderName)) != null ? _a5 : 0) + 1); + } + return externalContexts.map((contextRoot) => { + var _a6, _b3; + const normalized = (_a6 = normalizedPaths.get(contextRoot)) != null ? _a6 : normalizePathForComparison3(contextRoot); + const folderName = getFolderName(contextRoot); + const needsDisambiguation = ((_b3 = counts.get(folderName)) != null ? _b3 : 0) > 1; + const displayName = getContextDisplayName(normalized, folderName, needsDisambiguation); + return { + contextRoot, + displayName, + displayNameLower: displayName.toLowerCase() + }; + }); +} +function validateDirectoryPath(p) { + try { + const stats = fs27.statSync(p); + if (!stats.isDirectory()) { + return { valid: false, error: "Path exists but is not a directory" }; + } + return { valid: true }; + } catch (err) { + const error48 = err; + if (error48.code === "ENOENT") { + return { valid: false, error: "Path does not exist" }; + } + if (error48.code === "EACCES") { + return { valid: false, error: "Permission denied" }; + } + return { valid: false, error: `Cannot access path: ${error48.message}` }; + } +} +function isValidDirectoryPath(p) { + return validateDirectoryPath(p).valid; +} +function filterValidPaths(paths) { + return paths.filter(isValidDirectoryPath); +} +function isDuplicatePath(newPath, existingPaths) { + const normalizedNew = normalizePathForComparison3(newPath); + return existingPaths.some((existing) => normalizePathForComparison3(existing) === normalizedNew); +} + +// src/utils/externalContextScanner.ts +var fs28 = __toESM(require("fs")); +var path24 = __toESM(require("path")); +init_path(); +var CACHE_TTL_MS = 3e4; +var MAX_FILES_PER_PATH = 1e3; +var MAX_DEPTH = 10; +var SKIP_DIRECTORIES = /* @__PURE__ */ new Set([ + "node_modules", + "__pycache__", + "venv", + ".venv", + ".git", + ".svn", + ".hg", + "dist", + "build", + "out", + ".next", + ".nuxt", + "target", + "vendor", + "Pods" +]); +var ExternalContextScanner = class { + constructor() { + this.cache = /* @__PURE__ */ new Map(); + } + scanPaths(externalContextPaths) { + const allFiles = []; + const now = Date.now(); + for (const contextPath of externalContextPaths) { + const expandedPath = normalizePathForFilesystem(contextPath); + const cached2 = this.cache.get(expandedPath); + if (cached2 && now - cached2.timestamp < CACHE_TTL_MS) { + allFiles.push(...cached2.files); + continue; + } + const files = this.scanDirectory(expandedPath, expandedPath, 0); + this.cache.set(expandedPath, { files, timestamp: now }); + allFiles.push(...files); + } + return allFiles; + } + scanDirectory(dir, contextRoot, depth) { + if (depth > MAX_DEPTH) return []; + const files = []; + try { + if (!fs28.existsSync(dir)) return []; + const stat = fs28.statSync(dir); + if (!stat.isDirectory()) return []; + const entries = fs28.readdirSync(dir, { withFileTypes: true }); + for (const entry of entries) { + if (entry.name.startsWith(".")) continue; + if (SKIP_DIRECTORIES.has(entry.name)) continue; + if (entry.isSymbolicLink()) continue; + const fullPath = path24.join(dir, entry.name); + if (entry.isDirectory()) { + const subFiles = this.scanDirectory(fullPath, contextRoot, depth + 1); + files.push(...subFiles); + } else if (entry.isFile()) { + try { + const fileStat = fs28.statSync(fullPath); + files.push({ + path: fullPath, + name: entry.name, + relativePath: path24.relative(contextRoot, fullPath), + contextRoot, + mtime: fileStat.mtimeMs + }); + } catch (e2) { + } + } + if (files.length >= MAX_FILES_PER_PATH) break; + } + } catch (e2) { + } + return files; + } + invalidateCache() { + this.cache.clear(); + } + invalidatePath(contextPath) { + const expandedPath = normalizePathForFilesystem(contextPath); + this.cache.delete(expandedPath); + } +}; +var externalContextScanner = new ExternalContextScanner(); + +// src/shared/components/SelectableDropdown.ts +var SelectableDropdown = class { + constructor(containerEl, options) { + this.dropdownEl = null; + this.items = []; + this.itemEls = []; + this.selectedIndex = 0; + this.containerEl = containerEl; + this.options = options; + } + isVisible() { + var _a5, _b3; + return (_b3 = (_a5 = this.dropdownEl) == null ? void 0 : _a5.hasClass("visible")) != null ? _b3 : false; + } + getElement() { + return this.dropdownEl; + } + getSelectedIndex() { + return this.selectedIndex; + } + getSelectedItem() { + var _a5; + return (_a5 = this.items[this.selectedIndex]) != null ? _a5 : null; + } + getItems() { + return this.items; + } + hide() { + if (this.dropdownEl) { + this.dropdownEl.removeClass("visible"); + } + } + destroy() { + if (this.dropdownEl) { + this.dropdownEl.remove(); + this.dropdownEl = null; + } + } + render(options) { + var _a5; + this.items = options.items; + this.selectedIndex = options.selectedIndex; + if (!this.dropdownEl) { + this.dropdownEl = this.createDropdownElement(); + } + this.dropdownEl.empty(); + this.itemEls = []; + if (options.items.length === 0) { + const emptyEl = this.dropdownEl.createDiv({ cls: this.options.emptyClassName }); + emptyEl.setText(options.emptyText); + } else { + for (let i = 0; i < options.items.length; i++) { + const item = options.items[i]; + const itemEl = this.dropdownEl.createDiv({ cls: this.options.itemClassName }); + const extraClass = (_a5 = options.getItemClass) == null ? void 0 : _a5.call(options, item); + if (Array.isArray(extraClass)) { + extraClass.forEach((cls) => itemEl.addClass(cls)); + } else if (extraClass) { + itemEl.addClass(extraClass); + } + if (i === this.selectedIndex) { + itemEl.addClass("selected"); + } + options.renderItem(item, itemEl); + itemEl.addEventListener("click", (e2) => { + var _a6; + this.selectedIndex = i; + this.updateSelection(); + (_a6 = options.onItemClick) == null ? void 0 : _a6.call(options, item, i, e2); + }); + itemEl.addEventListener("mouseenter", () => { + var _a6; + this.selectedIndex = i; + this.updateSelection(); + (_a6 = options.onItemHover) == null ? void 0 : _a6.call(options, item, i); + }); + this.itemEls.push(itemEl); + } + } + this.dropdownEl.addClass("visible"); + } + updateSelection() { + this.itemEls.forEach((itemEl, index) => { + if (index === this.selectedIndex) { + itemEl.addClass("selected"); + itemEl.scrollIntoView({ block: "nearest" }); + } else { + itemEl.removeClass("selected"); + } + }); + } + moveSelection(delta) { + const maxIndex = this.items.length - 1; + this.selectedIndex = Math.max(0, Math.min(maxIndex, this.selectedIndex + delta)); + this.updateSelection(); + } + createDropdownElement() { + const className = this.options.fixed && this.options.fixedClassName ? `${this.options.listClassName} ${this.options.fixedClassName}` : this.options.listClassName; + return this.containerEl.createDiv({ cls: className }); + } +}; + +// src/shared/mention/MentionDropdownController.ts +var MentionDropdownController = class { + constructor(containerEl, inputEl, callbacks, options = {}) { + this.mentionStartIndex = -1; + this.selectedMentionIndex = 0; + this.filteredMentionItems = []; + this.filteredContextFiles = []; + this.activeContextFilter = null; + this.activeAgentFilter = false; + this.mcpManager = null; + this.agentService = null; + this.debounceTimer = null; + var _a5; + this.containerEl = containerEl; + this.inputEl = inputEl; + this.callbacks = callbacks; + this.fixed = (_a5 = options.fixed) != null ? _a5 : false; + this.dropdown = new SelectableDropdown(this.containerEl, { + listClassName: "claudian-mention-dropdown", + itemClassName: "claudian-mention-item", + emptyClassName: "claudian-mention-empty", + fixed: this.fixed, + fixedClassName: "claudian-mention-dropdown-fixed" + }); + } + setMcpManager(manager) { + this.mcpManager = manager; + } + setAgentService(service) { + if (this.agentService !== service && this.dropdown.isVisible()) { + this.hide(); + } + this.agentService = service; + } + preScanExternalContexts() { + const externalContexts = this.callbacks.getExternalContexts() || []; + if (externalContexts.length === 0) return; + window.setTimeout(() => { + try { + externalContextScanner.scanPaths(externalContexts); + } catch (e2) { + } + }, 0); + } + isVisible() { + return this.dropdown.isVisible(); + } + hide() { + this.dropdown.hide(); + this.mentionStartIndex = -1; + } + containsElement(el2) { + var _a5, _b3; + return (_b3 = (_a5 = this.dropdown.getElement()) == null ? void 0 : _a5.contains(el2)) != null ? _b3 : false; + } + destroy() { + if (this.debounceTimer !== null) { + window.clearTimeout(this.debounceTimer); + } + this.dropdown.destroy(); + } + updateMcpMentionsFromText(text) { + var _a5, _b3; + if (!this.mcpManager) return; + const validNames = new Set( + this.mcpManager.getContextSavingServers().map((s2) => s2.name) + ); + const newMentions = extractMcpMentions(text, validNames); + const changed = this.callbacks.setMentionedMcpServers(newMentions); + if (changed) { + (_b3 = (_a5 = this.callbacks).onMcpMentionChange) == null ? void 0 : _b3.call(_a5, newMentions); + } + } + handleInputChange() { + if (this.debounceTimer !== null) { + window.clearTimeout(this.debounceTimer); + } + this.debounceTimer = window.setTimeout(() => { + const text = this.inputEl.value; + this.updateMcpMentionsFromText(text); + const cursorPos = this.inputEl.selectionStart || 0; + const textBeforeCursor = text.substring(0, cursorPos); + const lastAtIndex = textBeforeCursor.lastIndexOf("@"); + if (lastAtIndex === -1) { + this.hide(); + return; + } + const charBeforeAt = lastAtIndex > 0 ? textBeforeCursor[lastAtIndex - 1] : " "; + if (!/\s/.test(charBeforeAt) && lastAtIndex !== 0) { + this.hide(); + return; + } + const searchText = textBeforeCursor.substring(lastAtIndex + 1); + if (/\s/.test(searchText)) { + this.hide(); + return; + } + this.mentionStartIndex = lastAtIndex; + this.showMentionDropdown(searchText); + }, 200); + } + handleKeydown(e2) { + if (!this.dropdown.isVisible()) return false; + if (e2.key === "ArrowDown") { + e2.preventDefault(); + this.dropdown.moveSelection(1); + this.selectedMentionIndex = this.dropdown.getSelectedIndex(); + return true; + } + if (e2.key === "ArrowUp") { + e2.preventDefault(); + this.dropdown.moveSelection(-1); + this.selectedMentionIndex = this.dropdown.getSelectedIndex(); + return true; + } + if ((e2.key === "Enter" || e2.key === "Tab") && !e2.isComposing) { + e2.preventDefault(); + this.selectMentionItem(); + return true; + } + if (e2.key === "Escape" && !e2.isComposing) { + e2.preventDefault(); + if (this.activeContextFilter || this.activeAgentFilter) { + this.returnToFirstLevel(); + return true; + } + this.hide(); + return true; + } + return false; + } + showMentionDropdown(searchText) { + const searchLower = searchText.toLowerCase(); + this.filteredMentionItems = []; + this.filteredContextFiles = []; + const externalContexts = this.callbacks.getExternalContexts() || []; + const contextEntries = buildExternalContextDisplayEntries(externalContexts); + const isFilterSearch = searchText.includes("/"); + let fileSearchText = searchLower; + if (isFilterSearch && searchLower.startsWith("agents/")) { + this.activeAgentFilter = true; + this.activeContextFilter = null; + const agentSearchText = searchText.substring("agents/".length).toLowerCase(); + if (this.agentService) { + const matchingAgents = this.agentService.searchAgents(agentSearchText); + for (const agent of matchingAgents) { + this.filteredMentionItems.push({ + type: "agent", + id: agent.id, + name: agent.name, + description: agent.description, + source: agent.source + }); + } + } + this.selectedMentionIndex = 0; + this.renderMentionDropdown(); + return; + } + if (isFilterSearch) { + const matchingContext = contextEntries.filter((entry) => searchLower.startsWith(`${entry.displayNameLower}/`)).sort((a, b2) => b2.displayNameLower.length - a.displayNameLower.length)[0]; + if (matchingContext) { + const prefixLength = matchingContext.displayName.length + 1; + fileSearchText = searchText.substring(prefixLength).toLowerCase(); + this.activeContextFilter = { + folderName: matchingContext.displayName, + contextRoot: matchingContext.contextRoot + }; + } else { + this.activeContextFilter = null; + } + } + if (this.activeContextFilter && isFilterSearch) { + const contextFiles = externalContextScanner.scanPaths([this.activeContextFilter.contextRoot]); + this.filteredContextFiles = contextFiles.filter((file2) => { + const relativePath = file2.relativePath.replace(/\\/g, "/"); + const pathLower = relativePath.toLowerCase(); + const nameLower = file2.name.toLowerCase(); + return pathLower.includes(fileSearchText) || nameLower.includes(fileSearchText); + }).sort((a, b2) => { + const aNameMatch = a.name.toLowerCase().startsWith(fileSearchText); + const bNameMatch = b2.name.toLowerCase().startsWith(fileSearchText); + if (aNameMatch && !bNameMatch) return -1; + if (!aNameMatch && bNameMatch) return 1; + return b2.mtime - a.mtime; + }); + for (const file2 of this.filteredContextFiles) { + const relativePath = file2.relativePath.replace(/\\/g, "/"); + this.filteredMentionItems.push({ + type: "context-file", + name: relativePath, + absolutePath: file2.path, + contextRoot: file2.contextRoot, + folderName: this.activeContextFilter.folderName + }); + } + const firstVaultItemIndex2 = this.filteredMentionItems.length; + const vaultItemCount2 = this.appendVaultItems(searchLower); + if (this.filteredContextFiles.length === 0 && vaultItemCount2 > 0) { + this.selectedMentionIndex = firstVaultItemIndex2; + } else { + this.selectedMentionIndex = 0; + } + this.renderMentionDropdown(); + return; + } + this.activeContextFilter = null; + this.activeAgentFilter = false; + if (this.mcpManager) { + const mcpServers = this.mcpManager.getContextSavingServers(); + for (const server of mcpServers) { + if (server.name.toLowerCase().includes(searchLower)) { + this.filteredMentionItems.push({ + type: "mcp-server", + name: server.name + }); + } + } + } + if (this.agentService) { + const hasAgents = this.agentService.searchAgents("").length > 0; + if (hasAgents && "agents".includes(searchLower)) { + this.filteredMentionItems.push({ + type: "agent-folder", + name: "Agents" + }); + } + } + if (contextEntries.length > 0) { + const matchingFolders = /* @__PURE__ */ new Set(); + for (const entry of contextEntries) { + if (entry.displayNameLower.includes(searchLower) && !matchingFolders.has(entry.displayName)) { + matchingFolders.add(entry.displayName); + this.filteredMentionItems.push({ + type: "context-folder", + name: entry.displayName, + contextRoot: entry.contextRoot, + folderName: entry.displayName + }); + } + } + } + const firstVaultItemIndex = this.filteredMentionItems.length; + const vaultItemCount = this.appendVaultItems(searchLower); + this.selectedMentionIndex = vaultItemCount > 0 ? firstVaultItemIndex : 0; + this.renderMentionDropdown(); + } + appendVaultItems(searchLower) { + var _a5; + const compare = (a, b2) => { + if (a.startsWithQuery !== b2.startsWithQuery) return a.startsWithQuery ? -1 : 1; + if (a.mtime !== b2.mtime) return b2.mtime - a.mtime; + if (a.type !== b2.type) return a.type === "file" ? -1 : 1; + return a.path.localeCompare(b2.path); + }; + const allFiles = this.callbacks.getCachedVaultFiles(); + const folderMtimeMap = /* @__PURE__ */ new Map(); + for (const f9 of allFiles) { + const parts = f9.path.split("/"); + for (let i = 1; i < parts.length; i++) { + const folderPath = parts.slice(0, i).join("/"); + const existing = (_a5 = folderMtimeMap.get(folderPath)) != null ? _a5 : 0; + if (f9.stat.mtime > existing) { + folderMtimeMap.set(folderPath, f9.stat.mtime); + } + } + } + const scoredFolders = this.callbacks.getCachedVaultFolders().map((f9) => ({ + name: f9.name, + path: f9.path.replace(/\\/g, "/").replace(/\/+$/, "") + })).filter( + (f9) => f9.path.length > 0 && (f9.path.toLowerCase().includes(searchLower) || f9.name.toLowerCase().includes(searchLower)) + ).map((f9) => { + var _a6; + return { + type: "folder", + name: f9.name, + path: f9.path, + startsWithQuery: f9.name.toLowerCase().startsWith(searchLower), + mtime: (_a6 = folderMtimeMap.get(f9.path)) != null ? _a6 : 0 + }; + }).sort(compare).slice(0, 50); + const scoredFiles = allFiles.filter( + (f9) => f9.path.toLowerCase().includes(searchLower) || f9.name.toLowerCase().includes(searchLower) + ).map((f9) => ({ + type: "file", + name: f9.name, + path: f9.path, + file: f9, + startsWithQuery: f9.name.toLowerCase().startsWith(searchLower), + mtime: f9.stat.mtime + })).sort(compare).slice(0, 100); + const merged = [...scoredFolders, ...scoredFiles].sort(compare); + for (const item of merged) { + if (item.type === "folder") { + this.filteredMentionItems.push({ type: "folder", name: item.name, path: item.path }); + } else { + this.filteredMentionItems.push({ type: "file", name: item.name, path: item.path, file: item.file }); + } + } + return merged.length; + } + renderMentionDropdown() { + this.dropdown.render({ + items: this.filteredMentionItems, + selectedIndex: this.selectedMentionIndex, + emptyText: "No matches", + getItemClass: (item) => { + switch (item.type) { + case "mcp-server": + return "mcp-server"; + case "folder": + return "vault-folder"; + case "agent": + return "agent"; + case "agent-folder": + return "agent-folder"; + case "context-file": + return "context-file"; + case "context-folder": + return "context-folder"; + default: + return void 0; + } + }, + renderItem: (item, itemEl) => { + const iconEl = itemEl.createSpan({ cls: "claudian-mention-icon" }); + switch (item.type) { + case "mcp-server": + appendMcpIcon(iconEl); + break; + case "agent": + case "agent-folder": + (0, import_obsidian35.setIcon)(iconEl, "bot"); + break; + case "context-file": + (0, import_obsidian35.setIcon)(iconEl, "folder-open"); + break; + case "folder": + case "context-folder": + (0, import_obsidian35.setIcon)(iconEl, "folder"); + break; + default: + (0, import_obsidian35.setIcon)(iconEl, "file-text"); + } + const textEl = itemEl.createSpan({ cls: "claudian-mention-text" }); + switch (item.type) { + case "mcp-server": + textEl.createSpan({ cls: "claudian-mention-name" }).setText(`@${item.name}`); + break; + case "agent-folder": + textEl.createSpan({ + cls: "claudian-mention-name claudian-mention-name-agent-folder" + }).setText(`@${item.name}/`); + break; + case "agent": { + textEl.createSpan({ + cls: "claudian-mention-name claudian-mention-name-agent" + }).setText(`@${item.id}`); + if (item.description) { + textEl.createSpan({ cls: "claudian-mention-agent-desc" }).setText(item.description); + } + break; + } + case "context-folder": + textEl.createSpan({ + cls: "claudian-mention-name claudian-mention-name-folder" + }).setText(`@${item.name}/`); + break; + case "context-file": + textEl.createSpan({ + cls: "claudian-mention-name claudian-mention-name-context" + }).setText(item.name); + break; + case "folder": + textEl.createSpan({ + cls: "claudian-mention-name claudian-mention-name-folder" + }).setText(`@${item.path}/`); + break; + default: + textEl.createSpan({ cls: "claudian-mention-path" }).setText(item.path || item.name); + } + }, + onItemClick: (item, index, e2) => { + if (item.type === "context-folder" || item.type === "agent-folder") { + e2.stopPropagation(); + } + this.selectedMentionIndex = index; + this.selectMentionItem(); + }, + onItemHover: (_item, index) => { + this.selectedMentionIndex = index; + } + }); + if (this.fixed) { + this.positionFixed(); + } + } + positionFixed() { + const dropdownEl = this.dropdown.getElement(); + if (!dropdownEl) return; + const inputRect = this.inputEl.getBoundingClientRect(); + dropdownEl.setCssProps({ + "--claudian-fixed-dropdown-bottom": `${window.innerHeight - inputRect.top + 4}px`, + "--claudian-fixed-dropdown-left": `${inputRect.left}px`, + "--claudian-fixed-dropdown-width": `${Math.max(inputRect.width, 280)}px` + }); + } + insertReplacement(beforeAt, replacement, afterCursor) { + this.inputEl.value = beforeAt + replacement + afterCursor; + this.inputEl.selectionStart = this.inputEl.selectionEnd = beforeAt.length + replacement.length; + } + returnToFirstLevel() { + const text = this.inputEl.value; + const beforeAt = text.substring(0, this.mentionStartIndex); + const cursorPos = this.inputEl.selectionStart || 0; + const afterCursor = text.substring(cursorPos); + this.inputEl.value = beforeAt + "@" + afterCursor; + this.inputEl.selectionStart = this.inputEl.selectionEnd = beforeAt.length + 1; + this.activeContextFilter = null; + this.activeAgentFilter = false; + this.showMentionDropdown(""); + } + selectMentionItem() { + var _a5, _b3, _c2, _d, _e2, _f2; + if (this.filteredMentionItems.length === 0) return; + const selectedIndex = this.dropdown.getSelectedIndex(); + this.selectedMentionIndex = selectedIndex; + const selectedItem = this.filteredMentionItems[selectedIndex]; + if (!selectedItem) return; + const text = this.inputEl.value; + const beforeAt = text.substring(0, this.mentionStartIndex); + const cursorPos = this.inputEl.selectionStart || 0; + const afterCursor = text.substring(cursorPos); + switch (selectedItem.type) { + case "mcp-server": { + const replacement = `@${selectedItem.name} `; + this.insertReplacement(beforeAt, replacement, afterCursor); + this.callbacks.addMentionedMcpServer(selectedItem.name); + (_b3 = (_a5 = this.callbacks).onMcpMentionChange) == null ? void 0 : _b3.call(_a5, this.callbacks.getMentionedMcpServers()); + break; + } + case "agent-folder": + this.activeAgentFilter = true; + this.inputEl.focus(); + this.showMentionDropdown("Agents/"); + return; + case "agent": { + const replacement = `@${selectedItem.id} (agent) `; + this.insertReplacement(beforeAt, replacement, afterCursor); + (_d = (_c2 = this.callbacks).onAgentMentionSelect) == null ? void 0 : _d.call(_c2, selectedItem.id); + break; + } + case "context-folder": { + const replacement = `@${selectedItem.name}/`; + this.insertReplacement(beforeAt, replacement, afterCursor); + this.inputEl.focus(); + this.handleInputChange(); + return; + } + case "context-file": { + const displayName = selectedItem.folderName ? `@${selectedItem.folderName}/${selectedItem.name}` : `@${selectedItem.name}`; + if (selectedItem.absolutePath) { + this.callbacks.onAttachFile(selectedItem.absolutePath); + } + this.insertReplacement(beforeAt, `${displayName} `, afterCursor); + break; + } + case "folder": { + const normalizedPath = this.callbacks.normalizePathForVault(selectedItem.path); + this.insertReplacement(beforeAt, `@${normalizedPath != null ? normalizedPath : selectedItem.path}/ `, afterCursor); + break; + } + default: { + const rawPath = (_f2 = (_e2 = selectedItem.file) == null ? void 0 : _e2.path) != null ? _f2 : selectedItem.path; + const normalizedPath = this.callbacks.normalizePathForVault(rawPath); + if (normalizedPath) { + this.callbacks.onAttachFile(normalizedPath); + } + this.insertReplacement(beforeAt, `@${normalizedPath != null ? normalizedPath : selectedItem.name} `, afterCursor); + break; + } + } + this.hide(); + this.inputEl.focus(); + } +}; + +// src/shared/mention/VaultMentionCache.ts +var import_obsidian36 = require("obsidian"); +var VaultFileCache = class { + constructor(app, options = {}) { + this.app = app; + this.options = options; + this.cachedFiles = []; + this.dirty = true; + this.isInitialized = false; + } + initializeInBackground() { + if (this.isInitialized) return; + window.setTimeout(() => { + this.tryRefreshFiles(); + }, 0); + } + markDirty() { + this.dirty = true; + } + getFiles() { + if (this.dirty || !this.isInitialized) { + this.tryRefreshFiles(); + } + return this.cachedFiles; + } + tryRefreshFiles() { + var _a5, _b3; + try { + this.cachedFiles = this.app.vault.getFiles(); + this.dirty = false; + } catch (error48) { + (_b3 = (_a5 = this.options).onLoadError) == null ? void 0 : _b3.call(_a5, error48); + if (this.cachedFiles.length > 0) { + this.dirty = false; + } + } finally { + this.isInitialized = true; + } + } +}; +function isVisibleFolder(folder) { + const normalizedPath = folder.path.replace(/\\/g, "/").replace(/\/+$/, ""); + if (!normalizedPath) return false; + return !normalizedPath.split("/").some((segment) => segment.startsWith(".")); +} +var VaultFolderCache = class { + constructor(app) { + this.app = app; + this.cachedFolders = []; + this.dirty = true; + this.isInitialized = false; + } + initializeInBackground() { + if (this.isInitialized) return; + window.setTimeout(() => { + this.tryRefreshFolders(); + }, 0); + } + markDirty() { + this.dirty = true; + } + getFolders() { + if (this.dirty || !this.isInitialized) { + this.tryRefreshFolders(); + } + return this.cachedFolders; + } + tryRefreshFolders() { + try { + this.cachedFolders = this.loadFolders(); + this.dirty = false; + } catch (e2) { + if (this.cachedFolders.length > 0) { + this.dirty = false; + } + } finally { + this.isInitialized = true; + } + } + loadFolders() { + return this.app.vault.getAllLoadedFiles().filter((file2) => file2 instanceof import_obsidian36.TFolder && isVisibleFolder(file2)); + } +}; + +// src/shared/mention/VaultMentionDataProvider.ts +var VaultMentionDataProvider = class { + constructor(app, options = {}) { + this.hasReportedFileLoadError = false; + this.fileCache = new VaultFileCache(app, { + onLoadError: () => { + var _a5; + if (this.hasReportedFileLoadError) return; + this.hasReportedFileLoadError = true; + (_a5 = options.onFileLoadError) == null ? void 0 : _a5.call(options); + } + }); + this.folderCache = new VaultFolderCache(app); + } + initializeInBackground() { + this.fileCache.initializeInBackground(); + this.folderCache.initializeInBackground(); + } + markFilesDirty() { + this.fileCache.markDirty(); + } + markFoldersDirty() { + this.folderCache.markDirty(); + } + getCachedVaultFiles() { + return this.fileCache.getFiles(); + } + getCachedVaultFolders() { + return this.folderCache.getFolders().map((folder) => ({ + name: folder.name, + path: folder.path + })); + } +}; + +// src/utils/contextMentionResolver.ts +var TRAILING_PUNCTUATION_REGEX = /[),.!?:;]+$/; +var BOUNDARY_PUNCTUATION = /* @__PURE__ */ new Set([",", ")", "!", "?", ":", ";"]); +function isWhitespace(char) { + return /\s/.test(char); +} +function collectMentionEndCandidates(text, pathStart) { + const candidates = /* @__PURE__ */ new Set(); + for (let index = pathStart; index < text.length; index++) { + const char = text[index]; + if (isWhitespace(char)) { + candidates.add(index); + continue; + } + if (BOUNDARY_PUNCTUATION.has(char)) { + candidates.add(index + 1); + } + } + candidates.add(text.length); + return Array.from(candidates).sort((a, b2) => b2 - a); +} +function isMentionStart(text, index) { + if (text[index] !== "@") return false; + if (index === 0) return true; + return isWhitespace(text[index - 1]); +} +function normalizeMentionPath(pathText) { + return pathText.replace(/\\/g, "/").replace(/^\.?\//, "").replace(/\/+/g, "/").replace(/\/+$/, ""); +} +function normalizeForPlatformLookup(value) { + return process.platform === "win32" ? value.toLowerCase() : value; +} +function buildExternalContextLookup(files) { + const lookup = /* @__PURE__ */ new Map(); + for (const file2 of files) { + const normalized = normalizeMentionPath(file2.relativePath); + if (!normalized) continue; + const key = normalizeForPlatformLookup(normalized); + if (!lookup.has(key)) { + lookup.set(key, file2.path); + } + } + return lookup; +} +function resolveExternalMentionAtIndex(text, mentionStart, contextEntries, getContextLookup) { + const mentionBodyStart = mentionStart + 1; + let bestMatch = null; + for (const entry of contextEntries) { + const displayNameEnd = mentionBodyStart + entry.displayName.length; + if (displayNameEnd >= text.length) continue; + const mentionDisplayName = text.slice(mentionBodyStart, displayNameEnd).toLowerCase(); + if (mentionDisplayName !== entry.displayNameLower) continue; + const separator = text[displayNameEnd]; + if (separator !== "/" && separator !== "\\") continue; + const lookup = getContextLookup(entry.contextRoot); + const match = findBestMentionLookupMatch( + text, + displayNameEnd + 1, + lookup, + normalizeMentionPath, + normalizeForPlatformLookup + ); + if (!match) continue; + if (!bestMatch || match.endIndex > bestMatch.endIndex) { + bestMatch = match; + } + } + return bestMatch; +} +function findBestMentionLookupMatch(text, pathStart, pathLookup, normalizePath, normalizeLookupKey) { + var _a5, _b3; + if (pathLookup.size === 0 || pathStart >= text.length) return null; + const endCandidates = collectMentionEndCandidates(text, pathStart); + for (const endIndex of endCandidates) { + if (endIndex <= pathStart) continue; + const rawPath = text.slice(pathStart, endIndex); + const trailingPunctuation = (_b3 = (_a5 = rawPath.match(TRAILING_PUNCTUATION_REGEX)) == null ? void 0 : _a5[0]) != null ? _b3 : ""; + const rawPathWithoutPunctuation = trailingPunctuation ? rawPath.slice(0, -trailingPunctuation.length) : rawPath; + const normalizedPath = normalizePath(rawPathWithoutPunctuation); + if (!normalizedPath) continue; + const resolvedPath = pathLookup.get(normalizeLookupKey(normalizedPath)); + if (resolvedPath) { + return { + resolvedPath, + endIndex, + trailingPunctuation + }; + } + } + return null; +} +function createExternalContextLookupGetter(getContextFiles) { + const lookupCache = /* @__PURE__ */ new Map(); + return (contextRoot) => { + const cached2 = lookupCache.get(contextRoot); + if (cached2) return cached2; + const lookup = buildExternalContextLookup(getContextFiles(contextRoot)); + lookupCache.set(contextRoot, lookup); + return lookup; + }; +} + +// src/features/chat/ui/FileContext.ts +init_path(); + +// src/features/chat/ui/file-context/state/FileContextState.ts +var FileContextState = class { + constructor() { + this.attachedFiles = /* @__PURE__ */ new Set(); + this.sessionStarted = false; + this.mentionedMcpServers = /* @__PURE__ */ new Set(); + this.currentNoteSent = false; + } + getAttachedFiles() { + return new Set(this.attachedFiles); + } + hasSentCurrentNote() { + return this.currentNoteSent; + } + markCurrentNoteSent() { + this.currentNoteSent = true; + } + isSessionStarted() { + return this.sessionStarted; + } + startSession() { + this.sessionStarted = true; + } + resetForNewConversation() { + this.sessionStarted = false; + this.currentNoteSent = false; + this.attachedFiles.clear(); + this.clearMcpMentions(); + } + resetForLoadedConversation(hasMessages) { + this.currentNoteSent = hasMessages; + this.attachedFiles.clear(); + this.sessionStarted = hasMessages; + this.clearMcpMentions(); + } + setAttachedFiles(files) { + this.attachedFiles.clear(); + for (const file2 of files) { + this.attachedFiles.add(file2); + } + } + attachFile(path27) { + this.attachedFiles.add(path27); + } + detachFile(path27) { + this.attachedFiles.delete(path27); + } + clearAttachments() { + this.attachedFiles.clear(); + } + getMentionedMcpServers() { + return new Set(this.mentionedMcpServers); + } + clearMcpMentions() { + this.mentionedMcpServers.clear(); + } + setMentionedMcpServers(mentions) { + const changed = mentions.size !== this.mentionedMcpServers.size || [...mentions].some((name) => !this.mentionedMcpServers.has(name)); + if (changed) { + this.mentionedMcpServers = new Set(mentions); + } + return changed; + } + addMentionedMcpServer(name) { + this.mentionedMcpServers.add(name); + } +}; + +// src/features/chat/ui/file-context/view/FileChipsView.ts +var import_obsidian37 = require("obsidian"); +var FileChipsView = class { + constructor(containerEl, callbacks) { + this.containerEl = containerEl; + this.callbacks = callbacks; + const firstChild = this.containerEl.firstChild; + this.fileIndicatorEl = this.containerEl.createDiv({ cls: "claudian-file-indicator" }); + if (firstChild) { + this.containerEl.insertBefore(this.fileIndicatorEl, firstChild); + } + } + destroy() { + this.fileIndicatorEl.remove(); + } + renderCurrentNote(filePath) { + this.fileIndicatorEl.empty(); + if (!filePath) { + this.fileIndicatorEl.removeClass("claudian-visible-flex"); + this.fileIndicatorEl.addClass("claudian-hidden"); + return; + } + this.fileIndicatorEl.addClass("claudian-visible-flex"); + this.fileIndicatorEl.removeClass("claudian-hidden"); + this.renderFileChip(filePath, () => { + this.callbacks.onRemoveAttachment(filePath); + }); + } + renderFileChip(filePath, onRemove) { + const chipEl = this.fileIndicatorEl.createDiv({ cls: "claudian-file-chip" }); + const iconEl = chipEl.createSpan({ cls: "claudian-file-chip-icon" }); + (0, import_obsidian37.setIcon)(iconEl, "file-text"); + const normalizedPath = filePath.replace(/\\/g, "/"); + const filename = normalizedPath.split("/").pop() || filePath; + const nameEl = chipEl.createSpan({ cls: "claudian-file-chip-name" }); + nameEl.setText(filename); + nameEl.setAttribute("title", filePath); + const removeEl = chipEl.createSpan({ cls: "claudian-file-chip-remove" }); + removeEl.setText("\xD7"); + removeEl.setAttribute("aria-label", "Remove"); + chipEl.addEventListener("click", (e2) => { + if (!e2.target.closest(".claudian-file-chip-remove")) { + this.callbacks.onOpenFile(filePath); + } + }); + removeEl.addEventListener("click", () => { + onRemove(); + }); + } +}; + +// src/features/chat/ui/FileContext.ts +var FileContextManager = class { + constructor(app, chipsContainerEl, inputEl, callbacks, dropdownContainerEl) { + this.deleteEventRef = null; + this.renameEventRef = null; + // Current note (shown as chip) + this.currentNotePath = null; + // MCP server support + this.onMcpMentionChange = null; + this.app = app; + this.chipsContainerEl = chipsContainerEl; + this.dropdownContainerEl = dropdownContainerEl != null ? dropdownContainerEl : chipsContainerEl; + this.inputEl = inputEl; + this.callbacks = callbacks; + this.state = new FileContextState(); + this.mentionDataProvider = new VaultMentionDataProvider(this.app); + this.mentionDataProvider.initializeInBackground(); + this.chipsView = new FileChipsView(this.chipsContainerEl, { + onRemoveAttachment: (filePath) => { + if (filePath === this.currentNotePath) { + this.currentNotePath = null; + this.state.detachFile(filePath); + this.refreshCurrentNoteChip(); + } + }, + onOpenFile: (filePath) => { + void (async () => { + const file2 = this.app.vault.getAbstractFileByPath(filePath); + if (!(file2 instanceof import_obsidian38.TFile)) { + new import_obsidian38.Notice(`Could not open file: ${filePath}`); + return; + } + try { + await this.app.workspace.getLeaf().openFile(file2); + } catch (error48) { + new import_obsidian38.Notice(`Failed to open file: ${error48 instanceof Error ? error48.message : String(error48)}`); + } + })(); + } + }); + this.mentionDropdown = new MentionDropdownController( + this.dropdownContainerEl, + this.inputEl, + { + onAttachFile: (filePath) => this.state.attachFile(filePath), + onMcpMentionChange: (servers) => { + var _a5; + return (_a5 = this.onMcpMentionChange) == null ? void 0 : _a5.call(this, servers); + }, + onAgentMentionSelect: (agentId) => { + var _a5, _b3; + return (_b3 = (_a5 = this.callbacks).onAgentMentionSelect) == null ? void 0 : _b3.call(_a5, agentId); + }, + getMentionedMcpServers: () => this.state.getMentionedMcpServers(), + setMentionedMcpServers: (mentions) => this.state.setMentionedMcpServers(mentions), + addMentionedMcpServer: (name) => this.state.addMentionedMcpServer(name), + getExternalContexts: () => { + var _a5, _b3; + return ((_b3 = (_a5 = this.callbacks).getExternalContexts) == null ? void 0 : _b3.call(_a5)) || []; + }, + getCachedVaultFolders: () => this.mentionDataProvider.getCachedVaultFolders(), + getCachedVaultFiles: () => this.mentionDataProvider.getCachedVaultFiles(), + normalizePathForVault: (rawPath) => this.normalizePathForVault(rawPath) + } + ); + this.deleteEventRef = this.app.vault.on("delete", (file2) => { + if (file2 instanceof import_obsidian38.TFile) this.handleFileDeleted(file2.path); + }); + this.renameEventRef = this.app.vault.on("rename", (file2, oldPath) => { + if (file2 instanceof import_obsidian38.TFile) this.handleFileRenamed(oldPath, file2.path); + }); + } + /** Returns the current note path (shown as chip). */ + getCurrentNotePath() { + return this.currentNotePath; + } + getAttachedFiles() { + return this.state.getAttachedFiles(); + } + /** Checks whether current note should be sent for this session. */ + shouldSendCurrentNote(notePath) { + const resolvedPath = notePath != null ? notePath : this.currentNotePath; + return !!resolvedPath && !this.state.hasSentCurrentNote(); + } + /** Marks current note as sent (call after sending a message). */ + markCurrentNoteSent() { + this.state.markCurrentNoteSent(); + } + isSessionStarted() { + return this.state.isSessionStarted(); + } + startSession() { + this.state.startSession(); + } + /** Resets state for a new conversation. */ + resetForNewConversation() { + this.currentNotePath = null; + this.state.resetForNewConversation(); + this.refreshCurrentNoteChip(); + } + /** Resets state for loading an existing conversation. */ + resetForLoadedConversation(hasMessages) { + this.currentNotePath = null; + this.state.resetForLoadedConversation(hasMessages); + this.refreshCurrentNoteChip(); + } + /** Sets current note (for restoring persisted state). */ + setCurrentNote(notePath) { + this.currentNotePath = notePath; + if (notePath) { + this.state.attachFile(notePath); + } + this.refreshCurrentNoteChip(); + } + /** Auto-attaches the currently focused file (for new sessions). */ + autoAttachActiveFile() { + const activeFile = this.app.workspace.getActiveFile(); + if (activeFile && !this.hasExcludedTag(activeFile)) { + const normalizedPath = this.normalizePathForVault(activeFile.path); + if (normalizedPath) { + this.currentNotePath = normalizedPath; + this.state.attachFile(normalizedPath); + this.refreshCurrentNoteChip(); + } + } + } + /** Handles file open event. */ + handleFileOpen(file2) { + const normalizedPath = this.normalizePathForVault(file2.path); + if (!normalizedPath) return; + if (!this.state.isSessionStarted()) { + this.state.clearAttachments(); + if (!this.hasExcludedTag(file2)) { + this.currentNotePath = normalizedPath; + this.state.attachFile(normalizedPath); + } else { + this.currentNotePath = null; + } + this.refreshCurrentNoteChip(); + } + } + markFileCacheDirty() { + this.mentionDataProvider.markFilesDirty(); + } + markFolderCacheDirty() { + this.mentionDataProvider.markFoldersDirty(); + } + /** Handles input changes to detect @ mentions. */ + handleInputChange() { + this.mentionDropdown.handleInputChange(); + } + /** Handles keyboard navigation in mention dropdown. Returns true if handled. */ + handleMentionKeydown(e2) { + return this.mentionDropdown.handleKeydown(e2); + } + isMentionDropdownVisible() { + return this.mentionDropdown.isVisible(); + } + hideMentionDropdown() { + this.mentionDropdown.hide(); + } + containsElement(el2) { + return this.mentionDropdown.containsElement(el2); + } + transformContextMentions(text) { + var _a5, _b3; + const externalContexts = ((_b3 = (_a5 = this.callbacks).getExternalContexts) == null ? void 0 : _b3.call(_a5)) || []; + if (externalContexts.length === 0 || !text.includes("@")) return text; + const contextEntries = buildExternalContextDisplayEntries(externalContexts).sort((a, b2) => b2.displayNameLower.length - a.displayNameLower.length); + const getContextLookup = createExternalContextLookupGetter( + (contextRoot) => externalContextScanner.scanPaths([contextRoot]) + ); + let replaced = false; + let cursor = 0; + const chunks = []; + for (let index = 0; index < text.length; index++) { + if (!isMentionStart(text, index)) continue; + const resolved = resolveExternalMentionAtIndex(text, index, contextEntries, getContextLookup); + if (!resolved) continue; + chunks.push(text.slice(cursor, index)); + chunks.push(`${resolved.resolvedPath}${resolved.trailingPunctuation}`); + cursor = resolved.endIndex; + index = resolved.endIndex - 1; + replaced = true; + } + if (!replaced) return text; + chunks.push(text.slice(cursor)); + return chunks.join(""); + } + /** Cleans up event listeners (call on view close). */ + destroy() { + if (this.deleteEventRef) this.app.vault.offref(this.deleteEventRef); + if (this.renameEventRef) this.app.vault.offref(this.renameEventRef); + this.mentionDropdown.destroy(); + this.chipsView.destroy(); + } + /** Normalizes a file path to be vault-relative with forward slashes. */ + normalizePathForVault(rawPath) { + const vaultPath = getVaultPath(this.app); + return normalizePathForVault(rawPath, vaultPath); + } + refreshCurrentNoteChip() { + var _a5, _b3; + this.chipsView.renderCurrentNote(this.currentNotePath); + (_b3 = (_a5 = this.callbacks).onChipsChanged) == null ? void 0 : _b3.call(_a5); + } + handleFileRenamed(oldPath, newPath) { + const normalizedOld = this.normalizePathForVault(oldPath); + const normalizedNew = this.normalizePathForVault(newPath); + if (!normalizedOld) return; + let needsUpdate = false; + if (this.currentNotePath === normalizedOld) { + this.currentNotePath = normalizedNew; + needsUpdate = true; + } + if (this.state.getAttachedFiles().has(normalizedOld)) { + this.state.detachFile(normalizedOld); + if (normalizedNew) { + this.state.attachFile(normalizedNew); + } + needsUpdate = true; + } + if (needsUpdate) { + this.refreshCurrentNoteChip(); + } + } + handleFileDeleted(deletedPath) { + const normalized = this.normalizePathForVault(deletedPath); + if (!normalized) return; + let needsUpdate = false; + if (this.currentNotePath === normalized) { + this.currentNotePath = null; + needsUpdate = true; + } + if (this.state.getAttachedFiles().has(normalized)) { + this.state.detachFile(normalized); + needsUpdate = true; + } + if (needsUpdate) { + this.refreshCurrentNoteChip(); + } + } + // ======================================== + // MCP Server Support + // ======================================== + setMcpManager(manager) { + this.mentionDropdown.setMcpManager(manager); + } + setAgentService(agentService) { + this.mentionDropdown.setAgentService(agentService); + } + setOnMcpMentionChange(callback) { + this.onMcpMentionChange = callback; + } + /** + * Pre-scans external context paths in the background to warm the cache. + * Should be called when external context paths are added/changed. + */ + preScanExternalContexts() { + this.mentionDropdown.preScanExternalContexts(); + } + getMentionedMcpServers() { + return this.state.getMentionedMcpServers(); + } + clearMcpMentions() { + this.state.clearMcpMentions(); + } + updateMcpMentionsFromText(text) { + this.mentionDropdown.updateMcpMentionsFromText(text); + } + hasExcludedTag(file2) { + var _a5; + const excludedTags = this.callbacks.getExcludedTags(); + if (excludedTags.length === 0) return false; + const cache = this.app.metadataCache.getFileCache(file2); + if (!cache) return false; + const fileTags = []; + if ((_a5 = cache.frontmatter) == null ? void 0 : _a5.tags) { + const fmTags = cache.frontmatter.tags; + if (Array.isArray(fmTags)) { + fileTags.push(...fmTags.filter((tag) => typeof tag === "string").map((tag) => tag.replace(/^#/, ""))); + } else if (typeof fmTags === "string") { + fileTags.push(fmTags.replace(/^#/, "")); + } + } + if (cache.tags) { + fileTags.push(...cache.tags.map((t11) => t11.tag.replace(/^#/, ""))); + } + return fileTags.some((tag) => excludedTags.includes(tag)); + } +}; + +// src/features/chat/ui/ImageContext.ts +var import_obsidian39 = require("obsidian"); +var path25 = __toESM(require("path")); +var MAX_IMAGE_SIZE = 5 * 1024 * 1024; +var IMAGE_EXTENSIONS2 = { + ".jpg": "image/jpeg", + ".jpeg": "image/jpeg", + ".png": "image/png", + ".gif": "image/gif", + ".webp": "image/webp" +}; +var ImageContextManager = class { + constructor(containerEl, inputEl, callbacks, previewContainerEl) { + this.dropOverlay = null; + this.attachedImages = /* @__PURE__ */ new Map(); + this.enabled = true; + this.containerEl = containerEl; + this.previewContainerEl = previewContainerEl != null ? previewContainerEl : containerEl; + this.inputEl = inputEl; + this.callbacks = callbacks; + const fileIndicator = this.previewContainerEl.querySelector(".claudian-file-indicator"); + this.imagePreviewEl = this.previewContainerEl.createDiv({ cls: "claudian-image-preview" }); + if (fileIndicator && fileIndicator.parentElement === this.previewContainerEl) { + this.previewContainerEl.insertBefore(this.imagePreviewEl, fileIndicator); + } + this.setupDragAndDrop(); + this.setupPasteHandler(); + } + setEnabled(enabled) { + this.enabled = enabled; + if (!enabled && this.attachedImages.size > 0) { + this.clearImages(); + } + } + getAttachedImages() { + return Array.from(this.attachedImages.values()); + } + hasImages() { + return this.attachedImages.size > 0; + } + clearImages() { + this.attachedImages.clear(); + this.updateImagePreview(); + this.callbacks.onImagesChanged(); + } + /** Sets images directly (used for queued messages). */ + setImages(images) { + this.attachedImages.clear(); + for (const image of images) { + this.attachedImages.set(image.id, image); + } + this.updateImagePreview(); + this.callbacks.onImagesChanged(); + } + setupDragAndDrop() { + var _a5; + const inputWrapper = this.containerEl.querySelector(".claudian-input-wrapper"); + if (!inputWrapper) return; + this.dropOverlay = inputWrapper.createDiv({ cls: "claudian-drop-overlay" }); + const dropContent = this.dropOverlay.createDiv({ cls: "claudian-drop-content" }); + const ownerDocument = (_a5 = inputWrapper.ownerDocument) != null ? _a5 : window.document; + const svg = ownerDocument.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("viewBox", "0 0 24 24"); + svg.setAttribute("width", "32"); + svg.setAttribute("height", "32"); + svg.setAttribute("fill", "none"); + svg.setAttribute("stroke", "currentColor"); + svg.setAttribute("stroke-width", "2"); + const pathEl = ownerDocument.createElementNS("http://www.w3.org/2000/svg", "path"); + pathEl.setAttribute("d", "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"); + const polyline = ownerDocument.createElementNS("http://www.w3.org/2000/svg", "polyline"); + polyline.setAttribute("points", "17 8 12 3 7 8"); + const line = ownerDocument.createElementNS("http://www.w3.org/2000/svg", "line"); + line.setAttribute("x1", "12"); + line.setAttribute("y1", "3"); + line.setAttribute("x2", "12"); + line.setAttribute("y2", "15"); + svg.appendChild(pathEl); + svg.appendChild(polyline); + svg.appendChild(line); + dropContent.appendChild(svg); + dropContent.createSpan({ text: "Drop image here" }); + const dropZone = inputWrapper; + dropZone.addEventListener("dragenter", (e2) => this.handleDragEnter(e2)); + dropZone.addEventListener("dragover", (e2) => this.handleDragOver(e2)); + dropZone.addEventListener("dragleave", (e2) => this.handleDragLeave(e2)); + dropZone.addEventListener("drop", (e2) => { + void this.handleDrop(e2); + }); + } + handleDragEnter(e2) { + var _a5, _b3; + e2.preventDefault(); + e2.stopPropagation(); + if ((_a5 = e2.dataTransfer) == null ? void 0 : _a5.types.includes("Files")) { + (_b3 = this.dropOverlay) == null ? void 0 : _b3.addClass("visible"); + } + } + handleDragOver(e2) { + e2.preventDefault(); + e2.stopPropagation(); + } + handleDragLeave(e2) { + var _a5, _b3; + e2.preventDefault(); + e2.stopPropagation(); + const inputWrapper = this.containerEl.querySelector(".claudian-input-wrapper"); + if (!inputWrapper) { + (_a5 = this.dropOverlay) == null ? void 0 : _a5.removeClass("visible"); + return; + } + const rect = inputWrapper.getBoundingClientRect(); + if (e2.clientX <= rect.left || e2.clientX >= rect.right || e2.clientY <= rect.top || e2.clientY >= rect.bottom) { + (_b3 = this.dropOverlay) == null ? void 0 : _b3.removeClass("visible"); + } + } + async handleDrop(e2) { + var _a5, _b3; + e2.preventDefault(); + e2.stopPropagation(); + (_a5 = this.dropOverlay) == null ? void 0 : _a5.removeClass("visible"); + const files = (_b3 = e2.dataTransfer) == null ? void 0 : _b3.files; + if (!files) return; + for (let i = 0; i < files.length; i++) { + const file2 = files[i]; + if (this.isImageFile(file2)) { + await this.addImageFromFile(file2, "drop"); + } + } + } + setupPasteHandler() { + this.inputEl.addEventListener("paste", (e2) => { + void (async () => { + var _a5; + const items = (_a5 = e2.clipboardData) == null ? void 0 : _a5.items; + if (!items) return; + for (let i = 0; i < items.length; i++) { + const item = items[i]; + if (item.type.startsWith("image/")) { + e2.preventDefault(); + const file2 = item.getAsFile(); + if (file2) { + await this.addImageFromFile(file2, "paste"); + } + return; + } + } + })(); + }); + } + isImageFile(file2) { + return file2.type.startsWith("image/") && this.getMediaType(file2.name) !== null; + } + getMediaType(filename) { + const ext = path25.extname(filename).toLowerCase(); + return IMAGE_EXTENSIONS2[ext] || null; + } + async addImageFromFile(file2, source) { + if (!this.enabled) { + new import_obsidian39.Notice("Image attachments are not supported by this provider."); + return false; + } + if (file2.size > MAX_IMAGE_SIZE) { + this.notifyImageError(`Image exceeds ${this.formatSize(MAX_IMAGE_SIZE)} limit.`); + return false; + } + const mediaType = this.getMediaType(file2.name) || file2.type; + if (!mediaType) { + this.notifyImageError("Unsupported image type."); + return false; + } + try { + const base643 = await this.fileToBase64(file2); + const attachment = { + id: this.generateId(), + name: file2.name || `image-${Date.now()}.${mediaType.split("/")[1]}`, + mediaType, + data: base643, + size: file2.size, + source + }; + this.attachedImages.set(attachment.id, attachment); + this.updateImagePreview(); + this.callbacks.onImagesChanged(); + return true; + } catch (error48) { + this.notifyImageError("Failed to attach image.", error48); + return false; + } + } + async fileToBase64(file2) { + const arrayBuffer = await file2.arrayBuffer(); + const buffer = Buffer.from(arrayBuffer); + return buffer.toString("base64"); + } + // ============================================ + // Private: Image Preview + // ============================================ + updateImagePreview() { + this.imagePreviewEl.empty(); + if (this.attachedImages.size === 0) { + this.imagePreviewEl.removeClass("claudian-visible-flex"); + this.imagePreviewEl.addClass("claudian-hidden"); + return; + } + this.imagePreviewEl.addClass("claudian-visible-flex"); + this.imagePreviewEl.removeClass("claudian-hidden"); + for (const [id, image] of this.attachedImages) { + this.renderImagePreview(id, image); + } + } + renderImagePreview(id, image) { + const previewEl = this.imagePreviewEl.createDiv({ cls: "claudian-image-chip" }); + const thumbEl = previewEl.createDiv({ cls: "claudian-image-thumb" }); + thumbEl.createEl("img", { + attr: { + src: `data:${image.mediaType};base64,${image.data}`, + alt: image.name + } + }); + const infoEl = previewEl.createDiv({ cls: "claudian-image-info" }); + const nameEl = infoEl.createSpan({ cls: "claudian-image-name" }); + nameEl.setText(this.truncateName(image.name, 20)); + nameEl.setAttribute("title", image.name); + const sizeEl = infoEl.createSpan({ cls: "claudian-image-size" }); + sizeEl.setText(this.formatSize(image.size)); + const removeEl = previewEl.createSpan({ cls: "claudian-image-remove" }); + removeEl.setText("\xD7"); + removeEl.setAttribute("aria-label", "Remove image"); + removeEl.addEventListener("click", (e2) => { + e2.stopPropagation(); + this.attachedImages.delete(id); + this.updateImagePreview(); + this.callbacks.onImagesChanged(); + }); + thumbEl.addEventListener("click", () => { + this.showFullImage(image); + }); + } + showFullImage(image) { + var _a5; + const ownerDocument = (_a5 = this.containerEl.ownerDocument) != null ? _a5 : window.document; + const overlay = ownerDocument.body.createDiv({ cls: "claudian-image-modal-overlay" }); + const modal = overlay.createDiv({ cls: "claudian-image-modal" }); + modal.createEl("img", { + attr: { + src: `data:${image.mediaType};base64,${image.data}`, + alt: image.name + } + }); + const closeBtn = modal.createDiv({ cls: "claudian-image-modal-close" }); + closeBtn.setText("\xD7"); + const handleEsc = (e2) => { + if (e2.key === "Escape") { + close(); + } + }; + const close = () => { + ownerDocument.removeEventListener("keydown", handleEsc); + overlay.remove(); + }; + closeBtn.addEventListener("click", close); + overlay.addEventListener("click", (e2) => { + if (e2.target === overlay) close(); + }); + ownerDocument.addEventListener("keydown", handleEsc); + } + generateId() { + return `img-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`; + } + truncateName(name, maxLen) { + if (name.length <= maxLen) return name; + const ext = path25.extname(name); + const base = name.slice(0, name.length - ext.length); + const truncatedBase = base.slice(0, maxLen - ext.length - 3); + return `${truncatedBase}...${ext}`; + } + formatSize(bytes) { + if (bytes < 1024) return `${bytes} B`; + if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; + return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; + } + notifyImageError(message, error48) { + let userMessage = message; + if (error48 instanceof Error) { + if (error48.message.includes("ENOENT") || error48.message.includes("no such file")) { + userMessage = `${message} (File not found)`; + } else if (error48.message.includes("EACCES") || error48.message.includes("permission denied")) { + userMessage = `${message} (Permission denied)`; + } + } + new import_obsidian39.Notice(userMessage); + } +}; + +// src/features/chat/ui/InputToolbar.ts +var import_obsidian40 = require("obsidian"); +var os13 = __toESM(require("os")); +var path26 = __toESM(require("path")); +init_path(); +function runToolbarAction(action, failureMessage) { + void action().catch(() => { + new import_obsidian40.Notice(failureMessage); + }); +} +var ModelSelector = class { + constructor(parentEl, callbacks) { + this.buttonEl = null; + this.dropdownEl = null; + this.callbacks = callbacks; + this.container = parentEl.createDiv({ cls: "claudian-model-selector" }); + this.render(); + } + getAvailableModels() { + var _a5, _b3; + const settings11 = this.callbacks.getSettings(); + const uiConfig = this.callbacks.getUIConfig(); + return uiConfig.getModelOptions({ + ...settings11, + environmentVariables: (_b3 = (_a5 = this.callbacks).getEnvironmentVariables) == null ? void 0 : _b3.call(_a5) + }); + } + render() { + this.container.empty(); + this.buttonEl = this.container.createDiv({ cls: "claudian-model-btn" }); + this.updateDisplay(); + this.dropdownEl = this.container.createDiv({ cls: "claudian-model-dropdown" }); + this.renderOptions(); + } + updateDisplay() { + if (!this.buttonEl) return; + const currentModel = this.callbacks.getSettings().model; + const models = this.getAvailableModels(); + const modelInfo = models.find((m4) => m4.value === currentModel); + const displayModel = modelInfo || models[0]; + this.buttonEl.empty(); + const labelEl = this.buttonEl.createSpan({ cls: "claudian-model-label" }); + labelEl.setText((displayModel == null ? void 0 : displayModel.label) || "Unknown"); + } + renderOptions() { + var _a5, _b3, _c2; + if (!this.dropdownEl) return; + this.dropdownEl.empty(); + const currentModel = this.callbacks.getSettings().model; + const models = this.getAvailableModels(); + const reversed = [...models].reverse(); + let lastGroup; + for (const model of reversed) { + if (model.group && model.group !== lastGroup) { + const separator = this.dropdownEl.createDiv({ cls: "claudian-model-group" }); + separator.setText(model.group); + lastGroup = model.group; + } + const option = this.dropdownEl.createDiv({ cls: "claudian-model-option" }); + if (model.value === currentModel) { + option.addClass("selected"); + } + const icon = (_c2 = model.providerIcon) != null ? _c2 : (_b3 = (_a5 = this.callbacks.getUIConfig()).getProviderIcon) == null ? void 0 : _b3.call(_a5); + if (icon) { + option.appendChild(createProviderIconSvg(icon, { + className: "claudian-model-provider-icon", + height: 12, + ownerDocument: option.ownerDocument, + width: 12 + })); + } + option.createSpan({ text: model.label }); + if (model.description) { + option.setAttribute("title", model.description); + } + option.addEventListener("click", (e2) => { + e2.stopPropagation(); + runToolbarAction(async () => { + await this.callbacks.onModelChange(model.value); + this.updateDisplay(); + this.renderOptions(); + }, "Failed to change model"); + }); + } + } +}; +var ModeSelector = class { + constructor(parentEl, callbacks) { + this.labelEl = null; + this.toggleEl = null; + this.callbacks = callbacks; + this.container = parentEl.createDiv({ cls: "claudian-mode-selector" }); + this.render(); + } + getSelectorConfig() { + var _a5, _b3, _c2; + return (_c2 = (_b3 = (_a5 = this.callbacks.getUIConfig()).getModeSelector) == null ? void 0 : _b3.call(_a5, this.callbacks.getSettings())) != null ? _c2 : null; + } + render() { + this.container.empty(); + this.labelEl = this.container.createSpan({ cls: "claudian-mode-label" }); + this.toggleEl = this.container.createDiv({ cls: "claudian-toggle-switch" }); + this.toggleEl.addEventListener("click", () => { + runToolbarAction(() => this.toggle(), "Failed to change mode"); + }); + this.updateDisplay(); + } + /** Resolves the active/inactive option pair for a two-option toggle. */ + resolveOptionPair(selectorConfig) { + var _a5; + const [first, second] = selectorConfig.options; + const active = selectorConfig.activeValue ? (_a5 = selectorConfig.options.find((option) => option.value === selectorConfig.activeValue)) != null ? _a5 : second : second; + const inactive = active.value === first.value ? second : first; + return { active, inactive }; + } + updateDisplay() { + var _a5; + if (!this.toggleEl || !this.labelEl) { + return; + } + const selectorConfig = this.getSelectorConfig(); + if (!selectorConfig || selectorConfig.options.length !== 2) { + this.container.addClass("claudian-hidden"); + return; + } + this.container.removeClass("claudian-hidden"); + const { active, inactive } = this.resolveOptionPair(selectorConfig); + const currentOption = (_a5 = selectorConfig.options.find((option) => option.value === selectorConfig.value)) != null ? _a5 : selectorConfig.options[0]; + const isActive = currentOption.value === active.value; + this.labelEl.setText(currentOption.label || selectorConfig.label); + this.labelEl.toggleClass("active", isActive); + if (isActive) { + this.toggleEl.addClass("active"); + } else { + this.toggleEl.removeClass("active"); + } + const titleParts = [`${inactive.label} <-> ${active.label}`]; + if (currentOption.description) { + titleParts.push(currentOption.description); + } + this.container.setAttribute("title", titleParts.join("\n")); + } + renderOptions() { + this.updateDisplay(); + } + async toggle() { + const selectorConfig = this.getSelectorConfig(); + if (!selectorConfig || selectorConfig.options.length !== 2) { + return; + } + const { active, inactive } = this.resolveOptionPair(selectorConfig); + const nextValue = selectorConfig.value === active.value ? inactive.value : active.value; + await this.callbacks.onModeChange(nextValue); + this.updateDisplay(); + } +}; +var ThinkingBudgetSelector = class { + constructor(parentEl, callbacks) { + this.effortEl = null; + this.effortGearsEl = null; + this.budgetEl = null; + this.budgetGearsEl = null; + this.callbacks = callbacks; + this.container = parentEl.createDiv({ cls: "claudian-thinking-selector" }); + this.render(); + } + render() { + this.container.empty(); + this.effortEl = this.container.createDiv({ cls: "claudian-thinking-effort" }); + const effortLabel = this.effortEl.createSpan({ cls: "claudian-thinking-label-text" }); + effortLabel.setText("Effort:"); + this.effortGearsEl = this.effortEl.createDiv({ cls: "claudian-thinking-gears" }); + this.budgetEl = this.container.createDiv({ cls: "claudian-thinking-budget" }); + const budgetLabel = this.budgetEl.createSpan({ cls: "claudian-thinking-label-text" }); + budgetLabel.setText("Thinking:"); + this.budgetGearsEl = this.budgetEl.createDiv({ cls: "claudian-thinking-gears" }); + this.updateDisplay(); + } + renderEffortGears() { + var _a5; + if (!this.effortGearsEl) return; + this.effortGearsEl.empty(); + const currentEffort = this.callbacks.getSettings().effortLevel; + const uiConfig = this.callbacks.getUIConfig(); + const settings11 = this.callbacks.getSettings(); + const model = settings11.model; + const options = uiConfig.getReasoningOptions(model, settings11); + const currentInfo = options.find((e2) => e2.value === currentEffort); + const currentEl = this.effortGearsEl.createDiv({ cls: "claudian-thinking-current" }); + currentEl.setText((currentInfo == null ? void 0 : currentInfo.label) || ((_a5 = options[0]) == null ? void 0 : _a5.label) || "High"); + const optionsEl = this.effortGearsEl.createDiv({ cls: "claudian-thinking-options" }); + for (const effort of [...options].reverse()) { + const gearEl = optionsEl.createDiv({ cls: "claudian-thinking-gear" }); + gearEl.setText(effort.label); + if (effort.value === currentEffort) { + gearEl.addClass("selected"); + } + gearEl.addEventListener("click", (e2) => { + e2.stopPropagation(); + runToolbarAction(async () => { + await this.callbacks.onEffortLevelChange(effort.value); + this.updateDisplay(); + }, "Failed to change effort level"); + }); + } + } + renderBudgetGears() { + var _a5, _b3; + if (!this.budgetGearsEl) return; + this.budgetGearsEl.empty(); + const currentBudget = this.callbacks.getSettings().thinkingBudget; + const uiConfig = this.callbacks.getUIConfig(); + const settings11 = this.callbacks.getSettings(); + const model = settings11.model; + const options = uiConfig.getReasoningOptions(model, settings11); + const currentBudgetInfo = options.find((b2) => b2.value === currentBudget); + const currentEl = this.budgetGearsEl.createDiv({ cls: "claudian-thinking-current" }); + currentEl.setText((currentBudgetInfo == null ? void 0 : currentBudgetInfo.label) || ((_a5 = options[0]) == null ? void 0 : _a5.label) || "Off"); + const optionsEl = this.budgetGearsEl.createDiv({ cls: "claudian-thinking-options" }); + for (const budget of [...options].reverse()) { + const gearEl = optionsEl.createDiv({ cls: "claudian-thinking-gear" }); + gearEl.setText(budget.label); + const tokens = (_b3 = budget.tokens) != null ? _b3 : 0; + gearEl.setAttribute("title", tokens > 0 ? `${tokens.toLocaleString()} tokens` : "Disabled"); + if (budget.value === currentBudget) { + gearEl.addClass("selected"); + } + gearEl.addEventListener("click", (e2) => { + e2.stopPropagation(); + runToolbarAction(async () => { + await this.callbacks.onThinkingBudgetChange(budget.value); + this.updateDisplay(); + }, "Failed to change thinking budget"); + }); + } + } + updateDisplay() { + var _a5, _b3, _c2, _d, _e2; + const capabilities = this.callbacks.getCapabilities(); + if (capabilities.reasoningControl === "none") { + (_a5 = this.effortEl) == null ? void 0 : _a5.addClass("claudian-hidden"); + (_b3 = this.budgetEl) == null ? void 0 : _b3.addClass("claudian-hidden"); + return; + } + const settings11 = this.callbacks.getSettings(); + const model = settings11.model; + const uiConfig = this.callbacks.getUIConfig(); + const options = uiConfig.getReasoningOptions(model, settings11); + const defaultValue = uiConfig.getDefaultReasoningValue(model, settings11); + const shouldHide = options.length === 0 || options.length === 1 && ((_c2 = options[0]) == null ? void 0 : _c2.value) === defaultValue; + if (shouldHide) { + (_d = this.effortEl) == null ? void 0 : _d.addClass("claudian-hidden"); + (_e2 = this.budgetEl) == null ? void 0 : _e2.addClass("claudian-hidden"); + return; + } + const adaptive = uiConfig.isAdaptiveReasoningModel(model, settings11); + if (this.effortEl) { + this.effortEl.toggleClass("claudian-hidden", !adaptive); + } + if (this.budgetEl) { + this.budgetEl.toggleClass("claudian-hidden", adaptive); + } + if (adaptive) { + this.renderEffortGears(); + } else { + this.renderBudgetGears(); + } + } +}; +var PermissionToggle = class { + constructor(parentEl, callbacks) { + this.toggleEl = null; + this.labelEl = null; + this.visible = true; + this.callbacks = callbacks; + this.container = parentEl.createDiv({ cls: "claudian-permission-toggle" }); + this.render(); + } + setVisible(visible) { + this.visible = visible; + this.updateDisplay(); + } + render() { + this.container.empty(); + this.labelEl = this.container.createSpan({ cls: "claudian-permission-label" }); + this.toggleEl = this.container.createDiv({ cls: "claudian-toggle-switch" }); + this.updateDisplay(); + this.toggleEl.addEventListener("click", () => { + runToolbarAction(() => this.toggle(), "Failed to change permission mode"); + }); + } + getToggleConfig() { + var _a5, _b3; + const uiConfig = this.callbacks.getUIConfig(); + return (_b3 = (_a5 = uiConfig.getPermissionModeToggle) == null ? void 0 : _a5.call(uiConfig)) != null ? _b3 : null; + } + updateDisplay() { + var _a5; + if (!this.toggleEl || !this.labelEl) return; + const toggleConfig = this.getToggleConfig(); + const capabilities = this.callbacks.getCapabilities(); + if (!this.visible || !toggleConfig) { + this.container.addClass("claudian-hidden"); + return; + } + this.container.removeClass("claudian-hidden"); + const mode = this.callbacks.getSettings().permissionMode; + const planValue = toggleConfig.planValue; + const planLabel = (_a5 = toggleConfig.planLabel) != null ? _a5 : "PLAN"; + const canShowPlan = Boolean(planValue) && capabilities.supportsPlanMode; + if (canShowPlan && planValue && mode === planValue) { + this.toggleEl.addClass("claudian-hidden"); + this.labelEl.setText(planLabel); + this.labelEl.addClass("plan-active"); + } else { + this.toggleEl.removeClass("claudian-hidden"); + this.labelEl.removeClass("plan-active"); + if (mode === toggleConfig.activeValue) { + this.toggleEl.addClass("active"); + this.labelEl.setText(toggleConfig.activeLabel); + } else { + this.toggleEl.removeClass("active"); + this.labelEl.setText(toggleConfig.inactiveLabel); + } + } + } + async toggle() { + const toggleConfig = this.getToggleConfig(); + if (!toggleConfig) return; + const current = this.callbacks.getSettings().permissionMode; + const newMode = current === toggleConfig.activeValue ? toggleConfig.inactiveValue : toggleConfig.activeValue; + await this.callbacks.onPermissionModeChange(newMode); + this.updateDisplay(); + } +}; +var ServiceTierToggle = class { + constructor(parentEl, callbacks) { + this.buttonEl = null; + this.iconEl = null; + this.callbacks = callbacks; + this.container = parentEl.createDiv({ cls: "claudian-service-tier-toggle" }); + this.render(); + } + render() { + this.container.empty(); + this.buttonEl = this.container.createDiv({ cls: "claudian-service-tier-button" }); + this.iconEl = this.buttonEl.createSpan({ cls: "claudian-service-tier-icon" }); + (0, import_obsidian40.setIcon)(this.iconEl, "zap"); + this.updateDisplay(); + this.buttonEl.addEventListener("click", () => { + runToolbarAction(() => this.toggle(), "Failed to change service tier"); + }); + } + getToggleConfig() { + var _a5, _b3; + const uiConfig = this.callbacks.getUIConfig(); + return (_b3 = (_a5 = uiConfig.getServiceTierToggle) == null ? void 0 : _a5.call(uiConfig, this.callbacks.getSettings())) != null ? _b3 : null; + } + updateDisplay() { + if (!this.buttonEl || !this.iconEl) return; + const toggleConfig = this.getToggleConfig(); + if (!toggleConfig) { + this.container.addClass("claudian-hidden"); + return; + } + this.container.removeClass("claudian-hidden"); + const current = this.callbacks.getSettings().serviceTier; + const isActive = current === toggleConfig.activeValue; + if (isActive) { + this.buttonEl.addClass("active"); + } else { + this.buttonEl.removeClass("active"); + } + this.container.setAttribute("title", "Toggle on/off fast mode"); + } + async toggle() { + const toggleConfig = this.getToggleConfig(); + if (!toggleConfig) return; + const current = this.callbacks.getSettings().serviceTier; + const next = current === toggleConfig.activeValue ? toggleConfig.inactiveValue : toggleConfig.activeValue; + await this.callbacks.onServiceTierChange(next); + this.updateDisplay(); + } +}; +var ExternalContextSelector = class { + constructor(parentEl, callbacks) { + this.iconEl = null; + this.badgeEl = null; + this.dropdownEl = null; + /** + * Current external context paths. May contain: + * - Persistent paths only (new sessions via clearExternalContexts) + * - Restored session paths (loaded sessions via setExternalContexts) + * - Mixed paths during active sessions + */ + this.externalContextPaths = []; + /** Paths that persist across all sessions (stored in settings). */ + this.persistentPaths = /* @__PURE__ */ new Set(); + this.onChangeCallback = null; + this.onPersistenceChangeCallback = null; + this.callbacks = callbacks; + this.container = parentEl.createDiv({ cls: "claudian-external-context-selector" }); + this.render(); + } + setOnChange(callback) { + this.onChangeCallback = callback; + } + setOnPersistenceChange(callback) { + this.onPersistenceChangeCallback = callback; + } + getExternalContexts() { + return [...this.externalContextPaths]; + } + getPersistentPaths() { + return [...this.persistentPaths]; + } + setPersistentPaths(paths) { + var _a5; + const validPaths = filterValidPaths(paths); + const invalidPaths = paths.filter((p) => !validPaths.includes(p)); + this.persistentPaths = new Set(validPaths); + this.mergePersistentPaths(); + this.updateDisplay(); + this.renderDropdown(); + if (invalidPaths.length > 0) { + const pathNames = invalidPaths.map((p) => this.shortenPath(p)).join(", "); + new import_obsidian40.Notice(`Removed ${invalidPaths.length} invalid external context path(s): ${pathNames}`, 5e3); + (_a5 = this.onPersistenceChangeCallback) == null ? void 0 : _a5.call(this, [...this.persistentPaths]); + } + } + togglePersistence(path27) { + var _a5; + if (this.persistentPaths.has(path27)) { + this.persistentPaths.delete(path27); + } else { + if (!isValidDirectoryPath(path27)) { + new import_obsidian40.Notice(`Cannot persist "${this.shortenPath(path27)}" - directory no longer exists`, 4e3); + return; + } + this.persistentPaths.add(path27); + } + (_a5 = this.onPersistenceChangeCallback) == null ? void 0 : _a5.call(this, [...this.persistentPaths]); + this.renderDropdown(); + } + mergePersistentPaths() { + const pathSet = new Set(this.externalContextPaths); + for (const path27 of this.persistentPaths) { + pathSet.add(path27); + } + this.externalContextPaths = [...pathSet]; + } + /** + * Restore exact external context paths from a saved conversation. + * Does NOT merge with persistent paths - preserves the session's historical state. + * Use clearExternalContexts() for new sessions to start with current persistent paths. + */ + setExternalContexts(paths) { + this.externalContextPaths = [...paths]; + this.updateDisplay(); + this.renderDropdown(); + } + /** + * Remove a path from external contexts (and persistent paths if applicable). + * Exposed for testing the remove button behavior. + */ + removePath(pathStr) { + var _a5, _b3; + this.externalContextPaths = this.externalContextPaths.filter((p) => p !== pathStr); + if (this.persistentPaths.has(pathStr)) { + this.persistentPaths.delete(pathStr); + (_a5 = this.onPersistenceChangeCallback) == null ? void 0 : _a5.call(this, [...this.persistentPaths]); + } + (_b3 = this.onChangeCallback) == null ? void 0 : _b3.call(this, this.externalContextPaths); + this.updateDisplay(); + this.renderDropdown(); + } + /** + * Add an external context path programmatically (e.g., from /add-dir command). + * Validates the path and handles duplicates/conflicts. + * @param pathInput - Path string (supports ~/ expansion) + * @returns Result with success status and normalized path, or error message on failure + */ + addExternalContext(pathInput) { + var _a5; + const trimmed = pathInput == null ? void 0 : pathInput.trim(); + if (!trimmed) { + return { success: false, error: "No path provided. Usage: /add-dir /absolute/path" }; + } + let cleanPath = trimmed; + if (cleanPath.startsWith('"') && cleanPath.endsWith('"') || cleanPath.startsWith("'") && cleanPath.endsWith("'")) { + cleanPath = cleanPath.slice(1, -1); + } + const expandedPath = expandHomePath(cleanPath); + const normalizedPath = normalizePathForFilesystem(expandedPath); + if (!path26.isAbsolute(normalizedPath)) { + return { success: false, error: "Path must be absolute. Usage: /add-dir /absolute/path" }; + } + const validation = validateDirectoryPath(normalizedPath); + if (!validation.valid) { + return { success: false, error: `${validation.error}: ${pathInput}` }; + } + if (isDuplicatePath(normalizedPath, this.externalContextPaths)) { + return { success: false, error: "This folder is already added as an external context." }; + } + const conflict = findConflictingPath(normalizedPath, this.externalContextPaths); + if (conflict) { + return { success: false, error: this.formatConflictMessage(normalizedPath, conflict) }; + } + this.externalContextPaths = [...this.externalContextPaths, normalizedPath]; + (_a5 = this.onChangeCallback) == null ? void 0 : _a5.call(this, this.externalContextPaths); + this.updateDisplay(); + this.renderDropdown(); + return { success: true, normalizedPath }; + } + /** + * Clear session-only external context paths (call on new conversation). + * Uses persistent paths from settings if provided, otherwise falls back to local cache. + * Validates paths before using them (silently filters invalid during session init). + */ + clearExternalContexts(persistentPathsFromSettings) { + if (persistentPathsFromSettings) { + const validPaths = filterValidPaths(persistentPathsFromSettings); + this.persistentPaths = new Set(validPaths); + } + this.externalContextPaths = [...this.persistentPaths]; + this.updateDisplay(); + this.renderDropdown(); + } + render() { + this.container.empty(); + const iconWrapper = this.container.createDiv({ cls: "claudian-external-context-icon-wrapper" }); + this.iconEl = iconWrapper.createDiv({ cls: "claudian-external-context-icon" }); + (0, import_obsidian40.setIcon)(this.iconEl, "folder"); + this.badgeEl = iconWrapper.createDiv({ cls: "claudian-external-context-badge" }); + this.updateDisplay(); + iconWrapper.addEventListener("click", (e2) => { + e2.stopPropagation(); + void this.openFolderPicker(); + }); + this.dropdownEl = this.container.createDiv({ cls: "claudian-external-context-dropdown" }); + this.renderDropdown(); + } + async openFolderPicker() { + var _a5; + try { + const { remote } = require("electron"); + if (!remote) { + throw new Error("Electron remote API is unavailable"); + } + const result = await remote.dialog.showOpenDialog({ + properties: ["openDirectory"], + title: "Select External Context" + }); + if (!result.canceled && result.filePaths.length > 0) { + const selectedPath = result.filePaths[0]; + if (isDuplicatePath(selectedPath, this.externalContextPaths)) { + new import_obsidian40.Notice("This folder is already added as an external context.", 3e3); + return; + } + const conflict = findConflictingPath(selectedPath, this.externalContextPaths); + if (conflict) { + new import_obsidian40.Notice(this.formatConflictMessage(selectedPath, conflict), 5e3); + return; + } + this.externalContextPaths = [...this.externalContextPaths, selectedPath]; + (_a5 = this.onChangeCallback) == null ? void 0 : _a5.call(this, this.externalContextPaths); + this.updateDisplay(); + this.renderDropdown(); + } + } catch (e2) { + new import_obsidian40.Notice("Unable to open folder picker.", 5e3); + } + } + /** Formats a conflict error message for display. */ + formatConflictMessage(newPath, conflict) { + const shortNew = this.shortenPath(newPath); + const shortExisting = this.shortenPath(conflict.path); + return conflict.type === "parent" ? `Cannot add "${shortNew}" - it's inside existing path "${shortExisting}"` : `Cannot add "${shortNew}" - it contains existing path "${shortExisting}"`; + } + renderDropdown() { + if (!this.dropdownEl) return; + this.dropdownEl.empty(); + const headerEl = this.dropdownEl.createDiv({ cls: "claudian-external-context-header" }); + headerEl.setText("External contexts"); + const listEl = this.dropdownEl.createDiv({ cls: "claudian-external-context-list" }); + if (this.externalContextPaths.length === 0) { + const emptyEl = listEl.createDiv({ cls: "claudian-external-context-empty" }); + emptyEl.setText("Click folder icon to add"); + } else { + for (const pathStr of this.externalContextPaths) { + const itemEl = listEl.createDiv({ cls: "claudian-external-context-item" }); + const pathTextEl = itemEl.createSpan({ cls: "claudian-external-context-text" }); + const displayPath = this.shortenPath(pathStr); + pathTextEl.setText(displayPath); + pathTextEl.setAttribute("title", pathStr); + const isPersistent = this.persistentPaths.has(pathStr); + const lockBtn = itemEl.createSpan({ cls: "claudian-external-context-lock" }); + if (isPersistent) { + lockBtn.addClass("locked"); + } + (0, import_obsidian40.setIcon)(lockBtn, isPersistent ? "lock" : "unlock"); + lockBtn.setAttribute("title", isPersistent ? "Persistent (click to make session-only)" : "Session-only (click to persist)"); + lockBtn.addEventListener("click", (e2) => { + e2.stopPropagation(); + this.togglePersistence(pathStr); + }); + const removeBtn = itemEl.createSpan({ cls: "claudian-external-context-remove" }); + (0, import_obsidian40.setIcon)(removeBtn, "x"); + removeBtn.setAttribute("title", "Remove path"); + removeBtn.addEventListener("click", (e2) => { + e2.stopPropagation(); + this.removePath(pathStr); + }); + } + } + } + /** Shorten path for display (replace home dir with ~) */ + shortenPath(fullPath) { + try { + const homeDir = os13.homedir(); + const normalize3 = (value) => value.replace(/\\/g, "/"); + const normalizedFull = normalize3(fullPath); + const normalizedHome = normalize3(homeDir); + const compareFull = process.platform === "win32" ? normalizedFull.toLowerCase() : normalizedFull; + const compareHome = process.platform === "win32" ? normalizedHome.toLowerCase() : normalizedHome; + if (compareFull.startsWith(compareHome)) { + const remainder = normalizedFull.slice(normalizedHome.length); + return "~" + remainder; + } + } catch (e2) { + } + return fullPath; + } + updateDisplay() { + if (!this.iconEl || !this.badgeEl) return; + const count = this.externalContextPaths.length; + if (count > 0) { + this.iconEl.addClass("active"); + this.iconEl.setAttribute("title", `${count} external context${count > 1 ? "s" : ""} (click to add more)`); + if (count > 1) { + this.badgeEl.setText(String(count)); + this.badgeEl.addClass("visible"); + } else { + this.badgeEl.removeClass("visible"); + } + } else { + this.iconEl.removeClass("active"); + this.iconEl.setAttribute("title", "Add external contexts (click)"); + this.badgeEl.removeClass("visible"); + } + } +}; +var McpServerSelector = class { + constructor(parentEl) { + this.iconEl = null; + this.badgeEl = null; + this.dropdownEl = null; + this.mcpManager = null; + this.enabledServers = /* @__PURE__ */ new Set(); + this.onChangeCallback = null; + this.visible = true; + this.container = parentEl.createDiv({ cls: "claudian-mcp-selector" }); + this.render(); + } + setVisible(visible) { + this.visible = visible; + if (!visible) { + this.container.addClass("claudian-hidden"); + } else { + this.updateDisplay(); + } + } + setMcpManager(manager) { + var _a5; + this.mcpManager = manager; + if (!manager && this.enabledServers.size > 0) { + this.enabledServers.clear(); + (_a5 = this.onChangeCallback) == null ? void 0 : _a5.call(this, this.enabledServers); + } + this.pruneEnabledServers(); + this.updateDisplay(); + this.renderDropdown(); + } + setOnChange(callback) { + this.onChangeCallback = callback; + } + getEnabledServers() { + return new Set(this.enabledServers); + } + addMentionedServers(names) { + let changed = false; + for (const name of names) { + if (!this.enabledServers.has(name)) { + this.enabledServers.add(name); + changed = true; + } + } + if (changed) { + this.updateDisplay(); + this.renderDropdown(); + } + } + clearEnabled() { + this.enabledServers.clear(); + this.updateDisplay(); + this.renderDropdown(); + } + setEnabledServers(names) { + this.enabledServers = new Set(names); + this.pruneEnabledServers(); + this.updateDisplay(); + this.renderDropdown(); + } + pruneEnabledServers() { + var _a5; + if (!this.mcpManager) return; + const activeNames = new Set(this.mcpManager.getServers().filter((s2) => s2.enabled).map((s2) => s2.name)); + let changed = false; + for (const name of this.enabledServers) { + if (!activeNames.has(name)) { + this.enabledServers.delete(name); + changed = true; + } + } + if (changed) { + (_a5 = this.onChangeCallback) == null ? void 0 : _a5.call(this, this.enabledServers); + } + } + render() { + this.container.empty(); + const iconWrapper = this.container.createDiv({ cls: "claudian-mcp-selector-icon-wrapper" }); + this.iconEl = iconWrapper.createDiv({ cls: "claudian-mcp-selector-icon" }); + appendMcpIcon(this.iconEl); + this.badgeEl = iconWrapper.createDiv({ cls: "claudian-mcp-selector-badge" }); + this.updateDisplay(); + this.dropdownEl = this.container.createDiv({ cls: "claudian-mcp-selector-dropdown" }); + this.renderDropdown(); + this.container.addEventListener("mouseenter", () => { + this.renderDropdown(); + }); + } + renderDropdown() { + var _a5; + if (!this.dropdownEl) return; + this.pruneEnabledServers(); + this.dropdownEl.empty(); + const headerEl = this.dropdownEl.createDiv({ cls: "claudian-mcp-selector-header" }); + headerEl.setText("Mcp servers"); + const listEl = this.dropdownEl.createDiv({ cls: "claudian-mcp-selector-list" }); + const allServers = ((_a5 = this.mcpManager) == null ? void 0 : _a5.getServers()) || []; + const servers = allServers.filter((s2) => s2.enabled); + if (servers.length === 0) { + const emptyEl = listEl.createDiv({ cls: "claudian-mcp-selector-empty" }); + emptyEl.setText(allServers.length === 0 ? "No MCP servers configured" : "All MCP servers disabled"); + return; + } + for (const server of servers) { + this.renderServerItem(listEl, server); + } + } + renderServerItem(listEl, server) { + const itemEl = listEl.createDiv({ cls: "claudian-mcp-selector-item" }); + itemEl.dataset.serverName = server.name; + const isEnabled = this.enabledServers.has(server.name); + if (isEnabled) { + itemEl.addClass("enabled"); + } + const checkEl = itemEl.createDiv({ cls: "claudian-mcp-selector-check" }); + if (isEnabled) { + appendCheckIcon(checkEl); + } + const infoEl = itemEl.createDiv({ cls: "claudian-mcp-selector-item-info" }); + const nameEl = infoEl.createSpan({ cls: "claudian-mcp-selector-item-name" }); + nameEl.setText(server.name); + if (server.contextSaving) { + const csEl = infoEl.createSpan({ cls: "claudian-mcp-selector-cs-badge" }); + csEl.setText("@"); + csEl.setAttribute("title", "Context-saving: can also enable via @" + server.name); + } + itemEl.addEventListener("mousedown", (e2) => { + e2.preventDefault(); + e2.stopPropagation(); + this.toggleServer(server.name, itemEl); + }); + } + toggleServer(name, itemEl) { + var _a5; + if (this.enabledServers.has(name)) { + this.enabledServers.delete(name); + } else { + this.enabledServers.add(name); + } + const isEnabled = this.enabledServers.has(name); + const checkEl = itemEl.querySelector(".claudian-mcp-selector-check"); + if (isEnabled) { + itemEl.addClass("enabled"); + if (checkEl) appendCheckIcon(checkEl); + } else { + itemEl.removeClass("enabled"); + if (checkEl) checkEl.empty(); + } + this.updateDisplay(); + (_a5 = this.onChangeCallback) == null ? void 0 : _a5.call(this, this.enabledServers); + } + updateDisplay() { + var _a5; + this.pruneEnabledServers(); + if (!this.iconEl || !this.badgeEl) return; + const count = this.enabledServers.size; + const hasServers = (((_a5 = this.mcpManager) == null ? void 0 : _a5.getServers().length) || 0) > 0; + if (!hasServers || !this.visible) { + this.container.addClass("claudian-hidden"); + return; + } + this.container.removeClass("claudian-hidden"); + if (count > 0) { + this.iconEl.addClass("active"); + this.iconEl.setAttribute("title", `${count} MCP server${count > 1 ? "s" : ""} enabled (click to manage)`); + if (count > 1) { + this.badgeEl.setText(String(count)); + this.badgeEl.addClass("visible"); + } else { + this.badgeEl.removeClass("visible"); + } + } else { + this.iconEl.removeClass("active"); + this.iconEl.setAttribute("title", "Mcp servers (click to enable)"); + this.badgeEl.removeClass("visible"); + } + } +}; +var ContextUsageMeter = class { + constructor(parentEl) { + this.fillPath = null; + this.percentEl = null; + this.circumference = 0; + this.container = parentEl.createDiv({ cls: "claudian-context-meter" }); + this.render(); + this.container.addClass("claudian-hidden"); + } + setVisible(visible) { + this.container.toggleClass("claudian-hidden", !visible); + } + render() { + const size = 16; + const strokeWidth = 2; + const radius = (size - strokeWidth) / 2; + const cx2 = size / 2; + const cy = size / 2; + const startAngle = 150; + const endAngle = 390; + const arcDegrees = endAngle - startAngle; + const arcRadians = arcDegrees * Math.PI / 180; + this.circumference = radius * arcRadians; + const startRad = startAngle * Math.PI / 180; + const endRad = endAngle * Math.PI / 180; + const x1 = cx2 + radius * Math.cos(startRad); + const y1 = cy + radius * Math.sin(startRad); + const x2 = cx2 + radius * Math.cos(endRad); + const y2 = cy + radius * Math.sin(endRad); + const gaugeEl = this.container.createDiv({ cls: "claudian-context-meter-gauge" }); + const svg = gaugeEl.ownerDocument.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("width", String(size)); + svg.setAttribute("height", String(size)); + svg.setAttribute("viewBox", `0 0 ${size} ${size}`); + const pathData = `M ${x1} ${y1} A ${radius} ${radius} 0 1 1 ${x2} ${y2}`; + const backgroundPath = gaugeEl.ownerDocument.createElementNS("http://www.w3.org/2000/svg", "path"); + backgroundPath.classList.add("claudian-meter-bg"); + backgroundPath.setAttribute("d", pathData); + backgroundPath.setAttribute("fill", "none"); + backgroundPath.setAttribute("stroke-width", String(strokeWidth)); + backgroundPath.setAttribute("stroke-linecap", "round"); + const fillPath = gaugeEl.ownerDocument.createElementNS("http://www.w3.org/2000/svg", "path"); + fillPath.classList.add("claudian-meter-fill"); + fillPath.setAttribute("d", pathData); + fillPath.setAttribute("fill", "none"); + fillPath.setAttribute("stroke-width", String(strokeWidth)); + fillPath.setAttribute("stroke-linecap", "round"); + fillPath.setAttribute("stroke-dasharray", String(this.circumference)); + fillPath.setAttribute("stroke-dashoffset", String(this.circumference)); + svg.appendChild(backgroundPath); + svg.appendChild(fillPath); + gaugeEl.appendChild(svg); + this.fillPath = fillPath; + this.percentEl = this.container.createSpan({ cls: "claudian-context-meter-percent" }); + } + update(usage) { + if (!usage || usage.contextTokens <= 0) { + this.container.addClass("claudian-hidden"); + return; + } + this.container.removeClass("claudian-hidden"); + const fillLength = usage.percentage / 100 * this.circumference; + if (this.fillPath) { + this.fillPath.setAttribute("stroke-dashoffset", String(this.circumference - fillLength)); + } + if (this.percentEl) { + this.percentEl.setText(`${usage.percentage}%`); + } + if (usage.percentage > 80) { + this.container.addClass("warning"); + } else { + this.container.removeClass("warning"); + } + let tooltip = `${this.formatTokens(usage.contextTokens)} / ${this.formatTokens(usage.contextWindow)}`; + if (usage.percentage > 80) { + tooltip += " (Approaching limit, run `/compact` to continue)"; + } + this.container.setAttribute("data-tooltip", tooltip); + } + formatTokens(tokens) { + if (tokens >= 1e3) { + return `${Math.round(tokens / 1e3)}k`; + } + return String(tokens); + } +}; +function createInputToolbar(parentEl, callbacks) { + const modelSelector = new ModelSelector(parentEl, callbacks); + const thinkingBudgetSelector = new ThinkingBudgetSelector(parentEl, callbacks); + const serviceTierToggle = new ServiceTierToggle(parentEl, callbacks); + const contextUsageMeter = new ContextUsageMeter(parentEl); + const externalContextSelector = new ExternalContextSelector(parentEl, callbacks); + const mcpServerSelector = new McpServerSelector(parentEl); + const permissionToggle = new PermissionToggle(parentEl, callbacks); + const modeSelector = new ModeSelector(parentEl, callbacks); + return { + modelSelector, + modeSelector, + thinkingBudgetSelector, + serviceTierToggle, + contextUsageMeter, + externalContextSelector, + mcpServerSelector, + permissionToggle + }; +} + +// src/features/chat/ui/InstructionModeManager.ts +var INSTRUCTION_MODE_PLACEHOLDER = "# Save in custom system prompt"; +var InstructionModeManager = class { + constructor(inputEl, callbacks) { + this.state = { active: false, rawInstruction: "" }; + this.isSubmitting = false; + this.originalPlaceholder = ""; + this.inputEl = inputEl; + this.callbacks = callbacks; + this.originalPlaceholder = inputEl.placeholder; + } + /** + * Handles keydown to detect # trigger. + * Returns true if the event was consumed (should prevent default). + */ + handleTriggerKey(e2) { + if (!this.state.active && this.inputEl.value === "" && e2.key === "#") { + if (this.enterMode()) { + e2.preventDefault(); + return true; + } + } + return false; + } + /** Handles input changes to track instruction text. */ + handleInputChange() { + if (!this.state.active) return; + const text = this.inputEl.value; + if (text === "") { + this.exitMode(); + } else { + this.state.rawInstruction = text; + } + } + /** + * Enters instruction mode. + * Only enters if the indicator can be successfully shown. + * Returns true if mode was entered, false otherwise. + */ + enterMode() { + const wrapper = this.callbacks.getInputWrapper(); + if (!wrapper) return false; + wrapper.addClass("claudian-input-instruction-mode"); + this.state = { active: true, rawInstruction: "" }; + this.inputEl.placeholder = INSTRUCTION_MODE_PLACEHOLDER; + return true; + } + /** Exits instruction mode, restoring original state. */ + exitMode() { + const wrapper = this.callbacks.getInputWrapper(); + if (wrapper) { + wrapper.removeClass("claudian-input-instruction-mode"); + } + this.state = { active: false, rawInstruction: "" }; + this.inputEl.placeholder = this.originalPlaceholder; + } + /** Handles keydown events. Returns true if handled. */ + handleKeydown(e2) { + if (!this.state.active) return false; + if (e2.key === "Enter" && !e2.shiftKey && !e2.isComposing) { + if (!this.state.rawInstruction.trim()) { + return false; + } + e2.preventDefault(); + void this.submit(); + return true; + } + if (e2.key === "Escape" && !e2.isComposing) { + e2.preventDefault(); + this.cancel(); + return true; + } + return false; + } + /** Checks if instruction mode is active. */ + isActive() { + return this.state.active; + } + /** Gets the current raw instruction text. */ + getRawInstruction() { + return this.state.rawInstruction; + } + /** Submits the instruction for refinement. */ + async submit() { + if (this.isSubmitting) return; + const rawInstruction = this.state.rawInstruction.trim(); + if (!rawInstruction) return; + this.isSubmitting = true; + try { + await this.callbacks.onSubmit(rawInstruction); + } finally { + this.isSubmitting = false; + } + } + /** Cancels instruction mode and clears input. */ + cancel() { + var _a5, _b3; + this.inputEl.value = ""; + this.exitMode(); + (_b3 = (_a5 = this.callbacks).resetInputHeight) == null ? void 0 : _b3.call(_a5); + } + /** Clears the input and resets state (called after successful submission). */ + clear() { + var _a5, _b3; + this.inputEl.value = ""; + this.exitMode(); + (_b3 = (_a5 = this.callbacks).resetInputHeight) == null ? void 0 : _b3.call(_a5); + } + /** Cleans up event listeners. */ + destroy() { + const wrapper = this.callbacks.getInputWrapper(); + if (wrapper) { + wrapper.removeClass("claudian-input-instruction-mode"); + } + this.inputEl.placeholder = this.originalPlaceholder; + } +}; + +// src/features/chat/ui/NavigationSidebar.ts +var import_obsidian41 = require("obsidian"); +var NavigationSidebar = class { + constructor(parentEl, messagesEl) { + this.parentEl = parentEl; + this.messagesEl = messagesEl; + this.scrollHandler = () => { + }; + this.pendingVisibilityFrame = null; + this.isVisible = null; + this.container = this.parentEl.createDiv({ cls: "claudian-nav-sidebar" }); + this.topBtn = this.createButton("claudian-nav-btn-top", "chevrons-up", "Scroll to top"); + this.prevBtn = this.createButton("claudian-nav-btn-prev", "chevron-up", "Previous message"); + this.nextBtn = this.createButton("claudian-nav-btn-next", "chevron-down", "Next message"); + this.bottomBtn = this.createButton("claudian-nav-btn-bottom", "chevrons-down", "Scroll to bottom"); + this.setupEventListeners(); + this.applyVisibility(); + } + createButton(cls, icon, label) { + const btn = this.container.createDiv({ cls: `claudian-nav-btn ${cls}` }); + (0, import_obsidian41.setIcon)(btn, icon); + btn.setAttribute("aria-label", label); + return btn; + } + setupEventListeners() { + this.scrollHandler = () => this.updateVisibility(); + this.messagesEl.addEventListener("scroll", this.scrollHandler, { passive: true }); + this.topBtn.addEventListener("click", () => { + this.messagesEl.scrollTo({ top: 0, behavior: "smooth" }); + }); + this.bottomBtn.addEventListener("click", () => { + this.messagesEl.scrollTo({ top: this.messagesEl.scrollHeight, behavior: "smooth" }); + }); + this.prevBtn.addEventListener("click", () => this.scrollToMessage("prev")); + this.nextBtn.addEventListener("click", () => this.scrollToMessage("next")); + } + /** + * Updates visibility of the sidebar based on scroll state. + * Visible if content overflows. + */ + updateVisibility() { + var _a5; + if (this.pendingVisibilityFrame !== null) return; + this.pendingVisibilityFrame = scheduleAnimationFrame(() => { + this.pendingVisibilityFrame = null; + this.applyVisibility(); + }, (_a5 = this.messagesEl.ownerDocument.defaultView) != null ? _a5 : null); + } + applyVisibility() { + const { scrollHeight, clientHeight } = this.messagesEl; + const isScrollable = scrollHeight > clientHeight + 50; + if (this.isVisible === isScrollable) return; + this.isVisible = isScrollable; + this.container.classList.toggle("visible", isScrollable); + } + /** + * Scrolls to previous or next user message, skipping assistant messages. + */ + scrollToMessage(direction) { + const messages = Array.from(this.messagesEl.querySelectorAll(".claudian-message-user")); + if (messages.length === 0) return; + const scrollTop = this.messagesEl.scrollTop; + const threshold = 30; + if (direction === "prev") { + for (let i = messages.length - 1; i >= 0; i--) { + if (messages[i].offsetTop < scrollTop - threshold) { + this.messagesEl.scrollTo({ top: messages[i].offsetTop - 10, behavior: "smooth" }); + return; + } + } + this.messagesEl.scrollTo({ top: 0, behavior: "smooth" }); + } else { + for (let i = 0; i < messages.length; i++) { + if (messages[i].offsetTop > scrollTop + threshold) { + this.messagesEl.scrollTo({ top: messages[i].offsetTop - 10, behavior: "smooth" }); + return; + } + } + this.messagesEl.scrollTo({ top: this.messagesEl.scrollHeight, behavior: "smooth" }); + } + } + destroy() { + if (this.pendingVisibilityFrame !== null) { + cancelScheduledAnimationFrame(this.pendingVisibilityFrame); + this.pendingVisibilityFrame = null; + } + this.messagesEl.removeEventListener("scroll", this.scrollHandler); + this.container.remove(); + } +}; + +// src/features/chat/ui/StatusPanel.ts +var import_obsidian42 = require("obsidian"); +var MAX_BASH_OUTPUTS = 50; +var StatusPanel = class { + constructor() { + this.containerEl = null; + this.panelEl = null; + // Bash output section + this.bashOutputContainerEl = null; + this.bashHeaderEl = null; + this.bashContentEl = null; + this.isBashExpanded = true; + this.currentBashOutputs = /* @__PURE__ */ new Map(); + this.bashEntryExpanded = /* @__PURE__ */ new Map(); + // Todo section + this.todoContainerEl = null; + this.todoHeaderEl = null; + this.todoContentEl = null; + this.isTodoExpanded = false; + this.currentTodos = null; + // Event handler references for cleanup + this.todoClickHandler = null; + this.todoKeydownHandler = null; + this.bashClickHandler = null; + this.bashKeydownHandler = null; + } + /** + * Mount the panel into the messages container. + * Appends to the end of the messages area. + */ + mount(containerEl) { + this.containerEl = containerEl; + this.createPanel(); + } + /** + * Remount the panel to restore state after conversation changes. + * Re-creates the panel structure and re-renders current state. + */ + remount() { + if (!this.containerEl) { + return; + } + if (this.todoHeaderEl) { + if (this.todoClickHandler) { + this.todoHeaderEl.removeEventListener("click", this.todoClickHandler); + } + if (this.todoKeydownHandler) { + this.todoHeaderEl.removeEventListener("keydown", this.todoKeydownHandler); + } + } + this.todoClickHandler = null; + this.todoKeydownHandler = null; + if (this.bashHeaderEl) { + if (this.bashClickHandler) { + this.bashHeaderEl.removeEventListener("click", this.bashClickHandler); + } + if (this.bashKeydownHandler) { + this.bashHeaderEl.removeEventListener("keydown", this.bashKeydownHandler); + } + } + this.bashClickHandler = null; + this.bashKeydownHandler = null; + if (this.panelEl) { + this.panelEl.remove(); + } + this.panelEl = null; + this.bashOutputContainerEl = null; + this.bashHeaderEl = null; + this.bashContentEl = null; + this.todoContainerEl = null; + this.todoHeaderEl = null; + this.todoContentEl = null; + this.createPanel(); + this.renderBashOutputs(); + if (this.currentTodos && this.currentTodos.length > 0) { + this.updateTodos(this.currentTodos); + } + } + /** + * Create the panel structure. + */ + createPanel() { + var _a5; + if (!this.containerEl) { + return; + } + const ownerDocument = (_a5 = this.containerEl.ownerDocument) != null ? _a5 : window.document; + this.panelEl = ownerDocument.createElement("div"); + this.panelEl.className = "claudian-status-panel"; + this.bashOutputContainerEl = ownerDocument.createElement("div"); + this.bashOutputContainerEl.className = "claudian-status-panel-bash claudian-hidden"; + this.bashHeaderEl = ownerDocument.createElement("div"); + this.bashHeaderEl.className = "claudian-tool-header claudian-status-panel-bash-header"; + this.bashHeaderEl.setAttribute("tabindex", "0"); + this.bashHeaderEl.setAttribute("role", "button"); + this.bashClickHandler = () => this.toggleBashSection(); + this.bashKeydownHandler = (e2) => { + if (e2.key === "Enter" || e2.key === " ") { + e2.preventDefault(); + this.toggleBashSection(); + } + }; + this.bashHeaderEl.addEventListener("click", this.bashClickHandler); + this.bashHeaderEl.addEventListener("keydown", this.bashKeydownHandler); + this.bashContentEl = ownerDocument.createElement("div"); + this.bashContentEl.className = "claudian-status-panel-bash-content"; + this.bashOutputContainerEl.appendChild(this.bashHeaderEl); + this.bashOutputContainerEl.appendChild(this.bashContentEl); + this.panelEl.appendChild(this.bashOutputContainerEl); + this.todoContainerEl = ownerDocument.createElement("div"); + this.todoContainerEl.className = "claudian-status-panel-todos claudian-hidden"; + this.panelEl.appendChild(this.todoContainerEl); + this.todoHeaderEl = ownerDocument.createElement("div"); + this.todoHeaderEl.className = "claudian-status-panel-header"; + this.todoHeaderEl.setAttribute("tabindex", "0"); + this.todoHeaderEl.setAttribute("role", "button"); + this.todoClickHandler = () => this.toggleTodos(); + this.todoKeydownHandler = (e2) => { + if (e2.key === "Enter" || e2.key === " ") { + e2.preventDefault(); + this.toggleTodos(); + } + }; + this.todoHeaderEl.addEventListener("click", this.todoClickHandler); + this.todoHeaderEl.addEventListener("keydown", this.todoKeydownHandler); + this.todoContainerEl.appendChild(this.todoHeaderEl); + this.todoContentEl = ownerDocument.createElement("div"); + this.todoContentEl.className = "claudian-status-panel-content claudian-todo-list-container claudian-hidden"; + this.todoContainerEl.appendChild(this.todoContentEl); + this.containerEl.appendChild(this.panelEl); + } + /** + * Update the panel with new todo items. + * Called by ChatState.onTodosChanged callback when TodoWrite tool is used. + * Passing null or empty array hides the panel. + */ + updateTodos(todos) { + if (!this.todoContainerEl || !this.todoHeaderEl || !this.todoContentEl) { + return; + } + this.currentTodos = todos; + if (!todos || todos.length === 0) { + this.todoContainerEl.addClass("claudian-hidden"); + this.todoHeaderEl.empty(); + this.todoContentEl.empty(); + return; + } + this.todoContainerEl.removeClass("claudian-hidden"); + const completedCount = todos.filter((t11) => t11.status === "completed").length; + const totalCount = todos.length; + const currentTask = todos.find((t11) => t11.status === "in_progress"); + this.renderTodoHeader(completedCount, totalCount, currentTask); + this.renderTodoContent(todos); + this.updateTodoAriaLabel(completedCount, totalCount); + this.scrollToBottom(); + } + /** + * Render the todo collapsed header. + */ + renderTodoHeader(completedCount, totalCount, currentTask) { + var _a5; + if (!this.todoHeaderEl) return; + this.todoHeaderEl.empty(); + const ownerDocument = (_a5 = this.todoHeaderEl.ownerDocument) != null ? _a5 : window.document; + const icon = ownerDocument.createElement("span"); + icon.className = "claudian-status-panel-icon"; + (0, import_obsidian42.setIcon)(icon, getToolIcon(TOOL_TODO_WRITE)); + this.todoHeaderEl.appendChild(icon); + const label = ownerDocument.createElement("span"); + label.className = "claudian-status-panel-label"; + label.textContent = `Tasks (${completedCount}/${totalCount})`; + this.todoHeaderEl.appendChild(label); + if (!this.isTodoExpanded) { + if (completedCount === totalCount && totalCount > 0) { + const status = ownerDocument.createElement("span"); + status.className = "claudian-status-panel-status status-completed"; + (0, import_obsidian42.setIcon)(status, "check"); + this.todoHeaderEl.appendChild(status); + } + if (currentTask) { + const current = ownerDocument.createElement("span"); + current.className = "claudian-status-panel-current"; + current.textContent = currentTask.activeForm; + this.todoHeaderEl.appendChild(current); + } + } + } + /** + * Render the expanded todo content. + */ + renderTodoContent(todos) { + if (!this.todoContentEl) return; + renderTodoItems(this.todoContentEl, todos); + } + /** + * Toggle todo expanded/collapsed state. + */ + toggleTodos() { + this.isTodoExpanded = !this.isTodoExpanded; + this.updateTodoDisplay(); + } + /** + * Update todo display based on expanded state. + */ + updateTodoDisplay() { + if (!this.todoContentEl || !this.todoHeaderEl) return; + this.todoContentEl.toggleClass("claudian-hidden", !this.isTodoExpanded); + if (this.currentTodos && this.currentTodos.length > 0) { + const completedCount = this.currentTodos.filter((t11) => t11.status === "completed").length; + const totalCount = this.currentTodos.length; + const currentTask = this.currentTodos.find((t11) => t11.status === "in_progress"); + this.renderTodoHeader(completedCount, totalCount, currentTask); + this.updateTodoAriaLabel(completedCount, totalCount); + } + this.scrollToBottom(); + } + /** + * Update todo ARIA label. + */ + updateTodoAriaLabel(completedCount, totalCount) { + if (!this.todoHeaderEl) return; + const action = this.isTodoExpanded ? "Collapse" : "Expand"; + this.todoHeaderEl.setAttribute( + "aria-label", + `${action} task list - ${completedCount} of ${totalCount} completed` + ); + this.todoHeaderEl.setAttribute("aria-expanded", String(this.isTodoExpanded)); + } + /** + * Scroll messages container to bottom. + */ + scrollToBottom() { + if (this.containerEl) { + this.containerEl.scrollTop = this.containerEl.scrollHeight; + } + } + // ============================================ + // Bash Output Methods + // ============================================ + truncateDescription(description, maxLength = 50) { + if (description.length <= maxLength) return description; + return description.substring(0, maxLength) + "..."; + } + addBashOutput(info) { + this.currentBashOutputs.set(info.id, info); + while (this.currentBashOutputs.size > MAX_BASH_OUTPUTS) { + const oldest = this.currentBashOutputs.keys().next().value; + if (!oldest) break; + this.currentBashOutputs.delete(oldest); + this.bashEntryExpanded.delete(oldest); + } + this.renderBashOutputs(); + } + updateBashOutput(id, updates) { + const existing = this.currentBashOutputs.get(id); + if (!existing) return; + this.currentBashOutputs.set(id, { ...existing, ...updates }); + this.renderBashOutputs(); + } + clearBashOutputs() { + this.currentBashOutputs.clear(); + this.bashEntryExpanded.clear(); + this.renderBashOutputs(); + } + renderBashOutputs(options = {}) { + var _a5, _b3; + if (!this.bashOutputContainerEl || !this.bashHeaderEl || !this.bashContentEl) return; + const scroll = (_a5 = options.scroll) != null ? _a5 : true; + if (this.currentBashOutputs.size === 0) { + this.bashOutputContainerEl.addClass("claudian-hidden"); + return; + } + this.bashOutputContainerEl.removeClass("claudian-hidden"); + this.bashHeaderEl.empty(); + this.bashContentEl.empty(); + const ownerDocument = (_b3 = this.bashHeaderEl.ownerDocument) != null ? _b3 : window.document; + const headerIconEl = ownerDocument.createElement("span"); + headerIconEl.className = "claudian-tool-icon"; + headerIconEl.setAttribute("aria-hidden", "true"); + (0, import_obsidian42.setIcon)(headerIconEl, "terminal"); + this.bashHeaderEl.appendChild(headerIconEl); + const latest = Array.from(this.currentBashOutputs.values()).at(-1); + const headerLabelEl = ownerDocument.createElement("span"); + headerLabelEl.className = "claudian-tool-label"; + if (this.isBashExpanded) { + headerLabelEl.textContent = t10("chat.bangBash.commandPanel"); + } else { + headerLabelEl.textContent = latest ? this.truncateDescription(latest.command, 60) : t10("chat.bangBash.commandPanel"); + } + this.bashHeaderEl.appendChild(headerLabelEl); + const previewEl = ownerDocument.createElement("span"); + previewEl.className = "claudian-tool-current"; + previewEl.classList.toggle("claudian-hidden", !this.isBashExpanded); + this.bashHeaderEl.appendChild(previewEl); + const summaryStatusEl = ownerDocument.createElement("span"); + summaryStatusEl.className = "claudian-tool-status"; + if (!this.isBashExpanded && latest) { + summaryStatusEl.classList.add(`status-${latest.status}`); + summaryStatusEl.setAttribute("aria-label", t10("chat.bangBash.statusLabel", { status: latest.status })); + if (latest.status === "completed") (0, import_obsidian42.setIcon)(summaryStatusEl, "check"); + if (latest.status === "error") (0, import_obsidian42.setIcon)(summaryStatusEl, "x"); + } else { + summaryStatusEl.classList.add("claudian-hidden"); + } + this.bashHeaderEl.appendChild(summaryStatusEl); + this.bashHeaderEl.setAttribute("aria-expanded", String(this.isBashExpanded)); + const actionsEl = ownerDocument.createElement("span"); + actionsEl.className = "claudian-status-panel-bash-actions"; + this.appendActionButton(actionsEl, "copy", t10("chat.bangBash.copyAriaLabel"), "copy", () => { + void this.copyLatestBashOutput(); + }); + this.appendActionButton(actionsEl, "clear", t10("chat.bangBash.clearAriaLabel"), "trash", () => { + this.clearBashOutputs(); + }); + this.bashHeaderEl.appendChild(actionsEl); + this.bashContentEl.toggleClass("claudian-hidden", !this.isBashExpanded); + if (!this.isBashExpanded) { + return; + } + for (const info of this.currentBashOutputs.values()) { + this.bashContentEl.appendChild(this.renderBashEntry(info, ownerDocument)); + } + if (scroll) { + this.bashContentEl.scrollTop = this.bashContentEl.scrollHeight; + this.scrollToBottom(); + } + } + renderBashEntry(info, ownerDocument) { + var _a5; + const entryEl = ownerDocument.createElement("div"); + entryEl.className = "claudian-tool-call claudian-status-panel-bash-entry"; + const entryHeaderEl = ownerDocument.createElement("div"); + entryHeaderEl.className = "claudian-tool-header"; + entryHeaderEl.setAttribute("tabindex", "0"); + entryHeaderEl.setAttribute("role", "button"); + const entryIconEl = ownerDocument.createElement("span"); + entryIconEl.className = "claudian-tool-icon"; + entryIconEl.setAttribute("aria-hidden", "true"); + (0, import_obsidian42.setIcon)(entryIconEl, "dollar-sign"); + entryHeaderEl.appendChild(entryIconEl); + const entryLabelEl = ownerDocument.createElement("span"); + entryLabelEl.className = "claudian-tool-label"; + entryLabelEl.textContent = t10("chat.bangBash.commandLabel", { command: this.truncateDescription(info.command, 60) }); + entryHeaderEl.appendChild(entryLabelEl); + const entryStatusEl = ownerDocument.createElement("span"); + entryStatusEl.className = "claudian-tool-status"; + entryStatusEl.classList.add(`status-${info.status}`); + entryStatusEl.setAttribute("aria-label", t10("chat.bangBash.statusLabel", { status: info.status })); + if (info.status === "completed") (0, import_obsidian42.setIcon)(entryStatusEl, "check"); + if (info.status === "error") (0, import_obsidian42.setIcon)(entryStatusEl, "x"); + entryHeaderEl.appendChild(entryStatusEl); + entryEl.appendChild(entryHeaderEl); + const contentEl = ownerDocument.createElement("div"); + contentEl.className = "claudian-tool-content"; + const isEntryExpanded = (_a5 = this.bashEntryExpanded.get(info.id)) != null ? _a5 : true; + contentEl.classList.toggle("claudian-hidden", !isEntryExpanded); + entryHeaderEl.setAttribute("aria-expanded", String(isEntryExpanded)); + entryHeaderEl.setAttribute("aria-label", isEntryExpanded ? t10("chat.bangBash.collapseOutput") : t10("chat.bangBash.expandOutput")); + entryHeaderEl.addEventListener("click", () => { + this.bashEntryExpanded.set(info.id, !isEntryExpanded); + this.renderBashOutputs({ scroll: false }); + }); + entryHeaderEl.addEventListener("keydown", (e2) => { + if (e2.key === "Enter" || e2.key === " ") { + e2.preventDefault(); + this.bashEntryExpanded.set(info.id, !isEntryExpanded); + this.renderBashOutputs({ scroll: false }); + } + }); + const rowEl = ownerDocument.createElement("div"); + rowEl.className = "claudian-tool-result-row"; + const textEl = ownerDocument.createElement("span"); + textEl.className = "claudian-tool-result-text"; + if (info.status === "running" && !info.output) { + textEl.textContent = t10("chat.bangBash.running"); + } else if (info.output) { + textEl.textContent = info.output; + } + rowEl.appendChild(textEl); + contentEl.appendChild(rowEl); + entryEl.appendChild(contentEl); + return entryEl; + } + async copyLatestBashOutput() { + var _a5; + const latest = Array.from(this.currentBashOutputs.values()).at(-1); + if (!latest) return; + const output = ((_a5 = latest.output) == null ? void 0 : _a5.trim()) || (latest.status === "running" ? t10("chat.bangBash.running") : ""); + const text = output ? `$ ${latest.command} +${output}` : `$ ${latest.command}`; + try { + await navigator.clipboard.writeText(text); + } catch (e2) { + new import_obsidian42.Notice(t10("chat.bangBash.copyFailed")); + } + } + appendActionButton(parent, name, ariaLabel, icon, action) { + var _a5; + const el2 = ((_a5 = parent.ownerDocument) != null ? _a5 : window.document).createElement("span"); + el2.className = `claudian-status-panel-bash-action claudian-status-panel-bash-action-${name}`; + el2.setAttribute("role", "button"); + el2.setAttribute("tabindex", "0"); + el2.setAttribute("aria-label", ariaLabel); + (0, import_obsidian42.setIcon)(el2, icon); + el2.addEventListener("click", (e2) => { + e2.stopPropagation(); + action(); + }); + el2.addEventListener("keydown", (e2) => { + if (e2.key === "Enter" || e2.key === " ") { + e2.preventDefault(); + e2.stopPropagation(); + action(); + } + }); + parent.appendChild(el2); + } + toggleBashSection() { + this.isBashExpanded = !this.isBashExpanded; + this.renderBashOutputs({ scroll: false }); + } + // ============================================ + // Cleanup + // ============================================ + /** + * Destroy the panel. + */ + destroy() { + if (this.todoHeaderEl) { + if (this.todoClickHandler) { + this.todoHeaderEl.removeEventListener("click", this.todoClickHandler); + } + if (this.todoKeydownHandler) { + this.todoHeaderEl.removeEventListener("keydown", this.todoKeydownHandler); + } + } + this.todoClickHandler = null; + this.todoKeydownHandler = null; + if (this.bashHeaderEl) { + if (this.bashClickHandler) { + this.bashHeaderEl.removeEventListener("click", this.bashClickHandler); + } + if (this.bashKeydownHandler) { + this.bashHeaderEl.removeEventListener("keydown", this.bashKeydownHandler); + } + } + this.bashClickHandler = null; + this.bashKeydownHandler = null; + this.currentBashOutputs.clear(); + if (this.panelEl) { + this.panelEl.remove(); + this.panelEl = null; + } + this.bashOutputContainerEl = null; + this.bashHeaderEl = null; + this.bashContentEl = null; + this.todoContainerEl = null; + this.todoHeaderEl = null; + this.todoContentEl = null; + this.containerEl = null; + this.currentTodos = null; + } +}; + +// src/features/chat/ui/textareaResize.ts +var TEXTAREA_BASE_MIN_HEIGHT = 60; +var TEXTAREA_MIN_MAX_HEIGHT = 150; +var TEXTAREA_MAX_HEIGHT_PERCENT = 0.55; +function calculateTextareaMaxHeight(viewHeight) { + return Math.max(TEXTAREA_MIN_MAX_HEIGHT, viewHeight * TEXTAREA_MAX_HEIGHT_PERCENT); +} +function calculateTextareaMinHeight({ + contentHeight, + flexAllocatedHeight +}) { + return contentHeight > flexAllocatedHeight ? contentHeight : TEXTAREA_BASE_MIN_HEIGHT; +} +function autoResizeTextarea(textarea) { + var _a5, _b3; + const viewHeight = (_b3 = (_a5 = textarea.closest(".claudian-container")) == null ? void 0 : _a5.clientHeight) != null ? _b3 : window.innerHeight; + const maxHeight = calculateTextareaMaxHeight(viewHeight); + textarea.setCssProps({ + "--claudian-textarea-min-height": `${TEXTAREA_BASE_MIN_HEIGHT}px`, + "--claudian-textarea-max-height": `${maxHeight}px` + }); + const flexAllocatedHeight = textarea.offsetHeight; + const contentHeight = Math.min(textarea.scrollHeight, maxHeight); + const minHeight = calculateTextareaMinHeight({ contentHeight, flexAllocatedHeight }); + textarea.setCssProps({ + "--claudian-textarea-min-height": `${minHeight}px`, + "--claudian-textarea-max-height": `${maxHeight}px` + }); +} + +// src/features/chat/utils/usageInfo.ts +function calculateUsagePercentage(contextTokens, contextWindow) { + return contextWindow > 0 ? Math.min(100, Math.max(0, Math.round(contextTokens / contextWindow * 100))) : 0; +} +function recalculateUsageForModel(usage, model, fallbackContextWindow) { + const preserveAuthoritativeWindow = usage.contextWindowIsAuthoritative === true && usage.contextWindow > 0 && usage.model === model; + const contextWindow = preserveAuthoritativeWindow ? usage.contextWindow : fallbackContextWindow; + return { + ...usage, + model, + contextWindow, + contextWindowIsAuthoritative: preserveAuthoritativeWindow, + percentage: calculateUsagePercentage(usage.contextTokens, contextWindow) + }; +} + +// src/features/chat/tabs/providerResolution.ts +function getStoredConversationProviderId(tab, plugin) { + var _a5, _b3; + if (tab.conversationId) { + const conversation = plugin.getConversationSync(tab.conversationId); + if (conversation == null ? void 0 : conversation.providerId) { + return conversation.providerId; + } + } + if (tab.lifecycleState === "blank" && tab.draftModel) { + return getEnabledProviderForModel( + tab.draftModel, + plugin.settings + ); + } + return (_b3 = (_a5 = tab.service) == null ? void 0 : _a5.providerId) != null ? _b3 : tab.providerId; +} +function getTabProviderId(tab, plugin, conversation) { + var _a5; + return (_a5 = conversation == null ? void 0 : conversation.providerId) != null ? _a5 : getStoredConversationProviderId(tab, plugin); +} + +// src/features/chat/tabs/types.ts +var DEFAULT_MAX_TABS = 3; +var MIN_TABS = 3; +var MAX_TABS = 10; +function generateTabId() { + return `tab-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`; +} + +// src/features/chat/tabs/Tab.ts +function getBlankTabModelOptions(settings11) { + return ProviderRegistry.getEnabledProviderIds(settings11).flatMap((providerId) => { + var _a5, _b3; + const uiConfig = ProviderRegistry.getChatUIConfig(providerId); + const providerIcon = (_b3 = (_a5 = uiConfig.getProviderIcon) == null ? void 0 : _a5.call(uiConfig)) != null ? _b3 : void 0; + const group = ProviderRegistry.getProviderDisplayName(providerId); + return uiConfig.getModelOptions(settings11).map((model) => ({ ...model, group, providerIcon })); + }); +} +function resolveBlankTabModel(plugin, providerId) { + const settings11 = plugin.settings; + if (!providerId) { + return settings11.model; + } + const targetProviderId = ProviderRegistry.isEnabled(providerId, settings11) ? providerId : ProviderRegistry.resolveSettingsProviderId(settings11); + const snapshot = ProviderSettingsCoordinator.getProviderSettingsSnapshot(settings11, targetProviderId); + return snapshot.model; +} +function getTabCapabilities(tab, plugin, conversation) { + var _a5; + const providerId = getTabProviderId(tab, plugin, conversation); + if (((_a5 = tab.service) == null ? void 0 : _a5.providerId) === providerId) { + return tab.service.getCapabilities(); + } + return ProviderRegistry.getCapabilities(providerId); +} +function getTabChatUIConfig(tab, plugin, conversation) { + return ProviderRegistry.getChatUIConfig(getTabProviderId(tab, plugin, conversation)); +} +function getTabSettingsSnapshot(tab, plugin) { + return ProviderSettingsCoordinator.getProviderSettingsSnapshot( + plugin.settings, + getTabProviderId(tab, plugin) + ); +} +function getTabPermissionMode(tab, plugin) { + const permissionMode = getTabSettingsSnapshot(tab, plugin).permissionMode; + return typeof permissionMode === "string" && permissionMode ? permissionMode : "normal"; +} +function getTabHiddenCommands(tab, plugin, conversation) { + return getHiddenProviderCommandSet( + plugin.settings, + getTabProviderId(tab, plugin, conversation) + ); +} +function isEnterWithoutShiftOrComposition(e2) { + if (e2.key !== "Enter" || e2.shiftKey || e2.isComposing) { + return false; + } + return true; +} +function hasPlatformSendModifier(e2) { + if (import_obsidian43.Platform.isMacOS) { + return e2.metaKey === true && !e2.ctrlKey && !e2.altKey; + } + return e2.ctrlKey === true && !e2.metaKey && !e2.altKey; +} +function shouldSendMessageFromExplicitEnterShortcut(e2) { + return isEnterWithoutShiftOrComposition(e2) && hasPlatformSendModifier(e2); +} +function shouldSendMessageFromEnterKey(e2, settings11) { + if (!isEnterWithoutShiftOrComposition(e2)) { + return false; + } + if (settings11.requireCommandOrControlEnterToSend === true) { + return hasPlatformSendModifier(e2); + } + return true; +} +function isTabInputFocused(tab) { + return tab.dom.inputEl.ownerDocument.activeElement === tab.dom.inputEl; +} +function sendTabInputMessage(tab, e2, options) { + if ((options == null ? void 0 : options.requireInputFocus) && !isTabInputFocused(tab)) { + return false; + } + const inputController = tab.controllers.inputController; + if (!inputController) { + return false; + } + e2.preventDefault(); + void inputController.sendMessage(); + return true; +} +function sendTabInputMessageFromExplicitEnterShortcut(tab, e2, options) { + if (!shouldSendMessageFromExplicitEnterShortcut(e2)) { + return false; + } + return sendTabInputMessage(tab, e2, options); +} +function sendTabInputMessageFromEnterKey(tab, settings11, e2) { + if (!shouldSendMessageFromEnterKey(e2, settings11)) { + return false; + } + return sendTabInputMessage(tab, e2); +} +function getRegistryProviderCatalogInfo(providerId) { + const catalog = ProviderWorkspaceRegistry.getCommandCatalog(providerId); + if (!catalog) { + return null; + } + return { + config: catalog.getDropdownConfig(), + getEntries: () => catalog.listDropdownEntries({ includeBuiltIns: false }) + }; +} +function getProviderMcpManager(providerId) { + return ProviderWorkspaceRegistry.getMcpServerManager(providerId); +} +function syncSlashCommandDropdownForProvider(tab, plugin, getProviderCatalogConfig, conversation) { + var _a5, _b3; + const dropdown = tab.ui.slashCommandDropdown; + if (!dropdown) { + return; + } + const catalogInfo = (_a5 = getProviderCatalogConfig == null ? void 0 : getProviderCatalogConfig()) != null ? _a5 : getRegistryProviderCatalogInfo(getTabProviderId(tab, plugin, conversation)); + if (catalogInfo) { + (_b3 = dropdown.setProviderCatalog) == null ? void 0 : _b3.call(dropdown, catalogInfo.config, catalogInfo.getEntries); + } else { + dropdown.resetSdkSkillsCache(); + } + dropdown.setHiddenCommands(getTabHiddenCommands(tab, plugin, conversation)); +} +async function updateTabProviderSettings(tab, plugin, update) { + const providerId = getTabProviderId(tab, plugin); + const snapshot = getTabSettingsSnapshot(tab, plugin); + update(snapshot); + ProviderSettingsCoordinator.commitProviderSettingsSnapshot( + plugin.settings, + providerId, + snapshot + ); + await plugin.saveSettings(); + return snapshot; +} +function refreshTabProviderUI(tab, plugin) { + var _a5, _b3, _c2, _d, _e2, _f2, _g; + const capabilities = getTabCapabilities(tab, plugin); + const permissionMode = getTabPermissionMode(tab, plugin); + (_a5 = tab.ui.modelSelector) == null ? void 0 : _a5.updateDisplay(); + (_b3 = tab.ui.modelSelector) == null ? void 0 : _b3.renderOptions(); + (_c2 = tab.ui.modeSelector) == null ? void 0 : _c2.updateDisplay(); + (_d = tab.ui.modeSelector) == null ? void 0 : _d.renderOptions(); + (_e2 = tab.ui.thinkingBudgetSelector) == null ? void 0 : _e2.updateDisplay(); + (_f2 = tab.ui.permissionToggle) == null ? void 0 : _f2.updateDisplay(); + (_g = tab.ui.serviceTierToggle) == null ? void 0 : _g.updateDisplay(); + tab.dom.inputWrapper.toggleClass( + "claudian-input-plan-mode", + permissionMode === "plan" && capabilities.supportsPlanMode + ); +} +function applyProviderUIGating(tab, plugin) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2; + const capabilities = getTabCapabilities(tab, plugin); + const uiConfig = getTabChatUIConfig(tab, plugin); + const mcpManager = capabilities.supportsMcpTools ? getProviderMcpManager(capabilities.providerId) : null; + const hasPermissionToggle = Boolean((_a5 = uiConfig.getPermissionModeToggle) == null ? void 0 : _a5.call(uiConfig)); + if (!capabilities.supportsMcpTools) { + (_b3 = tab.ui.mcpServerSelector) == null ? void 0 : _b3.clearEnabled(); + } + (_c2 = tab.ui.mcpServerSelector) == null ? void 0 : _c2.setVisible(capabilities.supportsMcpTools); + (_d = tab.ui.permissionToggle) == null ? void 0 : _d.setVisible(hasPermissionToggle); + (_e2 = tab.ui.fileContextManager) == null ? void 0 : _e2.setMcpManager(mcpManager); + (_f2 = tab.ui.fileContextManager) == null ? void 0 : _f2.setAgentService( + ProviderWorkspaceRegistry.getAgentMentionProvider(capabilities.providerId) + ); + (_g = tab.ui.imageContextManager) == null ? void 0 : _g.setEnabled(capabilities.supportsImageAttachments); + (_h2 = tab.ui.contextUsageMeter) == null ? void 0 : _h2.update(tab.state.usage); +} +function syncTabProviderServices(tab, plugin) { + var _a5, _b3, _c2, _d; + (_a5 = tab.services.instructionRefineService) == null ? void 0 : _a5.cancel(); + (_b3 = tab.services.instructionRefineService) == null ? void 0 : _b3.resetConversation(); + tab.services.instructionRefineService = ProviderRegistry.createInstructionRefineService(plugin, tab.providerId); + (_d = (_c2 = tab.services.subagentManager).setTaskResultInterpreter) == null ? void 0 : _d.call( + _c2, + ProviderRegistry.getTaskResultInterpreter(tab.providerId) + ); +} +function ensureTitleGenerationService(tab, plugin) { + if (!tab.services.titleGenerationService) { + tab.services.titleGenerationService = ProviderRegistry.createTitleGenerationService(plugin); + } +} +function cleanupTabRuntime(tab) { + if (tab.service && typeof tab.service.cleanup === "function") { + tab.service.cleanup(); + } + tab.service = null; + tab.serviceInitialized = false; +} +function onProviderAvailabilityChanged(tab, plugin) { + var _a5, _b3, _c2, _d, _e2; + if (tab.lifecycleState !== "blank") return; + const settingsSnapshot = plugin.settings; + const enabledProviderIds = ProviderRegistry.getEnabledProviderIds(settingsSnapshot); + let nextProviderId = tab.providerId; + if (tab.draftModel) { + const draftProvider = getEnabledProviderForModel(tab.draftModel, settingsSnapshot); + const draftProviderOwnsModel = ProviderRegistry.getChatUIConfig(draftProvider).ownsModel(tab.draftModel, settingsSnapshot); + if (!enabledProviderIds.includes(draftProvider) || !draftProviderOwnsModel) { + const fallbackProviderId = (_a5 = enabledProviderIds[0]) != null ? _a5 : DEFAULT_CHAT_PROVIDER_ID; + const fallbackModels = ProviderRegistry.getChatUIConfig(fallbackProviderId).getModelOptions(settingsSnapshot); + tab.draftModel = (_c2 = (_b3 = fallbackModels[0]) == null ? void 0 : _b3.value) != null ? _c2 : tab.draftModel; + nextProviderId = fallbackProviderId; + } else { + nextProviderId = draftProvider; + } + } + tab.providerId = nextProviderId; + if (tab.service && tab.service.providerId !== nextProviderId) { + tab.service.cleanup(); + tab.service = null; + tab.serviceInitialized = false; + } + syncTabProviderServices(tab, plugin); + (_d = tab.ui.slashCommandDropdown) == null ? void 0 : _d.setHiddenCommands(getTabHiddenCommands(tab, plugin)); + (_e2 = tab.ui.slashCommandDropdown) == null ? void 0 : _e2.resetSdkSkillsCache(); + refreshTabProviderUI(tab, plugin); + applyProviderUIGating(tab, plugin); +} +function createTab(options) { + var _a5, _b3; + const { + plugin, + containerEl, + conversation, + tabId, + onStreamingChanged, + onAttentionChanged, + onConversationIdChanged + } = options; + const id = tabId != null ? tabId : generateTabId(); + const contentEl = containerEl.createDiv({ cls: "claudian-tab-content claudian-hidden" }); + const state = new ChatState({ + onStreamingStateChanged: onStreamingChanged, + onAttentionChanged, + onConversationChanged: onConversationIdChanged + }); + const subagentManager = new SubagentManager(() => { + }); + const dom = buildTabDOM(contentEl); + state.queueIndicatorEl = dom.queueIndicatorEl; + const isBound = !!(conversation == null ? void 0 : conversation.id); + const restoredDraftModel = typeof options.draftModel === "string" ? options.draftModel.trim() : ""; + const draftModel = isBound ? null : restoredDraftModel || resolveBlankTabModel(plugin, options.defaultProviderId); + const initialProviderId = (_a5 = conversation == null ? void 0 : conversation.providerId) != null ? _a5 : draftModel ? getEnabledProviderForModel(draftModel, plugin.settings) : DEFAULT_CHAT_PROVIDER_ID; + const tab = { + id, + lifecycleState: isBound ? "bound_cold" : "blank", + draftModel, + providerId: initialProviderId, + conversationId: (_b3 = conversation == null ? void 0 : conversation.id) != null ? _b3 : null, + service: null, + serviceInitialized: false, + state, + controllers: { + selectionController: null, + browserSelectionController: null, + canvasSelectionController: null, + conversationController: null, + streamController: null, + inputController: null, + navigationController: null + }, + services: { + subagentManager, + instructionRefineService: null, + titleGenerationService: null + }, + ui: { + fileContextManager: null, + imageContextManager: null, + modelSelector: null, + modeSelector: null, + thinkingBudgetSelector: null, + externalContextSelector: null, + mcpServerSelector: null, + permissionToggle: null, + serviceTierToggle: null, + slashCommandDropdown: null, + instructionModeManager: null, + bangBashModeManager: null, + contextUsageMeter: null, + statusPanel: null, + navigationSidebar: null + }, + dom, + renderer: null + }; + return tab; +} +function buildTabDOM(contentEl) { + const messagesWrapperEl = contentEl.createDiv({ cls: "claudian-messages-wrapper" }); + const messagesEl = messagesWrapperEl.createDiv({ cls: "claudian-messages" }); + const welcomeEl = messagesEl.createDiv({ cls: "claudian-welcome" }); + const statusPanelContainerEl = contentEl.createDiv({ cls: "claudian-status-panel-container" }); + const inputContainerEl = contentEl.createDiv({ cls: "claudian-input-container" }); + const queueIndicatorEl = inputContainerEl.createDiv({ cls: "claudian-input-queue-row" }); + const navRowEl = inputContainerEl.createDiv({ cls: "claudian-input-nav-row" }); + const inputWrapper = inputContainerEl.createDiv({ cls: "claudian-input-wrapper" }); + const contextRowEl = inputWrapper.createDiv({ cls: "claudian-context-row" }); + const inputEl = inputWrapper.createEl("textarea", { + cls: "claudian-input", + attr: { + placeholder: "How can i help you today?", + rows: "3", + dir: "auto" + } + }); + return { + contentEl, + messagesEl, + welcomeEl, + statusPanelContainerEl, + inputContainerEl, + queueIndicatorEl, + inputWrapper, + inputEl, + navRowEl, + contextRowEl, + selectionIndicatorEl: null, + browserIndicatorEl: null, + canvasIndicatorEl: null, + eventCleanups: [] + }; +} +async function initializeTabService(tab, plugin, argOrOverride, maybeOverride) { + var _a5; + if (tab.lifecycleState === "closing") { + return; + } + const conversationOverride = isConversationLike(argOrOverride) ? argOrOverride : argOrOverride === null ? null : maybeOverride; + const conversation = conversationOverride != null ? conversationOverride : tab.conversationId ? await plugin.getConversationById(tab.conversationId) : null; + const providerId = getTabProviderId(tab, plugin, conversation); + if (tab.serviceInitialized && ((_a5 = tab.service) == null ? void 0 : _a5.providerId) === providerId) { + return; + } + let service = null; + let unsubscribeReadyState = null; + const previousService = tab.service; + try { + if (typeof (previousService == null ? void 0 : previousService.cleanup) === "function") { + previousService.cleanup(); + } + tab.service = null; + tab.serviceInitialized = false; + const runtime = ProviderRegistry.createChatRuntime({ plugin, providerId }); + service = runtime; + unsubscribeReadyState = runtime.onReadyStateChange(() => { + }); + tab.dom.eventCleanups.push(() => unsubscribeReadyState == null ? void 0 : unsubscribeReadyState()); + if (conversation) { + const hasMessages = conversation.messages.length > 0; + const externalContextPaths = hasMessages ? conversation.externalContextPaths || [] : plugin.settings.persistentExternalContextPaths || []; + runtime.syncConversationState(conversation, externalContextPaths); + } + if (isClosingLifecycleState(tab.lifecycleState)) { + unsubscribeReadyState == null ? void 0 : unsubscribeReadyState(); + service == null ? void 0 : service.cleanup(); + return; + } + tab.providerId = providerId; + tab.service = service; + tab.serviceInitialized = true; + if (tab.lifecycleState === "blank") { + tab.draftModel = null; + } + tab.lifecycleState = "bound_active"; + } catch (error48) { + unsubscribeReadyState == null ? void 0 : unsubscribeReadyState(); + service == null ? void 0 : service.cleanup(); + tab.service = null; + tab.serviceInitialized = false; + throw error48; + } +} +function isConversationLike(value) { + return !!value && typeof value === "object" && typeof value.id === "string" && Array.isArray(value.messages); +} +function initializeContextManagers(tab, plugin) { + const { dom } = tab; + const app = plugin.app; + tab.ui.fileContextManager = new FileContextManager( + app, + dom.contextRowEl, + dom.inputEl, + { + getExcludedTags: () => plugin.settings.excludedTags, + onChipsChanged: () => { + var _a5, _b3, _c2, _d; + (_a5 = tab.controllers.selectionController) == null ? void 0 : _a5.updateContextRowVisibility(); + (_b3 = tab.controllers.browserSelectionController) == null ? void 0 : _b3.updateContextRowVisibility(); + (_c2 = tab.controllers.canvasSelectionController) == null ? void 0 : _c2.updateContextRowVisibility(); + autoResizeTextarea(dom.inputEl); + (_d = tab.renderer) == null ? void 0 : _d.scrollToBottomIfNeeded(); + }, + getExternalContexts: () => { + var _a5; + return ((_a5 = tab.ui.externalContextSelector) == null ? void 0 : _a5.getExternalContexts()) || []; + } + }, + dom.inputContainerEl + ); + tab.ui.fileContextManager.setMcpManager(getProviderMcpManager(getTabProviderId(tab, plugin))); + tab.ui.imageContextManager = new ImageContextManager( + dom.inputContainerEl, + dom.inputEl, + { + onImagesChanged: () => { + var _a5, _b3, _c2, _d; + (_a5 = tab.controllers.selectionController) == null ? void 0 : _a5.updateContextRowVisibility(); + (_b3 = tab.controllers.browserSelectionController) == null ? void 0 : _b3.updateContextRowVisibility(); + (_c2 = tab.controllers.canvasSelectionController) == null ? void 0 : _c2.updateContextRowVisibility(); + autoResizeTextarea(dom.inputEl); + (_d = tab.renderer) == null ? void 0 : _d.scrollToBottomIfNeeded(); + } + }, + dom.contextRowEl + ); +} +function initializeSlashCommands(tab, getHiddenCommands, catalogInfo) { + var _a5; + const { dom } = tab; + tab.ui.slashCommandDropdown = new SlashCommandDropdown( + dom.inputContainerEl, + dom.inputEl, + { + onSelect: () => { + }, + onHide: () => { + } + }, + { + hiddenCommands: (_a5 = getHiddenCommands == null ? void 0 : getHiddenCommands()) != null ? _a5 : /* @__PURE__ */ new Set(), + providerConfig: catalogInfo == null ? void 0 : catalogInfo.config, + getProviderEntries: catalogInfo == null ? void 0 : catalogInfo.getEntries + } + ); +} +function initializeInstructionAndTodo(tab, plugin) { + const { dom } = tab; + syncTabProviderServices(tab, plugin); + ensureTitleGenerationService(tab, plugin); + tab.ui.instructionModeManager = new InstructionModeManager( + dom.inputEl, + { + onSubmit: async (rawInstruction) => { + var _a5; + await ((_a5 = tab.controllers.inputController) == null ? void 0 : _a5.handleInstructionSubmit(rawInstruction)); + }, + getInputWrapper: () => dom.inputWrapper + } + ); + if (isBangBashEnabled(plugin.settings)) { + const vaultPath = getVaultPath(plugin.app); + if (vaultPath) { + const enhancedPath = getEnhancedPath(); + const bashService = new BangBashService(vaultPath, enhancedPath); + tab.ui.bangBashModeManager = new BangBashModeManager( + dom.inputEl, + { + onSubmit: async (command) => { + const statusPanel = tab.ui.statusPanel; + if (!statusPanel) return; + const id = `bash-${Date.now()}`; + statusPanel.addBashOutput({ id, command, status: "running", output: "" }); + const result = await bashService.execute(command); + const output = [result.stdout, result.stderr, result.error].filter(Boolean).join("\n").trim(); + const status = result.exitCode === 0 ? "completed" : "error"; + statusPanel.updateBashOutput(id, { status, output, exitCode: result.exitCode }); + }, + getInputWrapper: () => dom.inputWrapper + } + ); + } + } + tab.ui.statusPanel = new StatusPanel(); + tab.ui.statusPanel.mount(dom.statusPanelContainerEl); +} +function isBangBashEnabled(settings11) { + return ProviderRegistry.getEnabledProviderIds(settings11).some((providerId) => { + var _a5, _b3, _c2; + return (_c2 = (_b3 = (_a5 = ProviderRegistry.getChatUIConfig(providerId)).isBangBashEnabled) == null ? void 0 : _b3.call(_a5, settings11)) != null ? _c2 : false; + }); +} +function initializeInputToolbar(tab, plugin, getProviderCatalogConfig, onProviderChanged) { + var _a5; + const { dom } = tab; + const inputToolbar = dom.inputWrapper.createDiv({ cls: "claudian-input-toolbar" }); + const blankTabUIConfigProxy = () => { + const draftProvider = tab.draftModel ? getEnabledProviderForModel(tab.draftModel, plugin.settings) : DEFAULT_CHAT_PROVIDER_ID; + const baseConfig = ProviderRegistry.getChatUIConfig(draftProvider); + return { + ...baseConfig, + getModelOptions: (settings11) => getBlankTabModelOptions(settings11) + }; + }; + const toolbarComponents = createInputToolbar(inputToolbar, { + getUIConfig: () => { + if (tab.lifecycleState === "blank") { + return blankTabUIConfigProxy(); + } + return getTabChatUIConfig(tab, plugin); + }, + getCapabilities: () => getTabCapabilities(tab, plugin), + getSettings: () => getTabSettingsSnapshot(tab, plugin), + getEnvironmentVariables: () => plugin.getActiveEnvironmentVariables(), + onModelChange: async (model) => { + var _a6, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m; + if (tab.lifecycleState === "blank") { + const previousProvider = tab.providerId; + tab.draftModel = model; + const newProvider = getEnabledProviderForModel( + model, + plugin.settings + ); + const didProviderChange = newProvider !== previousProvider; + if (tab.service) { + cleanupTabRuntime(tab); + } + tab.providerId = newProvider; + if (didProviderChange) { + syncTabProviderServices(tab, plugin); + } + syncSlashCommandDropdownForProvider(tab, plugin, getProviderCatalogConfig); + const uiConfig2 = ProviderRegistry.getChatUIConfig(newProvider); + await updateTabProviderSettings(tab, plugin, (settings11) => { + settings11.model = model; + uiConfig2.applyModelDefaults(model, settings11); + }); + if (didProviderChange) { + await (onProviderChanged == null ? void 0 : onProviderChanged(newProvider)); + } + await ((_a6 = uiConfig2.prepareModelMetadata) == null ? void 0 : _a6.call(uiConfig2, model, plugin.settings, { plugin })); + (_b3 = tab.ui.thinkingBudgetSelector) == null ? void 0 : _b3.updateDisplay(); + (_c2 = tab.ui.serviceTierToggle) == null ? void 0 : _c2.updateDisplay(); + (_d = tab.ui.modelSelector) == null ? void 0 : _d.updateDisplay(); + (_e2 = tab.ui.modeSelector) == null ? void 0 : _e2.updateDisplay(); + (_f2 = tab.ui.modelSelector) == null ? void 0 : _f2.renderOptions(); + (_g = tab.ui.modeSelector) == null ? void 0 : _g.renderOptions(); + applyProviderUIGating(tab, plugin); + return; + } + const boundProvider = tab.providerId; + const modelProvider = getProviderForModel(model, plugin.settings); + if (modelProvider !== boundProvider) { + new import_obsidian43.Notice("Cannot switch provider on a bound session. Start a new tab instead."); + (_h2 = tab.ui.modelSelector) == null ? void 0 : _h2.updateDisplay(); + return; + } + const uiConfig = getTabChatUIConfig(tab, plugin); + const providerSettings = await updateTabProviderSettings(tab, plugin, (settings11) => { + settings11.model = model; + uiConfig.applyModelDefaults(model, settings11); + }); + await ((_i = uiConfig.prepareModelMetadata) == null ? void 0 : _i.call(uiConfig, model, plugin.settings, { plugin })); + (_j = tab.ui.thinkingBudgetSelector) == null ? void 0 : _j.updateDisplay(); + (_k3 = tab.ui.serviceTierToggle) == null ? void 0 : _k3.updateDisplay(); + (_l2 = tab.ui.modelSelector) == null ? void 0 : _l2.updateDisplay(); + (_m = tab.ui.modelSelector) == null ? void 0 : _m.renderOptions(); + const currentUsage = tab.state.usage; + if (currentUsage) { + const newContextWindow = uiConfig.getContextWindowSize( + model, + providerSettings.customContextLimits, + providerSettings + ); + tab.state.usage = recalculateUsageForModel(currentUsage, model, newContextWindow); + } + }, + onModeChange: async (mode) => { + var _a6, _b3; + await updateTabProviderSettings(tab, plugin, (settings11) => { + var _a7, _b4; + (_b4 = (_a7 = getTabChatUIConfig(tab, plugin)).applyModeSelection) == null ? void 0 : _b4.call(_a7, mode, settings11); + }); + (_a6 = tab.ui.modeSelector) == null ? void 0 : _a6.updateDisplay(); + (_b3 = tab.ui.modeSelector) == null ? void 0 : _b3.renderOptions(); + }, + onThinkingBudgetChange: async (budget) => { + await updateTabProviderSettings(tab, plugin, (settings11) => { + var _a6, _b3; + settings11.thinkingBudget = budget; + (_b3 = (_a6 = getTabChatUIConfig(tab, plugin)).applyReasoningSelection) == null ? void 0 : _b3.call(_a6, settings11.model, budget, settings11); + }); + }, + onEffortLevelChange: async (effort) => { + await updateTabProviderSettings(tab, plugin, (settings11) => { + var _a6, _b3; + settings11.effortLevel = effort; + (_b3 = (_a6 = getTabChatUIConfig(tab, plugin)).applyReasoningSelection) == null ? void 0 : _b3.call(_a6, settings11.model, effort, settings11); + }); + }, + onServiceTierChange: async (serviceTier) => { + var _a6; + await updateTabProviderSettings(tab, plugin, (settings11) => { + settings11.serviceTier = serviceTier; + }); + (_a6 = tab.ui.serviceTierToggle) == null ? void 0 : _a6.updateDisplay(); + }, + onPermissionModeChange: async (mode) => { + var _a6; + await updateTabProviderSettings(tab, plugin, (settings11) => { + const uiConfig = getTabChatUIConfig(tab, plugin); + if (uiConfig.applyPermissionMode) { + uiConfig.applyPermissionMode(mode, settings11); + } else { + settings11.permissionMode = mode; + } + }); + (_a6 = tab.ui.permissionToggle) == null ? void 0 : _a6.updateDisplay(); + dom.inputWrapper.toggleClass( + "claudian-input-plan-mode", + mode === "plan" && getTabCapabilities(tab, plugin).supportsPlanMode + ); + } + }); + tab.ui.modelSelector = toolbarComponents.modelSelector; + tab.ui.modeSelector = toolbarComponents.modeSelector; + tab.ui.thinkingBudgetSelector = toolbarComponents.thinkingBudgetSelector; + tab.ui.contextUsageMeter = toolbarComponents.contextUsageMeter; + tab.ui.externalContextSelector = toolbarComponents.externalContextSelector; + tab.ui.mcpServerSelector = toolbarComponents.mcpServerSelector; + tab.ui.permissionToggle = toolbarComponents.permissionToggle; + tab.ui.serviceTierToggle = toolbarComponents.serviceTierToggle; + tab.ui.mcpServerSelector.setMcpManager(getProviderMcpManager(getTabProviderId(tab, plugin))); + (_a5 = tab.ui.fileContextManager) == null ? void 0 : _a5.setOnMcpMentionChange((servers) => { + var _a6; + (_a6 = tab.ui.mcpServerSelector) == null ? void 0 : _a6.addMentionedServers(servers); + }); + tab.ui.externalContextSelector.setOnChange(() => { + var _a6; + (_a6 = tab.ui.fileContextManager) == null ? void 0 : _a6.preScanExternalContexts(); + }); + tab.ui.externalContextSelector.setPersistentPaths( + plugin.settings.persistentExternalContextPaths || [] + ); + tab.ui.externalContextSelector.setOnPersistenceChange((paths) => { + plugin.settings.persistentExternalContextPaths = paths; + void plugin.saveSettings(); + }); + refreshTabProviderUI(tab, plugin); + applyProviderUIGating(tab, plugin); +} +function initializeTabUI(tab, plugin, options = {}) { + var _a5, _b3; + const { dom, state } = tab; + initializeContextManagers(tab, plugin); + dom.selectionIndicatorEl = dom.contextRowEl.createDiv({ cls: "claudian-selection-indicator claudian-hidden" }); + dom.browserIndicatorEl = dom.contextRowEl.createDiv({ cls: "claudian-browser-selection-indicator claudian-hidden" }); + dom.canvasIndicatorEl = dom.contextRowEl.createDiv({ cls: "claudian-canvas-indicator claudian-hidden" }); + const catalogInfo = (_b3 = (_a5 = options.getProviderCatalogConfig) == null ? void 0 : _a5.call(options)) != null ? _b3 : null; + initializeSlashCommands( + tab, + () => getTabHiddenCommands(tab, plugin), + catalogInfo + ); + if (dom.messagesEl.parentElement) { + tab.ui.navigationSidebar = new NavigationSidebar( + dom.messagesEl.parentElement, + dom.messagesEl + ); + } + initializeInstructionAndTodo(tab, plugin); + initializeInputToolbar(tab, plugin, options.getProviderCatalogConfig, options.onProviderChanged); + state.callbacks = { + ...state.callbacks, + onUsageChanged: (usage) => { + var _a6; + (_a6 = tab.ui.contextUsageMeter) == null ? void 0 : _a6.update(usage); + }, + onTodosChanged: (todos) => { + var _a6; + return (_a6 = tab.ui.statusPanel) == null ? void 0 : _a6.updateTodos(todos); + }, + onAutoScrollChanged: () => { + var _a6; + return (_a6 = tab.ui.navigationSidebar) == null ? void 0 : _a6.updateVisibility(); + } + }; + const resizeObserver = new ResizeObserver(() => { + var _a6; + (_a6 = tab.ui.navigationSidebar) == null ? void 0 : _a6.updateVisibility(); + }); + resizeObserver.observe(dom.messagesEl); + dom.eventCleanups.push(() => resizeObserver.disconnect()); +} +function deepCloneMessages(messages) { + if (typeof structuredClone === "function") { + return structuredClone(messages); + } + return JSON.parse(JSON.stringify(messages)); +} +function isClosingLifecycleState(state) { + return state === "closing"; +} +function countUserMessagesForForkTitle(messages) { + return messages.filter((m4) => m4.role === "user" && !m4.isInterrupt && !m4.isRebuiltContext).length; +} +function resolveForkSource(tab, plugin) { + var _a5; + const conversation = tab.conversationId ? plugin.getConversationSync(tab.conversationId) : null; + const sourceSessionId = tab.service ? tab.service.resolveSessionIdForFork(conversation != null ? conversation : null) : ProviderRegistry.getConversationHistoryService((_a5 = conversation == null ? void 0 : conversation.providerId) != null ? _a5 : tab.providerId).resolveSessionIdForConversation(conversation); + if (!sourceSessionId) { + new import_obsidian43.Notice(t10("chat.fork.failed", { error: t10("chat.fork.errorNoSession") })); + return null; + } + return { + providerId: getTabProviderId(tab, plugin, conversation), + sourceSessionId, + sourceProviderState: conversation == null ? void 0 : conversation.providerState, + sourceTitle: conversation == null ? void 0 : conversation.title, + currentNote: conversation == null ? void 0 : conversation.currentNote + }; +} +async function handleForkRequest(tab, plugin, userMessageId, forkRequestCallback) { + const { state } = tab; + if (!getTabCapabilities(tab, plugin).supportsFork) { + new import_obsidian43.Notice("Fork is not supported by this provider."); + return; + } + if (state.isStreaming) { + new import_obsidian43.Notice(t10("chat.fork.unavailableStreaming")); + return; + } + const msgs = state.messages; + const userIdx = msgs.findIndex((m4) => m4.id === userMessageId); + if (userIdx === -1) { + new import_obsidian43.Notice(t10("chat.fork.failed", { error: t10("chat.fork.errorMessageNotFound") })); + return; + } + if (!msgs[userIdx].userMessageId) { + new import_obsidian43.Notice(t10("chat.fork.unavailableNoUuid")); + return; + } + const rewindCtx = findRewindContext(msgs, userIdx); + if (!rewindCtx.hasResponse || !rewindCtx.prevAssistantUuid) { + new import_obsidian43.Notice(t10("chat.fork.unavailableNoResponse")); + return; + } + const source = resolveForkSource(tab, plugin); + if (!source) return; + await forkRequestCallback({ + messages: deepCloneMessages(msgs.slice(0, userIdx)), + providerId: source.providerId, + sourceSessionId: source.sourceSessionId, + sourceProviderState: source.sourceProviderState, + resumeAt: rewindCtx.prevAssistantUuid, + sourceTitle: source.sourceTitle, + forkAtUserMessage: countUserMessagesForForkTitle(msgs.slice(0, userIdx + 1)), + currentNote: source.currentNote + }); +} +async function handleForkAll(tab, plugin, forkRequestCallback) { + const { state } = tab; + if (!getTabCapabilities(tab, plugin).supportsFork) { + new import_obsidian43.Notice("Fork is not supported by this provider."); + return; + } + if (state.isStreaming) { + new import_obsidian43.Notice(t10("chat.fork.unavailableStreaming")); + return; + } + const msgs = state.messages; + if (msgs.length === 0) { + new import_obsidian43.Notice(t10("chat.fork.commandNoMessages")); + return; + } + let lastAssistantUuid; + for (let i = msgs.length - 1; i >= 0; i--) { + if (msgs[i].role === "assistant" && msgs[i].assistantMessageId) { + lastAssistantUuid = msgs[i].assistantMessageId; + break; + } + } + if (!lastAssistantUuid) { + new import_obsidian43.Notice(t10("chat.fork.commandNoAssistantUuid")); + return; + } + const source = resolveForkSource(tab, plugin); + if (!source) return; + await forkRequestCallback({ + messages: deepCloneMessages(msgs), + providerId: source.providerId, + sourceSessionId: source.sourceSessionId, + sourceProviderState: source.sourceProviderState, + resumeAt: lastAssistantUuid, + sourceTitle: source.sourceTitle, + forkAtUserMessage: countUserMessagesForForkTitle(msgs) + 1, + currentNote: source.currentNote + }); +} +function initializeTabControllers(tab, plugin, component, arg4, arg5, arg6, arg7) { + const isLegacy = arg4 !== void 0 && typeof arg4 !== "function"; + const forkRequestCallback = isLegacy ? arg5 : arg4; + const openConversation = isLegacy ? arg6 : arg5; + const getProviderCatalogConfig = isLegacy ? arg7 : arg6; + const { dom, state, services, ui } = tab; + tab.renderer = new MessageRenderer( + plugin, + component, + dom.messagesEl, + (id, mode) => tab.controllers.conversationController.rewind(id, mode), + forkRequestCallback ? (id) => handleForkRequest(tab, plugin, id, forkRequestCallback) : void 0, + () => getTabCapabilities(tab, plugin) + ); + tab.controllers.selectionController = new SelectionController( + plugin.app, + dom.selectionIndicatorEl, + dom.inputEl, + dom.contextRowEl, + () => autoResizeTextarea(dom.inputEl), + dom.contentEl + ); + tab.controllers.browserSelectionController = new BrowserSelectionController( + plugin.app, + dom.browserIndicatorEl, + dom.inputEl, + dom.contextRowEl, + () => autoResizeTextarea(dom.inputEl) + ); + tab.controllers.canvasSelectionController = new CanvasSelectionController( + plugin.app, + dom.canvasIndicatorEl, + dom.inputEl, + dom.contextRowEl, + () => autoResizeTextarea(dom.inputEl) + ); + tab.controllers.streamController = new StreamController({ + plugin, + state, + renderer: tab.renderer, + subagentManager: services.subagentManager, + getMessagesEl: () => dom.messagesEl, + getFileContextManager: () => ui.fileContextManager, + updateQueueIndicator: () => { + var _a5; + return (_a5 = tab.controllers.inputController) == null ? void 0 : _a5.updateQueueIndicator(); + }, + getAgentService: () => tab.service + }); + services.subagentManager.setCallback( + (subagent) => { + var _a5, _b3; + (_a5 = tab.controllers.streamController) == null ? void 0 : _a5.onAsyncSubagentStateChange(subagent); + if (!tab.state.isStreaming && tab.state.currentConversationId) { + void ((_b3 = tab.controllers.conversationController) == null ? void 0 : _b3.save(false).catch(() => { + })); + } + } + ); + tab.controllers.conversationController = new ConversationController( + { + plugin, + state, + renderer: tab.renderer, + subagentManager: services.subagentManager, + getHistoryDropdown: () => null, + // Tab doesn't have its own history dropdown + getWelcomeEl: () => dom.welcomeEl, + setWelcomeEl: (el2) => { + dom.welcomeEl = el2; + }, + getMessagesEl: () => dom.messagesEl, + getInputEl: () => dom.inputEl, + getFileContextManager: () => ui.fileContextManager, + getImageContextManager: () => ui.imageContextManager, + getMcpServerSelector: () => ui.mcpServerSelector, + getExternalContextSelector: () => ui.externalContextSelector, + clearQueuedMessage: () => { + var _a5; + return (_a5 = tab.controllers.inputController) == null ? void 0 : _a5.clearQueuedMessage(); + }, + getTitleGenerationService: () => services.titleGenerationService, + getStatusPanel: () => ui.statusPanel, + getAgentService: () => tab.service, + // Use tab's service instead of plugin's + dismissPendingInlinePrompts: () => { + var _a5; + return (_a5 = tab.controllers.inputController) == null ? void 0 : _a5.dismissPendingApproval(); + }, + ensureServiceForConversation: async (conversation) => { + var _a5; + const nextProviderId = getTabProviderId(tab, plugin, conversation); + const providerChanged = tab.providerId !== nextProviderId; + tab.providerId = nextProviderId; + if (providerChanged) { + syncTabProviderServices(tab, plugin); + } + tab.conversationId = (_a5 = conversation == null ? void 0 : conversation.id) != null ? _a5 : null; + tab.draftModel = null; + tab.lifecycleState = conversation ? "bound_cold" : "blank"; + syncSlashCommandDropdownForProvider(tab, plugin, getProviderCatalogConfig, conversation); + if (tab.service && tab.service.providerId === nextProviderId && conversation) { + const hasMessages = conversation.messages.length > 0; + const externalContextPaths = hasMessages ? conversation.externalContextPaths || [] : plugin.settings.persistentExternalContextPaths || []; + tab.service.syncConversationState(conversation, externalContextPaths); + } + refreshTabProviderUI(tab, plugin); + applyProviderUIGating(tab, plugin); + } + }, + { + onNewConversation: () => { + const previousProviderId = tab.providerId; + cleanupTabRuntime(tab); + tab.lifecycleState = "blank"; + tab.draftModel = resolveBlankTabModel(plugin, previousProviderId); + tab.conversationId = null; + tab.providerId = getTabProviderId(tab, plugin); + if (tab.providerId !== previousProviderId) { + syncTabProviderServices(tab, plugin); + } + refreshTabProviderUI(tab, plugin); + applyProviderUIGating(tab, plugin); + syncSlashCommandDropdownForProvider(tab, plugin, getProviderCatalogConfig); + }, + onConversationLoaded: () => { + var _a5; + return (_a5 = ui.slashCommandDropdown) == null ? void 0 : _a5.resetSdkSkillsCache(); + }, + onConversationSwitched: () => { + var _a5; + return (_a5 = ui.slashCommandDropdown) == null ? void 0 : _a5.resetSdkSkillsCache(); + } + } + ); + tab.controllers.inputController = new InputController({ + plugin, + state, + renderer: tab.renderer, + streamController: tab.controllers.streamController, + selectionController: tab.controllers.selectionController, + browserSelectionController: tab.controllers.browserSelectionController, + canvasSelectionController: tab.controllers.canvasSelectionController, + conversationController: tab.controllers.conversationController, + getInputEl: () => dom.inputEl, + getInputContainerEl: () => dom.inputContainerEl, + getWelcomeEl: () => dom.welcomeEl, + getMessagesEl: () => dom.messagesEl, + getFileContextManager: () => ui.fileContextManager, + getImageContextManager: () => ui.imageContextManager, + getMcpServerSelector: () => ui.mcpServerSelector, + getExternalContextSelector: () => ui.externalContextSelector, + getInstructionModeManager: () => ui.instructionModeManager, + getInstructionRefineService: () => services.instructionRefineService, + getTitleGenerationService: () => services.titleGenerationService, + getStatusPanel: () => ui.statusPanel, + generateId: generateMessageId, + resetInputHeight: () => { + }, + getAuxiliaryModel: () => { + var _a5, _b3, _c2, _d; + return (_d = (_c2 = (_b3 = (_a5 = tab.service) == null ? void 0 : _a5.getAuxiliaryModel) == null ? void 0 : _b3.call(_a5)) != null ? _c2 : tab.draftModel) != null ? _d : null; + }, + getAgentService: () => tab.service, + getSubagentManager: () => services.subagentManager, + getTabProviderId: () => getTabProviderId(tab, plugin), + ensureServiceInitialized: async () => { + if (tab.serviceInitialized && tab.lifecycleState === "bound_active") { + return true; + } + try { + if (tab.lifecycleState === "blank" && tab.draftModel) { + const derivedProvider = getEnabledProviderForModel( + tab.draftModel, + plugin.settings + ); + tab.providerId = derivedProvider; + } + await initializeTabService(tab, plugin); + setupServiceCallbacks(tab, plugin); + refreshTabProviderUI(tab, plugin); + applyProviderUIGating(tab, plugin); + return true; + } catch (error48) { + new import_obsidian43.Notice(error48 instanceof Error ? error48.message : "Failed to initialize chat service"); + return false; + } + }, + openConversation, + onForkAll: forkRequestCallback ? () => handleForkAll(tab, plugin, forkRequestCallback) : void 0, + restorePrePlanPermissionModeIfNeeded: () => { + var _a5; + if (getTabPermissionMode(tab, plugin) === "plan") { + const restoreMode = (_a5 = tab.state.prePlanPermissionMode) != null ? _a5 : "normal"; + tab.state.prePlanPermissionMode = null; + updatePlanModeUI(tab, plugin, restoreMode); + } + } + }); + tab.controllers.navigationController = new NavigationController({ + getMessagesEl: () => dom.messagesEl, + getInputEl: () => dom.inputEl, + getSettings: () => plugin.settings.keyboardNavigation, + isStreaming: () => state.isStreaming, + shouldSkipEscapeHandling: () => { + var _a5, _b3, _c2, _d, _e2; + if ((_a5 = ui.instructionModeManager) == null ? void 0 : _a5.isActive()) return true; + if ((_b3 = ui.bangBashModeManager) == null ? void 0 : _b3.isActive()) return true; + if ((_c2 = tab.controllers.inputController) == null ? void 0 : _c2.isResumeDropdownVisible()) return true; + if ((_d = ui.slashCommandDropdown) == null ? void 0 : _d.isVisible()) return true; + if ((_e2 = ui.fileContextManager) == null ? void 0 : _e2.isMentionDropdownVisible()) return true; + return false; + } + }); + tab.controllers.navigationController.initialize(); +} +function wireTabInputEvents(tab, plugin) { + var _a5, _b3; + const { dom, ui, state, controllers } = tab; + let wasBangBashActive = (_b3 = (_a5 = ui.bangBashModeManager) == null ? void 0 : _a5.isActive()) != null ? _b3 : false; + const syncBangBashSuppression = () => { + var _a6, _b4, _c2, _d; + const isActive = (_b4 = (_a6 = ui.bangBashModeManager) == null ? void 0 : _a6.isActive()) != null ? _b4 : false; + if (isActive === wasBangBashActive) return; + wasBangBashActive = isActive; + (_c2 = ui.slashCommandDropdown) == null ? void 0 : _c2.setEnabled(!isActive); + if (isActive) { + (_d = ui.fileContextManager) == null ? void 0 : _d.hideMentionDropdown(); + } + }; + const keydownHandler = (e2) => { + var _a6, _b4, _c2, _d, _e2, _f2, _g, _h2; + if ((_a6 = ui.bangBashModeManager) == null ? void 0 : _a6.isActive()) { + ui.bangBashModeManager.handleKeydown(e2); + syncBangBashSuppression(); + return; + } + if (getTabCapabilities(tab, plugin).supportsInstructionMode && ((_b4 = ui.instructionModeManager) == null ? void 0 : _b4.handleTriggerKey(e2))) { + return; + } + if ((_c2 = ui.bangBashModeManager) == null ? void 0 : _c2.handleTriggerKey(e2)) { + syncBangBashSuppression(); + return; + } + if (getTabCapabilities(tab, plugin).supportsInstructionMode && ((_d = ui.instructionModeManager) == null ? void 0 : _d.handleKeydown(e2))) { + return; + } + if (sendTabInputMessageFromExplicitEnterShortcut(tab, e2)) { + return; + } + if ((_e2 = controllers.inputController) == null ? void 0 : _e2.handleResumeKeydown(e2)) { + return; + } + if ((_f2 = ui.slashCommandDropdown) == null ? void 0 : _f2.handleKeydown(e2)) { + return; + } + if ((_g = ui.fileContextManager) == null ? void 0 : _g.handleMentionKeydown(e2)) { + return; + } + if (e2.key === "Escape" && !e2.isComposing && state.isStreaming) { + e2.preventDefault(); + (_h2 = controllers.inputController) == null ? void 0 : _h2.cancelStreaming(); + return; + } + if (sendTabInputMessageFromEnterKey(tab, plugin.settings, e2)) { + return; + } + }; + dom.inputEl.addEventListener("keydown", keydownHandler); + dom.eventCleanups.push(() => dom.inputEl.removeEventListener("keydown", keydownHandler)); + const inputHandler = () => { + var _a6, _b4, _c2, _d; + if (!((_a6 = ui.bangBashModeManager) == null ? void 0 : _a6.isActive())) { + (_b4 = ui.fileContextManager) == null ? void 0 : _b4.handleInputChange(); + } + (_c2 = ui.instructionModeManager) == null ? void 0 : _c2.handleInputChange(); + (_d = ui.bangBashModeManager) == null ? void 0 : _d.handleInputChange(); + syncBangBashSuppression(); + autoResizeTextarea(dom.inputEl); + }; + dom.inputEl.addEventListener("input", inputHandler); + dom.eventCleanups.push(() => dom.inputEl.removeEventListener("input", inputHandler)); + const focusHandler = (e2) => { + var _a6; + if (e2.relatedTarget && dom.contentEl.contains(e2.relatedTarget)) return; + (_a6 = controllers.selectionController) == null ? void 0 : _a6.showHighlight(); + }; + dom.contentEl.addEventListener("focusin", focusHandler); + dom.eventCleanups.push(() => dom.contentEl.removeEventListener("focusin", focusHandler)); + const SCROLL_THRESHOLD = 20; + const RE_ENABLE_DELAY = 150; + let reEnableTimeout = null; + const isAutoScrollAllowed = () => { + var _a6; + return (_a6 = plugin.settings.enableAutoScroll) != null ? _a6 : true; + }; + const scrollHandler = () => { + if (!isAutoScrollAllowed()) { + if (reEnableTimeout) { + window.clearTimeout(reEnableTimeout); + reEnableTimeout = null; + } + state.autoScrollEnabled = false; + return; + } + const { scrollTop, scrollHeight, clientHeight } = dom.messagesEl; + const isAtBottom = scrollHeight - scrollTop - clientHeight <= SCROLL_THRESHOLD; + if (!isAtBottom) { + if (reEnableTimeout) { + window.clearTimeout(reEnableTimeout); + reEnableTimeout = null; + } + state.autoScrollEnabled = false; + } else if (!state.autoScrollEnabled) { + if (!reEnableTimeout) { + reEnableTimeout = window.setTimeout(() => { + reEnableTimeout = null; + const { scrollTop: scrollTop2, scrollHeight: scrollHeight2, clientHeight: clientHeight2 } = dom.messagesEl; + if (scrollHeight2 - scrollTop2 - clientHeight2 <= SCROLL_THRESHOLD) { + state.autoScrollEnabled = true; + } + }, RE_ENABLE_DELAY); + } + } + }; + dom.messagesEl.addEventListener("scroll", scrollHandler, { passive: true }); + dom.eventCleanups.push(() => { + dom.messagesEl.removeEventListener("scroll", scrollHandler); + if (reEnableTimeout) window.clearTimeout(reEnableTimeout); + }); +} +function activateTab(tab) { + var _a5, _b3, _c2, _d; + tab.dom.contentEl.removeClass("claudian-hidden"); + (_a5 = tab.controllers.selectionController) == null ? void 0 : _a5.start(); + (_b3 = tab.controllers.browserSelectionController) == null ? void 0 : _b3.start(); + (_c2 = tab.controllers.canvasSelectionController) == null ? void 0 : _c2.start(); + (_d = tab.ui.navigationSidebar) == null ? void 0 : _d.updateVisibility(); +} +function deactivateTab(tab) { + var _a5, _b3, _c2; + tab.dom.contentEl.addClass("claudian-hidden"); + (_a5 = tab.controllers.selectionController) == null ? void 0 : _a5.stop(); + (_b3 = tab.controllers.browserSelectionController) == null ? void 0 : _b3.stop(); + (_c2 = tab.controllers.canvasSelectionController) == null ? void 0 : _c2.stop(); +} +async function destroyTab(tab) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3, _l2, _m, _n, _o, _p, _q3, _r, _s; + tab.lifecycleState = "closing"; + (_a5 = tab.controllers.selectionController) == null ? void 0 : _a5.stop(); + (_b3 = tab.controllers.selectionController) == null ? void 0 : _b3.clear(); + (_c2 = tab.controllers.browserSelectionController) == null ? void 0 : _c2.stop(); + (_d = tab.controllers.browserSelectionController) == null ? void 0 : _d.clear(); + (_e2 = tab.controllers.canvasSelectionController) == null ? void 0 : _e2.stop(); + (_f2 = tab.controllers.canvasSelectionController) == null ? void 0 : _f2.clear(); + (_g = tab.controllers.navigationController) == null ? void 0 : _g.dispose(); + cleanupThinkingBlock(tab.state.currentThinkingState); + tab.state.currentThinkingState = null; + (_h2 = tab.controllers.inputController) == null ? void 0 : _h2.dismissPendingApproval(); + (_i = tab.controllers.inputController) == null ? void 0 : _i.destroyResumeDropdown(); + (_j = tab.ui.fileContextManager) == null ? void 0 : _j.destroy(); + (_k3 = tab.ui.slashCommandDropdown) == null ? void 0 : _k3.destroy(); + tab.ui.slashCommandDropdown = null; + (_l2 = tab.ui.instructionModeManager) == null ? void 0 : _l2.destroy(); + tab.ui.instructionModeManager = null; + (_m = tab.ui.bangBashModeManager) == null ? void 0 : _m.destroy(); + tab.ui.bangBashModeManager = null; + (_n = tab.services.instructionRefineService) == null ? void 0 : _n.cancel(); + (_o = tab.services.instructionRefineService) == null ? void 0 : _o.resetConversation(); + tab.services.instructionRefineService = null; + (_p = tab.services.titleGenerationService) == null ? void 0 : _p.cancel(); + tab.services.titleGenerationService = null; + (_q3 = tab.ui.statusPanel) == null ? void 0 : _q3.destroy(); + tab.ui.statusPanel = null; + (_r = tab.ui.navigationSidebar) == null ? void 0 : _r.destroy(); + tab.ui.navigationSidebar = null; + tab.services.subagentManager.orphanAllActive(); + tab.services.subagentManager.clear(); + for (const cleanup of tab.dom.eventCleanups) { + cleanup(); + } + tab.dom.eventCleanups.length = 0; + (_s = tab.service) == null ? void 0 : _s.cleanup(); + tab.service = null; + tab.dom.contentEl.remove(); +} +function getTabTitle(tab, plugin) { + if (tab.conversationId) { + const conversation = plugin.getConversationSync(tab.conversationId); + if (conversation == null ? void 0 : conversation.title) { + return conversation.title; + } + } + return "New Chat"; +} +function setupServiceCallbacks(tab, plugin) { + if (tab.service && tab.controllers.inputController) { + tab.service.setApprovalCallback( + async (toolName, input, description, options) => { + var _a5, _b3; + return (_b3 = await ((_a5 = tab.controllers.inputController) == null ? void 0 : _a5.handleApprovalRequest(toolName, input, description, options))) != null ? _b3 : "cancel"; + } + ); + tab.service.setApprovalDismisser( + () => { + var _a5; + return (_a5 = tab.controllers.inputController) == null ? void 0 : _a5.dismissPendingApprovalPrompt(); + } + ); + tab.service.setAskUserQuestionCallback( + async (input, signal) => { + var _a5, _b3; + return (_b3 = await ((_a5 = tab.controllers.inputController) == null ? void 0 : _a5.handleAskUserQuestion(input, signal))) != null ? _b3 : null; + } + ); + tab.service.setExitPlanModeCallback( + async (input, signal) => { + var _a5, _b3, _c2; + const decision = (_b3 = await ((_a5 = tab.controllers.inputController) == null ? void 0 : _a5.handleExitPlanMode(input, signal))) != null ? _b3 : null; + if (decision !== null && decision.type !== "feedback") { + if (getTabPermissionMode(tab, plugin) === "plan") { + const restoreMode = (_c2 = tab.state.prePlanPermissionMode) != null ? _c2 : "normal"; + tab.state.prePlanPermissionMode = null; + updatePlanModeUI(tab, plugin, restoreMode); + } + if (decision.type === "approve-new-session") { + tab.state.pendingNewSessionPlan = decision.planContent; + tab.state.cancelRequested = true; + } + } + return decision; + } + ); + tab.service.setSubagentHookProvider( + () => ({ + hasRunning: tab.services.subagentManager.hasRunningSubagents() + }) + ); + tab.service.setAutoTurnCallback((result) => renderAutoTriggeredTurn(tab, result)); + tab.service.setPermissionModeSyncCallback((sdkMode) => { + const mode = sdkMode === "bypassPermissions" || sdkMode === "yolo" ? "yolo" : sdkMode === "plan" ? "plan" : "normal"; + const currentMode = getTabPermissionMode(tab, plugin); + if (currentMode !== mode) { + if (mode === "plan" && tab.state.prePlanPermissionMode === null) { + tab.state.prePlanPermissionMode = currentMode; + } + updatePlanModeUI(tab, plugin, mode); + } + }); + } +} +function generateMessageId() { + return `msg-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`; +} +function isVisibleAutoTurnChunk(chunk, hiddenToolIds) { + switch (chunk.type) { + case "text": + return chunk.content.trim().length > 0; + case "thinking": + case "notice": + case "error": + case "tool_output": + case "context_compacted": + case "subagent_tool_use": + case "subagent_tool_result": + return true; + case "tool_use": + return chunk.name !== TOOL_AGENT_OUTPUT; + case "tool_result": + return !hiddenToolIds.has(chunk.id); + default: + return false; + } +} +function hasVisibleAutoTurnMessageContent(msg) { + var _a5, _b3; + if (msg.content.trim().length > 0) return true; + if (msg.toolCalls && msg.toolCalls.length > 0) return true; + return (_b3 = (_a5 = msg.contentBlocks) == null ? void 0 : _a5.some( + (block) => block.type !== "text" || block.content.trim().length > 0 + )) != null ? _b3 : false; +} +async function renderAutoTriggeredTurn(tab, result) { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j, _k3; + if (!tab.dom.contentEl.isConnected) { + return; + } + const { chunks, metadata } = result; + if (chunks.length === 0) return; + const hiddenToolIds = new Set( + chunks.filter( + (chunk) => chunk.type === "tool_use" && chunk.name === TOOL_AGENT_OUTPUT + ).map((chunk) => chunk.id) + ); + const hasVisibleContent = chunks.some((chunk) => isVisibleAutoTurnChunk(chunk, hiddenToolIds)); + const assistantMsg = { + id: (_a5 = metadata.assistantMessageId) != null ? _a5 : generateMessageId(), + role: "assistant", + content: "", + timestamp: Date.now(), + toolCalls: [], + contentBlocks: [], + ...metadata.assistantMessageId && { assistantMessageId: metadata.assistantMessageId } + }; + const previousContentEl = tab.state.currentContentEl; + const previousTextEl = tab.state.currentTextEl; + const previousTextContent = tab.state.currentTextContent; + const previousThinkingState = tab.state.currentThinkingState; + if (hasVisibleContent) { + tab.state.addMessage(assistantMsg); + const msgEl = (_c2 = (_b3 = tab.renderer) == null ? void 0 : _b3.addMessage) == null ? void 0 : _c2.call(_b3, assistantMsg); + const contentEl = msgEl == null ? void 0 : msgEl.querySelector(".claudian-message-content"); + if (contentEl) { + if (!previousContentEl) { + tab.state.toolCallElements.clear(); + } + tab.state.currentContentEl = contentEl; + tab.state.currentTextEl = null; + tab.state.currentTextContent = ""; + tab.state.currentThinkingState = null; + } + } + try { + for (const chunk of chunks) { + await ((_d = tab.controllers.streamController) == null ? void 0 : _d.handleStreamChunk(chunk, assistantMsg)); + } + if (hasVisibleContent && !hasVisibleAutoTurnMessageContent(assistantMsg)) { + const placeholder = "(background task completed)"; + assistantMsg.content = placeholder; + await ((_e2 = tab.controllers.streamController) == null ? void 0 : _e2.appendText(placeholder)); + } + if (hasVisibleContent) { + await ((_f2 = tab.controllers.streamController) == null ? void 0 : _f2.finalizeCurrentThinkingBlock(assistantMsg)); + await ((_g = tab.controllers.streamController) == null ? void 0 : _g.finalizeCurrentTextBlock(assistantMsg)); + } + } finally { + if (hasVisibleContent) { + (_h2 = tab.controllers.streamController) == null ? void 0 : _h2.hideThinkingIndicator(); + (_j = (_i = tab.services.subagentManager).resetStreamingState) == null ? void 0 : _j.call(_i); + tab.state.currentContentEl = previousContentEl; + tab.state.currentTextEl = previousTextEl; + tab.state.currentTextContent = previousTextContent; + tab.state.currentThinkingState = previousThinkingState; + (_k3 = tab.renderer) == null ? void 0 : _k3.scrollToBottom(); + } + } +} +function updatePlanModeUI(tab, plugin, mode) { + var _a5; + const providerId = getTabProviderId(tab, plugin); + const snapshot = getTabSettingsSnapshot(tab, plugin); + const uiConfig = ProviderRegistry.getChatUIConfig(providerId); + if (uiConfig.applyPermissionMode) { + uiConfig.applyPermissionMode(mode, snapshot); + } else { + snapshot.permissionMode = mode; + } + ProviderSettingsCoordinator.commitProviderSettingsSnapshot( + plugin.settings, + providerId, + snapshot + ); + void plugin.saveSettings(); + (_a5 = tab.ui.permissionToggle) == null ? void 0 : _a5.updateDisplay(); + tab.dom.inputWrapper.toggleClass( + "claudian-input-plan-mode", + mode === "plan" && getTabCapabilities(tab, plugin).supportsPlanMode + ); +} + +// src/features/chat/tabs/TabBar.ts +var TabBar = class { + constructor(containerEl, callbacks) { + this.containerEl = containerEl; + this.callbacks = callbacks; + this.build(); + } + /** Builds the tab bar UI. */ + build() { + this.containerEl.addClass("claudian-tab-badges"); + } + /** + * Updates the tab bar with new tab data. + * @param items Tab items to render. + */ + update(items) { + this.containerEl.empty(); + for (const item of items) { + this.renderBadge(item); + } + } + /** Renders a single tab badge. */ + renderBadge(item) { + let stateClass = "claudian-tab-badge-idle"; + if (item.isActive) { + stateClass = "claudian-tab-badge-active"; + } else if (item.needsAttention) { + stateClass = "claudian-tab-badge-attention"; + } else if (item.isStreaming) { + stateClass = "claudian-tab-badge-streaming"; + } + const badgeEl = this.containerEl.createDiv({ + cls: `claudian-tab-badge ${stateClass}`, + text: String(item.index) + }); + badgeEl.setAttribute("aria-label", item.title); + badgeEl.setAttribute("data-provider", item.providerId); + badgeEl.addEventListener("click", () => { + this.callbacks.onTabClick(item.id); + }); + if (item.canClose) { + badgeEl.addEventListener("contextmenu", (e2) => { + e2.preventDefault(); + this.callbacks.onTabClose(item.id); + }); + } + } + /** Destroys the tab bar. */ + destroy() { + this.containerEl.empty(); + this.containerEl.removeClass("claudian-tab-badges"); + } +}; + +// src/features/chat/tabs/TabManager.ts +var import_obsidian45 = require("obsidian"); + +// src/shared/modals/ForkTargetModal.ts +var import_obsidian44 = require("obsidian"); +function chooseForkTarget(app) { + return new Promise((resolve8) => { + new ForkTargetModal(app, resolve8).open(); + }); +} +var ForkTargetModal = class extends import_obsidian44.Modal { + constructor(app, resolve8) { + super(app); + this.resolved = false; + this.resolve = resolve8; + } + onOpen() { + this.setTitle(t10("chat.fork.chooseTarget")); + this.modalEl.addClass("claudian-fork-target-modal"); + const list = this.contentEl.createDiv({ cls: "claudian-fork-target-list" }); + this.createOption(list, "current-tab", t10("chat.fork.targetCurrentTab")); + this.createOption(list, "new-tab", t10("chat.fork.targetNewTab")); + } + createOption(container, target, label) { + const item = container.createDiv({ cls: "claudian-fork-target-option", text: label }); + item.addEventListener("click", () => { + this.resolved = true; + this.resolve(target); + this.close(); + }); + } + onClose() { + if (!this.resolved) { + this.resolve(null); + } + this.contentEl.empty(); + } +}; + +// src/features/chat/tabs/TabManager.ts +function isTabManagerViewHost(value) { + return !!value && typeof value === "object" && "getTabManager" in value; +} +var TabManager = class { + constructor(plugin, arg2, arg3, arg4, arg5 = {}) { + this.tabs = /* @__PURE__ */ new Map(); + this.activeTabId = null; + this.providerCommandWarmups = /* @__PURE__ */ new Map(); + this.providerCommandCache = /* @__PURE__ */ new Map(); + this.isRestoringState = false; + /** Guard to prevent concurrent tab switches. */ + this.isSwitchingTab = false; + this.plugin = plugin; + if (isTabManagerViewHost(arg3)) { + this.containerEl = arg2; + this.view = arg3; + this.callbacks = arg4 != null ? arg4 : {}; + return; + } + this.containerEl = arg3; + this.view = arg4; + this.callbacks = arg5; + } + /** + * Gets the current max tabs limit from settings. + * Clamps to MIN_TABS and MAX_TABS bounds. + */ + getMaxTabs() { + var _a5; + const settingsValue = (_a5 = this.plugin.settings.maxTabs) != null ? _a5 : DEFAULT_MAX_TABS; + return Math.max(MIN_TABS, Math.min(MAX_TABS, settingsValue)); + } + // ============================================ + // Tab Lifecycle + // ============================================ + /** + * Creates a new tab. + * @param conversationId Optional conversation to load into the tab. + * @param tabId Optional tab ID (for restoration). + * @param options Controls whether the new tab becomes active immediately. + * @returns The created tab, or null if max tabs reached. + */ + async createTab(conversationId, tabId, options = {}) { + var _a5, _b3; + const maxTabs = this.getMaxTabs(); + if (this.tabs.size >= maxTabs) { + return null; + } + const { activate = true, draftModel } = options; + const conversation = conversationId ? await this.plugin.getConversationById(conversationId) : void 0; + const activeTab = this.getActiveTab(); + const defaultProviderId = conversation ? void 0 : activeTab ? getTabProviderId(activeTab, this.plugin) : void 0; + const tab = createTab({ + plugin: this.plugin, + containerEl: this.containerEl, + conversation: conversation != null ? conversation : void 0, + tabId, + ...typeof draftModel === "string" ? { draftModel } : {}, + defaultProviderId, + onStreamingChanged: (isStreaming) => { + var _a6, _b4; + (_b4 = (_a6 = this.callbacks).onTabStreamingChanged) == null ? void 0 : _b4.call(_a6, tab.id, isStreaming); + }, + onTitleChanged: (title) => { + var _a6, _b4; + (_b4 = (_a6 = this.callbacks).onTabTitleChanged) == null ? void 0 : _b4.call(_a6, tab.id, title); + }, + onAttentionChanged: (needsAttention) => { + var _a6, _b4; + (_b4 = (_a6 = this.callbacks).onTabAttentionChanged) == null ? void 0 : _b4.call(_a6, tab.id, needsAttention); + }, + onConversationIdChanged: (conversationId2) => { + var _a6, _b4; + tab.conversationId = conversationId2; + (_b4 = (_a6 = this.callbacks).onTabConversationChanged) == null ? void 0 : _b4.call(_a6, tab.id, conversationId2); + } + }); + initializeTabUI(tab, this.plugin, { + getProviderCatalogConfig: () => this.getProviderCatalogConfig(tab), + onProviderChanged: (providerId) => { + var _a6, _b4; + (_b4 = (_a6 = this.callbacks).onTabProviderChanged) == null ? void 0 : _b4.call(_a6, tab.id, providerId); + void this.prewarmProviderTab(tab).catch(() => { + }); + } + }); + initializeTabControllers( + tab, + this.plugin, + this.view, + (forkContext) => this.handleForkRequest(forkContext), + (conversationId2) => this.openConversation(conversationId2), + () => this.getProviderCatalogConfig(tab) + ); + wireTabInputEvents(tab, this.plugin); + this.tabs.set(tab.id, tab); + (_b3 = (_a5 = this.callbacks).onTabCreated) == null ? void 0 : _b3.call(_a5, tab); + if (!this.isRestoringState && (activate || !this.activeTabId)) { + await this.switchToTab(tab.id); + } else if (!this.isRestoringState) { + this.maybePrimeProviderRuntime(tab); + } + return tab; + } + /** + * Switches to a different tab. + * @param tabId The tab to switch to. + */ + async switchToTab(tabId) { + var _a5, _b3, _c2, _d; + const tab = this.tabs.get(tabId); + if (!tab) { + return; + } + if (this.isSwitchingTab) { + return; + } + this.isSwitchingTab = true; + const previousTabId = this.activeTabId; + try { + if (previousTabId && previousTabId !== tabId) { + const currentTab = this.tabs.get(previousTabId); + if (currentTab) { + deactivateTab(currentTab); + } + } + this.activeTabId = tabId; + activateTab(tab); + if (tab.conversationId && tab.state.messages.length === 0) { + await ((_a5 = tab.controllers.conversationController) == null ? void 0 : _a5.switchTo(tab.conversationId)); + } else if (tab.conversationId && tab.state.messages.length > 0 && tab.service && !tab.state.isStreaming && !tab.state.hasPendingConversationSave) { + const conversation = this.plugin.getConversationSync(tab.conversationId); + if (conversation) { + const hasMessages = conversation.messages.length > 0; + const externalContextPaths = hasMessages ? conversation.externalContextPaths || [] : this.plugin.settings.persistentExternalContextPaths || []; + tab.service.syncConversationState(conversation, externalContextPaths); + } + } else if (!tab.conversationId && tab.state.messages.length === 0) { + (_b3 = tab.controllers.conversationController) == null ? void 0 : _b3.initializeWelcome(); + } + (_d = (_c2 = this.callbacks).onTabSwitched) == null ? void 0 : _d.call(_c2, previousTabId, tabId); + this.maybePrimeProviderRuntime(tab); + } finally { + this.isSwitchingTab = false; + } + } + /** + * Closes a tab. + * @param tabId The tab to close. + * @param force If true, close even if streaming. + * @returns True if the tab was closed. + */ + async closeTab(tabId, force = false) { + var _a5, _b3, _c2; + const tab = this.tabs.get(tabId); + if (!tab) { + return false; + } + if (tab.state.isStreaming && !force) { + return false; + } + if (this.tabs.size === 1 && !tab.conversationId && tab.state.messages.length === 0) { + return false; + } + await ((_a5 = tab.controllers.conversationController) == null ? void 0 : _a5.save()); + const tabIdsBefore = Array.from(this.tabs.keys()); + const closingIndex = tabIdsBefore.indexOf(tabId); + await destroyTab(tab); + this.providerCommandWarmups.delete(tabId); + this.providerCommandCache.delete(tabId); + this.tabs.delete(tabId); + (_c2 = (_b3 = this.callbacks).onTabClosed) == null ? void 0 : _c2.call(_b3, tabId); + if (this.activeTabId === tabId) { + this.activeTabId = null; + if (this.tabs.size > 0) { + const fallbackTabId = closingIndex === 0 ? tabIdsBefore[1] : tabIdsBefore[closingIndex - 1]; + if (fallbackTabId && this.tabs.has(fallbackTabId)) { + await this.switchToTab(fallbackTabId); + } + } else { + await this.createTab(); + } + } + return true; + } + // ============================================ + // Tab Queries + // ============================================ + /** Gets the currently active tab. */ + getActiveTab() { + var _a5; + return this.activeTabId ? (_a5 = this.tabs.get(this.activeTabId)) != null ? _a5 : null : null; + } + /** Gets the active tab ID. */ + getActiveTabId() { + return this.activeTabId; + } + /** Gets a tab by ID. */ + getTab(tabId) { + var _a5; + return (_a5 = this.tabs.get(tabId)) != null ? _a5 : null; + } + /** Gets all tabs. */ + getAllTabs() { + return Array.from(this.tabs.values()); + } + /** Gets the number of tabs. */ + getTabCount() { + return this.tabs.size; + } + /** Checks if more tabs can be created. */ + canCreateTab() { + return this.tabs.size < this.getMaxTabs(); + } + // ============================================ + // Tab Bar Data + // ============================================ + /** Gets data for rendering the tab bar. */ + getTabBarItems() { + const items = []; + let index = 1; + for (const tab of this.tabs.values()) { + items.push({ + id: tab.id, + index: index++, + title: getTabTitle(tab, this.plugin), + providerId: getTabProviderId(tab, this.plugin), + isActive: tab.id === this.activeTabId, + isStreaming: tab.state.isStreaming, + needsAttention: tab.state.needsAttention, + canClose: this.tabs.size > 1 || !tab.state.isStreaming + }); + } + return items; + } + // ============================================ + // Conversation Management + // ============================================ + /** + * Opens a conversation in a new tab or existing tab. + * @param conversationId The conversation to open. + * @param options Controls tab creation behavior (backward-compatible with boolean). + */ + async openConversation(conversationId, options = false) { + var _a5, _b3, _c2, _d; + const preferNewTab = typeof options === "boolean" ? options : (_a5 = options.preferNewTab) != null ? _a5 : false; + const activate = typeof options === "boolean" ? true : (_b3 = options.activate) != null ? _b3 : true; + for (const tab of this.tabs.values()) { + if (tab.conversationId === conversationId) { + await this.switchToTab(tab.id); + return; + } + } + const crossViewResult = this.plugin.findConversationAcrossViews(conversationId); + const isSameView = (crossViewResult == null ? void 0 : crossViewResult.view) === this.view; + if (crossViewResult && !isSameView) { + await revealWorkspaceLeaf(this.plugin.app.workspace, crossViewResult.view.leaf); + await ((_c2 = crossViewResult.view.getTabManager()) == null ? void 0 : _c2.switchToTab(crossViewResult.tabId)); + return; + } + if (preferNewTab && this.canCreateTab()) { + await this.createTab(conversationId, void 0, { activate }); + } else { + const activeTab = this.getActiveTab(); + if (activeTab) { + await ((_d = activeTab.controllers.conversationController) == null ? void 0 : _d.switchTo(conversationId)); + } + } + } + /** + * Creates a new conversation in the active tab. + */ + async createNewConversation() { + var _a5; + const activeTab = this.getActiveTab(); + if (activeTab) { + await ((_a5 = activeTab.controllers.conversationController) == null ? void 0 : _a5.createNew()); + activeTab.conversationId = activeTab.state.currentConversationId; + this.maybePrimeProviderRuntime(activeTab); + } + } + invalidateProviderCommandCaches(providerIds) { + var _a5, _b3; + for (const tab of this.filterTabsByProvider(providerIds, (tab2) => getTabProviderId(tab2, this.plugin))) { + this.providerCommandWarmups.delete(tab.id); + this.providerCommandCache.delete(tab.id); + (_b3 = (_a5 = tab.ui) == null ? void 0 : _a5.slashCommandDropdown) == null ? void 0 : _b3.resetSdkSkillsCache(); + } + } + primeProviderRuntime(providerIds) { + for (const tab of this.filterTabsByProvider(providerIds, (tab2) => { + var _a5, _b3; + return (_b3 = (_a5 = tab2.service) == null ? void 0 : _a5.providerId) != null ? _b3 : tab2.providerId; + })) { + this.maybePrimeProviderRuntime(tab); + } + } + *filterTabsByProvider(providerIds, resolve8) { + const filter = providerIds ? new Set(Array.isArray(providerIds) ? providerIds : [providerIds]) : null; + for (const tab of this.tabs.values()) { + if (filter && !filter.has(resolve8(tab))) { + continue; + } + yield tab; + } + } + // ============================================ + // Fork + // ============================================ + async handleForkRequest(context) { + const target = await chooseForkTarget(this.plugin.app); + if (!target) return; + if (target === "new-tab") { + const tab = await this.forkToNewTab(context); + if (!tab) { + const maxTabs = this.getMaxTabs(); + new import_obsidian45.Notice(t10("chat.fork.maxTabsReached", { count: String(maxTabs) })); + return; + } + new import_obsidian45.Notice(t10("chat.fork.notice")); + } else { + const success2 = await this.forkInCurrentTab(context); + if (!success2) { + new import_obsidian45.Notice(t10("chat.fork.failed", { error: t10("chat.fork.errorNoActiveTab") })); + return; + } + new import_obsidian45.Notice(t10("chat.fork.noticeCurrentTab")); + } + } + async forkToNewTab(context) { + const maxTabs = this.getMaxTabs(); + if (this.tabs.size >= maxTabs) { + return null; + } + const conversationId = await this.createForkConversation(context); + try { + return await this.createTab(conversationId); + } catch (error48) { + await this.plugin.deleteConversation(conversationId).catch(() => { + }); + throw error48; + } + } + async forkInCurrentTab(context) { + const activeTab = this.getActiveTab(); + if (!(activeTab == null ? void 0 : activeTab.controllers.conversationController)) return false; + const conversationId = await this.createForkConversation(context); + try { + await activeTab.controllers.conversationController.switchTo(conversationId); + } catch (error48) { + await this.plugin.deleteConversation(conversationId).catch(() => { + }); + throw error48; + } + return true; + } + async createForkConversation(context) { + const conversation = await this.plugin.createConversation({ + providerId: context.providerId + }); + const title = context.sourceTitle ? this.buildForkTitle(context.sourceTitle, context.forkAtUserMessage) : void 0; + const forkProviderState = ProviderRegistry.getConversationHistoryService(conversation.providerId).buildForkProviderState( + context.sourceSessionId, + context.resumeAt, + context.sourceProviderState + ); + await this.plugin.updateConversation(conversation.id, { + messages: context.messages, + providerState: forkProviderState, + ...title && { title }, + ...context.currentNote && { currentNote: context.currentNote } + }); + return conversation.id; + } + buildForkTitle(sourceTitle, forkAtUserMessage) { + const MAX_TITLE_LENGTH2 = 50; + const forkSuffix = forkAtUserMessage ? ` (#${forkAtUserMessage})` : ""; + const forkPrefix = "Fork: "; + const maxSourceLength = MAX_TITLE_LENGTH2 - forkPrefix.length - forkSuffix.length; + const truncatedSource = sourceTitle.length > maxSourceLength ? sourceTitle.slice(0, maxSourceLength - 1) + "\u2026" : sourceTitle; + let title = forkPrefix + truncatedSource + forkSuffix; + const existingTitles = new Set(this.plugin.getConversationList().map((c) => c.title)); + if (existingTitles.has(title)) { + let n10 = 2; + while (existingTitles.has(`${title} ${n10}`)) n10++; + title = `${title} ${n10}`; + } + return title; + } + // ============================================ + // Persistence + // ============================================ + /** Gets the state to persist. */ + getPersistedState() { + const openTabs = []; + for (const tab of this.tabs.values()) { + openTabs.push({ + ...tab.lifecycleState === "blank" && tab.draftModel ? { draftModel: tab.draftModel } : {}, + tabId: tab.id, + conversationId: tab.conversationId + }); + } + return { + openTabs, + activeTabId: this.activeTabId + }; + } + /** Restores state from persisted data. */ + async restoreState(state) { + var _a5, _b3, _c2; + this.isRestoringState = true; + try { + for (const tabState of state.openTabs) { + try { + await this.createTab(tabState.conversationId, tabState.tabId, { + activate: false, + ...typeof tabState.draftModel === "string" ? { draftModel: tabState.draftModel } : {} + }); + } catch (e2) { + } + } + } finally { + this.isRestoringState = false; + } + const fallbackTabId = (_c2 = (_b3 = (_a5 = state.openTabs.find((tabState) => this.tabs.has(tabState.tabId))) == null ? void 0 : _a5.tabId) != null ? _b3 : Array.from(this.tabs.keys())[0]) != null ? _c2 : null; + const targetTabId = state.activeTabId && this.tabs.has(state.activeTabId) ? state.activeTabId : fallbackTabId; + if (targetTabId) { + try { + await this.switchToTab(targetTabId); + } catch (e2) { + } + } + if (this.tabs.size === 0) { + await this.createTab(); + } + } + // ============================================ + // SDK Commands (Shared) + // ============================================ + /** + * Gets provider-scoped SDK supported commands for a tab. + * Reuses a ready runtime from the same provider when available to avoid + * leaking commands across providers in mixed-provider workspaces. + * @returns Array of SDK commands, or empty array if no service is ready. + */ + async getSdkCommands(tabId) { + var _a5, _b3; + const targetTab = (_a5 = tabId ? this.tabs.get(tabId) : this.getActiveTab()) != null ? _a5 : null; + if (!targetTab) { + return []; + } + const providerId = getTabProviderId(targetTab, this.plugin); + const staticCapabilities = ProviderRegistry.getCapabilities(providerId); + if (!staticCapabilities.supportsProviderCommands) { + return []; + } + const catalog = ProviderWorkspaceRegistry.getCommandCatalog(providerId); + const runtimeCommandLoader = ProviderWorkspaceRegistry.getRuntimeCommandLoader(providerId); + const context = await this.buildProviderWarmupContext(targetTab, providerId); + if (targetTab.lifecycleState === "blank" && runtimeCommandLoader && (context.warmupMode !== "commands" || targetTab.id !== this.activeTabId)) { + catalog == null ? void 0 : catalog.setRuntimeCommands([]); + return []; + } + let sdkCommands = []; + const targetService = targetTab.service; + if ((targetService == null ? void 0 : targetService.providerId) === providerId && targetService.isReady()) { + sdkCommands = await targetService.getSupportedCommands(); + } else if (!runtimeCommandLoader) { + for (const tab of this.tabs.values()) { + if (tab.id === targetTab.id) { + continue; + } + if (((_b3 = tab.service) == null ? void 0 : _b3.providerId) === providerId && tab.service.isReady()) { + sdkCommands = await tab.service.getSupportedCommands(); + break; + } + } + } + if (sdkCommands.length === 0) { + sdkCommands = await this.ensureProviderCommandRuntime(targetTab, providerId, context); + } + catalog == null ? void 0 : catalog.setRuntimeCommands(sdkCommands); + return sdkCommands; + } + async ensureProviderCommandRuntime(tab, providerId, warmupContext) { + if (!this.isProviderCommandLoaderAvailable(providerId)) { + return []; + } + const resolvedWarmupContext = warmupContext != null ? warmupContext : await this.buildProviderWarmupContext(tab, providerId); + const context = this.buildProviderCommandContext( + tab, + providerId, + resolvedWarmupContext + ); + const cached2 = this.providerCommandCache.get(tab.id); + if ((!context.runtime || !context.runtime.isReady()) && cached2 && cached2.key === context.cacheKey) { + return cached2.commands.map((command) => ({ ...command })); + } + const existing = this.providerCommandWarmups.get(tab.id); + if ((existing == null ? void 0 : existing.key) === context.cacheKey) { + return await existing.promise; + } + this.providerCommandWarmups.delete(tab.id); + const warmup = this.warmProviderCommandRuntime(tab, providerId, context).finally(() => { + var _a5; + if (((_a5 = this.providerCommandWarmups.get(tab.id)) == null ? void 0 : _a5.promise) === warmup) { + this.providerCommandWarmups.delete(tab.id); + } + }); + this.providerCommandWarmups.set(tab.id, { + key: context.cacheKey, + promise: warmup + }); + return await warmup; + } + maybePrimeProviderRuntime(tab) { + void this.prewarmProviderTab(tab).catch(() => { + }); + } + isProviderCommandLoaderAvailable(providerId) { + const loader = ProviderWorkspaceRegistry.getRuntimeCommandLoader(providerId); + if (!loader) return false; + return loader.isAvailable(this.plugin.settings); + } + async prewarmProviderTab(tab) { + var _a5, _b3, _c2; + const providerId = (_b3 = (_a5 = tab.service) == null ? void 0 : _a5.providerId) != null ? _b3 : tab.providerId; + const context = await this.buildProviderWarmupContext(tab, providerId); + const hasReadyRuntime = ((_c2 = tab.service) == null ? void 0 : _c2.providerId) === providerId && tab.service.isReady(); + if (!hasReadyRuntime && tab.id !== this.activeTabId) { + return; + } + switch (context.warmupMode) { + case "commands": + await this.getSdkCommands(tab.id); + return; + case "runtime": + await this.ensureProviderTabRuntimeReady(tab, providerId, context); + return; + default: + return; + } + } + async ensureProviderTabRuntimeReady(tab, providerId, context) { + var _a5; + if (!context.runtime || context.runtime.providerId !== providerId || !tab.serviceInitialized) { + await initializeTabService(tab, this.plugin, context.conversation); + setupServiceCallbacks(tab, this.plugin); + } + const runtime = ((_a5 = tab.service) == null ? void 0 : _a5.providerId) === providerId ? tab.service : null; + if (!runtime) { + return; + } + runtime.syncConversationState(context.conversation, context.externalContextPaths); + await runtime.ensureReady(); + if (ProviderRegistry.getCapabilities(providerId).supportsProviderCommands) { + await this.getSdkCommands(tab.id); + } + } + async buildProviderWarmupContext(tab, providerId) { + var _a5, _b3, _c2, _d, _e2, _f2; + const conversation = tab.conversationId ? await this.plugin.getConversationById(tab.conversationId) : null; + const hasConversationContext = ((_a5 = conversation == null ? void 0 : conversation.messages.length) != null ? _a5 : 0) > 0; + const externalContextPaths = (_e2 = (_b3 = tab.ui.externalContextSelector) == null ? void 0 : _b3.getExternalContexts()) != null ? _e2 : hasConversationContext ? (_c2 = conversation == null ? void 0 : conversation.externalContextPaths) != null ? _c2 : [] : (_d = this.plugin.settings.persistentExternalContextPaths) != null ? _d : []; + const runtime = ((_f2 = tab.service) == null ? void 0 : _f2.providerId) === providerId ? tab.service : null; + const warmupMode = this.resolveProviderTabWarmupMode({ + conversation, + externalContextPaths, + plugin: this.plugin, + runtime, + tab: { + conversationId: tab.conversationId, + draftModel: tab.draftModel, + lifecycleState: tab.lifecycleState, + providerId + } + }); + return { + conversation, + externalContextPaths, + runtime, + tab: { + conversationId: tab.conversationId, + draftModel: tab.draftModel, + lifecycleState: tab.lifecycleState, + providerId + }, + warmupMode + }; + } + resolveProviderTabWarmupMode(context) { + var _a5, _b3; + return (_b3 = (_a5 = ProviderWorkspaceRegistry.getTabWarmupPolicy(context.tab.providerId)) == null ? void 0 : _a5.resolveMode(context)) != null ? _b3 : "none"; + } + buildProviderCommandContext(tab, providerId, warmupContext) { + var _a5, _b3, _c2, _d, _e2, _f2, _g; + const providerSettings = ProviderSettingsCoordinator.getProviderSettingsSnapshot( + this.plugin.settings, + providerId + ); + return { + ...warmupContext, + cacheKey: JSON.stringify({ + allowSessionCreation: warmupContext.warmupMode === "commands" && tab.lifecycleState === "blank" && tab.id === this.activeTabId, + conversationId: (_b3 = (_a5 = warmupContext.conversation) == null ? void 0 : _a5.id) != null ? _b3 : null, + draftModel: (_c2 = tab.draftModel) != null ? _c2 : null, + externalContextPaths: warmupContext.externalContextPaths, + lifecycleState: tab.lifecycleState, + providerId, + providerSettings, + providerState: (_e2 = (_d = warmupContext.conversation) == null ? void 0 : _d.providerState) != null ? _e2 : null, + sessionId: (_g = (_f2 = warmupContext.conversation) == null ? void 0 : _f2.sessionId) != null ? _g : null, + warmupMode: warmupContext.warmupMode + }) + }; + } + async warmProviderCommandRuntime(tab, providerId, context) { + const catalog = ProviderWorkspaceRegistry.getCommandCatalog(providerId); + const loader = ProviderWorkspaceRegistry.getRuntimeCommandLoader(providerId); + if (!catalog || !loader) { + return []; + } + const commands = await loader.loadCommands({ + allowSessionCreation: context.warmupMode === "commands" && tab.lifecycleState === "blank" && tab.id === this.activeTabId, + conversation: context.conversation, + externalContextPaths: context.externalContextPaths, + plugin: this.plugin, + runtime: context.runtime + }); + if (!context.runtime || !context.runtime.isReady()) { + this.providerCommandCache.set(tab.id, { + key: context.cacheKey, + commands: commands.map((command) => ({ ...command })) + }); + } else { + this.providerCommandCache.delete(tab.id); + } + catalog.setRuntimeCommands(commands); + return commands; + } + // ============================================ + // Provider Command Catalog + // ============================================ + getProviderCatalogConfig(tab) { + const providerId = getTabProviderId(tab, this.plugin); + const catalog = ProviderWorkspaceRegistry.getCommandCatalog(providerId); + if (!catalog) return null; + return { + config: catalog.getDropdownConfig(), + getEntries: async () => { + await this.getSdkCommands(tab.id); + return catalog.listDropdownEntries({ includeBuiltIns: false }); + } + }; + } + // ============================================ + // Broadcast + // ============================================ + /** + * Broadcasts a function call to all initialized tab runtimes. + * Used by settings managers to apply configuration changes to all tabs. + * @param fn Function to call on each runtime. + */ + async broadcastToAllTabs(fn) { + await this.broadcastToTabs(this.tabs.values(), fn); + } + async broadcastToProviderTabs(providerIds, fn) { + await this.broadcastToTabs( + this.filterTabsByProvider(providerIds, (tab) => { + var _a5, _b3; + return (_b3 = (_a5 = tab.service) == null ? void 0 : _a5.providerId) != null ? _b3 : tab.providerId; + }), + fn + ); + } + async broadcastToTabs(tabs, fn) { + const promises2 = []; + for (const tab of tabs) { + if (tab.service && tab.serviceInitialized) { + promises2.push( + fn(tab.service).catch(() => { + }) + ); + } + } + await Promise.all(promises2); + } + // ============================================ + // Cleanup + // ============================================ + /** Destroys all tabs and cleans up resources. */ + async destroy() { + await Promise.all( + Array.from(this.tabs.values()).map( + (tab) => { + var _a5, _b3; + return (_b3 = (_a5 = tab.controllers.conversationController) == null ? void 0 : _a5.save()) != null ? _b3 : Promise.resolve(); + } + ) + ); + await Promise.all(Array.from(this.tabs.values()).map((tab) => destroyTab(tab))); + this.tabs.clear(); + this.activeTabId = null; + } +}; + +// src/features/chat/ClaudianView.ts +var ClaudianView = class extends import_obsidian46.ItemView { + constructor(leaf, plugin) { + super(leaf); + // Tab management + this.tabManager = null; + this.tabBar = null; + this.tabBarContainerEl = null; + this.tabContentEl = null; + this.navRowContent = null; + // DOM Elements + this.viewContainerEl = null; + this.headerEl = null; + this.titleSlotEl = null; + this.logoEl = null; + this.titleTextEl = null; + this.headerActionsEl = null; + this.headerActionsContent = null; + this.newTabButtonEl = null; + // Header elements + this.historyDropdown = null; + // Event refs for cleanup + this.eventRefs = []; + // Debouncing for tab bar updates + this.pendingTabBarUpdate = null; + // Debouncing for tab state persistence + this.pendingPersist = null; + this.plugin = plugin; + const prototype = Object.getPrototypeOf(this); + const originalLoad = prototype.load.bind(this); + Object.defineProperty(this, "load", { + value: async () => { + if (!this.containerEl) { + this.containerEl = createDiv({ cls: "view-content" }); + } + try { + return await originalLoad(); + } catch (e2) { + } + }, + writable: false, + configurable: false + }); + } + getViewType() { + return VIEW_TYPE_CLAUDIAN; + } + getDisplayText() { + return "Claudian"; + } + getIcon() { + return "bot"; + } + /** Refreshes model-dependent UI across all tabs (used after settings/env changes). */ + refreshModelSelector() { + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i, _j; + for (const tab of (_b3 = (_a5 = this.tabManager) == null ? void 0 : _a5.getAllTabs()) != null ? _b3 : []) { + onProviderAvailabilityChanged(tab, this.plugin); + const providerId = getTabProviderId(tab, this.plugin); + const providerSettings = ProviderSettingsCoordinator.getProviderSettingsSnapshot( + this.plugin.settings, + providerId + ); + const model = providerSettings.model; + const uiConfig = ProviderRegistry.getChatUIConfig(providerId); + const capabilities = ProviderRegistry.getCapabilities(providerId); + const contextWindow = uiConfig.getContextWindowSize( + model, + providerSettings.customContextLimits, + providerSettings + ); + if (tab.state.usage) { + tab.state.usage = recalculateUsageForModel(tab.state.usage, model, contextWindow); + } + (_c2 = tab.ui.modelSelector) == null ? void 0 : _c2.updateDisplay(); + (_d = tab.ui.modelSelector) == null ? void 0 : _d.renderOptions(); + (_e2 = tab.ui.modeSelector) == null ? void 0 : _e2.updateDisplay(); + (_f2 = tab.ui.modeSelector) == null ? void 0 : _f2.renderOptions(); + (_g = tab.ui.thinkingBudgetSelector) == null ? void 0 : _g.updateDisplay(); + (_h2 = tab.ui.permissionToggle) == null ? void 0 : _h2.updateDisplay(); + (_i = tab.ui.serviceTierToggle) == null ? void 0 : _i.updateDisplay(); + tab.dom.inputWrapper.toggleClass( + "claudian-input-plan-mode", + providerSettings.permissionMode === "plan" && capabilities.supportsPlanMode + ); + } + (_j = this.tabManager) == null ? void 0 : _j.primeProviderRuntime(); + } + invalidateProviderCommandCaches(providerIds) { + var _a5; + (_a5 = this.tabManager) == null ? void 0 : _a5.invalidateProviderCommandCaches(providerIds); + } + /** Updates provider-scoped hidden commands on all tabs after settings changes. */ + updateHiddenProviderCommands() { + var _a5, _b3, _c2; + for (const tab of (_b3 = (_a5 = this.tabManager) == null ? void 0 : _a5.getAllTabs()) != null ? _b3 : []) { + (_c2 = tab.ui.slashCommandDropdown) == null ? void 0 : _c2.setHiddenCommands( + getHiddenProviderCommandSet(this.plugin.settings, getTabProviderId(tab, this.plugin)) + ); + } + } + async onOpen() { + var _a5, _b3; + if (!this.containerEl) { + return; + } + let container = (_a5 = this.contentEl) != null ? _a5 : this.containerEl.children[1]; + if (!container) { + container = this.containerEl.createDiv(); + } + this.viewContainerEl = container; + this.viewContainerEl.empty(); + this.viewContainerEl.addClass("claudian-container"); + const header = this.viewContainerEl.createDiv({ cls: "claudian-header" }); + this.buildHeader(header); + this.navRowContent = this.buildNavRowContent(); + this.tabContentEl = this.viewContainerEl.createDiv({ cls: "claudian-tab-content-container" }); + this.tabManager = new TabManager( + this.plugin, + this.tabContentEl, + this, + { + onTabCreated: () => { + this.updateTabBar(); + this.updateNavRowLocation(); + this.persistTabState(); + this.syncProviderBrandColor(); + }, + onTabSwitched: () => { + this.updateTabBar(); + this.updateHistoryDropdown(); + this.updateNavRowLocation(); + this.persistTabState(); + this.syncProviderBrandColor(); + }, + onTabClosed: () => { + this.updateTabBar(); + this.persistTabState(); + }, + onTabStreamingChanged: () => this.updateTabBar(), + onTabTitleChanged: () => this.updateTabBar(), + onTabAttentionChanged: () => this.updateTabBar(), + onTabConversationChanged: () => { + this.updateTabBar(); + this.persistTabState(); + this.syncProviderBrandColor(); + }, + onTabProviderChanged: () => { + this.updateTabBar(); + this.syncProviderBrandColor(); + } + } + ); + this.wireEventHandlers(); + await this.restoreOrCreateTabs(); + this.syncProviderBrandColor(); + this.updateLayoutForPosition(); + (_b3 = this.tabManager) == null ? void 0 : _b3.primeProviderRuntime(); + } + async onClose() { + var _a5, _b3; + if (this.pendingTabBarUpdate !== null) { + cancelScheduledAnimationFrame(this.pendingTabBarUpdate); + this.pendingTabBarUpdate = null; + } + for (const ref of this.eventRefs) { + this.plugin.app.vault.offref(ref); + } + this.eventRefs = []; + await this.persistTabStateImmediate(); + await ((_a5 = this.tabManager) == null ? void 0 : _a5.destroy()); + this.tabManager = null; + (_b3 = this.tabBar) == null ? void 0 : _b3.destroy(); + this.tabBar = null; + this.scope = null; + } + // ============================================ + // UI Building + // ============================================ + buildHeader(header) { + this.headerEl = header; + this.titleSlotEl = header.createDiv({ cls: "claudian-title-slot" }); + this.logoEl = this.titleSlotEl.createSpan({ cls: "claudian-logo" }); + this.syncHeaderLogo(DEFAULT_CHAT_PROVIDER_ID); + this.titleTextEl = this.titleSlotEl.createEl("h4", { text: "Claudian", cls: "claudian-title-text" }); + this.headerActionsEl = header.createDiv({ cls: "claudian-header-actions claudian-header-actions-slot claudian-hidden" }); + } + /** + * Builds the nav row content (tab badges + header actions). + * This is called once and the content is moved between locations. + */ + buildNavRowContent() { + const activeDocument = this.containerEl.ownerDocument; + const fragment = activeDocument.createDocumentFragment(); + this.tabBarContainerEl = activeDocument.createElement("div"); + this.tabBarContainerEl.className = "claudian-tab-bar-container"; + this.tabBar = new TabBar(this.tabBarContainerEl, { + onTabClick: (tabId) => this.handleTabClick(tabId), + onTabClose: (tabId) => { + void this.handleTabClose(tabId); + }, + onNewTab: () => { + void this.createNewTab().catch(() => new import_obsidian46.Notice("Failed to create tab")); + } + }); + fragment.appendChild(this.tabBarContainerEl); + this.headerActionsContent = activeDocument.createElement("div"); + this.headerActionsContent.className = "claudian-header-actions"; + this.newTabButtonEl = this.headerActionsContent.createDiv({ cls: "claudian-header-btn claudian-new-tab-btn" }); + (0, import_obsidian46.setIcon)(this.newTabButtonEl, "square-plus"); + this.newTabButtonEl.setAttribute("aria-label", "New tab"); + this.newTabButtonEl.addEventListener("click", () => { + void this.createNewTab().catch(() => new import_obsidian46.Notice("Failed to create tab")); + }); + const newBtn = this.headerActionsContent.createDiv({ cls: "claudian-header-btn" }); + (0, import_obsidian46.setIcon)(newBtn, "square-pen"); + newBtn.setAttribute("aria-label", "New conversation"); + newBtn.addEventListener("click", () => { + void (async () => { + var _a5; + await ((_a5 = this.tabManager) == null ? void 0 : _a5.createNewConversation()); + this.updateHistoryDropdown(); + })().catch(() => new import_obsidian46.Notice("Failed to create conversation")); + }); + const historyContainer = this.headerActionsContent.createDiv({ cls: "claudian-history-container" }); + const historyBtn = historyContainer.createDiv({ cls: "claudian-header-btn" }); + (0, import_obsidian46.setIcon)(historyBtn, "history"); + historyBtn.setAttribute("aria-label", "Chat history"); + this.historyDropdown = historyContainer.createDiv({ cls: "claudian-history-menu" }); + historyBtn.addEventListener("click", (e2) => { + e2.stopPropagation(); + this.toggleHistoryDropdown(); + }); + fragment.appendChild(this.headerActionsContent); + const wrapper = activeDocument.createElement("div"); + wrapper.className = "claudian-input-nav-content"; + wrapper.appendChild(fragment); + return wrapper; + } + /** + * Moves nav row content based on tabBarPosition setting. + * - 'input' mode: Both tab badges and actions go to active tab's navRowEl + * - 'header' mode: Tab badges go to title slot (after logo), actions go to header right side + */ + updateNavRowLocation() { + var _a5; + if (!this.tabBarContainerEl || !this.headerActionsContent) return; + const isHeaderMode = this.plugin.settings.tabBarPosition === "header"; + if (isHeaderMode) { + if (this.titleSlotEl) { + this.titleSlotEl.appendChild(this.tabBarContainerEl); + } + if (this.headerActionsEl) { + this.headerActionsEl.appendChild(this.headerActionsContent); + this.headerActionsEl.removeClass("claudian-hidden"); + } + } else { + const activeTab = (_a5 = this.tabManager) == null ? void 0 : _a5.getActiveTab(); + if (activeTab && this.navRowContent) { + this.navRowContent.appendChild(this.tabBarContainerEl); + this.navRowContent.appendChild(this.headerActionsContent); + activeTab.dom.navRowEl.appendChild(this.navRowContent); + } + if (this.headerActionsEl) { + this.headerActionsEl.addClass("claudian-hidden"); + } + } + } + /** + * Updates layout when tabBarPosition setting changes. + * Called from settings when user changes the tab bar position. + */ + updateLayoutForPosition() { + if (!this.viewContainerEl) return; + const isHeaderMode = this.plugin.settings.tabBarPosition === "header"; + this.viewContainerEl.toggleClass("claudian-container--header-mode", isHeaderMode); + this.updateNavRowLocation(); + this.updateTabBarVisibility(); + } + /** Refreshes tab controls after settings that affect tab availability change. */ + refreshTabControls() { + this.updateTabBarVisibility(); + } + // ============================================ + // Tab Management + // ============================================ + handleTabClick(tabId) { + var _a5; + const switched = (_a5 = this.tabManager) == null ? void 0 : _a5.switchToTab(tabId); + if (switched) { + void switched.catch(() => new import_obsidian46.Notice("Failed to switch tab")); + } + } + async handleTabClose(tabId) { + var _a5, _b3, _c2; + try { + const tab = (_a5 = this.tabManager) == null ? void 0 : _a5.getTab(tabId); + const force = (_b3 = tab == null ? void 0 : tab.state.isStreaming) != null ? _b3 : false; + await ((_c2 = this.tabManager) == null ? void 0 : _c2.closeTab(tabId, force)); + this.updateTabBarVisibility(); + } catch (e2) { + new import_obsidian46.Notice("Failed to close tab"); + } + } + async createNewTab() { + var _a5, _b3; + const tab = await ((_a5 = this.tabManager) == null ? void 0 : _a5.createTab()); + if (!tab) { + const maxTabs = (_b3 = this.plugin.settings.maxTabs) != null ? _b3 : 3; + new import_obsidian46.Notice(`Maximum ${maxTabs} tabs allowed`); + this.updateTabBarVisibility(); + return; + } + this.updateTabBarVisibility(); + } + updateTabBar() { + var _a5; + if (!this.tabManager || !this.tabBar) return; + if (this.pendingTabBarUpdate !== null) { + cancelScheduledAnimationFrame(this.pendingTabBarUpdate); + } + this.pendingTabBarUpdate = scheduleAnimationFrame(() => { + this.pendingTabBarUpdate = null; + if (!this.tabManager || !this.tabBar) return; + const items = this.tabManager.getTabBarItems(); + this.tabBar.update(items); + this.updateTabBarVisibility(); + }, (_a5 = this.containerEl.ownerDocument.defaultView) != null ? _a5 : null); + } + updateTabBarVisibility() { + if (!this.tabBarContainerEl || !this.tabManager) return; + const tabCount = this.tabManager.getTabCount(); + const showTabBar = tabCount >= 2; + const isHeaderMode = this.plugin.settings.tabBarPosition === "header"; + this.tabBarContainerEl.toggleClass("claudian-hidden", !showTabBar); + const hideBranding = showTabBar && isHeaderMode; + if (this.logoEl) { + this.logoEl.toggleClass("claudian-hidden", hideBranding); + } + if (this.titleTextEl) { + this.titleTextEl.toggleClass("claudian-hidden", hideBranding); + } + this.updateNewTabButtonVisibility(); + } + updateNewTabButtonVisibility() { + if (!this.newTabButtonEl || !this.tabManager) return; + const canCreateTab = this.tabManager.canCreateTab(); + this.newTabButtonEl.toggleClass("claudian-hidden", !canCreateTab); + if (canCreateTab) { + this.newTabButtonEl.removeAttribute("aria-disabled"); + this.newTabButtonEl.removeAttribute("aria-hidden"); + return; + } + this.newTabButtonEl.setAttribute("aria-disabled", "true"); + this.newTabButtonEl.setAttribute("aria-hidden", "true"); + } + /** Sets `data-provider` on the root container so CSS brand color follows the active provider. */ + syncProviderBrandColor() { + var _a5; + if (!this.viewContainerEl) return; + const activeTab = (_a5 = this.tabManager) == null ? void 0 : _a5.getActiveTab(); + const providerId = activeTab ? getTabProviderId(activeTab, this.plugin) : DEFAULT_CHAT_PROVIDER_ID; + this.viewContainerEl.dataset.provider = providerId; + this.syncHeaderLogo(providerId); + } + /** Rebuilds the header logo SVG to match the given provider. */ + syncHeaderLogo(providerId) { + var _a5, _b3; + if (!this.logoEl) return; + const icon = (_b3 = (_a5 = ProviderRegistry.getChatUIConfig(providerId)).getProviderIcon) == null ? void 0 : _b3.call(_a5); + if (!icon) return; + const existing = this.logoEl.querySelector("svg"); + if ((existing == null ? void 0 : existing.getAttribute("data-provider")) === providerId) return; + this.logoEl.empty(); + const svg = createProviderIconSvg(icon, { + dataProvider: providerId, + height: 18, + ownerDocument: this.logoEl.ownerDocument, + width: 18 + }); + this.logoEl.appendChild(svg); + } + // ============================================ + // History Dropdown + // ============================================ + toggleHistoryDropdown() { + if (!this.historyDropdown) return; + const isVisible = this.historyDropdown.hasClass("visible"); + if (isVisible) { + this.historyDropdown.removeClass("visible"); + } else { + this.updateHistoryDropdown(); + this.historyDropdown.addClass("visible"); + } + } + updateHistoryDropdown() { + var _a5; + if (!this.historyDropdown) return; + this.historyDropdown.empty(); + const activeTab = (_a5 = this.tabManager) == null ? void 0 : _a5.getActiveTab(); + const conversationController = activeTab == null ? void 0 : activeTab.controllers.conversationController; + if (conversationController) { + conversationController.renderHistoryDropdown(this.historyDropdown, { + onSelectConversation: (id) => this.openHistoryConversation(id), + onOpenConversationInNewTab: (id, activate) => this.openHistoryConversationInNewTab(id, activate), + getConversationOpenState: (id) => this.getHistoryConversationOpenState(id) + }); + } + } + async openHistoryConversation(conversationId) { + var _a5, _b3; + await ((_a5 = this.tabManager) == null ? void 0 : _a5.openConversation(conversationId)); + (_b3 = this.historyDropdown) == null ? void 0 : _b3.removeClass("visible"); + } + async openHistoryConversationInNewTab(conversationId, activate = true) { + var _a5, _b3; + await ((_a5 = this.tabManager) == null ? void 0 : _a5.openConversation(conversationId, { + preferNewTab: true, + activate + })); + (_b3 = this.historyDropdown) == null ? void 0 : _b3.removeClass("visible"); + } + getHistoryConversationOpenState(conversationId) { + var _a5; + const activeTab = (_a5 = this.tabManager) == null ? void 0 : _a5.getActiveTab(); + if ((activeTab == null ? void 0 : activeTab.conversationId) === conversationId) { + return "current"; + } + if (this.findTabWithConversation(conversationId)) { + return "open"; + } + const crossViewResult = this.plugin.findConversationAcrossViews(conversationId); + if (crossViewResult && crossViewResult.view !== this) { + return "open"; + } + return "closed"; + } + findTabWithConversation(conversationId) { + var _a5, _b3, _c2; + const tabs = (_b3 = (_a5 = this.tabManager) == null ? void 0 : _a5.getAllTabs()) != null ? _b3 : []; + return (_c2 = tabs.find((tab) => tab.conversationId === conversationId)) != null ? _c2 : null; + } + // ============================================ + // Event Wiring + // ============================================ + wireEventHandlers() { + const activeDocument = this.containerEl.ownerDocument; + this.registerDomEvent(activeDocument, "click", () => { + var _a5; + (_a5 = this.historyDropdown) == null ? void 0 : _a5.removeClass("visible"); + }); + this.registerDomEvent(this.containerEl, "keydown", (e2) => { + var _a5, _b3; + if (e2.key === "Tab" && e2.shiftKey && !e2.isComposing) { + e2.preventDefault(); + const activeTab = (_a5 = this.tabManager) == null ? void 0 : _a5.getActiveTab(); + if (!activeTab) return; + const providerId = getTabProviderId(activeTab, this.plugin); + if (!ProviderRegistry.getCapabilities(providerId).supportsPlanMode) return; + const current = ProviderSettingsCoordinator.getProviderSettingsSnapshot( + this.plugin.settings, + providerId + ).permissionMode; + if (current === "plan") { + const restoreMode = (_b3 = activeTab.state.prePlanPermissionMode) != null ? _b3 : "normal"; + activeTab.state.prePlanPermissionMode = null; + updatePlanModeUI(activeTab, this.plugin, restoreMode); + } else { + activeTab.state.prePlanPermissionMode = current; + updatePlanModeUI(activeTab, this.plugin, "plan"); + } + } + }); + this.scope = new import_obsidian46.Scope(this.app.scope); + this.scope.register([], "Escape", (e2) => { + var _a5, _b3; + if (e2.isComposing) return; + if (!e2.defaultPrevented) { + const activeTab = (_a5 = this.tabManager) == null ? void 0 : _a5.getActiveTab(); + if (activeTab == null ? void 0 : activeTab.state.isStreaming) { + (_b3 = activeTab.controllers.inputController) == null ? void 0 : _b3.cancelStreaming(); + } + } + return false; + }); + this.scope.register(["Mod"], "Enter", (e2) => { + var _a5; + if (e2.isComposing || e2.defaultPrevented) return; + const activeTab = (_a5 = this.tabManager) == null ? void 0 : _a5.getActiveTab(); + if (!activeTab) return; + if (sendTabInputMessageFromExplicitEnterShortcut(activeTab, e2, { requireInputFocus: true })) { + return false; + } + }); + const markCacheDirty = (includesFolders) => { + var _a5, _b3; + const mgr = (_b3 = (_a5 = this.tabManager) == null ? void 0 : _a5.getActiveTab()) == null ? void 0 : _b3.ui.fileContextManager; + if (!mgr) return; + mgr.markFileCacheDirty(); + if (includesFolders) mgr.markFolderCacheDirty(); + }; + this.eventRefs.push( + this.plugin.app.vault.on("create", () => markCacheDirty(true)), + this.plugin.app.vault.on("delete", () => markCacheDirty(true)), + this.plugin.app.vault.on("rename", () => markCacheDirty(true)), + this.plugin.app.vault.on("modify", () => markCacheDirty(false)) + ); + this.registerEvent( + this.plugin.app.workspace.on("file-open", (file2) => { + var _a5, _b3, _c2; + if (file2) { + (_c2 = (_b3 = (_a5 = this.tabManager) == null ? void 0 : _a5.getActiveTab()) == null ? void 0 : _b3.ui.fileContextManager) == null ? void 0 : _c2.handleFileOpen(file2); + } + }) + ); + this.registerDomEvent(activeDocument, "click", (e2) => { + var _a5; + const activeTab = (_a5 = this.tabManager) == null ? void 0 : _a5.getActiveTab(); + if (activeTab) { + const fcm = activeTab.ui.fileContextManager; + if (fcm && !fcm.containsElement(e2.target) && e2.target !== activeTab.dom.inputEl) { + fcm.hideMentionDropdown(); + } + } + }); + } + // ============================================ + // Persistence + // ============================================ + async restoreOrCreateTabs() { + if (!this.tabManager) return; + const persistedState = await this.plugin.storage.getTabManagerState(); + if (persistedState && persistedState.openTabs.length > 0) { + await this.tabManager.restoreState(persistedState); + return; + } + await this.tabManager.createTab(); + } + persistTabState() { + if (this.pendingPersist !== null) { + window.clearTimeout(this.pendingPersist); + } + this.pendingPersist = window.setTimeout(() => { + this.pendingPersist = null; + if (!this.tabManager) return; + const state = this.tabManager.getPersistedState(); + this.plugin.persistTabManagerState(state).catch(() => { + }); + }, 300); + } + /** Force immediate persistence (for onClose/onunload). */ + async persistTabStateImmediate() { + if (this.pendingPersist !== null) { + window.clearTimeout(this.pendingPersist); + this.pendingPersist = null; + } + if (!this.tabManager) return; + const state = this.tabManager.getPersistedState(); + await this.plugin.persistTabManagerState(state); + } + // ============================================ + // Public API + // ============================================ + /** Gets the currently active tab. */ + getActiveTab() { + var _a5, _b3; + return (_b3 = (_a5 = this.tabManager) == null ? void 0 : _a5.getActiveTab()) != null ? _b3 : null; + } + /** Gets the tab manager. */ + getTabManager() { + return this.tabManager; + } +}; + +// src/features/inline-edit/ui/InlineEditModal.ts +var import_state2 = require("@codemirror/state"); +var import_view2 = require("@codemirror/view"); +var import_obsidian48 = require("obsidian"); +init_path(); + +// src/features/inline-edit/ui/inlineEditMarkdownPreview.ts +var import_obsidian47 = require("obsidian"); +function emptyElement(container) { + if (typeof container.empty === "function") { + container.empty(); + return; + } + container.replaceChildren(); +} +function appendFallback(container, markdown) { + const fallback = container.ownerDocument.createElement("div"); + fallback.className = "claudian-inline-markdown-fallback"; + fallback.textContent = markdown; + container.appendChild(fallback); +} +async function renderInlineEditMarkdownPreview({ + app, + component, + container, + markdown, + sourcePath, + mediaFolder = "" +}) { + emptyElement(container); + try { + const processedMarkdown = replaceImageEmbedsWithHtml(markdown, app, { + mediaFolder, + sourcePath + }); + await import_obsidian47.MarkdownRenderer.render(app, processedMarkdown, container, sourcePath, component); + if (processedMarkdown.includes("[[") && app.metadataCache) { + processFileLinks(app, container); + } + } catch (e2) { + emptyElement(container); + appendFallback(container, markdown); + } +} + +// src/features/inline-edit/ui/InlineEditModal.ts +var showInlineEdit = import_state2.StateEffect.define(); +var showDiff = import_state2.StateEffect.define(); +var showInsertion = import_state2.StateEffect.define(); +var hideInlineEdit = import_state2.StateEffect.define(); +var activeController = null; +var DiffWidget = class extends import_view2.WidgetType { + constructor(diffOps, controller) { + super(); + this.diffOps = diffOps; + this.controller = controller; + } + toDOM() { + const ownerDocument = this.controller.getOwnerDocument(); + const span = ownerDocument.createElement("span"); + span.className = "claudian-inline-diff-replace"; + appendDiffOps(span, this.diffOps); + const btns = ownerDocument.createElement("span"); + btns.className = "claudian-inline-diff-buttons"; + const rejectBtn = ownerDocument.createElement("button"); + rejectBtn.className = "claudian-inline-diff-btn reject"; + rejectBtn.textContent = "\u2715"; + rejectBtn.title = "Reject (esc)"; + rejectBtn.onclick = () => this.controller.reject(); + const acceptBtn = ownerDocument.createElement("button"); + acceptBtn.className = "claudian-inline-diff-btn accept"; + acceptBtn.textContent = "\u2713"; + acceptBtn.title = "Accept (enter)"; + acceptBtn.onclick = () => this.controller.accept(); + btns.appendChild(rejectBtn); + btns.appendChild(acceptBtn); + span.appendChild(btns); + return span; + } + eq(other) { + return diffOpsEqual(this.diffOps, other.diffOps); + } + ignoreEvent() { + return true; + } +}; +var InputWidget = class extends import_view2.WidgetType { + constructor(controller) { + super(); + this.controller = controller; + } + toDOM() { + return this.controller.createInputDOM(); + } + eq() { + return false; + } + ignoreEvent() { + return true; + } +}; +var PreviewWidget = class extends import_view2.WidgetType { + constructor(markdown, controller) { + super(); + this.markdown = markdown; + this.controller = controller; + } + toDOM() { + return this.controller.createPreviewDOM(this.markdown); + } + eq(other) { + return this.markdown === other.markdown; + } + ignoreEvent() { + return true; + } +}; +function buildInlineEditInputDecorations(options) { + var _a5; + const isInbetween = (_a5 = options.isInbetween) != null ? _a5 : false; + const lineStart = options.doc.lineAt(options.inputPos).from; + return import_view2.Decoration.set([ + import_view2.Decoration.line({ + class: "claudian-inline-input-line" + }).range(lineStart), + import_view2.Decoration.widget({ + widget: options.widget, + block: !isInbetween, + side: isInbetween ? 1 : -1 + }).range(options.inputPos) + ], true); +} +var inlineEditField = import_state2.StateField.define({ + create: () => import_view2.Decoration.none, + update: (deco, tr) => { + deco = deco.map(tr.changes); + for (const e2 of tr.effects) { + if (e2.is(showInlineEdit)) { + deco = buildInlineEditInputDecorations({ + doc: tr.state.doc, + inputPos: e2.value.inputPos, + isInbetween: e2.value.isInbetween, + widget: new InputWidget(e2.value.widget) + }); + } else if (e2.is(showDiff)) { + deco = import_view2.Decoration.set([ + import_view2.Decoration.widget({ + widget: new PreviewWidget(e2.value.previewText, e2.value.widget), + block: true, + side: -1 + }).range(e2.value.previewPos), + import_view2.Decoration.replace({ + widget: new DiffWidget(e2.value.diffOps, e2.value.widget) + }).range(e2.value.from, e2.value.to) + ], true); + } else if (e2.is(showInsertion)) { + deco = import_view2.Decoration.set([ + import_view2.Decoration.widget({ + widget: new PreviewWidget(e2.value.previewText, e2.value.widget), + block: true, + side: -1 + }).range(e2.value.previewPos), + import_view2.Decoration.widget({ + widget: new DiffWidget(e2.value.diffOps, e2.value.widget), + side: 1 + // After the position + }).range(e2.value.pos) + ], true); + } else if (e2.is(hideInlineEdit)) { + deco = import_view2.Decoration.none; + } + } + return deco; + }, + provide: (f9) => import_view2.EditorView.decorations.from(f9) +}); +var installedEditors = /* @__PURE__ */ new WeakSet(); +function computeDiff(oldText, newText) { + const oldWords = oldText.split(/(\s+)/); + const newWords = newText.split(/(\s+)/); + const m4 = oldWords.length, n10 = newWords.length; + const dp = Array.from({ length: m4 + 1 }, () => Array(n10 + 1).fill(0)); + for (let i2 = 1; i2 <= m4; i2++) { + for (let j6 = 1; j6 <= n10; j6++) { + dp[i2][j6] = oldWords[i2 - 1] === newWords[j6 - 1] ? dp[i2 - 1][j6 - 1] + 1 : Math.max(dp[i2 - 1][j6], dp[i2][j6 - 1]); + } + } + const ops = []; + let i = m4, j = n10; + const temp = []; + while (i > 0 || j > 0) { + if (i > 0 && j > 0 && oldWords[i - 1] === newWords[j - 1]) { + temp.push({ type: "equal", text: oldWords[i - 1] }); + i--; + j--; + } else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) { + temp.push({ type: "insert", text: newWords[j - 1] }); + j--; + } else { + temp.push({ type: "delete", text: oldWords[i - 1] }); + i--; + } + } + temp.reverse(); + for (const op of temp) { + if (ops.length > 0 && ops[ops.length - 1].type === op.type) { + ops[ops.length - 1].text += op.text; + } else { + ops.push({ ...op }); + } + } + return ops; +} +function appendDiffOps(container, ops) { + for (const op of ops) { + switch (op.type) { + case "delete": + container.createSpan({ cls: "claudian-diff-del", text: op.text }); + break; + case "insert": + container.createSpan({ cls: "claudian-diff-ins", text: op.text }); + break; + default: + container.appendText(op.text); + } + } +} +function diffOpsEqual(left, right) { + if (left.length !== right.length) return false; + return left.every((op, index) => { + const other = right[index]; + return op.type === other.type && op.text === other.text; + }); +} +var InlineEditModal = class { + constructor(app, plugin, editor, view, editContext, notePath, getExternalContexts = () => []) { + this.app = app; + this.plugin = plugin; + this.editor = editor; + this.view = view; + this.editContext = editContext; + this.notePath = notePath; + this.getExternalContexts = getExternalContexts; + this.controller = null; + } + async openAndWait() { + if (activeController) { + activeController.reject(); + return { decision: "reject" }; + } + let editor = this.editor; + let editorView = getEditorView(editor); + if (!editorView) { + editor = this.view.editor; + editorView = getEditorView(editor); + } + if (!editorView) { + new import_obsidian48.Notice("Inline edit unavailable: could not access the active editor. Try reopening the note."); + return { decision: "reject" }; + } + return new Promise((resolve8) => { + this.controller = new InlineEditController( + this.app, + this.plugin, + editorView, + editor, + this.editContext, + this.notePath, + this.getExternalContexts, + resolve8 + ); + activeController = this.controller; + this.controller.show(); + }); + } +}; +var InlineEditController = class { + constructor(app, plugin, editorView, editor, editContext, notePath, getExternalContexts, resolve8) { + this.app = app; + this.plugin = plugin; + this.editorView = editorView; + this.editor = editor; + this.notePath = notePath; + this.getExternalContexts = getExternalContexts; + this.resolve = resolve8; + this.inputEl = null; + this.spinnerEl = null; + this.agentReplyEl = null; + this.containerEl = null; + this.editedText = null; + this.insertedText = null; + this.selFrom = 0; + this.selTo = 0; + this.startLine = 0; + this.cursorContext = null; + this.escHandler = null; + this.selectionListener = null; + this.isConversing = false; + this.slashCommandDropdown = null; + this.mentionDropdown = null; + this.agentReplyRenderVersion = 0; + var _a5, _b3, _c2, _d, _e2, _f2, _g, _h2, _i; + const activeView = typeof plugin.getView === "function" ? plugin.getView() : null; + const activeTab = activeView == null ? void 0 : activeView.getActiveTab(); + const conversation = (activeTab == null ? void 0 : activeTab.conversationId) ? plugin.getConversationSync(activeTab.conversationId) : null; + const providerId = (_d = (_c2 = (_b3 = conversation == null ? void 0 : conversation.providerId) != null ? _b3 : (_a5 = activeTab == null ? void 0 : activeTab.service) == null ? void 0 : _a5.providerId) != null ? _c2 : activeTab == null ? void 0 : activeTab.providerId) != null ? _d : DEFAULT_CHAT_PROVIDER_ID; + this.inlineEditService = ProviderRegistry.createInlineEditService(plugin, providerId); + const auxiliaryModel = ((_e2 = activeTab == null ? void 0 : activeTab.service) == null ? void 0 : _e2.providerId) === providerId ? (_g = (_f2 = activeTab.service).getAuxiliaryModel) == null ? void 0 : _g.call(_f2) : (activeTab == null ? void 0 : activeTab.providerId) === providerId ? activeTab == null ? void 0 : activeTab.draftModel : null; + (_i = (_h2 = this.inlineEditService).setModelOverride) == null ? void 0 : _i.call(_h2, auxiliaryModel != null ? auxiliaryModel : void 0); + this.resolvedProviderId = providerId; + this.mentionDataProvider = new VaultMentionDataProvider(this.app, { + onFileLoadError: () => { + new import_obsidian48.Notice("Failed to load vault files. Vault @-mentions may be unavailable."); + } + }); + this.mentionDataProvider.initializeInBackground(); + this.mode = editContext.mode; + if (editContext.mode === "cursor") { + this.cursorContext = editContext.cursorContext; + this.selectedText = ""; + } else { + this.selectedText = editContext.selectedText; + } + this.updatePositionsFromEditor(); + } + getOwnerDocument() { + var _a5; + return (_a5 = this.editorView.dom.ownerDocument) != null ? _a5 : window.document; + } + updatePositionsFromEditor() { + const doc = this.editorView.state.doc; + if (this.mode === "cursor") { + const ctx = this.cursorContext; + const line = doc.line(ctx.line + 1); + this.selFrom = line.from + ctx.column; + this.selTo = this.selFrom; + } else { + const from = this.editor.getCursor("from"); + const to = this.editor.getCursor("to"); + const fromLine = doc.line(from.line + 1); + const toLine = doc.line(to.line + 1); + this.selFrom = fromLine.from + from.ch; + this.selTo = toLine.from + to.ch; + this.selectedText = this.editor.getSelection() || this.selectedText; + this.startLine = from.line + 1; + } + } + show() { + if (!installedEditors.has(this.editorView)) { + this.editorView.dispatch({ + effects: import_state2.StateEffect.appendConfig.of(inlineEditField) + }); + installedEditors.add(this.editorView); + } + this.updateHighlight(); + if (this.mode === "selection") { + this.attachSelectionListeners(); + } + this.escHandler = (e2) => { + if (e2.key === "Escape" && !e2.isComposing) { + this.reject(); + } + }; + this.getOwnerDocument().addEventListener("keydown", this.escHandler); + } + updateHighlight() { + var _a5; + const doc = this.editorView.state.doc; + const line = doc.lineAt(this.selFrom); + const isInbetween = this.mode === "cursor" && ((_a5 = this.cursorContext) == null ? void 0 : _a5.isInbetween); + this.editorView.dispatch({ + effects: showInlineEdit.of({ + inputPos: isInbetween ? this.selFrom : line.from, + selFrom: this.selFrom, + selTo: this.selTo, + widget: this, + isInbetween + }) + }); + this.updateSelectionHighlight(); + } + updateSelectionHighlight() { + if (this.mode === "selection" && this.selFrom !== this.selTo) { + showSelectionHighlight(this.editorView, this.selFrom, this.selTo); + } else { + hideSelectionHighlight(this.editorView); + } + } + attachSelectionListeners() { + this.removeSelectionListeners(); + this.selectionListener = (e2) => { + const target = e2.target; + if (target && this.inputEl && (target === this.inputEl || this.inputEl.contains(target))) { + return; + } + const prevFrom = this.selFrom; + const prevTo = this.selTo; + const newSelection = this.editor.getSelection(); + if (newSelection && newSelection.length > 0) { + this.updatePositionsFromEditor(); + if (prevFrom !== this.selFrom || prevTo !== this.selTo) { + this.updateHighlight(); + } + } + }; + this.editorView.dom.addEventListener("mouseup", this.selectionListener); + this.editorView.dom.addEventListener("keyup", this.selectionListener); + } + createInputDOM() { + const ownerDocument = this.getOwnerDocument(); + const container = ownerDocument.createElement("div"); + container.className = "claudian-inline-input-container"; + this.containerEl = container; + this.agentReplyEl = ownerDocument.createElement("div"); + this.agentReplyEl.className = "claudian-inline-agent-reply claudian-hidden"; + container.appendChild(this.agentReplyEl); + const inputWrap = ownerDocument.createElement("div"); + inputWrap.className = "claudian-inline-input-wrap"; + container.appendChild(inputWrap); + this.inputEl = ownerDocument.createElement("input"); + this.inputEl.type = "text"; + this.inputEl.className = "claudian-inline-input"; + this.inputEl.placeholder = this.mode === "cursor" ? "Insert instructions..." : "Edit instructions..."; + this.inputEl.spellcheck = false; + inputWrap.appendChild(this.inputEl); + this.spinnerEl = ownerDocument.createElement("div"); + this.spinnerEl.className = "claudian-inline-spinner claudian-hidden"; + inputWrap.appendChild(this.spinnerEl); + const inlineCatalog = ProviderWorkspaceRegistry.getCommandCatalog(this.resolvedProviderId); + this.slashCommandDropdown = new SlashCommandDropdown( + ownerDocument.body, + this.inputEl, + { + onSelect: () => { + }, + onHide: () => { + } + }, + { + fixed: true, + hiddenCommands: getHiddenProviderCommandSet(this.plugin.settings, this.resolvedProviderId), + ...inlineCatalog ? { + providerConfig: inlineCatalog.getDropdownConfig(), + getProviderEntries: () => inlineCatalog.listDropdownEntries({ includeBuiltIns: false }) + } : {} + } + ); + this.mentionDropdown = new MentionDropdownController( + ownerDocument.body, + this.inputEl, + { + // Inline-edit resolves @mentions at send time from input text. + onAttachFile: () => { + }, + onMcpMentionChange: () => { + }, + getMentionedMcpServers: () => /* @__PURE__ */ new Set(), + setMentionedMcpServers: () => false, + addMentionedMcpServer: () => { + }, + getExternalContexts: this.getExternalContexts, + getCachedVaultFolders: () => this.mentionDataProvider.getCachedVaultFolders(), + getCachedVaultFiles: () => this.mentionDataProvider.getCachedVaultFiles(), + normalizePathForVault: (rawPath) => this.normalizePathForVault(rawPath) + }, + { fixed: true } + ); + this.inputEl.addEventListener("keydown", (e2) => this.handleKeydown(e2)); + this.inputEl.addEventListener("input", () => { + var _a5; + return (_a5 = this.mentionDropdown) == null ? void 0 : _a5.handleInputChange(); + }); + window.setTimeout(() => { + var _a5; + return (_a5 = this.inputEl) == null ? void 0 : _a5.focus(); + }, 50); + return container; + } + createPreviewDOM(markdown) { + const ownerDocument = this.getOwnerDocument(); + const previewEl = ownerDocument.createElement("div"); + previewEl.className = "claudian-inline-markdown-preview"; + const bodyEl = ownerDocument.createElement("div"); + bodyEl.className = "claudian-inline-markdown-preview-body markdown-rendered"; + previewEl.appendChild(bodyEl); + void this.renderMarkdownPreview(bodyEl, markdown); + return previewEl; + } + async renderMarkdownPreview(container, markdown) { + var _a5, _b3; + await renderInlineEditMarkdownPreview({ + app: this.app, + component: this.plugin, + container, + markdown, + sourcePath: this.notePath, + mediaFolder: (_b3 = (_a5 = this.plugin.settings) == null ? void 0 : _a5.mediaFolder) != null ? _b3 : "" + }); + } + replaceRenderedPreview(target, rendered) { + target.empty(); + if (rendered.childNodes) { + for (const child of Array.from(rendered.childNodes)) { + target.appendChild(child); + } + return; + } + for (const child of Array.from(rendered.children)) { + target.appendChild(child); + } + } + async generate() { + if (!this.inputEl || !this.spinnerEl) return; + const userMessage = this.inputEl.value.trim(); + if (!userMessage) return; + this.removeSelectionListeners(); + this.inputEl.disabled = true; + this.spinnerEl.removeClass("claudian-hidden"); + const contextFiles = this.resolveContextFilesFromMessage(userMessage); + let result; + if (this.isConversing) { + result = await this.inlineEditService.continueConversation(userMessage, contextFiles); + } else { + if (this.mode === "cursor") { + result = await this.inlineEditService.editText({ + mode: "cursor", + instruction: userMessage, + notePath: this.notePath, + cursorContext: this.cursorContext, + contextFiles + }); + } else { + const lineCount = this.selectedText.split(/\r?\n/).length; + result = await this.inlineEditService.editText({ + mode: "selection", + instruction: userMessage, + notePath: this.notePath, + selectedText: this.selectedText, + startLine: this.startLine, + lineCount, + contextFiles + }); + } + } + this.spinnerEl.addClass("claudian-hidden"); + if (result.success) { + if (result.editedText !== void 0) { + this.editedText = result.editedText; + this.showDiffInPlace(); + } else if (result.insertedText !== void 0) { + this.insertedText = result.insertedText; + this.showInsertionInPlace(); + } else if (result.clarification) { + this.showAgentReply(result.clarification); + this.isConversing = true; + this.inputEl.disabled = false; + this.inputEl.value = ""; + this.inputEl.placeholder = "Reply to continue..."; + this.inputEl.focus(); + } else { + this.handleError("No response from agent"); + } + } else { + this.handleError(result.error || "Error - try again"); + } + } + showAgentReply(message) { + if (!this.agentReplyEl || !this.containerEl) return; + const replyEl = this.agentReplyEl; + const renderVersion = ++this.agentReplyRenderVersion; + const renderedEl = this.getOwnerDocument().createElement("div"); + replyEl.removeClass("claudian-hidden"); + replyEl.empty(); + void this.renderMarkdownPreview(renderedEl, message).then(() => { + if (renderVersion !== this.agentReplyRenderVersion || replyEl !== this.agentReplyEl) { + return; + } + this.replaceRenderedPreview(replyEl, renderedEl); + }); + this.containerEl.classList.add("has-agent-reply"); + } + handleError(errorMessage) { + if (!this.inputEl) return; + this.inputEl.disabled = false; + this.inputEl.placeholder = errorMessage; + this.updatePositionsFromEditor(); + this.updateHighlight(); + this.attachSelectionListeners(); + this.inputEl.focus(); + } + showDiffInPlace() { + if (this.editedText === null) return; + hideSelectionHighlight(this.editorView); + const diffOps = computeDiff(this.selectedText, this.editedText); + const previewPos = this.editorView.state.doc.lineAt(this.selFrom).from; + this.editorView.dispatch({ + effects: showDiff.of({ + from: this.selFrom, + to: this.selTo, + diffOps, + previewPos, + previewText: this.editedText, + widget: this + }) + }); + this.installAcceptRejectHandler(); + } + showInsertionInPlace() { + if (this.insertedText === null) return; + hideSelectionHighlight(this.editorView); + const trimmedText = normalizeInsertionText(this.insertedText); + this.insertedText = trimmedText; + const diffOps = [{ type: "insert", text: trimmedText }]; + const previewPos = this.editorView.state.doc.lineAt(this.selFrom).from; + this.editorView.dispatch({ + effects: showInsertion.of({ + pos: this.selFrom, + diffOps, + previewPos, + previewText: trimmedText, + widget: this + }) + }); + this.installAcceptRejectHandler(); + } + installAcceptRejectHandler() { + if (this.escHandler) { + this.getOwnerDocument().removeEventListener("keydown", this.escHandler); + } + this.escHandler = (e2) => { + if (e2.key === "Escape" && !e2.isComposing) { + this.reject(); + } else if (e2.key === "Enter" && !e2.isComposing) { + this.accept(); + } + }; + this.getOwnerDocument().addEventListener("keydown", this.escHandler); + } + accept() { + var _a5; + const textToInsert = (_a5 = this.editedText) != null ? _a5 : this.insertedText; + if (textToInsert !== null) { + const doc = this.editorView.state.doc; + const fromLine = doc.lineAt(this.selFrom); + const toLine = doc.lineAt(this.selTo); + const from = { line: fromLine.number - 1, ch: this.selFrom - fromLine.from }; + const to = { line: toLine.number - 1, ch: this.selTo - toLine.from }; + this.cleanup(); + this.editor.replaceRange(textToInsert, from, to); + this.resolve({ decision: "accept", editedText: textToInsert }); + } else { + this.cleanup(); + this.resolve({ decision: "reject" }); + } + } + reject() { + this.cleanup({ keepSelectionHighlight: true }); + this.restoreSelectionHighlight(); + this.resolve({ decision: "reject" }); + } + removeSelectionListeners() { + if (this.selectionListener) { + this.editorView.dom.removeEventListener("mouseup", this.selectionListener); + this.editorView.dom.removeEventListener("keyup", this.selectionListener); + this.selectionListener = null; + } + } + cleanup(options) { + var _a5, _b3; + this.inlineEditService.cancel(); + this.inlineEditService.resetConversation(); + this.isConversing = false; + this.removeSelectionListeners(); + if (this.escHandler) { + this.getOwnerDocument().removeEventListener("keydown", this.escHandler); + } + (_a5 = this.slashCommandDropdown) == null ? void 0 : _a5.destroy(); + this.slashCommandDropdown = null; + (_b3 = this.mentionDropdown) == null ? void 0 : _b3.destroy(); + this.mentionDropdown = null; + if (activeController === this) { + activeController = null; + } + this.editorView.dispatch({ + effects: hideInlineEdit.of(null) + }); + if (!(options == null ? void 0 : options.keepSelectionHighlight)) { + hideSelectionHighlight(this.editorView); + } + } + restoreSelectionHighlight() { + if (this.mode !== "selection" || this.selFrom === this.selTo) { + return; + } + showSelectionHighlight(this.editorView, this.selFrom, this.selTo); + } + handleKeydown(e2) { + var _a5, _b3; + if ((_a5 = this.mentionDropdown) == null ? void 0 : _a5.handleKeydown(e2)) { + return; + } + if ((_b3 = this.slashCommandDropdown) == null ? void 0 : _b3.handleKeydown(e2)) { + return; + } + if (e2.key === "Enter" && !e2.isComposing) { + e2.preventDefault(); + void this.generate(); + } + } + normalizePathForVault(rawPath) { + try { + const vaultPath = getVaultPath(this.app); + return normalizePathForVault(rawPath, vaultPath); + } catch (e2) { + new import_obsidian48.Notice("Failed to attach file: invalid path"); + return null; + } + } + resolveContextFilesFromMessage(message) { + if (!message.includes("@")) return []; + const vaultFiles = this.mentionDataProvider.getCachedVaultFiles(); + const pathLookup = /* @__PURE__ */ new Map(); + for (const file2 of vaultFiles) { + const normalized = this.normalizePathForVault(file2.path); + if (!normalized) continue; + const lookupKey = normalizeForPlatformLookup(normalizeMentionPath(normalized)); + if (!pathLookup.has(lookupKey)) { + pathLookup.set(lookupKey, normalized); + } + } + const resolved = /* @__PURE__ */ new Set(); + const externalEntries = buildExternalContextDisplayEntries(this.getExternalContexts()).sort((a, b2) => b2.displayNameLower.length - a.displayNameLower.length); + const getExternalLookup = createExternalContextLookupGetter( + (contextRoot) => externalContextScanner.scanPaths([contextRoot]) + ); + for (let index = 0; index < message.length; index++) { + if (!isMentionStart(message, index)) continue; + const externalMatch = resolveExternalMentionAtIndex( + message, + index, + externalEntries, + getExternalLookup + ); + if (externalMatch) { + resolved.add(externalMatch.resolvedPath); + index = externalMatch.endIndex - 1; + continue; + } + const vaultMatch = findBestMentionLookupMatch( + message, + index + 1, + pathLookup, + normalizeMentionPath, + normalizeForPlatformLookup + ); + if (vaultMatch) { + resolved.add(vaultMatch.resolvedPath); + index = vaultMatch.endIndex - 1; + } + } + return [...resolved]; + } +}; + +// src/features/settings/ClaudianSettings.ts +var import_obsidian49 = require("obsidian"); +init_env(); + +// src/features/settings/keyboardNavigation.ts +var NAV_ACTIONS = ["scrollUp", "scrollDown", "focusInput"]; +var buildNavMappingText = (settings11) => { + return [ + `map ${settings11.scrollUpKey} scrollUp`, + `map ${settings11.scrollDownKey} scrollDown`, + `map ${settings11.focusInputKey} focusInput` + ].join("\n"); +}; +var parseNavMappings = (value) => { + const parsed = {}; + const usedKeys = /* @__PURE__ */ new Map(); + const lines = value.split("\n"); + for (const rawLine of lines) { + const line = rawLine.trim(); + if (!line) continue; + const parts = line.split(/\s+/); + if (parts.length !== 3 || parts[0] !== "map") { + return { error: 'Each line must follow "map "' }; + } + const key = parts[1]; + const action = parts[2]; + if (!NAV_ACTIONS.includes(action)) { + return { error: `Unknown action: ${parts[2]}` }; + } + if (key.length !== 1) { + return { error: `Key must be a single character for ${action}` }; + } + const normalizedKey = key.toLowerCase(); + if (usedKeys.has(normalizedKey)) { + return { error: "Navigation keys must be unique" }; + } + if (parsed[action]) { + return { error: `Duplicate mapping for ${action}` }; + } + usedKeys.set(normalizedKey, action); + parsed[action] = key; + } + const missing = NAV_ACTIONS.filter((action) => !parsed[action]); + if (missing.length > 0) { + return { error: `Missing mapping for ${missing.join(", ")}` }; + } + return { settings: parsed }; +}; + +// src/features/settings/ClaudianSettings.ts +function formatHotkey(hotkey) { + const isMac = import_obsidian49.Platform.isMacOS; + const modMap = isMac ? { Mod: "\u2318", Ctrl: "\u2303", Alt: "\u2325", Shift: "\u21E7", Meta: "\u2318" } : { Mod: "Ctrl", Ctrl: "Ctrl", Alt: "Alt", Shift: "Shift", Meta: "Win" }; + const mods = hotkey.modifiers.map((modifier) => modMap[modifier] || modifier); + const key = hotkey.key.length === 1 ? hotkey.key.toUpperCase() : hotkey.key; + return isMac ? [...mods, key].join("") : [...mods, key].join("+"); +} +function openHotkeySettings(app) { + const setting = app.setting; + if (!setting) { + return; + } + setting.open(); + setting.openTabById("hotkeys"); + window.setTimeout(() => { + var _a5, _b3, _c2; + const tab = setting.activeTab; + if (!tab) { + return; + } + const searchEl = (_b3 = tab.searchInputEl) != null ? _b3 : (_a5 = tab.searchComponent) == null ? void 0 : _a5.inputEl; + if (!searchEl) { + return; + } + searchEl.value = "Claudian"; + (_c2 = tab.updateHotkeyVisibility) == null ? void 0 : _c2.call(tab); + }, 100); +} +function getHotkeyForCommand(app, commandId) { + var _a5, _b3; + const hotkeyManager = app.hotkeyManager; + if (!hotkeyManager) return null; + const customHotkeys = (_a5 = hotkeyManager.customKeys) == null ? void 0 : _a5[commandId]; + const defaultHotkeys = (_b3 = hotkeyManager.defaultKeys) == null ? void 0 : _b3[commandId]; + const hotkeys = customHotkeys && customHotkeys.length > 0 ? customHotkeys : defaultHotkeys; + if (!hotkeys || hotkeys.length === 0) return null; + return hotkeys.map(formatHotkey).join(", "); +} +function addHotkeySettingRow(containerEl, app, commandId, translationPrefix) { + const hotkey = getHotkeyForCommand(app, commandId); + const item = containerEl.createDiv({ cls: "claudian-hotkey-item" }); + item.createSpan({ + cls: "claudian-hotkey-name", + text: t10(`${translationPrefix}.name`) + }); + if (hotkey) { + item.createSpan({ cls: "claudian-hotkey-badge", text: hotkey }); + } + item.addEventListener("click", () => openHotkeySettings(app)); +} +var ClaudianSettingTab = class extends import_obsidian49.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.activeTab = "general"; + this.plugin = plugin; + } + display() { + var _a5; + const { containerEl } = this; + containerEl.empty(); + containerEl.addClass("claudian-settings"); + setLocale(this.plugin.settings.locale); + const providerTabs = ProviderRegistry.getRegisteredProviderIds(); + const tabIds = ["general", ...providerTabs]; + if (!tabIds.includes(this.activeTab)) { + this.activeTab = "general"; + } + const tabBar = containerEl.createDiv({ cls: "claudian-settings-tabs" }); + const tabButtons = /* @__PURE__ */ new Map(); + const tabContents = /* @__PURE__ */ new Map(); + for (const id of tabIds) { + const label = id === "general" ? t10("settings.tabs.general") : ProviderRegistry.getProviderDisplayName(id); + const button = tabBar.createEl("button", { + cls: `claudian-settings-tab${id === this.activeTab ? " claudian-settings-tab--active" : ""}`, + text: label + }); + button.addEventListener("click", () => { + var _a6, _b3; + this.activeTab = id; + for (const tabId of tabIds) { + (_a6 = tabButtons.get(tabId)) == null ? void 0 : _a6.toggleClass("claudian-settings-tab--active", tabId === id); + (_b3 = tabContents.get(tabId)) == null ? void 0 : _b3.toggleClass("claudian-settings-tab-content--active", tabId === id); + } + }); + tabButtons.set(id, button); + } + for (const id of tabIds) { + const content = containerEl.createDiv({ + cls: `claudian-settings-tab-content${id === this.activeTab ? " claudian-settings-tab-content--active" : ""}` + }); + tabContents.set(id, content); + } + this.renderGeneralTab(tabContents.get("general")); + for (const providerId of providerTabs) { + const content = tabContents.get(providerId); + if (!content) { + continue; + } + (_a5 = ProviderWorkspaceRegistry.getSettingsTabRenderer(providerId)) == null ? void 0 : _a5.render(content, { + plugin: this.plugin, + renderHiddenProviderCommandSetting: (target, targetProviderId, copy) => this.renderHiddenProviderCommandSetting(target, targetProviderId, copy), + refreshModelSelectors: () => { + for (const view of this.plugin.getAllViews()) { + view.refreshModelSelector(); + } + }, + renderCustomContextLimits: (target, providerId2) => this.renderCustomContextLimits(target, providerId2) + }); + } + } + renderGeneralTab(container) { + new import_obsidian49.Setting(container).setName(t10("settings.language.name")).setDesc(t10("settings.language.desc")).addDropdown((dropdown) => { + const locales = getAvailableLocales(); + for (const locale of locales) { + dropdown.addOption(locale, getLocaleDisplayName(locale)); + } + dropdown.setValue(this.plugin.settings.locale).onChange(async (value) => { + const locale = value; + if (!setLocale(locale)) { + dropdown.setValue(this.plugin.settings.locale); + return; + } + this.plugin.settings.locale = locale; + await this.plugin.saveSettings(); + this.display(); + }); + }); + new import_obsidian49.Setting(container).setName(t10("settings.display")).setHeading(); + new import_obsidian49.Setting(container).setName(t10("settings.tabBarPosition.name")).setDesc(t10("settings.tabBarPosition.desc")).addDropdown((dropdown) => { + var _a5; + dropdown.addOption("input", t10("settings.tabBarPosition.input")).addOption("header", t10("settings.tabBarPosition.header")).setValue((_a5 = this.plugin.settings.tabBarPosition) != null ? _a5 : "input").onChange(async (value) => { + this.plugin.settings.tabBarPosition = value; + await this.plugin.saveSettings(); + for (const view of this.plugin.getAllViews()) { + view.updateLayoutForPosition(); + } + }); + }); + const maxTabsSetting = new import_obsidian49.Setting(container).setName(t10("settings.maxTabs.name")).setDesc(t10("settings.maxTabs.desc")); + const maxTabsWarningEl = container.createDiv({ + cls: "claudian-max-tabs-warning claudian-setting-validation claudian-setting-validation-warning claudian-hidden" + }); + maxTabsWarningEl.setText(t10("settings.maxTabs.warning")); + const updateMaxTabsWarning = (value) => { + maxTabsWarningEl.toggleClass("claudian-hidden", value <= 5); + }; + maxTabsSetting.addSlider((slider) => { + var _a5, _b3; + slider.setLimits(3, 10, 1).setValue((_a5 = this.plugin.settings.maxTabs) != null ? _a5 : 3).setDynamicTooltip().onChange(async (value) => { + this.plugin.settings.maxTabs = value; + await this.plugin.saveSettings(); + updateMaxTabsWarning(value); + for (const view of this.plugin.getAllViews()) { + view.refreshTabControls(); + } + }); + updateMaxTabsWarning((_b3 = this.plugin.settings.maxTabs) != null ? _b3 : 3); + }); + new import_obsidian49.Setting(container).setName(t10("settings.chatViewPlacement.name")).setDesc(t10("settings.chatViewPlacement.desc")).addDropdown((dropdown) => { + dropdown.addOption("right-sidebar", t10("settings.chatViewPlacement.rightSidebar")).addOption("left-sidebar", t10("settings.chatViewPlacement.leftSidebar")).addOption("main-tab", t10("settings.chatViewPlacement.mainTab")).setValue(this.plugin.settings.chatViewPlacement).onChange(async (value) => { + this.plugin.settings.chatViewPlacement = value; + await this.plugin.saveSettings(); + }); + }); + new import_obsidian49.Setting(container).setName(t10("settings.enableAutoScroll.name")).setDesc(t10("settings.enableAutoScroll.desc")).addToggle( + (toggle) => { + var _a5; + return toggle.setValue((_a5 = this.plugin.settings.enableAutoScroll) != null ? _a5 : true).onChange(async (value) => { + this.plugin.settings.enableAutoScroll = value; + await this.plugin.saveSettings(); + }); + } + ); + new import_obsidian49.Setting(container).setName(t10("settings.deferMathRenderingDuringStreaming.name")).setDesc(t10("settings.deferMathRenderingDuringStreaming.desc")).addToggle( + (toggle) => { + var _a5; + return toggle.setValue((_a5 = this.plugin.settings.deferMathRenderingDuringStreaming) != null ? _a5 : true).onChange(async (value) => { + this.plugin.settings.deferMathRenderingDuringStreaming = value; + await this.plugin.saveSettings(); + }); + } + ); + new import_obsidian49.Setting(container).setName(t10("settings.conversations")).setHeading(); + new import_obsidian49.Setting(container).setName(t10("settings.autoTitle.name")).setDesc(t10("settings.autoTitle.desc")).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.enableAutoTitleGeneration).onChange(async (value) => { + this.plugin.settings.enableAutoTitleGeneration = value; + await this.plugin.saveSettings(); + this.display(); + }) + ); + if (this.plugin.settings.enableAutoTitleGeneration) { + new import_obsidian49.Setting(container).setName(t10("settings.titleModel.name")).setDesc(t10("settings.titleModel.desc")).addDropdown((dropdown) => { + dropdown.addOption("", t10("settings.titleModel.auto")); + const settingsBag = this.plugin.settings; + const seenValues = /* @__PURE__ */ new Set(); + for (const providerId of ProviderRegistry.getRegisteredProviderIds()) { + const uiConfig = ProviderRegistry.getChatUIConfig(providerId); + for (const model of uiConfig.getModelOptions(settingsBag)) { + if (!seenValues.has(model.value)) { + seenValues.add(model.value); + dropdown.addOption(model.value, model.label); + } + } + } + dropdown.setValue(this.plugin.settings.titleGenerationModel || "").onChange(async (value) => { + this.plugin.settings.titleGenerationModel = value; + await this.plugin.saveSettings(); + }); + }); + } + new import_obsidian49.Setting(container).setName(t10("settings.content")).setHeading(); + new import_obsidian49.Setting(container).setName(t10("settings.userName.name")).setDesc(t10("settings.userName.desc")).addText((text) => { + text.setPlaceholder(t10("settings.userName.name")).setValue(this.plugin.settings.userName).onChange(async (value) => { + this.plugin.settings.userName = value; + await this.plugin.saveSettings(); + }); + text.inputEl.addEventListener("blur", () => { + void this.restartServiceForPromptChange(); + }); + }); + new import_obsidian49.Setting(container).setName(t10("settings.systemPrompt.name")).setDesc(t10("settings.systemPrompt.desc")).addTextArea((text) => { + text.setPlaceholder(t10("settings.systemPrompt.name")).setValue(this.plugin.settings.systemPrompt).onChange(async (value) => { + this.plugin.settings.systemPrompt = value; + await this.plugin.saveSettings(); + }); + text.inputEl.rows = 6; + text.inputEl.cols = 50; + text.inputEl.addEventListener("blur", () => { + void this.restartServiceForPromptChange(); + }); + }); + new import_obsidian49.Setting(container).setName(t10("settings.excludedTags.name")).setDesc(t10("settings.excludedTags.desc")).addTextArea((text) => { + text.setPlaceholder("System\nprivate\ndraft").setValue(this.plugin.settings.excludedTags.join("\n")).onChange(async (value) => { + this.plugin.settings.excludedTags = value.split(/\r?\n/).map((entry) => entry.trim().replace(/^#/, "")).filter((entry) => entry.length > 0); + await this.plugin.saveSettings(); + }); + text.inputEl.rows = 4; + text.inputEl.cols = 30; + }); + new import_obsidian49.Setting(container).setName(t10("settings.mediaFolder.name")).setDesc(t10("settings.mediaFolder.desc")).addText((text) => { + text.setPlaceholder("Attachments").setValue(this.plugin.settings.mediaFolder).onChange(async (value) => { + this.plugin.settings.mediaFolder = value.trim(); + await this.plugin.saveSettings(); + }); + text.inputEl.addClass("claudian-settings-media-input"); + text.inputEl.addEventListener("blur", () => { + void this.restartServiceForPromptChange(); + }); + }); + new import_obsidian49.Setting(container).setName(t10("settings.input")).setHeading(); + new import_obsidian49.Setting(container).setName(t10("settings.requireCommandOrControlEnterToSend.name")).setDesc(t10("settings.requireCommandOrControlEnterToSend.desc")).addToggle((toggle) => { + var _a5; + toggle.setValue((_a5 = this.plugin.settings.requireCommandOrControlEnterToSend) != null ? _a5 : false).onChange(async (value) => { + this.plugin.settings.requireCommandOrControlEnterToSend = value; + await this.plugin.saveSettings(); + }); + }); + new import_obsidian49.Setting(container).setName(t10("settings.navMappings.name")).setDesc(t10("settings.navMappings.desc")).addTextArea((text) => { + let pendingValue = buildNavMappingText(this.plugin.settings.keyboardNavigation); + let saveTimeout = null; + const commitValue = async (showError) => { + if (saveTimeout !== null) { + window.clearTimeout(saveTimeout); + saveTimeout = null; + } + const result = parseNavMappings(pendingValue); + if (!result.settings) { + if (showError) { + new import_obsidian49.Notice(`${t10("common.error")}: ${result.error}`); + pendingValue = buildNavMappingText(this.plugin.settings.keyboardNavigation); + text.setValue(pendingValue); + } + return; + } + this.plugin.settings.keyboardNavigation.scrollUpKey = result.settings.scrollUp; + this.plugin.settings.keyboardNavigation.scrollDownKey = result.settings.scrollDown; + this.plugin.settings.keyboardNavigation.focusInputKey = result.settings.focusInput; + await this.plugin.saveSettings(); + pendingValue = buildNavMappingText(this.plugin.settings.keyboardNavigation); + text.setValue(pendingValue); + }; + const scheduleSave = () => { + if (saveTimeout !== null) { + window.clearTimeout(saveTimeout); + } + saveTimeout = window.setTimeout(() => { + void commitValue(false); + }, 500); + }; + text.setPlaceholder("Map w scrollup\nmap s scrolldown\nmap i focusinput").setValue(pendingValue).onChange((value) => { + pendingValue = value; + scheduleSave(); + }); + text.inputEl.rows = 3; + text.inputEl.addEventListener("blur", () => { + void commitValue(true); + }); + }); + new import_obsidian49.Setting(container).setName(t10("settings.hotkeys")).setHeading(); + const hotkeyGrid = container.createDiv({ cls: "claudian-hotkey-grid" }); + addHotkeySettingRow(hotkeyGrid, this.app, "claudian:inline-edit", "settings.inlineEditHotkey"); + addHotkeySettingRow(hotkeyGrid, this.app, "claudian:open-view", "settings.openChatHotkey"); + addHotkeySettingRow(hotkeyGrid, this.app, "claudian:new-session", "settings.newSessionHotkey"); + addHotkeySettingRow(hotkeyGrid, this.app, "claudian:new-tab", "settings.newTabHotkey"); + addHotkeySettingRow(hotkeyGrid, this.app, "claudian:close-current-tab", "settings.closeTabHotkey"); + renderEnvironmentSettingsSection({ + container, + plugin: this.plugin, + scope: "shared", + heading: t10("settings.environment"), + name: "Shared environment", + desc: "Provider-neutral runtime variables shared across all providers. Use this for PATH, proxy, cert, and temp variables.", + placeholder: "PATH=/opt/homebrew/bin:/usr/local/bin\nHTTPS_PROXY=http://proxy.example.com:8080\nSSL_CERT_FILE=/path/to/cert.pem", + renderCustomContextLimits: (target) => this.renderCustomContextLimits(target) + }); + } + renderHiddenProviderCommandSetting(container, providerId, copy) { + new import_obsidian49.Setting(container).setName(copy.name).setDesc(copy.desc).addTextArea((text) => { + text.setPlaceholder(copy.placeholder).setValue(getHiddenProviderCommands(this.plugin.settings, providerId).join("\n")).onChange(async (value) => { + var _a5; + this.plugin.settings.hiddenProviderCommands = { + ...this.plugin.settings.hiddenProviderCommands, + [providerId]: normalizeHiddenCommandList(value.split(/\r?\n/)) + }; + await this.plugin.saveSettings(); + (_a5 = this.plugin.getView()) == null ? void 0 : _a5.updateHiddenProviderCommands(); + }); + text.inputEl.rows = 4; + text.inputEl.cols = 30; + }); + } + renderCustomContextLimits(container, providerId) { + var _a5, _b3, _c2; + container.empty(); + const uniqueModelIds = /* @__PURE__ */ new Set(); + const providerIds = providerId ? [providerId] : ProviderRegistry.getRegisteredProviderIds(); + for (const targetProviderId of providerIds) { + const envVars = parseEnvironmentVariables( + this.plugin.getActiveEnvironmentVariables(targetProviderId) + ); + for (const modelId of ProviderRegistry.getChatUIConfig(targetProviderId).getCustomModelIds(envVars)) { + uniqueModelIds.add(modelId); + } + } + if (uniqueModelIds.size === 0) { + return; + } + const headerEl = container.createDiv({ cls: "claudian-context-limits-header" }); + headerEl.createSpan({ + text: t10("settings.customModelOverrides.name"), + cls: "claudian-context-limits-label" + }); + const descEl = container.createDiv({ cls: "claudian-context-limits-desc" }); + descEl.setText(t10("settings.customModelOverrides.desc")); + const listEl = container.createDiv({ cls: "claudian-context-limits-list" }); + for (const modelId of uniqueModelIds) { + const currentValue = (_a5 = this.plugin.settings.customContextLimits) == null ? void 0 : _a5[modelId]; + const currentAlias = (_c2 = (_b3 = this.plugin.settings.customModelAliases) == null ? void 0 : _b3[modelId]) != null ? _c2 : ""; + const itemEl = listEl.createDiv({ cls: "claudian-context-limits-item" }); + const nameEl = itemEl.createDiv({ cls: "claudian-context-limits-model" }); + nameEl.setText(modelId); + const inputWrapper = itemEl.createDiv({ cls: "claudian-context-limits-input-wrapper" }); + const aliasInputEl = inputWrapper.createEl("input", { + type: "text", + placeholder: t10("settings.customModelAliases.placeholder"), + cls: "claudian-context-alias-input", + value: currentAlias + }); + aliasInputEl.setAttribute("aria-label", `Alias for ${modelId}`); + aliasInputEl.title = "Custom label shown in the model selector. Leave empty to use the default."; + const inputEl = inputWrapper.createEl("input", { + type: "text", + placeholder: "200k", + cls: "claudian-context-limits-input", + value: currentValue ? formatContextLimit(currentValue) : "" + }); + inputEl.setAttribute("aria-label", `Context window for ${modelId}`); + const validationEl = inputWrapper.createDiv({ cls: "claudian-context-limit-validation claudian-hidden" }); + const saveAlias = async () => { + var _a6; + if (!this.plugin.settings.customModelAliases) { + this.plugin.settings.customModelAliases = {}; + } + const existing = (_a6 = this.plugin.settings.customModelAliases[modelId]) != null ? _a6 : ""; + const trimmed = aliasInputEl.value.trim(); + if (trimmed === existing) { + aliasInputEl.value = existing; + return; + } + if (trimmed) { + this.plugin.settings.customModelAliases[modelId] = trimmed; + } else { + delete this.plugin.settings.customModelAliases[modelId]; + } + await this.plugin.saveSettings(); + for (const view of this.plugin.getAllViews()) { + view.refreshModelSelector(); + } + }; + const saveContextLimit = async () => { + const trimmed = inputEl.value.trim(); + if (!this.plugin.settings.customContextLimits) { + this.plugin.settings.customContextLimits = {}; + } + if (!trimmed) { + delete this.plugin.settings.customContextLimits[modelId]; + validationEl.toggleClass("claudian-hidden", true); + inputEl.classList.remove("claudian-input-error"); + } else { + const parsed = parseContextLimit(trimmed); + if (parsed === null) { + validationEl.setText(t10("settings.customContextLimits.invalid")); + validationEl.toggleClass("claudian-hidden", false); + inputEl.classList.add("claudian-input-error"); + return; + } + this.plugin.settings.customContextLimits[modelId] = parsed; + validationEl.toggleClass("claudian-hidden", true); + inputEl.classList.remove("claudian-input-error"); + } + await this.plugin.saveSettings(); + }; + inputEl.addEventListener("input", () => { + void saveContextLimit(); + }); + aliasInputEl.addEventListener("blur", () => { + void saveAlias(); + }); + aliasInputEl.addEventListener("keydown", (event) => { + var _a6, _b4; + if (event.key === "Enter") { + event.preventDefault(); + aliasInputEl.blur(); + } else if (event.key === "Escape") { + event.preventDefault(); + aliasInputEl.value = (_b4 = (_a6 = this.plugin.settings.customModelAliases) == null ? void 0 : _a6[modelId]) != null ? _b4 : ""; + aliasInputEl.blur(); + } + }); + } + } + async restartServiceForPromptChange() { + const view = this.plugin.getView(); + const tabManager = view == null ? void 0 : view.getTabManager(); + if (!tabManager) return; + try { + await tabManager.broadcastToAllTabs( + async (service) => { + await service.ensureReady({ force: true }); + } + ); + } catch (e2) { + } + } +}; + +// src/main.ts +init_path(); +patchSetMaxListenersForElectron(); +function isClaudianView(value) { + return !!value && typeof value === "object" && typeof value.getTabManager === "function"; +} +var ClaudianPlugin = class extends import_obsidian50.Plugin { + constructor() { + super(...arguments); + this.conversations = []; + this.lastKnownTabManagerState = null; + } + async onload() { + await this.loadSettings(); + await ProviderWorkspaceRegistry.initializeAll(this); + this.registerView( + VIEW_TYPE_CLAUDIAN, + (leaf) => new ClaudianView(leaf, this) + ); + this.addRibbonIcon("bot", "Open Claudian", () => { + void this.activateView(); + }); + this.addCommand({ + id: "open-view", + name: "Open chat view", + callback: () => { + void this.activateView(); + } + }); + this.addCommand({ + id: "inline-edit", + name: "Inline edit", + editorCallback: async (editor, ctx) => { + var _a5; + const view = ctx instanceof import_obsidian50.MarkdownView ? ctx : this.app.workspace.getActiveViewOfType(import_obsidian50.MarkdownView); + if (!view) { + new import_obsidian50.Notice("Inline edit unavailable: could not access the active Markdown view."); + return; + } + const selectedText = editor.getSelection(); + const notePath = ((_a5 = view.file) == null ? void 0 : _a5.path) || "unknown"; + let editContext; + if (selectedText.trim()) { + editContext = { mode: "selection", selectedText }; + } else { + const cursor = editor.getCursor(); + const cursorContext = buildCursorContext( + (line) => editor.getLine(line), + editor.lineCount(), + cursor.line, + cursor.ch + ); + editContext = { mode: "cursor", cursorContext }; + } + const modal = new InlineEditModal( + this.app, + this, + editor, + view, + editContext, + notePath, + () => { + var _a6, _b3, _c2, _d; + return (_d = (_c2 = (_b3 = (_a6 = this.getView()) == null ? void 0 : _a6.getActiveTab()) == null ? void 0 : _b3.ui.externalContextSelector) == null ? void 0 : _c2.getExternalContexts()) != null ? _d : []; + } + ); + const result = await modal.openAndWait(); + if (result.decision === "accept" && result.editedText !== void 0) { + new import_obsidian50.Notice(editContext.mode === "cursor" ? "Inserted" : "Edit applied"); + } + } + }); + this.addCommand({ + id: "new-tab", + name: "New tab", + checkCallback: (checking) => { + if (!this.canCreateNewTab()) return false; + if (!checking) { + void this.openNewTab(); + } + return true; + } + }); + this.addCommand({ + id: "new-session", + name: "New session (in current tab)", + checkCallback: (checking) => { + const view = this.getView(); + if (!view) return false; + const tabManager = view.getTabManager(); + if (!tabManager) return false; + const activeTab = tabManager.getActiveTab(); + if (!activeTab) return false; + if (activeTab.state.isStreaming) return false; + if (!checking) { + void tabManager.createNewConversation(); + } + return true; + } + }); + this.addCommand({ + id: "close-current-tab", + name: "Close current tab", + checkCallback: (checking) => { + const view = this.getView(); + if (!view) return false; + const tabManager = view.getTabManager(); + if (!tabManager) return false; + if (!checking) { + const activeTabId = tabManager.getActiveTabId(); + if (activeTabId) { + void tabManager.closeTab(activeTabId); + } + } + return true; + } + }); + this.addSettingTab(new ClaudianSettingTab(this.app, this)); + } + onunload() { + void this.persistOpenTabStates(); + } + async persistOpenTabStates() { + for (const view of this.getAllViews()) { + const tabManager = view.getTabManager(); + if (tabManager) { + const state = tabManager.getPersistedState(); + await this.persistTabManagerState(state); + } + } + } + async activateView() { + const { workspace } = this.app; + let leaf = workspace.getLeavesOfType(VIEW_TYPE_CLAUDIAN)[0]; + if (!leaf) { + const newLeaf = this.getLeafForPlacement(this.settings.chatViewPlacement); + if (newLeaf) { + await newLeaf.setViewState({ + type: VIEW_TYPE_CLAUDIAN, + active: true + }); + leaf = newLeaf; + } + } + if (leaf) { + await revealWorkspaceLeaf(workspace, leaf); + } + } + getLeafForPlacement(placement) { + const { workspace } = this.app; + switch (placement) { + case "main-tab": + return workspace.getLeaf("tab"); + case "left-sidebar": + return workspace.getLeftLeaf(false); + case "right-sidebar": + return workspace.getRightLeaf(false); + } + } + canCreateNewTab() { + const hasClaudianLeaf = this.app.workspace.getLeavesOfType(VIEW_TYPE_CLAUDIAN).length > 0; + const view = this.getView(); + const tabManager = view == null ? void 0 : view.getTabManager(); + if (tabManager) { + return tabManager.canCreateTab(); + } + if (hasClaudianLeaf) { + return false; + } + return this.getLastKnownOpenTabCount() < this.getMaxTabsLimit(); + } + async ensureViewOpen() { + const existingView = this.getView(); + if (existingView) { + return existingView; + } + await this.activateView(); + return this.getView(); + } + async openNewTab() { + const existingView = this.getView(); + if (existingView) { + await existingView.createNewTab(); + return; + } + const restoredTabCount = this.getLastKnownOpenTabCount(); + const view = await this.ensureViewOpen(); + if (!view) { + return; + } + if (restoredTabCount === 0) { + return; + } + await view.createNewTab(); + } + async loadSettings() { + var _a5; + this.storage = new SharedStorageService(this); + const { claudian } = await this.storage.initialize(); + this.lastKnownTabManagerState = await this.storage.getTabManagerState(); + this.settings = { + ...DEFAULT_CLAUDIAN_SETTINGS, + ...claudian + }; + if (this.settings.permissionMode === "plan") { + this.settings.permissionMode = "normal"; + } + if (this.settings.savedProviderPermissionMode && typeof this.settings.savedProviderPermissionMode === "object" && !Array.isArray(this.settings.savedProviderPermissionMode)) { + for (const [providerId, mode] of Object.entries(this.settings.savedProviderPermissionMode)) { + if (mode === "plan") { + this.settings.savedProviderPermissionMode[providerId] = "normal"; + } + } + } + const opencodeConfig = (_a5 = this.settings.providerConfigs) == null ? void 0 : _a5.opencode; + if (opencodeConfig && typeof opencodeConfig === "object" && !Array.isArray(opencodeConfig) && opencodeConfig.selectedMode === OPENCODE_PLAN_MODE_ID) { + opencodeConfig.selectedMode = OPENCODE_SAFE_MODE_ID; + } + const didNormalizeProviderSelection = ProviderSettingsCoordinator.normalizeProviderSelection( + this.settings + ); + const didNormalizeModelVariants = this.normalizeModelVariantSettings(); + const allMetadata = await this.storage.sessions.listMetadata(); + this.conversations = allMetadata.map((meta3) => { + var _a6; + const resumeSessionId = meta3.sessionId !== void 0 ? meta3.sessionId : meta3.id; + return { + id: meta3.id, + providerId: (_a6 = meta3.providerId) != null ? _a6 : DEFAULT_CHAT_PROVIDER_ID, + title: meta3.title, + createdAt: meta3.createdAt, + updatedAt: meta3.updatedAt, + lastResponseAt: meta3.lastResponseAt, + sessionId: resumeSessionId, + providerState: meta3.providerState, + messages: [], + currentNote: meta3.currentNote, + externalContextPaths: meta3.externalContextPaths, + enabledMcpServers: meta3.enabledMcpServers, + usage: meta3.usage, + titleGenerationStatus: meta3.titleGenerationStatus, + resumeAtMessageId: meta3.resumeAtMessageId + }; + }).sort( + (a, b2) => { + var _a6, _b3; + return ((_a6 = b2.lastResponseAt) != null ? _a6 : b2.updatedAt) - ((_b3 = a.lastResponseAt) != null ? _b3 : a.updatedAt); + } + ); + setLocale(this.settings.locale); + const backfilledConversations = this.backfillConversationResponseTimestamps(); + const { changed, invalidatedConversations } = this.reconcileModelWithEnvironment(); + ProviderSettingsCoordinator.projectActiveProviderState( + this.settings + ); + if (changed || didNormalizeModelVariants || didNormalizeProviderSelection) { + await this.saveSettings(); + } + const conversationsToSave = /* @__PURE__ */ new Set([...backfilledConversations, ...invalidatedConversations]); + for (const conv of conversationsToSave) { + await this.storage.sessions.saveMetadata( + this.storage.sessions.toSessionMetadata(conv) + ); + } + } + backfillConversationResponseTimestamps() { + const updated = []; + for (const conv of this.conversations) { + if (conv.lastResponseAt != null) continue; + if (!conv.messages || conv.messages.length === 0) continue; + for (let i = conv.messages.length - 1; i >= 0; i--) { + const msg = conv.messages[i]; + if (msg.role === "assistant") { + conv.lastResponseAt = msg.timestamp; + updated.push(conv); + break; + } + } + } + return updated; + } + normalizeModelVariantSettings() { + return ProviderSettingsCoordinator.normalizeAllModelVariants( + this.settings + ); + } + async saveSettings() { + ProviderSettingsCoordinator.normalizeProviderSelection( + this.settings + ); + ProviderSettingsCoordinator.persistProjectedProviderState( + this.settings + ); + await this.storage.saveClaudianSettings(this.settings); + } + /** Updates and persists environment variables, restarting processes to apply changes. */ + async applyEnvironmentVariables(scope, envText) { + await this.applyEnvironmentVariablesBatch([{ scope, envText }]); + } + async applyEnvironmentVariablesBatch(updates) { + var _a5; + const settingsBag = this.settings; + const nextEnvironmentByScope = /* @__PURE__ */ new Map(); + for (const update of updates) { + nextEnvironmentByScope.set(update.scope, update.envText); + } + const changedScopes = []; + for (const [scope, envText] of nextEnvironmentByScope) { + const currentValue = getEnvironmentVariablesForScope(settingsBag, scope); + if (currentValue !== envText) { + changedScopes.push(scope); + } + setEnvironmentVariablesForScope(settingsBag, scope, envText); + } + if (changedScopes.length === 0) { + await this.saveSettings(); + return; + } + const affectedProviderIds = this.getAffectedEnvironmentProviders(changedScopes); + ProviderSettingsCoordinator.handleEnvironmentChange(settingsBag, affectedProviderIds); + const { changed, invalidatedConversations } = this.reconcileModelWithEnvironment(affectedProviderIds); + await this.saveSettings(); + if (invalidatedConversations.length > 0) { + for (const conv of invalidatedConversations) { + await this.storage.sessions.saveMetadata( + this.storage.sessions.toSessionMetadata(conv) + ); + } + } + const view = this.getView(); + const tabManager = view == null ? void 0 : view.getTabManager(); + if (tabManager) { + const affectedTabs = tabManager.getAllTabs().filter((tab) => { + var _a6; + return affectedProviderIds.includes((_a6 = tab.providerId) != null ? _a6 : DEFAULT_CHAT_PROVIDER_ID); + }); + const syncTabRuntimeState = (tab) => { + var _a6, _b3, _c2, _d, _e2; + if (!tab.service || !tab.serviceInitialized) { + return; + } + const conversation = tab.conversationId ? this.getConversationSync(tab.conversationId) : null; + const hasConversationContext = ((_a6 = conversation == null ? void 0 : conversation.messages.length) != null ? _a6 : 0) > 0; + const externalContextPaths = (_e2 = (_b3 = tab.ui.externalContextSelector) == null ? void 0 : _b3.getExternalContexts()) != null ? _e2 : hasConversationContext ? (_c2 = conversation == null ? void 0 : conversation.externalContextPaths) != null ? _c2 : [] : (_d = this.settings.persistentExternalContextPaths) != null ? _d : []; + tab.service.syncConversationState(conversation, externalContextPaths); + }; + for (const tab of affectedTabs) { + if (tab.state.isStreaming) { + (_a5 = tab.controllers.inputController) == null ? void 0 : _a5.cancelStreaming(); + } + } + let failedTabs = 0; + if (changed) { + for (const tab of affectedTabs) { + if (!tab.service || !tab.serviceInitialized) { + continue; + } + try { + syncTabRuntimeState(tab); + tab.service.resetSession(); + await tab.service.ensureReady(); + } catch (e2) { + failedTabs++; + } + } + } else { + for (const tab of affectedTabs) { + if (!tab.service || !tab.serviceInitialized) { + continue; + } + try { + syncTabRuntimeState(tab); + await tab.service.ensureReady({ force: true }); + } catch (e2) { + failedTabs++; + } + } + } + if (failedTabs > 0) { + new import_obsidian50.Notice(`Environment changes applied, but ${failedTabs} affected tab(s) failed to restart.`); + } + } + for (const openView of this.getAllViews()) { + openView.invalidateProviderCommandCaches(affectedProviderIds); + openView.refreshModelSelector(); + } + const noticeText = changed ? "Environment variables applied. Sessions will be rebuilt on next message." : "Environment variables applied."; + new import_obsidian50.Notice(noticeText); + } + /** Returns the runtime environment variables (fixed at plugin load). */ + getActiveEnvironmentVariables(providerId = ProviderRegistry.resolveSettingsProviderId( + this.settings + )) { + return getRuntimeEnvironmentText( + this.settings, + providerId + ); + } + getEnvironmentVariablesForScope(scope) { + return getEnvironmentVariablesForScope( + this.settings, + scope + ); + } + getResolvedProviderCliPath(providerId) { + const cliResolver = ProviderWorkspaceRegistry.getCliResolver(providerId); + if (!cliResolver) { + return null; + } + return cliResolver.resolveFromSettings(this.settings); + } + reconcileModelWithEnvironment(providerIds = ProviderRegistry.getRegisteredProviderIds()) { + return ProviderSettingsCoordinator.reconcileProviders( + this.settings, + this.conversations, + providerIds + ); + } + getAffectedEnvironmentProviders(scopes) { + const registeredProviderIds = new Set(ProviderRegistry.getRegisteredProviderIds()); + const affectedProviderIds = /* @__PURE__ */ new Set(); + for (const scope of scopes) { + if (scope === "shared") { + for (const providerId2 of registeredProviderIds) { + affectedProviderIds.add(providerId2); + } + continue; + } + const providerId = scope.slice("provider:".length); + if (registeredProviderIds.has(providerId)) { + affectedProviderIds.add(providerId); + } + } + return Array.from(affectedProviderIds); + } + generateConversationId() { + return `conv-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`; + } + generateDefaultTitle() { + const now = /* @__PURE__ */ new Date(); + return now.toLocaleString(void 0, { + month: "short", + day: "numeric", + hour: "2-digit", + minute: "2-digit" + }); + } + getConversationPreview(conv) { + const firstUserMsg = conv.messages.find((m4) => m4.role === "user"); + if (!firstUserMsg) { + return "New conversation"; + } + return firstUserMsg.content.substring(0, 50) + (firstUserMsg.content.length > 50 ? "..." : ""); + } + async loadSdkMessagesForConversation(conversation) { + await ProviderRegistry.getConversationHistoryService(conversation.providerId).hydrateConversationHistory(conversation, getVaultPath(this.app)); + } + async createConversation(options) { + var _a5; + const providerId = (_a5 = options == null ? void 0 : options.providerId) != null ? _a5 : DEFAULT_CHAT_PROVIDER_ID; + const sessionId = options == null ? void 0 : options.sessionId; + const conversationId = sessionId != null ? sessionId : this.generateConversationId(); + const conversation = { + id: conversationId, + providerId, + title: this.generateDefaultTitle(), + createdAt: Date.now(), + updatedAt: Date.now(), + sessionId: sessionId != null ? sessionId : null, + messages: [] + }; + this.conversations.unshift(conversation); + await this.storage.sessions.saveMetadata( + this.storage.sessions.toSessionMetadata(conversation) + ); + return conversation; + } + async switchConversation(id) { + const conversation = this.conversations.find((c) => c.id === id); + if (!conversation) return null; + await this.loadSdkMessagesForConversation(conversation); + return conversation; + } + async deleteConversation(id) { + var _a5, _b3; + const index = this.conversations.findIndex((c) => c.id === id); + if (index === -1) return; + const conversation = this.conversations[index]; + this.conversations.splice(index, 1); + await ProviderRegistry.getConversationHistoryService(conversation.providerId).deleteConversationSession(conversation, getVaultPath(this.app)); + await this.storage.sessions.deleteMetadata(id); + for (const view of this.getAllViews()) { + const tabManager = view.getTabManager(); + if (!tabManager) continue; + for (const tab of tabManager.getAllTabs()) { + if (tab.conversationId === id) { + (_a5 = tab.controllers.inputController) == null ? void 0 : _a5.cancelStreaming(); + await ((_b3 = tab.controllers.conversationController) == null ? void 0 : _b3.createNew({ force: true })); + } + } + } + } + async renameConversation(id, title) { + const conversation = this.conversations.find((c) => c.id === id); + if (!conversation) return; + conversation.title = title.trim() || this.generateDefaultTitle(); + conversation.updatedAt = Date.now(); + await this.storage.sessions.saveMetadata( + this.storage.sessions.toSessionMetadata(conversation) + ); + } + async updateConversation(id, updates) { + const conversation = this.conversations.find((c) => c.id === id); + if (!conversation) return; + const safeUpdates = { ...updates }; + delete safeUpdates.providerId; + Object.assign(conversation, safeUpdates, { updatedAt: Date.now() }); + await this.storage.sessions.saveMetadata( + this.storage.sessions.toSessionMetadata(conversation) + ); + if (!ProviderRegistry.getConversationHistoryService(conversation.providerId).isPendingForkConversation(conversation)) { + for (const msg of conversation.messages) { + if (msg.images) { + for (const img of msg.images) { + img.data = ""; + } + } + } + } + } + async getConversationById(id) { + const conversation = this.conversations.find((c) => c.id === id) || null; + if (conversation) { + await this.loadSdkMessagesForConversation(conversation); + } + return conversation; + } + getConversationSync(id) { + return this.conversations.find((c) => c.id === id) || null; + } + findEmptyConversation() { + return this.conversations.find((c) => c.messages.length === 0) || null; + } + getConversationList() { + return this.conversations.map((c) => ({ + id: c.id, + providerId: c.providerId, + title: c.title, + createdAt: c.createdAt, + updatedAt: c.updatedAt, + lastResponseAt: c.lastResponseAt, + messageCount: c.messages.length, + preview: this.getConversationPreview(c), + titleGenerationStatus: c.titleGenerationStatus + })); + } + async persistTabManagerState(state) { + this.lastKnownTabManagerState = state; + await this.storage.setTabManagerState(state); + } + getView() { + var _a5; + const leaves = this.app.workspace.getLeavesOfType(VIEW_TYPE_CLAUDIAN); + return (_a5 = leaves.map((leaf) => leaf.view).find(isClaudianView)) != null ? _a5 : null; + } + getAllViews() { + const leaves = this.app.workspace.getLeavesOfType(VIEW_TYPE_CLAUDIAN); + return leaves.map((leaf) => leaf.view).filter(isClaudianView); + } + findConversationAcrossViews(conversationId) { + for (const view of this.getAllViews()) { + const tabManager = view.getTabManager(); + if (!tabManager) continue; + const tabs = tabManager.getAllTabs(); + for (const tab of tabs) { + if (tab.conversationId === conversationId) { + return { view, tabId: tab.id }; + } + } + } + return null; + } + getLastKnownOpenTabCount() { + var _a5, _b3; + return (_b3 = (_a5 = this.lastKnownTabManagerState) == null ? void 0 : _a5.openTabs.length) != null ? _b3 : 0; + } + getMaxTabsLimit() { + var _a5; + const maxTabs = (_a5 = this.settings.maxTabs) != null ? _a5 : 3; + return Math.max(3, Math.min(10, maxTabs)); + } +}; +/*! Bundled license information: + +smol-toml/dist/error.js: +smol-toml/dist/util.js: +smol-toml/dist/date.js: +smol-toml/dist/primitive.js: +smol-toml/dist/extract.js: +smol-toml/dist/struct.js: +smol-toml/dist/parse.js: +smol-toml/dist/stringify.js: +smol-toml/dist/index.js: + (*! + * Copyright (c) Squirrel Chat et al., All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *) +*/ + +/* nosourcemap */ \ No newline at end of file diff --git a/PaperBell/.obsidian/plugins/realclaudian/manifest.json b/PaperBell/.obsidian/plugins/realclaudian/manifest.json new file mode 100644 index 00000000..ba39429b --- /dev/null +++ b/PaperBell/.obsidian/plugins/realclaudian/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "realclaudian", + "name": "Claudian", + "version": "2.0.21", + "minAppVersion": "1.7.2", + "description": "Embeds Claude Code, Codex, and other coding agents as AI collaborators in your vault. Your vault becomes their working directory, giving them capabilities for file reads and writes, search, bash commands, and multi-step workflows.", + "author": "Yishen Tu", + "authorUrl": "https://github.com/YishenTu", + "isDesktopOnly": true +} diff --git a/PaperBell/.obsidian/plugins/realclaudian/styles.css b/PaperBell/.obsidian/plugins/realclaudian/styles.css new file mode 100644 index 00000000..60808c44 --- /dev/null +++ b/PaperBell/.obsidian/plugins/realclaudian/styles.css @@ -0,0 +1,6272 @@ +/* Claudian Plugin Styles */ +/* Built from src/style/ modules */ + + +/* ============================================ + base/variables.css + ============================================ */ +/* Brand & semantic color tokens */ +.claudian-container { + --claudian-brand: #D97757; + --claudian-brand-rgb: 217, 119, 87; + --claudian-brand-claude: #D97757; + --claudian-brand-claude-rgb: 217, 119, 87; + --claudian-brand-codex: #d0d0d0; + --claudian-brand-codex-rgb: 208, 208, 208; + --claudian-brand-opencode: #B8B8B8; + --claudian-brand-opencode-rgb: 184, 184, 184; + --claudian-brand-pi: #ffffff; + --claudian-brand-pi-rgb: 255, 255, 255; + --claudian-error: #dc3545; + --claudian-error-rgb: 220, 53, 69; + --claudian-compact: #5bc0de; +} + +body.theme-light .claudian-container { + --claudian-brand-codex: #000000; + --claudian-brand-codex-rgb: 0, 0, 0; + --claudian-brand-opencode: #707070; + --claudian-brand-opencode-rgb: 112, 112, 112; + --claudian-brand-pi: #000000; + --claudian-brand-pi-rgb: 0, 0, 0; +} + +/* Active-provider alias for single-provider surfaces. */ +.claudian-container[data-provider="claude"] { + --claudian-brand: var(--claudian-brand-claude); + --claudian-brand-rgb: var(--claudian-brand-claude-rgb); +} + +.claudian-container[data-provider="codex"] { + --claudian-brand: var(--claudian-brand-codex); + --claudian-brand-rgb: var(--claudian-brand-codex-rgb); +} + +.claudian-container[data-provider="opencode"] { + --claudian-brand: var(--claudian-brand-opencode); + --claudian-brand-rgb: var(--claudian-brand-opencode-rgb); +} + +.claudian-container[data-provider="pi"] { + --claudian-brand: var(--claudian-brand-pi); + --claudian-brand-rgb: var(--claudian-brand-pi-rgb); +} + + +/* ============================================ + base/container.css + ============================================ */ +.claudian-container { + display: flex; + flex-direction: column; + height: 100%; + padding: 0; + overflow: hidden; + font-family: var(--font-text); +} + +.claudian-hidden { + display: none !important; +} + +.claudian-visible-block { + display: block !important; +} + +.claudian-visible-flex { + display: flex !important; +} + +.claudian-provider-icon-variant--dark { + display: none; +} + +body.theme-dark .claudian-provider-icon-variant--light { + display: none; +} + +body.theme-dark .claudian-provider-icon-variant--dark { + display: inline; +} + + +/* ============================================ + base/animations.css + ============================================ */ +@keyframes thinking-pulse { + 0%, + 100% { + opacity: 0.5; + } + + 50% { + opacity: 1; + } +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +@keyframes external-context-glow { + 0%, + 100% { + filter: drop-shadow(0 0 2px rgba(var(--claudian-brand-rgb), 0.4)); + } + + 50% { + filter: drop-shadow(0 0 6px rgba(var(--claudian-brand-rgb), 0.8)); + } +} + +@keyframes mcp-glow { + 0%, + 100% { + filter: drop-shadow(0 0 2px rgba(124, 58, 237, 0.4)); + } + + 50% { + filter: drop-shadow(0 0 8px rgba(124, 58, 237, 0.9)); + } +} + +@keyframes claudian-spin { + to { + transform: rotate(360deg); + } +} + + +/* ============================================ + components/header.css + ============================================ */ +/* Header - logo, title/tabs slot, and actions */ +.claudian-header { + position: relative; + display: flex; + align-items: center; + padding: 0 12px 12px 12px; +} + +/* Title slot: contains logo + title (or tabs in header mode) */ +.claudian-title-slot { + display: flex; + align-items: center; + gap: 8px; + flex: 1; + min-width: 0; /* Allow flex item to shrink below content size */ +} + +/* Legacy class for backwards compatibility */ +.claudian-title { + display: flex; + align-items: center; + gap: 8px; + flex-shrink: 0; +} + +.claudian-title-text { + margin: 0; + font-size: 14px; + font-weight: 600; +} + +.claudian-logo { + display: flex; + align-items: center; + color: var(--claudian-brand); +} + +/* Header actions (end side - always stays at end via margin-inline-start: auto) */ +.claudian-header-actions { + display: flex; + align-items: center; + gap: 12px; + flex-shrink: 0; + margin-inline-start: auto; +} + +.claudian-header-actions-slot { + /* No margin-inline-start: auto here; it's set by the base .claudian-header-actions */ +} + +.claudian-header .claudian-tab-bar-container { + display: flex; + gap: 4px; +} + +.claudian-header-btn { + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + color: var(--text-faint); + transition: color 0.15s ease; +} + +.claudian-header-btn:hover { + color: var(--text-normal); +} + +.claudian-header-btn svg { + width: 16px; + height: 16px; +} + +.claudian-new-tab-btn svg { + width: 16.8px; + height: 16.8px; +} + +/* ============================================ + components/tabs.css + ============================================ */ +.claudian-tab-bar-container { + display: flex; + align-items: center; + gap: 4px; +} + +.claudian-tab-badges { + display: flex; + align-items: center; + gap: 4px; +} + +.claudian-tab-badge { + display: flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + border-radius: 4px; + border: 2px solid var(--background-modifier-border); + font-size: 12px; + font-weight: 500; + cursor: pointer; + color: var(--text-muted); + background: var(--background-primary); + transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease; +} + +.claudian-tab-badge:hover { + background: var(--background-modifier-hover); + color: var(--text-normal); +} + +.claudian-tab-badge-active { + border-color: var(--interactive-accent); + color: var(--text-normal); +} + +.claudian-tab-badge-streaming { + border-color: var(--claudian-brand, #da7756); +} + +.claudian-tab-badge-streaming[data-provider="claude"] { + border-color: var(--claudian-brand-claude, #D97757); +} + +.claudian-tab-badge-streaming[data-provider="codex"] { + border-color: var(--claudian-brand-codex, #d0d0d0); +} + +.claudian-tab-badge-streaming[data-provider="opencode"] { + border-color: var(--claudian-brand-opencode, #C8C8C8); +} + +.claudian-tab-badge-streaming[data-provider="pi"] { + border-color: var(--claudian-brand-pi, #ffffff); +} + +.claudian-tab-badge-attention { + border-color: var(--text-error); +} + +.claudian-tab-badge-idle { + border-color: var(--background-modifier-border); +} + +.claudian-tab-content-container { + display: flex; + flex-direction: column; + flex: 1; + min-height: 0; + overflow: hidden; +} + +.claudian-tab-content { + position: relative; /* For scroll-to-bottom button positioning */ + display: flex; + flex-direction: column; + flex: 1; + min-height: 0; + overflow: hidden; +} + + +/* ============================================ + components/history.css + ============================================ */ +.claudian-history-container { + position: static; +} + +/* History dropup menu (opens upward since it's at bottom of view) */ +.claudian-history-menu { + display: none; + position: absolute; + bottom: 100%; + margin-bottom: 4px; + background: var(--background-secondary); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.25); + z-index: 1000; + max-height: 400px; + overflow: hidden; + inset-inline-start: 0; + inset-inline-end: 0; +} + +.claudian-history-menu.visible { + display: block; +} + +/* Header mode: dropdown instead of dropup */ +.claudian-container--header-mode .claudian-history-menu { + bottom: auto; + top: 100%; + margin-bottom: 0; + margin-top: 4px; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25); +} + +.claudian-history-header { + padding: 8px 12px; + font-size: 12px; + font-weight: 600; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.5px; + border-bottom: 1px solid var(--background-modifier-border); +} + +.claudian-history-list { + max-height: 350px; + overflow-y: auto; +} + +.claudian-history-empty { + padding: 16px; + text-align: center; + color: var(--text-muted); + font-size: 13px; +} + +.claudian-history-item { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 12px; + border-bottom: 1px solid var(--background-modifier-border); + transition: background 0.15s ease; +} + +.claudian-history-item-icon { + display: flex; + align-items: center; + color: var(--text-muted); + flex-shrink: 0; +} + +.claudian-history-item-icon svg { + width: 16px; + height: 16px; +} + +.claudian-history-item:last-child { + border-bottom: none; +} + +.claudian-history-item:hover { + background: var(--background-modifier-hover); +} + +.claudian-history-item.active { + background: var(--background-secondary); + border-inline-start: 2px solid var(--interactive-accent); + padding-inline-start: 10px; +} + +.claudian-history-item.active .claudian-history-item-icon { + color: var(--interactive-accent); +} + +.claudian-history-item.active .claudian-history-item-content { + cursor: default; +} + +.claudian-history-item.active .claudian-history-item-date { + color: var(--text-faint); +} + +.claudian-history-item-content { + flex: 1; + min-width: 0; + cursor: pointer; +} + +.claudian-history-item-title { + font-size: 13px; + font-weight: 500; + color: var(--text-normal); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.claudian-history-item-date { + font-size: 11px; + color: var(--text-faint); + margin-top: 2px; +} + +.claudian-history-item-actions { + display: flex; + gap: 4px; + margin-inline-start: 8px; + opacity: 0; + transition: opacity 0.15s ease; +} + +.claudian-history-item:hover .claudian-history-item-actions { + opacity: 1; +} + +.claudian-action-btn { + background: transparent; + border: none; + cursor: pointer; + padding: 4px; + border-radius: 4px; + color: var(--text-muted); + transition: background 0.15s ease, color 0.15s ease; +} + +.claudian-action-btn:hover { + background: var(--background-modifier-hover); + color: var(--text-normal); +} + +.claudian-action-btn svg { + width: 14px; + height: 14px; +} + +.claudian-delete-btn:hover { + color: var(--color-red); +} + +.claudian-rename-input { + width: 100%; + padding: 2px 4px; + font-size: 13px; + font-weight: 500; + border: 1px solid var(--interactive-accent); + border-radius: 4px; + background: var(--background-primary); + color: var(--text-normal); +} + +.claudian-rename-input:focus { + outline: none; + box-shadow: 0 0 0 2px var(--interactive-accent-hover); +} + +/* Loading indicator for title generation */ +.claudian-action-loading { + display: flex; + align-items: center; + justify-content: center; + animation: spin 1s linear infinite; + opacity: 0.6; + cursor: default; +} + + +/* ============================================ + components/messages.css + ============================================ */ +/* Messages wrapper (for scroll-to-bottom button positioning) */ +.claudian-messages-wrapper { + position: relative; + flex: 1; + min-height: 0; + display: flex; + flex-direction: column; + overflow: hidden; +} + +.claudian-messages { + flex: 1; + overflow-y: auto; + padding: 12px 0; + display: flex; + flex-direction: column; + gap: 12px; +} + +/* Focusable messages panel for vim-style navigation */ +.claudian-messages-focusable:focus { + outline: none; +} + +/* Welcome message - claude.ai style */ +.claudian-welcome { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + padding: 20px; + min-height: 200px; +} + +.claudian-welcome-greeting { + font-family: 'Copernicus', 'Tiempos Headline', 'Tiempos', Georgia, 'Times New Roman', serif; + font-size: 28px; + font-weight: 300; + color: var(--text-muted); + letter-spacing: -0.01em; +} + +.claudian-message { + padding: 10px 14px; + border-radius: 8px; + max-width: 95%; + word-wrap: break-word; +} + +.claudian-message-user { + position: relative; + background: rgba(0, 0, 0, 0.3); + align-self: flex-end; + border-end-end-radius: 4px; +} + +/* Text selection in user messages - visible highlight */ +.claudian-message-user ::selection { + background: rgba(255, 255, 255, 0.35); + color: inherit; +} + +.claudian-message-assistant { + background: transparent; + align-self: stretch; + width: 100%; + max-width: 100%; + border-end-start-radius: 4px; + text-align: start; +} + +.claudian-message-content { + line-height: 1.5; + user-select: text; + -webkit-user-select: text; + unicode-bidi: plaintext; /* Proper BiDi text handling for mixed RTL/LTR */ +} + +.claudian-interrupted { + color: #d45d5d; +} + +.claudian-interrupted-hint { + color: var(--text-muted); +} + +.claudian-text-block { + position: relative; + margin: 0; +} + +.claudian-text-copy-btn { + position: absolute; + bottom: 0; + inset-inline-end: 0; + border: none; + color: var(--text-faint); + cursor: pointer; + opacity: 0; + transition: opacity 0.15s ease, color 0.15s ease; + z-index: 2; + display: flex; + align-items: center; + gap: 4px; +} + +.claudian-text-copy-btn svg { + width: 16px; + height: 16px; +} + +.claudian-text-block:hover .claudian-text-copy-btn { + opacity: 1; +} + +.claudian-text-copy-btn:hover { + color: var(--text-normal); +} + +.claudian-text-copy-btn.copied { + color: var(--text-accent); + font-size: 11px; + font-family: var(--font-monospace); +} + +.claudian-text-block+.claudian-tool-call { + margin-top: 8px; +} + +.claudian-tool-call+.claudian-text-block { + margin-top: 8px; +} + +.claudian-message-content p { + margin: 0 0 8px 0; +} + +.claudian-message-content p:last-child { + margin-bottom: 0; +} + +.claudian-message-content ul, +.claudian-message-content ol { + margin: 8px 0; + padding-inline-start: 20px; +} + +/* Full-width tables */ +.claudian-message-content table { + width: 100%; + border-collapse: collapse; + margin: 8px 0; +} + +.claudian-message-content th, +.claudian-message-content td { + border: 1px solid var(--background-modifier-border); + padding: 6px 10px; + text-align: start; +} + +.claudian-message-content th { + background: var(--background-secondary); + font-weight: 600; +} + +.claudian-message-content tr:hover { + background: var(--background-secondary-alt); +} + +.claudian-messages::-webkit-scrollbar { + width: 6px; +} + +.claudian-messages::-webkit-scrollbar-track { + background: transparent; +} + +.claudian-messages::-webkit-scrollbar-thumb { + background: var(--background-modifier-border); + border-radius: 3px; +} + +.claudian-messages::-webkit-scrollbar-thumb:hover { + background: var(--background-modifier-border-hover); +} + +/* Response duration footer - styled as another line of content */ +.claudian-response-footer { + margin-top: 8px; +} + +.claudian-baked-duration { + color: var(--text-muted); + font-size: 12px; + font-weight: 500; + font-style: italic; +} + +/* Action buttons toolbar below user messages */ +.claudian-user-msg-actions { + position: absolute; + bottom: -20px; + right: 0; + display: flex; + gap: 12px; + opacity: 0; + transition: opacity 0.15s; + z-index: 1; +} + +.claudian-message-user:hover .claudian-user-msg-actions { + opacity: 1; +} + +.claudian-user-msg-actions span { + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + color: var(--text-faint); + transition: color 0.15s; +} + +.claudian-user-msg-actions span svg { + width: 16px; + height: 16px; +} + +.claudian-user-msg-actions span:hover { + color: var(--text-normal); +} + +.claudian-user-msg-actions span.copied { + color: var(--text-accent); + font-size: 11px; + font-family: var(--font-monospace); +} + +/* Compact boundary indicator */ +.claudian-compact-boundary { + display: flex; + align-items: center; + gap: 10px; + margin: 12px 0; +} + +.claudian-compact-boundary::before, +.claudian-compact-boundary::after { + content: ''; + flex: 1; + height: 1px; + background: var(--background-modifier-border); +} + +.claudian-compact-boundary-label { + color: var(--text-muted); + font-size: 11px; + white-space: nowrap; +} + + +/* ============================================ + components/nav-sidebar.css + ============================================ */ +/* Navigation Sidebar */ +.claudian-nav-sidebar { + position: absolute; + right: 2px; + top: 50%; + transform: translateY(-50%); + display: flex; + flex-direction: column; + gap: 4px; + z-index: 100; + opacity: 0; + pointer-events: none; + transition: opacity 0.2s ease; +} + +.claudian-nav-sidebar.visible { + opacity: 0.15; + pointer-events: auto; +} + +.claudian-nav-sidebar.visible:hover { + opacity: 1; +} + +.claudian-nav-btn { + width: 32px; + height: 32px; + border-radius: 16px; + background: var(--background-primary); + border: 1px solid var(--background-modifier-border); + color: var(--text-muted); + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + transition: all 0.2s ease; +} + +.claudian-nav-btn:hover { + background: var(--background-secondary); + color: var(--text-normal); + transform: scale(1.05); +} + +.claudian-nav-btn svg { + width: 18px; + height: 18px; +} + +/* Specific button spacing/grouping if needed */ +.claudian-nav-btn-top { + margin-bottom: 4px; +} + +.claudian-nav-btn-bottom { + margin-top: 4px; +} + + +/* ============================================ + components/code.css + ============================================ */ +/* Code block wrapper - contains pre + button outside scroll area */ +.claudian-code-wrapper { + position: relative; + margin: 8px 0; +} + +/* Code blocks in chat messages */ +.claudian-code-wrapper pre, +.claudian-message-content pre { + background: rgba(0, 0, 0, 0.2); + padding: 8px 12px; + border-radius: 6px; + overflow-x: auto; + margin: 0; +} + +/* Light mode: use a lighter background so hljs comment colors stay readable */ +body.theme-light .claudian-code-wrapper pre, +body.theme-light .claudian-message-content pre { + background: rgba(0, 0, 0, 0.08); +} + +/* Code blocks without language - wrap content */ +.claudian-code-wrapper:not(.has-language) pre { + white-space: pre-wrap; + word-wrap: break-word; + overflow-x: hidden; +} + +/* Unwrapped pre still needs margin */ +.claudian-message-content>pre { + margin: 8px 0; +} + +.claudian-message-content code { + font-family: var(--font-monospace); + font-size: 13px; +} + +/* Clickable language label - positioned outside scroll area */ +.claudian-code-wrapper .claudian-code-lang-label { + position: absolute; + top: 6px; + inset-inline-end: 6px; + padding: 2px 8px; + font-size: 12px; + font-family: var(--font-monospace); + color: var(--text-faint); + background: var(--background-primary); + border-radius: 3px; + cursor: pointer; + z-index: 2; + transition: color 0.15s ease, background 0.15s ease; +} + +.claudian-code-wrapper .claudian-code-lang-label:hover { + color: var(--text-normal); + background: var(--background-modifier-hover); +} + +/* Hide default copy button when language label exists */ +.claudian-code-wrapper.has-language .copy-code-button { + display: none; +} + +/* Copy button - positioned outside scroll area */ +.claudian-code-wrapper .copy-code-button { + position: absolute; + top: 6px; + inset-inline-end: 6px; + padding: 4px 8px; + font-size: 11px; + background: var(--background-primary); + border: none; + color: var(--text-muted); + cursor: pointer; + opacity: 0; + transition: opacity 0.15s ease, color 0.15s ease, background 0.15s ease; + border-radius: 3px; + z-index: 2; +} + +/* If copy button uses an icon (svg) */ +.claudian-code-wrapper .copy-code-button svg { + width: 14px; + height: 14px; +} + +/* Show copy button on hover */ +.claudian-code-wrapper:not(.has-language):hover .copy-code-button { + opacity: 1; +} + +.claudian-code-wrapper .copy-code-button:hover { + background: var(--background-modifier-hover); + color: var(--text-normal); +} + +/* ============================================ + components/thinking.css + ============================================ */ +.claudian-thinking { + color: var(--claudian-brand); + font-style: italic; + padding: 4px 0; + text-align: start; + animation: thinking-pulse 1.5s ease-in-out infinite; +} + +.claudian-thinking.claudian-thinking--compact { + color: var(--claudian-compact); +} + +.claudian-thinking-hint { + color: var(--text-muted); + font-style: normal; + font-variant-numeric: tabular-nums; +} + +.claudian-thinking-block { + margin: 8px 0; +} + +.claudian-text-block+.claudian-thinking-block { + margin-top: 8px; +} + +.claudian-thinking-block+.claudian-text-block { + margin-top: 8px; +} + +.claudian-thinking-block+.claudian-tool-call { + margin-top: 8px; +} + +.claudian-tool-call+.claudian-thinking-block { + margin-top: 8px; +} + +.claudian-thinking-header { + display: flex; + align-items: center; + gap: 8px; + padding: 4px 0; + cursor: pointer; + overflow: hidden; +} + +.claudian-thinking-label { + flex: 1; + font-size: 13px; + font-weight: 500; + color: var(--claudian-brand); +} + +/* Thinking block content - tree-branch style */ +.claudian-thinking-content { + padding: 4px 0; + padding-inline-start: 24px; + font-size: 13px; + line-height: 1.5; + color: var(--text-muted); + max-height: 400px; + overflow-y: auto; + border-inline-start: 2px solid var(--background-modifier-border); + margin-inline-start: 7px; +} + +.claudian-thinking-content p { + margin: 0 0 8px 0; +} + +.claudian-thinking-content p:last-child { + margin-bottom: 0; +} + +.claudian-thinking-content .claudian-code-wrapper { + margin: 8px 0; +} + +.claudian-thinking-content .claudian-code-wrapper pre { + padding: 8px 10px; + border-radius: 4px; +} + +.claudian-thinking-content code { + font-family: var(--font-monospace); + font-size: 12px; +} + + +/* ============================================ + components/toolcalls.css + ============================================ */ +.claudian-tool-call { + margin: 8px 0; +} + +.claudian-tool-header { + display: flex; + align-items: center; + gap: 8px; + padding: 4px 0; + cursor: pointer; + overflow: hidden; +} + +.claudian-tool-header:hover { + opacity: 0.85; +} + +.claudian-tool-icon { + display: flex; + align-items: center; + color: var(--text-accent); + flex-shrink: 0; +} + +.claudian-tool-icon svg { + width: 16px; + height: 16px; +} + +.claudian-tool-name { + font-family: var(--font-monospace); + font-size: 13px; + font-weight: 400; + color: var(--text-normal); + white-space: nowrap; + flex-shrink: 0; +} + +.claudian-tool-summary { + font-family: var(--font-monospace); + font-size: 13px; + color: var(--text-muted); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex: 1; + min-width: 0; +} + +.claudian-tool-summary:empty { + display: none; +} + +.claudian-tool-call-bash.expanded .claudian-tool-summary { + display: none; +} + +.claudian-tool-bash-command { + font-family: var(--font-monospace); + font-size: 12px; + line-height: 1.4; + color: var(--text-normal); + white-space: pre-wrap; + word-break: break-word; + padding: 2px 0 4px; +} + +/* Legacy: StatusPanel bash entries still use claudian-tool-label */ +.claudian-tool-label { + font-family: var(--font-monospace); + font-size: 13px; + font-weight: 400; + color: var(--text-normal); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.claudian-tool-current { + font-family: var(--font-monospace); + font-size: 13px; + color: var(--text-muted); + white-space: nowrap; +} + +.claudian-tool-current:empty { + display: none; +} + +.claudian-tool-status { + display: flex; + align-items: center; + flex-shrink: 0; + margin-left: auto; +} + +.claudian-tool-status svg { + width: 14px; + height: 14px; +} + +.claudian-tool-status.status-running { + color: var(--text-accent); +} + +.claudian-tool-status.status-completed { + color: var(--color-green); +} + +.claudian-tool-status.status-error { + color: var(--color-red); +} + +.claudian-tool-status.status-blocked { + color: var(--color-orange); +} + +/* Tool call content - border style (like thinking block) */ +.claudian-tool-content { + padding: 4px 0; + padding-inline-start: 16px; + margin-inline-start: 7px; + border-inline-start: 2px solid var(--background-modifier-border); +} + +/* Tool content variants that render inline widgets instead of bordered results */ +.claudian-tool-content-todo, +.claudian-tool-content-ask { + border-inline-start: none; + margin-inline-start: 0; + padding-inline-start: 0; +} + +/* Expanded content: per-line rendering */ +.claudian-tool-lines { + font-family: var(--font-monospace); + font-size: 12px; + line-height: 1.4; + overflow-x: auto; +} + +.claudian-tool-line { + padding: 1px 0; + color: var(--text-muted); + white-space: pre; +} + +.claudian-tool-line-wrap { + white-space: pre-wrap; + word-break: break-word; +} + +/* Hover highlight for file search results */ +.claudian-tool-line.hoverable:hover { + background: var(--background-modifier-hover); +} + +/* Truncation indicator: "... N more lines" */ +.claudian-tool-truncated { + color: var(--text-faint); + font-style: italic; + padding: 4px 0; + font-family: var(--font-monospace); + font-size: 12px; +} + +/* ToolSearch expanded: icon + tool name rows */ +.claudian-tool-search-item { + display: flex; + align-items: center; + gap: 4px; + padding: 2px 0; + font-family: var(--font-monospace); + font-size: 12px; + color: var(--text-muted); +} + +.claudian-tool-search-icon { + display: flex; + align-items: center; + flex-shrink: 0; + width: 14px; + height: 14px; + color: var(--text-faint); +} + +.claudian-tool-search-icon svg { + width: 14px; + height: 14px; +} + +/* Web search links */ +.claudian-tool-link { + display: flex; + align-items: flex-start; + gap: 6px; + padding: 3px 0; + color: var(--text-muted); + text-decoration: none; + cursor: pointer; + font-family: var(--font-monospace); + font-size: 12px; + line-height: 1.4; +} + +.claudian-tool-link:hover { + color: var(--text-accent); +} + +.claudian-tool-link-icon { + flex-shrink: 0; + width: 12px; + height: 12px; + margin-top: 2px; + color: var(--text-faint); +} + +.claudian-tool-link-icon svg { + width: 12px; + height: 12px; +} + +.claudian-tool-link-title { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* Web search summary section */ +.claudian-tool-web-summary { + font-family: var(--font-monospace); + font-size: 12px; + color: var(--text-muted); + padding-top: 4px; + border-top: 1px solid var(--background-modifier-border); + margin-top: 4px; + white-space: pre-wrap; + word-break: break-word; + max-height: 200px; + overflow-y: auto; +} + +/* Empty state for file search */ +.claudian-tool-empty { + color: var(--text-faint); + font-style: italic; + font-family: var(--font-monospace); + font-size: 12px; + padding: 4px 0; +} + +.claudian-tool-result-row { + display: flex; + align-items: flex-start; +} + +.claudian-tool-result-text { + font-family: var(--font-monospace); + font-size: 12px; + color: var(--text-muted); + line-height: 1.4; + white-space: pre-wrap; + overflow: hidden; + flex: 1; +} + +.claudian-tool-result-item { + display: block; + margin-bottom: 2px; +} + +.claudian-tool-patch-section + .claudian-tool-patch-section { + margin-top: 10px; +} + +.claudian-tool-result-item:last-child { + margin-bottom: 0; +} + + +/* ============================================ + components/status-panel.css + ============================================ */ +/* Status Panel - persistent bottom panel for todos and command output */ + +.claudian-status-panel-container { + flex-shrink: 0; + padding: 0 14px; +} + +.claudian-status-panel { + padding-top: 12px; +} + +/* Todo Section */ + +.claudian-status-panel-todos { + margin-top: 4px; +} + +.claudian-status-panel-header { + display: flex; + align-items: center; + gap: 8px; + padding: 4px 0; + cursor: pointer; + border-radius: 4px; + transition: background 0.15s ease; + overflow: hidden; +} + +.claudian-status-panel-header:hover { + background: var(--background-modifier-hover); +} + +.claudian-status-panel-header:focus-visible { + outline: 2px solid var(--interactive-accent); + outline-offset: 2px; +} + +.claudian-status-panel-icon { + display: flex; + align-items: center; + color: var(--text-accent); + flex-shrink: 0; +} + +.claudian-status-panel-icon svg { + width: 16px; + height: 16px; +} + +.claudian-status-panel-label { + font-family: var(--font-monospace); + font-size: 13px; + font-weight: 500; + color: var(--text-normal); +} + +.claudian-status-panel-current { + flex: 1; + font-family: var(--font-monospace); + font-size: 13px; + color: var(--text-muted); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.claudian-status-panel-status { + display: flex; + align-items: center; + flex-shrink: 0; +} + +.claudian-status-panel-status svg { + width: 14px; + height: 14px; +} + +.claudian-status-panel-status.status-completed { + color: var(--color-green); +} + +.claudian-status-panel-content { + padding: 2px 0; +} + +/* Individual todo item - shared by status panel and inline tool via .claudian-todo-list-container */ +.claudian-todo-list-container .claudian-todo-item { + display: flex; + align-items: flex-start; + padding: 1px 0; +} + +.claudian-todo-list-container .claudian-todo-status-icon { + display: flex; + align-items: center; + flex-shrink: 0; +} + +.claudian-todo-list-container .claudian-todo-status-icon svg { + width: 12px; + height: 12px; +} + +.claudian-todo-list-container .claudian-todo-text { + font-family: var(--font-monospace); + font-size: 12px; + line-height: 1.4; + flex: 1; + padding-left: 12px; +} + +.claudian-todo-list-container .claudian-todo-pending .claudian-todo-status-icon { + color: var(--text-normal); +} + +.claudian-todo-list-container .claudian-todo-pending .claudian-todo-status-icon svg { + transform: scale(2); +} + +.claudian-todo-list-container .claudian-todo-pending .claudian-todo-text { + color: var(--text-normal); +} + +.claudian-todo-list-container .claudian-todo-in_progress .claudian-todo-status-icon { + color: var(--interactive-accent); +} + +.claudian-todo-list-container .claudian-todo-in_progress .claudian-todo-status-icon svg { + transform: scale(2); +} + +.claudian-todo-list-container .claudian-todo-in_progress .claudian-todo-text { + color: var(--text-normal); +} + +.claudian-todo-list-container .claudian-todo-completed .claudian-todo-status-icon { + color: var(--color-green); +} + +.claudian-todo-list-container .claudian-todo-completed .claudian-todo-text { + color: var(--text-muted); +} + +/* Bash Output Section */ + +.claudian-status-panel-bash { + margin-bottom: 4px; +} + +.claudian-status-panel-bash-header { + padding: 4px 0; +} + +.claudian-status-panel-bash-actions { + display: flex; + align-items: center; + gap: 6px; +} + +.claudian-status-panel-bash-action { + display: inline-flex; + align-items: center; + justify-content: center; + width: 22px; + height: 22px; + border-radius: 4px; + color: var(--text-muted); +} + +.claudian-status-panel-bash-action:hover { + background: var(--background-modifier-hover); + color: var(--text-normal); +} + +.claudian-status-panel-bash-content { + padding-top: 2px; + max-height: min(40vh, 320px); + overflow-y: auto; + overscroll-behavior: contain; +} + +.claudian-status-panel-bash-entry { + margin: 4px 0; +} + +.claudian-status-panel-bash-entry .claudian-tool-icon svg { + width: 14px; + height: 14px; + position: relative; + top: -1px; +} + +.claudian-status-panel-bash-entry .claudian-tool-call { + margin: 0; +} + +/* Keep bash output blocks from growing without bound */ +.claudian-status-panel-bash-entry .claudian-tool-result-text { + max-height: 200px; + overflow-y: auto; + word-break: break-word; +} + + +/* ============================================ + components/subagent.css + ============================================ */ +.claudian-subagent-list { + margin: 8px 0; +} + +.claudian-text-block+.claudian-subagent-list { + margin-top: 8px; +} + +.claudian-subagent-list+.claudian-text-block { + margin-top: 8px; +} + +.claudian-tool-call+.claudian-subagent-list { + margin-top: 8px; +} + +.claudian-subagent-list+.claudian-tool-call { + margin-top: 8px; +} + +.claudian-subagent-header { + display: flex; + align-items: center; + gap: 8px; + padding: 4px 0; + cursor: pointer; + overflow: hidden; +} + +.claudian-subagent-icon { + display: flex; + align-items: center; + color: var(--interactive-accent); + flex-shrink: 0; +} + +.claudian-subagent-icon svg { + width: 16px; + height: 16px; +} + +.claudian-subagent-label { + flex: 1; + font-family: var(--font-monospace); + font-size: 13px; + font-weight: 400; + color: var(--text-normal); +} + +.claudian-subagent-status { + display: flex; + align-items: center; + flex-shrink: 0; +} + +.claudian-subagent-status svg { + width: 14px; + height: 14px; +} + +.claudian-subagent-status.status-running { + color: var(--text-accent); +} + +.claudian-subagent-status.status-completed { + color: var(--color-green); +} + +.claudian-subagent-status.status-error { + color: var(--color-red); +} + +.claudian-subagent-content { + padding: 4px 0; + padding-inline-start: 16px; + margin-inline-start: 7px; + border-inline-start: 2px solid var(--background-modifier-border); +} + +.claudian-subagent-section { + margin: 2px 0 6px; +} + +.claudian-subagent-section-header { + display: flex; + align-items: center; + gap: 6px; + cursor: pointer; + user-select: none; + font-family: var(--font-monospace); + font-size: 12px; + color: var(--text-muted); + padding: 2px 0; +} + +.claudian-subagent-section-header:hover { + color: var(--text-normal); +} + +.claudian-subagent-section-title { + flex: 1; + min-width: 0; +} + +.claudian-subagent-section-body { + padding-inline-start: 6px; +} + +.claudian-subagent-prompt-text, +.claudian-subagent-result-output { + font-family: var(--font-monospace); + font-size: 12px; + line-height: 1.4; + color: var(--text-muted); + white-space: pre-wrap; + word-break: break-word; +} + +.claudian-subagent-result-output { + max-height: 220px; + overflow-y: auto; +} + +.claudian-subagent-tools { + display: flex; + flex-direction: column; + gap: 4px; +} + +.claudian-subagent-tool-item { + display: block; +} + +.claudian-subagent-tool-header { + display: flex; + align-items: center; + gap: 6px; + cursor: pointer; + overflow: hidden; + padding: 2px 0; +} + +.claudian-subagent-tool-header:hover { + opacity: 0.85; +} + +.claudian-subagent-tool-icon { + display: flex; + align-items: center; + color: var(--text-accent); + flex-shrink: 0; +} + +.claudian-subagent-tool-icon svg { + width: 13px; + height: 13px; +} + +.claudian-subagent-tool-name { + font-family: var(--font-monospace); + font-size: 12px; + color: var(--text-normal); + white-space: nowrap; + flex-shrink: 0; +} + +.claudian-subagent-tool-summary { + font-family: var(--font-monospace); + font-size: 12px; + color: var(--text-muted); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex: 1; + min-width: 0; +} + +.claudian-subagent-tool-status { + display: flex; + align-items: center; + flex-shrink: 0; +} + +.claudian-subagent-tool-status svg { + width: 12px; + height: 12px; +} + +.claudian-subagent-tool-status.status-running { + color: var(--text-accent); +} + +.claudian-subagent-tool-status.status-completed { + color: var(--color-green); +} + +.claudian-subagent-tool-status.status-error, +.claudian-subagent-tool-status.status-blocked { + color: var(--color-red); +} + +.claudian-subagent-tool-content { + padding: 2px 0 2px 16px; +} + +.claudian-subagent-tool-empty { + color: var(--text-faint); + font-style: italic; + font-family: var(--font-monospace); + font-size: 12px; + padding: 2px 0; +} + +.claudian-subagent-status-text { + font-size: 11px; + font-family: var(--font-monospace); + color: var(--text-muted); + margin-inline-start: auto; + padding-inline-start: 8px; +} + +.claudian-subagent-list.async .claudian-subagent-icon { + color: var(--interactive-accent); +} + +.claudian-subagent-list.async.pending .claudian-subagent-status-text { + color: var(--text-muted); +} + +.claudian-subagent-list.async.running .claudian-subagent-status-text { + color: var(--text-accent); +} + +.claudian-subagent-list.async.awaiting .claudian-subagent-status-text { + color: var(--color-yellow); +} + +.claudian-subagent-list.async.completed .claudian-subagent-status-text { + color: var(--color-green); +} + +.claudian-subagent-list.async.error .claudian-subagent-status-text { + color: var(--color-red); +} + +.claudian-subagent-list.async.orphaned .claudian-subagent-status-text { + color: var(--color-orange); +} + + +/* ============================================ + components/input.css + ============================================ */ +/* Input area */ +.claudian-input-container { + position: relative; + padding: 12px 0 0 0; +} + +/* Input wrapper (border container) - flex column so textarea expands when no chips */ +/* Height calculation: context row (36px) + textarea min (60px) + toolbar (38px) + border (2px) = 136px */ +.claudian-input-wrapper { + position: relative; + display: flex; + flex-direction: column; + min-height: 140px; + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + background: var(--background-primary); +} + +/* Context row (file chip start, selection indicator end) - inside input wrapper at top */ +/* Collapsed by default; expanded via .has-content class; textarea fills remaining space */ +.claudian-context-row { + display: none; + align-items: flex-start; + justify-content: flex-start; + flex-shrink: 0; + padding: 6px 10px 0 10px; + gap: 8px; +} + +/* Show context row when it has visible content */ +.claudian-context-row.has-content { + display: flex; +} + +/* Nav row (tab badges start, header icons end) - above input wrapper */ +.claudian-input-nav-row { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 0 8px 0; + min-height: 0; +} + +.claudian-input-nav-content { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + min-width: 0; +} + +/* Header mode: hide nav row above input (content moved to header) */ +.claudian-container--header-mode .claudian-input-nav-row { + display: none; +} + +/* Selection indicator (shown when text is selected in editor) */ +/* Match file chip height (24px): chip has 16px remove button + 6px padding + 2px border */ +/* Indicator: 12px text + 10px padding (5+5) + 2px border = 24px */ +.claudian-selection-indicator, +.claudian-browser-selection-indicator, +.claudian-canvas-indicator { + color: #7abaff; + font-size: 12px; + line-height: 1; + opacity: 0.9; + pointer-events: none; + white-space: nowrap; + padding: 5px 6px; + border: 1px solid transparent; + border-radius: 4px; + margin-inline-start: auto; + flex-shrink: 0; + order: 4; + max-width: min(100%, clamp(220px, 64vw, 560px)); + overflow: hidden; + text-overflow: ellipsis; +} + +.claudian-input { + width: 100%; + flex: 1 1 0; + min-height: var(--claudian-textarea-min-height, 60px); + max-height: var(--claudian-textarea-max-height, none); + resize: none; + padding: 8px 10px 10px 10px; + border: none !important; + border-radius: 6px; + background: transparent !important; + color: var(--text-normal); + font-family: inherit; + font-size: 14px; + line-height: 1.4; + box-shadow: none !important; + overflow-y: auto; + unicode-bidi: plaintext; /* Proper BiDi text handling for mixed RTL/LTR */ +} + +.claudian-input:hover, +.claudian-input:focus { + outline: none !important; + border: none !important; + background: transparent !important; + box-shadow: none !important; +} + +.claudian-input::placeholder { + color: var(--text-muted); +} + +/* Input toolbar */ +.claudian-input-toolbar { + display: flex; + align-items: center; + justify-content: flex-start; + flex-shrink: 0; + padding: 4px 6px 6px 6px; +} + +/* File indicator (attached files) */ +.claudian-file-indicator { + display: none; + flex-wrap: wrap; + gap: 6px; +} + +.claudian-file-chip { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 3px 6px 3px 8px; + background: var(--background-primary); + border: 1px solid var(--background-modifier-border); + border-radius: 12px; + font-size: 12px; + line-height: 1; + max-width: 200px; + cursor: pointer; +} + +.claudian-file-chip-icon { + display: flex; + align-items: center; + color: var(--text-muted); + flex-shrink: 0; +} + +.claudian-file-chip-icon svg { + width: 12px; + height: 12px; +} + +.claudian-file-chip-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: var(--text-normal); +} + +.claudian-file-chip-remove { + display: flex; + align-items: center; + justify-content: center; + width: 16px; + height: 16px; + border-radius: 50%; + cursor: pointer; + color: var(--text-muted); + font-size: 14px; + line-height: 1; + transition: background 0.15s ease, color 0.15s ease; +} + +.claudian-file-chip-remove:hover { + background: var(--background-modifier-hover); + color: var(--text-normal); +} + +.claudian-file-chip:hover { + background: var(--background-modifier-hover); +} + +/* Composer queue status row (queued follow-up preview + steer action) */ +.claudian-input-queue-row { + display: none; + font-size: 12px; + color: var(--text-muted); + font-style: normal; + align-items: center; + gap: 8px; + padding: 0 2px 8px 2px; +} + +.claudian-queue-indicator-text { + min-width: 0; + flex: 1 1 auto; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.claudian-queue-indicator-actions { + flex: 0 0 auto; + display: flex; + align-items: center; + gap: 4px; +} + +.claudian-queue-indicator-action { + flex: 0 0 auto; + padding: 1px 8px; + border: 0; + background: transparent; + color: var(--interactive-accent); + font: inherit; + cursor: pointer; +} + +.claudian-queue-indicator-action:hover { + text-decoration: underline; +} + +.claudian-queue-indicator-action[disabled] { + color: var(--text-faint); + cursor: default; + text-decoration: none; +} + +.claudian-queue-indicator-icon-action { + display: inline-flex; + align-items: center; + justify-content: center; + flex: 0 0 auto; + width: 22px; + height: 22px; + padding: 0; + border: 0; + border-radius: 4px; + background: transparent; + color: var(--text-muted); + cursor: pointer; +} + +.claudian-queue-indicator-icon-action:hover { + background: var(--background-modifier-hover); + color: var(--text-normal); +} + +.claudian-queue-indicator-icon-action svg { + width: 14px; + height: 14px; +} + +/* Light blue border when instruction mode is active */ +.claudian-input-instruction-mode { + border-color: #60a5fa !important; + box-shadow: 0 0 0 1px #60a5fa; +} + +/* Pink border when bash mode is active */ +.claudian-input-bang-bash-mode { + border-color: #f472b6 !important; + box-shadow: 0 0 0 1px #f472b6; +} + +/* Monospace input while in bash mode */ +.claudian-input-wrapper.claudian-input-bang-bash-mode .claudian-input { + font-family: var(--font-monospace); +} + + +/* ============================================ + components/context-footer.css + ============================================ */ +/* Context usage meter (inline in toolbar) */ + +.claudian-context-meter { + position: relative; + display: flex; + align-items: center; + gap: 4px; + margin-inline-start: 8px; + cursor: default; +} + +/* Custom tooltip */ +.claudian-context-meter::after { + content: attr(data-tooltip); + position: absolute; + bottom: 100%; + left: 50%; + transform: translateX(-50%); + margin-bottom: 6px; + padding: 4px 8px; + font-size: 11px; + color: var(--text-normal); + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: 4px; + white-space: nowrap; + opacity: 0; + visibility: hidden; + transition: opacity 0.15s ease, visibility 0.15s ease; + pointer-events: none; + z-index: 100; +} + +.claudian-context-meter:hover::after { + opacity: 1; + visibility: visible; +} + +.claudian-context-meter-gauge { + display: flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; +} + +.claudian-context-meter-gauge svg { + width: 16px; + height: 16px; +} + +.claudian-meter-bg { + stroke: var(--background-modifier-border); +} + +.claudian-meter-fill { + stroke: var(--claudian-brand); + transition: stroke-dashoffset 0.3s ease, stroke 0.3s ease; +} + +.claudian-context-meter-percent { + font-size: 11px; + color: var(--claudian-brand); + min-width: 24px; + text-align: end; + transition: color 0.3s ease; +} + +/* Warning state (> 80%) - pale red */ +.claudian-context-meter.warning .claudian-meter-fill { + stroke: #E57373; +} + +.claudian-context-meter.warning .claudian-context-meter-percent { + color: #E57373; +} + + +/* ============================================ + toolbar/model-selector.css + ============================================ */ +/* Model selector */ +.claudian-model-selector { + position: relative; +} + +.claudian-model-btn { + display: flex; + align-items: center; + gap: 4px; + padding: 4px 8px; + border-radius: 4px; + cursor: pointer; + color: var(--claudian-brand); + font-size: 12px; +} + +.claudian-model-label { + font-weight: 500; +} + +.claudian-model-chevron { + display: flex; + align-items: center; +} + +.claudian-model-chevron svg { + width: 12px; + height: 12px; +} + +.claudian-model-dropdown { + position: absolute; + bottom: 100%; + left: 0; + margin-bottom: 0; + display: flex; + flex-direction: column; + gap: 2px; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: 4px; + box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.15); + z-index: 1000; + width: max-content; + padding: 4px; + opacity: 0; + visibility: hidden; + transition: opacity 0.15s ease, visibility 0.15s ease; +} + +.claudian-model-selector:hover .claudian-model-dropdown { + opacity: 1; + visibility: visible; +} + +.claudian-model-group { + padding: 3px 8px; + font-size: 8px; + font-weight: 600; + color: var(--text-faint); + text-transform: uppercase; + letter-spacing: 0.05em; + pointer-events: none; +} + +.claudian-model-group:not(:first-child) { + margin-top: 4px; + border-top: 1px solid var(--background-modifier-border); + padding-top: 6px; +} + +.claudian-model-provider-icon { + flex-shrink: 0; + opacity: 0.7; +} + +.claudian-model-option { + display: flex; + align-items: center; + gap: 5px; + padding: 4px 8px; + cursor: pointer; + font-size: 12px; + color: var(--text-muted); + border-radius: 3px; + transition: background 0.1s ease, color 0.1s ease; + white-space: nowrap; +} + +.claudian-model-option:hover { + background: var(--background-modifier-hover); + color: var(--text-normal); +} + +.claudian-model-option.selected { + background: rgba(var(--claudian-brand-rgb), 0.15); + color: var(--claudian-brand); + font-weight: 500; +} + + +/* ============================================ + toolbar/mode-selector.css + ============================================ */ +.claudian-mode-selector { + display: flex; + align-items: center; + gap: 6px; + margin-left: auto; + padding-left: 12px; + padding-right: 8px; +} + +.claudian-mode-label { + font-size: 11px; + color: var(--text-muted); + min-width: 32px; +} + +.claudian-mode-label.active { + color: var(--claudian-brand); + font-weight: 600; +} + + +/* ============================================ + toolbar/thinking-selector.css + ============================================ */ +/* Thinking selector (effort for adaptive models, token budget for custom) */ +.claudian-thinking-selector { + display: flex; + align-items: center; + gap: 6px; +} + +/* Effort / budget container (shared layout) */ +.claudian-thinking-effort, +.claudian-thinking-budget { + display: flex; + align-items: center; + gap: 6px; +} + +.claudian-thinking-label-text { + font-size: 11px; + color: var(--text-muted); +} + +.claudian-thinking-gears { + position: relative; + display: flex; + align-items: center; + border-radius: 4px; +} + +/* Current selection (visible when collapsed) */ +.claudian-thinking-current { + padding: 3px 8px; + font-size: 11px; + color: var(--claudian-brand); + font-weight: 500; + cursor: pointer; + border-radius: 3px; + white-space: nowrap; + background: transparent; +} + +/* Options container - expands vertically upward */ +.claudian-thinking-options { + position: absolute; + left: 0; + bottom: 100%; + margin-bottom: 0; + display: flex; + flex-direction: column; + gap: 2px; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: 4px; + padding: 4px; + opacity: 0; + visibility: hidden; + transition: opacity 0.15s ease, visibility 0.15s ease; +} + +/* Expand on hover */ +.claudian-thinking-gears:hover .claudian-thinking-options { + opacity: 1; + visibility: visible; +} + +.claudian-thinking-gear { + padding: 3px 8px; + font-size: 11px; + color: var(--text-muted); + cursor: pointer; + border-radius: 3px; + transition: background 0.1s ease, color 0.1s ease; + white-space: nowrap; +} + +.claudian-thinking-gear:hover { + background: var(--background-modifier-hover); + color: var(--text-normal); +} + +.claudian-thinking-gear.selected { + background: rgba(var(--claudian-brand-rgb), 0.15); + color: var(--claudian-brand); + font-weight: 500; +} + + +/* ============================================ + toolbar/permission-toggle.css + ============================================ */ +/* Permission Mode Toggle */ +.claudian-permission-toggle { + display: flex; + align-items: center; + gap: 6px; + margin-left: auto; + padding-left: 12px; + padding-right: 8px; +} + +.claudian-permission-label { + font-size: 11px; + color: var(--text-muted); + min-width: 28px; +} + +.claudian-permission-label.plan-active { + color: rgb(92, 148, 140); + font-weight: 600; +} + +.claudian-toggle-switch { + width: 32px; + height: 18px; + border-radius: 9px; + background: var(--background-modifier-border); + cursor: pointer; + position: relative; + transition: background 0.2s ease; + flex-shrink: 0; +} + +.claudian-toggle-switch::after { + content: ''; + position: absolute; + width: 14px; + height: 14px; + border-radius: 50%; + background: var(--text-muted); + top: 2px; + left: 2px; + transition: transform 0.2s ease, background 0.2s ease; +} + +.claudian-toggle-switch:hover { + background: var(--background-modifier-hover); +} + +.claudian-toggle-switch.active { + background: rgba(var(--claudian-brand-rgb), 0.3); +} + +.claudian-toggle-switch.active::after { + transform: translateX(14px); + background: var(--claudian-brand); +} + + +/* ============================================ + toolbar/service-tier-toggle.css + ============================================ */ +/* Codex fast-mode / service-tier toggle */ +.claudian-service-tier-toggle { + display: flex; + align-items: center; + padding-left: 2px; +} + +.claudian-service-tier-button { + display: inline-flex; + align-items: center; + justify-content: center; + width: 22px; + height: 22px; + border-radius: 4px; + color: var(--text-muted); + background: transparent; + cursor: pointer; + transition: color 0.15s ease, background 0.15s ease; + flex-shrink: 0; +} + +.claudian-service-tier-icon { + display: inline-flex; + align-items: center; + justify-content: center; +} + +.claudian-service-tier-icon svg { + width: 14px; + height: 14px; +} + +.claudian-service-tier-button:hover { + background: var(--background-modifier-hover); +} + +.claudian-service-tier-button.active { + color: var(--claudian-brand); +} + + +/* ============================================ + toolbar/external-context.css + ============================================ */ +/* External Context Selector */ +.claudian-external-context-selector { + position: relative; + display: flex; + align-items: center; + margin-left: 8px; +} + +.claudian-external-context-icon-wrapper { + position: relative; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; +} + +.claudian-external-context-icon { + display: flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + color: var(--text-faint); + transition: color 0.15s ease; +} + +.claudian-external-context-icon-wrapper:hover .claudian-external-context-icon { + color: var(--text-normal); +} + +.claudian-external-context-icon.active { + color: var(--claudian-brand); + animation: external-context-glow 2s ease-in-out infinite; +} + +.claudian-external-context-icon svg { + width: 16px; + height: 16px; +} + +.claudian-external-context-badge { + position: absolute; + top: 0; + right: 0; + font-size: 9px; + font-weight: 600; + color: var(--claudian-brand); + opacity: 0; + transition: opacity 0.15s ease; + pointer-events: none; +} + +.claudian-external-context-badge.visible { + opacity: 1; +} + +.claudian-external-context-dropdown { + position: absolute; + left: 50%; + transform: translateX(-50%); + bottom: 100%; + margin-bottom: 4px; + min-width: 260px; + max-width: 320px; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: 8px; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25); + opacity: 0; + visibility: hidden; + transition: opacity 0.15s ease, visibility 0.15s ease; + z-index: 100; +} + +.claudian-external-context-selector:hover .claudian-external-context-dropdown { + opacity: 1; + visibility: visible; +} + +.claudian-external-context-header { + padding: 10px 12px; + font-size: 12px; + font-weight: 600; + color: var(--text-muted); + border-bottom: 1px solid var(--background-modifier-border); +} + +.claudian-external-context-list { + max-height: 200px; + overflow-y: auto; +} + +.claudian-external-context-empty { + padding: 16px 12px; + text-align: center; + color: var(--text-muted); + font-size: 12px; + font-style: italic; +} + +.claudian-external-context-item { + display: flex; + align-items: center; + padding: 8px 12px; + gap: 8px; + border-bottom: 1px solid var(--background-modifier-border-focus); +} + +.claudian-external-context-item:last-child { + border-bottom: none; +} + +.claudian-external-context-text { + flex: 1; + font-size: 12px; + font-family: var(--font-monospace); + color: var(--text-normal); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.claudian-external-context-lock { + display: flex; + align-items: center; + justify-content: center; + width: 20px; + height: 20px; + border-radius: 4px; + cursor: pointer; + color: var(--text-muted); + opacity: 0.4; + transition: all 0.15s ease; +} + +.claudian-external-context-lock:hover { + background: var(--background-modifier-hover); + opacity: 0.8; +} + +.claudian-external-context-lock.locked { + color: var(--claudian-brand); + opacity: 0.9; +} + +.claudian-external-context-lock.locked:hover { + opacity: 1; +} + +.claudian-external-context-lock svg { + width: 12px; + height: 12px; +} + +.claudian-external-context-remove { + display: flex; + align-items: center; + justify-content: center; + width: 20px; + height: 20px; + border-radius: 4px; + cursor: pointer; + color: var(--text-muted); + opacity: 0.6; + transition: all 0.15s ease; +} + +.claudian-external-context-remove:hover { + background: rgba(var(--claudian-error-rgb), 0.15); + color: var(--claudian-error); + opacity: 1; +} + +.claudian-external-context-remove svg { + width: 14px; + height: 14px; +} + + +/* ============================================ + toolbar/mcp-selector.css + ============================================ */ +/* MCP Server Selector */ +.claudian-mcp-selector { + position: relative; + display: flex; + align-items: center; + margin-left: 8px; +} + +.claudian-mcp-selector-icon-wrapper { + position: relative; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; +} + +.claudian-mcp-selector-icon { + display: flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + color: var(--text-faint); + transition: color 0.15s ease; +} + +.claudian-mcp-selector-icon-wrapper:hover .claudian-mcp-selector-icon { + color: var(--text-normal); +} + +.claudian-mcp-selector-icon.active { + color: var(--claudian-brand); + animation: mcp-glow 2s ease-in-out infinite; +} + +.claudian-mcp-selector-icon svg { + width: 16px; + height: 16px; +} + +.claudian-mcp-selector-badge { + position: absolute; + top: 0; + right: 0; + font-size: 9px; + font-weight: 600; + color: var(--claudian-brand); + opacity: 0; + transition: opacity 0.15s ease; + pointer-events: none; +} + +.claudian-mcp-selector-badge.visible { + opacity: 1; +} + +.claudian-mcp-selector-dropdown { + position: absolute; + left: 50%; + transform: translateX(-50%); + bottom: 100%; + margin-bottom: 4px; + min-width: 200px; + max-width: 280px; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + border-radius: 8px; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25); + opacity: 0; + visibility: hidden; + transition: opacity 0.15s ease, visibility 0.15s ease; + z-index: 100; +} + +/* Bridge the gap between icon and dropdown to prevent hover breaks */ +.claudian-mcp-selector-dropdown::after { + content: ''; + position: absolute; + left: 0; + right: 0; + bottom: -8px; + height: 8px; +} + +.claudian-mcp-selector-dropdown.visible, +.claudian-mcp-selector:hover .claudian-mcp-selector-dropdown { + opacity: 1; + visibility: visible; +} + +.claudian-mcp-selector-header { + padding: 10px 12px; + font-size: 12px; + font-weight: 600; + color: var(--text-muted); + border-bottom: 1px solid var(--background-modifier-border); +} + +.claudian-mcp-selector-list { + max-height: 200px; + overflow-y: auto; +} + +.claudian-mcp-selector-empty { + padding: 16px 12px; + text-align: center; + color: var(--text-muted); + font-size: 12px; + font-style: italic; +} + +.claudian-mcp-selector-item { + display: flex; + align-items: center; + padding: 8px 12px; + gap: 8px; + cursor: pointer; + transition: background 0.15s ease; +} + +.claudian-mcp-selector-item:hover { + background: var(--background-modifier-hover); +} + +.claudian-mcp-selector-item.enabled { + background: rgba(var(--claudian-brand-rgb), 0.1); +} + +.claudian-mcp-selector-check { + display: flex; + align-items: center; + justify-content: center; + width: 16px; + height: 16px; + border: 1px solid var(--background-modifier-border); + border-radius: 3px; + color: var(--claudian-brand); +} + +.claudian-mcp-selector-item.enabled .claudian-mcp-selector-check { + background: rgba(var(--claudian-brand-rgb), 0.2); + border-color: var(--claudian-brand); +} + +.claudian-mcp-selector-check svg { + width: 12px; + height: 12px; +} + +.claudian-mcp-selector-item-info { + display: flex; + align-items: center; + justify-content: space-between; + gap: 6px; + flex: 1; + overflow: hidden; +} + +.claudian-mcp-selector-item-name { + font-size: 12px; + color: var(--text-normal); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.claudian-mcp-selector-cs-badge { + font-size: 10px; + font-weight: 600; + padding: 1px 4px; + border-radius: 3px; + background: rgba(var(--claudian-brand-rgb), 0.2); + color: var(--claudian-brand); + flex-shrink: 0; + margin-left: auto; +} + + +/* ============================================ + features/file-context.css + ============================================ */ +/* @ Mention dropdown */ +.claudian-mention-dropdown { + display: none; + position: absolute; + bottom: 100%; + left: 0; + right: 0; + margin-bottom: 4px; + background: var(--background-secondary); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.2); + z-index: 1000; + max-height: 250px; + overflow-y: auto; +} + +.claudian-mention-dropdown.visible { + display: block; +} + +/* Fixed positioning for inline editor */ +.claudian-mention-dropdown-fixed { + position: fixed; + bottom: var(--claudian-fixed-dropdown-bottom); + left: var(--claudian-fixed-dropdown-left); + right: auto; + width: var(--claudian-fixed-dropdown-width); + z-index: 10001; +} + +.claudian-mention-item { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 12px; + cursor: pointer; + transition: background 0.1s ease; +} + +.claudian-mention-item:hover, +.claudian-mention-item.selected { + background: var(--background-modifier-hover); +} + +.claudian-mention-icon { + display: flex; + align-items: center; + color: var(--text-muted); + flex-shrink: 0; +} + +.claudian-mention-icon svg { + width: 14px; + height: 14px; +} + +.claudian-mention-path { + font-size: 13px; + color: var(--text-normal); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.claudian-mention-empty { + padding: 12px; + text-align: center; + color: var(--text-muted); + font-size: 13px; +} + +/* Scrollbar for mention dropdown */ +.claudian-mention-dropdown::-webkit-scrollbar { + width: 6px; +} + +.claudian-mention-dropdown::-webkit-scrollbar-track { + background: transparent; +} + +.claudian-mention-dropdown::-webkit-scrollbar-thumb { + background: var(--background-modifier-border); + border-radius: 3px; +} + +/* MCP items in @-mention dropdown */ +.claudian-mention-item.mcp-server .claudian-mention-icon { + color: var(--interactive-accent); +} + +.claudian-mention-item.vault-folder .claudian-mention-icon { + color: var(--text-muted); +} + +.claudian-mention-text { + display: flex; + flex-direction: column; + gap: 2px; + min-width: 0; + flex: 1; +} + +.claudian-mention-name { + font-size: 13px; + font-weight: 500; + color: var(--interactive-accent); +} + +.claudian-mention-desc { + font-size: 11px; + color: var(--text-muted); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* Context file items in @-mention dropdown */ +.claudian-mention-item.context-file .claudian-mention-icon { + color: var(--claudian-brand); +} + +.claudian-mention-item.context-file .claudian-mention-text { + flex-direction: row; + overflow: hidden; + white-space: nowrap; +} + +.claudian-mention-item.context-file .claudian-mention-name-context { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + min-width: 0; +} + +/* Context folder filter items in @-mention dropdown */ +.claudian-mention-item.context-folder .claudian-mention-icon { + color: var(--text-muted); +} + +.claudian-mention-name-folder { + color: var(--text-normal); + font-weight: 500; +} + +.claudian-mention-name-context { + color: var(--text-normal); +} + +/* Agent folder items in @-mention dropdown */ +.claudian-mention-item.agent-folder .claudian-mention-icon { + color: var(--link-color); +} + +.claudian-mention-name-agent-folder { + color: var(--link-color); + font-weight: 600; +} + +/* Agent items in @-mention dropdown (inside @Agents/) */ +.claudian-mention-item.agent .claudian-mention-icon { + color: var(--link-color); +} + +.claudian-mention-item.agent .claudian-mention-text { + flex-direction: row; + align-items: baseline; + gap: 6px; + overflow: hidden; + white-space: nowrap; +} + +.claudian-mention-item.agent .claudian-mention-name-agent { + color: var(--text-normal); + font-size: 13px; + flex-shrink: 0; +} + +.claudian-mention-item.agent .claudian-mention-agent-desc { + font-size: 11px; + color: var(--text-muted); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + min-width: 0; +} + + +/* ============================================ + features/file-link.css + ============================================ */ +/* Clickable file links that open files in Obsidian */ +.claudian-file-link { + color: var(--text-accent); + text-decoration: none; + cursor: pointer; + border-radius: 3px; + transition: color 0.15s ease; +} + +.claudian-file-link:hover { + color: var(--text-accent-hover); + text-decoration: underline; +} + +/* File link inside inline code */ +code .claudian-file-link { + color: var(--text-accent); +} + +code .claudian-file-link:hover { + color: var(--text-accent-hover); +} + + +/* ============================================ + features/image-context.css + ============================================ */ +/* Image Context - Preview & Attachments */ + +/* Image preview container (in input area) */ +.claudian-image-preview { + display: none; + flex-wrap: wrap; + gap: 8px; + padding: 8px 0; + margin-bottom: 4px; +} + +/* Individual image preview chip */ +.claudian-image-chip { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 8px; + background: var(--background-primary); + border: 1px solid var(--background-modifier-border); + border-radius: 8px; + max-width: 200px; +} + +.claudian-image-chip:hover { + border-color: var(--interactive-accent); +} + +/* Image thumbnail */ +.claudian-image-thumb { + width: 40px; + height: 40px; + border-radius: 4px; + overflow: hidden; + flex-shrink: 0; + cursor: pointer; +} + +.claudian-image-thumb img { + width: 100%; + height: 100%; + object-fit: cover; +} + +/* Image info */ +.claudian-image-info { + display: flex; + flex-direction: column; + min-width: 0; + flex: 1; +} + +.claudian-image-name { + font-size: 12px; + color: var(--text-normal); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.claudian-image-size { + font-size: 10px; + color: var(--text-muted); +} + +/* Remove button */ +.claudian-image-remove { + position: relative; + width: 20px; + height: 20px; + border-radius: 50%; + cursor: pointer; + transition: background 0.15s ease; + flex-shrink: 0; + font-size: 0; /* Hide text character */ +} + +.claudian-image-remove::before, +.claudian-image-remove::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 10px; + height: 2px; + background: var(--text-muted); + border-radius: 1px; + transition: background 0.15s ease; +} + +.claudian-image-remove::before { + transform: translate(-50%, -50%) rotate(45deg); +} + +.claudian-image-remove::after { + transform: translate(-50%, -50%) rotate(-45deg); +} + +.claudian-image-remove:hover { + background: var(--background-modifier-error); +} + +.claudian-image-remove:hover::before, +.claudian-image-remove:hover::after { + background: var(--text-on-accent); +} + +/* Drop overlay - inside input wrapper */ +.claudian-drop-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(var(--claudian-brand-rgb), 0.08); + border: 2px dashed var(--claudian-brand); + border-radius: 6px; + display: none; + align-items: center; + justify-content: center; + z-index: 100; + pointer-events: none; +} + +.claudian-drop-overlay.visible { + display: flex; +} + +.claudian-drop-content { + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; + color: var(--claudian-brand); +} + +.claudian-drop-content svg { + opacity: 0.7; +} + +.claudian-drop-content span { + font-size: 12px; + font-weight: 500; +} + +/* Images in Messages (displayed above user bubble) */ + +/* Images container - right-aligned above user message */ +.claudian-message-images { + display: flex; + flex-wrap: wrap; + gap: 6px; + justify-content: flex-end; + margin-bottom: 6px; + padding-right: 4px; +} + +/* Individual image in message - standardized size */ +.claudian-message-image { + width: 120px; + height: 120px; + border-radius: 8px; + overflow: hidden; + cursor: pointer; + transition: transform 0.15s ease, box-shadow 0.15s ease; + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); +} + +.claudian-message-image:hover { + transform: scale(1.03); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); +} + +.claudian-message-image img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} + + +/* ============================================ + features/image-embed.css + ============================================ */ +/* Image embed styles - displays ![[image.png]] wikilinks as actual images */ + +.claudian-embedded-image { + display: inline-block; + max-width: 100%; + margin: 0.5em 0; + vertical-align: middle; +} + +.claudian-embedded-image img { + max-width: 100%; + height: auto; + border-radius: var(--radius-s); + cursor: pointer; + transition: opacity 0.2s ease; +} + +.claudian-embedded-image img:hover { + opacity: 0.9; +} + +/* When image is inline with text */ +.claudian-text-block p .claudian-embedded-image { + margin: 0.25em 0; +} + +/* Block-level image (standalone on its own line) */ +.claudian-text-block p > .claudian-embedded-image:only-child { + display: block; + margin: 0.75em 0; +} + +/* Fallback when image file not found */ +.claudian-embedded-image-fallback { + color: var(--text-muted); + font-style: italic; + background: var(--background-modifier-hover); + padding: 0.1em 0.4em; + border-radius: var(--radius-s); +} + + +/* ============================================ + features/image-modal.css + ============================================ */ +/* Full-size Image Modal */ +.claudian-image-modal-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.85); + display: flex; + align-items: center; + justify-content: center; + z-index: 10000; + cursor: pointer; +} + +.claudian-image-modal { + position: relative; + max-width: 90vw; + max-height: 90vh; + cursor: default; +} + +.claudian-image-modal img { + max-width: 90vw; + max-height: 90vh; + object-fit: contain; + border-radius: 8px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5); +} + +.claudian-image-modal-close { + position: absolute; + top: -12px; + right: -12px; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + background: var(--background-secondary); + border-radius: 50%; + cursor: pointer; + font-size: 20px; + color: var(--text-muted); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); + transition: background 0.15s ease, color 0.15s ease; +} + +.claudian-image-modal-close:hover { + background: var(--background-modifier-error); + color: var(--text-on-accent); +} + + +/* ============================================ + features/inline-edit.css + ============================================ */ +/* Inline Edit (CM6 decorations) */ + +/* Selection highlight (shared by inline edit and chat) */ +.cm-line .claudian-selection-highlight, +.claudian-selection-highlight { + background: var(--text-selection) !important; + border-radius: 2px; + padding: 3px 0; + margin: -3px 0; +} + +/* Preview mode selection highlight via CSS Custom Highlight API */ +::highlight(claudian-selection) { + background: var(--text-selection); +} + +/* CM6 widget container - ensure transparent background */ +.cm-widgetBuffer, +.cm-line.claudian-inline-input-line { + background: transparent !important; +} + +/* Input container - fully transparent */ +.claudian-inline-input-container { + display: flex; + flex-direction: column; + gap: 0; + padding: 2px 0; + background: transparent !important; +} + +/* Input wrapper - contains input and spinner */ +.claudian-inline-input-wrap { + flex: 1; + position: relative; + background: transparent !important; + overflow: visible; +} + +/* Input - fully transparent */ +.claudian-inline-input { + width: 100%; + padding: 4px 8px; + padding-inline-end: 30px; + border-width: 1px !important; + border-style: solid !important; + border-color: var(--background-modifier-border) !important; + border-radius: 8px !important; + background: transparent !important; + color: var(--text-normal); + font-family: var(--font-interface, -apple-system, BlinkMacSystemFont, sans-serif) !important; + font-size: var(--font-ui-small, 13px) !important; +} + +.claudian-inline-input:focus, +.claudian-inline-input:focus-visible { + outline: none !important; + box-shadow: none !important; +} + +.claudian-inline-input::placeholder { + color: var(--text-faint); +} + +.claudian-inline-input:disabled { + opacity: 0.6; +} + +/* Spinner - inside input box on end side */ +.claudian-inline-spinner { + position: absolute; + inset-inline-end: 8px; + top: 50%; + width: 14px; + height: 14px; + margin-top: -7px; + border: 2px solid var(--background-modifier-border); + border-top-color: var(--claudian-brand); + border-radius: 50%; + box-sizing: border-box; + animation: claudian-spin 0.8s linear infinite; +} + +/* Agent reply - shown when agent asks clarifying question */ +.claudian-inline-agent-reply { + padding: 8px; + margin-bottom: 4px; + background: transparent; + border-width: 1px; + border-style: solid; + border-color: var(--background-modifier-border); + border-radius: 8px; + font-family: var(--font-interface, -apple-system, BlinkMacSystemFont, sans-serif); + font-size: var(--font-ui-small, 13px); + line-height: 1.4; + color: var(--text-muted); + overflow-x: auto; + word-wrap: break-word; +} + +.claudian-inline-agent-reply > :first-child, +.claudian-inline-markdown-preview-body > :first-child { + margin-top: 0; +} + +.claudian-inline-agent-reply > :last-child, +.claudian-inline-markdown-preview-body > :last-child { + margin-bottom: 0; +} + +.claudian-inline-markdown-preview { + margin: 4px 0 6px; + padding: 8px 10px; + border: 1px solid var(--background-modifier-border); + border-radius: 8px; + background: var(--background-primary); + color: var(--text-normal); + overflow-x: auto; +} + +.claudian-inline-markdown-preview-body { + font-family: var(--font-text); + font-size: var(--font-text-size); + line-height: var(--line-height-normal); +} + +.claudian-inline-markdown-preview img { + max-width: 100%; + height: auto; +} + +.claudian-inline-markdown-fallback { + white-space: pre-wrap; + word-wrap: break-word; +} + +/* Inline Diff - replaces selection in place */ +.claudian-inline-diff-replace { + /* Inherit all font properties from document */ + font-size: inherit; + font-family: inherit; + line-height: inherit; + font-weight: inherit; +} + +/* Deleted text - red strikethrough */ +.claudian-diff-del { + background: rgba(255, 80, 80, 0.2); + text-decoration: line-through; + color: var(--text-muted); +} + +/* Inserted text - green background */ +.claudian-diff-ins { + background: rgba(80, 200, 80, 0.2); +} + +/* Accept/Reject buttons inline with diff */ +.claudian-inline-diff-buttons { + display: inline-flex; + gap: 8px; + margin-inline-start: 6px; + background: none !important; +} + +.claudian-inline-diff-btn { + padding: 4px 6px; + border: none !important; + background: none !important; + box-shadow: none !important; + outline: none !important; + font-size: 16px; + cursor: pointer; +} + +.claudian-inline-diff-btn.reject { + color: var(--color-red); +} + +.claudian-inline-diff-btn.accept { + color: var(--color-green); +} + + +/* ============================================ + features/diff.css + ============================================ */ +/* Write/Edit Diff Block - Subagent style */ +.claudian-write-edit-block { + margin: 4px 0; + background: transparent; + overflow: hidden; +} + +.claudian-text-block+.claudian-write-edit-block { + margin-top: 8px; +} + +.claudian-write-edit-block+.claudian-text-block { + margin-top: 8px; +} + +.claudian-write-edit-header { + display: flex; + align-items: center; + gap: 8px; + padding: 4px 0; + cursor: pointer; + user-select: none; + background: transparent; + overflow: hidden; +} + +.claudian-write-edit-icon { + width: 16px; + height: 16px; + color: var(--text-accent); + flex-shrink: 0; +} + +.claudian-write-edit-icon svg { + width: 16px; + height: 16px; +} + +/* Two-part header: name (fixed) + summary (flexible) */ +.claudian-write-edit-name { + font-family: var(--font-monospace); + font-size: 13px; + font-weight: 400; + color: var(--text-normal); + white-space: nowrap; + flex-shrink: 0; +} + +.claudian-write-edit-summary { + font-family: var(--font-monospace); + font-size: 13px; + color: var(--text-muted); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex: 1; + min-width: 0; +} + +.claudian-write-edit-stats { + font-family: var(--font-monospace); + font-size: 11px; + flex-shrink: 0; +} + +.claudian-write-edit-stats .added { + color: var(--color-green); +} + +.claudian-write-edit-stats .removed { + color: var(--color-red); + margin-left: 4px; +} + +.claudian-write-edit-status { + width: 16px; + height: 16px; + flex-shrink: 0; +} + +/* Hide empty status on successful completion so stats align to right edge */ +.claudian-write-edit-block.done .claudian-write-edit-status:empty { + display: none; +} + +.claudian-write-edit-status svg { + width: 16px; + height: 16px; +} + +.claudian-write-edit-status.status-completed { + color: var(--color-green); +} + +.claudian-write-edit-status.status-error, +.claudian-write-edit-status.status-blocked { + color: var(--color-red); +} + +.claudian-write-edit-content { + padding: 0; + background: transparent; + overflow: hidden; +} + +.claudian-write-edit-diff-row { + display: flex; +} + +.claudian-write-edit-diff { + flex: 1; + font-family: var(--font-monospace); + font-size: 12px; + line-height: 1.5; + background: transparent; + max-height: 300px; + overflow-y: auto; + overflow-x: auto; +} + +.claudian-write-edit-loading, +.claudian-write-edit-binary, +.claudian-write-edit-error, +.claudian-write-edit-done-text { + font-family: var(--font-monospace); + font-size: 12px; + color: var(--text-muted); +} + +.claudian-write-edit-error { + color: var(--color-red); +} + +/* Diff line styling */ +.claudian-diff-hunk { + margin-bottom: 4px; +} + +.claudian-diff-line { + display: flex; + white-space: pre-wrap; + word-break: break-all; +} + +.claudian-diff-prefix { + flex-shrink: 0; + width: 16px; + text-align: center; + color: var(--text-muted); + user-select: none; +} + +.claudian-diff-text { + flex: 1; + min-width: 0; +} + +/* Diff colors - NO strikethrough for Write/Edit blocks */ +.claudian-diff-equal { + color: var(--text-muted); +} + +.claudian-diff-delete { + background: rgba(255, 80, 80, 0.25); + color: var(--text-normal); +} + +.claudian-diff-delete .claudian-diff-prefix { + color: var(--color-red); +} + +.claudian-diff-insert { + background: rgba(80, 200, 80, 0.25); + color: var(--text-normal); +} + +.claudian-diff-insert .claudian-diff-prefix { + color: var(--color-green); +} + +/* Hunk separator */ +.claudian-diff-separator { + color: var(--text-muted); + text-align: center; + padding: 4px 0; + font-style: italic; + border-top: 1px dashed var(--background-modifier-border); + border-bottom: 1px dashed var(--background-modifier-border); + margin: 8px 0; + font-size: 11px; +} + +.claudian-diff-no-changes { + color: var(--text-muted); + font-style: italic; + padding: 8px; +} + + +/* ============================================ + features/slash-commands.css + ============================================ */ +/* Slash Command Dropdown */ +.claudian-slash-dropdown { + display: none; + position: absolute; + bottom: 100%; + left: 0; + right: 0; + margin-bottom: 4px; + background: var(--background-secondary); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.2); + z-index: 1000; + max-height: 300px; + overflow-y: auto; +} + +.claudian-slash-dropdown.visible { + display: block; +} + +/* Fixed positioning for inline editor */ +.claudian-slash-dropdown-fixed { + position: fixed; + bottom: var(--claudian-fixed-dropdown-bottom); + left: var(--claudian-fixed-dropdown-left); + right: auto; + width: var(--claudian-fixed-dropdown-width); + z-index: 10001; +} + +.claudian-slash-item { + padding: 8px 12px; + cursor: pointer; + transition: background 0.1s ease; + border-bottom: 1px solid var(--background-modifier-border); +} + +.claudian-slash-item:last-child { + border-bottom: none; +} + +.claudian-slash-item:hover, +.claudian-slash-item.selected { + background: var(--background-modifier-hover); +} + +.claudian-slash-name { + font-size: 12px; + font-weight: 500; + color: var(--text-normal); + font-family: var(--font-monospace); +} + +.claudian-slash-hint { + font-size: 12px; + color: var(--text-muted); + margin-left: 8px; +} + +.claudian-slash-desc { + font-size: 11px; + color: var(--text-muted); + margin-top: 2px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.claudian-slash-empty { + padding: 16px; + text-align: center; + color: var(--text-muted); + font-size: 13px; +} + +/* Scrollbar */ +.claudian-slash-dropdown::-webkit-scrollbar { + width: 6px; +} + +.claudian-slash-dropdown::-webkit-scrollbar-track { + background: transparent; +} + +.claudian-slash-dropdown::-webkit-scrollbar-thumb { + background: var(--background-modifier-border); + border-radius: 3px; +} + + +/* ============================================ + features/resume-session.css + ============================================ */ +/* Resume Session Dropdown */ +.claudian-resume-dropdown { + display: none; + position: absolute; + bottom: 100%; + left: 0; + right: 0; + margin-bottom: 4px; + background: var(--background-secondary); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.2); + z-index: 1000; + max-height: 400px; + overflow: hidden; +} + +.claudian-resume-dropdown.visible { + display: block; +} + +.claudian-resume-header { + padding: 8px 12px; + font-size: 12px; + font-weight: 600; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.5px; + border-bottom: 1px solid var(--background-modifier-border); +} + +.claudian-resume-list { + max-height: 350px; + overflow-y: auto; +} + +.claudian-resume-empty { + padding: 16px; + text-align: center; + color: var(--text-muted); + font-size: 13px; +} + +.claudian-resume-item { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 12px; + cursor: pointer; + border-bottom: 1px solid var(--background-modifier-border); + transition: background 0.1s ease; +} + +.claudian-resume-item:last-child { + border-bottom: none; +} + +.claudian-resume-item:hover, +.claudian-resume-item.selected { + background: var(--background-modifier-hover); +} + +.claudian-resume-item.current { + background: var(--background-secondary); + border-inline-start: 2px solid var(--interactive-accent); + padding-inline-start: 10px; +} + +.claudian-resume-item-icon { + display: flex; + align-items: center; + color: var(--text-muted); + flex-shrink: 0; +} + +.claudian-resume-item-icon svg { + width: 16px; + height: 16px; +} + +.claudian-resume-item.current .claudian-resume-item-icon { + color: var(--interactive-accent); +} + +.claudian-resume-item-content { + flex: 1; + min-width: 0; +} + +.claudian-resume-item-title { + font-size: 13px; + font-weight: 500; + color: var(--text-normal); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.claudian-resume-item-date { + font-size: 11px; + color: var(--text-faint); + margin-top: 2px; +} + +/* Scrollbar */ +.claudian-resume-list::-webkit-scrollbar { + width: 6px; +} + +.claudian-resume-list::-webkit-scrollbar-track { + background: transparent; +} + +.claudian-resume-list::-webkit-scrollbar-thumb { + background: var(--background-modifier-border); + border-radius: 3px; +} + + +/* ============================================ + features/ask-user-question.css + ============================================ */ +/* AskUserQuestion - inline widget rendered in chat panel */ + +.claudian-ask-question-inline { + font-family: var(--font-monospace); + font-size: 12px; + outline: none; +} + +.claudian-ask-inline-title { + font-weight: 700; + color: var(--text-muted); + padding: 6px 10px 0; +} + +/* ── Tab bar ─────────────────────────────────── */ + +.claudian-ask-tab-bar { + display: flex; + align-items: center; + gap: 6px; + padding: 4px 10px; + border-bottom: 1px solid var(--background-modifier-border); + line-height: 1.4; +} + +.claudian-ask-tab { + display: inline-flex; + align-items: center; + padding: 2px 10px; + border-radius: 3px; + cursor: pointer; + user-select: none; + color: var(--text-muted); + transition: + background 0.15s ease, + color 0.15s ease; +} + +.claudian-ask-tab:hover { + color: var(--text-normal); +} + +.claudian-ask-tab.is-active { + background: hsla(55, 30%, 50%, 0.18); + color: var(--text-normal); +} + +.claudian-ask-tab-label { + font-weight: 600; + max-width: 14ch; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.claudian-ask-tab-tick { + color: var(--color-green); + font-weight: 700; +} + +.claudian-ask-tab-submit-check { + color: var(--color-green); + white-space: pre; +} + +/* ── Content area ────────────────────────────── */ + +.claudian-ask-content { + padding: 8px 10px; +} + +.claudian-ask-question-text { + font-weight: 700; + color: var(--text-normal); + margin-bottom: 8px; + line-height: 1.4; +} + +/* ── Item list ───────────────────────────────── */ + +.claudian-ask-list { + display: flex; + flex-direction: column; + gap: 2px; + margin-bottom: 8px; +} + +.claudian-ask-item { + display: flex; + align-items: flex-start; + padding: 3px 4px; + cursor: pointer; + line-height: 1.4; + color: var(--text-normal); + border-radius: 3px; +} + +.claudian-ask-item:hover { + background: var(--background-modifier-hover); +} + +.claudian-ask-cursor { + display: inline-block; + width: 2ch; + flex-shrink: 0; + color: var(--text-accent); + font-weight: 700; +} + +.claudian-ask-item-num { + color: var(--text-muted); + flex-shrink: 0; +} + +.claudian-ask-item-content { + display: flex; + flex-direction: column; + flex: 1; + min-width: 0; +} + +.claudian-ask-label-row { + display: flex; + align-items: baseline; +} + +.claudian-ask-item-label { + font-weight: 600; +} + +.claudian-ask-item-desc { + color: var(--text-muted); + font-weight: 400; + line-height: 1.4; + margin-top: 1px; +} + +/* Selected items: green text */ +.claudian-ask-item.is-selected .claudian-ask-item-label { + color: var(--color-green); +} + +/* Disabled items: muted text */ +.claudian-ask-item.is-disabled .claudian-ask-item-label { + color: var(--text-faint); +} + +/* ── Multi-select brackets ───────────────────── */ + +.claudian-ask-check { + color: var(--text-faint); + flex-shrink: 0; + white-space: pre; +} + +.claudian-ask-check.is-checked { + color: var(--color-green); +} + +/* ── Single-select check mark ────────────────── */ + +.claudian-ask-check-mark { + color: var(--color-green); + font-weight: 700; +} + +/* ── Custom input ────────────────────────────── */ + +.claudian-ask-item input.claudian-ask-custom-text, +.claudian-ask-item input.claudian-ask-custom-text:hover, +.claudian-ask-item input.claudian-ask-custom-text:focus { + border: none; + border-radius: 0; + background: transparent; + box-shadow: none; + font-family: var(--font-monospace); + font-size: inherit; + color: var(--text-normal); + outline: none; + padding: 0; + width: 0; + height: auto; + min-height: 0; + line-height: 1.4; + flex: 1 1 0; + min-width: 0; +} + +.claudian-ask-custom-text::placeholder { + color: var(--text-faint); +} + +/* ── Submit review tab ───────────────────────── */ + +.claudian-ask-review-title { + font-weight: 700; + color: var(--text-normal); + margin-bottom: 6px; +} + +.claudian-ask-review { + font-family: var(--font-monospace); + margin-bottom: 16px; +} + +.claudian-tool-content .claudian-ask-review { + font-size: 12px; +} + +.claudian-ask-review:last-child { + margin-bottom: 0; +} + +.claudian-ask-review-pair { + display: flex; + gap: 6px; + margin-bottom: 4px; +} + +.claudian-ask-review-pair:last-child { + margin-bottom: 0; +} + +.claudian-ask-review-num { + color: var(--text-muted); + flex-shrink: 0; +} + +.claudian-ask-review-body { + min-width: 0; +} + +.claudian-ask-review-q-text { + color: var(--text-muted); +} + +.claudian-ask-review-a-text { + color: var(--text-normal); +} + +.claudian-ask-review-empty { + color: var(--text-faint); + font-style: italic; +} + +.claudian-ask-review-prompt { + color: var(--text-muted); + margin-bottom: 6px; +} + +/* ── Hints ───────────────────────────────────── */ + +.claudian-ask-hints { + color: var(--text-faint); + padding-top: 6px; + border-top: 1px solid var(--background-modifier-border); +} + +/* ── Approval header (inline permission request) ── */ + +.claudian-ask-approval-info { + padding: 8px 10px; +} + +.claudian-ask-approval-tool { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 10px; + background: var(--background-secondary); + border-radius: 6px; + margin-bottom: 8px; +} + +.claudian-ask-approval-icon { + color: var(--claudian-brand); +} + +.claudian-ask-approval-tool-name { + font-weight: 600; + color: var(--text-normal); +} + +.claudian-ask-approval-reason { + color: var(--text-muted); + font-size: 12px; + margin-bottom: 6px; +} + +.claudian-ask-approval-blocked-path { + font-family: var(--font-monospace); + font-size: 11px; + color: var(--text-muted); + padding: 3px 6px; + background: var(--background-primary-alt); + border-radius: 4px; + margin-bottom: 6px; + word-break: break-all; +} + +.claudian-ask-approval-agent { + color: var(--text-muted); + font-size: 12px; + margin-bottom: 6px; +} + +.claudian-ask-approval-desc { + padding: 8px 10px; + background: var(--background-primary-alt); + border-radius: 6px; + font-family: var(--font-monospace); + font-size: 12px; + color: var(--text-normal); + word-break: break-all; +} + + +/* ============================================ + features/plan-mode.css + ============================================ */ +/* Plan Mode - inline cards for EnterPlanMode / ExitPlanMode */ + +.claudian-plan-approval-inline { + font-family: var(--font-monospace); + font-size: 12px; + outline: none; +} + +.claudian-plan-inline-title { + font-weight: 700; + color: var(--text-muted); + padding: 6px 10px 0; +} + +/* ── Plan content preview ────────────────────────── */ + +.claudian-plan-content-preview { + max-height: 300px; + overflow-y: auto; + margin: 6px 10px 8px; + padding: 8px 10px; + border: 1px solid var(--background-modifier-border); + border-radius: 4px; + background: var(--background-primary); + font-size: 12px; + line-height: 1.5; + color: var(--text-normal); +} + +.claudian-plan-content-preview::-webkit-scrollbar { + width: 4px; +} + +.claudian-plan-content-preview::-webkit-scrollbar-thumb { + background: var(--background-modifier-border); + border-radius: 2px; +} + +.claudian-plan-content-preview p { + margin: 0 0 6px; +} + +.claudian-plan-content-preview p:last-child { + margin-bottom: 0; +} + +.claudian-plan-content-preview h1, +.claudian-plan-content-preview h2, +.claudian-plan-content-preview h3, +.claudian-plan-content-preview h4 { + margin: 8px 0 4px; + font-size: 13px; +} + +.claudian-plan-content-preview ul, +.claudian-plan-content-preview ol { + margin: 2px 0 6px; + padding-left: 18px; +} + +.claudian-plan-content-preview li { + margin: 0; +} + +.claudian-plan-content-preview code { + font-size: 11px; +} + +.claudian-plan-content-text { + white-space: pre-wrap; + word-break: break-word; + font-family: var(--font-monospace); +} + +/* ── Permissions list ──────────────────────────── */ + +.claudian-plan-permissions { + padding: 4px 10px 8px; +} + +.claudian-plan-permissions-label { + color: var(--text-muted); + font-weight: 600; + margin-bottom: 4px; +} + +.claudian-plan-permissions-list { + margin: 0; + padding-left: 18px; + color: var(--text-normal); + line-height: 1.5; +} + +.claudian-plan-permissions-list li { + margin: 0; +} + +/* ── Plan mode input border ──────────────────────── */ + +.claudian-input-wrapper.claudian-input-plan-mode { + border-color: rgb(92, 148, 140) !important; + box-shadow: 0 0 0 1px rgb(92, 148, 140); +} + + +/* ============================================ + modals/instruction.css + ============================================ */ +/* Instruction Mode */ + +/* Instruction Confirm Modal */ +.claudian-instruction-modal { + max-width: 500px; +} + +.claudian-instruction-section { + margin-bottom: 16px; +} + +.claudian-instruction-label { + font-size: 12px; + font-weight: 500; + color: var(--text-muted); + margin-bottom: 6px; +} + +.claudian-instruction-original { + padding: 10px 12px; + background: var(--background-secondary); + border-radius: 6px; + font-size: 13px; + color: var(--text-muted); + font-style: italic; + white-space: pre-wrap; +} + +.claudian-instruction-refined { + padding: 12px; + background: var(--background-primary-alt); + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + font-size: 14px; + color: var(--text-normal); + line-height: 1.5; + white-space: pre-wrap; +} + +.claudian-instruction-clarification { + padding: 12px; + background: var(--background-primary-alt); + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + font-size: 14px; + color: var(--text-normal); + line-height: 1.5; + white-space: pre-wrap; +} + +.claudian-instruction-edit-container { + margin-top: 6px; +} + +.claudian-instruction-edit-textarea { + width: 100%; + padding: 10px 12px; + font-size: 14px; + line-height: 1.5; + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + background: var(--background-primary); + color: var(--text-normal); + resize: vertical; + min-height: 80px; +} + +.claudian-instruction-edit-textarea:focus { + outline: none; + border-color: var(--interactive-accent); +} + +.claudian-instruction-response-textarea { + width: 100%; + padding: 10px 12px; + font-size: 14px; + line-height: 1.5; + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + background: var(--background-primary); + color: var(--text-normal); + resize: vertical; + min-height: 60px; +} + +.claudian-instruction-response-textarea:focus { + outline: none; + border-color: var(--interactive-accent); +} + +.claudian-instruction-buttons { + display: flex; + gap: 8px; + justify-content: flex-end; + margin-top: 16px; +} + +.claudian-instruction-btn { + padding: 8px 16px; + font-size: 13px; + border: none; + border-radius: 6px; + cursor: pointer; + font-weight: 500; +} + +.claudian-instruction-reject-btn { + background: var(--background-modifier-border); + color: var(--text-normal); +} + +.claudian-instruction-reject-btn:hover { + background: var(--background-modifier-border-hover); +} + +.claudian-instruction-edit-btn { + background: var(--background-modifier-border); + color: var(--text-normal); +} + +.claudian-instruction-edit-btn:hover { + background: var(--background-modifier-border-hover); +} + +.claudian-instruction-accept-btn { + background: var(--interactive-accent); + color: var(--text-on-accent); +} + +.claudian-instruction-accept-btn:hover { + opacity: 0.9; +} + +/* Instruction loading state */ +.claudian-instruction-loading { + display: flex; + align-items: center; + justify-content: center; + gap: 10px; + padding: 20px; + color: var(--text-muted); +} + +.claudian-instruction-spinner { + width: 18px; + height: 18px; + border: 2px solid var(--background-modifier-border); + border-top-color: var(--interactive-accent); + border-radius: 50%; + animation: claudian-spin 0.8s linear infinite; +} + +/* Instruction modal content sections */ +.claudian-instruction-content-section { + margin: 8px 0; +} + +.claudian-instruction-clarification-section, +.claudian-instruction-confirmation-section { + margin-top: 8px; +} + + +/* ============================================ + modals/mcp-modal.css + ============================================ */ +/* MCP Server Modal */ +.claudian-mcp-modal .modal-content { + width: 480px; + max-width: 90vw; +} + +.claudian-mcp-type-fields { + margin: 12px 0; + padding: 12px; + background: var(--background-secondary); + border-radius: 6px; +} + +.claudian-mcp-type-fields .setting-item { + padding: 8px 0; + border-top: none; +} + +.claudian-mcp-type-fields .setting-item:first-child { + padding-top: 0; +} + +.claudian-mcp-cmd-setting, +.claudian-mcp-env-setting { + flex-direction: column; + align-items: flex-start; +} + +.claudian-mcp-cmd-setting .setting-item-control, +.claudian-mcp-env-setting .setting-item-control { + width: 100%; + margin-top: 8px; +} + +.claudian-mcp-cmd-textarea, +.claudian-mcp-env-textarea { + width: 100%; + min-height: 50px; + resize: vertical; + font-family: var(--font-monospace); + font-size: 12px; + padding: 8px; + border-radius: 4px; + border: 1px solid var(--background-modifier-border); + background: var(--background-primary); +} + +.claudian-mcp-cmd-textarea:focus, +.claudian-mcp-env-textarea:focus { + border-color: var(--interactive-accent); + outline: none; +} + +.claudian-mcp-buttons { + display: flex; + justify-content: flex-end; + gap: 8px; + margin-top: 16px; +} + +/* MCP Test Modal */ +.claudian-mcp-test-modal { + width: 500px; + max-width: 90vw; +} + +.claudian-mcp-test-modal .modal-content { + padding: 0 20px 20px 20px; +} + +.claudian-mcp-test-modal .modal-title { + padding: 20px 20px 12px 20px; + margin: 0 -20px; +} + +.claudian-mcp-test-loading { + display: flex; + align-items: center; + justify-content: center; + gap: 12px; + padding: 32px; + color: var(--text-muted); +} + +.claudian-mcp-test-spinner { + width: 20px; + height: 20px; + animation: claudian-spin 1s linear infinite; +} + +.claudian-mcp-test-spinner svg { + width: 100%; + height: 100%; +} + +.claudian-mcp-test-status { + display: flex; + align-items: center; + gap: 10px; + padding: 12px; + background: var(--background-secondary); + border-radius: 6px; + margin-bottom: 12px; +} + +.claudian-mcp-test-icon { + display: flex; + align-items: center; +} + +.claudian-mcp-test-icon svg { + width: 20px; + height: 20px; +} + +.claudian-mcp-test-icon.success { + color: var(--color-green); +} + +.claudian-mcp-test-icon.error { + color: var(--text-error); +} + +.claudian-mcp-test-text { + font-weight: 500; +} + +.claudian-mcp-test-error { + padding: 10px 12px; + background: rgba(var(--color-red-rgb), 0.1); + border: 1px solid var(--text-error); + border-radius: 6px; + color: var(--text-error); + font-size: 12px; + margin-bottom: 12px; +} + +.claudian-mcp-test-tools { + margin-bottom: 16px; +} + +.claudian-mcp-test-tools-header { + font-weight: 600; + font-size: 13px; + margin-bottom: 8px; + color: var(--text-muted); +} + +.claudian-mcp-test-tools-list { + display: flex; + flex-direction: column; + gap: 8px; + max-height: 300px; + overflow-y: auto; +} + +.claudian-mcp-test-tool { + padding: 10px 12px; + background: var(--background-secondary); + border-radius: 6px; +} + +.claudian-mcp-test-tool-header { + display: flex; + align-items: center; + gap: 8px; +} + +.claudian-mcp-test-tool-icon { + display: flex; + align-items: center; + color: var(--text-muted); +} + +.claudian-mcp-test-tool-icon svg { + width: 14px; + height: 14px; +} + +.claudian-mcp-test-tool-name { + font-weight: 500; + font-size: 13px; +} + +.claudian-mcp-test-tool-toggle { + margin-left: auto; +} + +.claudian-mcp-test-tool-toggle .checkbox-container { + display: flex; + align-items: center; +} + +.claudian-mcp-test-tool-disabled { + opacity: 0.75; +} + +.claudian-mcp-test-tool-disabled .claudian-mcp-test-tool-name { + text-decoration: line-through; + color: var(--text-muted); +} + +.claudian-mcp-toggle-all-btn { + margin-right: 8px; +} + +.claudian-mcp-toggle-all-btn.is-destructive { + background: rgba(var(--color-red-rgb), 0.1); + border-color: rgba(var(--color-red-rgb), 0.3); + color: var(--text-error); +} + +.claudian-mcp-toggle-all-btn.is-destructive:hover { + background: rgba(var(--color-red-rgb), 0.2); +} + +.claudian-mcp-test-tool-desc { + font-size: 12px; + color: var(--text-muted); + margin-top: 4px; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; +} + +.claudian-mcp-test-no-tools { + padding: 16px; + text-align: center; + color: var(--text-muted); + font-size: 13px; + background: var(--background-secondary); + border-radius: 6px; + margin-bottom: 16px; +} + +.claudian-mcp-test-buttons { + display: flex; + justify-content: center; + margin-top: 16px; +} + + +/* ============================================ + modals/fork-target.css + ============================================ */ +/* Fork Target Modal */ +.claudian-fork-target-modal { + max-width: 340px; +} + +.claudian-fork-target-list { + display: flex; + flex-direction: column; +} + +.claudian-fork-target-option { + padding: 10px 12px; + border-radius: 6px; + cursor: pointer; + color: var(--text-normal); + font-size: 14px; +} + +.claudian-fork-target-option:hover { + background: var(--background-modifier-hover); +} + + +/* ============================================ + settings/base.css + ============================================ */ +/* ── Settings tab navigation ── */ + +.claudian-settings-tabs { + display: flex; + gap: 2px; + border-bottom: 1px solid var(--background-modifier-border); + margin-bottom: 16px; +} + +.claudian-settings-tab { + padding: 8px 16px; + border: none; + background: transparent; + color: var(--text-muted); + font-size: var(--font-ui-small); + font-weight: var(--font-medium); + cursor: pointer; + border-bottom: 2px solid transparent; + transition: color 0.15s ease, border-color 0.15s ease; + margin-bottom: -1px; +} + +.claudian-settings-tab:hover { + color: var(--text-normal); +} + +.claudian-settings-tab--active { + color: var(--text-normal); + border-bottom-color: var(--interactive-accent); +} + +.claudian-settings-tab-content { + display: none; +} + +.claudian-settings-tab-content--active { + display: block; +} + +/* Codex placeholder */ +.claudian-settings-codex-placeholder { + padding: 40px 20px; + text-align: center; + color: var(--text-muted); + font-size: var(--font-ui-small); +} + +/* Settings page - remove separator lines from setting items */ +.claudian-settings .setting-item { + border-top: none; +} + +/* Settings section headings (via setHeading()) */ +.claudian-settings .setting-item-heading { + padding-top: 18px; + margin-top: 12px; + border-top: 1px solid var(--background-modifier-border); +} + +.claudian-settings .setting-item-heading:first-child { + padding-top: 0; + margin-top: 0; + border-top: none; +} + +.claudian-settings .setting-item-heading .setting-item-name { + font-size: var(--font-ui-medium); + font-weight: var(--font-semibold); + color: var(--text-normal); +} + +/* Custom section descriptions - align with items */ +.claudian-sp-settings-desc, +.claudian-mcp-settings-desc, +.claudian-plugin-settings-desc, +.claudian-approved-desc { + padding: 0 12px; +} + +/* Unified icon action buttons for settings */ +.claudian-settings-action-btn { + display: flex; + align-items: center; + justify-content: center; + width: 28px; + height: 28px; + padding: 0; + border: none; + background: transparent; + border-radius: 4px; + cursor: pointer; + color: var(--text-muted); + transition: background 0.15s ease, color 0.15s ease; +} + +.claudian-settings-action-btn:hover { + background: var(--background-modifier-hover); + color: var(--text-normal); +} + +.claudian-settings-action-btn svg { + width: 14px; + height: 14px; +} + +.claudian-settings-delete-btn:hover { + color: var(--text-error); +} + +.claudian-setting-validation { + font-size: var(--font-ui-smaller); + margin-top: -0.5em; + margin-bottom: 0.5em; +} + +.claudian-setting-validation-error { + color: var(--text-error); +} + +.claudian-setting-validation-warning { + color: var(--text-warning); +} + +.claudian-settings-cli-path-input { + width: 100%; +} + +.claudian-settings-cli-path-input.claudian-input-error { + border-color: var(--text-error); +} + +/* Hotkey grid - 3 columns */ +.claudian-hotkey-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 4px 12px; + padding: 4px 0; +} + +.claudian-hotkey-item { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 12px; + cursor: pointer; + border-radius: 6px; +} + +.claudian-hotkey-item:hover { + background: var(--background-modifier-hover); +} + +.claudian-hotkey-name { + flex: 1; + color: var(--text-normal); + font-size: var(--font-ui-small); +} + +.claudian-hotkey-badge { + color: var(--text-muted); + font-size: var(--font-ui-smaller); + background: var(--background-modifier-hover); + padding: 2px 6px; + border-radius: 4px; + font-family: var(--font-monospace); +} + +/* Media folder input width */ +.claudian-settings-media-input { + width: 200px; +} + +/* ── Shared settings panel layout (used by slash-settings + agent-settings) ── */ + +.claudian-sp-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 12px; + padding: 0 12px; +} + +.claudian-sp-label { + font-size: var(--font-ui-small); + color: var(--text-muted); + font-weight: var(--font-medium); +} + +.claudian-sp-header-actions { + display: flex; + gap: 4px; +} + +.claudian-sp-empty-state { + padding: 20px; + text-align: center; + color: var(--text-muted); + background: var(--background-secondary); + border-radius: 6px; + margin-top: 8px; +} + +.claudian-sp-list { + display: flex; + flex-direction: column; + gap: 8px; + margin-top: 8px; +} + +.claudian-sp-item { + display: flex; + align-items: flex-start; + justify-content: space-between; + padding: 12px; + background: var(--background-secondary); + border-radius: 6px; +} + +.claudian-sp-item:hover { + background: var(--background-modifier-hover); +} + +.claudian-sp-info { + flex: 1; + min-width: 0; +} + +.claudian-sp-item-header { + display: flex; + align-items: baseline; + gap: 8px; +} + +.claudian-sp-item-name { + font-weight: 600; + font-family: var(--font-monospace); + color: var(--text-normal); +} + +.claudian-sp-item-desc { + font-size: 13px; + color: var(--text-muted); + margin-top: 2px; +} + +.claudian-sp-item-actions { + display: flex; + gap: 4px; + margin-left: 16px; + flex-shrink: 0; +} + +.claudian-sp-advanced-section { + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + padding: 0 12px; + margin: 8px 0; +} + +.claudian-sp-advanced-summary { + cursor: pointer; + padding: 8px 0; + font-size: var(--font-ui-small); + color: var(--text-muted); + font-weight: var(--font-medium); +} + +.claudian-sp-advanced-section[open] .claudian-sp-advanced-summary { + margin-bottom: 4px; +} + +.claudian-sp-modal .modal-content { + max-width: 600px; + width: auto; +} + +.claudian-sp-content-area { + width: 100%; + font-family: var(--font-monospace); + font-size: 13px; + padding: 8px; + border: 1px solid var(--background-modifier-border); + border-radius: 4px; + background: var(--background-primary); + color: var(--text-normal); + resize: vertical; + margin-top: 8px; +} + +.claudian-sp-content-area:focus { + outline: none; + border-color: var(--interactive-accent); +} + +.claudian-sp-modal-buttons { + display: flex; + gap: 8px; + margin-top: 16px; + justify-content: flex-end; +} + + +/* ============================================ + settings/env-snippets.css + ============================================ */ +/* Context Limits Styles */ +.claudian-context-limits-container { + margin-top: 16px; +} + +.claudian-context-limits-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + margin-top: 16px; + padding: 0 12px; +} + +.claudian-context-limits-label { + font-size: var(--font-ui-small); + color: var(--text-muted); + font-weight: var(--font-medium); +} + +.claudian-context-limits-desc { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + padding: 0 12px; + margin-bottom: 8px; +} + +.claudian-context-limits-list { + display: flex; + flex-direction: column; + gap: 8px; + margin-top: 8px; +} + +.claudian-context-limits-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px; + background: var(--background-secondary); + border-radius: 6px; + transition: background-color 0.2s; +} + +.claudian-context-limits-item:hover { + background: var(--background-modifier-hover); +} + +.claudian-context-limits-model { + font-family: var(--font-monospace); + font-size: var(--font-ui-small); + color: var(--text-normal); + flex: 1; + min-width: 0; + word-break: break-all; +} + +.claudian-context-limits-input-wrapper { + display: flex; + align-items: center; + gap: 8px; + margin-left: 16px; + flex-shrink: 0; +} + +.claudian-context-alias-input { + width: 180px; + padding: 4px 8px; + font-size: var(--font-ui-small); + border: 1px solid var(--background-modifier-border); + border-radius: 4px; + background: var(--background-primary); + color: var(--text-normal); +} + +.claudian-context-alias-input:focus { + border-color: var(--interactive-accent); + outline: none; +} + +.claudian-context-limits-input { + width: 80px; + padding: 4px 8px; + font-size: var(--font-ui-small); + border: 1px solid var(--background-modifier-border); + border-radius: 4px; + background: var(--background-primary); + color: var(--text-normal); +} + +.claudian-context-limits-input:focus { + border-color: var(--interactive-accent); + outline: none; +} + +.claudian-context-limits-input.claudian-input-error { + border-color: var(--text-error); +} + +.claudian-context-limit-validation { + font-size: var(--font-ui-smaller); + color: var(--text-error); + margin-left: 4px; +} + +/* Environment Snippets Styles */ +.claudian-env-snippets-container { + margin-top: 16px; +} + +.claudian-snippet-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 12px; + margin-top: 16px; + padding: 0 12px; +} + +.claudian-snippet-label { + font-size: var(--font-ui-small); + color: var(--text-muted); + font-weight: var(--font-medium); +} + +.claudian-save-env-btn { + padding: 6px 16px; + font-size: 13px; + background: var(--interactive-accent); + color: var(--text-on-accent); + border: none; + border-radius: 4px; + cursor: pointer; + transition: opacity 0.2s; +} + +.claudian-save-env-btn:hover { + opacity: 0.9; +} + +.claudian-snippet-empty { + padding: 20px; + text-align: center; + color: var(--text-muted); + background: var(--background-secondary); + border-radius: 6px; + margin-top: 8px; +} + +.claudian-snippet-list { + display: flex; + flex-direction: column; + gap: 8px; + margin-top: 8px; +} + +.claudian-snippet-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px; + background: var(--background-secondary); + border-radius: 6px; + transition: background-color 0.2s; +} + +.claudian-snippet-item:hover { + background: var(--background-modifier-hover); +} + +.claudian-snippet-info { + flex: 1; + min-width: 0; +} + +.claudian-snippet-name { + font-weight: 600; + margin-bottom: 4px; + word-break: break-word; +} + +.claudian-snippet-description { + font-size: 13px; + color: var(--text-muted); +} + +.claudian-snippet-actions { + display: flex; + gap: 4px; + margin-left: 16px; + flex-shrink: 0; +} + +.claudian-restore-snippet-btn { + padding: 4px 12px; + font-size: 12px; + background: var(--interactive-accent); + color: var(--text-on-accent); + border: none; + border-radius: 4px; + cursor: pointer; +} + +.claudian-restore-snippet-btn:hover { + opacity: 0.9; +} + +.claudian-edit-snippet-btn { + padding: 4px 12px; + font-size: 12px; + background: var(--background-modifier-border); + color: var(--text-normal); + border: none; + border-radius: 4px; + cursor: pointer; +} + +.claudian-edit-snippet-btn:hover { + background: var(--background-modifier-border-hover); +} + +.claudian-delete-snippet-btn { + padding: 4px 12px; + font-size: 12px; + background: var(--background-modifier-error); + color: var(--text-on-accent); + border: none; + border-radius: 4px; + cursor: pointer; +} + +.claudian-delete-snippet-btn:hover { + opacity: 0.9; +} + +/* Env Snippet Modal */ +.claudian-env-snippet-modal .modal-content { + max-width: 550px; + width: 550px; + padding: 16px; +} + +.claudian-env-snippet-modal h2 { + margin: 0 0 16px 0; +} + +.claudian-env-snippet-modal .setting-item { + padding: 8px 0; + margin: 0; +} + +.claudian-env-snippet-modal .setting-item-info { + margin-bottom: 4px; +} + +/* Full-width env vars textarea setting */ +.claudian-env-snippet-setting { + flex-direction: column; + align-items: flex-start; +} + +.claudian-env-snippet-setting .setting-item-info { + width: 100%; + margin-bottom: 8px; +} + +.claudian-env-snippet-control { + width: 100%; +} + +.claudian-env-snippet-control textarea { + width: 100%; + min-width: 100%; + font-family: var(--font-monospace); + font-size: 12px; + resize: vertical; +} + +.claudian-snippet-preview { + margin: 8px 0; + padding: 6px; + background: var(--background-secondary); + border-radius: 6px; +} + +.claudian-env-preview { + background: var(--background-primary); + padding: 6px; + border-radius: 4px; + font-family: var(--font-monospace); + font-size: 11px; + line-height: 1.3; + white-space: pre-wrap; + word-break: break-all; + color: var(--text-muted); + max-height: 120px; + overflow-y: auto; + margin: 0; +} + +.claudian-snippet-buttons { + display: flex; + gap: 8px; + margin-top: 16px; + justify-content: flex-end; +} + +.claudian-cancel-btn, +.claudian-save-btn { + padding: 6px 16px; + font-size: 13px; + border: none; + border-radius: 4px; + cursor: pointer; +} + +.claudian-cancel-btn { + background: var(--background-modifier-border); + color: var(--text-normal); +} + +.claudian-cancel-btn:hover { + background: var(--background-modifier-border-hover); +} + +.claudian-save-btn { + background: var(--interactive-accent); + color: var(--text-on-accent); +} + +.claudian-save-btn:hover { + opacity: 0.9; +} + +/* Context limits section in snippet modal */ +.claudian-snippet-context-limits { + margin-top: 1em; +} + +.claudian-snippet-context-limits .setting-item-description { + margin-bottom: 0.5em; +} + +.claudian-snippet-limit-row { + display: flex; + align-items: center; + gap: 0.5em; + margin-bottom: 0.5em; +} + +.claudian-snippet-limit-model { + font-family: var(--font-monospace); + font-size: var(--font-ui-small); +} + +.claudian-snippet-limit-spacer { + flex: 1; +} + +.claudian-snippet-limit-input { + width: 80px; +} + +.claudian-snippet-alias-input { + width: 160px; +} + + +/* ============================================ + settings/slash-settings.css + ============================================ */ +/* Slash Command Settings — unique rules only (shared layout in base.css .claudian-sp-*) */ + +.claudian-slash-item-hint { + font-size: 12px; + color: var(--text-muted); + font-style: italic; +} + +.claudian-slash-item-badge { + font-size: 10px; + padding: 2px 6px; + background: var(--background-modifier-border); + border-radius: 4px; + color: var(--text-muted); + text-transform: uppercase; +} + + +/* ============================================ + settings/mcp-settings.css + ============================================ */ +/* MCP Server Settings */ +.claudian-mcp-settings-desc { + margin-bottom: 12px; +} + +.claudian-mcp-container { + margin-top: 8px; +} + +.claudian-mcp-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 12px; + padding: 0 12px; +} + +.claudian-mcp-label { + font-size: var(--font-ui-small); + color: var(--text-muted); + font-weight: var(--font-medium); +} + +.claudian-mcp-add-container { + position: relative; +} + +.claudian-add-mcp-btn { + padding: 4px 12px; + border-radius: 4px; + background: var(--interactive-accent); + color: var(--text-on-accent); + font-size: 12px; + cursor: pointer; + border: none; +} + +.claudian-add-mcp-btn:hover { + background: var(--interactive-accent-hover); +} + +.claudian-mcp-add-dropdown { + display: none; + position: absolute; + top: 100%; + right: 0; + margin-top: 4px; + min-width: 180px; + background-color: var(--modal-background, var(--background-primary)); + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); + z-index: 100; + overflow: hidden; +} + +.claudian-mcp-add-dropdown.is-visible { + display: block; +} + +.claudian-mcp-add-option { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 12px; + cursor: pointer; + font-size: 13px; + color: var(--text-normal); +} + +.claudian-mcp-add-option:hover { + background: var(--background-modifier-hover); +} + +.claudian-mcp-add-option-icon { + display: flex; + align-items: center; + color: var(--text-muted); +} + +.claudian-mcp-add-option-icon svg { + width: 16px; + height: 16px; +} + +.claudian-mcp-empty { + padding: 16px; + text-align: center; + color: var(--text-muted); + font-size: 13px; + background: var(--background-secondary); + border-radius: 6px; +} + +.claudian-mcp-list { + display: flex; + flex-direction: column; + gap: 8px; +} + +.claudian-mcp-item { + display: flex; + align-items: flex-start; + gap: 10px; + padding: 10px 12px; + background: var(--background-secondary); + border-radius: 6px; + transition: background 0.15s ease; +} + +.claudian-mcp-item:hover { + background: var(--background-modifier-hover); +} + +.claudian-mcp-item-disabled { + opacity: 0.6; +} + +.claudian-mcp-status { + width: 8px; + height: 8px; + border-radius: 50%; + margin-top: 6px; + flex-shrink: 0; +} + +.claudian-mcp-status-enabled { + background: var(--color-green); +} + +.claudian-mcp-status-disabled { + background: var(--text-muted); +} + +.claudian-mcp-info { + flex: 1; + min-width: 0; +} + +.claudian-mcp-name-row { + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; +} + +.claudian-mcp-name { + font-weight: 600; +} + +.claudian-mcp-type-badge { + font-size: 10px; + padding: 2px 6px; + background: var(--background-modifier-border); + border-radius: 4px; + color: var(--text-muted); + text-transform: uppercase; +} + +.claudian-mcp-context-saving-badge { + font-size: 11px; + padding: 2px 6px; + background: var(--interactive-accent); + color: var(--text-on-accent); + border-radius: 4px; + font-weight: 600; +} + +.claudian-mcp-preview { + font-size: 12px; + color: var(--text-muted); + margin-top: 4px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.claudian-mcp-actions { + display: flex; + gap: 4px; + flex-shrink: 0; +} + +.claudian-mcp-action-btn { + display: flex; + align-items: center; + justify-content: center; + width: 28px; + height: 28px; + padding: 0; + border: none; + background: transparent; + border-radius: 4px; + cursor: pointer; + color: var(--text-muted); + transition: background 0.15s ease, color 0.15s ease; +} + +.claudian-mcp-action-btn:hover { + background: var(--background-modifier-hover); + color: var(--text-normal); +} + +.claudian-mcp-action-btn svg { + width: 14px; + height: 14px; +} + +.claudian-mcp-delete-btn:hover { + color: var(--text-error); +} + + +/* ============================================ + settings/plugin-settings.css + ============================================ */ +/* Plugin Settings */ +.claudian-plugin-settings-desc { + margin-bottom: 12px; +} + +.claudian-plugins-container { + margin-top: 8px; +} + +.claudian-plugin-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 12px; + padding: 0 12px; +} + +.claudian-plugin-label { + font-size: var(--font-ui-small); + color: var(--text-muted); + font-weight: var(--font-medium); +} + +.claudian-plugin-empty { + padding: 16px; + text-align: center; + color: var(--text-muted); + font-size: 13px; + background: var(--background-secondary); + border-radius: 6px; +} + +.claudian-plugin-list { + display: flex; + flex-direction: column; + gap: 8px; +} + +.claudian-plugin-section-header { + font-size: 11px; + color: var(--text-muted); + text-transform: uppercase; + padding: 8px 12px 4px; + font-weight: 600; +} + +.claudian-plugin-item { + display: flex; + align-items: flex-start; + gap: 10px; + padding: 10px 12px; + background: var(--background-secondary); + border-radius: 6px; + transition: background 0.15s ease; +} + +.claudian-plugin-item:hover { + background: var(--background-modifier-hover); +} + +.claudian-plugin-item-disabled { + opacity: 0.6; +} + +.claudian-plugin-item-error { + opacity: 0.8; +} + +.claudian-plugin-status { + width: 8px; + height: 8px; + border-radius: 50%; + margin-top: 6px; + flex-shrink: 0; +} + +.claudian-plugin-status-enabled { + background: var(--color-green); +} + +.claudian-plugin-status-disabled { + background: var(--text-muted); +} + +.claudian-plugin-status-error { + background: var(--text-error); +} + +.claudian-plugin-info { + flex: 1; + min-width: 0; +} + +.claudian-plugin-name-row { + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; +} + +.claudian-plugin-name { + font-weight: 600; +} + +.claudian-plugin-version-badge { + font-size: 10px; + padding: 2px 6px; + background: var(--background-modifier-border); + border-radius: 4px; + color: var(--text-muted); +} + +.claudian-plugin-error-badge { + font-size: 10px; + padding: 2px 6px; + background: var(--text-error); + color: var(--text-on-accent); + border-radius: 4px; + text-transform: uppercase; +} + +.claudian-plugin-preview { + font-size: 12px; + color: var(--text-muted); + margin-top: 4px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.claudian-plugin-preview-error { + color: var(--text-error); +} + +.claudian-plugin-actions { + display: flex; + gap: 4px; + flex-shrink: 0; +} + +.claudian-plugin-action-btn { + display: flex; + align-items: center; + justify-content: center; + width: 28px; + height: 28px; + padding: 0; + border: none; + background: transparent; + border-radius: 4px; + cursor: pointer; + color: var(--text-muted); + transition: background 0.15s ease, color 0.15s ease; +} + +.claudian-plugin-action-btn:hover { + background: var(--background-modifier-hover); + color: var(--text-normal); +} + +.claudian-plugin-action-btn svg { + width: 14px; + height: 14px; +} + + +/* ============================================ + settings/agent-settings.css + ============================================ */ +/* Agent Settings — all structural rules live in base.css .claudian-sp-* */ +/* This file is kept as a placeholder for future agent-specific overrides. */ + + +/* ============================================ + settings/opencode-model-picker.css + ============================================ */ +/* OpenCode model picker */ + +.claudian-opencode-model-picker { + display: flex; + flex-direction: column; + gap: 12px; + margin-top: 8px; +} + +.claudian-opencode-model-picker-summary { + display: flex; + flex-wrap: wrap; + gap: 6px 12px; + font-size: var(--font-ui-small); + color: var(--text-muted); +} + +.claudian-opencode-model-picker-summary-value { + color: var(--text-normal); + font-weight: var(--font-medium); +} + +.claudian-opencode-model-picker-selected { + display: flex; + flex-direction: column; + gap: 8px; + padding: 10px 12px; + background: var(--background-secondary); + border-radius: 6px; +} + +.claudian-opencode-model-picker-selected-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; +} + +.claudian-opencode-model-picker-selected-label { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.claudian-opencode-model-picker-selected-clear { + padding: 2px 8px; + font-size: var(--font-ui-smaller); + color: var(--text-muted); + background: transparent; + border: 1px solid var(--background-modifier-border); + border-radius: 4px; + cursor: pointer; +} + +.claudian-opencode-model-picker-selected-clear:hover { + background: var(--background-modifier-hover); + color: var(--text-normal); +} + +.claudian-opencode-model-picker-selected-rows { + display: flex; + flex-direction: column; + gap: 6px; +} + +.claudian-opencode-model-picker-selected-row { + display: flex; + align-items: center; + gap: 12px; + padding: 8px 10px; + background: var(--background-primary); + border: 1px solid var(--background-modifier-border); + border-radius: 6px; +} + +.claudian-opencode-model-picker-selected-row--unavailable { + border-style: dashed; +} + +.claudian-opencode-model-picker-selected-info { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + gap: 2px; +} + +.claudian-opencode-model-picker-selected-title { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 8px; + min-width: 0; +} + +.claudian-opencode-model-picker-selected-badge { + font-size: var(--font-ui-smaller); + padding: 1px 6px; + border-radius: 999px; + background: var(--background-modifier-hover); + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.claudian-opencode-model-picker-selected-name { + color: var(--text-normal); + font-weight: var(--font-medium); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.claudian-opencode-model-picker-selected-id { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + font-family: var(--font-monospace); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.claudian-opencode-model-picker-selected-unavailable { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + font-style: italic; +} + +.claudian-opencode-model-picker-selected-controls { + display: flex; + align-items: center; + gap: 6px; + flex-shrink: 0; +} + +.claudian-opencode-model-picker-selected-alias { + width: 180px; + padding: 4px 8px; + border: 1px solid var(--background-modifier-border); + border-radius: 4px; + background: var(--background-primary); + color: var(--text-normal); + font-size: var(--font-ui-small); +} + +.claudian-opencode-model-picker-selected-alias:focus { + outline: none; + border-color: var(--interactive-accent); +} + +.claudian-opencode-model-picker-selected-remove { + display: inline-flex; + align-items: center; + justify-content: center; + width: 22px; + height: 22px; + padding: 0; + border: none; + background: transparent; + border-radius: 4px; + color: var(--text-muted); + cursor: pointer; + line-height: 1; + font-size: 16px; +} + +.claudian-opencode-model-picker-selected-remove:hover { + background: var(--background-modifier-hover); + color: var(--text-normal); +} + +.claudian-opencode-model-picker-catalog { + display: flex; + flex-direction: column; + gap: 8px; + padding: 10px 12px; + background: var(--background-secondary); + border-radius: 6px; +} + +.claudian-opencode-model-picker-catalog-summary { + display: flex; + align-items: center; + gap: 8px; + cursor: pointer; + user-select: none; + list-style: none; +} + +.claudian-opencode-model-picker-catalog-summary::-webkit-details-marker { + display: none; +} + +.claudian-opencode-model-picker-catalog-caret { + font-size: 16px; + color: var(--text-muted); + transition: transform 0.12s ease; + display: inline-flex; + width: 18px; + justify-content: center; + line-height: 1; +} + +.claudian-opencode-model-picker-catalog[open] .claudian-opencode-model-picker-catalog-caret { + transform: rotate(90deg); +} + +.claudian-opencode-model-picker-catalog-title { + color: var(--text-normal); + font-weight: var(--font-medium); + font-size: var(--font-ui-small); +} + +.claudian-opencode-model-picker-catalog-count { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + margin-left: auto; +} + +.claudian-opencode-model-picker-controls { + display: flex; + flex-wrap: wrap; + gap: 8px; + align-items: center; +} + +.claudian-opencode-model-picker-search { + flex: 1 1 220px; + min-width: 180px; + padding: 6px 10px; + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + background: var(--background-primary); + color: var(--text-normal); + font-size: var(--font-ui-small); +} + +.claudian-opencode-model-picker-search:focus { + outline: none; + border-color: var(--interactive-accent); +} + +.claudian-opencode-model-picker-provider { + padding: 6px 10px; + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + background: var(--background-primary); + color: var(--text-normal); + font-size: var(--font-ui-small); +} + +.claudian-opencode-model-picker-list { + display: flex; + flex-direction: column; + margin-top: 8px; + border: 1px solid var(--background-modifier-border); + border-radius: 6px; + background: var(--background-primary); + max-height: 360px; + overflow-y: auto; +} + +.claudian-opencode-model-picker-row { + display: flex; + align-items: flex-start; + gap: 10px; + padding: 8px 12px; + border-bottom: 1px solid var(--background-modifier-border); + cursor: pointer; +} + +.claudian-opencode-model-picker-row:last-child { + border-bottom: none; +} + +.claudian-opencode-model-picker-row:hover { + background: var(--background-modifier-hover); +} + +.claudian-opencode-model-picker-row--selected { + background: var(--background-modifier-hover); +} + +.claudian-opencode-model-picker-row input[type="checkbox"] { + margin-top: 3px; +} + +.claudian-opencode-model-picker-row-text { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + gap: 2px; +} + +.claudian-opencode-model-picker-row-header { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 8px; + min-width: 0; +} + +.claudian-opencode-model-picker-row-name { + color: var(--text-normal); + font-weight: var(--font-medium); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.claudian-opencode-model-picker-row-badge { + font-size: var(--font-ui-smaller); + padding: 1px 6px; + border-radius: 999px; + background: var(--background-modifier-hover); + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.claudian-opencode-model-picker-row-badge--unavailable { + background: var(--background-modifier-error); + color: var(--text-on-accent); +} + +.claudian-opencode-model-picker-row-meta { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + font-family: var(--font-monospace); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.claudian-opencode-model-picker-row-desc { + font-size: var(--font-ui-smaller); + color: var(--text-muted); +} + +.claudian-opencode-model-picker-empty { + padding: 24px 16px; + text-align: center; + color: var(--text-muted); + font-size: var(--font-ui-small); +} + + +/* ============================================ + accessibility.css + ============================================ */ +/* Accessibility - Focus Visible Styles */ + +/* outline + offset + border-radius */ +.claudian-tool-header:focus-visible, +.claudian-thinking-header:focus-visible, +.claudian-subagent-header:focus-visible, +.claudian-header-btn:focus-visible, +.claudian-model-btn:focus-visible, +.claudian-thinking-current:focus-visible { + outline: 2px solid var(--interactive-accent); + outline-offset: 2px; + border-radius: 4px; +} + +/* outline + offset only */ +.claudian-action-btn:focus-visible, +.claudian-toggle-switch:focus-visible, +.claudian-file-chip:focus-visible, +.claudian-image-chip:focus-visible, +.claudian-file-chip-remove:focus-visible, +.claudian-image-remove:focus-visible, +.claudian-image-modal-close:focus-visible, +.claudian-approved-remove-btn:focus-visible, +.claudian-save-env-btn:focus-visible, +.claudian-restore-snippet-btn:focus-visible, +.claudian-edit-snippet-btn:focus-visible, +.claudian-delete-snippet-btn:focus-visible, +.claudian-cancel-btn:focus-visible, +.claudian-save-btn:focus-visible, +.claudian-code-lang-label:focus-visible { + outline: 2px solid var(--interactive-accent); + outline-offset: 2px; +} + +/* outline + negative offset + border-radius */ +.claudian-history-item-content:focus-visible { + outline: 2px solid var(--interactive-accent); + outline-offset: -2px; + border-radius: 4px; +} diff --git a/PaperBell/.obsidian/workspaces.json b/PaperBell/.obsidian/workspaces.json index 2895a2ff..c3b5a37f 100644 --- a/PaperBell/.obsidian/workspaces.json +++ b/PaperBell/.obsidian/workspaces.json @@ -323,20 +323,15 @@ "type": "fluent-task-genius-view", "state": { "currentWorkspace": "ws_1764410067355_a3rl1g5fn", - "viewMode": "list", + "viewMode": "tree", "viewModeByViewId": { - "projects": "calendar", - "inbox": "list", - "today": "list", - "flagged": "list", - "forecast": "list", - "review": "list", - "calendar": "list" + "projects": "tree" }, "searchQuery": "", "filters": {}, "filterInputValue": "", - "currentViewId": "calendar" + "selectedProject": "PaperBell", + "currentViewId": "projects" }, "icon": "task-genius", "title": "Task Genius" @@ -596,9 +591,18 @@ "icon": "calendar-clock", "title": "时间轴" } + }, + { + "id": "086ba97a60439621", + "type": "leaf", + "state": { + "type": "claudian-view", + "state": {}, + "icon": "bot", + "title": "Claudian" + } } - ], - "currentTab": 2 + ] } ], "direction": "horizontal", @@ -606,9 +610,11 @@ }, "left-ribbon": { "hiddenItems": { + "paperbell:打开视图仪表板": false, + "bases:新建数据库": false, + "obsidian-memos:Thino Super": false, + "obsidian42-brat:BRAT": false, "paperbell:搜索机构": false, - "paperbell:打开部分视图仪表板": false, - "bases:创建新数据库": false, "pexels-banner:🚩 Pixel Banner Menu": false, "daily-notes:打开/创建今天的日记": false, "homepage:Open homepage": false, @@ -622,11 +628,12 @@ "command-palette:打开命令面板": false, "markdown-importer:打开 Markdown 格式转换器": false, "workspaces:管理工作区布局": false, - "obsidian-task-progress-bar:打开 Task Genius 视图": false + "obsidian-task-progress-bar:打开 Task Genius 视图": false, + "realclaudian:Open Claudian": false } }, "active": "0fe3999b908523ec", - "mtime": "2025-11-30T10:09:18+01:00" + "mtime": "2026-06-06T16:13:17+02:00" } }, "active": "主工作区" diff --git "a/PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/defaults/response-letter.yaml" "b/PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/defaults/response-letter.yaml" new file mode 100644 index 00000000..9303e8e8 --- /dev/null +++ "b/PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/defaults/response-letter.yaml" @@ -0,0 +1,30 @@ +## response-letter.yaml —— 审稿人意见与回复信(XeLaTeX → PDF) +## 作者用 Obsidian callout 写审稿意见与回复,responseletter.lua 转成 LaTeX, +## 经 responseletter.template.tex + responseletter.sty 渲染出彩色卡片/徽章/草稿-终稿版。 +## +## 变量约定:${.} = 本 defaults 目录;${USERDATA} = data-dir = pandoc 目录。 +## responseletter.sty 由插件 env 的 TEXINPUTS 指向 templates/ 目录被 XeLaTeX 找到(零安装)。 + +standalone: true +from: markdown +pdf-engine: xelatex +data-dir: ${.}/.. + +## 模板:注入 papertitle/authors/journal/doi/type/draft 等(取自笔记 frontmatter) +template: ${USERDATA}/templates/responseletter.template.tex + +## 引文库(与其它 PaperBell preset 一致,供回复信里的 [@cite] 使用) +bibliography: ${USERDATA}/../../mybib.bib + +filters: + - ${USERDATA}/filters/responseletter.lua #! Obsidian callout → \RC / \AR / \manuscript / \zh + - citeproc + +metadata: + ## 文稿类型:author-response(默认,含 AR 图例)或 reviewer-comments(可在笔记 frontmatter 覆盖) + type: author-response + link-citations: false + +## draft 不在此设置:由两条导出 preset 分别用 --metadata=draft:true/false 传入 +## 草稿(draft=true) 显示难度/状态徽章、\zh 中文对照、\note 批注,供自己核对 +## 终稿(draft=false) 全部隐藏,仅留 RC/AR 正文,供投稿 diff --git "a/PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/filters/responseletter.lua" "b/PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/filters/responseletter.lua" new file mode 100644 index 00000000..28b3a5e0 --- /dev/null +++ "b/PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/filters/responseletter.lua" @@ -0,0 +1,464 @@ +--[[ + responseletter.lua — pandoc Lua filter + + Converts Obsidian-flavoured Markdown into the commands provided by + responseletter.sty, so casual notes can be typeset as a polished response + letter via pandoc + XeLaTeX. + + Authoring contract (matches how the notes are actually written in Obsidian) + -------------------------------------------------------------------------- + Reviewer comment → a callout, with the reviewer label as its title: + + > [!quote] Reviewer #1 (optional sub-topic) + > English text of the reviewer comment (may span several lines/paras). + > + > --- + > **中文翻译:** 对应的中文。 + + - callout kinds quote / comment / cite / info / rc / reviewer → RC card. + - the title "Reviewer #1" becomes a \section the first time it appears + (deduped, so it is printed once even if every comment repeats it); + a trailing "(...)" becomes a \subsection*. + - the "---" rule and the "**中文翻译:**" paragraph are folded into the + card as \zh{...} (draft-only). + + Author response → a bare paragraph led by a bold label: + + **Response:** English text of the response. + + %% 中文翻译(Obsidian 行内注释) %% + + - "**Response:**" (also 回复 / 作者回复 / Reply) → \AR with a hanging + "AR:" label; the label is stripped. + - a following %% ... %% Obsidian comment → \zh{...} for the response. + - a following plain paragraph (no label) → \AR* continuation. + - alternatively, a > [!response] / [!ar] callout works too. + + Revised manuscript text: + + > [!manuscript] page=5, sline=158, eline=160 + > Revised text, shown in a framed box. + + Other carriers still understood: + - after a comment/response → \zh{...} + - after a comment/response → \note{...} + - ...text {difficulty=hard status=todo} on an RC body → badges + - # Heading / ## Heading → \section / \subsection* (manual override) + + Badges, 中文 and 批注 are draft-only; the .sty hides them in final mode, so + the author never edits the source between modes. +]] + +local utils = pandoc.utils + +-- --------------------------------------------------------------------------- +-- helpers +-- --------------------------------------------------------------------------- + +local function raw(s) + return pandoc.RawBlock('latex', s) +end + +-- render a list of inlines to a LaTeX string (math, emphasis, \url … preserved) +local function inlines_to_latex(inlines) + local s = pandoc.write(pandoc.Pandoc({ pandoc.Plain(inlines) }), 'latex') + return (s:gsub('%s+$', '')) +end + +-- escape plain text for use inside \section{}/\subsection*{} etc. +local function tex_escape(s) + s = s:gsub('([\\{}%%&#%$_])', '\\%1') + s = s:gsub('~', '\\textasciitilde{}') + s = s:gsub('%^', '\\textasciicircum{}') + return s +end + +local function trim(s) + return (s:gsub('^%s+', ''):gsub('%s+$', '')) +end + +-- strip a trailing colon (half- or full-width). NB: a byte-class like +-- [::] is wrong here — ":" is a 3-byte UTF-8 char, so match it literally. +local function strip_colon(s) + return trim(trim(s):gsub(':$', ''):gsub(':$', '')) +end + +local function drop_leading_space(inlines) + while #inlines > 0 and (inlines[1].t == 'Space' or inlines[1].t == 'SoftBreak') do + table.remove(inlines, 1) + end + return inlines +end + +-- "difficulty=hard status=todo" -> { difficulty="hard", status="todo" } +local function parse_kv_words(s) + local t = {} + for k, v in s:gmatch('(%w+)%s*=%s*([%w%-]+)') do t[k] = v end + return t +end + +-- "page=Supporting Information, sline=158" -> table (comma-separated, spaces ok) +local function parse_kv_commas(s) + local t = {} + for pair in s:gmatch('[^,]+') do + local k, v = pair:match('^%s*(%w+)%s*=%s*(.-)%s*$') + if k then t[k] = v end + end + return t +end + +-- --------------------------------------------------------------------------- +-- callout detection: > [!type]<-|+>? Title \n body... +-- --------------------------------------------------------------------------- + +local CALLOUT_RC = { -- reviewer comment + quote = true, comment = true, cite = true, info = true, + rc = true, reviewer = true, question = true, abstract = true, +} +local CALLOUT_AR = { -- author response + response = true, ar = true, reply = true, success = true, answer = true, +} +local CALLOUT_MS = { manuscript = true, ms = true, revision = true } + +-- returns: kind (lowercased) or nil, the first block, the whole block list +local function callout_info(blk) + if blk.t ~= 'BlockQuote' then return nil end + local first = blk.content[1] + if not first or (first.t ~= 'Para' and first.t ~= 'Plain') then return nil end + local fi = first.content[1] + if not fi or fi.t ~= 'Str' then return nil end + local kind = fi.text:match('^%[!(%a+)%][%-%+]?$') + if not kind then return nil end + return kind:lower(), first, blk.content +end + +-- split a callout's first para into (title inlines, first-body inlines), +-- dropping the leading "[!type]" marker token. +local function split_first(inlines) + local title, body = {}, {} + local seen_break = false + for i = 2, #inlines do -- skip [1] = marker Str + local el = inlines[i] + if not seen_break and (el.t == 'SoftBreak' or el.t == 'LineBreak') then + seen_break = true + elseif not seen_break then + table.insert(title, el) + else + table.insert(body, el) + end + end + return drop_leading_space(title), drop_leading_space(body) +end + +-- "Reviewer #1 (Remarks on code availability)" -> "Reviewer #1", "Remarks on…" +local function parse_title(t) + t = trim(t) + local sub = t:match('%((.-)%)') + local rev = t:match('^(.-)%s*%(') or t + rev = trim(rev) + if sub then sub = trim(sub) end + return rev, sub +end + +-- strip a leading boilerplate parenthetical like "(Remarks to the Author)" +local function strip_leading_remarks(inlines) + if #inlines == 0 then return inlines end + if not utils.stringify(inlines):match('^%(%s*Remarks') then return inlines end + local idx + for k = 1, #inlines do + if inlines[k].t == 'Str' and inlines[k].text:find('%)') then idx = k break end + end + if not idx then return inlines end + local rest = {} + local after = inlines[idx].text:gsub('^.-%)', '') + if after ~= '' then rest[#rest + 1] = pandoc.Str(after) end + for k = idx + 1, #inlines do rest[#rest + 1] = inlines[k] end + return drop_leading_space(rest) +end + +-- --------------------------------------------------------------------------- +-- translation / annotation carriers +-- --------------------------------------------------------------------------- + +-- "**中文翻译:** ..." paragraph inside a callout -> remaining inlines, or nil +local ZH_LABELS = { + ['中文翻译'] = true, ['中文'] = true, ['译文'] = true, ['翻译'] = true, + ['translation'] = true, +} +local function strip_zh_label(inlines) + if #inlines == 0 then return nil end + local first = inlines[1] + if first.t ~= 'Strong' and first.t ~= 'Str' then return nil end + local head = strip_colon(utils.stringify(first)) + if not ZH_LABELS[head] then return nil end + local rest = {} + for k = 2, #inlines do rest[#rest + 1] = inlines[k] end + return drop_leading_space(rest) +end + +-- Obsidian inline comment %% ... %% (a whole paragraph) -> inner inlines, or nil +local function obsidian_zh(blk) + if blk.t ~= 'Para' and blk.t ~= 'Plain' then return nil end + local ins = blk.content + if #ins == 1 and ins[1].t == 'Str' then + local inner = ins[1].text:match('^%%%%(.-)%%%%$') + if inner and inner ~= '' then return { pandoc.Str(inner) } end + return nil + end + if #ins < 2 then return nil end + if not (ins[1].t == 'Str' and ins[1].text == '%%') then return nil end + if not (ins[#ins].t == 'Str' and ins[#ins].text == '%%') then return nil end + local mid = {} + for k = 2, #ins - 1 do mid[#mid + 1] = ins[k] end + drop_leading_space(mid) + while #mid > 0 and (mid[#mid].t == 'Space' or mid[#mid].t == 'SoftBreak') do + table.remove(mid) + end + if #mid == 0 then return nil end + return mid +end + +-- HTML comment / -> kind, text +local HTML_LABELS = { + ['中文翻译'] = 'zh', ['中文'] = 'zh', ['zh'] = 'zh', ['translation'] = 'zh', + ['note'] = 'note', ['批注'] = 'note', ['注'] = 'note', +} +local function html_comment(blk) + if blk.t ~= 'RawBlock' or blk.format ~= 'html' then return nil end + local inner = blk.text:match('^%s*%s*$') + if not inner then return nil end + local lines = {} + for line in (inner .. '\n'):gmatch('(.-)\n') do + local t = trim(line) + if t ~= '' then lines[#lines + 1] = t end + end + if #lines == 0 then return nil end + local kind = 'zh' + local label = strip_colon(lines[1]) + local start = 1 + if HTML_LABELS[label] then kind = HTML_LABELS[label]; start = 2 end + local rest = {} + for i = start, #lines do rest[#rest + 1] = lines[i] end + local text = table.concat(rest, ' ') + if text == '' then return nil end + return kind, text +end + +-- a draft-aid carrier following a comment/response → emits \zh{}/\note{}, or nil +local function fold_aid(blk) + local zh = obsidian_zh(blk) + if zh then return '\\zh{' .. inlines_to_latex(zh) .. '}' end + local k, txt = html_comment(blk) + if k then return '\\' .. k .. '{' .. tex_escape(txt) .. '}' end + return nil +end + +-- --------------------------------------------------------------------------- +-- author-response label: **Response:** ... (also 回复 / Reply …) +-- --------------------------------------------------------------------------- +local AR_LABELS = { + ['Response'] = true, ['response'] = true, ['RESPONSE'] = true, + ['Reply'] = true, ['reply'] = true, + ['回复'] = true, ['作者回复'] = true, ['答复'] = true, ['回應'] = true, +} +local function ar_label(inlines) + if #inlines == 0 or inlines[1].t ~= 'Strong' then return nil end + local head = strip_colon(utils.stringify(inlines[1])) + if not AR_LABELS[head] then return nil end + local rest = {} + for k = 2, #inlines do rest[#rest + 1] = inlines[k] end + return drop_leading_space(rest) +end + +-- --------------------------------------------------------------------------- +-- RC inline option marker: ...comment {difficulty=hard status=todo} +-- --------------------------------------------------------------------------- +local function strip_trailing_brace(inlines) + local acc, cut = '', #inlines + 1 + for j = #inlines, 1, -1 do + acc = utils.stringify({ inlines[j] }) .. acc + if acc:match('^%s*%b{}%s*$') then cut = j break end + if #acc > 120 then break end + end + local res = {} + for j = 1, cut - 1 do res[#res + 1] = inlines[j] end + while #res > 0 and res[#res].t == 'Space' do table.remove(res) end + return res +end + +local function extract_rc_opts(inlines) + local s = utils.stringify(inlines) + local brace = s:match('%s*(%b{})%s*$') + if not (brace and brace:find('=')) then return '', inlines end + local kv = parse_kv_words(brace:sub(2, -2)) + local parts = {} + if kv.difficulty then parts[#parts + 1] = 'difficulty=' .. kv.difficulty end + if kv.status then parts[#parts + 1] = 'status=' .. kv.status end + if #parts == 0 then return '', inlines end + return table.concat(parts, ', '), strip_trailing_brace(inlines) +end + +-- --------------------------------------------------------------------------- +-- main pass: walk the flat block list, rebuild with LaTeX structure +-- --------------------------------------------------------------------------- + +function Pandoc(doc) + local out = pandoc.List() + local blocks = doc.blocks + local i = 1 + local cur_reviewer, cur_subtitle = nil, nil + + -- emit a deduped \section / \subsection* from a callout's title text + local function emit_heading(title_str) + local rev, sub = parse_title(title_str) + if rev and rev ~= '' and rev ~= cur_reviewer then + out:insert(raw('\\section{' .. tex_escape(rev) .. '}')) + cur_reviewer = rev + cur_subtitle = nil + end + if sub and sub ~= '' and sub ~= cur_subtitle then + out:insert(raw('\\subsection*{' .. tex_escape(sub) .. '}')) + cur_subtitle = sub + end + end + + -- emit a sequence of inline-paragraphs as \AR (first) / \AR* (rest) + local function emit_ar(paras) + for pi, p in ipairs(paras) do + local cmd = (pi == 1) and '\\AR ' or '\\AR* ' + out:insert(raw(cmd .. inlines_to_latex(p))) + end + end + + while i <= #blocks do + local blk = blocks[i] + local kind, firstblk, content = callout_info(blk) + + -- 1. manual headings (override / supplement the auto sectioning) + if blk.t == 'Header' then + local txt = inlines_to_latex(blk.content) + if blk.level == 1 then + out:insert(raw('\\section{' .. txt .. '}')) + cur_reviewer = trim(utils.stringify(blk.content)); cur_subtitle = nil + else + out:insert(raw('\\subsection*{' .. txt .. '}')) + cur_subtitle = trim(utils.stringify(blk.content)) + end + i = i + 1 + + -- 2. revised manuscript box + elseif kind and CALLOUT_MS[kind] then + local title, body1 = split_first(firstblk.content) + local kv = parse_kv_commas(utils.stringify(title)) + local optparts = {} + for _, key in ipairs({ 'page', 'sline', 'eline' }) do + if kv[key] then optparts[#optparts + 1] = key .. '=' .. kv[key] end + end + local opt = (#optparts > 0) and ('[' .. table.concat(optparts, ', ') .. ']') or '' + out:insert(raw('\\begin{manuscript}' .. opt)) + if #body1 > 0 then out:insert(pandoc.Para(body1)) end + for bi = 2, #content do out:insert(content[bi]) end + out:insert(raw('\\end{manuscript}')) + i = i + 1 + + -- 3. author response written as a callout (alternative to **Response:**) + elseif kind and CALLOUT_AR[kind] then + local _, body1 = split_first(firstblk.content) + local paras = {} + if #body1 > 0 then paras[#paras + 1] = body1 end + for bi = 2, #content do + local b = content[bi] + if b.t == 'Para' or b.t == 'Plain' then paras[#paras + 1] = b.content end + end + emit_ar(paras) + -- fold trailing %% / aids that sit right after the callout + local j = i + 1 + while j <= #blocks do + local aid = fold_aid(blocks[j]) + if not aid then break end + out:insert(raw(aid)); j = j + 1 + end + i = j + + -- 4. reviewer comment callout (the common case) + elseif kind and (CALLOUT_RC[kind] or not (CALLOUT_AR[kind] or CALLOUT_MS[kind])) then + local title, body1 = split_first(firstblk.content) + emit_heading(utils.stringify(title)) + + -- collect English body paragraphs + an inline 中文翻译 (if present) + local body_paras, zh_inlines = {}, nil + if #body1 > 0 then body_paras[#body_paras + 1] = body1 end + for bi = 2, #content do + local b = content[bi] + if b.t == 'HorizontalRule' then + -- separator before the translation; skip + elseif (b.t == 'Para' or b.t == 'Plain') then + local z = strip_zh_label(b.content) + if z then zh_inlines = z + else body_paras[#body_paras + 1] = b.content end + end + -- any other block kind inside the callout is dropped from the RC + end + if #body_paras > 0 then + body_paras[1] = strip_leading_remarks(body_paras[1]) + end + + -- difficulty / status badges from a trailing {..} on the last body para + local opt = '' + if #body_paras > 0 then + opt, body_paras[#body_paras] = extract_rc_opts(body_paras[#body_paras]) + end + + out:insert(raw('\\begin{RC}' .. ((opt ~= '') and ('[' .. opt .. ']') or ''))) + for _, p in ipairs(body_paras) do out:insert(pandoc.Para(p)) end + if zh_inlines then out:insert(raw('\\zh{' .. inlines_to_latex(zh_inlines) .. '}')) end + out:insert(raw('\\end{RC}')) + i = i + 1 + + -- 5. author response written as a bare **Response:** paragraph + elseif (blk.t == 'Para' or blk.t == 'Plain') and ar_label(blk.content) then + local first_para = ar_label(blk.content) + out:insert(raw('\\AR ' .. inlines_to_latex(first_para))) + local j = i + 1 + while j <= #blocks do + local b = blocks[j] + local aid = fold_aid(b) + if aid then + out:insert(raw(aid)); j = j + 1 + elseif (b.t == 'Para' or b.t == 'Plain') + and not callout_info(b) and not ar_label(b.content) + and not obsidian_zh(b) and not html_comment(b) then + out:insert(raw('\\AR* ' .. inlines_to_latex(b.content))) -- continuation + j = j + 1 + else + break + end + end + i = j + + -- 6. orphan translation/annotation (e.g. a heading's translation) → drop + elseif obsidian_zh(blk) or html_comment(blk) then + i = i + 1 + + -- 7. fallback bare paragraph → reviewer comment card (back-compat) + elseif blk.t == 'Para' or blk.t == 'Plain' then + local opt, body = extract_rc_opts(blk.content) + out:insert(raw('\\begin{RC}' .. ((opt ~= '') and ('[' .. opt .. ']') or ''))) + out:insert(pandoc.Para(body)) + local j = i + 1 + while j <= #blocks do + local aid = fold_aid(blocks[j]) + if not aid then break end + out:insert(raw(aid)); j = j + 1 + end + out:insert(raw('\\end{RC}')) + i = j + + else + out:insert(blk) -- tables, lists, etc. + i = i + 1 + end + end + + return pandoc.Pandoc(out, doc.meta) +end diff --git "a/PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/templates/responseletter.sty" "b/PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/templates/responseletter.sty" new file mode 100644 index 00000000..e53094af --- /dev/null +++ "b/PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/templates/responseletter.sty" @@ -0,0 +1,314 @@ +%% responseletter.sty — a modern, reusable LaTeX package for journal response letters +%% ---------------------------------------------------------------------------------- +%% Engine: XeLaTeX (required, for CJK 中文 rendering via xeCJK). +%% +%% Quick start: +%% \documentclass{article} +%% \usepackage[type=author-response, draft]{responseletter} +%% \ResponseSetup{papertitle={...}, authors={...}, journal={...}, doi={...}} +%% \begin{document} +%% \makeletterhead +%% \begin{RC}[difficulty=hard, status=todo] +%% Reviewer's comment in English. \zh{中文对照} \note{自己的批注} +%% \end{RC} +%% \AR Author response... +%% \AR* Unlabeled continuation... +%% \begin{manuscript}[page=5, sline=158, eline=160] Revised text. \end{manuscript} +%% \end{document} +%% +%% Options: +%% type=author-response | reviewer-comments (default: author-response) +%% draft — show difficulty badges, status pills, \zh and \note (for self-editing) +%% final — hide all of the above (for submission) +%% ---------------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{responseletter}[2026/06/03 v1.0 Modern response letter template] + +% --------------------------------------------------------------------------- +% Package options +% --------------------------------------------------------------------------- +\RequirePackage{kvoptions} +\SetupKeyvalOptions{family=rl, prefix=rl@} +\DeclareStringOption[author-response]{type} +\DeclareBoolOption[true]{draft} % draft mode on by default +\DeclareComplementaryOption{final}{draft} % [final] => draft=false +\ProcessKeyvalOptions* + +% --------------------------------------------------------------------------- +% Page geometry +% --------------------------------------------------------------------------- +\RequirePackage[top=22mm, bottom=22mm, left=25mm, right=25mm, footskip=12mm]{geometry} + +% --------------------------------------------------------------------------- +% Fonts (XeLaTeX): Libertinus for Latin, xeCJK for 中文 +% --------------------------------------------------------------------------- +\RequirePackage{amsmath} +\RequirePackage{amssymb} +\IfFileExists{libertinus-otf.sty}{% + \RequirePackage[mono=false]{libertinus-otf}% +}{% + \RequirePackage{fontspec}% + \setmainfont{TeX Gyre Termes}% + \setsansfont{TeX Gyre Heros}% +} +\RequirePackage{microtype} + +\RequirePackage{xeCJK} +% Default CJK fonts — overridable via \ResponseSetup{cjkfont=..., cjksffont=...} +\providecommand{\rl@cjkmain}{Songti SC} +\providecommand{\rl@cjksans}{PingFang SC} +\setCJKmainfont{\rl@cjkmain} +\setCJKsansfont{\rl@cjksans} + +% --------------------------------------------------------------------------- +% Colour palette (slate-indigo base; edit here to re-theme) +% --------------------------------------------------------------------------- +\RequirePackage{xcolor} +\definecolor{rlprimary}{HTML}{1F3A5F} % titles, RC card frame, AR label +\definecolor{rlcardbg}{HTML}{F4F6F9} % RC card background +\definecolor{rltext}{HTML}{1A1A1A} +\definecolor{rlauxrule}{HTML}{C9D2DE} % thin separators inside cards +\definecolor{rleasy}{HTML}{2E9E5B} % difficulty: easy +\definecolor{rlmedium}{HTML}{D99100} % difficulty: medium +\definecolor{rlhard}{HTML}{D64545} % difficulty: hard +\definecolor{rltodo}{HTML}{6B7785} % status: todo +\definecolor{rlwip}{HTML}{2D6CDF} % status: wip +\definecolor{rldone}{HTML}{2E9E5B} % status: done +\definecolor{rlnote}{HTML}{B5731A} % \note annotation accent +\definecolor{rlmsframe}{HTML}{8A949E} % manuscript box frame +\definecolor{rlmsbg}{HTML}{FCFCFD} % manuscript box background + +% --------------------------------------------------------------------------- +% Core packages +% --------------------------------------------------------------------------- +\RequirePackage{graphicx} +\RequirePackage{booktabs} +\RequirePackage{tabularx} +\RequirePackage{adjustbox} +\RequirePackage{soul} +\RequirePackage{xstring} +\RequirePackage[hidelinks]{hyperref} +\RequirePackage{xr-hyper} % enables \linkexternal (harmless if unused) +\RequirePackage[skins,breakable]{tcolorbox} +\RequirePackage{tikz} + +% --------------------------------------------------------------------------- +% Paragraph & section styling +% --------------------------------------------------------------------------- +\setlength{\parskip}{0.6\baselineskip} +\setlength{\parindent}{0pt} + +\RequirePackage{titlesec} +\titleformat{\section} + {\normalfont\large\sffamily\bfseries\color{rlprimary}} + {\makebox[0pt][r]{\thesection.\hspace{4mm}}}{0em}{} +\titleformat{\subsection} + {\normalfont\sffamily\bfseries\color{rlprimary}} + {\makebox[0pt][r]{\thesubsection.\hspace{4mm}}}{0em}{} +\titlespacing{\subsection}{0em}{1em}{-0.3em} + +% --------------------------------------------------------------------------- +% Badge helper: a rounded coloured pill (used for difficulty & status) +% --------------------------------------------------------------------------- +\newcommand{\rl@badge}[2]{% + \tikz[baseline=(b.base)]{% + \node[fill=#1, text=white, font=\sffamily\bfseries\footnotesize, + rounded corners=2pt, inner xsep=5pt, inner ysep=1.5pt, + anchor=base] (b) {\strut #2};}% +} + +% --------------------------------------------------------------------------- +% Reviewer Comment (RC) — a card with optional difficulty/status + \zh/\note +% --------------------------------------------------------------------------- +\pgfkeys{ + /rl/rc/.cd, + difficulty/.is choice, + difficulty/none/.code={\def\rl@rcdiff{}}, + difficulty/easy/.code={\def\rl@rcdiff{\rl@badge{rleasy}{Easy}}}, + difficulty/medium/.code={\def\rl@rcdiff{\rl@badge{rlmedium}{Medium}}}, + difficulty/hard/.code={\def\rl@rcdiff{\rl@badge{rlhard}{Hard}}}, + status/.is choice, + status/none/.code={\def\rl@rcstatus{}}, + status/todo/.code={\def\rl@rcstatus{\rl@badge{rltodo}{TODO}}}, + status/wip/.code={\def\rl@rcstatus{\rl@badge{rlwip}{WIP}}}, + status/done/.code={\def\rl@rcstatus{\rl@badge{rldone}{DONE}}}, +} + +\newtcolorbox{rl@rcbox}[1][]{% + enhanced, breakable, sharp corners=northwest, + colback=rlcardbg, colframe=rlprimary, colbacktitle=rlprimary, + coltitle=white, fonttitle=\sffamily\bfseries, + boxrule=0.6pt, leftrule=3pt, arc=3pt, + left=10pt, right=10pt, top=6pt, bottom=6pt, toptitle=2pt, bottomtitle=2pt, + #1% +} + +% Hanging "RC:" label for final mode (mirrors \rl@arlabel) +\newcommand{\rl@rclabel}{\sffamily\bfseries\color{rlprimary}RC:} + +% draft : boxed card with optional difficulty/status badges + \zh/\note +% final : plain italic text with a hanging "RC:" label — a clean English Q&A, +% so that only \begin{manuscript} keeps a box in the submission version. +\newenvironment{RC}[1][]{% + \def\rl@rcdiff{}\def\rl@rcstatus{}% + \pgfkeys{/rl/rc/.cd,difficulty=none,status=none,#1}% + \ifrl@draft + \edef\rl@rctitle{\noexpand RC\noexpand\hfill + \noexpand\rl@rcdiff\noexpand\hspace{4pt}\noexpand\rl@rcstatus}% + \begin{rl@rcbox}[title={\rl@rctitle}]% + \itshape\color{rltext}% + \else + % Defer the hanging "RC:" label to the first *real* paragraph: pandoc emits a + % blank line (\par) between \begin{RC} and the body, which \ignorespaces cannot + % swallow — without this the label would be stranded on its own line. + \par + \itshape\color{rltext}% + \everypar{\makebox[0pt][r]{\rl@rclabel\hspace{1em}}\everypar{}}% + \ignorespaces + \fi +}{% + \ifrl@draft + \end{rl@rcbox}% + \else + \par + \fi +} + +% Auxiliary draft-only block inside an RC card (used by \zh and \note) +\newcommand{\rl@auxblock}[3]{% + \par\addvspace{5pt}% + \noindent{\color{rlauxrule}\rule{\linewidth}{0.4pt}}\par\nobreak\addvspace{4pt}% + \noindent\rl@badge{#1}{#2}\hspace{0.6em}% + \begingroup\upshape\color{rltext}#3\par\endgroup +} +\ifrl@draft + \newcommand{\zh}[1]{\rl@auxblock{rlprimary}{中文}{#1}} + \newcommand{\note}[1]{\rl@auxblock{rlnote}{批注}{#1}} +\else + \newcommand{\zh}[1]{} + \newcommand{\note}[1]{} +\fi + +% --------------------------------------------------------------------------- +% Author Response (AR) — hanging "AR:" label; starred = unlabeled continuation +% --------------------------------------------------------------------------- +\newcommand{\rl@arlabel}{\sffamily\bfseries\color{rlprimary}AR:} +\newcommand{\AR}{\@ifstar\rl@ARcont\rl@AR} +\newcommand{\rl@AR}{\par\noindent\makebox[0pt][r]{\rl@arlabel\hspace{1em}}\ignorespaces} +\newcommand{\rl@ARcont}{\par\noindent\ignorespaces} + +% --------------------------------------------------------------------------- +% Manuscript text — a framed quote with page/line metadata +% --------------------------------------------------------------------------- +\pgfkeys{ + /rl/ms/.cd, + page/.store in=\rl@mspage, + sline/.store in=\rl@mssline, + eline/.store in=\rl@mseline, +} + +\newtcolorbox{rl@msbox}[1][]{% + enhanced, breakable, + colback=rlmsbg, colframe=rlmsframe, colbacktitle=rlmsframe, + coltitle=white, fonttitle=\sffamily\bfseries\small, + boxrule=0.6pt, arc=2pt, + left=10pt, right=10pt, top=6pt, bottom=6pt, toptitle=2pt, bottomtitle=2pt, + #1% +} + +\newcommand{\rl@mstitle}{% + Manuscript% + \ifx\rl@mseline\empty + \IfInteger{\rl@mspage}{ \textnormal{·} Page \rl@mspage, Line \rl@mssline}% + { \textnormal{·} \rl@mspage}% + \else + \ \textnormal{·} Page \rl@mspage, Line \rl@mssline--\rl@mseline% + \fi +} + +\newenvironment{manuscript}[1][]{% + \def\rl@mspage{Unknown}\def\rl@mssline{}\def\rl@mseline{}% + \pgfkeys{/rl/ms/.cd,#1}% + \begin{rl@msbox}[title={\rl@mstitle}]% +}{% + \end{rl@msbox}% +} + +% Backward-compatible alias: \begin{quote}[page=..,sline=..,eline=..] +\renewenvironment{quote}[1][]{\begin{manuscript}[#1]}{\end{manuscript}} + +% --------------------------------------------------------------------------- +% Optional cross-references to an external manuscript / supplement +% \linkexternal{MS}{../main/manuscript} then use \ref{MS-somelabel} +% --------------------------------------------------------------------------- +\newcommand{\linkexternal}[2]{\externaldocument[#1-]{#2}} + +% --------------------------------------------------------------------------- +% Metadata + letter head +% --------------------------------------------------------------------------- +\def\rl@papertitle{Paper Title} +\def\rl@authors{Authors} +\def\rl@journal{} +\def\rl@doi{} +\def\rl@lettertitle{} % empty => derived from package option `type` + +\pgfkeys{ + /rl/setup/.cd, + papertitle/.store in=\rl@papertitle, + authors/.store in=\rl@authors, + journal/.store in=\rl@journal, + doi/.store in=\rl@doi, + lettertitle/.store in=\rl@lettertitle, + cjkfont/.code={\setCJKmainfont{#1}}, + cjksffont/.code={\setCJKsansfont{#1}}, +} +\newcommand{\ResponseSetup}[1]{\pgfkeys{/rl/setup/.cd,#1}} + +% Default letter title and legend, driven by the `type` option +\newcommand{\rl@defaultlettertitle}{% + \IfStrEq{\rl@type}{reviewer-comments}% + {Reviewer Comments to the Manuscript}% + {Author Response to Reviews of}% +} +\newcommand{\rl@legend}{% + \hfill + {\bfseries RC:} \textit{Reviewer Comment}% + \IfStrEq{\rl@type}{reviewer-comments}{}{,\quad {\bfseries AR:} Author Response}% + ,\quad\fcolorbox{rlmsframe}{rlmsbg}{\rule{0pt}{1.4ex}\hspace{0.6em}} Manuscript text% +} + +\newcommand{\makeletterhead}{% + \begingroup + \setlength{\parskip}{0pt}% + {\Large\sffamily\bfseries\color{rlprimary}% + \ifx\rl@lettertitle\empty\rl@defaultlettertitle\else\rl@lettertitle\fi}\\[0.8em] + {\huge\bfseries \rl@papertitle}\\[0.8em] + {\rl@authors}\\[0.3em] + \ifx\rl@journal\empty\else{\itshape \rl@journal}\fi + \ifx\rl@doi\empty\else{\quad\texttt{\rl@doi}}\fi + \par\vspace{0.6em} + {\color{rlprimary}\hrule height 1pt}% + \par\vspace{0.4em} + {\small\rl@legend\par}% + \endgroup + \vspace{1em} +} + +% --------------------------------------------------------------------------- +% latexdiff support (kept; harmless when not using latexdiff output) +% --------------------------------------------------------------------------- +\RequirePackage[normalem]{ulem} +\providecommand{\DIFadd}[1]{{\protect\color{blue}\uwave{#1}}} +\providecommand{\DIFdel}[1]{{\protect\color{red}\sout{#1}}} +\providecommand{\DIFaddbegin}{} +\providecommand{\DIFaddend}{} +\providecommand{\DIFdelbegin}{} +\providecommand{\DIFdelend}{} +\providecommand{\DIFaddFL}[1]{\DIFadd{#1}} +\providecommand{\DIFdelFL}[1]{\DIFdel{#1}} +\providecommand{\DIFaddbeginFL}{} +\providecommand{\DIFaddendFL}{} +\providecommand{\DIFdelbeginFL}{} +\providecommand{\DIFdelendFL}{} + +\endinput diff --git "a/PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/templates/responseletter.template.tex" "b/PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/templates/responseletter.template.tex" new file mode 100644 index 00000000..8ffc7e7c --- /dev/null +++ "b/PaperBell/40 - Obsidian/\350\204\232\346\234\254/pandoc/templates/responseletter.template.tex" @@ -0,0 +1,26 @@ +%% pandoc LaTeX template for responseletter.sty +%% Build via the Makefile (pandoc + XeLaTeX). Variables come from response.yaml +%% (and the Makefile injects `draft` in draft mode). +\documentclass{article} +\usepackage[type=$if(type)$$type$$else$author-response$endif$$if(draft)$, draft$else$, final$endif$]{responseletter} + +\ResponseSetup{ +$if(papertitle)$ papertitle = {$papertitle$}, +$endif$$if(authors)$ authors = {$authors$}, +$endif$$if(journal)$ journal = {$journal$}, +$endif$$if(doi)$ doi = {$doi$}, +$endif$$if(lettertitle)$ lettertitle = {$lettertitle$}, +$endif$$if(cjkfont)$ cjkfont = {$cjkfont$}, +$endif$$if(cjksffont)$ cjksffont = {$cjksffont$}, +$endif$} + +$for(header-includes)$ +$header-includes$ +$endfor$ + +\begin{document} +\makeletterhead + +$body$ + +\end{document} diff --git "a/PaperBell/Outputs/PaperBell\347\224\250\346\210\267\346\226\207\346\241\243/index.md" "b/PaperBell/Outputs/PaperBell\347\224\250\346\210\267\346\226\207\346\241\243/index.md" index 541c950d..f46b2f98 100644 --- "a/PaperBell/Outputs/PaperBell\347\224\250\346\210\267\346\226\207\346\241\243/index.md" +++ "b/PaperBell/Outputs/PaperBell\347\224\250\346\210\267\346\226\207\346\241\243/index.md" @@ -1,7 +1,8 @@ --- longform: format: scenes - title: PaperBell用户文档 + title: PaperBell 用户文档 + draftTitle: Manuscript workflow: CompileWithTitledFormatters sceneFolder: 功能介绍 scenes: diff --git "a/PaperBell/Outputs/PaperBell\347\224\250\346\210\267\346\226\207\346\241\243/\345\212\237\350\203\275\344\273\213\347\273\215/\345\257\274\345\207\272\345\255\246\346\234\257\346\226\207\346\241\243.md" "b/PaperBell/Outputs/PaperBell\347\224\250\346\210\267\346\226\207\346\241\243/\345\212\237\350\203\275\344\273\213\347\273\215/\345\257\274\345\207\272\345\255\246\346\234\257\346\226\207\346\241\243.md" index 1c8aed6d..16b328c5 100644 --- "a/PaperBell/Outputs/PaperBell\347\224\250\346\210\267\346\226\207\346\241\243/\345\212\237\350\203\275\344\273\213\347\273\215/\345\257\274\345\207\272\345\255\246\346\234\257\346\226\207\346\241\243.md" +++ "b/PaperBell/Outputs/PaperBell\347\224\250\346\210\267\346\226\207\346\241\243/\345\212\237\350\203\275\344\273\213\347\273\215/\345\257\274\345\207\272\345\255\246\346\234\257\346\226\207\346\241\243.md" @@ -46,6 +46,10 @@ banner_icon: 🧭 对于想要订制模板的用户,可以参考 [[笔记导出模板]] 中的说明。 +## 投稿与版本管理 + +导出只是投稿流程的一环。若你需要对手稿做版本管理、在不同投稿/返修版本之间对比差异,并把这套流程串成标准的投稿—返修—定稿工作流,请参考 [[手稿版本管理与投稿流程]]。 + ## 相关链接 - [Obsidian Enhancing Export](https://github.com/mokeyish/obsidian-enhancing-export) diff --git a/PaperBell/Outputs/demo/DEMO_manuscript.md b/PaperBell/Outputs/demo/DEMO_manuscript.md deleted file mode 100644 index e3e6b41c..00000000 --- a/PaperBell/Outputs/demo/DEMO_manuscript.md +++ /dev/null @@ -1,2378 +0,0 @@ ---- -title: "PaperBell:基于 Obsidian 的学术写作管理系统" -date: "2025-10-11" -authors: - - name: "Shuang Song" - affiliation: [1, 2] - corresponding: "paperbell@songshgeo.com" - - name: "Sen Jiang" - affiliation: [2] -affiliations: - - index: 1 - name: "Max Planck Institute of Geoanthropology, Jena, Germany" - - index: 2 - name: "PaperBell Technology, Beijing, China" -abstract: "本文介绍了 PaperBell 学术写作管理系统,一套基于 Obsidian、Longform、Pandoc 和 LaTeX 的现代化学术写作解决方案。传统的 Microsoft Word 写作存在版本追踪混乱、输入输出分离、格式调整分散注意力等问题。虽然 Markdown 写作具有纯文本、版本控制友好、易于自动化等优势,但传统 Markdown 工作流在长文本管理、导出格式和手动调整方面仍有局限。PaperBell 通过整合项目化管理、数据驱动写作、智能元数据管理和专业级 PDF 导出等核心特性,系统性地解决了这些问题。本文从引言、结果、讨论、方法四个方面全面介绍了 PaperBell 的设计理念、核心特性、配置方案、最佳实践和安装步骤,为学术研究者提供了一套完整的现代化写作工具链。" -keywords: - - "academic writing" - - "Obsidian" - - "Longform" - - "Pandoc" - - "LaTeX" - - "knowledge management" - - "workflow automation" -target: "PaperBell Documentation" -acronym: "DEMO" -csl: "nature" -style: "" -template: "paperbell-windows" ---- - -## 引言 - -### 传统学术写作的挑战 - -学术写作是科研工作者的核心技能之一,然而传统的 Microsoft Word 写作方式存在诸多局限性。首先,**版本追踪混乱**是困扰研究者的主要问题。当不断修改文章时,`manuscript_v1.docx`、`manuscript_v2_revised.docx`、`manuscript_final_really_final.docx` 等文件名层出不穷,版本管理混乱不堪([@fig:daily])。本人写第一篇论文[@song2019]的时候就深受其苦,最后电脑里存了十几个版本。其次,**输入与输出分离**导致工作流割裂:研究者需要在文献管理软件(如 Zotero)、数据分析工具(如 R/Python)、写作软件(Word)之间频繁切换,手动复制粘贴数据和引用。第三,**格式调整分散注意力**:研究者常常陷入字体、行距、页边距的调整中,无法专注于内容创作本身。对我这样注重科研美学的人,经常调着调着格式就忘了自己的写作主线。 - -![科研人日常:整理不同版本的文稿](organizing.png){#fig:daily height=300px} - -上述这些问题不仅降低了写作效率,还增加了错误风险。例如,当实验数据更新时,需要手动在文档中逐一查找并修改所有相关数值;当投稿不同期刊时,需要重新调整格式和引用样式,耗时耗力。 - -### Markdown 写作的优势与局限 - -近年来,越来越多的学者开始在 Obsidian 等知识管理工具中使用 Markdown 进行写作。Markdown 是一种轻量级标记语言,具有显著优势: - -1. **纯文本格式**:文件体积小(通常只有 Word 文档的 1/10),不易损坏崩溃,即使在大型项目中也能保持稳定性 -2. **版本控制友好**:纯文本易于使用 Git 等版本控制系统,可以精确追踪每一行修改,实现真正的协作写作 -3. **自动化潜力**:纯文本易于批量处理,支持正则表达式替换、脚本化操作和变量更新 -4. **跨平台兼容**:任何文本编辑器都能打开编辑,不依赖特定软件 - -然而,传统的 Markdown 学术写作仍存在痛点。**长文本管理困难**是首要问题:一篇完整的论文动辄数千字,单个 Markdown 文件难以管理和导航。**导出格式不佳**是另一大障碍:默认的 Markdown 转 PDF 功能生成的文档格式简陋,无法满足期刊投稿的专业要求。**手动调整格式**的问题依然存在:研究者仍需花费大量时间处理引用格式、图表编号、交叉引用等细节 ([@fig:formatting])。 - -![使用 Markdown 进行写作时,如何转化成专业的论文排版是让人头疼的](formatting.png){#fig:formatting height=300px} - -### PaperBell 工作流的创新价值 - -PaperBell 是一套基于 Obsidian 的学术写作管理系统,通过整合 **Longform**、**Pandoc**、**LaTeX** 等先进工具,系统性地解决了上述问题: - -1. **项目化管理**:通过 Longform 插件实现论文项目的结构化组织,支持章节拆分、场景排序和多项目并行 -2. **数据驱动写作**:通过占位符系统(如 `{{results.correlation}}`)实现数据与文本的动态绑定,数据更新时自动同步 -3. **专业级导出**:通过自定义 Pandoc 模板和 LaTeX 引擎,生成符合期刊要求的高质量 PDF 文档 -4. **完整工作流集成**:从 Zotero 文献管理到最终 PDF 输出的全流程数字化,打通输入-处理-输出链路 - -PaperBell 的核心优势在于:**保留 Markdown 写作的灵活性,同时提供 Word 级别的专业输出**。研究者可以专注于内容创作,将格式调整、引用管理、数据更新等重复性工作交给自动化工具处理。 - -### 本文的目标与结构 - -本文旨在全面介绍 PaperBell 学术写作工作流的实现原理、配置方法和最佳实践。我们将从以下四个方面展开: - -1. **引言(本章)**:阐述传统写作方式的局限性和 PaperBell 的创新价值 -2. **结果**:展示 PaperBell 的核心特性和功能演示 -3. **讨论**:探讨常用配置方案、最佳实践和进阶自定义技巧 -4. **方法**:详细说明安装步骤、配置方法和故障排除指南 - -通过阅读本文,研究者将能够: - -- 理解 PaperBell 工作流的设计理念和技术架构 -- 掌握从项目创建到 PDF 导出的完整操作流程 -- 学会针对不同期刊要求进行定制化配置 -- 解决常见的技术问题和格式调整需求 - -PaperBell 不仅是一套工具集合,更是一种现代化的学术写作范式:**以内容为核心,以自动化为手段,以专业输出为目标**。让我们开始探索这套强大的学术写作系统。 - -## 结果 - -本章展示 PaperBell 学术写作系统的核心特性和功能实现,通过具体示例说明各个组件如何协同工作,实现从写作到发布的完整流程。 - -### 特性一:项目化的长文本管理 - -#### Longform 插件集成 - -PaperBell 通过 Longform 插件实现论文的项目化管理,解决了单文件长文本难以维护的问题。每个研究项目以文件夹形式组织: - -```text -Outputs/DEMO_Manuscript/ -├── source/ # 章节源文件 -│ ├── Introduction.md -│ ├── Methods.md -│ ├── Results.md -│ └── Discussion.md -├── imgs/ # 图片资源 -├── Index.md # 元数据配置 -├── results.json # 分析数据 -└── manuscript.md # 编译输出 -``` - -这种结构化组织具有显著优势: - -- **模块化写作**:每个章节独立编辑,降低认知负担(建议每章 < 500 行) -- **灵活排序**:通过拖拽调整章节顺序,无需重命名文件 -- **协作友好**:多人可同时编辑不同章节,避免版本冲突 -- **版本追踪**:Git 可精确追踪每个章节的修改历史 - -#### 场景(Scenes)系统 - -Longform 的场景系统支持复杂的文档结构。研究者可以创建章节组(如 Part I: Background),也可以将章节标记为草稿或待审阅状态: - -```yaml ---- -scene_title: "Methods" -tags: [draft, peer-review] -status: in-progress ---- -``` - -编译时,Longform 会按照预设顺序自动合并所有章节,生成完整手稿。需要注意小标题的层级排布: - -> [!tip] 标题层级说明 -> -> 在 PaperBell 的 Longform 写作中,标题层级遵循以下规则: -> -> 1. **文档标题**(`title` in YAML)→ LaTeX 的 `\maketitle` -> 2. **Scene 标题**(`scene_title` in frontmatter)→ LaTeX 的 `\section`(二级标题 `##`) -> 3. **Scene 内的标题** → 从 `\subsection` 开始(三级标题 `###`) -> -> 这样可以确保最终 PDF 文档的标题层级结构清晰一致。 - -### 特性二:数据驱动的动态写作 - -> [!warning] -> -> 注意,本功能通过 Longform 的编译脚本 "Replace placeholders from JSON" 实现,如果你需要启用此功能,请将在“PaperBell 编译标准流程”(PaperBell-Standard)的基础上,将该脚本加入编译流程,并置于保存笔记(Save as Note)流程之前。 - -#### 占位符系统 - -PaperBell 的占位符系统实现了数据与文本的动态绑定。研究者在写作时使用占位符引用数据: - -```markdown -我们整合了 {{results1.n_datasets}} 个重建数据集, -Pearson 相关系数为 {{results1.corr}}(p < 0.01)。 -``` - -对应的 `results.json` 文件包含实际数值: - -```json -{ - "results1": { - "n_datasets": 10, - "corr": 0.41, - "n_pass_years": 30, - "sig_sites_ratio": 0.9 - } -} -``` - -编译时,自定义脚本 `替换结果占位符.js` 自动将占位符替换为实际数值,生成: - -```markdown -我们整合了 10 个重建数据集, -Pearson 相关系数为 0.41(p < 0.01)。 -``` - -#### 路径解析能力 - -占位符系统支持复杂的数据结构访问: - -- **嵌套对象**:`{{study.phase1.participants}}` → 访问 study.phase1.participants -- **数组索引**:`{{datasets[0].name}}` → 访问 datasets 数组第一个元素的 name 属性 -- **混合路径**:`{{results.sites[2].correlation}}` → 嵌套对象与数组组合 - -这种灵活性使得研究者可以高效管理复杂的分析结果,实现真正的数据驱动写作。 - -#### 自动化优势 - -当实验数据更新时,研究者只需修改 `results.json` 文件,重新编译即可更新文档中所有相关数值。这避免了手动查找替换的错误风险,特别适合多次修订的论文项目。 - -### 特性三:智能化的元数据管理 - -#### YAML 前置元数据 - -PaperBell 使用 YAML 格式集中管理论文元数据,包括标题、作者、机构、摘要、关键词等: - -```yaml ---- -title: "Archival documentation reveals perceptual bias" -date: "2025-10-11" - -authors: - - name: "Shuang Song" - affiliation: [1, 2, 3] - corresponding: "song@gea.mpg.de" - - name: "Bo Hu" - affiliation: [4] - -affiliations: - - index: 1 - name: "Max Planck Institute of Geoanthropology" - - index: 2 - name: "Beijing Normal University" - -abstract: "It is well-documented that..." -keywords: ["collective memory", "extreme events"] - -target: "Nature Human Behaviour" -acronym: "DEMO" -csl: "nature" ---- -``` - -#### 自动化元数据注入 - -Longform 自定义脚本 `编译后增加头文件.js` 在编译时自动读取元数据,并注入到最终文档。该脚本具有以下特点: - -1. **用户选项优先**:如果在编译时手动指定选项(如引用样式),会覆盖元数据中的默认值 -2. **完整作者信息处理**:自动解析作者-机构索引关系,标记通讯作者 -3. **灵活格式配置**:支持行号、图表位置、引用样式等动态选项 - -#### 多期刊适配 - -同一份手稿可以通过调整元数据快速适配不同期刊: - -```yaml - -# 投稿 Nature 系列 -csl: "nature" -target: "Nature Human Behaviour" - -# 投稿 APA 期刊 -csl: "apa" -target: "Journal of Environmental Psychology" -``` - -编译时自动应用对应的引用格式和排版样式,无需手动调整。 - -### 特性四:专业级的 PDF 导出 - -#### PaperBell 学术模板 - -PaperBell 提供了基于 Eisvogel 定制的 LaTeX 模板 `paperbell.latex`,专为学术手稿设计。模板特性包括: - -1. **统一字体系统**:全文使用 Times New Roman(标题、正文、图表标题、页眉页脚),符合国际期刊标准 -2. **智能行号控制**:支持 `lineno: "true"` 选项显示行号,便于审稿和讨论;参考文献部分自动关闭行号 -3. **图表位置灵活性**:支持 `figures-at-end: "true"` 将所有图表置于文末(参考文献之前) -4. **页眉页脚定制**: - - 左页眉:Manuscript: {acronym} - - 右页眉:{date} - - 左页脚:Submission: {target} - - 右页脚:页码 -5. **图表标题格式化**:无缩进、两端对齐、Times New Roman 字体、加粗标签 -6. **紧凑学术格式**:优化标题间距,移除不必要的空白 - -#### Pandoc 编译流程 - -PaperBell 使用 Pandoc 作为文档转换引擎,配置文件 `pdf.yaml` 定义了完整的编译流程: - -```yaml -from: markdown+tex_math_single_backslash+wikilinks_title_after_pipe -pdf-engine: xelatex -template: paperbell.latex - -filters: - - pandoc-crossref # 交叉引用 - - citeproc # 引用处理 - -metadata: - numbersections: true - link-citations: true -``` - -编译过程如下: - -1. **Markdown 解析**:支持扩展语法(数学公式、Wiki 链接、表格) -2. **交叉引用处理**:`pandoc-crossref` 解析 `{#fig:label}` 和 `[@eq:label]` -3. **引用格式化**:`citeproc` 根据 CSL 文件格式化参考文献 -4. **LaTeX 渲染**:`xelatex` 生成最终 PDF - -#### 多种导出选项 - -PaperBell 支持通过 Obsidian Enhancing Export 插件或命令行进行 PDF 导出: - -**插件导出(推荐)**: - -- 在 Obsidian 中右键点击 `manuscript.md` -- 选择 "Export with Enhancing Export" -- 选择 "PaperBell Academic" 配置 -- 自动生成 PDF - -**命令行导出**: - -```bash -pandoc manuscript.md -o output.pdf \ - --defaults="40 - Obsidian/脚本/Pandoc/defaults/pdf.yaml" \ - -M lineno=true \ - -M figures-at-end=false -``` - -命令行方式适合批量编译和自动化流程(如 GitHub Actions)。 - -### 特性五:完整的引用管理集成 - -#### Zotero 联动 - -PaperBell 通过 ZotLit 插件实现与 Zotero 的深度集成: - -1. **文献导入**:在 Zotero 中标注文献后,右键选择 "Create Literature Note(s)",自动导入到 Obsidian -2. **高亮同步**:Zotero 中的彩色高亮和批注自动转换为 Obsidian 笔记 -3. **引用键生成**:自动生成引用键(如 `song2025collective`),用于文中引用 - -#### 引用工作流 - -在写作时使用 Pandoc 引用语法: - -```markdown -已有研究表明集体记忆影响气候适应 [@song2025collective; @smith2023memory]。 -如 @jones2024perception 所述,认知偏差广泛存在。 -``` - -编译时自动格式化为: - -> 已有研究表明集体记忆影响气候适应 (Song et al., 2025; Smith et al., 2023)。 -> 如 Jones et al. (2024) 所述,认知偏差广泛存在。 - -参考文献列表自动生成并格式化: - -> **References** -> -> Jones, A., et al. (2024). Perception and cognition. *Nature*, 123, 456-789. -> -> Smith, B., et al. (2023). Memory studies. *Science*, 234, 567-890. - -#### 多样化的引用样式 - -PaperBell 支持数千种期刊的引用样式(通过 CSL 文件): - -- **Nature 系列**:数字上标 [1, 2] -- **APA 格式**:作者-日期 (Author, 2024) -- **国标格式**:[1] 作者, 标题, 期刊, 年份 - -只需在元数据中指定 `csl: "nature"` 或 `csl: "apa"`,即可自动应用对应样式。 - -### 特性六:交叉引用与编号系统 - -#### 图表自动编号 - -使用 `pandoc-crossref` 过滤器,PaperBell 实现了智能的图表编号: - -```markdown -![研究区域地图](imgs/study_area.png){#fig:map} - -如 [@fig:map] 所示,研究区域位于... -``` - -编译后自动生成: - -> **Figure 1.** 研究区域地图 -> -> 如 Figure 1 所示,研究区域位于... - -#### 公式编号 - -数学公式同样支持自动编号: - -```markdown -我们使用以下模型: - -$$ y = \beta_0 + \beta_1 x + \epsilon $$ {#eq:model} - -根据 [@eq:model],我们估计参数... -``` - -编译后: - -> 我们使用以下模型: -> -> $$ y = \beta_0 + \beta_1 x + \epsilon \quad (1) $$ -> -> 根据 Equation 1,我们估计参数... - -#### 表格编号 - -表格编号与图表一致: - -```markdown -| 变量 | 均值 | 标准差 | -|------|------|--------| -| 温度 | 15.3 | 2.1 | -| 降水 | 800 | 120 | - -Table: 描述统计 {#tbl:stats} - -[@tbl:stats] 展示了描述统计结果。 -``` - -编译后自动编号并生成引用。 - -### 特性七:版本控制与协作 - -#### Git 集成 - -PaperBell 项目天然适合 Git 版本控制: - -```bash - -# 追踪修改 -git add Outputs/DEMO_Manuscript/source/Results.md -git commit -m "Add correlation analysis" - -# 创建版本标签 -git tag -a v1.0-draft -m "First complete draft" - -# 多人协作 -git checkout -b coauthor-revision -``` - -纯文本格式使得 Git 可以精确显示每一行的修改,方便审阅和回滚。 - -#### 协作写作场景 - -PaperBell 支持多种协作模式: - -1. **分章节协作**:作者 A 编辑 Methods.md,作者 B 编辑 Results.md,互不干扰 -2. **审阅-修订循环**:导出带行号的 PDF 供审稿人标注,根据行号快速定位修改 -3. **版本对比**:使用 Git diff 精确对比不同版本的修改内容 - -#### 云同步支持 - -除 Git 外,PaperBell 项目也兼容各种云同步服务: - -- **iCloud**:Mac 用户的自动同步方案 -- **OneDrive/Dropbox**:跨平台云存储 -- **Obsidian Sync**:官方加密同步服务 - -小文件特性确保同步速度快且不易产生冲突。 - -### 特性八:可扩展的自动化系统 - -#### 自定义 Longform 脚本 - -PaperBell 提供了两个核心自定义脚本,用户也可以编写自己的脚本: - -1. **编译后增加头文件.js**: - - 从 Index.md 读取元数据 - - 注入 YAML 前置内容 - - 支持用户选项覆盖 - -2. **替换结果占位符.js**: - - 解析 results.json - - 替换 {{path.to.value}} 占位符 - - 支持嵌套对象和数组 - -#### Pandoc 过滤器 - -用户可以编写 Lua 过滤器扩展 Pandoc 功能: - -```lua --- 自动添加图表前缀 -function Image(elem) - elem.caption = pandoc.Str("Figure: ") .. elem.caption - return elem -end -``` - -#### 批量处理脚本 - -PaperBell 支持批量编译多个项目: - -```bash -#!/bin/bash -for project in Outputs/*/manuscript.md; do - pandoc "$project" --defaults=pdf.yaml -o "${project%.md}.pdf" -done -``` - -这些自动化能力使 PaperBell 能够适应各种复杂的科研写作场景。 - -### 小结 - -本章展示了 PaperBell 的八大核心特性:项目化管理、数据驱动写作、智能元数据、专业导出、引用集成、交叉引用、版本控制和可扩展性。这些特性协同工作,构建了一套完整的现代化学术写作系统。 - -下一章将讨论如何根据不同场景配置 PaperBell,分享最佳实践和进阶自定义技巧。 - -## 讨论 - -本章探讨 PaperBell 在不同学术写作场景下的配置方案,分享经过实践验证的最佳实践,并介绍进阶自定义技巧。 - -### 常用配置方案 - -> [!tip] Pandoc Defaults 与 Template 配置说明 -> -> PaperBell 的导出系统基于 Pandoc 的 defaults 文件配置。在 `40 - Obsidian/脚本/pandoc/defaults/` 目录下,我们提供了两个预配置的 defaults 文件: -> -> - **paperbell.yaml** - macOS/Linux 系统使用(中文字体:Songti SC、Heiti SC、STFangsong) -> - **paperbell-windows.yaml** - Windows 系统使用(中文字体:SimSun、SimHei、FangSong) -> -> 这两个配置文件的主要区别在于**中文字体设置**,以适应不同操作系统的字体可用性。 -> -> #### 自动检测与手动指定 -> -> 在 Longform 编译时,"Add YAML Metadata" 脚本会: -> -> 1. **自动检测操作系统**(如果 Template 选项留空): -> - macOS/Linux → 使用 `paperbell` 模板 -> - Windows → 使用 `paperbell-windows` 模板 -> -> 2. **支持手动指定**:在 Template 文本框中输入任何模板名称,如: -> - `paperbell` - 使用 Unix 版本 -> - `paperbell-windows` - 使用 Windows 版本 -> - `eisvogel` - 使用 Eisvogel 模板 -> - `my-custom` - 使用你自己的自定义模板 -> -> #### 创建自定义工作流 -> -> 你完全可以定义自己的 defaults 配置文件和工作流: -> -> 1. 在 `40 - Obsidian/脚本/pandoc/defaults/` 创建新的 `.yaml` 文件 -> 2. 在 `40 - Obsidian/脚本/pandoc/templates/` 创建新的 `.latex` 模板 -> 3. 在 Longform 编译时的 Template 选项中指定你的配置名称 -> -> 例如,创建 `my-workflow.yaml` 后,在编译时输入 `my-workflow` 即可使用。 -> -> **相关文件路径**: -> -> ```bash -> 40 - Obsidian/脚本/pandoc/ -> ├── defaults/ # Pandoc 默认配置文件 -> │ ├── paperbell.yaml -> │ ├── paperbell-windows.yaml -> │ ├── beamer.yaml -> │ └── crossref.yaml -> ├── templates/ # LaTeX 模板文件 -> │ └── paperbell.latex -> ├── filters/ # Pandoc Lua 过滤器 -> └── csl/ # 引用样式文件 -> ``` - -#### 方案一:快速投稿配置(Clean Submission) - -**适用场景**:论文已基本定稿,准备首次投稿 - -**配置要点**: - -```yaml ---- -title: "Your Research Title" -date: "2025-10-11" -target: "Nature Human Behaviour" -acronym: "YourAcronym" -csl: "nature" - -# 关键设置 -lineno: "false" # 不显示行号 -figures-at-end: "false" # 图表嵌入正文 -titlepage: true # 生成封面页 ---- -``` - -**Longform 编译步骤**: - -1. Strip Frontmatter -2. Remove Links -3. Prepend Title -4. Concatenate Text -5. Add YAML Metadata(Note Name: `Index`) -6. Replace placeholders from JSON -7. Save as Note - -**导出设置**: - -- 使用 "PaperBell Academic" 配置 -- 确保所有图片为高分辨率(≥300 DPI) -- 检查参考文献格式与目标期刊一致 - -**检查清单**: - -- [ ] 字数符合期刊要求 -- [ ] 图表数量在限制内 -- [ ] 所有引用在 .bib 文件中 -- [ ] 作者信息完整准确 -- [ ] 摘要和关键词符合要求 - -#### 方案二:审稿讨论配置(Review Version) - -**适用场景**:发送给合作者或审稿人审阅 - -**配置要点**: - -```yaml ---- -lineno: "true" # 显示行号便于标注 -figures-at-end: "false" # 图表嵌入便于阅读 -titlepage: true ---- -``` - -**为什么显示行号?** - -- 便于审稿人精确指出需要修改的位置 -- 便于作者团队讨论时引用具体段落 -- 便于记录修订历史(如 "Line 156: revised as suggested") - -**协作建议**: - -- 导出 PDF 时在文件名中注明版本和日期:`manuscript_v2_20251011_review.pdf` -- 使用 Git 标签标记审稿版本:`git tag -a review-v2 -m "Sent to co-authors"` -- 创建修订记录文档,记录每个行号的修改内容 - -#### 方案三:修订响应配置(Revision Response) - -**适用场景**:响应审稿意见,准备修订稿 - -**工作流程**: - -1. **创建修订分支**: - -```bash -git checkout -b revision-round1 -``` - -2. **配置双版本对比**: - -```yaml - -# original.yaml -lineno: "true" -csl: "nature" - -# revised.yaml -lineno: "true" -csl: "nature" -highlight-changes: true # 标记修改内容(需自定义过滤器) -``` - -3. **使用占位符记录修改**: -在 `results.json` 中添加修订信息: - -```json -{ - "revision": { - "response_to_reviewer1": "We have added additional analysis as suggested...", - "new_sample_size": 150, - "previous_sample_size": 120 - } -} -``` - -在修订说明文档中引用: - -```markdown -**Reviewer 1, Comment 3**: Sample size seems insufficient. - -**Response**: We have increased the sample size from -{{revision.previous_sample_size}} to {{revision.new_sample_size}}. -``` - -#### 方案四:期刊特定配置 - -##### Nature 系列期刊 - -```yaml ---- -csl: "nature" -target: "Nature Human Behaviour" -reference-section-title: "References" - -# Nature 特定要求 -lineno: "false" -figures-at-end: "false" # 图表嵌入正文 -titlepage: false # 不需要单独封面 -numbersections: true ---- -``` - -**注意事项**: - -- Nature 系列使用数字上标引用 [1, 2] -- 图表标题格式:**Figure 1 |** Title in sentence case. -- 参考文献按引用顺序排列 - -##### Science 系列期刊 - -```yaml ---- -csl: "science" -target: "Science" -reference-section-title: "References and Notes" - -# Science 特定要求 -lineno: "true" # 初稿需要行号 -figures-at-end: "true" # 图表置于文末 -titlepage: false ---- -``` - -**注意事项**: - -- Science 要求图表和说明分离 -- 参考文献格式较为严格,需仔细检查 -- 补充材料需单独准备 - -##### 社会科学期刊(APA 格式) - -```yaml ---- -csl: "apa" -target: "Journal of Environmental Psychology" -reference-section-title: "References" - -# APA 格式要求 -lineno: "false" -figures-at-end: "false" -titlepage: true # 需要封面页 -abstract-title: "Abstract" -keywords-title: "Keywords" ---- -``` - -**注意事项**: - -- APA 使用作者-日期引用格式 (Author, 2024) -- 参考文献按字母顺序排列 -- 标题层级有严格规定 - -### 最佳实践 - -#### 实践一:元数据集中管理 - -**问题**:多个项目的元数据分散,难以统一维护。 - -**解决方案**:创建元数据模板和复用策略。 - -**实施步骤**: - -1. 创建作者信息库 `40 - Obsidian/authors.yaml`: - -```yaml -authors: - songshgeo: - name: "Shuang Song" - email: "song@gea.mpg.de" - affiliations: - - "Max Planck Institute of Geoanthropology" - - "Beijing Normal University" - orcid: "0000-0002-XXXX-XXXX" - - coauthor1: - name: "Bo Hu" - email: "bohu@nju.edu.cn" - affiliations: - - "Nanjing University" -``` - -2. 在新项目中引用: - -```yaml - -# 使用 templater 插件动态插入 -<%* -const authors = await tp.file.include("authors"); -%> -``` - -3. 维护机构索引映射表,确保一致性。 - -**优势**: - -- 作者信息一处修改,所有项目同步更新 -- 避免拼写错误和格式不一致 -- 便于管理大型合作项目(多作者、多机构) - -#### 实践二:数据与文本分离 - -**原则**:所有可能变化的数值都应使用占位符,而非硬编码。 - -**示例**: - -**❌ 不推荐**: - -```markdown -我们分析了 150 个样本,发现相关系数为 0.45(p < 0.01)。 -``` - -**✅ 推荐**: - -```markdown -我们分析了 {{study.n_samples}} 个样本, -发现相关系数为 {{study.correlation}}(p < {{study.pvalue}})。 -``` - -对应 `results.json`: - -```json -{ - "study": { - "n_samples": 150, - "correlation": 0.45, - "pvalue": 0.01 - } -} -``` - -**优势**: - -- 数据更新时无需逐行查找修改 -- 降低人为错误(如漏改某个数值) -- 便于进行敏感性分析(替换不同数据集) -- 便于审稿人要求的额外分析 - -**进阶技巧**: - -- 在 `results.json` 中包含数据来源和计算日期: - -```json -{ - "metadata": { - "generated_date": "2025-10-11", - "script": "analysis/main_analysis.R" - }, - "study": { - "n_samples": 150 - } -} -``` - -#### 实践三:渐进式写作策略 - -**问题**:论文初稿往往需要反复调整结构和内容。 - -**解决方案**:采用渐进式写作,充分利用 Longform 的灵活性。 - -**阶段一:大纲阶段**(Outline Phase) - -创建章节骨架,每个文件只包含标题和要点: - -```markdown - -# Introduction - -### Background -- Point 1: Traditional methods -- Point 2: Current challenges -- Point 3: Our innovation - -### Research Questions -- RQ1: ... -- RQ2: ... -``` - -**阶段二:初稿阶段**(Draft Phase) - -逐章节扩展内容,标记状态: - -```yaml ---- -status: draft -completeness: 60% -next_steps: - - Add literature review - - Expand methodology ---- -``` - -**阶段三:修订阶段**(Revision Phase) - -使用 Git 分支管理不同版本: - -```bash -git checkout -b draft-v2 - -# 大幅修改 -git checkout main -git merge draft-v2 -``` - -**阶段四:抛光阶段**(Polish Phase) - -- 启用 Linting 检查拼写和语法 -- 检查段落逻辑和过渡 -- 统一术语和表达方式 - -**优势**: - -- 降低初稿心理压力(先完成后完美) -- 便于追踪写作进度 -- 易于回滚不成熟的修改 - -#### 实践四:图表管理规范 - -**问题**:图片文件命名混乱,难以维护。 - -**解决方案**:建立图表命名和组织规范。 - -**命名规范**: - -```text -imgs/ -├── fig1_study_area_map.png # 主文图 -├── fig2_temporal_trends.png -├── fig3_spatial_patterns.png -├── figS1_validation_results.png # 补充图 -├── figS2_sensitivity_analysis.png -└── raw/ # 原始图片 - └── fig1_raw_from_gis.png -``` - -**命名模式**:`{type}{number}_{descriptive_name}.{ext}` - -**在文中引用**: - -```markdown -![Study area and sampling sites](imgs/fig1_study_area_map.png){#fig:study-area width=80%} - -As shown in [@fig:study-area], our study area covers... -``` - -**版本控制**: - -使用 `.gitattributes` 管理图片: - -```gitattributes -*.png filter=lfs diff=lfs merge=lfs -text -*.jpg filter=lfs diff=lfs merge=lfs -text -*.pdf filter=lfs diff=lfs merge=lfs -text -``` - -大型图片文件使用 Git LFS(Large File Storage)。 - -**优势**: - -- 文件名即说明,易于理解 -- 便于快速定位和替换 -- 版本控制更高效 - -#### 实践五:引用管理工作流 - -**工作流程**: - -1. **文献阅读阶段**(Zotero): - - 使用彩色高亮标注关键内容: - - 🟡 黄色:重要发现 - - 🟢 绿色:方法论 - - 🔵 蓝色:理论框架 - - 🔴 红色:局限性/疑问 - - 添加标签:`#project/DEMO`、`#method/ABM` - -2. **笔记导入阶段**(ZotLit): - - 右键选择 "Create Literature Note(s)" - - 自动导入到 `Inputs/Zotero/` - - 验证引用键格式(如 `song2025collective`) - -3. **写作引用阶段**(Obsidian): - - 使用自动完成:输入 `[@song` 触发补全 - - 多引用:`[@author1; @author2; @author3]` - - 文内引用:`@author2024 demonstrated that...` - -4. **编译检查阶段**(Pandoc): - - 检查是否有未解析的引用(会显示为 `[@unknown]`) - - 验证参考文献格式与期刊要求一致 - - 检查引用顺序(Nature 系列按引用顺序,APA 按字母顺序) - -**常见问题处理**: - -| 问题 | 解决方案 | -|------|----------| -| 引用无法解析 | 检查 .bib 文件路径,验证引用键拼写 | -| 参考文献格式错误 | 更换 CSL 文件,检查 Zotero 中的元数据 | -| 多次引用同一文献 | 使用 `-@author` 隐藏作者名,只保留年份 | - -#### 实践六:模板复用与项目快速启动 - -**问题**:每次创建新项目都需要重新配置,效率低下。 - -**解决方案**:创建项目模板和快速启动脚本。 - -**创建项目模板**: - -1. 在 `40 - Obsidian/模板/` 创建 `Longform_Project_Template/`: - -```text -Longform_Project_Template/ -├── source/ -│ ├── 01_Introduction.md -│ ├── 02_Methods.md -│ ├── 03_Results.md -│ └── 04_Discussion.md -├── imgs/.gitkeep -├── Index.md -└── results.json -``` - -2. `Index.md` 包含常用元数据框架: - -```yaml ---- -title: "{{TITLE}}" -date: "{{DATE}}" -authors: - - name: "{{AUTHOR}}" - affiliation: [1] - corresponding: "{{EMAIL}}" -affiliations: - - index: 1 - name: "{{INSTITUTION}}" -abstract: "" -keywords: [] -target: "" -acronym: "" -csl: "nature" -lineno: "false" -figures-at-end: "false" ---- -``` - -3. 使用 Templater 插件创建快速启动命令: - -```javascript -// QuickAdd script: Create Longform Project -const projectName = await tp.system.prompt("Project name"); -const acronym = await tp.system.prompt("Project acronym"); - -const template = "40 - Obsidian/模板/Longform_Project_Template"; -const target = `Outputs/${projectName}`; - -await tp.file.create_new("", projectName, false, tp.file.folder(target)); -// Copy template files... -``` - -**优势**: - -- 新项目 1 分钟内完成初始化 -- 确保项目结构一致性 -- 避免遗漏必要文件 - -### 进阶自定义 - -#### 自定义一:扩展占位符功能 - -**需求**:希望占位符支持计算和格式化(如保留小数位数、千位分隔符)。 - -**解决方案**:扩展 `替换结果占位符.js` 脚本。 - -**示例代码**: - -```javascript -// 支持格式化语法:{{value | format}} -const pattern = /{{\\s*([^|]+?)\\s*(\\|\\s*([^}]+?))?\\s*}}/g; - -const replaced = input.contents.replace(pattern, (match, path, _, format) => { - let value = getByPath(data, path.trim()); - - if (format) { - const fmt = format.trim(); - if (fmt.startsWith('toFixed')) { - const digits = parseInt(fmt.match(/\\d+/)[0]); - value = Number(value).toFixed(digits); - } else if (fmt === 'percent') { - value = (Number(value) * 100).toFixed(1) + '%'; - } else if (fmt === 'comma') { - value = Number(value).toLocaleString(); - } - } - - return String(value); -}); -``` - -**使用示例**: - -```markdown -相关系数为 {{study.correlation | toFixed2}} -样本量为 {{study.n_samples | comma}} -显著性比例为 {{study.sig_ratio | percent}} -``` - -输出: - -```text -相关系数为 0.45 -样本量为 1,250 -显著性比例为 87.3% -``` - -#### 自定义二:多语言支持 - -**需求**:同一手稿需要中英文两个版本。 - -**解决方案**:使用条件渲染和多元数据文件。 - -**实施方案**: - -1. 创建双语元数据: - -```json -{ - "title": { - "en": "Perceptual bias in collective memory", - "zh": "集体记忆中的感知偏差" - }, - "abstract": { - "en": "It is well-documented that...", - "zh": "已有充分研究表明..." - } -} -``` - -2. 修改脚本支持语言选择: - -```javascript -{ - id: "language", - name: "Document Language", - type: "Dropdown", - options: [ - { value: "en", label: "English" }, - { value: "zh", label: "中文" } - ], - default: "en" -} - -// In compile function -const lang = context.optionValues["language"]; -title = metadata.title[lang] || metadata.title; -``` - -3. 章节文本也可以使用占位符: - -```markdown - -# {{headings.introduction}} - -{{text.intro_para1}} -``` - -#### 自定义三:高级交叉引用 - -**需求**:希望引用时自动包含页码或章节信息。 - -**解决方案**:创建自定义 Pandoc Lua 过滤器。 - -**示例过滤器**(`enhanced_crossref.lua`): - -```lua -function Cite(elem) - -- 为图表引用添加 "on page X" - if elem.citations[1].id:match("^fig:") then - return { - pandoc.Str("Figure"), - pandoc.Space(), - elem, - pandoc.Str(" (on page \\pageref{" .. elem.citations[1].id .. "})") - } - end - return elem -end -``` - -在 `pdf.yaml` 中启用: - -```yaml -filters: - - enhanced_crossref.lua - - pandoc-crossref - - citeproc -``` - -#### 自定义四:自动化补充材料 - -**需求**:自动生成补充材料文档(Supplementary Information)。 - -**解决方案**:创建独立的 Longform 项目和编译配置。 - -**项目结构**: - -```text -Outputs/DEMO_Manuscript/ -├── main/ -│ └── manuscript.md # 主文档 -└── supplementary/ - ├── source/ - │ ├── S1_Methods.md - │ ├── S2_Results.md - │ └── S3_Figures.md - ├── Index_SI.md - └── supplementary.md # 补充材料编译输出 -``` - -**配置差异**: - -```yaml - -# Index_SI.md ---- -title: "Supplementary Information" -subtitle: "Perceptual bias in collective memory" -numbersections: true -section-numbering: "S" # 章节编号前缀 S -figure-numbering: "S" # 图表编号前缀 S ---- -``` - -**批量编译**: - -```bash - -# compile_all.sh -pandoc main/manuscript.md -o manuscript.pdf --defaults=pdf.yaml -pandoc supplementary/supplementary.md -o SI.pdf --defaults=pdf_si.yaml -``` - -#### 自定义五:集成外部数据源 - -**需求**:直接从数据库或 API 获取最新数据,而非手动更新 JSON。 - -**解决方案**:创建数据同步脚本。 - -**示例**(Python): - -```python - -# sync_data.py -import json -import requests -from pathlib import Path - -def fetch_analysis_results(project_id): - """从远程服务器获取分析结果""" - response = requests.get(f"https://api.example.com/results/{project_id}") - return response.json() - -def update_results_json(project_path, data): - """更新 results.json""" - results_file = Path(project_path) / "results.json" - with open(results_file, 'w') as f: - json.dump(data, f, indent=2) - -if __name__ == "__main__": - data = fetch_analysis_results("DEMO_2025") - update_results_json("Outputs/DEMO_Manuscript", data) - print("✅ Data synchronized successfully") -``` - -**配合 Makefile 自动化**: - -```makefile -.PHONY: sync compile all - -sync: - python scripts/sync_data.py - -compile: - pandoc Outputs/DEMO_Manuscript/manuscript.md -o output.pdf --defaults=pdf.yaml - -all: sync compile -``` - -运行 `make all` 即可自动同步数据并编译文档。 - -### 小结 - -本章讨论了 PaperBell 在不同场景下的配置方案,包括快速投稿、审稿讨论、修订响应和期刊特定配置。我们分享了六大最佳实践:元数据集中管理、数据文本分离、渐进式写作、图表管理规范、引用工作流和模板复用。最后,我们探讨了五种进阶自定义方案:扩展占位符、多语言支持、高级交叉引用、自动化补充材料和外部数据集成。 - -这些方案和实践经过实际项目验证,能够显著提升学术写作效率和质量。下一章将详细介绍 PaperBell 的安装配置方法和故障排除技巧。 - -## 方法 - -本章提供 PaperBell 学术写作系统的完整安装指南、详细配置步骤和常见问题的解决方案。 - -### 前期准备 - -#### 系统要求 - -##### 操作系统 - -- macOS 10.15+ -- Windows 10/11 -- Linux (Ubuntu 20.04+) - -##### 必需软件 - -- Obsidian 1.0.0+ -- Pandoc 2.19+ -- LaTeX 发行版(TeX Live 2022+ 或 MacTeX 2022+) -- Zotero 6.0+(用于文献管理) - -##### 硬件建议 - -- RAM: ≥8GB(编译大型文档需要) -- 存储: ≥5GB 可用空间(LaTeX 发行版约 4GB) -- 处理器: 现代多核处理器(编译速度更快) - -#### 软件安装 - -##### 1. 安装 Obsidian - -访问 Obsidian 官网 下载对应平台的安装包。 - -##### macOS - -```bash -brew install --cask obsidian -``` - -##### Windows - -下载 `.exe` 安装程序 - -##### Linux - -```bash - -# Debian/Ubuntu -wget https://github.com/obsidianmd/obsidian-releases/releases/download/v1.4.0/obsidian_1.4.0_amd64.deb -sudo dpkg -i obsidian_1.4.0_amd64.deb - -# Arch Linux -yay -S obsidian -``` - -##### 2. 安装 Pandoc - -**macOS**: - -```bash -brew install pandoc -``` - -**Windows**: - -- 下载 Pandoc MSI 安装程序 -- 或使用 Chocolatey: `choco install pandoc` - -**Linux**: - -```bash - -# Debian/Ubuntu -sudo apt install pandoc - -# Fedora -sudo dnf install pandoc -``` - -**验证安装**: - -```bash -pandoc --version - -# 应显示 pandoc 2.19 或更高版本 -``` - -##### 3. 安装 LaTeX - -**macOS**: - -```bash - -# 使用 Homebrew 安装 BasicTeX(轻量级) -brew install --cask basictex - -# 或安装完整的 MacTeX(推荐,约 4GB) -brew install --cask mactex - -# 安装后更新包管理器 -sudo tlmgr update --self -sudo tlmgr install collection-fontsrecommended -``` - -**Windows**: - -- 下载 MiKTeX 或 TeX Live -- 运行安装程序,选择完整安装 -- 在安装过程中启用 "自动安装缺失包" - -**Linux**: - -```bash - -# Debian/Ubuntu -sudo apt install texlive-full - -# Fedora -sudo dnf install texlive-scheme-full -``` - -**验证安装**: - -```bash -xelatex --version - -# 应显示 XeTeX 版本信息 -``` - -##### 4. 安装 Pandoc Crossref - -**macOS/Linux**: - -```bash - -# 方法 1: 使用包管理器 -brew install pandoc-crossref # macOS - -# 方法 2: 手动下载 -wget https://github.com/lierdakil/pandoc-crossref/releases/download/v0.3.17.0/pandoc-crossref-macOS.tar.xz -tar -xf pandoc-crossref-macOS.tar.xz -sudo mv pandoc-crossref /usr/local/bin/ -``` - -**Windows**: - -- 下载 pandoc-crossref Windows 版本 -- 解压后将 `pandoc-crossref.exe` 放入 Pandoc 安装目录 - -**验证安装**: - -```bash -pandoc-crossref --version -``` - -##### 5. 安装 Zotero 及插件 - -**Zotero 主程序**: - -- 访问 Zotero 官网 下载安装 - -**Better BibTeX 插件**: - -1. 下载 Better BibTeX XPI 文件 -2. 在 Zotero 中:Tools → Add-ons → 齿轮图标 → Install Add-on From File -3. 选择下载的 `.xpi` 文件 - -**配置 Better BibTeX**: - -- 在 Zotero 设置中,Better BibTeX → Citation Keys -- Citation key formula: `[auth:lower][year][shorttitle1_1]` -- 例如生成:`song2025collective` - -### 配置 PaperBell - -#### 步骤一:获取 PaperBell 模板 - -##### 方法 1:克隆完整仓库(推荐) - -```bash - -# 克隆 PaperBell 仓库 -git clone https://github.com/SongshGeo/PaperBell.git - -# 在 Obsidian 中打开 PaperBell 文件夹 -``` - -##### 方法 2:手动配置 - -如果只想使用核心组件,可以手动创建目录结构: - -```bash -mkdir -p YourVault/40\ -\ Obsidian/脚本/{longform,Pandoc/{defaults,templates,filters}} -mkdir -p YourVault/Outputs -mkdir -p YourVault/Inputs/Zotero -``` - -#### 步骤二:安装 Obsidian 插件 - -在 Obsidian 中打开设置(Settings → Community plugins): - -##### 核心插件列表 - -| 插件名称 | 用途 | 必需性 | -|---------|------|--------| -| **Longform** | 长文本项目管理 | ✅ 必需 | -| **Templater** | 模板引擎 | ✅ 必需 | -| **Obsidian Enhancing Export** | PDF 导出 | ✅ 必需 | -| **ZotLit** | Zotero 集成 | ✅ 必需 | -| **Dataview** | 数据查询展示 | 推荐 | -| **Obsidian Git** | 版本控制 | 推荐 | - -**安装步骤**: - -1. 关闭安全模式(Turn off Safe Mode) -2. 点击 Browse 搜索插件名称 -3. 点击 Install,然后 Enable - -#### 步骤三:配置 Longform 插件 - -**基础设置**(Settings → Longform): - -```yaml - -# Projects Folder -Projects folder: Outputs - -# Scenes -Scene folder name: source -Include scene titles in compile: Yes - -# Compile Workflow -Workflow folder: 40 - Obsidian/脚本/longform -Compile in place: Yes - -# Draft Management -Draft folder: Drafts -Auto-save sessions: Yes -``` - -**添加自定义编译脚本**: - -1. 将 `编译后增加头文件.js` 放入 `40 - Obsidian/脚本/longform/` -2. 将 `替换结果占位符.js` 放入同一目录 -3. 重启 Obsidian 或重新加载 Longform 插件 - -**验证脚本加载**: - -- 在 Longform 面板中选择任一项目 -- 点击 Compile → Configure Steps -- 应能看到 "Add YAML Metadata" 和 "Replace placeholders from JSON" - -#### 步骤四:配置 Pandoc 模板 - -PaperBell 提供了完整的 Pandoc 配置系统,包括 defaults 文件、LaTeX 模板、Lua 过滤器和 CSL 引用样式。 - -##### 理解 Pandoc Defaults 文件 - -PaperBell 在 `40 - Obsidian/脚本/pandoc/defaults/` 目录下提供了预配置的 defaults 文件: - -| 文件名 | 用途 | 主要差异 | -|--------|------|----------| -| `paperbell.yaml` | macOS/Linux 系统 | 中文字体:Songti SC、Heiti SC、STFangsong | -| `paperbell-windows.yaml` | Windows 系统 | 中文字体:SimSun、SimHei、FangSong | -| `beamer.yaml` | 演示文稿导出 | 使用 Beamer 模板 | -| `crossref.yaml` | 交叉引用配置 | pandoc-crossref 插件配置 | - -**为什么需要两个 paperbell 配置?** - -不同操作系统的中文字体名称不同: - -```yaml - -# macOS/Linux (paperbell.yaml) -metadata: - CJKmainfont: Songti SC # 宋体 - CJKsansfont: Heiti SC # 黑体 - CJKmonofont: STFangsong # 仿宋 - -# Windows (paperbell-windows.yaml) -metadata: - CJKmainfont: SimSun # 宋体 - CJKsansfont: SimHei # 黑体 - CJKmonofont: FangSong # 仿宋 -``` - -##### 自动检测机制 - -Longform 的 "Add YAML Metadata" 脚本会自动检测操作系统: - -```javascript -// 自动检测逻辑 -if (!template || template === "") { - const platform = process.platform; - if (platform === "darwin" || platform === "linux") { - template = "paperbell"; // 使用 paperbell.yaml - } else if (platform === "win32") { - template = "paperbell-windows"; // 使用 paperbell-windows.yaml - } -} -``` - -##### 手动指定模板 - -在 Longform 编译时,可以在 "Pandoc Template" 文本框中手动指定: - -```yaml - -# 使用 Unix 版本(即使在 Windows 上) -Pandoc Template: paperbell - -# 使用 Windows 版本(即使在 macOS 上) -Pandoc Template: paperbell-windows - -# 使用其他模板 -Pandoc Template: eisvogel -Pandoc Template: my-custom-template -``` - -##### 创建自定义 Defaults 文件 - -你可以创建自己的 defaults 配置文件: - -1. **创建新的 defaults 文件**: - -在 `40 - Obsidian/脚本/Pandoc/defaults/` 创建 `my-workflow.yaml`: - -```yaml ---- - -## General options -standalone: true -pdf-engine: xelatex -data-dir: ${.}/.. - -## Templates -template: ${USERDATA}/templates/my-template.latex - -## Bibliography -bibliography: ${USERDATA}/../../mybib.bib -csl: ${USERDATA}/my-style.csl - -## Filters -filters: - - ${USERDATA}/filters/shift_headings.lua - - pandoc-crossref - - citeproc - -## Metadata -metadata: - CJKmainfont: "Your Preferred Font" - mainfont: "Your Preferred Font" - numbersections: true - link-citations: true -``` - -2. **在 Longform 中使用**: - -编译时在 Template 选项中输入 `my-workflow`。 - -##### 文件结构说明 - -```bash -40 - Obsidian/脚本/pandoc/ -├── defaults/ # Pandoc defaults 配置文件 -│ ├── paperbell.yaml # Unix 系统配置 -│ ├── paperbell-windows.yaml # Windows 系统配置 -│ ├── beamer.yaml # 演示文稿配置 -│ └── crossref.yaml # 交叉引用配置 -│ -├── templates/ # LaTeX 模板文件 -│ └── paperbell.latex # PaperBell 学术模板 -│ -├── filters/ # Pandoc Lua 过滤器 -│ ├── shift_headings.lua # 调整标题层级 -│ ├── image.lua # 图片处理 -│ ├── callout.lua # Callout 渲染 -│ └── ... # 其他过滤器 -│ -├── csl/ # 引用样式文件 -│ ├── nature.csl -│ ├── apa.csl -│ └── ... -│ -└── preamble.sty # LaTeX 导言区自定义 -``` - -##### 验证配置 - -```bash - -# 查看 defaults 文件内容 -cat "40 - Obsidian/脚本/pandoc/defaults/paperbell.yaml" - -# 测试 defaults 配置 -cd "40 - Obsidian/脚本/pandoc" -pandoc --defaults=paperbell.yaml test.md -o test.pdf - -# 查看可用的过滤器 -ls "40 - Obsidian/脚本/pandoc/filters/" -``` - -#### 步骤五:配置 Zotero 导出 - -**配置 Better BibTeX 自动导出**: - -1. 在 Zotero 中选择你的文献库 -2. 右键 → Export Library -3. 格式选择:Better BibTeX -4. 勾选 "Keep updated" -5. 导出位置:`YourVault/40 - Obsidian/mybib.bib` - -**配置 ZotLit 插件**(Obsidian): - -Settings → ZotLit: - -```yaml - -# Zotero Connection -Zotero Path: /Users/yourname/Zotero # Zotero 数据目录 - -# Note Templates -Literature Note Template: 40 - Obsidian/模板/Literature Note.md -Note Location: Inputs/Zotero - -# Annotation Settings -Color Mapping: - - Yellow (#ffd400): Highlight - - Green (#5fb236): Method - - Blue (#2ea8e5): Theory - - Red (#ff6666): Question - -# Citation Key -Use Better BibTeX Key: Yes -``` - -**Zotlit文献笔记模板**: - -在Zotlit 插件的 template 界面或者在`40 - Obsidian/模板`文件夹找到下面md文件进行修改: - -zt-annot.eta: - -```markdown -[!<%= it.colorName %>] Page <%= it.pageLabel %> - -<%= it.imgEmbed %><%= it.text %> -<% if (it.comment) { %> ---- -<%= it.comment %> -<% } %> - -<%= it.tags.filter(t => t.type === 0).map(t => `#${t.name}`).join(' ') %> -``` - -zt-annots.eta - -```markdown -<% const byColor = Object.groupBy(it, (annot) => annot.colorName); -const label = { - "red": "Conclusion", - "orange": "Keyword", - "yellow": "Highlight", - "gray": "Comment", - "green": "Quote", - "cyan": "Task", - "blue": "Definition", - "navy": "Definition", - "purple": "Question", - "brown": "Source", - "magenta": "To Do" -}; -// Merge colors with customized label with unexpected colors, if any -// Keep the order of the colors from the original color-label map -const colorSet = new Set([...Object.keys(label), ...Object.keys(byColor)]); -for (const color of colorSet) { -if (!(color in byColor)) continue -%> - -### <%= label[color] ?? color %> - <%_ for (const annot of byColor[color]) { %> - -<%~ include("annotation", annot) %> - <%_ } %> -<% } %> -``` - -zt-cite.eta - -```markdown -[<%= it.map(lit => `@${lit.citekey}`).join("; ") %>] -``` - -zt-cite2.eta - -```markdown -<%= it.map(lit => `@${lit.citekey}`).join("; ") %> -``` - -zt-colored.eta - -```markdown -<%= it.content %> -``` - -zt-field.eta - -```markdown -title: "<%= it.title %>" - -citekey: "<%= it.citekey %>" - -tags: [paper, <% = it.tags.filter(t => t.name && t.name.startsWith('#')).map(t => '"' + t.name.slice(1) + '"').join(', ') %>] - -cate: 论文 - -concepts: [<%let excludeEndings = ['更新', '推荐', '关联', '检索', '浏览', '初读', '精读', '星标']; -let filteredConceptTags = (Array.isArray(it.tags) ? it.tags : []).filter(t => - t.name && - !t.name.startsWith('#') && - !excludeEndings.some(ending => t.name.endsWith(ending)) -).map(t => '"' + t.name + '"'); -%> <%= filteredConceptTags.join(', ') %>] - -read: [<% let endings = ['浏览', '初读', '精读']; let filteredTags = it.tags.filter(t => t.name && endings.some(ending => t.name.endsWith(ending))); if (filteredTags.length === 1) { %> "<%= filteredTags[0].name %>" <% } else if (filteredTags.length > 1) { %> 错误:存在多个符合条件的标签。 <% } else { %> 错误:没有找到符合条件的标签。 <% } %>] - -source: [<% let endings_2 = ['更新', '推荐', '关联', '检索']; let filteredTags_2 = it.tags.filter(t => t.name && endings_2.some(ending => t.name.endsWith(ending))); if (filteredTags_2.length === 1) { %> "<%= filteredTags_2[0].name %>" <% } else if (filteredTags_2.length > 1) { %> 错误:存在多个符合条件的标签。 <% } else { %> 错误:没有找到符合条件的标签。 <% } %>] - -authors: [<%= it.authors %>] - -journal: <%= it.publicationTitle %> - -paper_date: <%= it.date %> - -date: <%= (new Date(it.dateModified || Date.now())).toISOString().slice(0, 10) %> - -<% -let isImportant = it.tags.some(t => t.name === '🌟星标'); -%> - -important: <%= isImportant ? 'True' : 'False' %> -``` - -zt-note.eta - -```markdown -| Zotero | File | Journal | -| ---------------------------- | ------------------ | ------------------------------------------ | -| Zotero | <%= it.fileLink %> | <%= it.publicationTitle %> | - -## Annotations - -<%~ include("annots", it.annotations) %> -``` - -#### 步骤六:配置 Enhancing Export - -Settings → Obsidian Enhancing Export: - -**添加 PaperBell Academic 导出配置**: - -```json -{ - "name": "PaperBell Academic", - "type": "pandoc", - "arguments": "-f ${fromFormat} --resource-path=\"${currentDir}\" --resource-path=\"${currentDir}/imgs\" --resource-path=\"${currentDir}/figs\" --resource-path=\"${attachmentFolderPath}\" --pdf-engine=xelatex --template=paperbell -o \"${outputPath}\" -t pdf", - "customArguments": "--bibliography=\"${vaultDir}/40 - Obsidian/mybib.bib\" --filter pandoc-crossref --number-sections --citeproc -M reference-section-title=References --listings", - "extension": ".pdf", - "outputPath": "${currentDir}/${fileName}.pdf" -} -``` - -**添加带行号版本**: - -```json -{ - "name": "PaperBell Academic (Line Numbers)", - "type": "pandoc", - "arguments": "-f ${fromFormat} --resource-path=\"${currentDir}\" --resource-path=\"${currentDir}/imgs\" --pdf-engine=xelatex --template=paperbell -M lineno=true -o \"${outputPath}\" -t pdf", - "customArguments": "--bibliography=\"${vaultDir}/40 - Obsidian/mybib.bib\" --filter pandoc-crossref --number-sections --citeproc -M reference-section-title=References", - "extension": ".pdf", - "outputPath": "${currentDir}/${fileName}_lineno.pdf" -} -``` - -### 创建第一个项目 - -#### 步骤一:创建 Longform 项目 - -1. 打开 Obsidian 左侧边栏的 Longform 图标 -2. 点击 **New Project** -3. 配置项目: - - Name: `MyFirstPaper` - - Type: Manuscript - - Location: `Outputs/` -4. 点击 **Create** - -#### 步骤二:添加项目结构 - -手动创建以下文件和文件夹: - -```bash -cd Outputs/MyFirstPaper -mkdir imgs -touch results.json -``` - -创建章节文件: - -```bash -cd source -touch Introduction.md Methods.md Results.md Discussion.md -``` - -#### 步骤三:配置元数据 - -编辑 `Index.md`: - -```yaml ---- -title: "My First Academic Paper with PaperBell" -date: "2025-10-11" - -authors: - - name: "Your Name" - affiliation: [1] - corresponding: "your.email@institution.edu" - -affiliations: - - index: 1 - name: "Your Institution" - -abstract: "This is my first paper using PaperBell workflow." -keywords: - - "academic writing" - - "Obsidian" - - "automation" - -target: "Test Journal" -acronym: "MyPaper" -csl: "nature" - -lineno: "false" -figures-at-end: "false" -titlepage: true ---- -``` - -#### 步骤四:编写示例内容 - -`source/Introduction.md`: - -```markdown - -# Introduction - -This is a demonstration of the PaperBell workflow. - -We analyzed {{demo.n_samples}} samples and found a correlation of {{demo.correlation}}. - -Previous studies have shown [@example2024paper] that this approach is effective. - -![Example figure](imgs/demo.png){#fig:demo width=80%} - -As shown in [@fig:demo], our method works well. -``` - -`results.json`: - -```json -{ - "demo": { - "n_samples": 100, - "correlation": 0.75, - "pvalue": 0.001 - } -} -``` - -#### 步骤五:添加引用和图片 - -**添加测试引用**: - -在 `40 - Obsidian/mybib.bib` 中添加: - -```bibtex -@article{example2024paper, - title={An Example Paper}, - author={Author, A. and Coauthor, B.}, - journal={Example Journal}, - volume={1}, - pages={1--10}, - year={2024}, - publisher={Example Publisher} -} -``` - -**添加测试图片**: - -将任意图片复制到 `imgs/demo.png`。 - -#### 步骤六:编译项目 - -1. 在 Longform 面板中选择 `MyFirstPaper` -2. 点击 **Compile** 选项卡 -3. 配置编译步骤(按顺序): - - Strip Frontmatter - - Remove Links - - Prepend Title - - Concatenate Text - - **Add YAML Metadata** (Note Name: `Index`) - - **Replace placeholders from JSON** - - Save as Note (输出:`manuscript.md`) -4. 点击 **Compile** - -**验证编译结果**: - -打开 `manuscript.md`,检查: - -- [ ] YAML 前置内容包含完整元数据 -- [ ] 占位符 `{{demo.n_samples}}` 已替换为 `100` -- [ ] 章节按顺序合并 - -#### 步骤七:导出 PDF - -##### 方法 1:使用 Enhancing Export - -1. 右键点击 `manuscript.md` -2. 选择 "Export with Enhancing Export" -3. 选择 "PaperBell Academic" -4. 等待编译完成(首次编译可能需要 1-2 分钟) - -##### 方法 2:使用命令行 - -```bash -cd Outputs/MyFirstPaper -pandoc manuscript.md -o output.pdf \ - --defaults="../../40 - Obsidian/脚本/Pandoc/defaults/pdf.yaml" -``` - -**检查 PDF 输出**: - -打开 `output.pdf`,验证: - -- [ ] 标题页显示正确 -- [ ] 作者和机构信息完整 -- [ ] 参考文献正确格式化 -- [ ] 图片正常显示 -- [ ] 图表编号和引用正确 - -### 故障排除 - -#### 问题 1:占位符未替换 - -**症状**:编译后的 `manuscript.md` 中仍有 `{{placeholder}}` - -**可能原因**: - -1. `results.json` 不在项目根目录或 `source/` 目录 -2. JSON 语法错误 -3. 路径拼写错误 - -**解决方案**: - -```bash - -# 1. 检查文件位置 -ls Outputs/MyFirstPaper/results.json -ls Outputs/MyFirstPaper/source/results.json - -# 2. 验证 JSON 语法 -cat results.json | python -m json.tool - -# 3. 启用调试模式 - -# 在 Longform 编译选项中勾选 "Enable debug log" - -# 查看 Obsidian 控制台输出(Cmd+Option+I) -``` - -#### 问题 2:Pandoc 编译失败 - -**症状**:导出 PDF 时报错 - -**常见错误及解决方案**: - -##### 错误:`xelatex not found` - -```bash - -# 验证 LaTeX 安装 -which xelatex - -# macOS: 添加到 PATH -echo 'export PATH="/Library/TeX/texbin:$PATH"' >> ~/.zshrc -source ~/.zshrc - -# Windows: 在系统环境变量中添加 MiKTeX bin 目录 -``` - -##### 错误:`Template paperbell.latex not found` - -```bash - -# 检查模板路径 -ls "40 - Obsidian/脚本/Pandoc/templates/paperbell.latex" - -# 使用绝对路径 -pandoc manuscript.md -o output.pdf \ - --template="/full/path/to/paperbell.latex" -``` - -##### 错误:`File 'tikz.sty' not found` - -```bash - -# 安装缺失的 LaTeX 包 -sudo tlmgr install tikz # macOS/Linux -mpm --install=tikz # Windows MiKTeX -``` - -##### 错误:`pandoc-crossref not found` - -```bash - -# 验证安装 -which pandoc-crossref - -# 重新安装 -brew reinstall pandoc-crossref # macOS -``` - -#### 问题 3:字体问题 - -**症状**:PDF 中文显示为方块或编译报错 - -**解决方案**: - -```bash - -# 检查系统字体 -fc-list | grep "Times New Roman" -fc-list | grep "Songti" # 中文字体 - -# macOS: 安装中文字体 - -# 系统字体册 → 全部字体 → 确认有 "宋体" - -# Linux: 安装中文字体 -sudo apt install fonts-noto-cjk # Debian/Ubuntu - -# 修改 pdf.yaml 使用系统可用字体 -metadata: - CJKmainfont: "Noto Serif CJK SC" # 替代宋体 - mainfont: "Liberation Serif" # 替代 Times New Roman -``` - -#### 问题 4:引用无法解析 - -**症状**:PDF 中显示 `[@unknown]` 而非正确引用 - -**诊断步骤**: - -```bash - -# 1. 检查 .bib 文件路径 -ls "40 - Obsidian/mybib.bib" - -# 2. 验证引用键存在 -grep "@article{unknown" "40 - Obsidian/mybib.bib" - -# 3. 测试 citeproc -pandoc test.md -o test.pdf \ - --bibliography="40 - Obsidian/mybib.bib" \ - --citeproc -``` - -**常见问题**: - -- 引用键拼写错误(区分大小写) -- .bib 文件编码问题(应为 UTF-8) -- 引用键格式不符合 Better BibTeX 规则 - -#### 问题 5:行号显示异常 - -**症状**:行号未显示或参考文献也有行号 - -**解决方案**: - -```yaml - -# 确保使用最新的 paperbell.latex 模板 - -# 检查模板中是否有以下代码: - -% 在参考文献前关闭行号 -\AtBeginEnvironment{thebibliography}{ - \linenomathNonumbers - \nolinenumbers -} -``` - -如果模板过旧,从 PaperBell 仓库下载最新版本。 - -#### 问题 6:图表位置错误 - -##### 症状 - -启用 `figures-at-end: true` 但图表未移到文末 - -##### 检查项 - -1. YAML 元数据中是否正确设置: - -```yaml -figures-at-end: "true" # 注意是字符串格式 -``` - -2. 模板是否支持该功能(检查 `paperbell.latex` 版本) - -3. 图表标记是否正确: - -```markdown -![Caption](image.png){#fig:label} # ✅ 正确 -![Caption](image.png) # ❌ 不会被识别 -``` - -#### 问题 7:Longform 脚本未加载 - -**症状**:编译步骤中看不到自定义脚本 - -**解决方案**: - -```bash - -# 1. 检查脚本位置 -ls "40 - Obsidian/脚本/longform/" - -# 2. 检查脚本格式 - -# 确保文件名为 .js 且导出 module.exports - -# 3. 验证脚本语法 -node --check "40 - Obsidian/脚本/longform/编译后增加头文件.js" - -# 4. 重启 Obsidian - -# 或重新加载 Longform 插件(Settings → Community plugins → Reload) -``` - -#### 问题 8:编译速度慢 - -**优化方案**: - -1. **缓存图片**: - -```yaml - -# pdf.yaml -resource-path: - - . - - imgs -``` - -2. **使用增量编译**: - -```bash - -# 仅在内容变化时重新编译 -make -f Makefile -``` - -3. **减少过滤器**: - -```yaml - -# 调试时暂时禁用部分过滤器 -filters: - # - some-slow-filter - - pandoc-crossref - - citeproc -``` - -4. **使用 LuaLaTeX 替代 XeLaTeX**(如不需要复杂字体): - -```yaml -pdf-engine: lualatex -``` - -#### 调试工具和日志 - -**Obsidian 控制台**: - -```javascript -// 在 Obsidian 中按 Cmd+Option+I (Mac) 或 Ctrl+Shift+I (Windows) -// 查看 Longform 脚本的 console.log 输出 -``` - -**Pandoc 详细日志**: - -```bash -pandoc manuscript.md -o output.pdf \ - --defaults=pdf.yaml \ - --verbose 2>&1 | tee pandoc.log -``` - -**LaTeX 日志**: - -```bash - -# 编译失败时查看详细日志 -cat output.log | grep "Error" -``` - -**测试最小示例**: - -创建 `test.md`: - -```markdown ---- -title: "Test" ---- - -# Test - -This is a test [@example2024]. -``` - -逐步测试: - -```bash - -# 1. 测试 Markdown 到 PDF -pandoc test.md -o test.pdf - -# 2. 测试引用 -pandoc test.md -o test.pdf --bibliography=mybib.bib --citeproc - -# 3. 测试模板 -pandoc test.md -o test.pdf --template=paperbell.latex -``` - -### 更新和维护 - -#### 更新 PaperBell 模板 - -```bash - -# 进入 PaperBell 目录 -cd /path/to/PaperBell - -# 拉取最新更新 -git pull origin main - -# 复制更新的模板文件 -cp templates/paperbell.latex YourVault/40\ -\ Obsidian/脚本/Pandoc/templates/ -``` - -#### 更新插件 - -在 Obsidian 中: - -1. Settings → Community plugins -2. 点击 "Check for updates" -3. 更新所有可用更新 - -#### 备份策略 - -**每日自动备份**(使用 Obsidian Git): - -Settings → Obsidian Git: - -```yaml -Automatic pull/push/commit: - - Auto pull: Every 10 minutes - - Auto commit: Every 30 minutes - - Auto push: Every 60 minutes -``` - -**手动备份**: - -```bash - -# 备份整个 Vault -tar -czf paperbell_backup_$(date +%Y%m%d).tar.gz YourVault/ - -# 仅备份项目文件 -tar -czf projects_backup_$(date +%Y%m%d).tar.gz YourVault/Outputs/ -``` - -### 小结 - -本章详细介绍了 PaperBell 的完整安装配置流程,从系统准备、软件安装、插件配置到创建第一个项目。我们提供了常见问题的系统化诊断和解决方案,以及更新维护建议。 - -通过遵循本章的步骤,研究者可以在 1-2 小时内完成 PaperBell 的完整配置,开始享受现代化学术写作的便利。 - ---- - -**相关资源**: - -- PaperBell GitHub -- Pandoc 文档 -- Longform 插件 -- 问题反馈 - -![请关注我们 PaperBell 的官方账号](https://songshgeo-picgo-1302043007.cos.ap-beijing.myqcloud.com/uPic/follow_paperbell.jpeg) diff --git a/PaperBell/Outputs/demo/DEMO_manuscript.pdf b/PaperBell/Outputs/demo/DEMO_manuscript.pdf deleted file mode 100644 index 1b89618d9a9c30aa997fe46d3d9b60f9985b50d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3426538 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

    %2MuIw(dC9W&2MJu2C$I4^9q?VG9fgxyqy=Q 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

      ))vnQkw9-Ov70z>4 z49rC7yJ1hy)A%X)4r?Kj3_HEjrfKE?A-+|kOs+yHi$;=|o*qwe09R623}Vhkgtsw( zuJ*8@lh~4icDFN0!b00nTs(BLUpcR5#fxk*A(y!EtE~eKkT!u+qxW!hMNL=mdJ}L7 zxT&i{qm*-XacLy9=J$Djo_{$>N@}tYK~vMy)H^x3q~L$ra3h>{78LXm9qbNne?2@r zd~I(B$np+eMAW%r@b&evKfYI=Lt(3mOqk~DwE3kSkLKq8mB<$1?pO^%+odapQZmJs%zN)$E^@Ug!R<40T%<%O` zIG{Dq-wN7dteC~!+To%bA+`oFIXOv*(J8|Y(BMm^=;0YOv~~6MwWmhLR7zw#X28HIbRimJGwS_~V*PG8ORR_0#CN85xZfx0 zU8n7s6m2dZoaz}`peYS%6%HFA$rd%=edfpY1=7z3(r2}I z!x4Cep+jyRw6Ax?zuG}6__|1ZsJZUCrKP*e@jwm8nLt9b$!qB8BtFu+1eqI>Q0Wy) zf+Pkvxj`EZ7{t+hTVF!w}s-lCibNtQ9(ghO&%wdd-j1N3WBUUN(euX-2 zG|Gb2(XmUtqyPR@uIel6>N@?6;t=cKd1-s;%VWv9$P$kx;PgCS-kwJG|MVo8B>$F0 z$0az`FAVqT;1^gj+`VF>`n}786#t8xyz7YdJu?-CXG;tJS5~{na0FlU0In8 zTpOk?;T|x}OwGc2L<_!s`&MmcC_S{#cce~a%-O~%)bWQj1BH5Z*CSkDLo*GWm{Pi= zhoL_^Q1LUE(OZX%@t5yTb)t@M$7s|JI-#7uPv3JKV)@?2jN@awB#+Vt?+nIgH& zE=qno658Yu*@c)YsC=Vf`eSI+z{&rbJ!ae6Cj}-oNjDPDJY)mL`G7B~4zbDh&+z=u z`&ODVILjPMKkLf;vdCOCyAu5Di_$Tsv%Fx;H%LtIyxzokNQM`*-J$@P;K_eu$z@}xv&RR494tzCteW;mv-4!q8;=8F2{TksSfRD( zJCtzBLf@>4#+#r>h1fJS@>|Nl_7q!K|LOa2kqD=WO-FVZ_zckrVlwALD5^O8R{_%X zjMcQYjq;o}m7toGme` zV#taEDc|ir^fTgO_t*Sm9$si2@L!M9@aJA=gmO11{LFtCDQ{^`%+8M@I3__>A3-C) zoe6FH2e!7DtJwk5fkN?^evmHZcWWz}fI6t&AUGQB89uvQEHoy$-Vf20C3gkP*Y5*B z>tq4WSOCUVV^}AtyPzD z^I;na*xAX&3cQ_tzmSYVDM)mi4=G`@o}LyQ1b7*BS?3)lrm}fl(P$5y-SN1UU{oqd zQ0~Z&yg%tlJ%Lg?s2;?g>HeMXJhv9y)2>hYn_bP#?3|pV>Og4K&F$ggAu2MOfq@Qt zilvc&%jp&V<>jF!hfIEsg{3(uasIrftftDw+PbQ;l7^9yl5z?He8dB%HdB#-_GFVP z!f&rOG*O?-B9D8SC!jZv%w`=1UnUM7CkdFR@guIkg z_@AZGE0!a3kA6B_!2x>`fiXsG+MBqzGzQtqN)7uUnlp^2ZS>yun*0T;fM$!a6v!c( z(xYiC${QlwU%OU6m?L<;3ATMhc-xIG>e;a!$SNdLc~Q?mt@b|7#Y3X?S`%CDPUIH3T_@+g7*b6@n1X=}Tw?={r` zmRghopzpS-8UH|y9-Ax>P((l7i5GQD;(M$?MRxS5uNDo^4JDU&`2jNYvj$}*)ZcuE zS>YhkbPEY~i0}TEcrqH(0;~Zr&}oR&Vk`EqPWAhK?Ct=v1ui-HpzMUK4Sf~DgUg^O zdEY+KwH9A}dUxY*|5@=SIB_Y#YV2*%6W4r;AnDJ<^mxFrdkL75J6|U3%nD`>k`C(X z>MpCZC#xqPjW0^%a?&%?0SgP(l&_1&!9V6&|Qtb8sy*hEN~>C(w#MeZlhpY;xaWEy_eSj6oL8027A6RoB|!I7pr zVUU08tgI&c(@+)5%A|xO4{yh`Uvii=jzb_)utyhW2${rt?GUWBB&n#J^YXAr!`uPx z)1l#E>GAP{r3RnTO#V^Z|}!j zBHFQ1jKygbifv(YlU^K;iLKjV_pRK}=UK zX3kw&L@SQVuzKMR{C&YkG0h_N#0w^x+~sbfI9X>_ZxHa2+ER6C9Wq$HD*-$+cb&xZ zmpa6oXT|&G@bGES{28W+>2erm)6fki1Kkf$x$j80XY3oG(|v_S`}TpGm-7HFt{Q3} zlb)OiQtG4%GL$1aK*6G*qb34ctQ8=v;d8tCLH<#ZjO!me9aHal^=;?k3h3LOljoHq z5)w2tT<9KaZf;&oPF`JY2jXU?CT4(?=HE{TAKw+f|2J1?!ON&Q{HT;2A#qkomL_u9 znbpL^?4o9Lv!~}VdCeBqE*LZAdq~LC!^5MibEDgnGg>F$ONp#=_rn9c8g&f?3GY1j z2_XUg04ljJTel-UJzZNn!@As>_EFWu)D(@+kEnH}KGW2{wjpn{oVnTylEy7)Bo{#_F;H znTSo6-Hfw2)nyw8C#Pnrt_C{}Tu|cWE(w+u3U<^*olVc~u?g0m{zR8YCufU^tU^f3 z=tiwlL!ZX-6pRkBYf88#9X4sFg(p7NmUp9Bb8;3&BSZWl1gn|MDr*ge8Kb!QWFJ8+ zSNnWLn*@xVOqXHfcK5abBh{ql->`71_B<+N;lsrQ)*9SdjH$JM95OS%W95@nChg{9 zV&r9IB2CRqq9dafbyUeQ;332(5ugJD623z(Y9z9ZQX}&;pl5l$?9jOP6YLO z^oh^uW@}*|3KeV$sI;D7LB=Kuk{H#B-6C;Cu~8zDfk6BfSkm4P-FgmIiMcx}D?8hO zep);&GnIydRVZ{UP(ss8H$R)eP-}L=w0TUCNgZQ7_OIi-C^b z+|<13vZMbP0vr+u?#$oU9uuEL^C^U5Ocu_sFKR8AqY&<^qlP!&xnit5ARai<;)^DI)bj+ zPZ!j^kNCU)=D>cwv>k1}Hn)t*q8J2ZMl$*yo>iPly~F@)KCJ0!XD)s)9Z5;a{$e9C z)Q#okfn_w$%6O(GW`|$hmREOsV;XZO;R#p*Nv$~2_Q8FM-=e1BnO6qLy%!iAQCA=G zwJH!NVc#Zy!1&RAg6J`lyQ)y!Ftdv(-`Fex)ukk zX7=TxX#M+Ob9=2B(G0mjUqhnt-gYs2?t$Wh%1Szv#_$;`CeUP~6g4&5?uYM_vMI_B zP>@Y`TZ5!7>B+neBFwol^b!yP&+_@8iFBj_Wj5`F;1ckDcQ*&0;)p#qZ;x&p9!vV& zZ`J$rWRls#a%ZrKk?;xJP(voDXDf<7v9%;{?a@{Co|OGg`8Rq1M}t?epNnc*J!Ig1 z4+|;j2U^ba^M5fHC(@(-9s5KK6gUKDR@AJVoSd|@ljCiOs|4lvJEyxRHI@0x8cQqN z@|uc@(q$mAh$$n7dI=t3B*^412w{k(0cEAErGkBT3Q_~nr&zQaidv6m>!s(TCurzn zZB3ivkA?_Dq7e}hUEF{lmwV?Y_-yh}F9uZDyGX@VqAnCxHg(nJvCX<2uEZRP8Z||2RMh-=>kF)Ef<*CTa0~`7XZ8C;o zZQQG(vn?3fD9M75uq4Q5tv<-o%(tYlP;ANxd%)#&gl^EuX1@m){ zNTo8i^N8J1qw$hdisga?69f9%KrwO=5=*;Te5bRa;KFiEKdXmLUJd%5Z5#&AbY+?C zyTaDnXAJ-2O$`0il#+~qK$OlHjBh;(dp{@WU9tLhrqm#!eLh#I*(GtLlwNBu>||6l zkOUl`dVg%;2kJK*Z|hO;T_mX6DF<6!v32A&jy3ed+HvPrR`6j%z-9bmzssf0 zhTYLm#cVq4O)Pc4rg!fR$KY|g?qBa@Z(h#S-840+>d}b2BBpOHFQ=xaW94A^UbgYy z%?#}4@Am6*Ke2MKvCng`x3DKAB_A9f+_Fl+KRU4zjj0y|kW|McvUirXiODWvl8=7Q zImTvBH4-1Ux7L;xw(j2sLc?AoRE3zCn*(k&?{kaacKY&eZc8gWI|m1*h^o@u{GA%e z9gVhmqmG&Ofiz19vPVZs-vsC}FL6d!$4UByZ*@5DjhvM3Uc7=SF|C_sMz z{-!G6qNw*ux%2rJifMK9-PNiLG<#HC?!?IC3f96k2OjF>ZSa7OC%5YA)HVPZ(J_WkI zTP~+-CmJXj>hyJam&s=GWiK~=K!3C_E3k7C`?MjH%2ROw{oI8I5G- z7t{Xi%x|NGy0^GBNYCl({0L?L;$ut*!hc9H9W5l)VF-pwcY=<8%C%Fx1|V zi9v_X;;S?_+Vc>c#lq%03b?f{Co6W0fgBJZ0QFC>*M4N>yfuz_U)n%_-_LtfQjSNd zGVz@V=D?y#m`g@&J`jy8f%?O~pL(#jq^p}HG!2x0+HZAtvFBT!7J@MlV;y$}^jFk$ z2friZG&k0|yFRbqbZ=f>+6qAdFF;ONS`@~LlMfEm%gDej*#E)&`hJH;C?P3LJugl9FOxunNMa&-I#hCtJ2+qWRQX(V6S43-G7AXW;pm5)v=w9jkdUL) z?c>GT_}Cbba>bcNwx+Gv+XJq1cvk@7C<(qt5 zjy~Tf?X8rs?uPu=nfV({Mbim!K;*d23;NEfKj9Q>YAmcNb7+Ap>V)Y_kCt;3LK2@;WhRw_KRJ8pV zT{)aJ8luV~U4~F0)*3qNMJsiE-SK0oKJ?$@1Z{m3l&a968*175v-q)>?*ihd;o;L> zg+*HNSSfR6$f_l4Vv%NWEoHPTsUkYu6 zZiJ@FjQKWpDII-txP(VUG{}zlLGV*65nQ#rU1>Urh9uqUJd_-a>XY^zW&tE~ia}qu z7s7u>rkJU*p7Xb>w^e9AfD83`7@6w+xKe-rE6!gz&uu%19Eac1h+^2FN9GrnlvI>$ zOOQm;;f9owR-n39r%hr(P-!2n3GP_IC_wrHl%FPW(Jlrva z{Cqz+^IBmfW2Ut%oNazNo17#0K7$W(za66S)z;j`gWJ$g&;$FEDYq0$J+nWijkx4i zl#)Ot#dq>eHITUzSy$=Ut+6YF+JI9Xg=!jP;|EWC-FYZ4YAM#SDopRj%kq96L!I0!^8DD+eUsgBIdX6-JZ&1EIvia(J1Uq#W8i`~ z-L~Td5ez4vk&zzIM?{hyL{nM*TBs=sMW$HIoN9R7`MwU|B#RG+v~AnS@m6$nH1P0n zNK6Vomg^p)AN%_9R#rF*;HAm%vePrk_@|s+gkqE9^whLg6}FaF*F{PPftnpDDXDm6 zrJqG|-5RQ3lSHb&K#Jab#FE6jEb=N{NmVQ*M2UrVJN$|ooSbkRokm}_JkP3tu?jff z1_lNK;DM}nsJ=9R|F$;Gey7>lImk)y!@(=Z?PM+h^fo{5vH3eZJ2jmIFAx^u2ac@N zxNL=mg_$;rL;#_gJhRzmrHQN#bf)Z=klX5d(kschqK;(uIWU}fJby7H3>BdH^^ z8x{UDj$^aBVqJYSH3$P2&hR$B*iz=7Z~16Hm)0pFEao&H=soVlF`L7WoX zo;8fqB`<=IQxkgzn|HJ~;iH)vLBV%Cs0h>oAw3INzLQ$RO0mPKMGT6Jkz)ctxgsVC zE?NTPMzIDuy~*G&Ju-za6yk58r$XGp}Ej9W7Vs>OF8R_SYj=;_P4z_o)Yr zH6I#pr>Eu9U{y9%b)IDd1%>Qr-Zg%xJqT1b9knCoh|tFZK0cr?Z2-c__a*!H{{xP5 zl=7M9$LBovw|SeJ*>N**KyT0OVrR%QPFS)sE;2V$IZw{*hAac z(7m|001~z8x-JM2igmAGl{^?b&o_I((`0?k-31dQ_-c`QP4CU8z0!vTJ)Ef4D~fS! zHFq|Oxk^KDuRWIlwww(t%3ELuHQW#n8BA%m)p*H&M!d%_5AwE!|Kmn}>iux#Z0l96 zrO(s>aYkXbDqFD8ynyzkZ5rvs3otTnI(}$Fg4Nd5z4QtrIYNL8)&^if=Lu%86%9=j zz21%vu!F9>^r15cwB1X~*{3}sdeebWtPY(R?fQ#odkx8>Obhm=gd=?@e~;FkOz=fT z3A&$2nJ^^V$g=n9{lLf{JPmcwAx<4UnF+}8I6k$g2n4{P6sqd%*iT2d=(i&PI(bOIb|ZA~1V-JSKB%>_m;=qdB#Vx&h?IWaDT-iS0b z#Ox-<-Y6kch=iOZJd$t}3+FY0ybr<^%SBM($8d#${+j930t1v-GE%FGT4FwWZ|zHQ zQ`MCWX!Xtk*Z!`yPPrv5ZdO)YjReephzlByfb^p*r((y84F~ez)iWw-7Yp?7F)WK zcK7#5Sv3lqDo(-LJ3875*~BQ|_E||z4kl)HUxU)_SjWLe{8n^KL~8;d7%*IC+?A6c zsMSUg;Hqj*24A2zneWyE`?+DDi6DCCoGT~gr3~PQW^|0wy*+kX{a$akTt6PZZWn5T zIsO)6^1fgH&3WC*`8PSLtVn5_GXyVIu(<~#s10(7JEx_mV@OIT>{RrUktaK*nGU(y zA(W^3j<`XW$X*PC3Gupyj7w-UZWMf4#mr~aPua3rw!OW!7iP>A$}(^R^Xo%h%N};j z$Wh38$(ry)CBSjF3M#OyOeB+sz}ST%l8q0|VPPmJIlMq`9peM!$&~j|WGQh;ll`Za zeev)jym)_{ga$~AvlNczwnZMpGF5SmfrVB@zi{XZR{96XydU<3;=Vd$2ZITzAy=%3 zGAm*KVARCKAJGz{N^K#lZr&A2YmeW)fHb-e++2Vf8d&J;>Y%zvki;*qJELF3a>QgKMOWc{$>AT=FA z+;ZpkcSgKX{`n!C3}xx+5`DvkMNck@m#$zZ$paDd=+n}i85x5gsFgQO`-NmMDWV`3 zKL>9NQ6`j*U{_6UvxekPB-UyYbH_5L~j`TI%vtMTu;7P2m#XkIN#MuKuhhD!Eww26}Id@nPE|~QI z!lJ+1=ULm%BU<_Lb3gXNos@la=x{)OXjqewgV9o^L#BzbdEuFDJ40xB!e=l+*jUmn zBdUwzGjF2nC$6`S_=Al~%mmc-xKa|5$vRb4MG`a@lpzNlR+*81vpSKCsDg|wXz*Ij zN_ODLLAsKLpOj2llJWhOcp!S36kxVTl$n)9tf1}Q?j|oPCRVJ1{q4tPSuP$pTz9^O z2cd|R#tgdVS#)l-3Y6fV_#~s0v^4Ao!0nHKfbOCVU>_OivT-?=d@4TxJ0Bo8mrP~q zX=sF(qQ$*LWaR+LF|Y1MKc@G zUf$u)RaiQRvD6?RlH$!-OMZ_P3J{3`o5QXe{4*yTNmJ1pNP541ZlPa0o!mjd`g0dg zY=a~~RSL~P1`(X!7UzGR0l1)(=4%nBIWk1KXCUcO5)UBI_uRu_+`|&AbaosE`}-D9 zEg8GAye|GCl9)Dwe}M{In^;7&26|KYu=aR@n=;F30vZkSivh;^D~oX0pSUHDEsMf8 zQNnIeV`#MXV7|v?8L#|5|A7f$(V}-jR)_{T`%hy-a&(eN(BxhOGBt;BHj`alJj zFB5qk@*}P4vnG?M)v}0p4%VMPf3VSWj?4%xFw6QF#)A|Hbx4h~YPre0IV;XtWF+(Z z6>Fg18>n2L3vDVe^q$5+w5C7Pb+pe&f*`OeG5UwI8r=)azR zVH4t;TezPL0?yNupvA>zdv|3j*OUXl!dXhVqC~a_-ju%_-B%TvIoT-Pw7pDa)YKO7 zN0b1#6|>^+ItWH-Ber;FzQ*7Hg;XAytA+E~mv@7(*INJGj)}>A;$6n(4v% zozz#+vOt;>VPqzS=Zk_0@W9a*v(+aC;xSK6qGyYTs#p^7z3Fk96j8xnqB&;5 z;Q24D`9oolQWo~hI(mCmAkz=M1qsjSY>+|bN+m*JyH{*ujom18v@P88WK~RR9uEIRRd&~dgoTPL_NjPEACB9#1Ic9$cfCy(DQXGKFx1Hqw+gT&I|m@ zFK-(gZEI^M>AUEQA|3mzVb#*|W|O8jLZQRR#Pk{!NMN68EO%Ee|Ak&C1{n~WnAqsF zG|BthP2X(;H-BaXK))O>FNf`UUtHkhXW{>u0*tA)m3GJS8BvqjImG-I!_kg6^F#?L z8QO|2)R#k=eNAmAZa5Xw{B_JDEk>p z$#PP#*P2R}n6=CX@1VP=>M;+pkhM;Sb{fLjD_M?O``kx02O}!MVaC__}?Gchd# zTx!8%0rjQcUckzZOxUtA?c6Yq)27!lJgviFG9-6qA zAf^%#qSo;S-b=fxplVB|Qq0u3!CbHRy7sG?xdE1HgwVe!43tdaJL3!HneWxK5%Mzs zqL~($;Y*~+v$J!^XLC_!9$)GLjZdqiY-AOe))d6%v!7^t1rQ^Svw!I9N1vRW8k`!2 zqw&43iNo{KfJ9B!K}R}pB0M|G&`zg)R73xc;kYRlsZl@$J&3S+O;xlMxR@z8TZWD* z+8Af$FN(QL(GMXIqMXfxCfbS7>M@ag_U=os_br+F&9RYCowK>ZQNV|<~+(ZYdFeLZU zsLm?Uo;PjG#E_pw5SC9?t>{Ei(4itx=cLel{gSMmBBgFClUYyecioIWJ9qn)YHGq? zLk{PqwR?$4X+>arhjB=`@JWO|tU0-<+#DQ~JP7{{#+GKd5)x@ESSv1ijpdrs)&ArPsktrQ^J-AVYK%z?g7 zQ#+_T9;u2BzD<9n!5hXfD#mP$TZEzC$DF-qllFctRW{5rvJ`&?1~M}LDVYLv8np`*OADD~fqJ#X=3h2fdfrwz zq-BeMsmqEE{Y7qFWuYPgI_rsD%1&8aQXB#W6%?~LKVMvArtpKz4?_3-82IpBUYGRV zj*fElHFa4az#M=qg`tlgGA3|w8JnVA)^Es}>a;7XsHy^Vs<<=^890S{4XSa-K1~N- zza$I4-8nIT_WrVQH{=D|LjA(~k9`A2VEWdye6iNQ!!d!)*TToey|_3z13(Lj+a_OO zz)N-Ky(wn;b;#Yq@t4=GThABoOFAIm^&7$_HV4P5v!hIvA~p(;DV|B!usN z+n3MY)*@BsZYJ8;vdl7{SJJmi)!IpfV@M^k9`j(^s{ZK-dY1 zHC4sXpG2^4DHx_J5+cMP?5Ma9B$1Js+B$mZpU&6YrmVtf_VS};47o*oj@!5fc7xqH z{O==W${)k4F)psofT1Xh)5**huu9XTW2}2n^NoxFa&LAfUQR0B7w^?!aw0k%HT6n| zo87mXb$xwxeZB4kqF;H7!s`aH?8FKT;<0ye`_A+a)kqqU^a65J#CCGh@-^kv6#N`L zdlbog;IzgC1t0(CJ+!xX$m3n%W~6Fp>7ZU9sN`mME>H6N-0u<2z@uYe0$j<4y6T;Y zrJe_br7nL&2-XcjaVU`&#pBaU;H!&rX+-R1RvMA#bDjmYG5>|^M^sb7YVg0rXv-zB zg6-gTgAHn5z_D2{=tYLatTK@iJIz$-%%M`CJyELojU8T*!Bkl^AEB4Y*^5};&VE!Y zL0zV-B)lcb>)qJ*D-Y>|O+A$$x>`9;z>ip+77avPk@aIza$T)bz~+yz(D2CkgfyBp z2wfdn>ugxVIzlMz%kKz+ZMvBOMTm{HM8YjTZ5@aEKk*FCf%elYhY6#Q5ITApQ5Lis z5aMWk5a*`Y({!~_W`a6MfB)sZpnIN9eDVLj0wol8aYdTSO0zlbdSa-+Tw8|1twl(^ zM26Xp{gVzNNd#+Y_gNSMGMWJfifTlZ_k@h6#WZN3Q){YPF@D-r+1@;{ezkehVCvc! z4}W#_L=RR--@xK_`Hy$%F7pVle^>&_t7dU}8SM2inc)81axZu59Nx+{;W~L&bFC6e zfjz+I5D7-r)HAoRM`&tpKZzA2*=ZGY2lhQFnFm6_h&F7J#Gm8g5qs!h&nTdqYFTGTKk>8Q_9)^O%OW|<2G)j(V(XqorzkZ~os3)p#cN?Z8 z)M-`m@@@c2U{n->%R`fmjm@HE#l~eKS&;j{wlmk8!t%`0S06NCJ|(^2;eO%%?rwa& zQe)9=K<9hme&Kd5a{Q23+kdAwj^t$xcz4j>7>_B#x`|?-0?ln02-QC~Q3hmTW=n(v z0>8n*O)CQWzTUE4sJBkXFg`ua34g%&-)tRt=~`b zSD!EPzL&*rdrf1mK%*ArUmOW$3X1&7#^WZAO>`o9N=a~2_it>MJbcIVy*XIT!=vgL zAi4E^2QH`p9{^A4ar+PSE+>5p90+WcO630ld_jZ0)N}ydXgp9I{&Nu-DfKsdluQU> z)m?OzWJ;hMbH(>cJ>%^4U%TPiXP^7zlTT2z3DMPzuSzl`ILu>l)VfE5RlNhdT< z%Ks4-62?=)fO_uvg%sXJZK2K^n^(9Db@$f=Mwrq25zlZa;Kg?hushJFWe)?A+*y6W z*%cT&1acpu13mqI+p+y#rK@t2fj$7VuQ)`bF~u(u)ro_NKv_V3V>r)31UOySoAzcw zKws)>VD;STR^Df(cnbYB%p0@V(^&UNZ^!V{l>+0&eySwKW7Ca?#Uwq;D zJHLHLL{yZo^`A$iD2_RCqK5y*b%g~%qj zR4Ckd;YyYwsOwxqZ;=4-4LsI3x|`FpyC5i1~TtyaJq z@M5NOc!{;4kgds`Mqcp(+))oH2@XIBw_U+TRh3i&?(;~=qVS?buYE5BUQCxHVM@2Y zR8LZ!Kt)$(%@LX;eEN+7=syN=-({$xXsbF80EEDceH3&POyc2?)8T4rXyhc{iS)Ge znCKXH9<*=RsTyJlyRgFPqG>uY5ux0aEoW{;e=aR94i61=c6QXBsB37ftFN!`>mTqW z-yQ1wt%tZJU~y=0sI{%-&?krM8|vHI zS_TJ)5rU^_`36e<0COF@#8a zgg(|PJt)Gh@A`3-y=N^{>%BZp$kTG*({mUHRMe*g$y-60RM}(kY`4bztn} z^#Eu~n|tlc)&LUAZAl8?l&sK}GB8Q}sAP-+SS$Ll*iV{$dyWrFd78d5Zd%Jm5 zT2fMMvRFhbUZ8DR55=wvr5quUW&VY)fZ~a>1X(h(vT|~BFW7Yk>;=WNJ;_8F3c}3@Ov5;AE%gx z?h^?5OYA|Em6CK-w@Ai|2rF)3oss^+73_rdl)H zg{FN8^2vH5z^l0>kjuWl?w)}607I~;zV<|HbQF5G!C;^%n&$sSxRrxbEY3Kye4{Xs zs~or^R_TByCotQnPB0c|> zTLGZ5S6t+@u~NOj#o!76$wyek=ko#l*&QmwAuh_}o)dlnYeyVWD8jmRd5AX>w@a9R z!x7os^s-;1mD66*n?nyyz|AvP~=4aslgX@sxh90)kA z3^bd713+?mvLj&C?rB5-hItw_1f5PCEA(vBz7Oc6NI@S#7yR5buKFD@Ujo3(buV5$ zTUlQxU!yGHL&pdNGDI2^4+?lr$!$>sW5TTq8;HP2Yf~^_avoo`O{e3MhEjSvet?laS8W|n4 z*=(#R28D1b8iA4F5%l=@TYL63^^vh3`fI9wkv@C*i4U@7r3 zqjGUdl022@;mQtIVY-Nsq{6ZQa&#evfU+5Y)@22Vy82pdSk+i~;~0PE(+x zqjh+AI5jPm0IIpF&?yEh&q#Y2R&FP)(^jX;$?Y+j5FhV9Z17k*pa*9Q>Rq_>dj$D9 z^=>&TJtUK5uIHakViD?l16bo7SY5L|H_#9KrL(nNlb2Tk@T(!}RVkA2N6pvXE#G7z z=(l>HF^Pe1G^ah+m#bOn>kgnNKGAbk>xnm3SXB8;>HuJw2kZA97f?U~e20cWO-|9M zfk8r@IA8fft~jrdP)ON$s}S?w%AkKBCM&xb5@7jxisJA3B2E%rdV$CUM;ms!5Rk*U zSPJLm0qc33>Y?IAHo2TVpbZp;5#Ah9p_qc@8R`^mB*j8G`Xu2ZTuOBwsFos8mzJTj z8<{&JBuUQ9%>3t#H&6iJWkPV}1L=458G&-F0byffqr=6}BpDNpP-z}it1S`A$VQns zhlE?rO47n7Np;;oQEgCsFClk3DpwLNy-tx-WK?8SR8)C+#WmMl>vXzirmfxG-6$TY zJyBcVP~X+nF*Y_~ci1JEgy20o>4SrVLxV$~9{&^_J#C;PBcpP2bBfm$S5;RP7Zqn_ zWk%s}LKvFrx3ckgX1%=)R%kAHZn&bR7a&vQIVq#q^D^&nE zL3*f`+~lww18puRns4Y2BTZRMMt&ZP{R;xzhoY!FnpSovem_N!1_K2F>19u4sTts~ z*`0O=O9C{5EoLJiDTPHFF9OO+`^BK$#nMs+UybFTgIlYH0Slo{|0{cdz1+}%7W!X? zYzzCCK7*IMDAXR{!|m$2)fJjE;z=402Sc5Xe=y zkmzIB_=U`J1z=fBK)X_o?mYLHfmh-BfsLt;N|9LJ8oaS%^XpfKz{d=3H(AQ*K>A`q+l2^%q3Voc? z+KOHwc{VSLP>N$QDLOPEDs$~#&F{#NT$eM7_1BS#yW8V3jZ ztyZgxanU42k@Wc37`jIpXv%0Zp#!<&j&IQhLq&PzSHJd^?5ymN;9zuZL_|iSC&l;< zDjga0E49kSF1{!x*2#cS8zOqTd-y#!nM~o~5uP{fxhypffl z|F-gFPl}a5aG(RDYa_swQBOXT_%hcvk_^IW%qr?f`Zo01_1p zXmA6TQ`HVmyoLc#cb?uC6kb;B;Wy>;`5^^q&)U-*20+i2LOm%Qpb>8pDr2A(=KiIV z$MvN`g>Z&SC6Py*7`HL5KYio;%eJhu&*!;iZ`|5eO`yx83uvPyh7N zVJgVtra{QTM^?ydv+Q{nT(EKd`WfpK3q=M!mzd{ruR=c}5E~PPwHI=20a!hf|1Z`8 zM+nS?Kp28$Bw4hs=*lauV0o^G2Qa1N3IOTL0$_4tqOG-+|GToHlA;YzQtbDBO7O2! z*4f|x{&y`cCsR{Wsw&Yx6=|vIp!b&Y-tw41kul z*3q$X{*0HERbmznPV_Q_vZSB@ZD@YFoQ`!V(f|7Cbw(qKHQ}s%>C5-ORNFCSHW*k! ztbqqhHm-u>m$>Q$w(=7g+C(FX?Ntr2ETdVO|fA? z4hU=xX8ZU4)-$~QQaCu8^0w1?K{Yi9p=mzAQB;M`*zP|sy`|jKC zy#49XBf}%ZjFa&m&135cJSQD4$HJl$9nt>%`#(JJq0wltSb{@BLQ;}b%1X<&ZQHtW z!^XtK1VBmDAgT5yACm99w`B1E)FyJm4W_rJmwzHMGBPGMCa`8TFQ66b{HR91pI>yL zolf=IK)n1zTEkQwSSGYvT_G#DVz=M`iU6zr5sh04qyznKum%H7XnNujzJ((L4j42< zb)XK|3YL>-*WV$aQNV(l82WSs<}04-&|5^irl~UDI|FrXPNO$R!DAs-0}psO?YbF( zDc%KD89i8?9cwm_E|#GIxOQvFQ|~r@+B#}68I_H8Jk*+7T-=q^q&=WQ--JEUWAi4|DyQlFoMS!IU7rVVHO z{1-p-n3sN86bfZ^KBiF6SV@v(SzmY^kQ60>Q#H3(%A10oo}P)x2_6(wS66#igj7!r z^rdg?+jrl+_wd_8e};yICMG219#iL4X5g5U>K~1SHGK$yzAl zM+nqOc286S00EVdln;&sL~bw{l2cJQkh<;cZD?cjTr+WfU42ar3I~q2wzW-8PB|S8 zx8p*9uOC~H^}oqkaiK%V$jB%!Ek9%9hVruVyu94-@JNHnh*3IZMY52>8(I3V#F!Cf zgrGNZ6ZEOZ`g)t)g@Ur+U=tc5g0uZ)TrTNk3grt))`?@NPcJM%mjfCo2V^2lraLa% zc-{T~0l-MGP^kiiJ}@)Ccvf-R53k;ez^@ZC)96k4sXxAY%dHQ-izYu5*%pxdCKeDj z+v1ITw#P;U+p%LbHNUVlJ7+ThQW?lgIbf8d~qET2!2ZaO&nJwWF z5z)~xX=!Q6NlCHMapSzICPBo+#0ZCjzd}?+@+9o&UQ^twra)Cra5|X-A02q~uaE41 z?>(#4>hD&F58B1DC^|+L-=-lS{0n2p;L0&vX&Z1X+^`mtR8?>OwSYUxlEq}s-bZS zS9N@e<%fDu$E^2TBw5x$=_$E8)`7IFOv{v1fLBNTBp8>X{Iw>#75O}>{ zNCF~^)!aXslN!fz6k3FAF5SHDn>i|7=pFim##Ut)BtD~UQi*z2?$nQ zwm$Dykp~xTjM+%?-zAy!@c8wdk_?1|NRD&F0MOVo#zAex`Xng*i2(=8XU(VZuZ&A1 zwtxUm9#qCJ09OO#%rS7MYjSdvnkSd@0G^*;Bmrp&v0w`@2z_TF_|{P_aGIY+kjg+C zxBD5_pxRlKffUGcium{?0t5EncMgk|yQ6@rMs zEpO^;o{5nb57qb@0}F)!0)XJ4U~KH0UwHM^S34Ze$;ru6r@Bx)(17Ve^_`tvR_mms zzAruIX6G8Qd2!=YPd{Za8WQ5;b93_0{+E}Omy{K!rlf_2hml+%g}0+nFf7C<1^|!C zQl&>*TUW>bmXe&DnVAVW))BUc&J~zmOC4&fJb75w3 zbok`-B1u!CD3(Cxa@uXz?kGdho`JlSDS?i1b74l9*^G{tq)BC^0%5qwAj8h80`&bP zr|a20GBrMLvjhbTeHg-V0GU`L2s%+b^yiuufH&X|+^uxo-v+#cD2^Nj{6qji?AgX+ z+uhsupV#-j_x`)JwRK}-BMy!OwyfI>nvm$)MT5}Y+4=e#|EVgkNJ>mbPcjTIr3)0- zvo2*ipDlnq2xsw4=s&KK}T?;=+>WM$8stL_}m-M0r;%=;=W|vfw!di zTFf=LviB^v1d5X<(m3|7VHl^1_>(nvVm)rf^GHW-QBPg%PG2nVLS?GhxE43Ab#$yHnTF;vyjsg9HH&2t04n ze(C|D`i>ic28v;k}+FGBYM2}((~xqh{#9;d5emQE6U3^ZrqTYlN%Ks zWi*<2$~!ME1l)&Z#&H9v>f{n3%9-%NFz& z8`nJ0+S*!Ii|YeT%_sYMd*|jCAj7JQ1J3^b0rd0!2k)alLqdZS6A}vx*Hu=OZ`iP* zxVR`TF5ZN@M0h|>dh$ zIU7^kIb4tu#c~ybP>XR}Ny@YDH(M~E2OzBb3rY{F5xtY=c5C3L4VKIWeaWRecAOU*7pLSI zD|{n>-xUtJmnS8KEatv@?!WiG`)B87#O8H8x@oD&8}Q?d!h*u|^z@jRn9#8Bkf7k- z{qcW)aMxWlO}kvKpZw(Ro#*Y`zGM5YOLl$p*4y^K{~jl*>p<7n*KYXg@ZiYF=7!;s z;iV-9$sHZ~ir4qO{`!Aj-@NIJpWXel^UgnC_&(@`tqr~0dPSoUZZ@FvX`P-LpBMwU z`G?KQ%2rI1z;F7R&e6-#v)1-R^UFG3c`{DlN5QJ_;{)DL=q)&1IsHZhm<5*O0-E*1 zRSPMUheNOU+{0Bhbnu&lU+a{%uk`tH6)IP29|(^ge~r2U@Nq-_tm;UHDv@F0$f;JisHufznIZZ|bUy{v?i^xxnZtk6; z%#_&Rh8IG+!?9&uVsccN;93PpL1~BtJIXU&_^1Oa_)NSSjML>R%S?$6u^`lj02mF( zqpkfD^R^I62&cg)HX3ld$aR%c5|7;ObVv+wSyxj&XrNqlb)6;!qX5bgfyi11G6jfb z7|)r3`NR&#$&=0e?>RZy;o;#@Y~l6#k~W{5nDpr1{@&l$*HDlBdK;S>T3T8M1_x$l zW`wR*Nm!ErQ&U#-)6mfP+;h*NU5bi|%FW4HS6H-Z%ck&V_8UjNdg(ZCSCQy(FgTa`Tn3SB9x?}rJ7TcOG4D=7QwzZz9IdP)) zL~~2?@X(OWW^J?9;b9r+83lO-JI}x1OIKYP6l{?hKce}x zB=ZPG^~b@1!S0?Oev_4zRp{LC&In=?Fo&@43}hw6NZ~Lj`h&XeJ?EAHmgV)N&R?JN z^!q0{kxxoY(qg-`qSWZrsBjh%a+3vs2&-=^Pe0l*f?I(VvjqhJXO(6cNW#T62&1n( zP}glV8a$jb_|gR6VRz@Lu8S_c7@L>jQjV%+MRB3ZGe@Lq$=(aH^d*$^T!nZ5y?X9B z=RW=P(~%Joa*v3jse(uUD3bsE@9(?+clXcD%#tX^HQ=rl#>q%;Gn(k2;Gm$O;NXy8 zv(aoaqdNiS`lGLKIbDm33v+XGv-oG;<#3YRRgdC%io0G$M#o=y89!1}Q!c&a@>_1Y zxum2R?KR##Ngov~!|R7oU}+cY`u=zCdhjm~;=oSmvxVoLbIwgS-Mn+hj)G0u0_x$?T_>f&pS$WyjS6|6@0cED9Kll?=}JCy=*UHvT=LbgeeE~D`c=Fj-VX`jeVv94 zuRkm34_Bja#O?kC{3X#nGE<%(QRk%nbaq28kd#Fn%kX=!fc9^Jit)6>&X-J*b?&BXXP`Z;{~@MDkfHJQvQX{iNy`DLYL z#YII01^Fo{sgaQpG;JVA0UnCXdmze;LiZQ|3LuhiswPBPe;_31<@RqwX@=3jpKWiAFg5A^i(oIH85v9X~ZI}>+|jg8suPEPnz#-KCSnR;t|eO>(vFTSw< z{r8^w$3KM@Yd5=IiP3}wXF+RA%k1nNZ|PQ9St*<>79t?d)6#fd9jGXD@jHyr>&J}) zvy1j%lYwh02UXcgv5~FfDTS?aMUO9qh044ZW zK<+|^XROQQ_m2c{Xlk~;XTpSgi=oGjLjvsxKsz}OI*wfcq4b{ya&V!XKHgUV=y69E zzTxe+-u&c~!|u{KpfI?b>zm?YG^wWy==YK;ya}aHm!1lK z*v}G0Ma94P`Oh!8_yYBiP3TQZr6ux_< zBq#2D?C*Q_?5R0XgMy$JUwmn4VeyH_pSbk$%P-h(`9gtAiU@o^K!Yp2CNoi-fNr0um}; z_|+(*N$6kcYy||sC4*spuMp^Uvf#t|zD@Zl5{dWB;>Fo*!U8hbB3=DFLH$-_wxg^UE zw9be!Mu9xOM<^>iEId3sGQXhkqKhv^n^;<0?CGT&s$emR9aqIn4h1Kkr5giMq{~EE=VIe&3=(MA+H-E z6-aCZP`u)1{VNN5^86wp9H0Oh8Hv3I5IQF~hRpcbSVwzDYg=nwZEa&yQ%7gV)YKFf z?NK~V96z?OxEK-|q^gCv4<7(5QCDA&K8pq_A|jNxTP8TMQLX|2_zD1&49EnZF03DG zpvj?$xtfmQvrE!loR?X2h`BT??t{8Mj@6If$P0CzS(3@On_z2VjOuY?1VfNTX|b{4 zL9;d%9V1`rax!d8n58H^28!kxM_T%rGdS{IrseF`EX z!c{jt@%-^Mx_|!TF@*jRK6YUhEMn_fXI^o|7tcBSoUH6Di^ZbaqHrXVtSVNmH5d)7 znFtCAiHeQM%*-sz%X|5i=i6F4(5U8QXMOiO-+T47*Nz-HI6pgwLQspz!Z7Shue|v0 zf4{or%&oV5;~Tp!+=WoMD)1q^7V(5ua6W$FTRI+k_@O`l<tJk%(v=Cg(bIHXQU9tO0RtSCZf6(uFxp_}N_3TyG zT#15h%0U0;tv4>+eaSOVKbMi2iK6HmzIMYk*IaYpz=3=2`OU{4f5H!NOKa=yFI@V- z0}o&KU*)0>3Brp|f%YP@T#Ezf zFNeK?9C^TqY)xVYo#{om0>>e*01|ow9{NYp7yHx=`mRd2;{Kq0=2L-wk=m8JBK!JQ zU%k%(ha4K&{WaBl(z#jSuhyZz75y{M{cFg@>hyW=`%bS_ORxg>ME6PHos0!lVAZV~ zc$Ei{6Sjv^@?19N6&E5PETRS@{ZV7z55BmOTymL3^R_Z8k?&?UX=dE}4TDBnP`0(Zm<_oJF`+@Mcy{-n=pso7=%K&x#lPSn%iTY@`}W&!4+;q;I9okFl!DyX;z8qieNgx? zNy>!^kxJxbTn@9z%zr_2bj-~+-td*LUf*=G;f3d)+xN!n-Cd{9ju=Q99nA;tzmI;3 zONtP5zUqoAGcvO{*-;2Rygy`xC`AFKwYBA*-`+!Ttukm=zjNnz@4ff86h)zZ;OkOy zqcsJlty9-rd+q!0eZU`kdV1=;_ug-^m2 zbk_yvKl99UmDN>{VN52|`R8A7=9V)b`P;+4x#w3i)&=yz>FK#!ZoXl5cJ|g=zmDw- zp{GlL3Wf6;S2&V%x!Swh`Pd^dAt^Q{&PTpz8OQ;84+HcFk${y29l#$EcLnXU%eFK= z&3V-T@qmtl^z`oa+8Y4<*y`+y;_e_YUU0fw!qRj}Z`AWTN z@xLYmb+UJI(7KQs6ULE%h`5N5b?Na(J4R`m<}1tyE|h1cMuk`$5O+YL%|E>F=oMRv zwwGn_sAp?Q#@_uc1S{m~5zKTlY(-XVM38~u3h`(ohgt?0NGhd&+^2+N96NrTXTzi(Vd}dl`fxJ@#|?5ioz;0s6lSvF zeXu*6hfnsS!%;Vj3(B8Bf~N#qP*C{Plm8Gkuh!#M4M^ur&&{q|drKmORkPd;WGEFXzAHJ$w74}X0B{rB(OdERx` zUAOJ5ZNZ@-V!#i4W-tlxk0<^yJd7hoG+Qpa^wMAd@)v-lIcgbD)HZQHbzR+w8*aF< zju(s~h_KL*M;`g>x}tRq%g8J%{;tQxTO}pMFTMEkm#+R&Lwy~Z3vHbp7hk;VpHDxt zbH`4Ci^R+p%U$37!I_)Ry!G~5>+2f{+zRi!i-blmQ+2x1W+^Wy}~5@+64(< zg#aMXmD)2^4}IKtSJXDJ>Ij@(jkCBa6d>pW=zB(2gbwwqWlgNlm0K2}sXXa79lnZZ zB;cI~{#1;BkEp=ocMzCP0?_=TK;meXb{iq*yx?kI!S1t`YiotxLO=D`0RstU=bcB} zhSOprM7j>xT$27t%MiyT!8?l}@ma+g{2%Dw*}3_Htpf>BVLM9GINL06Ms8wwun}u- zb8rXqgrLv>;KIs@_=`Sj=rz%_C{+U7IrxH1jnF{(!GZVReeWH}XCqk%l$k=QXBPM$ zLxBds34O%J#yFMd2vRYA`Aj?q_ z038B?ZYP@>(a%#)KWQ|X<6>j;^72cHvA9rC(Ynmc%<%9C+DHrBc}cmS^MMjc>*`4j z-2+!;1q7-~TZEuNgJZAo$nfyU2wt{Q5H{7yUVx#Y!GXa6oR(&Z^&2+GkXEu z-6jquFwxYh;py%XYkpcBg4Hz?US}0T#r1|R41}i* zCVrj)AjW#`Q^O6cL7(7BEuAVHy<#x~iVF+I#>Hl3WsQuE8AxhsYUmPjS#I}86hA!w{0lF>^ip14?uEN9 zy!gTkD=R9)BO|>_ctJRAoqp?`xA+$$Bg238)BlHNFAEu593=VrC2k5H8X9`wfj>X| z@L%TV7x|A`%;pFG^6;)*7qToAM;l6N^ZX42o!tEV+*ejC11^6L!P@Nb=}D+-_vw3$1WsER z;I+#c`Yvnu((zT_h9E)ca*P7LBXY2edzrV1<>i|8VaTn_tS+Am1bqQtQkif9YT+C) z`z)l?Xlj3L_myWB0+GhLsVIY@j&SG@uXhMkAymX~20^&S-qDe%`9tl)4i`eGm~@d6 z6Iz@eU3+TMNO9zB2!o8|hP))cB!H06;N(Jm_qd0Ajr!^$1toP(L5LwK1Iba&xjY&a zB;_TfAepqvK2s`?1QZ@rJdt8#boiNPpE>{h^HGSS>W<~#DFpyL9YcNE5GL*FI>rB8 zT2jUZS1k1H?@cJuj}qa=Ydf;XdZ1Xhp$w+^BQY9HX{l)$=^5vqyPd_hzP5?+@vg4U zy1M$hy4w2s`rf|2*|}N91?7HX033GP;LyOpK>z#i??;0iWC>18Of1MR*m%Z<^3w96 zlA^fSxZvPm4&rgG!?-yFo2E%E*=pl4kAqff_)F)9@2yaT2*9@-nWAxpXliOkNEE%< zVm6kPlq%4z`U661ySvyV3SZ|O?1xQ#1!-~oGvO9vb$;@x(Pngt8B8;0&qmR#I72>e z?nNi^c-QDvTT2)`+dyGTTx@vA%#xF$Frg(P$XJpd$8s|tJw9mYcCgTbkC;{N6%^R) z@>34J1DI8q8~`^eI8?`0zNzMdv4A{!Vx>#!fp>2f4haeU$^ZPnFMjDNyUmWieqnCz z&?g^%{Lx1M5ZbjXlHd7bn**`FV`zla41=;qt_STlR2OfAJJtKY7#!cI|pR;kp#`Me# zvnhy_EI0t@AMEYz>%rf}u+`NYDk`cW)?LM7ns$d{Vtk^mq5k!MqsOabqm$A;M}&v} z<)Mf6?Ae2J|Eim)>^LZr4qKb2InP(k6QlTrmjcAWrk=?~S7eCEhpUc+-FaaZk~4i`G%slAHAgCKNR72|p@L;#aY+e9 zV>*F530;<>J&bbJjEzHdi4G*0>*<6ppfx6n(w)Vln!38cwD)dcq zsCj8|vAY{Z4ITe^bDx2xBcmcS(lW}*%Sww&&_7vOS+Oy(W{ZX7`40Rp3$DFT-et9> zs@%>lp9@d@bf8^hLB`7%9 zY%~FiblMq~U{M(9ushK<<`!&s-F272K;L%zx9Q>JcWLqe&!hjjuVp-voo`@b8`|C;v>Q%!o$K29Qb%{ zdX7Ik!$U()Kl^ldcW?i|;ON+J_o>eQ{{Cs}tlQz1mX<#F=Lff*y_L`XD|0XMZ~;*c z47(`6^z^iU|LfJuckf0Q3K~;~i@p8U+a|{+e)yvwapXxH+l7XQJ^sW$Y__G>Uw;E_ zXK~4X+c$3c;DZlSGSUHrYTr7w-W!C+YL4?$HaR&dzaU??m9szeuQ%dg_RvK*v zzjl4vZ+Gchi-`E8_!5D>A%NJ)@AmcgaC)r+K;J}euzKh>5DJjz%`AZLTV2S$7P_Z! z4Zid<1lAf>AmFpuJ)kK@q!F>`%v*SF3i_*K622)wK;!xa8d_0`kRAeW;h0LDonM>5 za;gE|((1fflAvM_+*;6}pzqIJ%rxkqoIBAqy0s{k-%?ztr8G1CKohnEMmVM-D70LQJ#+ONQeuzHzjj z#$A*svsZl|Rn+d_-0Qg)qp`1L2k}(1+v~2QYf|H)yTZ2PF@^bU?@(OnE-i?sf-0a*y ze}7|B)3Ia6YEGPJ?`WHxm}Gce8ZMYaTR>wwhJ{8aK0S5}?TX1{jEsmxF+f2uT#b7zz=N3=fY`zO2e;@MLh6 zER;YmHyNp#&fyX3LR>^Jz!`Y9A~PW(#5|8;T&Ht=aYl5gh2_+2TLvcD2PZ8iOUJPF zWdB5Eb^_mqv7sROy~chsjcM_l)}^8ggyG(Aom*-=HDX2qfN%XR>9}Z$mQFBVuz>0+ zAM`RxZmOtWq^qFhUy*>s;HwhoGNDKc z#XKgHIV2<`Iwm?XJ|QC`BPS;}J3Bi)BQq*02F)n+M!Um4GdpwOgAc#`?OR1vE=U2K zr2q3D|G2KO=$4yrWQ7t4KUHyOa!gFzw{HK|jo07!(MJbfc>aYCK6-zke}G}+{asqJ zpX%yCKkx2;U$yrf2@PGu%`L6hUH27@yB-P=Z@&5KcYOPfsOV@u_wPBcpvb5L@`&Rr z2Oa4f`~Gvql~*1;a+rVH-9P`=;g}aU(If~xX)zkBX zAOGm7C!eAXGy#3&c33zvGSb+9`v(}7EzB2XJ=aGH*c8xBIu(Tm|%&|5zRi2rM_uls$ah){>Pw#0@ACk1>)&sOz!E_J#xp7Zenf zloS=@7pA171O)|&Xiy;w1-vf@Qt1YWe{&Qapt3iHVhAPVlld-8G9ofOGAgpPymZf( z_c$E($;pY%&aMWm+K(ASeSQ5_tJUdrDZj<(aE@?~Lx&DMP7ns8AvQKHH#?`atgNi0 zq@)2Ul0OQALtF^i1B>zHnb+y=-A&K0p2t|NU zGQi{{8JdC93yX(Z`mWeqzyVW`5*=EY9C@T=0J6-EvMec;_SW%^MJEw%B<)W7yR}^# za^v|P-ZS!(X$s)rjUcuaXG%MHtYdIu&Jhw~QLxd31LH+PfkO2%EG(3!IRjuQgsg54 zk_2kbzp`}XwZse+SzHJN12hd`a1^(&2?_Dv|Ni&xyz|?WQ&SV;6H`-Di;GJLp&JZ_ zAhQ_-wBh05A>4ze4HQiw*t)d1G&Vlg+S1zE*4EP8+S}hVIx^DTbIR^;3O6hM*1;7H zPIdRFmkddo9>*Cbi~0Or7wkNL=kUnT{{QZONvg(Up{L&>CUzCuP$Y~j|fB-;?7wT>zjy{!?l=%AVukG2hXaBqV`IjDj^zWxm zo%-iLpG-aU+c`}0!^=mxNDKi2df7dKtRK{>IDQnL+zJK0(ILwFSo~aWdXo) zb`)yDFJf(`*Z)N{zmhOogXIr3J7~2n#(=lbAFR@tLw^%`Rj5{;MKsUGCg6L-G^epz z+D*xY@KU<>c9tNJJISQnG=u=GU}PaAl%1@~{ea5slOSA&HNW4l>v8R2X^IyQB{mc! z8z~B*f3uOQ%8nNdfC=z!P1mB6F&jyP0UYldnOSs(24S6+$Y4`tPQsft-GC-z!z~rr z@q$efAPzS7jnCP`gF|?D=>3dxuW;)e!g&N89qo7A`E5=NgzF!rsIaiG?3~>7 z)m2sH2*6ZiW@d$khhbGEQY`vNHC2T!yJ|X0Xj`Ngsk>pJf|k#3laIm(18qn^SScat zth2VF&n?+(W1}N&t!?!U^))po8XFt?2m0sc=2=!Xd?+3m8XQDF2R=GLVAohL6ODoC9}ZKjMkR6fq_9D%2ijdSI!hD zxw=WMwt@k$dxVenhNS8L)^uO7WgWje76W-ke&Q#MJwYb)OEN$25jfs|tOJb<`qMy? z@7A9B(HA%KT2LkF@n{ZDSr-x_gDTPF7dQRinodX>I7W$LQn^`kif4^wnBn1Jiblgj z%e^3y*uHdyDxsv;Mp3b~RQd(Q6|}*G0z9D2h89DAv?pl##m2;9JxZzYgj?b9799@f z<3Np!3#waxA75)5Yzxd8~zr%m}|NZRlojZ0! zMn`!`4sjcP@7?!pOE!`qEkWi@n>KTCj80NK@V|~h{b0av|ESkaU$0rez*cX8{&jLzG~rersjsB! z0+;_?zQ#&h?FZ`kpvMgp5Z4l`2knDsg$hGJ)F6Nz@PKq{i8r)!LVy1OqVq-3rPeBNJ zOJVZ9<6RDyqckHmJ|ft~5}alz@z${pt`SgT&dLjq45fHD2R-mSQ0}w>OM2d>A@ngh z)S7)jOsNB@6d_o=N?V7DH~;~Wfq{YHkr5tyZ`imVyP7Ezz)Hg`v7AGa0E^iS_8DkO zvPPbrovu0l>G5NqVn`ZfNl8vFEiGGLU0qpGk(ZYrA0KbFSlpxnMNeO#v{T|U{elZI zgbErC^g2DIqmmSuj3!fBMn-x@=6M%fz%b10-0VPKUsF>P?j&xgZ)t5A9UZsZ9B$+2 zuseFW#~W|H!MSvWXJ%!W78jS6mKNma=jG-mBqrfQAf=QikcDYfB@K@*P4V50O$~Ot z4FzN2;bCZS2sxn+xIC{E9|`8g9uCmB3m1)y(LjIN+CRT&53(2-uBT%|PCQ^;8L`os z2~jSH&tcclR8#M`k;YyYG)cDfjP#CLvy!6GR${{}XD1$bBwiB;Fq;sTm})6>)Q^YZ{uufP89-`?|Et|kc!ii%%){@IX_P&CtMqZxgjm=l76 zc?EwZt8M^dknCrP0n+^-I3(zqXP*9MWW-~8_wuiGbad^y;QR+3eE4f$69`DReEl1* zz4osIAAN*w5*=;r|NDnO{_@wq0K9&dya?cb&^5CE{dWn@EhQ~2y}Y~}Gn%*pg$}H* zg^xvFckN`UyC@W)v`~khsbXLHKfniafPpUe0U!roWL-}t@Ny;2p=NC#YC-~ykE|rH zfx7ehp9?9PmB@g4_BaQI4%g6B`v2xbnKJh~N1^VisXy!QNwNp}I%D*lL|@m5{t2MR z_)!1#tmdDq7a^$s&JNrhVpd1sfU_2obzo$~4<#fhr)PNdz2Ia&Z0bb;03U!v1eq%H zlDa-_EJ@D_3o@bgm?lB%&;-IvhM)+BTX!8U_Hf(K8F>l(_Sfeom}szQcWy37M$n(Z zD>OMVyLh;Hz(^Z-7~|1Bt&EdMso>8GgFwOurdQYYC5J8DoG{?I9T{~AWfB=oH#RoT z&CcWIK#Jy!X_Xxss&!e)zavy#UA_K0cij2ZQ_oCHjN9F8yZ~0a@9gaC=;(aql~*VO z6%`eom6=siT)KXJb$Mx7PHs+EXc#Zk$pHwiyA@y%EdD9QL2^q4Ak-Wbx9mG#Vc^<9 z@M&PBQUZtw3y&x%Eh#O#=Gr|BY7>F(~SudA;)QG-H)j*j-psYzDl>Wj4zt=8$u zp0ORx~`VRtE|kFrq7lS+3E zn`2~bjNmk-fZVm~&Gyd+`%9Tjkegh@^g#Qgk6iwRFYGw?To!s?4aGhYp=X;SNi;2M zjvssJg%{uZaDQi4$HLsAP)#Al=!4rwR&n7O40J?9L}Fqx+D=Pz6T^ub<>VI>msNcC z&TsA5v4iVuCzT0z;M181O1mVe+|pEN7zLK??3n4a~yU%y0<>^$Y1vCxwdd!A@uOHuB)#{w+p`Pa@JXAg$9Rkm6Fxr zxTc06-h9dQMIK1N#4?f3Fb{&lz z;JNRbTlA-h>;XepDC)&ojIwfs0-@BxsmR1~h+Kq{G)=!(({<~vN`l~>LBZytlovj# zug*ynn?Aw*x~@4p6J^2R9xFzY)RC5c;^J}y*jWIw;v-X{gS$qo>+_O$%T@{yb)7?l z)}>%`FyD2o0o0YZ1MCDWtYkWBA&}6cwkA+5FH_AtWbP{aWdnhW9aATkt2Ke zK58%+;u8{bb8;&XmM$$VD=SS&NsWjI2b?!76wH{pb0mm$%4(SMt^+UDql5%PhA7dSXko35}}l!w%Z+J zBV!}OqlXUTmP&JwIVmBry0ZG}Yp%KIq6=xG0caJeg>zxI+fOz(0nVMbq@)CE)hj>` zEAu@>FKe01B|{&n^x$H_`*l5=*Cq29Jvt&dFEzR-Bc7xHzvmy;bppyDdQy=TW%%!> zT{oX!$qgl_%1@4t2s)!Ml@V)m@7H(PTp)yV%U0k|`Gx>xBRVb!M;OrVB4iDJ32{nI zyg(&Kt442t5OhWrH)#HYxSs$89~N^Eg3eH`3VD>uxOekJFm!k)YHIGe=Qr=X^VZ^$ z4G5CHygEL?pL+zaLqdWQ6B05qvU2nCbFy-?a&ppA(&7{1!$U**2L{hNd&}hHgwyHl z>+Abq|GTMasfwr_xRcU++<1X{eo7#ov&tf4Vqyvk3O+rIt7QGXy^Rfxo40I&jMQx+ z6@Y-R+bZ;8wL*Bg!quh<=-*%c@)wzz8Mobjo73*#P9JgaZ|~{sXy5zyN5dl`tE;Q7 zzy79&9(s@>!IX9ScmMnQ$M^1)IfP>MW8c1gHZ;6AhNR9r|2#!b185epb=9|lB8u{p zJB7ZV@tI(Tn%VbNMF0Am38C*Oh47#%X^WE*`bg#);mTV3_Yj(Kh(;~tGbjttD?U8G zr{VLH+CLpl6{|5y_@ z83^=b{UPC1AW{E->8t>-;=02lAgJKB$X^Y`6&VvR>Lgjvdp*zyE88-nkUa7Q1W3zH>2R+ z00rj*x=l94uV$k~1b1?l*EhiTh$?(Eeglb7BQq=xl0gtf{GKY-;T3?VYhsyB!w-SOX|f z=#i+csRnx0PwO%gy1vE`;c;hp8{C|MPH^O zS5C+VNlKE4VC;(_7tZ<9lp!HLF)=ZD+t#zudu&UKy}f<)^>s%NA3?*?-qAibHtyi+ z8`1#c(vZ#8-P3dGRQHQ7zx2!B+;jK;{FsIQN?Q;N^bho$>LCFNCYkc`a>Y#L&K0X* znFHC+8G7&pc$7>V=mQNsKfZD^-z#e%=`E$%Md@*TK7M-McA|60V5B8EPlJIz);Tym zYl{f8ppWDx#hz83mlYo+d<#Q-P}gJR-Y?hDJmvQZnaP)wkdU33VY4k_87tP^`4vJj z7mh9`h6~sk{-TA71|8uYTs@EXr{F0tm>+-r^*2^lltaOLSc>(5GREhBb+OFey?_7d zPk%BoF$H8HQ4~Y6D5gwFPOPY?EHAGtE-J|{C_u12EG$g)#TL;rMDq}r0nvr;V%Y4= z?3Cmb-ZqXWs)<(<&}C;UU4qa}%^n(P`oar#@d1F{;e6(~=WqbPOI9sAouUhXDDR6m z-FRbeZvLJIMv3$h!C>_YwZ(GhWWUu&qy1U9SFd?hYeJMsgTeRf>$yX0Jl0C$( z2dtoEvY1lRQd85?w(r=Ep0e3&+{U|6JWz))b!}}|_bKb7)os(ZrKO%81gE>-e*0~- zr$H7=Vp39OMrK)QX$cnYFUicx3JVP*x%0v$E?JTzWCI1}hjNdpB3R+mmXaVmAUt$b z#ALMyMonf*Zf-7$My|T*Dio+#ty3r-XliOWaiX@auCA-AYkXpYabeJdn>dXIhr@CF z=n<|M1^gt30l}Fq%m7Tupo@!(-DarLpFtqptHpAlqQHYq(w+|uz9 zFA%~nd|~(R|Mw5`vvcULmtK7Sd*8h?D?0~r0;0g9`#-=%38=X7Qsl@m%(ks(esb{O zm#)5=m;OYLy1M%9=WhS!lTYs0vEzoX-1w_s|B@t$h55xlKlqow@BKTkw#@H8x&%(1 zJjrkFth3I=vV(Lrda_X^sVQFo~B{H;A9m609gJJ!{x*(I+sqM8(wNFrueNn z=m*9cLZwjm!JZCtDt^;+KnDo|{W`)&m1>QScIA~XzepFZ5@8GIeo0So1y>F|eS{o@ zzvG3zbNs#nTjIl8TIs%*)GnyEet%46!-djRYe55ewf#kzi)gb);n=J28T9K1q%W!O4G?A!)<$ z_I?{fgi3}6+_lC6>chsq?G+igx<%0&v*HC78Ua4-7@VB5M~0f+pn$rUg_p7tn4BuwM&@B-H6k{p+7J_x_O22UV?kAso5qB=E`SgHYhpFi7+PXi3-On)98z<2n#7U&=N9?4aoyZWz2=pz;anrYZ9``x2Tz;zKQt13`!Q7m0gPy|RKe@kJq3?yidDKyF4W5>=N-*bHrp~j}hrl`oM z>h;wOZr{{e!+3@dI#S4`>a#L4;}R0YR}|`>Qf^ypN+G1&Dv&#X`Aj^Dcu0yq*wnM< zoMIp*VugNHmOa)!NKrIUp9h1%aPVX=WLUsWdWyo6hvG2e2X)?k zUxdT%;w~=|=vd96=b#YEl83SlScr0=(i_2JZ}`h&adFW)Z55?+nAG(28*jKCLg#bO zKRZ7^zqDkVo1LAsPK}R^jg5~C4-d`EOwZ3R@Qz)A*&1Z=ctDO9h?~;M=H?dk<9P`2 z@d-b>`zJo-xD=s@q`#}K)ZvqfLigLh`OSatdwphl8a@5O^UvP)jc=5cl`5)sK#%|e zzGjo|J2UW63s+qMvFpkfnx0_bJId6h;2LK8)C?Ir{0m55KK-Z}Aq;OW9 z)0S99KDgKzyc%ipWZ&fA^n6luxQlDNvluD#X$p$~!cSZJjRpgk%!EJ$6h;GeqH}n5 z(Gkok1yM8^OmVVzI1dWmt?8sFTA>N3Qn7PqOo`2MXm1x6?F8u{A)&(5P{pTJ0V2(N z05`g1PjBzD&p(F(0EKjmEZZ&x0HQ)8m#Syky4pIfXBR|ANAVrNKtqs9jsX-+pI$uP zWOY;7;Y-m_N|97dbPW1gU%mdu8*g;FTw^1nr@Fi9YU}GTSLj4nSJy1Zk#IYSb8~Yi zPc}6-H$VTv^SGHfK0Y@muc`{uyVn&LCMPAw#KzE+f#mobBq1~DS%ww+6_s#Ij2eK- zo*F`xWUbN?n2*NLNl%PVOiE1R-%JAF2aiBve0-v*sfi!^bwx!cqe(UCAyocfsOtc) zU`{}Y9F>Tw?HpTlIL#&lWT6=PkaIR?{i$)9HY%@dw39}fYU!UGo|#XK3MXWT0bp~o zpEUIujYcktR(cmebyUq15;$vb$oQ3-^>+P zT!BJg2m>$S>P#Z~&$Yspd|SXAci=DU4|N##F5}Px0x&u|QBNDN1U{gJPI|&}k8Z63 z0I2U|18bA0_o`Ej{5n$*`t&r{u2KP3>F9JK;{arNU_jqU z_}~#i-*poGw+ZbQY9EyZ0A#~@s7lL=xiS$fLfQXSi3@-#g)V43LWF1qHZdcvjY?c0 zGbn`M8xS-JW@ep7+DE^*Io!?5X=Hk?ZE(^|)BhiP-vJoKb#*;&W}6!74Izqz=%5A| zT)!PP3$C&o#x)Vafu6Yw{b5Rj7<>|5+G59BqR{(Wy{R{-<$eo zc4l^VwE~hq8^@MbyHnr1ckaFCo+G9~HT37=*j;=3svGwlGO-}2p;^2pLU-T5^19{( zwa?P*a;s+wQllj!Xs5#K-Bzg}Kz}tIKAYqsWMyYF3f$I3LL@1y1pqi0kdW}eVE?+B zYU%9>B@@%rGiaiRNf`Wok1&19r5C1yQ-`CvS zf`R^O@>*3}SJ&L!JUHN|uMx|#d??i1(%iIj=a*l7fgxH#Vq!*m`q;5!#}^e(C$DKG zB@;3;vxty95=BN8HwFPTD_Y7wT9IEg?^MwZCW7KL-!Bv~FNG22h7EPCZM%>tby})( z08qnP%Bn&9&9B~io3o$(d{uLWq zPd+$RP+B+-4vC%v@+m{bDDU2`*x+7ujF36jq2+BjlpL7T1?6P9NO z8DaYpJa^r-Xl+$hOLL2)jwF^oL=jV|1SGZ=fX2lm|MmIY{A@>;v4q%+izWV+3#l0oGrIC(c7U$9SkA;iFElBX;8|Ck(-x$$we3T_YaUc ziDy3f_(PA+i$^RznDsT)t*yIoq}$%U_u1#3k-nFjo_f|fX9KJG5yTflm}vGzRLhGc z-Hyy4kV81+uum`A!$W4j4rR*`8>ROdOJay+5T~k7`@RCem^Cz@NU@7Ou!|wU0NWlH z6e+Dc^l&N$4jhVWKW5%t}C|Sd~sv)#;V~ z8!d9JR})cX9JLIyDB>d#wWXgmO1nuKPPNYwf8x-`YqtIR;E9CnBWlZtQZwATt-IQL z{K<*Qtj5QYsLdF*qtB{#95Q(%Be0@|I3xB0v(-D=oA>soCMVlcC$)^GD7Y@;kFxTz z=~JhHzFMd&zHNJTP4!Pd{V*!J0trk<7@?JIij}n10ti_}PYT5ul9+KyRls57~4j&)Ox;>tRgoNajl78OsLG})WvduPd#58i(-81PF3IXqyJ zQ&Rnde*ElZXJcOyqJ4qF|r&m35n&L*#cP=#9r{IXepFAplKC@T}9%xcgsCO zRjtGEKz&1fYipa|ACNdsVm~gz@f08A_jYvb*}Z3N)mr>MMuFL)1pD-9(<>_~rc9YK zcI?;@si|&{n~`uP$gQlP3(EqWn%!U0X${P zq^m>{r$jUd2q-%~&}vFZRIb?=9Q#@!BoP-bADui1LGx z6^VBLs>B*q?E>5cWsA-UWv>k9EfNh?#bSwN~A z1sz5+sy`N}(S@-9qFN7&eksqmMlLop;~C zhx+kHAFNuvdgiQ|VbUuQR~1I2(b<$jfFKC-=Fj`!{SQt%{q*`xoA4w^CRA3IEqnj{ z_kT9;@CP4$K>BoYO7fLgT#n;yV1#%rt_}$Ux@#Sw0RRmdnJ~`$g`8uXs31fLjdn-2i5|R+7$@q(&vSg)9 zaJy<7JD&Vx-S3a9RP;H(@Atp;-FmOjLlN#x?K{=jKoBSw<&MrSMsCKX!4iXzm6(z) z3Ibg&UaO_Bs_SVO1CiyV>^=&S2p}Y7uGdsmNh0^Y#Du9+CWnCqrFlc&`@4Hj`=Uj6 zZQs7Fu&}Un21e#Hii(RfGcr9suY%-&)d)al(p$z3N3FhNB%FwU5tN=t4C*p6Gx5G= z&YUTn1;Jpjv!i3nmMyil>({QWs;#YQXlQ6_Yx4&Jq?QsCKLLx&2LOL>XvxBVn@%Mgu;=Lbn02>l8@I?s;UPgVi zK=*At2tusqzE_t$@a75(hy%gk;NU=FQlf`b5jhwlSK~-jQq*64{pIl|pCmoQl90br zFwo?D6x0i%t`)CnTT!}Js`kHf-Ekm?2dKyEz2b`BpK<0HjJ+U^WK1CUZ!l@8Bhu4S zY5!WJk&0wDtEZlM`sSN&?C$I$Q6ewo<>x%~z=Ovgwcy?N-(9|Z84>|;AP}glt0Qb6 z&V^6T<4ag{$HIg}pJggu>t9gqtEmTB3j~0Q%#qjUz2frAKK=Al9Fcc)c0T{&i%jL_1hA6?I~JGN~jsSg2; zKkoQBa}EK3IOguG5|egp=HbO7PN1ZHI@P&|6EcfB;+`9YA?IOX2s=fwlBP^s6e8-p z4?TJzY{{5&*bpflI~2P$dyi|I*wjf!DHA6V7-smtdjOUQ;wan{elKjKgkl@?ba^x) zsm`j6#44-}`zwuz)o znJ-o~>>8Vs(K9euyLH!h>v!}9!6%E!AT8^vERV@v&mUg>{-ae}#^-0aS=8LoyRMfB`vl_jIe*0%=IaI7U>086}PE|*LC z5XM(Q8~})*P0EhrS6*&zp4ifA#<)frQAX^n{rt0~k3IUR`T?)kjX`0k0=BBV*E} zNu|?g9CFCP)2B}#IkF%*IhkZS5kuV>r0VS$Z-$|@fs#hYkZ!}q4ZGXgq|kBh+_|FW zqsq3?K1K>q`uYwEe|`+VBD_|?h?GQ;k#8^d1;f9$~a7ai^_KLdvA(x9yNl9ij z8kT*PPtsYH-`~^L_Th&gkd3oSyn>7a-C{YR#bd*s4J8uTvZZ1E{CT5BjbaRN6Pfsv zsZzB7y6HzUXcJwfQCC;zwbxw#{EN?Xr28H}2vA;H`qVQ|O)QzXY4e7=7Twv~)6cp% z1UySLvD`Qi!CS)t^F zw9bQ^@Y0j%9LMN*Bx3&Dy09zLoh40o289{WDlLh`*+>vrR@pTl(m^jUkt3&@4ZIx7 z3+z)LRWU@qk@IlK>v4JAG*4Mx%@rS3gh2svd4Al`wydT_R6=LnZWg0|Qiz}>j_B+x z3Rln92;&0-1B}+D3wlh6Ebf-A*(@*y{c(l(A&c9%U2=FM`7z-`>Fw*?xN)QO?c$>1 z#Dv6%13)4VH#9WJAVx$pet)o~c^Cd?*|Oy%x$bpmW@Hu@k1v~1HfQdfveMGgW5*;W zBylb&wTXbjxH2_b4h8f!XaIB&rYkIgR$Y>QkQAZ39#8(rQ6oo=I&9v2e3E{DV9)N| z_-L!vty{BtHI53lH*W9P+bMgZ$$*yJ&0rwV+S#5sNqSq+nQFRC3#`w+hrlrDH-NNwSlP zVB-Zw1qvwvl9-fq{PD-F_~CmNaZOE4UwrlTZ_YcHVPa(cn{@g*nCB_T2_tiJUw&!v z#lO4c&40a)hzu)3T9E);92W|O&N=&B9IgmN%m5)YjO)H5nmmdoUmx{4=rH|npP_S@ zkBcZO828I*YB?2E+XFZrj}T2E!k~ePq6ubDoH!BWgDw=st#T3}fwj+991$mqX=MBl z$M55)AgXVnVc5P+GQ)DhLbNW35qPTke55AvXs=E)>N?U0J6df3sm7C_O0t8(|%TuE+7fj>erGdpm+bUa?w0QWr&EZ|?^Ds;hhRtvB6n zS5{W`_~P+1XU?28t8)7E>G^s2scGq)n+2fYprmc9*Q-+Re9ihAiAa=@K4RjeNucJ@ zb%#!r@3rrPCD1j0m+q1QeJw(JezoeBL0=MderQZM`lpzB@*9cCiFrBMIHJS@S;O=y zzlUmDr`SMBlP?nc*cD4VNdQUg>k)#%;NXBC|9s0$w~iWBAP~u26jl`iM=mpxP$fcd zzVXK8S6tEFzT3qThL4No?pk#Bl~?{AkLd3H?(46=@$=8Wbh$X5=Y3vpc6M%CTbte~=;<3kex3+%$%~xV4uxzO@qqOw)TW`gW2O2j0c(B$s ziF~i4s|h$4^MFWbm9bDKH6=8G+wu z70noOSPuf*!GWS2pv;gRh-1$B#}R%0_q||WNt!a&&w%ssWBOt9z#WXq52Ux@H5s?z z&7e$J44}0GFsOfUaOu*ebsK8CySn}UK}liVCB8V9o5;7YEdB|VY@1=v|e;0XoD zsQeRtN-}cPc;!3=`X%`k2){aX!V>Y6iae;M239Ah7d$0DaBlU}2_7Gnkktc0FnPwT z`?XaA1f(H2s$*zc%JY@Hf^f!>5;YeXH1{r@Oj7aPG!Zc&p-Vfqv!hi`b`@* zt*>2QRke2W<}Dqa9ipXx?lsWgk8ddc=Z&}D^m%<5nHgh7kHs*0>g1`@OQ#i$Ey~Wx z_9Y~;tlYxQ=(@N8=s*!@K~X^ZmI0)XPPKqaHrhf-iAhC8#YN+ak2&U85)btCx3;!y z+E~A-eq+_zDvZ&$Zr#$+(J9+YsKkFkXl>iIdr#Z8xrZLi zN-9iY;#G9o9q*{7X1&PJfl&p8IoUa;v#qGRf^>(@*ig>HCK;t|9%+L!V*Zr2Ko0Y+ z)?Zgu3P>HYvu4hE^Yz6co(B=i%Od*X!zdB`8Ks|@MD<8HK^gsP!a*$cEB+cE;&BY% z;<&7wY*Et6ydTDTsYkSyC_an_AAInZTW`V}#cu_9AwMtovB#b~@~ESEfp2NvdG(c7 ze)!SHcxnlS2;-%4*6h04+QCqeLku4ZU48Yn#~*hbp=*IEQ>17C3ydVQ#0!j8Oks=- zKw%X?TF#8zu9ETN^9%ADHq~<+_tUCXUESTO>8SwGK^gr#4oswUf$4x!C%cS{^grJ7 zr};mh5228xUQjSH|GB51&dtpefJei&v>At*87@I)3dGUTOyZU}vq{(^XIVDJnOh+Cv(U130GkQf~Iphir8qbQpYbYFEv^UyJoL{Z|NxgYvKu~Hw3YAF1#ZV>ld z6BTebg@|S=LM(@hOnupbQuVM_o{}0S?M)Yejx6y1ITk(s=)*VOcoU;HaJ71IZV$n{ zBn8il%c`81W5R(r3I{w9FqW1=HChueqL#nz_>iK~Xmc6yQ4;4>R_11;Wn?f6V<+_< z>24u??LbPe3Shh;DilDb+sF6YSz`()irEx*uAH{ueXmEB(EqUuO149+S*!oHMcBZ@jc#< z*XKz|8Btg`ddlR<<>lp5r%stTVPal>eu6K7nw&rt7!~A1Jtc2MBUmP^;~3GQ1O=-_ z?WKgo#G>NjqN4G~{_@yRC^RrQ*t)BwuC8v)n$l z3|WyaSXHYuA;FiCm4)%UppkwMge&(OX?%`40*QAUSTw~Ti}oNx<$?@zSajE-`~G?# z0ut_rcql6^ec`2-CQX`xIP~N9E3dlZ^6Khp;wd2rUXSOz^MCuL8Vj+2on$*B|k@(e;~~%?3%S}`9P3xqQrRa)YDF@m^m{T3b4pUI|atM zQ`J6|N>yFn$vn;r~uz`2iBH6A(m6`T>e92JvX&WuS> zl$XZzX!coh-E`O)@->C{5?!2l@qQ=ShYB_k*3^OvB3M!G!@>F3(WZtzMs z0178v+dlVT65`;kxV(sAffX>cS+}lg>8GDIH?@e8Cm}(~$t&nqrci(?Lc=Il$7&Ll zk-1Pn8X54{yL);jOqg)WuTCN^NYqNI9-7!PA$CxZsy>85{QBDU(w{OjGscY_3yito z3VpNW6OoTn)?r1Y!`Pjdn>TV~!6Apv6K^Ho-QC@^b7x)MhP4=V9 zlt4NP4|u?EyTq?5VzC0qNqWgZLi}W6LP8M^Xo^dYJMMUVH@dsJwr$%|wYCZ$+v+uI zNPVMYFOGBYL6V@8G=UIv;0lP1G)z zYs~1e0x!5c#B8{!sbwYW#CoceiM|q@5Wb z47KCeo;_<5RlSgV&n~l-w-93 zLL$-zz2BMYN+-E96Z3%)BTCE5OUug7{mpp;0|UESc2%vbTKU6D9M4o$*WfE~?X@@L z=H;6Y7A;gI|F2nJ6AA^Tn^jp^$uLHlRt;GrWIBM5`AVY;1PpUJ0>fQH=8(lyRT08} zQtYfjGv^8ff+3#7lMIR(b=nSeh=Hjp$Htvq-4~pH;gTh95UVnQNQ+*6+2wz^?=MM- zNjsVvZ@XpTtFOJx5qmEoB*4LQ=REx2Ba2^u?TgPp=Quad2XPer_+w8@oH$vuH=w-y zShQzP`)#-1{@ioVh>bKH4!%3~?iD8_DpH6vi>vlv(l^G88-uqjilj0foqNM-cqZdv z2#bjMIFg=b4xtr4tUURYQ}%Xr;OR=5n{jym{qkjX8#b1gmD07*_^$O}Die<^YEcm{ z#Bc$I;qc7bmz?3@15!3Ut_DXodSQWR1XWR#cLYVr&7lH-m~M#k!C`ZyBAzgc$Jj!Q z$*RHFpg?Cwf)4l*yMJg)j;|?-{w$*E7zVT056t2UD->XHTd2NWRg;7g7E!a9NG}1X z^-u~Jz!E(l6bywx>Z_b>9B@2b!ZM(N@-BP`-dhNQkRcouZZrj$`*};c+UH1YnbaiyB z!~d*Z^Xe;$@jg=1)5eY&H*?m^@)>0_XI7MyOu+AOiXMroCd9}i&?HezA#8olRBxUv zE9LOAsgo}uaqPIFqVeNTJmKU(Fo3UHAP^`inJ7Xg*5*kU?do9Fs#Vgj8R=;yB_#mB znDPmbRHXqM?F{NqVEDeyW0&SU**v>;6@IhNBi&QPheBcjgmpHXfs+|gXNsrX)@Z^D z(rUlAeeYRkpS|?sk4Ujg4?XgLi*tu~5~|&D%Pl9Ja1tm?Mpj1u><=q`_}%4~u3fW6ZmAb9bXj@1%f%AK zAOmQ%uC1#4N$Hu+NKGeIDH4!`)MAmw71Ew~)s+LOo?}|XiD*gEs2uARV`;>E@bM?- zoqJCEp51u5<%4{BdU{`fAHEFT-QE9Q@=j%0nW`5B@mPw%tk0i8(X9WlFH?lbI+Yf$ z?BTGcCSf?g7=ux)6_YtURc(_cH&uf|&gYz=Q~((3#_DKehM@$b(ZXM_RV&&z2fu&t z_5M0q7_LoPDJ3AYN*vf$1EMat==MRktsy1H51@#HgGsv5uoa@rO>(-3<+8JL#uXKd zE3C%up=t}HM(_1{v^=XKVkoom_4z|YXP6A5-+5+D^AigDioqz$vhpH`Ja$Fbhv&ia z##-7S(5O|rPN4d74x!R3~G00_^7<6QOin>spVs8Lx_X<5loZh98+QuD?{e6Am z2ZZB+D*Vsd)dZ}#TzPr9)20$z--Bk)o;Gc2K|z5}Y#xx%zXYXOu`faf8H&^m(sJ+` zLk%f<|Dc8nDhFLsixSmC-5&S2;_(GY{+|_Ax zA~nQAAXrRqW(*%q?={jI?kF*3FV&~rYC>HjmxQ&LK#;zKWJTZB30Kmp^^{Mv+LIk= zZbGQPZ{ULS&&TMWF1YR1+d$Exl_O&oEq?jsE3dk$qjN7t|12UVV)#CJ+}=}9 zJ(Z!$n(AB=UT4+LST|*4WMwEyXG~vTuf;_|hA4uepDy!^jeQ!3ig;ND2Ov*8@zf1B z-q6?AgQp0A=jY9zciZiETzc81+qZ7UpZWCDrMKREqc_1Pi{}CZDE6hxv@HwiM9&!W zKbx*mR(dnY0pn~)sQN#s2Qp?SFSO5T7^cm^$eP4%`k2{{`M6d9ASUQ*e`vF@N z9#KKbx$9GGLB)YQw)gF!qL@fwcE@Qd8el&>U^p(N={|r4?2>ViDt05s14@2c=jtvs zr;?;AhfpvOU?fEm0nDz7ATqgm^$N(|nSd-6fI%MvL>L0b7(q#JBL|C$IiX0zo;*Pq zBDw$YU;N_OqmRKTGBGjH?eR!;4MZ9&Ihj)j!V*Y7U>Nk91dZ4J$m$* zqmMocUo^^2So+_Drhdy@fF-ISR&$hR>cgOa|x(&6fSFK*XW_4{{?XH%VP%voNqYw%a z5!0PbOF#J-pF&z{>iF>`<)syK=FXlpVbZwbacQY(c*~0Smn;XV`d!KODx)E>{-)Ae z>I%6@78wPdB0ggoSE8LecW&RdP1?lFikYnHu^QH{i)hXoi7vpR(G$@D9$ikLU{5%Z z2Lxy+Z~#d@6ryE-8~~6}N7-PRAxqnwfqwC(;xMyNDgseY&As3A$9vv=_Z=MW;-3=| zd@sK6((xyr@YPpe-EhMVIK1?@2@fw2;%8QrKlyAs6UBMS1tMGNn`_ujvV6%TGy;pnzqEx}+2pZ-zD95b`LLL3kXnMOgjbEovU zB_$?`bVu^xuC5*`4AO!kIs1=jxd9Z$IRH9U5gB+WU+?Mex%KwjAARgGlA*xYA;ceb z)RBu{dL=VEbKbmpFKlk$T->Hjn|3trm@sjote1v{+UQ1U{_58eu*Gl44C@;tWT?xc z1)j0PS1Xam14#rWGDJtQ0@RrE=*XGhls(7+Gwx7CD%g;24LFkljSXPgCX6gwGb8p2 zn?e#Wi{xPF^^pTE6n1*-`{RiPTDCkY;B5*oAbQo_I9DcYY=OZNg#e8y6$@CsNvV>i z#h5=33{ZYTdNdguF4WL{2oQBjfM8!Av%do^UoE~31ONcvB9 zKnn{S^p};&bjzo%NG2&fCkcdu9O@AAeRATIsgtHnoBZovoe~oGp6>2#+jgw0s#>#V z&DyoA>o#oMy?eLVe#|IHnlP(6J34>*apjLIe|Ylg$9-O3c1}+5xT3PMvT0MNPMbD$ z?AWoHnE<>&L%x|D=VCd@_5sx137Jj-D({D}>tRI{>M}|H8^;XCqWbzxqSh+;&OvkM zSbDRHTNTusDGOVL%~pWu$veCpfb`@#ee?)nJEU3;z-Y3AEH8xoHhu)f@fPk}9Pz8_ zXHhuFLrC-VR;y38^Cu`YF0`(?=84B2bGe9PNH7$-=;DjAvNG{NdiT8#0s%iBD1ji4 zgYEOqKIdqK;vtO#hUZ>*A+KO0LW#y%B$(3QrXYu&wKHO=kX6c zJ>B^7PM9!Jv37x>uKG4^4k$89S{pvdqScYH$@M@q*2BYudE$yj!1rh1)yj;VADrv zdF>1m6y{tZ`l!S0Qo{tiK}}5|jOy@J5s5zog8?}o&*)@pWD>jSzyWjZ7y6)W`Z48Z zYf-ZugQ2Zkw@B}ll$4~UrO|g1!l_z-q`;!DuW#kbpK`^R!RzxPnY0e!X-K;78f1$% ztrNTrZSJzZ;*}A!7 zZwD`1L6a&6jzcA*0i=Lam5Ko~i!qCt#(WV&4BbiVG;^y71uR?kU1vv! z%T0=19-n*3lDD3I`pJMlgz-Jm^%t0&tjtA!xaa)yFW@-RH}l!&pZ)V6eIQulLhG|fvXdL#cB3DI_A#l>o|-5l@xlww zKD%(?ZLPc8IH@;D5a!RD|H`Y2)6+8~x!lsy^5o={{{FsDkpJnYRlhprWV2SNcxUb) z($Zwwx&^lRPh)r+Ghm1pen9cRZt(y~@kk2CeEQKATbyW&Mon>teI5XqUiXNhlD!UT z_@gt#V2+6ttL=~1f0|lptXImpB1Q~+qo^#qBW_MkNP$ioA0Zu9MkuU|EGk^eE5DY> zMl#-~7es=kiDPI$J6HfJlZkX7#I}o&5{4XMF1ng^;7joJ_4V#-YUD)u^UBJZEXRR~rmJr1z`qO( z_^-e5#^;}VCN*V5<;YYp`w3X+cR~q zsLF%Z4}k|rc20IqPWHTchvN4J{ekv9dm0)V)~;Rs(~m!`t6taC+}zdKDV2s0AvbaO zYl8y=TedW8+1l{_d+)L?E;%`AR6*gyi4)68OQ%hpI%(46ks}LIQj+nfrDk%?#)}G5 zRJ%0?X&Oes$3#MA?bmEG>S*)heV7)6dxF~-qDD{ z)0%Fn5)0_F?&@s6d z;8>0qc%RpO+>uA$ea{~!O`VD_EyHrV_q1Pk?X`o0eu<5C-fw<;(FGTYYKiuQb;qJN-g*niGLkM9o>Wgd z@ua7oekvm)Q!+=#M^ZRyR8CILmMxo+7!HL(yvxN&X23%;y8+5k8O(iJzz)|Kb&?zc z-FN~97-r4>c%238o836WEyzLcA0lynoE&!ezoTga-mfSTA_Xz_C6axqh=1zZ{Ob1 z(jtNKS+iza0WjKw7yrC+%)#?Un>s)B=FQfdIYi6d>AFNX-CKCK0-b2ozTY@i({2l|K@r_mT7G&tpjQ zKz~zHV_j|C+N!l{)~v3rt!-`F)!WmjdJ~hz%@E(y-BZ)KzGnUUx88c2BTAzwI3B2| zD6g!TSz0z@^r+D}dAUAc0wL>5;|D{oHX{q~4qvG1>T2m%94sZLq%bNKD(rd_ zfm@HV?(lvH1sLRJ1fa?zhOws$�>ebU>>m(;))>*Zo582B}d2#|k`z{L=eApHB%L zb^W`@;p}9V+y>9C7JXFRybU~T|!!V8h&+kb>m;#_wKM+WLh_nm>LXC~hPd)Y2GtWNV($YlYcDaE8uDkBqd+zz8 z*W&|~jK(l2BT^=mlx*F)8Gi-`+g)8HqhNS1fJi&K9%J1&ZV( z0MXVL^_#O%!bavM zfNW-Yl^1WFtTbg^gH9C^so7J836GK>JZ{nz@WDWuMaIkSVE82`C9kio3-|;0$|NQw z9yDvF)!BpYEFd>0D=Ra7+qNE7x>E@GLxI-T)|Td$W#2F3ST-RsF)K5(xVU8cv}u)< z71O3p9X)1Da&n5><5FowNaEj1R&BIQEG=Sa-eX9+>xzzMNQys6DCcZIBDXE zC!ZJ$20J=C8h7l#@xc0;>gt;6O&d41w6+mvVqV@lA%zG`Pj_!kM@@B2%?mHSz*`oZQ6ZWT}Ok7x`OA8)|m#miRE6n|3z0G)uo$lvhX!xmJl& z7pYE+kl=R6-!BAuLy03fp`Xq;>urv->ZUZ1dMd$7NU zsK$Vhot@)xd(9XX4mihV6Az-bT6VL*^KE^ zKl$X-zd!Kcs+B*oh%o*SIpmPvUGh5t$qgh(v@col!w)yzbaP`<66oJ`^eU6LXtIVCSIfBW_wBmmg6ClClECioz%)T2*_g6YLXa&#fXY@&iC zrbxQGdK!0b|7qn<_#i+1^s}axouLpfp@00@3?W z{s=$d?R(qzwC~Q!$^wWL?}B!h6)s>@Y#cKRRm@O6ZVA!@8Tr8e+piNxqo_(KLo8)P zqXKk5-XXB|K#pqT28vP4hX>Kz@?m(;A_On?#^V2JwFAq@&EQbzJO;4$h+v!(=4dEO z7p%=Tji|MrF_7#5z$QhgQ>kaE-}sQYqO!FAtxPWgq$eM#J;mWWLJ?0GfiX#{PsN8f zW{Lu(;(AQbCMEjMA_I>W^peI_!3d(I*dh8tFiCK-?1l|>5zVO1zAAj7oee2%6djo-x)CGz}!=%36-u}Mct=qPJ{`qGZWF;r16pkJ> zVf@6hveLdkApz9D0S2_b0ln`PfOac^b|Pa02`m#c z>8y;b?5v!M3LM@rI3DQg?AW$#+q$ZC>#Fhp*EMY3+}^%tV8D+-z0^O7FAIi59i5$f zJ37{^S-bevS8*?~o80>|Fg}+Cis-FBKs{Owux-X}_B__5$6`pvv<| zSQEmBkxi|OD#M615UG5_x;*~fEz6fMNE74>dUYG_~$VA0flFq=T8( z8?r_eHe~Go53{1k0nxyD$7yU9Rm>3UJFWxlg4$fHn6F5DnL=p)TmxX7l}h%vXcy86 zUPmKLW>XykTVx+GE*heMm2t%e3S2PeEen8brcs*uui{m&4R}Mr_B-tcz`XnJ;7^CZP4F^%6bqTPHfH>e7KPYHdI(V=gpUBBbLdco8 zyL31Tpy}=H8T9wdY3YgzkI!qZ6~oYx7e)sal`|`5R`&JwH8(fc*4D0GwQ9|pRU0gsB1YX1H15*O#f&_6FXZ+uC~)X9^lO`A4p(nK74j7UwD zRMm0(z#=USL+Y5K!#8Az7=g}NQzxNlqbOq%?;<0Uc#+MVJsZD^;ZggZ_J)S~>gt*` zYkpc=wQk$iZ5VY0gS>R`q&_1eGkm5E-Sr#mH+}Hohj=?4w|maqgI{~?wcOlXdl_`G zK*ChltdovCAt7P%q)Da^tQxW6v2o5hXFvDC^8tSVSgvR5Pr+TATp42^IfHd4u&kS5 zU6PTUC>hCWm`{D~lq)ZaV#(2zS#yhFxGMD@BnQ?aI%KteN!|~E-atolZ{vF2-y>b< zk)uYRamE=+dxr}8k)ui0qSH@5AH~K(BsqB;2I4#Jc5xcjhIFyZ4MYOZFZ#n>TefcF z5aI>lf(y?Ng-E=B|8U7=m(QMa zkk~6sjF7v!I&Z$|=BJ)|QgYx{54x#w=WDONivPhQzhwOQnKNfrR#Z%$OnOez)6x@? z67eL)O6|#r9bYn08V#LYoqOBc^Kx^E(KX%7gv=l6P$(1(1@^S!{EPlSKDA<&_C!0={gY1&x#!;L}x)7KF1t&^gsXcK*_`sf$WZz8@eew75o~R zUm*4i;Q&f#Yi*6wY6zCf76?U_v9Nvgn4t=9Ad4y$icrJ)k0}cbE6}%>gfW#Ni7Ho) zqBkZ((R~*VtN_3!nzT28ig;sCJR*U8(rgf8&pSF$9!UN0i^nB1O*uHk^uu<)5DJs? z)^>`lZiL*IrUU?Bs04(mMI+>Pc~Vo;H#h64a(IRVOpnGeD0RjZ}9^7HdXjT&Xa9s|`Y zZ|>}a?p%1+t+(7roR}E4f1sOds*;?pkrEpN6T6y&BYl9dR4gcU7ByJ$CL}!gz(2*KcM;ot$aYr{8+ZE%;{%{a075z4($# zR{XG1J^swh3=F#adi&Mw^!D_wU0bz!&05aIB_}53)) z7*WQmx2Napuf85#I2s>MC=kT(J`f1vkQF~reSLkMon82G>+0_8AWu`ro;|x;+uGXO zckkTU)Z5n^7z~6$f}C`4u`DCTv7Ae`6A@b?#1Mu^2jB7#zZ89at0vD{A%wU_X16yq#7$WpHwbzVqVZr{L|DYE{d9pSj z-rmg0%n5zi;NyO&07TUaV;Yh=_j3iunxV19$_@v_J{$T6j9sw`*`hldEBkSXkSW<8 z2?5*1-pcAsLu+akK}lDK>u1QDW;u5Jgo$5%{uu$>e6X+jle9U%4kRRV8uFDbvlvEp zKmw!BxGcZ}0A{Cv=${mkKjSH}l>DJ#SW7yl1Op@F;#j7srhUyPg!xZk1T(s@kXl1g ztRve#TdM0x4v5}r7-4jGbs@r7X7Qq4R$2;*JdnfLQ==}4n|HfiIe9rbdAYL>ntkrM z=LG`(y?gg=-@XIm>2+1)wR!WFw%xl2MTHZo(L+3LzN@nfziMi#m;8H)+vUp1&R%fb zad+Ky7lub*FbC3C2GlkP6c$iw)?Q!)kq9AGV_u6BL`dZIdBznLjV~!)aNL4mFxc7I zxoz9F+V!MSxVE-tQ+>m(UAy}G1_hB3UQ|?4Flv+;pB{Ai7=*feIyY?EApLprq$vrB zNe0*ix+^Lt&~Lc@YL|ywxNsqcd@Sc?kXx)_0YfRqhTjwbdR_qvQb)*5>O@fW=m%;2 z-;#K#I8p>YBQxuq)J@fQ4KKk%|brT$m{`IdnN+wRY|Ng(e`R3asQI8m}$Me_w@5{){ z6ixcz#phqV>E@euwY93dJmiqM&ph>PzkguK+i!pS-M7{2*0r~Hfkd=th!bF6Z{L>Q zEe#EuWt`#S+%C?Skcj6CiDrX$bldH>KJwTje!qX9zdzu|K|mlB3=!uOo)3k1nn@_1 z8X*+25~+vOuUsro()A?APt?Ycq9`lH02~fogt8f>_x}0bBab>tnX6bsP>ql_f21Uj zz;lK4;NbvdsEcuggo6V_VU;34@m$2BnVBJ)5^ngj@n2jk01NLaa8NObTAXaEr%$p}`jSuM|Kw*6o+Mj^tP>F0760xu>#<=2vv-uBL^fNskUw;0`{JfEK=g!4Q1tYEY_B~rRZ(duqZsm#}s@GTV*s-Ihrvi+DT09GrTT`3byaKY>l--Mb>45zOHEBxs9fg71}RwCuyIps>n;iNS5{Vv z9%QYO%u`0+rSiPdl zPFY6}_|e?Fb?f)vfA3;BjHGAJntjfh=ZH12mJ?4pW#x+HN`!{du<+mm4n_c>BW-KNJjw)PpEGD6>Lh60s?e_O^F##}LM@0h^T_4KLt0;9fR; zjA$563Zk7$Tv49Jz7G{5+pI^*g~N~?B2cVHJ7nYvQGEi%G_OPz}+hT+pwX!ige=EZm8R} ztF^DU7o$m%XiOO~dE!JIHlT3p1}z|zrCoIo2{Hz50FGzru*L(43omT}qu#W%wAnZs zm_19q1U&GBU8WDeDFTY9zQVHWs;c_?21L|_$}7sX1glXF7-?S@PYnVg3MTpy{h1;`{n2$mBXL^s(Y?S9bhtYU_I z+tzKJUEPxG{pn|%;YsxVxN_Cm=bW`^(?*FeC$^&qS6+GLWmjC*)!BL0+2;%n3`lXo z(MKP7c*Vi}i+J(12I2aJrU|0+bSc#y65Drl!cW<*91xKoELZUY* zF)=eUGdDLkD>ExEKR-P+BX8s=x5xd%4=X?a?9`3CCO2O{#9S=; z>!0t-&mDR1U;fnF)g|FIS>Gg_YXPTUlQx2lBlwy0NO=o5|29Q2*k#n~gH9~OC ztl1Ad@W||gW)d-SnLuQJB-Vj5*eoh~*o@fCTeeiKT|-FBa?d9LjFTr%@p`=?_(t-@ z2Rru$uwKwWy~g1}-SYX9pddLZdGZwUI^~pK1^j`Ij=ei}?ATbhVdJJv7~?Kju;8$H zhvDO4k!=H+8e>?j5{Po6fN17@YQv1-4gz(4N^c3G$qX8gM;5eYHg2jHgDaGonK5

      +Z@w`w;Ah1y54=aWm&?h^zh}`s zIQBX7oO3rf)Jqxo;^J`+|MTI5#Dq8Ac;ki}ZftDa&Wb*Ic*A)k^PYS9nWK+6R*)Vg zN|8qy|D-ZDu86!A9CsX!w+04CWo+lposBpk-r3aL+>9f=#vP5zS1c3zppeh!`}xm* zQBY9e^Lkj8V@TqkOGrq-Ptb@Fsp&Wx%go5i%uE?EA|)l+bx7S>KbwS~1ada_^p~9w%y0uA6+%=07j*!G891^}k;Tmk# zz}iBy*`(5gqE|zVjBO$o1WZ>s#=5T(BJF4>)c~sog98LSgc|`uRO&9#B)f-tq^>AW zX;`Z^D0<}xq5Urf|}HZYW@BAS)Mbbi@)kB2F4`44hD21*tag{4ij z@~^>n04Vy9xRmM_3uJLX{RoJ`Q@*^`Ld~T#~?B80lZ?l@k^8fadDiK z{F9NKz>|!pXnHTDKXr*u&>+7=s@0XmWj2xAc&p$ZDS;|)N_mlWTyoRIOLKz9Gj{B_ z6OKRmj5E(jNlB4_g89g|AFYT9FNT15BLJv0k5G`mQ{@e>Me);v6AHM${2H*H;O-@dH_@57P zF7CpME`E9OVxA9)qM|%L%43c`_K`;(9zAw!h!3)eWArvCs_&s@)Fpnxm*5>$STL%v za4wpwq&)ck{(gJ_-+lWnM%?{fSxGGbet!TTH-5D7^wQJayZon> zOWyhSr%RXaY;F>fKQD?8kVk6dsDe{}b?POTTs&by37NixkSOs)CODwAzvw~~)hQ#F zFIm%aZjA6t(P(xM)S1#lsO}aRDq}3RN`Z}4twVdIi1mj!f{FtKJRs|<$2b7Jrpc(` zIyKk+zEUweb3ydBVi6(!(DArU6UIKHutV(G`h9#1Hq+1nT?t_H-LN$K-#VACB^R~g z3(pG_sltRdO*xK1(b%zf+;RIYfm;R!2K;_MUi?^5UytJ?!UIcDTqwk2$m<%|ud=2h ztEy|$SWM38E8mwn@bWt#C;@>KW8iIgJ-+1RWE`%5MAra>khu|Jbi;(cpn5Y{N{kgf z{={Ri|LZjjUl_`ZATcpv^2EskvB_1^l$2#@bW4z0@Bqe2o0Lkb1C{4yr1(it_QxV* ztCEGB4nd?wCdQQmX$fg7^GWsIAkdlxOk$3(H?=KwbaZdo(tt$g=UFpnCnYBtu&5!j zWEf*;gHR0F3;U~rw2ZzM!Wt2_V&aWxt`X?Fgb`)QKzWd9r8Zr0L95Cc14qVKbKNiaOp+OJ6qf?4v3VFfP>eCw=KN*;tO3K50H?aHI+Yu z@QG0Y+oFrGmT^x`NIG%B3Cq4+hM!87bwBd(gZ=$Ix7~Kzm@!2hN6_T@YQ+!BSFT*y*tkQo_7fWiq_cv_Q>R|=+Y8P-{fzvAJSp43k|YbK)ONtM zB@5~5U?eXP3J|GL>CY+`DCWfyoad%(El(kgV+yA52iaxVEEZ^+6oJi=nc6ggGo~mC zD+r(=ufqo{aUd%DDX=KE3@;ekzfQnbv?t^^28b9}f%Q;}wqtsT3PSOYk7C^&qHEdA zF!gsJ$5X(5iBIB@aG>EIqB!A(lhreh89A@6RsaOBAI1uERZ^?Kzq>u0%afb}$xMVi zsKxfETOS^^fU!cLTggz^Kr$|M(su=*6NJbNJeno6ovo3e`@BR$7kGH-#g`T?Tqu2% zl{5fFC#T$;oCy;riauN>Tp|?P*hZj8x<-m<^(l8mpk)5TYCZdYelU0vPg&6{_(?e6LA_4@;Y5CYJ_bqXO9DHf9c4+OVv-HN|Osz|_o zw`|#&XP!;Oe25wpq2c3Tj1$9CF&8VvlVZt;QG!UBnlDIkq~Zgn0CTC|oR#BTCCF9l zD-!!dAbK%^5{H7IZc+S2{1jESGF&)WQHDjbNt;$PkT=N_QFvb6x?Benl-($&A$p)8 zPI^fPi{vH*=|mW+UMBSb5r7*A;7{e}*J&9U7%MA=1AtWg93>+NZ#_9B z`EP&!`}SX-x_*5vK7fP--;8N9F1q;QU!QWyh_uw7ep=~Q4zf?ZpDff z@4ovkx#S!d;sv+IecXZ*?)l^0B_$K2bEcz4FmprD&1ML6^9hp80tLjJbMDzo-dnQl zoA2Sk`jq>6OKYT*k zzD9d$VW|T2AI1F%KOM>w3rULksu6FvB?85?lrRJ`nMSqiDTr+Vj97~g1w%pdB8`#+ z7m08KQ4AhAaW5#qB%J(U1o84q6BJUH8(M3Tdg(Hq6ugu+LbVQPJ2x_K5v@=PVGIp~ zXeTmiXUcyFT#;bpz`#J=h7Aut^x$i+za9#O#FOB>K5tNzC&$|?nJ@uE3JKzv&JMA~ z01ys$jHLn%X@D{D9{HI!UNOhdl;OtFQlUs6W)UFDv3qv!edO`SUVU}(wryJigZ>yE zLkt(CZLVFr8vn!m?-l)P@vE=@1ei2&(wCoq z`OP=q`u&3?B_&g)PDx5i5JZL3$rC4)m6a}ExkA?a61A1^4)^YD=S0yS{ANW(+08fK zdfaixb1obqgrq7HLbOYur9{15?n#Ubva_?EdhCg_&pvzgnl+q zSdxh3Ru z#)^z|BjWpb7-7ZB#Fm=PC?3kt_cCNY9}LU+4%-8cw1Pc-^b~v+|Be8GvCRQVL{nBi zQ2`)K@*K2E0!gR#_4fbmpa1y!>o0e=?&=@t3;O*y5RlS{BKP0Lxm=RwiBe#YQj}`S zQ^(-}E&Zx>BOsLtO~ZXw6I&svS6Nm?ewXSWmQRd$eY(V#*o`3VK~BLc^dpj6)c8tB z$%+b$!B$P@n+z(@g4gA5Yqr&Jd&8 zuJFo4ha~yqNmC}h|Ka-!@3?dE;>CWyA0IBux)3K2c_L9cSemU!rh_AW3nNF4tgM`M z_~A#)J8WK2(KvjZ;=n^W097+oA?uT6OB5e8a!II&jBpcfyW_S; z9{A_~fKr5eBE~gI35l2e?src-{iF;`S+=60Tt+a)?4?PEeiY9E$g!NE&J)K)1)=zL z$?1jprQHA0rAtpc?bOcBE^V*CxILU(>?>zUUZ2(>m8T7$q^4v~1ck68#g&?RY-UsEzpYz*DPbir=sjr27X4+dJC#>~0r{?`&63&w0N&_wz5loH}hP z@H}HFD{OFQ2HF(?X`MsJ*fTCRA4vI&Su^3uQ>G3 zd9!EFO3O$SlL)+YKM~ajLfN@F(uEFBo-hjb&d<$%>hUKpz4+3XUVaIW#>U3Rfq_0= zydy3bmzwrX2CQ>qwxMO~0;pJ>aL ztvt~rW$-glIJ(fZUnv5J18Zbv-XboW6Bu1Bs9=unzz5Lh`{}>x<-i!tKx2sc11E?U zY!$u1R)Zj3r~_>475e}XAdB2IvH-gAA}kH*>|8^*;&HroR*Ckgh-DDhgS59C25SXe z`|ZSJ3lhHy0Aon}>x%#o`{NlcR)IL3<$m!Oga{*0)iMFI+^NX1WmE-n5ahl(Dy&cv zuslX;!N9=(@O{LW*Xx;o*kL!_d}~rl%H8+e#fllkl%%97Q>KKma*d+~VrW7|^c?R{ zNf+5FTk3vB5j_i{8n1}53=r+E>NjmV=bUp?^gm|wn2RpHxUynqPIjhbhopgBWG+TR zk5diyDoij5q97SMvw8{{gA6E!F>j#NSYcY-O2bWv;;*SOC*v_jIHmwKX?Gz$)YsSh)|+qNdFR5et{%Lbw%xmL zyXEF3OO}Xz;-=yPhHKC0aUUI4A(P2T4l79oa%4fl9e3Vw-SyY?_4RR_YeY(t$LC{3 zvW<9ltY{a&=iZUFB8vmD8kP*L6(fCFqV3apYlB-7#f4`<5bnSCz9|zYty;A@5DbcqhJ<5-LkN|+ zPswr$YGzVyuaq@F1uDsjQgmTl9Yxxyi>(pNm2pgN#7kG;(4)G zQlM)|G7m}Vq*PxTjFa-f64nxTh)+#wp5(-TNyv_{0C)lKB1B%ixHmz{6JyYyn3$B6 zl{s$AxH)qVDl08ZN=g3w^Dl_CkhqJy{M>?q0wzrG9-*NsEC7Tr@1_YMFk@&lwyPAx zJ+4JMltS+C-S_;lt*uRZud=fI{deBWBNr;Nco{^vEMTf_I-~|N2*YgA8z`BvxTCss z$nuoJtT>#Ux{A@$)6%cH>Z<88%8onX*#4e={3v|#>C(?W|KiA_j*MGkj&9k}zs+(? zYT5|=kA4+EL-X!NVbPHFWmSGiNlBbMX#)PoYNITxrSHx574y}S3sM6EeapW8PP$bS zOD5*$=Ch(X8K~hiVj|EGOmyF9E~DM(lM5I2LlfC8q9`oq9H;cR4ME5T1tDu0Tx6z{ zKV%>fhpi1U8wj=-4>^dPh8_b%jj~+v2tlF^>};Ymhcz9m>x<$v)**g3W5`Q+994Ss zqt2v#9fslfz(Hhy97`5}&WC89V}A$H4xJpPmnfxeK+KHFJpdfbs_8;nkX`1>ivLee zPQL1@tN-It@|4hwmR<$bRKSqiG~P>4ya)t!tg13TNbN!(y%ZYb0>=h8RPcB`h+{Lo^H#bO-(0A_K=Q0LQV$jzq9DcCPrU=3r{eHL0%@e-}>iG}@NVTCw1@^M|7KyY4DaMx42V#GaON^z7 zHmDe+^NLIo>D&-4M92$&M#>+EVRkSW2nNZ2f?~`al6EIa4ik|hj`SYkZ{c6mP9e2x zh+!B_fdE9sD2;ptS}da3L?EQ7g|Tvif%SOZZjToqzbN1fynN`=e+4PgAys}@1MN!8 zc973W|HI!3k^hB)QsRJ7yO~sVCj61^&hBr%{boa5og`@ciz9!Yl$ZMom`pR)jp3T+8tC|1@tapnbIcC?R7?d%;{w=XZMNE{xk4w$AJrDXI#115 z*Fziy04N^A!ug>)Zw+y%O1qEmB4d3ghIVWQx0wwgQ+b?<=U&LPVjuUUf5JO={S;ZR&AG9(GJ<83#$v~=w4 zklsJ(U(maL*Fj!r>PClR2Z6$#L* zMF;sb1&!im=vP*R+K|fsl1DHrkDoXH^{)lT{&Mczxj25HTINjKY)w(Vt-p;PBSg#q zo3dvjkP7sah&bgIz+As5!t@!d&q?g5&3%vZW8ihirV|>ox@dF(0N9#B$Cl@IE;|oa zB)^07V+FH@`sCRqZe27%*TPFNSP(aUDmir44MP+65^l066QTinj zGAeDVpkLZLLnZK3#11Mz(AEMlq7YS3NV$S)f=cA^As1sS~4hpVyb3 zo{=X_*ShjjtA^>^l`u%<}u}WSQ6&2B?)~#dbum(lb8PTE`fUIl3s(?}C z9zuxa$SvL2Afgaw95WCeuV>Cdb8rBFpAQo4axO77z{uXTdiJL2+9XH)iu;u+u&bh1 z**%NuHzFXJ*Jwyv-;jD)>~$X5`6 z2OgO&+^SnPLb^#0QDhzQnh4VBCjcv^{5Nf?Kl7}!US0gk?1N@OIJq4;#7KI=es~is zvapbJHlQQthru$CjYqoO^a%np!VhE7CL4E>Bkc1H8vNAa)qRSrlloB&1XD?UlK=n> z*>%ibNh;c&jBw69?8B^ov^XAFpLmQ1Im~nbvuT2Hvbe_eiA9kqN3wnn%dM+gchfDm zeD~eAfxw_9z@by31Wk{Gn(aX^daC2SQ(75x=NcuO!f>f}kc{1|qB)SV}0x9}cj6&F~F4WN^_H}7{S=vOafg`^l96-@4(;Kx^3%<(ckm`w@Ds6K90DF8$2SqyLDJ!Aj^v{ z3m+n*!fs4if9n*bCHZ>av>2)B{N$u$bqc{x2YS0XYX<9v%rT=ew?b+Ra*P=gsy7bc*URqpSJdQwBP3|L8F?<0 zhAtYGSx!9XU?2cWYSruW#*#Y&{S=R)sZi_8sKHVylA(L1k>ji+#Bxo{vH!kXWk4m= z$dexW^Pm1wGGRg}801_M9flRndPNeu;xbIt_~cxG*h^174!jT~<+YIPSqyS}KuCE7 zgEGZmjKf0`w_XWGR1H+}KXpf}qK!)FuWB6tT0WlF+WzH^1JK+FR8b}M>+)m_s(+zK z_hc2_0jUf^5&fxxrlu{c<{Q-OLH$9?N~nh}ZkrP=#yF`q>-Bnk2?=k#`Q}}B-PPYe zhy#MU_3IbjamS0#J?ruLY-B|vW0^3_PMdO=5}?6!k)%uvkTZt4d6F&Gbh))ipeaF; z*&n^R_Ax+weQfs~AT+BC#AnN{C{8wt`YLjum*Qk2;n`{UuSfs!&hQ^thlx=5XaJk( zW>;(L`4^s#(Z86v1cnd(7XVzt^o^HG#B2J9nv&0dBe-|A(h%>@Wy_bJc+!dQz4OkP zabrOXs7z)h+6f1Pk5f)Q`M&$_+qRXAnJ>Tm;?mz=cK6+Pj~hLfb#aDgfQF(GpK7^d zQD3!(*poosw9C?Ie#v-ZYf}sz?#4^r+&dNsBksqEC1}l|TisprEq=Sd# zOJi`KlTT;Z))_GA>{PSd@?Vk@lg~Qi%>06p`)E#!86^6-dF{dW=6Ej zb7(=DjeYQb4PLB>u+69P!v~;Kb0UsL12bBkr@VN zU~-c4mV^8;c^(x$O&Ue1^eQP79(rHttzUTe#pEc{a zmXhVY&v9M5S`Eb>SjSt83>himaTM))K#0K-fO_0W2i$+DyB}B7UCw=%D};!K|&Ue58Ju1V-Yp*B~(9@k?N^O5@8&j`2XqYky!kbT_NFg&|Qp= zLS38;+D~D`YVORyfbi|S%=myKACdU3M}P5_Pobzt*vwHbh26SPsZ_UZ+jj4L_jMoX z_I|i-?V9(${{z4M-EUi3Ta{dbm}(2*AQ(Sk{B_q|_tv+()wXT#2S2^#mOJja{gmaW ztT^qo6PGQUJ7@01$&-h53@eo_;M}ajZ?XbtLSQ4S~He)8l4Mw{;0VEn=}9X z9EtFB4b_^0a&jmq^-8BNKpvS{bIVT4C(sB3QMMb^c`t%hc|4NUwbYv2}$s8~rkT-44x z|Gdv%e)%Uq`6=&)_x1E_c-Nx|6zLeI%$iE$dIV8k*n@*|5{8 zx}efkL^t$4Rx>51gq0j~hr7Cd{o7xK{}?u`Ed# ztB-aKzC)TwNEVnGMkJ+!63v4gD@r;NS3R=o&2N75?wvcVlJ%#%@4EZ$doH~20vDx@ z)%->j@t?hv=#8&`<9ELOosWF%!;bCO4h|hWbcg?Sr(v1HhYz1LY4W_e^A;^yymZ;p z`E%z@pD}&Ju;Hdf$t;q{JnnVi|35Z@dZwO* zm^|MktjD`zH|lhO2U8&lU;v1BulD{w;Ba>kVN(NHa`USwa7+auWV!d9x2PCmI*E<1MB`^CV(VCtSy zBp^1&gCstQ(xE21JoaQk3;4xc_hl-OfQfV+k|(3dH0Cin#PntZ$DsMP#sIDvs7jih zp27RaMw8eB0t&-p^vE4_GFuS7Vr!1epZ~^mSJ>}GYzwTRad&gVDPSsVbR(T0P#u>0J zDrCeGh~9b)I_+IDwW*O9}AH*Q$}n_vHu7^d&~Ic@slg^Nx; z`Q&BGmL7lH>~Z79dr1N(%!*lMO`xJa!2PX?h?wARdZh3zdjL&M(p|@8565wwLTdu% zPVL4leVDlmG-5rH@vNI2^UEkMf}$lmH&z`aV#|>l|3$@7^Cw=tgbCEC$>{A^l83^h z-XP0HbH_o3wmwOU`-Ba_L5VUTn_@UYxF8s6xn&CJVHHlEAv^$z`z@-Z$%>2VEhnc; zlr#oaCpeg=4y5=M$Si|FwuKTM?n&;-(4?Ab4fze!_i-TJFI3>WsL%j3LCe0Vj?cy# zk|e3-J0)H2LH8D+MqmxKf=9}KHljkUAKy2d%Y@CJL5eKXTZmosEnvfcjvqfER=B8j zuz~C!dXczrhLCge*-4u^`cJFJK{X2N@Kr|pwu_2=9t`snsyq{in$$M6ua@tKd-~9XE|9;DsXZrg3 ziJ)9$c>n0{>)rU&`lmLm`=8rxEtkq8M|Mu0JZ0g+1xuGKTefV;@y8uMaq^^&w)Q~2 zDY>m;9{T_wsl*ukf2#i_g{uL}H=6=EyKGF*Y5-!Ua!1B`Np-HEF&ThdGKJSP0mU@N zx|Z-`glP#~?4d0nL_|JFWVa-Se?vKgK-U#PmTBhCTW*8RjodQ>uym!Wm^&}(Jrw@R zRneyU$hiW2!asu!Xutj0<+P)PL+0}T#9#5akxpZ5jxj3a2=XJ5Xpko4c2QXNC2a|W zpVm2XD-_s-6M<`nU{7JJoWF)4L#(0r$^wn}IMj=GbM8bDBQR)QX-4P8HMkR~M^)o9 z9c;WpQO%`{Mm4+FnI_fJk0B}o&wu{% z=bqoXX7!r2YuBycux|6_XLjw{+0)zS20o{u%c=Jc@1KVb9XNPk|LWC`|MZrhm?dk( z@ZnRZPMbSt&f-Ojmn~bmaN)wK)24N_cc@|_1f&rWh&frYLMoTgK@(ha;=t045^PA9 z#~=@pprI*96msiYf5c2HJ3_=EfUX+6qN_ZJ4f?2kFI(yg!gxH8j@E%1nqek7AakZg z8cHLO>=Gi=k<17S)NyhC@~pW?2(_{#)h;(iE$A*9Uk3)_NZeKOv>%nsx&pL}iGq0@ zc}drS)cDR80!pY@3#AKjtAT{EfeM@v4~025HuHI-I>eV=HhJMpYn43|W}?8&tLA1T zJi0-V)%?4LO+cg}C&WkD$2Lr+zu^(LHW*fS7NL~#g-m`?{X`?ky#MiOp+ItkG!+*c zm~MgAs5&MnLPqihVg#Nw$K*}p+FkVePzDsc#tf`1a;pmT3GFBza^0*kDDd(_$@FNS z4Q15PaoXD27A{!0c;OQAPCvTp@9W>QXYc0CPp?_CcFme6*REZ=b?erio}@9_CTOBOFVVVU>e(z$cyj-NQ8wWT$vCB#bpk+K9mN zU^=)c**g~3Bj2u+@~w@@ zR_8NE=>QeV0Y+FB&x&lJnL}!5qkk04&5~;}64jK31l9~SPCRJZq$PQ7uAG*Se-i=$ zq|mmAluD({GiD4R2=#M#Tjr27M#-$v0o&SJXV02>+;OvB^{Vr|fA;qFKEG|-lTSYR z_+yW)UAy|3XP@1(XV1XEV8E3(LV@)l;vhXeJsUQx^Adue-11|qR30_5bJpzHix(|A z>7ET5!jSK39*9gi`7*qfdU2$so%B|aX?E2*|fA#p|kM7&IKalqKtpfuCtH2lC|0HUWSbjHe=F!NEh7w$K#7p{iyy zc#b^>*g5mxQ`;8mUluG2mCB&^?SlF9FM88OOO`Ap1|5O1!%O`csEfR%V)jM>AkDqf zE2$`Jl@%*UHPofSi`*7~O&3Pu=de)#$&p!j068^Zng^+BOFByjXrN8G(S>pk!DBwB zn;%&eg*}w}xkeLkM#eTo*a*}Dn`IoVaMTN#cL`-f5RSnhtl8ua8pP64y#Um&!z`oK zkc%0?z(ZqFb_~9R@sn8V)psoKfuM-%=!}87OFr5ci@BJF%Q+&K0`^ygd$9oniT+wn z(ItV(L1+ty@n{P}6gNs7+S}U}%%8V#!Gd?b{T;UBba!`e-?n|@#-~=VUcGMp+NU>d z+O>OkUvIDNU>K!&e<08dI?~s${_wIcWCOt()iFPl?H@|u9J1>6M7q7f>@|4LG1AxS6 zsBJY1r3i!xQXsjOuWNi+E9saeC zR9JZtnWyG%S+(OV%>hJ`*PD5FGFu6m3Q%UBa9vgd*tm;NXVFFOxU^9d3PW*vp*J*t zKs5AD7gE+iMY5i5*jJVO;&-G&Nc2#m`$=UJp~dgOz`%d~pYPv(`|q#%;+Oy7;)_e=QbPF>3p{tx--|Oc$xHyW z#S#+&Mj(#Vys3=p#XI>c5Rf9se6R9iAQPJ@I{Q(P3@G@c5}`fR1d(1KD4zDpQ$X{y zP>n^`GNrf*&=9SknmlAY1}j=l;(O>r%K2$ubEPDgZ9Vfhv$1 zf|VC;P#~aRbOTJMMPl)_@S3anSX0@^vAH<`J0SeFwWT%sfs6+tjHa|CQ3gnzqCeBj z0vIfAn%2lsqnD2ATz0|gHyKddnPjBA6XV<{Mpb_W< znT8dfP+xEVmMvR1KlAKwe*L>ri#2lih`Dp;o^;ak(@tBlWXY0Qvu3rmwR!L0Nf&<4 zLbjxPGT>#3_}WN(Og%;+0f@TAQB30#osRN~RObCfJtN6fEKq3S#Pkx4B;DO8Ae=9p zWjQ{RaIHgzK+`k-#y76}-gmAKno|6KPMt!-Ax@>0#9k=wQHs?V^oeWp!l zF-Q=Jtcw)6UkS5~+Wf`e(g-*K}LJj2ROrPCWC>GY%d)^!)SBKlsptk3RZX&(WTUOie-oD`Fb{ zQ5;`f=+HweAAaz`2fz0p-)(PepFVy1q6Le+cxB1r#dGJ*89!k{dwY9)EnH76r~Stp z5{O2*ptK7I1zUhggs?1&$f6V8kRYT{!?={g{LniGYvRHZ3tZyhR2`tO~`S z{|jl-BRA$_)EPt5?RD#)`tsFZ@}Go@BRfZ2^~I~-@y@r89NB4_!N{beE4(K=%W-;o8t}xWRWuUm&V%7;H zvj;$Cc2qB%U+A8q-p}D!EZBvBsUbvBK{hN?3T4<3eJV)CA*oA8EowO`2TW+lA}*my zVYCHY%0QJu&J=6pfJ&GD zqPakX<8gd>lJm9+qNSI`BU?t&_4gVv&mm8L88J0IpD}&WgI7rmrfbb0=)EUaW z^!N8|@V?fs|DRvnYM9ojQJvGLPG5S$(xr=*E?KsC){L1GCQj@aHY}`naCu4IlSe*k zQvmnjurlIgLb1rQwo$^$E*SMP=LPPlvkwC)f`;m25Xj$pUO=B_e5~04hGhG|Y{7XE zSdJ5b02B|uzxhWu_4oFK^?`5y`?oK7_q#D3$Z^6RX0eUiHk7wnw%&s*e$IVfD0zeY zpe&v@Mh+V}Y0}g%sa~{n(X`1^@A}hSj_rbJ^!4>z^R=(sd+$B}_O-8_b=H}p3o>d) zB;0C{=1+q{E?25ap(5X;{hSk;rn#|3anY81%^nrKye@0r!t*528X<)XGDFse;Ldf< zby+B)vI&(!pvBe|>7jMMtjsY}C)nE9!1skfe5~1v0Bd_Znb}dU9i%K1Naw1#xU$M= z2W3}=3Q3v*fvcceno2lZm6^V=`ZZ^MFNs`g789^X0%n-JDH=0yN?|1 zhCqr(q$k87Jc?bdn2JL(VIxesPQ_UW#4u;7?ZkiA0O4{5dLk4QrR*FGUBtXh!f);j z8Wj9&f%r9rgNF_tJaFKNCm;8h<8o=_h!L}9&RV);@v^1M7B5~jXU^PlMFRqx}A$b{1$ix65QRqh%9LiN$_1*jo=WhlL@C`B0H2Cn!ln zlO}^MlTN*EDN97afoJ@Vi=3nY$?WkZdL=@=8y4cPY#YD=QSRTySF_eEkOQYVq0Eq8 zITz?tuUeOP4Nd|S*swXq1)5mogjF*(`p+B6j%x>QuV|I5a!c7e>Av26%5C!xVOOe$ z4tWW|!ABo`lmz;xqeqXPbNrm;{?{qXmMxt+b?Wfp!>KK?P{u&DFds*VfMiSq1{VPO zzx6^)?_385tM@%vnvyQnhh;jJp^&A^zGFY}5#!)I!Gw;sw$onnlDEI( zozthyh~-%W%~)PhAlX~3=x|`EDc{+N3V&FVvqeiNcflouycg$4cX#;1`STZed7$r) z?qX_{Enoqng%InAt}tp^X2Ouav}IN}k@GO7HBAPYE2Ea&4(H~DXD^VZ{95`Ui#P%6Lb;8y zaRXIcSx?5J9+XlLNCo+0_BxySSucRX2r77f^aK%Qz*`2|p(+xqHXO`0zv806m>26R zVR9gaRiTC)(JuZpU(|Bvb=|IT3ouOx!JNg57yH$bJFSeE4raRzZH#Relea~l3d zp=l5k(pZu3jf@!cdojXWqaZSj9;0@G=%DO?5!lQGTEaerD9p7?`eg;*`(mN~@B9e3 zTrRh^v<@3SyrreZi{VOEX=G<-=ctk1VYY7B^5BDi{p*7dKK=Bj!-tPJwvC+LZM9n6 zw}1cMy?Y<{>jU1$b#!!0nLK6j;w2}Yc*4mipFD5gya^K~_(7o&W&>`}sNmNbP$fnf z1DpbG%gsylPI>M6b^r3|&)jq0z4pKWi862|6NEWFj6}f!0isawhO9(N-rSI8c4Tsn z0-v_u{OUK?UH|Q`e)VhbefK57J$BPBSwI2Ppn8Mp-s+@q69^4EsIeVFhQcFf&*1nD z&Hld~ryBmqd-~pJ;~PO_dl6(|Eu5Y#a*gjoAWsJdX5uz-@|SKsB4u9=0#lTi=7K1{ ziEg%wT+Iq2!PF7MhhKZ`H_klk^iO~KGtWG|*~<#NS@-y(k6w7;YyRn|uN>9c zsksCLSMVcT0uZ)6OTc(klV>CwE7!P-NmHF91RIJpo?`*nUU_>H z!i`Yu)^aD3+>L9yBV-5-WGW8uY>$9)t!Ni2maHBVAiw6N zWN6^_7gz>BKk;+mMne48{RO`Kd^hxo{bxy zdidd0t5-j91MYGQlF$u|IP_Z!>E6)yup`(U-$9cnR-*D2h zlPzm&^|NQgg&K9ChaF8~O(^M&{0Hm4P`C^P} z+iH&58Qo7Vc?K0F4b*p--e6R1+{bK_$u&_;z7WMm1u%_NAIxa$Hr|pf{x|izp~b7z74>( zZ5qCy41Ls5j2A#-%-}pDA8)3#%#kr!WQV}oPKlIT$}?upm^EwWt6%+UZ@~2T^&dQV zVC&ZBHf`FpcJ1mlYt}ry`RM}(4pl2vmKb@t!Tx>w_wC)c^5KVX{NWAdmeRzDljhBx zw_?SLQfjy(#J|GS6_A2^r_R{|GxLSp*uvRh9s<_AP9)cY4AdvB3>LScD`(sh$R5ttGqEE zekl84rBWd&{63XTK-T^d1MSGK{}{s20ECwgugr=p%O zQ!_whbqofY@+UfvM~9zM-~+7GY1XFLQ_u@qD~v{saSF8}uNiX-^M;q^c{VWOS544t zA8p{9#3XYfQwJn*n|Tcx9yw0dHhI2~obIZo@L~GcG4sc-0Px9&;)X>!?ot#AFp&eK zv7g#Tu;fG%MlY!$_4gbgcTq6Jh8IS?i9L=%3J@itc0>W?=L!C*fE`fM&ca3!)d-cJ zw`%K7)d?Z4)B{sn4-U}Q);e|S)M?YEpLNz*e*ROf9yoAt<5L?}u3Wk5kyUHfuGz73 z=Rp4;{Xid*cWih2jvYI;@3`ykKUtat}^r%#*V%L*A06~9`o zuU|SJ<>owR(Ov&{b|gT z3*X}iDcR7?Rwj&_dwuD!eOxktiJ zy5h<&zUI}hnlxo{kQJ~(CIU@0P+atiKy+e3p-5!KRRE&zxr-zH0|UuwDWq5Pyzl{K z2soGRaCe`JY%}|!p;)tK{@nzL)?xI?ASsiFVUG_|Q=+~`Osqc+72RoDPP96h1FX(lB1Yhl15L6x&?J%fmyg`0F_6d8}a zQiQx68wjsOj&kxwLtz3YI?gTX+@=kGkN$J!1<+nqkafF3YSd$TreHkSxtF6JR-bGZ z1ThcJH10$Vuu76L0HbeUav3x&Yr@0{6DLi4`8nr!FX}$hz4f`Rk3aU8_ ze9a3G0#xMhPSVCf8rBj~3JNKA$-5q->~>BYbMF7dAG-J_6;Vwm=$Ifb?zducf61Ry*GjOV3f zZMjJuC6b|1Td=uUf>I%ykbp6Fp1N2>31M8D@E-ed#~*joO*g&vH5Xof#pPR{-D(gM z4R`(8wXeG1RUiJ)$G&jo6`dnT&`Bo|k&F7#Lv2=Ol##1}k_ZzJW9KlgM+EcwRI!ka zV?*4KicuLr4|{DYNDAun292jR1jzt2;d3%-Ly#&6fPMv_*ododd`VG%Q0I%y82XrJ zRV7{NAjdSd_WOo8&0ED}tw5D(Bh^xnEHRjqeXw^S2zwigZ!y`*RYS@qQN(po#YJUc zE(mni*v?dZRN_7-DI+AMh-+c%2t))y?Ky(4h}gZs0@c5NCHH-wRAL4!AmmhQfXK*j zko*;G)vH%O_W0vZKJmonXEyKJwX3J6*UJY?(<+y|binBE@89s$`Zep< z-29W9M~oOgb;`7smbO42$3-q4uh{m_fBv(8-Gim}&e6-?&{ZK2bf5yn7N}g$C`!bC zAqtj}5;lOOrUYf#VC=pY%V{c>0WLC4ri92>bhvL~kLAEicAy`uVT;ZV69Dh)nP<1e zkr@f~fRq~T@s*>Bnk`@YP?53_4Sp&T!KrOvV8Fi`gNGJSY^}~1WvIIg<#$xo1KifI z*a?UUa93@Dfo^P6!QX8cT?619?|8@A=bZhS&wTFZKmX}K|A2QVs}=j-ues8c;Z zm24W;I#6oMWOO9cd-T9ia&fm+RX@!^ioc zTB+K0HKGE5&@L!^lhp6y{zLX=j*S2!4hgAXKZF|{CzPQfyj@hNEJH;M9mi>JZyz^) zVyWb-k`Ij=(TnlRFhZYGLgZbc8G{$af=dWcgTVzuK$2!)L~c}y1Ryv50V34*b!TcC zZU&HN2VpY=^-7JZcfpG-%bGHE>a-a%E`05U-azZ=IlBG%9c$LDedLisDXi)4^dAXIENBk%1lt>GL4G zK-*7;XAv_9Qszsk=Y=UmJCSXrpKziODL$$sHW0RvL~E5xoIzvw7*c8>Ri8c8b?7jA zCo(Q0P##ds3?gD;fcd)~X5po%rLqSMsbD|!o?~FoASSYT_yJ|ffo=|vHE#0`f;yWo z)Dw_JM7dyXw_V3DA)%|o@@9X{HOa&Y6L0+Q8$R-p4_|lPb-(%DuLt`Fh-qwmYWu5FUXmvz)$olk5fe8=i?X)NL?6Y@ZCA(;Qf$DN)u8)M6uwZoDVo$e0CmIC zdP@ZQWTcwQ6b*^~K|vH#HNF(cqp}nOKw?_KFBD=%kx>1JYXXp$Bh$?~S!UcH+lB{_*qAJr{+$_4iCb91x-0y>I;k zipiR4i0A51UeN0x9yxr-`|9cG85kI_tF{wM$j3=qn7aiM^G^8qeKC6@((z=pW1pE# zJ%*{^C>vI8=nd>}cEsZ6V7iku99fY{KKi2XcJSrcUM5?uR0b=Rie2?tI4quU!;fuv~B8E;`>LY!LcAFh!Zxw)Pmd-rWml707nHF+R)MN{oYkA*+MTPt06kW!QU;Eh0e1C3?dma4<0W!9xh` zNXgb#0ba)j^R^>Ep7xe*Y3Ay`n64h6{=SBVY69UU+l~W4>igv5kALOrtH+EP>&*sl zx_GnOyG7oV85|t+MzWvx8sJpz{(=5dsb$Kf$tNsXy6VwKy!jI*y}$m|ukO0*&ey;G zO;=z2 zA&OC+=Ry{Ao4$m`rV5%NXl@h=>N~FzRxVHhXo&tMXgq`T&!w%+`U?lt_h3+a)IXmg!N!eG9XZnFMbmLe9*4kjS%`B55RwUgVDglb zC#ZdSLRtQi zaV0b#uG6+#trxV`7dql?GWgUvK%Q4>8o~C7H^7f!V=03Bo*c`l{ql!3siyPs>rW7 zIRKJ^t*9UiMIdwZ>+37(Y`fWE1uEiCO_@iigV|A(JEIc>>L=0##)DN~Oq22Ca>-#C zl>y9q0Fb)ZSWpra^)!N-*F=KabOEUpFl4qd6mu{|o%A7I-(tX84EF_v#-a*M$Wt!j z*ThBuv?Y{7pMp>GqW`aa^(#SdgMnDIItFP;_))Ab;47%u~cNE-eMs@tsFP=Nza}|BMmX zz&b!}kt-D6bD{1fFPGs18m^^8Mw!+b&>&Y!%mHn4@403Wt5f~ZcqrK1CSX)A8tLX* z&A!z1vWpsq07PRPWT#dQrd}!1jD}={#p^+R|=yjDeQ6sNzov7{n)0guo9nOIM0A8zl4_4pb7U9=1Fh ziCzpQZ%4^>A%-8}LWnSV$MpSRO)uOhrUj;D7~Y0u^&Q&Yv-4T+S72E`y5YZ0I$_yA ze&Br&H6i}}E83np=|^Jn$Y{pM3bs|(aXDL#$P04CIyWW-r#qu-k0x|fL;)J=+J@Bede?G-FJ6edppK`zQLe$eO}eX2@|}W zGfV(XgSjqHhcGS?2asX?@lDSVv{K9U)`F4L)I6FfLqKR|?8c)7iJHtwm0S>Hm?BYw zwTVPTb3OE5WtyfCy$2)Hv`iv|`OF_T#ajmnDw`rzDeqOJhl9ZJu2A9=Nm5;5SsSAc zS5`yjhIV3kXZKGZ_`rSl-t*k^+q|LgjbTiPM1?v*{?vf5EEeMkehI)^g}tcXK-cX$ ze0X4B5d7uEa$GxBx!?we_qBHYdM{V>-WM9`F|TNe7ih+%rMiI?xVuiJTw&^2drM)V zWIX#+(*PxD&ROXsA*etxr4hWUQJ-j#EQol$(46bl&-6f_{%zHr3+lmBatvFFAM$mQZ1sqW`3iU8UbX~DYfaT6%FmDj_da{|+SO02Uh~q^R`BxsEYuhn?4wp008tNs&$IIWL@l(D z{jk8qPtE1r_sL@AjiitRLNaRhw&UE@$DwVi5 z0H&2Sx!Mg#;$~h28Pqk-WP>*(E(9fLjbL~s2V_AO31|WTiECt1|8wWezvoZ)?A^Q1 zFXL2gAJlh|v%E1lD+-{FVxg#*Kb1-)%e$q++DBY-%{AY+_G?~3(9+h@-qFFs01$S@ z`?-O6(+_XhylK;Q-~86e%TIDs?dHJOW-!SzC6^_E8O-dbvCWX%!utzZ&QR z=NUN(=Dl9^Vr)dr3`LeVRjRF0MAZr>tb81{-X{cVKpkXQzUm-SU-5{Tz}Hn9@$AIUWfx$%gC3$t>@tG{;iK0rP8+NpTGN_d){;D zWkFzqs@X!C_N0$>#7`LT$OOHSB>;)mQ%deu%}j5!{Nay(aH`etC|~>PHSd1+yN4+B zY|5l6aO5-3JiV{4_sds*$qVW$gO#T@KjS3;EL2Ax3I;+`9`LIx0YxfIGon5~*P(YG z2w)0*0Z=Yom}+uNGy9qm6@Z{O3PRXRui7A7D|S3PbrxQ6vx;s??1M-WT@pIDce-90 zCjh`2OQBpY^9Tqesc--w%~wd8R)VrK&}Dps>bA=**HKafp!otoZC16E+U1TMHL7#; zXztD@9cmPTbF|0=Ed*rp)X8D+?&SmRZEgI=gcBh^vRua@e|g~k^I!GKZ(MubrI%b1 z7=uLwBEqY}%55SNTn5Je7jwfb8gBhTSCddnEb^NA1Rg;#cJo(FP=AxXBts^$KJqM=0)4WW8Upxv8#6p)ZuT7)Y zTXF|Fq~Wm!PL4pmgVzH@wssoC*s){B!9#~2fQ34yEwtN5*}Xj`)k}{-dBM(%7jqZg zjKmP0yB?4##Y5)a%Dn`{l!Jg{_YLBx#pm=t|D+ECJMPvkTS%UR`QIw`A2XU`o;{8K z3D15eaczn7?_udzxar$=b>qgT!U59KQeL*~1Xfm17?{d_f(7i zluJ3uqfoo@v=ygWR@t^~?~WZk+MT>4!D%RNtqHT>AOSF`AAu`9LEtlBm3IQ~Da)^` zNF?Ms&{^e*sKl^TM+`rxdM2Xo%F1izBuW9I(|Ke&EUX`p2W!c|bYd~K4;}J8tFfhp zB>*5ugL3u+ptW}ZX~rUw_t~k=aYVwg=XJL?6dnwO#_q9>vjX>&SOL=U;W(ifE_iuY zxm4!cDT1sxP$Bbcc77e8>&TJ!zW1{G?!EWgYripW+&JOjDE+h)jae`StIHoP51wyE zc$yKRkvu?}sFh&!;x*J9BN+i?V@Lb3GNL7!USNgebx_EFLNnJ0l{Tm<{wC^j63V*K zq2OwjYn;}+OrWUyL3STA=3g?~A@jwfi(GP~ybS>-vRTFyq!LF4ToGWP{o#!V3@A!^R|1A z9wjoZk)|>zUm#zY_SQ;mrg)z|tADE_JaAkuF^#`dRu_UOg`L9a#B zP|PDXvc6Er9{M1^a^xr@C;?%V%NFV{>A-8>^RI%0h^dkDtPqk#0D2se`T{Da0KGLm z@!EuxU_0OgT*cKJHBcmLu^_C~oL^VwmReVZ#1EO1k#_$mx-QC^b%k3IB-Snf!AAj@*Ke*u~FF7^n z6c(FA5{pAD42lAF!8_zdZrn8o7}8eYpp5*FVAFM{+!IAoZ#WR>-Q%tHGQYjk4fu@ZSDqCWpF|d2j zp3i>nbGQBS7k%AF6{%B(>sErY39;fUN5GE5GRyx2Gf_;fs#3K!uXGT z=)<4*=*L^z+lh-cP94lfN#)T1SJH!^X`U?}LL)J4eZZ>iyzc}5Xo2y~>#lWd$Ghq4 z)~$clt6z2f_20SVT^Az-7HAG2TL*wE7{$;VG){P>HYBuBt2W;POY(x$BJerZyMLsG ziJO)S4cQ*4V**g@_8D29mqS2qhGRmyz@Z{za=p^w#h~YfohP%G zNMWFmV1WjEIgnUikQSrmQyj?ObmuQ*hX23?MwqM>pk$Yi`CNXJENh@_#AyP^&}~#M zN!b~HG|~{%8zV@7Ye~TbxL1QuSwL}N!PJU?C@NoKhD&>t!nSyw)67Oe(wAWUbAE8PU`UoMHUIj3n(S98VC>7|Ce30l}BX74lsrfYyavs zU;VEi{P&nKWBh9|psVZfWtUy@FQ5MGU}X>@)0!k32#9Fzi~J;H3mJ-ZAgp7i;LzgJ z837m;kvJ!f(4B{baPI#CFP-cxtH2#FvYtemnF0+7f3tb^s2F4@uC7?{f-}UPRLKD9 z*%%LTh?Fh{f#$7%f=FJ$SqhD>0B}uvanM5l-!iROr6Mx^5&YI;)jXtoH>UHhFwo@b z6)4}tfnooGQ4uI*z{PKn7OsPf5@FeV1vjiCuy`?kh4BUO0}FCP!9YtVg0TY~z=l>Z z5mClmP7f&!QF9(TE%;F5c_8p={4d9KseU;Z;6i#h##svkb0dmJ1jviYmZrT1)Y{1; z1ksYdQfVrl`58!Lj2!;j!>kfAqDd4`f5_WWpmww~bp)#a56lE3XmAf`mcG-)fdl(5 zdh9l z73o4J0is9|&h&*teGuW2cfITGKizZ28E5(D@82f(+Hd^Z8{c%%?%jKWiDp1D*+4E= zr(+he$;-EnJbXhS%QXLoD1IVM51N6ZV*XM0Fk4Eg-v9fD-$z%`-ahlfmm5<@_1Ob%*wc&LnkA6@ zfhhc(LlIdP&1KmpH-~8iOoqw*kkOSkWMonUru$nk`gqmFk6^O5j5zq{X1~U;- z9U*mDc3jK$hFS`i;%8=dh&O3lYv9(6da07`$63lnNy~$xAr}T3IzI{!R+(Ian(d=< zcFYCivkQ(eggGY2Apd&jyf!}wvVqbD76JIB88Jb5z|b5i`kmv790DNPX97C&4a5M5 z>)QBFxO2AP+4veB-2Ycv#2(adrq!VzkT^%($#F@qUb@X)~&>+}qOnor;nNWE>$Ec1V1uBc-Df zz89iW?ktegQz7WeAb+jU>qB4ZLY0pX|DRsR4WX20EsUYn?KBVEZBO zr-u(5*uQ`Oh|q_Nsik4Oj*HgB0CFX%bTTVN3q%Vci1pAR;*pL+4T-nDnvZtuqj_wRkf8(#aL-~X>mFZleYWQ~?OwF;VEFMb0sRAz`Qr z;gi@S<*4xvWz-uwk%rX zCo3x85BhniC486PpvB4~nw!;;$W=1`iGlR;k9T zHL|0M6+iTMy!h1M80XxG3*>{cr43Zg!u%gqF9wE7U049fKA@MSIB46p+1^f{f-_jH zBq^0lmjRM)itG_$hIp*R)+HQc!qYQoXAvToHw)trkXxLY?;1MpE6#bvefQjV;_~I} ziClK+C11MwtG44E$x!BwkZUDdbNHdZz%+0hK}8TEjfnD6dMvaQXWRsR3??u7FQg-L zY;w7JPtK@&r-I@qooLs91~rL;EHA{y9aeR{DApWm?E4xjyfwMM6dY|ij|>~#f{!U= zjUi2bS6tF7irbd}QX^Wz8;9(HFVC0c=|dE(0!lz*6mMYEWf>jaGz?8V;%~467(l(T z(s_2Oke+Yd2fCKm)LD+1NPNN2L?hvhmBZIs~nBxc}!f|$!6miRLQqHHIIq;(5qQd=p- z$pFdBa$R@cyt#MZb;s-8_(nEIzHr6m?|IKWt1C74bohA6*~;z@nF`GuosHs{*8|aq6UbS5WsX%&o07 zg#0sfp&i!^RU6)r70W@hmN|kvK1o;bn6-?UYN17~36#+aoCg$uWHn)7J&4;FO7bv> zR2OwB0OWs%yqOSPafQnQdAxI{TWcshE!T?gliDlP7;t8fG zaY;V}5M`SVNI@9-q+GYNbM&pZ{PYu_{1i24Hhz5bO>cSI+xP6*?W?jP4#hGl7Q~tc zFY52>QY0T`T%87~4{BejfL>sOy03?3GbDv-N1%^Kt9t;7J(8lVGLk90LlkF)1@qA~ zP6nCRi`rV=8O;May8g}U5z);7G(QwFNCr~H8X!_mcQd|dn)tEkX8f z!rwS*K$d6#i({Q=w>I?>fWOHvrT;cxFH!gMGLaAVbjv{nAlRUt(CY`1;!7fUC|YbK z?Rhg=2vC|sM$N9s6PDwQ8x;<68T&fd4h53Ij>$$xAkt`(KSieYLm2x8L5LnvCRxHN zaH58mAL>T87ULvB(B=V&t^h>PF(LwFtTW>BjVZgP=*h-P?0_iajY0G|(c2Fk>e{;H zIoEd+^!r6<2{CjNjC!kGYGoU^*+$AXe6f*vVugQ)P1xZ-3}2Ae45zkZ+oowvnlgFZ z_;D_0{U$+BQkT!lgTBI3aO6_S5?2g}%}k)!ENehegG8m10m|4AbqSSv@dxC=HJkzl z6#FQyJvdo#0K*#&<#OrTZ~WV=*)u=$nNJV&4H%Yn*PXY&<*jf1(Tz9GnmwE7&GyDY zhxI747h+-P8>C8GgrUB3tII+f8)yxT#ph82x<3k408l>xz@dVqLG4?i>IXmoi$HY0 zJ-sR-Q_PfR7odpdvEco!x#K?FFF(ZaF4Q!_^J;SXcTxA#1(J`b`ffy@$cgwP)PC)# zBTRsxNCyPEkg)6t&2kXy@lmi!?AQEXp95g*w-5=4s}lf7P5DweH2(rGv?H!V;!PMp zR=mb$Q_#OFR8GcS45&uUP%IZ`!-;)2-)^&~*y zgbflkG@w;IewY@>Qy?BakkkZ%jNBSy;UanC0IScWkU309ka0sZG-dW*{;>~#WXj|z zm%ZmbN4t)AY2SknJn-4ie(siAeqvf?s-oD`vOvw@L{ZJE^g^Z?o@tyIB;upmyioJO zTZDp_+l-X0MwAR|dS1!|Ktpl?bSV{jAurKrvDWvr!y^AAvXnzQtg-k-6+KlLD(k+6 z4`EQP&kX88Qm-Nqh#L7Q8WPbK0OT8LLBLrt-heyYIvJ3JKi%LJ!-V~#T&R5ndm65L(u>i zh13AJXeyNoqzM`ZNB3a}F2shf5S!=;8+<&*5p5T%mCCU8QmO34?go^Mo}Pgqm^YbW znlC^j<-Y;x?XQd(UYa*&iWeRq=^Na4xOab7PfNM2#aD5SggGHWH33GfA{ED}RO|)Q zI>(F}S+cBt$JuqTd(XZu)3E$l4uozYX7I<1nY_Pxx{qL29TSZz=L@Npm@3iXUSJ%5I83kR3`RlItKWKSkm)YIm(v(n85nktSVYT|prY5Uo)#vFBh4 z>SKLorYS>l>KS`{`t^bq5CX+o6=1rFa6~X60&d?&fWd*v_22#W_rL%BZO?B3%k;S$ zj{A;_FK%mT1;Yq1X_wHzA7!fe7#Si#B)Cq~fGE8~Dn1o)LqeMZ8oAF*LoiF$ z*wJIoJNK3Ef8YC$J8pKsbBSKA&Wia`r()B?SRf@~cMHi1fO66E1%ej`s!2Xx0b#5-ii3l_-tSM8}|+HU;xo90g$ zM|@!z?CBf4d-XGy-+1>x#iv!ovnk1W3aTnT_Fw(}Cog!z^5ekpVqxzH&O^`cdDE3Y z2g@~$2$)U#c!%w|VPfLeNzsmcNeaXUrqBAtr4gN!HRIft1tNQhd=hkFI?dz01moUUxEyW3R|v?DP7y~bp-xV z8~e}1Krzu`2^vW(k&6klg%z8#fuSmoKPH>6u4ss*8{0KfxE3-!;jsAauOaiwHFN^) zNvr?qwO!+jEGJ+g4%BU73sN96RyyZ0Log(r4S_u)2^@bw0wwY#$!n3KqLBiMF_4JPA+yNdVs}aFh&sO2iNV}vV5H3WFdAJE8 z6@85U=^pLwdB;01{^Rd|8w`u!KkpZ=bL8N`BP4(uBi~(u0&_=32B7H$#Q%;geUKSb zL?r}17C`}a3Q+c4+qbWI@`+#k;jrTWIqr;wcRsQ8j}Jf7(OM#6=pQ@w2Jf#94u0kx z=bk)!+@Rx6h!Qc{N48&j_F@;^kACOQvhTf$X?g)2nbcnofD_P==p%KxxITvWnXxo`C0*itbl?9n zBgPNVJP`b!`Tqq}MQCX$FJFG@X+HnQHB?L$*?ePiuB`h2j5q-Z#AZM}n+s6HdCNmc z4}tpECqDi*xH?s#-8ZqezaWZ>EwS|%Ji`S@2F@H zfNI>GXwZbRcg-4HsY%MwTDo^4sdt=WO%L_O5&k2_I9tPxnyvr{P(84A#-z_Wu

      n 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

      WzgqydOf?!m{k!zs;iWgh1TvWSjI6)S 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

      KD zfvKrB1a9CGJ?rh&j4C%Y3ZamZNRS~W>43lNYkeT5*ep@1(L=?Md|poWI705iAfQp$ z2@>!k^a}i5lWzhpu&XZVuRc*Qj9v&^a^;3;jElwuTvV$xaw(d=<-&7E^M7}j+CZb(w zx67}P+1AXmJO_HQKxgroj^@W`vbj6L^RdT9@H?Pp88T_;EZAY`l(rMF!s1sQhAu+Z zIyC)!yn|4&bi@g&I;Kzd+*E@HPq23`feZ-TS8V*vq!OrhNEz~r^=?sUmZ4|nA4@Z2 z;N;r@>GPwLMK$g&cO_8j_{*7|2|xjjFlNBO?&P=;UWb2Zk{>-!$4# zxX7aa7EahIlI8F9loPhb^<@g%nmNkLmI!1GoplD;lFY|pkn=EpNu`dZ2{(<(=M!l$ zAbY4oVi7ZGial5MS(adkOj*SwDG3Q*IWNoX) zMFGktrr70xK&4$i1lN@5A%`p>n6Q}2w|iD^`p{pJlgEp5x)5q01XJ;gO6W8j0^rLn zMw~u9$;9+4++(8k2)^00t9tK`NUd8jjrB0UDc|nK%&u%28gcDnkW@S#8*M{ZZ*iK+ zBpIch8uxPhn^8SpmnzH6}-XLbheHzn+t* z=7kMp$?EPiVBeFHWXzbWVvUfiMoFv#3k}F5Tj%qY3ehT@d}+m(jNlv%vJhszFYTpcy% zs!ejO4Jab5$~5@o2r;ZX%uprlDx)RAIqKkN#POjw#Z|@W_fvE2s zcsu&N0wix^M3v0uu}c*A+Kkpjr%(j+%KCsZ466Z4c#>3?0f zL!`b50N2z@(_|(Ww?118y|K5Rz2g2lTgEK(ynzXNNljLD$pzm_06fVuXX+8Du?tvc zoPf^O#|j6YHqnRRjG;rh>TM46h3__217GRYz8VWGI}S)7r9|)DJH^&_`sJ>NKM#UM z3JW_FRRXCs9722%qH7qd7q5b zUOvNIdkNKo);`26_E8gDc?3~QisrPaMDE5#iYZ@#zw3GiWYFck#A<15Wlz z5J5$D$ZsyOl9DD=_AI*Ws3#yD{lO|G0bisnfYg#^QrL>cv{ z=#<>_zRIb81J4|uYB&3J5hTZTE2!(68OhJ<%Krs~tB!0Pc;$ZOLJ(AOJwgzC<^Hih zs#&+hq(z-mokL%o{YaX(pOa6AU`reEj*EB-w;+d+lo|NWpY3~@(j!ko+KvO&hFKEP zraax$V@%h*9q&74xb}5_AD&#Ye=G|La{9%oV*pO3cfsd;kr6B4ymx)|e6|0|N#ucB1WxLDz#u*0ATL&JO&CJoEDrwMkVKSRN^ zh${W;I6j(E7Qe_C=l1HHcop#Hf z4{B?Pp9KW}7#|B`mG)hvQjzICPR=df!_8K>dqds{T?F1Nqez`Qzd}P5j4(0&Mx3q` zKnCy!#-50?W-KcAS_}hsLt7!ENKI!6QUp0RX@Z|}Bu;N5gb!54*;oB@i*FEw@<%VQ_ic4G zRhE3adFnW3ELJ5Ge}Lg`AIkfesZ~$A+M6&He4At8HiEl$;dYO>`!CseNtO=pP>DXM z(QZTYZACBbtF1lpjG@{ES5l2hA2#p<%|C^m4#0)?Wx>S8y;?dN7S~%AfNVGh- zJY{RvCHz$@yoPF0iCS>~2)v44O243&0_ zI9?e=xk8s&B(+)mIU!UX6>Q>gAbNswz0%8_O4YMeKQ2u%-uuce;DY?a&pFjDRV?@* zaLU3_=cKbcb%~5ySTxAXQ)ElJqr!IEIF#7F5;te$_sDdpma^)&m%!x-j}W|;R=2P$ zUFpBG`a)9t%R}P)DJxsG^tTk8pyjHyMe*=BYA5`yRE+labNiZZpWeV&b7QygVg0Jc z6|TPbHCQ_uWMATVSv>O-mO2T{*-~NKH!C5TA#YX|MlCwF`H;dTSswrp@pNeR>CIZh zj{)sID9%7F{xq5T;9@-6f;X18*lN>4B?PA#zKVpMU3=OxG0WBV)R~pLxw2Ipk)Q-? zGC%AaU}O3x9wvES9ekveDP!y3v<4X;bYu?UhZiaaPdvCrS>SHsw`+H6G&UTn_kJOs z_E5uW!FdXpLQ<`$CR||x(Ms%2P{_`h-|+yUQ0V>jF+ZiiLf68)wpgpZU}rmnpIAH7 zlo8f3t5I!}$6rDph74b?)D;0jyyL%dzQMQa;PAm30G@)>et*kcTy#Om34o*DmwU`Q zx*!(Br)aYRH($USXr{nJ?nW|#Alk&x@z$_79vyMX!aTnKr}}x5!6A8C4@0VAmp(P1 zu8z4JT-G%{t9HQkx}s10h`1EyqvOH$*2?3anD2>bxl#QiPuoQ(h9^Izj`c#h3+j!mW zA(}qcP62x9zR4omGazA;$)Xv|Y<86|#jo|RP8BfeiMyH6md4sC(!yyZ$uzn681006 zJHYY|2n9k?v~Japw0aT1rELt2#0|gUiOJ8D0bruq%mClrRc5q9U~032L@&T`*$_ol ztmAkdd~U_in5PUKA%AKC7j2eE@LaYk5N3ssn=;Q0tWH*IL4!l+q9}OffVX&GHm2`b z0^q^?t4t<2cHYDLh0CQl6h=>eDCiI9yU);o4u+yg|@(p9~hKKWSZK6(n)``K`Ypu_NCse&M# z(bP6pz+D*<$H-EtX-{I^tIysowFJ`{OEzEu+@1ZUEfc~PwwNx5Rnkt;Fv)=Ych124`*W0R#g)4LKA$r3K+v4_q?wf)uBoUHocz1g=>!f-0%l{h56EWu*K|r z3wBUdk>}_|)e{Z&E&X(B+hk%$ab+Cv$z>i%m%Tz95{dyiMmxK^xCd#fDF=E;Ow(OA z^e~mCCCr-?ZppYSRm=s;kLXH-a~U3#Nf6Q;5p)aJY|P$_e&_(3s`nDjw`Wj#QOW3< zaY47VdPoyLBVAVh(DROL^M+`I6=&Tb z_Q7RB7->@$u9{PE+pPU7Yr<2jF3pn0?80c7sbzM8wNObx8J#E^*{92`0BmjgWrE#K z#^yNSV@r#V-m~>F*HzQB!e%Sjq1lL<3z5wsBAobJFXW5!f)n>=DWSjB*4h(q$*Idv zk<_Vb)Y-tphr%CW!qQ`+h0=zst?&SwV(#bwo5K;yB&4MCSwf{5$RhKvEDF;U^W(eA zBer8rhMZcuFMNs<)da^+nFg%ivgAx!jAT$@)OGICMmmBjS()B%=1sAb7%+9RM|{Ma zEvK1QJvQ^lYaJGe?1^+$J}HD0 ztwkA~6d4v@5ZV&1dq%J!Oy}_t@uZvP?G+8VO&byE^$HYHX-jYAYR%{MvX#xj_oq>0 zaKmJp|E$5XXNl@=!X)VZhNr+1?@Twrj`79O~CpqchHfg?Cb zx4bw};w&u;AkRF$^=A`FAVNseRf7wVmLe|fD_Q~uyM$%yr@*lG0N{{;i;oug#U549 zZ0MwpEQsiZ3(5k9iyZnG*)Ep(*z6VrF&L4L&dK245u}x#S5+2u6AX1H&wiQV?z|Yv z9|QLG^|a5gd64l{GMm@&B28g|hw4u_p=!8;jl^!*3}x>(-U+gK2(rn>94&aX$09Ui zzHN5W9%d2ru{N9YWtfH77|4p_aH5UgXIzUKBW*fP;+;Jd%jHZLoW5#Sr`J#NKzwZu zo$BONKsF3IhL&{EHXTq1`mF*ev-^Qg-a-1E;mWL3a9q(6kiYcA_Gdn|nblhJ<{r{g zB0nJnf2-nk2|#J$BrcJR01|}dcg6Ftax7D)%Tkn)tw$*dM>Bd>43yYN>X%xall~QK z)|ys*FPrOjZPGDA#nC~`Bh;?SMK#1w+DZ9bx$N?O^L`z)q={0D zWZxtYbnx=qo8AnoNL*1Ix!DxbhPUXfwGUlXqEnR2pewK)^^A06ljSQNr zsJgfBXnJh=?r!5F=B9|C_-Z(;h{n=64C#kl14}Er#pkLsX8PspPNq#g?sOJfYu6Z~ zxaU84lomBntD@#5)*Xv&m?&>IoCl4veKkw&$cj7~V&N(U(mK}za7?Y{Y+n9c+luF_ zlDL<%V6vIVN!-{`kaU8|__fY8T3X1U#6GpIPXH|d#>ru77xaxbbCdVS5;t?hz!_|| zGt=2cl}0WN_mwyhMf0*(vxkW^n-@vVsj^LZR|p-U`eEGMrQ?UKy>e$v(n>fA7Q`8N zvrBK-7;S^mq4BvVrebKUfkyXqQPON!Ez7)F7j1Vhj1q?+MebIj^T!26+Hsn)4ldGW zYx|U=aNjppZQ!-+SUOOD^&we;t*{)P5Rr>3-i8SL4GY{lm4!Tx7)9XCxzIwLGWZLu z@e03Vo%((@WB6xu8h_Cdnjg^LbAI4$=e^pG1JBqS($1>XxCgzgLva*Cly@uJeyS#&@*gSWAATKl^t{x;3% z^0@bw1pD(5BK#YhK%Z(H2N1nwNAr#Pm{%AC%^;pI3znr&r}?scX|v;8lS&Y@eFF`` z0{;#GTW62+b<-J4mk>XhtDPwQsz@k$`xlR?p-}Mav@jNgTsAu>v{g(fJw;XT%x47o zuft{N&qr=8@X_>6E%jqs6@7MUP!xWb_@t%t$%;4hR5+v^oixbm(cV&<*k`RiHpk$04iEyF|Z9+$t;FF8F#W}oy61lOrW=2*f*lSn0 z&Iy+0mx!>kwE=9MzS!&HQ8*j4R`hCUO`)0~RoC@Jh1Gzbz>Z4gE;5#$5GukL?>KOV z>A(;;dm)^48*6TIwW2S??A?R8sFlVES{=rXb1{KonK@&qRvuj`)`~QF@3xKT>5|b-SfRI z772{dnd726f|3!Q~{ds14;&|l9Z+R{quHdg0x4hbHV>1JBi4~-$V z4|agZ>|O}xtq@5@!tT;V4(=C4?mI5NU4#drt7(h~puRE=)!1lqVi0$*)XywLa-x{Up7}!WECWzQcn7oE%ActU zn?gb>+ssxywUEz}@Youu@9RX2@EGEC`{iL3A%L>-oOnDZ6*D}s1H)}$>^3|19qpIfks=JqUgp&=F zedZzKJ9~Bgd|A})eD^~Q2t}y%z$=3etKFft3=w+V_Z_I{ROY{Zn@>;I>7J#+k8g+qP$H+xCoY+qP}nwr$%^PS(EVKCE;0!~PAU zjM2W)d+W8r&f6jvXC-HUdw+KsL=69}Sdj_IxA~iq^E*`pJLG2b_OAc_dX?Jn@$ild zyZ_WU0~ILuF(sun0~$J)9Gb>}XqNg^{8IO7r-2slznvawqNh!k`sFa4EOYeh_$JAn zV?*!LyfDuwa>;ihSvk6cOkZk_*DHzN#U7PioPiHTt&?eXHRy|1W;hZZTpR;yr@LIF1(dxONmWa&QF)P)fb zvF+(H+t5o_rUD>xdowxKw2zRV&JEvA6^tBCFrxAIXfL&hA2R(S@gnVkU!waEA1SDL ztvo1n>0~?u4->p6otIL=V6taSlP3)Hzxmse!;YX6b2osE#MGo6? zgJ#6w*UiLv4%u0i7;gI-J_IQsH@!p69#)%6vSp3%I;;fCJvDTGfmYV7S-)&+g-JtV}K80%&eNT zy5MSfP&422A}ZbBo_#1gl-Xm%6}&1VimB?JMdck@-l(TJ6rL?dnwE3Bgp*Wg~+5aWSE4lo>?gh`EJl;!Uzq(IEsWDbV7l zbobXIEvJ$ObRHKUc9hBvy-xig&w+h$2cy`s-pN0$yYcK-n0zaIiq3r)Gv7Y(TgP^k zq!ua5!-OMfmcZ#o+`Nh~OF9X!YKZa*QhMG(s2m6dwNJw#t+uw2#=Pv87##ywQCZee zW<~f+7i@+?1Hu7Rt$dNSU<+R=ZE@Y;TWP}`buqy}tf<@pc zSZ9qF2dpDHgA6xRqonkfWWwDc^N>Ypi3 z@<95u>TDE?lmvm@*h*~=-FsO8XOyP8$=;x7q{&FB{1T_(hC$?yK8p4dr9B$0L%Gu| z$Dtb9VCM-wz_1xuZP>Z?B1jGjdNfZuzG^N!apKyPo=ugn`=SCj=_caAVLX?U5|AriWO}?_Ee}}^MsmAgI=m#3c-U)Fc3Z>I zs-oWT4nE~+Op9;2j-3KKhk+%|%`Upo;0l4tCvVeKel*iLQ@c6x;ORZSe7Z-Q$@P!Q1{X`M~ji$_G}4|2kOxuMu0Vnz9yvAuJ#w@c*cqTf-;~-#-AiyS!zO`uKP%gu4GQj)G-} z{G`L9$!!PjJ@7A6KC6NA!uY`9ZRa8vSkVuFMnUR9{%mVMB%QI(aa;)I1IzWT0~1Wq zhS#HBQRFvM-G-Y8R}3(l^U1DH7G^yFEI{i#GVI4^$CZd|-<=hkPAbUl?!uaQ2%Lu#~H_2c@o^W&CJwyqoT0=9n5jw~qvhHWSN?`U`L8nw}!knHUG-7gH!=>1N5J z6)B(Ys>%A>!+|d*>D|A-@9nSADWMe5)`{`wL8LHqQcfpJt|GQhKZDQrKdt)tS@}rl ztHIl$e~2KTphAidFjw$LyO(jh0O8f)DBinZtQ?!u?QyfkOSv3ywa(d9=2z8A7|?}` zIY342QyK!G)FmPxWri<_yVxUaK-6CiMbd}#Flq)>z?No6p7+`wcDR(TTeh8XvxypO z-D4Ti6T4W#X{7lRd>O|%d#u4r4o(A`kZ{Tf z8jdXc;+@U)*8lzCYqR#l;DzSd?(bW>15F` z<@5KmWoRKq5th&x?9>-N_K zs`>)FP zczh2%y6gt9cZ#O_){@vtczJ(uZ+dH<#Alpu0s5lI;VJ-Dqa^;S_8P2`6l3$;SVpZp z7!lM2*9Pzb8IoiYA%0*1)|+dYOn^}8pThX*R_;h8Eud#^H8*5-ojTtM>44YuBRE8f z2=vA_1o#`)#V#$JATTI}iET0IcjF8{l%FRy!n3BeiNw{(F3_FB&E`tP_VKc2g|~NF zjEKsF$fhA1@p)Xr8TkB#?RC@^OBaRD=nwgsmC2j*qCr`5Y4=N;95r2 z!|m=UvowEk797dTj9U$ z;YkDxUS}iqME~PE?=Kx7|4JoDWylJ6cgIZ?wBVd^=dmQ-!d>-HyP%jDD>XU^qpkvY zAP*iLF@~RlBuHIpFjD6jd8u8L*Etc;4j)Fl4pz@bqnBwMY=;h+awsf#SzohzYieQoQ5zxPio zo@g@@I3K`u-9>c&c({DMReU_-aDgBZ7`!w&qBREhxmbw_zOa0q0Q&;+gY@Qi2Xtq7 zue3C|<2;qasloX!oCKvQ`#)j@DaW5ZwAA=G_nWcT+jRV%LPly;zn50SkRR!Me~x_< z=_b7Lb>m{n*Yvow3)F7qWFVk1`x(3xAe}_QXxV<&e7L+^IF#5;P@s__#g&7e0}UDo zvV$i!Q!UKH3LlwL@`TF-;M%%R75D8^FA-YJBcJcAS^rEg$YmmtsU9k3d}!C zh7+%&b37KdA@Ubvm_83e+U+zzJA?754RUlB6V@T@o>1a~u%W=k1JK}|Hx%ZwVqSe_ zCW*vDh>P4!3{LpY0xM+hb&g|4IlM-XgO8O^>au37%_}$!>#JbJl59zAD;Jf|RO*4C_yl;;bNSk?A!Q^6q?N8dz zpqKzdpI~B+Bqy3afr0BIXWtQD&LW0@fhQFk8(W>xWc2>HPVhaVwpat%9tG`9QZQ9@ zjyE?h(SlTbD=^vXm?QHC+(aFU!@@cl8L&4bS4t)SRoX2|CzUo8pBA5_=>S`0MtvB3 z0xjJXsZ+=aRHo0CYFYh&tt=>DLjL5&2UqNBYRO(YM*W%=VB>j=Y0*Xyo|4{^l8e}0 z^VS)I=4Fn~pWWtWy)LbLmOI}Qt9DvSFk(;;gPUjq>e6O&6DhHd0cNKZe(xOY{tkPbI+`u}p2NG)8a7Wj-bW)%kMBWu+<|ARnd z??9lTqX5>!DAl)E^u1*nNKjwHW>J0rI940KsZV@~c4jm)028HpEX<^Cok@SdMp$Ei z3~_z|rMoKnLRVC6cRLe_7AxLhbd99CJF>);NEaa$In`?#e8p6yr`);adSw?&?zWQz zT#QFU)VFjn7L_@>U3uMA2Yp2)qZtr!+$_ybKxV$$bY0GTV90FA8sc}nS?x~IDy%{9 zkuwnK0E}^QKJMLC>PXyoBTnO^gJm@4^_b80X7oGvG@L+%*8GUJ{QXe)#|wHLUN%)? zdl*|4f@^{$k3?I6Mo{-xRa2$NGnBMDzSB!IJyXA>@Ac@0-_OY&YvM+9G(^S73iluK z35HUzpu4kmh+T|uouubym(hQ80{Y}d?_NyS*(;*U5CXhjCOgWs)e&3aqaLqYAiUb1ieLk+YA~iEpFamYjA;^%2kIrnCI(#N2cnOia7)@hE{d*}; z#KQz>+vd!E*&4CY6x_-Mt7&RDO@5l&3`DP1R-SmCJj)ayd$Ch7EU2sX2r4-AcB!#z zb5hZ-a8UDYS}4sMMj*iRL9TCQ%k8fR1(Ar{t0v;E&QiT@wrc2;%32N%R9dFy5Qne; z7q_!?9%X<5`bF@^%Xs=C3d)HF&$IE2+F&e-LN?AomD}L4$LU2bGKw(m)D8@M7NIYQ zS3sCCX4_tgz4JXRPYwS2-c%4L>`gv1C=ou}?OLz+(ui~z!!ZeRV|V}CL8&0K2FX8T zxZiSKwx71{+HBDmWjJsDaj=|U)D80&JR%+L;14&oq{S_ZkqSzB{6X$Y@=BkuP$;=Z zC$+S#X^T@ng~7|1f^C!RLr&)YMybBg%PBfvHsA1z{rHKi2Ce-$+EE=vh_GZVqJE*c z-+|riH_6f+2@C)o_C*JBN&FU;a`Ba&IwDZwA$a2=6@tK)47W5R#hLk$WJt>!+YMQ> z{j?dbXKw23)e|@_fFy-KG~>+tVQZuHR<%u&`qqV*gJIFLZI?6kLBJ6n?b2z}^pC02 zokWQI`JDau6UYfShag7cmQ#4;7rhM0?p^Hq_NwcS@I6aIS@zLko+sDHn#N?j)YC4k zq`{btRms+;JH2@93-Bf6G}j9A_uYI_RPw=>kIvKbgHPA_(@M@a9Px9YO_+2RMtjLMyywl2+K1+L1Ep7p}+V8b_V zyonUVYLEHC(`{tcu(WI<-6gu+d*#9t_T0Wpv&FArx!l=_WcUQRXM_Gq0NeTbd@X7K zOAHHMdlvS?1523kq*_?kduV!m+j^xtqmKD`wO0xI_r1;#z`xZKfM}ZwG<=;i%~?X8 z`fu+)-NTiP$o$NZ>#5vuUlBkARExd&0b)3hlLBt&+wG1p=-f@DOVmGXl8u#urr;W`Mi6x=^ER)cZyjbtGQ&AhV>==fJa`0L88bZ}-|3rl z(WWu#55I?fI?wb&F{t8pH^F|2a~WelJKj32uU9o#*Pr9KNXUQ5Oe=tfron3b4L54B zKv=h0gj|sEIQD_8PsC(^6HZr-npg+WhUM z#PK57eF%UmMC4u7;oUTryC>rDoH3a-bg2jCU*6goNv>CSWQ~a3iC%4gqSi7INDG=+ z$8Jbwt6Qb69}S2YVh5dq;&Mrvn}&0CS9{S(IULFsyYJU#-5~JDpl6wIpZt@u*E~ei zl7nSv0`xvu&j<(R62v99e{SZ_S#CDTj!PSoARak7XY_uHl3WH5=MRLPZ*SzYF`GPv zY&W5Dx80j8jdlPCyWRJ_n;n|Q3UV|Cn;M3kB-)P0gh7S#!-TDw6#V@>mSk(3IZ0TX zFH)q9L9QLGZjjHP>flen?9Q4%1)RZ*%+2XM9vqrgXrvA7`Uc&ZhrpMO-#46&LuTs| z%eQ68jw5HF81+?k0JW36kLn&oEl(2iN{#a_v>(&z%!&7r7++$-$;`sma}tqWk8Mr~ zQ&){plM57>z5qoH2k9ED^e>Vo2hlZy=0~l zi}VkrgtUKL9s4k#jt+jfeDKAPL_D&b6)a(u34p9S6}m3P*CU0Vfy4mSuc4fOlkbqC z_G*Gwd}3KT=r6A!fMO;06z15?Lfyok0b75~7Ils~8JL@~7R`_(Y23l0Z;euZ>OiM? zuTNxmnB80FDMof;i^Gvs1$=K=U=B>KcM%-}se~zM#Qxt>uIZ$y(rjwpr26;2!FzFy zp-t>FqQL;;9=a0@0>PVWh=H+>!U_o^pkjtBLdR1~UHX%UYt`B`W0FF}1Qq0gKLVqf z5(cJDY6S%Je-VPy_AiEaEyNlN`~BChsCarokAQd>mG>b2pjxQVl_e;QGbb4Wi761( zK}2ROO9{Q#Pnhz ze8R*3BZ>lXV=bB8dLh!xaO;03LC~vx6h?MvWeaIHGN+Q}x*7gLC4z}ZzXMhLJi z<>=0(WQ2rS`o}#SLxX7AZvu^Wy*MljA!R|_Ld7kBS)$lXN5Kt|mwX^VYGSfG64v$j z98*O-E~m=m*3BcCm>nADPn0>oufIjXJvceIFbw0&8-3p!%Y%V+Fc^3MWp6+jqQ-+l z%1T$!8lt`_4&09#kz!!RgmczdSRktd@Xk!Q+(M-}1e7F3N1>UOIHSm6gAwm!Nt_H? z3tO#5Y~B<9xBfG7z|pS7dNP$;I-{V{Hwg#X(8inzI0ZL+ETwaxr{neLo{(d1{yoDf zoDaHCuOLpoKdB3OSI-hBVSQFU#A`NVD*J1h*B)h>Lt$I7BMZusCzAaof_YItwHYpv zhrw+Nzt8t#!N7c`P;fJ*g&=dIH8CZ13xfA=1>ez1ga;*<`t)_V8BBn%JSfk_ra)Qy zbQS50s(*3fX@56-gO-Kl4ZozK+KWYIH|+&Hj}J79p;gkAU-WptR2}gv>A>DKCz78d zAK|psVMrF#%PAZ(@>)9i=1y+T_+@2&V5DN2woLifpKMeq?*iIVc?MP%rQ%|`=6p#V zjouf^oE8-~CM-Fx^QEnYLV`8(6BFSxLR@66^vSZK)6PWyp~Z*_jO%M>aiUj9rjFh` z4lB0;1E^Wdg||-c&Lv!2b`4dlbihPvz6ljyjgXAFFe;$%B>5GCgu)l|?kF?X0Mcj8 z$7;k^hF*|us=!sLxNvtpCS{d&tOVbKq_SXp5<-F#TUg3?)xEj5F-IC!adovc6BtGq zH8$LlWsftJvR7}i7I2Gw870^{yQ5BAOH|!7rWX}#T9@eoXdwRN0xe>kS50zCn~`<*KBseIT*rtHFC=Y z6CzA--azaa!!f6PXz$zI{>(ss(0IJ&>2zaMw~J}6T~hG^ZZ@W+0YMB8HGcH}FZ(7O(0^X8raj%`{emaojqm=yJ&XQNiYrED_W!bk4rxwAAG9O<&-}qe z4X)c)fDVWlZS%=)>k88q@Cp0`{p^ME+W3;v5Tlv7W`GF1w^$to&_G&hRcK zy;u5nY;e)B=b(?S)w|-_=WYA*&2}-CWsKCKdnX-%PWzIlM__Nkg=i zkT&L~HFKbA0Eh3l;nUukB@9A@zQYbn6twgG^>q^ki6QQ94xS&_M|^<8_gnGdYJAZx43*JTCZvpG9|rhMsue2^`%u~*KoMnw7*vn5 zHPL*Or+ySbW38YF^ zs0>LMk=*o~1jh$8x!gXWmwZEa1xCE1uZ~4+!uV*GmccCFwc8Yu9b%((3uQ)fvZaCA z3nkvbJ@ir_@bmn@2a$c?4{BU>rihv5Ut6&hn%2=z>4Gy}-{v8gzm0s9XV}qW7prB> zgCDPGtl1}4%H zFM@gmPw04w(n~q3PGqfXPOL?=M(M$sSk8RCe#>O>!^QW!RPQ*gH%w)D0RQnCfCDpL zJsz|oFY>E_7T==`?GavqKiQYH7h4PM?bB)Z#cxQsKP7}sB>d!lQYn=V* zbiH>F4CSTGr1p&A!9e$!XFjnsk&PAO%mrRVCuLE*(3gd{1tBe|Eq5NLrfzPUmv*K+ ziL6bNbg5{+a4jOJIkz6Iz}%7H<;r(zIZHSO*d$R^v8q};^bi!fso9is2xQ7!LH#sBKS`?gTbf2nFqqkAU{z zM*xd zw>VLvO(YEO+BAXMjiZnxx%?XqQZq zuMvHMZfg_%Mu8kPTsW7-8?@IH%)6{@FRYzMzG7)k=uXp->J@d8<|P7B#blSo>{VJL z`}fs>D?Y0=?twQClzcsv}zwlo`+wq zykQz{&aq*0=CDw^sHSOFTJS=KDFAp-(VIVTppqrNZ}JpZ{7aYrYt7R7GI2uBUS+PO z3o^)c!p}yR)`4 z|1>p>nDuTWi6f|gmaN8ok4icW5k;Xy-EU+n5AS;^b)O;;0aUUV|D;c-VDVds|AY@M z=xHyL6d>e|v8iQ2&|p+4Q<)ON;aZNh^6l3WdE~wib3I_bUz5qQ`u?G5LjbibU1TT@ z9PoqhqAe)n1o$H=n{5}Hn;_+yWXNMeyJ%o#Gnyl%73#`!_-qub zE2k~(7gD)Ul6$mBvZUkCLg9sL#4)zkj;LpucX_X1pb^bWP9Ym4EZ(VW+aPL9i*%nb zF)<1SF>N@+7<||mz*u!_TfvhhUzOBQ$t4@OuJq84a(1aVs|t|f%N6e7TYgBx~70Y0pb9z;m?9@N~MgW^wDM&qG8UDjkOYMEDD42q1Ys;?M<3hhADe} z>Zl_3weF}Q^R(uu63NS%g)-PfnU#c?X*z-MJm+E~VJIijs1#SZkV=MhPmw|=Yxq_O zc9+ep68YJ)xC8pzV)Q|KyxH}}y7s~-h|w0fi&)ar;F4%)-XJ7>8ggUUim>cAdx=a@ zqc~$~MX7HnMr^t4C(#Z5HAbh%KGVp`1kRO>AHdvPJ`FG!h+A$^>mH;gvPpY!{E$Y; zf~R3?#hA2vg=HaSeA7huAFmhpn!=IwI2>;sNleG6&u7_gw!88re~sXbJiGZJG0L9Q z$>-Pm?6E)RZtd?r3LPfy8F2e~?^VE@5EBYtt(`o-+rxV&WAUs;Jf)fc+`et5o?JbB zCwAssCANt+_t3dGFPyu24Zn9O|9ra7UsgJi?2jHp{6QH(D?UA^bG(B_yiRir*H>Yc zToEOXX^MyzS2h`;`5Yg+O9J`KCMJ?}xXh<5%{&0DIts#2-*S4CBFuq{^%5lH(^SH^ zQdzeclDTmljd-{f1*@C^=joRVExj20`zw3;YWg~AN2-q!*Vwhi4)@RT5dQ`;}bRe03-_%{+uH(i6 zmna>-f7E$4_kQ6v@loURjwhv0v-Q8c`xyRjk~a>P|9bazX-LK#up)M!{0AeY-}MRr z=B1{Ggx_NH(L5>;U)5y=%aro@g={W?O47Cg*TyhAY7n7ZxuU9!oN@CXkd(kd-5qT@ ze8x8&&Z~0GPu2C0yRG*(C}u6``k$$fS!{l2^_^G&*r|`Zo}Ee(OPYozAa~HNOx_EU z{1=^@cYjyQy;o;^!Yse{z&-AS+pC$E9ZXVsWbw7^Fn<{^N*6C>bIo1GWS^e6pX3|! z_nw^^NQUhmwsCy1hZo|(|G_gZ)jIqIiUR(z{WZyS7aQi6od3$xw$MNAXEJt@jOo#} z9c~R~75)dzv<=g~`pM2Bq%m>TNwr|Su{LUN(*Z1klr<4POq5+|Td)qAYnf$i+aT!k zJyg;r$UB2#>Isc@K}=POfuF{b2mxhdJPtS-xKCyGPn4b035RNhy-ucqiBB$LL;o1O zajHs+3*aJ^&*6ec5i5H4Fw{(wibw0992Wj~d*y5i6=NyMI<@oCMp6kiuS$>8_X#XN za&jxkzFShgu5fHSOEq#k7f)3RP{X%d`7Zycy2aJec{dp$x>6r33mP6Gxh{T1DXyzB zY!%+<+>wULzk5_!zkR$GwL()qNlA#5E%i`l*;DE z!d1hlg^B&NcTYV%9uhEl1d-_^@o(+&c%{0+^PrHHfNybAyE4sx(g($Jhn)00 zMekq{L@1`?h6M>j%&grs&9{vw>gG6*5g%nJS?O{UK}DAX)3Eyi1YQoPN}@@X9zg+0 zmCnwwLFgGMpt<(H7wJddr%Q^2mY~4-J!=Th+E6+mEE8&IAn0xtjkC85VZ~K%JT>KG zln5{dRELU9^(|X0b65iDz`!{N!r?O$>?+wVND7NNK`D}}FltTL4y?3eH!zif=c#{m z0V`Q5ybergz>YmN1P(z`=TX(D;nNC@b@djKROWP);_{ff_~s^vv;hrt!}tDOfoF}L zOzRVDZ4(q8HHO@x%&Ir6uYsZ(c*15uMrceeISrV}`47aPZLd|CwM(@X~K9&SH89Npqg8eRYQt9A2r_IM^n2ly?|T?Q#&;XwH6N z)*mu5MN(-bLy|Z{KU3f?>Oa@GaxKx5XV|$9f7@<`NTJz{U{|b&9HQEKAXjtNw+Oc6 zs!HLssa<3`gMKro;!+NNm^wOn==-xaXX(LieKu&%mJedMDocS<;Fam3pegdv0CuvC zoePRw1+qFJE~GFc5y;R~7b!jYfS*r}=%9WFBm`iQ@7QV#0gdK4WAJo@v}JNrC%|b< zH`q$dQ(<(oEWDWL%cl0oSs40^o@~D(rv>k&O}-rY3^SDeY#MbOkk_hL??Ar1sEZL^ zLqCWdE-C4`O;r*M*?!%+gj8U0TOd6c736xgv_^xb0Hn%A$*6NBZ_47$T?t1iu^%jB zjg#{db>*$SDx(WO!y@k-j##O{nrRf09G)0Mjd6`!X+TUX?vu&Ncd96&=ApL^U?LtN zN8m_er=!8b2qClK2#ncR7TND8oi%WL68q^FAfd`N$>&E5JeC@^S^vJ_u^?hlzFKT_ zeXM+(>|m96q}RI;uCPSMgH7Q-EUJbm`tequi9Sl;rQM5&Ft6;t4HL(T8Jq+J@a*R< zC&};-|Jk(dtJ3CLp}ShHjqh`&UYn=hbqmmIxwLOols@7t%*s8p=16U6zCU7*k;V3h zN_*f8Hq_p{0N#FCXC-GIPdAe^DzKgQoDt`#O(i*Cy<~4hlJ?o`1x@7B{N1rtffI0|vVXVrNK5{@$6Md1!nETDx zupId_j$iR#?s5E&B))ed30ljBs~jeYNYVGp=`x;0uzRi=&hy65K+ z4pY-~@qbJC|0B@qzo$D>|8H0%^*{1i?cA3Cz#`S^Hzi+c+a7OR$m86(>S)L`LBfp$ zGBKt-9|+aGYI5t}!IMVDe_0!q>9+6t6*@jO*L-}cIoiq6d`oysww9cv z?&)7YUl+p@DVp7%)zkrfr{zMS!IZGuASYBI!I>30>*txoZP^d_RD~^^XqLo2ydDn< zkyK;tD%7%79`KBS>>2&-B?0M*IfYkr)lZPW+jCQ@3gy>TO*}o%6zZH<{8gU}`1!no z$boOJ6!f(s1}*}xc=^$hv`E0HCeQ$p`e=)Oy(|V7al}jewLO)05C0Xx@C_8cq>N_n z69BWNtJ+=e3d>HHNj|SL=mTv&^G7f*dss+25VPp=X|uHap@fAu(EWrKPXnwOgg{VB zh>Z8lINT!x+sveB(40|1cd0_ZGC!o1pkKvl{2$g#|0v>Ta+Vg+zGMI(t}k1PMKc_L zR@dg)M_!8x;PNR!lQ^xli`4e0+4oqrwb<2Nd(MH%Xmw--*x)KGf6zH}Kh8)JC@Kqi zM2ovj`4P=>6q)Z?MFS2G@9f#m6^YKitOYD0%Ok5j*W_6 zsOnsfg3oz`4HMso9!ANhYj435DTlTOf1fHEfKUg{H`AzC?*|#YWhAokKry_XUvFTnBmb23-wUrzyvG7wZcT4k{4+lR#iEvTKE&ul{< znxj4hgi-JixiJ+MRYTU2a68`h{k@*6+3_IXmDO<~EM{%S9I%Mer?F_uyQ>&n=U}@@ z)I`T#9`_B82Xkl@Ka;7-+)>Et)}DFgT};M+LeFxl(@603fP*wRiIDsk0}5!K8=*f2 zvWx4cE|g|rMsd5?<*F?dx)Ea}?cX_%+?0_Zwm8l`|8T6tjD>mPR)n@qL$zwQuW?{? zv&2~leZne#@*-LBdg~k&vk;&KhG=3Igi(i7N&LC^VY;sfN+v0Tb+;x*m;{tLl>PiT z)C{BW+Lwed&yD`xxrA|;s?>sGZ<7g2h<>Utm}&TcKY$;H@Ju!ES{J8gy4hvFV7^=u zPbqOl-1c*7LA8o^>!^dSGP&-dWedM)S*j9iq_GinWfMWg6eel%D~u{Ay0yS>o7dXX zzB3!Zz@dfU8!jLg8B4NA5ZW6|gQP{2!QE9V6NzgQsQTA%q74wnbIuEf&t%d9V8mJr zEJl&O**(8%&emk0cOhD;vH@}+w_U;sR3bJ+l8^;tdH5WP7ZAkJfK^M6_u8w+K=!$+ zSC>muG%hRV(S)@cg%tTWP}PE~8k)!22GN@Z^! zLm^^~x*C(8-09%O(!L=od#{j*c-72^$^wNRy)EPJuWNC6ziyNHOH%H_3M0_awAu!^ z>bEc!=K$U6hIi2hdn@YARSm76x$cbA1s|%^D@`O4JZJ!|yn0PlOWidyJuka-L$2bI zPEiJ3CU8dVkfjS=wm17L&2(&1MO&Y3t)&&Wz1ob?fAyjqC0h}2T7V~~jW<{2m8XEaw^ zp&n#iQ=ztO3||&M7w_+J?-242OkD}yCWEF)2BRTVhyNO0V6j%yi=^Bx=SJ`)y!&9*vZ2fthemdEO#hn!n7E#;XpPfoAEB^AV_UH8qQ_P2S z3%d}aVMaA2Pl(>-#15uov}|8MRO@xx(do$GNi8OVI%ABRH3A)_<5EPdQIRqFvu>n?7#W-rq3)zwW2! z8SL+V^ky~omx=ZI|A&5b`RmB!Jk_h*bZtKYUjW*LHdAu%TE4z_f!sZ{+Xu;(Chg5O9K0Qv3Bi1HjRPR+V$G< z(eTk&WSD<4bi>Dc-TCQ0k)oSuOplzky#ydoo3JZwrxQhM;k4q#mt+NIT=4SU`MH{`b#r$yU#nv|WlUB}MMrLC*s#E8nqIY2xv1}(gU z{@4Ls%2-FDfw(6DvJB#>-6|BW9R`($8JailOi4Y6<{bL_n}7$UslGa%pH7}Oygj+! zI?<1UiagOgS3?RMv{JV^D&u9Z$|ywouiU-$z9;1mFDWZ2X%b}Xq)dY3G%Y*{IC(e= zVKpfr?+B8sPd@=W_Y+$4e8r`X6&?Y7B-T%Nl|GW`jfy5P4n|)5`rwD3HFv=-1`X2e z?zNt~EbHzeSRw@$eVX3gw^gn>|CPn+IbHAl+y2x_^0gbAF+2!xdbWgfum`YJcF7JU zLYzQ!l@5PLvnTzU(1San!YlQ5q~|~3(#HD3f$3A_x5L%z3!ahhfY-8tfNOsguBtSb z*qmhy=;VJd&V$-X zNaB)_JEtBn5pnkG`^x0Or|g-6{(5$WfP#9>+|^pQb0(CNoE*+@a3!Vn<{9#*6DXaZ z-FbmvL{%amfO&(%xHQ zOha~&`*dY(_Td?KI3CahmfTWE;8&ijZFnmNc8k`&_2vwiwWD%=7bdm<0hme@sy1v2 zUK~|CuTl1)zNga`0tM$EFY>Re!!|QYSZp7v`lC`GB1y6RTn!WB zYs02%Qs|B$W5WA$G2}Z6aKv|rAgh4>#aLd~gbP;Wfi&uH#t4?l<9{uMc3K8D!-u~_ z|AEb)hlq-j!O@L=k)!&~|66<(U<;Z9jEnG5K#8ObDBdLh9x;#$snw|C4(-YbH0(;M zY`3EKL89i5{tpyrqL=^h!8Ha9F*2b2_@7Ooyt_&=kzg8CMSAJpR;Zkqgr)RXwKL|Q zgAwc*+~{4owSzP0sH|$3%hnWvOomsaKmt8P$(}V7fl=2?V)Sv+J?6jxZHi1lv<;xk z35amPHZx&y+xb1SLo0w~1Z?CPXW)b5~MjEzU&em!V5aHOq$-|pq@tnDK3U` z2Vr8zmvWtWpBe=|t)R&ib(+3l0LF_!D6Lge`viw94$Mrkzb5Fpe)_r;L(u+2o)FNW zv>c>T;Mo2dmLLvjii4j~;#=BJoiEUaZmovwk9cBB$)%dAlAHpJnYvQ*&~X+83d(r0 zcP2hA&t?w5MBzHAEj8|6o~_+szwlRVl4!EHKQ|~AT1tLrdyJ5Io!*5dEk@EX4Y-SJ z7;e_;h$1VxE3qyUprL^kZ-Cy%uXI}ys);h=hD#6e__KL1%hjA77wqSZr9f=`=yqwm z0@PV%*!hM0y~_ZTZXX;qJjW_Ejg7MrY$dcrGaW`sjez#X20msbBgKL*(eRX5JpM%A zle@H5X&gm^X4u{JNH-cxL_71tCcQb0(XFtIYG5C}qod6+qPxZS^~fg@^bz*IL>=S* ziEzcp#PDBH*Q7CK^Vo{eeM0dFG*ydgRVf{U4|J_}m;*$;-Wal`vkh8tqbhGHl z9dJNWV9}))Dk%I`4$4ohiY%I}C@PbcsD_o>NW)Li?*%z+J-t5HJ_pZqmerTL*i#)h zA+P3CTDaXU^e@mk~GA})7?$#W4^}eZ?wpQ{9#C8C-E(6Tv=#InDBj*a-?Qgp$_ryFuf29quB`-k z97#G*mYVfNCZA&o%Gw%jtEKrJXk46~e&pp>P-0!vr>H?4cnrz}ba5Uk?X0*szrxO8 z9{y!M6^tm8!y)yejWNT9ooL`Jjo&+WsC(TK)gN@FJu>aie6jc_RY_in==A2W>n*Rz zyjIELcoO<|9x3P8jHUj&J+{m0lsa7E*&tI)Vd3E07<7Z-WC*NKM<%`0PxZ=ZE1>l| z+D*6R3(R7wS$(+6J4?qG9H|Z9a-Kw$K;cQIBgw}vf^0uHeksg9EhJ~BEi8cJK43do zn9p@0g~x5Q{%g09IuYY4x%DgcM z1IB%rgaO>GWZ`=UA04^Y9cuP5BLZBOsujsbJdBdD`0)9jsAAOa%M2isKqVF}Mn#S% zl{U2zFH57Rq{x=qV)e4h9Tg-4{E=y!UGvA61&MqCIm-0KhTk$LVT@wU*~bR-Bof(6 zG=BGbuG>ACkM^tE6JkDHSYnFxK)rr)zRDnbLTq?^Dh^x4*Wc1>9g*CpYuQl&#~i74 zN69Ql{UYoXVs5rdu1(C=e`(qAsgKiJcDa4{IQkQlTPBSwaGI7l8{CaK8@Vc<+38X2 zMVK0sk9IOvnMzDrGTk4&hQ~uCwtrJi-=?#FOVsXlh*r|o2vXE!$>`(2uYdH8dlwgq zumX5EgGRzmXV%C&+04pDc%#!WJ!;bSwUumhS+(CXiWqNyN;rGHJ6n4W`%t_Q>IC=%3?#> zO`ZGW4aiCvL|xqL1UqZu#;wY0{cA)tcT8_K0PB|Y7S?CjGC;+^3v0uaf35c!jNumb zXR+8gr2;y}QdE#xJWFHYy`z{zd1*zN^e9t%BDbl;dJE8I>-Z-vM^ACZixcg96Q$I_ zHoU@oXRjfRDx+?31K$GP$$X#CrbzgkwBH7DhtAK)rkr-;uc{JJP>E^r#FQK`oY zAvNBl$KU!i#P$zEGrsiBI^Zn}oflfSm>I&ZeM!jOQE-Z_l(T{>X5l;)6%=zwod&-! zLNi4cF;|PE^9{hRzGN8#pekY+*~UP9@&CivIWP&rY}vN#F59;4F59+k+w8J!tIM`+ z+qSJ&-^{#-xi9XExPKydp3Jk?>dY2NM1%_25|CiBqYM7+2?_3}4?#~>M}KEt$v0-^ z0Q(#dSxUAo1DK0D&DU}VCX&^GO)5?q;-dDaA-3MBZMhXSE4Ptea~g9~tPZ6g8RJOD z&WXo$V+l?s24}O;CwG#K^w9~+GU>BRVHG1se>B5j;)wZIT)cKP+P8To)W+FOWSl><8gkv1%P10Mf}lr8I6R+PQu*L&GN{V2stf zevmkN)Pms!QqM{=k7~a*-vcpArb|4SHY5am8zOYU--kIim~y()8M5{kfCK?~x-)E3 z6ZudT5t$ZP|MZHRmJv?2IJ@x9897*vuD?}e-=&k&d}Ot3MK0p$vcc@J<{t5 zRw^z0nDZ#PD)^Bj#u+IxxIL<8^TSadq*MjNCGOr50SfBHBdp}PTgsszCxbmj7-9-h z(Kmp^Da+nugdX7m40ue-y-H=`onUYvoe zbRVGL9f5J3J_0=u?!mr_7*nwk>ba8`9fs&GAl?0G6YL_;NoL$jwo7FSVGKR)f**i9 z;vQa=lGEu0S_Ml}=_$KtzELoX>YB;t{V{%2M)DhEPHl z6Icl&!j24bhxXSQ;h-4L%-D?iKv4#xDy+&{on^p!Wp%)~M@LGTmi8Bd{`Nv}p^chY z!a+6x`HM6evEKJ9{s1~Slz<&q^!5h9T?$6tAdbK*=)84cWxwqJ)Z9h0w{6goHQ=r* zQ|)lBaL@g47m)jT3&Z{lC%a;k#1^hZBk7dF8)v*f$^4eWxgow%NjSbO$U~6Hk5t*TBw+fY06(p#QSX_1C=>00nqs1%Z#0bI>YHJL1VBQ+%SU)& z3P_6vV`x&nr-eh!wkq8Pk`etmR)+3QOO{Cj!H1{38@JiEEiNfgF#!leqUIZ8%1vo< zRMtGGPQ2lrK^n{B_?S8L+}8IM@2K|F;@@4S{xc*S3){b#6+6|(f66TX-5NDfqvQ1x zp#w|x^j|feYu7_fwl-!`-)JAbK9(b-8BJb~;lf~ExJVXWEZh4rZ@0ZK$sgYeY9G*s zTqs<@`tA&=YIW;IeZQRed6%HKOB%Y%9uQ9#1Yxdn0;2+FY+F+WO8C=+NgDAaZ-xp4SeF+62N8gh?I`p zkC;v0od{fRNPRoxydqRDEhiy{Smz1T2##(cSS<=^;VIYyC(D%B*<$n|AhpZ{O*LE^ zOwkk!u+M&W8xGJAy@OJ*;|1QwIALa(`x9 z4#2!j?lajz;5b1Y>6&NHJsezy!JU`cTXR(q_r*=+T@soF;P_+YFoEi5-D$B#3qPFG z!q(VSK#5Hbo;=f9q*kd}S}0}}cE-E|t*Fn~<&%1YbK09ItKAoZ{ftQ9| z;6(Z&Nv_&7U-afLlDmW;TQECX0N((HbEq}b0J$bFjR18qKSt+uVC%HXHOpd zcsAtz+&fc|FS*_d zy7*whd1lO+EKw%wxDCJi@)_S!oSq(H2NcXJV9KiJ3cdyPcceVz=6K@Mdn0w$83|xQ zOiYq3Q^wBN}+<6 z3V<0*=t`(O0yY-|o?UmZ zc3TG5?@)&BRD`XU zilPX6n@M=;|E3@j1ZbB7(3B|NA!K|wOa!srjiajkbI;7v)i%!WjN5=)c6wTxYMy8Q z_{Z7n8+iI}U3{^rs8(A~8k#xo&r?0zOKt~`YDJVI_uWTp_Ucl(i;(7!j>USSR{WCg zOUre2%Tob16R5PtZ`P%f1;R&=VHMliF&Z8e-cPk)#ZsXbW_r}-es4Fx3DF1ItdIAU z+t9P!{cWBLgVngRS0##xSIz+L1(eF@=#7#=6a4BYbp*}tR(>loB}P2r8^+-f7wZ1w z`-<|2uBqJC<=PgZn$}lBd&cWu@*0vebSZB88PFZ8#_Ha#vo_vem%>=SucvfZF{yk1 zE^q!rwi@HVz953@HTkEZGRkzGij!p)iuRmA=6er(3Co`8` z@ES`g%lsD65#{+mhecvz>)3U0?U-tI~;&l?b5O8NO$vF1a0$lg%N2l`m>H zUfN$fUp**AK|>>^x4W!1yt)rZ+2l`?Ae&Y>R0fI(t`nPOR0el4o(-9VG^>`iD~+k} zM(*+y)d*>hh2vY8wRmqte?3c%_6Z6TZYhGAFpDGwBcte1LKuirKOjs zYSa;)F(kZEa`CTZ@)31$o@-m~yGXc8cRm%IKz^-_yI@oUg(j(sOzcHonB|XK3Va%! zP4cH}>NliHYdGj#;mnBK$gv^JLpYG~O+~k~eMSqY1sQY)ra11lh%kU1?!@cpK1935 zmh z_XsQI)lk}!qwW~_EB#$J^pw2|H0pL$s^1n1=j{6Z{#%R+F!B-tk-#! zO`){zL}*D7-y2AJRFkUHG=(ym0&Dduz*1E*Bvh81;Y7^eU&BCP4>)ItPR<4~>n;M@ zZqGdwg>5iC>zZu44}B=I#@(_#nVt`*ju}h?lT@8zDY;2s)SC#OwjMkV2*i@Y94!p= zcXc1{i4W`8A}#&B@5mROG0TvD_Lbr8`qqo6cSmgeR&*Cs&c-0>W35e^(_eL>9d%cp zUVtK*oKuapwC^sdSQJu1Co9%abaU$Mz%Y0y(Stc%y1~6{hFrVXqGD#=u|bS;Zo?`^WFmq;F7N3tvHNKT3I^c0%a9h>+8sC#xW}On1jyk z1>DmTI&ASbS2*zb@P-2TY9j2v9FHTesm^M{`3JO<*m+afPp3?wqXWR3TeIVT;4Z3C zIfB6X)ogdad7RY5oyinM#GUa8;vULOVGUxBun>jWQK2WfZAimv!~KhAOmtEM_GCqJ zXtd*$RUxU6txwWRJ9aZ;4}0)|dT4f>@+E^7Ba_qo)mqw97K;1%yY7FHQBLr?M?FWo z!6j*(j`C+T{wg{k_0joo=*VA$o=@?2wv@DdUXsuAL=`m{jey^vapqE)fR?$FPdvN^k2z)N6w$GE%kjWkj?s8NrL>$@mGfo1FHl%a;Ie;rvj1mPG!~}+=VTv^K4ATan)v}- z^d|#VPc9VTpJ&;*W_<8<yuvEzCyo_?GaV~*<=HdRT+=uCZSZfiOMwt10w zVXh24{kDpyEoDLa+r{`!0=0q~(wGrsYY|83nf=_S_6(52yFV|LsrbibK3wmy!K0To zH~?bA`Hq_#;e?Akz5wVNIH<#t4{-|DhTE2Wo|?giUTJ^!^3K+h=@u^sS`Wi(JyVxy zMFs4F83V-+HM3@yJ`~ro1Pg0LJo_w%T@S|Q5vXGbG>ET4C6irRyLH(&WNBdU>BlOc zqV@H?|2fr9hj)$ss=iN;uH+8B(8(!nj_m|I#b!ZjKbhjlROr^F?Gp9DypH+v!~?y5 zvzS1)*u3f>P>^u+us2hx8-end3l~|6F8YyLJB3QLlp0SWsQA%toGcqGgFn)=rC%0YX{GWUn1BD@X3<``4 z0A-A*V*Y}%@=nC)#IPYFs`Lt_$>_1;L?U9?=->-e;uZ&Sf76Xg^M)fodDoU%rLk5* z#Tq5dO*KN>eS8^ZZMkLJWH=C|nw~^BzmcBjef;$F$bL6jZ0BRZQI~dxAP+g9?8>nO zV>U}LWzaLRQ=!ol_1Q&)Ozx(Ib>3{M5bAakP25ev8+ygsm0EUpu`VHSG*; z%hWGb5K|^Xw$drF5gap{6ge3~diUz6k}Hf(V`#I#am3K5|4mk`a^p!k?q|Q^G^j@f z-z+Vh3dU7;50Cy9c2HME{UAWbsJbXIT2np;8md+2jk&(#tYtP<_~j6>wvasikdDiC zv8+=DMnBw&%tfX{j0Eew52HbOnXU&UjXc}Dsj280ZM3ook>UDOlZir_6w_N2X_aYnss|O&j zd+wU80u)yxk#7ub5qKak?_9CgR7a=mYvlD%bU}LPp5;;NN}Z+?<6|!T4)G^WmR2xf zaHvM>y_C!;t4o&kDU6tN0q-wV%oqRzuSi?Ha)l)eaDofWV1*K6PCKV7EAPY#+=FFU zY%W420lm~1=2m_`GWNhA`8mL>Hj(KALn=j|m*fB>rK*!+A`lCphdX5rD4AV7jGUN^ z5)W8@DY43h07s#BIJ1!U+J`s;$_htnEoBVU;gg; zT!Ihi^AljjgQ~-**)T54tn?qNe|V;9OL2->_x154|A`UHAiv`y-+FkqAG+pI^?wZr zyf5{yuJ`Zn5)5sS;SKa13S+;15S!&7@soH-&!2UF|=gtO0@07u|q0c*b`* zuJbkw$Pf(%iL#O#S`pZ?BRFR@X~BSc>_&_wc6F-e|9KQ%!C^?9(Rb-p!9p0oEeAj* z(q)VWNq6q!Hly=b^(Ph`b4RjvLCeajnI$1n?Oi>EMk*>4>o61cGpepS9E5Nw~;_ zEUhlW-n<97<$id}lV3F-&_yt&BNsxbJe)}o!X|>}fI(hc9(}CzwrYSdPGVZosW%*J5L#bPQ_YNcolv9*d4H}PrV+J)?Yz`(-@pUQr(BQ8~b1F&12Ai<`(lFW* zTTUnEg>V?W*0*2yL)f-EVVPKRR*oR1rh?3tPN9Z1!?jVom5O>fV>tOtgCA0ND;FPg z?1>x9B1K1T7jP5^l$Sdkhs7hCJKLNF)@3&mHHDtOXsCvHvn6W072X9|3w%%Bm$ob# z4c(is1PK&R<|cJ@(s_TwLS|YUq#2~@k*xR0*lSBKoY|B1Lztj%t^bOr=JX-t_gxI&fP>RVLCTmgQ7nX>B4@bjk~k(=Fz^yLM|~tJXJm1>y0zrk zgm9r{96ZBMgGWPJE~SDzqr;(!^wTK-5cH&Lg^KH6y!QR{xVd>xO4=5(tQAB6C!yh`EheB# z#b2dKHWiwDu1zzDam{|2uz|5h8OJIjpxfqt)!C;$O<<@nFh{^p&10p)Q&2nO<7f*q zO=qgT=kr!&x_R0-alHx3YI-0hgjq^g?xBU~wX-Gv^A`KX9zPv#n>`UvMiy&mM&&Lw zP{kU-u)ySj6H=uKjgeT>zHO^21_cRZb9Yj-W7Ip$>`{Z^+IwJ`r?vE!d0~L8TodMo zx4Z|NNeP<~zIiwi^Qbe`o$@C7Nil-Aq;p&1KP;#VQ~{xaZ&Ihzav)3Tmm$g%>Qop2 z6Tv323b_TY*AV(JLs{`z@>YeMCy1?oGWrEElbQ1ZFTq-WL_mJsR7M2x?5ZHXj)}0Z7`{&Z&tR63HGKY#a2T{`t zwgFGX0XI&QQ*lCU+}Kq?oB&vG`y5q+A1Belni0nny%Ic|m_r76Jxk4TJY8HMptoIy z-1D*wn6(l^59DbM+A=7wpcP-j{=3LL#xMy~a;-i9AYgpDq*GP`=uUk?d0sbYRmp8x zBRWThGb2d9@EPUHbwQy&8m|Nk5mABg!o|=U1BzK+ZR|bqkCr$C?Q%8yVi58vZO&Hc zqT3KdkS3y26?c(?N3P}h&#s^~>!N4rsR$3h_xYOv^e0ktg4q@tUD$Ir|qzOBDGNz#`ccq9!hI@qC z!Vu*d|2Z{#d8D2@ZVy$CoPl?pW&1R3#^6P`)Jr?Oqu?c@fsIR!uoUxnEHTQ(7p;wt zQYi5kPdD+a1CC9p_R_A&vpUXH!FkkIxDTEzYBdVsu_=negV;%b!CNfd1Z5j-dnm2GyrBy_fl#XO=jTc8zYQcN`~LQS;nA$jXBg`**Q* zhOz7Xw$J7k?zEewq}Fh*y;XY1RZ)~qNHL2v@wZjV{3`A!2>FUS2NO@X19jYz^4)Od zALCfo*Il(pIw!q?BnNM(N1m3%Ti|HpE!RD0u$XQdd&gNp2o=&&#ZV9tZ;ZgTM~hG-|hS@ z-|yjXz?zDHihq~>{}Eh`f&E|gb^nOd_y0$nZlZ>TmOJ}jQzXgh&vK8IxZ^0c3GI(K zokSty)MfoLo4=n%^GIR5LUk}cqxzpRY3}Wc8=CZ=$+AUNIpn8kGG|>P%ufbMIR%y$N+m)i295Kz@A`ez5CXy>ECDI10))2;#l z2iFcXv611~0Yfys2S3!kX%Z~BBCJ>r4Y_)5Px2Cwo~;L9Jpy2BNK#B~`Pvym3`)8{ z(LvVKso^$Co%kN1Bj(w1i*HDvJ{&SPoGkyw6d1xgqsWYyrN;|$Yw}W3)h_j2Ff%E?f zFN>yevB_bx9Nl7v8(lPFE|oNqQAaPYe>MxBx-@xDekoL{yi>#L7jqE^97I~qJy%Af zgGP8UjW5wM7JI@QE}^hs=M|)cd`Q2J&-lnhgbCd{S8|TrA11GOQa}4B-+H0;gT~=+MwTQGrcy{W{;SGDWcsiUG@mRh1Qo7ff6HpU$iMev z;j>wAVR=WjcC--JK+VQrx|EZK(;<5wOabhaOjkjo3ahOc;3Q+qW;fa(Q9>!yNb;KT z6)BWMC?rIOqKxmPg}jJpa_nIoL~gk77Dar=1Z)%H?||@iOiGeyJ2ADB%5Axt64u;9 zK;8f1XLa{IuhDm?cyUIF+sNw2G%KU9Sz-vkt%J0VZaYecla@Nt z{lug2^u1p{#uD+7{;;N}JQ=i9u12geiOlVhVxBx}vh`*nHt>DFx^E>0ZKx{yX10&% zXLIdJg20_6YY(Up;c!6t>tlih?Z*Zke33sP!Gd{A`MLZ&jE@y{t(~86yn{iL5&?+ zzr*Sl@!&FEuyuOSakT!j-yThzUzc)(%F|cYWE<+q%w)SV8%mJ!%s)%}_H0#IGl;qyPBNgsAx~6Q643_wBlixnJ@`%^AmUDAv>5J+noJ za>?gBZh|c}SJH_Bw>}C_A|2I7qBA<4_zDYSNgb4Qb{>hA$syvq5GQ7l%&7gr=->HFkZLFj0JlP^2gpr{qr|U9o~ahWG-VCC|-9G3Tzy zBuCKJ%a1F=`+U`Jd>>tmD6zJr*N8p2DqF%+!MxKNMZtTxJgPp>a@Xww`F9D4t^epf zOZRQLWP%38DLVP1OL%-~7FNCJvL;?p-AUExLu_J4DRx$v6q@24;SWAwHzbk!`i1ql zt}p4@N~Vgmd$MsRjxW+*Xz+xyfq|0*i7+-@vy<)M({sZ@^A|s91};QE5Y}4L6p76r zS60U5`qdvjtFfCP(fwFKm`13~E+8mwEbjA}jopHTI)`7;WjPINiL#%stgc+|c~t}G z_Sd|BAozlw-{Pwew~h&WjCn!4K<)`DTbnr#4jUYl=>F{82leC7Fxcz@0c})&<`nyN z7mb?Abd3q5MY3@)S7kOubPETSE9GzQnI!4LNm;nDO6cFbE85>Lr@pKcyyO2aWdAc% z7X#D32#yvtewIF3{u|YGR5P*%ZT4W`mj+muQRvE#>antFg!*iA_s&r$7N#_B-8_tz z)f2m@5@Ez6lU1J2?1g0(`!ch$uwwVf_ z!6^_m{PU*iV_#T;rpPFH4jwk9e~%5;&@S74=+}_A`1rZFWfTHbccQMS#pBy_b2sc? z@sr%z3r-4s`cto=%2Z9nW6RTP)k~c@4%qL*%W}lS59=PFEtv1sME1BFN*G@lt4eyE z6zFffZhKZtMefzIOjv&(;R}3n-vr}@- zFzDp$^(%mP19yKUM6cXnjWe${l{o$UPk@yb{$tsJ4;E+URchqzL{h7N%d`kE^Tukx z-j@^hZh%UoUdBh>bTnuZuW*<)q;V6j7FPBu+6RL0Xaa?>)LOb}krFmge#PlLrsv zqgr}Sy=gdwMDgNDBpW^;mUg_i`iQC|L#~=zLC$v)d`MU#Ms=}~FU@}JKUuy6SxIGh zmQ`M`9v^09D~zK`O{<6w-~Yjy=t{$(N9(MmdTk@OT01J7LOb6xCJZ9b(92IZH=)RR zkG%OJz&v@%9fdt@k=+tXi5`&UJpfPLL8Bm~IIJAsy02bg{z*fpFv%;9+8~Yyn(i6T z9<$Lp4{us0*3d^)B$O~<#;B^j4;?tq+`34+L!SQF_(!2C@1rH&rJD7iWk%7JgruXI zK6WA8$@g18Jd2h>uGHYqBuQBw3<=v9$KM~P&VvdN^Uv2mcgWwfJqW;KDFQCW%#8xl z1eM%+ZNaMnzrTPK*&|TF@5}AZ3(4&xstynVyVqc^5_R~Ds{33y5z>j_`D^5Q4fu8S zRQcry)LsT2`r>&TI@Mv3N3SMM1>Cz@PMaVaR8hclBUfUY@yw~NU6UY2a>(YKYd?HV zKhXn~hKr=A2oCx;D;lew2v0zaUzNJDG9p)G>R;i1r$|-H9HYD4*|5t3*uoRWxji9v z`Wf3@7&K4(^lHk9pa4wW$gmXDw_Ur`zn>XEl?WSe3-W853*{&)k+={?7{Jjz1JkX- zsWCB_>&SA*Xv_97Ed?w!lOSX4l|k`S%*ttlgEynQKbJl}a3x(3$*H`x>#5)wK~+^R z4;3_N2P#a&Mrt5C);1}I9TRiM^n z$o!Rwj5UNPV=A6>DiH3OX@W@)J3%3Yn|ABmJ>17sS#L@ZKRnS|J}ifp4+;0wv?Hl6 zdjHI}Ew-9`{c?tf+PaT&mSf|vgJqk|7@u8X4hV}LMvvd~8|(8ffP(4=XJ zvw?o%F^O**wuUrLpwYJ_U6%TQsgEl$yyhWgd3K;oyO|ZOeg-n0sXV;V=&92XiGd1n z*b=s6X*Vk!w{R`(lC)A~ZO&2d(P4%JKaxH;Q;S7_!;aycMX9IXnQN44-a(BY)e5ip zw{S}yK?3?Fj@oeT2kSS~^(N!;TPNu8y89kWNF*T)=-6o17?dx(Q_`B6g9u{t`1#&0 zY^v4wu?{O;OwKG$s=@j^`zX&w8gdlGlR0k|>O@hSP62c*s0BC?VVZ$?etFriFp(>aAOyC`=(o*&G_g`r zhoJHuQ>~VN!T@v@4-brs=@h! z_O#Ey%^Tfm$ZXB4&3%rXjZX}q=biBY_VxukMFT9Zt zRw&~Kw308Ca8uyD-2Ka6?PSS;mut_7fy?z@C9aS*zeyXxSi)eNaTC(lW5gRne| z-w#q=hM~edJw=-)@|Rf81X9CwAu2z`%)!nixoRqH_&0nm+bp?S9;wFfrd4mQoY5p* z7BTk|!LamM;Ho4@w4b)bEqdx-emw)rMjP-5IHz3P2dbu-&tAdlN3=SAd_Gv3HC<%U z?|v#?oy*3KM{qA@n~x0)1~h2SwrB)gRe9P-qAwG<#NUxo)$lKoM_)8A)oM5?r1Y3DnyyHEN=#`=ZwL{36WhboBM2c zcPbUbb{08D)=k0qrO|plNM7?J+$-~==uQU6Z!sLGABq$5-ajwj6UJIgZyk*%R!yC( zcc`I%xv5J~Lql=Q4C;p4*b`%bP%jB+Q5$lBDNGHt^tz^X441Kop_mkb)(q~b4a00% zx5-Bi!6++gRH-peiYQjQNqy;+x0_lWSOK>Km6*>I^lJxJh=Am;Y;wvepH8$zq4-mg z$|28ggJQ@8)5#w3#1^uGjg-;Y=8O3@kVi8;VvWTlw5+f&K@y%6H9jW<`P4e+-zewM z?oZMOLNTL}zbtZzerVQvmjL63jx6!yTMQ|;pkE}XUE6Cu=ULAEelEZft{lj4k8_;o zCAwD5moK45;kx0-lpBOt=Ie@x&Y!_XbjkzOuy?2M(xfT+g!G(Q&8vE0;+0d#X&q<^ z7-q_5s7Ir>say+GAQ0!>^qGWG;Wwn0L&Lj`Swt7BRBcJtmP_|X4g2odfZr{6JUN!i zGJ%+gr2>zde8Aek$;y?cqnLKmHj(KMN{@h_WkLvlnQEWcBhoyW806K+6orkJbzSKc z^+UDkE6~NtfsSSXBdv?p01X85(e5>RGk`iDVm4yST4!~X76pcCdNc-?zv=IM--wZ; z#s>$Rsa=;mnp_7!wD<4Q6&L;jxIx~#@BnMW?I}uu?A?~=2sSuj3tqVr59Jxn7*qrI zOG#+}n?%Z}yxcdddKrWQ`lU4cK71cCgD6hWYl2AuARGYLJ*1)DJl*Ge5Gqs0S#d-s z>+!MP7lR=WeDFk%P6J_X=}W?ERp6sYRLL;Kr3C$Pav)eU7FeC@U1H5NF>XxXC_p;# zl#*7QS!NjO8@=~BK_p=0Ry3?FT^K``J4;ijTKmR^tnOR2JINcT3ZKKA;`Pc1_q#q3Qr_*=t1zA zb|P$Qi?hMmCxSUd=F0gxl~)T8DO-_rz*ms?o0~SF`tArk`cX|>Ar_gc2AHk(%-CMfwYM64KmS%9qD`L z33fEei3gTGyjsnX)=}p!&%;!?mG-hHNw>SO84EW`bNaoOu0??^z!`c{rT z%Y)svV}J#=;ETL(HUfKj+*g2!c4qD^sCJWbJeKYIe8l}i5Jr>KR!om! zjrtg#pa?^(JpybqZQ+d}iZQeoqlyE;?ScvMc^GX~O?UHtpGnx2m(|75{^llZLAPPl zq`HPB7HoN82P}#aV6r9CHd>cscTF(i3__5XASw0Z4MoFdGE66cP21In5}ULFBG!|0 zKVnN_Jcx`gnukIoC!h1#1KNgi-T(I1)J9>etdyfVs&6-W?pHKpD{ z*Z7+efR$E8_c-0oJ^QCj={D!VNe_RPjsM$Cj3u<%#InD>VXLM_nP1syb!=Jn^Ovf# zVt1=f5qFs2B<0|3&`II?p1h_rRS+Z#)12n1;@@C>g47>)M0DP7k!0rb&_^UPxDW=} za5I*0@AeO0iN8=X3~%e%%+^MmArD7O)-H5QQHFALukaP4;2Q2qULC0884)2P+Z7Sv z(3XVhRrbrnGsZ<~4S&wX8SyR--ylS;ye0djGKa}p`j_PDYgd91dtO9u4ED;ZL8&zP zrzIrG(sM3-s2+xL>%DYyRj6qB&pzB81B-wYns{f-*sx>89QV)$8! zb6u_(E72MCA|!nU>7HfCs(w#*JHq#yb4ZD~H^irNYfHCUX+D^+bic!&Ne}WAlQAfs zt3)Z+dTYhzz#1&Bq+tU}_8OlB>`wHqA^R7F712i_%mGFWQY0qn0*_2l%H4bVIh;r7 zf=pE9_`Kq=?YWTuyUWFYhO%P&*UHQ0|N3G$s$r$=$%O-C1U^VEwB?7bGdhgtn9#a= zr;sRQ9k;38!Vm5KSj^Kd{o{OFv63{d)xj#%-B zM6a+#;W8zbYrTZ0{rb32pG||P$y5q_3hBMp_MvA8HslN3 ziy(PAGJb0f9E~OYcCf0j8{XTv~s zgXJFYMFR6qOe8OWMA{PjcxQ(rM<1>e_xNN*t0N)tY4!49zV*+&jUMAMq@=1bWT_8 zS8*YRC>^c1dUcIdO1~e7%o=C;y*)ytT6N|eY@9CGJ$u>P?BrwZe?+CJq>Y#y;{rvudiL^@_0>lvu~T|YDNVngpWUMZ^8;P2k4%aI6XnfGAV#ZnQLqLOOfY@X zI5=l1lR9R~zWjqwF9B&YJ&TfnxfrD91QtP3F`nJHx&pGJ0QF8|KUWR2=n6j*1&8TN z7Iv8OM)wPrSe35A?5@^jyG)XT*rJ0~_VUpM@O<;M=0!+a;Ry@9c8vE3aDG+D7N2;# z6(3?G^)g9GWiU0MnixK;RuF-pxoSeXF(KFzzcdqJ?Rn%fZ)dOaBdqLg|6fCf3VTKZ z=Joz-ARZ~WKd8#ziU66dWU2>@QOm&IirNQdvST=9GC;T$`K?eKI>W|G)&@}Kz337m zZ+yfo{XW$L{*&vl*#R;O4tJof`5~x?)a{Lr zu~%c|rLj(Zkf@Gy+Kyg`fDmJWR$1gYXdJ?CTJXvz0t+N=g1?KwrVaC)ezxK&oG0?Q z%_m9!+SrYJ)_~D#E%d6Zi9)!m9FHUAhWCn5GNKlf6tXHJDB~hy%e4$mttW=HwPoDM zc~hZB-YhNxg&pz61AP-5ItheaW>P-O1LYm6;sY4jKlu1AZYMx^8Z5ZTw^p%-tDWC25EePq9?pa%BofO%u+9+%LDKrhaW&1olGg2KwI#Xj2>uf zEy}Xw^h-YM%(c#8^i5mGlZ^_+G3PsvJ+aeQe=T!V7W1x2Lcj$OmQ^PZK3_iqP0n3F zpZ!Y6uQRM6{k4wo#<_rhZDRymK&H{BBi*L{?zFkw^OWV$!$b2eYel;kOn9ZIxAEm3EF~0dn4jT3^B2n>5nR3fPTy)J*|o`PZWgbFyeZ*48F6dEL@y{5)N?n!~$h zx~C)FuYm_zPyt;^9=^e{DSjDSD52^`i?hW>bJcU)jb|ZE;mIXr?t51OA>*>=`)I^O zu#*c%^Vc$)MP+t6!TUcj@AeoR>Ec#OD9TI*zkca{NX(u-7r5ZgHJ2IhOJ6HJaMP|X zPb#fXWE{3;e4a{X!cqDNd=Wyn&QHIxRLp5&cAG)YyYdfTzD=r7#mbA*JJ-akl`X?t zcW4(8Q6185Ra2(Obm%v7em~9oetgi&{kz=!&k$4W931}}F}3)=a??ajnVOcbKNKJh z&>`cW;7qnU{-5AfC={~h(OF=Ez_eJ6A6e6>bht0_7a7N6hQ<14DnI2N4~}v8=w$!C zTl@F`#QbL}pFD5m0HB(yA_yL0t3Lj%+dx{`$e_VAvU^x_rwwbu;p&hKzGD9Cc;Ek@ zp`7jEQ=)HQx4N4p(IX|qReW&cB|eL0Tg@6baLb{#2jOIBJ|V z5W2yQRW3WzDk5KxKF~P|py!XW^vFzDPBo8|TNbJ&N(fG_^>ljee3dmI?J_7BvQW|= z8Y1Y6}u0L0c}5T^k*CwNZW zAQhoT+8l^rcGHrxx}&z)T>#Zal*l_RYQgBiS1WgiKG<*rVh9+U(9Z7UOCpXT9q`+& z^^lCplCM={aQ5oP7a|`L3r1Fy@)cmniZXw&z-#r_CaWUQ!4ECQ8E#EGd-$i&P%mG@_6bj0*~v zBxPVY6m6NpMDlRnQ77UUgP-DN1GRp96}Sfn(SSN{WTo0j1dpa_c9(;%pQ~u{`FARV zX^)mbpk-|G4nc=|fn{+4wp74;pq8c;(^`MI^FRWaPtls98qLYg+njE7W+ztFpzwXu z1CwV=3s+pxUx11W)=5ZdFx2;i7G<^wZjBxxN5#-}5OFV4_Vo|Qx9E% zVXKH>6?|A;!>(Wf<49Yqq9S$;xb)g!E$DjEXN?uI`waP-^`RctL6~!4WPrDE z5SJ=|b@JV6b<~ieb|tG^^2L;dBnqMwa8l(@v{om)RqLu9f$5ny2%4R~mf%RD zyA`i29^t84Vsw+twY7SXRj4JkL#$jhHOe#$zdX4ko=FHyy^u2pU>JRL70-GDou<*} zW8>@2wpO%;3-|mxEO^8-IFs2rQAw7@IH`I^tny1F6m7%1C1}X)JL>>lybel7e*I3g zkv2#$A}xbSoG)r8;kqBDRb?qrntIePgOh`t>ST-tcWV_UpsiycQ7g%Q&I(r_FLR?+ zWMKaLw}JY%6}3rZf=4qZ1@cVwal03qbr8Bf-HQE;ikrXaPmiaZ;x{8+X>1&rBg2SwFuL zWOm`9NBTJUanFpj=zg`X)G6pCfjLb7hp}_)5`@c^bgI&}QEA(%v~AnAtxDUrZQHhO z+nVg@xwCGs^?v9-ablmnBjRa5Fbcu}0e_R&GI-t@m)9WCJ0)t7ejJnwm+tlV5^nSHx{EP*9a~YRc4lls zd3*I!R6r~h$KQigL5gKq0pfa9LeE7&tkimR8bU;Y&kdvBjS0CrsI^oy8jvUz6mOE5 zGgU-=CdFxcm}`D=9^g1F-MhQ{hk`4{NSY?8K!;$GU?u(Ft(RsQXNbFjndK!j@0+*> zx;4raKN%X*JHKU2Kp4ePtTN1!g2PyzKrZ(ve_0uKvZ_;pF63P(UZW(}s)mz5ux(J{ zR*qPMy^Woq_P!Dho4`s^ytt`n&mk$b9c}?|E4Y8G$*V!L@m(j|rdRrEn%iaFZshr3 zw0_C!z{&Op1zM4@DbQvrQY6{V+9D8U?fq3C1$w4%q^hWbvU=6-F3l^YQ01C+O#T6+EEu`~1mZw819C!rxeTDpv^-Gf5O;h)C2B*UOLP|o?{B{emJ`bN$+#-SaieJLvhy8vc{SqPjF zG2yD`+EB`D;%X=ElI8Hb4xRsb#fSmX2d5qv)fNBRV7VtxzmFMH|Ilh#$r{%xh5Cz2 zC}=~Rz$Z-5c`0ZimaEf*Gkgn=pl&RjTFRBE<>(ezNwo}9dNp{c994|MV&4%IPVDL_ zng(Jq>XoZ02;tRq*k}hq9Ii~R7SvO>Qkg5#dR^L!xjd#EJTo?;u%(cra($zE^Uxci zh&~r~s(;3WpAhW(uDOGq5COfB5($l{g9*bCAu1ueJ*_=?D8#N=PcE)+Es%FhKu!S{ z{tasdUj=Y#hQDp2Wiq%Z-WSkl1M#=(>+`#C(sX(=QA0evNjyf8S9=ZA$f)-3BeoFd zUwM0!IC^u#p{FpdQWmA6p{q6=C<1uBSte6k(N>h_wgg~`d20koZB9)rw(?+^?9_It z$<4Qvfaf~=SX65aPwN!p<|V~=+27`YN1B%eG<3yH0B1c z*WNSHPc4t!K(6U1aUfsC}s{6y{wP31x}ubCz;%w`$ktQ`!$yG~Kja`rc32ilkR%C3Gs@ zf7j*lBy>~bHHrl{v1JTh8k;l$1;`<9I(s8jqY^gVq)cpl6*`}+XEsmb#hF4#zXE*w zXBDTFjc(NRQ?l^C!>Ye6Y}!0N*$YbYRNKL7cZd?t-eZ zm2bJ}f;|8MEFB0;%T=Z0$Z1$gUAeIEh;@p=oM-2Ct&a~@oq0|DQuXZ3tE{{mX$6Qr zh;YX8VV+!#01ceA_!9v!&s-?CNxJ8l(bBx{#w-n|V8mD&a-X5xQVC8Te*L`7&LG{7 zyQRz|s#J%YWj#y-9uRof+wInOvPI=x*l??q5x)yC*i1N2odOz3kRkO}Y#U`Sz zUm^Y{BnY#+d%N1v{e0B*%u_-i9N5UjQA#hBec~)*n)Ow|t|8lJz>YoFS}A0{rdFR> zcYmA+m+dK$P=T-0-FxcZr-ErCbZPj(aPKgGOe@v6F$L)r6VU}gV9W6K<^t{BuKf>c8*?yd7g@?B~iOfFHq~OGC}y_yV`<}PA-FDj{3}~ zT2|cly&k;(=P)gL{W`mVh`dl<-h3x{ zKY4fhV=k>)rOO`7sxWZ<7zyDP{6OYpPPA|O`}4&m9~{I@zfp|rMmNXvu!>58 zH+OfPIO$CKQ9(t_9P60cZiJOAq?yxwrB$2m_&SKb=a2$kbP%gq)XDazY|VxP zH5Dlpe-*wQMMe|yR^)D0rX`oh(Ky)zrBjWkG);HvEAf#mD64*&pCd2eY2e|d-2zML zfGHd-VxW+dWx|uTI~|EC@A}Z4Qq3f1F2Ye!C+^*Sin{wRHNtDZ*0TWTu~-7=f?sUS zhy$}DG+GAUkY6>tWGM);Z0P>0Irv+rw7NWj%2T>}yYkOsl6>-X zn)-;`)+N&X9)L9|feR9=!a_7?gGbMllrz;ejs7Q7K-a9#2fx%Ak*Epvuz(BiK9{5>;oQ5aSb0EXpy!=w020%^_`Fn z78aCW9keDt{j%3*80#2rH^mkSuWWTOGO6IWpTXgW6>@z~5{ow=5m`)GYZuA-dt9d` zYkm}eCLQJ$CUfA)o7lzF$q?5+F#)zkx<$NXa7l2#{@@*H&cjF?BhFT6UId6M7!Ob( zi+jw`9oqPKt@oZMp%7vF(8hWe+&#S!LkVArx0 z2FZz?7DEC(1vVmC3s?Ns%Eh1PH*%>vxzot~q8o zAiXnigtIHFzggzrId$UdWU$rW><~0~+OtS{@9tRUNa8UJ`HQNs(^kfGjCEw`YbRWg z@e(u!wi;CN849iW30z0S*^OoccDeVhHfGl{b~Uw%_WCbv1*FKmB0&kxr6&1Q4!E?Y zXE>W=Ca_!$X{#Z1u*|UPmBvN6P4v*hAgR&=3layao}i!}T?>{plWy=Gc+AG(*7`^puI5Dwq{aS zJmuz)H&WY9t?XqSvWyxt1}I-kaW2=2y}6g8E%%%zv(CYy?aU}w05}uhOio(w(lWKd z38={KdIqW1zTiP1%!hJ$SJymOa+yQ$&gN3CX{+~jyJgG`j_vgf0XG2voY*2{irlX9 zmWl1rD+)Sy;GB5iMw7)mumi=Gg<+p406riJ7zuuziBj0RQOXD|$}1w|U;8-7MG)!a zh`^|YE(C@8xd^SI`4VrPB*@iXytD|DY6_ya>U=XnpIplC$+&(<#d3gzzzQd&J)ppp z_wF|ZS<^4#_kg4OT4PFjmgH6v+soVw?JsKqW7*@9g!{I1Y*m&{6S!HN9DpY57D&pJ zPsDX;IWyq=%-PTDp%=hJjg_>c1y5@1YdB50E_Vm3dbbEn7jok9s8df)nfg^@k5T!s z;R?(mc&Np5#lyWQeJ%i{P-4<(bDe_(8w6y$}FBPVEWbhqP?c80J+xTmZzN=N%1<#rnsglZ3tcwk*bQ`*9 zKo=F>%9NlN%q$m2HznE;dt+x77DYm=*0qF!V%s5{_@$i*!3IhN-(76XkL+uuVj{K* zP1Kx>jbJ9modUUrUEe6Nbaeo}Z6(qKHr#D#o`R#>(U~wi>TdIu7mgF!AQNcQ3w@Is zQD2nWw8yrX_$_3iii3QAC=+^j&Bh>P;aHQ7thGYp*A_YurPs$M;B8Q?7yJy~Gw5Yj zt1D~9tk--@BgGMDfdulNh+^V5zc3SFOTunsBh7X0yMSXMWco}oc>xrzkk0)OIwjdx zbZ{RvH{}upZfE@ktVlY+!1IqyxD8n3MO!Li+a4lJ*bG=pL|my>|FHkHS&BQl!2j9k zfL(OIB+MEJ6&xGcs6=bmc;s6unlQW7CXF{Eb>GJc(-GV9Z8F(?!foWc`fe1MVT;;N ze3Or2aPGCo_sJ1``rLbZ~XL=jL|Jh!t=UZuOp zaM{+rCrgq-k#(G1N2Y3i&bw_NVOG(|z#r7f`*_Sm2QgSJ3iRcVbviEOA8WGB-W`7g zl&JcStwBki%T=A>HT*?Q(8aM(`Qy(8U5nh~b8G8!=pwrj&G>eZEL&)H*eqLrUj6-o zB}AV3Pkk!P|D8#nj`=?(oJsY`pCsJBKkstnv2VbjKc9D+ne`?IO7|3^c zaa5yGX9lsMRccUN(kP;@un$qU7lsqS7a6!M=q(|XJ=>QMJkP!J>cP+A{&=z&kp1Jg(WC$%0KWmsUm-o&zowEKJ$Y|3!BpXLqNh0p4={qeQ|YDz z?>~;mtATTs(PKxW!p*ZPYB$`-s$tT`>OWpFJ{7u(PkFmDQ24KOKuO>)ZfsEWiY~1L4}Ee(_BP|I_h?q) zh$=Vye|J$^I$xe;awRY^X=r4xu&ZJMPjjN~l(y*F^LmLXV`LtmwZEPhE-z8=r%_@b zjqA`U(T%CnGDZg-%C6A-o;BOh$_GzYig6+Q7I)4__LgX8E+0y+HP*!XWMYkmp)?12 z+RSk*=rjBsgC_CZM|SIffc1OVJ^0-%`O=Xu7Bj%!P$-_24){IqlxU)yi@6?UuH@b_ zx^^lIGj7VDl~lu3Z82-kDN490o94+4$E;7U?e5z9WAnzvk-RJF`9t%!{a$ry_Hk<} zFLJ7UPmqFgLoIe0Re2n8Ts(}5KLfV1WIt9PoHRyH9JfCt_Plt^bM?ChGhBg#QX5+b`)?cSj!+uF5 z_2emo-1`ngLU^eoLFm{zby?0OVY0FXFpEbl-0>M{KTucQicse2R7)OEy{QrD+-IQ> zL^GNT8+VmZm5a;u2tD;6UAqJ9fw;c&q>PdxI}+*M*|ygewT~9s_A37T%v<3>ve_F| zCZNeBt0qP26HNAp^m2V!r>Uo$SEox-!rU_g1)FwyznthHZza8EJf=L$Q+LBhj|v^lC3-nTyDbP_=;cUve0oVGc(9q{tl zi2rT-ELy}K$r#us)i7z%^DZQEo*4bmbrPYE^s*zGLK1!MB6Ie}vTq2rz}YkmodVV6 zbXo?WfNugdqwJ`+3G)c)r;I)^fiLX>IxBQrtRGX9BDs^Ij4q+d0(?Bb3OlTnmqEUI z#owRFVT*!-Bs{3bw;;DNdD-b0UFbMEbYB%HQ5}(-l`|WgKN8zBOlW{2vV}K0)XY$u zf7ZcYpnhMVZJ_+?Oh%Ji z<*rnf^u1$VrqGz32_|5|b@)U?D6LfE9b~$oNRk8hzKLraV^Y@8(g1_O16)LPzH8U? zyhxd*iYYLHIx|{fD7lY9%1*S2zbe+jQ{8~wT^P9$l0{Pi^qwM1?q_48bhvWSRaus? zi}xT>Ru&z^nGTRr1%7dPWxEE}oTGmhUr&y*6il+>CPB!(PUee6Vz!@QIG<8A&L|6% z$N;N??)Lc9>kgbs*igi5S9QBe?vnAm3WJi%Uh-Nq1CqhQLVdiuwh=HFUmGHZvaZoo z*ix&9)~Aa^BT?+AKq&33WP!fNtLfYV1r|p<}!fKziNvk(4e% z+vd~4<6D4vUUA^Thp2HYtj+J~2W|s6Ixm@=w5+r`1-diuP;eqSW5spHbK9ast2p1= zB*r+83}wlJ49%%mU{rDgKtw%?5sOpoA%_)3CY6rujK1~S(>BJea9;I{5U9c;)DcCK za&)%)vH|nNSQV!Ai{zXZQR82BrRbxU*U9#}vq#|#J zqdngm%75%**6N$3eighr+&D`)htex<9h<$suqSn+;)q(VMiYMs8-=q}0I-@^_H!GF zx~Zyb{T9v8J{XU@XVfKmPO%Hixihn@%d)76a&TDSdBB{ye0=kYXZgjR6pdRv3K{j6 z_4MH?p+&}_j~QpdiO-@?DbA#=XwCUBZU6-hrOCP}FH>IYs}g|TzI>RvKG8fxqh&A@ z?o61lVz4-Plw?1+$P0JNq}=%VO3`xS#C7nEQa`h3IWK7#MB@lr7d~rEA6?2u7vLF)XKH{spx$S>yj(#R{B}Gor~jM`TgSSHRKxrA{06MAGRed|COJfo{jB4 zPWM0b#vexW&n%(x0w;(<9vA1^iw)TT_0aUMOTduZ!yNa8_S>_>XdE?fos@INs(y^! zh3a1VhhXXZ2A|0z97l9!vMK*XRQ5wJ*yl%M+tp_w?zkDJc&-d7-}tky%#hR~zvzQo03d9qMRdpOaLIS`s0427(at27*p( zc&J)ruhk~67Sbb6hWF^)-gOoJM3b~p0|J7I6cXuf$f0MhfJ{roCEH|q&+AGKg;^Yo z3PS|++5;qAPbKO~**|$;N->G;_{V2Ppu*H`!_SfIP7$vM6718l;+}v(|;y$)mUaU-l<3z&W%BBw(qF$Z?q zb!dM@qY#Udhf8vSJ3zu;z$lV zpuRL;lP`p4NVUsBjvo+PeRFICde=&!ve1u86H&nLv%{Cl^f^Y(A~W=i2#R3SXkGXj zNi;FCe~kaxAW16)!qoF2Iv!PUTkZu+j!zxEeA0!L(U%ojCE}8-r5>Y(3fz;DY4W-0 z0Dg6FcJ#EbpH~{Vlt&n?YOM=!dd6^oXjgGDzB7dQ=r3}Kn)OraEN~opuVUCJ+nt0s zOxTDbTD|VM5e!eRlxLi=qd{NZc*eS=0F}d={`SmX`~<>PnQlXGOu#4giJC$p6@(&Q zmlJiXLYaPbX&4@9N_{`p$2}r|>Sg@GoQi2o)=RkmAq_=ie zy9-gNS1xKbrc$+0|9UMWXF}iR>bRP?OKN>@sbH)sQtw2~WSbLYsEzD`8mg(1?`?hs z%R%fnm5f7UbCCrv9#WONNK-mV>?eg-j*wCAEop2J69T z9G%aoo^-5ZM~uS9XeXj<&R+fYT-)J{cKIPmrLg{K5!EP+L|BKUMeJ;lrVRnkOhT3( zH8S1E%ma(XVkp9u!9cyMA)f$*Ik0?Us)Rg7Ak}%PJF0`FPzV@)4CIeFGLPGyLtuUT zPHi!D8CCFLx6p8!aX}RCu3G5prGHzYx;!=c;uBLZPMMWRenvjbiVgdmd?T|-2M=D% z-h50T$|N60S#Kt*mFlF+#)h3BW7Pa@jIu@)-9(tEh4e;;ddg$hj72Mw782+>t*O; zt(zkxhUR)~rknVn>*hX7!^qJ#sOG*E4P^or!Ft2GUp#SvzRmBf>!zM5M&Ik3?HHaS zHF?mv7+KPu#W`(m_g;Dy zIj@(PG1-MyD@qMh6Tg6Ve_rb%YE8ak?hqdQI_Hlz*s)BQS&x>-<rNU?&8=JTL zySBM1Ib|2z*0IZGbc_XSaN@-tt0vK_-0!S~+eC*~THOjhPaw^E)FaG{1xEkKtyMD} zrN1Pi0&751h3E5v_SFIo_fIxrUJG6iduooAS3D8}ly*V$$ z?P(6XF8S-H9NSQ$i8OWdwj!YCHbR9^-qX`FWwUw8QT;15%4(Q~46kip#qCC|%E$Ow zC%YXkThipG9y{ggb?y?Hd}hP1?xg*AUI(ucw30b*$?&KCj{TJeEp{W?KKa*xdiwl4 zEWiPpa+linH{!+o_H?%kxG*2UkIT;dU>NjHD`{+NP1ie#hZoRC^7-X{JF6NuZ=>6Z zzenMD+xBm!+*a_FMaUHSohUBPl!2LH~HX3eMhw&jR!D%8))jE5Agfou2 z@>Zy?9LDVIcx$_$wso;qc~t%xINL(mI-hKBE7frc*+FsU2G3I&Vfv!zYqfVw4MS|4 zDB0Co{S22IIf+1Q4M`-79?&6-ao_B3$Wp;0I;DdTaAiZHVN2G!VN3Uodu&!AT-K=R zc#Jjg%uov_uQS6Qo@y>d&X&Q&1eJEl{Wvq)s-_@!yRbV6m&9_uwdzGTLN-=J?!nU0IQy+A z?aN=L{I2a9;j|<4$g*g^mT7IWplQIvyKF`%7+a))<{T&gJV>jsMu8Yw9-fb`w7Mii z%3tN1$htu**dv;5)qJ*~5{Z_PDO$Z3J_aNU=_2AGM3Hz321Kmz4+FyRqkc95_?orY>@y}^H1zmG$O!3 z4O#U-ki{HS8W9OmO=x!};ep@iLNi^)Zg0X76+Re}SQ5Q(E-kthbr_(q9kjE8O0D6ZiflnO!62yoQ6?A~VjqL)grUvdYDn zeGZyfUp>N#} zF(p2j=m?NA^0wN0J>NUo6ISryzhWl<1wb8&-$NLWW5*X@EN&iePD`vsjki3H^9~81 zfmZ_{XxTJsV|qY5NKBPk*O<{?=Ibo}_K8Alt=}&RA|}_0eWu|cBzMVbF7DEy-ZuZ3 zx1kc*#nZE`nX(+@CHDI!A&^~%LUb@aT2Equkl5`LxK(FZc| zo>OM8@s|@BN1uM=)f_jLJHW7ZB}%Z%Hh^_%KaaDq61R)Jhl6C3dPZD+AG&@6+!B`O zcSr2*(AAS~Ujrk_QX<-DcpYP%cTnYhuKN|c+?jNL_<^~T+_Zn)> z1D;}!j34LNPx|`PB;?mm`nr-I zJK=`Ik(Z-M8C~YEm-i=q-As&wfGx%I{nB=Kb4f_(qc2A5SkuCZn#A!W?Rw5JD6Pun z)9(1=^nMy#wmiv$foYvtyU|q@rAn=I4Q%`v2Mm7aT4UUL4ZEI=^1}8TPn0`i(7Xs{ ztx06U6qa*qn%e4l#erF1^MLr;EnBdT(zI1#-=V8W`LKQqK4(oIPPvHZnLp~KjgKCB zF0;=gJUmcc>)`_BFyOPSuiA?DcsCdNVxz4LQgz5gQJ0TmrsXKNG7JpYHCfDIo`UqsZW_YuhD$p7EYRf{6^RJ^y4v4G z3$!n=x@#aBav9(3vd=FE9~N$(qw=y?Ltd%TCB;ULAH{Ad{@0*^DlFlZyNJw-kXv3_ z6`geYIkK#VR(CGrHYMmMlCvuR={ahCY4Fp}F@B!nBORb1k$rcoD_8of_p<>F5`s7WucnRT^!eJ>#c3E;`s<^Jr{K-3`R#F&=@uCm}3+9%g- z^-kE%z|)nqJ^(}4#>63Y>gnv9)2gE)@U8fw0whXy0r#A@u>O7RzwX;LAYlmztdK+! zdJV~yK6NWMEBrrn6<9K;Sh`gd9qa%5G z)1!*(FCK+Fj+J{?10P0`!Aj@_`Y4E)Tao0uN(*W=f0OS*i8>Y*E~WQ5hbJRLfFdSW zmMF%gm02N&txO$w9d0Dtw7MZu#x*QwgxFH2Z)!B`2tODF#{qT_Z}h{3Q(__3kt)4f zUr;R-SA{x88)td_F71Gu24PdMV%*QT#!9SgteIJlkoPZ5)?8hBd-TThMWw)0cWWQD zz;G=-IBS@z@LtzX0Lmy{AYq^_X-YK2&Rw{CDsM7yIDsw9&~sjl4cGaJf1mMlI~xr> zJ%Rz*@zTU=Aw%l&pGlmRk^CAwNN>Ojn~)}nA?s)rWTjrE|z!8F5J|54VH-C7rul*OTTD6 zuJveU?yVQ-WhL$47CfPWGPs`2gZ-VHHpS%(QH=BoT03{4O9%H1ynft z8$f1kwh^{dp0=~GnqlD{sBb?jqfm+dlK2UNDDJiMj=~jlRvyA~QLmtya|TgzJs)^K=3W-U436 zob3vb%Se=53O22X9yw|lroGeqsf1~0-a=m&LHhgvJII_>IY>IM_woH#gWRff{@Axc zPi59Xm1?9O3+8xquNoTh>KHxm5P_2v?Av%gmdI!Qd$Z0La0D>~&p!wv>wkqD{@I`Y z$1S!|jXVCJ31RY+5`C@r&xy6CvXoU0g_zQmp%n=yK6?QoWsAha^CJKd5nKNzR@BAX zz8z>kC}wrHcEDzG6h|cQ8JEk?F;<`TE6Ok1_Vda1`>XT)O5{wmyoAu{+QEgOT<~2Q zIen&c+q=`8THV5+p(&7Z$NnX1Tzx}i$T5ZZl$AqqEw#f8V8lb<{?Unj7b6N)NSVg?sYeFHOS|W^3 zO1YH!duWrza&@zn+0BV>rtT@OK?ak8oaAVXbxO>qjR<8|CCTNpm7^OJrc%%z)+NG_ zxdiN1WEXCg#BOc$tAymb9gd5UjX>g(RFF5ts$zvCSjvmEP_(;Q!`f}BWuQ-&j}uV^ zgZHNslLQJ~;w%y4IGKi*Si{Yv@u z=FQ~+DJ<|GY42YPS`sr*GL*4RC5#s7DM$KaVf7RCslQKe-6ATLf=^K*T;k^3uQh8N zDhav1{4G>%$M!9pM+j8u7}<+EMOsukd{Npz9faL2%ZXxydWZRMu??&kg>rP&<6b0aq~`PpE*Q z^w964^=w)Edt3ZtkmR8T)0j_a(m|Cwr({aef|^V9ge8jd3^O_a^Mp837Mx%8vhBd6po1+~!G2Kzn}%n9&L@mwMh(cC-zjIs8XS&I!gr9t$rrW( zN^toT6fgb83udiLR7xd+Ec#>9n$T95*%{;Y=)=64B7YG)h^zR8gHx@!fDwb2AHdQu z$~_}AWMp5vGkj&4a{siU;ad__`)^91yNXD8Kp46|U-H+nVEad)Du?kAGofNemhqVFu_m&;vOS}H62glM!Fx1RQV_|7z?Yv%44|M?%ZRcXrGG^865AN z13fDEd*37+cDoqCB*{3gj^#XFYk0uwfhTQ(GM*M-=%@>s1jdOonR4R4OP#EI$6^^u zsd6&L?T$=)eI73$rl)D%_>J7UpGCJ55Wf^K%@kDWIIUkZ***le<281%9zSf{y)8cWZLvh;RTM(vn7VsN z(iY1TswEES_Fab{OXJ8=eB(CQYpErp0nYGhE8-dm{&>L5C0O3b$2DGtsYieZF`9Fi zq3IbQRvAQpf0A-B=I1C=@7k4$1&{{Dap8h}5@q-P7C)7Bkt={N)6V?j&o&=Dek-&I z1sQko^}Q?u7NFz9d3%8N(}p7gpcl){J}?DR?SG#M1Nm`%zA$-8cmCR_G2pe9lgLkP zK~G0OHXy}E+ztUWbGiX(JIdSzBKMimk%7izG<*m`9Fnc&Eiuj2W@1!KL{afEA&xZI z)u2>Gaf253lV*hIxtPmB^K~ZFiIyc;*(`7#_oo3d+}@*1WyWc{)z-}5N8S!!htr)< zmk1qwS!Oc1Lrt2Q)&Y$ z9PuV-I5}VpV>#{fUiSbq^anR3;kS`zE%HXAX01UNEl%l0o~9n)mw#$v9*B zJ&Fl-dVCgp?+y6v>cTw;UL)!vt7m-l+V_uXIoI0v=1+{EhktNWoCkA7{KufedpEC$p;--PS4zO-mFRzMrPnyg+-+i#DICiA!Nz=ozwbFV3w^!}cv49XPQ zuVRz;F)@BZw?%|ne?UyoX@pKuz7P`DJ{4ob5(Q(%6N=Nst&Z4^Gb|bG4wt3Xng5I0BZdR;cXAMad6r`_B-N_kQLE)BoV8-S4PS^0Nq_*sxo8gIG`Z2&)vZ|HAV*s;(V z!JaZcd5pOfV$Wy3xr{)Ww16;jemOJ_+Kp%K0o>MT6{Ru_owa?US=)o~%JGqM@Fmw{ z1Jquu2Nb(2y@Oh~!`?}f9|TpZ8LSFYf8Qepc19$9suw;ySU>~a4ha38c5}tNaiLIg zPaDYrN^Lq<@N8kC*b03aS_6~*wvw5rzX}=cZUA7rIMuT|S%S%DY%oHkNojZ;bW$-O zXc!n!4Ep1Rl5Z_`8-h$dofv?!Ud#NsYSsIzI-;b_xgF66L}d!RBS`g zWgEzOp%<92TOh@-1;-&a1E}S&$Nt zpT+T*`dE=1tXMO`S@jW^@cPuh_YW4dI8WO6aJp1NNaLRBQqV=`EHWkdC+w}OsO*g$ zEcg#9Gb-AH&kEQ(HXAi-%fyDxc-u!6`{$Cev8U{RO?~`f;x(XhQx|7DXA~qZo=;<# z&tN^szOdMa2s1qhX4SXndG_%;FbDPI)Z9Kj_ha&WnOi>O(LpO0geX!kYHrVoV^sl?S7hE*11_^1b95E(&6Sb+|N*K;I@BVw019 zW<*2*@v`$60yp@0A(l^ZMx3gf<{?)c^bA|ofZ*x6D|*RJLe~(pY%z+7_2b_|O;n_- z=UBsrHK!88PV=kP*#bwqIdnp-(D~QhFKv^Mnv3ibpEL3Muh1L`g2UXkyt#WvQZTLd z4e~nD*2{f*xUk|IN;(-q0I=Y52>a7Td;J4>VR^Ap^`}OIwn)way_(*~CZXXu5iF)Q zv(xb=kM@Gs)Jd(&mIo86!)ix^)(#XO(dQc8gu!BMQ?v0B&OhIaidW9vl~LtFSXIm$ zcQe5nS7t5IsAJL9xLxodDG1ZJ=TWG|L}ePl7S=6^x(uNmc|j(|`=dG!H@@Psz)g#J z$Nc3Eq4!w1_fYw+e@j^o8)SEIaRLdN|2T~A=8x^NWHQts&Y1bHrLV9x^47xGC2Va} zXo1HsalE-%{f%)pf!B_;u#TtSI(RwoQ)D1_8cw86yu$8Pyl+04`R#S#Vfi+c%EUH1efn19^+zsbMp4@ZL>%XZHeqK3{JF(g_nM zM(P4;QWAvYocCS8FjBdcFiX%EPj$1n8bC#($xP63*?-fgUj!{25aX+hJs72>h=;X!7B^xHlW$OG zFutrZTczzSRZlSEj2R| z`n_=a%5_d#gX$4V{}oAWj)ON6^V(w0ji7Sr0c@~H!jqO-u<-F~t6FH8*DJF_xqBq> zP0p&P@L;P~R9etOXj{bkArY6-S zY<}n(|6c4KcDw+fvLlx_tUi;f}NGB`({}UQFSULYkB|SgR7!2eG=6alxPmetk0%fP>nG}%%@_lEgtUnA5y$wyIDhnMNTs zcr?BmYlJC>%&+x*Kpa95XQZqz~!(srt%QM@hIONAwEFU1p zOTe0KaNi?gBT|3U5vPMy+sUvUrAcj?QfX@gO?1O(5Pg2d=>(AO*e(iccJ87b>fsRR z-Gn!!_^V5a0|Af!bnI_=z8zYsp2WNkR%Aa{vN&o_-Ncvsn2*0K{K_v1V58b^Lu|;; z)tl@DVjqlSc(kY${X+wg zzYj=UETvT@x;R#3CFdrLbxp)KN};ilggSYuB)*RhwhHs!KC4@-(Ru9iV6S=PI=y^~ zi)EH&wq~)eYlJsCSiu~QhsusEN`4p!^zW$d)VS}Q;fjjtL6V0svP1|1$AW{de4nwo z;&=#x;HiDaLWWNx#4t+EK}I#>Y9cd~o*&Znymn5sa0lKx6tC}Dh!fgKX=h7eyKhr* zl?{1ny9+MduZLx-0Svt2zR*F5#pi{r1EDR!p*LkJMYs!f*@jy1uHSW(rI*zp&h$U6 z)XKMofZ~ZJ*}t74ngv4nRZ3chuF&%vwN4+t*z~^3Hz0}3!PLi1Se=*_rxw`c%tY#3 zVC&!3wq!@-0?>g~3=#@ZJ#+}d)lK`{Z`I9cRvxz~@;zcojPwUxHH@1O&!J*X4WdIh zR?NNPA|2xc%y==1o8;=IJKYM&j{2?RBW$$nM416|lPRJ+JO_JKGiIhKBQ~oy72InP zmFz{Ccx{>WP?^Id)0N6^D{o%)4g-P6&hB9z1up9Qet4Gf(oO=Ax5yxi)Zfwnv&h>KO=d`O? z+<=gts6d?jHCk+;eM41SQhlo8s$VE7A%Q!N9p~+VCy`4(>9z zySwY4K|_Kk!QFzpyTjm4a0nr|y9Ou7K!UpuZWDq8$erK+oKyFlde4Vb_1^pK^h|Yi z*L3$h)xCSKwV$>2vz~986u$JzOMKUNO@EO?$?0_?TI@Qr^@^ZzbKQ$rlx??2*UW!y znvEdEMPa5#%2P!rDrvn=Gic;ab}-=sTMpmYGj5wdJP&N!PA@o&XDq(rRu5c`Yq!~t zzKqJJIsF`7!EkzQ#Iuzs&}DpwyyUc$%z8k)(S}%$`_UxpPiybgZ4sM~$y@SH4&~cn z#d!ai%Fgk-k>|2cZhc>U8Qrufmsle^#OMQ8k3AlK=o?aE2|5+VhQBjfqY$F!*C!85Y z@!@rRAJK;4@`#~3uR^Ut*IBONBdK1vI${DZya3Y*(*k!ZC`~zC&TQOi&Z=>7?8DiG z2U@`b?Gea(Q<2a@H1J0l-s8jR?!!;DyFK37FyT3+Ba_1mfW`P@61Mx1$*4?W4YLDx zb1UK_#-rP#u?)i_)vroIxH{q}{NMLz$Ue^C>Ox}R(9 zQLHhh^804yB*)T?vAdguz>sfb>Y;Hiyd-Q%d3olkz$sTKLfuL1`!atX=Yn2S^43t) zk)l%XS@}1_qS*#D!mCjK^=8E~!mvE<=Qlss9pngqJ$GFHRdP~c|2mTHX)wQ;Ak@ly z$xKnvx;j@GW;Cx3NXxK_!uSTOZ6fOzF^K{U<)$R4ko#5PeR_8ORwfjYZh9!f_yuQ@ ztAFZ^S$e-E`H(diJyr5!?x*leENWza`Y?#n^Sh(8stHOIb7O5KWlz#V_qisOmw^-s3M|E>4ZB?s-x?n-;iB7m@H-S63qRM7Y4Or zLlKs*vha2boXotb*;0G9n@{no9ki~AilLC0-yf)q-O+h0VAThv6UP4X6=4@3$>ys? zGr9A;^Cu`{BAoRdjpqDBnfJMNMWK%DT{C+d$U&kW`eiPrglPCHIu7aTW{MW(Y$*?z z(lto3>f3POm(v{@wz`PN>CzHg7R;i{T#;Hpes#xVKg&-|uMV1WWhJ>>R70PV18S{~ z^14cc_mf}g4Zcr-+#MOUL9<`?%WHjLMP4?uG;vbJ#6#LY@t+W7D{T1%Y4taWIeXpy_n{Ot5dXg4&9dAYxV8dqpTypy%pBKzlVvvs-2NaD#PoVBrwfP-OxL}S=r5eritzPMOKH3smW#f`oA$Jc2 zo-3EvNBRYn^V5m5lA5>ccZ|QtBCdT^`P>arx<~3O_bH5{K6-y2_;Wha4|lVGB%N|? z?rPJ~VdS^ym&wV8*`N7H@Hs^D1*weB++?=X=Vtbe0>c}z8Rm@~DSw!oJJyMfnKpGr zh6~hC`(Dht%!%VW1cw`aiCNF0u|Q)EYF;WmBmBF&+34Odkt84m$}i2J<#2^H=4W6S z9|6s4sYkqv0+V#&GV^CH)-k87{~kMKtbx}gf9V7&j@(nD{EdktW&7)v>U+^P{0eix z&Sj99XAxX~tSz70vv*-f%;wLm)pKDU&$uG$Hj>h&{}JSoot~2eVGU7gh5nu+O^F&kqlDMi8tnG(7m7y3^G3fDgj@V`HFf zoz%6+ep|aN#Xe1_mefn#^sc08)TSDHRarL#pK-_N*Im`~odTx#Co(=Rpu+oxo zR)J&T{3Hcx>ACMCNT;NVg^SIOBFS?dIuYr-OKd)`nEf6%>QqP-mkc@rddgn^QMp9l z^*>;VO{bI<(tN`h_Wn=mU||V;&TQQY*Z1SXYT_smt!K|m`@GD9Eoo5}dCMsd6uVu_ z&c7L_C*(u(Rw_93hP-PrH73S;e!c7V6) zr@f}4!`I!aGffcnD{#3)Cr%tHl03zJjTvhn7f47ux-@VGeQozH|C&XLjWT$+P+%I2 z(OjRmK!JXHgX|@d&@{&}JD zZdCCjb%=Mrx6D?ZrFIJV(li)!{PdKTTGU`Iln*jsqvP( z?3*|R^$qV#{*ZVog?b1!SYb(G9NX=nsj~Q)PMZg538IqvG^kFRS?mexmd*9}e)?#p zm-pq{H;hQ7OUFy4PgY?O*setKdA?a@*1tqY1IlKlDORnL?yTF=^PCJyeN~093Ez~6 zDAg>mQtMkKIR+FuAAGKH7gHm#$b^+vOpvROBseZdk;q_`$}N%YPzk#FoI9M&Qm`|( zX`c^~jkQAR_9g`n_k_w9O6qhh8(P!~Ag7Pa(q4%W(B@7Ex?#<=dPO43LGf#v#h*jw zqH;%cprxUsU_i-`oaJ-KJ58ET0|~Hwf%LoB1VZj;+g|=1^G(@z0{}FrfXd!d!jo?vOLy zm#6Sz`RV``6AMeSc!%osj7-)jG=(0A|1o^%hi}B+gHZRZ78*A8?J&dm3Gp~wCyDf! zh@IJ+v?QTZkce65GD?<3h>BT7wYXSL8$ZZT5&;8Bv;#};5IQYZ&CRMvGZ3d*;~{Sy z&l(%z*Fhbxn0aqltIcoQ80f0V1uVmN%>>6-?}{Z?#P@=5b`|&CPdB+i9bf2ug}+t* zj0P<^mQ(%y?(Rt*(yh*!N*)jtfzu>G9r_%_Nq)P zVVHK^P;XxFIxqecK+k`oR92MXIxp~LLHt0QWj5%yD8pQJ$F%f&z&(qg(B$c?<=98} zh$TPd;Y=#=Y!g(^ivZSOm9sYq*ESH|hSkG8u2^-e&r?=$yG)TSWzs*Wa`L;{ZTJ6Z z@nDhwc%?IxJZTGnhq(i$Q_jadiX1r3at#FTNzHCXOjnUa$pgk*Gw14NAX1KTEy|?s zbfJ3EkHIKIH|xvBG@|(oZHnw!1}|GTpyUhbI;RtPaZ)?AsF$b{i5ce=!~;xEi+Y3$ z8DtTZ2ERp|Wn^7c#V5*8?vJ>R{lT?E$x@~)U)ahMN3%eVGvsVi%a?tcXP^sgnvF%= z)_MzLc8}c?T5H_epx^m{MzQil2`qgi%pYVs6U61Y-**3@HYN=0(#D{Z3uuDom_c*0+LY5(LwpuTgrjE+m-YtzdY?DYZJT+vidv*V??$f*-{uhB(| zss&U6D!wU3KV{(3sU&dFShq-0G_5P&)T$@{7^B0d%S3wbU7Xg6P}8@DE6mvgOh2R3 z-XDvn*1I~rB{h)ze#P;snu4w~#1e|)mNC!X6+a28CH_mLS3Xh7zO|2rTdsG3LxmEf zKdpWxE>-R)o?u;sdT6)M5V?`D9J#efX(QGw+n6{al@h049FDW(h-`Id+xzcxwQ0>P zktpG8BN$t=T86H0ikYwRp)c#^>^_83u=~>6d-W0v-uE>IgEP; z`@<6sMpX>Z!8*6E6lFuHH1)8>_#o%y)%(itgXI#b{93tZaN!n`*|yxo=GjBYtDK+I zy<}P3r;^mEg-C;{=Lx^4SY1fB+W92YnGS!25Ewyye;auJe)5Z{m{;;(tgwxk=cEtt+lH%3;R z^?pxaDJKZ3@|cLX)v=mLn6%1-!0>9u?Bo7Bv-v;LapD&g7XHtp&41!{|55K3F2+xS zAry$7LQdDN`be^G=G1A0yOI4A98bWm)+XV0$!E2StY35cj(7niH0%3Ewrtr>h3Ctc zKjws6XAh_LPY-<$H^dZIJP*jz&&yP@RDMq5^kav8fA?krZZ-u2c+E6gSeHWr6dcbS zTTn_jUxk41Q_p4p#JFv$`aZ#4mZCAJn42tZOU?4azT2rKwxRKO{Jdm5-Vi!G?_ZZ; zSD>b)kfeJJgD?yu7!A)q*@+>urk)IMOc^IM26kKxU>+)dC-nX;d z)`DsD^iikNeRApRmW4A?I^sWWLTiQL^O>3{kkT5+fEbWPjvJGptlB?je}g=_r&d?N!s@qq|qe$>Lw z4{X6HsL1kxFka5C`)OIeH_c~!8;^OqqK$*@S@mUD^ZxoE&N}FWou`*|k|_<8IGri# zhUQ&bE*8%ZTgIk~*I= z_d~8|NO;CvSfUkllGvR1Yvn9SQKuAVNEm2JubKuJU1?|Pyk;VYAJA+xw! zeAl3w(kH~G5PUG!CM~`Q565}Uqx5wOMsWIf0zFiX-q9yd1sT8W(rw^t*Uny$8xeQ4 z>L7}$u$V}CAVnI(DhF+Sv1dF-fg625q3-zPif0dQ6gD=CxpXgIZ?1kvj-#cn?<7hi z5^oe1yA}sAl0_~jSsLNlFfA$9$F0~RS(2CQG-^(46WN#6syLp53>UA2SN+>zA&sBA z5Nws-n;R3vKr(*5#%y`|CGGAUtAR1dTM2d23L@>~YXldcu3nRmx2|wk01dHXODOfm z8pB~|3}m?ialUd5XRqjkXu^S%s)x4oZ&1x@FRiau+W=w)Seyl+FzDuh^k!@ zJ(+evOH3@~qC51AYisvC1<2k5BdX+r;^z_@A{N*WX9?hqmK~27OdTM|`93&imL4XM zib6UFlecYN8$?M7v(_czr0pV-;d2zLEMqr1Y*0;i+bZBNGJ|79lrcP= zrWliIDX7SazHKvleOcS|3=r7Bb)goYIuTm@;&L9QgQIC5DJ2^+*O}8z-2w8hC-Kdt zf4$jkvHbnVsrn*s)N&QjAil`e*?eC&B0z(_C}&Q8B>(*uYne+N?+D$L;_3WqRB5*R zg5WVnMnzlLvEZ#G`u4j`RT;`%s+mN%^tR_BMu-XuQ|#jJ*)O%d)T5%^YABwsLcq80 zL!n!KOj0Zzc?+_Co_WP18vLi{)|3#sc7*J0tJ;f(&vJ%-*!!G~kx1!4r2HrhuNZG< zISuNoSTI&7#9v28B~Kb!05Z1&Z)2J*dl}q%d2nL&glig-o>sq*L>kq#oDk~-mSqgQ zC(!@k`)zP?b?9_F(}>oH0Gf#f>#+B0&OeV?SJB^I`7G_lxbXZpk;tGs)CRL{Mp@%T zqm~$-?)}s;59%2Vh@Y?A@oey0V6}#4k-{m(|CS#)L_k8aU9-L4UhL~T)ng;}7z;jj z_HN0Ff@7af4{j6Kfr9~|Fl`EqntP!|3HpfoK{N+MgZI0?r}3+*OBc6()Zji(PnXw7 zX0!+czus>Z*FM^*161QG8>nKGmUo;;J;%vBAulJ-=%vgvma{;3$A8x&|BrNM_(lG! zvfeaY=KVisQVf{kB3K}Gisu@pyi(gZR|~xQxAG|O+bY_96T%D#l&#L|jKAoz;b{K{JnJE4#Tc;U`-zw-8s<;quO#gqdfBwi)`J1Qo zrBHRqW2mpg&Q%X1LqV8-jCqdg{nOp#B@Q83{Aa6}f0bWvmacLz+y*V0%A|*!Kt4XY z@Y+VPL0u9F;4vae%>NW461dWU$B6v?BSut(-Dd*Z7iA{LR$4lvB5SDI*?#L#ZmLg7_V{zb_UXuoAN5PwhZglC>Opw9PPRXD zulU#Gk`5|InzpfDQ6;K%(Ww0zL&QMU*qUnT@&S-w4AUWGG z7Uq3DzA5Q;wf;-ytkCDNW2WhRe`zAy=|eV6EyA}q*oZ#R5j?f5K-?4^8_vqoY5Ulr zznom>f8!#}o+M~P8C!hK#9Sx~iQGQ@g8bnU!;J_2X`@Xc zRV0pCZvDd{RNhcPQo&E>9gPsPtQx%fe$8C&}z9^&iWhP6riM{jeOLm z5xuen zTEQan$s@8tj?2C}E)_?u5@(B^z7&~}3r{Wf?!E8VOhlD1!qXX|&J&rw45LBnGLG|o zPoopcq!0$2&*#+k+9wSsoM+amiM-u?&pQ4%LB-#Kbyndc%#Q6 z&Tk*hO9}?fs&j)-Pnm#Ds#=4y`^+S0uVG>SFLHcm)^FJkM5c1(tg1F@L0>sckT3Vq z=qZZU@J_zfK9&uHc?QU{f;xLM+o&T}PhfVx8pEIiwWWHMm+w?G>0=C(b<*;FC!)}f zyaRtDcA*$Qo0PsnLyV6$JJ}%uAxw_Og^aZ!uyWs2g#!X$i@IP41yKqjJ7C6X;lN`B zLQT^`t+erm{g!xQAFIVZ_0!r`r8+mrbsZ3_QE*3JJ^0mJO^0S&vb;RfW$&zo&b}1f zH(wcS?>yddf08tIu3vEERP{@X(0QHDvu8yc%dgcPi$b<~A+-r`-hy-lF5mqG+x!xe z0trRhW3KVr!TK$@9o~qrq=Rr#vvG1XJ>&3^|DHl}aTWAh?wU3>AGd{V_U!|DK_m-$ z53MI=irjjn+19VRI|Ymc%I+!^IV`?4lOKfClD{ie#Oe&fipENm0O-ZFy!1fo|HOp z1h0}7G#?dipg&GGuj_B`Rb@Ik8`DLMKYSUdHd3wRGZYWjnfgehUHp z#ai4I&%`&zBFRGHmkn>+oz7~R9)OMQ)*ZH8DTNxnd5m7(*$u|(qkGu09if&U_34!1+t)i)e*9?nJN^ zPSw)kF#)I5;ISxnZGwfSZtKabVtO5JkII9ED(61YS-S_>y#_ZCHrh`wd7yiSC7BO< z^~uu}klE1pa%grmywezZsops3LVbQzFaEQiS{6s`rs=Y?C%^l2=2)LuXJDMQMDGML zFzAQf;5>JvT|M3HT_)0N5~(Cni=yabXDH`#1UT?L=y%Da2dG#Yy{zpuzsa}`U_|qE ze#y%b3%eovo$C?!&1Dbp<{$jw&iuL{G_S#QKklaB0RGwjo-Lr*(QKJS|u55PZ zg#Nokav7~xB4{&Dt*1?0&_vu8#=;gFR?=(4UnT$9?)om7ml7}JEcd}Ua-SG=Enict zk%4;;UUO7fR+{~JOvfY6p#Sf$I1`dAqQ<8=KK1&-C${JeU~+2^64 zOuJ*#5j`PrB#Bo*31c{u% z2-)y@Iko9zLP1}EV0v{vL;O8O<#@yN=KRL{SDNxK_CYs;&A*y>N_)UXh3cWl{VUDT z3N%%!)=;c<+_+OP{kfAVQ)19k{2y07Pi$jRbjs(sAEcPXVfu7A$8GznaprZTtSNuA z@-b$!QSLnkY7#6E{B^>DJr6#dc9-&a;5x~60%U{d$=gwp zq@QBY<6Gt>Zr!YX7|-fku6L8rW+`^Gl@v6d2ZhWW1a?AS??1d8u7VC3t7Tolj*&8na6<`8?6*%CKQx1)9{?&pYoi-uglS?RUYv91N%u{bo|aa1pN zU9KmD!!cJA^f3GtGS$^u?s&Y3qUilY%5Iq+2kE;jMv6CE~lFPVTv!0```7>-&!t^x--m$4H%vwUh=&MwkZtF=>d62kHRLv3xB?4I|=_* z^2l3W(+)&W14aiV`n8}XdWAQXYOH66mO92s6^Z*lTI?-Z({NIjUdpK=pL61PFg*o^ z$B@R-zU?TOes?nbT=*nh9vT^FJzSrqJrLiE!Lg-@(ZhYf$KZL6>Bv8Jo<@>wRfE2{ z%>K4oyIVXvC;mF$EHATYU7gi*0wtDxY>k){%lcyZZ!JNl9l@lZ~mrGt-xoI?AY1r zVC>qN>hRxzOa>jUn?%q0Q?Lb8DNw}wZ|kbl2NZ*D`{I&>Yp_4D&tX)W!_28QCXO=& zTdENhB4o3Q9oCLuB9cX;92KMmkm}8`Ic^5rn!ts9{z_Cyww+RZX>24(z=!!f%2z&h`B z>7*qGQ2fyJW3c_VrQuuXiw;%d8Y2=BE8SY%-Gz$|b5uQM!xxUl2EkQ#HNN*|LwzFK zTF*vcrDJ1WzR1|RoEE<{39-!k%b#Pd`_|Gu)tQU7J&SKXWN0VZ&5^`(o~93WNG&SS zle{<}CJAec#6P^I?w+1kbECKV^1(=?z_G~}+MN+y2h_d$PE5lo7lPweczlx@7hO3uD~ z;!d6tC_eB+F{n}S6xAjgEJ`O?ExW*r_Ps1SL{f9K9zIK&KZGXZzcWw&r&x!=E8Txj zIDh5h=;E&9YHn%Gt6=T@(b8I5S)Nzd&()e&Ps76A+R~F($IHU=pM6y)b6acP4)*o%{JTdvj#e{j~KYDs-TD!k;adLHWws!WU6Z?-;b^$?taXw*z|Cbf} zyZm<>fd5)aRSAHA001DsKY+h$fLHLn|GVX%i~QeR0e<%10RRvk?Hh3p5&{DN5r}{U zMEE-lp#29XG7|iEz<(@A2#ClisA%XIm{{-w67d1>eI#U5G$ce!ObRSSS_DKO0125M zgEiAR<3Z0Ol@!Q-E2GKRK045138Kb=R`^-gh!FPHV-mPu(3lvPuEW#q9 zV&XcwAKX2?e0;;x(lfHMn|}Oc6?&!QQTn;LrG1c1LDACM#x|<#%jmAMRYYWTdBqUB zO3V^ee|Y53&TsDq4u=K~6cO>i;6*@0`ggqW-vfYfxJW4Q1sQ;gMu34p{x7)n$Z)t? zs08M2SA=l9jc5#TwCF?v*Tnw@R_DD19MC+IpwPPy?mx-lP+#dj0AaGK1>pWt?(X#~^WW>b8sYH4B zc>Tl>+Q@LB(k`X4??e`BPo`u~#2XM89Q<;WLlt`pj0_)Xk-qQenT3TZp@$ z`USm7C|2x@Ig2Cs(m0ts!>|3tLU?azhoD@}D8Zbaz3vr=VJ-t}T~UsaEsDIbUWP1- zHtzPPkznv&K%w56cgf0WwN}qoN1K~~E*4t1=^g>|+l8;N{e4R^61uB6?Fy=~1lcIW>l(gK#zE1T`1UA&pHs+dwfHO1oxJ>FibJRQC zw67QNJcmO64reIug#V{lu@*MgPadKQ)b9cajBM~~3m$G?)VcFa+pY=VaC@Jm{hmsX zLiHNWLOhi~)9mSwLe{0xWo3Hl!M~}DNT#gU=QMRyy?@3!57PD)sU*%+m^2BDKP8yV z;I*9bc(7`1j2F6^4PlGr|1g>*t=4WOH-E3QyX}T>gd|#Lz#kVL>rBOG% zIEA_Ruw`V?nY{S#qIa;Z?l<1h#zfK+%5$O6FRw1{s<-!+Zp)3smQ07Z>CtQGw)ai& zBX!vll5LA3ReP`ihH>24I2LRQL=h(4x0jLXmp;w3F9Raf+qe_;DL7T7-4A53KzTT9MJXN3eLo0vW3pSHF~JSmLT{;Aoi`ROKHl&rA zxlit0fd^#~E|wNom;HR3k(=j_I45ha;>DSog*p6hU_d)ez((DJWIy#QFRu~YOUi^i zp6cFimmmsE!)7tNCT>k?-NEq4omj{=wCfw4y`i>Ous(XXZv%-wM-~D`7`KAcbtCi|Tg;#=LlnrS2-q-XkGc;-|>Y0rVLg&$*_E6&7_L zj`9!2Bb;zUYx|UU6R@~D>izIZ3~M9`C*QTp2*?`Hr<>`(5aA*#Ov_6pRJh-79(9e2m z4YStOlKKxyDz$I~f&(`>$_d_{U&YSLQu_z0_se(@c_6H#N$|lgV_(N1gPXxO z{SJyDgcbmay)dd?!vZD%5_+q>gOvsjkEHJ~heTR1Yj)OYJTX6gobUn=S|t-v84Ao~a% zWY#ykn1-INkj0za_Nd!1(?bxF*-`*FKSv7O>|=3pi(8ATHkHLX8gL(Mhq4Rn)>Y$u zEZyA?0#|vcU;BshL63)rM@ZbM1YuCIF#9RDtJ5pz7oZy*8b1b)>aK}E{D(K31(HV( z@@#5G!F(i(whk`@Q-X97$4^3KJM+QZ=0!567upl9@GWW%6s#3rdazQY;S;GZUejA1oKfR9q&?Og zb`kutmQR4eh4PU0+|#p3ZxFlGa=7u~QAr^jDgUj;WDUbtyh{Qoo(8UgB3Sf<)-=JA zt+V-{#-vHl)I=0E*2Dl-jPr8d=kVQDUgXkmc7rF|F`>~oOE)rrzuvZcl~F4~bdt^k zTu2edDFVj8t&}jZVq=n8CqKs|>inOcRsN-Hmm*LZ7lVMR^v)o?em9QbDeN*114$Yp z8cUDfXdU6^JCyT<>B=11G7KXbVbL4&=0wG8ML) z=iNI1-|D1iK7Y&WW8oqY%W|IcSl{d7f0r8&47AeC+~-661AG~?}_*71Y9aiFqGH-u6D1en=L(59Z!8HIs47Et(S;ueXvPi@7&kJw=q24 zm(WpuqJuQydq3Yo^U0{qXZ=yW-x;b@c(LtvzHLCJhEoZ}?`8!X!F6ve*g8+#2y6OY z(G5-4l2tJwst4YW%yOuwAcVr8Mfpli2OWO=R)Ue%aj{uO?RbF}Y5Rrz4D%yV%@=b$ zJ&NdxkrJWZ2;Q>~E(~1yfI@jF7(GR5Iu0bzE^-RVu&jL#(nyCMperb(nI`X$(poX` z1@tLvg`k&uG+KV?bG%l}`?@c1@fbV9M-|CHoXtHnytZ?AZKa#dbR7@xhxx$o^+ZX5 z_Hj12E7Hneu|(dc+peh*Ts&k+cx8zM@p?CUki5}iHX{(2Y>ci@!|W~<$(Lg zVKoT?>R&rH_t!IAQnT(JyudC0{Wh3jyOx6?=g7jvXWSt7%9}XmPdQl>J_AM(xfC%r zz4g`kO%96D`x_6}akxi~Zn=-?9t%bM_*0sFb!6TS*Qb}UD#N-`2+n^2e2=J0bl99a zMWM9lk?Td$LF)|6ZR#e&IKq#xNtHB4_fkD9q{4m^yx~zJ6t>le4?J%Ca%K4)aLDx+faBk?D=xKr;>xac zeeozvPx6%y8OuhFRbUe|L^BpUquBg|=e;8pHq1w&uvd~{P!FU}AA0?C9jVmdl+FjZ zJBF$>tOG}R4GM?ocP*F+5KbU9?U8R7$S7sl6tNHj`}$1qtjHBe~jh7Hp2Lq$kg< z#mLnva)rtRMyCVj^!XjQkjb;XZg&>zGvapQy@=hd(?jDvgw$x`!@V|nHsczq--dnk zO!-r9N(YV|yoT}P^Bqj6w`FKvj^NIY!9PcN%lHh(HpGZ}&l;vbG2A2EyThU=eba@|r z_Ogq_mknWR4bN@0*?k)Z4y38BD-qisu*D@X2}TErt+>be*<>3Bz&lv~eXfHx=Xm%m z7}swf$?M}zNDUTP5V!@cZsQ1XJUh!` zqz!boIfx5BNX8G?O#tv5li@HvTx2JlmyU!Zafa* zg2bN2F$|t?aUo0>?m@i$TJ%}t%yr)5Xb`5`LeYzVCk`-Sg;`vnOvfY`I8WFz%t)=m zm3*1&u&OSCsVJMP*i@#ZT`m_k1pvnP+BsBwfr4a`O9<#yIr_08Z3X!uWNpa3Qw&20 z|MKGh)js}r1s}-#^P>Fk>VNOS|L5(1@dD}LDeyN)Jqk?SBROXGUE}Q5&?bYck<=e^fRS`#N~Wv0?da+)&0dZA zpDDRXdEx#7OKi6CHN65%2Si-i&TAI9qq9>v82Ny9@cGSa;u2Sr8OpAMRRPUfFY-HE zva!{Pn(dCss##3BM#!u5TaR7tiQPymkNZIp44pMo^c1#)o`-`=53)F&#(Byo_y{AA zkq+OPp+7p8@Xg0i$NP4c2&7ow%$3ZNMgT5#pt9#{qF1KXQNIrV0t}TTR8V)uc5c8; zztbKH&0>~VsGk$A?P>V6JFdCV`uKmqiK~rYaY#4&>p}?} zD6DTKc1RL(Iyp9CwcD^gCrVZLG{-h~-5wYDD}Pjw`B_o+#>lf^x~lwq<&tlVk2p*N z48DgXS!&G(>UV5%lA;VfnFt^t1Dw^uy;?{9pru%p{J7ghineS%UCCD@4NoImiJ-jZ zbuig$&VSc#&&MS8qa*1A;U<l8K`+?Th>$x5uqZ2X;2TWM+PIc0WGhX*$KV<QfFk!hf_zWH?u>^nTAMH^sT5$_!9YrAPid6@n9-Exs+ zBp!fN@5aYd*Kp>Fubvu+u6_XhOq`sNpK_i`XN_W*&;rlLI{%a|SME~|-#y&PGGT-K z572wk_M@y811L=>C(szD`mviKHH~1ZYfybUln4f`V)V3~e9Ld2PXpw+;tc?rDJgS4 zxS%y$qVg6YdcroZ?b?en=m=10%v|k%s!Q|5XU+E2Z~g^{#%B_&;=f1-h+VY-x!7)9 zl0fvtpn_!Tz?`~k8xkrRQfYoix@DWyN7x>`YmS3=PVIg};A`^K6}ab(i>^4QjJsac z#O}>1`LdL5nDqgoSBAzs35GiC<23!O!UwlUwAG=76p6$i;1d(p)vpmnGTfA;z4Dms zEZx`}Yd3k?O>rBAo4pMEo)a@!B*C%l!Wlco;ZSJIPbkS{0FS}pP?mDs9tm4_sH57$ z!5|k0pivylr%0-ijxfrclw?-aVWeEv7S69MOZpap=5Q z340vxX7{=8j~K2JHXlTS8b7?2C2!Z+eClb@EAI`xgf!1I@{|rBqT=Og_t6NCv13fl z7iAj>A@XdgxS|?Sy!ehpDcssIEGrPCeAKC|m!W$2G*W_IqDdXdK%hGH`y&9e>aE0p zqHeKRVIw%B$x+~LBo*#&4>AV92B$|_AH7Fq5tR|h^3yAY!ZY4wnRvkRjQ}bh_qOK5 z2<-FHJprY{Y}M6~@2iT7r%nqb9;o78>F#|g5-VXkG}Zge@S_+_uo#vt)?>m}F5HoD zub>&J$9!TZD8mzEbw6KG>H#~I$zT}C6Y08DBx*21SPj;q!tf@?mbOjMXLt6?QFyJ@ zL1LLVqT7oWG6_l2B+g$QZtjK11iM+W3U0u_a`vr>n|D11Qdvx-?&~*@F_o`o4_UaT zbaiJB(0o1Jw~%enDLG$!Cv(3;?!o}~5bgK?d{h`a|HV}h2L`JlDjvP~-J+moG!jBm zY$scX^58$x5YO$1C!j+0e2rkJ*ZYfNW2?XYO=*>QniC{a38^~ZEt;ibs3SejPj@WB zZ7~_IKc!$DJwfa<%Hfa1`gDfIzDg3AIn>G-#*9dH)XV9UQ-f^f38BHZJTuZBu{$J{ zhK(txmz7ZTDli_rEx0AM>UDNfx5KW&vsTuNq_(1?ikUAgEHJ9EJ+`I&ai8c(xZfaA zJ~8a-f#lV)BLQZsviWs>{nUna^x6dxf;LaVg$nQNQ3r0X9&ciICsaYL4~iHZu6$+L zkJ9jxCcDJ>0Pe^v6vuu6&7%ZhP3*ZB5A(^s*Rhb`-%lz&~;<>o< zjnohW?|Uq3oq5-VVPh%{xCR*H`Rak}r^$i({0b}UHvTU_B8GT6tc~5_cqUhOLARN@ zhnyCrRuN@74NkCIfV=oAKgLv^18GgT?Dk&(FLt*D@xH{1TPFK}kJ}h5QcqX)!22Y2 z@e58~xHQnMfi+TAEgKx4E%e&;Cv56;3%yZkEUp0xUI0pw?XK@AO`(^v}KMcD@>7$I=H9K{C&F{})8CJyfj0j0)&_mZFMb%9mEB-oZ zv>Pzd%n-fhRC353*$L0vGwKc@lO|aQBU1=`Hp;k)thm#%`UmLB$9H+|!Ug3%r`i+z_ z7-cs~c=5#&85PpYM=^9D27xDp?}(wUN{GYAVgGVZ*7R3PQ~;yrF7zE+uR^v=E;3%6ZLd2cMG zMKcA#p~Fm?HE-R|F-K5JJ!t{=d^6CHt-8}OJ()1u)rBm{qDFGdLZv=QQ$Kl65Z&hxrjpI>ya{Y$?p`JJ~kG+KH8|t z+@Rl2mK5ghV(W#AaU>;QTSMJEYM-x@)H}r+PRA9~u+qFj@Uf_l?nT5$4N$2y71&UvjWnO)UCpBj_T03!nC_cx^g|)Svec~ zA?E~6b##!`xqW2yMOd3Z-w7GS2NRnSV0?etnrMNui~K?(@EC1Z3lyqe5sPZ61|8%| zfoA&6YXjY70ckuu7?UTalf!~I^|`#zK32FQbhkL{pp4vl($$T;ghUZ6;$XX0yL%to zm7$DwwYRo`UX@5GC`ZHv0CaasdBe7VTq{LVpaW>WN=f$@Iao+`p%x-IdwTV<4jX?7PGfSotebzGkV6_{9fS zPu7uze1!*Omrb(y&ASE3PLM@Wd_c5wcf{obgDm*g)@A_izn$fu)Vh5}bXBlv>udHO z-Q!Ut^z_2++ojyE!ED{w!hvyngFT$vU|pla_drL61rqY+m8X5N0x`t_Gt`vWd4LGA zy9}-t!RCOe_B!ZK>3!lqBz=1kFCls|WN(mBi*C8KkDp0it#UM%rusfdo`oE32iUq| znwK*xgGEBI98mhFHTQ`j3b4gUqUyLzK{CdR{np_-@Z-koF!Gp&$r#(@50p5+T%<$D zD!n_97@tX<+h@4Jf(W^0{0o(@1*Jh`JLrmV(sL7f8vK@25zIs~8*v>Uidh*2Y8<)# z0VJYF|6YTqKZvs2=C1^@B0zOR_=j?5OE})TIz2%DOpiVRKmX~+-PKY%Bv4m)r8U3- zGQB%Opd!j{c7~;w-9CdKd+*wP`vRXm|8K)=AjM7N_*VVou$%w%TBJUDu|+wR-o5$F z%|DI~7|xE+qnEFnEV+$c#g9;&K?OXv7f<>$Bjr`cuf3fDb3PlDQnhRG78UN1XwQ~vROd}U{T37Lrl&+emOUj+qj#Tf^ifYSQW77j+nr8Q#;fbG zG)k05PpU)se8sMkdvr|Bp&R>`+YXT|sbyaDysNbDaJXy`8@oZ{MHxS%v}W{?Bh1I_ z4lNXIg_d;=9^qEgYfhoMI)SLP$A>MPb^HFU2?+O4#n#5Ot3Q$?|jd!8&(8SA80-2eHf|7BMG z_a6LjJNW<7ujx18pr=e?J z9O_cnn3ic5fH%YcRebONVec)&n*87R@6lb8lpY`hU+@2cT)zByjnJ=$+#MJ}{nBUSg-?*FuBGvm0m?(nf-)w%L_g3V8AT56f;fYs`x|dwKm%Bmd#%AY zer$uodq$MP;MSfS&4;Eo#BG4xYv~BZQ*nE`^>c~jQnbZ)*O*ZevPQ++OS{Lk1irRc z;Lsc)|EUcLK#ba2AV-0F&6An;PkpTwq#l}ly~-Ef^%+$bt75x4m=GiCQ*a`!7RD)f zU+u-u+25#z!33nA)hMv*mQL63Lsctooc_ns+QrlRzX$<9UP<56y91whI<1ma!7`4kU z)*?vZWYMAa)ME}qX(q?kbA@kf50ev>4E1tG8F3jAVVlCfn`uvl2F0TR-vmNmsGKI2 z|E)`n5X;u2r?xvzwF}d5Dzk4k{3uJelqNetv7lbHN-gy;Y`<|5$v)z6Hixo%O`oVb zr-9v%ngx>KLozS|ZA31i%aKu0b^=3A zpuU)Bx^!)pUv#N7RG@#@Nd#ww>Lb2bs~my?g8CUdo)<}NCsD6|7I8Dc-X$#c>Q^@& zg#jXQ7*riM)BE&a=eP;6$W8I}ika>rkgO`5^vO2sOhI3k11aCyiRYC~z#=z}y&`f8 zl@;a`(c+m|yUNs|3^)=Q)s7R=5u2e+)FF5wlJ^t-cQyX|;&$uECLY(zMNHX?#kI!EU*;ZRhlVuNFPK=| z8FBX?N%^ij#Mjx>$`ssA+LZkE2D`r=-*z%&Jka0~;k&%O6BswfKa;%C-)i zJ$LKF4w9qjx*nHOqo@t)NxO2x*Rbu|;4Y&-J5Li|Rse@JZ~T=QeWLsvsh=;)gHc~q z;yoiO@nSkn8y-bhv%VOO%MsW4Naf3HoFj`_<7iIGY2$99g3k#93Y&|&nzx_-zzc6G z;RwX$kpE%rj4ye90wcIhN1ncM-Hg}d34{-YNren61Hi{}L9$U_oZg2tkG{mNGcr6V zNK&UIGPNm+SF0=U!;7UFS8&8ZEbF`1G?ClnN!8->HnJf*T)L)6CRav==$u>Y{&E>5 z0>oFI$9U(S?(iSMT^3yK_WB(!N6h`HFigWq){I_FHyV{Swzkf{FHe(>q66GIA;ELU zaLL2Ip&WqU;=AT5I88RLV;fQ=hZqsSGYZI!OiRa}B-JPrv)p!cuWySy<~tf}+L(RC zWz(O?RZ|1y; zoA9nWN5ULz+y6SnhgmpS|L{ylCYx4MxA2lCKHKn=(x4h&Jax+H02h_B)x<*&P)uY5 zn59b7bSa64*+<0oFWxH7dgK&H6UBF;>E3;W#HcPoAPUYPCC`6ON%9pzid8c`hhQxx+=ITDr4Xx0A>yr=)jjND9wE>~waTHr zC07aQM7Q8!wa-=g5B*S!jiEJMIAq3%dqyq3XzSyH61C2+pbiA#)xBa^08Eu&Ra7G$ zu2BBj#KOAPK*@sfnKnyFNKZGMH2Rr?H)pIZms60#Q`AJagOP^dH-x={lR%BA%>jKf zR9d!3zadt&nIMuR?_I9NZ_&d+1SN`HWAd!|-}PmbgaqLhF@L#%m~5G-oglu|F1K+} zNj*i=#cdgY6_%&4T`Ow&NAVOt+XgzF2k|o#gi$VUHjerf4jFNQ2}ZNc)H8uJl9C5| z)v@Z$P~iXs9u^?eiM_mEY|qGNqY+Y|sVRvS<00liSfmr=NlHEE(pR9O^zPuS29 zAEGNf&gPe(gk@s`N$-rk#Rz!!+D_=BPtdD#m^1$t=ZHehW`DaQ)o3YBz*U~w^iQ?g5 zpWt=fn3O5iWE1M4M+h!}X8^G<617b!bl4w0*m1dEEEE$kb zk#nu2to6a_-!V<~I4Trj%Iwe<>o(p*H*=W`KP*35OR7*l=oL`#dB)GQt;o~lj}i*3 zfqTB!Atx{Zrau2Xk$c$%d~&+&hf22k7MUIj_FMeb6gLjHNOY0%hyZmW{A+FDQ2vw| zo1jVl*u3yfJ6k_rwiEq)2!G$51We&W53L1upXAI#|h6oBFuylnNVb- z51l?*9e=v>mu~N?x5<{ED)GUg#=%`lHYaLMc4GHIY7x5RaTy-9dSr=Jh&31rrl7VO z{?lKO_;VyLWXzxAk;JY*rqxccy%F4nXukEN24W@;M4*}ih@R^aM znQoq;^MFxtYQbogWV=^7;1&Wo>_1j+-``7^S#nW-MSuqc6w!*L`fN8>(v9TVeOd4k zt{EI9v__Mxsf%yiw2r&V~M#*42MK$6E1 zHy;E^HO-I5zfFp=sESz2bbv(Ms2mPQPkd4~cx8xqB*M>o;mk?gPb2Mzj9`BFw9(iJ zx`!LX*D^i-7GdhZzG8@gAAd>}+QY_UwK9Y6%-l;M#W;w-jfJ1GiKk(Z*VQQQRFSxG0>=5vA zb{HxdxxP|n*XqXls%C3>)5ub^t_)?m)Ugsg~bErzmb* z{vB#1_~g8~Th<6E88naLJ=jDc@zs{CAB|rDgA|KT4eK_JSX=HSnG~GnM!DAOA5iaZ zU;PN_1xk(xP2ncc<57i7X*9^7e-bR568-K!|H|ed7ZLs|?Wfaw>|2r(JVfaA&%UYe z-1NK-6!)S)doa?vxOdgvSMI-!I8ShE3n8L5Us)56kXQGA53tL~o5-CaHtT)79o!>_;-bjs|7@@@NG zZSuQbr%_wm5fCF^N`>=Q>Cm=-;NEaodVgJ#C4R3kH)hD!6PTg}23e8y>BEJ_fVP-_ zA7&@Q>F>LM$<4{?gP#+81l$W^>-e8aN9DR-Rc}SuGpj>Nf&H4-u9$VEB-5ga=s%O4 zgC~h|#Ybwnt#Wxs`)Hs>NKSnv57SZgzqu}mk&$NRpO4l`)5$+ld zv%TLb&$mu@fwuA-2wH5TFpFH%_D6+-+c$ye*^kWXP5%J`^VcHbS;Lw%k1d->oM;AQ z$}RbNY%3t0XNl^C_ddg&3YZm!!<^e*eKxjxho4Bc@UtiNXM6A?lQYQ-bwcm{`-`Q!lcKL-)w4rm#rdFNe>lL4}z!_e5zz4_uh7J*vP%P z>5v8Yq0?^bHp~rt4mFEsU-i4j|I2;d&U+`1=m58uE4A^flzG1i>U}}_J}{XzFeXw; z@#5f=mNDmk@8m}j{JDaD?0~FeKbq#YZggv$lQbD=JlyTor$r0Tn*p0n__NQg*dG*s z8I5seuFY0UzP1(>TUv1DDr&lQ-U-~g!n~(Ik)q-$w8uRa!|RU_HQV!XrEk}n#`|cH ztXPrn&Yvm}^DP50leOz5QS6Q0KVPSs@^rMv#DD!nSNepMrRMEbuRvr!$;JNh^P9Rg z4w)p~HV4$_QT?SKcC*a6fNk$zZniyk65cnt(zV00d0=OR&+`UQJ*yzr>|V{~ZDQv=oWvro-q+gC-757WkR zAMYc@Z|jHib;E8`UjLm~#B!jQCG)ILy&|pnZdMX%o{I4)ct>ogfv5ODgP~hJi1Oj6b~Qu6y#zkW_MB;*xDuawjIYQlc|xb?KGs zdT{O24^D0(<~gx^I=WCas1pD2@4rJMul&s}?R#-Ju9%V7qWbsy(JuvGSJ>yH2dkW>y64;&hu=zmc|1oa;v!XT1Bm*zhJj9y+!p9q84 z|Ce?j9~Iq{`g&ij(}u!cNpU@P_|x+v8ev%Q=1j!qn}XZsP*N?5e7VWZu>M=5(E^`AS7lPXY9V1>6K(0(n<-yv7w&F+A@4DI!XcNZl%C{3yC??=I zSiEKwZ+)FZzMx6cPy`aTh{WGK3JviP9;FJU|L!jB<4@D(IwM~T?0X<0#4Z03wAe|E zc2f6E>d?@YuZnh~M30tCCHp*U5p*2bG*Y#G=xVemp-MU;D>1-_TgV2Ue$yJ@k+o^e z9=os) zj9XXSMQj_9+jV`C@@M>QaeDK=X7xEcsra2tXx7B(meeA@-%o3#54TsxHe3#Pee`TV1zEgHM(Z(fnR;E#O~?y{-LXg z3U1|H8VlSEjclv3@znBZ2X^QI&iAuci$Bs!sdDTbhc`IDC4fX-g&`TCG;~g(=-_!x z%@rwvIfSdCa2yhB=2k+=C?6<)gk> z{@H14=J4%JdEjHv9p^STgD!Mb7;G#FQWwc*mDWPQla=4GX*iL-wbH0~D&!Xsvj47_ zuMYv?2)mn7%~3q3la=ppx37;0Pj)gyP-#*@7fbiKnYb-E6)0Wssrr)*rbRxv8;cZw z|D)&!GS#A`4yIo32_1H1d1W52;u(G)dCKejj@n4b^g=-dad4gl4;mYk_=Gq7WP~oA z`Xbmc*!}EHd70M5;?_mfRV-s$qLKn|i9L$l?`1twX&9n~UIODzT^hRz#7S0u2{|zQ zkzbi$a#3&h;b@xLgL+;=7)3a!VoR# zUpe(zE(-v$G!-2_wHAf}M!QA7XDHd{nA$cXBly%`cCR`)o&m&P4_vA0sps4L3wq3#4~%a5lHPco-hfV~voyl|27Tthds8 zWv<+6zH5)rv!rZ-_spStOT{3=QWfXd;Y!TeqD#Hvv#B%GN9|SU-G3>N)QDQXJ&Zl%Fe&Fjz0{=gVu)OGeQ9XAPDN$> z>7eKZM$hl-)(}wcbWw~vII2~e#dYzXWqtdj&cn2~9m3DzEP;X4^2N6#bAp8=oy1hW z%46MyGP`S_IvLnIl26PZ;%ZUaAEGlvO1@Vy)gAvzhT>f5F%O3FIP%23*(Vm%RgzHhCogFeOYoBO?xqcQ6~<*8aBsZe43xa|o-3hx7oa+8(_XtU(Mzx^wh2B#P%{}x^p|DXWZQtKxktmmN@B6z&kh9lq@ zL|~aiClOru8{lz}nH93AR2$o1&$4bB%ZnXiY7YfrB1Phgw|kSLq-!trf| zYlNtuus$F^{$WD;mm>mN{Rl`MgjiTcE+zCL>=^beVTy5^b?pM1ZAG3S6aG?cjKb~u zY-}ht%gTua7I8qewPiMA`zF3`5BQ)4OxhX|(DMa3I%v@v*iNavt^cJ^@y-FC8E8Op zy1NoGbo8;2KaZ2~*xTrZQ6C-xUd2CC&%kHy9vPXr!F?T3K1T+~DsjLOa*;u>;*_7B z4Qy8p*yHc@>EK<3J-BRkn;Y9qX^WRQa(9+bEK#8gyjO_YWFo8*H?XsPjj><=5Fc>H zsC!$M%xar3FijCps;O8x#sv}cK?jN>tQ!4{M8;w!HXssOGB{J}_MEc&;(%Ze`&YRw zboau1)*i~vT^2~p8+1Lq(>;Er0ikosE^4||l21skZWl!qhJ>6f#R80&Gj;@~R4x?E6;ZZ?MXjf(&_}1p^CRv z0Yf+D6(z43Hu>=mP6j^@6=L|?qc)*`UN%%yhj`i}dPD%1ihl-Siic5)On~9a=6-5S zwD8oE9osMA>TToS`iEuH1q;=JG~kF%(FQRlAFCyifR9Zw2iJS_WDd4Pu%OM>I7=*y zW7>fv?BHmBGTZ2^yRVfok*k;}?1RMVk%R+O$a7Fw_IyB$kS~Atb{bh?N5hzj-k$z@ zdLrRy3ARQsLK!0TX$tD?GCX)+%H3_NS_G#(U=*~BZxVN#8U50QVFc>>pE+eX2(dML zT%iY3I5KSigs3RIsX;OD7X77Kq4$*%VLXoaVH=IrG}ZU@%Y_u9IEDAD@ICfL*RN!# z-^$jQyko<_1-{V%vu)$-)8Z%a_%y{B9&fGqf`^`&yA3mRWfJ=V7yhYDo`<37tx8ajnhJwX zV0gR)V{OfM7w!Whq-8-s&Xp!Ka;Mc7mI&}?Y%Tf^z+5IQ`G?AR@FdcS=qqN7rsDK9 zjvi2&XVZ$49UvFM8A8x~A*%whILiDE^ilo5n37BCEMh#QuSbjmam>pP+!C` zBp8Q_2-GCASzTb@bl%5xMCxtaorg;!kGM+in+K}~2s;vqzI^QoWGf#lbA-dezfOUl zXepp80li*a0P1kWXr8{FnJ%GtROAZ`x|~R0M>aSuo4jdTnGr0(FERWVLx%z4@xCfZ z5;Ra>O2BR4JYWP-=BN`Ck>EG?D^1Boo0K3WG3n$!fTDh*LwY)f4M8fXlE8w-CX~_D z{idOh6dazesleqQ`1-lvHEg{U*{0q%$L&zH!>;ICQ=!5n5@{ zEY4#arZLiY&OB%{z|cXENs%?h){UD=DV%N^lH#c{TF+@}QEpywo9-oiq!5ujq~6Q~ zn#K%oZ|~_l0Da&w7f}+)A9qQjdi9+Zg`MS8CUZ2I!C&*K#YX7-$MI)mX*WcvOEeqo z(9ihmRWK(>teI?30Kf2Za1+GODVxm6QVtFYg2lE1b$j1S9cV-CL9Enr^BAJX*5aZN znn93t!)daAgYGW7IWMG$p!=>pNyIzA(<4+mqcavcB1JN)YLj}PT11m(eM198&nO( z(=ZG4SW>oI-Tk|(VE15>qwKcj59&YFsgZpe&|qG(F7}=dXL{p;bI5k+ zEsFgz`*OXV=F1<0-cbvIqUd(v&^6Z6-BXWjHGt2TSQj^!D&SEd`-YWSW1^4T@FQUg zc5ji=dExadO+iD}QLa!d_9uf?QDNKs0N4L)+I6;Meg09M9d)2o)6kQ#NUmA{RX$TM zCq&&0G<1S=BE=$bY&7ii5o%;c9$qWL1Nt1IX)#av7_;L@r)SiSOZBulX;Hl%(pl(a zCv(HV2l-*y`&^VwAt4y=;A4qb+)%IL@rZLd-=#M7T)cRaC#9$wIrp-@a>015o{BV? zWLN03u;p_l6i{Goefk#?QS!Tq%QWB-0?v(nEjhur?4iRZ6kbx~$?)`3+Zmx!q|3@F(&G`KoC5Ie-EGWiqPe!)PZWzm7s9PIWK<;JPja;`Kwt>`GrAu-RCF()k;ly= z+>Tr{GU`|zmEk?>C4J}E_}U;IPMV!g{2LW8iWtCkhfB;80iF9cZ<9#5@N%p*=Ol@> zzc9ZjveIUfpz~!p(%JBy4Bzb3ZdYewa!|vfapht{Vb-G0DeQ(aY_=zg&U7J%Lk+bg z`@cYlOB#^G8Uy}a7DC*P?IWKJiP!9oS?u!6Mr`Y;pq2l|RgpQLw00<{;u5 z?p8IFrX8D{p72TVTchtxkWWvJNt;4KV zXDZO~w1JdgPI0F@fP*6)p0{NjJ$zy;po<@-F-JDrRQi>u8|+Hj zh-))@kLn%&O-OXWXxC;Hgr>Ob{|AV5P2h`$ux&$qfV$_Y(n%sOM7<=j$QiM_g-wV} z1g45~)UtuSC*t&f=?X)<;@cihQvL=&C%#-Bo&x97L>{)hc38F36(5vsRa)^0gR+5` z(F`BCFNOG6u>$%hinbb7xK`3R?8H~NcZME>EXRIa*=XJ+h`3i6=RGeL$3_LhC|>2s zrl<=*!J7usi6D|4*&PVgdbaCCanOtizHJ+H6u}|kl%3%mFgRlrs9s89*?!gP!AeK2()lUHx!GZx@96v=LFUf~L)btMlR5T(0JRKx#!H8kd>G!trym)5e1ap8bq~%DT`aToxCVwkAPT za6ElDaj&PXwuA88T_QOk)o@A@rr4a+Ai(ci+e4U)4cE%~wZElNs1JeR8Lb7-@28Qb z(#G1lrF>No7mro{Hq=sncbCd3+x@(nzZT_3SN(1XqGu-*{ld$}mvZ!L0VB=@QQd&q zD=l-Lp?f&iwh)FzwD2S{bVh+KcC={!1CXYY4MOhKs5vcEd4x6`RtnE{&9;Sa&uZj)jW}mSoWgTokU%6#f`Ly3RICbj>3Ma0UM+Ci_nZLMb?SRt=1ObmN6KK==mRw zPVnH`fU!R^;DA1H_T{4HfE1ioz!VEgEBN8Rb-Z*0<${L(`uCbNXepUOmS4tk6@!ab zcG&gzU$={DkDdzIOv{5+a9H|+)6#~KxU)}gz`b_)jMWKlIO_j+ zdmegRz6PwZ&3D~Jscra_3~ZS&wU09bZ;p&nhrJLj%m$^5toy8I8$T}0D!ki7(kHJ6 z{VxcNHtF5);niu98lr?fJ=Uzy$2aM^eb$I;zJn~@ogMC=GGSP9cr|(hgL*l3FDF z6Eh9&N2A=dvRdM+sJE#2mb%*Qb6tIeh1igG{clb0KVOI zL+?Vr2`(WLTs%9PzCW@EIyp@D&HtftSR-wwL2ZyTwdq0biwIqOV96ewTwO~H0J9g zye~LIP7Yac6XuNQn-{jrh%ETg9m$NOVM(jv=nGCeZxFqO-vpg{CEemR%>DRqab|@7 z+0&zt#bdk4loAtS1jr}kr~^<6D}>Hna!SZwVVh&shM9w7wJBL zN|b6m-aU42CD?wmIdYv)xfCenVk33^CvwOd*cO&#i2uEx zurt}gkYyFyS@s2@l!FVAiQJFzx? z8{3r+9c6@T8*97mSZ#_i;gEEje_Is2^Qk=wC}8GVc*7kk?z0O1_R?5ykHivR5iUU< zBk|e_tnka+7eG?d-Eq2qK>T!GaIDFH0UgzK6=ElyC2=D5f(wP6kFPX;;!4Qqqp&@f zi}765k7!EyT*>51urvDp>{6na`TIN+;B<+QTz`Qt){7V%RiX}}kM&fgF+?Qx3Z##l z|29^8cN5>})#I19Z<}xPdw1>6&h>X2zC3_y+4N1^+vxqc{{T_+-0^HP3btj;-(G#v z&o40kQIo}3n$3;3VCqjfva`}jFf!LfICRn^{9@MN;{$*(;hu-)6&J0FAvI~+R0ivp z+@YN@4Gp=Lp(tAf4N-Yc_E?mF+<8P8 zfE&)_#1hwWe(nR=3jL@_^Frurfk&RC)w@h%Z6{J^PfUoP|8-;P-q0JrUqvRQ`gD+v zH1)-<57Ua;HhVf&KWxdl z7|3_@IV}4GbqMkMP)jp{iUC5Hsp2PjmK**7AqrRsoj-5#;TmFD%GG>F`bnAc4lD1B) z$#uz$^iS%SM+$3hN%J0L4VM=|ls6W|90!}4zDXu#I~v0SGbOmFEl^r?@-c|_ugD4-h<46c&)E?%p>YYm9#V4@#6Lz z?T&18rsFz>c!TK_zcFI`nxSb6aV8X}VB#sO^`*;^-(w^fbw~D?bMLFP1s6$bQ5Bjc zA3%6T)}{hY9;8=b$WRs)Pg4~>>JVtzP~q9w@rFo{OaDW*1dANhv&Z?xK3JxqL+7vU zrmKWpB{~7E}rV_nSt^1{>rp%i6lM`R!w|7MZZbBUv%YX~90QTsB3BGq# zMgSji-WaXYk@_K5?GYd+9vU?`T%n>8b2ChwOEx>AzS^25+LF4voRX7at916-AK&E# z)p$UXiX?yGGecfkB0UNY1?K{UXz&P2QEer07K-)_sHsxlRdf zDFKl}b7iKCDX<|c;kfq4i0PyeD7%W*w<;nK&95GG=5A^vl;}~HUK9RpfJ|!V>%bdQ zJoGZ~lP4Bmp5j$7xi`gZ30=$wzsoLrw$DSKvji!Or#=X3>V3IeBNB1y11SF-yJ#Va zHC)gxwR*W*!CKj`#5aBZElF>fCH%9c5XUbx`y9P~NMmpz$4b~$@&^Tc)mM9b$Ym!Z z>m-AmgWQ5;#NauGh2keJ@m$ zd*}FEz1QTa^5dTZG!}Wmn}BpO2W7s&4M@e`vTw^#V{^~*-U+GSoPX4*8U8#+WYFpg z`k)#u+27mTk@IvIg;`v3JTSf9FZwubwNPI3+5e-!gInh)WzP5A_~>q`FM<}8T?B1b z4XmqmGA3HJ)xSTG{>+anyXz^t)+*kw$;Ax6MGe9zlH zLSi#sOY*mO26Xu)&cy(KVZ&dYAEVd@tkwuJMt|OivGJJ3m8D3|d*x$trn@dR<ULH_COu^VEK1*lKSawmRsy+z1FTA3=0a|7L;VHj!e z+V5yYjj~G@+b{_8ZTU2FKk`hK1{97Fkoa|@sprT%%*)8O?6Dc|BV0bfiCTNJ@@L1k zlZQ8TKysU=XryC^m#(lkvM`OVj+=Q0m)@`qE{fR+{k^t5Cq>f2&waDfb$-f}0OJ5a z?R!PtH-|=4j(x#c%26ScwtRJ0?*6R}HfVSEfG{s~-CeZ7ivl2qbPLVp5p>eelWT7t z?YTP_A>1DN-Iu&~O^wyosAB~gOv&DfBG16qOyWK6zdUV+3%A$aln7{1q{{4y^nXARqwHkYRt@-Rl z7jace0UY_01EMTDY$2E;S-%*6kgcBsv^dB}j;)E2D#SyaB+GUSi4x63h8!Tbc<=}r zv5Q;+F&!R3y9>$7_)ByT&B~<5{1ZW-A=#VnuH4QksZkND-yS8?=Yn&WI;DH;eixIs ziK0Xz*BhW>YN`^P9A=6Aa*$qo#V$(y_w2$NZC%O~YpPt89L_jX=8TS?Kc+49_^otI zy01HRkVr1~SyXN&zM5E{H=KUzYGvP(@saZ_}2(SwRSNNGuqaQ&NK@ z@rbwSs81bat(*2nc%PMwDn;nNn_=G7q?!~xCZFfnW6(KLP)N&CFH?Uy=&K;Nd_7x! zQu^j@gFERRVoLh;)ww!-hK*))YcYGk(T+qoYd9-86J8lmwL1f2qR**uHX+M^kHBdY-){h-yn2 zoA?p+0`+&S#ElDIDr6L%`VjNXw? zNaGxisgDUQ34Xu)_zj}=l-*q~eunv;Ynj@6B>5)NFUh-x_i0#&bF8Zmzp9tFlnfgp zcNbKK>!e`^ADzz3Cg3&t+9YH7mH$|aN-v6TOj}9O-u;Pa_0rt-=Vv@d={JP>2uQ^Z z#w3{-;2AJa1oNaq-AP1snmqI)t~KRMRs5NW5xYVAj1pl+yqE=Vh1W=0p#PJhylp|X zDvPJBtF#)v$PMrw6ve_ivF$*=_LXBLC2&5EIaW-$uQ{>dh{b<{RU0SISY z>HlEL;|C$tn#Oa3XzD&`cLRwhiW@xJAmv=Xap|^Tk)gbawa_398C^MVS?OY{dq$Ye z>1=&?@bI%DK;Yy7_BsoAB^l2K{Yw%ffywsfD?~s#XgB1-uB^Eygy_BWEol`nuN621 zyY#)n!Dr4ShlC!SAvH4vFE7CAx0MbO_#c48&=}*j5}qLYj*qMyEROs4nM720Ck<@g zv(LBgJ|Mq>OVqv!{sBDo3vPLyA4D9gXu|qWK#!N`6q=Q@O|+Op}@FEPex|-rO|LHK=TN zT(D$4TzYcpdw@lfem$Wngll?9MhICDPvv{R`$Z#{v}bc3+O0V?#MHeh8u`YRp4=g{ z@Fjo=`DIGe6t8{e82;AAG?ymNo|7|~6R$J%t39QZ2l)$ubj|0_{5b{M5fAz>c@S`Z zrB=_w>*PXvg~O$6qi4Zf#jmqCAW;%rf~zN;=st%9^ro?s%t*(Z*4zwX5Ifef#QQP? z#pv^%E(A;=Gr;=!Q5E6~`?Wh=4{Ivi{*w{dg2m?gXZc*~SgUgyoLyd4{eIp*s$1b) zgS^k{?DDj?WVu0Ai^EU#TU4AY;y(nIXryCYn61Zop+ggZTbthi9f$hLl5fSeHa4=LDe!`nEr zj@e`IEt+0ljmOLD6(L}5BSex`lUT2`TD9g&0}} zNP$vnN3cd_(R8Fjz?9L!AiZ64X28K^*q;R}P`Klgk79;LHi?Z3fHLNUinKPmxX0`M z_o&tK?sY42aOkp`zH7N167_m81_!$Yb?K>f;~h_S@?W3868UAkZNe;q2_lXeGl`}Q z(>boC(tO7%e{<=%^Z+#9W@hNzFeKQH~$Ldp%K&b4DOz)SM9bZYN< z_#{c7J*uCvFf=qb`t0cy4aZfq2TS48PMejx4dK<1_;qHFg}w-bIXazMcLnx%pu+VM ztvo|vuJq1veY`*opL>|)%VN2^vvxYRVexH5{ewJrFZXAb(OyJPNfi7ZUT^+aO?GtZ9Ydb za@YA6W^YaS*U)1V#qlYUh_3u@k6xVZ-eQDr{D8kl^Z}H(68zPU=Ecsv2Kx`d^g)#Y zeKanG55!Q-`dgvP6)&GOo0#o@QN*&?08aW&sC=j77$WhC%N_XF8;jVHJXZL8J3(+! z-tGG~EeOUVqH;X~T42k1twg<)X#QytGkJZbDaF9LLv5pdnd&}p=<+5gE0o-J3h7VMey; zc*Hj@UdoxMH`{0?v9*go35f5X#^WMi|D~EL!599+cA`)m6XL!(A>4FplsJl9nh_S; zJY?MRKk8DGP-)_8+UI2JD17c?wcO%$_$wfaW&b)rBDq|73L4-;r6u3zi1_+_K$rj^ zt0AK!`n4a6MbcYJ_j1PCDP}~1dy)SSdv6ui)*Hp?26v|rAh=U3xLc8+g+M9pR-j05 zEpEY`qNTWNaVhR;ffgxlDQ?9I?f<0DoSV6rtGPMzoVne(+S&GfYyH;ye%l2e>qi_M z3?tAE4tOzAMdP$Xc1MWl3`Z!)c)KpHeUAEc&eoN9NQjAI!jX`L z_o~m2AD*AVvt88~i@%K0N4R(YKF~1{_HbGDQywMht>6fg_C#)e2dh;1Nk8oSkFsT) zq3%}@N?P*7JjMSWy#jV3aaH*WKH|bJG|~P$QSBK!Du7ak_nB1)vr+- z)!cM!KHT_#+u$7)a*UYM1q4^rfhp$`D+`uo?yuu9HY-WoGLzC_(->5k$lIKX_i*fQ zP$@}opMs3wT(?hwmXa&p+*hEDr2_r?p$A_aF+>Bu@j}w(T!YL{1<%!x*-Lm$SW#~3 zZa*0810yEy?P4+-gv!C;$Yg4p>Lc&xyR zy8x~Vy76+CBlTNXe+Kt&b$ZL6K5eie8?pgGT@vC(5f}t9tdYo#-G*DNoo|9o;uDFR z7I)kA*ZwV@HXw#z@ct1Z4Y#_bV0E;UVwur&FI0?N$AQNTWwaT8wX;0Ioumzr;R3x$ za+yj+_3VA!Hf7a%3UsS5LKzu0=zHJ)dSzhJ2J}PC`r`3=&n8<(T6RReK*^uNHfX6` zOy|r>C%RwAifnn%+rqa|F##1SVg#izY!jP5;ID36&coQIx#bvNLVmjcWS}tf4?_XsF7sG zhTdOwc!t-;aE21$^V5@XbVNoIjX8p3h)IRr*9hoYj3)ep`$e*r^F88`-DK*PY`U$5IO*5pJ1LtZe_I`a%-L zN+TaX>Ol+QIgP8#!bBYf4_KmN50S84t-vyfyv{Q}#7A7ySo06KV-|H>v{BBZ?{n{R zXk_d(1=$vtijHl5+h+U6C23HjwRXvKT<*VRQsg%dM?ZG~hf2aiU&C`-TG)EtAZK^N z#Q?EA`TK4bZWownSv12vf5~^ThjDvN05lOAEnlb)cH74tX~DPk8TOTyWR3PW5v{CY z0N6Cb^;Kqmzwd6g@x4koFAu1>o{^AlUq1s%=7hOl5nx(mTL9%}4(s=8+Rh125bgfU zn35fjb+ny~TIjPxBHn&@)=5LK_wXYY$G_~Qx!*$f|G~}w|8dd&kIparZ=6CxgrX;k zqD7y)Wyx%FUil7}c!nZo`8gP-=xfCFY24=rzZHmwJz#scM;ya3QKOo|8E}ve zv80$;e3V%lY}F{)Z{lk5dhYYie*g|H41n~`rP~tqw9=pKR!hxMqb!@#Us#`Ml7p9( z_#tc?gJ!}Grj6PXJ{!8IEgiBb&G`k1Y@wmc8*(N~In3mb?!LjRJf+C_!hj(*v^GGi z4>6-02O9+Ibm&Pq#NXcay3I&xRft?-n7XsC6kpV!5thS{gcbyPMkUJZW-ZJ6-TgyOKC`I&~rQ}6)CW#<%oltxth zTqrBTKsWoihHx7YBaZTwIiN;3PfO0u9`>o(rHVqL$Zqy&aI^R8KgWX37tfu>3>HTc z)hAl1{^gJDZ|!iYWglc8kf39`PXgqtfqCAGBG(+%&Hy~Cs`R%dp=a79APuvYa&{)_ z_UrjS;nyJoS%2z(uE0+YW^Lx3#Ud=W16c zSE|*y6lyZnNG#9=_?VpmUmOCjlG9h+V#Q(|-srzFRg*HI6z?nJ!nRq7YQ1q-OZ1Qt zaO818YGv`VKhNRwg5;Kj_wc&&9L$m9*?Q%YFdBp~cdITZ207Z#Z(SV{ZgYCwihNjO zULSLJY28@um|bndyH?R^=T~ynzL6fp)R6vUjKwCQ9S#62C376~z0H1P&T~$8UC>BS zFcQ$>hKosDvRP-rzGMmVW7|skR00>bu4>4n?0MVWN}>&g_~KX_ht0_}D6@v7B5wvEpwn%?d09g(7Mk zW^>C|=%%1ky5dm$q#wC znbqk_G^+$(3H$o7owAq|$ZcADWEYAt<{dafI8Y@4rr9=v!ScV8Txe!q)5`Qu$f(^8f-W%%4I zA>nrkKN?~q2&BRh}+?AMI`I5-46n^lWi+E zE9V#e!3g~yEzd79r(R@zT*7KFDJwH)=M;i5rGADB^835qYFZtCs_CQjZb_)%Q-{!% ztt+FY5(nnBf@l7mnRPk8Z+H8^JSl=VEJK&$ZNr6w&(LyIA!Th)(i0)P(Er=~L`1+7 zcu>%FNlT19cyn`^VstvLV01fWJ=9&1_a;-n7f;c(a8s|aaVaz4QwUjxC~Trz9s3SP z>vUzhz+%!p%|-2vqF9H1%F8DihQca_IGi|N5y!z$mLx9%g=*>#y&7Vxi|zhp8&L zWL6mWKMr1UA;@1@p&@G4Vj0M|GO>*h50EK+rRC0&_udzY1{#<~&cOWi!0T4x-p-MU zboI_B9I|4EPl+Rwi_%9jUehnfgvuuuV~AEm#>YR+0;fhzDjOM)@F0B41!yTf7vB3tro zPqy8h44i3tTP6sRPV;%A5|eUK6Jx8|?z-)_vLTbA&zmuovDA)$obqk~Ot z*jG;e{{SP$`GPceV-(;{>uLULI0$eZp9Hh3ZlKGT43+y^*B&1gL#RM($-(zscp9>d z_j*E{@xws$?@~SPiDov~Zcbs~M;asGu2!vruqf^QkZ4f}>1n9W%Hgj&89TiSZBeuM z8_J2g4DO)miuVS2Ua@BeWf2O~tnWhoY6lMBH{x!^z{VQ3b(Xu%*~bkY2U(t(MK)60 zT2WPhP?fi8O>o(4o){_|!ELfwHbtz@&7)_>mcxtF3R8DI^(PXYpP?!G)0ok9iY;ED zC}3@MD<$st`pXCh#F4f7M^~$y7UcafIUU;m0@BQy)>db9`0D#^ZHnB_UUjLWGY0QV zmdn-~CVJVsbJkB>?BFJPx3`;ArwsXsoZ;O~+=)St-zIA&5ec74pn8kn)U)KuQuc*j z31ZDm-+tr+5w4^(dTgpaiBpU_%)7>L)CCb}E*DRSQ=C_wka8;;^nBu!)@`Hk`M z0ohC$6#;j|;8Xta-*#oo)f`%TAEp4(OVWb?JhnB`v!$bC?8jGKc)5((QtJ z5}=vs9Nb#3dQ));jpGy3?=->;Ns@xW&X<=-4B}1C@+mCxDCWDI@zuT4W7Z`j2%<4U zL?`wSL*p)uTt z$vUjUwQGi==CW_g*%wn4G>mYbLnG1wz_N1X9x$(}fm^x7pXMJN+-L?d8+BeV&w=i{6<_VpjFaxtxGmjpZPjC{7>XB9T>ER=Xs*tM~hpkNe zst?XpxP*QjL}py5jWa{VO43K*`x?*gCnaqQcFkBsK|E!Z2KSy$p};rIn*~u_f)<5V z(9MF@4;gZ8*-$ij((E$LVWdWNl^z!N2v17A)}(U!WU3-&#I}aOpm&;;UYp!bX0;-- zHJUow`eM=-I&U}17<&p0Y1i||&YrFNJym{U?>f)Wtc$+rF}X|rP;R}5ovYNmqE9t? zW(gk!{{!%{vpr(TebKezzttR%5xf34l~-+Y;i`!2bE3)d<8aL-zq1RBteLH>{*3&dz+Ls8 zb0Sa6;Vhl7tJ=qneDpc-98DZA1o5>&lc)i~W2}5bK3HM)C2QKYoBlc4bHEOop6yuy zcO_VzXYhJ(e+GD{T{7fSRiTyhN?XXJP-lA$%SjFWcYEvNkw;(3X!Cxi^{-aP^b^u( zuFT_9w$)+&<@KG;B(sMEVNNZmfx+X^#!NFNH9}4td}67RRI}_#UjMGb*n5huuGk{a z)g6Y{mn#>1jV&GWY2B&Gh+57p(kY*pWO+Y2Xf50;-c{4V#S9J4WRN}F@fR{@sx1Yu z`zRd0C7i|4|K2VuqLvR|llluOkjmo(cRGCMxu(U8Klc68$90CRAjRhU@3NvnLh+Dv z{IDBqG=V;sGE2h{A*V~skuccKe%~LrkgpT#zLVKMK>5lmJZVB!nA7I?>NbiCJ>UXc z6D0#E@deEoe)^x_%}>nSUs71Z6Wck?M2{~Q*3ZE-5Xo^a63<_VDWtL1TKLk?p zRi)C$)AojIH{AZPE>en+E`Vzp0*lzFaLfw~SPlVB22lML) z%RI5`-0ilP8-hTE<+c-t=|sEn^Y6cstGo+xh(xncwP;h&4^(XdlXHZId_oK zM#e(9dPJ8aetii%G>p1C{_gYOug)M(`F1s-5?skJz`IyIi8+9SYSljp;M6$+)h*5$ zvXS!#NWpDifi$#BGajXw>z+P?bD!!C7Z;&4x2+RkM9qE zaR91JuVZos=o!J|+oa_RS28k4WP<=!gT!O+1~0*vFYRi^D#nGa)13FppI=T~ECRE5 zsIX^8ejrGK6%6UjVGH3wLET&8F|Mj^XC_EF1OsX(E{H!7BPkc0XfN?8<-^=_;Ahh% zn0LQzPKuwaMs&n*6Pe$Gs!#-W_f3Hbr^f0iLL!s8GZBSAD@ip|QDntf&r}5LQVg*W zuu6A;5S*7Nh98JT4jrq7XqZv1_fY#AA(7NnDLX#%%`wM%TA<+ravSBTr)2TdlxXBt zO_rA^yrTKMdrj{*vaQfb8~lzW(-6FK(IQNOG^#Tq^#BVOaqv7#6$cE6pYM+GVuIol z2E#n#;h$d$G3;Gq^>iYK#S*YF&$16-@&YNmrOV2Im7;EELDy-zNGfFi7OcDQRM&&AiuC=3!$4`3^T|HL_kZB-F&9#O|fJk5TF~cdTc2 zM(DzzaDhf6czjT?l(OkJgdCOQ;>G?DQtufItYcKs1`;B}!eQNAlG78YW3oW` z8_}K-NM_8SrJZg!^j%{A^uzH_!h6Rk>!}OT4iB{=$f)u|QPb9?2)ST;#FPtTteb?- z8~StaMz(DuNn}tFBG?^p9DgPqYk6~XoHGF{zb_mx;K5or`xKzMB@wt_A@d|T$a^p* zgtGr3=bDpV8zdML6qJ6Zxy0dIU|E9SEt5G;6uO_i16}ue@HLF$YP@0BqVB$f1fP(w z<`a;P$&9bwwGjxk%0~5ndLNixtCfe1@HI}Df9BN7nKX%q$M%ewhuy_$n;XXZ>BMku zZnf`2lR5M=d4(1QpO=DkOWpj0!O#tw3V&vgRGiajaa%@)qzZxeGtp^m*mqwKQ?uo8 zm#bcCI+Z}oe0O*ezuODKN1Bx9#P5?8TfY_ij<99b`Wo}9`@;P9gx%KQZK1Frjz`F8 zU5b+*RG?@2QC5}XbKVl~ zd)zgirEbKn+9bxmL?QhR?S9P&4!N4l0c;Ej5`dxU#|7etRgLeFvTz> zD$?$)?ktaNrCM4B8&nm(bSOe5hCBjrCySwLEctUwGhzYZ#g-CHiZfx$ARP+~1U)Kj z5&hH~nkM^W`{O7chA^o#tl8_MS7iI}twUh%b^Mxqw@gsaj5A3;{_*C$+SSH%_g|Jw_y+q8uIfAd^0&qc(JiSZgPV*HR@xaLM7bO237LebOnB2Hw%b3K8H)R7b%Bv8U1pM}d-o zeB8t&+O3;(V#nE5GQ$mC*P(H!WPh(eLo?B~PTS?^gTL|_qiQAmfX?t<#cv#A`#Lgx ze^|8D`o{+bfpw+HFP*+jq(q%Px$Z`5f|KDSjSP}k$1#@@7}>I`a(!#YrJrdFT9)=H zb*{TY*WI(8E`m!B*kS?bx6N+$!;Xz|9Jg6TwCSR=e|=GrEZN_O7qPwG430&73!d?~ z7|FoxZEDc+^XO&3tV`rzYX?`)3MPqNOkbz-9ZI~X&ih+F5lW~jDP!6bi*r6&`kBd! z<GzIxla-- zq5tDaMpvUpw@AM(c?{|2eNKymn(wm9$UB+mCRLYR2GF2T<3JVlP?>@r6_#(@DaE0M zV=O!yd)O&C!q?m6VnlzH-me*?FowK%-vLqd`?X^64%nVz0*M%Z0(w_z(eyJYz_YiHg~ z3xeaUBdfgY0fEY+qpn2fL0(gTLVpsjPhy(J4n)5B;g8nM?>_Qa9J#^we8#>+QeJoW z2O<-Kxg~uSg}*Y0k%qnTGcLR98hK2~k%4m~5&ka){YrnxV(jI>TB` z5=)IqWg=635k{r(ocmrVAGv0>`tESFzXx{T1z#v5ZnO)?DCp^@OhR?Q-q2POZqG4r zR5@cfCe5z=fl$i`8;G;LaQF;bH2JQ$n1xr2cx&bKT^SyRjv-F{W9z~v7U;F>aCq?F z@<@@FJ65R*z&=Jo&qgiOqC}S(Uq;gTk0WoV3(%Qg_3}WV(J*oS_5L$Gw$5D-;7Ysa z**r^b#lrKui~aFKn)z&3BQVhLLmN%(!w|QS6H z&!Cr-$_FOu#l9B$f>?K|#Be6Br>1ifQcJYW$-koe*mwg3k^@B(@h)r>B@@9b`ufQd%LxiPkKgf8#fcCC$)5m=TZ_A7Rb6;EGJhF@wps?!+%^~!U$F|0o-ASA z-;D@ULUkH~@^!{pcnf@-!>f<_zT#PdE*c5*i#YM$$0a%UU}OvwOWls6)D>vM&F-=m zCPHPT&*Q7(ARFw;em-CQo1Mi86{wFBZA#5#Q+AiAdH19(Sm9gP6tHu2|M)t>xTD?X&wl_-Wewdf$$&OXifD=>IpYu$GRjdWlGiva zqmLiy{MXNR){53-Hzm^4gkJOjL};G)R>%m)%)3lexaPuu>5DAgj>$4tNFx;}9@9@; zI916E28M&*0I*9VD7z`~RaNU{2lmnR9GevCEKCXlpJrIT)!ueH7Mbji_eivnqQ~_O zQti2)-?yQmaVD2sNcx&TNdV(rwt#RWQ)_)!qKXM%OL+P=P z_}vCG%45Itl#}lki_dZGVYjc}-;U;mVbm->j57K+4I0eHbTYKV)vt%Z2Bl}PKkaoZ z0GW#*8Li&1>x0Y0kG)28XrXUmYoTdYMxadw3}i9BZ6;6K=PHTx6_2HE8cCZy3D+>G zOWMa4|0FF`xoO%cHGMDA)-Ax}eoQEieVnAgn7`C{nS6~4k%AJ&rmjntsTvSp%(i~L z-^@u=eL?s+lvZ%y?I|iM<|8^mO9bgRxo~Q$DysBF?iHs_2~m4s1B+?J!?)}7MA=pP znUYwre$uIh=%mpV4B~X?NZK!6zRJ&O&EB4tmDL=QuyZQH`#`ys(R!P zDW=y<;&a^2!5uLvW^M@Vm=^jfGujQa^$-|uo%Z^~11Is=rBb(5K=OOCgu&vzYc@~o zg!DDr9xjHQZvXnuqnRT$TGk|Mp=_tEAZaHe5queJV`W}whwvm>nnpS`Yl-ft`yqY`OCqVcmFdK(cVzCa;%3)x;B1oDQA#C) zIKgYO;Ya`Q9g26Rkr~;Ae@QX?zled1^vyyA;RdBINI|i(xA(xNe>oHCDga>7xNw|W zY^k-I#qyw-QT8oODV~*1Dxu1Rc#qu^ii0)6ql?wXvAS>VhrF2Q$DV=N;23{rCh_e* zd|K*PHrlUVfT$?4S0N5CcX; zFIFYGBcr*f0&jM;NsTfpCsm+*a%G{2CMces0AnXR&Fp~L$Q36XC#xU!r&!si3vEWZ zyYGEnHvXEKlRg((>a|P!3Q-}jIK60nY{bD3E~Yq(di~5g%yXu=oSRbL1QA3O%z}Ch zV8)T4v0!1iE!Q3NhP_EZZF_i(kCGoN^5F=K$FDxcX6!&;nY&HO+uAgHzpRK>v%Ec3 z;I)4dWmLH_U@GRA(#=P$wd5)s@dx{I64 zrHLb@VlztZ{eu%0m_oR75!V`*?Kb#xeC(fc^(!XIv8!#hg^1w z3O!`gs26TNd$Q`)fyKFm z3&Tp{oEmTE1DSWMD5kEMLM!YzRS@2arnKaRO5?S{@e7t^-*4Z{5dUneDvpvlL|(k* zvn#Lh{B`a)7{dI|hfNw~N*Ih%_`G``Bzx&?)RTDMAzyX(!)R=-{ zAjhoD-5G2rRkl#h1%B@v&7ft(?7-KmA_{lB!r2j3$8QtaX$Ddyk_?E#tYc+qq5W1NRZRHn*iVdK-s2Fj@5Y^wjL>&7k^YATw z_$@w0mI&e!3dEV-l0Ld09RcirwlU_cODtwCp5mK9(U}r0N=`E_K>U_{=X1R5n>uy9 z`@7UQI5LciT0PCvG9P82DB?eO18HVlZT4muy#9}`!G#vXT=b!7!Y0rk1-(DQX`GC6 zM+_TIB$|-X7#@ei&VzFkTaVyE0-l4%7yg}PU{GieFrG}0}H<2y#|*4HfF#Vw-e zVQx)P2F*POZla9fIlkDU36*H>f3+mV!Ee=x%xH68qO5gU>9Lh%DNY};86vb^}Bfryr6rneh)^T8qM0r6{g)kQe7vvnt^pG@Wjv5^q zOFH)nBktm)3a!%3)0eW1YBS`J-8=?)#=87EGrIIY?~^xUIU@m6RJQQ3T zGhlE+t~r{Rh*D1Wj_i0l!rR1DE9NBb{J7L2rhwKnvC8`c$v1x>vQvt z9-A2`h9pEHRUin~F}{hU9dE2*<1=kEk%N^Ot5u33$!y+<)HjX}P1Cit zkSz4MnU_5SbIrh`P@n7G;8g zw3`dJ&O+{>g2v5*+jBU%5RH+Sq$-sBG>v*sB8I-NIWe2$eb^a@z<+BIiQ9)aabSte z5x=@j&1~uHVJdRdbm1%7?WY9hVUqlR1vvtpWym!AFN5* z)rGdrWR`0i-3X0z1=XzMYACJ)2!#8)Kk4y_5%DMFiTWqz^;eW?jY4^iDL9yio%}3D zQi3vKW2S}=4BB14O{OZXL+2?=AkuYsfUefQ=wC@HHDH9wV^Lab zx?h8VcDUF1r=-9r$4R2%(@uJUou_*jAZ+$m=lRk8uf$1ZzZ2UJG9bT+_i`5U5shbY!do`P_g>dMLFe6eSUTKKK11!0&GMBW1z2M+9M8X9$j$895-Nc|N zh2B-$6BlUrAJ%b1=VT zw`i~z*{k$%(f*Sua2@8zndx*JS>`HEH0p>aoL-aAjjVnj4PevPtKv|O0=Pcw#&5Sm zn@myg&S{@No^{}ke#w&D4a=}(4ViYi4?ls0CGd)nJ!zTCj~!E-~ydLDARcEu@HOgHl9jS-KB zI(t0-?}w!ZsoNGOe)mCuQQ{3XVtwjwmURn{F66X=E9gUo&^4w(*uaCqMUrT(|CR(u zWE#KYiz>TTo_@TNy_RtLsNZvZrbi7zc@g*p;gfBT6xV7}@rs!(NlpJ1d4?emIz%|V z@{KPQlOS?;-rL6}JJ7Hio{bANYy*@>agmmw*I8;N`S-dw@LBZjb1Qy3;mVdwrL0F| z*)Pt737;IcO_@bkD-vi@Np#xay51#6teoE)-qpRZO3Bq6v1B4 z1);zt)P`sC)4f=eb9g59@`0%33E|GEQUkEDvjqruY?2i?Ep$uuy@OOKuKv^N4_VLf)Us=DzGKj|> z_Wm&E^yZHO`%*Q!d_k63*TLU!G95HC8qR!O+YgYPez_y%f05(+H&HHfCoe-C#@Aeh zL&2WqAu1D|!^0_GquesI=%@m~F$|RmSywj^_N+zuF0Er8VPKUS0c9mjj=mg^!np?QC zW@we>b-(V`P{ax7bb62npcJ%&=E7vXTXH24s~z+bn_wE{LC>qIpOreuQZ4?1=ZF@sHOrJ)Kebw4kB{3}b#Ih&*;4i!z-0fvN7V<* zfnHtW<5~KV9hYVw1ltCJ5yH*#ncZ%^1>l)T7?_@{w6FcKO8Kjt?)$Q7Ogs%ewyCZz zh|B)e;27UlJC8|*AYNjLSv#P_k&8KUi-Cdicz{8UY%=2$MTK5N^uA`M65e{Y_;+21 zX5FLd2szQO(x0ed`8X2yo>;xP|lfgk@4GR|GIej0BDjnk8;^8e~4W{dX{u#CkDFNA;`JM z>7rbZhLb4ccqCll9L@3Fk~>!5>5s4qEH)#sfk%jY?zO z%)W@?us-}&Wvk(R?c~TO^v7OnZ#qv@eS_ra3x0N~fpK~&?2A3fq(-T17K-~cq!|1e zGeRoz0d2SV_4dsVxp?8dMK=6A9<#2@Yel_mMUA0^cj5+_ML1B_$T?^Q>ZKyR#J;(i zf0J%&qmi&yRyJ)#N)C(waWSALDdzXuii~c`JcQUnn?OmpoyT#M+0)2Slk59Kn(3EF z)Y;%1Jd!W)zRk8?>Tt!6vn|_AATRNTJ*DXFSsZ0D zBZ0@v;WujhVZiW+-hY5y{eey;(IZVpDRDRB{Qh7QQ5?ck8W&aH4p6IW!^!E{Jb22q zcpC1L9cs4A#1u=K=tEG{Pq@+%<{xk6h^)IhO3Wf)WR$Tyc8W^Eo$*%*w;@U4QkBt- zB|@^WydrEDcc3{&#Gg=g#qEs7<6}B|PKA9d*1`%}A)^LGFB3EqTKqLW4f+y+^+THR zoj*EK)!L7`%EfPL?FuKmU^CI^yUW`C@|grOJ7R2)%sTAb@YiG=&o7JLHn~)q5{lz( zM|+W!|M;B$H}>&A{|Aq}>AN)>!PoKgrJ7V|Z6{t<&%j%_48W`utquMd!mqYL5LM{Uh z)jVzJHwz!P$zs^Yx)L!wku?1QD0K(OG$!TZ@;f*~INS>{ab2KA5axe7#Jja+Aw&j- z6Pb3T==QHdHBQo)*?%Y zeLQf!(~Yu8Fkdt62{@uZ$QwpC0!;zJB)R?FPFr`*EVr0x`3Guz60!wJZmvUMv8-oL zPun!;HpatOyU0%*6cV2lida@RXLqr;sQGEaKq9Eo`zrmg9L}`R{<`)hSsNhL**Jf< zzv>_t8EjR&I8-n2)nJ5#bW9>s4|s>z_>&n;sU0u)_;M>)$UjkPs;C(13C6@ov|CP{ zV;I4iZn7UwG=C_M6!Qy`K3-{XL)0lz5m;6+$VjMs);d|cl5t)2x>wxPn-L2Rr9CDc z5q{0V8TX4=bQqW)#KE*4eTA4dy69E!hq$(R6}kR(ud}W6?iAzfk?FixYEzlDQnhNu znLQKcmB<(tb0Q^XUd2+N5~&v%roKw7r0Ti;I^MO@IJgQ{%3D7T{Uc3~Om!SjA^0Qw zTMN}z@CKJ&B=u6GQJWnW>1z0F&+oQ)zZe~v$46Em_XJuBJzc)n!sgJ=67ND1qnj}% z)aoftnOPYdWQlqUMVstN-#7&Ouk!Vh?9lI8bQZ8g(=u2V7m)><_t#nqFbv28n@@KB z^!@p26ayRVLwiW}WU9hpDLjt@^%~`7J;#w|#O(*~l%#o*Dgyrm3&rE(#Ex-BDN(-I zl>STa>2FEr_s521sLyAgdWh>5)65y>=EzlX<^Q;i+s(iEstf!07>P_YGC;F&f95%& z5atQEjZmhkU{inMpSZb7e>Y=m$RiGAQMAf zLppsC9lf92ZR%RnyA0L!-CY7nJA_UN-WUeBU>G|?7l!jms`|psWV7C14^&KZo9(lV zJL*vyls#Tk7Sg=IlkqC&rk*xDnlFLa2qEMd8hvdh)CQs7t6h{w(zBS=O&}wbsfr*) zvR}?&y4=j4F-g6!W295i>O{RE?60#^)A4+{2?G+l!k!e#y4JDaX8Fy*ld^`>;R9U9 zZ!_zloHYg2S8X2Gh#ieuY7I&VeG$>n#y|{4S$;#?l$$s@6MTKzN9R*=*b3(HApSK z^}C68a z5E#sH+|1)4o!`Hl6{!FNrVYc3>?ky9@65(3@;NzE3*D z>f!K`c9$w%V=U+5UPadWOK_+jh{cbhvX14?^`KmAlrb(j)(iw-#f&Q{nG^Z+aHmqP z;2BD&)~h_kAEoL*4>%o|;xgQdneCAWDx+qp6E$|@65MedZ4uM{BWyh|B4jbJ4B#J8 zBSBe7_zwJ_+_RlDDJ6mEs$a7aM|I~PMjIrO?<+2RL)T>DYp&o9dA#XBn;wZcd69af~>jE%QzvV?re0Bm9Baa}Pfd z5*4>U9h(49Dt23;Fa+sN;g$FZfbfZ@6`3lMwF|QimgAm-_t6x zh#@o$EO)^_V*f2f_%|vnpdNfWvZ-mQ>7x=G5Q*(()kNb+l|>ka>BCqQeDe1(D(vBU zzHm7%Hu!nH$1$JHRR;`I^!G2u=0|E5l7mg@mBu2w;z&7j!wiQe^#1_yU~65#n%_t# z<(a#V-ZL5C0I0v@Nma;Q@Gb4uAqt_bGtuf#58J(&XW`NNKCT%GCNrY3L;wvgF62bU za|$2;Yw{VWSLnJ_*KH_SwRLNdpzGfx#MW0by`Cbq;T}j-T|xcsMHnFfg?6_oozd<+ zChL0D;_+k_;8emE;bX&B{G6D2Ku%A0@=JuK=UM-2N4K7lAs+HUC(G$eR!yUhx5US$ zKEI}=Rce?EGDbL2p#KhO&%}`HL6sq|k%$?O>G5O`qliX1DZk2evSSO&rfb;F(=4K| z6|T-HjLd`zbc0#?jRT+&WKgq=F+Mhe+;$BVr*2uTXgOXJN7u{hFG-~_+!_aif}GDp zp89CJ_?;hcd~*?*eL8r2Jjct!DJ!&38D&`ZMR4~;HbyLMz^FQ>M1`JGiLhL7ZnQJ6 z$!@H>%ViV+K2px1`m|8NO(zId864XrS33FYv$q)N~`TW|7#K$d*QBwuQlhr(8D1;y*x{5rk&6 zM6**zE;m#+?t2OE_MFX%nTSbyKDepN1(eiScrQK%j)z@ZEj{$2qRa08wQ_){NQMsR#!KPG>oY9IGaFrU3|K$OiP zyVBz}_gbpmrDQ*|i5V;cj8c|J zUAw&`tq-`iSvoqJ2T(*QK~;1(kw~g~A4RpDH%&6VIK-t{eNF$JQ9hU-(C_DF;@1VAW^Z?mY4DLLzIEV-q=`R*5m~RD9I~$$Ei{d+BdKKFlD;n7WhSDNX?ZpiiBz znj74UF=EhpN*94e-MZNIaxZmXJ({P~jx}JHs zAF*c>mNzAxZOj&%+P=otBnn1Yaz&>*Nk6Gbx4u<2cw_^!Ee|l4>;<*ZDhpHYC9@;? zN>!+*#g>xpJ!g6d|ms0UQf`eWCY8y~`AqTSt% z=zL*_Ups6;IQV*L=n_ABE60PV1+jZSGAPLrWhY(K_lKV4pAF_b(FeJLtP#+2jYCcs zTk_5*tBZ5+zxVs%lE$g^oPshgyIurwi3+cHFlO!2>!`F!-UR$s)lKO>fIYVV9UXovWoyB}C@S*j1 zI;>+!vz6*-L)N$LNn9pW#kk4*>M1%?<%8zBCDY`SN|0_oXIS6@7M*qfW*JiFw|T}r z?L_qO@EZmGp?i}%T|03aHwk+QoCGdfuH%Tw7rjSP39x=1zQjOg7p8h-!kzdKbDmDH zkNM;R9|^lRRv2;Hl`|GksUTj1wpZ~G;GJ~}y~}sBI`)Qlz_7K9F?I{{W=eJGaj7qf zPQdw;MuRxx>G6qV6pDn3xee2YT%Onh%%*^1bh+qX&Y#?}Nc?{BQXC`L?9&ppHGtrD;9*bIQMJ*vT)BQ(TxzL#8rS{%L z!chCwf9e=SPH~i?^a$W7I3)=6cAaF)d6HCq&XhW16hL)!8IQ+AE^~Pi2a{3o{7xKt zKN(h`3;)annB8EiLKjS95~-^foK;tflQ1YtHoq-7aud;YJN9H)oD(0wtniyLqrw+QOu z74lt*l@nN@=38C!zx{FOAHBhoBkDU2m!=|#d2cl=p~U)X8J>>YB#AEFcplF(UwAUx zhF14o9M!ePBWj#+`~?Q`o~4@VR}=-=+;B%?__>hyb)t||=&5J_4|{L<)K=KHYX_I& z5}ZPC8bX2M?oRRI&`{hRiWDmZf;+_uMT)z-22YWa;tnk?MN50{+|Pc$ynn);dA{UB zW>zLyYbBHGcOB<(GBtHxiU(Rp8>W~XF=);7qFO+eEJUi{>(Cc+KdwnYsG0LT3XjXP z<9NmD<^)z6qQN{2V+Z$!N%T6Jk_s}~ynxIb(U= zW;5KHZ6uaUq`!~+6Av;b%;zj#*}`l+0J%>EFR$0efOzh&kBi2md4$!{h>tJ7%*B|X z<7o{z#rR(mdT#u#W?ulaJaycM^P-AwafA9VPdSMkL}n) zGAFy+mijaWU(SB!(={C5+gwMap`Cj?OvD|T4Z%k`Nj6IqsNDJAi3_#f z)`M*Uw+b!21RJ97H#FG8r{F&T z#+_l=dc@Xl0w^U~>TcwJM@#>YP1X#tM(c!8uj9g0c&LL#g@&X2ZttwN0zGf)GeC9c zl`dv$kIezQsNmGxo#D!k&{r>Al8oYRKhS1QcTJW}P2^n zMyu?kS!o0@)vwC*&zhr?_=zE!^1K?yGaWM=hMuM zTz;aK{lX+nO5QYXZqUo|BaUsErb0{l?7p-Gd%inkzAm{B@18~S4QDu2Iolg*>FFs@ zWpJ9aW3!iG)KEf82GZ-^OTCT!tPlYa?y=?3AJ@~5K~URy<0F&OSTL@M4c-x)zo0M0X@5Ouv9?Mx^f- zVP5iThU?UyCphZt1gLv6O#mp=tHS{i5G!`I+xo%54^o2(5AsdhUPYFpH6|(@z;nEs zD1_Fu{iK1*_fS$k)i+EaHBUK2U56a>Io_m$mEmN{qqX&rFuz240Ezdi0aHKCopeY9-l~g@-&i#Vd!}HCg`7PV)rlQz zmncQ1N;q?5GA({2W1NrT?e6u212h{r8Xb?6$mB@F`U5z(8QzqG$S6dOhQ8!6wn``v;jhcdfyc(>P2{1fN(sv>CvVCN)nPT4e9(767D9*Ji2SK+u8FSEq5 zoM@eleSI$6{KzKjk4;`KNyMljd*};Y7M}cG$aki2fkt zS*)Ae^s~F=CpJ1~n(jP%p(`=FF>!2m_JFsg#;k8zEH*{^2OPcxL|#JCIk%a|8kETC z-0!&gll>a7A4XAOL9Yju(fCnViK0bBz_?!`=psQu2(NW#FD-edIc7@7>~`ccQS<%9 z*;LaoH&s+op&rDvDcZyHM5V9F*(spc+5WQur}{d9K6M(!?y@%q$C*wl=)X)(XX$9% z7X_V@ZN4mB4SAh2h5a}v%8joityRtJ4H%u{Qix!Qglt_h(|di?HhhdLcipdaG4SBg z*wBXo#EswWq1XCnWIDg_ao8mkxp@MYG? zjVwUsza|+YWP**JlDL*ubY|jjYLu1Y(l{1AYU%G+qsWW|*l~F_x;Zo)fOOsO`16|m z=6|K@>Zfs{dm_|1o!EprbJd@>0k`H-g%sp8rsx6cBvpi2V*fmoxXG}{#F9i?Tz|bd z`lWgzRL**$V5oR8etmiw$Kx0ps`}M%L|t!#!$(~M_qYSRKhc0uU$8?7X4OzL2(KAa zPRz?rmJ!uYsZb}Chk2oAEX=wIl|J9mvKTx4_`#gWl9ID*?1y{RZqJq3I6S4PbU`E0 zUr~z`hrabobkOa!yvP-YaYPhHu?7T##d+f_ATgu!dOiZIWwmW%(4!HEM_QhLl_a?N z7C6U3u<-7d(%_}P^ZMpG+qx0)v$y}zd zuyhjG$R0}{SfDysBZNqaW!XRo9;Vy#7eRJ#SM*&6ypQOMioz#F3_UgbemX3+TX~su zSrmLrG3gB09zsVe8NUb!#!YuYAkkI&=xaahY6F{ z*352_-snN-k`*n_?GPHMCg#Yuw(;;uoguh+v;M0~UC1_0_RQWwX73V#` zP?c4{=^>PM@`^?v{~Yj9lUGj&6OR3FIf_h~0uS$VEws4m(SR}J@*=4sKP~%PY2J|- zGcw^VpN6jFNY=MB2Bfi9OBKJsI}3(>kN$o7$}Gb3uucA1aizB#=9w}A=Gnts?C009140RHG2pyc}usH1Nqv$ssoVifNesM@G~KQ{kMiF*4J89(@60RuTvhFFXgkE zziZ*0y?FS^<$hw?s+6YfaoG;7@At_99(lRa6j#e`vj>-1@z-ih0;eJyli6HU)p_C+ z^AwniniwhG>K$#aLP!YxoL%pmV6_6?`HUYFXu~?~x|_yRV}cgTwaP zE@Kk^l&Z88iB zqU`aZmxlQW6Wq1r@xMy8DT+}pe*Xjt6=PUewd!f7H1~7F_g8{r#m3XuxbJP{b~1MU z{-9MMC-OU`fn}s=$Amnth4=y!$|B|3r8=KuZv2ei^G!%eu)`xxZDj1cQ(`AC^03C+ zK_#To=DkB+pKgBwr*sytJcStL|bsLD~W&P0G9oGzft+E;F3l( zKl*$))!lF=R+bj2?u9g|fwH>ZL2gk^8wZXP8WG3aS1=aF_rFRs6siPJR$hVZcKh`d z#X(l+@id4v`YlV;Prn44jI66_TiC;xvoUdEavy(!;a4Dy=VoH>fglAs5iVqZy-iLh zk1Yltbj*APnMpy(cw`T(<||Uub?2Xr-9^h|zm4jo{q^yAm5Q?=aZ+fuR6l-~Kw5jd3My6YiwPdz%NUsj*PAD>HaCP2yL zJvA{#Cy?4cdv0!^Ew#?p6SECb;*oF=D_!^9n{=;86UFz+~u z?hC%r!dt9aFXCd>?lH5gahQsE+N}4vdw;$aNmS#*C4_c8R)#zQX!h_co5^h1GY)$| zc$!Jj|3iQP-eREmLhLYil)TP%mUNgKC020cvx{kxI{J18{9YkJQrC_G!E=|@E`gy| zypBIR7saUn5;JDe09gz|Cenxquk;)1!k~+UA`?NEYd&`ww}MmZP3(r=)#JkvkK4!)w}3+aRC?Z(Y@M87AE{!UTzKCBP6)qz7^5{+ z?+rgtI})K;;-|D`UDrH^;vCl zcYrAeqc)L+WOj*;%TW^_p@i}ye%}(Z8CBd|)^3z-nZ{yS4!1&{pxubL#@%|^RM`7Y zwQH)kAAN7)&xl`>R9?hwlVx%rts4h^HEq5-`gZ3l!+N!yWo<@i1bdT+=5xS?6whEV ze%R6DU%YpQU>A>oS(Y}Xy~T2LgTh=19rSbW%Z0Im`;qR^^)tc!i^v12Vhxuv_Pw29 zUB<)VUqBqJRPyT4Y6Epm0i|qRZh-WJjeO$;$>191+~BG3HFSBsu#bOgXdcd&bkcn) zQh9wKrqwc)Ws>%snkr%>UX|6)#O+PyKD5DfKli%UKUZIm4}A2(#LM_^^#xYCD%M!_ zfuXix*^6a$cD#eZVTLQ9&8@)aI0r2udmj5glbjFheR@=3#HZ!+tNz_i^)8R=PDReS zZmqKxmFY{yjSiI5KUgQg6p^&JSZaTXJL)QF_`chApIoJKP_R!u(`tz>ompopsf^DUPMn=bYQ5c9pRugGc`ROV@W7emwF`j1V3 ziT62N`1;N#X>9pZzxnGU!wPO7_I^l_&}WkUt}kc&jgU2ldRKl+c*~4#(>#_)JDwr?$?K1!E81>dXM&8;-QUY0Tmgp5b_=~>$r$p-lrOC4_dLbn3HiZRYj z#($ohK%`_}RP!(*AA)8Vsvl_XltjrX44uyQ{v}UIdy!IP!kr;czPqF*V$5NF7cdK< z4qM`FZ^&{B1MG7D=hIIcs){GB1r1cc7Buu?wAn4>;i$(1sN(K6B^&+(MF0;o3>yVAL{9K&wA0>i$HZ<0x3($8e@!H z+yK71w)XU=q_9D(gCiyc9d2rtOeYKflGl!kKuWu=Yg4m=_CzskhvC z&>V{8Z#TJn^ro2AJF?ru`l)X2Rt-@Xv-3hX_b=#Pb@xAcjc&qBCI13jbnB)~i;B`$ z4o$?c@klF7JU=>VGxvo2`W@K&A3#94>5=4V`jZFM27pWw|1yAol68}jG+>F_-obYK z@`O?9N+$f#FS+h*iKsP&4%Or*l12emFW9=4YN z3jF$o2Q$c`Z6Gz^nZx;`NTU-^aM}Zz%;zuxg}m4XFn^wZfb|RMV*JlIs^$mg7yC5P z5vkn{MGM(sUgj9NHis%pON=@eN~V4C&B7~7NSS^<3apF6_3Mjh%O0GLmkq?rhr2-T zj>9i@sNg3_D=;tS*x^WEi*nDG%Ddn%ENbI2)Y3n2WkOWQ;wzPYFa-b8dx!3r$v440 zX67U}cgdEmQ7W-$1iOkc%gC5S29KU!NaWe0 zU~86R?lZ*?%IMd~byNb}i2d{)CdKEpEpwkxi*Aqu`$(O8?mq>N@EZKEJAYJ>0}R(loW*t(axLs1 zQ_zL46^eMsNH-Ed+`|eK_}EEy)>hbVB4^D`0%OOs>4N6L6x!aXssf&T)A)~$Osjf` zpP`_AZh-qTU~I1_#!7(jd!^{NcQOu=8(^~tqZW~=Z4c3a7G*j6kjux>J4X_eX31}2 z)H6L>w7NvJ^xk21Ei;7>_9M+_H=+;)FmD5N_QbcH=IrvDl4fpUlzior-vVUK4}9n; zhPD4s&pyQQ)z(lfFZ}^XHExOD?Aq2PP4Pa!X%h58|AdhQyxzO){DhwJmoPI+p{)d=4H0JQKokcU5Rf@&GSN(fSLUfy?0i(LdJ-cHp&lkV9Bx#)G8r4rs3} ze6z4GsPHu%rrgbZS8Dn@!2>7U0^i{TS@CNJVq~&IVHJ<|+u`omZEF2USE0M0Z89D? z$-KPLVkDx@H=esev~!XrfN%4PapkWS4tLseRzGX7X)|1&fCjYO9JK#CT7_fG;^k2O ztOFQSrHj$(B9fZWG}tP0E)rj7BZ`-@e>kg0!0$t+&&_~2k|snf|50F3iQ>1m`fM}? zf;j;s3?>_v>Gxr1bhje+hLd!QzD-c(yCe3Agv&zKR2|zb~pwRcK{kUP859 zz6CS>qJ~km&kk5maP<7V5ProNYx+0>P~VUq){!QWir1aV<3gp62`=t!oD8^R_S`BP z_6?|*?tkE1QL>3)&+T7vsu5iKzVF>*Y?CkhkGA3`1PZthnqKrCjKJN z61;pe>z*PWoMuYKX^UjUlZ>uV*o+ZNf8DZ?MNA;-yyoR@Apu@kciJ*mHBnDH?U>%% zEvdo<)EDKCuOW0P&rkv}J)a#3=GpYv8(8x(P>0dFk*O%#%?dWxbF>`9+!DY{ynF`d ze39E56M%LgCg`veHOi8(S@5py($1*#=M4S}p=Z_OI0K&!UtGcnHjvVQP;(>=d`XeK zwlB2r>_>8u19Ed01>~5G(&>JJ)~I8a9u8j}4wK_>Kik8p^*nnmDPyICW(OXo4zJ)# z%2ChU>(*}w$9N;t+Px{3QI9cpVaVcDQtt?>=yR-EF_#WO0LQ2F7)b4{4u@oay@ z?2xM+|D);(ILP6P9UX&J)$R}r(X6c8zkE=&HI}{Y{Rp8!2a#ek-iNIGooW%c*WJm1 zu!2^1_iu4=R5fGv52p2R!#0@SkAcR&nP6^&ZXSTVNA2tAf_`b!>WgoYGrP-mbFbtKM+Z4{t^aUhU4(Gz(ciNzdijdxO_< z-d4aY1P5)vo{9)+Lo% zNxBQg@{e2D{2j3-WmUo(w5VZeX*ab;NmEo1FT|n-X$q&BK5Ujc+X&wJGkKsoga`lFAHwz^4va_M+MXmt@p89aKV3!xj! zPkfU2r%ll$kb@-O1d^x=$kCXEC132g9* z)*sr~k9g{d?AWtet44^0L;m!+@&bIOkdUu2Xv4_a5nMY0&i*oFiV~IZZlAnfI`C=% za%#(DH|2SKFb7&J4?!AdZ(pJ*nJ1sEe?AA7nV9wKo3A5YqDw~NOa}tcXccCl5+USp zBV=`(5**GSFfQAlJui@@=;)DtvoXg_<$u17-p^>+y%{oW6?bGK%`=}y||N) z{V9Bi$Br8v7-85iA|>e)1mHxQrBJ$b?$#Er^<2R71A?9c70978c`Y|#(v5WNho9ZY zJKv?rV~(vs#})YWY&?82Y`>;@1zY}h-vonq?mrYj;sxTKabzZz zQN0tGD}g<#)FG`N5`IJE!YiY*(VNy8CdIkL(+*?*yzh)asJWa-lLu7X><*tLoY*~Z zQ>WGgEoee(p!l-t5bd#oe|uADiljiweQ(yM?;hUnsWSXuo*-KHE72}t(k0Q8#4)~- z3uLWm+auo;zj*xkJDr>jZVDV7;5_}{6LdFZcO zu<~Av^zCi&!1P&~!SBNLd(KPSkUz))^BnG$dHT}?Yzryb7c$#kz5!ski+4Uj=jjI9 zlw%o!BV@%?)C9KB0+)AcRFL5AukY)mQleSuSn-4AH-gbh*1kLHiBAQ){j%&Pmc99t z@MA=>?kU`G506MWS*C<I+RygP| zYPrtU!}YU9Vr}Mti<3{q2Vz_9_cr%wUIUox%kc_)eD>R69i_&1NBxHS|Es|GpR@h{ z&I7r*`HMpr_`~GgQM~fRNqdlkzo@NORz8R{nK&fbf|Xd&5zBMOI{Q#|l3$%m+GEk% z{ov02(p^5b9ru3deA^Y1;G7!vB8*qkkyjd-$SK7slZUagOUFXKFotg16-kW0GjaGk zXmb{Tl{K1fcWlLy_<;VHCsY^*gM(t(Xi$l{3_BG@zvdngb9sw zJ|6w{MKt8{PUKQk0!H6FYWr3zlgHMVLS6)8eJor&*lg|x#ifNv5uOousbP&$Ew8qT zS%g+YTBe5JiFB>@6fO~gz~IH?_iu|+h2fE%E|ipg1$$zD=lyU6ovVp09?};nh?e7X zKBr7DO!{G0C`Fp!+6aCdBN#sgGBPbTMG%h6M-wT&dFko)4meEtTCM-Xdq@4`CL>QV zzmVPZ*O?!Q1QqsXK2_cDK}+-i8d`0>JanC0k^qUT9WOycHMd>&prkrF|ND%@(~dRNDIwQ!YFN_P&tvG3$SPCWU}Z*1S8kjFWBVabom=r-pTLHtz@r4z61e@lwN;3$ zbWuZTfO$8F5X>wYaWUef)6u9XBIbYU!*ppTT5>LQZ(}_?8AGo?xMd2A3=DftUvmezq>V$4ZgJ7 zd7eaX(7Rb8D6QHw$KFa7xGBk)JJx1TA|n9Mm3Bxj3~lr&6qr(>U7oVCVhU=!R~a(= z_Dps_q<-^!{*`0Snna7V#nYzNqPCRjj~iyZeyblPY4^UGq_~yvGHu1L3q-=q9J@{a zLX@fU@cGvTU3MkjRG-`2P&nr|C&?8V>*B5^KhLkMtIMf1O4mFyJgD6xd~EX~m-DYV zWt21uOS#G1>2il1hMp$Qr2+&m-}i1BbA4sUUH8VITRB;WO5B`!P4v=m_!ySvzIcYg zfu;j^1*l|F3n&RKKYfvk^N=B56PEOmBv_fq*&r#Mvgpdx$|}uzp0AyohXf{$ZTL>K zNQQz6Rd~c*l;WHe0y5NCStA-n?fo4b=n#tKWlCM}o92K6pO9Tv%2=j_^SfII2HE0U zn@)o_JiK`vtP}@iM{4DGq8RO!`IL}Zp zvSYmI^FQ2rJj7T2{oTijaESV(Hm%PIXB7rzY@GH^JhhrP-oZ@M)90W!g=&>eG1r{+ z#?O|@*!>e2T~yV@s9$;gCd9l4Ap(9~R3R3{_d=J0CF2uidc%VY{>l#3PA=LVccb}{ zN6q+m)5lWoU}Fv)cR_4&I<=wwsV~~v`t8aJR8AUdl9LMIx+d6USTU_L${GU(@W3 znkY5JxZS7pIM&6pNi1k=*1jau>sI7M63Rm;nAEpQh6eijITsdko2fWHf6XKVgj_Z3 z1YftVi2f#ht

      qjmFvxq{u@NB=|ev!2DBMQKDu6`FEA7!M@o8*xzW}x05OH$IFTf z1fChTq~&UrRSpmkf(b&_mLtx(J$_xpf7FN6aNY74Q1Ur9+-4AlW2|*xXZ3}A;qdYN zMH`(P_-=Hj%(|-O0>iAfhbrZDb8og?b29ViT=97M0LV)uLT!7_DWd5IS#&t_+~!hchxYI?yN(PGGU7`zi(QC}nboi_0U9JzZ6ts&|xWq-AiD?wN_@KLOeGs?a(L8dUKh^p*Mr5e|g(FC^{ito;@61x8aXX4i21b!rZXuhyq0;Oo?)6$4E zI*Y{c#!68o!yjYUtfmkHcs+WfXt!2nKk5hzmScNx1@Yu0qI?;+1%O_t>_bV>pot&s z^Km|V3nhM>po}<5H6KpzdFrD9k|}R2%I`zsBon?Ku!+iyO3mR$UegjYBf-Lu&ghc& z0s0M@3{;hA5DhipG^yOl1|VNBF_2k6QD3V^S(xft3+;QL!wpSX<lAP*l{(7*XplsxbCmm8O zrtr&YUjK{ui<&o8tULe#ea1vhNg>+nTk+=VG$0L+lkN!#i%dqRJjfJV=``9Ic8fmXzvC4F{URZqq?W@%lW z_C~@IX_?|#MSm*Q?HNjOUV<*a*z`_(YUPVRsKj7pufB*b#e!)l#1E(Kbz=byy8zrj z`hl0=(T=^j>s`9RDxR|UzpfIZ>*hxW^gE+O37R6!&WeZCjz3Mj^AHMWjFoz=_lVAN zqFm=>{49R83Ps;ks%#I*iDQ>8^QbitTqdQDq<56HAEe12^M%}}G3Y4o_W!Wwg;E$I z&pt^KaWhxsViB=vzfHs<>2h3r+rbwmZt@8%qfud~)novs^cKh5bIH7p`R-~Z-ZUzB z>8#!|2GuWp9H|u1J-{tZpUI2%VNSXo(?Ohai10`#aDlW2%2*Wx-AmiF>*}7RXYOYC z9?#!!sV!7~*Hnh&Xe#KPOc6j*1J(i7b$3#`0!41xeTEsP^VRezS`&Y!^?RZmhK~W1 zU7CN8N=H1_Lfg!?pVa8RkNc6)E(iPp$#}=x>-%3o&h=Suq&wSLfA@7QH)D7b1a#8* zTvv1#D0mWoxfpm}6c;}>t1=H=q{s$+s`IUM#=+q+OM7;O6H~sXX+Jks&0AqOEyP(< z>&)Jj>21;3o&Q)g#HpTD*|Z>RM-e|yBfu8yg&kf7V7gO&$TI_ta?Gn$7jVWD`x$<< zJ`sMVvQy3y8;aoI3QR#IjB8MIv3QUj@n}j?#i!7%#o*DmdEs1bA6o>fbfgHeC_RG^ z>}S~`zRHFeY0%}7{0ATkBe|qGK4}mCK*>O$`9`D$s$UpIs+Wz<4mmGOT&Wg7(YeB2 zt-WjeJ-#BDuZePn<(Io#>q?^~jTAW@bV8(}Pp@FQUm#GURCT-;$t)|JED1Z*F`|$M zZ|2Z-lzb%~ro>gWKUIwZ;mFHMU!%|CMXw>wW#1!#oqMJ4J8^iy88}#;%(vcbAEB=@ zyvx+{K!G`(c?YiLSl`K1eugAn_sQopCdNDqf3qvZsa~8>xxg`Hu@l{Xfd0*dr=`A& z6{Yh^&{z|BPYnjMdt`EeOS?-ZH#E}?C4JmTeowm`yqO;^oM=kwxYdxj`FRm-Q!72TmRGL>2>eAmNo3x&$&EBqMx>_F+Lhu%w?w!a zV?DyawG-CHY2u0i-8!&Is~AfJD5=(>>m_00Ul@a$=Q{JNf|^(%*~je6jpc2P;%h`n zzEGWa7s2ZVb;~kgG;ve}<0L_{;D^n1AVZ&g&0V*2#DUnMV}}fjfY@R)r7Hhd@Guj( z(<~1S(82Qw&n`A}Q+L>;4J^$Q71C4rzwXEXA2jm^Gc(I8_1m4&FJmRUVaWZE#wP@S zKmpXIoCW^$Ws(Z-rRVMqS;Ch5B*Zpnt}iv=qci`A->+pvh7Q_LF-Af7EJ339c$Qp{ zru@=7X97F?+tVzQ;ZQGd#8~p-O4O$ji_eg4QBi; z71sB!=RAJYq=GO}h_O1+t3s*m3hH`7>$n`!?pfK7Crb(^`a>Y ziVV67MkaaT>w=eyu#oj?9hA1I=Z+(~-nAh;)l_!u7gzJeqwgn$^gj<+%OAG!2M%j2 z?i%;|zd2sK?9s@L?wEYYyWfn(uf&Few&jkVoh>WN6@RY$<09L-ZI0*Aki*_cQ;RImO7sSRv^kdvI0g!=qpB&6f za=N~JQ!o4-sIe1%2VZW{`mLHM2&UC4|G8$`5a2dJ#UvLI)$WLo(W14OPY;jE0gG4` zeLa%X@}v*#&toSW5(YlIr9Uk2e~7jspp#MMmkCnA|1=62=$w3F*tT8H*X*$t@}JI< z-i&M5#$~P65&M-cc0e4G@G2qY^Rzt8MW|xi$HdJh-b_I4Y9|m3KwA9yBc>u-GyP1| zRJ^aVA0gK9A`U%fe=cbDw0eQ*L)X^(dmx}FpX?m5l!ykFy)_x*kgP@4T?`|pa?BT7 zw*mWPk_B7VfwA;4IIXkmswwf0^Xh$B-JU4bU3UkQ?Bl~yIc#A?0A7WRM2OPr5yr54 z8kS!W3c{$Y97pPt>n0;%dDElXmxa?zXU`;Y8;mpJF`{Fs5-om zp=C!<$vR>CwfmMqy56JIx-Y*V87tprGyvXLVNmg6?>t>OfO3qypa;z&>;!8Y@GlZT z2q)v{;4gP`1HwML61iuUs~cR3@@0eg!_e!?xdE^Eq8>y0ePFj3BOeMO^#d_kL4>D-U{h{d zZ8ax(r7bFS7=U(Bfh-xZ;dPsDC5Q3pac}$KPk6T#3hk8X_KsIR;NdkWll%+-?9m}9 z^Nm<2{TyxY@*Mc{AoFXY+JE12owe7-Al=e{s}q!EWy*vsDMozCYI?Ml9F56H z^Vva(;~u_j-`mp~|F|@uVk5T!4qi34VAS_STV4_sEzz`|OEd1{Wne{(IeCv}TfkXZ^>DMq?|;6bFYssZ zbc2;dqq13V{86b1OgHufOvdP0cR+rcdT{>-MAgN~{eyy#)?yk~|I2B>mEg|hYm0>Z zc0CUn#@%NjTriR5&AistYJ^zb1$+B*reMGA;fyn`WXtsxG`}`IXM>ey{&KglPvC9A zKw$9WL!gRm;nxb$DcSn|N+kt}PbzdZKjs}O_L-)VS3 zH7z`kBwQS$LX{f8&v36m#Wa32=njE)xhGX#VI7_4RabFwy-uRq1DD%*PH1p7PJfWS zaXZhawQE!AJg_Bedbu9)60u26OnGL0@#elK2F^xk`)I!xuH5L_{b2ffJvU7-WdjEAnd z<5vuAymS%cco?fWm#Ccc*pL{|MEA`NlX9G!lw)O*tR#r;noFi_VLWb4BBs3l*OC|D z7wnOSS!_%>VjS!3m%IjdtAk1IGJq-krXAMT7+?9Z*4E}Q*R=<$P>)tWZiD^8X4hg> zE9(BLLGC#z@3*6et>wX^O>i!HC57XZcD?GE_YaP(8ZJK?Sn}`S<~wI%_G}>iVJ=i1IR;A@ zuLyOW>BTUMqCd8d+f0H)n|f^zT`OthXI zs={Nx7+ww6V<4YNZqa{?quRcHP7h1fAR2hdEVV(e;E?B#}{yd z1{#R)iei(wJ5-!eh~%&sHeVvmPNadBkhB*(qe(HUE@X98ykCesOi-_53o{u zDMb9?UOA400_*9eOlEnib0HRTGAb{JN6zo!VN7CC(Mu{wx!NFW%W`uDEwT4;6P9W{ zpSmFTBzX1oQK~f@fJ<(~H{lbCbve;<4G&PX+HYRk?ylb(oyL_fA%MTlalkT9^S*Wq zdKSJon`9O@*iCt7#?eNc|y0E8`% zFLE^>d!56>vHY^!6aq)YYh|S3Fl%%^DXUVb;jx^${|7({iZ{VT-OReOdQT4GXSh>Pd9-P&Tj4@{YBAs zSgfdMH4HYinp+uIA}A^fE6z756OIW9W44Yp%(B4?LR}4C!(=X>chVil819`6=hS>ea(CY&f@HmD9tl4Tyd$B%L8>XI6F}tKEOY(C z1n?3JvpH`Au9vArh=#T({N@oK|1oZyqlmVtIF_SCi=-PVP~GDK$0zsxJ;34=>CpUt zdI@D7z;8mPYw&00vuJg8iXifO7r*irz3*^$ibRH(l?YWSe^vxB!f_)$eQbhwbHy0iS7Mr#^9VrKULB*h$=WWP+bIq=-q$?s zBpIqLh_vQKwfDH7%PAhZUa}{X2`+~CaPkcv{b(<;#vjwU{Kvhm?@PD$+g)OGN>{^# zW_SAj;%M?=jCV;hwl5;7hc>_`zS1-=%iXlyoJs9YNiNMJRIaVvp)Z@n*M5>6H_q53 z0Wg-oTqQ{2xr>{i{Pb}Rm#gwY*4MUD=dK}4 zTzNhlL3lijg&?KPh%nwZqZ~2F=GvQc&KQ0JSr2>N$I70+Q)PU)UutIkS|->QY=$NU ztlwa=!ZYOgUF$YQ$dg(f0)Pw6#?hd7_B8XaL01PLj&TDD+<@j^!|Bb*i3HwTy+3gG zXO~Ay^W!ESyTwR-S%H;u_IEIX;G9m40D8%Uf3hmD_-4{S`aY=FQoA5UJ(yU3gh!DU zoXX^Q$Sa!3|A( z<{>acb*@xCI*j$#lzOOq&<|L_v1PcAOV;VzdPL?CM~&*U){U7k`oEx2?ub($TVcVc z{6AoRZ`{BqQqKD1Lj0C&nX|7E$}@>AaRjq_9Rc$XBr1=aFZRiS3rLwC6I4c~Y*OzR zc7bW@ok9CR$Vh`5!ESX>XCyp(j_-Ssac>)GNXd5^&b_3~0PZfV?1g&z9<_QhT9T80 zU)0*z%pw|s86MDzp(;HfU334l`;lk*HGUkO$5S)WmIbd^Q@btnpvjU2I@|xwl<@9gU~E7w`mJJtO0Mg3&nFK%wVlFKCLmWTQc+3%L!VTW3G88RcAkPJbFA$lPgo~mM|N92eRVOsxWL*@6BIO)SK!lo?LB8C z&MqRq8q-_zEO0b-|LlHX1SKee<7Ks{X^oh3R!N{{vf4g~MAJ27d(!1VOb9%A!`q}7Uq^laRb72Ch z*0`uf#~>SkxomMA>PE%h*&89UApI7oPOO!K6*bSOE*cV!%^V{2+@v_5&;QPR2tx9@ zX$YCJ_vkg1jo)%ym+!qzF|rN(ke#QDwuKmeB2i@g09r&c7Nb9`BbxGn8V5;x77t^N z-gg_p(ZZMwqKBB?R`Af@`g`TE$9Ay>rY(z?bZbvB*4$s|nj1;ho;EpO#($Jfd$lw? zxC5@OP6>jCLifp(J7T3zr;h_mVBo=?CmDfM)+QUjk(ab6iT!>23ZsrqWIDQq2l-Cw z;VjyUHMXA7i+Ymm9({hPmO2b{wB%TbXvv0?VCW~B1WpY_uQe|4y7h(RThGv$$Kr_E0960tLe>{ zCJ`Ni!H@6I&+a{^=lMqF=-RPlqHao|fU6 z5kITWV`&VT{>N~GYMb75c)WGnLIsOc9n`A#MG;t81fZq{xu(bzXIbr!zZM<&z z0A|4{d~(;Ww@(wspHCC8XH)xdc@mUQ3%Ix(W=k9*vDX(xcYi;k6ASgCbK@nC zCBc0ox9Ubj5=zAnV$31()eR!)mhJ22uhHa48YKNI?s(3fJ#-b)n1GkSka8ZJqCp%Xx~y^Umbq+q3P0-7}Qj7e)3IPEjGPq~KI^r0WK9j9ttVpxdduT!?nbX! zLPzT+Q4p{vv#b0*9w92)@$In)Z4e^z*?G1-6AV&LGLf&h;n-yPh2LqmIQ}j!yI#+5 zGQ&VaY_mie*$X|Eb`9De?VFshZ$Z1VCo-P3B}z)S9c{k++L{uBFm}GV%$LhZfYZTz zPdFg&56{im^ z_p&aGI6ggt?`Ip7chXKK9lrd$pFAuPdbqn~f5XGM76h$;6fA`ESUboGkfon#a?TKk%5tW9dkp1sEx$*Zm;7PxuUnx{GJy;`hmihugY8xF^+v{hv zmqR;MctSmYqvc6chMUXo0vN|)RhKUXJ#6$z9O!20qlOxHr#UFUWs=E}7N@-xCK*`_ z#G~HFM=v7mhcvqlW$b^u-C0Ssq&% zCsgQG-?F=Xc#C~A$<}Ua*H~X2Us?=mSai*Mot_wA!W*`3+nvjMB7V3cpd4tV#8o;4(mw`e=M%Z<20O) zJ_DMqJTIzsr6kuf$-&%eCWeqhQH<0tgrFnhZcpk-muTN;@2;S#PaDhV8p9PR?aDL|gaaw!AtjEg6)M>l? zdcVt=+Qg)_k{8T|H!0EJyZy1aTTEbx!1N~@!^sy6MP5EF)3gLx0V;@sFioS>)s2Q( zF;~G)-8a)Q&&?D!s|!VRm9VK!w6*%`;9M)?Lluj+o?P8vil_WO7N2^-e7G++xv+KK z6OoMbglSK)Wps=Ay*kqyKNiQG{bZ&5;wf;9(D>KzpcVJize}-i1WABG*YXki*K7Pt zCeMjU=wv;#jSW$G2_HsSZh!ZSwGv3#98o0}OXwsT^UT9d_kK?m5mptb$$v4#m?ZXd zuc*2npB8{wU#FV!dmbtVbSKN?UUq1%S`=tEP>GGHQzn@ReY8dawGD{)jdX8_ zux$N$G?)X{KbsuBehz7Ro}W`$%fnU~6_~E2o!xm8WkMHiS^q}r)r^81OZBjn{Nm9Z z*$WhH^szdt(Z`a?$xk7{ja-?SNy%OUFtNLyS4}C(vBr}7X!&teNOe?4iI5bZ zk9%-3{RW%a;dSb+e6ukX&FHC3a6%Z%+}{(!Me(J|e*mut6C(wTH0liTAc+DPZnzyL zAx=?nc`YO2^|Rq*MM7JRzA#;4^9Cm1CHlZ_EgDy`8iyj zfiUp#O|mr@@A)5bheAKS_aTQU3kpm{LxE*83Qx1mJr3vP(-+phPc+|WFJ+c4I~8eu z%tww`j7Gg1#=p6c^G|L5Do#Z4y^P4&#=5R6t<8#RY?2lm{*%iPMh$CwD0q?mlX{PJtZ;$1Lg&>{klk5`Jd{XBWF<cl-8e$`zNdjgj68K$tb6Sm^C!g!Gf9A#)P*lp_qWn?t^>+Y+#M5D?PaZ86M_H9b z{5KR`ky%n=r<~EqeH^%!GQROC`7Q{N3X*#=vU`;s*RD%-WgMZIU*O7Td!hvBaT~hR zpsD>>s4Z^f!u8=b7r6>8jl`Y;B=EAu%PY?2ba)GYEC) zI)984ua!G%<7=7V3o*x;IgEE{SU1Y9_d9>3_;y2ob+tssGE;v0fs||6+9gH<;(Xe!{KGM|=Ip_Pb|~Ge)~wtP3|gR~1i)1D+z| zAPw1+&|MQwf_g;dC#v9;%BzyNO#lPABk0scq zk!QEaldDZyXim1)hT)l-cekU-;{0@xg~b6}$#AO*J2MD11fTd(pZXK4f>`Cl;q8@f z81EPkK|VzloDzF>__G|`Jn~Ck*TB?P8{8~EQ#sPxrZ95Usg#xFt?svm1tU8Ryqv@z zPf{w&rYT=`8_lL08I5nPJ{8j-3A4IJjnQ~@S-x--t$yM-ySZ9Pl^H$PxK58Im2uU| z%+YzL^0k}!3o)j>{AR=}RPsV~>XpG{C2xcht@AOaR8%}J8#?`SFBtbc%)!CjP@=)L zdd|>jp}dMhE78!epo=SOb6R9_hE@J89g;hi!@{VFnmnCK&k?YlU@UO|B?) zi^NQK-D3{9eWpVLk%vH6p5QLXRc!fv1NGkZ+>8yWLR0LGp6`g?9a0nWm6sNrT1)i&>*4r)>(i+sN&@&MPgoG z{lS{d*2MF8uTjRCFquakCoiHihQl9T9Ls&5i15%sk6vID-J$t&p|YS0!D<#1OpRLR zDN&pxLdHL6Q_5iX=h+7Rd|a?S9ui4kYaL&F--^09TX>=~IKsv#=&`y=XSo%DK{~j% zU$R%yK;qd+Efvbx_Mq5amhkTDdi4ti``K*EPgfTwDcd0SHr8$)mGG0*)$|Cn4fZK; zd=pmkbvvYI^BvM`z_RY>iAp&rngsH1NQXFxpanEUru#0OZV(Z zlJ+?*Kx`k$n3e~n9QNxRWs=D=Y69fq&?j9nkUcz{<(BVP(as3rk5UG*X?V#)(v(Z~ zgeLTZ?7x3ox~qd=ino~`1`TIQ#ZP)a`kf!BsS=T!H=z&SMsjaegwa=?QdP%lkd@XYf*=b_+G-NV3_^0Hsv0TfznU zRU(wM4|4to5P6>5F^Od@e0%n46uNY^8P8JFslz_*?s;-^47a{bP&Y8^i4J=PKcDYs z+-~{BAW^(-_^v;QtZ|zbCrahIlt*aeryYJ&f2C$-%Nr%IrQDaX$f;y!ed3D7YT`~Ky{R<8Yuzb~OcEX42RIZuR zT}yNK51@^biut)j_)JV?lcCUo{LnS44NWF>lcQd?5{8I#vsRXEzp#p`UDr}=(<$W7MIoA#Tp#M;yB>Q^~Ejq+TV`F^Tp zxLSmvT9$jeM89QfO=U^xZM@vZc#SEqbiEHt=n;O9J7>e-zss!vvoTmydRDn{0n%xr z;z&;j=0u~4C>H6{5`w73%s1FJ05VIvZp>2=y8Q0lC?m8wI4#mB8y<~U+By$Vg zrG>9|38b@D?7vk;ocuArL&b1-JQUR(FMjO*S!O9wcLN?M^!HBYh*hMKxJ1H-fkDQ! zXpjy9>_p`^df4#pLhqK30aB5>Be6agU}a(csoC||^+fn50sa}l^~`IkH!>IS!@RT^1704s zza%?oU`o0XL(FB>>)jHOq?nrIOfYlE;~!TF%F&-e{u%I6h?z;nXMeR=hveMdYODL5 zu$?X3!6v&8)c2zlxFCsJGC2Fh)+RnI%*HIC&YMT5dV86Mn!;~-iwNm()?0>5VTOt}8R^0KAejn%R zkZk*#KK`fbn2R>4!#NWNhaw70Vn6K9PrsKHu${9qyK=y*rDcYDM4u`LwYog+VP;Hy z;jSN}h(~F~Qlhl{OLh_rdC_+irRZ%{cW*Ufz3j|U`rdCn;94=%$*%@>_497Y^d^8g zpuJkJ^Rm#Y$m-gnK&I>VE5U^RnxNmLP?noWQ+$g)%yoaj}$4i+10{b2^jBT`jf6c6I z5GagvlVl?ZN2Hk5rqW@a9Jw>CZyJfU-HywjX$Eo)kWb7-9n;jRt*^!|_o65$8>k#C zdPLkU1Mr97f3a{A%*u8re zX669Vz@le7#O~^nz={UkT_h|tp}X&zZda{I5OVArY?*_l0cnl$Xh&5(0b2yPgUHgR z(p+>k(KYTz3;U&4B`Y`Wpa}i9K7;*A-Tn->_ID$#13kOswYHfoH%yEjPkj*C%2iVG zfIya$3L39iOd_7^uE_kOz7$7%fbS@AqH{=BIEx5QECyV8EKVtLylXUdEZgJ=pVX^y zXOZQ>#81wtTwDiBh%9{7|7ve#c?{~gT99J`5(G-Hv%k5LNjYq}la~7H+RzM;paL&+1IMXvyM$tRp zBtZ>RuuM9S%t5bLd~7HyuV2YNX`nl3!O-oBa*`* zXfRWoHt*tT;qbUX3gQlEoSuQ~bMMmeb{E49ZQqZIwO6E-K+DYzXWIBjiJ8|PMH0M; zXt_~J5XM9gnWo_vwe=ngGmKZh7gFQW*>_U3p$F%#*#ujUm-ib2+=|OWGHcL>hw^Q% z9RR_l^e!B7+giM123T6eoC!ApT5V}|ZQU$BeLxQ|F6V@{M6>QefYAP?(42!VC$pB2 z+ThI}PByYKK(K%I^L09MJr{})F!4nl;ao0L(A_o-#SO?ck<@$;iDtO(i1TI&JHw~G zoRg#NA7t`>Yk@Cl*)v7(a(T~h zNAo*mzy!j@v+>d!B~LOggk_*sXQIR&-wQom5qfCpo(s&UUk#ZPsE`=v+pWy1+cA@88x> z#adFGnBpq*95<>Gbyy6lGt|Zy_L@O%j;NEICQ!k0W3JjR_N(rksEiUw@8b`og4|AD zCFJd#E@uUfMy#7$Mk&dP0c^jI9z3VNOsZF0dW}SQd3>_|iE+Wen0I`%?TMoLIR81m zpM!f!7W$W|d`f#!s5_k8P>T4~oe2#3)O691Yk-uw5m>8~fS2)0IIlQp$T5P^Mu9F# z46vjYVV7DI`}BP4D#lPPGo-Npt8)F?$-(R}yAd3`sMFiQcnJMKL4<@S*!_e+MUqVv zac`s*N;bf%*c3!&V_I!I1KSrsJA?HwBIF7HC5sF3eWPQ5i+#X?d{@xY>F0anUcq7q zZ*4kDq!no*24f&+cQ7Hn=FiyP6Lv85^rt7O@^?L1Zfl$S3w)6$II{UWnUh0}IU;19 zJsl-#hfWaTF!xuIgQ@0DJ=^5yiy5*B*TI(FIUMkZ~k>xc%KEmUUh36 zzXJ>dU1wK2IuQLF>{slaZq&&pfhx$iMM_+G#HTvwEF?#3AYn2l0hi-QJk!Oy#fstPYQItQ z`LFbqzZ%C>x#q$8mhJ5yUXI$KyLNPz2ij>O^jBN_(Xs{feOvW56{`g8wvhgg74;9G zxM2RU$jl>902g9^$QAJqpvam{?vHn5PyYZNQ?hr&=VJZI!0ogu`|<{V1@_H2`J7~$ zdOX%f{|T!JYw5Wnza8#jW zMv42MX!gZ}FOS;`3M`u`nju&bQr}Zgs46*{?WX`@NLn+?xc8%4Tv>q(5;iFmOpE+i zJM1(y2l^02eIzqe>DxJB3m60H^iGvXVhhPW{1;e=uj(ok{F;`HD03pi^I=c+kVbXn z4Pb`Jt<+P0{{w!r7Co+qS#SqDM!lRaO3`Pm_tCyOXNNmauq=jSB8G#TckOkaymySn z-hoZSzd|g0Rf>H>15~4i-pyXkz?ScTKupApqzUth=3Ck0`uF6?xk_^S0r#6`O*j6- z0_e~Rs|)O3;76Md4m!Ups*!U2a!&97Eobjzd4>_)Lsu&3c_-VpO$8L))+d$m$aDLS0E>wV0eG?>D@DjT2puYlN~wrW{@MDH+d4p z&{9dw6#hH)y;lMNc*krDl16P>NZYBpWPq+681cObrT;GlM)YHZlsn+!N(6n;igr;X z6XwHKjl@_$Zy}1>S!LTN9ggg@MeJGTwWT%5%En1!X2--e( zqk-i~A`rZ2hwy1`lVHHq@x&)Cmaw%6$S%Kj*M;9uS_YCThMg8$EbAqGdsN?2lNWw3 zJHA??U0h_#B<$j3@j1HQu?Nd5;F2uJqfIp&W9YvY@||Vk)~Wk0|AgKp3Y&A<<4h`> zrZ9z2OWskv7o41?I0a`q*%~r2=XmyO|z=!lG!!J+tOVM91YM&-Q7MuY#A(tg12@h;Vud(|An?% z>n7b2_wrD->!JPx6_vlJL)-> z(d+^~ymq%!f~?#<)Z<4_oRMB}2EP{7XPH+d@n(w+;>Z}|?0j8yb{zl4=1zZ`ugy}|N5}t$Vj!^=fpFK0x zh9(mdDfjhr3o@ObxKhde;Of@jE@MAGSTZcfXKVfd@L!;EdH>YR#0^6^-AjvsB4$wHq=wLq%9+7au`HR&(HSo;;l343>dD$a31CNc9Nh41)^baprfIKdi?5 zPVa^#UY9iad4w!EZkm2=q$jB1avp7)2=cy5t;l};$7wTYW$^-PZztjx4hh|rf_JG_zxjLH981%B)|)d7zWvUY&wzl4FHe;kw8;RrTZrq+eLLti9u$pqH%f)%3!R zTAk04^H{HyXy0W z+lj8v+>GVcaA>x|%?Cm|9G@5L*@X6Q>h(T4DDtGOgFL|-M}JQD_P=7iG=5Ud?_~+X z_g&a9pq=drUisQ&0N{!kF_3z7kIG2cpxQ<0mw3c@8XNziULEzty>2@i4EX+?7H1A3 zcN32CPE$NCt#~}n{&_>P8f)JQ8)u8*H7a+Nv&T%wm-(P(3Vpw`hRFLN8>M7jKl0R4 zulG*97)?OxU^jM$ACo60XMfbRZ6(ja#P^+$6{B02zIjequ?UPru-19?pMNmyD>NKw zLT!zeQ|l81u#vHbLreD=UYN*)Dz?>a2vdn;8CezO;!Fgey&Dpil>#x?)7Rz&e;*5s zSM}b_x?|?_bj1+vwUIF|EWAdZCxv{Ob{Nc)l-<;m_o#dr0R=EkJ<1Y0e*0M7@}`Tb z#zkEUec%EQ^_$cH zUd&u0Jsbfg+*TJnqxEwaRD;hzp4`em08lmUfEQ27vY+qy_UhpNtp>B|HX;-z81ff< z6mJsEE(Kh!`99O%PG>=#5d6V({ z>bE^Zr7XW-tPcSDAkvs%zZT{E*%nft>amEQd;`L{^!bg96r|E|ivXQ%U7Op#Sl)Fr zj$IFs79DOS zUK3Kqod^JHGi}zN%&bG1&ys^+Z?}HO>TQrxXF?Rh6vR~Cc%FvdLLm-ACC`?w8DF#n z6|FGDQZ*ReXkrv6(ww{v@IiD-tf)?oRojc@%2`v!Ei9Z;mdL(zKou ze?pCu^&9vxj7?u0SUYCyy5wU>L{z{WRd<$CIZNx<$-IKQ-w|rLQ*jD=g*xGVu&A$F~d5+Z~Z_Uq9mX zZEcLm8#Y1~xfAby+C*$me3D3y`|R_j?`fWy;Rjm5;J%1?Bq9UeaGofxcU&JoVP!MB zll8=TFK|Cy4$?I)|B$z*3EhmCNAS*Jj5>xf)(5F+(t(*m$C<)p%0C(V@t{9a#I#y+ zNAd1%pLWJFie-DeK5!d4346s!uf>H6J`ndg*{7$V^Fj3BkCxvW5Ob(VyIK+Cw^o}( zDZ)opl~iecPqqf0=FJ{4<|q5bSa3+RG}o!?R6McL8HKaG`+`oWT2?3-Vo02SDeh!U zWl~W9&RT2;_n)k;E_@-c`z+>kt`tO3#XTID2U6n0MhEhc>KV>)|F&t<8U*!Kp^-Y< zs|u!kAnLFkb4b_TGM}=E*4Rio!=ndXo~TZyw}-B%;8~`#o<%YshVP~K9p<&)NCFTx-Y!f(#GTmo2If>2kMqi)X(m&} zaT%h(`x{X~cx`X}#klCr6h%kofisF|?LkMd&=+_pthxL3@sUHPzEq8`#0fiA>&nw) zu_^2gEoZj>gYJU_B2=>{Hq(B8W<20fYy!VJ@24VzjTLJZ(ZH zsoi6vymuho*Q59PhGZ)vF9})Rg?aeF{YK2&zqT1Ezq-? z0!bvW6KMiOP=1P}e#NvSVPk_F*+{N%X&Dfg4DwR_)ar^Vpocflpfhpb_q zyx4MohNn*2MO_ril$IbhncDm+3hcTLBO|(SA8%_h`YG4YictSa_MB)uckRdq^H%IE zJ+f3QHwOM))mkHxXF2fv0uO^KzTpE(`^a)jMLffvQwd7f#pWI*jTCka=l8x(VzN8A z`2+4O*X&nnrLqpdVgA1AVv#^fOcJ*GF|qz z=lb@W(@plGkR}?ZYz$9*SJYbc+tYJV=+9pgy3gAFlzDDxvgHCajDnk7=0};MwRUPs zY`MNxDg%j8*;RRlesoEsWbqJ(8Y%W3vch1v6x_&cm2(@Zw*e#^q@_7R2v78b$-U)! zIhv!IN9B?q>GnUPT#m=gdb*}ob@5p0N+gId65a3b0v!KZgL1)^pO$lv-FNw)pL3Pi z;<=t9QTQY5Lrkj56=lS@B{!i<<66;@@80j`=5jVlC6s|&_QN!ap=fBD|B}3ZspyQ1 z*#6|GV^8p}0k#bgSUdTT=MC9uLeg_4zfj^w<`*wQckla7V7MguMlG-WEcAL1iYN^_0lfD zCye9-nt(b1`>_EGIUeX@f8%RC27LVAgv@|0zv!fZI7Y^N&)lxZ=?Nj9x7AQY!!4E(! zHtv#h>pLvzk6m4s1V-J=!|$+r4LU!N;`S}EbQuhb&Wohqr3NV2utKeANCPe>4!*`_ zYvuH%y)7!IV;#1MHi6!@Dgkz9fA0=e2p;bu`-KSE2I5MeqtiLOMlH3^6SZ2L4W}Ye z{q5nheo3PM6_Ae>!?%L7QOP2wkFVTHOJD7t-c06TZtQGjinV*JoJSFXrW$|H#->9y z&*5^yAEcGp{{g%anfk0AP_Mx+(vVTm`%EwtjgG-Q55KR6Pc$MRc2$9}zBzr*;491K zdfNM;e6CjnLg3{1dDD5RT16@2+^|g{9{~5ya#kc9zMX1dwHD`z0bf!GjPv1pU#8@k zv9dj3RU$GkLNOZ8aMzKG>WXxh_>qR;DcdWBUz<19^qZwk9>~S_PRW;yQ}2MJ8eOP8 zVTX}QEzkA)?-rSS+S*vb!IT@n8z<+v9_qD0kcI7>wbOJS1UXL}98-^+^DG`rd>Zx2 zNT?3oZ;&$;RgTjw1cwE!4icANREhVM`Egm@9&X4uF!8czAPPHpdwEk*JGPO@P>z|* zu?Y@sR))i^QPuP)QM_1r{RLcZqE7okbYxg*$ybWg&Yt8$x1ez;o+HP4VDu>0>;svF}%SRk@e{a03Gcxz*t)bu9liqG!SS2ja>rmodbA~%yT1=A0u zdf>aDUL6lh9z1z^mvw3? z>5L`R{;VvRg$%G9y%wHfYovV;oO&YXL>bGN<^0`|v>0tMfx7rt$2cCuXqci#pI`NR=9 z-WAFh&u)L%Ta3-6r~I3kmcT;J2UWS-h2vFf^nw~#i3h)LEnyj#7)Sc0&k5n=r-h~1 zpJr~Y6~g+8M`%6i+XKEmMM(x<%y#`;z8x16?vX#~4dX^x;0DTVf;Q<3A3N{h13byf zFz?fek(}g`NAw@sHcS-^qXM-IvpkOGl-UhH$i%34 zyiiD&CkkbYoAH9?$B-m;bN_phOK%6(1;-=YYQ)0Relc3?E0K=3EK8oBX&V}BK9Fqr zoh)MF(_JJ&&bfYJeDQm<_+zNX3t~%O22ZY>Kmu6k4}r0jJaYh6k}=xe6D^$iZ&xz?>mPI9>-C^3c@A3rms7pZ`5$U03NB^R{uYiLE6-it23t9BWswh*11r>Zd z8s3^7=*J+L+I-8|ZmINYrM`AR_(AzVFtB*nwY8$n6pgbnrgEI#5Fm8YT36iS{H?s( zo$f~ehsJbT&wTNOo|)(a3Xru`Dui~8@npp*o4QRgPZmq=!Css+)l>Xc;@2XgOx zfisJb{Wmi!em@#S-h>u=70sfD!Kpx*1>+OyOe09tGHqvHM0=p!(2V!bHMkOO0B zIEIJfJfvW%4VG3R4-fS$PP&Hqewqi1Hay%4?Y8qf4kz+HEbH5etDNP03?Yx9;9KE) z=XMaj;7J+o9@eR)WcBgX4VoSk)fOPU!p0P+(^AEYW%V`1_eOwaD79h3|5w~4j?+h| z%Bt*bst?denTP%Yeq`;+j@S`Lx zPL{La!gE%k{-s*e;yDroS$%&1btb-Z5c+hhp93LFt+GGu%J~^|3ppJclH-qsEIte zPtAE^M>ffz{cHeMTLUzKvOoYGi@?%{j%z%Q4&zS#BYKCV+GMiHrw^c{?0$pAF?Y1n zng086hKY&j;^b~Ou32Q=As`$)VDJU%l^)6GYuVBC&i6|)!t%9w*m8^ zH>ypu{hU3Ub6nhd`_^Qe6;60nvhY_Y_i{diDGoeuBeoGj6X##lKB&@u|0}I7l@G96 z`Uen!`Xw|Q)L6%{_t1~|*T#@!s20^&$C8Ses@+k#80OiK7@(P#$xmt6!W1r$WP$ek z04>i2b6~%AmchHlJG1*z#Qy*&7W=InG7|9t{j#h3j%cu5&ZmQ!?CXlB_}CzcGj#S8zu543opfmcR?08K

      bx+j*MU^(WP!O`Tg5qz3HC%j>+7|0{pg?dCYZS<^ z5d0mnjR9O6R-xID=yXNzp*2(G5Ty zG29q8pR}vKo+wf`IWa@J$Zm|v#f8Nesr4_~@2_ZL|Ct8UnT~=;nH3$!EeTY;pkD4K2)i%KA^U69UA{ z8~@NwUWPh_s#Ok@l7Ueq6H@0~MIs{@2$~9f&mL-;ki3(hH@L|+NA5Rm^^+y1(q@{{ zxnY_Ly7pmea)S7JtA2D|_!Q^?$!1@XnFTqsM{SSaP;byvsVsyP>BsVSV8b!CSyI5^q;Fkn$ zHpGY)VNEWXxgBj|+Ri#yfu8MBQk#rXW|6!h$$(xBn5G;EZg8bDHp=;J35G#!O$8=8 z&TrOMIe|Ip0IWCQo+ySty<)Kbx&;F6B9V`DrPBT?`04My+Am-C1g#d5GN_vbq9Zxb z=jf%}URKBH$6cZ4CkZ*v3UNK_uHJ$lPH?b5Ly5$L27b~^GWlv+5w&F%&VL#Fv!>fR zo*?~@@lZw6U4iw@ZJ=PV+*~w*E}Gq;rVrgYn)`DkQiFixD=?@=41J%$!Lo}l)u(%*mMd5#i_BPGz(t6t9=XqSKRaWY|}U&Utp?nfVbbI#ZiNw)!(nx+ij z5X9?5?j6>U2pVWG`Rj>z&N`DCm|Q=-O$#TXuOfGAQ-@@KyTdr=leGrVu)qGG*9Kow z|A=n+1td=3Z879X9oS&JMAFzTG$ww(OwNTllZu|gPzcE76AnY-m0z-6&L<1#sVqdY zDK?U``e_Z0!pzoA4L)bJq3bq`lqCx<-heW|7U^pJX|}A!i=npx*M{1*MnZ}X)q+Y} z;XbePvzKx2Gm-fMbSx}7%2i^`cC`%WvOO|0=7~bDaIxfF_P;7Q#sy3tBiRu}idAxP z8uj<(Nv2ovFCi8t*>Nx!#eK%x>bOAInF6nx68l*4U8`~%m{a1%)uoppmAUTiP-JEnNx=wtVT{kO6xR@wXfWdF^U`+bH3 zu%OFgqtgCE1=}QGS1fwlT0>`?YK$Ps_YLNWf4fVmyzuxJ-poKHgy>(gQ@7hO6Wxdz zbdo^o$t38CDka zai+0T3SkFNribu)=R}j1GDW*ZXa!xf#BsPB67eopJOs3>wX3IMR!chc4EJMvtXrx) zq&!1eab_@=^i6_hD5}n!Z^PI73gnGW$}lPqX$9H|u<)7yz*1iy4}pAokX+P_x-Fdq zP*E~l4`b*+u{v;MQadwf)Ya7CsmtdsoE{j=5BBvYCkxqAH6i1?vJcGM%kmIff!@-o zq1KUW6C^4@V_J!{&ZO?7)}YjKPd%tS&^KE7(|hZSkEN33lA322xA z-6Zem)+2}+Di(uw-6p*7HM@Q2Pe(JJgjg2tWi4qQwHRK*fhe14P*!iC?^_yF9Xn9a zJaQ$Z-;hs`yv};v>3#;%Y_LV}`#dFs0K0IBS*aPhTJ7vX^I870pPk#~Npdz(I=+K1 zYwZ0gd>uHNH)6rU3aVH7#$N}Xr@2~`?oSthyn3^{|G<&v;vU`MNXEtrLKfej&Y@Fr z9%Roif3S&QDSpvoDeApjM9`HdccElu-y~4EpSWLhKL+p9@~L*VCAMAA%U#{7KAj<9 zRUn4ljaGuOJ|?S0P*a5J7v4PVI6GtUwmlhM3xUZ(Z`IJ`Y9UJiQJ5V~O_MhwuN11R z&#J)NrCLbS{Efq$SVQ8M*RUv;$aL2`cA7@*Xb&0TlD@TaYVNhH?P}tkeH!f1P-J{D z$Co6E6MbBg3H=l*CFdshuFV12oh4j+ z(cUC#XjRglxz`6N!>gvPE6mTqwdy?rHEpu4OIqj&{Y{M?cas??X8 zc1H@e-_gdD(Qp~rGfU_Qf~+y)+TR_{6#ikyhaueANf%CTqw$p{=u~apK=53Sn2onEO@&rO`xzKUhwv(t9&d-ff?^ISi%Vb)UGWX=Y*Yp$eewFaOf@64dZF zi2o|xjm1s@Xh@uYg{B4W()O+V8Ee_iws=0!iu)4tAAt2t`IO+cmaQiB;ME+^K5;V7 zZGhJKa!xQgv8k!k1)L6kWoiAhT{H!3EOhND+lBtt|4anoh&OdXALos_3YW?BIY@ln z98EpPSEGU?J0V28mZ<@ec7YCs5tc&m0r}2yZA#mP85nTp`tl@+apOcYd>o#$ohH;R zJ(6b??2}ZM=P6k5Mcx_|lFcyDBS9+bB87t02%M2F$m)rla(1d0BR#G=oIF8Gph*(4o;0t1)0t$7@!g(QRdkdm%8j-u zaJF$KsMk>+?@k7DR|SEQQO6O_v*D`(B0CkL+qVm25Ols7+v0942}ytS&lL_FzWW)UsFXb2-Gx5}rarmt-rraN z=V~SyQS@pN-~p@gm>>Dx2z*ddl+pO|Ry#E-z}Vd_M+_@ZheEAS@26d#w_-<&VET3) z^wb3!!(Ut8^qZl@8J*Aiag&k**-1 zQ~{~dLJts7Aan>V(g}!wBLAIt?RV|<1=hh{*R{^(VKT;;bBysk_x-!Y-Cl{x3JQ=6 z2!VGti!cND1BJN^dW21U<%{wxf)AdgJ)5Yg(kN1X^Fy4RnZLFf&Z_u~Upd$NSxL=&w9bXLk>-|o9!lK5cK*DwVdv-NZ-K!7Hg5MTC z{2+_UqthpfhLOJb$ynDq?y=xp0PNvJG7KAO8Rfo?FSo#DU%I_1k78ZMyr?;ly8Y9@Qpm z;XQAu-n-T<`El-F-zX>!8QuT_a}vc*K{~g?6V~l#3!hh!ku6E7*6!2EY}eGztj}Bg ztMr-2EGz!}{lFy3y|IPa$uAoIX0FKR)+MP7u8)IgxCC5*zggEzX-{YC9kmFr*S=>`>WW#V~g}`T^att19_e!XW<@R4WN?~NDcVG^GlDoUHj+Z96cK?eZMJiB%dtG>b-ig zL@BYZRp~YbMqIKpE^Ut)k9~|u#*k6NOr@$OluiROBTc-#@o2KZL&Ls~M_8E0k}is2 z^f^BR9{xPOWbzDu7sNnW={xRiVzu8J?mA~af*Jn}oM)Ci$4ZfK$tOR_-Jvg%W7K^W z`KwOML(u52t~GbsHkmtVR_NDH-qNo=5wk6Jn=3&|rn$a|nqaS9IT16qsLmAxsZ31{ zZvO6U1^3D(r6O%94};v1XiQvSWX9L8y5ruutm#%3MvXaost=eSEAdz?(%HvI&P)e` zb{e#g2u>n57O#^!jm6|RT<`w0-{=VHYcG4|elZl}uhgu_tQbk+PG{4O(IA5G%{eH% zZqfOkuENJyF;sWnW|$>mlgDdomR(gvV8h3|IIpI7@Oqkijebep=fnQ8t&F^=39C(; zqBmHqMKr<9xKi~ME?K=Qp4pFu`t_o!#sT@4e~icX)X^qOUb;^ltPX8-8_2D3k}U*< z`IpYkTz^fscPB+I-PQVK=2D`@)p2zJvvm0XvYq*>3OmDt+x_yxj02o_5Pe2-$U{go<}n8T}+Jzh`xQzl^g<%@4D^5Q=IQQl{p3}y4zl} zkpMURK{1r8POo-f4KH!RS#r~KULtcaYuJb_zoWekWX^XbWl=B2|KPEIYxroJpPDG;2`nJ-yJjfU5Zdi0Kr~m)}R|7ddCJwJYaHM7&HYeAAIXNRR37j82f2?}&bL?o{1DY@Vp%o*q#*FvJ78w!`Xp5(Pd>!Y zt~uzHPAe+c^9hK#>u9QEy6bNf9V;r}Gd1}o+NX282>PfYf)quyU9B$Xl=tQ^>s{T5 zUd|ep!|^PHD#)08s#t02+D_<4J(fP9?$ii?7{f(hT%NUQ){V6C75NH{Sx+)-=)n?@ z#poTzhYf_6r{gblL|ufZNmksp&oHG4&7a)0G|Bnp&ODXCU>aSi!rRZLwB=&kLv875 z5*@H85_IVgf9`&wuNx>EgaT{`vl0*!PLkWiIwgB9nJeNcSG`cjp#2U3TtjT~-P1PP!XKp|N;N3x{ zng_VmpNWu*LNdRoqKz|XT42QVrLs4AOO0{erb}XykdKxS@~Xe%)xN%d58u9SrVX#{ zckCLA`V%pBp6c=Pp%5Bkom=;rn_Hl;wpi|@a<){0uS(==&V%Y)H^bV(T)NddbNmF8 zVZ}YRPoI{rJY|H$jfAeX%OjnHw|xGU=RNOO5y#~beexIb%N|_mC!6Y89Vhc5RC$J< z@iCHRrwGQA0`n+wx0q=tq!x>RY~h}%YC+EHOytuY5OOL$ac;do(s}S=87=qn!{;b~hgfTt^LcW$|`Q8mGM_}LRZ<7%T)vE<}hUIQmN97py#ePc<%AD>d~z1?F$=wq_D`_g^$znP-h z>kZ%QIB1lb>WLd*{Wr zZWAXHN9m*5sP10#EZmWMJ3{j0zayKXybhRs zsjn-Yt(yEa#gk7=g<=tl^>HIKTh9>vtB7(QgLZ3#JYuH9aTk0)Z0S!Dsa_yA0@2aZ! zeT{8wlkiq{S9w<1vY+|L_h@?X8hS-b_Z_#@79lKYezY4@%t{4T<0Y%qvlKL5rcklA zPyhX35$1{Vc{bg!$q2hnZvVoI$qD$DcH3qPl|6i`GCkN(@S@_*db ztjMPZhJKquajYezoi5zkN?G)547);am4c=ONw&k;F$KZVAExvhsa|Ro zA6y9LB@qE>gZ-7Cu8n!7-*tcBdFbq!CVQhR7(%+OoF37Di^8M#;4bAFgEw`KKtyS2 zGbk{XKJ+EJSklhaJIq2^m5%15DW3;-dW|2vbwF3y9pBH+=xAq$A--DkpPnj65_K;^l zd^i;L;;wKlc1YN4WKfnHY{hCR<)|#nrz*M?@co4O>_2$#iPz-*QcC%TunZf|F5=1i zINaG^?L&DrWYWgy_wNH^RrN1v{Kk0i&MT6<^v9CL3#?sOA%04*-L3YnnC*Y-=E6?w zX{>!QkJf-mQfB(7@l$kQ2`j&6;v?y8C2fE#pEB4Z(e|f{qA)ORrX2jUmtBS=0*d1l z(S4y_?s~ade5e?llxy6Kmu_0#Cu&}ay$WTFwWrYz3ry|FK7a)Ebup|_7sjHPiNCs~ z>vRPvarEILL#F^gYxiYRe!+effgwL6SaB6>N1kX|5Mj?Pfz%G|>us`e zMOBxvMQJ>UDaLiozP0NZIfUbH+FbUmnt0bpozZ9XSq{6e+rRdyA9e&7Og)+|p1%08 z!zBEsU|*KexuPjmcT0|x^Jd~I{+_Tr?2h-}F81;?)xXY+ka^dA6R9m(@S*H?yiPo zT<(|7`@SVAD)KvTuuCN~HVHD3WO1VB-@Jx?3m`ZtVw3M(Jy>N<&Y$8WEvF2Xb@64; z89&)61QOTN*cN{Nso(b@<3Wv`6oz`PDLQzlS(oj+nG zCg}@nKIee8?y!r?+^ z8ZsPI?-oPrM6G8Hi{^{=;hRWxxWMPn3|K%~Vm4l^u;!;IFT208C`fDyq1-h7Qy&2A#HOpJTYb@Pw(h6X)oa_V57s@d zi{@#VZaW3RvFS|7Gcux#T%m$9J|njs_?diPzy^PvPokF3+$|f6LGv(^S!98;g~HHN zuibc)YkLMfeF-iA<^&9Hq<`b>)#Ex`7tlCi*mlO)t-V5IH4Cxk-1bY={L&*b(kk?5 zcP$Iqv1wsI{I7I&u(0#CV2@6b=NiX;z(*Chnj`nKje2MZ<03VE&^dmQ-fRA|J!7je zj;wgPo$fO-Y#8f8F$RKr>gk-&>tSrtkEW8BwLaM#tA$s% zJxj-#8DXROy|R)s62v>M>nZo%JA00Ifydqcuk3;4?v#NWuUFnj*LH$OA{H9J_c?Cw zU)N>3^NZTgOW1yY#TbtRWTuhv>&fPTB#f(7N>{V@#=kzN?C86LJbCPn8O-R{+8r&X ze#b1XFMhlSF%Yi<21*v88i#JTy3Z_ zDgRlTxa@m1aI(h8ww!IT<@V^Sg7T?&b)UqdzHzbZh#^5T!^c|Ve7riJX?2&Z55pVn zt7U0OyKfg4SSM>A8E(IRk1~2f{s)1187k)-X0EZfBUjvaVHcslBEGXGSbfx@bt(zU zWYQy*Tn%6eyNS&;e9E<=;9E}C5eACDvd8$GARj@EUah_UF1)3J7gi7)*>WE1&jGmm zdr3`@eM4=Z{kjshS7r1qhd|G~pX3IY>(m7qxCr-Ly#JX2Z6=uB^#GjZWF4UnK1Kz` zTGAunThL;bOcLVHIqrkYw_xD*GfTI~=8c>7jFUWm*`45;B0Dnfjj)BNCh<$t@2 zP3sR1{5B8}?)SF-StwSuD?=?lRqLJNHlf+Q_eIsSHa3>hF?zrm|IzvNFgsjY>!`*P zp!Q%!Jcv#ous^isFdE6moP3?`MJO}t=W}>*ns7Uzy7Z%mY~mr|!*b=3VoZU5s^9zN zeV;(YBjSH+Z3$QPMmIrgYHr0FYm$aoL=%|qdSR%f?FdH%b1zVkkR@Edy4DWg?ULBq zTil{~hJCS;Sy6_IChU=5j+v3KjnV{!z46lqp>NoDWrdLgosruel;hP zF&(fYO~!^50#!m;=j0x=T*T!zkw&fqwFX?1#AK;rcD z{y%s%9unpZPBI}LTTqqvnpRqDgqci}CCVXD6ir}u&%!AiNq zl}b&@X?~{G;;iHl8L4t^S?GW8IL+De>QJ4*9#=Eccxwj3g^kxaRzDb2u0G50UNs56 zC5>R;T7yVip;RhL4FvyO-C%M+)>fzXeOeEp4XZdrOuHl;QT8l3Me(ze@~lP7$M|yH z9p<{{BmmBU#eZ0G>mOi$NUi}$_Uk(?HI}waxwB;a>6h5Ox+tQ84;BrEk$an_lk}`k zv|P%+p|#cL&1{>l4_}(e@b_e}p9FOJoT)@PDRWrx@nAm$AVLan5)PWhG}e_FCxoW=2QMS@5I?xtKe|k7&Kkpa_rULVoa5F^;!Wp2Uh`E zT>TYu$Fnjp74Mu>m>B>8i!G4YOwV#Q7aaKon7vABF`O^yJplM7VBpA|1u~tH@Fowj z6`MPqE^P|lf7eJSN)cr+ti z&0*hTa{_HgNYtj`h$iUM%N?3-Y>bYPA|5v6BS;E6pz}#!8u=EH9@49;&$`-s$F0v= z7IGPyY#7-qM|068@UpXE{{AI|Eeh{<@Z9<0o1epDcR$U&uTATZ^QM?oQL z)t!OW2&sGvhGc053Vr3ZC>!XU3W%A{N7`X9@<|lYps2o(0F}tzGJeuVtp|%x-X$7` zM>jel?=TNrrNTSPxtFRREL53g)p$HjI|JS50I3k#oGcn;HC;HkLOM80N0{mgy{oM< zAk~xYeKv_{h`L#o3Tq+y)MsWW7+RB;}8m&i6e{6p}CGW;iQ zJLg3X%@J7&^}BbudHuVFF@CnjoZjffXjH%%f-1NnCk~(^G7&FIyJY2{mxwi77ScSW zdFk-Te_3Lfk=>3FF7Goc_Aar#~lpe(SXw=eHt0do}-WUDl+IQ#~KL98~b1!q~%Ub zQK`*A86{<+Ja5@Q_z5;t1jmu^a0V|8X6uj3z@F1PQciT0HHk4fE2n*cJTofQF(S*W z2?Z@~8&=62gr%;9VA8^;c$utQ9WH3|ni^t{=xXhY?N@N9MXZmxtmemXx;2urz_ZlZ zBu1v9Z%Fo#gCVhGMlYQWWVnB`z-lX+euys4tS)K)PjrFPjQA$B8_Ba;*WRNvL}%_1 zFeA27>I9F|VKV2x=+U8t;v_@Kt@+5PJ2_0}M_+ z+ajIB5eD=8l?0g(GhvYn&Ac~DVHhZ*r)2Q1lYa{qpA@iUCLY-N=%}h?-TqyI`qy*u zh36_e!tOPb!WHCo?(<&-`y7ztBMjMr?%`?PHDWizEidr==d**3w)D&vwsCR7f&$$5 z!zjnT79AD9;jz-HllZ{EAHSR7;T9UNH3?H1N7ifYk2#%Ac}E z@Xq1tSfSdY#E8qOG+B-`ud7Azlx(B*wQparDVmQ|aLY5pDVMjPRmSrd%rFWw0e8v> zK`Op~0$p-a!ISlYIx`zK6R%(FO9{bq4anLj{O~)T!G4CXh!PiOhes;i9>>`;!>Qkl zfn;F@Gqcc^d1Qu_ z{ci*AoM892gPnFmd;!xnG^i-0@Kfs`H#C#T8|;~^yAaQ3w^4c#wReL!Rjul{OT+v0 z%4~IJlq5?>Xq1n5mS=%v)?E3JsOo#I)+q0MEexakFwMD%ix3O=U6RhOFD2k@NO>+9 z$*7nC6@Ewv*JByzy}yNG7tQ`HJ^X3EqeH`YGMW{@Oks#ZgyN6{|0?%g=uf5FUTypA zW9o(`56=JK#n}%!y?ein-YlSB7{xE0XX&Q|oSpBYlJP$mKOe!;8js=>R+Rwx{P~iN z6{o#byyfDHp1;MTqE2s)Y2|(4Mm>9sN(W0*;qULjpyu1}bfCL5kmA({4_V>=wI}|c zqI~&ZR2R9v}XtguDmE_Ch1n+hO%kl*xp$Qeqb1b?FR0;In;Sd7p(9?J<$-;&*l zl(OA|^Q;AW43^8RKh;xOdR$r1YNw@J76aa=xMzC*qXzg{-8wq!znzT`tf zhyCKih>r-*wu(>QS$5xZ89#~U`8-Zna$`0g;TGYZvrg~QbBL@aGb3j#w``B*S+S!vV;h^~+?2&knbxs=qnlqe_r`yc!ZhG%gnv2VilnHjylI zuDgnZVsDiLe z;}?j>GPGoqlpv=uePUr5fM>!s<)}4Yzzy~rmq1#3hM!$N5(K@{ zifH;)!+Zk4rg5~)_3Lz^^yS_L!(AI8>B;PiXlGA*f5d0T+b>?<3zP$XNZ4vM7(U1Q z*v9rwK@6hK-;84#EZjG@_Pdpvu-QvsxAA%9)Ya96zCii~hc<6*b562`T< zs|_HG*%}e#<0~gkebW2eOmZr9<>u0_ET03~g{i(okVFOhr!m(9X;DK0#*3Xi(VnYc zaJh(e`BENyq#iU&T!^{34&!aM>#x2$nW`<>$!C*)xI!MVNhv(@)>*$}cSK_7P2;Qfoq^YTtRi)+J=iX#i@mqyoGRA|tOupb#r00n zlY)=ccRqGq0{SB(|NM5bM8fmASak2KsD?T-srx=WguZv`ec<=Hbv2QM)QMN|rq&DD zzx^LPvR_4{_xYB+Jmk*p%ZgZju|VN6=COQrE_wD`Z?e~vyD$Y+Y`e~*)FcB7tB@uB=O&8& zvttPhW}!JPZ7s z5a+G_>BijWw2rDbx{9l;=y4*&5Fh*Lcek*Fq&$!-xjE3pQTaA>p$Nr{Z0THXTyODh zFj~Vz05Q>%G_56{l?7Xva0X+tOpnZ4Z+ z)t4Zx8@c1L;#Vf-Ds`;T2xr#&_V$PXWdG+}TX!{f%*ELyoay1V_eLO&4I{Zpbl%qx ziSmiWBs*7}$GOIA0n7C>#bbdNK%8Dpxp0_b9@rlKa(N(BXLU?7fbAxowu$Axh*YH) ze}XtvXa6hAAmqDL46Hw)M1=#1BUTZwZ}QY0^(tt|1fiZhO71Aq{`vR{f&8JLN$0}{ zWcG1h5zuLJM`iYXgZwL5`K0f`ijTg$t7J8*`cxqJ*lOkFcy*ao5ff!@)#ST2`E%_d zmfYomZ)a6LSdQGW^OA?uqgbGFkUT4l_#H*{*FAL&e7nS)Tjo^d`oIVEaN*{Zlrwk4FxdW*7 zvGw5|TIA}!pWBG)v=J`dX6krirQa(mEL68>=$(6>g*;#Td4^%r|0dGuXSch2bvXB%PbR&8V(g9|*#eLu(zF_6V` zhg2|FTNUmYv%Xv7eH7d9?cPyoW967;){Eoq?p(+4!!>8FCLcCmR)QU-HDTaNc zlDMhdwyFGP#=NSSJi=%q?Mw{_%dk4fQBUgG!lpN0-sESSDw78S(w`oHU5f_wvoF6n z8@*}EJ`_CG)&9u`6NwUsgkScTeBe#_;wE5R_tQpmuO5e`R<R*pZS<+X^~)F*p)qDfib3#$n$9y0W?poDB90U z{cfdVyZ#f(a^lK*GeX0cBy2T3OlVxB3Me>y@^aLFHd~7dwyAhT4iAP5wV8i|rzvla z#XT-{J>xO{`Tmo^2KNICqm;R&BY+ux5^|T%Mhb)nl0+BpE$57i#>U89uCpGwOV;!w zOFq!MJf$wM>n|7RUDZn!%;`!(fd6@{P$0gr_Kwn#O+m6l^dV+1bw*^Rv?7m79 z?4Y7&=;Nx2zpXLY4UbA^PhC&LXd5mR4*QCBL$Iw$(Jy?9X_Qo6aV|SqkLNwpNM?0T zsurh7-JH_gGwT(>xvtbjG7Sx467ElYDE6(pbl z72h^nl$b~Jq|c@pF=nz$#j)tAHZvu@2+&ZhClh)V_9EF+zmbluF7xCwU=jP zm~r%yl6BHP8;-KRkiZ$tl5w>~Qz4pNs^gPIwrNBWj3rz5gNh%kU2UsJxz!x25uL6& zjHdNtS97w#WK^>Uu=ARv?iHFWo!(+4u!C|%g!TWt1L^-dn*Q&4iZDxw(RIqOS5GeT z8>jX@OD2dGlS8%K-TEr<@q*sqk{_qRT*8yuQ(Yy!7stsZ!fJ%`dKqP%gULigvZvyx zF*Qk+NfRI4&Jry!?YiTky0Dc<9sKg(opeNl1eXJ;0_~YREN)bcdL4GS3BGBeQ2VOv zS$T9jGQ#u4#obft{92826x_Xgl`QfPIn1fPEz-azAR|khJlDQgVw`RCJLnQ=%0)Iv ztWkebtFUW*v%zmX>s^a%&ARyKmrU{M;YcA+@m<$v3+ZGFE!yd+@T8ON&{BxG)WBZp zT0c!=#D_SSYTwd9loLGHaYDfW!rB$7|kbPb9phBGLFV_h?N)t$aw} zOYGtFJO;CYNqw%IJrm^7*R@1rEO#unDiIXKizkXM|^)*78F7oo$R0R z#)CDg);cDX9vh6Ek$k{zhHU8m^MON#qH(Y6Hn<~;fgq20{^#q%>!towm-Q>vwF8q- z;0vk3N#n8R7SuED@{lZskI(sIix04Gq0iSPbS_kTLoa=Hm<2+_whn1k?HrdX^&^#I z5A}p~2Og^HMXP~ZNc+EU@~~(a5^-#E-UV@A1?y@Gg5AadD5Slp;>9q!z=kX;lQMCz zB{lc6P-M?d+M7S!+h;bJ5^T#dAx;`Be-D(imf!l*zs4u7bL6A88G~u|VgtZWz_hFo zcRiILHLz+LL(DB_f79ZlkR;E&4}Lp7PzYA4jjy&p(%d5Il`yn>kAf?Ui;#8Dshjq# z{ACS3Bfp|Z2Ymqz(1lfoyf0S4`4ooB-hxJ&uRloW7fk0uqaaDyp{tuU6C-Z0bQzY~*+Lrhc&T95;W|FgwBPDbHg6 zV{ZscARPTOg7aZ-juvJeZ6A;vHIZvqcXEzCPwAp=Vwjo^iEJd;Ta9yxuXQI2$CJ$W zJwJhc{|ew~Jx7`EZCOZhGb4`{N!aTYL(|_0ZSqV|hqD7O#ZDGkE?_yb#g`l_M@`5t z9OwG}KFS$Xe=^LaESz2^pkiTxKQdf&C`e3b99-zk7KnCNZsxihi|`@$PF+_i@dSfs zL;t~};{#U134DCQ<+iC~Nm63;+$%RbY5kMjNF*@*vG>+ndSq^~MLr%T{lb$Q?g1>e zw~nYNbK=XR8^7aJ?`^Ni6W{Q^T_Cfme|3KBPE_UNF9-s4ZOo1e7=FF#%PrlOG98k> zPP-BuXyu~3tDrG4=x5mJh~83s*(hA-1>EG-1C^|AYslnWk|O)?)gfeHwr7HHac;(( zq()Myd@vB=XMqY~B~?1qhzPnF(ZDNzQ3f>HD~(mUIZx7zR=NZI;|Am)8U=pTf#3(m zYM{eWfmwZOdtxO8#F&`Zr`juve8<1lQ7zw!ll@lmL%u5-FCW_Gw)1~U?%?xeMio4N zvA*5<@!^t&K6OaHxc)94K*FSon#^{dkqiJW=N>r?xE|XTS~*)`Olw@7x6db^Xmj{0 zFK9D0eE-1P+)#)}7+{u1zgky9 zOF@j31zBSzO6|?|XRq8BJU)}=t>i}hIU0c32zaqnt)T&L*=Cb_s=70Ksx-#+!bnp7 zIhW9@^wW48jRXh!`mYUPY4)*5QBNjl920onSLE5d$q`{%@PcDQYQ(L!`gzQnDNkS} z8a|5c*B&#p58-U7k%;jBQ~8@^Wp5*#{q1q?-c*tDRxiDG>zQ!wWQ*N*0=Ei=2?A)> zCvqcFbLFv#$c@iMQ=O55-F97SpCb|5OlHsqR7#M zoG!eVoamqztOzN1Ozc^E3`C-`j@) zsTtNLkIydG0dIyJe^c!*N_s23z|x#|v=+!9DpvDmq1Y>w;nBY<@*s_A||r64pW4F?2W4e4Z4OOoA+X zik<6mYCQMbnB$Mq@`L_D*0&Kbm2uIqJ!y+FkbMIcexWipD)CV5tDn!{CipX{{2!g@ zXQB!}*1Q)mifwd?4=T14FVUf`5lXHzG$B3TN;p7m_Iz~sXY(|*=im~b+(-S z3Vm0?u#5s~_%ej0@`kq6(+HVLp5N+96*WxkT+Il(bEqKu5hFu#szb3CHDo@uJ!Q53 z)H!&c!FZJO@urzZB|lRTo~*)$ox$|F77cf}obD`E^Jgh!}2eRW_2ujUuW zV=z6dMd;zCV;ApGp+_IgjsgYXA!u4A=Qi})fmspVIs_tw2y zdVbyGhQBB1?a*Nz?H2S9UENTL37AVB%#>S~9LdvraRw0weG99LUwYp`_`A==D#9tx>SIWoYlA>fkGAKW`S)>c_JPU!pUt(Oc`@t-2hBDT~%J5B|CQ**5U6_XXO9(22NiVNg1m0p{&CrZi2n6yB@?DJYvd@egR z9q=d^!6q~I4)m*m!+Ci>E2-i?pfGYOXCrzZS^?$ zvOJ3{^WB+JVA4%UP?h5sGODn@+q||btC{^^Q0pFH_{)%vr}ichw&zLtTJ$-uPKS0{ zTV-a%GHKNeQ{JWXv>^4fU%|Odg6J(O#HJjQ#ehd68^0&Ht%d?3Tg$(TiOv^z!5liV zxY0!CUEN_K?tpm$)+O#JTKzAT3=8C3kq7%b4IQINPPZ6@|BpQy^B{5b;ItAlG7 z8yj0?8x=O!_1Q<3{5oo5{CI@M{?Qh-@lZhDbkK~ukbTNE2`1pNSlL<%y~a_Sti}-B zucuxHgS>r9v^Dceo1PDJl=FNLH7^=7EoX_b!^70Sskb#Sr_K^nTy?ZL$aU1TjCdXJ z_%3`!3_PRz&xTelL6^7ii+7Vaxa;~#XFDeS32c9)mRjk2C?oEPrHoPxT(^Aydb=bu zEbvO;-N0JRN=OGX6Gk2|a8)vJ6Sn8f1DYub|BH-Dh66{W&`vp*bAt;O`aoffOd|OH zrqZ=L-9zZwJ>0~ejZXlFq)8F6Ej8AyCLrYO@$&&2;|0H=0-`l8l0I0pFLtJ+P|VfR zf*^Y$N%L#}Lb2GS7_d30B^Zx4- zR2HIyu_6o8dyyLSFf@8hz%Ata^3OlPvepEVAm#63cm$;NeHt8K4q&fo8HjCG`{NF)gbdvuIZ)`(kmW_~sw)oQ_CikQ7TmNU|T<-s;jBn)D%G zA}PAudwYQn-zzqIIf$l#$}P_R+23N7Z;26&xNcxlJ#IZSe&q07W;uM4+|vUN@mS<1 zJ%T}WZoWQq%PDZ~+qP;4ZJ|}K1Q&LBolRthXlHo*8W(*lT zm4R&NLbr$1XGG5e{&fu-3XW+4trZb%EaRT))6tEby8Xg9B2#)Q_*=(O(qzeL^rD74 zW*O;N`zfvdw!QK8+Npgz*>!0j#qlg60Qi?vkp78{;993bxqK3&+HOtf;z!o0S7NGm zYvvip6qcL8u98edJ%;rX63O|xSC0vo^) z6S!~|{Vdd7d~j`(*Lzo6;5mosGcP>;uEAPaKdwF8=ftSwzJ$A4F5%4`&g3V&AMQ-w zpq@Z#cQf)H^4$O@{x0P7osra+-~#BAle%zd`tTlSSDZ_>k90*WA55s-{&@0DsH|Gn_(Gv&IQ~S$h2t-f$2u7 z&I%w}b@(I>K8hPE4kdJ|Jez2ZGstTsCn5n)fI|BnpYB2y9^{l1_A>{r7r06|T;gTY zgn_%usYV~upSf;rEY9u~-Z+xuA6X`g{gDfEzSX1vPk0rp${?mca2T!wXUut&q6hT||m#B#y=7Nbl}ra9dW}_O+Mt%99x|tB`8_URofTdJ{+g*M1e!lNj7{_ol*# zpN8izup`(7bYs0?PcYy*BNkRJ517HS@*kSo^Dx4!uJJcjr6Q=~>)LcUNqI z(c%EHZ%tkoUgha7=P>Crq;)Ota3XWSI(!=^^I!vn<0<#v^+}aIVq45p453Ao(c`c> zongK91^A=J2K#mr^4sE7x`a#GBNs+5BrEz7j}{os-5DDdsYN5-0z4}x_;X^z`t7&n z0u=&1mpByd@_i?TH2^~5vbYGZ){+U3iW1pZF^&W)_+aPF5zfCYZqq^)fHdCz+2XVQ z?e|*}@J(T?neMm9$R|maWbGPb<~{biul+H?x@0Xn{3Lj4ma8y-7_R8WuhB(RpcD); z0PvF#r8h!Xk=>GU?xtu?bN2&$W7PN~cTUd0qzV2_DVOC34AaP6oS0`s^O!6I^Hz}l z#TUBh*8OnFbut~wpVqf6f3#ms#TY21*{N`{=^O?=x0C*78~Tq|I$J`&>&JK;Z&61G z8BXR}UGY)UxOr<#2bq8?4A$%~hTFs{V?G6H0NAII%3l`92N zwBtpn%h=v1T^zTT**R*jfUH?EfvHLG3c7TTyX(a6OtSgYYx*elyOoKX<2~Y+I~lw! zhyB(WtNZg_&R&rOgOr)Ljjp%hK?Rf#PGkVdp6vP6{bK(a#6V zlTT)jA^E<_P|6!ORz1yh5T(qMmS1re|AQ*5LwPW8eXu-Am%@Z6*QYh(cyCTmjMxti z>~*y83RLcadV4iorbNE%pp2ca{|_D)ln0QTRd}tV0zF@pz@O;TSi3k;W2r7K?;qX3 z331-?Zv3oza$gq4j?)C-79ekjP$!hgQJ+eE2IuGX&GGl81rnZhq!2fk6*>ugxAb!$PCb z16u$=xx!ltD}bWRED1!bwd5xk9atv|GIYznH$T0BeMzz2NnI$9LN7Bbn!A5>Ly9Z6 zVkWWbI)g$g?0c6yzoMWAaLy-po0CEmq#qt=zIgdqr6Sd%11n?U@R z{)B;W;HdI4Gzxf|aFg-ckw$JSeN2R{k_<+8&dalsY*W2IkAG`120=u1Ad7cIQdv^))KBW&WiqIpuy~EM` z7>%sm#-x!;Dwk}%R&)Vsiki~dy-m&)Ap5o8k!_dIqe8Uv1t3+A7wHRrbH+?ujBURs zEqMCPpNeCpzkG(iMDWpEH0oO{SLyb7AM|x3h&G}X{gLd+uYHYey8`cabm?ErwN2_R z;aHX$)%$ANngEv9aSy4T z+JFGp;i`W=pf=J}rJYOJx4$1skz3@)CH{_ahz{vlPiw`5__8zgHR?-*hJ)VRt_qVQ z9?!nd`E2ceR&It%f$2WW30-!#@rVx&WSIO640x4#$2)GW8I!=Piat>NF-rg4b^hKo zPlO6~THVw=GCr$v@X^O*=%a6&Q3CYKwyw`6@B>HSV(W>x_G2wk)=ltWO2(LP#rJj7$OEw=)4<+6s_=G$uufc$85tbm) ztE(iB4s#kex`97m7ifOwX|*inq-9gRuwbvW+onLrEXqUhyAVz2+{o&*$|)@dLJ^k!f1;ksEzSOWBEtg}s6_-$gCd1FzboY=w8cCjDiz2w#b1zktj zlsuo`S01B>O%`GdG2CqFoX3#>ZA94y7~aUC;;Bc5F`ztTMTw5E9ex~T$o)2p!5i`z zybCu9GEKc+AH!@oT1YO}>9WC`y6ZN>wzSyzdLdPMI|FMx2c7j=MMd|0>2S9o)NKm# zTZ0t3Zs4r!#Ljg&{Vrp+I@JjX`1RWNLwU%N>O@D?VwRuk{8G+s<2D}dBh9CIXSqSj zLDTjMyqe9oq86UD#^g~RL<1%Uc})!oR_yv2q~scK**BPYD=w9@n5r5C|5W-2t$A_? zl?e?R(F=E^I|I6NDEM7014m{%7*mz8`@&31L7leEeTbuIku#&nfaIcKFI{o+%C(Qja7@q< zeqkLEJ#2L5AOS+wuAA#%*IekM1F4LO!b7Qz}W!m^6SPnO7>>?uqVchuLlA~0#M%2?ZSSo z1cs_Xh|T+7e z607oAc3MFWRc+;~VrRvX$-o@;*hxJ9lmhZ+^Y3c{RI858a^=$OsyMkY<$uWIjA-GxP7l@v7I0g& zl}(5mduRWWVES!et-g`|V#gTn7ytI>NP3s~t}@4J-`5c48ZSyik~@`;^dGw?zkTAg z=(YuM#MNY_i&`AdVY4E=_xH!A8U8ub1O6hjN@ey97t8S3u3Ui&5YcV19g!#OcdZtn z*YoR|zcJ(s_1u2|Kl4$_v@3KdldXxWI5RSZCu%g%jU`(^Y0HyuO|zM_=hERp)j;B=uEUPLLP=^K>Hc{9iTv1r>a{VRQScBoGLiw10&oFfI87hg zRPU|b{H1FTtt=;X%_5FBSk!w47r)o|tzWETrGr91(=W#72L8qP1*iO|B_v~_CR;*? zfCQ%{4J}-ZiUyu#W|P=#v260mrsu4YXC@^Rx_`mR%Nvednmczr#8>SiH6>yV-ZQa> z?Y^xFyw(`rQgCk>Sn=O{!qfZgfDgNh(_HVA7DSSsbyx104xm@sz~1}HqXV|v`9Nfg zBl*KlX+hFjuP+iqsw^v*R=wGsIj7Zx1!~6^@)VcJ2_UUELg0@=uTiZvG=PBpG3;Rh zr;OX$VaFPhIHSle@7hRkIpfeE5|;xeDofghw?7LWf6~rzNlhMyPPUwv>nG0XHdZbD zV(nSCm1*W+Q+0zDqk~ZL4_w;H$|TUmbmW-2EW@-iQf5Vi7lU%36P0(ku>g@hA*W^z zkv;E&ZhFnYef@=uo?s4lo5BNGN=xxpiw9~;B2uaH+Y&0}IM1;wHf0 zrP<1T>dfOP*RVLR{mr^>KlbQ#OQJWMR+dMnCSp25RQFA%M$~A>4pn)jm>AvRH`${N zjc~g+@f2lN90L39n79aiVwHQ=tWbcuC)}QFaxdD$eX|{iQ~HFwv5mbo<<)AZ5zP|j zvll^UgMMg5p`p2t@_2jz0fSLxy2tqX+{zsIjCGuB3f4`Y>5+Mit^-L@%-Yr372y9uzOUepng(9T!*R>#^< zwE^?nM5%~;9+cO+aOF|R!P%Zr5w5$CA5|l|)@}|RhAL$z6i7?E528E6xe}v_;Y?5> zdV|5gP>k5pf#%QzCS>YllwqOlfJl8-T`}q4VQeuB{-s^f7dd9+qPU6d)(?KdMkcAk zvsGnTY!HnFUKJDF?`09c-m(yBhx-d~>tYFssc)#Wu(E0x0E}3W)xmG8?Z3pT((BrQ ziPUl2W=GCmOU0)PS-(IhQa;*ZrK4u@cKl)Ch;!D(L(Yh1F^>~V_<%0QFbo1Uz{wQ` z>>(Q}*V4yE%1x2~MbP~Jby}5NMX6NcF7Nt!K!AoaxB&_{WIDQu@y8g`l8&$zD;md)#chwlCkfuQmbX^!0zR&dGA0%HDru8RcUj#ggq6~N zn%ULuSlpb}-lOC~pH?pX=RvM4X4J_$5QF3q)w`4)*0L(lz-9rCo#!lAT;3vq8ca4u2dLO7wg<)y6oE7mrAV~wcX zgsy`ff+xL;%^~3+deT=Q-xVK&8pDFK1!8Ut;I-fy8>SGz=qF4xB|K3{uCuSO%Po>I zfegpsQkK4O%7p&w>*u9lhI~v$I9+m)42v?iKphCl8c@;y90dy7p7!!N%F56RmsAJrz?vqe5^K=AIq&hTbH@`KiTV8`C5K)R4-veylyk6j}?Kw4;WT`JT|zpzvH zvw%o7p0u^KZcm@}u#{az5qE434+6PyGu80)nqV!?kg|>IKBg@t?kGrT(92)25tWxM z0G;LT{xY%FFA&Kr%o|1{bn*lv!sCJD+&o?-Fun~#a*z%+vz!8lJAvq>Ex4wgG`et#oAh0tWr907=?=|d|hED)8U zm?B2P+c3M>NDVYdLIoxo{|A6V!H}9d$;U0~LK_%#b{?OBQw>8#0;>dCD30{J;t%n? zQ5OTqeTswqxm}Jr@~~Rc?z#h4=a|uYGh8p!$s!C;NNAEQ#Qk<=xjO|}d=cQ;ocsyY zES}l>z3j1Mr={898hFv{6~Jg00^Ndb-@TzCETRqi%G5@YD1Z@Nh#@XGyhua&^khKK zHL7wo0rU*siX9K=oaG>?oP-+1NQ2z?BxFhninSA;;jnx|jy`vl$bOze=6`$?d%G?R zgG+*FpnAXA-kZ3;R(!%Z7c;IAoBY@S+h_dPP;K|x{i}rSl=}|Ri;(WNevWF!ya-#@ zU_ScTzK-1or`W+`ts=3-*OFc#(!n)!cm8)q6Ps@W+Pe~l?OdlR`39AFtpo3mAq;L5 zXJ!P&PY&)STj@Rl!1&zR&u`~p(tmef0|&xTIzQ9=qRb;lC=oS0;~qZ9BeCprsWbRg zGYJA_GK}_D{k{suR%+h~F1EajOq0Bw*;wgpraUI#t0qb@RCArV5a!vUsWVmEdyM+x z3{WIJE0e<5U^~Nil5m7f4a>B@e1>k>uhE9Aep9M5Xpix`abE% z8{7TR4t4D1_0Mywu&!9;^?{kNYZ-ItAI=(^ES5T}>#-~!KVvz7G(l>a_GuZVT5*oq zJgf|Yx+xi9=m4bOz&MAmLRQ!D<&5uw23+G{8)JpdRtAJGSzXTuLmb;HWRgOEnN38+ zoHVFD_M$0Fy`i6#-@Wg68$!F=bFq!od!dG7`QAUb*GT2iIaJJF*0)d35{2*8eP@cgj%*9Ih1uj=g&ISJul=ZH0GcRK3GWO_9tvPD2Py3(`U7@gB80@u0l=G#UBc zlCZze7FA~zkA+P3N_IQ-^2*_2%}evdhwh7Z=)dDH8wDjZ<9N)ivo_t9Ca5bVJ@&5q1lqCj^_Xi2`1&`@qqAZq{d-{&ldZwlzr&xzbUw1Ir&K8J#><&e6_sv z4-a8C5#6j=6qS^&4ZWB};ZS=E_)VQqU3LnppdGJ%hB6Y178X)88K`1{jGk(L%%8o=X)3jlCsTK%K5(EGEyLzZz_g+zRfi z&rY2eIMz+Ayw*NRS~}*5w@+j`sYz(13OJcy4t%Gfa-wqya`j&@=Q8S8UpmH8?9du! zvMwh&znGTSR|~``&X%f{fw{1A)6jvza*+$iFNYw(EtPm!x(V?VCOm=G?X=&B%np$Pi zoBI1&YDn^g`l-o&65yU4#e)X5^WQxI$04_91P{~bua;fi(e)H2D)RgMF6}16Ap#v> z{{xza?Zssr$xFw@vpcz>u}OYz1L)b>^!D|sOv3NY$q@)0S8W3KH!fJ{K&kN4*Z{;_pxc&D{&0K3(`lVX zj+h!AH8a?@E?qgFZ;@ zK3+j1EOQsR=lbLdVu4mS_wH>E4)paH8rs>a2EfA~ro!nw{S=o`>Fp}Drj}5L(-0zk zr)1j|SjHq4(E*7F>=O?hIZ%zYmiYSqD?9~AbA@Pg&>U1QY>|=1G=)m~i6vPR@>!xE z1=y?lF{zdC&_^nL3=D@QPn61By1(xuX!teQX@H+4Ao@44aZ~yls1b)Ff3rqFneYx< z&Rywd2hzf8I3n18u(XMPe81%!DC8J#_LVSc7E6e<(-6NfN~xf zm_nU*cZKvQ!1mXR@}rwOJ5P_>R$vNV@>GvBMiE6$Z&fo(Uj*~$K-a0alyK|>MlyDh z|Igm`9~5P}Re0@Q5V;In4IQ=|QB|IxHdS$D>&Wn2_p#Va!L##m>aK~`*ruwqptnBP zJP7@voC%xTh+s84ZJ}I#xs*lEds*jmFU^+<|K7gnA*Swjq+56!A=-3`u z`AuT(u=9gVdk2TI`H|V>!5PS0*AO*^nahkZYif)y_A`uhx!S zvnhTK%(;BBs8??{v3Ssg8f05f^P`N@)DhFb;S*i_A#t)h*)hD+zXyaOWa3qtX@mo(!P**$>mP^b zV)bcuqV=xH{$FcB&@iHXZN;*_1v(%jdJmxJS??fwwU+-z_8R?lj)(XL{3G6FXA4{| zM&$EoHWJy1x-kW6i)wNI6)Ir=hzvGL6J&*U$?^OeWfa1i+!Xusa=pBf!P*z}!%B<0 zL_p-=^dQDdfGKOB84dEuAS_tQnw8t2vH+v-hHQU7f7bS;keQp@DyK`j%S^c#-WbTd z#K+|djF!=P4W%*#ku*ld&|3D_ywMW{p{xW-D=NJ18b>r8cs}$;s-XyO_|3(|!)4Na zwk7}Nwqm*bf<~O?iqaO;lW}I>R6mGAd!C{(VvOx~oGFGH|46=>x%Ltht zF9B)ojgRNHDKJgPW^eRO&IhZ(NB_19U;ithY6}(vte~Lh@nw%mf2i)_6%i-#hgaAd zdJmi?0+tC$Q3Q?8+)_OFEH>txvyebO>;^kzobC^wg%73!LYUBaN5Z#FV6|1`JG*nP z*0lK;C2+l;cR530v0a*O#!21RH#>E#rr{z|Usn)`C1z)9XO>Zj?m?niBKR7Z(Nz0=X)h~a z+@*4!f#oy@7lN?X+;!5gJP4m+qx8BXV1;t}4-|em9_#0*$@s8>7*c%M-RzOi>WVci zeb1OZ3-BORL1`pj7)i^j9$UZ{11?rHK{oDU)jz)qg)=y8{K+n0;=Q&wpEk~mNG6~A z$)t|~zRMt~#FN8wz}Oao!^++DN7eZh0H@3Qu)u^B`XS!Wd_%KAH)jW#w@a+kO&tyt z?W{4&2Y;+FuHNBHyq<0}80C@B4c8Z*5B+YZ-=aUycx>;g*!!>gQX?{Li*X*%XQfe776LAYE+-qq5l5_+h+J(Eo zAU!Pt86CKb=39_mCd!$&-*{c>v`k75Uhl!&e1LOz%F|2tm0kp@;#$@Rhz00?k)x*h z(etgtGwg>56}SD8#86@wLJ6%H9MGz}?((kN&etfW^xT5+Ecs}5<-O6H;?r|bWg{$L z@u*>Yva0VJrFVZ9t#K5x(9ygI(WWZ%o(Z1(O12yl)I$-}k=ZI>B-Q^hVB8aoJu10q zX7&IZ;;N2JcQ?Mg8D-K3u@83xh$@+KVw|m(@%$p01REU-@f)T3i9#aC($2Qq!yiqf zAhP3acaX6w;1J7ZdmW0A2(-cM#sjFtW#AA1nQivs!9rkahzIPY@C!|b2w11Wzxqu@ zbp;WAy7vefnAz%Q6L41RLL0|W9hZ$X?~$^OGRe9bPHfr3RIagS95{DTQW9+WENx(mZ__xa*IvWu%ag-Up8#sddkfv>nVk&CgGu?8;Om`_eHSb|Y`ev8<* z${l30rh1o;_RMlwgi0|i**i~18)Mx}5<=~{ZI4PUJ$_t`xff=BkU#~CED)3XIL!F zkBoLKK%$aE`}*m{V%4nGORC(^sE1>Q2$jheG1^A^@hPHif_p4$EiP8Nlzw%EL0pQ+ z$PdVrcSu+Ohm2yP`xw9d_Jx5{HPg!LWTKK=zgj{C|r}@Nnm|hxuK8l+b#`Taq?- zjN3nnfIFCVtA?2+f2t$zuNB2&u?ndN9^J1;7ZPB!jb7$RQFNa#0^m{1qwu>|2S7&n z3Fq1CBzC@-Hk@_l@$wt3tiY#lv!MO|0BFL=J7zBv2IV_`(tkuQ@ajzAd7pK#vlEz* ztsT|kQ|RF{@bW_QGsnw+a=U|kxnL9OV$1X!QIJ!nx_Ce+v|CjaWASr>X;wEwVzYSl zK4ZGjUHaY(-bON!Nwjqi@$O>_Y`Q?)U_2vtPFAW@9zwdMMOgX^^|rZey0XN(m6Bv`MWK6T9d}OuV3tD z{=dXDJF&xc_!u+A*mRU9>sOZufekYuDMNv_7kd#^+xrAN^zcrX!B?b{dd;J;p-lnn zx)dSU-r-fyK5gRTy-&Zd$^Gk^6yTkhjN8T#7TAXdvVS|^15~n2{{sUb2If>2j(2`P z0b&2DTQ3?m>L}WwR3W(w>0Ux4bHx8ukYt)q^AX)%1(}L>_}U8ULPYIl#tw*-Bi*}j zf39tKP5zEF?RKY0lBRC7C`IpR)oWO0gr{SRNq2hnb0loB2g?azzSC-h z?2yD1$r74c{C$_eND^rn4Ood7)=@#Y3K7KLr}#!P6%&~(0}2&K*Kgz7MkY488@5Fw zdS-SZavYh87ufAiU(pN9l$a_aB`BQ64fiapa%`|eJ-yN8ovu$FO;C-2$d-Q5KQ^IB zmB7Z3xC=NW0f6_OEOcB&=In;TB~!+wKuO6stS3opXX>>4^}vgPq&gY>p!~6IEhcev zUv`IU?0T(!8f}l+am72&Z{bXnW-PE?!yX%e@0S&7%o?EK>jf zZIW}c(=)-dq!)bCb2quMBx zhRgQHzIvI60lBH>N#(dATh+0JSXALj)2auyu@MMrcb~4+%4Pi!ke1pVxma)j&?ZVb z(bG_18do>@u0LBkIE7DfWy^f)m<$q|3*yw!p>AJzBah~?`kYdpLQ$IO7V zfA)B6Q$i!y;o|vbGBn+v8eb8%D_)2dv#5KHj-|=N>Eq&6@Wb%r4o6a}-`SrzYF9kJ z+sU!OAa-)Nx;(Dtpy5|9w06~-XWlIyWWrX(W|rq#Zah6gG|2hm6qH$&LKGp+Ya5o4 zt~S~uypOD5hNGd`ApmqXj<%P^##EF_`24@9AHY0Ei}QuscWYr1*MGn@>tWdXVbd{tB(2!2g1+t zuKOX%ECp#=(CGJk*=b~m;;KiBfpgU*G`;;@MFIx>h<;`@3AI9V+Y7hy+j72098LUH z+WH?+ygEfLxa-<+dZ-t#&1>~hs||_%AgYzb_Q8|4ycN*r#%}9CKXt`SUX84{YxeO1 zRs)s~b4v!=>7SI1wFTWo%vp{_h}ifH!Bzi;_HH)rD-5lOe=%K37zJiNDW;d67o;b1 z=>q=#4ZQzjIL}lJcvE8#2^n7cSgKy0s}^Qrgp#?!3+jUd{{+|_3y@8?fV2zac9n98 zZEMt(Ngsl|%enN2;&pC+UA9DC}5FyMG;x~3b)^!@v zGPLwrzib(`GFt2m_f36M=UNvv_tW8?b0;)x^{7P$`xnvV#c3F@JXfcC7Nn27_3mKh z=O)eNoo|GS1sFE4ZGAIaHUm%g@=MWXIfpSBLMMm=blwPt3lT-6EvBS@6b4opj>IUE zlvI)IKgwY~^<$oeW_Gi$6-Kqs_J4j>9Fk+PxfOIena}kja^dj8k!<2L3@oHH*C|)4 zE2+NoA;^tIEP{|9@sibscNu?#ue*085J;0%R?Q+N*RFYXMj=-1jMfIT2^YM~5(Lg4 zVbDOJ#>Az7`W=%gk^oGLDgIw? zj!mn6RVAcGeY~ck*>8q8Kepz2p9pZR8XMTR=4zT9uwpd)Jb4ezUbyz>cZd1XT83%V z6d%ix7Q|WQDZJxIW*E*XZz*jP)&U7a#Atpxu)RW zVV*71y%hkpTRj&wX7kJxu@eNh1}{`pp)neu<|_E$l+|PB5b0;45#Xt-X&kb?(NoiN zpy(RF#S-@3R+3`AH@y7=#4>2_cN4|7WzpK;t}M#~y2&EA?_9*3Wx6|oCK=hES@wMN zOG!@DHuQVg3166-jrHF&B^6vgpAOF z4;;RztxlvP&$*{E^8c;*5It^JhziM+bn*UyPq9CeCXd_wo~T?d6=hP6eM94x* zq}nl)icUw>58rX^xnma_RH!3b&b{wm@1UDY0Z9onRJd1GP8^R51`9K z;uK{5P>{APYhu`@kuJeyv8$$$mHOh#lJaJ*H)Xd@$ymRF0lAEm;ZRw^QyPCr5)s;Z zU#TJX<9|Q6&S&Ggv5qY(arFI3=d#AErBrH!_^-2=5cg_3P{Tf30o>fH;m1a)DdLEo z$Cmhkt*^nXx*{p7T#Ylic#ZX5=QcTZLA{{;7pH6V)ND>hy>AX4Zv46Ls%PzU7l^CI zU%$X0g;zk3T_?2Qeep5DPNG+ zID1Iv$*9?~+Vo{#qO5a54nAz>{G+I@O-s66w#q*r^%kZ% zHTq5Ut{~^`HA8Z&x6De-oJJ1^xScgA^60+#3u!)2z4@;XL2b;Fyuf_d9ffLhe{PX{^P3Nd4VH zO@28FASQ#?-@9}@*#=pP0Usj5N3Q$KB8p_(0J;(@H?B`!y&tamR&nw1^z^9+#TnL> z&8}{W`mRv2+$lwVt=>eWoYw}?$y`R-$|6A0)SmeM@o;;O35ey_Tl-lCY!GpUTXy0W zsQt?S={GipSbHw{(^di_u}49O%yOun`OE9-x(M6{!mUL8WO4}h>g zaUh7)As^`tx;q_CHZxfAzIqOlxgxvlM}l4M1$yAg+(Q}&;sVa6#XN|AT3%AU*&JHG zxs2_Ip_8QvF|Fb3mAGl{Fk>Ww7jEIrc+5O0i^a|Kv`DLpCkJ}+me_~hUpg$xg0DO^ z)lPrwz)|D?=SqMP9V%?#>2vm#oH$lq8NjcfNpL~7cC@W!jBU#y&#o}7+CW#o2@At_ zPmd^*B&8&_D%s*$^L8)hwk@HeJvz-?x(pzbQ7&nDW4vBi2dC3`gD~!)hzY6tt}dC~ zx!8R9Re9r_lm*?v6Gh6dU@a9zYQ$BPlHBiydD?7Ru6~$?0!!BJrG9*dp_e##AjQ%m zz#$%9n;aYxX#*!Pe-YjzLW`K1{ZV+d78~~+_`=%aApK?iaJz#C6h{QI-Wm6&M}h`Z z-z0o4`LpbBeThmN(nXJ{C>S}9{g&y%;(l)j>QiUImS>mCza-`E_HFd-*3iG;(uTmo z8-igS8o?=?NM>p6$-gnXq0NCgbSEgWGA1t5{nVB+o)SHOeM9TU#5;MuYuAZ@?kx`B zm7ilb=(NLju3=_Y)c8hJgOC`DUz-A+IogdOuaZ-KDRYf?b<^0$XWn#=#Xl-pZ{{N2 zJ{H0t8SZ!#USk#~O;;kNqEZvTu5a80HVVjmk6Q~!b@zP5S!$fpu4?QSbPSKxO;Vx~ z|B%3u!DWRuZ1&70k;5(#6P+-v3-gjEc)wMBv+bM z!ugw<>O6x{iBB+mqm94W(@DHJP?Bl51(4Ww@hxF=y|>bI*rmZK|#g z9|UwQ6X9FiuYL)rjfD?*ANTxEKo1d2AN_dnl4e|Q7EPPmV%J5k2l~qp=AGdsht~4N zespl0J?tgwFvw!?@Z+Jhg<&?}*OL>ed#~(QWLir3)C@H;>DRA+&CV$XgT#S@s6nlU z@qHL?6h&Jz{YY+zY_;^U7?9KSJ!V%OZC3uid6u*O#Xa9pZID$~LOrdn`#G)B`)|YO zx#N{mSJWHydtI4zKW2W>WK&=MW9s-@8+FmbR4q0J#yA!M98K?#yFRZWOK&)_jd2e$ zTI0rsJ_wJ#?kQ)2<7bF}a*ridpcM^$`9&g^q~s{f3Y0_X!r5_n7<9e&72C*nMVEIB zQSlLg{^hzY`ZP}`Bt={;yAF+PVg*S$BK>~ZtDf)RP45Y5*@3A+o3M3T)X0W#e|q{y zTJ`>Mf2?^3NP_QtQE^s7e?A?S11e20H2Xkv4wflOJ|7x^<31iA)VYn=2y@W<^oX(v z%)*v}Q}`huYjuO(S!Dftt=qX(ZL9~}8lKL{wRJf&%_+)NIHT}_Ar%TLZ*M>(ADM?}Q? zC>g>(sKt$%9BOPZrhs~h%#)Pz+mh1XptZ8Ab<#`vQ7n9jp0>xTP()oUp3(v*{wZfG z+)W$dS>$AD8|5J@raT^N=%wbXH$1Jb`oPmRS#I_eUy&|gx-9yHqPUA_83Tqa~mv(`#r0wj$A zUEYW&sYMx|Sk&*^%{yw7b@kN^H3g<0L=2qSrwySXLv{VEQgxPW)+sQ0gGZf^Sb>sz zmun7^dx^s-p{tr&gyeeZkvLBtn1UDqkUfY)gX87e&Dk?2{Y-C7p34;+~OOhMYNxx z4t3e*#VPwywkq8e+i>8vc|2%R@niX_J)7CDMN&ou!_IZai`2E*K&#T~)l<&o*VMn*&`iG^O9f5m(ST1@H9zw4d3 z3-D9q#cEU%E0udh&gSc#A!i5IvV{!r22Kw6GhZJle>t}0^z-F5+n>k?_+-F1v6*IY zPCD^=2uMRp`m+)mccrE3A{uJvTNAf9&&9H&l_$fkug9hMLAuMlK(=8!KZ1~IX=(w~ z%Czt>%w_&VYe8`8;zCDHP2ccmqM)l;LM)k9lgh;@oM4h~x0ga}Nt&}wN=^=Y9AU;)-*ccv>Yo!QxT*^Sg&*SQI-rJl>FBst&ueLEtvCD?0Fc8hIFaEi+@ z_m^|t%G7#Rd1bIK!N+2}U3rQs5X`7aol!}wo2Fm1%y(I-fN0O0_Z-=ihSD)xM$Kd} zr#M9(tqmjb2~VKnSn6l~`=7k!wa~f``iF+|wf@%SRUC2zBVz*N{Yc5pd48=@DDmuM z(8-C`500K}8hYBXj8g>D7uYMXGMDy77q5EINaddRx&F!N3EnMqiltiP*Ts9fjz2k= z8Xoj>Xgt&D&os7xxL^dSFkdph-+Kie+)g1gGxx6VuuIG&G({##uTbludne&?5d%RJicE`uDlUhRy|IZr! zf6uZ0=h626x4xCljf>i-AGYY}D10p7?jVOR>`;U(Y?R2MWMf>#mut-qno)x~W>aCV zB%F$ZPp>=F0EJ0zirAcWip!Ao!}Ui$TWjBGR0;UA15B+NO-^7Lvs$x@MDjWztmR>9 zWrKXU{yZ7YX2MKU}H1g{Lyu9>NjG_|!eJyR)Uh*G) z5Km~6dZ!8YRLKAAD;7{aJ}OPJkX~<4=g&R3?q+#7W031On3HxX#UZD+WBd5{QCxJoc2@G zw_&w`H{+JUJ#|M?Jxof|?UfB%7;odyu22>aGS&8ggyW+w`41{A@*;@W#VAe8V#|F3 z6xiQUuK4hilf}_!jT7_9LrV&68k=`9J=Y8V`h`Bqw%*Y3>f9&XRuTH2GyOXvxokdl zppo!ywTjDYXJ^c^#J*Fi&KnvywYiM161N`!2$xV8<_nChjheX-!%5nJCi{<2_!<#b zVwH3p0z(|B6|!;)X}Iz!H{VPB?FIJ;Ru)q!xvov-N=DzqoYMM@f^*}O{jrEJUyThB z+)u4RJo-dl%IIx7?0Qi=UAz{R6=MU?hS#OYIvn=?kZh2S#i8D=I$^Fvv7Bu9-@xNL zB?zgm-llucfM4;aM)`?z8zcuG+AV@{!A~Kj6n0vk6};E8sRfu|VoYX*`Yla6SPko4 z1Jo`+&eZ=3X}8uWODwCbT%43s0gFmP&-q3UGoxH7EXB|ifW@B3{RF-UEPO=v@p1EU z41;8$r16=6>61T&?GRE;0O*}x&z^u5PnO&kl7HasYs{W$c`zq;&1P%kA9ic})I7OS zSg2_ke2)56*zVt97)d6>pohD|QFyo8eQPEw^*m2{1#?IWMIA$UB6ibE&ZwtJ7p=qt z$|VpyO75u=X4xOZ4pE!0C1faA>^wWf?5E?ev*By^UR0ARP8*h@gC`|DsY2GY?}zTC zyflK*_S{ybQ=5G8uaLO<1UcZ70#A)%Q7M6bfL(g zEaz9P`%mRkEh{eGm4JJ^2Ne?H9WhET~}vVMGx9 zt1lJPmM~t`tSfiexFdF3r*cYUU_r}ukhmX+$5JSTGYn{OiUtgpTG9;3|hF~2)pLVkYa zDckk5e?1-}7|OLHN0zrvQx%))=1NOBk?69TO1ZqY{%z=rg#f{XNlfE)x-2O&Mbb14 zUV1+Mj+ohGMS|LX*D*`Z@9JwdH?4a4r}xH(ER@{ks?}n0lic57+%zZFx!>Gpo(pXK zyu9ldE<#VcD_NR2272jA}iQinxzIGSe_eia5abJ5X_ejzHpir%Z z%Kk2d)~S55JI8P&$z@2;{ zJHi5ZMb%-ayBt~X^sz?q+V$&;I;{_2*9>p`=;lC0HZ$>^aNV`Y<(s>x`c%GXq0)8V z#KEfjsr2!?7926%fPjGhKNQ`GX8PjBn`8cX-b4|8Gg(9*70XTR8C662dyDrk{{8t6 z08dY>j#9z_f%%hgXOVO@;XXw%^6Vn_L}?bqO>qS^^(v71j1}#TN}(pV7qxfU!PfXF zcQgKCD0K|eLJR;g^43jYCwR=*o4NoKm@svts<>R^LJQb9gQ4Mu@hhu7V|_~p0cbh8PtkYq_UcCUo4CKJLrzWdswJpM{XoZ5~RSN5Ts)2$K- zyB|ch3g3sem;%k(@=t7Vof%TS3SIHh+rxlH#OqsbFWC1_>}#lbTD8jKJz3YFNv#`R z;*p9eQDf9pKKB#S-Ygb4i@vm&hfLAT3N$U7Z#~a1%R3%9p>NWegfc$u1jiylJ5VWk z77E)V@d5{c(UiKTlX)LU^7c|g`WQCXfi9D>3CZHtKJMnw+dYo)E&SAj{Z_*&?4C8g z^(RwJxgL^fN}O{j^c%Gg@T(QVz5;ytpa>8#E3~_PQc=*8>BP12x8HRI5T_`UJE_ z(%zwmM0__M6NBBhz=U!=G5A>g9-0q`zyjiQO|LODOg0SD?PZs8;!Smh3b~-zH!VI( zTVf6e+02fuRYHKl>zSK?%PHo7z_*nB{I!1hO!`eepQfT(&k0>>^)aZu$UycY_}K}p z0Rg`;XxrN@>BdWpY=RHLG*AB|!C~Gyy!y1gc}4StY>%jBX~OK=`(1cJe##^r(@i@t z@vyo>gwA@bQM~!ad~likAR2aZAdEyPs?7I)sO@=^G|oCz~Kt>rHtZ-4-C@$rYx958|vX#moCye(eh;T{f?ey!2> z;YPj2;k>)i@~j?oiI~7BO}>ezenTToV1agC;>J@>Cn{0|j+03n1&%pzZ^vkB*cY#5 zs)1tKkOx-14kODvL=Ulm+#U{WwMzjGT43(8(!!?_Dj!jV=wvMA0x%O-yKW%pR_TiZ z!)mBRX89qZKSG!uTdQy_YY|d;>a;J9Vw22UXshd3%lrRK_`7MZBn$Hru*vmpk(*iF4WR8W|9Tjlh)vnNl_kF zyEn_idLv={gc~YAm4$(`CVF;gL#xS0vBo4J*FDS;Tb(!o$?Z?wnH0qGs}ICDZ8*xA zFx)UAOrgAc`A3x#Zh*!2FcZf2WjHTTDHxna1*?BvM;1Dx*-at>h)HDaQpwB&&KHQE>~b|qY9#JCOS+_rA%s~ z`WIqDtASRy`F^nRHZI^ZhUb@pFO#X#Yo|mFR_r}B4^0Vvyc#^RxNd&%i+I`te4%Q~e_!^sD&0Mv7ETA8$xX2pk@3crp*MXZqXdBAZ`YGL?zG z<60#B-1`Nrn^H96x}N_EE3y=y1W+hrrw+@5Q*}aBktLK315}Q7R%I(^JqSs0)tXSo zXL(FER@M(yJAH$`&-7#Mu*|=6R)F<2 z3;gLd&8N52)!t9{FOf=JrF%P}{Kav2|4ttQG0MbSy_y(9!2~l{=X{y7fre1|l)K~QyRY&-C zy3@Y8K?%N>y7M~Fh@ii|o>D40sQ~c03PIsjd`3arLWd?f&zm25)om)G@27)gk4hLY zE?{Jw0ajZGX?4DaDLU(uv&{M7?=hq$Qt92EGSF{>4IhP@8(>xk`RCb9zl0B*4esv? z$4j%l52o;5*1}@LmLvN88mHHiF*^|`K}DUeriS|I1&(nPU1cy_!vB4o=z?XotKNV= z>r7YpGI*_qmpv)J>-rSeU3qeZz5 zjVODJC6cT&%-D&fklie{S;$tI7`u?ILXxFH))|bkn;B;8YoXOr_I(?oC_+>uh4lW; z=X>1u5BDE%&vDGJb6m$<*ZI0$uk-nMKF|Jlj!qGvzu|h{zNOT99Q-)=CmHn?ipgk_ za%+|>xuTnf=hrVNZjq6&KuY%WzYqMg_)7foa7oSvEx8R+?SIo)itqRPpO0xOVYpG2 zX*H@R&i#F!UyN45wert}#qw<6{#d6km4el4mxDq($)`f~_dkzTM9WgyXQD4<4JP1V z){#A3tVdB`aQOo*W<}1~V_xdRk5v2#{dX>pa^7hq8_EyQKKvv2$5hrqv5>iIU;)D) z_=@**oe@8C%J}@np99L~?O{xRhHula1PbtnAMysQ-@q!fgSKym&f)b9O_# zL7nGj@2ICd0EQ0?FnBThSA(05(hI`=Hg2_f7##XJ)<`@BYNHliCR6Q9CuVH=j|~s zV=SBe*fLFBV`la*7K^11xjpBe^Usyf(hBX^DQ(0`rQ6Z9Z;& zpZ@k$%ddEKYs*UDZu`nDRr!g45u3%)!uE*WR9lPY31QPHx6dP|jKk!F=fq<)$i^pv zKN(HDOK^eb_5TdK3D1sVMVwhM6t%q1{*_;Ua?d+P-|NdYQ-zD$Bma*`FF(CnGG+0u zM(|b7|Ewon!q$y_nv~ni-Wg4(BKTe2-=P zRjOIpFyR_J-yYrGi*_aN4ED2dU5ztU$V$~9P`enL;u z&rlxJmv=iNBJ?=Mstv*>n}-|wd$f{)3!1$m;hGt={#-em9e3s%%X4e0ERj3i+S8yr zbt}KeqV1J?OY6_4C{`j>>SfkqCGiD&LnFQX&_W=;lm0$^$)aWOa+hpUnFQ7f6S>w6 z(y~AI{#&Mm&%urcYpA39lfl-*;{DkDZDEX5rQ2YH>pS%j3ulugr$8O!8<#2|W`@C) z1}BpFFIiCW4eUp!UdLX!(*`l?h`V{b6x~{$naUz&J+Gd)_(~w!gS+Nh9lvv-aM`N_ zQCoz>=fj`DfwU0Go7XP;9UN@2aQ+8=p(CFjH{bCP@A}`(G>^BcPdbO?j+Hz~k>j?! zTKmz>NVF%*M(X2KnrBd^mDQCeQrGocosY`6Ed+nmUL7P#9+737QU%`g0p>oHj_S;4 zCdjc>)CEN?mqZS)^vZr(&Rnf@^WZj>&5o8TF)|WnmksfIb;m3@qvX<^RB^Z$u6;S= zcBI=4ZjN5&$~db<@wiV)(1wC?yl?bC91pv`y4ZAnt6WXsS8Ma_@QmA@UQkX{)_L~z zE1IKn=15^zJtx-0Bx~37($Eut?z_){>p1!dv-=Kj=hbvUs%g+@uF??>2Udz`kwpEDVcW^ zijH=N+y7Ss*FI)WgxZv{Jm#h)7Jcd(>1<5z(Lik-X!goy1zf-Yb z$NWx0nEBTm35Ut&doM4}mT3ijZ#iW5`0%Apc~)_$-Oi90S1!=zGfF(AG(uSKs`j6hhGw$vrSSy_wDW?&Di_G+> z&Z!=A_eVcoeLTx4oIj$m$TishsnYS~QKSXsS$pU~gv^yr4@ve2zhWsF@z%jzC82)1Lyqz*cul8rqNu<^)}=-Y&ePDRcV)H6X$W?{mHFK zMWWW5SMaDLA;rKHcax@y5WwQ%iOz4U0tyzgB2 zl>wfC%nWCYdUX5dAFqw}rwJjijZ;m*yswbeiLk2P z^+w1?N_HZo7M6=>%0E24ZyOeK!zwqulg#&ucWl6M9uc!QRK;hHKQ&I2F#Ht=L;KaA=L7+ zvu2HPBhlHcFAt{>i_Sc&o^Y4{w$+-{WKLP3Mwy1Sbm{B;h+=o~!EIX^i>Iy^lLxF3 zHQLGNs_Ln=-HJd}d>G-{H_6og?#~pZZ-0C$G9%NPwPLSklp6b9U-DS+-cWN+T+X4Q zq3cJU4Th=JML;MCf>Tqk7Ms5U<-o!ok}WR!I3!NPLpC8l4tCLm;XKWvcV(|iio?47lau>K?5H;JPzI-hTtsd2p`T_G#WQ%2%n6+G66LW>t zDbp*nTmCWSjbW~*#_L}1c|5Xa{>#|6;$U8ZnA4F@j82=U5ffEvFeLD z{*91=j{dI@l0kGY9cG}Och6`2OX+aF?aW?I#^4*x_UY{4O-bZuySkno*v8Trty^>6 z98q24MmGu9h2&{WBPahyEdon9>K^&*SKf8mR&I8SRHZVoN0*daNc)}UyAQY#sSrw# z^1o#rB~8xn!byFNa@kH|RJ_11{>odgnzL&^mAzMyB#|VXHjY}6h;b`7;Rx47 zv}dPKYe1g#hw`2zx;YbW-UGaKy?-0GYd%JPyV*FDD=MPtEM_#U%O>u?Q=-ihMRh%u z%lZ}}w(DFd?{^zEhef9>_;1_ zVlV@6IicnC-rg9*lDj*{MkT0{qq-`;V}mf^4_3h##hwe{HzVBRIXpWa_RHCILc_X` zVPz?G39lqb?NYQMTU`!pZ0EMHaObV|L=c^z4?UXJCY400D%@Bw{x4`*X>}#Z&Rwr$ zYP$7|sk-8}aB=zwRFbP|N?*c({Sio!aVNCIxuZ_kXWww+4xQTueC@=l-7HW)_}&C`HJ(ViB3%+FuG&uY zg$@A}_Qcj#H?kUxa-=L;77QCZHQJ(7hYPwWx5UKAa0QMmJEMZ~R#7CSO#k{N{D_4M zO?8M{dsY^fcY#4w0c2gA4G}q}1R75I>%mvnJ12G7`AD*$aqnUgEji!gobQe#-z5{y zE9GWWUhJOPE#Kk!O#N19%&wZJAbZRnp@Ya2cW(kmVv%9*-6ecR^ zbh^idY#)bK-B2JT_)P@OLYu{&yaES-a`Pk$6IY&j{z46zAM61(HRtPxr?~`z!0uK_ z9xX(%Kj{iic4j7KP>`2}dtjj3XVk<5a&iDh8?CA;(RL#Nyr?J^5N)48R6emm)@jv~ zrZoE`bZRwLE~OAi7YG+F?D~Sil**r8s7X}08%aCo zi1qvup0K5t#2z^`UaLejz2A3;s&iJxGzCmT`d{*#YJ>skxd|t1jyIGYwWnHyDvI6l zFt#DbPyeP)Io%&S&mZ+}4QW-XMC~3>R0JAI8@*pcZcpzu~WkFDnb^WJl;KTBG?qp})xEbADyGah&v z{><3qPDFwENcK*RK{FsLZqmAnZlll5QO zZ^0~oi2la?m9byek{b@i)NOQTsgHy8@L+UmSfXunEgYri0$F)lEiH3G7YjAMvBZ@<&< z{%YwE3HtRh36n4_`7AK_!412wC`feu&>8p(iBHD@VHvGOXScP8I^xU#_&5LRO4vC3 z@i^K#$2}3-LeJ;ynZ)LMVSv%3JI0=bf`=e~o7@INDbM|ZcdguHWhf^7M{_BH?1k)^ zs&lZn3X~7pUY^(UR<53g}>=^wO2xTPe5>u%$ax9 z6pyI$XC8mjFM>VwZPLrHSW)j@R(b3= zwMAovPGR^#uQ{G=r@PUwrE55$)Qd6Z{irM}Si!(|2P6YMX?v^` zc4yqq${lbswC#RHZRVQ@CxJY57o}Jmim87i*MK$5Pb(UEyQZfxrHhTXx@U8f!Od>e z91gago`2EVxb=P+n}>6M`2*cDj4soJ=E(8I4vmo8wJiKj+||yEhe^WR8Yp52vUa7w zN-5zITXVK$JYnU}=UYEdC*4!I2gUAA>SdIE%R#9H*fWl^dVdss3=+*snREaoa_~By zT*)@gF4s7-@-pRmcGLw@&ewZF8$cvgU?ZiJbx+QKtyLXS3H`OsrdBPj34}7XS}$d& z{jq7-lQ!+cD|6D#3(UEIzt>B!`?sX#3!dxcMl<{h22@X-uIg3svM#y;K`O;eTxwC#mZ88-4qEEjp^r^^%d&_{f;zP{q+g;=HKhQ2t^8PSqyt z_A?%5f)Lu&1fnJ-bB7=*gj0!1<{+LB7jXO-)e`I2=%yh4y1LRMf9cHQk8{LJ92KW~ zeHg)q8(b!@i=a*r#DRHgT)S^bh|jFm*PpjLG}eDoRY5qO3GufdrCgKMSQU3mg5{Yi zuvuBdNk3Lp5boMkkMwKUWVjGI;&E|QOsIMLLemtU!A2M)sdDM9;OabJnD}sF=tFxsUy1R@XR};FPNlLZ zk49B-nFD2s05&!N6d1?mmL0&>u4R49aZK*iS^tmCdE8KZY%5kQ0V}Px+TUd&MS%5SQB8T97mTDhTU2?k4Chh#08BzQJ{qO>PA7fih@r4Qmvia zUWPITcNW6rBL?=M6M|ZBt;>Bqid%IWN__U-Y}nSYmOnu|XJE0vo|hezzO|gccWLkI z_>y?doq$8|f*T(fL7b6xJ(dsUkmNvR127H`A`5azkIZ*%w{8-7<3eqB;t8gbIkoXQqU&|;Fm{x{_B^=Pgxmi zZ)d;>e=GzZte&&Y6Pi=YE3r_EQh#mhu1cDFfs?k=tSj~k*z%kjdEHl;r-EzP0hI{& zE;Q4RE6x$WZeM5lf-FXF+LVFN^c-(jbh`&Ds941K+Pu#*5q?M!-6+TLWwAf%vWm4Z zMEgpPaF(4R5+tfJZ3pA0mnjaqBz{VN_mywrOsRXuUi|vcGjqq3?hRv=@|337zQD7T zirw^~K=w=Fs2un~$ye82rOB8mG8)C$_N1?8FO~&i`Zr<5Z ztE;P{mmMYjZAVtw@Y47#>jBj+FTY!vC6%L@twhwB%`wvbrsII=0iw>+t-3j8M9Lfg zmeJf)&ZB2Q$Io>>dSNgZ99W!SbIo$A9EkY9S5qF(OUNdwa2{PEv{0l!c7TY$*K(~@ zfj0`n_aY*?_S7amKp7@;=hOAx`O()@2mh8O-o*TDz{5Eyw2HHCq$nE|WzigztFpe_ zdx@ik^)LIeVK!sGq)%RaDk>2PJ(fEpAQ<&;*H>o(XaZ=;cSKGz+1OQaa`>p@H%dwJ zttWcLpA6I`ARBJDFfPR&5Fuzh^0RfGI)bD<4ndHt5$#AS+}gZ7bhVTdo~OnJm`m31BND(3lxO<6Q2HEX+VZ?%_kFWRSTAye#@~|oVfCK!^Vp{k zQVNQH#$72XjP(Q`v&E=0a$c#F^AeJ{7!iXN9lBco;_Lk>YJZ;0o_)Oe3n&YTBAwhg;?YQJ=w9>Eu)g9_@N3NX<#1LXA4vT|yXvxB>iU^Whow5JuDufl6;EDSIF8bp&saHGd* zySwb1LM&{9JJ_U=Q%cAZtA8nW`t}A2$Y6%M59DacV};ek2UYvC2T~$ehsi!IvJ^tC z92S=IJR5>E_tXQMOHbGK@&FY%m~rew;?W8_S=>j}8$0Van)Hj`ZlAH0miV~ms@uYH zAUmW77IP&`3|4gMkvV90|Fr3-Clzti%H9PRJaA8OME9A~uTe!)rZMF~@`|IRAD{TT z{X+`v1mFCa51+>B*M@_nk|zdlY17&|%H7q}45X9(vK)eg@Z2T)3|HoHdBe8Yhu=r) zdv(K>?hNyl%+3o_6g8+zatGZ@QQd8<-$jet#WBHWm_UawVy>5_iRy>+JqhQxTbJ5; zz5Z#BJ_eF|Du!OW4x9*@a-1C~pnOxif4Lb#j$78w&A!-YtD@lxSyeL!d8TZ@bBnsa zf{qo_g~w?<<6*bQzx4(P$~;v6nb@g2COb^_3Ok$-I-R2-&U?3%?oGrEYv5r&+}lK^Bom1 zI@6OMC$)ZPrWBRtn`Tp=6qnb~-%i@8GQwTfMWA--VF$ZZjfZ=D>mSBTDrSaIH_2xn zp@!emP;kq!Kx)i|#BKHQX>G&?5!1;aL6Z-szB_zuxdU9DvSy>XZMGA2iH513dhy*& zyY+kno;d-}1Lee3q=_nkgm$oeI4$ges-m3Rdc3GTK>(w~AU8|7e0zT#W z>cMORSC@vXWeOQG=C7auR)Usb_*jN@Nmzb%3vW?zby*Ekb--52tsvT*di9a&@ia~G zJABFJQ>9+zt+uBgJGwVJy_=;>nxZt?C+yXdw^`2?DwJ z`Ijpn4;DzpMTnQ=Kc`qID)+|-Ew5rq(9Zt|5opYbZ=Xv7$LqKAC=B` z!y##=j2CH7mD9a2$stNnq^rWrT6}KJXSNKP;^a)MS;&_18D3Z%5-oT$p4&j;Qv)kH z<^QI-m;!U;!x2-~l{tFl(cPV_WzL_hhs`gVg6E31=5jWfsPd$5uKSPwq|}kyzVgq- zNgtcX)8Hk>az69^Rn;6*1=82$_zw1R5-#TFieI?}jz zef{P2z7^@yh%A%1u(FGiy^Tza2xTD8IOqqppQs-*D+Cr%T9M$=y~0E_U~0e;o(U@i zyaOl$uv#Rl7z+w2}D)MHg-e6gEW! zhQ8e*LvTP9opa}qTqeUnJF~?eEBKzsm}S>Jqb){NB1G!p7RlVb? zv>>IF(W}6R=$!wVxphyfI>Ow0(>_% zK9`}C>`Dx{6#1A1w%(pp)Dml^@)g{j@ODKr91lt=ehn~EL8Y>>~FZKPJ#cDysV$ebsR zZNFS_j3qRvD)Ezl|8>yCa8t^Plz3V#Bxqzn@@i3$R*tA25kg%R_R1c_ov2|{HNz=Tf4yzDMVEI9GH+P0T>}gk5TCYe4 z*VQ$i=p^>PwZ^(OO6o_U2_V^V=jsBR;&I-@)9IeV{N17<- zUaLBhpV4CUwYTmA^ZJ__Ak*DQZkOc9-1#myI)#+ZFGj|h#5zhH^;-CK2|Te*NIlfMOuyL=iLcdM_;+E&?| zBUv)aTnBU@e*E+JRF_$8Y;LRa^2-;Mi;g@ws=vL8B5RnQR8-F!`5sZ_`jkm~ex+qsXkn?T zJVFH2;eMqti)4sgO%#eRZRISP9JMY|-}4?U#-&;WFgFLk?J?DXIgy!EZph(=+d=hG^Ld`GN zns3qcDUa0a%jZ6X=DP8uEb;%xmeBn1)7jN)e|^!D=$FTIdL&*D0|fQ@KrC&-3yLF)XW^QzH{qZ|3WY zIf5VC&OfOGgcKa0r$n{CuvU;`jmfQnc&`EURF1w7Kx5U<&h!J!Z$NRjf8EtTOAa}C z0bXq@Y2pHC_^2XK*W^mkf#t&VXwrLRxx3pd`=A-#IsKiz&|1`%> zu68Z0$~KOMDR$L`AXqsWKMbuRCU|5!$fxplc|tH;(z+K~L8hBD^t9cV@r^cPpUJxW z9dE)H&jjZ8H!{c7J&*io^a%XsarUIHHU&Wdf;@i>AvtI^jvHLA)QJnzp4;NoA?I+w zRclcRMSy!B+X)ky^u?OF7j<)2t_PiH>(t5!py?`#Y4FdVgFNM_(f&9?EY>1sLefi^=0un)HYMY6qg} z{zL^KDmV|5gl*ZSiD0S4j3%B zh<|Tso~)Ef)$cTFJm_OSFuM&sZm6(`6&QOv3#aA-yfkF;lDD$g%5L2iVM$^gf5oHw zRp4NeEHE-Rn+WuRK(7=uk10&dC%MpU*YCaXg+=yN%oio};54O%fF4IElrHS{Jdn%t zNbd4X#zgvjAZ>8(ZquI;=610TG%jF--P&IZ;n)fX_^wJm&Vjf92NC_hbTJqa&xvt| zNmvoa)yc?0O_kItLLGE`RS}dG;Y2NZ{Mx{Du7LS0X=qz9h4d#7eds)e>MyUa?)pkW zBd35mo}(2#K7K6GF;QWr&zZnd)j%qx8uLjLlCU;-N6_av^BwQ)Jo)!6Jewv3ic+S5 zp{tTK7xatQakb+wI>wuSU()ED*SK3$q&~u~*0Hr0nK58FzjtZkofTL|?|a3QRwgWP zyJz;+{Yxoh%Q=|mfC(*VOSfRvehP9ILOX>tJ2E+(H^yNuO#LGK+<<(BGAN83y#iVR z4XHFaH92ZZwaqd@OflRxbf|RX+CV;09xF;w11diHakPD6Pm5WX(Qx-zf6pPQ|Mh;j z*dC$tPU9Z(`1+YgL%k5Mar?lNC**j3Ma4=R3m4fXujnI13tapd^WZs8k|?7pN2z6N zv;}{rx5;MluCs_o%RHJC;k%22col@Likq{vbP>fm56^+iKas7O@%FIDhLI*oUlr4* zaiOJVLMMZiT@6lt%IjM<72epXur&jC5l8 zvH{iRy9Ht_b5S`G&SjI2%!-ek>AU0wbzA8dm8kk?hyT3uB^BimUfBr4VgqM6#6*`lpf;HPoX>v8{bf9;NITbWHy zOtd6EbZx!Qm5g9ZW)E!?U{J|wHU;7dHBzGS+!>QNnPiVYHeyCniT2~m`QhgpLD`Q^ z)3U5A;K~4V#yuBLc$WM%#Y{YMA``0m`JL3fQKp`fXNY0Z8@)U~%>bFR^INv$lgzZU zO>M}KfJou$;uK%);2~YE@K$TYM)tS^M%{!`!3W#?(r3b(p<1%-@~1?m#~_*P^ch%Ix2ktb1MuzfePGc{xX=GeU)V(vMT15&17{6x#b?q z_Xq`XUwV8@e)sT&)(gIUGum<9+lW`UH2wHbQ2&Cmt3}G|yTL$YMIg}*jH2DVZw4vi zwg`*~1s-%oAk}`dbx!Rpcl4Oe4nux0(gNfvb~+Z zNLC{%74BiZs|LlC?L)!ZJ+DcA5WjC#r>;D{dHm+n&xhP})&c8*Z+(W@z0ksNX7*jZJSm#cQDN)W zI_$W4qHyG@pRL)@M|Q2~;ih+E&#c8X{r<%#CB0z1>?AREb^kinxdhrC{-R8fYCs-?;7w$LgO(3{C z=PCmBKX`UrW^QiREc{PKyyYFdtnod+jm1a%Is2Dr!m{K9e?lNEbw`^{2aoH~%KZ}B zwP~se?{ZyURF9IcKs(gkkAEe=j;5xEN-n`v6H;~a1*WSqIYf+n6&tiV$U^M1S_PG1 z_WYaoH?L+4jwr2XZD=J-G8pw`=QC%4Z1fvBKX?nT2g8Ew78|l$kyp>ORNS<^`p$gi zkGf9tugTz{`#e2A5HRbL5i+S`7?0M8hl(fkvfI!F_?v_(fdh{LYe|XY_^rC>t+n?7 z`(mwRg|xBllOwmnKHTqWOw$W4v2vD0kmNmb+jtTEx`0X)y03s>N2BK$6qLKscWH3j zirWUdbAmZP?&hDezAP8F9VEsgE>fcXPv>CtvQVgJ?SBG2VEzpq4JAXh-G09QKp`>6 zJyCXvt(P-up_L>j>aa3UMVb8Dx!H4+fP^{nldtBBwq%;*(z74S#+RB4Bq|z!&L#`8 zpMoV-ifjG(mk`6b$K2B-t?#(P+l~Ybo{Fwl%GBGQ$A?b}II1-M89KOAIndR}OBl5J zpjpr#>U~Z|G@o;ifoynh1FyCLMyRX^q)DkqbbDDYFkVPWL}YLt>s9mG{sZZG?-DPr zP9_5Q~b#K*GNf;^3)RQ|e{fJ?q8y z5e{HwWG1C*LydJ#7nOKKq6TX`3VC8H$x3yac6)Aos@s3Z@1TCOs$sw&<*+^Ns!?4* zt{Za@OL^4sDD-6c<;hcfc6)?(KE1IrV|msk;r3j7^~{0y@}5&!&q>+7J7M-ywz*|t zHbijf3^&+;_w*rdJsH=b#5_)VO$*aa2pExW_){kZy^(;~8oolAT$#G#_1(I*x=s%B zhluSW{w^qVjQ$IsJ)CmX_|8+1#oYPKis$jyqYS%siVdq<=eEj{qc>6uBGEnS2ueS| zQ6f>HmE2K-cCNUqC)xnXhtDpucj8$bEFspo?L&oa=Amvit!(22HlpH|U$uj_7yk>& z8!djI?k=TDK46}wm314AOwYU2{2VktO9TbKR%A!YaPe+hYdDF{d>KgE(O1l zd`napK!+$admJD2 z)lVmd(I;tKN@wTq9S>~h&mml_ixL8U@qI^P$rj1BR@FT_9aEfBD39d^b-1RyGSH1P_du4mlp^ePhc`0lq4NHZLzUrU=4GAOfhk)8~CLdgA zSlGgFn{@x%1L_`Jrqa3j)o14>me0<|Uui&4*#0-ZxG_J=rY8J@wX7c!c68 z&H7z)-5fs`sD&hOa30dVynb`!KmF>0rXzvy9FSYPw&x%V^`gpYufm9Ga)8yr+&Ce; z&s82%00%M?kjcg&;sq~J_ase>8z4TbqnRjsQuf+lel|XP4So&mBA(4^ris!OK_o7oXX;Z^aM4aK=sQk1j@Yetf73Za!*1O~4(cxE^7jw%%M4{Euz7Vu#3msIdR| zQ2(YhZ&>of?TBuV-G-u+4TvMyz7RlU7nL$@nL`XH+iG1?YkV}WZ_dC~l=y@Ce{nh{-?nbx$yU4D`{{~C+!g|>mULaGis!;{xSUU#-46mSpOJq(SGJ*=#Cnl`GWj*KhL9@ zzF`=vYtf=_$oU>toXk%K^U}3;q^!Bz{X?Yk5NYN z!%8062U@{(n-ph{X8}Y7;Wv6h!!TTbcS8phPl7sSOmdVANNn|tT=?aCVeTvi)la&? zGS_OfEVMd7zVmq%A-{9l>3J?r;JBnre~W0^5?a~3m`oe3I~-|Lf!83q^@pD7vqv^P znaI(Xmh5x!r?y*82WcK%(n|nLBfNph+aDbbV(?T{K$~isJXP_;3%gV_ z3ff%>d<;ZxqS<7#&skOm8AxpSS2%+i3*VmXPkOF9X#u=et}TtMghe4(2_W+3HO^uG zvE|@KQQ|r3bd)pR46OLCQ^7rTS;EmcarR^Wnv_}E%|ErOo9EzsJ#^2RF{kk<*})RH z6Vx7`4NkH`V<6b528-&>SZH>djpM&vD;{ z!QY~-AeH-$0w2GBk$LjisxC(N9!Ke3^akUVciUZ^oW}chNqzH+SwsWumwLhOuMEEp z6;0i#q3{uXOC<{@5E131M_JYh?kC=CbnOI{)KfGiiJ%OJ3lV`PeW%ZI@$xAvEb%USIH|vBjjnk3E^JGtqSCeqG(bc( z9E%6$UNkY}@Jze0Yrb`nqcHp8!<-E4e{8{TXxZe1@^+YP{0U{_52vj(OlbDw|Us%DUrc7IEh z7Cy29z1U8$sj^A3UEsLV@n^plgkWX|xw5qaIVrAcDQ@j>dGf?oA5Q_@Ta@9+R8f%h zjatmZDxT1Ctv^CHr~9eP*t36;$?sn0+6YxV{5j5L`>Abx;d}=FR>{8^DHlJ<)?bMI z$d+*0%susc<^krU*2~bbwI$^EB&DwWWiki-UGQcY+nSf9LR^|{l6hlI|1`H*!%`?` zY+lEejZfv@h!NF6ZI^HE7ub&7l9rwtpV&T2_e96qeyGKu2}4~wz(Jey8g_P078olO z%0w@W6_K0M(b`{PXAl`|C0g%y+2U3S^ZFUXhrApv)3O6?OeOpsds5TjNQ-UY0US0_ z0Zu`)HccPCg`%ZJL_-8O?1NopHNVKD5z9hn=yw1V77{C-NTK?;Kw;UGDh{Gzyl6H{ z5H)+;W(<3o`!7lA%;f$kmTcA>bzQ3Yg{A{?n9-#dpN(cnUUo1tFL#I!yv=|C9S2#) z3SH1ed*X^d;*D*iQINEH#p$ZQ@8MlL;AaJz&SmC->fQ{ybT5^4gkRCegW897|YG%@Gx)b9q?sA;th8DCyaY zesUG6%)`foeeVktO=R;sy=*V>71k(t&PiB8YhWMcp|@~b#a6oUvRuo8`}OR&4x574 zJ6D3DOPfqFM%Sfnke={Hkmq*4FAPmp20|3JM$5l5>*JP1^@A4fnW6Y^`+)Emg1eM8 z1Nu5RER)ofG&Mb5|KMED*ozOYiR05sCo)B}EwDR1w#u}_SMeY9&kuV{{V^K(IOoWo zFi{zi$M+_9^NNZf4bI+aXJH1ixIk!Nrw&-(JQ;65J=iw=-e60@bp(7U&jDr=U5FPO z8xwiY_d{W8E=X=HWgj_hrtUX!T?gJ+dll>*eD+&&^~+MFtWZr^tF;?~djfkcJ*%)H zo3U?7V3ADHV~O;M09)Y;KRb`*6GqMt%rv=$Z$5mUMTR3f&0bNX@x#Nt- zmS)s*(ai>7$HlC0cI0PPFWzlFF(5qliXuEW&yAV$R2a+-&$lO3WlSc`?LBNXltJ3h zY}ZYGT)3zpTA!7;Y$jThCto4f!vM*<6&mwaggas})o!ejll&?8H;@lV4tD!B;pum+ zHl-$cdf~GXQWttvW$}7UoHy>Oi`OWI;n_sFt*DBJEkXn{Kc4%KEtF_4{#0TbSmMy} zi}hHxH_`gY+U5r=A|^*Gv=Um72q!}VT163g+AgnMKyo*!KK8t@hp;%=$2BAo2Cm%V z3aRd=h0>>N?k^qzrcL#L#-i$ z94`aUiuu}72L0$WNqcj@!-m7FkI_xVUUYkp!a12ZLn2PH=rUTMv>zWNqa4&u?Y$b)xJu?(|JAV9Db*MTMIYd^99qaw6v!o{ zh~B$82)?d>x3S$}1*_k2NLp@MgXHkh^6A|#`)wek-!nW7rBX z%dE-uhQFYW!1J%SSV{83I0aA=&FjKu`(RH*6ZJtfq5_QE00ye2K;sa~Sq?VHMA2c9 ztH=Ckv^6!$fWZi3`1$#wAgm8ap4GKgWa*K%MgLciq$4M&L;0;hZc|n%D~d?pPYdfF z*JDq{VCP1mH0 zcl=YajYB!eHtFur7RZ^}pQjc2)aerP`1rGRF}k*g;o|V@+z@Z1^+{Hibk%zm?kaV& zE|>#L?97I$vT=OQxyjX^;WxbgL40p~kFo)XG<#-a#Mg9fWCDE) z6SaytTh&l_0_UJ-DRb!20~R8oPAX*#W$B1iz5yo8I<8<^0W)-M@Yk<&qfdLM*K@`` zT$Kn^W)>CE-nKP@b32Zo&l~u;nfdzpWtT9|B#*jPsCchGeGe;rlLgCB1K0#?9=7|{ zkiK2qUv&S?RXn67ez*Cyt3@&5m%DX-W~UrkO+~qN6bvSIK(G4x=QkBCE6aWtG{BHh zP%H<#!UO3w<5tOuXAg7UeaX9JC>o;>@h{(T>z&z=w}WX5$g^O}>9pn0*fbm^I#gcE zaw-|B1vGtHppY-I#q)&GJ2@g**zph^>vt$qjkI3ku$|qDL20%3SI+l0XFn)Ia!18$7gq%!se$TGEi?w0hFh)5e5`gA1)NHlQ%^|Azf%+d7j zY;)Bzb8V4wez<&LcSEzN?v2mtP|aH{PLI8HM2Zciw9Yl*&GC0wWuyh5^b-;hWW9i17UZSw!tS!B=E)+x zAjrq8q+0GZcj>UZtuc`8;u8(7B1wqeh*Tec5vYZ2(dWJ_RmEXOkII*X8l=awa0qB- zMa&;+VW>)K=0%&@*H6e)IF(ge{L9dHKPj7Ll;eL7rVR*j@9gyz)+;Zj`W_dMy*89c z6Z;QN=RI$?CfgiuIu1hqmbn`^6YcC4A}aj99p@7sUV^l`Rw^<^JqV?&`R!TrBl)HY z_{*;;%2a=shk(@@c@Ik-?KAo;_g&TWGj^*h;1MIcO>5H*xKi@}TflhgxR>{RkJl}1$mO?~gQ zD3!+ydbTKby!`Gh-s-|Df?H9?$m$mN;?hvb^*iX$ZheUXs! zgnKU4nUOy9hHn`^z^hVy=*{W=c>yYqLz5D!pTG~2`IHdh7;P2CNz45W~JW$wDf+#6U^ z^LJ9nFrJ66Ivwx$Js)a?nt$sDP{1aZh<0rURfQ-vK03r%mJQu1F4&Djyc}?`|7MmQ zuJ~#~_~7Z0Wrx+V(LMOBKNf0M^<5qMUBNH#74Mz3ZK4wpZ?%4X^DH3gkEmf1(W*~Y z(;!Hwa-P~NbFx>fL{Lva`cz=CX6<_wFTDp6^H4?amhME{glhQTA>;l(SPc&( zjDP=FmK+B_yC>e-u=RvG{B=-SX5Qx%7Hn-*EL-c#FdlbIITaH+giBwJW~n4l(ZmF| z(KZQFDv)D*tIR-QT-8voq^J0CHj#PlKui)L{@`R1N0u&mh7{kOrcHElpE$i9V0U!( zTxOY&dzby5Y-CG~<32Z75mWGLN;mZ6ORQ#=Z&=WE!=~Q5^W_0X`mphNXSAfB01omn z7l$n+2|qDfsc|X}btEdl_hsq!c%4+8DZtWY;p{K%hV=YjvHRzZU7W74O8hZ39j&_%3ik`_u~=H zWKzesmc?E(u|cv10|vX<>>|Iq|5YIG{gxaQkqB?zhj#K18UoSBiLx?X$9LH^Tey19 zzW(Jt)Q`Gco0iAhmS_e&Zv6LQDg!fzn3)gcZg+mvPaXOlDpx+7U|j5P zXfR$5zHu=v%6plZn*qBhVfe0!z$H8a+#SlqLSUc0J{Iofi zg2M4=X}2gBI$&U7d|u{t{PRBC9cOfH<0W~AcHh}$bnV{muRXClU(V=9fj9jX$5I!O zztcJF{th;u;5li`P>*u}eOF3PgoS@@!nL~j$67P%3Ngh7gk-z5(U;bLz46yG_e4CTA8 z`^(W!C39bYCi3DID{qPGrL!?pqT^hp^js)o__n*!f@{?=EpI6f$7qFNqEbXHpytY>*o7v;>(Vt!8BQ5Bt z*{+1mp4w|Iujkw^u7pMJNjmiV1)kFTK1;Fn3gY!$Z4zPQ^e+fbuPbkx#172tUlNwf zn*G}1yBr3zXGXW}$9-&`rd|Wi`m|r_>^n;8hSK3-rk+mJd+d!4{H!;^6+VCL>|pJ% z9~tPGAeCVZmV$JJjqg5PPn2!v>qCS(wH~{}yTs^dy6blCF1U4rJe{UDb!tW!e>rq) z60M0RHzv>gq^u5Bed~2Sc&C@Qk*7HL4cTHNYJ!g1x1R0)nWF+_Y83Kc29z375nx`Z z@~wpS-$R`8P(?!Wc{Rn!+I|$ZC%LnPYdCJs#~q){6EB-5S=9}))L%Ln zyF~u}Ie2GH8m@i)Sg)M8e7?WC3=KB(9>;?xqFJ8bqg8b<$OKSUIf@7x^waf*fBB>` z(b&`3)~A>c1x(MpWz-G+}_@=Nay|d2zm`9dyR{=>3-B$ zb1H_GOBq;s;80~>dY6=@EegQC_55A|)Styyyrc3oswJU7|2Ds37l{H#yyOz>)5>;? z>nC~4OOba|!vnrCVU)?i0-G#yoOiH22I3UHXKDC9wLKzbyYE()G>epE0%3^=(Vn|* z7McOw{jn=DLo$yl#LY@7=8m|5Lz-f&3W#v&D16fy07t2O+}xs1MtRt#3j z+*Y9FVGt1I;#ZqAxlo^J{MR~bdI*ghvc&}z3WS6>C`&o1o`ppcyX3}#?eZ?h@(bfb zhgKq@xO?jv6G)Tlr~$IMQYuMz_ETonBrLYYgR^x_gy~0A+Aj-1#euK>C4Fu zIlsm^meqV}?P{FEuRgpf0V~%Tabo8qQl9}Oh+CyJ3xwP~EUr&}=l!oErWdjxSWRHjV@P19 z?Lt5LeB=O(ty%G@*VXOj7BMR6GMfYN#<6NCscQ=3vkdW+?KqY`&#yu8lkBBqGsNjP zTR*7j={%BH6Df&<=h$YT@WV`IMk@{i4Q3K`5DcuIZ5~_yAC&Z!JMC3*j?^uiSw;ML zIME2^J#zx5XAU!Hne3I8%GuR5g9eokBOiI=JR`q# zhHa8{k8tk~bl}D0+|RY~Pd!)RW=nYOlaa}S-s$3yoR1{<spkc|#2HTE*b>U&z_n3iIR2^wTL^sjd%3NUlU--`d zQN;NF(3|}jWq-5zeE33D_PpkS&ds(VVU*+hxXl0D>+dA?)2f|Uf2rd$t;o1urz!98 ze%}Wp9NN6-g;-MguRyA_&u*;`cq3!G*wjwnzccqMkG=Uu#hC$YZ#T7VjjdG3&{-p- zX7<_z^Dam@MHQ42Q?IK~T|UVU8J+oR$EZV3E z8Nh&lq0OS^V=ZkdZOjCw`xDHS2h^IbkLEG$C#v!9atui} zTzZ-xX2yBZyYl09N6IrrMVC2WGtq6WQ7Lw#Uw`tF>$W*Qj(|_+cJ@`K1bWRNxBh%i0Hi< z^dM6|oVI8G1}OJ?3_8L6LMn_(Hrsu&*4@+~_rF^k(t|a&s3)RsyInXnq`(w8xMQlH zcZ~b}Wt$=+n$zFr$17-Mg&0?_&44kQ;IQ-?1&7P7ex3Sl4$Eqnt?f;c@L-D*3|Z@W zs`2=r#Ox{G-_`9RjUTi-`?ilw$q~o~NSS&x-rXLwVYJT9uF`*l)xpFph?*Q!!E3PX73vrnw}(C;V=oLNtm4@*VYjGCo&ufbldWx&K}8vXePgRi zsmVJ=eaq2|#=fQ^fZQ)J_a$Om@l4SqFZ=>(svczjXyKu@BHA&g3|=wW=KsE2VtUK4 zkn1=g0dib%!!#@Jm>;aA54LL5DaV8A_FYIE`KK|r?vG}#pZane{OyUpDlr*mt?gg0 zV+QUByR52x`krAN!bxp+=CV*W5o|WBQ$OMC;`FrX6$5Z&T#gI6HB zw~&ZhRH(_V*(VIYWvcG1le<1Ows90)TYWNG zss{jhEtGT)q8kiy!F>@Ed<-nG;``!6E~*d~zF5G@y7e793|PCkL$eq)Qg%dI&HMQ(8-Wmk1yDUNNO4GV&Glea7Jc+f&|jTfIoYt2Ye;os~4auPj}% zGyb*TH~C&sI$nJ8{B|cG+1$gscdmT>p+A1cl)BvNyqH7W%a+&?&%=TO&4W+Mf@D&- zX=J>{Iz=V&9#^Gy5aZGl9k%Q=BOv5SVT>22gAfr&eiQJ}*HO(a=;H7_*c3lMl`drP zeOD)2z}}_$0{!!%%ZGEyc>7_~svf*h1#ubzqR^&&D0fL3Ipgw1Q8pap~8bh7MMFMFon5hW|zgUXmS~Ew1fiqCPfY>JygjD{J9`CTP0zGxB@s zqbKs1s&|TyLI$QTquE#Cv7Bg+6jRmd3A2(oh$`J3r1*TXi$`Q|UFq`Cc6b1hH-StD zsdM;T_22^Hh4;j1WjZL4fWGL*KM#F{U-3zQUGGhiY4}hHAD0Ymb>Zol$n4ZT?YPd< zIk^>O)Q{Q{i0MKGXxUt5mukhoM=7+ouH<|Vc~=qlTH$)pXbLzr?@<_hB zu15K~PSFwXr9mx`W!NjaUoJd6F}yXlAEk?Ew0u)$T(@6J!y?e^)9h??<^So$HS%`B z*a@-mCVSBPVq9y~rLR@Au9IT<@~g39lIiYl9*{t7G!tOrvuT_;#9bP8eGqOVN6IYKn z{U6#m)Bn6}HLUZZaJZC;8#f*|V0yS%5URY=^ux(b&uX0d3ni*DQvEDZIam#j3^-IZ z56Yl$nh}CrP#ih!tKLU0aG`cJ4P@(Z{-%cXGpRctH-%C8>K2B46F^4agAZ@_iR)@O zIFo*4C&x~+VN|YJCL@NLe`ZkcBv~|fxX;wzt#kj5fw!OCAK!b4YuFSK?)AjvGaW~{ zjkX4&h^%Zs9OJ(d!XV3jr`E$sfSKsRC*ITj=+*Z57;`kHDycZ>8#J6=z~V2K#fb8+ zm=QVBx3J#5FA}N_h}k{dr|(YgcZZ3T8M_h|E}nju7D^G?9W3sSOe5##!oE&~tgMojYW>+c5thRq zyB6Vk-9Ad&PcM@4=6mk$_Bh9@(az6f*AiM0xO<7hlL8Q?4b}`u#>A=HY?58&N}CUK z>~1JU!q4nLFBnq(25Z#G;yNonCf}m9^)`%sq1c1D`n6oM=hq9C)vx0Q;GPf3Y9vHI z7P?~xI2P)q3Zs>h$h=O+nH&BzI>wXX9E9>P(A1SlG=FruosXAN>R?LlX=SIq1)T8Q z_htD$-v6f6@1jN zC$EXi_DxN)V{PxuBCzx`=XP z_3pa#sJqJ&ztDTbRMR{&@d2}*iB=Kq$M{lc)QoW!f!gsA6z1d`0(|XQd~Gbz{uI6^YDS!RT<4Lo&}_$ z`-j7L-f%UIQ9u7LQM_;W9J4aNP~oV9)4H>b4QY9R<2($E!JBZ}t7y*~X1rAG)zzdoVEEW-i;`k?YG96%RkZ47p{Cw}hE zVFnuPaC7O`Q#dXWi=wjoUwRhM(Q5t>@2PxpntrdtFVaXjGSQERA9;+Z9{P2AEA#-* z|5j`z;X^w(L_mT%M0@6)uDTvFnXq zdLPwtPNeM>$Y+lc<6lGr&Zd1sLe}x4`!ZM;f)+IUqk@%~xfzKa$LSLA@L%f;vV3zi zRD13J&EaA)a<}SxJbv#6)(<9XPm1~~HyiQ{9+Ha-%Y|)R*zVuwVBU4~Zq-lc# zL{2UItN;1X^3)Z!U#i2LE`yD0d$vxHd~7i2>`|yw04;jr_rmyNB%8$Nrp|r5qV93o z^#pE;QFA56)Ggl*bf!8P@aHAlcj}5;>`CER;%E?|dHa+}x z#FVT4Zw&SN<}w1m`+U_OiMWl_N>6qAD^zpDO<|btOzPDcD_L%Ud>IFYY=7x&o=x3! zaCbjS1rMP5aqHf*1F~V87Z|e+*yNhBKZzQs9f~LNG1w{M5(Cx@N~4LCgKC^LFWO ztLnlP84TI><}bDXa3c^S0Xz>6=4Fq)PLc2>l(Ed9`=5}QV&k9gAPr@7ir;4@STw|DmR zI8u7@o0DN$u}(L%>8)2&ls=}D>SyWU(@M)IIzEjNfl$DM^~2r&s#4*}#FgLtba++G zX*t%CvcIpJl638`9@mK(`uE|*1T*)&DJJQEa}D@t9m>3qo7=azN_Yc@*T_G47#^@3 z<(1@LA4L!IMFhF&BR>#mn*F11MfIFCZkq;78ef!+yf(_lMB1A?L@i$wms6lK--7aBdgxZS`)Zuzm4CyL-%j>_ex6(o z7mc#iud!PReU4xnLIG%R&7?$F&mmsCyInUm4#U#bNK-(#@8dQx2|5bLPV=B>wg34m zOxdsa1{@s^m1i=~y?>l{oG&APq8slH*1UT{y}$ZH8x~mAT`9e>-@mV1ff;y)vY+rG z|H~vs!wChSEXXj^;7bpOhI%*kB5|X=PuRlo0&(U{FW#Ex4|jj>85}7*)sD& zf&#kxD-C&nO|U*%){F?GNo2M+MP@Fd_BAOT&zY_y#c2nQ?+u-JkhRfnQ%ln)(`R6! zcE0o1u*DG}zizc$B8+TOk}&)tcGIL2Ww6_}vW;0yyt25fX4O`&VtJ$AJ=S?2; zr=`HJvDKUOA!>UoxvN2$)89dvRIc9{c(L8l&72>xZHVlWEqY(ozylZCi^;yDe6D zL~0$e&b>$rV2DLSc0(5_Pp7I`;hg$6W+F;elfr;Aelq_?9X}&(PR7vYZ^A>r@duEtPRus~ae^^jhjOjAzsaQY!R9|iatGVCj_dA{7N2OY?>uYL;LuPC9zCT|d)AszCh)yevKHRGvcU<+;zvJhuyWi97bo^}DG{y-vr z5j+097-RjEs(_?W_+Z3>NDwb)iNZZO?=<#z0YV;fT7;-5%3rowg7shFX^L8nj&k@( ziDoBoiC`rNiW~O7kSZjL0B$4?O!LH>`n^Hj7k@3S8t+MazxgWLODt}IzuBCy_zO$q z`7?7_6T*co$Yooq+ErmKx9a149mhOw%)R1rDv;*Cp9a^Fz_n%jh0G!(k)Y8i8tl*v zl;Y{j`({3tR$Fifl)=Y^WbUTASTF$SXXqbo)9?eNfSTodJt!EK;uLRUS<7quj%4G01umHIWlnuYHqaewdN&&YA$)rqPgiF;CG z;2jG6z$B|**uC^H3RH3a1Fc|_2hO~O&yWWj`XVjk;V9!=uoS8VO*E8$v5304bj&5h z-0)BnI~>6CqOXT3qtHbKk_3tu+$0~O*b6Wymy=s?0SPX~BA0%s+Ykh8CKNN;s~8zh z60qcd?ArsyixQS5vSTtA=jJBqsD;gxKi{96-~3+s^9H@=h3ZMA7f}s_G$bNdpyFPp zB6)H?XhWTCsel@BS%z#2OTy1N$n00G1_A;la9ZNmVI#grQp3`7-3|fO+nN)i&_Oth zTj_v<(V=7Quy}4#`1C$?xC!Sn%Wz131Lm5Fft3q>QEttea`&sxw@09!zAOWn~-YV5aU5pzL`6NPvyU7Z3TR+o%AEp zyl1se<|iHKKBx*yOGISj<@a22OaCm*fSBCgEJC@l5_u$sPdtho^BI>-;J*?{l*wrV zS@P6Vd2v=KR8dJCsZuPPbO4g8T9B=!Bo_SyN(%=ibNk2iRYx&V_1JRR zdA#kZDW}7OmHK|h?khpmPzbbS$`UD-=awgmBo%=oq#=l_q(CVK4s_q4o6u+8C&?8S zPPTrfS>7!jjD%BK!?KX1GT* zjZfIy7s=d36GvuU{gKPmDO}U!>9Yb^1=-fAfc6vtezRjqhyeP3!v!NU=&0vu?8qW^-V*Of?b1 zKL3Pv)H?zBes6YHb9SCUR)MrwycITiQ}nd(XSwh>$mE#%$C0k7;ORghi;9SrB^G6| z6~}X@sep`cdY13fjN`Lh+JwL##83Twy;eY7I2<939~?x_0rrpyS3#Ins3tPKD=eK7 zBMW%NOoU#?lY!lCw77s8zkb5J(av-_Pc;>*;A1wOd~tmrH}>sGAvLj0AI-_i6v83cP=pT(&Z;cHEmkZ|c_iZKvUax?A=udn|Doe(<(x(iOXnLgtg`n|d8bBfl9y@90CiuA>^XA*6 z{K!A}lVF!d@Z@+#TAON1p6l?5B}J8T4d?k{Ka=>rmMW&}5bOtIX!KjdQf!bO3#4ul zi2@AT;M3%$a3Sh(vXfA|I{K^Ml8lp=2>otWTAt1*!-jQN^cK~Xdr_eBIk{eEV9m~% zgmH**g0}l>95|j!5vC2k+D&9&aA6z;Bn9RK6VeQ!XMh<}!S@g&*+k}@-8wN8m$H;4 zg}wVz#=h!uwdrK50+X_29{=~X&kVuatZiitzX(aR)^CqrNb<4MWsm{Nif6Z ziPrhF7CnB=gDC~gC$!&w)ZWSrb{U9?X^B0%r> zRQvJc^1v1o14XIfAi`9>9RyP&OUHPXY-u$6O?$V&a}uKz4*R5T{eifQKP5TFik ztIh#c(GaHsSFO!N0}63JZ&6am2w(WpO{`^PrTcx1iFQxVlZbFn3bJ?4wrAe^Ds(1T zcZ*fEG>T?v^HZLiopd&^^xYS{zJnJBBF6N$nL27JDq1>PdRnxuY5Mv@9mDJq$lh!2 zLpq1jLJk#)rBe%%pv~N`v2D|KZm;!H^_cx_3RrQMLCe(Dh7&zUxH;(c3GFLtwN1Gc z7RpQMWDP5BHCjjVC-GX6ILqb4;7}!FDjlWJtr?(X2F4T!_`Zd}*>7`lL0;GLb0*1& zj=ZPxrjAOjE`0>n?N$c(AEb}5(%gYR@}mil$7&2~l$H*Z%7b@5mCEau(RV9Wx59S( zVX2jIh-G`}v9TEmcRS>*dTn5q>M|QH&Fe87m(|78kbs<+2I)896Bpt)5LK#&4`(l{ zV7&s+kQer(X^LSvOL@Oz78MZ7KkNyd+|G)4;To(=W`KrS9)2s;OMt-;M2j5!p-@O2 zJzF5cC8_0m>uc&lCD}(9M7g;Rze-2phs3l|TXL;L)Z#ow_`fRL!w**O-^~H|f#M#k z*2fsrTXix<|ISL;UPFioNDC$5=1L5#8G#~|W5em9RvdcH6e@y+;Xs;ITBAI}zRE;1 z8f?9d1hRcx24$xAeO`em=M4GRAyoGML+w9Gin>G~ha!c%nsg++7t!IrUoqg%bLqQn z>;Bma`rFKs8ufMBO!Zx=ZE*!0d)@-;JAVGH&Ozc-=aJUI<&^)>c>KMuhJh%Z)wdmh zXk9{#J!qkxG+G?^RYw#j^(PZHHpjFT0}XvHR;lW8oO5e(WJPYDN4azln9kO3kQ zbAa#wvm#1@)GPW6(t!zOms1@1i6`B;8-<^nKB9DaY`j)6-OzOHI$iD~_M)VMN$qVn zqR?L^;A#q9D?baQIHmN10qci&&BzR?3P28(M*bxt97>eZLH8wMi~ns|FSp2YxlBi? zwHK1+S+@t7gD6v@=!p0(B@j#D6p|}U`v3el9h3URyZBeslsk&R;z_!o8(==UvDiPU z(r4WmC`SkncdgeA@uSpBh#1U=!GT5T5-?+Gb0+uFj*?(PAAxBfe*KdL=R1ESdQ$J? z>SX?qHGS#j&|2}|C}=OUn_p@D6b3?tnWtL6W?+(0sVpM^LV-X_$F1rS)%$))sTIxo zUjqGhYvK*9a(bK}x*8p^s`@W&hJw*&CQa&RSW2}~BRuxJn?cH{Qs?7o1)wDC`8Z$c z1H8!)YvG`EX04BJoDD3>ou%!BU8PF;!%Z&+}vJPZbOHdz?fp< zk}4!cou*FycBj5EL?oOLLxH0g*e$SR8 zTWTXB%v@YloP>qkb{X{fyQ9jFAySk}(lAv9rQSwmv=5iD7$dR7-p<~N+D~Gx znv52sDhZqgl&$5ZUG5;)9Z&{WIA8riW{f@OYVm6j!uSJiUQAXDWOfvmp+neX2^mBb zBxtA!E`PhQJT>WO*}v(YYD8(^JQK2%FD5Mlviu?P+?zFpYn3YgoooOu9ih~U=Mk{6 zbaNNi2pUGNTeA@xfC+d;W9H{Xz@@2(x?xDKl6tqI;S`%P&}}!-m;j zO^x6S)is9JO#TZNXPZ75C^Q~DbyV~`ISOi&Om_cHyd34-?nV$FdCKr{O8O_%Gup0i zl(vdEQQ@M^`dgY+9sZUula>Vucz4EFq-fn z^=#lxctfHKz6KJyl|PA=|6`i7V6B%WFMDCr05feo?ov?oBB>(t7SLrO{F+8_x%3Z) zDa$TqYU?SALYlYK;pYO0#BXM%nY5=d;tdaQIENP7iA9UOY#J6XByp^`hxvyb4v8AK zmGTh$!H=IWWE2%znE0%5r*M*Yuzlswa}zn8X)dH9KWkcVz!0R80%K&tUTSeM3Lh_4 zuPLtTPnWh2`F|=IQtCZPuW;U>Jtp#YWpzXHiP6_IbQ{`yQ z#r0VZ5|2AhSS)=pZsrd^epmXGKuM#cF_!uz?5j|%0Gh?lpm%^(qn_>WqN1?55VETp zHlM2wfZEaT;F)m$zP3b$|DecpM86OXAAHG`h;0$)F(2-&j>4AHo?_F9^-7&x$6vBqVvTI_OquOwVPoe0R3=eKg57223(g;>P%%vr^o z!!i%&Q>P0+YG*~N`sTUfN9uU>ii-4;C_rRTO_jzNbc+_? z^vc}qU}6kXDW#9eFr|0YaRbwZkE0jT!($R6lNv_#_muUElv4_k^QR>hw)#V0BziRw z0McLp(ZhiBFzDhl&Iq-h-MkME5NvlvKM0CpLCUOjnZmJLD6lwyvk6-!m@>S*|4qeH z7EXFD^UiR}0hh>TcI?^4;~HhO--~1_fp+J|2dvDMc(JLTOGnfz-eQ1CMsH@(s7K%2 zj!|X)2c?cRUveh70DZNttoZhqj@+}TK{O*Yz7xq@iOF+7`!Se;xk~VwL0&j~hHcGA zo`3_2@gx)fL>-HASLTo?@l>-|7@W9hrzUKA>7G=07Y@&lqy;mKsy(;->STff@n`d& z&DEV0Ezjv=4irNFP5whBUp4=OB5#k#Eh@Pstx|M*aPL-ks3`hqsG?c(K8I14#wK3S z(y2}JLt3kn?C>L&9wU@t^q$_A`dRBq;cwlv@o!gC1&vN%ji{hT>{jhA0>(X7krg}? zuO8rsnDykqlh&dEed;Z@_$vJZ`x?_weeZaXHDd&WXC7)>cYe=ScttF^6i3JfFuY{c zzz9}0RUET6-bu`u6;$|ZLxr;6BB80Uj{IYKrc{ISE24W^Y*q|;4A0^k7e1(1jLs}5 zf{IQYh8C1`RxLF1zUq|p-zCLBZEabCAmEK#!W8}2Y(tBqrB%`YqBAKK4^4~xBO5Vl z)z+LwU2IBE8fK1Q0?v?swhk-8?WJ3mA_B zQjg^KI8XmCTn{d?GLZ{-1wa-ikVp%>Lu7a0;k=S~+IAh=h*pb!g}@wrZK4@yv>8mH zU9-Soi*5{f*6E!n4fcNO!B8YYE4KwXH=01~3d_X!&4 z>Qquq=f=r?`nGJ3tSn?A>%I1_V@ZqHWDG9!#g<&lsqmXb*II%$71b#%vc*-oWTEk1 zJjKLPId;D0@5SQb-Igb7{dO_qv*pT&E_YLuZX05v4id??zY)w9})yZ)@zL9wPlGv4!rD6^fiL2T6Yw*5mKViOr zO^tqlKh4nA-20*0VBh;^Wp|!Ps~56M%7S#}k4W2IvBkG#mf&1Q8~UvWcm=GYh?Nex zIs6BOa|WU+qr~AyL^~@9MfbyueeGAUg4A{0=q%fD*!9x7FP;hv*zK}Fa!7dWIRxo! z85wm)<%OPa z#?(UBR)5!IaAV8qf@4%_d|1Qn#~1Ay`!){O`rPZRocuC+RvD~SjCp@*ZeB4eV^KdL zG+79EoWnsHfVcW^ctMGOhkzqWPot)#)BEJ^UGFG5iwi?el;1lBcNC&;a^u6)hpW-< zL~N`Tt5N4s^d-f=TV%_x7k^PKwJ#}+Kj!L)YWz;HY>u#Ai)*vRRXF^PR%8^ZD&1>a z;|)DTwRor1c8H~O&>}{%+_1Z{mPB5G?W)T*oXv;!ugVTU!}0+fj$a7iU}gf;a1SlU z4T1;%%7xLt04e|Eep0)cIjkZ)V9GJdU9L#4NDMm-<^E~n1E}S9F&jh>E;h0YApK!b zz!3qD?9vVCdkkI!q+u$PT3d4_^~z#sJ*i4pq33&pM?vhcsO8jv9K>ZU+oD>3wYtA> zL^IbjYYIXkiWRS(d}qV;R}ixdk%XdlLVBUWx~8b0vABW|?4Mel*DFyT5n)W%LcD#Y z2#I9oRc;Qa4xx3P4#!64CeWQ4wXEl?gEye|rHVAOt5OS}#aQ2&-n36=t)1S3QUw0k zcg)#m5xZOBETgkpUydqK3i)$I85?11NwtCU3MTVvV@kc5W~Nhl7>h#V$YeD^f1UwU z^#6uVgN>=G+nHUXHRuaYIi^iSSwkzKdS6_ZY_JxiT@TTJw9}R%M|uWRst+N5*%i@Q zz`cHU(b4T%DW@tsk@QHb2k^NbmdXsmwHT=#Ql1A%DFO^eG*NcZ`|Mg*Be28i&p#%! zw;AlOV?L1I!Ck-WMSDZ+h{@{szIYCJD=m)2_E;mjvG`XMByG4?lk`sVL_TArMAjlWB~@dyI|N{S95k@)_3COS_xI%28icRKIVxlpeXX^ZWU zj}R7}XQ^@_71YZ1gulVV{@A_^pHhGoc3nTJq6dW(kSS{7$u0Y!Z$JDj;SVXKQ3QQB z-J_vvo4tQ?6o0lB+QPbY7SbZHWE|t}APd(x`A0^pVsFtwv?)5=axdTLrFr1 zOM8R!h!~+YrNCjY+1hrU>2q28z+MsF8^?omGj4A$cuE7uSQ$z0!9D}9B(G|@Tn%@* zr3D+#a)8LmjOK{(Z4GxZ?5KjZg!BL%*;JE^3b8$!a>aX0TXtKji zR2?-juZoNA*h5S{MN)FB_9X*&Yz3U<2^2V>0gw|NqP~k|3U++;=NZP4icH3WLKHYC zp2s;Lkp-Htlu6_IGC3gUI>&o=U67g3WeF}c_XJ> z*yyT$Tp~QN@E?x1wYSBbw*r(e;KB4t>&$DX#Hg>h>Q!ZM3t-r@u(&wGS>E_K(z(nOZ7~8&8Hx0mPZFzs z$^T+qU3GD24w3YIU&LY&uSh4#!NDvw+vcJi#nOZS)b`D$G*C_(U>p&Jk>!bhWPNb) zM_V6KYNsdtm6TbKvwr)uJ|=krPth~{(qcSb+H4l!(4|8?Hl_ z>BM2fVGtRQ&1Hs+a&xVvT2J+GGY{iPR%!PL*GC_r@{-bDS1CrVX>xFc}ZPx=>T8FfV~tS4Q)u_0+E4X2&jD zWeV?MTT(G#2}=9HQTA@BG$ewJ{SyLg!#(6ikYvt@e#=kw z%{1`Fv^wRBy!fXRM}-HzX7I%eZ0SVsbrJ#yP*IU%7kTYYT`k3u9j;SajEm3@fDEUl z))At@O*0jwmu;`y{)6H@(NF<;t|deeW6@_W5ewVUf~ABwzET$KlCY!{>bTM~*(f8! zUg|fN8gqL0@7`c4>|dYq9S&F7x9Aif#9~(JA?f<&Kx2R!qsemzT@z_0iw&!dB|2{S z0NU>(>*@%zQBaYF_UJ%d;txoD@!8rRdkgYvAMyqt`zYeycS@GuGV`kx_0^l zeyYR+K-ix;a(Ui`V_|`lMa=4H-hyEXkIa5WhaLsV8bYCquBnY(_#=|O%k0$yKx@odex= zMO#Lb4O+Wf|E{Mkev_(zN@^6N%Ceo{iM|jCba^_Fq#A&QIHIJfvm=_;9a_;m$YXxx zymr&0oox$0FUEczhZUk>cqNr(3~P9O{{B|Uki(Eog=`%+X>nErV@5mPY=IBbO;E(p zc2z#ib3%2R4uS&4VJ!esNtVVxo5%O|_IDqO2{P{BB^Dq&j?&utLWW75pSh-dFKa6X z>_cnj*{`S;TAIF0=6$XSw(X(leD|yq5Og$PVXK*wC)j0=bmt7vP?|8AKD}nKeAq)) zF_aiMTuus>#~K`nsK_d3n{yba;U;zD0R0(5y^pCUT|^{h0lx9QbPHySV8s{6*=a}(|i=jm&ND41~Duc z8zeWkODZ4m)FM;>(UpsOxssd#{Q&gcV5AdpY?*9B)m0rs2Wzz?wR{SFlZ6mXolj|{ zG@(*Z6u?~SWilSKe9OAhXD62#OB8ivC0&BB`APD>$WvcgbxN{Hz4&42B7ut-5z1LT z3+Ll0AQILERjm#HXfmJIs5S8JNcW7iuhaf`9`C3S_h^~C|B@Dw8$0i`w4h}Pb8y$5 z>UYceYc@0N<0D67r9QVfw|$G2qwLV*7my0}oP6Z7oh+SyMh1cEZ91t}3li#sOE$H-z8@&_;1w*T#D=u2wUqpCLSTQ0r&&Z^q@3A32xbq7-_fM^VwfMFm zrt%?tWyT65HYfpKvBeZifF_sXnT~U;x&aF|d@vhFwBR~=(P%MO8l=Sek}3^zWQVD4 zz?WxehVAJymbBQp;O?IM+G6~7=*qt+AAe|uyT~SD&B+Fec`#8lz|)Dt9>MnFC{v`A z0)e&la;ZvYsy|4%PlD}dmIPyq&@^#~IWLOYoM_=iDM6)NI9-YA%6DjKc>ww{^ED-m z8ZEu8EH?`6P#y>Rih4y(+n0#KUkwEb4NiQP_MxQ8={x4Q!;O#M-kvT%2d}iZQKl^| zH-EDiX&~srbAd5+Vsa3R53H>U)lU?so3)_+WZGT0GNc0l&N}^8WAW(3 zPGq?}*%l!rpwWE8{h8LdGDKBHDP6SPi55sH#dwZfQaL?;HIw zmDT&DXfWDip^@FGts2k1+oMZt>q4B$<@)rxTxm3~OA1le64_lo*1VL<>R$ zRT^kBg0ZkPD^IAZwacLItr$d(aA&8Kk_SJ_RqrbNX+@onCxW}%glj|b-?eU#vx%4> z*kbgy=xf91WfzE12j#T5CQGE&95%MPkhsyp1ZPW$hYfLu0LGug)5Rn1R5KAqTJX+8 zV9Qw&)bN(yTT?w<+x!VvNsRebaaw85iAI99=F}QaD#%6`sgdn0bR3&H|f|-&Tc`d&Il0s^?k1 zL}+e4u8C{_8nr|<+S0Y2u$x<9I+_}?@7|dmQ~9qcb}N5eQrO$_%)6+gEhy8uNkVoO9*hY%L;>mYOdgQ*w*=L- z+1$!GeB9Z7-Zs=4AOUS>aXAOPUZD<_70&zC&{_Y8ssY;;mY`z5eoR#sFbo3d;w_6{ zaat%b_@=J9leS+Vcz{XD#(YK82cNw0{Yf(t@^5VF^B|j#FTw=wXn%kbDdEYZtt!8A zm{Vteh5nX!5VAVgUoRqGKXjR6@0pCzvH;T=+cFySB;ojV#9nu)~d!k=1)#4RFV0D4nNoOJ63uk zOLdsrJ{mR~vPx$=WZ&18j__=}fhNb1aQQ{32<4crLai@q9T~9|_0djE@AIaLd%4=< zJ4n!5r=(IC8S2bZSztg#MJVk7mB$<+{L2|mR*EJd8KeYNq&q^6jd>XD9VDg7gOiei z!}GD6?iGT>ZkCU^^gpQSH~E=Db3IjNwbIK}%5q~Z^qzyk?@$e3eMZZd->NVF7%@2v z9-9UYRyiQ3ydT8H77UO5?_!)<u(rGLQ{>E zn#zm$Zx_GxD7Q|Q3(Z!fe27wnRq{=~IuzFvzM|`uE2A2aR0+{IU zKQe4&SrOE-o|q%}shlpQ5!zES=$7Bm=M!}BA1P3f+|AS`RHSaUkyuz|snaw1VUaZ)} zKEu~+|EU21McsWiD=IhW4^1OwgA1*a7mU^il3`{7Av$-hw!XC<_<6x~K4Eq|DrtRJ z#)vg#)g;V5H<35-O5{V12j#LLe0((30iVfh@?Q)daiMU@S0%aToi&daV*^HqUNN{DdzvPNoVcZDhB2 zu|#&_+ALqHHeX-H-&0dv!RJ;G&x7+^0$WN(;*2!PaG)-r<*&E|z_o){0osN>J~*W3 zFSLh^o&*Ko?Dx7V4bQVI+h>~@;341JOr{~&0cDsfPznK^IGHg!SUMLP{&#?}%$C(f z_av&-5FUY(u{AcuM)|^B66=`^)tG&es4Av-7j}~@B7S4Nj^p6}uY&COMM+rc={s*_ zgyQhzNlhU5<(d|<3le3i6{m^7&eaBT=I>2pKb9obm^v&g(x(SVqfFT)C&Et)U5w3( zhH7yo20f|qXDU(^Wfhf5z4b-?JpS4+)uR`xBIU5y1>&D5&3i)1+-ucMz-a`^1a1B> zz2$TQ(Z?gK`-X&I3q|s={|vD)_ezh(foY|syMl4i%ATnk1Z9lYneQKuHwB9wdTfJ_ z6f#1y-(PMD`eWzhea`V@5z2*jDL#d4cYZESHRT;i3yu-T@5C-UVlL*&{dVH^sI_k2 za?`S|(e5part_9+&?@F;MdmS_ETA^GD4!K8lM#o%zfL8{DJ>@b_cGsNLwMkmYuik> zb4IQ=(%L7^Xde|uP;%vx2}fK?zhp9yB??C{hP)7#DPsgH-~rHRe~`p1EJ>IIRT@K< zoP1@UglBEA^{R~I%T7)@9{%hh74!0wSLc-kOQLHrIpBG=l+^3p zqK;xEfVGk}nery8kJgG2jw)-nI5gx)C-e)DRm@(j-q;xM1rHCZdCgQ^79m@Ohc>d$ zULV`_mPC+t-`w((){NxIwdUsjgT|`yb1|JPMtdMaArr#LbOHo%D-cJtJ#(OBjII3R zwLR;bsjK`-QrRc&-JXOcwRt$c@Em0kr>kh4DTAOg#nSRZVS8^z9JG|HxOw{d40)BC z=p&_K(jDwoPG3Mt(Hd=4ZAE_Ml5^mYE|gSAkWdy&iTAfzY!~`0=TV)84*k~Owy!e5NU@H>4Wo^s}t{0{8AtYT}h>U zTBaqF0U3>rrzotcVtP!M^#tj}DO;sW;6UB5wNv*gEVEDN7nPLokhC4}VaBWB-&4e~ z9yR%Hspa{Lol{nhKI&)cK8J@z`@fPAs+FG1fjed^K|@QoGK7%JxYHeea|ToGh{PMfFgom|MqlsL%=kab>w3-4MUtR;rt7wICOqLY6{~@C&e|ZH@_^D1Sq0ub4Gr~CL@(Gz zDomqAXz6Y1!(a=CS58nKiUVd2u!UfHusbwvNEazF6wM3(r__I>b0$VTaRj`h{12Lv zq4}J)wXiY0{5o$uAAU|5kKFgO__3SHd=`r^E*KA z#5)hWG^oYp2^t{(3-q$raNZ7v*<^w&8FUOO#Ke&w=hJnu ztrAZ^?E_E|JJCVM{|-6+zsTAVtLyddt`3A9zrNu9drsK9Jq^aI&U(09<#B5@1-N7QI^p7Rt z8!n4l+>m~YLu=jl3z%~0R~_f@m%8qLn;4hkjbZZa4EL6s+0c{HiBz+9*E)kI&!!Wh z*1m=`-vG44PH2~?5g6(F)`e;%?{kp9tjh<_4hqo4dgpzwOCxnH?89z4Pjy#5`a%!B zIY8+C!4`jeWbAjE9PQ9*y|a?&*5H-LOX)ou+OacyGpP;_1s9&p0QUe<$N>R^#lt)! zRE(n8 zKv#7MSY3XZHqEvf?fV`AXR+zT=2;Y6m-D%+b$oH8ySaPbjGGg-eUfmbERnTXMIIvwkxpLo(?RMOp?g;HdR=$$;e)?Fsd)uZUXmnS z(<;JZF&FL+EAh9sZTarvE1KUMER$_VuWZ<=;keBL>vA5i(G=$+rP=foHrJ!ioSj|N zrrG`qd!ByT6ZTyT|LV?VEbKwg8BHnL{}z|=Y^cNg>i*zLx`LwDxplt1pDX;GRG;^f z$RXAj^3h&B!P)h=k8402d=G)KwQn;sheY3I=z_W}aNgVgeeCB0O==+!c0kf(XQz0d z4E(vJ`JXN9MTkLm&=?!rhV&9T2Bd*m?i}-sR*n>Pp?-GGGyTeyy*o(lO(3aUYT}(^ z^pix;z^04>U5dOsVja(`+&m;D+!d1N(EJ8ztYWmNoYhJOhH@*uyL@|_AO!TglL%_0 zG`{ILKQPXJqWlolOq0YM{2#O^>S37*cQDG3q$!n5$%AIT;W?Eb?WOR%A`E7f~4h4_X*uD$I^ASFu&ixAIWHW9rl5_$nffSU7`epmCT}%`zv>qR2FE} z_C-rsXy0S*qjz(24+o}uX641yXl{3jF*AG73qM8s>^gq%e?M$n^=NwJn)!k$zJ`s5 z-zj%K<|h~{Q#5z~l0sbnbGz3`hqTFa z_tr%v6tLp%n*Bka8A!C**ojpQ5%j9l3;gO9zn7c9P2-!C|72nIej@DgfO9v`tk~Z; z0!8pnpVoJnN#8LmE~Y!Yryl0Tx(+aVq?FUspz=SY&el6;kNxnT`)e_OGRIOe_z!ei!97S1gYft&nuxj!ikTzS=+ z;u~ffN zwvrx;@DiMC!?D1KYeKti4-H;-tc(aQ9W*pW;B8>-;P9xX1u47CzG5yg6h{XJGa?!~ zby_q29q$QCFDgpAAU?lA0Zr?JN z)d9{*ul5g(i^2eCy~jIuVm{p4!%)cz&qU4H5)$G1UpCAAt8i|MZ6=hXmLx`IE1;69 z>^UVNFZB?k!jJ}=#zcNntv$F>Cd&+s@w!Fp%D#$9-BPtdrm&-Q8nru)jg$y0&b{mb zn4O`F4^1p;Xh#Ns-(k4nx?iX?!rA8zge@o;9a}i4H`MDWVrwYk_f!L>Uu#SYB_Aet z?3hgceefQZ$&SDPM}H096O~UQaPMx3C@cHv{})TbT_)r0?zp&j(=%`x`{vWff>L?q z7Ah@(4Z8|kMktQP$@e1M!Wm7H5xqNnUlkZne%$KVc#0YaaeaEU&i2h*s0MqYepZgY zXBu^Y14>5)a`1Q;hQ_>~K+cXd$Hwh2>udBSf6e19iFI1rypEmD*ANR-Wziw|{2iqk zZXh8IlknANH+V0S2KP=x`Wf+Z>BI?XHFl=gI@rGS2HP-@-)A&-t1=LsQ7dG@a4FoV zBk2iWmjx)5C1%;*HRD3TKX?AZ6k7w{)mWF&y&d4a6V}gio%)RleLyQ1fRuv8>rB zw<;H)aMSw}dI~Dpj9^7+EVQ)3K}8l$1qQTaN(kex!DnWZfFH-MQC@P58QDMNYpmwvusDSjce3n)*@u7}d~TUiM}+N zD-rf4&O5=z`CK&lPeLuB@b{DCB0~y<{bz%MQ7Gq5<40L+kMoQDE@lQ~V00i~d01Y19^(IR+{FKp*OQ1xn8k(4zwmGsk=3J)q=}gryN|N_CLP!ML;9cpu#_qB znuKY%*IR#3>t%g7lUHTMyNA2L!0zKL>X@0rcaOvDsvTh!dC|LNI{iQQyeVjeX}%`k zt4bU%vzCi^9T4Y{(+wW37;f*O;L8PsX0MX6gMGFq^uFO@Ty8HPvZZl`7|*=!9fqWZ z^_@VjeksVoVpP=%tY>WDkJk_nT^|pEnty2Rjt?!;ETJ>gBSyLDNv_?fbPO(4>v)Bos`oD{P2Mp;MNH*3_34rrU_ zcZBEIVT3PJW=nxw1!sfwoX^H7Og1lsQU)@*yHo5w_n$61O=ny0NdZHDMou&vMY`U` zhODN})OGEM|Fpj#5W0Q*MHOmudAVIGydSLlh98>#vbw;Du;AevM%=6@(pJ(V@*hXl*ri< z*q7ye?tmO_rv@@zp{&Ob$(*ZCgVcfnqG6FO%Mn6u3EQDzbV-oRVZIN|LSvEs38p5_ zDQ9t;D#1S$@fZB;MC&P$h8g5PO(zUkpf~TP{{`)>SIVj$DQc*r35!lB+T?2*#Hif&5v&*Vyyc@ha>Se^a!Vb0# zey-sFBX1o3qFx8Xp3;x}2VvUA-}P;-Hii^u0=j|gOZUdHtG*M3j3k`(;#tky??!|61vvoD04}9;h+@u1Nq_tckWBC@V{~A%!z+Di^om`wxbUVv zzzByoO<1xhD7)< z)d%c@t@+@9*WEbU8OKQ#KBnv9i+%{e+jVe9Eik;?Oh4aR-6~3}4?V*uhe-aa5#q#@ zN$|(xYtLVT`ci5d>x}l+FSl-x-{Qw^KXf_gS?;>H+5`JaB3tzj#xNB*i%^bKb_=~U zxX?(0-i7GbO9kV|RohlzNCm3N#6Uv>gwsb8qa+}MZu9lwuK!b*6Pp2KwMI@v{>G!$ zJ@yaYwdVgD9j7WRF}GI|t8!A35_zX+IdOa&XO30(OK2#hT0+-OfRzQ_~Bg&)<`s-d!=h!tYx7$GlWD^fbAvA z*NV8P!^QIrO|o;|0laU!hZDna7_2(|PZRGa2^wZ=HC_uP@Dkdjpxkq?cei;CSoMBz zJ9}OvYp$jEyR=lPXe7TA0iNT{42tg~U>X1aL??{}0BADk0{>pe3%A;1gi| z%fpD)&%DHtL!Y*G@OxcU?dyHO82zvqUw>rH zLJ_}tUq5i`0&^o%Twkh^j^QfEyB(j;=Vh3TwVCxyw8Ux0gDv?*{;R^b0~4~J`K|K# z=_Sz*vAXMdlulM3r!oCsyQkNUDA#{%#|qE;`zrMLEB^0d2HfMVz{e#}A|<_8({hA& zxPq=Dt=INU*8VDax}ktX`>%${lwb(?!_`D4eVKud(w_JgBfj*4EiekDbl8@9^@4G@ zbQlyXv?DZ#>2$8DFZ?x_j@ahmr`g8DHq_#kzm?b;yACfhKL6(GehA^)7WH-OV<}C| zCH_pe-#a>pIq<+a`wgM+vv~oX>%kj>lF2t6_jH#^i5k3_gFV-Qg_-$GbG;isjFNmu zluKT;d?Ealfw-C9Oo>yTAQuU_+wtP6%}w;R1iVNz@*;D&z{1Gs2ne*G1Oe@$$!x6n>J)3g+``6l&q(dZS|k`{ykW4q6?aGI4J?Pc!%;dCRF zhRDj}uW02y{&wD3;yk0z+k35FK5h)P3$+*IRSDo-G4!hZqQdx`9X&p^;_ZHTFpHk0 z^mO}YC_FX$I#6s2h3Hg)aHB7XVX+D>b_QS0vetAocJ-`FJjupt=)?=j*1fVW8RDwJ z3V!ncou-WT5}g7?S+x%S5ihMc)BQEus89rTKwn+F&D2rdP;!q!%i|yc)cRoD69xx= zw4_yf$Nj=oUSL3tN`{kJP~yw# z?SX%K>=F(B?(K!17257q+AT1zdeqGSi~G)Pv>Sv$%m|g< zI*jU*4bNysul^!@Ygm63=iA4vlC>U|Qcw4;u|>`Xu6mXoaSQxQy+62zme=Vf!Nk!m zwqoPKy=EmR7H`@OIL4g1X^wx=|MIl6$hJ8quG3B{;ZEG>nZH_hC?6OyzP!Y2a1Hcm zrye|y)qZd=MUNopfVkl^>JW^fCB4QY93kMOdkY&NclZ4?&{6m74k#BgGdgxEY`U^Y zyQA{9thv*Ct@?;+4k>yrb0??BBpKg5lZ;YxxAT`+jsU&bN3SOoIY*!2B?=|@?F znNUv*z0tqMcw~5i*gq6E6v6;-z#a(uE#gs^j6Jz9Pg5zOw+rC6BOu|nZj7979;5$^MPBTNu@Ru2-N#~^2Jnxo5 zureLS1&e2F`+#CK=x}JK6&e6o18FGXU5P^4!F3XK!kllEV!UL?YJ@c_mq?8G%vr z;Y;E{wrkn+;qmSrrrM4Zn*$5own@X8UdXYO z?L7Z@8zF=8!{LVL3CBruadb4dOY}dZzADUQXmqi8*E#SPIi1-5>@CSFLkLuzXC}lx zkZE9ay~~>sDnso(+4PLA@7FttVu$KTw`XQ%GKtlV*QK|Di7i9+UV-`oYh0FsuO{T; z&=YWHI~ThPh^g8Ogr(V4r8nr4raJ7$!DQj;83cY3`J3*z@cXI4X0{$@7fC`1kLX=? zOnQ^AUx~FP(Ar6&66Fd4`ia6#7#ZRNspTx5wQs^1Gu*;Wh#lf^ZG*od??2weh5h<5 z(ySm&Y?+LuVe2EwAmq;JFI&aXOt2XcecrqD7OXNMVJj*8ILG+ko6b10E{_k%Z#@XP zzuKx{#UGk&*6)&Ocx`6+B?2;XR>wb`lVLX*;em9cs(zZ+desr{j z3ElG7ZU!AC&CWen=AjkmkC?!-;t3An$M#(^AP+^bzc)H*xHZn}iP?X_uTX_QdAO!V zV9PEU>KW&X_sMGs2r0C>!HuR6FUt60nv>zBWk!%2is1X-+xt#amL057B0Ix3_kIEt zqnUkI6?EOGqrkl|c%L~!L-n*vDG;Dh$Z7%J`^OW`NI5DTS!!A8D@e7wP4)iGSDIhx z)bkzRtQfIs4E|ToL2Az{oGCN#bQyocblPZ#YtH3mTqDb~{~1qfQuh4^J zAQYWy?`7yyY2{~^r9TF+$4rf&C7;$6Y3_71g^3ZyK6P~68oi}Y%rk8IO>alk#IMw` z-Gq#+Gx8s;SIL`wwul2g`{D`fMee1Eejj#nTzpCmG$+9o)D3)evnvyO{C&~%fBUKb zx1#UAKluNb2RT^~NIOVd93Njm*4f$USZg6I4Q`{gsI8@{m&sC4Pyp2x^g3=PO@pR$ z;bcP`u%)5VL_jn}1~i&fDYU`VWTK?9Uh8G~-g1-ttNf12l->`sZDTrW6@^{hz_VA2 z=|A-Xu$jFj+A*H_*}(VhWn~~B8JNE4%cbq=#dq%SUf}Qh-Y#p~nhnOy$GC4)zgtkM z81-t$m{Wpinb_Js;tm0cd)1*#N9fTvlPW%wU;uL{jJEpO7_jT`oqUuPCo-amZ>HOVCwgxOTtRfHnF0m#d$H-WrG z69!+;j6dkg3-g|U%g5y*r=3$QK6BiGLq*&pW-Thop;871lUiLOC{r9(s-VknEmxNK zJ=lr@eBf>z?V2D+D$)PW^_2Z?VD6)BqxJ+xF=_@2ZH>0E#%*qqAI55PIY_pCr)BZ+ zgQ6k3f$E=mS%_g(I=5$Visg3iDwk#?vrDI0X%6xOWnt6DcbZb6n!nN`VU}b~jn+!| z-PSBs?U*FdqQ#EMq}VXSa~ZR{T>ETM2bOU?Msg)uxJ*6{1?O5?arI;i7w|u5M1*V6 zxs)%I;baeh{6JwVyp@jmYA;-z% zq(w1Ah<<^250n)*p=o<)@S7e4j!{V(9~|4`TZB9RAfDxPp;aOX+D%gamjV2ut&nWR zNl_7qoeFjY3+ANbC`ioBvN+=m_GbdpB~0#)a}q8Zt{y{fIB!0e-+VmIiJ~2`QB@su zmIbsKIz7W!RJ94{bv2kuqUdDB8d|5bLoIlL3u?+pPY2xyl_Bu4^<-sbMnrHv&tK^< z^5W7Vp3ZS2dHg|pD_!%42)svaE$tR=F2+*WXCyRqXiLaAmBHgitF}Uj6mwXp>DGIOL<~3~ zd%Kq=aY=g2_U($(t+Gs>bYfMk2Wqg$!CHINC?+fiEC%|$7(N1%4?7*p%x1tbz8ljAT9hJOU2B@eU4T;;Nr@34OL=suS&hzVveUa zMl}^}cB`~tgauBHfx{|Cc}+!%t{M;j7#XkiOe&9?5fW)YE(`|B6E{7n*XHHg|7g&^ zpysN9o>{3f;zIZC^7F>{wAtO>+gIZ%W)wAcX{CixP6-;d)cTClTEZx4U2R`?tG zmiCyw3}-FyjSZx2-8p(`as$zy8Ex66XsG+{cRTn&MnNf%!HlkLrEEG1c!~)ZT#%Qo(qytoT_bb*c zkEuVKtrLnC;pYz8|7xpusN(6IYR^=H@TpEaZDMK*LS&06p`ho0asTn!L+B0y*YFIJ$?m; zIlotZtB4{Dz%fTZ`l0sk4y4R`7jdXiruQ!ox6T8MNdhF!&T(hQ9-s}w81)AtQ;dODn`n%Nx;Fq_bTw)af_NiA>3palk!ET;ykus`Qd=(%?IE;) z+f1$;e>9dC4B|Y&AsdtRdClI+w;X?Zz!f%LnVhZVl~t>QVSi%xt89B7hFl;mlozKK zhlsqrfhTvr!w@ih+n&ZR89d}e|0bK;TCYMnIW~5KkR&Ze>&qQAlhfctwun}hm|Py1 z#Id0YtXanGs{dTFNqp9;)I)GuM?JeWs&nQuXO_>TZZVI%+((7&Q_)SPow>*v1+Z$6 z6}jp$Un1o2BIajfnq#1>b*5Fxt*oOGp(atZf~U4BLKM(vCZ}7uZ$GIS6%(J=;sCWJ zI*=CB=xoRiC26OypEtg?@*e{neZ89Tld2ji&2pj<#pve32BSupS#An8h+rpaBUSI2H%NQo{`?c``P!Sjwqqc*i zjsozG3t=pVwdrLhwKs%gqX87qUISOq_<%xD z*xHH(CDDvAC$ZB-t=YvYy@Do$x=P0P7H4d`d~+2)q}0B<%KU|9lHJ%JiBzR1Xd#W? zIMuyr3WcX=hoLBsv3vRJt|e`e#eC>@;e(anv>gfFpi;UNJyvCLX4F5eQ7=AE*RqpW z6~yEMkrn21`|Im)C9BCyURj)zWKmDpZ>2uJo#u^%l`UxH=>)wwRG%qFR^E)PrW}L9 zIbLKRUA1P#cXAp;b`cGA3g+ty@a|cpQHGCYB?>eH$RO{*gLYS#OO{@|=&)bMjd-%W zb77HXS^=BC+_qxxyglojI;skN)pA|3ZPhh$Q8chBe8WYr{t^c-fa^u$wbID z{kcO%63t#NYaEOc3nN!X^Y0Bv&bB>Lt)RlWY^&57_B`rabyauJTaCP#nm;Z&AChlTe(!Dq@zUMYyzA~v&` z`dzy?vxS0QriP}hY`pX9O`LuOfd_c122-d$CZ?vNgB6q@VLwXgUmHXW7h^cQWtUQd zEDi;}Q6Ieg1HIxz81_w&!EC~b>g`AyalZ8If}jJJIaI0Sc9)ay2rF_W92Tr*)n{P} z(iLj?5cx$-lx{U6eJU3s3)nAaHyDRuCuz|w5_79Rl~3!Jtwp2N7|2_9_W?i?O-fls zC8vptz*p2KgU3OmsTV3B$(`jX83HGN`Tf`BlJbe^0T^=QbZI>7%CCY~VHVncD!_PK zoS_pUo|rV)uRWbS_NpdXu}8@?yNnmMQyDEYRw`O!nzI}?tVbVaC8%fROY6QVrYNzS z2)C`s68vx$H&b{T(qU{_@POdFvH!J+gWb<#|HX$q1}z(Qfa0xum_+9D+71<}(JP3( zt*FcTyb3KgY{(jXoPG!sJC?G(p@aIase;Lm#rSGoyj?Gvq-ZjWpX*l9A{8*NH4XP#h~(d2V630 z8GD#ObaJZ+k^>A1Y$ad@FiJtg=OqmmB^~5w^jK11E4|!{`Fr_~n_Lw|_FkgZZWd{t zSZKno$~&6jMiJV=Z)7^*U=o&D&7G`TkcwBfCP*b$o+SV@4M$*Co{#Q``ZsiO&Do4v zcHy>t(du@z5ll?s_p77jb$X=hH0ro^I6fG!L}as+=aj>n3JRLwJf~Ya|oI#%yGQA<0?1#LK z5B7JVnOM1MOhH;}HL$u0in;+e{j45f_;^}#)OIR_pL9G`k~pg~@hs8Rq27`9%0Eta z(_H0;?|Acg^D3}hCRZerTVG%67``XgfKY}dztd{V_W{s2_+SW{ zrvVy&c;K5S?M}JB?QDKnYD!>Ze zDO<|ghk1_thf~k1QL|Q|9@sC0rZe>N4-K_# zm5(KUp1Afa4klG%*=U_5#UGXFkv|ttk~;(JAJRH&r^4G-IjLo>3hh%QW(A~HPkC#O zpbO3!9q>~m?0z9R+pc-41q`JgBzmbmXaLg%OA)C|#wQ^{yr zkA?=Gj*(+0o7hGo<}goE4ysYC_}aP?_uCyo#;5A~V^Ih2@riYWOO?&EQ+CA&L;#p% zKcB#11FU6)BLzrct&k1VxzWG>f{+hiXLY=;nuS!El{8eES0v>h0@^$*zV~+SkTh~? zk`yK^k7mj3RK&(;WjQOiuw~l~fOT5Rrf^KjPXG1A1utywn5*umwzQ{JM!`-;x8MK* zcI8`WmXzn02%0>Tg_3LzC#|t_mamK>fq~=UjP$DVgtWa!kI{46wBlaiSY0q%>A)Yo zqwBgli~pbrs_-Y&_S>iy_>X3g@e8AWr-|RaZKjV$da@{Hb9-gSr3=Dld9_v@VJu2n z5tvL?tz{96cIr6NbJFl4EQS!vTe72sW6K28VWmcgI{*##q8-S>JFC(m264EoYsfK*0`ow2!-<*7{@41#8#gRs=(UF zrxUTdRPG})>7~Ce$2PW33jX zh`bwEOmI#d($F!dteaNUD$}*>;?oe;zP2%EaX`ezE4`}IHX1blY|>6#F<6C3ck9d_ z3%w{ON&zfrv7j`FZos+IsS0s@Z+Cp5i zvN{xkMGC26Rf#2a@X&IrhL~eTzN6y<7Bd5FPM3~nxc~t#7ZK1AYbkAbHuL#PBuUea zw%%Sz{$i=!RWl#$8Y$N^BA~_=P@BS~WF3$Vo9_%s4*wS%^hWTtqd2QLYeSwT4Wcl9 zZhD<>PEs)oSz(IOL;xDKchg&1p?8RRr4dKkzmWX%7?-C0FN8NTfv1*8-t1rh0(p#&rZ>71d5 zp+S`H4r!!^t^tM?7+{9(k_M5ME&-(*(V@dV|GoD2?X~tk+-Li6PTqOnXFcnQ>%Q*m zmtA6V=UamdxXWD{buTAF@=@E($&E0ZmNN=T%^V@WzRLU5gv}`1oOvv2fBp}L zv}CaSDLl&!6#k(lomVjm%JrllT~AqBT$SAE>^?Hu&E&G;BT+$ZaO>?83N>N z<$-mVG*p6@v4r}xxEYyok?m@CquET5vvt_$;Ao;OY3%&eT5;77H&uGuA*=bk_LS21 zs?R%jzYOrz1%D&Fh_k6wpM(Qf3 zIeIMXK}k6j3VU`9qnVFLk?My-bYPXciubj}M0^4enB)v@w{!sO7XMQ9l=7x?yfAMWzDSA|>s59>Li&W59IfWw4NLADmrSBGi0d%T5hX(HzIM10|5|XM4n;u5z zDo3zbA`0a;XU>k&8W$Wz&mxyy)b>&w%S{%ssg?bU^_8;3>M2GP&?M?*tn3HG0WeWK zaLe+8qQGDSYONFlysj^{SFVW@iLxsMM-!SiUdlDuB&zJXswr)^X3wgjLk3C{@BdhX z;o33lsavYq0)je%o(L+;A9i(A1v-}_PXS2{P`MuDJcKXQhQfrd&6gsa=+Xu$QtQRQ zuFwg=Q)tpqN0oL`!BvKLV0btM=i;^ah#F_Zc@ct3ZuCYhOy#!ZTIpKEX{YGj zyw2hAeBd%=uNzG0K*ZSLRlm9hbput}aC%HJi^)#5e9VV~TxQz5XOgN2u+8*1TpS&P zPN^%J5V(GMqxFhMlmg>YI2>qupl&yS~m zL3nUzPmgJFm!_@d(PDDrx;T&U2RW71*!SzDpB{X@0IY z!0GO@=l{@TlmIXJ6{Bsz?DWRRT=7`^>Gis~TFx^}6e*SMr?EUR3LT<7 zpEr+s%*|FwOGE$a1HB}><#sDA4I}ncjq_yB#tWdz7SzbvYcRODvRiA|Aog``JzFwC zXIgJ&)_nF-+`FB;&)Yd(hhwaw62YcZmDd>=KQCaPmSadYlL8@E%d!)kN;{VfTjDOa z;nj~QIfdIJ1Sf6aETiQ-C=VzF2Ye#EptUZ$0b&VYqmZ^>O7bzIE&=c0;ZcPUv2i7* z;>x&I#|7lvh|R0yt1?8Yt32`?edaVNqbgQT&l)>wNak}B!>wHJ&3RtUh$OsivAARM z^!>hu48<;Y1wg}k@iz;mjlKIK?y-O1fkxOosaUe2zNV^_MC$&XIdjUIQE$JdPz^dm zeW{WUecY&$vN07R=@Q9^<#@y%tEDSL%fg|C5`TTRvMlG*J_kz_+p!wHkR93z34T3` z5hlu3j@DLZ38Z#}Vd|$4b?M2&H=6aDxsGivpIHLR+1n12xj6hpITm+5dpJFsumwXK zhI1E@8{W5Ap&crEoCeWune543JC|^1D&*2lkFh`( zTeersr$js8YDutN zvk~h9(K!4Q#k?vK8C`%c#a$ySW=_e50{h=yE=hS4OyP>EYp_g%8H;hy|f( z4-3Ka1nkY9#M~{qGZNmMYh$!p-NohiO36zgL4WuCq!xY4Rp_Uzs#58fvS1%R%tUBt zj8CbQr45~>UFN=lq#2RYf>bnh-@>n?TKBUR%%lN^Tg~MQAMcqyQ!In7MfKSHMdF%Ns68ae}2JDxqvmK z67%?!5bsd}tbwu_hEa}qt-BEF=nZ1}Kb%evDSUo^dEmdFDm1%JJBsoIl@twhNu0sq zALC8+n9X#wjZIB;r0SaLsyv5d&~0r9biR&`j<&FBwp3xjR+Z!4G!-h4wr_U=v91_-7VtFXNt;2Be8Cxo2wdh~g#Fm-LP zaxjG_@F!$i8$W*<*GBw&6w>ye1o>^<`E_B>nb)uDLWJxcfIBRCS$SG)xPqR0(di*7 z_+XsmmvbsODKa<|ARZiQw*QpR1{oQHrAG4N|KWh|2rROLbv5@-NmE4%1BUGeBubpe z4il?;TxT-q2Yp^-H$q0|DZLeH*i^Do}&WmEQT&3?Az2%nSevlH9F?9~k zXsDLXsP6rqsz%7uaCV}Tk8t%y_mzowGd8edpGaMjls-yFy`rijuYgL2BP(5Paask$ zOsI{Mt=!Kqdkj|w1?4hu9UZgi16@?wxtqZ~c4#QJf)w-ayJKU}lgJbzlI+OCxkoX= zR20Mjnu3Q6?es@V~`u>iy;R z5NS17iVqin?FGeW9W?i;xQX=Uh1?zIdhTNkveuO21I3u4#_)zDj<1Y8bW;4rMZ@_4kKY6DhV zRDJiCieuhZtxgoRFr4vP+?w!vzNBPB4M~YnuBBcJ&Ag|yFDuubr<|C+av-x~J~*5H z)6sVSdYxNf?h>)WtoFNe-yQ01j1-hpe{}()E&o$`QrHw+WimkZ znWC2pSr%SQA(J?NodQRy7(p6%*}3IHAW-;2DmYsx75t$r-cwno$ar-uGxPqLwn+Ws z?ixq&DqjvST~azlkhWObajHn*TbPG6MZP7xEG66OWs%p7s$$Fliz51Gy-}r}o#1B4 zJkXD4+choiGf5WQkP{_D3?ZIFg!4K>VCG@!-jZ7s2qb_lcZ$enpyTI;GVLq24aQ8# zNDMy)zI-TE`m9g<)z=zFj;t6jw|70o@XAM(p8s$VDwxXnE*GcIbxSAoy+bTRme5Ubdn!Oku7sV) zY?TAxp;t94v28>yK$sqnQCGn$ZbB9su~U5p0(Hb!%8uG_9;UhXr}WG5ft#UlLEW~3 z%2@(%X6P^}1AAr^>C00`)>fr2LBlnpa@jO}uD5zHbElV_@}Ovl8l756WinrhT%TbE z(4IZ^(#>M z5tAI*goEq_*o>bQ|v1!0p_T%0764H$yI!Mg`| zSRGfgSsK)R!p%*u6(BNr%_NPR`Bt|0W6^Zc5?H0A5Q;$?r5_LpHiypDcghmcavJKqG44?$wtl^e zUsDv*C~%xOWTSYWm@DWxWXzIUv=TCS+UAQ^LBx+1>(SRkquED?$BO#n`N-Ilo(Tv_ zU838Qxtf&gX$EP0`k^5bPW1!*BkjirBTrrnIS&0sCyaL(nPK%5BqX%0W~_Y66%N< zz6^>!MFzi+Il9cJVU0r{N({d5$w_5ya_^z&@LWu?GyIp*QR(%q#bZ6{cyWnraq968!#EP}uL7es0EPbQVvrJ)5c)WVcEBQKc}gXI2Oy z6qUI;sjV}HWJ2xLypS{5WT&Qpb|P-L#6@q8XFTCk9aa)U-8ESZu6f#PE}`?nBJ!b8l@vBAO=9ksboGQ5NYFsmu$G{bIIQZcZ81E z_82iId#td-J6`3g-ZtUxn#$xP_A&(VfQ_o2M52a@C^bd78}$8|VhDFnQWBwz(fxuS zmnS4IvJH3luLY;h-P&`pw;csbA;sb25~>Zst4#nF-v<)=y|X&}_$hTsMW9HXh$lZm zwJ{?sLw+$KM7QGdE=G9$bX#Txr^VWsm20pZPE)oM;vRFu>>1*n5x}^hK*d z4O_x9vR2JZt0a*NO={r6XSaobz$wK^kOCE^P@+eY9!pfM8HxjS7kIVpEGCFlPLy<{ zQ^^QWp{_uYWVB(40~;nKK>RTDwPR^Rwzyq?5&=%3W}(cBIMWv%jw1P_3zex$fwfEFBMwfB1-HqV)?F&3l3YDebPt|A`c?>ed-eMkXy3KcRV>}`~nZ0| zVpWt8N6yb*E&Y(k&t}o!)MSHB&r)i%A*f$(s_Tkd&Zy?HShmhgbAq%UTL1o&{VK_c z#?20rY%PQ&k^4@Zj(B9QFw4$@hFG0YeZrD?MOAAZ4VpztbAmukMYgrP)k|3T!l<=N z^;ePn7X#j5)VW8me<;&c=VQ%4^urK@m#`2v@44^+PHIkI?+s8~^frDnZ^bj$P_tFP zX<3;Sr?+HO1*nH#2jQS=q&jf1*0mOm)t{OGtE^>*4s$csjtKmeR&x$-qJJ;$vXBtr zN7{4BWBjaS!3o~$mPIGDFA(6vu$*H|_0?u1*C@n?GS1vUQiDKWO7V##4FgABVdnId z4j9}Yc)QD5K2D&l*G(C>`>h18pss4Gdm5N-6+HFzP zd#^^QhYtmDT$>-veP?_HUrr4b0|wzRlBWW6c0fsyYq=sO#V#}&n1OKip>FZ8oCu3# z_D`HRL|EQ6RtldpH0q^dKElWeRYLv>8;5~kBFOWv^LS8z;pZx zrU<`=iqP~`hD8S6>3P{3i9LcE@a~1ZTR<>=&$fkup0Ie4jXl@iflW0rbW623%VD>C zZ(db&9%TRlr~7jzknzMW~I3BVaVGB#p-fquTX__PTGFAELQsAWA&P z1DVJC{%*!y(Z%7jXho9W!imGjJ?78_rIo{X{3Z=0sgIXda{9}ky$T7R*0y-8b)!&hy0iM=9`Vz@& zMDHjYwWdP<>*crQy{36yxjIQH1@W`&kdoZ>v@w&06NaA}5%IDl2(F~f?_qKf6&~B; zV?c<&(Z?&F^Eiy@w2}b7c^hQcyU5WxH>1zZ@tH%-9jw3B-o!qiEL)rVX`dV7HSOCg z-OLDf!C9C}KU@Pgy^9=0qM$`e+(1B3q1@Z5tq$uS&G5X_RBZJW#0}om)WD#oN!^l<4sM7PSsP3}wE9`&Q#g2JvD`peSbI(nXFH6F-t%c#Ww9zGCG z?(DbBXB_54o_t10&Z&$U8rj!c)q6$Az?MDHr%7l~wr*S%Iss-+`7G)u#`DjsQ4&&w z0H?R((qo#)&=k)Zyh6`CAr2%L2@&H5sWEAgBjd}3rC{YdRCTgqqd%8J=^=2xlqk4F zJqwku4TJuIj$~FZ)&}O51ZSyQfFZvMa zRKI~xfY}k}mK^hfMn36kD4Ou%=jGno&;f>it~hVS&qC=*fwL{LV(I#AWE5}vY#8-7 zMuRc}@iZ}!yZX-;;sgs7MW%nvV*K^%DDBhIw5x4vVAN@U%Fx^7H+XS6Px{^7a_K(A zf3dWvn~Jw6$f1(G_f0u!!726l#wu&Y%0RJjMBL;G$odg~~n^)rTDys%KU+*a{JSm7q~XA;&0#!RlG1wwHUCtog;C2 z-M-0CEQD=(dPohcw!%_SD5OSNHV|@WDmCXc%~qmTo*-8_vLZ*54c!_tnH7XkTB?0| zV?4~nVbJLEjEI<{7I{Gxy8U5gpjn3ZUMP93eT5O;nS1wAI}2~xu1eoz50KoOJ*|Hbz5-GzJ1*^CoBtgm@l!u z;$G!UUcPZU;J4&Mh{kBeTK%$3aUln=Qy|eMt?6lt&89L`qlfuxTEP0U&;p+b9+Yfe zUDS%4#>NH&_fk4K;U7*o^Go^{X+i3eY~r%nQyCf^Tt~gzd{!d-jV)<$Tot*PpJIa3 zpAN67$hIqK`RHXh*!)?nZ`|H)e9xyq_I3cppP|Yjyd`&xz9E4x<4rHCxOy1Yzp5=H|@4#I$ zq!6J}{TXRAFKAw@I-m^#arw1@Jg3-^M3;usQUI(E7V{6ML9DB&f3d~8|1fX*XJb2w zF<)mFl|qH84eEDmqgXmNxf@OmKl|v{l$X%fOoT$0qoCK6>Tf6m)v(I+lql~%94{x~ zW&0NAa>-6GyGcwP+N)5Z!O(HfG{;~|MaXJAQ*BNgLcxAqWr9ExUl^PUvGakaMa)w` zh%ZB&ACr7w<~Yu`D#bz79~kI%|4w%fV+(jr;ZEZdn#r6`&jf9o>TRZ9^I?5@2_|V- zhvI(3anm3H|5-70^KSJZdO?Nr42cs8HlLh;1N*v(S|d(FUPuPVq)jGD2gxIt)Ih_u zsbr_+iNap3i$i^(WnB1dEzCW1(UQJ!AY{VNPo7q~jIHFNhXO|)?+8+!WiZ#=9Sqh=(82fMz$3`G@lZ}_{vrPUpqh^QLVTKF? zg9W`;BemytiSFBLr_AoSpD`yy}Mj5@sQB(OZy zZ@j^v;+(#{PQ;iZc?oTPM55Lsyu)i;ufxtxzeQmcf@H%{(RyBwR87))7&CJ-j9-Q; zEa=x5M1DgZ?qws_0sJW`>}gdO$a;9Y2P_@@Jwz$+9H1k*{l4WeoI^u2RF^GP(BxL= zsoK7)^@EETHVdS|A}m3XubnZ#hu}`I5+tIr{AkIK$`5Cb&b=z$*j$Sdg>BT-)J{UI9i+OAtM$& zX``>?uzNFEZF34<(ov7aB*XNNRt&NtbFV~NKz&V)F4^exq6dApwSJaiE&0RKdN|O< z@N47Z`><=yy{vbS6H=R4iI%48&$!V&rTW0SEOdkioZXAUYVJcLRM+8ixvub=%Dz$! zMAY0h%*?MOhrO6|__I15jOcTpjxtB~W3>uNDo+-*R$4#1P0-nEKxxv{9wiIhT~haz zLM>3P_?TI6ChF)Sa+YJh&PQ(?lq>={OeH?5hbdbLQ)CG1d5)}TYZF6%2|8bEw+liZ z68FMr$=OQ$un9O?mT`UcT^t{}zgo)b>T1fX>KGe}n+mhPfX(XaQl^mu6(!#`s^^Q_ zk0tX#ivbSWb&wSGaLwm|pSx?0%DM%{5CdCd+2KbtWU!wG#VDceX^reCbBxaK>qU38 zC4dsOU6oa6Z#9w9pq^I8p$gGUQdU>mGm;w)B~I;xJkU~&Ur$oOmwAJeMD&?OgrwHd zJ%BMT2-Nm|c_}Z=53+opgjO3|T0wsmh%xjq3(9z$uP-2`_+&_;C5S3UoC=>p4lqT; zKI&&Nsr)_Fv4bsD+V1qR+M%XWny`*-MuP`e=N-(VB|>Vitnb`|)MVez1367iq`NQx z#Y}2Xn4wBjVY4a~#UR{u-=AA2~N!l8}`bgO+1G_K`J~4n6FWXP|j+EXfCc<;U=8 z(Lx37edeW9PEcHl>L-r+Gt>e%RlAidboMBn8Ow66e|gbhY$15O=wCAJZn$kQwzIT& z2yPgWMOfDwz|vs7+CuE-saqxBP5hGra3)kPjlv=hZnKtC`zpd&K<7CCj3QGb2_4g# zNz9^mJJ)c$>^`u;cuXa{x&Dw0ZcTel{~_u_BkenOy>K{7x;JyUYC%~qQj_Nsl*>(8 zD-fwO24a_fE|P6si|uQAVPoZ;{iLktJj~`4_=WRXA220ZDxovRy?7#}Fal`OA5n~k zUU4H>3L(i-3PUN@EaqJn$yY@;3fwio6Yxrx9-(EG6))+q)<$aaQ>(E-J8zrE8BpSs zhq~ff8OKmzCTcpb*Y!v>7RT0Tjr{t`@=h23-dXQekN74d$C$?92B1m9SQ5&^a#(N% zWh-OS8tM^RgGAar;Pe7Nbb?@!YI>jAe4165lc% zlwY)WWfS7MYNn5jCu6&%JrZc%M18lEvXLquc+vhh_}Rq(^CJeYt6sjKi?Mpri}_b% zA7d!7A|D0++E!sww2KnvN{-KM=4xLeT@9pC?4da#`8WlSjYLVRSJP|@tiiqA)ie>e;#r`L+uep?Xd#N)yw z?92Th4XmvgZ;ycNYNfy3iZ$UZzY1IzlN9TAW<5%h4#rQ4aDL$bVXh)DF(!;G@0u7? zdrR<4@w{EEshHGhf#F9Ufl2}2v9Wg9{+r+Rf5*A5HckKTRGYk5PJMY?aj78MTdg$~ z0o)|$d#8f(;kSM=UvwU2K@i0D`&&|AHEs|a155bocn{*rOLj<#=7aM~(*k?~=Ftzb z8qZti2^Gf&{ycL_?#PBQe>(8*W-xm-(I@4IW8>ucEY>7_D_vXp?@kqcbpm_Kul|i+ zdxSaU@VxWCC-Y)rHWM4OgHfi1ge@;Qc`6Q%F0U-`Uk}_QgjimS;C~X=rEnp8O1mtb z-eIb(Wp-QhO zQs}#$|C;aLoAHFDeCcWT5?jB2Cy>TK!1;o)nlh|Nfb&y}v(hij-y9V#5v>gGy#PkX{kbrG(Yr9ZGhi-%QQXoD~5seMCS9w{-*GD}_CsXa1G} ze`2^Kg}zO-SY9^0{stwMlSuu%??_Ya;JRq=OQld(;j>spNbXbtNf+#JPO^26wZ4P$ zS37g$*rHuSY}HLe(Q6O{Z|qD}Vxk?fejPP_`d2EY%IkIiSh4_QCiM#yoGNLt_OWta z%bM;H4L3}c0=>VZp+ZARgM4KDEoZsfq$s3m#iLR`B4r`la#5we^DdV?Szy7xFI^Jz zaTxZA3$TKhv(zb24WvJKxbd-`1n12T1ybL+Kn&->>EB`tReV(<6(A&*?eUNZ`M85O zfql*B^L$(GS7?NRt~yc|Xw;8v@#hL5+)0hzvQ|rrpQ*G1r~6n%aN+Z+hrTOL@3x@r zW?%TA(<_FSPycQbmhrfyfAS$z$>{XpWMhpI_r0nwFI9BxRACAs+fx&FbHY$UOZXh(=AUWyl~ z=Mn!<5xXJdSAp5&{fl>kMYt1NgqvmW82F!L2%78_QK{W<-fzQre%a|Px^$DaFUQU5 z=t1G*5Dxy}K>JJx$S8Z6kH`3YEWMHrN*nl&^^G7v3stXw6%BGPX{{9}IEp)4&rGM| z`L>D!qO^2I5$f$!;Hk^vAOHN3^58h`!&X^1fZMp0ga`6OhDz$-r=$aA!t2L9k)B^$ znj|NCISPu?(miu9E|rnB3GUKyR+?rNklEDpi?cjBZzUcVg7V)OGIH9@ZNE{+SHQiG z&fLm|!pyeGQbsdy99bfrB-uDz#FT*EPnyw}M`Vxdf{t0ha^H&?m!GV@|GxRF)~%OT zdD5v9leO?8xDd#jT-*ylnhWmfFzaXojdN$hQ&i}?Q}|Tq-uNqz?ZaX9HoVNCX@xj7 zP7-gop7E5$mer8<=d5i6Ere|P5*){?*6r7=K(}IP$O&F+G~c`5_g~MGo#^e zoJ<7aaut7lX4`oOdDihIvVUJ)_>Oam+aygK>}Xq%b7i~{F(f7Rub+5Zl&&PXMotyI zE*#qt(KvToU3NG($!1XTCwQ!xK4*>jR1`)^O82`vdG+mIDyF1Zr8xJo1(GJ8mKp-7 z`B;@V>8;YS)`Kc#=0RD1X#7uWXaeH2nh>omBV}abJGPyEr;e@PElML@W8|K~{_i#Z z|5)<>KmDovy+F2U*WH80rb*j_s;NLSH_Bl_#AP5#49m=J_m1^yPHfKsBSLqgUJPpg z8rflZ+VTL^_oDm3pP&5M_CxvY?Td@=c#DBeLV{5WSI1L$WyZU@#-LsZIr*@t>=DM-fj+md|?Ee z2tKdY^_kZRyq(8-f1gb{X{0{O}+%v5*xN6y++sL7% z*kF*|wIiHZnW6aj%)2vB{AN^pCfU25pySXlA2FR{QS!lcyN^X|;qnhT(3)cN1?ElS zi)tqp9Idgd3y+ZrE+skZ5ZYa%bJjH%A5SocC2rJP1Fs$0P+R;2Z<^mMI7TU+D6lzT2;6e_F#mY&pI!CJC+7LdsF<{=F!{$U z6M^HcV~%?xR=0gZDKoLq2mQF?LVScc9r3XCsJCrxZG}IpYK*QQ=Oo55u#yFwxQMr7 z9DFYaZZ<>v-7FlIbN_5k%7qHDrZ;@k+Dhb#Um;>3eJimcOi63MM4ng3cGmU=H=)gF z+`{xr&umpeOK|W@NjE>};!~&8j>c#w`^5$Ww+ctOH4z=FfcDB#!q(of&V!c69vG6hk%UdRXSeu$89ep7)?gH5GXcf$$z!;)V7b&@FZgx9vCku?y0NI+$8|{tU`jrHG+lt0u;L_h@rv>;FFGO z`YPL8pJgW+Py+ldDpp2Y;{gbd-MlM8ChQZrkcse`#HY3gAKq`@3i`W+tz@3R`*E8- zy2JziHeu@P^?1GgSJoEh!KXuMgR2n-sSycI-&oxun@YX%yoDy+yz$2K3qLA+2&5R% z!_9i}Rlai%N4erh(Bet^^I}kkC8&9E%Ex+K?`=^HkCnOR{# z67s;I$ z74-6Yi!6}2V||E+4EN=b$BpKq#G+jqKUv$j!4tlPF!nj)74Q(3FmL=vJ-%=)u9xQr zf7ehAdT;F~EgB6ufVw3UQey&4seF?FcRl*ca-41MaGxukO-&gDhiB_IJ(9GBQBV+o z4ZBu5BzX|-_!I!IJ7O9fh-d1cg(QD#oX0!AIw;Ssj!KRCj9oik zR4tcSO?ZyV*{HTp)npI*nNA^4WEYkdI4b&GZMGCDiEK;x_9EPb2+NkVY^z$f&w8OR z$9N`(N$!V>H@t;JEyK>UHMpRR$7EYF$2h)K}Oq?$qK>DEG zXM2O^=tEB6Kb*R3dW*J-bmI)`W0bclTli-p#Vi#$TZ&Zifc|2-SS`&i!4D9)(cpxB zg&OePyUui z;(rs%+!Kw!l*`-X-;ZfE9%I8|DB~Ru~vA* zLy+G3cb4X)y@ig!d2k{<;h@FfQOTz=Tp_3@YdH6JujI30E4r*G0?D_{P)S=lyBV>a z%}ygFChd*xHF#Bg`9hP(#g`T2Y={GYCF!_P18EBI@2%eiFbtVHTh@%7+`fx%emG zXgQ#ow!NFif9EvDCB*U0Vj`cg>F3BK=E^rSxl>6#m-I`EFYVA-L~J^r_#i@hlDr zSXSx`l1z5^aY}HowzWYyM=>^#xii#a6+{#HC;Gk2Gk4M`CiPF7gT@W|PrIjaW1(>Z zmG(O(H8`(11p~MQ-T_0J2PightpG}d8ozUrpnif2H-(r z^7xQP!c47Q)ipZq>n|tXe3}h%M5&xFMG(1b4E9{i-dN3xo9Ud2@RN9Mc{H&Ru2wX< zZStlzP$~$Q3qRx}c>@t7id#RJ05E=doe>-yJkD~KL-2J)?_walR;jFn*77pPKQED@ z`>h#ups&I)WP_fmx+iI3VhHmqfM+p_K z$#3!K%zWRa z<$Du?#*Ij)bS%S184f^VS!)^z=MPJ)_tZLCmXDGashxQj!L;{6vMnJLh1-2zzG-M- zPGd(1(NSf(A&+6H5!*0prcqBU9?v}$R~&-v+Us=tWg}njxm&=k_ziZNylFwQ}DZX7uU)Q4@+y< z|1hd<_3xF^T0Ve8JD#{a2!0cNd3u|3A`{g#iOD1&n^~rE{-t~T#bWHnqXQR0r19M| zUo=EnnKp!dpFw--bru|b)~^8aws4pFmdg}zchckRg9$EEijUXpEE970My zS;iX1CIzlKUknQgD6}4L{Fx4G2yl~j4lZz|`6{l%8MW^LW$dE7>=)`>;g_XiqFQI* znP8W32JIewkP%>4nD}bRRQw7LA5Kv)^d8FQMBPvS4~J;6C3lNb&*RcJfFb+sNW3$>mS6YJRgI&* z@+&Ww?~2rb^wlV$d8WmsO0-#{&x}=S7Pn=$XzqkeQp6bqma_x$EeRER}>|VE=GnfsFrfu4iN8i(5b*ev3x=O{TBdJEjxU$sZ}4 zh9gsl5pEj?j7~F^8zXD;#R_^`sU8#D4vQJ>`Tc$8XV=e@onV+~2LER@jHK|##$I zLmzTKiENOUA8lfU!616NJ>oh+us8qv-o&S(*V=OaGk9R{ykAADOZF7KAv)jX$s&=w8(eWAtHpqd1V|%D4poAys?6P==!#>i4(HQJxX2MW;^e z2H*Pxr7)gK7fJuaG5&q8Df;<}^?tB3`B(0mMVoM!k7})SNqqkO^Z^^E|dPXpr_ z`(tk9+3ev?I^|`RTKo6o<4-O{Cpf3YE^}}5%;aynuq-O)v*N*>iF6KsVk->{F8oS<5NS4%GrN*e~-wkK}%`*k- z#pNm~Krm<6B*E=TAZze?uu|83^JA^M_WNkXiT&U`I)CzO&E19bHDv$Q?>g_2pNv;V z!xA%|_nfAu(*HG=D~Gf@A``|pw&(X_sDICQllFMzdj>%6HBJht2loT_=)7AO?&EX3 zL{%es^_QD>BMsZ6F>$p%cU+!M6aR2hewa8ZO}ub%0Q|#=E5Ojkj|IMd`d{loBe$8v znfu?t9EEcS>yzqVj5K7+jl0pR_ob`J!Kd;?F4!S;lRrPaW-+@TyiZmRx#PsRobEZ2 zkbg(4SERx1|{KG*nxV-$9Kdm#gP;i+o4IH&5p)gJoo)&<+h_v+5+HdI%;u$e(o*`_+}v zL0L`yH%FHDkgh|wv+vmLs>@$LV_fRHVtb$I8*8xy{?c#C1G9l`FJT1tza?21qxO`G z(hmucu|B8R=`KIXv~WmJtQ2>{IysOv=A5n(Ojxtjk=KVY`nE8u>X>+Jx03g!{=c3& zfznJm5xKB=3JBmu{(WJw0qp#7q7d5cNLDN@bgjL+)z&p&bxXKIQFJtbQGm$mef7NK z$vD@qy&;71qcW!4rvv)9{#w`$T{|pJoOECZ^&d_xcH_G{dS@nf!vPW%_@JjovDX-_#e)t`cuv2h~1c@YpuQC68_+YyC@u?>|;!NQINdQ z$DnKxkDC+hQ2fKDC9CIsKU(B^Vz;-o!)S4gn_`meg#SbA@R*l|Lc?b4J}~)o(##3V z2!3f{+2$)Q=q+LHbbnAB9(kElA3d@BX*c#}V(&M0+B4Ryy-ewsR?mKOcTpD%2tH@& zoe&E~m3RG3tS$cJL5|XRJ2-p#z^b#P!)7P3;9L_}pCTMEU}01J-{eHZ86^ zkEC&T{xNoY;qa8=Wb{iw5#oH*j}`~Y-KJqk$1FiuxxOR!#gwSN)eEP)#{1Fhz!l1_$z_+2ksSU^4%Y#OL8K-ySl*a4den7j(daejj^_tp@wOkK&qR2BM zJc(#Lu`zm@PAPEUQtc8U%NLTAVmd2SCC#3 zAV`r8(o5(ebdcVg6ahgH=}m-?&^t*WH0f19y7XS92uKG3=^{Qm&;R}2gKzBjXpeoe zbC9etGBUEpTK9dgd0%tR-<3?97~=SxzoU`RH&})Ga_Bch1rewXHN&zjXgveN<7#Su z$zM-DHY6r)XM^zY9Q_9`l>gn3-t={T>MH@SwlS7{$O+ZOs~CSV##Eo>1cwYyixCs` zHexq|M|Qaloer%XdVEJ2=c3KD%s@J^7bsJAlV-NlYLh%xIvx%>mPYf5nQ*z&sWeX( z8}t>+u@BGrw>n(URS(^ZEy0*mi5r#B1DU@-H&z=R!{coh4Vx+O8TxFXV^5q3qf^ z&bZj+*C-erxe{P2#;wsgnfk5C8nl5^R)qK7LzgtY|6Y}?d&yp@(;rBlOh>gHGjqlK zh6aH*$$;G;BknFxJ$r^rK?b%|IOxCiegc&<$&ZbloMK5oB=&h2e zDjfm(Za*tT!c3hL__Tp!mG}_4{yvdpo3dUD-&xO0{R)O8;!?VjM^E{dO88RYlH%+q zk*1xeS81V-sqpgCy`%H9Uspb^Hv8ec2h>G)+Ha|Y&IqPj`I}4 z#(7?leDJXSUhTeokUyR%bsA~Q{s>v0?}}tmXoj@B~j!sXd@u6d#JD#?6B#a0XK0BI-nro ztr^zrP^(LII*<2CmpK>r@-tHq7wrCHy0kNH@e+}m$q~UK_AJq}$OIs=6$29g7~Gp2 zkJr_H3Y8y+u2d)1JRW3L7SF>`o?Kj;+xwsF$M-@4I0>HUAA1i` z#(#UynojC=5iR*LG9JjeP6s=3uBAj(Np{uiFr1XjQZq56}WbEyDeS|xT}ll zUcTfVd(YONSlksB_3Wg(!F{rk)M_%hez%GB&Y$i86{yR6Ob8!cQ5vI+{dxczSF>I>)Y-FK(?3id*N9jB<#_f3IJ8$CW>Iter{ z1GZ?PIZgM88rGNnKAT?OtRw8zC34hlhVt{@{8aG@;H2xMPPSWn(0Ulua2%0K`W|f2 z8}ohjVKkG_|Ic@h%Ef>ZFH|5uAkk=X3w=Zb!awe5{u3Ha86T{h+|YA2EpxrMPPG6( zURXTXSpg)FOXUvlefx4d=7G|Z7n5~=dqWvX8d{iqhMnmPNTBLlzPOP+bsl*uav1aU zr3Z<~#o9?+zy+zy&6~r73X_FA$$+e?+eZzPd|y5z&~7UKFjZTB=Ghp8^cC>gq5V*r+&&93%383YZD+=!e8w9Wlp}n z{Ta!wz+S|$YRKiZuDg zJ0%6xku(kxII^bJ+2OR)H?>*d*Q+dhg(DxZbH78EDP`7-Qb626=S5M+1&3K z>SEGc;&VN9U$zI_^eOGl&#hj1y(MoeH*e}mv&?-JH(uiU>gVru_lKWvj^1xMD{}uk zYW_2HoaTwA*PQ=z_2b zt8G>A&aqBwRh3|9MQve&GvN-;Lm(;^NU^J&!pC#NoCzUmleYC}&AKJjNQxxTYzqtB z=0sZy5bc{TGNyp5kdxNT+M$MGK=#eXs80=J`0zi}|P!~XF# z9@qRIv3L0Y;Bh%kZeC?izxZRh@a`WxlbZEU+MQY*NwQpGPWG2hw*J&ldrI8@%6#?+ zHf*H1mVNqMmo4zM;e$UE571pTS{?)ufNXtT^H{C?I5xiA$n_&tG+G4pc0JO|vh9A| zymq6?x;@gBE?YQ$i!rSw9s+}+08sIO_F1adBIwJ4*s>!LBRG<#rVq|h7sRsXAJy>D_L0T1i#IlQ*LjYeYQurR_Hb^inzGs_{v6ay39D*qKd9fIpM?e|D zR0m~vBDy=PRBi9vk;C^KPnu)k z0qE_Z4nTppt?UttMeI+uvoC6U_o;6ovb4LrC9}{Y?wL)4EuNs4Pomu&ML>apz z9A8q$a9Qkolli?HvK8}sWYptlC5C|wUYnHO_D_090Ua?Oz$LRA z5Y1F+s+>jHU?APo2yGBrc+?@3zs%Ki>g_|4$(GCePE~FY0l58mgP8*_Sb5lQMh8Gg z!sde>MsgcF!||2-3f&Z=f6=6x)DLSd#sN9;oE4Q`2x~kaAs9e#;20@#S$9G~vKr~{ zZC=CLY^vWoDA|b>Il%U{r029noCF>Plc^-Hx*(7n=ho zNt0e}hsL?NMw;EDpm`@#!l9hp?=;M55h|Ky7C%Q6;q@&J_l2VPppSmRps%0C=zp1# zJ9FPz>Y607h-5C`T|-$A*J$Yc`AixtSwEw0`gGy>>*mJc87!$7WIDzR+&iR{Ea_mi zl)1abj`YQz$RQ3~3EtTir`H9);I^G}C&0{jxMN8aH5n7A=};(Y0cscl?afi7U&F1) zqJ!WYVGsD!@nX^9vx0|DtuuvMDi4w#Rtuzl>Enr0f5-h)|H2rf+rZ;>Sr+~2-fn_} zORE$bt2{_8mQP!btbby#pZ0yE$EA-y@d;rb)@c^&>#$jerq9(d)RxiAzLpHUy?|#lpraKK1hLI~f@p8^K0k`|)K%tx+R5YK)xgyqMq3G`*O6AJEMVQKZAk z(O@Y~JL^3J%dYAJ4biO>^`8$;tM@eIKiABvCglP`uP8N^Aqwozw6a>F=8DYm!t}^?D)<-%onCJT9;!ZU+J$HObP9fN$Vcf)Z!6W13#9?lm4-*}XG~1w2kRGn ztp|D4d!LH~!FMEaZlm?d1mu6=_75Jf&Y+t)ky@QCN9)Xk+-Ndy5dp zgh|EMv^ukfab~xE!rQoRCMpND@v2-|*&yG&T6mMwWGwVNq~&HHb-V+pg7-mi*NN@!;U67{`Mz37NKjfBtIn-uR&{7pRvds@s2$vSbD2hvi(5_qB1}~h1kh1r2_#@WD zu0*N}@> z8OZ{kBochw*{7PSTpe$Gx$@j#G|JyJflKoiaq%^+NE6O^JEcElQUBm;P=B|F0UU32 z_1={{i_F{2T)SB|hC-bTlAD#$Y8kme78N>PD=jWp=+?J|wzWrih)GIlR`lxwIbdxO_uU)XHe-4U5X2Q z?Vyanm9VRAB?2y84=ofUWc{-vKn|829D53>WnP?RV*$(N+h#mB3ocV+Fwwlt)f^|#DZVxt>j zoMXjBMPDu>D7X|i(g8ZpqhMppdTgr2q(y!RAijO2@O8R+r|ZwI$@K<+6yNTZOU<%} z&s@CgQKLlYz4uc(tiM~MCcj_j3B_%|9m@TxKF)vl(W@Ny zMkI#pXGi4=l$XS?6d*orz0=G~d*U_yNkf{eVTF7BI#i%0n4@086R0%lKr?tA zEF?mP?ghGf%Lrp!6Zgwnm;K{&{TPx&jGSPk26OR}q6inHir~;mqOoe<;oVTfSk0nQ zIV8EocG@|orEaUp7DB^WO2e%fufbe_Vs`^bs|rvHPl{RNL#!F9ACNv!O5A7uz`}dG z7Ji5ANV@i?RZtKt&O@A-io$Av_BIk={OY0Z>KgzT#-a@JaHXMpD$A5a9mz&gfL7!} zvk525rqut1j290ai(}qhw^jdx_qWFG?1p3mc{uKXC@Kam?Q`ZIE=Hp|I00|q8Y8Ln zw?B>y{-m%Jy!cV^TPE}@2&afAv{B$>aXOiAd&Yam69GDw06XdXVSaWE%}Eos)WF$@ zO=({o8H$<10pu|AHCyCyH_!K5m3oHo8V+6X>&NzxKl$8#Wl=@7MMcSDMWr{)BnvgS zvWsmGtHwR*h8jsPO~2;zX4}tEbCm))fBu9s-PbuGdxRu_D@2)<0J%8P2oky7FWr=p z0kLzDzM)CK)xUYhi|*k!d< zUOwzT&=Cum!>Zb2HPuKWq3&3NttzcO=WLKGE!Z9#3)vb`d{3r0QGg>i0dQC(5`JZT z9QJ^ao=`9R8S4+_kgVPDBby6Y{kf&!xsy~81`5c$RhYbRM`Yzr0AQ6F1N)rANJ;HZ zVf%Irz)=7Kz`7(OFtP;s4NoR3)yX6RGm)jU_i4b-%E*Ef*ovJd$Nq&;(md6x|>E ziI6heBga^lVlfo|--T!}0*5T*d^BBI9~ll%!lJ=3=R> zkZXvGQ*wPtc05BeTEGC~026(1P-<(rRv#z?ts#NZ$%0{B3%Bgn-ZQ)haSb{UMFmYxJlV;xj}t7vj6$Bic+)QO4_@C&3@%-g zz|6HrahY^3J{6;!Z8v#2>gUub(ZSY`p<+Y@c3jnS-)4^ZK3zsh1eRsBd7@Tt_*w$< zP`@R1U0th{#V~dnI`%vcLX&!mp`!D0G8b{ES8sr%x{L6iIgF*ZyJxp8LG;W>mzNEQ z@Jx86UGBN%6es{~{~gVn2?LIPN>gJCeq2q>g6i26rr>PGu6bdLAy*X0|4G7ngT{qP zG)4S0m(QpwizUxu20|-cF3*S4XmSiwg~ni0ugIrE|U@}(%fa3#kKv%mXhn&XC6NSpIR~M*fdU}`RJN;BcR^K>$jvk{&n+7uyv{3%e z4W<}UgIjSBUlaa&G}}s;A*L9%ETGU|6OwItpyRm;luWn*q?3uB7Um?;jhh zcDWyoI;+%b#m!}FA&CZaJ#%>c`82$R026Vz&S#S%TQpXk6-Wk&=);&fju3H%!5Jc> zL+x9(@$t4F%dTC9;I3rsxze;4eGO7Q-?HXT&~}0D>jn(kgwZNkk{Vi%IqZ1{F4V|>@u&#Nf>OT;-Zk81)}7Q^=0NAAZE1YkV^vQ#uWRFnXD;}6 zS79J|C6pOt=#5}QFl-I>pteH#UhcsM_EWM+?O6TaUQ@wSP1bi$8qF}TLoDeeryhoY za5%?r5vA1gTTCshK9Czr2DLZ>K<#3qKD^mi&mE? zzO)=^3M`Zi1e|A~*-SsWTseB7k!@4|B%sj*F=Fl_mX3p;+ZrZ3DP7akYQg!)DDa{S z3ef4?IM8d_ROv4EhXI7Z0u{SKb#yD@gZbW4k?#4+Q9BK(T|c7vbEJMu-(o5qS2dRc zGG(O(n~{a-vr8;aOPj`a`nAAX+yK@%SAss z;i?dihg=VCg#Bae_sh0HuU$``8&+8|`!ie0LQ1h+ZXn(*_E!6$-%`IdQp-{EcM3g! zr{1Z!E@>FjO6%5NEAPFZSBQ0YloYE{unutiM3xdak?MaJ-RNWSq>lRLbEIGSrnP_2 zO~XjzSh`E?k`rHO(4j#pudZpo{h+UdPWlobZ6%3K_#!>gD%sa(Lcex$JwHRENWPRGzDzU*4wM0)tld4 zNF|JmjcqZEk&`z$x;)Nmm=G3O{vgxyS7q4Lnuha0%k(Gq?+ zBCfBL!Ci`~Y~Uu+K5og^_#*ge1WJriS`_Y(TeUkHM@`6lW5zj>R}v|1>t8UU@V%Jl zVK#66IW?W+!1fT;B+sqjVq7^$ZTCYaC!FhRL!r7Zo(F(u#HP>w^h2S0j?l6UBvhG# z|3+;$!ZmdISoIHGmg@CeZ7#+Ba+cW0(#pvC1C)db9k+N4oi_Lk9hSQ%Gg=g#Q?DdPuAYZh;RFFUH zIVA=0A%sk)G{|lSNPc*ZJKc)-Yia#hnD@vDC*yueEq4M?CB%WE9XTIIfgthPP=$E# ztfWm-lfobyu8)d7*Y>8)Q8yFEhE2$o@|hQNUo3|WraEfrTMVXh^CJb^^g(7b5JZs% zC*1a{qBMp<^)pAZd)~yXd(zC|+??KEs=j&M6NLzmhfMLwhPra)M7=IGpf}G+HOPb= zbufzDVG6v^FhQnJD#Jn%N)$g4n+udCH5^```2M>BJ6?@?d@lNh=CfF7 zvi>P;OWham{ws>8$gpTy$~~;WQhMqN&dvGQQ=3mQiVjI&WxuqO{OyZ3 z-o4HA0KcHr$$#*s*3dd(m&3G6t`Ag0=huS`EXwX07b{V{pq=R>0sC2?f%j`$k%!ur z#FM!fKR2CK6nCT?Hed@MgsFAp+TCN8f_Hb4CWf->Ya6F+g#@~;%4C%AjKtM5NA_t9 zZ(m4tc)-F!5Tj*1CwpaJL#@b~7kLb-D;G85M7N@50!DA(0@7H8dJ_yOHC-egf;5gd zlgj~!4>Uv5MiLeWzXlT29#K0GYYJVlzNvhxme8i+J4JDl?nyh3CEy*Mb10$zkLbO<*h<1EX3db|iDlv){Y_urCi(gPu8hz2Z< ziwr~aB7qS7*FXpu62}SG;7k`!up#+5`HA^17l%Dm>$mzf=KJyjpV?%|LZdS zkFnJ?8;$y8{04Qi!?PJYn_s1Hwqb&$LGYG%(A$t?cst=gsJ(iFHioaXK^(y z_J%v=aG*sixF9qGj?Y*uita@cJ**PF9g-V@l%OeYhSfj6Swjmp1mOTQVOYnO&4&-S-T4aHUklNP757M4wX=p$QG>okXENn zZD^nG3S`AtmQ4%!yl0SU2}w4Y6%n8C)u8fq%Te;e@8!I=@lx{TH;=J-zmN6JX$u}> zFJh0tQ?}E}ONYjQEN&eW^%W$$GS($sTSY}H8mXqB!krhLq-ekn&(lJ1-HTVGTICu} z2a+IxB};o;#w?uBb`4Pto!ub)M-(MNh-dbtSQ zeH?hzUb6W1Wheg913;CfKW)M~k{nZ6REAg=;T%;ULPUXKdzxf8KQH@1>aCGfG5dxP z)7|1DlcgMPcsluBg7scw^&o_6WT`R*oATcF3?4>MV(fmWh5kN^^wj`CPxeRiQ98R2 z-sn@k8+wxUPa%0N$1_~?x$%~T&@Mm;L5oqGeEN#=4Mce&<|?taSU|N*ArZbkg1C)m zJEdVgBN_-5`b}SQ3k`Wvg0p4uq@F_Z_n~N~#}*SG`f~BXu&`TWIY{g#*mX+Dg8p84 z<3D&uHVb7CmtQ!**s$|y>jjt358EdmrZLtGesS-+aS>GbtleyLVhqLAYh&v(Blxx- znjrOLn`+MfR&>$SfUwW>$oGrjqE4gM;n>GTQcYH8qX7aEl%v>SuL#PUlwx~xSWbJT zT`Wk+uY3JjHT42$5_SsE=aFdfVLWP2IqYcN;#7_!LJ zo;lF^d|`gcX16VB8XQ6_&}gn9$qP+Yi#UwJxus({7Sp&r2oE12L8jHvGDTuny^mvB z92FlOvPEfV99PR8-A2!H_p97gC3PN|#ouH@Td% zlZc-5kQ0ityT0VpE343??>pd`-=J+Evv!0T!m8{SqkyD}0K+!08SZIpAV8`fT)>5YV;roZbqnvOA*CxUCNQR{=j{;8pw^<#p z2pX992d~8QV>?T$TIDx^&IQJAF5I3JSNwFH6zMUr&0t{c-A}EpjX+s$L9whTLt5Cb zCDRaUPH)~o1Dc`@LI4n#?wS$lsreu|)9DQ_ zh7F%h8A*xr>V4xM2TyHk$}}w!|o+zv7qg52WU4;5BdEGWhBr& z0E#X_0i#H{!Vz2*D1ai3>fWD!@DwFJ%?vwqzQIjGEvvhX&i_hC{?t`}l=|vrMytiQ zM=AdA?42(;$d;rQsrOE#lz^IiDQdc!`ti1)l5}pQNu!89w2BL4yrlRpty@ZFua3CC<_{kp8q6$6uTC_dBG0jdQLo)y}+1kU;W7 z6wymGXf4n(KHm{pZ$GiMDSma4doO<_$blDLMhv!S?qO!Eb-v?bsgIddR~Lz1I3mE1 zzO4IMY}=SVkNkNY6o%F#voibJla;~~^ta9T+ehK^w#y1@Y){Gh3dx}uP(OYgDXh2T z(V4EHq7pdHujcyaibvJThOjr+d0gaRR}FJHike7wOH0@y(YB7H1XWO#DP?iNL*C2lfEDJ{ zA46wqXvk;j2LJC#N)kA3IGoSt|15~&Tq*joeyWW#6_Y` zk_HGH1CR>B%p42ZfNT+2C~D}|*z1wG7xM20P0s`Gw$E|Jl=S|%;^;Yk+qt`PS-i)P z6piY3@a#;c2w|4lGQI5{5JU%+M;aIidb(|Ez?)Vwg+vXNIrA5c5pRhjohclH`AK9y z)YlMwsI{Z}T21_!M2d>;zr;_b0gp>ewyW5&%jGcPm)%C;RHh{hU6$^~clXTD`tCon zMif0fn2A}0&4As+Pm#mQEr?&dKjPp+doH}F-(@Z@Ubf!5)qf@xlGo$!Tk@HnNn)FY z-H_p1Wd;f-7T09@=poqaSh~^;)C`qkvB03#L^g>iSr0{|*h`j}LRFJ%EXkp9|EQ(- z7F;E1jZISpLAY4LZky_yEDnumkw5|!Toe_jMYSM9P&BF%sMiPf8-#!~{#eCQGMq6z zO&pCT9N2qW_wV|N!Q{%R&UtWih?$Y4sHoKhE5?^aQQYPrH)s%|E~XRXkUXAQgCbN`T;ZdVqVgVFoy|0$cT9lDf8w_bYajXP1 zpPyPxAUQUFaD-I{i!CNR_%RO4Hf&MXgHn0sWx^FBgkV@<6uUKHC~2WHSP`y-pJLQ9 z^k7eyCR&a&?Wc1V27{A?Lo6+BW({8(U}kWyQH$U4S#bxj#p#`~EVNdxlwTjnezA@Q zJ%WoNOH1KzxciPe=KWsR2l~&u%T3sti_{0gdV~{byLU20CTP0dU|pexCqlqn|TgkKssnL2Act8-KCH4sP>Ibx)p^t$8*^)p^l`5kYn)eCD!DwuwKLl8oftM-u zn)|s51dF!SVbKO^D0iwrLvULCa}u)ru=7vy7{a0w$3`EA3sS?Ui-rXFUvuZ_Z4jZs zh0N@;hdT})BDA6=JEo8XgsF!J*RXHWVZ&vt{9h1(p0N4{#L^B*?8Nx`3-ty=-mgD) zKdY8QDwvt{rghRM*Hph*)dxoJr*Id$?pNogcTYZx*1B63D|d0*M{9EOezmBOvfmc& z-NTD3-ZIveOO@sOtz!F&54W%~B62t$E@mfD5S z*$r3K@cOwW7c6QxU)Mlak|dkk4_Rc7je|@S6g;r$mInSO&8a{r!8#HCkc2&w$?idj z;qJR5%{_8QUhFf^bTOTeD2S^cyZn+ncbUY4O)jKRgihEvv zFN1KEhC?-oic$rr9f_gsYs+C@&Rp}9Q%J6MiUdpKCW53U1#K>i?_mpQ*%%P+ z3H+*EG>(HU!BJRp&7WH7LPUJ&LSR!3J$@K`7Yg?-bWJNj(Q!;GKI6y%T-fzg`+YCAtaP8K31jeGT18(?>O;bNcF)OquV>taVEJn_$)@0k zwC3Yk()15e)I4Z5VEwS!4>JN)QrI9wAp6dtiq*e&#T9!Z5g_z& zqW)t8-(;%~4lH*Ef|mcO3LUW~vkC#v!-oIC+fJFjV-KkamgP}N57Cc*5Jscoj)Y;!)ya6n;7Kt(d+c-quLM&a(|gbBTb5~x zrAnzzvhwaAs)hLF$E{cqRI%ITkM*;%>OI#dv86qYPLE1^dAW@}Q^m9nHR;NVOEMz4 zL+M{e0fDFE#hsV|NbbEOG1<7;@$4zOv7i-P8d7PW~ob)epvJq>91j#HwO^l_O@6&YkKsH ztORRW_Mjnnsu!&Zm_IJyQij8B%JfW4{r=Kf6W4dQv~>`_P%u$j%HO>)RRMVl)P?X^ z&u(!X)7TMy@n$5+ytUCb)vcczRW7vV)h=@*X}10l&?SUXHkw!!-w# zuGX1Dy)LQIFMHhvEsGeUFHq`cG>Ts;tHRS zD=a{ANBn$VisbU?FjSNlIP$g(n2i$;=@>ySZXwF#5y7;JGm!{3C{6U?l^#S~o|pFu z7M`U_qh-)lKV}nl;6^#@b;w6b$+7lHD-Kl$CUjc@1|w{ zpsB*DE;jU$Z%y@s^_)JU(c^R@+Y!bi$ET99Y}fSt8O>YKjE@~JlvhK&jW>hEhnrW~ zHSn9=Jbauc?i0cTy@g)saXbUB36fw}@9S-H7`t1ZGf2ysDDo&UN={cVr~UkO%C|r~ z_^qi9{I`o?kMo7$nDYH;zLRnF&!8{qqwT+Q7C(j7(XwX6x7_>u{>uaBlej6R%jaj@ z^Cuf#^8i%|ex)aSJLTP+Yhp50lBfGW7-M&Wx`hcoz5VdX-zz)emt8*(q|P7LNf`#- z{`0Arr1x>~$9_Rb7)QM{eyP*p)7uQnyVt)YyG14{qWuR4OgoG^d$*|3+TN9)b`aKu zN=d3KpWhw~EdmWQa*{%9zg*{OaZoWFR5epPj@h^nwRZ^L%+2Fe%xH{RV;D4eYWlS2 zT_S`;^37QelqwA=zTtB^cjLXu7;9zYX}nn+pxQ##`A}g!onG>ych7*@ewpvI6 zN%P`dwEAiTG%N7T1|^@wj0|KZw{8D$oC~##9vDoF#16c8LE-)3iAvI_t3_Pu7HLA= z$dP?%TcP{6uB6DM>uMKlSWp`S)slSfn{2JW$jD~y;7Og+tz z@?T&^?XJcUcAxC~8Ec{xxwQdP$fz&^oin+BM^+WpAF~@o2nXwEau5xacz8mbdwKau z7KY<)jpir;|6x!?Dz%V0sUZZOs$!sTMK+_VQ3@d;Wz)eIm_DGw$}h-;M6;UKd3QQ( z(n7-yhIPyR4^WEQaXd|1CrR#j_elDvr{~6sGPu<^?AdYky5ky zXQh?)SYyvmv$ zQ+K)Eq+bu5+acUb6nPz?DZJHJuTKvXyQ^Mjkn`-7#=4?7bnTP#GC@{rgJeQ?S z=B!(&`;U%pa%1S%rzG8>h^Py(@Q!l_-vMM zr5p-HifgXKetmm!vf~XPIvub5`(5TBr`k7G_AvB53zK(6xYg=|ZR9{c%gc4fE)Bi* zFk1;`;cKTAnibY&@O+4x$+ar03Gu-C@k46Tux$qKfNK?#60#4#9$ALP4?WStNB%p(4mt8PBokY6k`mX=Tl6CNPHXA(_t(<989CESk_oaB*D4^wsn6d( zpt(sOZ;N5tI2GaygQ}+e@eR>kj~0&zQ*fgc4fVfT0wEjUBz~m3zE%-`T+~cQcx8}g zMWXs{hxmcyQ^k=lPM-z~=up{vo?f_WtU_G*<60^%SJlja@Qy-&7B6wxUi5gpgDQ=C zvFiRirze+zz3=UX?sL!fwW*&uCO)fv^YooWGw2V6%-`bAfxX=#vNi$Yva9ciJv=YM z;Ky^JDY0~F_vWwr)~yqEdbS4EXjd2|ewa}q=nJHLtG9Z_c~jr<1@16-{x!M0^OMzo zrB8Ps{4(f!ueF8uz`&j^%n|LB;hyz->-;F;&aIm9EV%jb!0lR<YiJoSY(DzrdW#$FJ3S; zPl1H*BPoLOlX4e>cl0RI{&>)HyT14KtoYkO75m*~BUq->K;^bCYI^MG>^O9oiUwAV z6O*F2U_d=WN*`7@Nr+3Nx<29K@bx6mz(mRZeoJU7j;8j^${>RSdn>})Z^nnu9}wK1 z3BS7kNo4V{_D|L%C-6Ub*{{aHkcEYq1EL#oX*JW&VvxNiTEXf=ZbX_zYAZoPa36aN zmD*#8VjqB@CM@mAhN}XNr6zHKUa5Dk_DjjfJZws0#~j-78|Eu^^ic$d3hU^~`PIn* z{padKoBZFPSM=jK4w@CfjVC-5!MRVw@x$Ev>XJSLxSY1zld#g8uvf@V`67iEatXVEY2-&*5K(l?nOE?w1(=n)>U9Xkx(;!Ul8|7j{PoIAHfZ~D(;eY3+yUM*NG1TZsbs29!<=dA1YT~VW2zYCBM=-+{QD$C?UlYZ zPFE`x-$fyG*;oWUnrfLF7hE(OR{^Sl%+3#L7Jh1GV+aI04|~XpXY;|%)fzk zBC2^qm?$sINnt=CQlph(JNx2K6}zblUdpp%B@w2J$5y&Y{sU}L7moX#Q{WX=R369L z4sUevo8PZ~B|5~~y1Mj5gjy6k#>GJ+WHYjzPn#6ss1H+r-!}1141$OUU-=p-yV#X( zaCm6x^%6fT<;Yv`C5ImQXNksh#u{B>m;D%G9bjet@kF*9Th@bL49VfhA-;#^_96LS;ot*+7x}t6Nq+Fs7P~{0>+E$TqIQ~%rGYe! zDN*BNUSq1qCy(Nc&d*D3m);kThzS#${?h43CV)C&f$Y4cqygap3Dz<`a*p^d&7Xg)hHn zt3Fw0#JdP&dCMg2me=96J^A5t9tY3aID#zfkrnpS_SKI2rlU~!hlhMs{Le2g62l9~ zsdvV6in8~J@|)Bn0?jjsFUP?h0|^>N@1xQAO~aQA^2yGKc7?9`_4hv+`{j-4oU9j{ zsDt0s8@!W#dBx~2-TP!f@lNA3z%Ae{@6Yw4-e2EGH;z4@#l5yqmcC;wvNF*dV2Ris0j81@+KeaR^ zY9!fjsWWAculpWd$}i;nVq2YG_q@-Y=qr4AuXcQ4*>+M$;pSp@`A>Fl4MX)*gR5O! zP`giXP~J8)LdbQ(u#szqkmMRDId@l0-?y( z3}@}Wnd>2WQRA3}$~08}Wk(s@ zEc$SN=q2yvBv6sfi=_Eo;rqYXd&{6W{_sz5a0og;aCZn!aCZ;x5L|)}gIjQi;1V2T;GU{E#_hl|r4eU9hY z{7lO~J?SNTe@%mx9sJ*BeqZI(O=V`L`6~P_>hvZl zFvg?IVeZ72s1-AZy9W377XF|wuD)0KyzT-snUZ+RvOUY9wVHs_K8x#C;cwKd-guf2ear=*2DE+2c>+yufu`hasfX-Tq)338@T<5o1foL<<}-hH8e0j0p# z8dUxPsJLem2}&}1pU?5As1&nkO6<7}sIIxS=^o6@m9wQW*!B8R*30cp%IW6mW~Rq~ zP{C9IC~N%NgjMZg>SB#&6)9s>;`v`$)OZzUtrfN{o4?DaTrO-}Elm0D^dp&tr@2Qq z(e;iMLB~@!sc0DH_MC_U|BVNa@AK91eh0mca~p^+Z(>UAnEIGFnI_4 zT2jgNk;wBpa&ByeJ>#}6ToZG=xqaH+!iYol zf7wfEDK~B%;;bDa>U8xz_Dv_klvx^GVVRS4nrI4#nS%5QMykf~ulcjHN?pt9I8+WU zAE;OAs#Zgi#tz#f?Swv2ub2nMo6Y+#&e%M}U?l2R4Hp#yM>yDBmr8unaAso{#smIum;vVn& zdaLr)hR2~lHtqcUEP;tAI5N`nO#bDs&h<3{S$fKQV|BPbYc1ega%0i%qh$W2xsXYt zY^dB|fj#Z0(XEo`z;%&@W%`4@_gu}zi$jx|iV|KlVff7}(}*x#HT~$YvMP>Os;YSD zn4EG2eB?=AXE}wFW3F26?n9~-t5r9cy&RZ>%EHtf=n z!f-+o8_n2HjEh^wF+7HOJ?4iC!{f32oXNShh;kpOD1z2sK+nOZ(FAYh8d_9+r>pDuMFpVj{ASEX~v2Nl@qQ8@6jN8JF zqUaobo@-2RVUOwR7};x%(d1Cp%@N}+#dH9x?4ksGDR`G!I8s;wgd+E@?QPAGH85== zb`q8vA`)y(PLJ7S=lE=$vy?MX1%sWKNiqx{T9Hq@>@FU>2qGNS5yos|`c6)s-i4ms^D(H3A*5(giajYniPUmK1zoHueqe{~#mmH5iWe~Xy^vN>?`NRC z=XnVVON~LxNF*HmcwJyzjyw(S#rAvLuQgDN708)kWZ83|es~W|XM4gk*iokoWt#ZvF!>hmA3%@0{lfiGt%9qD1J9 zM<$~f1X8uIbGSkmcc)>H{hb+>4YWu~|AFLB4j>@TDd>x5$a=sFJtl!X81P4&Ax&@o z7owe|4fR^TPLL{);*DY`>7WF+C9b>pEwYf>u4RD8X*we~_WG`&%|HX@2XBm$!*vY- z;Uk>sYxwK9a4s)7Fz5_p#scK8-4$dq6y)iV;+bU6btvO6q_MvRQ%&gXyPA1}>A7$l zWk?XE{Yc~CdRjpLI!fXmabG5#m~CBK8#|<9JllaoEy4c7OoY5#Br%@CstlvIcK+ad z3F8tl^9|MbP(L4c#gnm+);T0e$CSkD?)2LIK{1>zMFzB^7g=;L!bn1puH4Gyf^rVt z!f0W?f)rWb?xYc@yz=t{UtGIOYIB$F1u?8s9@kh#F|6a76i&;2<*N`ex^9(Ri+(Cl zlz6w5HbMBoDLfuYc9$Uthyjggk7p@q&Zuh@&+0BLpa&w8L-gOi2>|^+xv6DU;**q<^h3i@vi~*g#F}PzT zJha}Xd;wt)t4Vy=VY$hB_|}Kef%?d#^(6Ze(Nu;l|7A8w+U=}hOtyJQy48n~)pMEY z#lZ}2-?%*`{5YCysjmK37jv_6ZN#TRt@zaf^H<}Bk^S1h6RlO#a*x(&%(P<`v$`wt zd{i_WPB;@zSR%WNnMakHD^)t8Y^J<4{%=0V|2@|JzYY@rGyWBjsob5D(x-^xPXMxD z+|FxL-J=c*=1~Hzs-i89__(P6uu_qly?DT=W0^0PpA8zSwF|Tf+7!dw{~Kay&;fxt`<2T z^-FSMjM9&pci8B@4_43>mPIe+8zzX-_P51ou-;${{vx>T@G+4#i&(L%QT_O80K4n!O~HRrNf_0`LpA_kWkOr z2ZX-gEsk*J#qyC=>*%odOtM1hD5<(Cz#PU5CPQ`t+oLFPS7M(>tHfJbH-GZEJLVLa zVaf@h;f7NClo=9)#sRk^bqMu5aWxJ0v8LpN9o}!Tx zzLt5NJ&K$sCvW@WAwA*;BL!w~XimaP(RmJmh-9a@k3GS3gJzYOzqPSKyos-M1K4g8 zNY8U|LHc75@A(+W9ILaqk|K2>)|s2maU%bUHXi>+t0RB}gxR-}&!8De$dAA1u|W7; zN{7L~<@vm7sj5fuCZRYWm$c?M1H{nE8$X;}u-4KdjnGszLGru=Xm>&x{wST8K}FJD zk&?SypDtY_$nooz-4c~xNYrf{T=E-LExngOd23@Jzm&>wQY=M!rIb{-Z;uU(J* zY3zT=^bE7BizV=y*$jHx#o{1AX?l85=iBybwL^<^ZKW9SnBik{dQ+TAOkDNrFA}*` z>MEtQ6WH;l$o>!Cuy^KQ;*@bNmwMYJb-lWF3 z+nSW!bF9=!zQ|JfyECtTQ}lsZ7PWkd&U=5}M@8aP^CWKw;BVneS*bJn2wE0ta$Z_n%y2kIAd1*c;{!9X-htuys_J@-ctC}oj)XC zPgF5~dp%>V;Dd4PM=(*WhuB9qQE-u0M}qJ_fcamgM5&4FX45icNE&MbL|I{6#rae( z$C+|%mvC!$;XSxzrjpS}#)pdDkPRCK-CIA_;(TFlU@wx0qD_tESnN{rNPfmhj3^z- z{K@HS-4@n{iwoeZ%s-~Vv@;d_NU4kEj|3>r57#@GU$|9w32L{XgqzfVeg!6?jH`qz zMnhSl5XHekKkuK3EHt&nHPZN*wqICmhUL@0`aWR$`m~tdYlw-u;PTsy^jaPh>eTTc z*>h=jXGM7R5E%RHm)R4miXktD?oogRZ)+KQ?np~EzOIQW&i~YTmm7uvdPaQp#OwiP zT!p+B;okHPN;t8%`{61lSDu+IKFQ9LPoRvGukH1zyeP3x!1dkaHUieOKN}w*-+hml zgygBhD2{W}$#+1jmfXK`S~u>@YK@gjV5l#tXEE8sv^U-DPZB)pL;3nVaJnCEe6T{C zPa%y1!|#hNGM5ynHg96%WS_sKp%u9Vw%mjIO~G;MjRztEeNd2V^f*gAiFue+8pLse>~`;IaxoF{a>fsn-I_Wf>0 zrjj5D*akcOY>Tu>axtC?yAePlBElsf2F)iSND$~DCAXARK}qaL(IOTtcm|&)EQ4Ku z8I(9@PaVA5Z_P+w*GqK;?q+Kv!ZU(I`#&Q{|L=d%pgIm4q{bdNTsj~gIb+l}`;lx! zEnhq`)Ppn{r9O~Wn(UC72}E%lW$UTV&OC|yHHX^{urS<|jerc>UYs7`l18r;<6>@$ z_zpmb*&>VbK5W3l5GaoZc@Li+xA~23MH@BHhUmQA&4nv??v;`@-9EgY8#OWRJBD^p z5A5`6>Q60#norp_`03J_HufxNmnS%BCGKaxiMWGhB+gAdVe?S)wk>|JR2}qP#bx50 zfJ{J32;Im#$*0jsb6H}tSOjMOapxwfq|M=J06*>Omwzr+r+dAmsS;b>yfRxSC)MfM zd6Wv>whD71t=gPK&sScySim1?vR=;Po#LY3BWTTB-*9O+NIhykg~hRB0GH&y@iDb4 zT>VxuHg;LQrL9%D$I#hbB9jdc7Pub`4*=A8ePo?(Ng)2P#M6*O<+be;2q~~TPkVN~ zg6tBarPx9X83{O-k-2P80x%$o&%4F3!yMXQ#xpe>(12+(+}IMIip7-Z80FV(>Xj7Y zY8eHBJ*9#|LE4Qz9_ahuqI(%}xQfn8P>)H`lHL820}e5jti&QWNYQE%@BbaF{_v1; zwb|h<$b$0ZMltd%dLjHD6^7=6Uhb86O_sQ&$$ElO8Z7aX=*f$kACrm=ZC5wC#x@&| zFnZu*vPSe$$Pp#{M8w zsA4b(@V(`6Q5{8E#6?((K`&ropzn1LWl9O|xt|oO?{~~xbcIi1V=(Ip_GK@rfKm5| zb%~2{bIKfV%2%KLGPFUL)RzS$$_G6;wi)2y!JVo$<%JkfB;k7N84R%R0+xn;2*eH2B1 zW0UNgGrDj$h51m1g6P^kJnZ&FHwJAK>={ZpjZ@l%ejKbux>yu|e+CW);NiM2ek6Q~ zX?>q1RI#1<{mGmf!=NE+x7zHE;-vLlqviDqOJygf_|^B1QB5HxGQzKv-#GTy>4p)> z6bSfYi#QDGcKKyH?IBwW^Cq)3nyFmo?_T7g@w9-ksC%Dye=jV;u@#eqNd(8@6N#hW z!JcP7$zQ|8dkUls$Ks))H+_pDBtoYXmMvqQE(ZsVmP;1xzkAEnT8&Td0$};rv-`Z>t3;QXQ6bfFK{5mRnmPXP433t z%34mR+8jL|uXSda@ac zBn%v0vN_~;nzathE>@|M1-0Vm=Sh$1SlTj_wM$eYpru~S1>C*x)3vUi#4~rba`T!M27rNT`B%xb?;bLCftreW+|A3Ew5+OU9c%^^z5cBG= zSJS%8E{kw_qjGfLcj{-JPWqv@PWNOsL&kwN#G&YjfLh(aQ---Fj75m3nt4Ljd<=jt zJCYIFr;MNIR1LBja8NH}BiR27Ab6L;{rG_*u=;R8ZPVlqZa1-tiKbkgb30T62J`~7OLa<+FM^m6CWWp3}-_`^uR4J;>S8l~WJ?sFCPmq(zUHI^}xET=CG3Em%~PM0yq5TqU=QnTDjjt#}iH2R6J$- z?Xdm*DVvfU>Cy$Em(cI*RDT4oE}`%kostQ18oM`pzj6(+!^e8WZ%>+lG*8C+yWcRx zu4edlUOD`=_y<6fjF<6j^zFdGH>=2E); z;dg3 zds?#8Xd0@W&LY-&TylHs5sd4M=e2(JW2HWm{bGpmkbprd%TvL##B;+36Q1*>hT3D2 z_4(Va9r!S-j~M3E8y)F_)W`LeHVSZm)2Q#RhtQj^Zh2$AYh~2cgF*s!7h+(8#8a9% zSgSube(WTM4@YG~Lm`8lk&v}U9--gVQT%ZZgF;tE1%qk7{*zZoLmyfo$6rH)h)9n7 zoY6bth!Coc{2@N3!sO*CS<2Z=-(zRCsY8eE6i=f~AuVJ<mT9b<; z1rroW8w^&*13eMnv_FUViaUN}ca1G&nfO}-iXxx?Rvt3&rGEHMEKfcF{hNcYcxa?k zdsuVF;jwRw`_!CDWo8x+`gfd_HV6=a11}keIB>6LiU~Pm2mD-w%CnRQ+l5ThZi(&<8D! zna`bnl8E|chx9bYVmYhFnYlH(EW-t-m8vBly#RQK{Fh3@{(r;Fnr7+-d~;>gt2DG9_YsNQArNdl@8Jn!@K;7T`Jy zLPmL=iJSd|#6MIpR1csMYG=liS?Kp_IsOdiBjl|%xn3~-WY8&DUiHgiU>_L^i!}MO z88G{{V(K$6ULV4XijF)}dX!Aw&Z+VB9{^DKm-6l|ZGEnCehAecPBD_3(v{t$8|&8D z1K5rC?6*_&(OqOi>UOiYRneHznHL`|#Fu^rE>vjLI=(87vuY#Ks?3Vx_(Ei-ev=uv z@Oi6igwAxi4v*vS1A!pfxj{S$%f^Bof0 zpOUAQLD+ZVo~Ma&9O+t=X6m@&<}R+Vva%R%v9YJyt4sHP0Dz5+N5|F8ht_oPJ?40~ zs+X`**nEI+83U|H2A696%29ZqMA1CEt3!Y|G1mDOrhXm8z~8)wK3%HPSe9z(?Y#S* z+dnwid7Fgw6(96f5l_9r{O78x(6f`Phq3&z^_FmV>i2&)Oi>3c8b)%^gZn|Q443gU zeclY^3UI`{g`Ci&L zbQ2jj9SIRLcM1*Q*BTPQF%_{qxXzubLQt-LaOn~Ev=yHHVkCHwHn+y0!>|b) z#3({|)>fR=AOrfNHlF=aR(VMHxTl7Cx01|9!@xEtQQ_d+AOKKWDmzb`o#9=%%AU-@4g1;DX?XfX+8{}XIq{2aRA;-xc zJRNV^9|dnBkB5^n+XHd`QoohF>@p#EFxCgeAN^12y_4gk@5KSFDF}qmjt}adgTL53xFW5V&pw3|~ zwCQ?r>hsXeP>K!AFStqC+1EKz4dZOJrq8tpOH*6N$Oqd!PWV!iCP`n=&tRUAIik4@ zICPfnJdNfb04Q?r?(rf)oR?uQpUMCJEdz!HRU5>(o6TR`Wn~pJ#uR*dKVYYQu-Mt} z0gqf0QAi3DvGIp%8MgwkgaIJe>28GGf^gxD!xRb2okW|5w?RR>t$Benzl-N-IH_ky z2|tV$njK|wgf$jP6gE`MyFVlW29lG~nd8$opij5;>ZH_*egA0LfSK7y0l0SwYMZ>Z zCLz#l#v9s7Zb5$n%>wBaexvdES*^5?25v786>_<5jur~Ey!10I=UAa7zKE{vzh>WX zN!3hr$$oD(NEwed`+jJ0kL;Q^oLlgfUGjSTa&14wmN)d2cn?qx z_!fAFkuXI}JGe`EPd+NjscvHMu0M>yrbIzFZb9Njzh$breij-3{QbUwCK-tC_WpiO zomOmQ7XA{;oREK~aV4C%y;$26wVL~gYZ zlTK39PEtH?$pN-6s3d$=CH~a^?lmO;5ds;u)8!L4^397UNaHwAXfYL=0-3Aq)2VW& z5M26MEJ$vL_|YcC)k>Dm&x%ta$1}x2F;P+;Pmin=C6RoClX&$L&eJYzi7JsPHi`S;s`Eq;R)8nIIo&X@)biy-A1@ALr!7;yj1|9%X3pdA2m)pxj9y z9HS{SWWFL=MK^CT0FXKq^_t)Ko;kAXxm+O28O={Q;CmA)!(;r05hLj86Gi}iUcE(r%S;7hnwsGcoedQ{ zRY*(joK!ufvvYM|Kz#Nm*NpCR2Z|?bUnDP7&yK8i8zdoe=VGT!zX_FlWCZ)Z1^`QX zUM664fUdZ;Yr<(rabNB9k>F%Moz4Bh{E= z%5`zxsSB>##9=JQgGs7KI9w!^z91jW{l`4`=of^;i8vI1!-o_`y^Nmh83FoMt7xT4 zk%-QXk5bYJ*&%k|K9ODci?_Y8%j!)q7`q#EMay@Y_?k1#b5|H+<3Um3r#iv<e+h_jOTWAjRO=XShKCdy6*9Csf_=L|U5 zPp+#1<^8%%i0%(jZb+T_{l_|%0w9aQ;c!!-KMvsg#-=csYAFO;5ez$+dG|Rt)1vqB zJPs+SKg2d}Cw1NzGmWFgnV%LZL;@Z3$_D9cxHdoW4Xbhkrov$pX%p(bW0C3pNNzj> zKt8;3-T~c@Mp~j&yChgb9SJ_7CdW_c<>oQrb%gOI*v30&cJrieVGv~*shx~7_~DYO z)Vn6u_Rbuy$5(;i=fB|F0W`H5nVMmwpoStI~DAochASfRa!SG8%KoEo@%!ZjJdwEUy;WhJOop-yIOKLL zTE_Tz2MYBzEpM_yg56)&j5-_IJs!pHW3roMY!qu>*UFXqViPTn47yBD?&;6Cii$@L zKL3>f&3`*_b8`%}=tZ?tQ{TDq6+J*XT6Ip~vIsZ~+5@=PK4cIOT2{gfPeTJ-CO*8@ z!H9G1y54tR8;fdWg%$-W$pA{C+}N9{pO`WyDs#h>PxZ?>)k&IAG@#wQ9LGm*42`60 zvftUOaj^Cl)wz+`b@_c1-4j4~BvJ~V=X;XB^wR6(N3O>R)#UkFg%l#c9aJ36nv_0 zjzaRptE$7AXm3}Jb?8`3iDek8PUj!(#}lzRJpgNi*}lG-bYy7R7tsj94D$ov)7ol%)s8BRycC9&A% z<;1nnqPLuWNjVJ`I%l4XHZz-P*l0OZ_*B?P zKkpYzCI5fRD1?KSwN@0&$7!qLOI1-)NBIxkSbt!|uMaIII;*R7gq*YMc(cER%riv? zJ*ISZ;dJLD3T;#3%|F{}?%7mzE>u_qFOrUu1c2pSI*JCYmMctC?~J(pj0H${$oTl( zNP^T*Arg;5@eW_S97>%r=Q&I>Gj`GFox~9e`E|tU8QU_vh|;jM@qcVd{(G11f9iR_ z)6<*lvxEq|`jt((DDQ^^Hhn)TWk~H;`df@~l~kU%V`-|d)Nibi&{xOS4tKY0Ffo9y z*J~m+eUieOzR*972dnp+y&DipQmH9o?Ps%3`jn(}6|GV-&P}Z=K-gggmfQ^9&$>(? z#&-Gx9YQ#bkwyd45(pG=)XNPRIzbQ(TROHx6w>HR>aY6`3Y0r-G~Q2Ra^Xt@5CsKy z3WG7U;I-efNvS2SkB1=`!#rC?v`AM;+OiW@i4k!VFTJ;K8OUP4j1U)@*#5FEu=m(^ z#|ycON5Wtmy^Rcq!!HukJ0{W~Yzol?#!E{qj7GtH`{dRd@8KO%{d}I5q)??Fd~%S3 z)7Vb8BD2FrQpFCyx1k-YI6P zx?R0~uz1&#lCeeo+ugkDrPo_j_)*poN(ztrq-bf-hG|$&{M^)N*Ax(bXvqe7h0zdO z^bcT|JBg34b?MVA50P{!!@8E=&dO`HpB)y#JH3ML-nU78SC2=h7Yn5qjo^+RsGarG zuzaLP4lNgH^xl1Y^44Cf60DP^vsJ_1qkQGBj;Ed-xC8u>WOI%T#+_NGlv=LT<_R?t zZ8u%_OlbP~ASZx4;WvOcki&*n=q|B;d!D4N@`HP;GdL#Fl2(e3AgQs$ZDiE%rRA(^ z`T9QK@jG2!Vce1E?LKMXAegmPdIoVuId0H7Y2e7963w0cZ4b3p8mUMARs#>B-}BTmODQ^fOZZw|Z(a-z8Lqhl||-c6Ywg0P8p$nTm@; zt%ANBWBqBG9Q4Qzk$b%RU|N6tx`|mR|7}%0`FvV02AU1;;Vx&@bybNje679Q%!#cuQhkWG<$~ck+-KBUH7!fVXlql5YM6rZOYn|3vyoga! z{2W5XoHe_zK9R19XBkN%ENJv=-onkJaWXy&RI85et@ipp_b#$JsL>BhAqjr#IDrT|Yl&RnFf*eltn^yH#(FC>| zf09q->LD9O#7`?8ayX@@E34^g-6O~jtQ$I>qd4lAtHVG!V`iT*~p;8ZUL*(fMgYZ6;kE{m)c*$~O!Csgw>YFVzhGIWf&5HMIk1 zKDT}uhL1*WNfeV1cR3QpTxPuP5?|;MVYG&h31?=RSiCDHAp5IPKgH3Qs#LXE#F93X zw4WuVF_1!!H;2PEO|&Q3{eF7JFY58YdA^-a6ltP|^1!?YyFCT!v;eJUZ~Tg z-FbF1LM5*|(W7JWsE|H3cqK>UdhTaFNQ_!*^!*gd-A} zDXIj z+VQ^dGC@C8@mh>%*Y9L*@VkE0kt*IG235H4>1ivn_6q(($$;{90Btw~nz2*h5ctzP z@o*hl-|Ig(wJolNkZr+=V-jv2OzgM6#fU$KX6gtau?$_IT~9;#l^O`Pt%w2SN$Au! z4JlcEv^)j&>B$d^5t_W zIU+k9VVPYWFayWDwF11ZbI}sBEouN-m_hd!)3VDO{m|EC+N0aZ$8toQS`Oq<=0$xh zjglu+kv+lJ_p2ZBX98IZ+ayl~xlsi9C5X z=DNXAeHr|bvg($2Ru9CI{aKBOzXmvZ>~J<`-T97M%Lw5lm%*&FbK@hZSFUQb*E4r~ zT5!ntZ2%HN8Ysd;@w@oTY7}$?bbTGNzV zj=wEgZ?)P}Us2li)*Sv^>^FQ($&Nq#-uX#?wN}hIN&}XQk}gDV34O(F4;?(dy!lpc z8qwq$8XWCzldlX*&)n>I3LHRp?3Flt?)Y@E)FW+qTfE!~L4>s8r;?lcj5 z_2Cl#=W30kfEMPO8Ytg!#U`^E)w3i%&a zXYP^0L`@&$97Qi5xce*6z5&QCCmmhv>E!HZyvWhzk3|Mx~kY8 z1k(+3SG{R$ILD}GVuyN>x$J;Jl9A^njWnA=1g?S!37ZJl7x3a%>=4YB^J?xBO=Y}Q zEYdAnK@5buy^}_WEjI=TQj3XsiN_cz(7qLVf1cv`ud6Tvw!;R3TO$WFVB!;eCQrQU>~5Op?uW&+n-%8iXza zUDWDR1Xk!7wQ{~X1{4T zPfrFWdu^_ita2QvItK{-|1hi>`xOa8Ss^+0JD6pL(}fSh-#Ls^7iqvRR&rk4n4aop zhFlv(?T6)&h-%ly8QNZ7J} zPT6~Il#M>v_%4a44%3Gm6R6Z_DDS4w2Df})F6o|#R2{Leqs~-1Qrj7M=Nh+|936Ah zIK8gPjq4cySjyW0egRa0TWYQ%?M*yYoEh3;?Dt%H?70WK?JJKb3FgKHkkpyo#PzNd zh>F5lXRwIDm<(6^VzP2Lx6&b0z!OfNVZX3M$_y#=8X!!*FNo%Uy%>d9~NWPL+`X_9Nl?y4)l8rduA7PnYbbK4y)}@&T9RuV9#B z%VxZHt%UnmbY6~gF^0h{$ULaoZTb959k`Oyn4v^z4t|qi4uJzQx|v>Sr;>^2J73q$ z8ZzQaPzm7z%PK76<4QbZr7x}be(={(@~}Z<@3TRB=pKdSFy(vt6(}uNj!2b?Cwh*{ zx-`u|uz6q`E%se79g4WI+2w;Uw`csONS_i4V+{R6LC>MOaWpy!Qp@Dz09A^Pk-gCA zOhfKcS9EXw7kE9;0zN89Nn}AYP+&SrI=w}QG&jKZHNv8{(4(@;{p`Ng5>xhe?`(c# zw(!=!kx@m&f7T#dzks&$3^Y%{{kxE^Pu*-F zVK48@!E=U3i$Ko+8+2|>e<+Xn|4;sZ%lUxXSU*ts9FG$xIG98LBpnc4PSFo!ncYr;P{^x6WX}k_ zv{M?lhMw?*4FwVU?v{?|mU!KWl{Mu>?sZ&8NsUd(75D~4g%fHlh0}^{tk`$$aOH84 zNFQ_m4#Jmr9aHZ)bW1EC%k37v*VDUn`;T4b01wyV-+!8vne!0Bh13HGR6I-N;n)v< zn&3mC&O(VPTLRUWHJsvi?a~@O$`(7`$%3KN__p^-vN#{#3W%PEzKnHA=3*1)I|clH z;R+FdjO%vj!W*RG-5H(#kPJ@9)J=J@r2sNE(l_|o=18jIRvjghZDoI?`Msw0-Fv8s z=a>wZnh*w$B^qW@`v?vV#^}6e8N5~Cup;w+i8U`laCxd^bzJ*Hy{CSQIQ+=swrt}~ zCZl@pUe7NYBvSy$IBqg`5{>h}d|qd`B3=;{0`KN_Ui})MF|EM;*+0zzMFYyI7w}E~ zVdU2(9F3LmJg#LY(x@@b=wfqcd=m=7cymeW=;iT!`IR4*f4>XJWoY%C>K{+yQDW?0s$hU$?vD4=f_#PN#wxM7AjGi}u6 zdiE7JK$OIGXg%duO@6FX0;|>3j7Y%F)*6tF@9cW|`ZOs{ycMEJTi=+lyO`!mk2(E+ ze~%cjtll9O@o`V!^zk0o*5@6<)2>>7zRJP&tUMBXCEne)310i*C-K+r)V(wZT58FS z%QQZLpP7@Nci1T>$>HA^&pIeCeGl2&u?&5tG0~kJ>acQk_`LRmwwhY16W2NDEB{_3 z%^KQ!a580d>t+!gs>PFS^ZLT(;|{dUA=r!xDd^J;<2yk5Ay4WaaoTSicxJ2Y z{YrytMokQF-`62@9*X@5xkt>9ym*QnH8r%<+9naDc9Zp{cW|paC|{3LQ@fxb(F4g> z2hx5gaRs76O?6*0f5ehr_ASqwZOxF#$qj$boOau0LmsNr@L>O@E*FRJwmqvcpc6WT z>7E*uD*+qS1Ob0U!&ZKu=TIsXRc4&hOpV;4Lps_;NoZRhQW!a>%2T^aNbE2=geIK) zNy%HSp{0e&f?ga1_A}X~#92%|$^PN_{)FcgRjZWkKJ_69irv#fD~>4bEu~(srF2zM z0=$N{gw->{4#u4{THl$MSLpuEi)Lb0ER0CT8XL#Qwa!j|60wCgTmorp7~@@= zFP2(hzZ!3?wpLs)I(HzI{-!V?kx&e?cpl#(wFwx?08<#2gciUu)AUz}2`4}4hxS!_ z6W6Pwu9gZ^dWI|?YAjFe$6jH5R(eDh^cQN{R@+%VEBG zOyQ;Xe6A|)#W&2K?E9Ojyk=(@`vt$eW`1aF{8*+7^sN+=&JX^ANd9^M)Apk%OV^no zN08XHObVgjD9YJ&ozkaWUkPU!VfB3R-dl8qP1F~K{81PH?W5{cW%0W=?qa5)Pe1tj zi5^@AE0%h58?Vt%HZ-_R_NrjVUSB2v&yiPtzeB|-mRAG5Cx}OqH1c{%R|&0W%(faW zi3EKV1;rsb9#E`2!Wg!VH&1BRv6lLt!s0kfc8VhMeg+b*qcSpcENLWPapmoKoj{Yq zj-+Y7BzgMNe6*}p$?*Mo7j|Z{CT_oIlbRG&z3sFy{(fc~13f;y&a#H#EwmHA)+XYS zMki2zW#3IKwr67t73Gt`$7pNvNn_Y-xSeGHAkl{JFsA{XbT^!fUPWbe}A7IYt+KmGYKj%3uLZWQ=6(eEIrH*Opo@}70z_n*eCm!LI0 zTgOv31^_GiC2dil=Xao}3Bs=PeL#o@$!n05Bpep112hpj-Y>GyT(nG5FnsHQG?MrM z^!?H*2RhspZhC)(4ouY_O`(yf%W?ng8ArX3+SMJa{n3vtUOl+SpGM-rb17570m*YP zF$RZ96s@hV@6xJ}eM2Xf>iC^tFtQ}{*Qe6Iv>nuxHfHwXWZxUz5}EkA(O(y$XFT9rKmyH>Q(J2z^&oR$a~Aq@I(dq(sd& zUx=>bL_RMiQ)A&AGqHC@evSmg4|aMw<~W+m`Pu${J{%>3dPn+vFldVJ6h+QTz2~oc zl%GI8rKr^(H(*9l1iV_*sTOPg@FGs%Vx2Geng1A}JsS^U1UWGB*}`MV8gpj&k$Uvv z;Ui!73+PGM_K=X0p%@*V8OxU-POP}KT;{WTU(R*2(Ti3YJm*pCFtHD*xD#pL32ab$ z{tx!vGAgcZTNkY$!4e1#!KH8~Sa5eM+=IKj1PG82+zToM2^QR)1ef4Jg1fr}*WAh4 zXYaGJ_IdZ7_vgKHTU-CCTB|X~m|ec!$EeZ!N0hwT+HA>QbYbA1q!S%D<~lf%5zXh*+WIY;eS7Q zqx#xNyyfya$NHqG$dV-jK1)}P+evn@(C`Fcc9q%`}(HMbr;L>*je*E{%?9&{aA zIUiHCFM0gZeI z{)ZM#b{y0WA%u{{|)WHIy-B?0t`RfDT~d1CuXCs>0fJVPJfrcklNsE23yogxooPqMph3%lrWqDIT+X z^Zpom$}DE$0S8=zP z(CC_JZ|bokGMEFmOsDe(6sl~h3>gG-8;8x2stw}jEb{y05-9z$dbLvaGb$s}FXOE1 z^he*$`sAX0fI&nQqbJ!ZZusJLa+&Q!V2o~#&(xEUuZW1|Gp4`T+OVT&TcC))Y%Fz& zkA+!-kx`jjxa`!J;W={I;CQ?|rEkQ;_x1PVv$Ik;n$v6CYEb7?k}2p?R0_tlt_q-S z7hw+0rxDrckw@v#<+5&xKXaA4EOQw?K?y;I*VL_K>m#pnhSk9OYq$YW7XOqp)LLKgCUOa>a8_zCCd z%uGB)mR5@=YK`hxZN{ih*+yuhqmN!n2XzAgrd(PgQlpL*3VSu+5Q}8OJ@s=5Y?orATwlJ7lThFQ6Bp3BxQX zYAv@pJNBrCB$!q6r;w+Cg`l%{nOE zV4p_Sv0$UUiwPY1tvDQusq8NMPowRlf0p;A(7-ncVttQLcpKYpSJ10;tsdVMMz6*Z zFG;nE`x?=ZP)AkNfWqy}Z48&e4HibPix=PdOhll~_8nz6JJoc0qAwa{nwy@bCmEU3L3<~#Cf^q$Ei|@f zSqY8hba+XiC3qlN*~OeR{yi7}?SSpSkD31;4m(dtS*6|h1(KI+GgXmz6@;!zbM=II zHlz8apZF8K5Q}zpgl_U${d+RQsU%LLcizO;RR_cEm`|h-e}THs{D8|GxzlCctiV+W zq2|j#IxKO??_oY9OA98A7psX%N$`^}OebnH1yf1Sh^F)t*Ze$?6@}4@nT$ry2$4`A{ zytrA*iVr#teBaIgp_nQ0dwbCU!DEl3mko6!_NN!!G`~QsWF4zN915EuZwhvd?1z8Y!7}I_bd;Lh7uig2zxC z>He6>45mn)#DmS{c>-h6!RZ>0gPmyMnp9aT^KyncLvK_L%mzie*+~s1GBqY=_m`7S za#)#%cw)Hh*3iHm-5|(gbIHJCHmAjqz!xuktU5juc5_diz6r83pfm965NfuO&Fe6u z7ixBDVm7OfqwnzPddqj)$+Ewp@0qt>(M7|gqLdH}iT4CUF0xa?*%hz3gH(y0VpcM9_uOvWo^WN4?MZ{k$~f&U>vh#|IAjZ>wzTxlqrv9Oc( zh?1t>D7=-=tXl7EZ8ZnBnUmx)dA72ZN>8cZ{@A}!cl^_oQbNb$S zm_@vlguEOMA3ZspCqbZ0Ysxiym7YQHz5yKLk@t#=Ft=aQv+!{1$oo>iELpjFAem%& zONUJyGcgx6X4)fOs(R96%3a%HdR*uy7jH5URNY^i>$VE<1VLZtpa}{ z_vT`PC~V9m@kM-3#? z>Z{5(^Grx!6X4y=0oz@`>b&cB97);EK9+b+u9rFo@8U3tKDiRcXYPsWcMUBO*b`_O zIwpaQOE}WLbRzHe)+V3Z;^*TdckORxMum?S*V-Kx&tKy*VGkL(!)Uxc+>At6x^To? zb$yeV~yIet!chqmI$es;BzWxN`)77lt*0z;$8X^J|^xo+ErglD7nOJYj8j72{cT0OYQD*Xxy(1TANu@s?-GoM27Pp z-pZ@ct3YJsfp#wMPtiyU&ErQbYjq~nI3%WB*XbGPS>7V%6_5w&L_E{(;e}QYh(P3n z5HGL37(I{V$W)NpJdmth8J_j`3+`SJCat|N-?Vd>H1ZYX;>1dAp5?+bSDfFc(ZMOX zVfx_^m<$8UsJ?=ae;$I-#BFhz9H8&%zV((mRWa?clk~F0X&~$yx~$m%DsBm7>rE${ zW31)A#oAyByPrzX60j3E`RNwkqn47Hg#$u|54?N>F;dgs7)3_FQj~WhL_gF5_S8Li zA?p0)=!&p67hU9N`eNjvkAoV!x)?;w!Ic%nZfkxLwiVA?n$+TD&x<);>y)BdTr3e= zS7@GvM>HGytrOFd6*J~zi6YYD5kC#HZL!de_6IsnTb}#8&bra6FWvsxelS}i*IXu+ znVDcwUVy4l{z;@E;Rh2nwhE3*4EuRmbxUqk)E8zM6}%=J$wjkyOY9O*uKYZcry3Je zJR;rRaWF@tNq8LroC6xZe`)dEM5HU91lL?L19+H7cM-TW5~_EB5h7@zW7L_!Cw(9o zepq2Jnn2TIkwA|kC;q7}sS)H}bWB&nxPjpBuT-s6%~a|#UW275`|67N71AR@p&CEG zn_J^u+|Hk_$r@?($EyUN%#xjkWBZFV-@sr`=J(I8rOxOjnryD3*iVM)n+f{QidHbt z(7auTKkDt`9LP_nGCC1w<4-(0kUR_sg@*eaG%sIzFF$+4i*U@Oz1$wEY1$rx+>ebz z5^U)LU&k!EhiR?K7cUjGM;18N-_3HVY01Jwt~ry?6>$+wro?7BfV$i$Zrm}sauk{D zo3QxwqNzckV^LwYr;r`4ZRO=J5P{?8k4j79m!u?QpF+%=Y!;1N*Oze?WX65(MxvV0 zCF_IG(pOKcK538MlU@eKZjwD7GYohx#!=T5+yrzOIZt!+atsnVCe#bt+c}PeG#gSa z?N3h4(eGkB!mbyNT3ARK$v5i=#*XPQ5<`U`%V^0&axJ zXkxw{NMKN6k9gHs+a#IZVVP=MqlA?sC#&97#FHr}DF>~=lM`Wpyax%$J<<(QK@DRf z;60=ad?HH|l*dD6g)u`m(vx}Lp38|XSu4n8uYo8r6w}D9sDqF@sl;7ohp$vUzDz_R z4oUj-#N32PT948JHz*N>pq4S{9{kdFyCnx`E$ko1zL0orF!Kdyd)-6!5umQb!;}qG z0kU<~rFv2lMvoZ8*7ETI{V&3(0DBhnBZJvs*SJ!~ONWG*cHsHqTSmP71LX z6nqKc3CjI$>SETL*^MPphuxABLkZmu4aTC!!etO|sNykaE@qrJhF6llVW z!~9U$ECE!8k3uq+R$jJ7MyuY`Ze`~h1aG$(vnj>De9^P*5n=9p_1K(CKS&iI%4L3Q zfg3);gc`|--;q}|uC;t7E3u6YQUP{2>eFdaJINibx7o)rTh7~YqexlYi+$ZrIyJn9 z()H^aFTS>H-P_AbqVtKpOLP|CoN$!u;Ld&;FLyKm(S^_=JQ2n`yL8)*58b`V@`rL` z=k33lzK?I@>9Ib(OPYD9sw%6-c>c2RWe7>%94%fB^xl0GDJxr1izI`d)di=xUaRd&TS5*UpdJw1_eX|CVId}}@s+egBxZQen}cw6zvvQscVeSR z^Xsbqo^?E!eWsxJ_A_~;-Dg5(i50Lz=POKTQ3L(>F_E@?!BCb=Hran1MW zjl<*c_blQ$}LQ0Vp#Jw#`yJ(N~Wqd;Fz#CYQ47K^R zzc+H)k`nKRQSxTC>nmq5fnYNZ+V7T7g4E!!a6;=1l&X59xoh)2j)8I}5cP==J62B3 zH-yxx1v7A@9*Jb9|e)?U4Lv zJ1HT??g_{jXP#Dk&XnOLWT{QYah85tSK2DPz58rRY*+ArzQr)#;R*$$q*)x zqSK@A-M%rNyp*1@Cywjc3j z*h&whSx9Zx>|^MJ-Td5eMB^xdW;4T@+?y%B&Q5s@>g$Q~TdVmSc*uX#0ngJ6Fw;Ro z68N;zSeH@>{L-A_J(qTL#W?n1V9ugYqT+O>I({RO#@Z`{?!G-H6JsTl;{qs<2lvfk!+C!ZC#x!+FAvMv+jU$#8j${qREj|Y5X zBD!qJ5E$^Wd3NWq2#oJ~7$2Y+x?@|O(dJurmHP{n7{lRTLmDmO*f(nikXHshOi6z| z{*w3J)*e{S(_5n$C7}Jo>^|*1L2duFUChq+J4FxdOIG(^pcgGa<2HmRK8^I8=-IV| zlsm563hRbSlMUKe-ea}3L>zB_6F-}M4FG-z-gJOs+?_7%8TXX(($^oieJ%S(XX8C7 zzd*kYP@c#b=}xJgMp_PgHGJpT^Vt|<(*8W*7wCzv`5m|PnN`gAtg&#=h0%%pFHl{_ zXP}|qMCwQjF#Soukv!r(tE8~5qtq|ZpncUJD;U|nl(=t-ss4OvHY>b68c@`6#x*6p z^mX!f^cSd4IwjyAzkdDj>n5NQ;oR>ebXRd}@v5ZubqW+!a8{5sJw(``XGZOo!ycd{ z5dN`z{b7&n$Z+@GI$)h@fNF$4`wf)2*7O$$s?B(DpPbHkJ$B6ps50Y0m4-1&?PR5^ z`}FsO+{4#y89T>h1$k|&*P4wPhP@BtjY@>GV>X(n&-@{60TIKixOdif!~tBj!Ur;C~f-%LOl2yP{T?RP%HiK5=J#Kg_HPQP&bTz4W!o3A;1|k14z2LJvw}1Q=Ft)E46RVhoXLgKFnI)f`bF_KV6T#3 z`^!wglHKgI?=^w{lkT>c7P~Ib5Gbw>ghn%#6M(aY&$9Pr7~_-wvK)HSS9jKFM881) zl(hK2-r_&r_}_F+`!Ai7m2hSUY}5kIg7PrY=Uw@&AE`e}r)vY2(jVMK1#p)?sr+|$ zSwEae8Yu(p6_C(Tz=OYNNwo|bRNZ4g_{$D~_}Sd+T;UEH;OT(B=!KT%krkA-2Ou7_ zY$V@91X=(QaRVayeDp9?C@}RbV5-pmn{mJ>fbqz`kJtTe@Yn0nMy`7sz%>6cSZ-_b zs;D-g-Rl8m!~rAur=I{u;&e9t;41%VC&_@P8c7uchBBD;3)Ch+1YF3(5ehSSo^g-* zA5V-?`IE)~pqLYMXZuZQf4qFD5%7q5f3=4NAKh6SJpYFll#u{?&j;My`8*MD_f*RV zcXuFdO!3caLb=6n1kA+fO6KP;5b(}Zn-TV(eu38WFm8>)F(gW(B!7Vz{>w#V`~|Jn ze}N{FM`{CrCHw;Y5FqNfIh?J0P$-}eM*Gy`+uUH`fNdW^(ch)M`sRS# ziw8waCEu3RI^Gv7%@JL+wEy)9?hD3$1`dFAxr8;_aiex70A=YHsOyqUqB$zst9BaD z`z39#ZN}YUPd>$eDGa2)3gZ{(=nwc)ems27+Hsb9Y74k7zjNo2>EZP6ZjkrwzNF*x zgHAC1h2Q^>NZpB^z3?9fiIHU~)!lto(pMe_e)^e_rat8e0C)$HnfSt%$6I zG23XP^q;PA_T*1K_%QjT_wN9}8Y3|j^-jBXdiED6{J{*#{vnk=@G!OMw0TDQx9MLh zpZz}l%qcewsm)2`+^@56jn08#iPBNXS8`P zX@dZR#m^MPYUD=9=$p0l4G7X^4A2|-4LKiHPYa-zfUw+!p7r!YhU9scb83G(Ijg+< zun53P42amslFmnmAFvGH=zcSMob9g)`%{AT`*4hj1OUU09z4bf2y)^7+aSksU!5Km z@ZrY#mKI=#0D|184;PRh00{n&AE^EwEPfAi>x;ilB&@3p#ERF|K&%Le7}=rwH+}sn zP&EBEP3W#Hfc0gy8SP#V>XQ7cx_$%tfIm<3{mxqO0in;wE|r1wN;?13@BRen>d)|e z_}fHeCA0t>G(TWmOV`#J&Y#fW-y^cY?=y)53bXx}!br3J%@g)$y1$8Pv<90t;%zvJtFc{=cS zeEmCb`pcou-}&(0`S8x)`<#F7sQ%vPJe+m@iZS9aEY2xRh53= zE(V_j7?N0Cqd;RUE2lOZw^Jrxb}ZT|oHHZ5vmi*S5wmDig+6N3WVDAd?LWHDwQ1Ar zxVvhJZS&<&-lnr(qxQS~M6ZS0SuQ=Q;aWAgT@s6)jA;MvU5|%7^t(0_p0|e{33SeU zdhh2OtaYl2#FBA1*+=6_GI!8*m23O}e7 z0ETNZu$=rrN)}c~0wGu?O`updiNiXX*;Nz#NuDl=$&tk*NOWEdQ9Y}TGN&6xc`f7< zD>&JoY%3-946zsSuy+{h@Y9jF2xVH`L{Bi>v?YnI;72G<$oD}tb#<)HL^#i+#*0_2 zj2x0>UFR-RWbc+V#_MZns5tRrX$JD*KkXLKU^ngL<=(}|d&;or=QPJnXw`bc9fI|@ zY6rO23=>MNWtL7T{mfwrn2*ot-{+Ua7M`a^UL*^XMIlcInEJdx6W=_5@=1#cZk%xqu17|m z2^>~X5*smDlpno>dacsnqA9_Gj`iMD)esF7POCAaUGvNVG3yDq_!^uhID*H{8So_A z-?dyKa;o0Vmu)Gd3&&da?tpT(n1*i<> z)VQFfg7kN9zd5oi#Bu1%=~o5~H|8WlS%`Uwe?~m1g=>ul2?q=v?=B>~q)+1FWGALc zlf^=f9G4eCnH$;$L5UrGBL}<A?Z-zOsZg0ItQ_qA1;l4u>Wpa5@9tV9U^GqK3Zb7@Ct*>@j94! z&OO5zy``GSnGFu5!h5Mv&HSm8gsOx=7QOw;z45AMPJKPPlGyOsxWUOXo&&z;qkgN+ z+ViKe!&+bLaOqF|%igb+es$hTOPDH&P95>*s(Bpm&l4>RZBVlgn);r9_=uMriCo_y z>N^f`k|QdG%rBez2j&3;wC;r_CpF1AG#%cNDcQq{Db zrh0ySlVp|)M5Bqp@V4s{ZDNB1n&ORBwM^AORWG+5Zr&o7>qO>Hru@YeFr}^*w_7_K zGz4oXmqV0lU`5ZeM`0Kv!tAl#^RYa=Z3l0Duk@id&u>_P4D;eh+)PV+uMA2#gxERE z6I_H0u8&?FFVM`2^D)WbI3c$uI-zZ#3|2&wa72T6G6FV6qG6`NHND@QSLTmdiv*<8 zzx5%12es;doU-T;&7Mt|0ZY6cprDtJ*X>2;XB}p5zfPyIUx6=>N0xE@qTUvaPrXIb zaVue$HzW^YH&$8uz(x9XzMX3wi6+3kady~FXqR1<>8-wY1$F)RCwFs9R5c!Y*^#Cs z1qlsGWhzS>=m+2C00 z`j1Usde(iktHH%#Ke=iv2Xs{(3hK(RC+in z=TV|9>16nkArbCroOMDSiv)Re(FBht1?r8pzXgK)hV$Ym;fwMw*#s}Fh7;x4>%lWK z`e#k}By-2l2+W3|z*X!XL6lnM%spZ$V2DiH zs;@*nojr#IvWpuzx@ec{=lSGhWmROK$b9|AZNCf0q$9CmVCc(-edJO#@D8NfBpx#Qsd_-HHPCV*;+!%nFxh8u!Rd=E{#oW zELKPkXhoIUfi5HSoO`!?U#d^3VV`lnI?q`>EIjG!G(8F`Q6UH?$VRpZ7qtl^gBP!F ze8nrVQL$aH90ye~xGHeS=NrE7CTULVHGk5Z(f-cxQ9+5Uf-s0!UGyP*EVT`%)t(=k z8Mn_ncS*Yfjyo%c$HtFhJ8zgo`pIRhTK2QwyG2A~KW^I5`^dQ zs=Ig^c1>~X?pH5(#+X~Dzu|VPp?sxm0S-;H5ru@OuyqY8VXnUZT7>H>uAg&=L*o)3 zwZw$@o~U--ugNVMp*m1cJUQ&hR_eUjq|k-NK^!I9j0i@mgl0GjvCu+ zVHugdE~=QoF~EO1;+7eh+I(0!Ejj?>PzlP8S%Juf4Kz#$xqhWdRjeJe;T_K4uq3a+ zLUOGU!VK(W)KqJU`f|HM_bui5-g5h!eS}ViCr0AVBnP@5sh0zpb6;$)zE?3Fs*qy3 z=J)8L%zpFjk_5xDVdY(CG-eugsBEWke_3A~PzW6HTOwtUGWnjcIk=kr@w5lLojTs- z)+)er<155;@!Y~eXGpVm?-j}uDaF@5{g!qau^2cA?0EHv!+8BkXWxv(F+h3-NZz)y zNe3gkTP{6~UyzqmST#cwaa}h{?vAna@jVgGmK5(c=2m2SE@e#4I@FZxY}3S@fzo|Y z!e^x6d<#d*zReIB473=y5%_ogbyY{gk?M5O$Ce;(hk*=o$}avPQ5Pb-@79Y3e#V54 z6pX63Htzhn{l6vBpHz$sr$3&4--C)oSC4m6M(VTK&EC%Oh-w(^%Br5}-H*n~<%IJV zGt;*<4Yr?_xE!iF=)N$yn~!fwpTvbwx|H)>3Y$;4p9?vA+|2iHLhX-gYn`8oJ&TMw zLW6t6d{9N|4IQ`;ommPzzebwuCU;$$kCPFjWo*K7_iufAIfc${t-8aPJRB1dWw`z} zi?$zXc*#o$4Way5I@x4JxIZl2+j>x)e3DE7lp1PZ4G&wrAI}mu+w)~TT}GB%E3fG- zKbf>DPxcfPf9JjK@BOp41bllhtiLjZgkqd`m5b8@5O?YRoHP~M> zvmAqF(e>ea(^gylY7MEK1%%7hfxhxQow}AeECfw3wW?)h+KMvWcR5i?eW^;j2{YyK z9N*(1Ts4y^Pu^jO`*UJ8NgRVR%a=N7Z@`O&2Kv?$FPP@^Q_~4Um-qyT*Cs*H1J{+l zJJ%_KfdV&V{n0F}R^Q-3i!4$p>jS1alp#~r8DE+_*k0>o@aCw;yME^}gZvwZ!@n^2 zKhgO2Ptwd&^e&e6=>vWFj*u@FVVq>lV=w%4g}!{EmxClu)61X`2O2MvJwNiP`EFA0 zZiB`GtxflluK|j}tM+2b32>b|%k5a7sUm75zBoh3O@UR8W(`_2Lt}b{@6{L!XIPEQ zlNYXdd`j;=HP-P&?=a_APucq}^9uB$nSAz0j3bk}L9UkD;|}`PQHO2k5o!aI#5S*L zM$y%Od{aQ zLBD%SsAL*9#BOH4w%@IDsCK3VuQxw|av-c0Hby%jnch#&!8D51PzXt&kw^quHNFbz zhlYFtQNJ)vW>8N|?1hHOGU~U(tmLq?*d=XsP(ZlM5(RQy67l-&m?8$(w;9QdySPy% zLQ?@4clDgn{mxNyFar3myBKyEYb-y|3*xHtiZm*yzcpbL8Vp zQ@ORt1sb3*P93pu2u^3UU+R9|7^VM2mU>nKN5ALvx-O~=wStcRc&=hl{M)=xkOWYW zu)w~?_J7nnu>OCB=l=g0YN zk9(pFxV)fBv66zQe+KOcAuTM@#gd4w{$vl^Rmx=h<~Q6{R;)Dv*SXP(M{3mBnk!B< zk35Jb&{Vzdyr~_lU;&DptEVdC$KY9g2h=F-5kK1dK~vE93NNP8j^!|M_6xcQ%l?HCFYSp1 zfQVS#F+F*CMPPpAm@|d7XWe2G4!P493xdwN+P_ZN3Xm}I)?+=5T195LC?DI!uV3Ns zl+bb#dhz|X4HK#^V~T@HF>By=wfYP(oka-RTmd|Fj_YKzmVlGZo{}J^9-Y@zGY>-{ z#d8%KvDU%6CBx6CIsK(@x^pxRZ{+^x<&IQIQ6x%AR4gx-umwAa$Zg|J!Xcc_y@9Hm zX@_@>J?Gdu?q0X_>d)ZJ^>sr60W-}(A36xxSnUcVHS6gMa(h>XYeba;3| zU~FuV1E67krBVDElK)u^(YiTo_k*fy!Lu^4!}=IHry~nZ zod!|w52{kF$AK%LU!B%hH-~vc6rWe@@Vw??SIG%dY!fsjQ=KHCiBj=$?ojc*_!$u> zY*R=qYP#lCYj8}LI@{et@dN5z*GP@+PW-%UfAX`LsUt-S6z`P*Eq_Zh69c-)x$i+w zSWT6G=F=4sBqZY9&kUiZR1uow^^RV6rTX`!Hl}O}9tc&WtacK7j7-J5SeL6yU)S0mY-=gqq}Q9BLq z5oBxq2bn5G7MPo3;nLnvrHk>`j976;FhH~pdoOSvdBVflrjra3*$KJi4$DbzAqv}Oq8@2;hA^+(O}yl=3qXJPcI6~zNKgVFyz`Ol@$IYVc)spTh*+C zL1kqiV#VX#x?HUOLbpr{ne>_;LZ_AH?4}2(rex~A7%dtc!(RH>5$C9Q{TyK+1O*CC za4zqNLnGPja|ov~vUFG6DZ+msr-TM}NC5*RsSzt)bc5G*>3(acu%O#)I|A|sY}4F~ z(GUIVw`f&3!Vm|k`(QE{$mGK6WOu$X9nqtYi(k&L*=Z%tALE{V=D0^x-n~D~{ApHR zJvVO*xU%Rubz?0nuU&e2NI2mg{zwvgQ%M(RoFRT%x_i-TF!N^c%tN08RfFN6s&GuW zN|ovmFCHY(8IC9q4apZ2F?`p+!t8uPTy_#(zc!eWYP)g#9!EQ#|4n~P#{2M=Q`(x) zFFlK$4l5#uB$m55e$&kXF7Cty9iJo9mfTM^g`RhKIg_lg2W5yY?>lBJxvs($2O_i( zSvm%oiARz)N(KePxt=W-n;oK4g{I%$t12$75pm~qvq93r-8}j??&1vgiuJebS2t57 zc*kv{b%Dnn3BbGNM@F3<_xCgtEl15Ne9;@`?LuQ2AQK_Ia^G5C$(683e|h0ODU+T?mPUt(yb2`y=OOM^W@wDf(t!5~1eTBOq1ZKqP#^vnCJArw8K9^1_-9d|$+) zd_E6&b=I#g`Kt;Sudkkl7Wd5u$OPtZsacF06|qbTs#>RXu*t8%*UZL{>YVdFbJ~g7 z#{AlPLJ^uOC7a>~UkhMRb&3A#1v|l!@PdY*ms8Fpez*MlXMMy!CpXY_(_F*eT@u{# zTDb&JjzHDjxpx6}&2FZz{ZU45oAk|nQ@iO?9EYxE(;BapG+{35pX5_&fbJ(KM17F3Oc@y$B~|jbbRgpVKzN{6w<@e?_<6Nk%xBiT^fn(H zH$kmBUlIC>!N#8Eix4-{awG3Eja02_mo-G#nTc-mv25k#vsB6|Yj(4cymW~^{g*JC zt_ppY57|dwM=#{l$ldlwS;pN8M&Et^vClnY??L`W9JkX(X|F)mm?hz9hc)E25>fE7 z`uhaYkY%?5Nft6uO34=?V62XF+;gaeW=``SnPF=pSWg`6c)xQkD~X;eXt<3rqPG_>Qz`!dk5m%9MvJz#^FelCUairq6RuprY*n?jqLU`5(MFEIZ z5M4-6QxwE1%-=B|$|*{q$y1n?S!>RB`2}(ja=y~LVg35j;uO9%@$QLRMr45?>iz-^ z%*%t~y^^rU)}rk(O67WQ*O-v8jUcp#7DvsVI$lja^aqR7NUnN*Lexj;GZUDVE~FZV z8C3?No`egQRdFj|Ku47!4?;n}$BW7K@U*hKxLZh7Z<*TXm@%jvK!ahY;(S$rMYVt} zpP`~GLd$u*M-`F|J_M^5sh$v!5kE2Z`P6^+?W*GkwG*&Nsuz9mqOJOKM-fko+XK-_ zJ8!S_KDxHXvup6u2AA(LGrnWfV5PEkmPZ<u@j{i-%HOq|0;x0Zq=S~J@f*9Kv!%V#50jFK%I-=Z@>7NTSRJ(*b@djOC zVuZHxp;E6>{WtC$KiWNsXHjn2#7iVK z^(sAf8x5-8TE336QSlwe+yNH zd-c#nga%y^8w#O$U-#N&P%!lULvqItNCl%d#2VXfhgT?|d$*`XGh zUb^Ra$Cq7#M#31y@+U{akC3}LuA_dEn|E&(GM{<-Qr^Bfw2b`P&Ov?_)6Ig_b?~%b ze|-+Lakr2CWjb!<#kCs+0Yjp8dH)6T@s$K>Jfvf0)r6BcklN3e%66y9*Km>y@2HLw zvk=k|mlXU?uoa(pex+AW&C4@g+jMMICg@S8u#wCUpX>s`!4-wq0Ua%^*JP(@toO#4 zKSlcZJF&O`UJozniCg|#44_I#7O37e;~1po=HM^t8;vW4uT59Oh7Gp!cX|vSy+Qi#7;%cxq)V9)2|%yUsjI%b90U z`=bH4gfk^1rBT6C=n>S<_Zy0(c%l-MMwi^WXmrs?7WEBh3tx$#va}}lh^?e*XhEFi znAlyN_RyXcYsfj}Fcr$7FlAUW!mXjr&CN-h?0-+Lbv^zF$@uY6EU4E1ntFg!l|$;f zPJ?dly2=8?A#3W%KAz%_siVi^jFtF;CI0GYjK+0hfa;rIoB>LjyY6|*jL@i|o_uZ9 zm}lu-<>DB%T>ZI+`$x*-rX0JoHtNE|^1gUW8ut&!0GrSz9d7C9QjUi~UJZ_}xq&B1 zkYv!d=trgmChL?Ug9fy_AfJ+nt`}E*ng@Hm2w4#EM=V+FV8pok_^i~IqD)zY(YqB? zVIJ$IM7p|!CxoI5pl71>$R@~C!Fb^JU-w)$;%i+ZP+}R_bqbR94t>%Nr!`DOsMr%4 z>^k6|qwZNLJ(k3&p!|r3YM~p7B_az!@v zh;hYa9T_@HN}I1%INQcM!NGe;2nhpl98c#B9@%4+uWOC5q+y5L^Z`sxYw_Ya#|X`0 zKyT2NWUP(#zC`_VvXV-c3CrlotrnuR;MGbowOwjuUGRV?dfG}WV*-?LqlY%;>G|T` z%IcRpsC~_t$6T^qlg6q=f|u@?Sscv)_l@F@`UX@O#{kTcTff0KzR6&%1gT0JqAB5V z7uRC%!u@WmdbnnoV@*LFCS@`yT#;<$RE|}dCzqI+>rjETfGZP|C8hCVj(rCU_Pzir z(IbNhB?wwAqP*fd`MD_f8t?n~=o44OuNeISlFXQXT|&{@_5XoX`f3I zgu-FC@!@c5U=ixaYJpOk=$uYQouWoG@3Q2q>j*hP2oCq-@6JO_Q)>gcjUt=-1+(pi zE7OXT{0y)UQOGWpY)U3%T@m_gXJ3ix7mU*63aw2*bxib<;U*7Uq*+OuXibjEOCiuERaJbH8l%uuU6;c1U2FD8@xQoYyA5#eo+O0CIT z%G}kpyHC@p_HB-7CN=W>1zLM*B5sOMsh{d7*>PedZI2V91q5>@!^qoy9G{>P@hXjZlvhQs{Nv8ykRiROuE2Jewt0Zyfz~ zZ5WBU;#~LeV46i78+~bXaV^a9(63!NStf9!`iPkYs7p#FJpAI7RZeq;dEr5y2>Q(B z6(wd0sd0NnQs5GAGDASJ_{1VKyyfwROS4sF0yPMaxub0Z?a}G03d#t4a({t*UhL+j zTVyI|uAIy>x`XAaVnut;UMD$_Rk@biae3M7M*R;V=4x-Cd9fms|j74wT5$3K}>UzX*y7)}RIf(fo<@7Y2@Ch!_qq?^AZzaW`mYlJ%op5Pb?)^*41Ky!|B$+xnsY(rc z3AA*9iBJ_5@wCzPwkCY=+rXA?|L)Qv&*}i{I!MXNuot~YDwd_LUDYI5MkOWe999J` z5Op2TQqL_h1BnN{9`7mGSIkrFsydIOE|sTrSZj!HZ+qInOd-MnntugieKR2di&VP# z;V!WvyZE6JHH?;D@C1Es=C+y>a$y^xJ?Cyv?3Xe#4z|_}=}csbT1kRK{ub1I|6R*I z+klOY+16%eJ0soa{#-vyGQHP4jyk$eBFyDGmH`-943aiV*9kXZ!`IV&-mb-A*5wb* z&p)AQu304rc}sEIGP!abUECe4;U`S?CMx9mm`gL`Za{E*k6J^ePy;*uL&|>kc-bu zf_t3U$;^@jmQ|w;govdC=0KUWgOK@xkezXKC<3c?3og%hG2^c~+xldLKN3H4eNDDG zbNs{+{P8(w&?-8~oLiI^@Q>NiKhqCMDdWrcIh4pwQsogpnk+1Tl&x;gBVg_4Sq{7D z;37n3W6H`4IfZfP)Ff?g+&P$1@X;3EL`B{BW|Pdb=C3dIC{uz(xsg47A1ce2v{~(IcRy_sxP8!1tHCMsd~o6w6;7l>=w)+Q3>t5Z;q3aH zVlymEMCzqClGvOK7FPAUo!7!0KJ1!(lPH(_VTnqOuz_*PBH8`9zQ=X%-QrMBPM^X! zN~NZVL5BB*L03Q8GkNER;h#4%zkq{Gdu;Qx%<~YKXV)U-(LPU-H3v@Wi}Kw#OF5Zj zCIu8ku&gTN-AQ7Q^7mBsYJP^dXt>|bb#`O1+6^z&+eOgyZu;n7Ftx&sGn3>qSS3rW z7!^p$2YM2aEO~}89bBNZTpe%kw@h(HsLJ0Yo|XA}5!$MrCw?YxYToXfem3Y4-Pu#I z$Nf&sOe04w5l%DKj<9FrO)R{?tPl;aqOuH;AeT!HWg~FGO4wl;<&}e|i%x4*eGJdJ zrRnT${LhMgp6@$h)gh4PS`DEJPkoJTi599oDaCTDmC@ zK|z%r$8>i79BM>&LCOZxvI#;iz?5ZuyIiqK3 zxY#sbhvw>;H~Yy?LMhcsjiQ38{Y#hqCr6lH2%a6-&q$?t_e^2Qm~ap-cQ;u02?%s~ z`?ybb(>1Z}JDYel8)UQaVA92B5!ZwGPGar#FC+_5@D{*j78OhFtPvb4#~H15;qUHA>C_9h|)&~G<5iiMd@#kioPd5 zZEp=uA=lnQvrsJ7)}<3&xlXUMfG_Ll&VJmH;nbT!itwC^0xRgE#ZHqFmFe7hVNngn zm+;XL2Td@esfCrv5!d7?J7WDSsLv}-CN3vkOs}PV&;79>ovvkzL+4JXo%btc7PoGb zmFVcqbC=NX*b3}LJk$y}7?Zzr&2PJtUDeCa;I59yv2+g({E`KoT@Oz1=v`w? zJq81Z>4M_oN)t=byI~}xm~3i#Frnv{PJya5LuCP;LKtzjwW^Nz7Jd!HX(!wcd3{8y z!$_9gC*4$TTbE=666<~_PscZxgi0r@a4~NzOvYUz~9OpR0$l*Z-pKy@Q&H zzi&}cP>O|)ib|0L2u%V+1nD3oB$N<3s308zN>!>NpaE%t1Oft55(r35009A|sPtX} z0wP_yK$NC0-#hQk-21zCUistAyf?`|naMdhC1-#3UVH7elCge6MX$w>VUgEo#vzLW zIOftduSIUGzl0XeFJe=~Lx2{)Osa1Qdir?zvFHuOEb~UoPirv$=zAy=OUtIOHxmBD z*4>IXIxE~X=TRKbv6@&i$dkkL%HwJE<*SZtc_MCnAVH?t;^p*aTDymz$xRa* zC!zNCD$%}*-j6E_H%W$MGxe7WpN@Tc`NDcJ-C6eEob3{|tDl`4>!sXI7kIEK$Emm* z>u@aB?(Cy@R@Qn(PDpNZDQL@Wq!rZJ(~Q5q{tmHz{8T*!>0>jI?UZ~v_h}GgInZn6 z`ac$h|GTBN!BC_Dnkr;c<+nYF$@&w^WDZpl?o*Duv_=ehQ#LgEHw!@l zv@v!s$kDk5eqP_k*9V4LBA|iz+wu*AE7yC2UVCqj*Z_@f^kcWZny2muO1{aP=(Vt; zU!LO-ZxreAezgXQAP+ImWc^Pjl*eBb zuGKxLy*pLc=s^(@3YHWbr>2iat>ToS$W#&A<$U`oouSM$!!)bg)@QW+SPg{2?jg%V z%V$GOE`r)zvfYu|Oz*n28B*ejHDCkY>%yz0K7tJC!uw`GM@ylX?*>gpr$u=PiUL=@ zL^weoKYSC&hr;HgpyF64pi_eI0jWts#M9J@9D~f==sNRQafeX#KpVMkF(zgs{Y<23 z{jS}PF%{04d)uXp)MJYg|I#W*ocCy|5OP`cvT?|tawoWF`kisYuo=J7v0=N!Qpn7> zNCs{R|G$H~)Loj(MUKOMVNPLbb;7FjySxmObr7HKqbs(m^%q}#N|I6cVC#Dn>KEwgu_TlvpA2&dMXVt#B_U*8Ik6bf|NiIx$psyRMTcqFo* zr~MavKS4;=aCbKv4!kd)aAeniDH##|RKe?a;GernVvS_g7hf9hd8@3k^}@bYUEbbh zFsj%E&)huKGc!89WpXjt1$&_;28Nbnh8)@!M*$B8S>yX=}g)3OC7}~$C|Q= z;l+7|H~caE^A%Tt_g}Bh!uRFQe)q?)eAGQ^<~~Ev1f3|BCr=xTz4?#NJ-R|u_FDLm zYj1@I#M4hIwZ-9O@fcFv{vAKE=dxNfC|9U)OMQk+m27KXx|kusIhKJ)#Bli0*w^X#6@ z0W#p*L$_2p2j?#i7VM%tC02f9EGnGfA0G-e7j~&7DM=`DgeL__` z)6LB>`MZPgULd0StrP!}!#za>q2?;lMKhunzfsDEGrurQAP=Tet<%ht5mgy$<=I~} zTI5IMLqpJBdIWI-7}wN%iM6MAhG{%dwABcOwaJvjGtV^rIVF4{+!Fk)i7JwQeZKwC zcs1zo(Xm~HWq-9oxYwDB-|zVH^Io-2iIBiI+wOdNRxTp2`Dx{5zcEmzQ|_at*cp?r z&%PyEe>Nz4-&4o!(=4a5%&&O0Nl2@6t{R*_o6{`NB`r980d)K3_kh)v zL1yuD%;nelD_(N^*z24{R4?>r{nQ>_d{Vws8@6fmyQx0-gHwk?wZ!z!^NTO8IehJw za4dB*eiUv-x>QwQK9qUa%=C8SxvX3BZ51(Diu~g4`STdnz=Oq0jX&qVYnaYj32UrG zrQUTtd$z#*x1CjlRh#(_?%G-+?N2}K`m3qs-*x+%%nsPpPy6yq z`EmofvoU`rRgyD=71K4=?m;HPwPsAszMpQ1ufIUIvRk{RhL+oEc5n?rT0lPM-MlvZ z!37Wd`1y74D@K1?p~s%m9&erg;p>}QhQO@Zn%k(k`_X>q7h)T7U&)x9mE%m@6i76R zvM9V0J z=~0`xAa5F0#;b0k{dtp$?YhT?i_dclR-d#o(Ko!;J1XmX)>1t-8&O0CL)}C_Gt$%M zjDDUrr+>-?4rACUH6CtHHYD<{-qU$Og9RAYlqep>fkJAxa~X>4uvlu$K{=Rp^0c`0 zwOLf$b+|olG1;$ueaZ+F>@s4|)0Y|~4VhAt0KndYNE#X2*PJC*&LUW zVK)j?hlHRSw!jR*Gz8V3domVktrpOWf>ZbM6Il+q$ z@t5qd?H4Nh*(WC1 zH!a^X-Q+*+nG%`_Kd2F$UaA4y9e!dmEh+N0E3LfCa=xXJmUosAHZKkzXypAeqkPAS z^ia7Q^0H0k%gj>F(e9!32b(q4Z_mDAB7%lx&xLRTGZu`Pyo_yz?-Z1&e(ZW5Y{d;1 z?vHjMB&3M1Wo*rNZ$EqECwC{z|Mi0cvXLL)__sdMMP@+|^5EpDLfsFiMzYG;ft%m| zX866k_T;6n)!1pjEuYyt#}6-# zH7fq311fT_m)41%R_NwwJ+PjL?U(3r@jZQw^Vj0uuV-eXvwtd*gIwD*ug=Sq)8Fqh zxJ8nrgPq&k!;&3}x)T$4)@(wf5xs3JUb*_5@61W?&4+p0H|5EHO}KF$2dMY2v-clw za~m*dEEAviCpEoX=C;+7_hUZ2zwPoRG4qehsS62+i?0!q-?2hhr(?^e=dBcy7nbf_ zPLo~Z0|oe|QmK0aMO^C!=m z^@BmK|L2<$7H3;d@A=s54hgmW)(R5XZIcTVbH8A}Gt2?0d6;`v^_QWrOzfRwzxbb^ zLS$#QxtXeky7C=z>Q9hFj~;80)=^OP-Gepds2t*WZvqc z#p>gsAGNm}AKQF+YaFj|W%61Q&IIh-fT)`k59zvNRS4@8d9Hy#hWiLtOBQoD2=rgZ z731`6sF!La51Z)YAwGzeDJQ8D{*YUr(-E~N07q!Ms#*KZp9x*rIV(#^YQPJ zjZ5#TSl1t%mthJA zJLoIz!AYe>_LH6jbB|>NzS-AptNu6tJcuU!6p0!t^J8|@=p&w@u1*4?7A61k7pfH& zUo|JP7fUIr5N(B1K5owo4@l+_hUDz%RgTI0p^HvzmCN(F&3C3(f>$Ld&A5{@-gPjQ z+a%%_c;0jL-+sdkzOu}zFo<4K_oXK~Y2>J=O5>E*4^myFjIyJCD1qLXqd?AG`xnU$ zW#vBLI*s>-5C#zB`5)iH3?MXDme)n*L7@!m>5mJAcu}pwXSxO#$evJ|ss(yZN_G zNbQTcN!~%gj^X%aW9z8-L*6kOeP2^0FO6MptD?G0&CZZ^89E~QXgKC%(5*!5$G7K^ zp^2Lcj|z_RFN*Z{8(cwV-noHtk-R39z@VnJb@w}acL{?-ztrb5#HSgy?OH}0&CRD5 zM6a|)`5UUE1unZia})6TbA9U7l+S-Ot+_!qk01E@N5&lQM&Ga`dj_%Bo%s{klEO{U zTbb5ln=CO`CVXN|I8dDIJE`JIyZe$FH6E^U6|S3L5H5OUUVL|3h1tWXNqu8Z_ zryQ_4S5eLjU51cEp9NZW;iOIKqW4n&Z2IvOh#NdAx6pw8{jOW7zC;RNzfx(lTml11 zfnfYM0n$iAs5ti($W-4(qq%Hw0%L}EScweAp=-WYlbo>3NEgB`ASNw}BMK_QWvnpv zC~@ROuK{_oVj0EM81Pm#GbU~T!s}rEJ%2yVlwiN%GB(M$)xbfbo-Mp!iS!; zq`7Nt|CmT}3@KRd(f`vOXd+t}t^4ouzLEQy?vcNPx#uqqTlPe?#1pi~QPArWM zD*6c+O5f6<{Jk6#>DIQ-vugA^&xRp`*V;mvJH#EC{9`&R6#9>ee5Cu2squZ%rHIVh zhkpzhY@*fpmc#Zy`x`ZyW^!pQA^f@9J<>-S!o}&Z`%N7Ee_Z)baxebZ<8Rv=r3kmG zz5K@ncVH;d-YA)`rc30bE2k!}92>C`i*WjSF_=J==tX2#J80nQz<~TH98UWl5!M-N zA&%qA4~G*a+13%y_ChATtuDjpW3fSJpPQv2a;3MFDAJGhc?=6kN|fc38MEn-5^@Zu zUJcLzY@zIm)~qjQ1MkTvJ{XS{s!98`o7!>zS(EqQKQw2pTqpUM^17nM}3dftr1UdS-ve=?|&Gmuy)1B<%Wp}+q zH342L(vKRt-l%aCbM+kzl#w8^r%MUyfY;QTW+;M^NL7f*l?s;4@vN78#*GGh#i|vAMd?V0`x@C#^NF%;KiPWxHOPd;atN()`dQJ_DtpVgM9>RXlh_PIrZvx38Fp%@ue-WX5GNl8AsXIJ_j?E3QCho+`hCF{C)2nLJdq=5swey`Jw(m6a#zTO%=5CooOSWaH=ccFhVpyR$+^+fr zzxGwHY2Ne(Cfm9Xyi|<@wa2l(y`MmjdJB`&rSu3bsS2#jCFIgHsnhY%-R-W$$w;1~ z#_1ag-hBh>3$tcP58mhSROhE%`FVTq*HSY3NtEA!c)!spox+|BhT)wPBYW*nMF0a4 zdLxEKML2NS!7z$j4o)ys1ombyU_CKg9%30x1R#R7Hn1KVnah@U1Otsfl@h)E6xfyh zM&mniCTi{^$6eS$_$1z*HVpXw<1N77Q$h~@vmfQ&{@l0$ca6dSX?fW1#*5}zSGyQ_ zuTj0`7BOesqrNtXrffAju3>=*3b1wSC4kMEeAXIz8Xd9)8oNe)YsJj6fv9-(l5sEs zAJN=*^k7n{8+Ek#$>oDwqf95VEd6yFCx40UGJC8&6(B8Ohah=6_n=CZ$ULwp0b&mh zz?mh#ly+n4L?(b$KfWtF$y*ixxfT!8cCb8cj0t!j0ZbFmK4kY`OVPde@ggck4qIGh zRh;9B$X#kqQdKUSn$Byl4SW*);S_~4KiA4kt^pg+mD~_Q=1cYXyW(nI#tVSwV@Q=Ot>21g3xDvp6dYidey-xh7{X{ zw~;Q^WvR}6l;Xm~F}*eA{K(3046DHO-cI)xZm*+vSuB-}ef{bn2hx@w&p8^BSJ@vR zYe1L!g`~nSsE_75Qv(ZcjOCV@bDbQT{bM?1@|UK&U*aU(0@M5s{l_#Vx!7XcU)Qo7 z&WPK?jk5okT5eeFBPTTHSSnU-742WwXt?yt{{M6b5jDBKk>3x88KUn&cK?_nbpNN# zgN#oP%6;3A>$5;>@J16R!Zm(RFO<1D1W6KnBzjuOsF&~bqOdqF>gC;2g=TSt6@rw; zOIpAFq3XGNc#3;a%%#4|#uawA&XL-d1~NNeiFBuG6pr;FrQ#~o!B_%?OWhU-n^olf z*$H+YX8hAkK=yG@c?N-c81OI%P5@)MK`62zyI#HDKw2KpKysQmOCb|e5}Iy6zu6+6 z`gE%4UA$|LjTtZy|Fc1^JCNqlBr8ylCEOyCMqM2i9aEgDr5=2(_LUp-ri$KuLa}iX zw+k^IJ94d@=*Ya=Nx$`GRF)TQ*$9t^m&(*bt%2Qgs1aIGPqxY_LFH6Ac=atcXerR( zt3{sQSiL_N*&jeQWEe%_@;m?_ouRjUIDl4+_%jB!&KCc0MHAM4pkR>D8rwdGfCc}UjVV~3@D?{Q=82nyvUwC%}C@Jdy+fp;3&^6^Ck)7#cHy-pHmW`mm+vc9-&q~hbVJl6g2 zaz`Or(ukZPtfkLdFZdH`ieAlc$HPYCcks<1_^y}!Vn&0LjNs1{yO8i8-9$!1`Bk8Fio83BSp^HGeFQH7z@(XlI z%t7{xU3idNw|$$O{VL2Bi;X@UIsc>V`|bN{A*)6Q7=vTwm`E1`tA-O?D7;1PNOsNt zNOMYPXuZy8!#gfIYV2=u z=G;5!Bam>}8c}`;AiO=se}cO>V#Vn7{JF`<#w?m!$UFN3ZU3(vLx@q{y_f~`Ys`^B zjUR}Y(!oovY_Rcn9qMcU8BX?>4)?Amyeh~yl}a|oBvS4DJ#3DX(P@>4;g3F!^mcA1k?QIVg_XyF_(X!YK}7T_{`YMoVY~2 z5>FTuOkO1~h=LcsrT|Xalaa(imV8EpmV#+92nk8We|sZcIX~|ZW*daloF$<6vjw_W++g&vKL0?qAxf)e>wpGrIFHXXGj0|EA!ks8#nl~{gGzU@MPiYhV=2+IaNfGzgmE0I)LQK+fN zGd*2l<}yxvO?L*vj7b)z*Xae-8KCmuL_Pl7$?9OWM55SO44MH@qz)r%WP~#DD4h69 z7H%E3VzFox1A4GzP^2XXk@Jg-p%|;te-KaPN;?nAoablAeW84u3{L}Yz$EMLsYsO* zx(;xNG2Wt5SzmQVgJfZ0ZaQr8?p-brkHsUGM^GbhIGIPh3u@mF{u*F}f)i z;7=Ppnt(ybxXcpco`D}KePZg~B_8`=bKMxC<3Jp)+z*Qqo~2z*YWyAV=HAGc&W?OR8?u&srpvbd zK@3WWvqxMtgA+E*M+^w>6rE75;(7iGwhTN zPD<%d5D4SpY(5UdJ|ie%lextjkQ_sJoGE4~RdV=`qTr{UJ7*aw!{a!qKM^+!Zgv+F zi;dUYrLsXR{9?{zjHq7`47t#UFYHOH=|-YL4Ql=|ISDzg2kq-;9;L|(B~Dgn6?nV@ zlQ?TX}hR}?ZYpbW%_+LA=5NR&4B+s3hVe2o#|$poNB zC(bfvN@mrT58DO9lAkkTAS1qA;l8TD-J@yV+j26GetB&3xur7iFbDmQX-mjkli}QY z5_4G-dSrJjFsXUM{*;k2{J7)PQXpvZdua1-mMde(`G4BHfG4P9BSG_|syft2l(Ih| zASKl@Jw%dHbb;i&5XHi%Ivd3!HX=AGa(MAYP*Qgp0=+qM%BNv zjMI6BG&#kbFhZ6#MDpQ?+CzoOg(<}%$p&1GY&uc`|4&&h|4Vck^2d@nalYiu>x(QM zJGfyYN3k(~?3fcMnGmC6TLesm&r3;5nQB`bn!%#%UkK&?mpi!R9eSI3D<)f@l(j8v z>K%n6x)G7MR%h$I%OPM|i5YU1vyBtr;NvN1s6<*v-7pTE52h`FP)Ff$dLy-aL~H5#axvQf;(s~F|8Z}7xiu}H&;|dP2GVo)@7?$;{9kT=r`x*g z1Tv~5J8jbTQEs2&whYqrnyU*)Ya>xpRqxOv)Q^dk9g%!d&G$s4y&4!DG#{zfqMJ<4NpW#w?|~-q_c@<&gX#ocgkvUmIa^1qD8N8 z=lrjzNg9~%f0ME=&$;7%zXp|F$(5Dj$c=O2cb0u{elgSYc3MERO#L@|98sjQbH2K= zDTxN>eKaR@>-k)_E?-|^>&n82N++xso}%tG9PZCYVp3xkeq=A~h;FIH_(S47=}tfJ zl{f|sR50Pl8@us=fPI}+^3^hP2+{0atq)Xq{6m0|{{*vO3#Wf0mVJ=+tR@yYZGaHI zV!3f8@t^hVRyz-uAc9p>HVK<=Zn#!`)8}-}g2s&X7BMXlM}W{2SqXhPCnP;s>^9n0 z_nP?Jgu3M|JBsl(CgV6G`o@3*OMnL@TLdwA`$*4=1p5>zPRhYz3z6M#-f8^+ zWi}8nc=CdXX&yKg=$&#T-ddf{-FUE5nZ+9(sz2FS^e`xNGwOFUzn6f8-Ev8EWTnk<5;weLefs!;qyonK?=0GXlWx5;iCnizQV*c1?wfq4kCil+zSPM@KT=zSaFM^po;N z$O{j7>CI119Kd|?tPbQxG!L5I8Faf?AKUAg?w(Agw}t>g({~~|XlY#4)OBxz8tG-v zpq%~y+w!B@UMH%}hS!-sS>Uj&pLmHMiaab)VmlPf!J&t7o1K~YZGGU$6&)sZeU)uL zS38?;J!ir@NFpAsA<#hES7|>4v3I^JBRZ(d0%Sq2JB0&_aWZ9r=F7ypp1>DBd9WM~ z5}he~EqUJZzfA7hNr)5$2BJ7SfIOEfewCq)b&yH_n7l@yI>yDYz$b@w>)};`8nh$C zhe-G>_1W-mzad>Smb6;wu@1KnGQ4PfqebjSbv`{DmsymG!$dfTR+2 zyP7IygSxX^8SZU)^ltq)8oJ4Q$V{VK!zCv~ybGr>tVHrAiaG-P3cIZtd;`~?+2Suo zRQ@sLj|r+p`1EW5TzJY0kq?!Al@?+n-KC{iuhJyXij{a0D_!`7Jynf_SA+`RafZ8p zN=XR8z}1k##Q*HJkCksi*5P)elQ+ zX=|-+)A0UD+;m;Ouh10$2P?Entex%p&*XfI>#_ky_ot-m0tMm`_}^H(PwQ8(Knx*fI%nk^-4>|L|gvP2VmNiX|B!hdh?TzIK*u$&mY&5rUk74I+kb6Uc$})_P+cvfkmZufJ=UQu42Eb z-`(PR*rs;6mOtx!jf(34k`R|F=AMc{<{^H61BYNUyO8YDAn=#6B579ePom))ZE$<| z-NKThaw4g$Fq5!XllIG#TqL%VZDJ;?=-jJKAvxC&J!xM{^?>hAtz2S|@c^pvcM5uT#Pvd2Mza^VwQyy_yunx*u*5GrN z<4VV?A+bQ$jvsA&_-Di-_KqeCh{)Tk(dOe_@P;ddl1lbmi3|8kxwcUDB)M@@%Q+nG zQp63YnXUu$W+%C@B(0vG2MEY!0KV+DMqIkFNJG*lH?ymYQbCqd z&w7a|cIr|dxC{guCdCbOL@dc+Ye{-ER+FEFJ*Af=Z`mE`gr`9)*J+_!J|}NFbNy}Q zgv5^~>9jVD!1DE)X*`NB9z)u6C~=;$h#G!KAq7_XojVx2JtSVDpQDd+6gp0)Y&psLsi!FeA_QgH2`?QyCyM6+W;CLIZK&mRDMD_8=$Cp z$EP%h-hy`eIJX=0`z1nJF-gRW2E$$ zg>@#&@J8oyKiHumq2kZ#{d(5mt9}6XR6M~i*%g5_v4HTp+m=fQ4p>S@ZeDRD3>!f`N z_2PTfJKDI4WATM2=eNRebWeJj??fZxiIrxQpy~Pt!NA>g=X%-jrrn2>GJl@vNx5zY z0K5iYWMO5uGW%e8>Z1rBxq+vtaQ$8U&*{f@8>v214zWYtUD;?HZDJYD4mC^n#Mc+6 zJws_*ly1&X114Vn`d}mmE0O3-PU_Ew*r$1Iz^!%AWg|BpC$9Gmc=wu2D;x`RwYp(- zSY1>XyRsWI$t9PDM~yCrbUmfGG$t&c0Z#lhcc__?)jOTpRPaeE>mSoaj5$n>&W!Uj zWU|L6T}|!7Y8 z)#5g)&&Q&h`&AM7eep_DIug(fOtmG(Z=`7fjz`5vOm~RC`dwzl$bI!|z$vnq`1P;0 zi%K4K$jQe6J%1y4KTu6da^aSCPhmXFNKEL>tMXiX_B5%fFXz7O9I^^Jk8+&TK_aFC zB}s3y8f0CJkqIY_v3m){uruJp+#+gYHI;Tst%GSiK67o=5&}0iaz4t#Ve{ZytV7 zE0#hHKQ_*Pi#^zUT|f%j%AY2$?C_aaEzIpol`i$BAS_;5Ucq=~0oXGNLH4VtQON-5 zry$g`SQdU(unDE%?rNKBEx-BANxdR>NX*$FS0N))Lcj=M;xDocCIN>#dVpTpGdh zNB{}E+)4*(yr1c_McL(TkM_PMzmQVoHqeIy3phWyp!yCK>X_NC71emf;IQCm(SgF$jX(;|q71$|!+_7TIJ!nvlK52uO*68k{^iwA*I6rs0RoS|J zO$WgAx|JF=r@w03=(V|Li9!N9;cc?!{0*tY$w?$@dA+R5G2W4@ss-m#FheMS;$u)3 zL0h?IB6jI#>9B?kFB#Y+PI_(L3oXPBVQX**`&r?=f&sj8WodTY+`X2|H1v;(X5hVj zA3mJ0>pf`@QYYN>QS=WUZ06HACS!f^PApNrFT5}uuU-(UO3OMk(xad2E_44;y2m6` zP!))vu6Gnh)emieKV_iD!?Rh%0ymtmMU!9Upn04by_!+?_0U@zMsAR}-Q2*!p2p>% zpXov66NUK>%d)MeWSBEu02AjIFFqUYA-O(QALB>dV?YcC`Rbtmlt%_igu$_Cqt;c0 z+@W&iTj$D2I2(i&LLXelL45NZY@yeV#0)#b2(r+On0~#tg;LTNaN;?)q8*2KUR#}O z^>{Jjlo4}XSgij@8LijwH0W~m(kcD2cj4}Z#8h3Vkv=@TD@64vUp4m;M(I~72hRfc-vYUuGZzdvjm0b1kB`-3OT8OeEP?$di`XkaI|E^4#^=t+zJQi#K+{)>YZ*w5B}mySJY^ zs+1N5$Th@f=KGz|9W}A1XuzITqR6jIFEC%crkfa|vKJiZTX8Wx&ii=LK{K@!X9gDt zbkGpb9QC<+VvpJTF2F8jIIVuQN}#C2nWtK|AVt(81_K=jPvf zYN^-TB>vJ#(s+wG@aXY-S+(LOpQ+Y$8#nt@&^AQ^Ni5nNi|tKyvH7#z6u%cS(Nr)| z_NJri@}CV2i8x0;1rE%f#mLZLljXTps9s#=6|#p80A#DhK4Z$NZ)|UOf2Ax|{>faH zqXU8f^V%*68UM}?&MANXo}b-?GJV^i=;k?)<=N*C-pde3`NrHajuX!0MbR@Ml2YPB zq>yBs48S}(PeDsoi=X?$yS_<{w#slqQ{p5&Xuj(H6mtM*mttS%lDR{jD7zIi?VjzM z;+O&&*Fcx7)Y0Gv!?J7yu=6h1&AUd*#b`$S&oRSAKGYGoQ)gUxpI+rkK-VBB-Pxdi zcRYqOr>0BC#dZO)K0t7hg4YURm_^RGZ}&##Z%#mGRD#qgqn#IYJS|?CB1{JWQUztW z4`>$?m_PlUaJ0o9=MY*>)Z}H+DV${k!Gf1KGQ{AO<-?@lc}m8`*{WJaHj0bvhB*YU z98`rVFoZl)v0{8H&gj!k`}>#QB-u!_w@L5Z#{NFJ|4#qB%p}o>m&5A4C4i6BM?N5Z z+FW7h?%7r5#PNWn=y{cKavrUdY{{<4QG~=9>1yBCfZ<-jvu;ghTbY=F@cH?Lc|v<5 zyW)na07VXyzI)?Map8oM+C<(;7A4>G?U@P12j<1UP;;2L&b zAZ>l@X^<4%9~{;pex)0pJsW7wRg-u4^2*ATFC4G^6(Eb1>q z$4Kj~^18xo1;T%9e(=6klc+xzZ0lmX9+c+WnJZjBGqc%n3fGLH52@hGK*W z8KPbR@p6e9c83!viwBd{0qs0bdb(mRUT3?n&MA?piCFL>X=NSzph%f)- zy59??PYWSGCs*^BVUK~CuyFEzpfuBAgQthKxocV6D`uXd`cfVKx(AhZzD9wG8;$QM z8+9>r9w`s2tk;J|A%mVZwyr=#PCw9A8@be*NzG$t?n+~E%GE&N_0|~t9C4fVU*oC) zt0im<31KR(C!6v;6I()oMmng1rT9^z!9e`}C#^fVm8w`gW_!j_$uc zhLO&4skI@2qZ=)-0Y`UQaR6Qv@~zTl>C8s+y5Gici)ute=gnk7HS{+MKa&o&ZDnMa z>8!{iQC=Q4fC$&hU7yP@`#Y*+G&zaj4oiR?^yTp7ZXP20e(K_Ir=lyDUVTKhQ}CEJ zn^AGp;ELv0Q{6wN-teTqT%TLwce=fkD2NYJosg-!U)GyeBfmD1x>C?t57J_cD1A9N zIaGZd0c<^M%SB{L7Zn}(_;RF)j{ouA3h1yCV&k(v$y4)HZ(kDR1V|%#8p15}a7>GD zGSvij!)^=-mxVIABbi6S$D#?5f^&!C3{A#^imHE1t(V4kBGiJ{g6UI#&(o6*vNZP- z8DyUynkaS5U+(GIZo*&VJF{$iFW2rdfbym0FaMa>9^UWx6H&9#^4DuUaywS}`2NfP zx_Lx#DDUx&#+G!&<2O&6xmPd#4=1{P;x!d{JU+otcRJ_wr{&_<)<)g2(1!3XBy#O) zc)-mQQ@X?-gWyOxw*!^`>w_0Ao1OCgb8Av_iGfCqsT{629_Fo^Y$tC1weSD+cu6r$UeZjlbhWkXqUh-&<3!Qkb9| zfkpbUR2H(30r?DtKd)0iwT>T}Q~Gri1alyCR8Bg7eOp>k#7-(nmy*F;`cQb$#_Gd( z1;`?VFWhMf_4YF7I{M{AkF+BsB9*yyh!1el&cU`2pty780ApDEE~ii1#!!#oV#K$% zf)fRqrhj-E77-r`IJ)T_)Dx;!V=wgB-(gBOas!T0tj!#}E#~x&(@?s4I$gQe27YwK zr$#2#x5^l&G48V=t6uaVONJn#ofS^vJAjUA+S=g6x4s~~fn6zSXI7uMOi(gQ1BQc= zM(u#t|y+Z%|Lwf*09i@=~mHH3NvsC}p7%hdXPS(km*#)$H+n^T@UJo{*k;u|vwY6Ip5?iH=PX})i}=6~9GRGH%Y%~zAqAWbam~MmHEKg# z%)Z)xB>OF!=yl|IKy{kT;|^sW40BPU(3TQLH_xWMwoFXr(!L>H?jo@;DlT+>uglD2 zIix1S`$-Lm(U{BA2SFKp62`Ek_-6ST`GxviE>p)qvk z7G6JY))^kJw2EAY+op?+QTtPFh4Z%5r?+f&**dd70EP5CJ?(MGvU<^V5Rz|sO~PH$ zwl|HFbtSdijl1_XeZ)CC=$gC z!)kLtnWET4+ruLgvsTsezMb{;07-i|e{HQL@{E+&BVjD{ffSxxr(8ij>OZC+7dVp< z!Uk5ddiO_iJ=V0uqd9NGeBH<;^+C<-^{xsv?n$hxfistdr8Nlvgpx4QVml%OnRs-~=y;R7sg~K&NdPo#yHR zB0%enO08xLe6M@nXpk33qkDN1$ArTduV)xLTJ4ksgn4 zBdb)chHNEZN7<+}myI6fQr7jiS|*qFtUvYin0W5&i^j;F7vL6kj(A+2)6kVxSa;In zxEB+AmX1=KZps!WX}b11UhfZTn`nyNokFKo&W!cGZT2k<&)msCL)6CfWBc6^gKnu} zJC*&_Q!cbr)paW4apY}el?z!Sc=Dnwc1@_+jgy?YXbD=m(O5VZG5fH}kl@A;>guZB z1!OsQl=rLiI)fbbN%l4J{?t>}cef?a?-seMGOgY?HA|4-Oi3~q?XURw)7)G!ScySw z@#HmnCF|@;P@-UQDzi5NN{gl4rMD+zhMbfvo`j=X`blM^Y$Mb7l#R|Dj6d%q{UNz? z;em6nn(81;8=OIjTj;mq%AT_5+4W_zfvGDu%qtKr!1Aj|Buy z*^$HK9V)qAJG2$mSY8dLd>izuNqxB3CcBib_6uSU*b^tDeelSa*9ol=$eel4Q;I_q$w;Wk9r(MHZt79wZZNs-So3xy$98Br!> zYB9Wvv_hbpqx@1hiT+~aqOnW#yelJB z-5k)%$iPT4Md9~>JJW>8^BH8mQ0*7vbBZHN3?Z#?Is3iB>U0zJ*Kuj5AA-O`OlJ4k3sBnq@gjW-l|>|yRFVA@KRnUV_FPOgVBj)p#P1v^A2k2 zecOCQP^yKh(gX>R&;&FfRXPcwh0vSy7J3x~k)i@B5FqrP(0lJFMWi<=p^7x=(wq3* z^Lyvr-TCe8%)Ya`naNE4Ip<`ObDrn9pZmH#7pQ0WQ*x6KE1T7m!{41UK7-3_wSNBV zbRsr1$ehF9z2jxJE*z@qa0%P(-ZAX2mn=F$ps0 zVvkZrFXCQQjFD}gQi@Hj2+-rfc=D8)gd3M^R29;#1G{jP;NrUI=hNnndg?_rd7Je_ z9iN3w`NW56Nwx+%^C^fmZny!R^$>z2kAjYRq|n|dP8z`+JGMU`NQJr8yYm+kWpSwz zHK{$J0~jISTGWVI>!9_+p{|QiI+>gd0u?<(F{jAEBWxn_ja2dX@j>{8>R@N(gKh4n zIJ!>9yixs;VI?I2bhyhPpcD2g<^J)JKAeoxk}{^IkP@Xiba^|_BvrcB7rbASDs4Mc z9NF!(&??Amw8p91)C)uR(utuXuwQBno3)*)xE(*H`xMe@JIJptr!@E(N+;tz z?C;GrsVj9D+j5Lc!xl~Mk?kytFdfei@wcos9Y)Vm6u-h=sa+BKT!5wz4?ZoJ0#~u~)LUhZbB5UoNjJq0o>hEV|*l22Iyt zAdX(-@@+4l_yX88F`tp``On2ook0eKSwSG)(bc%4*FI6u-iAX@Qa5MbN3DjKNAM7U z1*k8I*rbd@F%kb7n|t~xPd@J4wsn`w=%RVHA&h7%@ipR#Rls zML&=rVww#BhV&$?{F~_5X&h6;i-|b5KSm+tG-WYH&R|SL&G=|4ouDHsCtNi91-$@2 z9s+;(l{8Re)-;Sb-_o&W(Xje};W3A~M;AVuqRVXq&q}OGAOp)u4%m*D`=?}qcn~^V z`Dy0aCNF+b-^4sqEBqndf*t#m@9&s{jmq2 z*X^QCr@M3d{rc8`Kom7(zBnpm-C^i;X8(AaKQI^&k z`gXQSadvF`6&WKXl6Hd5=_r|{0HRGq^>)A&zHrPJ8|qLs02nw0_)t0`s4;Fh-}8kO zEVs(NFb;MJm7M>rd_d-L0i{t;mTPYx&CeZ}3-LoRc z`y_#J&vxSJ6C;`>>*x*n@G*ddc&X!l@3K+aRklM3NNPKwX>A7tT-x|NEmpbSiG zzwuKo%GYOO+E_M1$aZt&1Do|mL#x)4u@w|^aZop@iRpXktmc}R(KY=h#ho^L&2M`w zD$HS*HW8-jk%zEYuTY462KPc-iD$_n-jM6W5;K-L{n_7cbwgLKLGQ47^34@5KWiYzN)mqy!#-x7t4dX)-@4WAplJaTF z-i(6DM>?y#P#eyW7*n(H0Y>n`_Gc#Bj~UDcA6##m-9~5G!6}oKYlGY#(%OW$+-s!v zuqBI#7O%sY7EQS{)g1slUqd0|qJ>oY;+bEK`AFRfku9TZm9q)<3Bu*{(`!iNWKg#c zssddRqxlSaoG7T9vtFr|YFmR4RZp34k`Fo%xTa8xy_0p~`4j?SuSb4<%$=rJez&A6 zFD0^ZD^(cbL7(%PB^d4oTAC^`7UF8ZyZ6BxSSSzRDw`Uu@ogWAZ!)cLUgL~Q{`te`xdAj&2N8!NzjjYB}IlSHJmfMLL-qcF-Sk2n38ADiR3 z0Oe}_dHi9+)po0K;>>n(Upg(7 zrT=;F{Tjb012?9yKyQ;!N`*)z0VLEtERQ>RFP>J3k9PmQpjf~|6GU_xJ{KwwnLnq- z5JUVz`1kuAHXYm_5OR>=VQ^Ap3QFGhO+)jYnc(}|D>D*e+5GNKojiGV+f{_8p>zUp z>T66O=5R(!@`=orUyd8Tj<TSMQ7j5X%Ck-@=Wt~(^bcCg7WyFIDO@8~=8^eh-W6l*4+ zj`TQfvW3s9Ndb;Cb}WmP?M|mX)gN0ul3p zz64=|RdZF&`@TJhyQ(NdZYZOVD5_VH344hkdORWGA+A#wEgqd7m4~9o$8<41{O~Eb zqM>i$r&`aZpk~$Sa!;HM&VBaMxl(sp_~~X$IXWlM9)Srqp83XZy#}XdnI_-T<}C=z zdIocOcJus<{K}8$+}K=KwpP99t6Qd?*Z+imAQ|eY2UdTs=>Sn=_w@;*i$v24`<fWe*(WpowQG*`~mVrEiEgI&=+NGAfpevsTtSv$}4bmrT2%v zo{oV1b4m)7s+_Gf;gIu>kl)wow&+b^G`IUp8zi2efF*lBEEOfwxF8KzQqT{xi1)&- zQuNECLY}|C=XE1LV}~Zk`Eyq?Ycyx>%%6B;KJ}UD>6-aOAxi2)K4zo14Oa-vnxt|8p9N6K8q7B4TF|FKB@2D6e~qk$tkG}As~8TuHZg;Epe-lZY$a&7BokH2I8%!yUC=N@dY9nTSd@7>5+us@;=j{vUjgh;6eq>=O?WZi2wsal7S-be!4}73Cs20 zS$EmEc(j&u^f`S?jm8Khgt!(oYiIN3aBN-dl4ZJ&HN)FaG4D@$d2u) z$looWZ>ZHGv!81;zZ(O-&1*em0^_cEYklJ6oGA$mP>C4m(p6Dc)P>Lvq!>CR@{@w= zBT*zK)wuiE(N0@YR+CxD^MQ>{)#*VuO%fT%^`@PP2fbY}&K_4E?$Jo(9t+vJ^fQe5 z8n`sKAuv;cZ-=@2t$}@UMy_x1@&A&S3wYAg-r&>LF64eIqL7#ca{F*To!}hED#I?}TN04;B^{Jwgi0ekY+9!XIZ zNlx|1j`jx5LFlk`J=8xYLY0dMHTX2c5De>qW0uz)g?)l0A9@zgLvCSXi1R#=t zQu@DZZ0QZC&p$|?&d%K@@Jivw(oX{8RMWd16~-Qg~g%izD^k=^UYTZ zQi(-dwFRc&K8cLl(b0D4rXSmi+e0+=naK?`?pbM?J?ST(0jr4J5)D!iKCs;!xG>L7 z*}#re+;`BdZBmQB^OKl9D|~&)Rgl|e8}2NW$Z-I)a2D^~vyN=~c$5vtsUp6UFoO7F z_*YuLco?u`$oO6=VCH7miQQW-;vQ~ZzTHcuNVWx%6^(WhFC-vkH=GS-P|PmsvaZ2!av})=VB7L*C*Ec{_;un zwqWPHuTe=sf(y3dEilfCQZ;=0pUKpL{^ zpug!2o=@kOQW@7v^kRb-^o*#b zUP>w+I?~r8ls7$`+Fr|u-FLV*66V^g*l16Ii;20;3Jfcx$Kq{Yk@OlTI+`>iW z;FtA?Cq3dypJNBE;p%D+oo-4KW0}H9#NC4oPo@1}}Mq}FFBD%JCpFHhaLsj-Pl zVIh7wzL)bljFWW@)*p%$ICNnpMs<|+sNC)f?UX#2;-H^@_-Xmauv|XL>R}0|O7HHC znAe_u?HTfqsBX5+n~R-x`-WC8HdpOG^7HT&3e|z_KN15MSuo9pdOIx=m!|{7L|?zt zzgO+&?$R!>9;VxKclYq@_j_;ma%!r5vNL_;<1iD7`^L?~*4G~KR{NPt`puWl((_ev z)C|k)l{e-%Eh}XE*jYX%z2U4HW`0|GpY6O_xL@;{=fn*$LG^|?0~6*oIaU)zW{^Gk zgT_A+xI6`DMVM&||CI0V@v@(zw)@hGsnq9wr;FnG%+qGeq84r!=MNN$wUlc6c~}mv ztBH06L*1p%6UV~ek2h6>-r4qQSUr63dzry@BsAeY&&yCBb9GI$cFA7foWWz6!vXh5 zTEULt*@^X*?ssB#{!bk~weUJ*6qFe<aeE z1T~}Y&k?8?M0^eg1j1Uat>bU1_Rb0r^zOgYSp4$aMo^K!*;|kS?6VK@ob-~4P&|_k z&mC`zxeW3#wwVai(wysdkFgF35AbkM<#c>cHokQY0w4WUqB2B_h(JX^0p6$wd?2n+ z_~Oeypx(o6MuSAj*`QHkZ;Gx{(+PLKgz25&10lX6*PBr7#R`LXGFkzhYo{?*>*ko* z7o{uP>EW0d@QjdQgf5)Fkr82iT_fczPT(0Y5Erhp+4bu1zxa>;pUUL_b>#TJzP0`< z7h)q&-Rfyq*=c^c&h(YTn31FEV&$)jw{PcLuG0o~4eiO+qphtC^1d*6Mg>Q4_Afux zkM>VzDl^!nbAAoA zJ%gHAJzkfXF?G51^Z(iR0|FYqtxp}kk-Hj_V%MZ5ee{Hv<&(BSC)H1(K0)N?XKeZV zuGi@yT2Hv#1Ut*LJ`@zk#&Qa`T21qwT@Hno2_eqjt%*vpN1Ld$fBya3S>ix(wuc86 z)iw8JIPsRn`PoHERJ}>^Zc;$)z+TOUlC~eD3Pk6NR zrR6^$6E+|&!c6_1%=G;~uAMslzT{<_@SZqdJ5$9+Vv_)4Jo?7u z5VdK$i(TlA)$(SOWf1bA<8A)deQi;FK~T`bEe}5zy?1d_J>~b5gDzJ@?qhGhPCK(> zSTqoH&5des7T-Tzczil{Lu}xf$;lg*_H$o2^x5*~xbOUuXFkds_wejYUHW-a_m}Rc zey(oQxXBX1wWufY$6||?!uiLwzV1tt7)`z8kHU)mIR16*s^4UHaQVe_1`v zJ1YT%>D7VIg+OWr&niJTe0#P& zzcjTp1Xj{v4)oL$Suny~qlrsg*ED#`(x@{giu^pF$+`3S@b%rEcq2Wz!OUijU6ti~ zIaVN(PY+i6enPpW(}(p^qN0BN17hwLbMH=Te7O3ltx-2?+R~#Zv9I+=SVC{N>yxZ_ zd!R|+=qDh5lHbLH|J+_wR<-QFoRjR&N7v7Hq%7slAMXynS)Ysneny*3L2nVj>gXR(h`e4IJU+H*r9kRrnG-zWtVYdD>!qF*#v& zbHQ?1lJDf&o?jPforTfnpU!JNj~K{|qVN0-P}KK4Ycu+5rhfB5y@bOdOZA7E!3P;v zH(Kp*l{%s(adSUTn(NV)vP`T&0hpcQ=LL=`)CcDZ-c=mu(Lx_?iv2#jl_6R`KHRxZ zvp+nHu^_7!sqX(R9CXphE|tR3kk-;vR^A(aV7GkVcsVm;Iz@3L`MvfsuKYFinRFGu za!biC=AKoCWHKJt@-fO(uR*0?znd=Gv(o=h$3Pqkf3idwyAwPCaAc@1kqC--W zyg*m!0b~0R_5FpL^J6tUhCwZo?G8a!{)EZc!%OouaJOZP4}56d&uX$})IKeY>yUoFs%fk0Xy&^Hk1 zdIM#U`uS|zN&|P9Lxy0$+*dh$&;n1(Dv@USRe5@w`Z93v@(<2&VU6eQ?>c|7tEPY6 zGiR0hK|=*@dDAIv)RN0pYBKb2jla)CI}i$7NM>d#E9XBOX@cJOV{Kha@H zqVaUke$~R!lrA+q#JYXv<^Ca&1;1mDYwxCNm+zDs(yXsxX0{T;^aC+J zJNA4*w`gWxa5Tgvmaw35*F+ruzIw#xw;u#!!c@PeV@z0_;bN7FqOOs4kJNKvoes^^ zmpZ&LDxdFE0WKvLT1qw_FwXzwJC#xRG0NO~zdbYRl@(v0)T`Tl%p1!IwI58^!2Kbf z?e;^1xg>wQBVF0&pKd=`WEH=%XnO6r+P@-2Di&8>VzU=rmMMFisz=3N_2{rF=%X|x z;Ad86eo=$$go%=->ngmZ*of7skyJqAM=@)I+Pnm7U8|%)B~}vK2qz_$lhCf3$`dOs-{1JzBOy%=0=Ys!Km|jz*+E{2BGtr_;r~ zuf>0Gr)KJZhGc5ZAGrqn5^b|8r$ z;Do}}79>ENw4tc@oRvaFEWD5_j%5S{A_Gz12nH5G|KeHvSC%mU*UPTE596Nc)8^gr z;53SEPz)>hL9s${w8n9_0|-~TpxX$=H+p;e%lztbsTmAg=$N^g+KDy@Iz1VtHnF|Ftg?4!Jj>doN0RY zB);GoMS|$6nw#?R2Ny)M>-{BerI1;1{wl!Ba{fkXb{-;kqbAS&MR-aW??-v~nM%?U zJJRRTHuh+2=9s;Ynd~hFS?q$G8O-ijfxOsEc_k7A*1CD85w7(u*qJp`bX)7FiE=LC z{gLTYIaF6yv7=+*gaFkwL=qmoghGGA`F_5B^8A6>;k#|dzz`s-xzQ7k={^=Q`8gKP zPxtlQ$C?1AlwooEP*^p?aArLqg?)9j7ajdOx=_;j#MJp~hrarkO0$F$iRuUWop;Uk zA5j8WgA!PZ$5m#-KzDqhJsqk7rB`HqqXAAT8|<(3D;49Z%XWZ;}|h6XqrU{r}@V6OCuL zl_iucDhsJnOWvA6YKalzs6J$hwDs+*37Ii3p&p^@}ar5Xz=| zhrvCS$a7CN{e*e7`7+lM7WvXplm|^IA<>%NWmo8FH&puhHAD|dS808HGicbg4&9F( zslORCYOx@GXRF4rhlI@^^f_WB@u6~hkr~}hQ2CpGK-=)Z2Qt~D%pl1x^cqXuz3pxyr7|R7yDgBq@DJ$G z{kGDNb2sV|f#7rk|G-|saCexh)93FP-n7OxHvQ@WB)T$G<1{ zmhudr_x=$1q4HIPB5dupPl^BD?)yn-TB6`>9{n(R>$J|bNz%rl(Rz_oB{rtJwo9ZW zONW*9=9$!+YUj5azkEu!*ixOikI-P|%M@6cpyC@Cc^UUiqQu z59KGh`TQ52hxzkVXF8_ZZ5Qp=F9b0A!7Gh~Bp+a48$QLX8S{3T+$Jl-@w%L2;RI3q z0HPUEFmI#{b7aZ0e6!W8QZ)seFx)*L*?i_o zZb4A)?Crl*fDm?rS@Wvkl;__LSi0DNDV(;}WbV4PZ=e01;)$PNwuW3{X!Ywiov?6Z>QhH#qeu*pVjf|SdN(>0=`WJ?Ym1cjJ6PBG*24%-;WRkM7cJ&*S-GfS zl)VF570$s|l-{cS6mkQZ%yzj=H3JBLX4%HVhT2^EZ+)FRBp_!b0WyRSz653I5>RJ} zj~6_u%ViK5^(DqT$Bor83#3eq)Lq&HW^8-U{HmO>TV(7K5cB@1pMVcmX)3k>?BVdL zUU5q3=o1Q&J{2dJzN7rz9$2cAkFV9QTaRiC2ryO+->~=rZBuo0*E^Ad4RH8(U3E(e zWU|xT%^(Z;Yg(6^`zhBah=$tQ|~$YDe0i$PY~RqYsl-+{aj-2<0LbY_|&Q z>ghWPmR=%u<>Z$o=X7-;sdq$%ixSo0yk!Iw&mgkV8*A6EeqVWWeITaM!x8LtTh%O9 zd`*UDDfMB*rDRySztKJ!l1 zNn`A$zR%IOM8Z9R-zls&$0W-a_vo;0vsqwjVjVzd*rfY3e?6`@blD=q8N9?r+0?yi zewu=i{Rs2wdMJHO(1Bgis8obs&q=9jLRh3^(vZ%XZmlRHksARxdxuH0xiZkvuKtqS z?JKNr;v$9;8;xs@b%f#Ja=4WHu4-@lz)Ah+LQf|GbNbA|N|0l~PvKu1kOBzA-hP!^ z3C!>$5@ARl*!$%BSRA(^{uz&t2_8)0p?1yhhcx&o;;ol&@IV)oy6J;nsVLWv2D3wC zNfE_u*b7nt`X>bYWPNc_t{eoz)_O0Z-OGiKZRqmBiG}xcxmsY#UPB$9UCF^7-&ZR@ zs(D}&Zd~f1;5txa<{M8OwQx+Q)LD@&**Ee-Ac!FV`7sI%e9&ij2CnmEVu7 zHjLYYkQ=>^`2hDyrwQA2--4H9_}Pbfq| zc4b|3qeGsz>)bg0=uc05zwWukNuX<;iR7);x;jH{D(f1eD`d)htJ)`(zjm-6X%D&2YEQG-6P@Sr=oACuvF+4*->wNm7k!w)XlAvDAIcn2FP)BLY zY}KArYuhGrPVp9!=@ojGtW==Hy6U&0r&!1A&WmsUr2r5jhHPcO%$$B}Z>p4q;4;PF1AGCIHe8V6$6}l<{Gxn_T6M zA3fu2Z-48)FnzFH%HI_~RFoxNvtCtS88Pk-anQOdB8-3UjYmC4A?vg#DWhX$z5yAt zLe5usvw|7Z${DAF<;D}US*J|vmOW$BvYrbL`}+A4HFAJyM;|I#ZCZ!P(b+wrBYznD zw{gd3g;)%9PV;secV}sui2m^Sh&m_!WSzD>L8Tnb0b_i)iz~N0`fF>JKOJj2i@po& z-BEEBvqB9hOQZ8~Uqnqt#dQJQLr{L_=wn*3Sdk`gsao(HLGdQn^}gI*v$$DvK~uK7 zmFT!PnL1C!hXlizb5b-*65fsvJdC}RI+Q6yeWOyDhvWrWe@_T3-pO>a36MB(s7=+f zi+};NWQiV+%Oz26^F*wAAnE;kVi$#5EMA&Pj2G+bBMhX}bSofKpAp?ld^z zTe5@VmNNwc1GD5Yiu{%%zxuFOj_W$iy5@Vq^~PV41lEe#xz|iNGZf!Nc?%xDZdIeN z;mtEBGIf3exGNCx=uEWT$FG*EvbA?NzU{B)l#;aC5-lU)pFG!~n=@mHQc- zf>Lg)u%0?$@n)}P-Kx<)t!zzchvl5KxE4Q;l)EhTHM0WqFJ}4rI=zYfCwu}p-4KIV8=xDlBkXgZZtYGODE(*Q!g-J1 z9mhw;AAX`LFpn6%@^I)_FBv%dfMG`Dh&4nuAyrqH9Mu{_$kRq3N+?KYWL&(m$E5Y) z;`1_Kv0Jg>V_K-9Paz3Z3=C`p9o=W1(9MBHWv}j1jbsO0gb3YsKLS@co*%GIcn}L8 zotzm2hn%=FRG3M3AGR z&~95~%`jvKqF7PMTV`p?!EG5sAdnI$5qcG6yT4NNo~1t+``O^Fe5b|gc9$bquQw4| zqdkBxQLN90@=@jcbHyMCzCR>CCcDpSg zD*NkaBPU5Oz2_w+BupA7lcN#^ZL-3E(5M7K6qvx45OgUseK|Dh+E&g?(2KI}b*wRB z5}bFfrs#`(2tsff-Gxx1z+foK=Ht&TEmSYh#CRa2kZS;4ID6Y1>Ue8&b?_@#Eh*d$ z#qgGl>)_$N>VNzCN4BHedVS8ATt52>epx!n=Jy4uJQGt0HBr?r$UqVCdVES4$#X77 znsxQUBeU!@ZZsxH686c$`w>kKts?~SNj35PSU-aZIOH=$O+vBYnsfQd+PukYjA=TZ zvoTNol;GSnI3$~UxLT6O)BFuZQDoVc_e?YWqy|ORLiG+En*OdWB`LyWexsI~X|6SVoA~ z2C5xi8*yBHSIBP}rK)ieViMh(O`OlzA4z&AZ^~nFtd^(OuRBRP|5W_drcsk&Ay;q> zGEwrSV9&|3Zwb#hB3JQu_EBC+V*sHZ*ZQe@EDQ|j{+L8hyfgGr|KNSA<|0<4YK5l5Fj4xZ-2vv8oW^U!j&)F@pLI(7^9mcvlVu zhxJ4^^6ZxVjxcfX`x~JfKz)8?7@c5M)TFhcoSFMf{K>|d)VBFS*USbSS@d1|BD#?? z!MdO%jUk#DB6mu zSe;WVmqT>bq62PrFw$X>@EDwVNd40F_~C}=Y3hg9t$qK1%A$wMUE03?9Zh|@BWqvg z99+Faa)Rm=ToZFFk)*I`D!l!TBeNcOh$N!mGsubY5xJeK$eby^8>j6Ddhf1Jqy$t(kMhLJ_MZux?4ZPu8LH!;RBS{ z(#$`nb&UvlUX9-O289(j5PddM=LWC({KH6o8R6BF;*kgff1V|Mte8COE!MdBj|DUS z);%xEK9594;3?c65l-(?gxtvVP8^RtxG{B={datp zDPY#e$+3K+o^{8T4Csmz1LF}1kbqvLvTg^ZfkwvSC-W1`(pCK;n1~O^#xVTu#ntfk zA@Sp}RqRVsJ<{2dxO)WqRv{G0c#|&l6~P#wo@xC+#y#aVGL4TR|JWw`adL)xmZqgp_lU5KfjaXx9*1*#P1 zBBFDRX6?+5XuQ6}s6)*ldgE}dWWv)<-DnM|U4+X~NBZNFMM@3`s@Sl;I8Gz3-uO37 z5gr6Qr_miU60NW>JT-{qPMD|j+i9At*+05~ogAqcfspHRhcCgiI<5ILiBRrqJA(#@ zRwe$@jl=H=E_gLXV%5p66YgY&Z>-zH#5b_$xV8NLMzui+BLoUCY&3MzzjJU#$OD08 zNma=x8xBv~Qrei>e44sh>wh_s>$Vh&1+W95K#D;>IRIG|(cr=%P^@a&2l5;F01j3X<#W;te_#Upz)MlG+Rb;mOWQam2Ud+_uY0k$ZpMwHuZMaP$DKWT~wf2A%72t4@J=OAE=%1YNOh1j6$@dbd8nd!v;!=3Awmh7fu^p#Ud{VMzFOwzC&?JipL!6X*O!|3{P9l z%i>zM=za($!}JLfj>lHB&QGl9Z&(sgKkuP?FA|R`I{63kpsd|FD__~e9++& zn$4oZ%YJ?LlkpwPgA?8AwXmJ0z+0&YYMGaZZ z(krKaTC5%;sOj9fZPsU4SM-}vQvKYb>6&B}VF+bwTpFk94(+i;t#VpijiOh|+4@Z8 zCw2p(7>cF`JU;sQ2%A<*yD$VzrVAFOdnp^9OduHfFGmg#%nNZ>l44 zBQnu0p%v!UJ&+V7oucn-pVsIR3wv=w(bl_a0;5vOvt3xwH(j(vlro0r$ZwC`RV1kK zCirndEs4B<ZYjdJp0#8azR#SL~&NKPkuWA^d96{M@ zTr^;>=yMN1tpDrv7-Rq<3%<_5;%R-NPd+_B84dbkeNhCc>5(a|DCa}_af5hk5pOHLXtJM%ppQLI!UN(KnFG zdCEz6s+zEa^J-a!bwuBB<@Ek)8CII}?XVSHg?e;ur+fG)1=eX_Vim2P!|=s8FXNLb z*M&ElGbtqbaNsD%`e&iX8)PobPV1z*mTeH`YE^1~l2^>Klh#HrxHnRG;((h~Uw@|l zn6uNmI@EDzJBv!S?i)J6fIhmmChc}Ci@ITa(hzC1wqp};ZW}fZgdU!=2zNdu3j>;G=r)wfum1PghM#3+!tl3tdwo&L%v z2n2VY(AideP;sz#+g7`s{iN2bwlEWEqpqa5{HM-3R#TV?5hu)-_|#$EfD)3#7AFU%o_C&h=~dG7IOWzN5N)Kt-` z+2A8X*a%-OLmcQIP=?i>YxUktlw)0#gU?N(^Lq8HOjM&DM4!5N@~i88*vhv?7sy(_ zgmvL$vwDX0dB^#=>9c-TfwY15aVbof6yap`ZqY5sK?t}$J^bFt4`Fa8%Nt~bb_3Wof-c&bCNzt`r zKoy3|<0EX{;%y5h*9=nmOK#3nsjYFc2w`BF%qd(iF4cp7dXv4+&+aaO7Ts&6)8zJF zziBxXylwo5&Ecp-cHa4&=KV|g*K_?}-u?aVw?d1h$D;nz*83wwkX($^35DW%g#XPY3+2WPbY>o1#@6WTupsiH)HR`zXBUJ;GhTUVU(v!ICztOOCK3$igF>PI5qvji`9YrBki{|qr zkRrWF|33d<5aS7I!Sk19UYbTCeGXBetc!bUDJkqbYRRwEYhtjtvzVJcCk2<2XBpr4 zoq@`Mc0#<+%Tr(IL~)Fa!i*U0H*H#e;(YRU`q(V8!DV(*u`#dnm5HR1uYtfxbI#ly zZVELzn<03jFcsZ4ICRiMCXa5vETMC0mYPwq0&re32yoB|V z?j~?$s{%m=bD4HY6ml=*R|SpMUY&37WW5ToT>ZX$PpW(QQj7~oUG06Y!SlA4tgm<@ zM$AqXN4{8!Cj$ZbM36#ouvNCz)&(}P>a*?M_qtCiFK;nN0VkeufcNPNn51t;!k@?Yp;H=Fk&U$Y92xFQWMER+ zRd{nL+lX{#jz7!=x#7@W7la|!C75LTXC#XVoMO&X57*|E0mCq0HbfIAqv(6F>zuE) zIM+BkcY+3`^M>1&c<@iAJ0QZ(TG~T-b1Vac2>PK?j=En< zOhDA+AZdjG9WO*qJ8WJ2+o@-F-hXxE8nXy6tUgZgrlQ^WwQ5;oS@o)ef;Q{e2Q)OXKA*-NJ>|q%qEBp zVpkLV_!mTkp7{hE{6!NF^B}NB9K0H{)nex(S!W30Rm2ZaYMFGOP0j@fHI*CIuZ^d6 z{El;mJ)4{$j`1Jz_a$3YkY^;x7SCDl&);)%ck?$oW56gj=!pD$f}J@a=u+MMZ;#K~ zm#S0SL6g(L$nk0%)uz{_ciyaBEyZMW$4Ql-Vy&t+HrXNJMSM*mO0V=h%2!pDt*1g} zV4K;(eMU%4eHBwVl;}5H$w3Q-C-ZseX7oNmY9*2MMV3;LlHq~4K{J`QzEtSHp!gyt z8#=TMf*1k-dcv>Z1xN{S33}|Ux5CA47t{zuVdaAdQu66?awt9r`~+M}%Z3b*5%Hcw zzK@LSu9f|H`Di`7VO?dq^$GFmQwDKr;x`SxkTMI?C!5|S{u|$`aHV~Y=P#16c74aT zmSbQ|zL?sqD*-}btg*VLq1scr4aXIDVO}PG6OU@t~>szLPX({SR69~y)gbXS~zc{EvuQ*1Yk7}>MMqfvdLHvPAB_0^HIpG)|@$&4)8(!{mHT+U{$ zLYw$!fh@GApT=JfHwz~7R+}2j*;I4rMcJgykA+}P)CS;4Vx6Q?q)E0@hRlvr!c(2q z8BA+Caj)ibrt_u2Zq&(?$nU1oI0DgT##v2NK>ro7h<0V*vZFT{*58Io9$SalqHa5Z z;pFJXb_rmdSj7Zt{x1R+mbEDSP>kET$0}+EH_DC1bDI?ExC1=~kJT*F93$|Apa*Rj z7byU8f&c~@U_wFo=;Z~v3}9Am&=Z_;UQ z3~y!r%-AFch}DSR5ZRR^T2y)&2vE{2vEB5c+3MTV+%27yTb406>*-6HU1FB|wEc$| z_nY62{>wT*hLEwnZ>pnM_)88d&vUhaX*UTg0MJstSbE>!8~X)euVsDIY|6gaCtxaO zN*Vb~!WmR+4S5EujkpT%cp#J!sz`K%ps)yf3OL7f(&YsvSuesVP6iF|S#OvW79e|_ zZczzPQ6fTv4MJG1#|JQv&N};)JNQH~XZP%HD=-oWU&z#@iiiu%6T_Fs{N)CWI$M;j zCf)fnMxhYmbhN3;yFkYFPM6WwYPlErN^C!)r`xM+HeN2Wb(a}C@A%D@t2vfC{WU7} z{a7~YQVTUH?sEjI>E?`!V8$ZsuhEX^H-!bq2VYm|$(ZD?b7CXTS{w2o@K-5e_q5_{ z;{+A62*en4wjc@>jD|xWK6@%?!S>(?Z@lw%xc_QskmL34K2k~cub^~48{JV3&(U$n z#~Zz4Y~vrSUR;K`w`0QN18%qKT&`YLf0GJtK_25C*-dYnJ8!=`g)w)VUnu~YqE*pP zJMKjH{JOXht!R-65{OuuHht`$hG>erolmVcTvCvz&ilCW3TufG^oTB{M`IsfKoOMI zyEtSveF*DT*e|CGyUtn6QcxRG7?a}97xNtD zPFZA_732{I2`K4?UkI`1zqT;N=|)-mv^%XM=96EW>ltT!t&M)E#}_$JIBwhb43Um$ z&FeM1xsYmMb9;JBb0A}GPfq5vaW_n0{6(dDordZYy3#{=+JxwNPW4zmwI9hxf0XY| zUh(fZ`T)t)B^oA+`sO-ZO9pCuJ{Dc>q-Ds)sxnqD558IF4JjCw^K#vlLzEMF`B2+x?Yc+G|g&$VO^dcxh^0S=i%^7EJE7ls#F zznsoLR=nPIi@tFCw~G4D!j+Ar!e81Gs`D-1bHPVnWjrH|6IXvC*iV4;*YkXK zr3=v4i4R8(VQQ(52Qx#y>;0%ks}*pj*casD{3y^2URW(zcLCwre>?Nyk1Bsz;uonG zqA)9RbvV30nO*;U9e1#AB|+TJUwsrGI6MHFdPIwDGk z&{UAntJKg#?=AEIN>_?VQHoMR0))^>0-?9i!3JWe(h2ni=@5`2D2VT#|GmaK_`ZWR z)>?b)F*qP66K2LUpLsv`eO4ew4@TUF( z>~Nu5vrRQq&uJYRTJvsPI7tfavDrn~!sZO~z0n>F_6rjwP|qs{IUga`YFSjw4C6`H=IpslHdh(?H_>YL!GR})5xGW_m!+ZAoD z_TLj8Tt}Izm{)HVGf1)TuuI&V=oN@i89sYcN4NMl=jqM$^_zc$wf?1Yx@U6|c_P@j z_(hx@_5HciH1{bnd!pCI(}~UIaE&Y;W)38sN$z$G6?^9$;n9G+!G&pXt1t-ZzGow7 zh?$Kl@*^%c1H`}xnb-x__9|~?Q&?_-D168K1GLhjNT253N*I=m*q+zREvnw?hrCe4 zb;pT>w#mr-9T>=X#HQUr~0f~KqmkR#Gw$7G9_jE0jfJ_gQSD%>0P;SxOn)_{h`78zl>7;b}O}P-Ipyr z`y-Xyoqg-GPv{UU)O+C0g(OVM!B*k@kyW`&=WP33*=H#lrwK9Eok)r@8p)i49y zQv`?~m}kfF5p$zye~f*BK)iE6fId|$tq zk4iy2K)#Tys|O{9qEz8$#Q?LAc7Ma|U#jn5#tY2lF}4r4)aTx%^1SAuNHVC?KGa$A zzZO{=AFjIdV|M8uw&9msVk3V?R1zYVwwZ(frFvO=e{(7zFG@l#TSF7!dnOL}$z<#V z^n_Ls9`XY7nR$T@xr7<{BcIoO6Y#fNq->Gt>$#XX;Gm`j`6*QH;sfnzsC#d*(}gIi zp6iUPPO~}_dl@_D^0&;z>CDhROx3N>d&g+;972xDMDK3EB+Zw=DUn3SY#$HCkj%Yl zt?q^QJQW&Ok3YNbT5jL3A9B#^dp&pGL#l=w)AayGVciFgTA?9~64G8X+FA&()Dn=ea=@owrjK#6vcSg-9d9$_w4-Lk@mcKNE|e8 z%fwGE(_g7DR6-ybaxDbLb*0x{Bq5k!W3_{(gY9ZP2ja%?&?IYAl=}<9qbl2E;EGR=e%+Vb#R(2L3?;eRX(>4FUX=70RD`hn4dsqM z>woS8dH2B~a$a4G{={P29bv9Ue_R#)^&%52x0_v$NgY+Oau1lD)2j5LsO!0hvK@$y z1UIC0x(~MPhB88#HF2Q?Owm58*!MzT_77dn{R@(|r@N;HZC2*^$4ePqQqu;qnecoS zQ@IS#12rn0cU^p;?>R6;4((p&oa&Ifg{}G=IOXg1XWk*G@F5LTzN}{ZgwlNxAW~X$ zRUh+SoS|3B0g?tZU6BccIanYCl;CUo6_77d<3JE`CM1@rM3;)%uyo@FtCKYL2Ik?e zp}Lu%Ylo+vZM-=5a{TfnbVC= z%AHB$_Rkkkq@ai{Jp{^xjQI%Cb*5qg8t$BQhX_FA2mBZb>D9 zcl-N&;8G@`Vsh{NWW-lfD=a3&-)YcImaaEN#Eqq~pLY+!_ZU$AwJcvet;8>feEmdV zmC)lqRe8@;=5z+~?n+F%*|%CYXZe@Cwwc8NI<-m8&uNz=H++1GacB#z+;bgHamYHV z7XXs-Y(@5r0S-^q)q(nLB1pV)_?S2gEfICsHK=4#n*?Dz3bbXQrCY)pissdoo9FZx zQ`xB%4tYl!#}Wr02Wt0=F`tnQkXhXp(ii>63avWLWL{Lt-F8p>*!D{XKih01HGCDj z!eVZX5!A;|jfDlPI=#iS za`d?%EH{5knj}b%XwpRs4@8eGd3J2fUTg#{bvyv?0O_p~AD`P)>vyscUY2IkGz_S$ zx8n?vC`JV=E^M&ZmIB%}l^Ta3Z0$+oyIrN^+9s}hUu~+hxQ5sWC;EQN9vBguPZp;v zXleI335Z6bG<82*kI6m%r;z>H8>p#dz)+%&!d!P+=$q0%2H(CvUJGu_mOc!X;1zu= z_ZG<|YCdpQ5nmQOQktvz`%0|F8qi6}V^bBa?LeH8JErCWou)%-wz_Jz`WxrqY-G_) zuM8P+H7JYns)V4lz>qpno@6DBS+?nGO#akLUVwF0HTX3%8dN$UzP*wHNSKV-kAyWI zLiKT8CX5=N(wl(PMc(`B%>ZXHWwIecDff>R)u)}+WfqpnCT4;rZrozrY#_rVCavT4 z_8{5U9z|W$2GPhvxMfBY7MP-cg99!$U%Kf`O?#4qTx!Ld_d9iFgr!w(iP6j{fd116qdae1pA#4;p z0qyR0(LRGnhG209fCdSht`0%c39skzZ+UL#j|%T+0x^z@Z%!WjKb5Ek%$weo7H^z6 zvKW&sOEk7o#(GAmK`kYmzQzV}H0oO^g~PWS=YFOFPw2ln2|O!!8&nSE@Qt#3VzWOp^A05wjp z5ZXpnagIQwQ$vxdVRSlMsLw&xK#oD%9%Gjv8)NED$6gAPz5=`@1Ywan%rddKi!BRZ zx8Jz`c#e`;%N5e_qltU#WXGapT5i>2R;VWUOJqxyojQkH0l!|n%jB=>$PqKG*P|2D z76$e6WjJKpxcMdi=XQyTgs0|s-L~6@rQVPFt8snxkuQLuxa;IknF@8wABd!J`b?wP zplm}x6xF{hX{()aJm(eq-3=Uw&y*AArQOzOEYc0ba z5|*UXY66qHexYx+qE}5@mb-OT5?XRZFf_3KbO3?`vaRWk_dUZFmK$`N=dine`%wm+ zqk>F+h}+&MK{gv7C^AV@Yr)50RKXj97dKc?MiyO;H6D`F85{X8|HXe<1bp8H&BVd0+qVPOB@gNPuBw$3y7s@R#Cjr(S_pcdzfGirm zHEt=`j}o=LWKYUu!xq!&iUMi0>H>6UV&9gu4qvE#RQc&7X+KonyQc35lJl?Kle)1> zver`i@I4UHVrAV1!{e*u>`9N0af+J9rK3_Ts8a9d5JrF|JpLd=&qR_1#o(-d^`BTe zd2Orh_oIdT1GN8AMFKfNX7|XuIsluy;XbTG-D?&zJv;T867o}0XJJnsf7rU$p*$!o z=+!)nBRO1zS46c(;uw`MI^F^{RohL)BDU3BhwVmley^wf+?OPG8g}zfgRPO>WAm>( zT5R!lVGI_0&@6E_=Oj9(-IVP1?kQ(vNs-`QWxa=fwt_v$%)JC)p#7&F7Zd~Fo@3Cq zpj$=%g9mH^g6dtlrJKfkT)p`VkR#9DOWVph52|c-;q<``eY`Iz%xD@g%p!VSDDm|D zf4!s2WB*cVJ2RgJe%!q`F3jvtr6*9J#uS|9dy)-1VW-%xIFN`D4)taR^^d~bDIT+! zSPM#!t!4W4l6@k^wVyiKbdHS2`=w6Yil2oU%x9U7o%n>#?^d^g=PI_k(^;SrV7+XI zu26kgQ?7m!gy~70>F#2|_BZ9yRO4PpIXv}jUQwlz-2VLj$^TA>#k{Z@h%+C65m z1Q5nEI~-HHmz*!553v$46k|}tNv_C!tou963U`>tRBVEO2ad{w^7`ibc_Hf{LZTz5 zH50t*0tqaSSVLuw*>|wBz-!!Pn+G#`!C-EU>utMd)gduF$}sWyyupBJhS%-T;_Y? z8ai51fnktdJDa}|+iw0*njLxh?57dr%{-_q+VAcbqAY6Tx3^}61*9B38>%zAF&h@} zfOFdDtDn*M(sV*WuUDrqxhhcdO{QA|RusOKDQqLC_oTeU9PN`MH0#GKXaoO>@xq8g ze^t)GqR{qWnC*T<&2F8|x>2^LCTU!v;LjE=Js!uLMKocpRu=@4rh_~POk>0wrvK%B zquUK@FZSU}=Xqx5DoQ&k|NO#VN}O1h8@jH|ojCR&FiHX{wK57bWxLO-5Z3H>@{KGJYBMf=f|0r^t4P?JINeGJS@+7XhM<~w7kF5=7K3zC+H`MTeU?f9IU;sIrI=x8(9E&Q}a~IST z6s7sdGfl=^+M;O!QoA|s4Nv{k$}J-aG6NfI9hbb{XBtbkP5NixCoxm7%^Zo{=Y0~K zb))CSn2J}h*k4ga-oJ(Af6FZU#(rH~Ip_16nxdS1q_A!^voBO!bc$mfyy|SKEt`M_ zp2a(MnISKO_!K3yhzK)<8BdKx1sGU$4${U%*aK0gu@@axEy}MgVn-CVG=C#-oC#ui zepziEE)=$gHKuR5w>Wtk+eD7C4Y;MgcX9i1U%j5N9Bvq#+{vUZ)J9yX8v>M(GYO!q zw2q0dI+b*#8gbal=e{A*mo{g9WaHR>MSOgT6II>*BF~MXJRx@I)T@vv(|i4k%_+I3 zs3`kp@6a7lScMPF)=yOPx3e({?6}(#!?Gz@$0s-9!EU$^MX^u0z5~nlYY^@A%ONmB zJ~6BfFlZ!YVL@X)%Igyxr2n#NLp+v_2}EwbTzTu!Vq9@iPTRyxD5nrS*G0uu*@lqk zBRnxusHFeg3%c>5P0#+Lko|i*>6g{T_p=oBD2=nt(+l8~6t9z&v(CK~o9xpL>S@o$ zuS9yY+X}W4d?dbM!eJ)ZR*2rroS^M`t05LEkVcSPNG98rOiM0=*=H%rG#H(_dr`wk zh-8EbPG1^tKxe8Bg^W?Rm>2DqY--$ItDkk@KH5AW(q5X|lC$4Rc&un_&?)JvrN0z6#KScxZ3<3yNWA~jl;@_m@^!Ar%gmOHssGG;l5MH0vbx!$X1sB~&7z+GV!zob zh^!ZPc$bvAvAg5rxof$wTQF&}j@Dj%?|%;aN$Wln5!~Ndwc~RVTG{PhG4xmuNvneRW8j zR7p*Zj{qqvFGkFUs@gqM(l!ilU}Mnc4V^$1E_z$x$SQk=2LN(?xZTPfJmH9_4t<^- zSmkonn~0xHdOZmLWG#K|;Bh}4jaEca&M#$4JBY;9uN_LqwmpkIWD8MOKk8?en+O;( zDc0MRez!mDG(~z$iGK@}V77e0+h0|dC79=Vsi?Ms?~}WIMe@A7KK#|=iN_s1(Sa>U z2VnLUncA~u?5Dj*$>M!S(pXy_8+~x&li=X9hb~P%=xw}#-X9Xm3_nt3U;GCa}Jgha+9P?IGDC`n(!YskkK6Hc3uAY2%SO;$&CZJ&XFc0mwl2q#2mY5Sui#&!a|?I7LQ8(R-v*=7L%yiCEFneo@Yu< zy0!0aHYFujy^=KHGw5Yf1AE&wSgM1r+PJk}iK0FZ`|vN7z;S?%Wt0C%-vPrPn~0BD zg7itB3F@k?_Q_W!^lv;dXT2(Bl6w5kkv2j1!wpm;&U*EENIio5yf)S zs1WP|6`z6`N>ik375^T5;bSFmnb+1%lJUR?M2KLs?1~KMn7yt)nze>1+&)TprY8p{Zb&%BA}!Sr|Lu$VIZ zB@HyhfJ`#~EUEElgQ!eP*}L?LH0wix9z0Pot@`3!zHVIEQ-?FW8cZT?nYR$=7KIv0 z&_UxuUb%z>DDx>Q?17pC>!3Pn?B0Z){cL~r_PYXHB~1{MZ~&_tQNx#D!OGRMyzV|O z0jWK~8{*JnQ_ogTRAE-rvl<&MeoI7*!&al~Y2)qP5f6XzQr&LC&|`csX7NYkumJ`RC2Bevi*3|I+yFX|Ds(w+KLiPrpM~LEVJ16KRz_40+aFP>3963}WjLO`(OVdpEFD=r`#<_x&R} zpUWyC_cWfL^u1ZLL3kKnD1aX8p#>p7bu|@cx!xxIT1&vYT?T`j@=u3(|>#>*R09 z@__W((u0kC-PwSC#rv=RIX--6B$iBh&8ina&XZ;bu5p*-7aYqBd`DiyL9QWdBCA*K zUQRLFlC6{496Yn-E+JI%?3vUgBl6X4Uu?%Yfi;`BEkq{7WpFtY$L`6l7m|KM+Kb=K z%dsDtHO#lK=YINDs$i%hoLIzpgi_YkS*#Q=y)syl=dMQ$|Dy~Q>^DfyIPG4HFg|%n z(V!SN_`RLw5*lCX{&uYrAF!$5VOupV(L+ciI!&*2&k$6D(mUEW8)w&Nc9V1bg7*2{ zGG+!e){RjAwA>i0JP~^i*b#B!IEbD>u+=vG*vP)wzf|u#WG>p$VlRjhT(exNP1U9K5ppMnEmEP{ zAEkO-JMatV(!?-a@*H@?xsmTji%oSVy!oSo=K0IT2*IySk|R>k+h8;L_?ypXy6QXD z;R_3jUMCIT9rl%_%VwFqI`=BYx9HF+E{$I?g3K_aq(foj60=}Zk|~sJ?ZF+%x8U{Y z4;1$skGdXN!w*HCwZjy;qPdj4e^x?hH;hYdO|6VBvl?V>L*m=UFP%N(i_9f3`FO9F zgeV&jf>w>PiU>ilVW7y&O<)8u-@+0^*+4vrze#7Y!Hwq=|5EMm4ZZYtn^k5S_j6>g z|K)#~_)A%vE77@OQj4!Rq}2kR+^J$qDmEax%p|}_zPK_dhy@4(5DwHN^6HE7s_I{) zdY)UAu0zK?Atn?>Bc`=}?My1c&GoN!egn z8{epF6DMp|0&8$&4A&(OOtNvEZFKwFxi5n>dIK_CyTsX2G|xc{4!NTuB4pau}+L6UQ-9DZ?s_HzX9cbs|Nb)6to?1sPQUBQ5HM<6?ic-GgWF zno)|y&*;T$(*{T@IQq2v{S!fltS$D0iXTLyj;hckuo?jxy$oW;^Mw@6Wx;?UtsyS3 zy|5vK498fA9=ABQgiN{uPB4dt>eB>7?6^%VX&8b=Mxl$`rYE z^Hgs`L#H$|O>Lxt$Et+7UyOHl%F{0};Ies|Dr~>8cvOoz7!)Ou&TDx$6^r|aGV)EE z=InGNwZAF#+l#)L9-F!*h1Q!dv?WYrR)8jLtWlx{wH7kk1({PcA~l4-)iXz>h~0}5 z^R^AR-$rDFb*r%C=`2QcH#=m&U-O*xd!wwEHB_Qklxbt;!MXh^Um*49>Wih)}k!u_8Z;(}YiB<|#?9Cg9AAqhIW?=`B!~v*z$ieXl zwkD-cCF3cjA6fF|E-nkZoHI{QH^bVOn^|C4?zFR(BVZEhP;=Z6-X2%uS@nCFXeaz` z*W;0CtlPxv+#2H+Nmqy9Nn}4XzM>s;PGH``@8wTY0e{OL{S~ERPtyJEG?z^V+N;W` zjviyz=62j9#s@pfyfQ>CgM1dDl5^|!ErzKF8tS|2R~rDXn5PXyNNC)x;YGn`%EeqW z*necc-bqSu-*#_J;&d#Fp=oBKVz?0qazz}$w|SY>^|BQLxPURVs?N**2INUAP|0>$ ziHmuu*Yt9-^Mz97y^8;yK=BtH-M4g6^|$Z+k?H+&?WOxP5kS$T(*aOc=nBv19|G6a z>(l&i*ZprFljBir_o5$R0I+DodisYH598NWgOrbpzr0P2oGusNNqza&q`YFa({~uz zHvH}|2_}_n7ykBxDlmh;gSE(gEsna9?a5dCr9Y+KvMlJ1?X7>QT=gHBG$anZ zVRZL+YYW+~xYH&xF`g}1q1iKpdd%F3!nR887s~ad#2PiP)rRJ~$NSLCJYs-p!?qJwa|6yEmFk}^9<1x&=HFg@em)SY2Yw}b%^A7yUUXa-K zy2}_|zu3ayGbAb1JV_G~e}6NkkxBP@IiEtvD0s=EGoU)B#bK?53C%YU4k;-1v7MHjNovki zn3kHzoUNE^cNcDK95U!BrW(v`lwoE_#JaC&I2f(LnrWP0e3M$7-0%6(Ax*{4WD;5P z;SylU@MIq^#|c4GaB6dBVkho1CsRTOO>v&Gdutk8ju?tgSkSlsa1wLS_JDR_|w%s{|h&iRT=59s;%L*eOV;PzX~uDJUy5q|Ct ztOQPzo)FU*=c+c2cis&tFyg*wg5id}!&qA3B-*#Z1B>4{18i?6lDhK}zv+m1s0%(0 zbz4?Xd!G7ZGm{&W07Utu`CC9Vg!)Ytv4yZ(^!2pCDsKyx93^X#Ev^+SSP|u@kyv@5 z-Vao#9%PS0e? z_Ug7CR4uJEDrd0^H|NzcEe}F_nlPC@;@YAsz$UOzt;RZht`jPvreAIB1>sQdq3-Bc zU}&;M#FfSGb*J8bh7#szCR2?jK?a^Gg#LiV?i2f1H4^bw&F8x9(WaLq8O@^!w@AKcMBeYp4vh*$HvEpq$UM$5PDd`L#lVv zY~RR3sg~~&%&SaR9#@vy6QRY1P?YF-i{H>)>sKFl)o7&5NG0VJ4p1T1+TeE!`z``^ zzka*WbkH-lki?hxl*Jjq`-bbG-<&C;lM}Pmw); zq|Fz)&hhiRfu&a31bIc!e0{<#Rvt)+Aj^0{RFTn6HAx_S@1e)#Rl~~8>=%yB1GY&Z z`^mj`E700UY{kdt_M8=^@24RX+i~#|ws5UKo7Tmv}N|9N==w@?`cNZe4*g}5P{f)ho+oAWpe&FuKZx>Xvqn?%tRki=fR1|^n+j6 z_pw;WmP^C@N6HcD=mZ6<+_T;k+SB<0&PPF>A_Pm}C)p1#x%8zRa!UG6O-7J2WuU$3 z`qcJ^b>kL~1qBF9sC_}kD-wdv5fztGlng6|M28+??@dQ6s?m%wJ*5d}V#MyXJ+&WA zm5LFFai}?~TTyFMxjxvN0jige_Dhl3qv9^OT*H?-DxSN}aZldW`1$7hdr#OrltbPE zkrdX60F?6o1yb6lBj`mv1_}cFm+_G$Gg{`danv&wuRe5GS!=2Di)4rw^}zhY3-+tD z0K%`L&l1NMZ2dBl?+1haR&~R{T2Qt&BIkbOZidvW4}q8UJrbe{NvP}ZG$sI{3?}|Q(Bgcl52wIk2^P0>jP7=S4ZLI z)cRCPaOk`@k#e<)p-Bm=k9p>)VeEd zSNGvLsn=&CFcqKzTwdK|jozMeJ!kr?iu3XzT<(X+)oZ$(zJzCf!Ms)St#K;qy+HIz z!6N6iM%jno%V@W`L)*T(U%ivX4nNDgakDp1{ddc4wQ-nZzfzRk~_&~NH4f zA0{7!es#yBM^@(DkMRJ1uZaxaTX&sNe=pwl`~~nVXxs*B@c(98`9J(9N`K{+bu66{ zUF##tOPzw8Pd)G6%tA7|IXNWYYl<-(rUs^x8-LgJ8*k}`A1LYbMb3JU0g_U4!k8r* zvCh+w-UI}*2J^&dJ{NATb(@o>G`j3_r_FNe0bW=O{Aw3aeiG-i+iw+nwAf7en07`e zn!llIBBP|BiGrfWZe%}v%WgGA=%}t78GGBOkx8?|A*Y-ZVfirhrUd+OiaO!${idgB zQpeom7D5xFX7I&tlYH9W%=8Ti%w-@EBY}8E5s?PX^?JjWrmhiu>F?ze^zOJ%S0=@8 zt$xlSY_NWjjlObMf-B`bf6G#ZU(ehRHJZoNn;7vdo>6rq0;(>ear+xTI^OFf#jCC>=hJq*y={es zjPhf2=1Z701W%w71%?sA&mlIKcm%j|8oj|7IT@XgPkW(^4R0=!xvDpA)M8VEl!%J{_N zT*~S1(u1w$6ixE!z0daJ0yV$ivwG%O_}Szj{4qrYKJ%SmvWqr+rBt+60&l=zi-R~7 z`mHa{oG5%n@`?}_r;3W*8)&ffYB%>Vy0p)w5P)%sYurMO#9;DiOW0oweB@pE?D>v0 zeo3kvTYfG@NY~Bc;?Zs6S83h(rJ)*i669HvpV{i4k7=z!?8<5lxHK+IM`b}ZOht!0 zve1FOs!S8iU60%+h$sn7gh6D8fAeermpgs|o=cd*n6C}zKho;YBC_67Q@j*IbqQFz zIx=_a{=Y8a|J641fA}=~?_TQm)*F6D@ik1k%gZC6v)B7tCGG6)e?M_t@EAceU&ms zUza*=Ewpd`ji_b9IWtMusYEMh#64BJl3BU7@gt?B75hHAv%OW*pZ2NU$kgrp9a_3h zk^66560%6Y->)1v{B<~ul6RjY-;(`Ud3);BFXzR&w_l5+__?L!*cz9H5X3%|jf}ei&puaab2ui~ zA1$!&D}VI#H_{3F&I;n^QHJjT=U2r>m?;)o@j}(V9Ok2_Uf6}+3%`bQ%xW3cxx^p7;}Aa+o({obne~G<@LahZu=Wuqc5vyO>Xji`V)TIGlh)u z@m{gtpeqpFNZNlyWpd>f=W!&ZOd@17my0AD5-54oiSdTxZRJ_-^5dR0UCq7lf+JQ2 z{z9jMzY1Seekhc`Q!b;eB_$_NkzbGX`1;*^3o3O>HW_lTd_p1k121Dw^eU^-L1~A zJ|E&UffL+qTN`JYEl#B4R%azf1;lc)nV znD(B;P;}4SX5Rf0u&bVC*{Z_W(%=VUy*&D1RRYdyGy~upqhFWlbUv6Kcj_oOXM%!Q z5lrS0mrowH35|Y}qqzFia~>hexaNvFGTX!8f#WG1S!}7BecK6OZj%z5wQ`T)E#5+7 z1*PW)K^l1Rnf8gwB^l-dEMrIr+r^`EDtP?+zi{wWBrfUu-l;^g%O3`0OOq|ef=0*$ zPnG>e1$wT#K$r)l~e+_f{17kGndz?t`Y^q>U9kLwYdQ>qcL_I50fz zK8c*GFJ*r*4Do+LOF9gSIMI@Q9Z;j=SQ(?#b)@;lsp@ay;_RQmon)HJPXmvtTm#y8 zdx_N3p@D00#0zq-9#7-^lJM@TjIdnR3a#vYI@OU+QvG?JF3TJ7%Fg0FSAjTc6;y|{`sBe6aE}|;^l*Z2_+aS z)$+O0ET~&CQt{VwufD)QsN+;vB}XOupML_u;%D=;Vb`PY zaKzagi-)V&FciMk$6n(IR1!1of6qZ$V)Jd=yX&uX@XGq`S?BNf{@^2dVN3W-_wy9* z^lzT|vMof9_q3D_*#Z;MXK=CQtslK5UN0q`Ag62hf{r_n6FyyVD080~Y$005275w- zs4@Btav`<_jxsGA{h0~yEH;7&)YBM`emiMqzCtKl#2Ckpt%UT@n`c@Ueppvbbv-wH z_nk|xi6g=CL7LxHP@-G-l$hPa;i{ekxMfX9D1V~GkSxZ`#zrMX^Y`oj1nN$yoLqD` zX8877_$Y_QoIQNY;Y2{GFa4Y=(9@nPrR zLvhLFLb}R|ZRn&k70Rw^CXmbtNj91j74lryM_)Ml?(Xe$ll|;iWeP^XUi4R}A%OV$ z5)YH^4ek02CcJ@!1cOcA!j*B_Na@>$d$-R_H*0s9K4vDMFJzCG?H+JJ1z4TCxLlBp zpz;a#vVFeL2Tg&vfpQJufFylG@mPW$Br9G*i~h`TRG93yX*{aTKrnt1F05;v00oVj zz70lNHCv#3@mWkB-&}~}6%YUL22B`jZQRV{Ww3z>N{z(}k4hH0VLYE>4Kbb#3xTOy zSC{1Va*7;I1-}AkY!T z@&&4>>{GMbl~17&jQI52=NzH*Z^o8`MUcpN9KmZ%4`Inf^)p$|#)YE29G7s5A%>?s z29nnb9ibpqeM+`DsfX@m2VWHKGH72=UfNF8w;#eSZJ_C1+ZPC*^>W&x(@Su-jLbkj zeB>nTlQk>OzT7u1toinD^ybno(`@oQH*1%~F(m=W*N_1TQ_ocAVw%Pu{$z622hl42fYi4PQa zd1sKF=Hp4=Ye)9RUqXp0TeV=WUoDkhn81-Ri%~-x_h`L47eMZ_68?Q zw`YPuENGSBi2;obBd8z^JK8Vj1^@oti+rrU$Z9j_t)8A~nFv;Ak z6c>?=G$&IDR@92dX?&A^0+Qg25_q$qSfP*M*gaPcPB}d4*iB+Sz3rnppqA-{23?Y* zr`KSDBA!IlT&3!SHB?6X00Fno`0~+4|33-V-<@vy-Q(*j?R%!=Uxf>*^er<-pryQ% z7Hvcz-8+)TRT@+@d>-ev>vA{dcP)pH(;8b-2mGRL_tw2N;2A-IBUgvARn({v_$(hb zR(){#m9u&tpln~-8*JNiLJ731UwU=vjb}k?j-UXemyD|1SD+wolJ@zfZlUG{ zb~Er<-w*o6lTzo3sZxFxlo8f)*;mx&@h_C9UJjZG!Gv5NjLZ!FsWx&}h1@U9e0PO@N0d0JsZ%0bbLXLq6$7%@tbg~xA?`Flg3Tc^$*>lmxD zlmBVUJm5}OD^$Jnkxd=_NDfYXL7FMJm(ghg1t3aXZ-ECGM>*Q94Io=o`Y7kwcrMw= z%TfP zLq{#3{e>w;`t_E;l(3G1&w?t$N#W*a0wAd!&w%i(+x4)fp?X`G?W$O4NP&;AzSTi` zQPB;8nSZ%67IB?E5vuV@@55_l-!hKBZ@)r>c%=mats2BKq1Z+DKQ{;{UVzyx4^Hhr zT=GZHkk$Ye1SLEcADy`@Wy?e8NUX~iK0w1Bq`e)kwmy*v}JOd zUZM(52;j8^3Ft6kk>%JG`uk3AeJw=NcL%ldJj>fQMrsqTRdYScp_2V88}%I~h|qoi zz*A9`qi*0ywi&ydTVX`Vk11J=lzLhRFS|Rc?0r_rOwSltieH$!ecyWZ&aXZWhgcvzF{@TDjGeb>d3?pR(cEpUz&?)f1M zeoLJ)C%ope)HlM#lJTsN3!K*b-EF%~cm!s%ZG3r=FYM!sG$zHEQ2)K#!PvKIhtEtg z-ap@kZik2GOR#aO{h&~N`AUkq=@nj#xaxeP=>zx8SF6!FpB~&97YRJLw^^L|_1^e_ z*9`iJ+D+%%p8v^)NeUtyJi7My9<|K6-Zxp_Kd$22#7Wd}gcj*ZcNS(W?x%@AtJf z-%}KfkDJo|jPW0){7Z#mRhv;xe%XCd^zz#-JnH^Q_;poZAG+Nd$oOek83zeaL}ZvA zul~=)FMtw-{cc#*1GuaJBOIr%8)ATdq)w-yT>(why@R--!v(+mhx_BpNw^|_yU64M zgXoEN;#uw@IB<$V5(CukIS3=e)Q>oR%A)&1uF5t4VSncT!_~V7GWq}i{}ScUL5}sR zoU&6TcW==yzHm9MS5}`ynB#ez&&Nk+38-=7$%=w%VQdAfnXhQV6-rxT| zKY#JpE^N>1dOjcb`|YOdEkFsPqXa%8B`|w@>y+!bIw$w8S6JO=F_&_PX~i4&T!fyn ziF+X0BMDn=1-v^pB`?&Aj^>`|Pi#VvV6G$rUe{6E160yej9D}S`upcpyVcU6PAW2e zRNxwEKy~%JY_W@SxQ&V z-)mK!${Q{@zg_*AntUv1W!QTE%yTQ@r|Nr??2axzP1sT?_{P8Q=qRewZ11KBZmK^O zZ7)P)k{-Liy>jIAY1QvK>J(D2q_{E?*KO_n`Qqw97TcoZcCS^kSP}W-Kvf<9PtH!) zL}TuJ?YEKdpg<@(_%7p=;?x!X^qju@$Lr*uK05Z0TuhD_6nh?I=j%rw83j0Hj0|Z? z$S))WUrzW9%6-O7W;=T(3P-q{tJ|1mPqlH`atp6Q^Ew!B)EdGN*cCN| z;>7BvFBaED!e0@Yg}5^Gx{$cOYk%a6r)m(HscuHK7?;jTqt2hsDk^w=yuu^R`FTcg z-N``_2<35^MACn^SyjW<*qgR)S=S@P1T*yNL1SZoTuT zKFFs`30A6#<~K}a=63UfY-w)>YrE4Qf<5fDY01(xl8np@jrN`492D12dujAk2YZQ_ z_)E_A^gvqT@R)%y{unYBq=ukC&Rwx3;}s!-HxQ>)!v(LJ)%&%a`XOX@Bi!NLN7BA> zM#yGE4g=G|!-LTNArOC43p1i40v4 z++{j>@#@L_FpmWac*wiqnq$jSs7rt<V;Bqlo44rAHi0eLHEgN8drXkk~0j_w>Z+5 z0Rp=^P z6i>&IBo5(`wkSx6n35tof)NuY{iA(NN_?lQTJkiu_FzMWsn(-j zQ{j|e2C>pKgc382LO<)Xo^iBQ+C%%KY>QoRut5A?6UcH(Y+lSi_0rRvWT|XI3h%%8Xi#cQOFgW+>8QATXImJiz(LotFNlYK+dt*sLcQ%ab)b1>?BWV&&WGK_;;uC4=Qmt~ zMS`}y$?-ey+PBoE2A)4qOyqN6)Dzp`JCYO_sycw{|0=M=HA_rmoca@nFqiYsb7f?J z&2z&MEELt9OjCWHzhTwymOK7yz8bR_7QEqE=$GXe#@aVgDOoDtsS33RU4l0T(S$V1 znRFjzd(a6|wNtLGR%XleI!%%W_@&GVY!=X1^(`_-_Eqi$4IA87}n@8=c+?G3LY|Qs2sb zaa~pP>~Tzal1~PxQo>=fdIsnh@m;n+?zO_RS$F&+`<^k@ z)JGb~?V4k)cqUDI1-V^6>sJRLoH-CWR$XcZUa9A0~k8>{CDI@S`p@_hLpo%mcFD7Bj4&4VXqK((kC-qR>mj}-S^BF+||B_ zL-$bi&EYIv4;)A-_&}q#>DIGVC5Z6-BhTXisR^0}F@gXs=uE(Uw3l?6EFd7NLKggD z2q%y&K(lz#&022d`0s0uB9?9tPKAX6xg=|< z_PxdU_b}fv7~!prE}2OytKGu^-#0@>7<)WC^sQ4iqb>HtgcSg_&txC%6Si+4JAx-J-Epl4Fg)|2n~%5knv{! zIo$!RLy64v@EO?(s8>O`>pC|BhJLSv&Wvv7+ugxDd34BdI*}D-6|<*_WC4 zEd$)2m}m!4gGF9u(4F_7dxztNDo-0(_sqmR}yZ3Q(1XfZ`G3pTJsIYM%lj#;3;b z`0f6AtqrkwB2#_xQ&cfUsl^5FwilXOuwx(cX3Ds9h9T5nvu z&cEjq1^p+mqLBpXa&NY7K7(HNQ+Q_ReVCnEZ|yZR_P=7e?^?6^dmS$Hvm4Qp{-t*E ztKw9(I6zYf#Hw0g-hRjW+hyi{x+7`4zbRe8l((N1MV>sE*&OKC-{(v5XIFoqRAdqI zK|mwEvmX8v_=dijYxZqlkITx1Y5>c*NI*OKy{tZ7 zH0z6%02Mk=akE}*YqSj+Dal|-qvIZ#D~gHy5Fds&Yb=CwJ!3)6RpX744?u7W-~>ZM zpll2dQk3+yMEPp<+6lFt?apZ_tSl&MYr)bmy&ZIfiTWr&-77__>iWv)s}!E+pxzF| zI8gjlL;ki;6Fe0UJxp*yqh0_q$xNUihAXzIk;8El=9dZyrkC0&XP8r~sF?47*JpsJ(D zH8}6tE3?LxB~6x3?kTBTU^qTG^%j{9541fbz#5X>_pu}D)lS(Zw9(9C3F3;XQD3nq+!@6q6$(NYsrg-IO5E?Adjmf{RZLiLj zoLBY-8JW8;i%V8#PM&O-?5l8g82tQ)434e(X{mcR%Q#-|JF}5{Kan%i_ zS1Viv|Lb1=1l%tWxYzplG2XBZ-xY`3(Aj#&%0$Qi{2xwZD}PnVc33q`ljSFb#SbQZ zfdJ^(6y|%sT(Ik(9~HA6d|)l8f?OM#k&9{%MP}P8FELSWFF0K&*G7<}hTX=AV{27U ziL@~7l0sj2B-L*#X2OjEbZ56n{-)r^=JYn%hsLDXD^fpk!ss|j5oodHy$Td$+a-!9Mn-(ZsFC z|8!QA(5vZXMV0B$a$-5EJ0j=qHx%dGyd?t8u>+M!SBV=z(B>Woe8arFZ>=!ioaF@{ z$Onh&N2w$(!5LjS<<4sWSYb&wr7g!wtCqi!FeZgN4m(ESaZbFQTFqKy*5R_tiPCYDfP@^nZWHHue@vFRO`Qug+z7ZfPaa~&(#q>=d zUy~)IQP3lrsK%h7E+u(eUh4$DZ5zVA_CDo}yVQ5;C$4`k?00<+xxysrJ9{$AU?9lN zM7&RANUSN2?da>vH$`C~vdwJbBaj`yk(-*T2@tAiAMd;2c9 z+XT75Kol3}s5e~_M}H~4E2AR?LfPwjO}>AAFp+;XtlWQ-VA-^ruVklLl~rqL{M{uY z!G@$AzL60&y_79N3C9i}X-Z@;yBn|)>fMCAj_Z-veMD+G+Uk;Dgn(W7q7Ac48j3u4 zkUl7BWSM6R4FWQ&xC-`(WqLp^uG$UX#WQi({o@8Z!^W)Xr?f5Rn#7@u_(|WP#YYg+ zqO&IQKe4{)pMeaN!cJ+V&1AmsHsXSJL*6LShSb%x+6?=pIhE7q;6Oe32$@-o?q*~0 zq)Go^0oTPiWi)6flBK5=%A-vtH}NvBrfZM+X1^ODoYU;v%w!06TTGe%Xmz$eYvG9{fzz03h_TG3~ICm@;%sxn%V1)mFU6%(Q-P{%*vS zSxV2{)F&a=ee%D_dB@B!FISD*$xj1EQ4P0$qVDb=ezC2$FAq8yygN?-U^0`b06tw` zt@XS3KY^zF-N&aofBtFb*PU7UClL4|nsoo4z-Y@egOW~eUbo?(Fi`lNyS`H&{+5GI zE2$Dg%aVluhnheV-Jr;a5(QTjV?~tSeqQ?0^{Klv%+X7W6945>IQW>$<+MH9Z%s~6 zNCNlUxzF(6arIAq3a4)_euXozx;hhY&Ne;Wk1X7M5ZOc412F{ksXT>1cF*KabF(CE zr+@E*_~pylB~0bUE+s#-DobCNP1!sl#)Z|yx-bi(gg=SO`jZk z8}_aH_>l(it$pSI_WE~0?Y`^tIW0e~y|+mInL1e2+N_?{-|n9>7GNyr`JDH58AH0=EB#^-8njol<~S7swpjDZZlE^x%k9MVZ@czGoMllhnAU&B{a1?%+2C+5vM=3~k^A(&qL# z$(r^>kz2g-V02SQ{yOGO%G0WKxjo#M`*Gjw9uszD%;M3YB-(JdsOy4?1Q;`5Yj1-2 zqOn|#@5?bs>Jl)+uBVI`93JXFgLvrZe(@2=&has_qiqp9VnKq!C(Fx$>0hG}9>1e9 zcGhYUVa*oR*bt2Fitgj@^?EcMd6S(@;xl~g+r3O;d92AQ=!Yy%%c7w>vvMgd z;!a9ZLpPfpu7J?E`>60lelz>d&c}f1r`)N_oFvp(x9sMlD7q)(=3P5fV_5RZynggE z8wNi!wzpo-EPLeJ`(Y!5?ce*vy>V*N*_i4p^c3@$b>!Y>KFeDIi>C2n+0VpGBBVBF zZ@oRcSg|)DLzfO;_%WTO;kz6EEEPk@FWJ|&Vx?pef94l?|8-{_>2=22k}heIjMO0> zLvk773zbOBz;tD8l-MZ+OH<6zWH!j{^T|%H=pI9_Gu{_4J?$Q0&%JB(&QtR5d zJ5h8rzDH~tngO$~hh(Q2AzbTwk@i<@hJM){eO;HEUvd88jGSA%{ezb(jw6`)rz z%s5S%z$)S3g2sxT_!ci~4idhI)?Xz2Rh4gF{P`bb(MJ2LDj%Vy6u0EF=rdX`((k${ zo~5G-(o+2UbJPWy%N1Qv!*(^#BKgnoYk<~9b!YqP5LB`>*eBzm-Xvj$oFn?)*~No zHNJRKdDXid-3{$1CxJ8W`6lV^L5dmval=fqiL2%}^r+%*&JqrpP1h3C4z)2R_NpE# zE-f~uDzis=$g-6j>_%o0GEs#X{gSIt+dp+pKXa#UGBOKaxipRD-SKREzw;$MiDs$y zK581|^&^q!-!QNGGeG0Hb^6TAhX4zMUz(B3sk^8{Ld(eX8!RbehJ^{ur9RP{e@Lo?P2)} zlONFVXMxgh>t0@!DIz(7)C$``*D*(=COIXgxO$x4VVhDIm7ebhxa1uw~j&vTyLe}>XuUuSq7krZGvL>>WH|OK~fwtn`S|h zSK!Vh0nhlpQkr2>ET;#w>@>EcBj_kjn&Wwq0xp(t(}voFoS%7-kyaOQ=gd%Z38|n8 z{o@jH?4y1!Xd(W6#5G$$aV{q*WK@jZCRH)rphb`W3%WMve=s|Aj3 zQrT{Y){|M4dj`2^By){R$KtP%+%2{ML(lSzwp|YgVCI?#T$mtZ?ii zt$MZzmh=&5XT7YRe)>6wOrRmaXRx}VihF&TeXfg%DtXn#LcY-qm4w2WY*FU zh+_Hbkp5-fKLKw4`$)@H9B;SF&F}dnMM{Irh~qR@H$$^t_-Ey^X=q+UNY?a$W|KmM zHi4)i)s0h&pFCLH1jDygv~ARb;iZra$f@WN;QyKk^HGeq%=TUw(R9*Vqg#;0I-mV` zDJRznHCTM;9{xzp&coAvG*l)7O_CMELKb>YUu~|6EIWWu6uen~Yxlmcbxmes_Z!HM zbySn7QsN*d=Yyj%ptW3Zd&lE?yFCL+sayLW-f)5q*q%E4`bW3AX5s-8eVNORB52AJ z4ov_WvJgEJvY_ePL#l#joB(jenGIgWjPsx6+)S>Wa>~%o5N#iU;s_iilYR6%RaB_G z&S@vK6wJ4cUL_@Etrjd-cgm2M$d}|ZW0s8n;X77$CCp%s+Nzj zigIWZ=k8S1lIvSh*lmccg-N+DkrHN8FKRnC5>@99`W>#k%C*dAm3uBQV0XhZ`=7gj zX%Of+F%?Ued75OJ{H0eZ(<(itzd#>@$C|7wNJ-2O(PLjn5LqvS z_Q%{wy8kkCcX0jY^JWc=;Gb2L4o`HC7^b^Bq`SkLR%rM<*YPo`JY7k}HDZ&Ps%W%# za!P8XztcZYRaIEK;>Trl*{W?%$JZ}j9aIL)(Ma!- zGPBMqno;1u~#b@R9&TS@!jyS4g40wVg>z z<2&|hZ;n1vaEW)cpL>yVeiFI#Un09cWaJSK*mGAFc>*yx^#W%EFv03J&LoQd=>b52 zb^6u(OOc4W*)mdK(-~pZ&b~=CL45S%89^6F5Lo%fiu#4P66x~Lq}#S0c;`}ViAsMe zj(f1a3HGk5aa^)OpV=?9(bE)>v5{=>TS^OLz}waxos$|AHsy67oj*LeXm%^aYjE|< zu%$l!ly#EL+(oy89^PI9`Or{%?9u^BsJQfcP%py|)o6z!K||dxLb2!+zOxzq$6?dH zhiw~RkG0$S#d&0?rM*!>AyiISdg3n0X77ih(2(`hXCX>&zUt@g@~)|%Ti#}5~VEN8cf(6v2WHyQT(Vd zkEaMYTUf*QvZUz3$>Ikgs>2SK(_vQq828ZyVdH2WZ3k&S2qHa(vtUK{HDRrt0Byh@w(RaoT!o2(yKWWr}x z-qe7*++jz@|FGh1k?5XHp*@aO4Ut}F-AHYVKkn^|wNfy$($KUC?a#gYEDZ-i%zs&X<$L;d5&&Z$?wVt6!@|T#^5k>@w@2oiC&z7r9lOxt58K~7 z*yzDg63GG?-h27QoQgN8E$_kAO*(3hsz*Kdj;i7Uji0Y>Iep4gF*8|~u|M;1;#h*C zPXiZ({cq6t$pXL$HZ%@Q73dQw1q~jW9jY!fMK!g_s6t(888w6 zi~kzG{q0Jy*>j)s5F+5hfh!=SqqKjy@{v$`2AdLkVaw-%FuaJwZ4&QT6Bitz}t z0T<0nYp6(ycdCA4PM;z;uD^X0KB{Q;HSC?Uzg!I4Ewc{000pGb4bNrBV@m$5;30e~ zfmw>Qle|FdGftzcTvRttE&NVlt{m5k7$6pEW46iDF!Ttf+I8x{Sm9NhlCmSOJ4b;^ z-}YApp-!_1xa_x9=@Yk4oQPTYmD*+yZZ;Xu)B;Mnlghj&2)C zq5YMo(;3P8eobJVJx|X~RW3qatU8N9wmW*pJr|9s(@&@>qt>VNhqR;eBUK@DCtfM% zgWXVxqiaMt@I3|*U+_WGbrks9%N-~wi~aajvQuPH!Do?w)#E46H{w23Gs#~=h*>pe z-QkD!DWfSy2jzsk(GB*i9~MZYnA=HpZCm|1u>^9tvpS0(&GzScMziB(Fbn_mpl(M-O@8!pj1; zb`SGCpBLI*BQt>@A4x)5+eYYqVb_;SM;jzkzp_Wk2jm}G$y8nJ{C2us?sLsi<4gEX zf`j36C+4juf|*u1lHjp1D_fF@5eg&WtEReIaa({4XM;UAyM?tuC>zDdp5op3FbfZr zE=I0}>d8r=)#?DP1ao*t*Ry?2xD)N#mSPgugKqr>29SZHtJ2+BtGk`M1Jv6qu|Dz;n#XR@Od}H zOxy@1b0L04hnGR4pDbvkO9$_yF-qpsXxK|1@=aHX^wPUQwMdVFMm-rZyB`q|cNb&$ zef|0X=GxZU%-W#3Jfz$g>tm-nim}e7pgqlr548zgmaH+T2XMssVH1#OQI$RNA=T^8 zCURU&Lf8}6^b>5lvvC!Yr6e;Tk)wEw&91jcd!aG|&|W$Aj2aEahYI%B4e{2j=PW(Y z^cHRVYOBgrAgJ1nWVgasW4cv#i%8*}1A0!5g}czW^W`3Te()*RMM)ILhjK|6G4rcg zfj!_&wS*0AVY$m<^W0eb3#@d5VTO?vn$o}+uecnKazcC{Q_Qn#Nzw)PT?US375@`J z{E0X)dL#1>QIbe|c0sBzhkbw3JYP4b$hXRqL((#7KQP6pQ&*FEvqUmUb{~6z^Uy5! z-Ev;fcpW6zf?2n?wy4Ow53zH~-lDPetYcTAk65RC)Jd!?EDMo*E5-O)pwdSxC)Na* zpok^kdz_juiOex=6xYr%dXO+KTz_7?{q|qY45<<)8zdC;P}?|D;GB=IRI>pwQecEZ zN9G9lf4LO~d(5+_b6gpKZt%St_?xC&oJqrq{ZCkXw5ww#W4NQ|QhK;sn2QX(&nu5e zO2*no)M`@1g!UwT=f96~@=vN;(cyU60LRq+%I^~S$3rRR4!qaR`sIYhV7!Im(=Mu7 z+FKtTL-5?mvEf;`%(T3{>X8E14_9#&UKC7y@X;~%wNbI5s|l;1(@-?Jwb{N9l4T=N zQYDGM9}k#NqWvFrt{iIf7jDJFidLy%GaEr|c#g9;Nf-TYJ=u*IA#Y#a>2np8?wv_f z@&T!ac{s%F>Ve@*dJzL?51WBujG-Oq3gUsvm)1odDh=AAuA1|i&85h zkL^nFt+%kRTNxpBzla7^Jg-02T*E~_!Cl&L=VZ){fpxQ$!@EL_hRgh}pD}?7U&97s zTK#9&B~KAMrKbjdq&CD1(}!ZvYNts5zn|By`u-CbYyd##ujM*-``MiX7aTVi!vO9c zFXngR?O)}k&D5n_>BywZdf)1SJV5f6o5Gmx=?&@Vww6e?-mw6M$#0c`8XFGGIj^3`q$F ztF#wR(H=Y*4DPdmvsHX)RYnjX0vc^ZgJOwsAPa0JV11E+AZGL@@SU{OE){Br!vjXk@OGh%L^Be&md5UKCp`@riZcZfEp1@_Ka*1U=_ zW-I}D9ag=4)f8@EP%YUf2w-;h|HH*w!3Mz2cBHuzEp+j7^2s9 z+tBT8Nt%RN8_HX;98eFoTQK%&x`Gye!@Z&X=It}i^_k!GvgN+i-O|ck_Nbt;^&b@4b4|=p5Q|sSjO6aI)Bt(Mumo; zm6CIcH9e=f8LB8Z6JwwGtxXoVB63XWG>WaFc(0ZJnaOKiw8mFu)zkk895>ep>oMSP z)z5iGKY+N^Pig4xcZ*rPcc^!K&8QD&Qi_8%?ZAVaXQrPNJIQr5z((@Xk`q#)ePKbFH<$ zxBRpGeD(#E32%MkOmp>{$cbi`DeuVZO*1fOhn|a+30~!*@eR@?!5bu9LT#-v zSVO(|o5Od)l-8Xof3mpAG+VzVY0R5xHO+L}ZmG)go$sBVZIJ--TPLUIl~7Y0#4Urs zHiNY2f?TQS--g@U?AEF5|MSB_j8kWQ&72&oX6FpMb;DFA#!(|fah`&$ZrhGQix;PITg~m zmil{qgwdtl6v&ML0MDv8<2Z4BvW}u|HEHd|oF^4nx>gMMfP3N00@=nO5|e4C<71I& zfmuXg?<1({l7;q>L0lV>v|IBPS{yO1yf3T}YIkywmOO-mfF9TwcVA5-NpwD5-#?Vd zy?knY;K|6U|Dj7(8Oo^9^B+`2Db3n$y2OHCOUvdaCQj;&=n-pFNe@M{P;DgS%^>Q@ zZ5=(!x)3I#u7(TMI`N+aubkipC-s&UThc~8Awfury0m$fWBv9?G`T6?#@K*I<%x60 zO1Y$mT>t7N)N;-$D+B+MNI}<7E_8H!$A-n4uz*d~-AON!W$tQqpEf!^)-!%Wl6v+B zdxbw_G3m2y3mvy5uu&(gvPsa6=Km}#n%}F23v+Qjdqm1|NDuYTNqK___u_KFq30Lb zza{Bi`N|&i0PGe^vjTYHNnj)u;{HFa#2e%wJ05g}c0~eiB0sgBI?+cyD&5CaBRyJy z`kr0{(H%bR8x+l;Azc~2TxCXw(8oxpE3f>HHMvxpzbxU?n<{BGp9;YE@N$ot`t=Qj zlvh9MX38vcEEn#$@RH2!i+J_DdCAZfvfJMIFXXp^A@Kml8w;ze#{Uw`e3GV;_N#a*}m;Zmt zyt}Q9#Y47VubUeF)UVmisZ&@AI4GZ#`r$h3>lQK+_D`TMS?=#*-Ov4Og>^r6{*Pzh z;iek?{+h?l>=PWVO>|@qUS4WyN-RkXf-n|KEe6e*$*6Q{BO?77%-Ff6mUV zFCbZ#VwxBXO*gM+pn-8cs{YJfksI|&SI&Jnx{3QgFPv&0p)rE#dfV_~pfq0v7(BEA zk4&KWBX$mRARmjgxhd6D1pg|(YHHT|+E9bn&6=nT?o`w2tFKcutbYSUu3G~wg=_NX zZ{pEaj&X|u)&6AH`Y__Cm}~*r7I8AruZ85QXUNLR{du#cM%)ruY>gKXx!N5#^}c%N z`P1siw8S_eEA*qKcw@KrhrBZ5BO5Qn&)+MaI`d<;{`v^`(hjEl>4g&+gx2=xu^3eL z*Wc*!iyvYP^borVKoI(m?{6S~WSu&w_x$f_ZOqHc)^*9blj%eGrhgtIj`l8zVH+<- z9a7M=w}QBxKbE1=MLpYN4Doq@$hSLBi%di>Ag&mbw0*5UfkR*V-y#IdaVIyO==&4K z+)2L-wdq7(T4hNZfSA8p6cS%6(SI`%LFpd8)zSVmc`D97sN~BxpRA5yOYYNx< zO0&6XTpiZqpC%lL%Dd=q2ZB+OAzg>-_~BWNK5MLAC>za>@LO)jtn8O_ocvF z6nC}!^D07HONrFAuhRDqaFZ1UuosRj97^3$`L?WYdh9v#h!Oe@u2`Wkv)-o9o|utf zdn(#rIpz5hBr5b0Hi=|y1_E6j9SzOQjz6C?DOMgasY~(j*SA++43%D6r~q~6LM*bh zgcD|v3Aao=3+7tvyI9y#n%>Y)@Cf0{AYtc~cWWhp*c{O%ya|XN@A1#BKb8UJ)T;!b(A`ho z_BhPX2Ob(ni+YdxJ4m@a<$ckKo%`L@?px<-5G|jyz`^{q)T}a~7kXg92~g!D=|^@^}QQh{-q)mc}}u^3_&JZ05P>a zQQv;fj>Oc~_+6U}aG}XX{bp1BYu8Hq8f&J`FMGCR)%Lyc+D)>oN5UdMS&}CxcalKd z5noE^BxrKwG)qZJ)oDaIz?u+EYyD2 z$V67YwL4HUNh?PcpJ$wY=8&-Z!uS*w=9*}y+K0DRb?zKkkVsK|iN z@6r10k(miBm9hVCos6SF%!6n^S50pL4Cx9lymK zSyYp2_oJ}0&a_=r7Aub%EIuzT&=!B)Dd~6O!RFKfxjFjAQKDE02*6SWf-+pUM z>+md1;Rm4dTgklj*KGJ|;QIu}Glz2HIqhT4=yK6>w;F@N-9?y%9Oqy>6#wgsvXQX^ za}WA~%Kj&Y?@tbUZC32x6(#)>a8}51aa)n&-KnP{B3BL#5%NCFyzg7^JE!sf31y>_ z0;}(WH>)=iLFSWF=P5yYqLLX(lDuD6G9~rS=Nv9sP08iAhfFuYA9HamJ6k41(euf%(E#>sEWG|+6$2r z3()B4J#YW#0tMzug+>TK`uTLOh-;92nvr3#Rpw4|mmC4wNz>`{eDwV^K@8(ll~}&k z<9b*rz?>b^LfS$NTz76ygJW`PV?I)@|4#3PsnMcy!q$#u#ob7LGiu7~URr!%EM@X& zL`JKuB8Ma!W|IL@vMZMr11X`3@*Lfx3Zf{Q%j1?qyzgH6%!xC8{CgED&8_&r>2jvk z%dc6e5>&d!6vaD_aihxEb3Wb6%;!QhR+3ig@b`bz;sz>oCGu)GFJv1OFZQg$A$wo+h_TA{U~+s z``T9|zrGB(Le(kijBpE!#JwncI`ZA_ySUZhWa+hJKu)yiSiTa*3NQC*IBs9if6jiG zH`5cA@9jzdQ#ZvA<9aph_Gkj3>qhOP+L0>G3vR#Cagr{~?Q&0!?2V@#$gCF<`U_8Q zIGGN+12WJ{MyHOnFA+z4zS3UX><=Q)O6Z9xp#d{wMB6vkCgrDw zh;g*vw()i#|M-d*?)}zr)|7cmQyukkbJ8~3jW1ryEjey1=gXRbF&yKoam?@92iBnP znlFzjzt=jazNVf_E4sa2LT`(s zRG1kX-E;aD76H}vAobC*_^GZ)DJF^P$NuBcKNP4kKCrL6V83*TWDKsV!Y<`~h82l| zuoWb%L9Zy;*(spUe$Y)7Y5!LH(g5l6?bedBG=?ZSk1VB=Dd@B>OG={0du*ZDTqFpd zv0*kr<(Bl!`UV0w(-g{TOEyV&`NexJ)v)Nnsd*5LG5k!r%qe?{9GnCs9FmP@gyoT0r_?Y2*Cn^uWUIHz6=v%J@QeRC5E?m3)%RAP8?@q&F zL_4%9(YHzq+9CL{G0QreEQsb24V6@9UEd9yd8P=4+XH8BBag6B4{yOk$Xd^?@C**x zw#3h!Yx~*wi^OyIG@K|}G=sp6%*F3`tI$FhjLgM~GV7y;R`MrFQ@jlK8Vy?gF}oT> zqWwcJO>WXgjoQ*Z08}G(1?@l}+mKw&2$z(Gag;qIYF=8VCFUKgqn`1Zoch%l)-7&A zQn7yN50Pd$rIql@g<|!5s#UndMt3U^HoOrn1m|1uiEFbVJ?!IGQ|!$1nkx58GD_%q zaTtsC`JU=F$mw}=DM>WRZm2fd^kvbjqwyxq0fIo9-A zj0@^{^zBcrre}T{cf`<8W?PKd&X${;XiixMdza%c*D%Pf%OOmj%2_g|4r$a*q=FU~(o* z412U00c*5Vo45I7Ph!r`d6zyTftm2FCI*J}#UA=>L@4o`y{4NH+99PaKeV$aI>Yeo zVgFY8lfbP)1KpS@F)I!)khQE{QF9~g>@^q1yT?ne#}vqUQoFxqd6B92dMszX({IAp zv88k)W@1rt2a{7ZROs|fw9S&?XRov?X$6c$=~@TZdFotO*7rT$d%Jg zW|*rJYcSKi#-l}`mDn`j(iNJa7dDNV(`H9 z{Vd47mYBTlBfR#2sABM@!@Cc%6^j>ylfS=DBr?#$aSS+;*@f98ru)3q5Jin~12)Cn zs)rM$o=_}K-&{Yr!QPPXKQ8gg|5v5ytYIxnIKHgx(QHm_Tv-pR2YQ9-?Sx{Oc+aAZ z^Dftk47@%2(oDF9(XQnSePSq4l8wWl?JY2j;ZaRd8xKe(pBAwyfb2JnZ(4%SipurYcG+SM|Oi<)$fGZ~$ za4pgR-C_a?2zfBnvb4nam}6y$=n{wu1d33)5-SS8OixK))7Sa-BBqsWVEAVuJF?F8 z+*kR@n)cei4rH9H>QzL-Q2#*~u_?#W{_^XN$RMx6pwZW4kji5Xd6jk7e*%YqLeYBN zg{_K5_liIK+}hzAWPpcwU|za6N%LOf`~G2|4;sSmBf+pM%gBY^|FuEI5lX;>9wRDr zL_sO?I(A`YtlYDnA#U2Z5a-geT81>0>SbTimV1#-Pe@{XKxzx{biOQA4Cl{^voc`|ws(crA9Q9xwe@n#*P z|B=*?GWG`t;Y7odEgy09Z$wQ;a$MhCnVuHzI$6Pze}W0e>zG|dlc}L9bx(1_g+cQ-9>8#6e-J+FEmn{*LfAZ zq;WuxONX4kVl6n;|1>PPX8_FKd9sC)lai9}i@g%uV!Z%X+I3_t=>J47PO06vPkpEBju+G~z>2 zILliPtGp?;j&^Zl)lMcSN(7UzfiDri^IGiW zYz>@{Vh|#}C@_7ewn2{T&UJ3~ini1n`xI9T(ijQ4mex_B$sMZsc@FY`~pLLWHs7^rXraF829 z*3YfiEka{n2mKRR=6^GbYdPK8J|n&Z0Y%n4+J;j&);1zUBy%*1JQ8F>zWrg;Kz!@f&IcC)~pAZZ3=-LIEN)L7c0udwE z7tqYUN}uBHq;B7ytnpa;zSw->M&lW2{{t1T+?q@_l&5vEGGUtI73x#Em9TB04t4Of z5Bzm~FQA1+8j&+jo+H5Im#5%PNA6-Z#&6!y9At>sq0-_{W8>0w&IxTw4Hra;;#7n( z(|nDT4am_|Ewa1YfR6cNcnx33&|xMyCTczA$7RQDK?9#Q{r2DM+t$0{Jh^p^!hZrU zUAJTw70U3vF;Qo}f2{@v6te?`*J=3`fhMi5whaHstL;2E@f_bUfQP-22@dm<&G`Rl zd+(s8!uRbHQIH}^N2E!IP=wGFq}PO=gbpgbhTa4bq=*3#2sQK;AoP+1sVYtB(g_h1 zX@V4yqJZe0@6OJTs zv4Mry{7`V3Pjr`q_Ze6I!u4BK+0@@&;QvvWJSskY303u8h+b^;?XHS6e61*b_Bs?g z5W3vrhsxMha>)CgFL#{yT_C?&)}otGJ`EgzKv+;@{y0RSc;% z>e#7md3sk-*Ln(NiOW_nFvHvVoVf0zEbqa^P&F{yN55hn-rhc&VvLX4=cVVq%(Z3s zC^U$r=3R4rd1Xoew+qu{PZ78i3x~u$>(82sjy0HZW|ZswQ@GyFfQ&VrD4GknKRg;K_v@t+Zo?9TUr z5$Ch7Zx)yiO_*lYADRM-{iWw!wALcu`M^Z!1FPd}q||-v#h>HP|0p_7k0k!PlL(Hg zs_yRfBJ+O4`}8-za0(6*xi$L4e8!y0Jc1zd;Fj7ksHm)7AmZf#*rnLQ^!3a%JE%&j zz>$Y<@y=qWUpLmLaHaWIcVBb11o2QY$P;hvOCEG>=L^L{@gs^hIa&LDt)xm$bd21j zn_@galv!lR=JP8*_o&QIDoPQg{bb>u(?ZV{RAE8;Nj}&`0-ufZ+J(Ed7+_>2%XC`h z4TTtv>Zo6K&|wfEM;1X_Li0n|+DcrZwi!am5}JOG#SLaEeiEM-FEo@3-@PJb9GY6C zB5u(f>DQWhbC50Gk)`SMr%smnSf2-?PAxc7n5Aj!XB0#Sm)XGdI(>UyY$RVaLWksS zHS&7jr~HTX8J9#%GScIOW4Rd zL&ScK{0`DGs`L8<+d@n}TjxkvQv8@azNYit2m`Jhg-TgEF?S-;r9hYWX?20XKxx6e>nVDFGA%wh@m%A5(sXuHve-3y8nKP zue?Y!W_o6oi_b!xyRSkRUgc;(W4fOASUf}=v5k(0^k+!j#(C(}cvVtB(_vMDpPEu9 z8$I~k-?$ci++jy4UgUN*L{7O7k`;j_8hRq+0nu}fNjiAe#&sk;y!6W4#A7G{Dh{Gy zuJj$#AJ13cz3LSj@q|FySJ7=5&Jra6O2la?OB?h%t`7!zSm{v%R*V}0OGzdV1sA8G zg~kElQc;oZrfGFPplO3mSpdo2Ksh?1r8`5Yhd^P{2o0v=%a2anGRiMdeNC8=EOF~7 z*5MsD+(p8?k!DSQ4QtbSU`1^N0?TNCO&6BhdB&riaAdCcs!-NG)Zwn))r9HET}hnq zZOEVQWDu6wW$02&j;V#QO;XJBbNtK{bcs1TaZ^=!mx;8Oa?ohmJzVEE`-m00P&^Fq zb)qi4Q2*kRx8al3aT0zyy};3`aDMG|cSEG{;#Qy=`6L+0GZ19FB$ngTapL8(ZYPy( zylJNQae2;8A!!(`v&Kb-E#6(f;P4B@s08_uq%a+pc!MruvM&+)4pD2dkx2`7mvO4? z8BuiE!Y1ADW&PazV!Ln4B9T%n6pW8CWJxi&lGrTxGr&ogG~%)$ezyGsh*oxR|M4kx z*C%|O>5%r^J~A@;$kmNo-H=PNFTvO8iQzoA;B++1IPUKu5WzeZR(0cK( ziQDhiyB{t-DGtibPvAHDSj_62jQT%VMA_$=--8YE#>qhCw1z3C5G)<6IRV==rxs1o zE33}xmEDDZYbW2&TAwHGIN@J-6qvfNwIqtVzXz}%yxlH)y62UR^}|x`bgFGz4LQ#-_C|3G?JYQiX05i9LpD~ z`_Q=yU;jJAAGlE!>H|>w>QsDlAh&@5zQY5)^O3s0T2*_8?GR?D-b_@WZPAmtW?19C*i#586R3)f^H}cs95eWAZ9mgq?e# z?K1C^ExC#U?TWewIgB->=?PPgM$6fV%fVcqp`NT5&|ixHVsgOx$Z(6gA9H z5HCPUlu8I+h`GeaX=k#8}4fgGaQlVrhw#+L`gw_LZD>9;$ zoddDfc(9!rQ<5dd%1?9fVNbS`v{X27QhT%f?GLDh#aFgk@$48a;o^e15Dt zQzV96+=Zn>fj8Nj4J1>KU9=FEs4IS9_!cXf>Z>ayte_C3WmeB(q1ci;b}R3m-dMD? z{#Fhtac8sXWcPW;$vLtiQhI8+Q%{OLpSa(ZL0+=5m86N4X7vYM#NmsTR*PI+Es^s5mfqys zCRwmI2(+bVRrQtPo5<@EU&&I*bC1H8KsZ@C@%#+ej4l-5U&&I_dABoORV-QQg2A#Ll9Nt)E24j{eeK=iGOUXNDV|$&rrTn}^s(PPT8K(-|^4 zW!_~L9WGV~^+fZIMwNXI+8QAaM}PPxEIi6}tie{r=}A#R-%!@0L9MPyz7KIC~l69bPx^3U0E$d-pc( z|B4&PQ9-$%!!a_!S7&y~UGh);`Z-}rny=l|E5GrB&~H8AI$2J)i0|>Tu`tP?H^jyLB#pW~9si17sF%mcZA|AF)u22v;wD^+*(I9DOa9ui*Mg1f z(tnX9lUOFg z{EQHDS9DcPOcSH_nwAOsHIjRcZCbvT zOC3MdpkBM`31t{$X_YlyYM@n6`u;QJoX!WQc;wbPxk%@NPt&(kWfAPrRD)Sv$ZSo2 zguc+Apy3{QFcJ7?ntGwjkO|)oWv7s7?UcPozZLaRU^x;`b`4kpyN`94f0DQwBIQ!5Rl_&9^LjuK{Y*YPXG&)zPGG@335a)tMbJ;$`@+MHXe z&5=4DR8w(YM{*7|y96D@YF;!z%mNwkmnD8k@|A&3-;Ne2q0`p#g|EckQ=Q=GG4|MF zKrIY)$|qqCg|Wh(;uJY@%=s0Bw`L#H7ybAcqRN1WBKgIOq^>Upk9|z z1A$4flM*_XMkt==D_ztSGc=4=_IoEo>#qw^q|I&y&|N=q#X5zaMbEtTH$14cNfb$6 zWC4kN_fkr#=T}rIeK$kp!uflRhdTvyp>h?TnJb!n;-j@|JcN*t(=Gv>SdL`3(ZBY_c z?A@H9HW4b|P^KkH>ZOd`rO)>;ptMCmlh7$&wR?VQ%I64!C<)3SO(%1c1v4GHr1#n~;#p8NsD&n(LGZ8+e zwaoVhe!5yrnm-+Gz2`06ciZ4I4P?*aB_g4ROL=8@Rb}TrJGdGRGSI9cf`N=9L zEy1WDg{)cz+YJP)Knc;Iwsmv<*Tx4m#pNtCO4?KRqhEgga^gt$_=Q7F@N~J{T*{)c2wxl3CYY9Z#4C zQuPgNj6&T6Tx-Z`5aQzSa3kcBYiOjh{?bP1K=)9VRxDzi_80n662B0jK}l;EG{YA9 zOp7q}&^atgA75W&cD`O&%UIDne;1;)DMTfv_*iaI0GxH-@CvU6Fa4JKn~5y|oHUUd0iWA$cFQG9R|4 zyA`@x!vX4srzBblMi5pZ58gjtWY`723pHvLaM_y*ZVz=ry|^X=o5P^I(hMx6tj=g=g zWEU69hq}Ypz#;i1CT6#Tg29rO!c(ta`(R4Vi%^lnKQz%5_Zfcro;NSQ=nC&r$OgD4 zLWia_Up2|BEKOSsh)K9U%JBM)z%Ex7yh1r!3&v;eFKx}WMzUR$N1EenE8lwgbFw08 zjCGF2jlDjq{fJE?SKCoC8!q-g4_kV*1^(SFG}KzQ-c)4TOq-WWoy zKvPxPXZ{_O$sxnR4AX=qQ!guVyuMc?c|c_XAnRFM{TCk(=HJMz0t>U#wJN{pu|Y#7 zNvme ztI2@by)&`NOiR^oKu`&6`g)b} zVf}lvHNkiRxFp4;ryHlvb(%ssvf*Z~YVLNQ6T^aS=_4Ci;|(;Z2@J#d)p4f4eA)D; z2Sri8_L7|%o$me-NEesdE6@#BQoE@IHkW~F@ZYY^2-Mtn9{!|TM#|`Zg#36n`^|h? zbJ52_>65)AJywX`L9V78t?1*~cX_X=OZsjS58Og;MHKzUA@3Kh>?LV26;O|TyZSup zz*>tD^*;rQ{NEPne_yKqC$E^~lTb&k*crGnM&JpSY9wD=mxU3ZLkC4`Ug4!ym6*(_ zu)NnAWS)q$ANoDcSQcMdsvpskrj9RZ+3*Up_RXmBd5mV-?3s+p_PImweiikujZ59R zM>4||$1Ek0jR`AUZqdq6+wC$d?poLs)(~Hp0oXm z`e)F&V8?!YPRb!(1&+6}MT!+Vzuv4F3LDa?xD&lM_uVy}dJ>sk(ZY_?>L&?Xi zEi~V_^0Qh<&Ab}2a#q33g*2V*W|WJtM`M`{En{QMsQa!n#s{U>{+HY6e|T+Nig@uq zJm$aNm;e7B%$qD2OnE22P^IV253hs+o~XspAOm5w@wCbzI^fe>!m{^Kg}?G zCnLoqo{tCY(fRnk?!=qaahZ4GJ_PT$e1F*p%hM*uV%~{NeohMN+hWAFTZc$Hv0A<* zyWFc?i?^4r`MEpysmBdy6)yB7T5E|2Yo9bedH36s?BU0hOT@OUkDtA|FQ9r@I{Yc} z^!LCDgdg=i(shMKx7Yh_;9b?-s+CO0cZJaqa?58H#=>6vKN0xDgR16I{?{yDfDG-F zkAXZPF9n4pWuF{zKl#3rK&<9*|J=x$O1!}YF^7vQ7&#hXX*ZkWpTh4e-Nu$t0P z`@oeiLDS%%JK2xa9PDq}%0fid<6#o7gIR$kk>eSfNbF48Br_Zx_`ZHe)gaJ0e5*LR zhpXmeuUuQ)hWt#>A(?HtQ}w6&YSolX*sJV)wVzI%n~f7i-<~V;(dc;}&cAwd_qCM$ z!wwm(9o|g`g;U)XZ5f+n_0@SMnz7@8F30cp!Y>4`&iUp)MEwam498&_PAmzXE#X>n z{Y%nU^8@^(F5g|SCRW@N)gS5@SfzjZF7sy4-qp3IOb$Pl$3s_UmjBi}-SoImE%Wk? zt=;Vl&7zCP*D1UXOs(sEl_%UE?Y{Kyyf^lf*XUsv=klbae7uQB_t=Y(50?iikwe0% z(S4a(H21Ww$uqtLhFaeUPZr_^cOnU|^b=+--|?@Xxi!Ap7&F7Mx-=l@m}q<)G<7OL zdPL$7B6OcTY2*p>l0FExKgqmwE|mTY@s`P-?Rx9o&b@S}fZ6`UGJ=pEEEFtD` zp0~|XSs%7PzK64=aA#~fK+R=U;o;@}8=vy1STcDKsk1;+_Yu(hObWU4JX-P`uhZQ7ncpi|#y(TYnqg3+~SDK<)oh8W*GV9llXcYOHb> zja-!NcH~T-vHb)5TQ%18IM|&3+!+@PX}z0rD+PKfLkoOql#Tth()ii+@c_fCw`1ko zud0=tjNv1b_0;PD`T4y2Iys!SJjc`NPh_|}rHRSRFver{XRW-TV6N!bKlhG*t56Dg z7%!Z(hjrsu(|W4-=GOghSUYbvh`Fg2T*|q+tA1TpGW>VI71xysOPQC2-xWUW?c964 zI?nZ8RO-E8@$e{QbyzmO7c5N?b=@}Lu)tR2Dxs~jd+!eUUEIx-Wp4k`R^F4LXYp=q zYK}m<$jEhWm9I&Krs6E3mKM`1M}fi(Q4Uc)Tfs*NRy3pA%-r0}=#s7~4|lv#bxn0{ zskHI^_6#>MVLI8DZZW$hBPwrLiXN*E-%r^B+VOj|A9G6nQB({ru4b|vi08v6#}z(W z4#9?tk|05$n^itsoC{u@hak3HY@|vH{DkbgwQi6D4zXW)WqcDXJb|$?Ese093|*QV ziFoTRRT#v`Kv_v~r6T%h2ut(iS99`+rtQ?TbJt5B+#=(0|2&E?Kf z65=QCD~v1q{ZT`(nP;tm0i3U&j!X|D2Bh4KdB@FHg3)1_rZs6XXZqS&Ooxb}RN;$8R8NcMW+<_LI^4$}!Cw52< z;x;F$7N0y0w{V-9iy#>0h*)wpRk4>3{;C2w7GPet$mCf7Xizx32PgheIONkW?6C*C zcSD~Caa?jMLlP%;rAbbNJx59?dpWn_l`I+{U1xPlQRzRwjFG>LNzLF~=Y93fZjxil zbc$D3*Ihe`5&4w7GE=S z(WctvFh`F!yDyq;HiU42k|~NGV`1OuFfz1{+AnE}Sr6ps-_Oji*VO<#`ZmL64))LZ z3lB=K?f9pT+|YXXC=W z))XmK7@O7B$ip8#HJTL+zVQE+xKnf_`R!?srCj1s&#u7V4d>RdfOh8td z)J!6+f$<0l*?3n&h58>QOPU&2AGWwFkRVA2e|D?>BS4@Nd zMZmZSf(SVE`=bQJ#>lCkikWB<0zdYVIR9Mp&Q1{54;(8b%cwQCJqo(Pz9;yL_8&!{ znt2u-{q@VvF9l6pjqWvnm%Wu{rlCCe)d@z0rpijARH)IkQK=%^9D6QzFmqSqP%W6g zm>s#5G$W|C*d7rm&PECZU+yZZLRx^Tg9HG-_m?33TL-91wxseZ_3Aglc@ zyq&c;C2F%F1`p5>g3F<*B;x{4xMZ^7s&-XRsAQGAmTR)8Ok#XikF!c zS7J2$DHJ*J4m8J%WpARaYnSiO!dJP|-KFBP*J--Mb*S+c;G7 z%aVAR6S%)T_ifjb&QeLuD>6hF;>*AN^b}cHpO`V!3AL8taMYyy|`~+CS|7^(3o&@F4>N}Sc zHr6y60+2X{7%3pbNi%i&+n*Uj;#Zm_O>-#or>TL_@^&zgnhJc1PqZXC<41Ct z5w2fE7^!ZWiM3vC{5n`%B&M&lb+vq~?pvQ{Ez#7+zdhGYN?QgCk;qZbtF)nofyB1g zK(4BYgi;SPjEK|QWm?PaX9g=wr#S$vx8dBPY{0j5tYvYh)k7){^jcvHM39LrisIH zQC32~q688c&dnm?{s`EI|G2N_M8UkgZTIlH!k^D~dl60g6I<*N=_6f(VYPhiYO-3- zMjvnd`0PhkdNIAB%;cXYf4Gt^f*+JoH5E|NA6VHoRXgA$$Dw|l>Z(3ezfosk_ZKju z$TqT9jZ57Wf!n_cPgc6YwE8mzl^rZd{Cu}^Y=6BwPU&~*A@LTV7$=cgrPn?Px z&zM%YE=z6|0sK0TEX1>PSiA&b)eq_InOS0lGnXQ1u z&om@XL0Fl?xc2>{i4ooBHXl^3`nmq)3{0k?LmY&C1aey~OJgs&4=X%3_sezU)A}y~ zQg4gu;`YO?wzei8>%S3K--SLr>MH)T==?JW2$rIWb36gP2aM<^&;C(pH#Z-Jk=9jO zPg)v&HarwwPEQ9!i-OL8m*;=GPLWMFeuPo|qp)b&zW^I~IU{4D<6hr6t51yHLOZ8* zL{HeY{$*^Ao^#dfZahcN{{2-5SX`^mW`Wa`zWDPiRWZUmI^Kxm3|aoSd^LSV?3W*w zPOBM2HTuRsSR! zJz1kh=w(d(=B2J$p1kvb&F0z8AWMQ(rLEVuwQ-%bVe8x&?5t^C;p}rdt_)@fC&w-Q z+qK!a83H(MAjosmP(%3n&vl%5P)Q*7)~%@Q!5q9bHCKvsp?pna7TB>$r%wU=3nU7m zFcQ;*qcly-r0w)mW_6|oik^HaToo}Ql?pYPXD8eV&X(L6A9$^QDL`ObZ^V9TuYJ1m z(~H;AYYx*J38+Kgilr&IOQEbpmbg>kPOR-5n}}`i5H*ax#E+a(y`0_Wsl|j;JlDkY z3vqf9xU@!Rgc8J9MSOo;kcWqf1O%AI9tS!O+FLm zVnUNkL9c<4va6+_qLvC@OD`uCINE8p=CUid(_$aU#yc+L;WA{#j1sJ1P#hw2Of1_? z#3t8_-7L0*yMlSL>*e|V{B91a!Q@Jpp?R2eWV4db);q0Wa<`&5<$JJ)eY+tGha2-u z6Am`RYJk9V7+}93>DtIy-cWNd#SsX;^qN_+WPB+FI$OEQwI#`A=1g?Y1G{{C{Bifn2`JcInp_Rf=sfLe!M}Iot zslkcg{`z`X!QY&(0AnZH`udS`jaJif(+9Cem~%7_y>~YT5atk~iY{o#=c>e+WU2k9 z(!I4kKf9#M-E*W*+HCeZ&09%G+Gg8bv5rYsO4ptt?`-z=Y2o1kpv@3WO}e5-j%S6`da z)+wk7#v1lw9S>z~ja1mHFeX$HH9hNhFZS|74A0xEnKLm76|_TCVwXEbf*mKNHU!hyhKGnkJpOEjp#kdEt)hgYgr07wIKTX9Ky)v*CO8{1X!P zfz|9%(1Wn}5$GNAKhn;`(4=rnR z`w@k$ttKr(y*w>u5E&JQr4NL31}vs)Lb%%v8`H(<(opD{O$z~IC-;#{piJge$D`+$ z78qXp@3wFm=vj)ttEIDuf@zrDi@n4_c|ZT-do4ty-E#{h?>wYNkHrcEpw$coo($U@ z(_bm`m2?waWOk7fvEU{o7*^+DTHT=z_uI9~-#?v}ATQzDcHTEf#WvRfF_%8X?y?@g z)(ATvc5j7=5D*d_lJxVuqAYWXh&oBWSJ1vq03yB=4TUb$pH%ZiR@!}j6)irT zj>S3zxh&18a4fkjii{C$V@1lM@(FhN08xL#_X@3^ea~EA)fHh#s;riZcg5a|gYj22 zPk%z2RSR$ht{+#K(>q*oCKWIz82W2=V=&J^tmk$tqMe@Jh{PO`tu9Hdat)1h+VAuo z-&LLW?6{Lm*^6X1glY(bf&d#xH7LWYWy180JHckdxOF01YuyOu%?EP`tN$Ej?E(NF zYaANhdl-)7OXe}@8s^4Qt{Z1Zk+%)h8JM-P*OK=;JLW^ua$0 zmEF(#DpnVitJ_EXG=Jk(5BKgisN*}ip3NAf<6rk&O+<{N-KIwd+^2@~!5X${R$`_n zFW*>a2~Q)x=mnIUd=9q83X3fw(_la!PFNxQvAOweAt8D+gyK?ID)=Y*ScwYaVX1Gk&w5F|9o0 zjOWaV#|`E5WSNR{;Vy^JMs!7E%5(P(hx8Q>*8?2q0p23s3WsEPDnv z&t>svO`N(rvHfh)YQNYSfZFGVjVtR<)%~LgJ`oD2d7m0wC$S+o*!;tfI6+YRcrJgE z6}{sc=c4F#+_D7T3mIv9Ao58nBV{FUX&&9bJQ(QucK|$xgZ+Z3J8SXGY^Z*A>dsy| zHw3`-8wBti@Bf&bh@RQJ1KdU8vg75ug#}$! zPkb&0BFD0%b;wg29s8VUS9Mq6(C^ohq3h6PVTS^Ov6$Y0Xz*2`_el@fgBNyBz6&6* zl_NfQ(iDOCb6Oy9ok|?nRgz|CKIHLj;=iZdmG-1R{Ob4uARvXS|IN)kUFXYIM@}4l z1=vU%x`3?$zyIwlXCde820)l#AV+T#fqEbihQ*0#AqY54ai}IN6Uz>8GuEmB=QlIN zG5q&$N(11b&)at{i;;W6)ByHa~-iD5~r z(+Vcs@RSp;t}3bgvUKMgGV93kZS~8Jl=^{fSzIY#0GGdWz3(0IsGXoP(umV+r$^V_ zb0i1179$r@TiXar-3U~U<&d2(nfP>zV|)^8#j_|ZLHl#8nU+Ydm_KmHmIxR?har|k z&QB6slxS>`R``5l>~*!xFeYF8{x!2^AqGYZb9)(KsW8)_(;*m+Mq~W;Ov}D9v8`$RU7n3`c13q&DW_b*SeL^40+*WYa zca%E_9#=zMU0ueuraype(kiz(VzpZu%T!N+BsV|cDU z;`!pseyoB0-scl{`<5)hs3IFp)7NmC*;ViX>UD@w7j@N*@&VT8mDT-Q?sG6h^Jdr@ zd}i7RMA5<4gBRBD8_vstENb2JwkTBWls^Y=m}chdV9*wdBWlR(X-OkZP5We{EP-Iu z(A5Zgk|A`xj!IY~#@Q0l2XbjI1<$$GOVH%Sk7bu-QC$Iye&(`N7y~nLGa<&o`@(HY zOu@6s^Tz!L5hyz+ydNe=<`2|N_db>byd~4o?^sqS{QOvz3XHZ~ix`xotG`73t<})kuxZCuUq4XbNv=osiPdi=gek@ zjQ(oTuk;!E!WQxttkx!M+7gkoBMv%8XcRNEn@Ju(+Nc`0?*rLxjO7UZwTgUtqTW1b zH~?2IT#TyPeMNqtw7KMG$Uxlg@jLI9c7qnG+Ce-!B&Vg|^PbE?AH=)-;uJQdT}ZHA z_C{RjRi8U3qJLp&PAiA%hCDA> zATd6FW%0kUiVV*_j`hpl!ZJzg)PH1-Z?@k$w1k6-ip*4|-N$W(4H>#h45%G|n%d9h z0J5N_uBjN?VLQwviUh&F*7~t#G(kBDO{_uZFA%IFrDm4Ia7ESq1^lQ zyAF#@vIYND_CYs8+F~17rDHH`TYd(NFs-hHrk?t&8y8@WR2+y44#nh8!qyM&8Fy9q zH6${oF(&;{jELdwKtG0J0B7#@<7dIgm&93IaR%8Hp(COTp(lkqKkSekXFfeZ7syw4 z91D3cK9uI#;j5zCU{6?7*BMfozGEZj=I|5PMV$o3lr=6`tk{&uQR!UT3nNXOo$|#C z3{6zY13^l)zB$5BsM-z{AP$0iAl{IS`i;~>`6L~A5~n!yIyEPk1%LUNJY4o4MkU>J zQ!q)OQ=YkMmfZ%DC*U+hLbzwyszMCW?LU>=Ya0buI{#6)@7HH{@6KQUxJ2wM`_);+ z$v#5WVw0l`8-SH2i45h%Vp^n_t-!iv&`D*TA#`>^?I-E;-hl|~HM_lYqgsboQ_sLg zr=Vr6>1S6d6G~z+=s6a!ZEw1)xGhvmRrg!#-&=|~7n)fYX6c8i((kKP+28b;Ox^ga zwEo*k{`1}AH?0sq->2ii?i^`$&~bU^F#~Lg_juJ)A4OP2FLMB?k?I%M^)vnJxY*x=GIZk{2@6=;VU2WcL*<%B%aW|k z;&jIzVaph~P+JWUELKzSpnTWd4NnI4`ykh5(&l14e7*&}W>Ys+X4~iKa>m=E)_WIaxnZ4KvPaAMnF>KM$JF~ z9k=vzn?k!6v(q1^pw|yUpeg~KOlx+!Tzsr`Q=pIFcWT<_(0BemqF2*2GZKJ4XmA3l}ynHOpoVk~Ty;PdLyY397qnn-f&5F?8?YQjk8Gc5hvsIw4~K?NNjJ2Fg-l zg0Z%Pr}^RHTdoaG{iNxQ+f!#wYBT2ok=#Aqg*&^4_)aUQ{7@wI92aY+>a3^9ddv5A zA0GUW09mr7Zf<07(i5?Daxae1I@D_2zXJM*`zajWMi^^uMzXCqb^7AA@C(xEs&FaT z$PmHKeNQ+lsR<)8A#JTCD!P>0-kLc81WZJ%?SUAZ z85jzd#-#20W&%yZC#0}s_XzfFy2}X_i!Rnu-yG0KJ)*aH zPT3=+QbJLdHp6@^%ZBOFW-!-9E5W3bhb`HKC5sZmgura++M-Di*&8n|WQbAI%1|D0 z)@rgJYSkf(X{fE|N%ICVWiSPgfwEsZK@}SVi5ZWA(A|3p2meg&JOrfiz8vw50^kFkuqdRNy zCB27Ps;x|&UQuOm2{YChyL=oHnBJwOGlZ`#KpFmrcw}{MeU=cjOML^sfK-!u_LcQ_ z0t1v8Kb9^FLJ-9H^^A4ejx&#$KZhdkuK_0b*sKyJUY--i{8od`lWi+MH} ze#*=CP-fkZ2>=h*b?038z^8NFSZC-&rEI_14vm=`@({L+?j}oxK5R$5qyC6u#}3mO zWigfRXsr{CdXR0~Yeu@U6JcY`LwG4F@TTo9%NjEZWJc-kEMm00P*OBHnwiyXeKj=} zriC^zyB$k=1&DsreMkKzIgZbgD946L*?Bek^>DV^9QEj~g)6imr>0m}I7CTF>i+0; z-ylinb)hKLZ@C$h#6gxny%jttI)gn5{oJUy-PZNpS4$4K+)_7!&+K!uBD`?GwCTZ% zbOFcfxBggS&vQA5)^dWPvBrD%}Ho0RLCp6B9uGW zszPl7G8my!*B{2)>JGvMfLtq-M={guX7f-{h@P%NO)j-}dFF%B$ho^#5HOXgJ{c*N z`1fpKXXbgB{Y%BN2(F?(_%_PPUz-FK^ceoZ7;$f%Fl#`HoI}BJ5*{ zG5wW>QKZ|HkHfe8@2-CNA@3t9b;vTr1(A~=3-pOxV z^Hhd>R^I6Wgg3>H(<)4JM1sHb6pS0;UdWlni8vwvAZuewBu{4@NA{d?PPmQa2`MzP za@H$DdRkl#EATPd;yFw-)SFH#JKiLh5s~GK)AYRL2~D&cAv4rxn1R-J^*)wWi%BA` zxicMOA=0!Dm&3B6SPi7@8I2Y5*i-y}J4Eecg6H4FjMyb^ahu~SY~oR3soJa0J7idxRD#e|Y*7P*RMk@&?rtHOD(7aU2~I*tL` z0w{b;hL2^xU|YHeG-`dw{#5R1(qeZ?ha&nL!8*qgh#sV+SBh#upkP&`dT|KY)`>Zb zlg=8r%RoExl6h2Edi}Wt9hj&gE?uO|d^yV;WWNQym}#%3*PNHH<{mZVd+lNC#xKWM zf(L4RR`eDOaS4jn1rp$C`fvV@k43{ufIxT#n%m7+Tr^8ldC!b?BrE86y870z^cb)u zTPm%mpLJQR%qLBs<&Q?Knrco3)lu&#B0-`bWRFe#{N;B=29eS?0*~^w;iL|f{1l@cP*}5oU{@8SJb9W=6;6gu zq6FQ#s}>r+SB{WKp=bTIPllLXTdeSk_rA3}s5HVq2NBAm$jE}_KO@MNX<5w;%Emg? zSI8?PBW|MBQbA#rpX3G#<=CqP_6sG)TK22I2xZ#3lzzj2T`SDxkBZATb&oprEtGr$ z&io$6uUJ4b;wOy_z_Qm&%veNb5d7LFwnpj^CTm1+jn|C13?{g>!sM5v2hsUb1u3ey zSMe!Iob|WGwIq#-s<3$=#H7Y6JKa&S0Sm9GEOZ;UnNw;$W7{z#A;~+%kM?R~bx?fe zmKbK_xoJ4RxLhOsc5qYs7UIh`z!Z{DYPRVW2zzHXhv5CO&d% zeK<>c)3GL{P+DtV90)%40w}Tot&Fh@7`XBq09Pg}5P<|xbEt$UX#~`; zN00F=p;bu z?$o$Z(q+6fHc&RqPyN~|T!h7HI=?`KylKL2`eyCk@NRH1!klsWE)3-qRvL)5D1L7^ z?~o*N*6_tkG2iiiN2~s#(h2ic>ce?(tAXW&1N(rm`s4H`m1E+;%gj=i685C6t31=- zA$L(xgR$ba^7lm`geK(5!el7v_*W36d# zXPsYH-o%bd-F%}*b~eH%L=>=Bv1liwa`pB=v4vVislf^(nQLV?meiI*rQf$b9abFN z#1H9^EzsYH4|DGKrn%Yd=Vy;8FFDy~F&edcfGe#ZmZ|30`0lj{4SAM|5equaRJxrThLPrzvr?|t=_TlD%Ia&_ zGH}gMThx%TK29gWC<~n3@G21K_hn`Y!`TzF(TubYel;j_Z+WwAiB#Rf_W$Tozwv<0 zSYMSzj02`~2v>YUpb{u^nTkn8(0C?+K6mJt2Gg z`NZJ_+ctGkvBUnqaQEiHY`*c|FRixdVyCUDH9>4eMbX+yNdy(KQ?>8ZzEeuu&{`rv zthEHOl@N;BTKihNMA6n>TU$Hj``q7W<~Q^Fp5HUSGiT13^T(MnW85U}TW-0o>vO$7 zuUC7StCVOaui{8Bh2z-}3O{+bmrHlu0|$X+gM1eStjIDe1Q}r+TG&_50pg`qFIR4< zXJU@q>xWhW_Ve^<4jB@wmoLis%rjj_jblJqajED}Mh$+4dC_ z7Ui0mKmcvedK$#T{rAz%gg!s}D5A3@6+vXh#0YujDN{eGFC&nRnGVNp6y1`UD>@FM z#x5N=w5g=9vg-xt14RR*>(ZD|3?4GaJL$S6lxLHTayjD>5z9K6wMDeD}p1gQIP*-(1*(AfrCUi-K0(C|C`C)6Mr0S1C@RN_RNhyk` z2_5y6-Z@^6M2FWD`~i;Q*t)WLqq>{|4VVC+2=!5^qXg=&d|>_-8%FpEYlYIb6XU@Ic!=nde`3( zijpp)S_`d&g;IF(ku~T04i*V}4p@qzp^Q74E?R4Y)kspifplTWDRLz6umF(5^u`8F z=&-acWbay^i8QgD%6wNjw*2sSoFe8?^k@HVjr?1ZO}2aeCb{2(tjBjAI_BEyKDIKz zcjtnyqo~G3nhdScv|4>23mp2G`9V~)(sah5W5 z-jb?wU`rg`J0+qkKm9d=h!7jEk+itsmG(6wi+F%qZ^UYhb}j2D6J2#dHoOWj=P)po zLA@iF_P|UbP@p-N6tH6JO0TOt?OwYlvPF;yc)^eX2O@_Yu0kn}T!~4i_2D`D7SzHWCB`^kH!9OQ_FM%{8!yOz^OHAF2Tgi?YhK$MJ5&h{V=_KwdobL`Oo5%^G=8TxU0ak&VR6{deXgX@b;CK;xGftG4Vkpi$3~^1C zohWhS#BQGxH)}s&a?BZk8d9JGl8e(bLThU|HJ;>|%~Z7Pd$BDFg|08ttxmu){+_x+ zOkYi3O>eS&&ASSp#r+hgf$Wj}G?#6U@{eO4EslANsdQ)=0OTY-DXKJ73&WrqVsNYt zap~lt^dfj#BiiLrnk%%)sZQw{9=&-HB=AxlSpY_2xy;O@1x7`Ptl|EMCD!vgFpa8k zdtf4u8_*xl!5$lS9BX$F&bmIT(0rb(iTxgW(kEs}FxvYG`=%+htVPC>v2UzR^#5#H3CBYtF6=tA>sQ%z)-o-L_o81Y`Y?vOk}a1$w2(>R^he%V@cS;TTm9x(BO4 zq-;Iu^R#-Iq5z%Y*nu2T`C{31YI}`dI-o&xx+l1o!D1QjFow|S*dZ4uf1c--9q;42 z`Y(NQtKKkSYOm@AhersTfD=-U+GL%?`5?B>l`w>8pnm*lgQ#uUDT73~*-b>mpGZUA zb9M)iicGB+@vK!J?-Kc9jHU>_VovXt(In@k{$lT}a&>3vKVGEpnCwk4>a~Fl_lEdn z@P0j85Y-{7)uGWH={WNq_NTA8T>;8{cb5`kD)+EDew#r#89G8D$rK^E z9P`#IGnRWrnm9&R?2R2}$E|Vr<;U#{V<#7?K4@tjUU|a}1TqvXYO3#RIx`SE%HU?c z%QaiDhj^gEpvnG6Rj1OmSTA!hkN$L|!PBD5$uqNMp+OuPTDR7?K`IZpd=A6%tn)WycMf=QEvH(jWD8*4GM5r% zM={^n9%WDre`uT~4hRkI555rNXg=@- zY1K7}$16|wWr9TEoAq*WV?Z-LhrVw9j6I`a#LU*d8AFAcAXr$Z*7O>0?I9TS+!k}{ zaZMQB=+XxLOXjr9Knq2)DQAQ@jBA_G3HTL?M4#uy9qu!k)J#u`MonET`&3ry?8HnD zpU{^>c2GRGAwKGkeTGRyH+U3Z_hiY@?={|+f=p|Wa5yXW%&fiYqppoOkMl_vJAqjS z*$TcOX2kZQD(~bq*k){KNf95{F$B#dr`F?*raSMeoQ?(eU;RUK&N6rJ z#6Cdk|EJ=ez(7?c(6QqTRgvU-50&I-(QTu5odllPodO`XnlbIIoW)S9^V(wj`V}M(g2^5fl6}%e|<<@`yglrm+P;ujzMAcF`d2 z0O41s40KPL3uzD)uM2=02_V^xoi7ctORQXAA1;Wkp){lR;ha5@6lVxEU*hOblRIb2 z9!)fS42GvCy<^bm5EVtpJWA9bHw~d$bW@d2&szRm_^reTUk;nbM8`sSt znh>IJDcnHDXT1xoX9`715roECi>IoTzYnS0r`b#RT7`*WW>b|n3x8{FVHFfctQh%ODLqS44pB~NaT zLT_)?n{RNgxAoVVZnC*gV!11S;Tx3UCkp6I7CR&-Yhe;+tSBRmC?gUM10ps{w;ukT z1$-L}KpH}i7wgTmYYthp_WKkfCyV!A zo?ZTj=E$nXQswAq%;&Ajgdt`705Bw0aHTQrr|I_Hk37<1{)a~1IP#OzKQv>n{?jjd z5Oq9p=O3DRg3~Xd#7(S|O-_6|2+R-oPCVosg*EjJApUx{pY@{96=@P`j(C6i%8UkN zQI*Doj#jx$Uy1~B(okB#K0M{@i?35JPS(kR;xLdYY1xn1EdRg-8H%kCMI8}q=5{t2 z(?CK4=Jv4cdq8?0CmmX1WU^^N`NK>G|3YY6jZDE6NxDYDwr-J^i77c$PBwf{ z(y~DYs9Z>}65#3%z-LiFPw*uPtCJe@93aKg0s|@liKU^TGji7G0I1LeXLBGp?!u`4 z=X@&UP*!4F0;Szp*6>r(31CnI*orn44e~!b>138+=-Z_%K41iRx& zqYaMAMU;xXCTPyjln_9arH&=a3Js{HLHnIkS&4PQM3~6DYI>}f4w6uD8U7_7V1%hF zUh)0C?e)LOcodJN|Di!|M($1k$sxmM&bz3HAE&u0qlT3FGk4S072U+w4}fmD0;|G* zXku1E1f-=Ij}ekDYgpfBWw_o_P7U{PP{)wLnsRpudO(LmDsJF0u&OnqSI4T_7pAgI z&i^NFX?!7y7)o2$14NF>9He&%q8H%E1TGW+{ALi!1nd*jTK)6A)31(R)|_2cIg1I_ zqN>d7Q%-nW1ANvg@d@9X%MUuoT7=!!7l+ahte*WZYyG-5$|P?$u3QtG8If z%Sr?e77byDlV;8)E&@+wCf_A-BJ(EeS}9M4HqM5g1a`*l0twVI_J+$iNZ1MEV)-DM zvM3fVQ|`0O%%T7Xh<$ytLP_+>eLzttqC2X)?*R!2mz@}$%Gl*jz)Kdqfr#s0`AuM< zpAcyTDR|qxvrwD68ut$kkU)HIeY|^kdcG-gX#LVj9}rMelLTnqv2Ulf1U>~cxl}=} zJiPo#`lI@bYn?&^$yQnddFnYK;9?&a)`^dJSx24Ix4w%Eh7;m=M;kTK1SR^fRZrw& zr<_k_DV}v!la+mb0Ng^ta3eLLYeWL+)VEo_o+eAm7InobKH1;sbwzTrV7BeH8m*~x zCmu(Sv^s&U3V9|)MC`AJy`9N)S}I{RlG!H<-F!~h4|>gcI=NSy^lVn``bWXo-B+&` z4(qxWKIjb!z<-AsCw(7%a~v}UPt!H7?R{^S@y^WJ+ejVc`F7j9mbr~pp)feNkV)I# z{pGmH#@3DJV+$gm>49Cr2z}jD9Loo>s;2#CV1W zO}Uy>FXp+ut~YFXq8_g|81E6STN=JXoeSVbf+Jq_S5I&5j5wz`Xy&_msQBY02MR%M z{Etjc-nv%|hd(*^80BpWn&a$mMs5p&zce5>W>U@m#6|ofj+OtJkT5ioV8l@ghUel8 zb$=+T?0wk9pE&?&%2-0=#OMF?Rrmc<|Dadfl8J|&k^6PLmG7BPmqviwaQJMpd!>6V z5HM@qpP63`oIf2{OT2V^c~@&D@Zjb5vk+jIZwc{j{}92uIyHJh(?dK<&GZqkri>4p zk!i-_L}kvykG+^RLf*fwB^HSB-`YwWZA*$aBt6$8R|Yz>M_@0Ckin)_&St;?eU{nG|7=5>mb3#iet*<5!+Qm?}i$e9!puF-78SD zR7=%Dh(BF#%+}){Q8Xa7OUpfFa07vIn%=He|AkuD-gZ0oaI|$g! zVwOmQpPO{T^lp|DwGGnT;imj9Fhm<&L$A3yqw-^Qc_oc!h6z8qo!B0~p_>{%gXx+X zl&~vTKY1r!j(_`MCg%hG)05RK#21p^$YHg6P52PSjdWQvV^X{hzwgy-x_o0&N#91! zr{%Xp7V-sjP${rB`A*(Ndjd#P6!eNJ;}|gNptrHyx9OmRr|9V|u34-xZY;m!@YH>{ zHK6x<)|9{hK0p1|P;7{FW_{2f?<B^728|R}+uQy^oG)V~bk_(vF!s9ET3QSj?lpYdee%@P}`gO3tbJJh-~L zUIn3S=46sh-@K6Gq?$ROWH<_;u^(7bV8fSu>{)PEL-Xoqjlq75`zTJqkr54o2>fvj zfgY}o#6HIoM6Uoo+UMH9l#Yhx(}?Nm;C^s5mq|_b+Yfb$E8LS7IbC=|570TwnNPEF zkNm#}4QoSO>SpYFC!^mkF^HNA={&#|(*9chG9OS;&>}I_NlNiZi5n9UA#w&Y&~k>} zCs}+=0g0quK1X64m&fMYWdpm|x)`8i&avN;06|bN!0pP4G=lgM1l)wXauNX@7hxl;>T_9b7ooxv=u9nNXQeSTC{&%XLNgMh#D25wY!dMk24@ z&M1_+kwZn=WIjkl*lD{-YE!N^hc-d%sNGb$ftj6;I>!5tDBU+K3#{JEr>E$C4> z>5=VuqtO+ybp>|l~pA=uo!+x;M>%iw@THGCmzH??h-tH$E;8?jp)xS%;nDA&(ac>He@2&pWGhY3SFVJ3=U8{@GTzlI|dw(s}PgH;y|irmmn#j_rIe9$~~qAEGWJ8uik zrDexiVNm@DvPjQH5yhUmq?3e$)x_|N)V|#<(x`H}5q}UDH!(F6K2kZj8~gC5w9D-R zmSiB__`4KEklTeT^}!kA8B5j49EgG(1ldc%$4DR;u^VRvB=Q?`gv>`rlf{i#HPRqm04>$I(^^s}~Tatg4`L23n1CzWhQ_0Sa1! zl~_g7uEs|t$+`x*!k62ht?htEZG6C`?@9@2V%z>W9gPBm$9TYqYJstbr%1Tb<633x zJO2*vk5Y0S>XZ^XYfau}j0Bu$H81Ppo>3*^1qII10ufdDzxBS9c|$dOt0*2Mx=i!s z{9T|2FGX-0&=?f<@3z_=q>k&=>o=9}I8Xz8da#xAl2dXMPmKt&gITlf1B;bm6tQ^> zt9w(v>l9_koU@VuOos8*yB|Z`M!fzi0BtLy1H(TnxoMxX7z zj+|WBzxNM~_DR9nEvnS%yON{xGfc<#fF`bwmD|T88(smo)=ld0?u6D^u=gHSSz{`4 zhMc=rn)vt6LYMM9@7KBh$l3kjvqXo5hLa0tGi2VaK$XAiLrOCv@BbPM@3zK8t~eL0 z(g916UAKQ|*nLl>e&ileMUH82m+eD<^+{~xivI~P^A6B5+8_H@Px_Y)D9Yrz#DvwX z@&0`rFn{b$Wdan?;fTc4a6!PmaBb!v8r@8_Q=`&^P~&r!l}| z%NV z%X$r-cwC*J)nxbS3D)}i_JuPn09-7)z8J^^^tx)#Ss%3ny{_bLrVX!CZnM^JC!f#I z(#t*SEJx>gpQy8Z{i8^;rk;<$uePmW(4&MwxTD>5Bp7JS;!LW|AR(*R&tW3v^zNb~ zEvDes18|k^0JkFarJ%!lp zq7P9pz84|WC2F=R_4W~p*Vpc81w_(dJFaqPFAU4b3|Ex=yy ze};woN%Iz4C7rQ-RXH~9JhMowe5t7S0KZB+yR=z+>`V6#&48@|(B5CMPLNs#@&20R zIK|ygTjhEhkYaOZGe4yki*XVDVN@#%Or0t-$|a5NqSwr^r7kJR7p)4>C^hkKcf)D- zpYGdiayy0BZjgW1a$h9}f+p;1JecOZxF^4V+~5=ikJQv>XQ(@xdjOHPBx219P>+F_ zikW{xG8FnTxy$Sr@pe^v~?hCR~XzjgymRLjm&t)qH zH_d9K5sK=Qaqcp4Z#9v{C;?j)`(jgC7rN*4)fWLQ)n2n7;crL5+09R_q=Mg})JT%P zYufwTR_DO%`HdBiiqy;fo&k09wq#13<6*WV*-Rqsv}MGxma?Klf>=`676&ybhK~vS zKI7~-_O!&B06Vt;^Zpu(2M)C!9R1+%jD<#f{S@dAbipKSu!;SxE zc;MV+zpQ`*4W8@ceyt-9ExeRf%T-8#WNBwK z+UtEa2vOX{8JOt`R7Ssy2H@}7#EK`vYRC*TMpHJY)43diVKLs>AB?KvkX988rol1! zZB!1}Snx)D`F8zou923eMBI2+xRv^8X8f%KF#f;FlMf^_IfgP1>H+Bn^} zq3RYyt&%6YGcHse&;8S!tu!aH4({IUYmrSU9aX)J-q6$= z!nL)!*$(S7k(-K}O`Zh~l%~F3uV#-m%R+N^W3(|o&^`5>L!Kc>)cK^B@hhnxG+ME? zURap#l@X%98&Hggc*>3J<{Bs?<$nfv_@*`(F~Gx#>8Rt_3ZI{sy&!R6V_>)3CPY$U zevVfnM090TKU>#Gz+X=HerIp4zJY{~Q%|OZrYuMgCoPJXv}I>BjwJxHEJm7_iSG@@ z!$E#(HM4v@c#{ur#9TmqvxF{toioeFscHIgFqn3E@l$3zp_GVW`{{^R^V86tF|aghMSH$g;>T>H^-g^w^7{NVVZ}SHdNLyLJ;JLm_ORt=m(e2QWIrN1B()5|bS$w^ zzv)lrHf~Pc4|SY|aV1dZz@L4zTRFn@bf+u3hS=O%x0Py5Iow35&Fu9)ZeIrF{MMgy z=*@v?iLc2NhmxLfS$rtksOVL^B>=H zhZt-!z3&9hO{ikzmBCQwIxFVexGkIVHXI$bDWmy7h=RUyZOK_E>D}CTVwx3r;UAhJ zk7jC^mDnBz{3C_vJidi{{Js5N_|4G^7_i}(PKIhVs#64$58Gv`iIgLcadn04jqTyl1?5e#woF1e9*AJ|A9b5CavL?K&RHynSSvQT^LvpU$o z%TPcgQQHTOz>*&(FaU4}VZon=OQDy}ZbM~(oYnl#=3C)L zi8zb@?ZB8ymDe%nzoZJLS(OvTu&|NM`MXe4RN zSU8*p1=^z0ey7z$l6Vg4pA1weS-UrbzglR9~w@4+ufI2HRG}su&%qad;jD$Y` z_I-ji+IAdq+UkoCI8Js+T#yvN@M5T#sD(14QQ)S?**B^$a2(2ZQYB&l7?V zGXq{nS}WAwtr)KiN3>6l{P7%dUpgWM4mLUMCv1?dxH@O<_0*YqIDgHQKrnK~o+J7$ z>Zu`S9u%oBn{CP%qesC5*jn-9&e@>p_inf1KW)|ak*7CB*o20$#qg*+*aa;5wImvo z`X4=C+CW?Ir>>2V;gNW^)smmmZ{Jn`Imc>+p3Y~{WV*NvJnDyTI0WXD<5D;_4pVJh z>M2#o<9{-kn1m4?{#Tfs;YSTYv#}^@9Ivp<(qDop9i?`iiFH|lmd8>c z+8d@!1yW&=On;2 z8frKj2oSSWd}z&6U{RB6uuBK*BeCpskFNiH{ETT0ns{8FsD-nec#>xQjh;w%dG%pHQ`GhY%O9vq3|ChYy98}{Lj{RVJWR6gFY#0v z(Bi_K0flG2kpYS2E`#Ei%$X9$HAm1(tOQ9__g2p6^>MS-{-BV%oV%f?eqiAP_ zYjA8nO?$7<6{Y%e64>0a2!(~%cP6pMoFj03p>Zn?b7PSTetzu$x=<{k6Q5(gEmDoKtiD4%EcmxTnq^H*lu1344^ermi&X}o_& zhgeLXEiH;neJ9_3X}|fcj~1ATm-PgGV(WgfZxC30qfXyt9~4rq%zP9GLB8M9B=EZ+ zV`>}PC!*EzZj+yd-f8h-XGqQNXH`-j3kZFetct~SW+i7s^pcmd@vH03V$2O#oos&D zv7eJ5j&~IoH!4OSWTtWQzn$)WS9SJwi6<*Bul&=RuGPikWmLb8WUxTHLwu5DX1qxA z^N8<7pG2zuDq2BrJM>B%wS~HBllx6G?|I%w*h8$0#L+%q9ylInV;?>*qI)%#qty|1 zVe`_aS{=8)C$@>MUt(BbFf4qzEeSkbu|tPubN}H`IR>^btT;EUXkQJn$w)H#Xi5-x zkh8cS>Oae>orSN%4Ul5=l@}?ZVo1(W0ukcCK@h6o2fvMyZhO|8+*Z{{Yht8<5w5VYUY^k`VK-p?!MqJgsJ{kQUD$_3!{AE{ zI-AR=7qS=4uYXaBzC6m0*HV6R8-G_;E&ZJaS>(m0vvyeJ^}2_pk|nv;T55WDG~zgk z)fiMr>i_E6=D&0Uhvm1;zU!|{L@o;laVhmYU3h66AjF-(LPA8p#6w;6R_Q=rQ!U>v90X|`8w-Ow!=q7=%=`)anlE15%)pbt$gzxuh(f8r;B#}M@ms`~(o+ExgiN0c>u_5dgGIVX0r2Rq2@@4fk&+|&@J#+abIYJ-^ zqL+~oG!x`~?sFiNwrz00UVX)k#Q{G}T>^>b0=#4c=juL<9|oe1$X;Iwry7t(2`7IU z^E>p*rtmd;dT{Na_*+!HdSU2yLX`TS_7^;V@9~}WN@NcngzV5J za&Zk7luK{E$m?1$hIlC25BxoH({_5g+{Q)T2#uGy<4if1j3{Y(?JHe&UdkXo zR_(1swuL4ZGel!=t&d}62BK34r^83cIih)|{p_Jn&^P2AgcdW=2*h!VivJEV)2L-t zH$1Vkz5aZ|%kzrX7xeD*17jX&xMfUF8Zwu{!^hqrFZeL-Tv#gBk+3HRmIzmDfT*uqvz6^`NY#76)LpV*9k7 zD*hr|jm>gE2FZ>r#4I-av6!J?jO5rh44W(zF8b%Avd4!I1Q9G=1P?DlGv14qO}u1m zIEa&RClZldqOR&oX&1y`4i~>f^HeSfe{|)NKp!|qvJ|}>nQbx|Syp zV(a#?x_$i-t4&ocSz0I~1KlJ718E$y$OXGFs<(5mhO5r(56dxEwUV#*=7U+MIxDV< zm%lW6wPlr86l9t4?`Wm@nW%KJAdi-F2b!kc=qFQ}q^+C=1#$$Ja~oc~MQ@>O zp~!4!@9Up;D_LjB0lP}_;Le@gLIf(g5GxUM{%`xLDCaY3mA^W7%Zz#jgN-h0t)!FPt`(I^T@(-W9FR&c!@+ zM1TE(4AfR+xgjS5)bcNh8du8xI_whnNTNFmeYKPR+;@GTC4=i~k-;0$Pu4;4t{&ca zo{sp#>m$kTU)2kTq?8SS(lC$2R*7%h8>^#7Mmj>V!oNx@x4IISEpKt(>tGP#4b1fa z)lvtho!yu%oYxx5Z5bU%r{%w4d29RE=1m{x=V?Ro1}%*x>~EqvGZB}j9^0|dJhiq` z%H!aBv)4cDj)a(PY%(h( zPg5P%@(|r8Vxco5+npxa)P@OFdN8700+Tb?`kC`Dvhm}8c~u%jkwZU`C_OY?&i4x- zZ4l%FONTfgQ!HmA5}Dui@67x&O<_{0CO@|MZOz zI!;NI+aH=Dh3h=EUR-IgI^1~^c-5yerLLgvpICnu(5*4+L9>- zB`SQc=dyh0(QO`lN0eIc6&+a~{~qdKTNm`#jSq{KE0K{+h5BuCrQQc2Ok71afk>q?oEkkR9?4Iz14p0 zl7+l@hXG`uaMApXvnArNCRh+1wzuuO8^^8AHV)Z+e^LEfD;UHJVpN&p8B=030mhE`>eV8I0ywUw7OUE+bd8FCy`R%q~ zjq&<+%q>@Ce6yr2Dm+pkd}pmPydh?ux%so?S85 z-~4^J)}NS2pAvjO{P(jb&$G2mtj|w&$2@HAaXh+p^5a+S&NZ){pTC#rFAXGoi|_{j z{t^14sXH<4hf+SzVqN~qj>ov)5^!zlNdf;$iFP;lF7UN?I)AF)yGOOi*)kGpxp45h$p|TcKW0bCi-X{hX#qQ zpO@$#JvJS`E8ng1pgOVT@+`?N^f16TzCNWxodtRr7Vmu=Asz5*;ak|>guWd%${%k#7NpK1U-1|k zu;Tk?C+i9NC;U?sU-W|Y=juI{M0yHSHFm0lo*S?$N2gkacX zaIgAXw6?HC7Ug}(SS=NbB0x$o3|EZPK3v+tXbr!1Km2`5ASBL6oH!%wG`u=_i(6#r z0|IAc+?#fKQ#X6VIuX1spzJi$AX6!(JOT+D5g2r+o&n?=pHL|vH%6V8Aetqu>#uj? zU)0u{OSVfqC|xlZ|IrIaHClB zHcRZ|8R%1#CluXli)nD>rCAI@2VGv(9`{yul>J{-cg+7L7cfmWXVr5KFR<^u$O*Z; zw?-*RXzTm3H|6I&lF{SjBUPsIs^!Xy6VHEW@aGq<+uBivU0#)6nd$EQzHPJZ^WINT z)?ezVJ@a)?9>bS|zt1Cn333NfS6YE>cxk7mrrf}be-$*&m7}+U9_ejm_HHZhI}^2O zzb5D1@~@wI^!<9%(vFXooj1AZN4`x!pj*9lt{;zi*1c~b%;@QeRj0PUHA@Q|v)5+Y z$vbIp?6z-v?t}NI?v z%LSoT-xp|feuTcYVLjO6QOaXJ{`4^VM$OLB$vZHsxYfo%eM8d+A9TR=GTrl|IW4Fd zU0$wM4cbvifc}W}NMzm(Sq>@YwNQdCX>IBjhG?knw6XojRMY7ZHv`micNl?ju*)rTM^g6fi>_jRBw%A1q?`; zj}j{EfsRkQ@W@@*33oVuIG_Eu6N^y;{Fhgcg2+7nn#!UHHb2W|%<;7ofY~g=<5fxK zt0`?Z;aEL3@8Cm+`+ca84t)mG^c=mP4excfM#bx`;==2^i3lt!7BmxL+b>{l8CRj| z!lgkTcnoJn!900ZXy79??eevr1gDV@7qLK-Xj-c9U9EaWn%ErGoj+iWe zg~G@%aXrqJaR4t{xS)bD(gP#13I`B4e(PeUN4#oMTD+Q!5SP;%?z(qpYmLtf(sdrI zb;V>obg5pG!TXctZnxO?iSx+$wq=xxLky7hAfcfQp}dFFuP=q}n4zzI)iSDaKFChn z2ZYWlm|3T7tO-%!2J$2s`}J;aq?pt)rq9>FKi%o&z?oj8)#hkw zI#BeskfTo}k}uk#2;mpb*`~G1oimS?XMJwDMcr!O;I6Nf73hrCd@;Xrd&%$Xlu@Un zCT6u7Uaft#1r&o%xpRP%^@oUwFS*Vk<5^vv7+coDU>b!nLT7w!DKGsL9G3++ucV&) z{`_g*-*4@$io@NHpVH6>(a;3Y+_^b@`H}(^(jB#R$FA+*`qDs~E25L-$i=H| z2lX^k?5|CZx@*1)1l(uxesTNKhmL@(`)A31V%`=5yZqVJThedod;fiCp&4XOd{C=< z?M7(ikH|it^!X;J=%?=ME5224(xVd3f3+RKSPuSqD0`{%?3~=#TF>K?*5wGwp>>m1 zgw*vjLgkUQGEee{xLb(^@gR%$T5pnzte10!gI?Py`!He$ERbsF`SEXDFbBx}0oMp= zoN$nmoH@&zkFTtU1m3(9=KF2m_VAwI{ce<##%#ydRx>QnJ@k!$$cP763089tESO*{ zDzjvRt%0cWMGQ5MUbyFd)a?hEZzL}y^<#;JbO;fH$2v3&qVfg{PZbN==h9|{;2Lqd zFWO6QB_EW-oRy~7ri8uKuBq39V(C)F)z&v=#QaKuOs)8&frJjwnX`#uJt2Z1pkJR& zIs(njxuhNV#V<03Ip2PBBiAqrm=m;68=GqYWD76Rz_oWrd0V_B*8tA>-b6@QRiO@{ zbuoc^rOM&^>?LJ!_K&)uBdK2l3wNdCW4tGK z$+)fCCJBR<8TDqM>F{a$s{7JXVE@*oXYuL39*oHNoHwQ=N3f*T-e7dFB=yO3F!Q(H z@|b7qO|t6q7+{Hfels*jrXz`7T>Mdy+=>2=qf`FtK7~AEW#^~TSihfH_P(JwGn^&| zK4o1uRdWcXxsW>uqDYmUqjgSYd3|HeJWkj%Pc=%)yGMxTyTvpRLcaX_wWJzNHDC3Y zbsmPb3#+H3=KCAjk9gvdqc$fxvB;E~P?S(exfXpoCpsEa>Wa;9`Ct{Yl%G?r!-$uJ ziD3+-MFqd9z^%AEydIv|z1}dUJdQ)?#pJu=M^l9jZ12i;or3w*kh!+u5{M#m&Qwt# ztBb593hu7n*m-QSDX;c%n0i5$#F#FU>Dkn6usiZauVZ(C)YAs7#1@6K6F<{-JF7d` znsV4iA+bi%N;S@J#!l{&8y(?7{ArC^{kP}OhB} zFO?KOell4}n(P;g1hzKrxO-+_zUQc*_A%VZihYTON81jXt)Yu4X4G33*}D>9`D99W z$@>WuARAVjOP=(#D+GjEC5%ZRi(whjoe+4e+Fxy8dt69@t}r_6%%0q5P8fix|0~qC zWwPo5`Uw)^{vVGor-`SrO_6VRt5?HcZ`>kYe<_9D<*uI|8aOU>VOw`XZq!Xg)hRtt z3?T^Ecl13GeZ6VSt$}_68hg5y3@YqXXF2?qIH9ttbL`K}u{JU~uWDMpChT;|r^r;% zvFcn*CvLO}$O8^L-bB)h;H1C2H>l=*IO;xueQ`&Idtdrag6%@{vSsRai%zQWd5Aq8 z6Bl>x3kk;*bZ(|hon6G*zhwLRazC3vBTQF~&X#+bf#sM9Pdd>AoqAq)tK)v~t8_7; zUPjf^J4%+Zqp-E|T{-qbt39DaE1GaIab$cpw+-l1lWc!RY&}FM<05wm*Cz+3!{c-R zw%YG|`mU@$LnwGnH6!dAi>Wswy#j87pvm(O#TITxdjCTMc%N(UcV|WT;6P8e$~}`L z>G@uiNCK^0{CiHgn&#u@5@Bc3#{y-mnFWe%8k;XD!V0BNhQG^9TDGo$lejh$#4J{~ zznuCWZ@&4=(wsZH2ru5+LymE4@5kCmP)#L7rULBAhssO$e`vn7p}4r(GDUpYDGa+L z(_?!+n)>SY{Ws=FKiI)x6tB;EI7=gE8APN_c#K2gG@&jpN~M9;g|^o7@CV0S3=fOZ z_6;o#g0Pf{(c^b2e+oY=*=)b<4Gr}b`<+jb$|@|=|2m*>>=So7={zX>@kQ!gTk5Y* zHLB24r#-4%QPp_6IX3jT3phV}7VOjUoZt&Cjrd51Ph2 z`u~HsH;;z$|NsBBTPi#CQpqy*B@~rVB4&(jjGYQI_NA;Ll&FU6Gs76W8I0W+BZL-9 zW8X7`l-*1UjhN_ry*}U1@BBWW_c_0Re{+sMW)8=7&2?SRz_j zIIz=MBlC{Dt^Ju9(6np1E(#oB9bz|z*%sk)559GO{1KBijhg=&{m`^yD<%5t-KRPi zjc0AnCw&R=JpJBxmt3N#iI7QiW$jbz-m0nUf6rQJeDz8*q2Z$T$FjWABbpJ2Ke~>a z)bxey>C7Z-m0{V%#pEC0FOjo#Rton!xqmzkH%g7N8_JLAkzX5lF~5~^%T@Q)jQV_` zVWcn$?!UYPS8!YR`|@!)UFFBt5pBxtJkF8135% zu%!LO+6QEWflV>XvuS{S{!e;JiOYZ2f%vI!_1=9J-M9JBzD-jjB~cF@oc_|jMg=s< zCE#TJ)xR7%{)4~uJO6UnWBy^ae>bsZ&xY;)Q@job= zqqyRkHb9CfcY_rfEH-o}_}Btj)P zje6?VQva<-X=z_iuPS((u44Ua9(4qDh0L+jm3>X7+vHb^GntIr_aC_*IGubT3&AoU zEmohs6T%Lpo#}6_UcH^ui$MQzgUwd;o@$7BO?D9egHzPw+-u@A6iOwKK=hjgV4gW? z7t5(!cJbA_<9dYx411LKVLQPLtkTswzmw5XLF*&e*+sb6FeAL;Wl_Ngzn~{xIy>t> z{h1ta59rcP0Eem&v!(d*(qpO9Z!h)S5a%jomx#Tf3CPR02Jaq}SisQy0OWcgUtQ)FZw zvJKc7R=W)0Bfs z&2j*8s0{pHQ?#aQkEMze1!UqdQGk{fmV3gLay%F_+BW>P1?b>)eG`6kXKl;?eMrg0~vNyYd z9^@Q5&@wOudQxFc6kuvFHi?rAPndS30S#r0*Bq1p(90K%?$ec%TB%+1>%C#2Fr+;( zlv?3eN-@ng+d{z-hyVb}ETT`hT>0kg=q1m7|Mfe({Bp+v5y0>knGI|9#d4BYs%vf9uBZh+%$T8p|Aej<9JM!>GAA|h|qw^%b+U#8AyH2Z0t{}56ByTR^z zuZw;aOa{-|GMv|pAWkWRou-isiO2>Yc1Neul-7iPPkL@tRm+B01pu6gV)|tIH`0$K z!`Gp?^MI-`9%B>S%bh6~2d-CuKFRBskaXmDEBFjGKlZv!?4`?&lC{(amIhbf|VziUb7r(A%4(an}pKS9VCRU#RLSNT@Jx{;U$BK?wG=xu^q>x>Be@D5f~v> zH+*}1m?&!WXomlNg#knMoT0O!@X6KqkV%gjTL}$>nI*_-749t{S8mHz=x7@82>RvbSf$UJZSvaEdksC8j2-u z&nmzAI{C}B?xc@ERi}>)y7!9pFAeX~2#NskE7?RLAlsl3Bo*qQmArO4>-Qj2k=gDV zRp_iib*D2%y;PK2o0Q2Q`x+er#;qlQCjsVRlIu_I!?@>rHaILe`m#rcT`8zg3)1F> zJVXNtVd`Ykt2^#R>i8HgD|-1)hkWo$ZRjJ`R8aZl= zt+@UcGTu^^Y)BTLZ$tvKj*{SBsmZxeAQ!~ZN7E^%9cm~03zDsSgFd)@`(exnt$X_s z29d|U9fVD{&xY3Q9qS%n(U;U%;G&gi5V_-f;R_!%_+%Aea6S?V&0cbV6Nn~U^4u2S zi>Xq3r(i?R6=5(TLZNmKS4bHdcJ2i%Ngxg8d8B*!%h8s@b^>+)#X*{S6Q0A-b^Sv? zvjn|54Ip2eh*fvXdkk4-%genl_mqafi**s3BvQo(MJx%wC3IecFL&tpx27ACM#VDk ztOheIUOD=pNrK1$i0!>+LV%h?1YIf10Z9NGa~}drYx4!1w;jzlo(_1yCoBQ3ANyoa6cAqC zbbISo9dT==`_QVy8JJp6pKIFH>lL=9yD~)yx3YZVkM^DWgV2=C6LPwCN`uy#o6ItBSteHr9}4x5v34m?U_30 z7N;jo*zgRbj4MVlhLWi!zt>Jb|LKvlqwM6Y%{7+%MB>1>4@PF>nZm>Rz6@lhitD0$ ziOC$C_`SpxR+K8-(o9HCe!tS~w-6lDpkB9^BY%dH(qwH3O@|WT#=^&8@zz4Cn8V^)4X_>3m?MwOQV`+X%5O4h62Q{i*U}gsIalCutPM#>RxiMC-|%)Rq^0* zFk7`=`8in#7pdowMaYb_E}HfM95ZJ{@K8F!JGXyUSdBhe3T>77I`36B_4!UN_fdZr zRLT1=Sd2F=%QwM(;-kD3yiGw3KRjooZ8TD%UY?L$-Z3vUYN7Tjnv9sjH7gB|K+9nL z){i^n-@}U)a6E!*JPL5qpW>o{*gEIh%agOi39rQ6t(!C<+|WvsvshzT^h!K&)w4uq zso5K-P~c+w`-cAC=jFNSm9s*&0skw7m|!V_mc~xqhCm@>>GtG36_weYpZOo&HW8Nfg0* z$M`7DVPx*h48bX4*XyWZ9uJZ*@8vH+Pp1hziu&iQz$g=nSF^=iT3%)ct$8R;pWdQF?&)oTx z%60nEpR*~Ke*abqI(_Ktp_hC2R_>Jg*jiDtPAk4N?^^72_{$;n6;tnB<_(gaW>baL zBNA#m^F4b?Lo7|RU|2#(zpgM&1%b6wPA(aD{da~jr5lt^GA&Y(bPhfz&8d&21 z^cg;Yp?i|8zh4kVWnZ46X(3;Ds6^rE>jq6ri>=B6qm(0_mLOOM+kBQ*Z(P@()-DHa zZet``qs^eS(JFNhx_fsETZa`>r)?5kKC1hZdROaJgVYAq-diiY1zigPh2Ew(EmWbc ze3&OmE%9;&4MpB=Gwszc?(5;iT>gm1{^d9$)e>suCGF>b!YF0LWwJ!f=&rDOvW=Py zHm^GBlCnybx|fflMRr7Dd9F!zd_VT+LhmmP5ES=SH~zW=o{Ax}o{5*@RFQJB*Fj1O z_TAn@g>7;YW`|4Rl(R*w*4U|Y@ev<%k*e*WUchh!g6M-F=(yfY6$cn9aIp{&^78?@ zREdiqd1Ed>vdtkisXL%;$;=F>Cb5xBk>OCfX5h4JJ-ve39|Wm&tWmegP~Xkf2sgom z66N7|ZVsNtYDBMv92rutLLbv9c8(N#Ff|;+V6;HjyYzQz6rt0u%OC3_OGCTjY9UPN z)TSj;>S1K$sP!dq8{aD>6aK>Yatc3hKuWC7A3KS{TnW*@w5ULFU)a6b9qr_j-dFZJJ>`a}FRN3s;-N3Js+^A- zwHbr;;K0g|8B&L|RX-H>s{sVTU+xpsfxr{IeBezIK5NE*GTEk)!ILT8^~4!%9kTi- z@7EjG$iDbUuRM^W-zQ&Shrys~3*qFlDyZ~p`kyY&YT^>m==k0``_d^HbQF>?=u*>) z(XR@NXApWC?bDkYPc|W82nQPwNyEd;p~tWUB7o=<2?uk_hFFzIIvg@8ixP{?TEx-k3SkrwZ9x+Pv)P~H}ARejWHxXonPPn+hO9dO612sQgv(-<=Sb( zgYEPiepr_avw+B)n)cJcW!z<3xXZq}u((n^>{W)fsZ2qS;>?`-exPVm`|Bj;#O!C2 zwiVA&4ek#_l05Fk5ahy0I>rjtdr~a?=2@?kN3IPSW$Y`qZ}9x(XwE-)A=Ul!r&dFI z1G*hKJFJ=LhKRgMo@KRUIo}FfV@`mG=Zz|K+vOAlsBR$HGO>m*}ApOY~N(APlDb zF~h4(_1e)`EdmsXVV^n`GhR*l#ZelPxWlfWOzyXrk@TDQeG_2%o-38uTSw1~7r}99 zVoRCI#)YoGyLG0c)2TH9Yl0f*tGSBO$<0tnltSqTd2lEU5l|H(_yi1`ecH=#*ss@)(eAG8Dyf>x)qJN=ft835i`If(c(+4w2i_VCex(-d+OUvN%EOTmH`s7j zCXf-zlQ%&0kJ_AjBrV=z5;d?nF<4Z zvgTCik;uAw`XFokKAb4jgXM(N(?>Uq@-F>R^w#Wp)AM2FXHrpz&}^Ntsp;b}>Ga;R zGJ6LEBrH5*$pm}an}0S^YlYVE`emlJXPuI^2SPr9v=|fdJ3U0+sX08ojPDzr=Z?fx zLX-MO4#jCZ8~*q&!LV9}I4|LYC*pXfiIIc==E^L9|uQ{k&g5Do=h0m!EKeA)ItOqEAHi?~~u%@nI736#bG$#y%nOrc1 zy}xSOPM@i4@lR~qp2{u6hfgVoe(%)s#9t4=b`*Q$Ua=A=B83L`Be=Xx^Lo(Mj`i47 z@j9sl=BMAr)2geso-rihw4UMw=G^~yzdbP?Q}{2b@kv0+e!gdlMsxe1N#p)s4!6G? zl_n{eOL0=Wzfy+Iu2*(4TK#tpo->jfC#1ViulJ zbC8+`@Cj!D)A?VH+%U#t7pD3C1?Gw0J23~eT7BJ+2>qCZylV&OcQK^P54Uapw=Wxv*YNPS?o*I1>vNt4wE8lH4S|KRtlx)sxJ;Sh#8a>FT~h*MVnw5u zLC;?erDW%dyTCF>4vsvJOR+L+s27P#JtNCS%C}bH>vuE8BmU9FbPwE3_RiRAbO}+( zrL(OPpZIofJmW`WN0uIN`5Ale-ex*V()4`W2Fe;h3XuImoZ#Uns)+muMpgp>ASc8@ zX3zYidsxSj4yBEJkMVqNd9l=^#US-Tu1aqN&amNh$u(QMy(^shy2B}Fl0l7PvQmC5 z?{;_Z3fUp6uRO)@p6u|zCDWV5Ri#z>Fx0D9QT1Fd%WKlymDU*%e9_P-D#gbIC%*DPh-Y8CLCl2V`VqK}ugO_mUO21wsMF(1SN2sX_&W zSWLL$uOXm|xFrSLCC`4=d^`F$g}L^JeRamsB@E1JugCU&@{(aNlS7`51OAu+EIxJC zwzB0$61#1aY|L%gB$_Z557D@pB}5dew!6?+8!GNOQBgG1n)(JoR~ehtNYjNaO%4_N zu^ZB?L|Z)T&9d|fV(PcJxwHu!oK`GEjbSbx+JT!kPljSSXAPPoxD+iOe1XE7-bueW zjU**a){BGZ&zPP*7C&@<67g?Q9!>UK1qBGBX{k@*HmVHD5uIvI^a@arjJ%Zy1P%Uq zV!aSxO)TB%{>yRV+r2K%=;rh72MFJoAJJF-+)vJ^yE}8xb75fF(NFtq;B1(1$xn=m zA$e5tE5NJ6jet}s2FbHC{tafCvJ^?zMTi5a&w;NA1ta##FV$4Vv#Kb@X$reky5C6U zI-I7yK@S`C*cYDR?k$O7M%Q5;}Nh9n)96EF>D(ToW=T_L}i|%12I<1lchjB z6iyTI1r_+|nkQsQ?mJN4Q+azqoypRn3IvE9oi=D`b3)lnE77+E{UKv0_2t4KAv6eB zvs!R*34`K-eIxM0ZhzGL%=Z$3K3XYnPPn^{=}O(f8EWaiArU~8W{7j|VVrh5ef&(a zguM#UFLgE(*s|5{C(&LX=^I|D0T2GvFF3$F*jU4ATnI_&;HAKKCsO=ohnLK=nkvkO z`cg4UO#;4D$1B-`O5&fv^)!r(-F_tnbj@hGZD0r$DOiuv*N6EpD8)SosQ>*qHK$K% z-VVv$me=0%#XX{gT{XI~((=bLRB;dS{*3~$`$%%+u;1RD$(q%alRrqel0VhDu$JA9 zx7gPMgKCY))vq-hTgkhBIbv(X_XsO{FM#nY#_fyoO1p9UPqhxcai|nPV&>l((0#sV z7=ucdIv~x9@3|U0-b|sTP?z@}+Qn>1F8<}13S&gMF--PP49-XWSDNm^v>H|0q;8y4 zMQ1ov@Y-cz21*S&6`oguS`&Ie8RoFqv=+8BnR0j&8y{B|#lO-*fS9FGL$0PHB{PJJ zva+GxvG$gkl9k0#f~yH*r02<1yz2QA@+MfqK#9XrxqeB_l0k&taE1sT+<4}>@SA96 z;+K$Pf$uKptHwY_B=D&vI0kUMiCzTP_W=z<=jka^ED)OJewLtTB1qID^PT0K!w z5;E$Us~(d5AskRjXobv&LF{3^8K3+Gd?)H;1FcK?J+nwFxa+3bh};x!wtU!KymmmF zr8`D})lB4ZP!1eIL-XCSgha!z5l0>B z2fsAUUZ1)tqGVL|sC(Wsm0;ASI}x_jgI9(a(0m~2gmlh}-LyatvwAa(XMI0T<}vOi zUM84W?nJW!mB|Z&s-)!=Ay0tp56+8xZi|D)ExeAkV&?Ww;iRBdJ8Ku~-a9MRA3TI3 zaKtCZx$n-=XyP%6l`*IN& ze{lBOqbYCv?U~#FJXiD*@ghi48+bsXpLP%aTxOEDW8P~HdOb8HR!p5UOOBRn4yn#I zR92$F+L%V>262T!oDNSjp_ubb@YzG>+feX-Y>6q+<)P^?eZGu+ z&OWro+jrW$Zs*lLp`IzcBkL)fC^9UsvC$NUA&OQml$-ukfsAT?mhFQqnivp4w_rnP zp_e=C>~&VB=1TL@OlD`UsBdp`M@yT1ZrI^Ofy$92%u$stVl3)>wy^`c;1;)ZlWxk& zMqyOW$`)T)=c=OOPbXN2dfDRGr-(QcVrdpd(MJIVm8iImD$6((D{IJd z<$k!pyC19_^XKE_Uyd(-e15;<{dBt#!0;rc9PoCvzvBPQvSsS9{3jFhtlyEbK3^A_ zrTcSrM6_iF9d@8>{n%1-yry4?@9tI!AAr&+>BBWC3%qZ+7C3U%=Mz1J68U|yC2Adr z4r-{9(=Ro9BmLT-_9L(!0B~JgBu;%;?pLDbCffXs)ca_(247XvJ7g^PB7-RJ=zjR8 zuSf8OW9e`@`RT_ODgQCs2Y1o^o~t%qW$YJpwK1}rMhI3Vrb0v-p|rFV4AkR5{dir^ zo1h>e_rdH2XcpO~ZYhkMQnyWNUQP-WH8{k3lR#k%T zq4hEq5iZ#{^)zKJX;gxxgdC8B6U6xDNe%GgkC>&^^#B%B2V!Y$gUn-~vd*t84@lId zrK^wzwep7vFTehO)9vN|n{GeBJ|0t~=Na<@L<6`_)GqV?AK~_ziF?lC;|f=IgreW? zC%2DiegnX?p(%ekyvUANRdX68Y<){BD&3;>7ajX64QX{h!x>5#2-`l%b|xN<0J+8W+q^$t$_ftB~hQtJXRfu>tUuYZ<4ZpLt!%Nor6R z&(FC@#_;ktsyvVk7h{U>=vU!)pwVV`ODp-fZ$^+2^zjwdhUfMp>gPoKdj-Lb@&*9X2y#%7ST%5~i)CcN-IfP|i959p6 zOiljXqUuNwO@!mCp|n7MB1yb(%e~s$J#;IrWlAY`ti-pdttSF$4DI+1P+}tHhM!lL zw|i=SrBaJRoRQWS&g%k91J{zl{Of+su1lu)D~KwfybDz3q_bGiM=isSe?+Eve`y2! zuMzKWQ)+uYEHF+zthNe+zv2TtKkeS`P@EbBAcu%jcF5Rd#+!x==sy-!9$l z<2hCU@jd^71nbvdj%)kbe>vVengTqors9^!;|Gi>^PL7@-D%>RVi;^#AEjtEncZjW zqWOXM-D>$mhuBvl&Cka@hAVo#rn+TBR@%SxL;-?2ZsfqC!EB+TPXi?fQ(>`?|a1UTpP!JZrKM!Y{S0|FU$~NrDNH_$T+DJi!e(=BaDgXi`aSM$~pAd>C>USy}<#&~8^wq25i5`tS&x-M< zn|mLOQcwSC@FhhX}UfB$}NHKy~qRu3I;@#vG5o z?cd$A-v_?8okaI`%FzFMH@u!iSm7zoEz0w@dSQKEnA;LQ&S30bRxfE`%On(KH}ay- zrEia=3z;v=)%vUMeWD)Ot)Ys)Kco6H`bPC8OPKYB>?mto%Z9fHI7$k$k2RZ9m}TUW z;CeX5o(bdxE%b3vIxcsBZlZ!ph}i0JAVCIUg(yPoV{7T|Ws#er^`cHA@$N@y>J#z6 za+W(+K_VeFcJ)HQ|2oY7IOtWtVDdj&v32jG#F};A*D2gE3}QVK77EI^Vd2`4<;&15 z^bAtI66jT%0Iny3A}iFRB9Q&^0?Q@77$~|mQVSR=s6x{QD64&<-zhAxM!*SJ_)W)N^$xPj;PxmPeW6PUI6a4b&meyL2ZoK(-XLz*z zdu-K?Hv*?o!3X`RYw%1WmQ(5)7tdA2 z(eb#$BudbZdm);Q(HTo^aT4C~?&C*K|I}(Kz>E?Lp<;gnYga zYm2xLp$4EmXeF3s5ejcgA3F@xy9uTl0MJX`GYef7Wlo9yP%|C+!Ffk!knPCAhcM&E z-C-FGHc5?BP2`PU-*@dgqT{owA-xz^{FPxO`=x0S6GLaSexS%qUHdS<&gX`^p43?} zP`zeF-uUGsA(9KtsTC*V*kziEMxRHB=K4{qtu4Kjnuv7n)TVovsQHBRJ~y1fnTKA1(_XiyN9c!Xq^|e?Ow_vm=9`eJoebVy2%o)`NHlLyHn)9yhptN#3XF5k3Co6HIkVzb98wzq#bBP1OG;z}P#5@r z@%#aC5enB&6e?U{@ES>mPL8>-bz}v*N?g$ybvGcfSjei{IjvLd%*uTA0x(ARQE5)0 ziJDiLF?bH0&Uv2pj45-7B2%#`qVd9wtH`M-#Ol&i(-ktJI?#sX1>XySro$4A_!K(Z`b?%WU;r}A+Bd3q`- zK0V#2BQi(@S>vsl{FB`4T(Y4>_@X?*N1|%Y8nk~$9|Ipu>g%1i(SLaHjz8$-@cfym zP{o%6?AGIAU`uC5z43nhnwJ++CCXsVT0+nR`YSM%=nu(Mcg2Tr!d{-J(6enrwMWJ5 zf1SF=yd3JT^=#PhxUh5VS8z@$dr6M<&_~V57q#2jlfZ524g9V&qp)^5In(}gO=YvUeM{zO zZ%(}#u+vwPZ)VzP%aKb4KmY=N+!Vf8#(};le4kE_6jX<9jG7jEE=)z z2-p-<@L|$Vy?pc@7^`Id?*Qu+Lm8$<ZW|-Ih93lB+^IqjT)^d3A$MtG>L1@Zhox z(;b>Rpd4&~8)Mp=rNNj>*D&(xbg8P)`htTL7D>bX0AhCRWu;sx-`iNZluE7He0}se z-QsZDY@(G+;eAp$A2A?V&(pkdRTN&~PrIv2t7+*J3EtmaeZva!`kv~Sp3&q}KUt%w z`*{`{o@h$cKomKbJEuD}NQH(}?IeV%0Mj=&(@pMhMGk;1oW1UFjo`3QaEF(xkV-$!D zOTy3?hws7GjwFm>LpV5Pm*3;7i_Wh(=pZnmII zdO#?`4j_}9_@2yA`Z54yI@=leie`oE$6BfZd6m4woJJ?;=UYCoHjY(xQN7cv5!v2N zXt_HIh@ptRCKzH6r=*bQE~O5GC7^Ua)8&u$i4}smVG(YGDB>zpz+3wMwB#$PQ!x0c z=s~!Y=T9q@`N#}Dw0TMJy$O?dgn`UA)(Ql9ZQ9XS^Z+KqmB-JZ4ju8;rB1 zr;cqsvaeLYT&h#=KqYG8MmbcQB%$v)XDq>?n=lkUcIJLnwBK+a&>=I`ndWM|Bdd{>k%l<9R(7m?wz30IHnI1ok!jy$1^4V%7E@O*d` z*#3In>5$<3?0azH9_96f*pvD6R=-erYZa`%-S^^07}NaAPap^@Fti7?9x%DklU0w% zq64V~w(-@y_W?zbH+8y7T`5#sDei1Wm1YHWj8^|KLs^B`pL@kKQ<+16SSAhcx;9F* zUo_3vbwz^zmG+w2a~U+jMr;9vrYE|POTqFohk)BB-B*t1cYL*lroEd?wFF>4UR^A^ z_xp;x7%L3qQN z`_SpB$5i=-dp7U=Y^w@Xg?lw=^+@{!njEls>xrU!1;kUy2RKU0?eM$nvw%jpM=5>$ zRfSM0$R0^O{KnG&D0ybq=r(AbZ^LiU`fX@@QeLanhZ;AoII`;#R>T zf02Y9S(+zFZ%8JFI-=ZmEKK$KgAV~YBN=1_7u$XTvBez$gC(#`Nj<+ceRoewXk z>^kjMS4{^6mYCL68~L@2QZDqWD#q?nXflSs!f@0UuHXRszAqkj?wDvEUz7|`aZ0e7 zG|Q2$l$XoF{7FEqdU-3Bd##i$^pPqm@)feP^B|C=!F(OBOc^+Z2N1Hz%Rvl#Uh=P~ zV6XFZgu?vHw8nm6X&i`iCg znGzZNNC(Kih=$$<$c#YcgnmIHWaI2h8SB``nTi>g`E0KzaMc$fi|lc7Ajr0nk=S`D zmrx^~w-$Wf!>SvPDBEhnXR2Tp%}w|ZTf>SWLg_+pvmLy|K0G?JY!MgT|2a%~ratq^ z_ycE=V7h-x_B&*YuSoDGGI?^L$N)`(axV#8RPgPL+;SI&+AG3Pzei^LD6^Wq)@}4l z{SA(?{gf#g@#+2?azpARh_eAm5@ifDiVyLPjg1bE!mY>6GR;j)B>haGyXBl1$vlGw z)7y+=&|aIwRf2}mBu5$aO`tT&-E%xKwUxk`)p{oWI)jTef!iLg-!x9PBYK{*ns zuOet^b>$*DuDiHZsu^sM9W!$L6zr6tQAIwb9#Ot2-?gyjBv&Ofs$jNg?RrFLv?LFb zkY=T8_mdFq6;-cO3ju&#gN&~E2Chc4zNxky3b0E#Omqx=3E)y~AHldFi%#k8{iX#0 zd;y9Es~Vspzt8cCtLAQw7b}`OHN2Rc3CdwP)m=<1g-n>~1Upon^cMAVfFZF*?TJJ$ zOGDyK3C{)P<+izXLdoO$5d;UD9pPgPRkdwO_oL<@o5x#O0O%RJCS^;!?IH5e4 z78pB`510h6?Zi`Q_sJ;tQU3;eM(9J$;EEf?x}#SFkX+bA{l$-IN_`Ic%VszgIH7q- znG=H6p*~))Ul^d6&I&9*aMxY*Mb%scQf*r4{~D$pNlI}*dmc!zFyLI6IUgMUDj1bi ze7XQa`mq;?dflc3NJB2|Aq8Dh@%A@B#snfacXlnYvbPj-J-D3^sZ;;kjP`|McY#;p z^6OA>*^om9XETJHgVxI3$x%py-FU0geu;}!Mj>)HA%f%MY>(j-{mIL%xy9M>V~D>t2M_fb>(d6WB@ zzs}5t_{0Fi1w&Mg4KU5GroLv*DuYq|>>WLI5rs3qgFJ%MCs z#pH47RPbe+miPkx_phU!EAI=?U-n5#aT8w|7XRVg4pdM(XJ6g>8vhcgnPsK?vO1O$(H+}*roEGg{{W*V zzE;9>;TMX1CWb%+i0{{GfLJ}2U5fAA%7n+Cv-h|0oVx)d9={8jjoZUXfG}6Kd+g~qM2`bn?zxTH{H?V=Kyzo|FUQ32h3DIrfA-%1m$d%EenE$Y}(1R7_(%Q5rrF@x~OzgW8mpBSZoqJa7^o~*WV_nqE_@tDNGh}mHvZSBuW zN>TCX-NcyrUhxC0dyMsi$(_rOJcfgSM1bYL97(vmtJP;WQ-X{bqLbhDrM{>94)Sbg z#TGB{`s%HGr5|jzw6D?P9;2%Nay0trjarNEE_Q$NTpQoU4XcY#R6SV_l(}IxCky7m z(sJV8srO@fuL4FCjUu{GD** zVeijiquO-Ju}J$gw{u^$OX)i95UBOB9E#f` zx&CtK1`PgIH`@17YhAJZ0}s8uuV=Y$R+U2hxplkn-cL(9@AkgYuj^FZ%x*=NFmV1l zfY*Jn!WOvtJ4byYgMlhE~|f4Q6S>#7Y; zyh{lFLe8Di(*?vr{N3CFYuUL|N@!zY?ot~b8zeLv4GOwhmX&e23OobmH2d`HQ_RnJ z;KM+i1wfyg{!KFO2PXt@m3S^&s0X&=E53{fxL>RE7r@2TN~aCFSFF1K){#o_m}%|*OBit)Ppu8D0V|~*P+q zm~M-AYFFF;(}_fFo}~ z@*2klpTjIwyl-*k>Ou(#2~RkWM(m|HUVC}crcY|!oE*@=>oYqRn&`!J^q};%vRuCc zn`~&xkWNmEMaAZ3L$7s`{%FW&mKb#4{Rh`KP?~%W@|mvwvJAQL4SuSt&o{Yu<`beK zn_-%~)i^DqRI~9ZiKzd(PoYb@Jqz2SvRZ>^o zHu|6Dh?ti7^d&WDpIMcD-b*3z#WKtl*OJGzo$yUrXC=7qMB4_w-NWB!;-J-oM+b2E zP4te;-Kb+!V#RLsLVtmzlYXHB$6r4IMAG_Ei=01wP9+aNnpVQ{C}^9QQio-F0Z7bf zX&;nyAFHH=)KHoGe z#ob5q2YNqDLYvnIGI3p}d~DeVWa_{ZAVveG}d=Y@+h$ z_`c5-cxCSTyEKa9cWvipzv1v6oU)b7K<*_wzj!poo*5br(+Qxr((6P!R@r)#9eu$V zNd9H}(!MvU+H%ymG8FZ;ieWP}Zi>+ZiM5E628>P_>hMlgU^Mxkr}@9{ccYYfanXYo zamtAw?7ti|=Y+o;Eond-h;-*|%p<+M^{AMQGeEE`FqnS>lv#QCfc`@A#mMVAzgUhs z*U-YZ*9DFb#NJ*yr^lZYewc4RR2P_oUd$bs_*!h!KSmS94($VT>pBsryuWd)-7{Jh z7haVTDd~8~?H$1#!5w1dvMto()M1>d7EKPOWh`+tZ7nNFMMb8k@~b#l%7YYOdz*YI zr>0I7w1t-MzR`T)8Njte+=?(~cec%Weirl-)aRF%E`fo1u&6*{FGdDR3S6K8EO!!Y zSeeUsLo{m6t(g%T*|t$%)aynru1}M6{BCmRr)7BpknIJ5O*D{9fDxk#0z+NoQaX}x z|2X1D3UQy8VY@2j`e5xJl>S}imroPjR8nOm$<+?r@*<9pqPlSEUho%kz%_Lho5b=NTo$^_hD`t9e;5F64)HHet)gN`2{O-X~HWU|z%=VngLepz5^C8W_wu5=o znuQwf^iUhxmCjt_#=9*gx#U!qq5`f$#bMk#JAGBg4|fZr^z=jXt?uMLhRvv(*S(5d z!?>~iVgKodUl%Rs7drv*;8eonmp6DQkNfD^Jty@%YZVxS+zarlro`w(!JT$ zw)wsMefEYx^zx4R$nxyL&br`EOiM&Qz3u0EqmFs`e#V6V_ej(8PsJ6eynk-^dTf8H zZy%4ix>q6YxR2kjj;;vP9d!g2kYRUvqMyx%DvG-VL+3Jm*qvC!_o;{M23)3U&_ms| z))DVZDIiu7S&yiQq)Tnve2UoL?7tr7rjw_)Y+3;3UuWRnY5w=01KZm9TQjzbi^-M)Xc zH>my8eY5>+=IKud&+I~LlzeJhP@;#+(u;pMIZ_l2|xv_dLtj1n&_PnL6b>ld2kmA8A*W)r^7H%Rbp zwkdg2+8B#cN6@++;9vmcITd&`O$;IbWfuR}eSwxfO5or?>6tl7u-EAA^L?sp1zpSc zy3*#;-JX2t!V3e{mnG!6AXZV+Fd%&|9Zj&i$@OnzhvN)Pr;^QCD*&M;OaX=)Uv;qb zSUPk^I#W9Lada-zW-J)#_~h$lJeVS;;TUILYDXgcAsO0Ue_&3@Z?+m4#Mw1dE+p@Si5@!aEOjj1L`ufO#z=#F5_mHT4K* zciiJ0X5(~H%d~a%w+2Vn-G$dOPU*@pe&7l6EB{HA9BVQW@C)7jh;E=O^=>=0GfWx>}8?@JOTQh%5>1Y(hcTp0Is5*P+qpbyyyUiY+s(us&FfklZY zx6u-uKVEMDdfD30fTI4ksUC#Q7yLEb>(B4cW;$D|XPzSFyztu#fBkCD68^;38Y0Va zOT57N&{K$4n^S5+b$-^@JijP`kDLIsjWp#*WZycU<-_zIrKdilFR2%R6?i(ny zKn;Rc@L<78kW!>bp^#uD1h?WY#VJ|}6e|*fI|K>t6s_Uz5VT04c(G8R@ICYWt@S_K z)_$?iK5rnI6&Qw@dFFne`?@~YecKD3`72COnsLnTqERV1d^y7qE|vl=M8C6u(q+9r)9KaeAP3+KM|qEq}x*k<-4A z8yh-E&aK5b#Sl%q^15yPYIVO6&rb+g&7SMA12D)mAdZ`sNfoTJlv`Xr;;sOELfmKJ zUk1f zI?gNSno8ybY(~q`CuJTVhrQVOCIMmlkpkC>t&+H6o0aWQEL#=%cOR5d!9P;04~GGL zuz>Os-=0mh`48E?#njfPHZBZ}ERreTJ{|&}Qveoe|NV3*D=lgC?nrUcWxg!s`yW)^r)~V$U~CW?@8dIW4rH|W`M|9R zM~{fO_0HP==#Xmj(z_Nd*1ytdl$z7S$u>X)d`GrDm_G_8JN0wL*&d|SfS9I$x!g0lAe_{YTV<}QT=34#y5IRtJe z4JBK*1c~Y(qKP*J@)MsE*jYj~=DLn}t zLJ?44?a)j*qUE*t4@gWbdY7(QIO+M1xtr-}$+#7Fz-VMNk9fg>c+?C2hSB5TdA&vq z4%qm*7thb5*4T;gwqiy1BeeKFu+Zro-+_xduKmKEi=1ksy0xuWt?AgeTg(Le^F@OadGW> z|NBAaT9TQuh&hZ4YI$DDLxL%OLY&#?xDvgY(eq)M*HRH3{l5)M94C ze@%azmTTG>RHcV}>Na%Lx)UJRP=Yl()!xbyA<|M!CSCTtbtY^50xU(ucl{=RtCu`< zFc}^4^6p|YW_?CY{m#pSY%%|V{;Hb+2jCkId6(LSJ>EuVL)ORf#&{Ecqk`evq> zcLxmaSKnEcv)06wHL$m|%a)Xi!b}Uw+$otvKei=jXe1@AkoOdF{)G ze@wiqzpMNywmNsdjf%TeuGE0`nF^=Dq%4}oSTcVBUcJ+1J+@Z}iF%figr01mCATc0 zrTG~M%0Qo4OQde=R9X93+0aE&3pf~zzO$^xCpxxTt3WZebj=}-*ePT$59-Th@7W@p zMTr9nxSxu=9Mno*Y3^~U!iqzPClrc36`lx?(OB${hWtGWZ#3V~5va{d;!)u?u)5?B zSYcTp9^MskxE1}Y2&q#P0GG!O$s)%)2&OLS{8xjrrN38KXL(W$(;0e}>I-#IbcRkzdU3@jL6x z+R%J?&3UdGLn`Pv*c#L&a6`-YoL96+^#ox6u)X>f8iw>!G0n&U_N7~gEXf>Sao*8b zEx>v^fgNti#NIGhxzy;rSG&F-r4J2ojIt|(wZDc?uKrxQ(w80yj-*$A$I7E{gc)p6 zKL+4qV@r#16*Uf@c?MG0vQxR-i7hfoS1N~iM3HcPARg2-LxL`DqW%XiInWwpB`<6Q~2PZPVJ`Dj)o&Tx=k_h7_E0gTh!tG$q zjx=8gv0AutXuQ3WC;wb5cb*Kee%9M;u+$u|44?JXY& ze>NjZ5oA-oLl|J=`|&=_w%xv5G!kvq793xte?Ex(?(uGNSNTAYfueIApCqK~e?({< z_SL(rz@p{-9wd?>HY!L+5y>feEYh-{NICr4TX>+u$4%YPk>Q+ffY)rb)%m=fnPno3+s=7;dgFK5Z&$Pgq{j}8~Z=T4dvQK}j#k0=b|n&Gjd;D8uMTX*%5v@aMevNm4P zBg(T{Umz+@8BcL!pc`oVOdFTFz*?B3|PQYM)C|k$n-GL$b-U|mWih1jLBl^%V&aW1GNj3^U@vU}*usp+LOiApL zVe&&Tz~!PP%o5#t{NDo|VRx{T);0 z2o<&DNPEzjs`{Ss`(Vkn0e9-uwUq47f((|%@CTooq?K0&m%E?-$!662Fp|cZM}dgX ze;h(|ZzNDEFd;wnDT-X;EaYdL_bZ>vqn$>0BOZv+J1!hact&P~tDWiy!-iHsDEG$XX4{@RMs_Q~9fY047y5b|u|4h7Oss`$x)PD=0|5QQ$XJ1PA zd+IuwUM{%xv!I{c|6ugD&OeVPl$HAb?6>^yc1}yw`#?(W6+@~b>y5N&Dw9!LGcrY4 z2$(e7l_h3X{@uzjm9jjQ?SK36G;ma1_3>}-z6LgKT!gZlt#Cht*p`ijyf;8%4WJ9jVtw2QuQPkojmy~PdZ7c#oGte>Jq-X!w7 zS3qIAk*{wHxMi}6S{OWY{4gy{ZYxWX>JTB@d1~a(&Z@@x4`mplS#682-CJ;!c-@HhV^n3^@k}9}BMj6V| zL=`>~fj5@4S)*@rVm0FVv1S8s%U*n!MT^A#Xez_viy(k+^ZtP+efXNPr}P9(cYG~ZYQHUpVdHahY*?B zn58@xJrNIocD5j|oTw<~b<&3nRz@(hkk)z;RnBl87NiNe>*xYbo=GE|0$KxR-aA_B zSdp$)`n#Qgun74Bm9}1{adXBO>lTur{Hl z6;R6p{{+@EGjX+rPy-4KBGc=bSiUH0*`xL5fcS!i{da3~VRg!+qIgWCo$=)EO($3=}nRb`tir$8D;M|H#swKLa;$naGkpPbC6-BG_U4w;@rnEhwtc~_As@nVjiOU!~h zqXStiRp81h%PXZDQ-2f=xHM-rck)8@$;zlw*=wnu#GXYpHyjB_vNH!9apITLq)q`nfa9&vmdrum|n06kJMq9>QZ8K{q=WOuGT(K zEiT@4yelF)ai=Hq<<3K}D8uRI3NOkw0#rI{QX0kiWKl6X# zmRAb?=&t**6szM9lbLdys2KYq_E{I(*JJ1U zhu&ujA2)H#urGfo&O7tW-e+{p|1e_G85t1|p+fS$vX|?0{`nE+c<3x7;Ocz%ftli` zPGskom1w$2t7R9?v$jYr8S2Wwn?kJAEw{yQls|qdc$c;C(aHnEFO~^I1M^`=QF@O@ z429Nb&R>daKJZqY-&m6Rd%h|EK9QL_`Juu=iL3F@@!35IS?*}Nz~MLd%ZFzsc4&CH zc;6fsXLLH3X(;1BLibg}eJl=-V?G|OE?UI(^X@$J=@vJoDmKlYz@qqMhvzJN-+$!eGJOBC zG1b2sph{x;^d>i^r1EfW-S7Cko4Nc(+=pQSYUYoXKcl^~_uOrt^!^EV(QEuYQ`sTG zFt8-(-qW+Ru-ZDj&;MO_^_tN{{GHhX<(c&Ph78$^gs0}-fT0c2}ZJVn{()EvWOU2q@mrU2yRIWf7NCGTZ#$$Fb%TrV!RGZCepR;Vtu ztY?Y}CFrlan7Fw@wy$hoUOx6x5nW_M5T%9=rOQI0kNR#YV8_C-&wlVQMAhFN*nAx7 zWIa~sx5iNA9WWtn|DyHUK2pWa`sd>e3Shy$&_FYigCR6T7TKhb9$L7MtOq60eQrd< z@BC0Q0<5K0b*hg_6ZvAv$=T89o?#a76HaN(&@~V7p{GkF){zljMzwtz9KQQ%if1a8 z&NQ7NFAa?kzg&rMRZ6u6uX&0y`j_Hv>y|>;id3@jweUwjf|cq?N6Ww7P`Wkl(Eu;Q zCTOWwHwzaQIo1kzqaK?^c(Jo6c+Pvq;B}tDQH32V;vqtaTGtbHsyv@sROw{$kMp=H zJ;$fx%XiIl-zWHVb66AZ;ZvUPIZe?(U(qv(9nU`$lI&-Q@?2T@2KzVGMAC3XM>B%{ z^^fQU(eSFpd3w_3n%>WMYFVtv07&|ppns#cH{HQafz$V|0)XM7b6K$9<8!msJg1Co zCeNMoZ(RPKhbJ-lHDCS&nC;xU!7zXJSTrceCPsJqF439)kMDBSZCP)NN2a-WhpGY} z`d_SO{9K3~h?B1BXI<71ue|X2!|+7pwZ~mBkjO;+c37iFBU9Jk{ak@nc9x+mW@*8^ zHQ4-7Hz((5+tl)DRAgK4&gWsF1xw|%qvI*!bGMPOBPMC1CDI%65{%wQq0Ue6rJ~4j zv`Xtb14!ep^U#mOSq3Y_&uKXF?%9|774s_V#m^o`&q-`jKv2uI-*ucDKl%OX5ymvA zq=sQ@C{&o3Mvr{0e14DE>%hIvlUpf%<`zwOs?{YtabdHuPmAQR8}yqmpS`EK*l6HZ z-X4bKk?n8Hw@2l4hJ>-86NA4lrEM`q6lT+E@FQ5yUM$?KmTFjC$QEZ>TE+bO&N zR3xUD-lO|CI;QexK3sgE83mqhj=U3}boYnBcj5kBB^}F%9mc9|2p(VVz3#Tgy$MAj;)E1unJBy)pH)XMP*Ta$cI(q0VPslQ19c@O|#8S+GYCf(d^y# zp50`cKja>|zR8&NS$N@B(Gr{W(P0PATt_tfnx}{<;O$?z2d#VYjp?3$PG$M*AB|+s zexrU|4L!K{?r*PlOnS1Gdj4X`KLc@E6UtQIHu(o-rU2Bd$pm~bdKQ%nI9f4v(L~h-r~!Uq#A%-h4gd?wVO2=W(RRU z$h@^uvNxdjY@$jq!#g;pVpQZzsH4))Pk8)Jigl|DXOP58!E(VA?Sti$59O;;CilOb z`vZe;-cb`c@PW_G@jDFq7srP~^{rwWwq3%v*RQOveSN-9o2(8^2h!Q5zI?fznXtQ) z-JUM9LbIUDn%&_Z5n%mp-mqznmfC&vDQGj|%x0cUp*8A(P$09;@4fKt^iHZTkNoqQ z4Lk!(u1#**xLbRCzQySKjSAmR>G)%=10!}Hq)EyUJ7Fg8%I?dVoSsLUB&T}!qo~vm z70MgQT0(ziud1_HMm=%}xfgCuCJd<32Z8ae?zKox9>Z@wzqTt)m7+`JmUMSTg}wCM z*NKq|Y3Of-{jXpXmjfp%7+e4}D_`Wup1SstP`%^}e(F(L4sBFDG)0Zya2RY&UZEdDPPRhoH~L$}m$kpoxibru zw%=P2m@Qjm@Pq7@Vvnq!e8k|5z?iYupO|jRX@sw&I;KS+I7d=muw-4Nt*~kXk+GY@ zl^N|K6{HGERl6Fs8Qs^gy_tTl#Tk7BC#z&@V+I1%PnvXfoi7A)W7X1b%CZJDqQ)C*SX3*O+R#C+VkwY3)FPBLrbXDKNXsSue9qErTf z93Q{2Y0^nxvqOzn?!4u1lA4(1x5fnRv{kaSNmGpG+;iAjrXyEz-D+%NzVW!(0CU;n zqy6qRk+tiMTMwvDV-mv1X5Uu*@(-*&H68tPWnTT!pWSTxbKc=arSLR8= zpEq)_j!oL%7ioCdh4y12wQf2tj|;2l>p{ZHeD7!4({c~AQW8F~XSZvD$2z`sF1+*R z&mi)<^XKJ?-4aN6@!08(xmqzVDmMjjHY=Ri67+mu)+}%%nwGaVy*?O~$j_~gK=#rO zTAX*Sz2D0o8{O3zSiRIVeZr;vd)A1k(5o! z0V^Gk>D=9WzOsVol$eBcB?+r_9+^Jo` zuiG910q>2Eu8;l!IjWIM+43%)F7G=N3ni)v$@292)e!ag`1B>Rdwkq@44>)RVfV|> zQR4nQMSId*sp#7(eVFzAm_9`8qu5svY<^|9pL5x4n&3G*Mi78&3Vm z6;lYmszn!q^3i-0w;BTJe0Bg04dZM_dZT%;=D|pS%FR`7GJ|khYryo@=kalaQU_O5g2t46&&ZrCOOXi&xCxF~J0d=fe#Nx3*E$q5`i!(*Q!!~rCk zLRRk&ym&_oJRBZ-ApdV35mb9Fb&17y+{Xqc62}q?hqAkhUwh8dBlHArX-D;?T9w8T z&u@83Gdqb)#cQ=g9QP+zvpe+pVLBHKZ9YXXTLAC9-LLu|y0@*pr4AB>;D=?GCfjpO z3@1AeB#DxxhIC=#Eg(seT2`t&x4|2%RsbUTm3&APDp8(hP%e)&M(!S&m+OldB_Q^v z{yHV=sn!!ob!hs5rhxfkCOvs(_QR(w&u9gUKC8hVY`aP%+gx^$BA4Iq&#<0)u{=-s zVG=9WpMqtI6Qg#qo#H|HxzuC`HcUn(Ym|x1!{3dr!R{1mJ}>XDfXlfdlp&dG>2JSw z%Iv=b{khkBwmd4C?1roX+=KvD9}cD@LIm?X|HTkOwjr)WJEumo{E991$GYhHq$6V) z(_a3`?=1t9Ulrd7IzEo;D-CWKC9rNp<=I0oC1}CP<(%cyM4pXe@x0kxNX1W zRcz}HBCZ5wk~7KC@einG3N}le2d&lLv5v0@q#7s*kZvTl;B2y~@r62IRCz($4@4}p zM>72rs7dSi7{qUVj?2tn)~irKi{B!#G_G2=dl)_2`Yz~C`D9R}ZMsxcEOVx%T9H>( zIM0Jdr(7;RgQ6Nj;D-tCyq08Itr~m!5x@K8*$Y8QfX^DW?bpl9>$@fV-JYY6MFM%#hIPK_oxwF7$0{g~@F@dnm5Eq)y@ zW#m!PVjhMOp;z-xuEg4CPIC`r^71cE4aA4rF>A?4r^?=$Ti7|Hd)^m!kYP&IB+p$3&T`-!uY*R09epwU3@i; zpe^1Kcm1|D3Ro)wg%!4dSUP(`<$ zQ$}Jk0OHh6elx}XaO+Vs$*O0r=aU@QXFby2t{@U---s2N=5%ZI!xWlDo$=3bDI(dm zf7j$)>UQi+tK0Z?x?17xR(~*rY}u}`if6eW_1)E`}vj~J{^qP$V&$vSXLLdk8#)Rt+4*Tcf^QIv|Gwyg(CWVKvK)b&&2iy$tb+}mJgy}vVndYr0mxzT~S7G-*KRPzid zxN35q38Pna`U$O3xAni*Ed@Td_!ak>Q!}f9(@@6BUGiqp>Bb0^JZ0RV?ZwOgjA{aa z83Qg4F04@C;Fd>V3Ll3ci6B`3gB0x~t&sC`oC^Uk4El{epZ8Ij@mq12-R6c{@j)=} zqiI238uU^_upwX+@ke?1y_dP><_z<%nSboxzAiIczOYQ4?4Ab!d@WbgQ^R|}Q9-&- zC$8Tv=KKzezOI8l0dTp^{H6!K%P0166|X|sFBsxRe2#4j>HjEv4Jw+G*?#_v2^{Bj zp&1maN`K*0a9yyLu)_WK-KAAfvFA@f7kvq=38IVwe0N>0NC1V>?eEtBzK)d{+EegXAAy1!JgQv|Kt8~sR$Gp#A0rOaA$p65@i;}#Ab$nc+?5VgNSK>u_Z zG>L!Ji+o8^DWUL%ymHlQ?_CbMHY-wzWDVE}k*kOwc`XRsYynSs|>7oA`au zho(uQ859=MAFp2Jh?j4gfEHQyznj6>jzX-w)T*f|lzcQ0=%4%Msl%2MlRhWs3u zbbFLqLEdsJ2BndsgAHe?{5Uk8dW9kEHNXgxc%~&&L^_87t*gO)S-atU*%kORSip~> z5agZQEWB4zk15JGij3w9<$1C8F|1|E-^sJff_y2N9{@WC59hS%X)JSvSrY&3gMAf& z8fYP9rKiTgGr|SNaYkLG=2M}$I0sE6Ccu9OD6taUcLR!4GC&$W66+hu5B|L?Z`lQKD?GFvjJisI#)2ge+A?K}WL&A#Y-Pe^yzh0J+z2QuLwP)Zdgi23jDOc2Ni z#2$0vRw!6-74@$s)Q~qA2SBco7}tIv%n#sqETG|>8_zObD?fhjJTsRmRK0PLqV{>rGBD1Wpe;J9em80w-m|G*SX|DNrmLomgBIjxJl)?w8+GMrV~(vSaSjS;s3rR= z4KV;<@v)Kl(B|Rww>YmoU3EkHn%S$sVe|2t26G1Q#lYXC5)XYRHxE2er$_BZUDJKY zbVXEkQ*v@zTl^1FCh3cx7ZSko)tttUe$zdSKmVQvex}B_Zoa*soiMU@$MI}jP{lLE zY0S=eR;#YIT&M3ytBzo2zqo6;s6x%xB^hai@5`{Oe~^ru*cd$HPoCqiZ?5ER>2ddy z-s3~m_GV`o)z4)gqPAeuF62@7J6iR4()W>}Gy}=hPy@;=t^)Ouwb{FzGsTa;3i&_K z78Qr#5~EfcQr$|ap*j%GQrYrE$Pjq2lRRASm7D=_hL23~TCgJ*{E_rHqz&N=icuv0 zmZBn1b`&O3>ZYxiww<&cTAKdxH>uRnQGPfFf7{RIzX3tJ=Ii*OOoB}vy+EH6u~)H8 zIr2cr+q8GL$%SO3(>ORmy1#tLlN^25&G1nrKOF!wme%n+)vdUO-)T1 za=^{65D7y!C)%i`W7$y6c7Vp1gNIasZ0mV&3pArnBx-IkKR->QUi4@K{=LM0y;S?< z{SRgMG?+&k4zX@dyDLA6jjW$EgGI`3+hdDIXFIsmLRQ4Hh4nboRk`j}bZ&=Y!iGgA zX(sH8BbAZyNkgzgZWTmwaA7r6SwKSYbl}AETC+aqE9Ub&_jdLenfOYg*@KczJ zF5T|%3fySw$Cp)})x#65P+Npf?qxgqf2kj{8g|fL^4;>|qG+VnS(=zHx>+sTWO|O^ z_U9Af?M}m7xp!FYaBKgRMRLOsnF2b&3<@V#!0jguU)6U)`nhV2I?I{~iPqJ|<=^a| z7`=@$cDgGYFcqGmAx_LOg;c*Wtu@)d#A&o;$xV#qeT&>+HIBOt3)b% zKdxV$F^0`_gBFa{G>6MB7FQsM7GK%X+98T2FgRh{))oAJyntN;vn~G(_S^Tl^obz+k0Wn zKZ70Wzz;m1U1$m@a_aFjrhb0zYe>s!u+i7-lnf`^6MV#2>8^rK!U+qUPpB0sY$1~z zl5F>vM#`7Q8qJRrtkk~ysy6R6M%p&%^V`83$K@w6mGhjA-&?J7c$kiQNyS3hYg5Dc zVM)9_Z`|mb9RM8MzwD8uJX=k~Xnj1kf&xx~K<84R$XJ5qNEEB%20=hqO^$?8&YY}- zB`V~u9D~wCCovi8*SuTAB0~KedrJ!%N@ZD%hPo1lV(W|fT^p>mPE*q~b^7VNwT8x# zjzv>ut(t6(b5ZFMxh?fW=?$eFXj_lSVQ<+OEb$)-M7crPXVt}OXpClowtm)tau5~+n0=*e@E-o z12=2~2N^(ludpXaP{sqr5ttYmPmYWPf#Ce~N`@X)Tn;;8l2qRag7;|uWJAMVY4aX< zV4@4ZbEz0OSZk#>A5n`Hc~tF}*Rz`0s%|C52RJsvO~)kR{(?69w^uKcyq2C0?$jPM z7($Gns-ef6+p2hutay-oI+Fa!Mq3j$1~$$JxM~BZo@U0AA|xI5d~x1FZ3VyvtJLFn zf%qT}xN+r-gi*9;y1_K@=5U6nvb-iBfE36@&Eq_|ZyfJn8S~Yror=cRjwTByX3Vt| z!I%}L`-S8M-}~Ty$8B-zwCsdZ$TJ%$v1d%eHJ93TU8czdKZfs=IhPH_q^d1eVpg;! z8(*NyA2BQ^St<9v-)y%_@j9o-{5;6fspCbyOf;>G)J zG4P?Ij=lg`(lg=(G?$Kui8q4-Ibv^cHB9L^pNI!zZDx$4+#S zTY#W;Q(YB9?v^NKzrl&T0g5!UXC(uHz{x~mJdYw%_(>JPqak%|wU|NH32eVsZY5|ZzhHlP*FTu zl$^{Aj>&k7OR6Yddi-|h_>^i<8vL0she}CtNpU)|PQW8FH_uGiY9NdMg{N&AKZMt# z0=i(4#d8u?FK63HsG@~&iW~FOOs;s8!GmTuv{p*6Nur>@X*cU=TX($@Jg<}Zz#Pud9y?4LA*5kGIltn(aiHap&KI2k>l2V4 z=Nvq4uWA;X1N;a9-?loOFVQPTnA-|lL2s|nr4)CV%}tv3I@(A9Ma6Wo|wjkG*4J)+}X?6leGIeRI@u6 z-D>81{tnLDntjwU*zhV(x1kYf+4p+BuAJT}d_3%#>Y=Q-L-g$QpfPZx_jyGVMw2BQ zb9NmlUs<&Aq3Lv5TJr;n{A;)(#(YI*mi|F;1&dTC8DV=Jw?3?FXQ8|j?|iqj zvVawhPtvFYkcIftlW9(aEec**!5L=(H!e=gE)`gL67O7K&-1wo@7jYLn|Zr>EvF{T zJiMJ?fDc%r=BEz>a!Q+{It0=HyIz-CgSx_x=>7rr`ZQa;dJ`38*m`hm%H9X_pZcV6 zw$6s_FvngDUrKofZ5C{o;L%T}7CVhYBB^;uN$^Egp0Ei#K8z+`_$ zscsQNh_r4lH#GDrI;k=8{+SLu5AdA4UJ931$wLmc1Bp(`aP9mr_49PCiZM7?g-Q~K z*gG+KT~3>iMj3K%cTWZ^cZ$Xx>-MG}r1<0e?hApf0Yjb&8gA$Q6^$9lBr?h^1h73k z2CoYXi}H&Sl$6-i_&G$d%Ed*+fE@(_PyW}40x(872IOS{_8!0qi(Gl^XV+LvjK3q` zB@{Q)pI4Byo69?&qb(Jpsivf!lBT686uaAOCyArT5Jj%%TXqustQz;41-1w~0YyEY z#=1^vT26Fjs(3NUyWxE{in?Ns-vt!26|j(7z?4^(=snpQq_2M73B0bHBrydf4UnZk zk@OP&=M%IFh2#`QebJg$EGKozg&1?o{*%gn$ z-sAik>?RwRa|QEgmvP}$zyDq}ORd&JxTz2Vq>05$4)CRKH(Oz%e65D=vVGycbs$Pk zOQBF|tc#EqTw`QI1q>st%>XvX)4&u8)t)p|ePXkIl&ai9)+^GV$}c96k}9Wl-rLqE zCxJ#+*yj_+UZ-O1;j=swyR8iLc$22@YIXBsnFCrGQaA^)49ibvUo?}1xa*fBabg&F zor`|a)r;LVe3Uaa^zY~R$fiE^Q*`%M8t2Xu^E^#nTV&(j94R(U$NN>Xu24}PVB_G6 zvkiTlIA$3XXk0AyMB>e|Dc@iAfj8T6ilH5&PRM!&>4(04+Ss`B!d8pL>p|QSVQ2TZ zo$vhA-;CH3-T3>A)N^)DVROu94VgakN=@V z>6_Jd&8UwAbdZ^M{sHaw#1cc*M93C zkckWRzb=pSacR1L*E044-x1VbPC1=Es7w+FWDK5A>)yr=DI2v!VvaeK^Wy7Ecz89I z?I9yZ4cL6gbl=+P2f7!+Oixa<6%wPIq9$cp$#cI^asLDQoiwTYVD00KKu*hrQr+6= z+OD0ep1@}dx<^YRP`$=I(bE9K1M(j?o(1I*&S&_O<)`Prp(3C9Wd z1J*G>n2X0Fl><=?eIVJHFaKoRaw;??q-d46(rrMpoCTd`=Yp*{zFimtE1=k7cCm# zDI2vs+naf^Ubav*c}{+T0hZJC0I6Rof7QH%uU-`X1DcOZ9sfC)1p}O&Gh&WYMZov* z!of5ldjMKws|+=m&Ie<#v^)wRau%gY=a1Ff3tX=owScV0BF!1(>&eoz$Op%fbs>PUFsBxz?4=6b}}j!CjfvjZnP{;F4R-__z!Hu{l0 zBwRF*AYs{zcx5ogX+Mrmb722;>6yl7NyZM zJfQ}1EG05eV|ki_R+t?>7pmo7V|A2xV|oAUecr$Cw{A`WOA`SAt3OyU?kdYJF4MW{ zczo|4P!K@!-2t!tRAs{Ha+1R6=t3T**|FFS+ za;viKjvw!s*7f+j>B%(dKcKWOi|MiT97T;w6{nyHJ^E`K+Bid{y{CB7D^_X1%G-YM z4~W0)vjPyTp!NS}umTwHSm%3``T_wX6B}%*X}0&86Rk_w48WpDAS(7Foa*u08@Wtz z_Jl-x9eU-{&B}3|z9aeb zK?di@BHhm1Y(1McT7EhdC&%f3H4f1)Y(6W}$Y|vUSr_xgE1$(u%V!GS{_YAO5I>lm zc<`{!7NN6^C6rxnQ}I#$VA9MXQ#we>Rw(1oR!o*BX{NJ-Vd1i0!Pq?5&sM=xsQ>rRJ@)+sfJ!ua)ZiukF;r~pUUBh*|S5^a!arg zUHz9h(SnC7?(Rr;!?rT+7Wf}=H{?jaXD z02q*O76_P1o4Qt(2Gz_k(xQ?2r-k`_K5FQvfD+WYR!_hk*4mqm8>a&|BZ5i-K02N! z)X^uk;JFJWUx@c3$asVWF8P`pJp}T;q)7x+bH==)dIC<0xVVH`0%F}^O#L9xG)jY- zlOgE^%;kYmQLhlr3I}AV3Z{%yqjZb?b6N2TAyXr_9^oUAC0qjr!D(9I5E`?j2oiMt z02(uf;+f2o$P%{RzuMM0^Xu8V_iZl#-_*+P>f|{lbh~Cb#Ut9(Iw`EQ&yHuINso(C znJ&6xHj*GIZv>PIvzQtg@#Pf7(v|kTGsPMX;c~ICz9p7-Vp<2v^{oGZCilSF0v>gj zVIM%B9=kjImaEU;uVlVAjbi%lG+&Pp{AW|`KD z!qxtptX9Fnn*uY4q61V?i1=J2HXg{0f5U8Q(RC$t@*;vATsH5NlB=zK*IZjGZgiY0 zFh8~$Y_sZy8-KbnK6Nuge_MV-xrBPVh-*^KVBJ57FiOz!b29F8bJ`fuD>k89OiFU7 zUiRYUOB!hy{8YiKSft&e3Lq}~(EAxkCyEAEa(%V*W!R)V1kVMPwwN8B!V6@0Hmt8sP{$$2w_liO$K1{7AY&N=)et_W&59eA6)$aj&_TYWEG7?! zxRVc&MLG8{rT)-tkD918t@ywlMeg{*d_&CDHsE3EEx>s9A?cqXdCoSu#*9Tg+{Zfl z97)pCjbx6zL|@weUZ5+=wxdn0Kx`Cxa?z+2>Lenf($l6?Fp;&WNH^RD0)z7yAV?<@ zm>c~xs|_{x7}>tN?RF0tAMcGbPEAx#Jj6MVkQ584w+)Sr*kmACeqr!DrMS-%B7y96D{kD{AEwR6uLz?*!>-J z+gp%-?)^&mxY? z-^z>!KUHSXyqfMcTPIjB90l~ni7Tya&OP9GJ}-^E@t32%tQm7WM#y4>iFJ^_lr7bQC&;(}GJ{uaN-Eb+AFt{wn`uOE2-6xk?S9-;D4bRv&am9el=xqD>&DhwJ2$d7lDCUJ# zaf#NQpIks+?YWQAn5nYDXT{W&t05DLs_RSSe>Qt6t#8f;NOsH$)LpiRHYct4JAq{` z?=e%K2GxKsS?wR1HUj3_Rqr={zDaJ5eM`5zMsIE8au>zj>?*a!g!Coj+;BvuBo}iy zILW*Z)>^?s#IJa4q~KyP`yj3gTCv-e+T87{rO%%Bv%r%l^GZ$4HaZ_A)Hk))aBC)**DfN&GGv^d+?_1NJEvIJ z^u9RYcaI8QND)=uHJNbn7RXL+$#?9GIRkQ!Up3r`S;t;` z*tXLh;@k;AwuAtctDO5?maDbn1@3B*;{!#nWT#-oD_trsL)!AD$DN+{v2=?Qd)8Bk zZ%^>JtkB&Sd)qNhelxeyLy0hic+3_8zG#%jsgV8*@d>%Ek-=l1Bu#R7FH&s5krO{^ z?#YXEO`j~g-5pG7SWl}WN6X6Er%kKcOl#u_O~oOL;mJ&IZXG|oCg9y>J7yXKN|T&0 z6-lkM?5``%&^mY1yg2ZjvrcF4QtxfmES~L^T9phZTeAhkex2{V>khF|I} zT1230-p+*_Y|)t~&P8seM-u#=Z?Jjhf9HTT(SWh)IiDK2g-(X4ESu4rDk);9PPHUa z@-(Pp1Bcs&ih+Cr%wQbgD`3Mo;2cmm37AaCKQNO6j+95sqjPDJAR$SR45& zD5b$p%Kz8_Y~>h2U~B+!QLgToM=XPM?wMO}QP=P9a?-EGF9{Ds5uOR>MNW*`5>_Ge ztLbJc`-0wsRHsi}2(S+>V%DEQC8EOY=Mo1Q*;nSDg*p{UhdbtP3X8-f3OO~fz z8rIa`ZCo`M!zakj<(Tyddd|Du!(8DvLhtQ9&s3Vod0qbxXyw4RfBY97AooD$eVMPj zr3U7|UVp`Zt*HF{9PGF(zSKiIU$*-a4@~$vDgj~`l9xS6>A}3h+o9OG&cFlfH|s$y z-%5MBWnMJqarg<>!)c+PsyyD|o(AOJ*E`?dVKMQ3BYxX6K3jf_ucu#6p6c&~(l45~ zAO4-QW)Uk|^b3@N|EiYx%sI&$POd7sGa5v&n16FgO^{acyNzGFESs?d zkXthu$e>GxKWB620nKeMlMU;G{$L6YLwz*HBZ7j;X@Cb+;Y-Py7?(|^-MHHqnuU!M zL?%&qU!H$JZ=%hCslfls^H5bJB`v%D}uP8({6zw>5p5-EEiN;xqN8@Y|ZdUg?QI}~fj{YrgP{_R5b+MW0g_@DyOBu_K-p^ZiYh@0G z0C@j#@@ZUbKxI(D!2DG=!2ZEE>M8a88{~FJ{OqDGDrjqBZAZ#Kbx!8@_qd=k@#5>O z=TaJbJJ;@)K#w)FG2^<-UCEPh_X=O1bKuZ)os4JNKXLsBM2&DcwV?w5cZk^Y*zo^( zOI+zySP*u(PUi36r_bB4f_}oz6~o@szrxM{VhH7Gk|+e-Wq;jRO#K~dJvKA8;%Ak1Dfp6Dxilmb!6Kb&_^@)Gf2j5j5G;_SOX0t6J?pAkE^SO%A0&+doZv z6%B@(u1@>?`j!0H&-;c_dkNH=$}KL@-TR4R-oJ)6V&^Q&81oUFY76pIb37b=B?x0Q zh!A8xqdnvD$wj|$r}3*(YV`6OYJM+C=|Wqjh27Ex#HNY?I%`$Ch3rvhvO8nK|L|8> zdq|JJTv%IV-(8}PaT4Q*Fq?AdB2|N&qX%){)X5`Jh-LC*v^Q5@iV&YteK4Wkw^GtO zH|S6oFLUBEa@roPG|bdb_y^>?mpyTnf#>&gXlN|sD0A_8K4f1z=Y>Acv8l&z?%iF4 z{u?ng4-~X%1AOHw6FvK<(AP?0C{h<*eC*^tc;g! zk(??9mSL>6NFf>9{oEsx9nF$J9alZikM)t%Qr;{Mz}*Y;sQdv^X{0VCJ5 z>Gc-;B~&}~%Zze@*6=2$&x}i}p;iL-D}*K*j!ThCH;!zZpvzJ47b>s1Xx!P|t(%qA z{BHMZ5IWNSWZ9)AR3p6zez8N^nVi_iK8Y^(tdHc4hbB0wsfV59X!Ur zCfZiODKUT!63DGgq0^5K)BrE_ zKRhSuEy^wo_~|$(Q4gg#pt?s}L@D&}NIg4%q^BkaJWJXcHx^?18gIz6c`f^k6vAy~;Od&%Vz!5< z{ieT!p7wY#(|zFCf3D>Cw|wQnZyDQ=PUUw$rZG|z<7{sNk3lC1QBi_z_6p%(%SaYrf1*<7RL2Zt>_uY<|8`W%?cMp#x~R#KV+rf<^e-uTrfE10lsbx*FU9%Wa=qc0en$s>$wIpnXd?6S=eMUvg+@pp z0x@zv-(2hL8%k@efwIc1_^^3tF}sg8OUjl!CF+s6^nqNuYmnyYJ>7;xKVX5#`T|^`uG{ZH`Wl2}5ACdAEO#Icd;9Y%fZf8U+(tJQ`v|~cw?AFvBGa*4y zdNW2_V!eoM)_HrkwF}+=z;l?oLLP{@^82N?`Gb&cUPun?2)+b@-f3%N#iV!V6*%# z_w$uLX|Hw^}cXrkV;V+!I^i*qV z%q~kHMau7dCd4Ziyar__8n`3bN@S!bD{cm3OA)>%=9vEMt1rYR8{FWeG-z?YH|gkb zO)pO%EDHl)+#I?@Q~ZCy$RC=lppYWpIbk(PleVR? zrQRg$m8K%0YGmwAwv`93`Hoc0JEx3i_5V<~SVZ9}4JYhuv_8cthg zi5Nnu9dv1sG6B_d z2k%XRIJ68SN%fFTY1W3VLC|)m}x{kvN zlkrqehl43tZ_7TvxaxA5Ii+gqgJ`#3!zwZH&k$wmvJz9=@fFkU0IexF&$w ztXxdAbnUnQX(y}XyO)P;h9iWBTWr^y_bhBTWBl4>SmyQX_tH*n)UOdLfG0Sf!bo#` z;hjLyt=fmOuCBdgSA|A@4%e$vO~v^he>R)UKx1wZ=?{BSVbEPMZr&&goJvYQDFQlf=HYfz#B5%)-+bWqBdq6>jB=*+d~p%Q%3 zhkY8w^&72s0JU0hRFq4CR?{%9j?oG^jlVL@LN2(!oBR)juw!G(Hfze%>!#*$2lvbZ z&jJR-d~p-a6|I4@@e34Q3MKNLy$FG~)(W_yrE+r;*sY4NORW#iy@k27{hG22pes5h zI^wpeSxs%;Ae;F*WbWiBr%F%i^KGORd3EA#@o~6ah>P zM4fmbn1N%C$VWku-1hfVXU~RxQ29xHldM!u#is4HYM*YC9-qygV~5aG7*XtMyTo*w z?66BFRhrbHZGXcI%x7BjkJ5tBT=6hkNi=9A)T~MXz1!x=J9~nFnI+;T4Vt;<(y(7k zhX83lQo??x9zf7u!^g7gsW}FQl$}pjr?n+d!!5&9WBn-q%0TSSqvZ=}IZ>STMMy}SBbAN|6>+%PnylC=d%-|pu{fc)K zMg^)BVO!Z*6P{40&`^PD*jk16=0s_E4bUEOAlCIWn?-@hEhG+s0jKf2IH@|<)_uJb z^sN=NbxCAW#=VJ;sFXmlz<=zk=;Tf{r& z06Bu@-WN1Cdki^^B#2J(ABFTpggk{Hngw(uz)_jCZR}>Di;Tu0(xmLH&VqKzLVbFs z$WGfzyaDrjm5?_NzQ{K8ifWp@G9NX{x!wBKCp{}h)=PY_!4JJ4u9r=ynQ+he&CN$L zU(QUUaqrJd7e64##OH)DVq%I$+OPx5Y zN~J3AH+0m~@MtGA_gAKle!#o&4qlyE>vDG?1Zn;)LKAo_kmu5@F9&Q&4v2nw(SzyL zdvA0tL;8O#(nŭ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

      7Ki$Zzr3W&u> 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

      lOFOz*a_U;%eHTXC^0m$dM%>$fdE_SK2s7#Z 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 RluOl3sDq32S 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
      >Z$~<*e|b*!p7wMt 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

      =wp)!>%Ue-QTJq({+a`C^C{x{bb^St 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�?-=c`Ze51+&Q0*_b4+DHRnRMX283 zfmef%4^rZi(wCwg!ij6;Ycjdr zd)pUy%g=V7@KOHxl|dj3F`aWlRiWadYH?E?0=v!~H2YQ&5tm-ll8 z$vYJoh{fWcu(A>y$Q@%%9;>2Fs#NEFIPUX}oDSFAzq=xMwQGYO*q2TrDr1Yw=E5H_ z=zHd>kos;OM?%(z1A2}k3uhQ zP9t+0s%zFYjxZ0Nzxe$H91ngzYMx*W@?IuT#98VupeqaUAH+ZdHMMaKisko2SBO=l$Gf&^mI||RG?~!ttT@|? z4zNRvq8Zpf$=;&x(oO>POC#2ag#+{JqS0(yWypD^zc zXp(Gy5AG*r{+(N4`)A*QC!09LL<30K+7o7~E@ zb>^FxJk%qssNuy3?}FwSIHCI&P;quOIj~)Ycdz*$cFXVm>BPSZf_HIaY*jJnLWhdz~nD}Tyi~PG*d6m z2ejsz1+L@oKY#HLJRbjNcNb^5KTYzWd{)g4St=j#zKVra; z|Gm_L_q%5InT`{uUUQFEarYC{Mz8-Ti!E+AQPX)E;Tb6Pz4OKfVI;1h-1>}-=wSF- zi%?WYtbW{>A^j!%-}cCVtp5Lnd&VT;{>|~%V( zIqZ?ZZ%R5*^tDe7(sX`09(i`CZ~AAttZ4)l>_}y2l5C!FoqLVLj9>j;8yQvA#?$fj z#&U*$(Ci0*l9AXb|B(l|s7PRpeS5-oySYq&aXxkBSnktnuMv&0)Jphe-{Nb1>CgOf z6PLg+hs)_y>Pf)&kvIiv=~_Eo~mBiUN?>w1~z!s zNhuAlCV*n9_Q+4%5tOT*r9Iap??KT>KnVbxFI|>{Cu1}W8riW`LrLgiFeOLk;uPik zb{;#%M=MT*ub>(me!jv-ZH$o78zR|=15qam%tp{6U`s;|T zz5vFBfKr5^ zfB}I56aWA~R6aGY$%AUcM=eKz*y*+A#wRD?G24!lS6big@Cz_xiuA2V53ODz@f4vb zN+7XFC;)t|f)CrP;B*sS^A4#PNS)?&dRq#R@H}W=Ly5m`+uXMTFhe33p*8)x&=)sE zAtadM+U;UJ+ZrMP*p{K|Oy_Y^Mo<8=u!IR zl-VT;BsVg!D4K50tpMtM?Tu__kUytBVWKf4%|H&#t3c{Mp*mm-LI5yu5PF_Z9 zWjEem+&h8FChA}e8rZs92SmnDYun(qYD_|Qb8n`ut2!ZqvH;>qsjPNVhe0l#kc zDZF9>dYo~F^(OTfhcwE&tC51169|efutiXy2Spx^sjkOcZg#anUDcG z0bvt?#;&Pff&s3BS1WCgSG$QdZesoe2i zHl!zH#_!=m4HuzPa1@TZibm&(QE6d@Mqk>US>z~L168xIm;Y#1gwB2#=AN$H&B6TW zg7oc1Miza5u}@6X`XrEfc$GrlPaE_nuhvJ_f`L8!8^<7ufIzhWSy#VQ_txBdI7G#m zFe(_~jk?U4-Ean~xDquJN^c$tc1(6$j_e>9cij=>*Z2kQHK!34@*G_+sm0~58kG&3KD;af^lfwFC0bv+ z=({@%XH?!Pi{ zd85|Rn~nTG79gXK@~ICFHbB08+SysbWv)4Bpe13o#okd-U9$J?WNzd|{goBA!oQC|F)5V1LWF3>bm&3Q6<$D`E7Uek@a&T<*gl?m+ z*CXBF>-+Vy+dC=N6#Q#Si)h`>agk1HM9NcuiTFf3O9p^L9>O+J7ZS(4VJ0uNAXeXi6prW2+IiX zX@r`0#xd^^aU>yTcA2il#xBeL?($%6(w6g=ss-XII2H*D|1F}7S^Ayn(G9rO+&Pp~tK0#!KUamWAS@~bSGz~LX} zvPb6O7xjC{9XrD}#MVBJZor31ch=qfK@Ut5{6$-8j_+M6-Q@4#Z%d-5t^SU8$H_53 zz&px3@7;@t_cCdi0J9(p=11Ef+;&Al=pqKIZ^>-QqyS991n`YtQ$tKe(|LL)NiH+J zxs(=hO629V7o5TYps(sh_S$wXMSd+!YJ}=j62iIuC1ajp<3Xq|wCW{n;X^!sBzI!rT-(=#$8 zsl;}eS@KP22u)%i0l^OG8IRHDdTwj)qY%2?|EzAHyU3G<=k56*I4&&We}Qbu-E?>2 zk$KW7xz&sm|681qG}dBR*bXuK^5AQnOmU7=i%I^0koesd7tBh<5W{Jh@n zS`_1h5l6$M48(=mvEMFF} z0}i2Sp&j%B#uf+@T#@XBJ?;yE5m~b()u-~XeXbdtyIGHiFj7 zn~~0M{kV-IYEVKoSfW&-ZdjAwJ9p56cxk7S_>TIt>Z9CZ;E|!YdO&*Mcp)tJHl_iQ znQM^}+MQKVXZlrvZx~eYqFxvo^{Vm8r?fO(!0Go(7KYlf>=z%2JF29O|0ho}n%-LS z!H!iMw(XNNcjBG_de3gWQoCUCe|m(CU!zZp?dQMI5N&DyYc380|NA6S|MwwiDP0e& zpO1`A39Ruc?MCf<1}vTnp1A)4a^%6{XXLgB_wTAcIiLh+-7SQbyUaTlPuz0i#vPSk zy8xLc$tU+@oY}5gE)^(sIPR5tRBR#`zA~O2QEQ_c=q)oKci|p(>FW2{VSKdNaIP=N zEQ^{HpL!YDmg!Gv#Z_1>Q)dUagN>EIOG@Q_tb?-{{UU~B7BqlxAgfFt5KI$HAz%M8 z@aX3;cSs<RlASt}G^l2u95C8Ru&KY$wy|#fA)^}}%F27F(}EDn4C|COIr5J&4*R(J z>v;Ug3}v}x$j8xu-xhGUxCK+m;MX< zXlc3Pq*9<6WgssJH!Vteq@+Vmw%%a7&HJ>UBYy#G@(;<6g&}`dm^_^8uP$mj@|K<= zyJ{i+z2aCu_{))d*ZKEP@mF~A#8Y%tWB4rZMbE)yUgOT(o#r?{GG_Q%cxqE`MNB^ZC|_99qAQ>=rC^F zdZSK(Ag3duoN|oUGtUPo3kyUaUTvleS;y9(~6R2~?(@)X(P?1w7FfD=8TE-Gj&F&U1_>_NW0GCh`mj z)H6fQ?o)y<+~RpV?uO+~{?EuInQ&lD7RxTl9)@fqxqY31fR6aIoZlUx&-2vpTUoNTbObO>KTM%8 z0B{PgXHtm791-tn=ip-3y!cZ{?yE*Jkg>A4fXolamwhy zlFW{_QhlJNa&H-{I-}hrWI7@e5~&*`8P~r_OMr2KjENi$HZw;sM0tkBf@xYf4J9?U zvr}u(0YQx*(}}M(y&Uujhu6K1RlkPexpnQdjpWLVvF1Rnv4zJML_e&iN7EDGZu>f6 zP|aegZ3ZC%K3M5HVw3^8C)s;5L{DODV&EVCnZE$Lb@YQc1A!a6lc*#yyFjNx^RCkP zL{Fr7it|4ffepfM8Xp*JLw`C{O&v~`Bag9qeSXn*YN4?oPJkuYXKNdM#-8xq3Kc~V zWmRyNmLM`C|E2L63quOB$%pwMqjMT^e*M0G3CrPz1pE~LM<(t>aqU_Fan*jVbD4im zW*H64qq=>zSSlTuF%&__b4R?QF+dyea-kUx*5k!3&7#+!!AXbfiT; ze5(Ob2b&7$2H^u%!6>YY!STyv3+dS}0r-y>H>-kPsMCyHN3yQHUN(-`;_u5tzRZ%b zzp{04&~E^z!ip_7z>)^);P=4#1&{vLNJfN(ZVV%d zB&+2#0juHS@ZL1bWNR5M&on%!QU=k+B}VFNv+EQ1&ukz(!;jX$Qz&j+*jhoLLee$p zUY+H23g-71-5`LK<1+xA?sxDD5SF|Bz&SB*alnyu!y`EEAnG2dT)#jSA27%Tc1)h< zC|}5FS~Qd^DJ%>-JRaI;ahlrrS)A*13ceU)#QUr{XHI0U6k(Ucr%U&*MWx~O&#=@ftu-e?aVS5V^o40I0tiDF4Pml3JhCq zQSJ2y6%-h1PzG-36K3S4pDVeho8_7z%1t}gZ(pbmhsm|Ctm4K_g?N_vTJ6T#Z4D<( zr^)l~D5qyYw;)UY85#WMzr58V+-4$D#?l)Ji+Cn6lNC%Y>Y#bBA}~#n1PcSMB#Pia zb#`)G1tC%?L1%^THu0sRC}sz*8JHVbL9U~xw==r^+)XF= z@-W+9Bk4#j9ofyisTKo9`frK`l_RAS9NGu6&Z7tfu9a?E*B!$64^ARkR7`5T7vI5( zBqOF0mk(BtCP=$KxpiS`#Gi0fV{iCE(cKq%$6YNi+t~H$%vY(-C)V&`LGeC*&!8|Z zkR)x?J16I_{^|*UMD)4*uj(=PKZ--su@6Q5giEZjif2=FTC1K!^-JTw$?P6)#z~d_ z)ZA;F`NauNbKvHFFjeO?Mi-e07=EN4YcCXAr-OTULBl$`Ti4~oa0cyDZGL>Cj|Gvho!`68ueiXhSStGMr>VjWHM_Ez1FFsXU2Huc;-4Gl z>a>{7Rx)~rvR&J5QxWz*3M?zHfQZbJ<+!7F$2WGvT2N{PuimVL4qo7gnXi8IpsHOJ zQV<#LW=+@RS06#2d?J*1ZnN~>p|v#D*T0((X@Nmc+Xa#@f-V@-%YMQey7_NuKMi%- z$r&!6j`|3KMBrs40&m2ry}uS*v6%k8i$R;?l?z?BBePX6rmsNr7y(K&+hna2>e{8S z$gs>?Z)MfQt^&jjZ4fu8%DEEP+X1RR8=!E1#@%T^)1*OX64Ni2A&oj9-3S z`Cotyx*wM#)={*E&kXJ3!$yk{A5{PAUS6^7!FMsv2PpL;26rH_0nY6pqgeIevti&V z(=t5+;>b!V-^B=m1#*ht5**_pZdC4+^3Qe_Eq?*Fh;eM6v3GnF1NC{W`g`(Y=n3P1jii9e2u7Y{uu`3DBF3meZ)#m&6JCOI zh*e^Nbu}x~PkQ2jx{-KALxkYq3IhW&I!&{%`;7^kxh4p#uMNgv@`f)kv^RZtEF4)O zK5ClRHg8N$KjK@^gs))eZz`vf|H4(dpMI%V3tDqWC__8mt$t%cY4;tlA+FEj_M%&M zn#!sd8lbhRA2poJ+y17zzD$jY`I>&PL(oDPE!0trQrN!9_cLCfvNAGrk_Mf}i4Nar zGD`_6tt|!=aZFXH1*8qXt3sW5Ii_t9F@Lv*&qlNl%d~`~TP1)vLx_mD0Suma*w?6BA%94VC{d+=#~G|SbYCsc_zm7zvYKlaLxRljqTUvc-3D+(sC%SoF~*_fYcUK> zt7Q(gI5a9jB=uI6E?E1xu}M<0(SH=ZF*_IIh-xP8Z4=H;hAjlKm@`ZN&Wm544?{gK z;(LE|&l%e$xSR1&zFF66Vtw9Y)V%(@m`h7prB40 z84e=PpmNR=!!2i&a>mK9*Znp0WOv~^Nxqd~bkJv@!Y4S!o8hVV74!1-C z{$f`K_Ev_{_;K($B~IfCmjkteDDjcl+vv&RsxB)tPs|+Ff=st0bryoH5q%P_4{R)M z2xfMGyanR?s~~LCAZ#ma18UP}SZ66Vy!&344tyoSx+*oi6#{2fFi+9#=#_VyI}H8t zOKrR)E%f(b?>;bDxj02xCK5cvt{E~6L1}CY0@AYnF&{xKwuir14o_NH!OM|vcF&CF z&5#BVh)zp`0_0a11dL9F`PYK0sPwMRmugoER)ibVyQ4BK^&aPWZ{)@2opMe&D)-3k zeMJk%8$Z6KOVJ?N-_FAmd!HOnTtvubz#vX8;!X9_v5K;G9w_%Nf`uhbx-CVKR+iU0 z`-F0u@OR9+d22uKsnw}J>1hyhuwuBWj~DglX+>B@n7N0KWtoy(lX>b4fq@>UW@{t5 zgj;fzd5`kKqHu1J5(IMkcI1k+EE^Y9B#CPdlAg2mE<0wLIL~brlik69|JH^q4tf4A ztb38exg{B%xHST{0s*-mpaApRNg=)77O(Jq+cvSwm<3-YRid8vwZ0B)R5EuwWt$w} zH1*I~R7I$yF0F!Q{BXrH_XDpjveQJ1*&7n!$x~9#61Pzv;6MjS~`g#HCaZQzPr*DiH7(c>OO0gXGpLS$g*hGYiBgnj}|?xSScleSS2mmZfNFR zopxu8R&K!Oo8xZGFERn%hTMI@qgMf-G3GYoF8P#qawTC)FN6G1F0vmr4wzv$u+(UI(z1%;)P}JvQFBKvxqIYrpdBLJC|BzYyO%gLYkWm+5YEr~D^d$dV7Sh$W*g_lX^6`i8@c6LH68wYFWLmDfCHI2X; zCoG&VX%P9}5wsX8l0B~amLEMit@4M27qD>yM$Nh0ed6R~#I?1C^`kHnd1lpDZoZ)f zTR#Mnj%M$F=+Qj%IJ;f2{`e*s|0LwWxI^B zQb2JM#7pIQ;xi&-6|0n?QSp%VeLsdmlp<}Yz0NG;g9b|fz0e|;0$H~BWxGU7srG2Z zeqX?e@CgBn7KaSYDD*}^VHBl3%}vSITxH}?N1lm%sa04!Oykd6kD-icbM)j|Xe(4R z@eBKxhmU2nK?=Ww5;IlA>8G)aWwKx3l=Q$H7IC&zhupSQpj-K>4B8Pat1j$uy6$xr z?boZ78cjBD%B1jw9D!up8tTdSedEUG1pC`FwO0`|EnqOQKfNnk5kTa-NPBysonzt2 zwq~BnE(Rf!W{o3tmpE_xZaplU9@h5S*b3w2*T^!%sQmYidmq<>hZt~;mkSACRT2EE zus*Z!MSV;|SwS&+`N%1{GM!4Lwla*w;+at}Cis=qW?u1Dx+BP@?OxpD<6Nc z*R5Lk(`u12>*vMJifzg95n#PH$jdpEWX4%Snu|FR+AqNMdUZx-VOu*^uV0K|<0(_ZiiUyG=pjhf zj3yFAyeE&`?KOfm|4l`wJi86<;lVS*=rH8I?OR0I&rUfDqeW?LELfH=R1RKv5qG3i zK^2<5VV`3X$!YkxgU1dA$7HigEMh^Y$s$;z%(Pk`PLK|#5WvWZw*vAFf8x&X zF3AABG)>3Q*=F-W^S3By;aJ(s8ucd6myYhab;O` zHus00eD&L$iKP%-!y#4z1mkmX!wJc2H=iAH+j?F8iNh36{$bPeDJ>0k4QQ)J15aP$ zSm|m8NKq*wU;+9Il8t|Sl5OK5Uw`@Y;nk;rjMHo}EzftE9sTNqY5dR#q^*d=;H`>a z`MMw5cirx};>b98CElbRRa4f6XCUYef_JX3>G(xk4D=^zCf~G>$3jQqVrA^^AAdTA zLaLs98wGvKaW$nj&j>4G?cZp>$VtZEE^!%6nYX!@=k=bJv5e^!~6Spyue9SEm78emMxZK7{(Vy%eq3hcVHKEM=1)%Z zS-2^T85zm%9U1T4H}B&4!(yyv(zn(~aWli^d1djIT2m8}8H^4^$%$XWP=X~GghQuB z?wm`MlXjQP+BgtIB)>i03ZhbsipfNaYR-_TaxiWg;C(0gM|waz6lmcon>diN5q%hJb(v60xW70mrgYbM4llE_ z8Y_YnF}`18`dMHnAb}e5`Q^v#YoYy;ih}cQDS`|aY4x1Xp@SCX)@K7X#*x>;_S|C` z12(@&{jM}7*IyO#0@=%yMIt{SFhoeYEK03rNHpyT>41F3bG21mWL{x=U@CC`BEZ&zGY2oVH_jh`5?o<5I>5>=2jJXuUN20 z@(SM15}%@&prfM_QT7UwnQ0!+UfBI2*3o5Z+mOqlO=ZzHr=y3z`BhPda>xcItOunG z-%7PuDd!X($L40c1`PLZ`S>HthJOPVle2&zI~F6C)b1$BRRWImCaH3GSl5Cfvmry$ zaOn7Xs(gcCqI)!~3DnR|XQO}|nJ)eAt*@Yq(O&rn`AN*hsT-o7is{vQET|e1Sf&zA zUPJBGffVL;yCuYXA73Qte4aEH))C5Vfs~aNXB@y#S#`5R#t4x0WP<&(PVEQsTtxHB z$`sI zpjBAGgv->xh_Zj&vXb$cLx;Kt2Bhcu`l}Ag%y=lQvxR5UsO}frU?E!zOx-uoNVjHB>;JsC>mx>Q@K3ra_f@Tl)BCQ+x6-xOMuvh3C zb(?+buMy-f)}0!Yh;1oZh>aGq?{?wH%c-CDqUA43G*ae}mE~L0W5LujU|==1hmi-H z40O2ov8G|?r%0=E5GKNl3Lp%_uM-%dC=HB=E zn|O4hpHK9@MoTssEE2GY*7h)Vs@7PJUbH}+S#6DJNOI=TzSOSaOk_I>6rRk!mdF2BB%+-EAtJ3v!zPV97ou# zI7-Brd)c7(mN9CB^9q$AbKlxRW(KcH^_maerKA!Q$0gJPh+hh(DJ;qB1vwn~%TW-i z>nJOVL3ww2x?vq{P&V1`sK`@^^&WV}C1qHgH#JXjn-t=A zTa>puTs^Hwl%J!>Vqhg~gIJ&U+eD+ijHn?aT9Vr9l9Kcu4CM7&RH;R~yoJHvjE(q* z%``PYcNoR}OyKys3Wyri8c2j)N0Vo| z5<)F9E^`Y?&ile@-bJhOCPD;Tx{05;D&ad$Ia{U`)->*Vqy*~xnK$ai_dIDq!K)vF z3mxBDZF2;CI8-zV(P={ac!MOjUC;!p@WKkd8n&UXD$_wx>O>P$G3;$OtOa7)H0YFO zI29oHh!(>vr{k#TbNe`&Jy{1hME}WRmiVf!+l`!tz!N!easYoZr@#pNjdlfdM&s8? z4FSc9e6Umm7-=@qL3gW^Bs>;`pJHo#>aOFJ#}(sp?z8{=^-MG=EeNAso>9voWHy9V zW&x6!m|VjU0td#Ke)|we&@Y6N66`>!<%A~LDOTsQ&?=8z3boXV(7+t6WBkkvM{+76 z(jW7=6p%^znZvw3AM#Y0SEA2yrX-ibV?7PSkJOK-i|^EW`-U)&a=T?N&PRFPC`Oiu zic%P@=XC_Ci7Rhu>FCfaniE#AW*r=2E}b8Na@HnH7}Ynw<%I#KjX;o4O@-5lyZ#Ex ztNEVG?SNx{&1GseMawo&)B2N-K`|SpmGAK!E+wh=kv#VMUtd2i*$!&ar}}b zjWF#QIIlW4elRQWc$7SEmvG^6BSQPo7(?AiF}nJ7@03>1jB-(4=|iQE4I^~H#?5;B zf`~zE&)m0gJhyCo1*>|%%fT$)$NwdPhMuG-A)CII7PB&sRoVMwD6CBl({PDK8eNV> zTXU({xiUEWM2FW@4#ofxN&k zi4xGnJbX#lIdV)TCUbwxSh|_^{YAy?vt@4e7JDqoO<`C~xZAo(voUuP0Y;1T5%^n&_q2P*Q{oO=XEQDr`W)bW-qX?4) z!`-IFYn|LU`ivvLVo$)?HWZPrQ&S%*gtDQcv=Zz9HE>_4UV$~I(*noUNrnoLUKR*r z&N2+C9!KK4!d-YrBPk4#uGeEfQ0voFgYW|nh}MQnjiX|mnU6r-Bd4V6+q4cDUER&za_ki9ABsB)_B<1y)-H)0~0!A75bf)c6S>w|G*Da&Vp};&IBf zstUG1GcXi56;o`y{R-)z{Ubr7v%GtA<3cGrb_lkc7A+88Zx&i_D811z3Evn*En&YW zn?0-4coXku^*Ha$gY%{QI@z$rw^~|*-!sb`;g}!w^jPn#QP1Bmlw7av#`W+ZW8?k& zwOtv3wJZ-)$lX%>3vfP*#X~?#e!taue(}d5tK?1}fmwXC2yqO&#nM7x`fk&cZi!ZQ zOLsWMFQ$i{Z&MIOY--ZSyUUzsYW|9SP{gL^17813{65w079~?)*cc-7ueI|Ra41ir zB3=5iaQwvLDc440IJO?!imaTx%cHQ~xiH4flyzWohi;o+Xo^q)a=}{5#HN0WXEtc7(=3C1t@-o5H{Wh87)Ic4ynf7d(#8lcJ+StN$ z)M6hCrt{Fzcu6EsnV9^kw{TY;+rK+bpi6OLxcG#=ZzAss)#enTD*3{99DYzej2l8n zD7j)zR?upCyC)ZgEBedylCfp#Y+K~d|B_zSO|g#LVzp%~g!q9u?m(|BcbyhHr2iK$6rI18bR51|_s08dO8mTVB4 zwW$Q8P$D{;a3h0mWhML&!b<&r$bs0H2Tr-PqG4f4sAyz zel(OfaTH_~-3?Bvf2KmLGNx@5Q6m!p8xN)i>tlu0_Au7ed<8vL8*JGNs>kOlRZ}2@ zSMH$xD`j4%Nr-DsSqf{a%>CUA9zxs2ooPG=B#EBFs>_xEvR6mKkiyq2B8Et)GrWpU z{FPw|x5JP?K{OIF04NXwQ2+p#A?U@A52h){08MSVeF-Q!UKaiyJ+7cX^3LR8 z4&fG=5N^SjKLk*Stfw#3zY+H@z&pNja}W&duuHbEnWqnMQRh{x> zpm@suBm~RhH@UAACkwC?0j=f>Dq5-&Lf)0rf8J^qHk1DzudWefM#Qs%Nt?oiUy)cd zjKSUp=Ea9<5{QC1IK|MeGmc)^1x#j{S6e&}m#}INE?CFS$W7;s5*v6#5J0n(i>HM2 zP?l3|Kf4WCO9h{l>q>p%cV{lycZ^%GPg^kR;=gbNI+^BsFVx;&cRH1Zm%KDmA*jEC9;rFBYU#pKq6S|RamJe3 z!f=d}ShmWSEIircktF~?8UR9(0MLaL|AIC?3bPvp;O0m^7{e$YYxW@U*C?xBX@`wKfad%cZKMhNjB#-GQ8DGFNOQgDNlafiQG!)O)Pbai$`XZLO# z36LGX-YPE~3RrCAjJ&OO_KH;YZf5jf@<7g0D6KKtS5st&>s+$ihEh$m%o}~_7838; zG9wkKUO-n`mc~m*D(|zq(R1J70&xImR8^ApHx;j;L?8`Dr7aCj2k>N!(D|HkX?z+} zZZ8-5K(-{Y`JDI2h`0P|6M5=kOVtSFgu8CVjpu^*!q$QVKO1{3r|egmnr?K3zC_H_ zMgks(epbu=GV|HO3(B$;hi^xzS)Sjg_~#rN$21>g3)~`$l{4$11un0LAkwtx5VepZ z7J!+unw1H36Wf2ILR@4+1B&E@21=Q)t@*=qFwRdv(gq&?vEELeM#W(hV|kUz*#+X< zsIj~gY}_a};aA>d4cSNv*y%dx%fusZdK)h(f_@&b517dQaN=}YFCCQ$V~8LPR{E`% z$OJncmtY@1Y?@dE7KX^@^Os|)aD|SQU{HP6m?+lDR#ITdGa9G>uh_d0zrWa@gxf=j zF*Uys!WlrQz;Jr0vpcJ!9rI#`uS-iDbqvWy!m>P$JC;zWOsjTdDeGCC7?MH**9rbi zP=akTDzx}s!@N3VHBAK0rib2mSxK zYQ!hJ2t5<|uwmYER-ncRAl{l8xp)fWaqBA>Wx&valJ-*v)5}DRmWLH7w;fini|Pyh zUv21gtVKnFsq5L!^Hn2`9TIw*a0M@3tz)oC`v@OHz?SgvJB9%Z?LUM*9!X+N1%?r3 zOa8{wgHL6+l!`hG!HYGqH9zhpa`-squ;bJc_ujfoXif_bOM1{=LYtHM0IPy(kF^a% zVcsWNS8M_da5F&SxN0qLOh0^b!6HkLJV2mhtXeRh^_Z%s@5-IRxR)&qht$L;HNIa5c{8-Nbu8y|tTcP}E~ulrn?C?- zWTiO4;sG6AF_P(hFfn@y3iRlh1PEwbTta#s+M1jWGCrE5J^*LD7VtXXHyf0U)az|A z(ddA{sP@)r9GtC@mb9#TfXAB~MXNn~*~sI%iKfM!oCU9se2prZbp@>WK`Oi6&?q47 ztR_B2tY%|8Ru{k-UzbP1hAGI~J;^1uV)1L@=^>3$VNWxN>=YBy^EFoL{Q6g-s4ce2 zX5BdHD7HZvLcxQ=)0i%?;S)nCN}M%Yd%XQFBqp9 zH5@*%rm#TJwTipxezse;9fmUmt{ZHQs4+x%fq79{%dbY#7OaNqz4(rB8nS*&SjC4L zmS^y;u<2T1Xh+n6bL_KKpP9@seTgR06Jbn}Vucio-xLGv%0OfbKZXFwVCl_}muYkm z%1*lk8=&lj={h;N>X)Loy0KeYrsf%r9dtQ*E#PMZkPwHoCxa05H>)sf)c-@!{JISqJ zHp9NO)vBm0R^BxC?#739yY2&$7|Y^-j0X>mfHT;z!WsLf)j2+2y2QCNUX7prYtxFU z8Op1}$XZFG70Z^om{4{k0Pb5yj6B$pFXs8?TQIp-=zgTYc;hcTG)z0bbkDgC4m{%{ ze$>JHTrecjr{tRH%En*nnvC@8PooJut*z?+Y>=og6Mn6`ZTSMOSQ~jwN0%=} zQ$sP2ME7oTLCTN_!u@@7Ke`;DujM!`EGp`MLu*NcU1_;J%GW!<^LlV~0kLJw)?C7L zZR^x~x*t}}j2B~i88Kz7FWZ9cQYX*z}|C9`aKdp4P7CQFp4vWCv@SBhmzqz)=xvqm~0 z#3>w-f&&t%US-sM2?Ym55_x`W3^;(00`SnJ%ri)?bl+@ry;Jy zwk|umPDH(-*2JzVXvXo){!VySU_*0zLU=y9qtFc2ZD0JcL^Cb69WE~CNlVazWx2C& z)H0=oW##5@718FM8L2^N5Cmuij$O>$`3JxkV=3Z<7idHOreV;>HEY5c>)fa!LAb|Z zAMRF*ZYCf@oRdZAjyJ9_f#&=LFP28F{yEdbWJU8h*1ABB zd7XN&HZm9MC+H{qzTexr{4!X9z3b~m-`czX*S}!d*0b;4-w|GxozOnBiBWIP2;!IC zBUU2!3OX%usnwwzrM$V4R__y)={c>TbiX11K1iv*2HS(4vL04sE%G-*uVWp)Qa17Y z8a*UF)x^Y6kri~mi;HbQJ9px_Bz=bPuDCWH+--d#$-~Sjz3aLg=VvSwP6fz>d*L0Z zkZnnkza(IcZ>z2RuDrybLC$!a84t6#j5N)_S^wq!hN@Lfou?&^5@~ga7bam{5b!5v z;zux)h|e3<9O5L_GPdXmDM#HUD`vSlr*V0qI6dGUy>l;GGlxk(lCE+`jP0c{fc;5k zGQH>e4_sG35^^bk)GHw=1`nu8n&L#Xfyql)+?wgv+~8hODBy{v%~u;Sec4%6xsjN|^4@ccMryUE5$ zIXvR??U!y0{6qYv^rP#M$7%FlUlszr>P(7Ezp7b5GrNB7MK1G2i^*IrMg}-luET(e zduQWVhL$dYobVS5P z*6~L2hia~ppK^6I510g|o^+R9?&w8NaFb_VKz8$YIASDJdBT9Fevq6hd=nUl&8 zl)xUDUdBv7b>fr4HJ&`m^wqf#^;-)#2iU)?SoDPk>GaF}cZTNq*F2o?;EivQoy(_aA? z6G>rdL9S@kL%8_|-O;R7;`JS8F0dQMI|#Ajq}eOE4o8WxMf5}NgM){7_O=7@NG?tS z=={&-L_Kw7^`?V)#{A6?;yX#M|F-IfZn*V3hQoQlSNAS`D-J%-qX6)Fwxy)&)${!+ zE{%&HynsKGpRyI+Y6Qdt_V9?^O~wHvqW3({KgdPS%4H=Iv2@_aujw0}#|09&28;GM zrvg+0zKYCj{gzaPZQRx02UR*bzEN{b$-g(cK;-aJ%Lop8LVhgDCIc+v@5>o19XCKV zS=dt@HYf8M{n+~0OM|JezGe}&?)1$)bR3F7%WUx1QXHg@3C8=_*ywl{6o=)|MawDT zw1WbJ5yAD;pGg@=IHpNEw>K}AWA#q8?2*Oy?0pI2yZJwP^_$$BnqJ3z;bCmCP8)T2 zqmo1#h{)7J<@Ym)RlTVz(d!`>>{2ah$Qe91z~^(Vbr!yjTITrcGm@k4=VCqqUFWKH ziKVjpTCk0eh<>K z<^8vHmD+e@;4}*j>Ym8eOQYq~%btV^!~IYz20Q6JM|5lI#nB8)VYqbTG3I5W!X!@8 ztxY1PRPTHZoOnooeADig^CAs46U2%+GnU~}fVWr2kZRGfy{ERw@H#MjZy6%8SJaeL zHSN;vQqfu;2^DmDjx}?*o|&=NF9$isq|^i_AS^b;kfMTR!cCk-jAK=I7W%?s$9E(3 zp5mw?{fstWW_nm@r8o4kaSU84A<$rN~%R zRyXWynwe+3p3kssqi9DlqHk?lU}2QWmA~DD$m20tg9!#neWvN$DmjH5ZekQsl2J}) z4lkni7E?O62xkvBdW2 zuY5o_Z8gr`Lq@0Q74|u)H@RDm=%NbLT@Bg{gYgD@7 zgMR=}Ek%6lGaK>Ybr9P$6d)Lkn%idM`r~CV|LLue)3bI23mcbn_Q3z+V!G;=TfLLb z=F5}JK*TL7`p>*yxj<*#KW4L)St~hikHcX$7jMGr+xT$M2JszYY=)n%QIVDQHwUMi z4hh2MHx$I!{nVMqAd)Z7{lHjlZ}i@5$=$w%VPsMO=gtcP5JVTsD%2P~+bn=##j@(* z#OJ$3cMlSo%8TI&AS;|af@Q((9}InR4diVrS69{l^KA1y#aCJCp{GqJwoAb6#dL(1 zHv2CL<70Ahl8; zGu-2@CJM*&ZiO=Y^x?Blk&Z4IyTEgK&x2~VufJI41Pu~Gf7zE`B`Qi;|8fES@l?0K zVWOdbro^X451Qby%NrGe&+!Np9HFW}S_}urkU5kDJ&Jk;B_CmMI)4X~`sOP-@zl`v z{i3V-Bhe>iW~9DTYYuMZ9*Dot*4ptKxwOakR}jp> zXxB)A=4caNPIiy^S3t}sf<`iFaa&MrmeF9{fu|OUoJ~Q}mhAyY`CSR)0B86Qu>^R8 z-WUx&OZy>c@56m8Hj_>#>YCjTqtEvHYD_s1S57QYW^3JJJv9b=Km7mVFE3!ZF?TeD`cJ8U~$5%)@*VnW>)rSX0FsIO3-GKTp1o~{@@OTV797>o8& z(J^QwMG3!&cwO5Unb9$8Gr0PSrdvmo*{j|*l4O;GeJOw*jso!;G>ofLpvK3)&yk1Q z$+(Gt?(X+z7jUXsCK8OZ1TwOWr$((CE3&?BBAE>wl=jBfme~|0vMl3PsXa9~%e@y@C&BPi2}&F7^TF?LcO@JZlw(FMlNCRwQ@@uD~!_(l~z z&Vq;vgTMo;J}F+ggQCXOi+XxrWyR)HBaqQ&ktMJwwy3naj3C_r4UXm(qs+ z$#=RVzHLzJD#O*EJd#h~U<1KIipE06h66UJkU_qm4QeO|FeZ>1;#6dvt_zLmfe@3s zU$3nZW3<9yvU%R|?mY}AbMYRi)MZPcfz76bWj|b7S_ERp{Mnb$?wr|XwRiYZjbxJ^ zR)U=vMj?8l(TCx^&<9^wZypa!EU{?kp)n)-OI+Lo;DaB}N+Rwg$+{8ax`6sLRdw!gSe%*V#p;7dkf_z{+zoR5Zrotn%cR8FH2 z2G#+j)9~A3b2u5|yDa#m`$Qc~lzXyYJ|<#75LW+#=jCkqB?s5w9mg*phzDCv2~s|& zS2O#Vh^A$)v|=&Cr-Ka%qqSugXJkTzLe|Fts)8ZXAr{(*Ya|H`&(`@Q&dt_ns2DZk zAY>^)XUgb_k~mnG0?l_!B0pU#2e7gGUhR)yu%=__*+o2s-E?u@!_2kF9)q1jcNdq# z9Imzr`Xl^2pL2TYFa_^*;e;CeUo|Ek7mah}F(eZvQp8|}T^#^Hsfx1PQgy5=j7H(d zlJyrp;hEos!!zx!W@p@FssS`!as)DVkvqm5T>FDx5#%c>wV$W^SIRQXyfv-*@ea=nemS9#%`=KwH zR)*_i2RuH6-c%&&eY-S8x>s1us3@y>1rTXI`$^AXuV`m zei~7^JSz)J0kXclE)%12L(QU5rbf{?b_uqkM$WP(9PTVHx-K5Dz?#Wn_KZrcsaTmL z*wh5JS|*J(H4U3j3;XZ~dk>$M{h8ThGdi{uK4naZJiBiOWv$b1Z2WRtWCb(+AUSnd zOgSp5jP_0v?4{mmP9#&>uUCvZ$L=g;<;s{63Xd9m8tI!XC3uk0qgd2bXk(}m1do34 zlzgxsWZQyM&KdO{%Oarp9k;>1IIJCAi%&ATu6<%TUtEDj;txvbBtFq_!=VbO%d)s~ zvA|Vp^j0l`S^dN}&byx`E13{Tp{Gc|v{{c1m~7N%%2~Li zY|;j!D-31931KIbL&HFCM+aR~cxp8n<83f0u%1Q0wk@-H$CEjms3E!FDke0btWphy zY|Urj+l88@ewBc@FbIY^dSbDuemdTIuPaBQU zgRte{n&KjjHVWn%kl$CP^*YRCMu=})AMG@gW|u~oet_uziB&6$qS8Gzr6aYT5vp&7$K8b^SC~EjFu5 zb5HOs0U_!fRM}&7v6iEYjxkh6>I$sM?AnMkyz1n*F*+aNq?;txtG+uGY*B$wu+q#& zMfHRC@8cUnQ#}8u)`|lN-_6Y^v$z^nYs(K4FJoyLFI*mFPPh12W>RuJdwz|@x>ri9 z-#kA%6bHc}3cDY_Jq-xa7qw?K>!y&uU$WLr&%>PXKOvsOP0`-6=Zti*?|sk-rWDQ2-s{ z2{fOTT}MoqSsC+?`0*5CHqf02MbxfFaN^l&JqitdI%q_uDtD`q&5f~3_6 zf+N5{UhYhZ!C7>gM7It-cpQrwm5iwv6$bZM9j&rGuRdqyR~`WJ`44yF@dg=sa7Pna zIF{jmKgF7PQp$+y;#ncK+Tr->TFHHbGnjBI^@7G`BZhX?cBNufx~lm;&-9!R@gL!Bu|Wr69Oc#n)^T zMc(=XE?86UQ}8qe4Mnq$hr8seSrB>fYI5sylL-wicu1*O_dV441fLzt>S^ba`4P)m zT{pjr0yR5j(e$6)r|x4y)y0`O4=axo_}gc2w#*8oT~A%FqgqE{c5fq|cKk%0VLUZ3 z=;u#otFzU|_$^2ty4s&DetWmm$EpFyBAgxn$3ALxN?+d$jxY_VKD$aYwS7WM*LCH2 z%P+ONkG(tb`tvF(G1w1&_*T1o_D0Mvctf1gnmcy*%2{V~q)5BSmS1(FJVe>K5dJ7P zlIOTiR=9YEzbq(;U+(F#WPjMOq(Q3GSnbgXt<#MOVJLAzy|2x3C0IRR2pU#*Ww4nA z85JIPSxg{PP7al-Pwfh?8@Dn<=6!Tq@yxp}AT_BmwPE-v`-X|8F$Suv zQmvtjW}=@-hxnD;VAh63%bYHHy=tzrTM0ZInklXF_GCM*J`}P5J|PCw{&fHl%*zau)LgdO^g6W)e$ZqaW6SazDiI6dodumx zKS)@g(UJ&C_WEwW_5+B^C-OFdl2EXih?G&3{iKMzRKkmM&8U+YSf$!1nreH=rBjUQ zV+>`f`Sf53w04FPm!-r+lt;!q4;Jig;XrLIv+K83)BVHcd9O;)!%6!|xS_ zedHnoYokBjlP@aa?jhy(D!v@BNv}PPu?J|$ZelFP;pb#0-mup?OKYS#H&}ppn)Ics=pq$GvhlC6mw*Ep49>R3O;VP? zo$Ix(RC}*V#X9?TuA+xM=Z35iBvdR{G#dt%R0|6$KvKj^jetDX&>Da-002gu`gZ%= z{QRr?rbWit!(mf}QNvSXjLxiTY6G2o2Yw-q(d#&R+Ln^!;x~C+wfc#(^t6dqVV{wK zjc+-?FUNec=&7r>NdD4i%S6~TqqMFeRUlEiwx{8atFy5#<&3FCh?X6%qC z1x5Ql#SsJ2jkGnA0UI>EHIh=k>~HlHx`N?3?Qd#9`5O7iT8I>pu$V(wWmH3QJ`dil z%QKDDg^k9o%EN4G8WvlgF6qUqmqJi#T=w%pPM{#cv-wA@O5rO|5Tnq|^6=K9%Fn0z z8n6w3@kg;L0B`)~Bz{W#asM|b{0v+cIZ0MjV>)X``g9d1Vb?BcNV^NZu*1mN#o9O0 zS{o-FQ*}Fsw2^0(4N7Lk-ndXnZwe8IeS7vbYOKO9e=v~bvl`cv z3{{IjR-AKHoSRVmSxzx43q-fa0XC8qHM_sKVfy_SSsV0E2If$yPE6&CjR8NW`bd3)^ zn37|*hlI~Je_C+yvLZpl>p0;T1C_bk*8*)CI`sKA9Sh=!w<*OlBe%OClBI zh?#33^yGCG&+wSEyni#3b_|F9v>Io~H_F?JxP=F}p9O}Mfc_rl^dIdQz0gUQb!YeF zxg`EYT_|bhc`*x4qr&W6{f4xU^Ca&?#od-Zb)hz>ShPgOx@EorSLm zd3~TcZ(!imDmNcqcQ6#L*qKv@JD| zF=LVo^J3LP1pX3s4v$OFxW|zB-39{?;ET095l;80DY&5|GeZpMxXD4H6sl<)f*YRq z_tMcGG$+Pgh|P!q0q7TAbwRa9y3vS$zva7wb3IN@&Zzg?d&KRiq`Uk07uhRY^f4ib z@@xRp(NkRW!7`xh;$oEq3(_1(fA{Z*t`Va*p}oYIM+|oIRQXiiuv`d+>eKV#?8_aq z(Tyu!nd3$0v$W8!;0vIWgusf|gY*zqCUp%X=0WUC!9eOM>ZDe(Gkqim!RZJC04nTj z_MowtbC7~CN$-rEbcg{-h&Q){-`39|e5+++bZdrG8cdA9K(4FVBbzjswVB`m(Ya{+ zC5A*@_}(Q>TCirgrKbZAd8o$`7M{GB3m!~Nj%%NEnZitc+p|b7X?@pnuMo!}t|VEu z(Niuj9oOLm4FZw=16jA9(3y#n4nyG|koWaX6lR8r<~HaO|8_k+Yy&&V6W{SI_(rhM zZK4i}?ZM+ld}r%vEQ2C%Ei%CL+46FqFtu)Glv92f=ff|a8{&ffa=;$<3B4Kjn)n#tJohvJq;uP;3z%369FpecOJvW@3}JI zW-tEu#?gKTLtjbVe&W$lMnH`@aWvu2>~c9<5#U_+(};338;su1ox0hqKLT8&eRf!R zbUB7(7jV&h_2i+~_@*gLd2YTEk@!=WNxM1Wp+}_(YN^OolY{j5ojp~Te$(-zku9Gk zC73{MSlW#1Zul<71WQ#jN$@us&1%Su<>j#OC9Z=5Jh#8uRF4f{>^`v>D1(Ag&r_Y1 z%?UFg{1#nBoG#?t$sPDQXHawJo}V4A{I$XPygZ4kyM{J3_vq};L#Xs?Y zI+^)hL4WuK8VzGslE|4}O&SlyS zWj>dI)VU|Ko0aMM%91x`NRG;}^eaGVT-uyw6XU#eX96w)ulvMeY!9t=-&Jb5s|j-U z1>^$EVnLL0jVY`U(=f4?%{Mu0g@ncjpPl-%_Ym#)$*@aWu?7|DZT)yQrSvfb6XDq~ z>Pk70|C$cvgKJR`S2X9-;`We;BBmcMK0OUex}f!cu*voCanDO)4#Ak4IAU1)zq&T# z%j1sLiik*?{w!pGC%pC;Guw0?HEe=MbNw}Ixtir1H;oesYSgIS7@MI3YY36Vx5W9- zPG<3Qc(Pv$T+`gnqSxFw3mj}FFR#3}P?ZDbUEaISG z6~rp^>7D{t@HZ49njCfRM?cF!pA{N`JEDhrvC@=!s>Kb>=PA-6I^iEZjOE0DT}cca zCc~iNwS#y9&!y+DK*ocx1C|R{sBNiA%RKb94MlM>)3~k!)`JnEA4LZOBEIW~xk=Rm zX6-*rH?J>Ei=@lsg~l2O@b!j}eA?&q5)_)^t({;`YnF%IE3!ca7JSG=34qQNGP-NS$mwU{@_7Bef8=_^?CxVleM~=4+-Zg+AUDEaXHB#>iP+@p%j#58=RviB<)cU2r zZ<%6m)xmO({*jNu@K3&k$mIK@N6g;??BX=&L6O~GcX~lajra?)_najwD-AAnzF9a+ zt632VJuR-*LtyS^kb66jCyS` zW8lq6cQIoXkbmhlEy?G0^2aOJJhO4Na1OwW%7wbG8NhepxRS(7MEaC@kAfDW zorYwwKx3)7xt-nwT%upY<1Q0H7o+^TKO3`$$2i!?^*kS@Z97Y1Ydn)%Hk4U-@iBHO z+^}$(9y-li%QD%%3>5h6mgU5UaEQkPm&q?;zWp@lh7;~bNphfNlzYVdE{ymnYet_q zMA|oYJn88a&(2mNetQ)7%i1w18+18@GnI4m=O2K-JRJiazS|D*AiB)C)M(RB*qlt8 zhM99ea$sbee+m3ke5yZyO(@<+%&y6x%jiwODb`F|1%XR_%>6T>?1i@MHDGHy?*4`( zViTd*jP+3haT&}S?U#P8I2V<)@C@(_{FdUMU1F|%`26y-{u7e5$a zfN%Dqc1R>45#D!>C7I6?P&p!$KK7|7FH{B>w+4Xj{p5WSCTYOAManhwg*_=Y4&vSq zF*R?sFn<-tO8=FxJ5w2Vh*9a`XNu2)$o6*PGRTTF1H_A3sOmd^mav82K$SzRD=V`{ ztn~s)iensAP;-$yQrBMpV3mrC6#2e=9qUfOzCwvZL}{ILJHd_&ze+fWOkEkK)WskF zBuS@-%04NrZuQiiz~=l7w1B`5(KosO#*EQPM6vn4m@Tcw&3E)9oi*+1x{Rw1Fz!s4 zV@vMKAm;i*62n_;!u1=|!l&^4#$KGd$I&=sKAH;>Vf|^!04)v7S=+f- ztl4DdAji!2y4gru+(Qc zM^X21WBAHZ0DjQW-1{*Rfp^FE`(2mSSnhcsX{X=Sc&rT$2V)RExXm4LJdGoNd!|=( z8wZzyn7r(CR~>J2pfry{l$;MYUY?*k(4uVt;p&a*{EAD_f9f($xg*%FwX+vA_jVuK z$mPdD!M|TSe>%XCnglk^O(NOnkk})7H<&^DhL;DN(?7U5u-{ZK{E7Y&?eU04ZD+Ok z#&x@nsglvf!vFLtM3NE)n|6Xfo;~A=x2Z^(3IU3 zr`>Qp({&V8c&|j|UJNACcO4hGWeGvqL9lnSj7@`0xtll{Q(#FqgDz#TMl?iHi#(6p9v8ZLZpL?bCz0)Ac*<3Yw?t1$yAyE zQWldLE|ENl)uhBm&8fHyQ-X>{9SJr&5^L9k8?P>`b6{|gZc5_ zBSijZbV<5*di#V+18cFMtC=(1fRq-w$LhwsJ}>JB7ODRTLH-}n|NlS19gick-T)Fd zZ?yaY2o_;(7x5t3Lh)C6G-Q>SLZ^?zrUl}hXVNOB98hOPgkq4CqGgnaVgx`DKss;M zD>uvp@VM_e)zv=>YCYp%r-5^5zkwjn2N`n)5KciKmo1GZvA{{5;%8b3x^~K?NM;*l zFl}qQmHxB?qTDsr|Hh*~;g_-9*AWMI<2Cc+(Jv|uuQKYNHIM1%+*Y}YO}wg(xiGs6 z${DrV8;w!-}EIT3V{WPGP3?Z9tn%JtXFEC!>C^|0wOx! zB5I{(j$Q4xf{`U zT-D#__~Z{@AGx_%^QT2TmM)mWnJ+2|KbAGeGP>)$By_5{ z$1exGcqBZz;(Sab^pY1sq}p`8b4u^xe`{X`2dHny5#{cq-;vn}BF+g`-hb!PH}U(U zi$qNxTbD8_)s8S6Uo$N#rZpX7m(*0W7(Sn5FksVCOm3tnYqBz^6y1UTV^}pEdU>~H5asSx3-(Y4PRTTcRJv1q(MiUJ<4HmB_Y z9wmul3HOWpRPr&iqE<*Ywb(_NZKgFsq^W6#2&2^~raC0$Ee1EP3FN%gWc4lpt!oCGW!2NP_N z+y%eA$JizF>#6zVp_n{)f z`j`oQ?0?tm{OFNJ{b5tWcQZXm>2}H3i3&p^e#WY7ROUu_O@*5w%e~c?O5>3mfgwm--GYW1glgy zr?#bv=~|wuC(x~nE~$xWxc>m^^{qnK;$pwh(#`(?M&WVZLB*7$rC3GzYyMfo*6+(G zYp6Il6^t6gyyP)zI$F52t?4xL3(BCj43de>O{I;fEo(%%Keu;Z@S0aVSJvlQt;h|u zCA8vG1c@Y>7>=e&%M`U+I9roJH#*VLDEMl~fOyY@gT3mywH+&rd7a;{Oy94*;Gz;|Jumd&m4jL~2bi+OvuwOUh0P8Jl)! zc}jB%WrOv$YuSnsMXn~m#eCJ0Dv+S^%oiXch@~9C#SF8KFF9GPdZ0zj0)l<@cgTkD zD}pkuvHk&;>fd4lrEtC|M7%d_#VlsV8PUQ~eG^pNuBa|gQu@sLA~u?}q?*TR*d#!K zc8Ior_RCut<9(`Zd*aWuH3hm&-2&;)*>r72EyB|1fvTOqGw z`}wo+Jm?Osr1Dpa_Gh8e4GxtgO-7sp6@@{dL?@^6P=)@ywPlF{-4G^3XJv_d<}nt8 zaBN`BvJ>d#WzNA`4ZO|DpnqC>4>CR&@`3#asC6WGR~a^cBz!J?)W)A_pQ8yrp7@=`q+g=QGRkVhetkxl|q0?KRFSKiE3sP!r1V|`+m9Eh^pE3 z`8X88bgbLaUsYfLE9pNbAgTIws!_;`?GMDKA99x-SPa-5JVgD56n?E$XP4#hNMIk# z?`IkwH{utLOSfyBEOMGH=+Z)bRtv@D=>(|5sl5o`*f6L*VI~mxc%J1>jNeh+b>~31 zp8;B{Ut_!ZCo?#|qD4|!G#3@AlxXOL7lN1+=fpL%5Glp+Sw^26SvulCRhv2o2$n^! z1uxzZ#<%A@%zLbnz(2qV_?!8YQ6<-s|5ca*lM7^`rY*P045x+sQW=pIkdY;mClm*g z(`dgzTvIa$HW{~b>etqJ7aTC>R<>wZ008}B3xx6TqPPLf_@}?jb}cp5Dx2s9zMq?v zBs(LANyzZDNOFPskhT?{m6z86{jWx z5qg6A-VHh++|p>93)cKL^QS{Oo zCHH84jN|aYYc2Qc6m6i_$OX|kt!Wh?j$WlP+UlU`Lu02d;o;#}0k*^<2o!|yS~Opz z)GN~L5389nIE|&>N$D(_AqbV`xcL4YW(Bh}G!1cTHB?Hn?*F#-k&|_Ry^EE@lGh&g zH$Qb-P=2k-_Pp=A#TH7?0QAWr z{#k+<5PK1~xo01_zIp`l4?c!&ZITKoCi;r~2oTCKq%imrRw2QpBVMm=f?+3wPpzV= z4$xIfmgs&uy6pbI8od@wt74>Bu^82OF&IohL5)t=DqiN0AJbC%R_dJMi4|1h$}i?w zFc22ip-S1wF=_txx zKE`3XJ@&0NNdC)_UWDYP&%0Yp740D4AE4z>m9+eb0HEDKdIv#BSv14D+GkZ~Ctw{2 zo29tO)ELO8DKL@ViqzJMkmUmDSc+89j*bcQsF>v_nr)^x6db7sGDb;tfZrqSTM6**^6EuMzAWn%A|&p7uw@D%{masguw1o}AWtk2Abo@d+w`#l5SRh20bWjg{}o&q0$HW>KP6C*WnXmCXd;|Dr0l?H`%F}sA;ocn9YX|Y&ebn% zBW0A#Ozg5x?)yZv=~{yc9ij-g@xP8SP==;Q&Y^iNeqoGcL{^zLe=TEQ)bbg+sC8!1 zKI_gKWv4z57;!riD=eAlZ&^}7Uz^5N%=p^DIFD#qdr4kTtLmAIEhZ59_4>TJe6;LJ zm=C*l2tQTL^afARe%KHf8rx8R8GTd~R!(WZo9Qfv4vO0L*B2x&TydIukE!|gL3xu+T}qdE~zcOoj{a7^|M%!r_BtCir_EV;&~z~gD@moTM) z=!!!v4+oZw?KofWOcxZ)IQsALOe8P2~;w|%h6l60Y& zG$cVVq&IQK@{Nb)E9ui_URG;n27D^&Mxm3EPInUw6&alN;n7O>(VA2)@;HPm3|k^O z5=zV$*#7Q@6UCYe>Fp_2P+i3rG-3^a&dv6#o~~!hctcQ!wSaY)gTBKb{SYW9e&S@K zJ^<$PTtUJG_u=MGVx+4XCi)` zp}TW>D?5&t_og&4Oda4Cb*g;zDUwvB>}L5?=+qO&bd8L~Hg2D7+~Kl^fM~Bc$n`6b zM{zo+roq=phFB4@!0<&c+V`xST`VesqDBzOk;fqwp=KpYYvndNL{U>&O|WxQVyWNo zXum0^l3lKh=^?x0w~`>*)qPEjl<(xMFe)i6?K@Cg{DnD4r@`o2VU35O(WK&niRC1d zow55VYCS&D!`1BM3Iai|=BxmAq^a*VEaY73i7;plB!W>T)#Uj+NWTi_wMxp!DXkMl zk#!6^<>|@j0SRe2X_=DSMcdKaD>M`b64wjjWgl#&v9XCx^8`&?u~w=y`DSr7pmlLG zTnwQ}&Cot0c*NzB*Bi0?B3(nCRI)8!qzWL4p2!D1$`oCkfY_W$XvLEY7#LxL*gNg_ z<*TSmn9!r`oT7cLsT%Dy6|}NRh%;1#T;iKGX(35ynld&M<+`Se;+Qf_2eS3}^HPK# zJIznBWUK50ublf zsY=aV4(H!*>PlV4vjk{K3S8wHN&y^oUiYP==ND5Za~xI3mBd+J3@Ze=!T%Qk%Rn^0 znL1eCsaoXAOu4HmAt6(gLexNDR9e;=`>N8KIK{d3gj(~KY?1`Y1;8##5kN+O1_PE4 zQynw2I|b6V6}CHJh~qf)x%)XXj+pG`9GW#tT_r+h4_u{9cALD14QAHD`ULFvOMi9R zd3cuG(pOg3VhEqJh)o>OtRjRU1=36kC)Oyf)JjV+w0o}@pg6V*S4^3zq^zlsQ7v+V zs!EAUg3wK!xQ68(D#W@M$F@?JXzHsvNZJaS_|;ggq?fPAoxHY>4REn<5wgQA0Jsnd+f+A2lW z&ijg#_x8p4UwNofB+3R};&*+tgs?e_=KQOr4vVo~ zka4Yt$8bHW#PDhi2NhN$iqX&sUZS>@bn|5iGs4iNZUs$BnIsZY1M%DeEEo(qzZ&!o z4I1~{UgOqWhE359bI zLX?p!)x5lu?6C(}`U|mGEpE;1MiaA@Rgz9XD*HqKXsHc%!XxHjx5Iu4x zZXZ`Tke4Y7Wi#?<@|w0grP^Ji+u8Vz*GQd(RMARK&L6r>OsqP1oRYb#azw%E!9xHu zeGF@>XewoTK+eW0Hs=EFYv=TytZ# ze;1o05Hy0Gs6@70RoiogQ6X3g@imIY$d@HbXIcqBWrE;2-6XnmI>%IW zBZXq>+x?)$XY_%MV_1BwQeshr)d?SUrApc-13xfm-9rjsfb8 z8uptNqD-FIMZgK&cP;=FBZ;6bjYAmaeFE(FN}D-^V=L)rYU#FurFiZxaQTLfbiz&? zy1C~Mr`=gr@sm!eNZuA!>*Ql&(tZuM__a<0U9fvWD+s2itz6tfSKZY&?~*-Kz?n$g zV3HP4r#9_qk zvfBxPQDYlVSF}?kDsY>NVo5-%oR=m%Nm! z#1K+NgZM|6DS8Up^z?;_?R8g48%OyQ5y7Y7)cZU|F`%WNISWcEB@a|4Z_D2suA)7W z8$dL^G_H8l$~AYAwQmIOfkfmg1BNZ#mwa}oNf=%)wfhOQl$$4tN~gzaaMjDCto3S~ zgibRhZmZRXC4f+87dEtGbVG-2X2|SCERD6rCF51p(kbQ4T&V_}rAZ13bf}!&@{TLA zTOC`_{Wd?0xc@kR{=$l{E`g*#cS+N|pJic-$!Qi+WPo>`SH{f{};p z7TMz4J3g!Klg2BArb=p7iBnXy?|SKTQTrlYDz;fgTe_;GqCwHrTT+7fR)MjTX?G_&+3ZTLy)zVWYo7GlT z(8-XBne(@#m3qpVvevn~qz&b&!Z-LYLwLr`ZO%Qnc*fmhc%>C`Dc47X)yt4*s1+dl zN{~@4D|vvFsHmRzF_-`tu;RhFv}Z!)rP8g}DP)3cyyJG5(;PX+e9~dkD1B(Hl!NQk zX0D*1B^C_k#FuM3_eVwa#e?G;L4)Da_D30{!6(SZsiss;nIO#*Y2{9qW+Qb1#c4{e zc(###(`|kmw)iGHgkYOdRYz4rP?~z0x?wC%q?i&^P@UqWkff*^hp=Xjq`^8l#kR*` z)qvssBV*?hrpGF4jwp$A{{VTIiF4GUM51Ms30}_NWbXi69EhUTknfAxrOuHwPMW8b zNN_(3P|@(G0iLzR+g+RKGP@es8F)V2QP9%TVyZaIvrRRBm1+L%G$u^F(#TMmy0=hf zNdo3MGWtI09ea0!)*~91H)mzh)r>-zQmNNat>03=SW72#J+lMwWK+RS!WN3%}f zZ3Y)pvKXA&{7EtsPNR#@jGE$@@O`2tuEVv?CH$gwpzP9vYcDDegMCJYBOvzG_ysD(E z`m~1tsJdN&U~KowJn)W$HkO|e$7dbC$7V>yaJuPIWf4!gM>?`x(wVY=m37H08=J)4 zA;FFhOVAF}(e!JHY=r&3$LHd6sHaoO$0j02-=<8NI$F}A1fYOYl(K!CjpJj7UVUpE zB*{YYB&_b1z%vpVj-~0$10L9wJmN^Et)Z-w_erw1y;ucCcvee7n1-?N)Bzqz+x?8` z7OSQC`1TQsqL*e410tMIno^}2)XHg-M9@N6YQF0@bKBS(7hi{TQ?mO#v%6EYwUzaf zaQRZc`&yZ1e8o#rl2o9L#JY-rKF(p|kxuCoWUKK*g$!kA#OkS2>S?zF33HM}smUcz zyh4Ehi*t<0OJk3xFN|Q9Ep|ne1n(rUeb4~IQI<8WbdHPYj|}NnkEGqKo3z_gCluLf ziKQ4u1e#ULn}(4wKD5l3r4%eoK-~o)#%1i?r_#m?j@4}5Co5+wrQvw2`iU#0s`XpR zl`Iu+g(VDD_P8#?n~ou}Jr!*Z!t{%`y&&Q{Z;fLZEpCt;!s1YpGNGK&m2{Sj5?KpQ1!qo2g*I=fa4MoO^49d;?(M|m=P*)E|XBb!0AF5gqst5!`Qrdx^F_;O}0BV zfKqJVNn1xMvk%6otE+JtDW*jF%1U{XmpYPhRFx#knv^Xo-2p@>v5v;Z`Uu*LM{IU8 z9hbKl-W5r+xSDHfDCxyHlZ&8J&6H{C_oWgMys*DzK)O?QaT@VA%&W3=z0oxts&PnX zz%gNn#fZdb9+BEvvll~GBMX=*rWrFrs*kjZbG=%E6rdRUB!w^;41{>!WHxW5`P(zJ z@^Q_+quL7ks_c0fMNFD0s7(qc&Zra;)|rLYX%eYvQveiDTQFnQn`ed8OxgO$GHYhh zgHJR}tCHTZC`*~`kf7VZ9d%538`1KSTQftnc!hr3Vw*{aOU1G2lNE?2NKGqM)TwBe zC8ai}x=`d6NGADaP6MoCUg(mGJigLV3n0-iivdH69_AP^cZe|ki0OWVqueV9#kxep z#?(m@!K(X==|XJPF+fa^>{2(gw{u6bIyaMu;d?EG%Ezmbh+W=EFX9RAfER}#lQUKB|811$s+oy$0U|)i0;h)jX z8x13$Z3a0{Q%_rmQ&vl*tum*oT2@I?NebOr09-g0C#uaJSi-PQl4(`8bw8&1L`<%t zLU1|akzir7(>hr*W&nR=9;_)Wo;D&eaUO{_zOSYXU!+5}*yOF7nX;ylJ3JF7@@$#X zgk#rKHygmTTe?!$C{i)}quNC~6qCm*PjiqJ}vNhG42CkR-mluX(|>d7l0 z6p*5z$1I|91*lz)zn8{2`z@aDuts?;G! zO+?9b($g_%L3JceT1vns!AxVy*#7{dp4#Jm8&~X72)JddL z*EU*rq?B&XaFx1V)*+mCHV3pgUq+ZF4TJ4IFE*mJ2%^IiiPWVgrmk{jN~cPuZtfr| za)4TyKb*1!vcSK@d%Xm3w}$Pz-IN0c3;->IHarD&I7W*f!8%@<(k(_Mgkz?UX698P zN|LHoDF#3abnk_;KIwhkBZ+K&$@IyGR_)zR)@^*6nmYVabo>ExDCSE=B^jqFM5iiN z`^*4^BmiBsj_k%dSJ|psgkXxqjJk=6^;6jdsz^{JDoEZgY{JcbBTa;D&Ii&;u`Qm$ zF*$`)9=8vfISFZrnq?i?j7b~gdw5t24i6QMI!&C}SScZ#xh@D827OLI;CROk^lZU4 z^AE#uiThQKO0Ar%Zy8jErc|BkMOIWAbfqMhd1W9SMdEImDEddlwufcvwqt9l_HPZt zu_=@BN-BzZla+|mnKP0kOH{JRDO!-XP-aQB#7ohJ$<*{8g<^8{ziqKyqeX5nidWOr z;;E7sPbRvibomsry;3EQS4}QzCClCgTc{5aZN|k{^tD~GnC{N)ZYPG}v~}yLs+UBW zMpaycE@C}g;V}z4p-V{s5KCtkNODIAyt^n=)y+|4?$DebfuEK*oLeaFNjQnE!YDAR zoLZhr_9+4N!R3d3h6K&3N~m8xXI6D%)zU+B5C zUvO$;9I-Vsz?FmKDTsC%m#>s^j+dx*ij!oqDZ3Sl$infJQqB8~T4a@p6TwdE$`iU& z!pu1GjgG=&xTYDg7*FZ17L{3wOrn$dPP=tdkv6D>g(#s;Q@v|nt>divQ^zpfyXezs zY49zks=&=o88IK0C{rv|VZPkI?!=VL-%j{G$leCZIy7{))9mEY(Jszm5_(6+4Aj!$ zqINbBPxrc|%bus1Fm7&dO>h*$ATqd!C=5uW2X4CXj>{&-nX=HS{`!VxEl|WA0HqEl zwT|1{Y!jqBduwQ>?C#Oi((L~AB<0CfDyMH92fJq{8lQcF!Zl~g21 zkY+AuGK$`Q=__K#c(VxfUN40!4y43E#Am8nWB_cF_fQI5a=^J#nTwXbk%CAiVS!+C zcEoz&995>;Cfg<1(xAYE9M~2di3O-}YQ%U=bfY$Gxl5HeQLEI<^+-xi`#35gAn?xo zct<(Imojx0^vP;i^~>E(L|(<+vbD4Wu0DD6U9?o2D~xo5jADCrisIA~_LV!-)o7LK z=tAWHBufYhCR->7Ep)UhpUN*0nDSw7Y5&Mb9jjgU%x zqDDmV$VVEZl`>Uq>D6gtH+R&6U6eCo7!0#xo8-~R<*2C&eIMNzrQlB%@ciSglz}c? zF-md7eiyHdSc2)8c%^5+M-AHc{D)S5Y$P7*UO9q4HC;>p0Gk{)Yt#-2STz*t_ogx* z!mhGZa+ftPOAq_zPnyzW^Xt+;^_zLMkESs{+?>R5fB-={h7a8wtE5zsx0_f_UzR8P zlN?|E=jZoP=U2b?M}E4Lk;GEH`n-Oudoox505i4$SL~4ZiteG`U#sO8BlAaZyv5OK zKQwmx%v~I0dTb#GLJ{?o&`Ce`AlgNX5z;;|Kl#|%51qt&EK3ZfEb(nQzYfUpm!P7X zq3xp&bJ9jHZ9l@s$NSsEsy(Q=MQ8-@zaH$H!H;*R+~uyj7QK*uPX41&=O2_F+W!F4 zS8g2Reob%YWKuF@l%_}kjGI0@{P>8SAs~Ao0B>l-mn|tq?qL0Vw_`-;As~k8@_gPm zmO~Kb%M*=o2D*3G#7C7cI-N+Za1L_IjeMqyk^wh1>u8NC-VV(ba5Erw#wf=UC?_y= z$;UnrK>(L6Z-|RnGrjmR_r27@ej)qA<;o?TrVZx*07pI1477q@n+{oCGYkb9 zm}$Z?ii%Sv(erm17uUX#cdQ_{t11BA!Owq#cE(C(kdf?=G_`>2Z#>`t84lfI-~x*l zzZ=C0!?PM3YCN;=Zup^4rg#^_N2Yptb13f+NEXT{N}9*Kmhg*|o!wuuDu#2$#Ch(D z@0a1B`QzSV0*GwD`Gb#iQ43Ig=j=LnzkhadC?JOs2`*gg7og@lebEXo)MK9)SpK>K=YP;?ZP-R{&Mpn69~Ge4_Iy&YmOP7&C&xib9A;&w%(lyl48y7H+ZT#xYkp zD)vjhuY9f6cx4EXn&IMKAjgIW@@RoGQzR3+yrY*AM`g*(o*L%gJ$)>?W2iHyba8=I zs$Td)_LibV#$T#aE>;i}o1rWAX4V9drJzfYrk1Iwnd}~y_VSCPEr-RnuAm}iRGD9N z!KoCc`|dGT6pASf6cy^wt?HVRi=vi9<%b{$`6sY@BeWec^o31@ed1*5+-kaZCywH? zQ@{6GKUwSXD*2#pq^KoD6!M)3nNc!Cgp?&fr{piS544-o$7i~|l5Am{KWjGV%ClQh zV^dme_eHjU+~nAhphsmo`=8p#TFR0oUGgnPZsfa6xsmVQ#Wq62K6Sruc7!5T$Fo9Y z+dAzDc{6SHc|y@P(m{RnUDCHEB_St%)iOv%^5m@%*?y1R5vOZ$ByCpEQu@uE!l#8& z(oRA3SiO9r6ogGmgG{2PR_f;?^JlCkO82E1$XC#RWgsL3p(y|*DF6hd1_2;s01N<( zN-deC*-So<1j4CBHXVmZmrF}2CgxnBx)!nnu57~VnzA>SF-lRoj8#h@kVX36haheA zk8<`i?561UO|kY%md2Sji{jRqR=uOWlAqZx8_7r;$U?{q78?_)&tQ^wLM4UHQUv=% z^)I4r{@UAi=Kh^{&Q!@)e1f?bO@&GU7F!rlWho&=A9=Jen`xLFsavwbjHyz>atgy+ zK5^pz07`AOm<|`QG;>N&w5Jxuf(aYbDT5pr@NtS3X@l znQT=uVuBJJSORrC1Cm9B*!-4+q+w`?}+ht3=wzlxI*ey1BQ_wB4?kQ-UYPU`@Qm)xH zdraFsp6^=90wznePL>o-@Q&&1GUBt__PsZyy(vwW=d#VT*_AnjnU|8)E=8FMT7W{P z%0$_=l%*u83zaQ;818RIJ%g50SGTx~l&L{eaO@2;1(H(2wy^-%kVvMMp^^2#5K=+* zI;SLAN=SFJvEj$x91~-(sXIBcn?Hh6?gU}jRUDax1T@;8Qkj)=>_{r8s$A*HYi~>~ zW{vvhgq}Rz-;SB~$F_SK*b67KuV;HXvzB>CO|)2K+wZB!04mjeTjfi%UK3_a3|5&_ zNV3_~YAm*SC}F!D4{x@Xe%5VO?R!jGl_1&|WxJ)4K$CY_mSx#ckbe&P2X8bCXHA-> zt47gt(gny5Y{TY9AjjQ!#a#3dL%6%-9C!S$8o86-gK%(IbK%{X&M`jl1&F^}fCFdn zzrp=FWt^1e?Nsw_SwD$r>FHMK4O&vT;mqk7(`O_(05j%V`=^n%k9M}Pt)DdvT|tRv zaglZz_4hfxa7~`%y~)rU0!L`eo9UEb%u|zVoAq<+=gs4;-WCv~s2b7#00ij6& za~y@9Zs{5vs9K=p+;Gd3M>=9n!hmjLFhgsoVAsnhv~@1nV861f6r@h_R^NM;hC7NM z_huJm*em)V_I8fWoE$!!8$)Abs5c-x-q(#)LJ*)*pp_*+rAaKxNnk>=aC|M!K7976 z?CS5^Ylhc!TLF}^p=hw%5Rj>s8+5dhCeVTVWDuoFpD2(f$y(A1R1lRgrbgEOR0A5Os%1G5A>_BMa zG5LM8+cSJ@mG5b}ud6ET*1I~6>WC&ys!1eEwOM8m1nWG|H;}Z{7ec~jC1_94H+|t{ zyzJ8Lc1eO{wSeM*a@OATxrxOqNud}VQc6fA2tqgr-Gm_sLJ)*QKB7f349bbpq)QI# znzW%dxniOm@(y7V0Z|D^Dp4!|1d?X?w#!^s3$;9vy(&`8O7U<_4 zbBgqdQ8X%66HY18Y$|F3W=?J>m3c@!3jJljY7B8aKWDM5VSDmvrl|@ps+xjj%e~)z zV--Gr%f6A=cuz;PROK^qS;n?tWA}Mm(y4(Ng)PL{qpQ^o2vE+O(`J4Vx}9I+kAUxv zSXizbr{1L~$3cr`l|t8{XoFr4q4~kb~9t`8&Pg~vr%{4mNF(@m#p%>aNwu-Eg_qibV-C6t#Wc#D@1loTW@dZksR-9f7nRCe>7> zbl4&dETZ96vr-jMpmX&IE{Q1(JX>HYM1PXuadT?6=wL+JCkieV1r`we1DA=DAR@HpjBI70OMu z5|+oamt>c}cHD_tN>aI#6KuU^r7A_KGG?VSBUbbFld>BPW}9_;Kf2^wZOR*y?~6iK zWGP~s%bvZ<3gohqW~3Tv3J?6IQmrvo zw8^O?7AZ<<|8CluyJZ|;6~ zx19d`*iUEMDeV5|m2&Kr&1AW3NZnMyXO#AfT;Kvtrr&ItziPMIN?9g#rgX(6ARrXW zLK2^!ug#*qc8=Ps!uq#bEw+N-Dq_E4l7hravq(!xv&shva*&jgO4REmM=Gj#+|=>O zf<~`${^wv@J|$g0c}3U@k7mp-rlj-Ji55gb&aooHLngSN5O^{Z*5f*ifdh3-gj$18(yOJ|c|dei%5BxiKH zG2@Cdp}aD2$xBN=>&IFP^%8TX$I*nM_Huo%$OGCc{$=NY1L1&K)<3X6^`NdrC^ z@i~p%6<+HQL)h303tigaaVLg`IJWRmBmy~;-fli8F38EJoTP!cPZqV@Tmy2#!1iSj zKq8pnL1F{8gq)g;#m^Y3rGgt4$-(*#W9c1}MOy62CC$#Hh7Fg17H8ocwu)+%y4NMm z$gn2QtCBc}cFEK_y9}t9rCbt1fM5@Pp}@!h+UN{+P86c8z{DkhekaBHhMEx=S1qc= zMY(BOGY)vRL4MwWfi zZ8dEea<*qaCNkyI2Oh~R1DhmVjd=|XpMYq}l1OkL2Q(Rg?m({)GRipFlS7)e4NO^% zR3f;N`G~TPT7U&y0}dSQ+z8FbTyIba51C~9?jN%G{P5AaEGEo&I1Cx?*E|`tW5O~M zJXs(qv>N5li#?pTAVgRtM*w3^WW=A_V~OxR(Wl-SEjU^KFs__N!Ye*STgE!D%9 z2*5=_01e!@9P;D|%RdH;lur&FEM1tN8wP(Zlvqn%EI{CSX!!g%Mv9h_2;LRXz@M&o z(vh{5zQL>s)N(oXXW4rZ8M4rAb{xqM^Uvtftd&wM7#$oI>lq8#hj(7VGm~Mucwe2k zoA$8NNP>j|&CzbWbc`iQ)Oz6GG0=?ZWH4E_++!iHM5!bKU(Zv;LX=v;j;veX6;gn zrZ0|F;Sm*5fa_}riAqwQ?e6Z2{baIp2HBDG53f`}xv2)hL>>Tq;!qFnOY!dT9O=d( zfWQG3lBZ*v<$mTCBg?@jB1jB47b8cumi%IdasjwdJV*mQ9GHjJqlxp|8A37M1Yq1> z^Bn@y6PuDj40x9J^=R=K4jK6#u3BH`$|CjX;I85Ghp(11aOJK(M8$$L0Y^cGhaL~( z$ic?FbVN!L23`8a!L=+kKUl{#2x3E)@Hi=mCD-c04l9_eu#as%QwH z!y|$Eksq*cKI&PCq3R5dvsbTx{C6i8CC<{R<)#OWnA4BR~5#xXzu zlf?PX_s{T)!jvrj=%i4bh8Tg}89`%FeqW4NeLN3a3wXvZ`kAfQuY_1;6pZ=k?EK&Z z&_qU3*JH!P`TE*1l)fc~gU`MqGn2*73-`Ej@r-G+Nj4VZ?Pthpc$++3C@M7sc~`%z zp%<=cHW^>5>)PTm%D{Ind;IsrYM29!?`qj(%=YJe&t_2xnZS3(!a+_0Oq)#4hIMn5 zX}nM25ASc?jMPW%EvR$$$t2_PM{7?!;b;; z)})-kfB3+RF@8f1Z>~vFbUq;afQ)&Q92QUk^gQ*yp4f#`21ecY9g$}8c=#WbNf>bN zJ}2|z5Rw6M^xzJf{W---*cMSIOZ(XQ;}&|ut@!7ki`pzK<+6K3YFlvC`2q8b07+pP zHPWM%`MNmHB*QnhH^!Z9y*;g7RW|YmJ|z@u>!~C7^+Yqn_YA4^YqG; zfX}FN!>aSHLL+=Rs|E~P$JaxH^VH7-Cd?ZvW;GXoJfl{!pznP^9u^-aeyH5eOPs^p z0ifdCyhXaBSvd^sZ0tp>d!F~dzts+Fm%NiFH#1|Ai>li9posEwG z+HE|>^%E>5SHF;$T!?R?1b^LW_+Fr#4f>b&Br zQ6w>;VB;LIc5W5b_)F^)32eK5aZgyccRfy9-x!8-SS8xV?cJY@R83m4NCS)g54tWA zaR3TZgNFl<5F6Q~9&KDcUYb`g)~}C=`Nf7|Ij^&Lx4tooj%PDta6Rq9DZDs=)47_~$Ow;zMV?(x$h zlW^hbrB3X?InyQsTrk7pBP)OUFCVN?#}VEm6s;p)J*^ZgItJ_W^M>jD*MI|0m%=K? zI&=AB;3F)lBT?`7L`Gma5C>iT@r+41o>54R)qd#seRy={A~HAs0HXf@#`?j@%)Dd8 z>RX1$Yv;Ntx~&h7FQ-BgD}kA4w5$z&U0rS2&LM#yixrX>QrJ zqcSa5=ASymXq*cI2rZs*LR^!^1Q1xnfO3BB@1!@2GuzI&#i}eHpO%WmEBxcx?hz>t zeB$*=c$4ANa)}C<0xtP^<*ZQ(adUU`@#=_4Yx8e>Mx{BnUl_LKTPoKV!i~eur-WE2 z5mEuqD86dW^^TdIvzCn%CdpOoa_@Y<4p9_dl@P;E$KwSg1k)@|xkaL@2R=-D{;?S> z3E&Qt67Ag;E4J-`VEygh4t>3l zDEmjNz>lm@mjj4#*=G301*B+P2l1;8<`sIzX=)*#FgR4Td^*xy?`gF9d2e>07C^J+ z_p{rMRypXylf*#ZsEqqF<&;-P2F^9OJZ;<8!Zp@{&zQr87>}JR8*=6Q$yTF&ww;a1gyL&AveL%KayB%|P@NQ9oNPLK3 z*kD*Y@bHbK655I}@C?GCj(p5y`o?YqGg#_hWLt_Wt~rh4Avo@K}pfh|tK z*o{wDR=FP+jF6`RvcDsI!EcNAMy$ztW66PkFUXAyY#~p~Hg!C8jPxjme8-5j!DiLC z#zH1sC#9@|Wrz6SZJ9s|x7dkrz_nf-9MZUB%1|8$MnY@U`CwAMwxX2zS&R5RdU{O$W zez#y-P;#_UC?&Bh+_L=hIz`HcRq>+{)ikTdVW|U;U}wx-`m`GLfePwg#m8%9!r9+W z^6{@HbhC~GgUCC(HeuhXxI(p&tEr9N&&t;zCo`8|$|Eyb#&_a# zZ|IATvK!;G_i;vQwzyHv4>s>fA(U^TBWioMAyS#4wRt!n=z(ykH5?Br( zlbO@An6b+(aZJ)&?<+i!u@yj+h?~JLE)T0aq4lMl7KJ8(= zHEz9pTe>s7Vzakh^zG#qnc9*MYxZXtMRvA*d_~2J@_e2nRLt%;5oheTW&7g&nAgjf z%hO1xP#KesBO*s0A54yUs8=z~@*3zlX6K2@Bm2qB+~nu;TKZ;gGadXe3djWS1_j#g zd-diA9UK@}JaIjTT(ivf47#GdkS-|MkT9TcUS2I1-eM?D8Upkn2hF}(#>my@eRUzr zzHBX}?%dhp(^PGC?RPvg%Qhn`y}*q+rnx!Y`Sy;!!q0v-dfT(Mw&Tn z0F6LCgAVbTB8A#BA#Pfn+4RRBA>s`-%Bei^&g^u|GdCQVb;dI1f^D1e$Y?;wiymCu zyla;@hhp4re0ZK54>-qM)fUy*xf$4YXJ8v3AD$IU0kEm2T4UTjO)6t)3sw(Ia2zwp z>Kc)>H37@Mpz8N~i#K7?*+i(G2@Ls`I_sYv83D%EjThb;*904racf&%dI-G}$b86q zHJG^|^E$tCW^k%gjdIh#Va@zC*g}<&G|!DYkHb3D@=scx-wyn`;)Y|A1%qld)bME2 z3Z#IaZDf!_tOn|z^IRWjGhIO@{4W;@f^#ME2QF7@3u~pjH2XIMq$;IJ0clcA6}s#| zAQBxWp=lvO(p=^WQ-DB!cC=6;nT|BzebNPEaD@dH3P2|!NdlY zbZ(R=l`D7z<_tg^rN$<;eb&L5gO_$L9|t?MOnjRCukODuBPA=;7venlMvW6lVn8?0 zmLr=p>yt)ODvC%Tixb>=C=+cQn}>TuEh}QlauP~OP)c{dYLcP6QVC}}qyXlmG&dg_ z0zf&IC%6;d9LD7<8G^@$oZ??vt7UG!dOu`pQ&5uGemMYsK>TAM&JCGk)qdEiO0#33 zsKfzUhYie_#ATPE9qe?V#puo9tY*xbk`e&j-AM{!`|2c@BSs9J2WhlQP)T4ytO+3G zNOm^NYZwZsPJ|cFUObO2BOO&EPldXf!0zpga;)l>5|l1x;O$gWwJu_msk1vmds(Vd z*(9kbKv64ZM z?(Z`H02&1ffCgN$ScI>5XDyCUhe)eA!KlHQCs z-Twg6_+~ZMEHwt&j@v1ew2 z>(;ezC$N3ME8_a_j<44k4WL33!3sDGK&fLbqHHNOmRPi5ZPvFI{-u zR`Q4};`SxLV|#lf-!}kd97a`6`2$j0Ks(DdxW(0#DwLvvq>_-^$Wl~>8igm>FR29f z+6G*(w8}{cT+QjFhzn4bWhF|gOSw`KwGs#gEMB6a0}|v9cDPmAuS1C$ICGqD7hiwQ zJ|5=>s_|j0-br;VDZ^#D%wE8oyEi9}61wxg&V0T@viuHlmoBiWj`P?I#q{qjp04c~ z%#ymdEzUaIZtBxF z0jfgDWX`5gNXbM^O9FHbL$K=)9FC@=H$FamxZ+0x+XWTi^T`KwQ>nlsA^RvjkGicc z#?i@LGRNqZfz%QeYqNy02`}0vflpFd!&KpnXx`}p>AVX&Sgi+9Nk<`&%kqw`rJpj1 zYpJJPg()ahf+osL*G*KJvZfTvnuVj;N|Xe`%9gT)OJ#sY3`^>icYq`SlClUQ$q#lM zE+6X_?x+!9SmmMQaxKNX-aTSenQ5Cka0pcCh?0fP2ufzEOrWDCT*ZbfN*6YI&$EQ{2nl%NCzsXN=sa!TJP2Enc^m@!og zt92oi-1lw`iOYlD&L23ihHDYm_*ycy_UTX{r0)O}Mkyfg06;>yWDhh&Y$Oc3-M0C0?}50VCPm^OS0HEn06u7Ywj}m&qpp>ksK_QX}BqUvcNh|O)PJ^!b*^aRL1?PU9NO|fjXF~iWIe( zNl-v_1it!`hXdLmWC;M4XCfj15ofq!&L6VF!J{c6g*1e{VZ;=*B_TelT`akK)apXY zopYwCN&CVVEu^MegoTNdS!j#STIDGU2%9v_nu!wADGO3%rEFI=c;5(05xBBukP1>$ zEg@@IO7W&!f*l|wC2AyqNlSo~d%MJ`z}*hy6&3-)WcpRel`RqksnU?MGICU7bwnvZr3G%By{*!;*pgC}07hV(;@vss z8Q(_prhKC;iD{ITq;`cWoi<`h=S-Zh*%iLOdT8HDM8!6R({FTB(XINiEB{hM*4~dgCr;nOei*eEoPN%SbPtZGa=Mn2qSRV)J8v zaQUCF2*g^izz>GKnnmhU4DNinj76wq_8G;*ut;hi^4x2loN>w#*qZ>Ss>C=62<`om zG1-e-Ftd0<-J!7Pss&z_35}N4xcQc*kWG8 ztC*Cq0EIera>U)3d)u!ljLadgotd-qu3V!X%9IJrk?)GB)aL|-In>a1if6)@#gO%K z{owcO6O|Pkl6uMcmWz^D63=!wzbi3p^>1`TzAtM62W|dQRFGVN*Z2(LtihWGJ;j@l z`G9hZjx~$K&^NQO9YW_WL$fPIQmxms#3A=eiEvuXIF8Of{Nhqy&%cjsRFFuf6n-=Z z#F)>zG{gXL$|eQCJYY*^+4K2%;v&Gd;LVlnZ^UYO+A90QCpmFrp*c5Sj8QM@`%g)yhbCJO)tNXfW3?ur!xKQs=0L_`(^h%PN`gLR*LTom9N`}J>p zC`aKg+PHQf#>1YRBFs(|ZX>TAIvA-x4taR?MZsioBhM~fUE&EF+O?l3ZmRb4=Yz&4 z4nZtNFG!u@j+NgZxgL8Xd$aXPl~`n`GHOsz2qA>TI?(xM0+KU3%1FuMLArQZ+0Vu= zLf0W^n3K4?AX-Y5dm zbz4=s6r!6I=O)Q&QbI{kl2XTck73zs=4Q?94bgqcbsM_dDs;prcY1A{p3c`KJ_dD} zb7cbKbgUN`#{U3l>5RImbs&2c2nbOF{_7|;&Q7U&t&{F5)+RXX<~aCs>uX0~Oia9M z3kpF2QxF!9=qe?+C@+xSbP{j4t?Y=70HmoZDNrd=NlKDK5J6%H;tj7J3-&q$_xBJQ!ypCaa*q^ks3rCI0PstHoJS9FPr-9@5MSAX`u zaLcf56uqLmh?{clY=qwyD@?FEBWaq6Yqp`rDw?T?wt_(3O{}DE8EYbd6Oi+qN|009 z);e3CHXitlD2CJxEfp&#D|q}P>lGlHFd)&+jM{L>XN-A1@h3cT?!n(mb2&u9rD#6M zDJdX=oWg@#9L2{T9OKfv71E9yUrA4gRrQ)XyQkV44zz zms(cjqfs+Q+rD)Qw`>g z-F&f$;XblZ1xl8RiDN%$19?av(GkBaW$iFJ#{iF({=ypRb?MppCgw$u(f)405KA>6C0F`&u!~g1~F2;9A6Y zM%F@dex~FH6Y$}gH;f8tWz&&x{NIVwhj(OhoEHx`mLo+%1*&JuLdeovg0&tSs0udV zJ3N6GP-btOJM!b%znn= zU-li&ALDy9UP9{lvo`MgrZ06 zB{G}6aP5}qz60hv4RLURJj#{2X};+^l`mNjex{pJ%=al&df&tV2XbyD{@ib75e8b|Q9+7$)S7P3Mk*U2x=GhTdNe z<9vVeenCwx(9|6(Z8qtQ+bR3Sy*1F*nnnvnq7(lRrI6MebNzU=Ryg{8W6RuY`F(;+ zzqYx04^A4@L$P+1NOMR7QG_~!*~iNi3v90o9|?OQiKK#k>JxRgJaXZ3X&JJ3LiLW$ zRfLn(rq~oB{Mu2Q8uYmfqvlAYh$dwv(@=;o4G$NLPQE5trAH!TjvGXu;REzy7SZQR zh92@FP0(0vlPXw5h&T;ct+E1GQ*ERaN#=8Ld-s5*A7kl@n3P!3XnxGs43vzqVA=ld zUOQ+^wYTO^ID#&*Mf*<()G!lvmN|IVurxm?~!|XSe_y9S^`BrFmNb6)j z`ueG@4@z3+KE*|K+Qqi*a6b{g56w4II#S!feqA7h2FX)u?d|z_{2&Uiv^TPJPH-!t zo??zN#w@5s&=^)V1_b5hQjz0bp&qkv6k_FrK?REI5zFo03&6;f&&+IVMo1=DKpp zg(o>@z&(u~Eg(0*6R?MFe}Ma?o%y&C|D6VQm-l;b>>$HcO0(SOv9<3VD7!vfhPNFViucV!yzu-rs?0 zqS8`MH1X~#Ai1rFiQv$8URL7jEV(dW)QPIIL=^pNU|D6v?Db_MjV(MgzA`eUFi6JK zMaZ?YMe`Z~fmE4={s?r3FU%Oi$S0o!-436x1~OICum%`6=aUmJy%xLDV+)8gNAvd; zKW}%PrY|E`(M-#RiU+tH8IS2>knHd0`gzxgg%kcI5QKe-=*Vqe5=@tCAXX0u>Brsr z%{w!|ogEv48~OQ%>M&8uP$ z<2^{zLDOA;yDu$td9Wa2i&?;u=7T)r=O2MPGX&(jL*h|Aq;LS_83w%+S)HZgfU7mB zm`74btMF5e^UD9Y2(gV;)e)04OqK`f;S-Iq>I&k0^A#@YxwhW+?nu`nPTNmIu|oc1 zE*i|Y@x19L^V3?OvkNcKcZy3g9tcDn+G$W^$#L-}QFFTpoLAaRkqIs2dGORJ2}XWg z#>)YDkaWr;=qmE`4JLOdclckw=h3~3KqVHI%KM>imu9_Q6u1(`!A-12f)XLm+KPYn zmuhyppx1#%I02z7VHcjAKozk+RP-9K%e%Hxd*zp}o={encMVgpK>$s)U$vq*`M3`= z((^po-!%ugCugh+i+lhP+CziS1^h<&mAVzt2wgRF#KlzW-FZgMMBXhk>0~`kk%%T( zu*+@xbG1gMg{UV=$ZwWv3+wAAzRlf%s56Mkb_9#L0i>AcR3|eyKWb9HYt=lFQ$d^+fkSrD z1W8u+1v8&p6s}L>&#gI_xGybl#JiAGiGJeufEo(uKZE+KIf9BavtH;pdZc=X-RB^v!mn;WHD zSzO2!LEc3D6(v=dDo}dga8cBowONd4B8d3!jo8&{ud40471O3Gf>@MH5q?uHCVhA` zyH$j2zAy8Z)Mg;7m>Qtzhh`y4j-{De8L{!k;dAlBEEYru;MCfQf3)XumBQf$iDMhU zx42y_7DJmcT|L!hN;ajTSs5F^9;5l@w2tQuZ9?Jt`0Xo|ew?mT*Mb*8*tw!oP1QG< zg+2TT{Ltvpau=o&|9EOgdFosL*1~e+9Ax8tO`JcUXm8Q^X7T~d^?47=DY`6KES|ri z%bX^?Py4J9EGHo^{BjYPJmzn&63Z<>zM3)vyqF7+!o|zSzkP_rgOlw4EeHAEY!?5I zghf#d@B>dn0r>|$zW`+J&!6k{Z6!DWtNEy^*jvCM8@U19Tue5!WxDZc$-dUbnu?hu z&AsJ8S-&abXt=R&uVv}}J6?Chi`mhu1c^7s@>nxT;}LVKQ{Vd=2z4MppH4NVeU;{b zUg?JEct`%ZW3NvmAP}*<9&)7!d6%rh78f|Ef8;E><-xcO3#bnZhDT)RSD7k6h{q{{ z-f^0$>i7S8D4#FXKt<`PGVL&CV!T1sH)vb8zH**I__sa6Fa|L=m46V9*QNz0~3^*x$!;61|=o0s2#%2nXHY)=bri= zy6D^~@xn^G-Rm-)a!7M@@#`tEt#7@xcn$dvMJ5rv=N@z9K@rwgsc$`fXL$U#;#~EIN%MpMVY#kkM>LsyD`k1QYIW|b~AHd&zT33uTf}dkAEs<3l zD&Q}4)C%X7HaA_*#9KScm60N_8aG$2zUtop{TJ09Yvy{-FZ7kRzz}b$frJd6d4CyK zUI$vEzf6dog|K}%G6!wX%pPl`JY#H)hy&x#8!P{LumA}(XwKB=5Utdl;qHSQAyFK?_=FSo{`?GB|!&XKmSlQDX|e6 z3|Z#b(jS&gB5}CHf4ctx^2f(`KqV^kmU!2RtnBRg;>Vv;9nGhc=~%1<_Ot_;n24G( zOI+?%w$TSKWqz)xBb8XyJgUrDek!5-Vm0_!NtD?yMo&;^RcJRV&&*zHs3J@kZW`tl zzf1HuXDO?Ow$*RybFUbb&7;x9ly|DYQGTyPh`6J)juGb>oeYgUID!$rVwZQ2=oj(< zfLb`ir1|7f`G#l+D36weiB@QXS(b<&^ymuD-@L`%D*@ig!ecl_1QT-3x2>(BF#$(JH-EJQYlen3|$6}{%W6ZkU zzSi0fd$hMc7jf1CbVLj?)()14(ZSgtx&6Afl}Ph2?t{J!elotDGcmXIdbyfD4e8r3 z1W523Ne>p3phiNZEkq0<6*|qO6NluDnI6W5OTQPP3mmbv5oZrnp~@4&==dh~0YMY2 zV$XNm`SL*LcNLFG)qP24d|U4nonDZ88MoTOqnNo)h*B+GMu^4o*N4`HI4d>)I;|C= z>TkzD(Um~BThu*5q+hi3XCy1#2qW8>KM^%aj*Lgl=QcjVdhYLDvz)nXEaoQ$;_>L7 zzkP;$xu_=(e{I+1s&uV0hli&Fe#d1+0HEUdbE+bLMp^*a(5C5D{?J#ugkCqHKG$*6 zspes{SFKq&{gIOr4kThu%W1E-DTkc92k1s1Re0p4Kz@m|hG93{X5m z#|)&F&NQlyFKy=dNUNHrQ|bPe9cye$T+szy&Tg%5Ffqj9`X+Cg8X~zJE+RYi_%7Gq z5qUmcuksu4y`ORWa4y27L=yT>+tTp&$iN4>xEKJDxK>quCinZW+WesIbM$(tkn zig>R_x&dh#@q~;UrnW}AA`B*hMt*j);=Zl{$8En<@&5NPT|Z0&X;MsqT~0i% zo{163yAFlT!?t?AUwU+n8#tz4^CEFg zBj~Pz^mCJRmYmv4{LX4lmrqArrI~Z#{_j4}bS)xKlp;x)#Xptk_Xz$&7q2drPGZ1+ z(PH|GWf0t|C=1NaP^l1tsaOA5i_ZUg3nayhjACkHjg(@Fil7<6fejVt42+OE zy-n_)tETbA!~gLGKfKMdc|4a-wkzcCW%Afebshb%Sm-|Q%eVknTi7^XYuH#%p$5x+ zvA0rncGX||fw+qiX>{*zgi*|q$!mxp&xCcLF3(|WVyJg<{AU(Q-Tolr{e7Svxv??! z?D%G>uA;uav<`mber#H%Y=OI?r>{4c+tPlTD^VQM&g5RxvT_c}i>|a)!^Yl84XH-P ziM2MH`_%khwp|^|XubQmPi=a!pduTc#oRrINkz$Fn5)4CK?VUEY0x5O2m;`9X+!di z3?4ZPYvN8JV5{VOj>o#2s+YG#OyT3wr7s(*78&wfYTaK84H(_HauJ5uA(M!1Q%w|e z(?5VgSk^zlydYfr;iye^Q!T9anFE31aZ)R}ns*NGNdHM zKl!*+^5@VG0S2JCi+yq-Sh1>*y`DKHc@aM+xLcCAs`Rq*`SAabi_4Tic`Zmvv&+?> zxY^>n{bG|LqWN*qGe_4yK+AvsMyD;?f!YC3ioOK+7)y>l{9Ey&F-gG7P5#*oN}#G0 z3@Go<+KJiRl7-dmgp1ixbY-K9gX^QiJlH96D7lOIvi}d@WT2_(^dX@1z{31sMSmqo z>_$VPthUyD{Z{aZ)6S~`=zhFRTGMLSUIQ{cyUz@!`PMKk&* zs++gz(6vuRlZpQTm!eTnwx8c6%c9UHEMgRyjPKtg{#Zs&p4IGL1MLONUkQfUkNF<4 zwbepfGc}auwb?RK@*$4P>A>RrBH|yDIan-Aro?Fn(fbEUp=M7$gY<4CRoCHCmg~h! zJ+>j>kV;TM7D`kF$1Ofyr~Q-QvB8_{WcXcDtfK-G-L$go0=W zTEaEVOut8vY9DXXb2LvhL7lcy$G5W%8^^;$L%N5E{>FzZbH0G@;kl2Ii&nR>QL0B7 zvWnsVH-rrT=Z=2>&r52d-8J$}j~E=e=tfs|uTc0H-v$dfKcEtZKx0NUVLg@Y`ed3)f z%$Hnl+oY?Nq)x_s7jwrh@Q%NYEIf;U#*J$1G#dymH%qo96RR)*H|+Ar)ixB!yv^i% zYgvPBc_Nx}BF83lJ#mKvD9hE=Xeq==chr?FTn%GdG*CD8LO>{d9Feg>nuAoaBKRoX zPJq04cLhvb&>PsmSDDQrBAWkMHGN4g`Ovzyow{MAl&X=C3}4rTZD8Fz%ea5ZfBSHO z7Gt{%S2rA5Zh*kSAK}$79uun$IHS6{QJXyflj<`_f|LGPQ$mW?jH-2b{I^H>Rre#7 zKT8l(kQJ*Eawvm{bwr&+xSIZj;@T7VG12+WlLIgZiKR4pb{SLk`r|Xz0r(~9(dUMx z>gQ@1ba2Twl+3S4FMjDvXyq)MHsl0hspc?Q6sJCD5L?#b2Xlq6YF2|sOR?D%B3S50 zh30aC^s&?t4uv5Z8BgWzcL*bv?|Z8JIj5htdMTf)Uy_&H+x_l;vdJs_1DvTZm2%{K zn9@F;N5z+85oba6d^^5d>dJzAa9=1rrI>^N#%81>LP7R}(N8|&;>;#(E#aFq3^m}; zm1W#=ET<=6W5woOWui;c&2AMvWh9)8uF>ivv9vMlWO?9ISB9)#c#W#EH6Td%=R*^H zNppc@-*=0_VXBALZ^nOl!``7kP*fFs3#RxPLRYHTuDP$RE!t(nwv0bwx^7%Paj-37oV#FGYn@7~^UShN-}B3$20B$tfPG9~Iz*Z(qOR~Nj#DQWu$Xa-k*fTv5?x05ml znSOD2!jf!EQ@sYM?CCfEnF4A3s%K@PxzB*`RQ_G4lfP z2T!B2C&{{amMWg`eeR%T`R?c7hR$E$4m zNgMk&Gc=?@d0dyh{6x<#{{YJIFN&|h{{W{&3j??NK-mn$W|*V-51>@v`uCX;bHgTZ zj5E?;V&oF6)rmRcazB!P25k9A(3nM9G+A8Pm|+k5oza#N9n>8MROisEi1HQk`?!=^ zuWqGY#CVaF5g;<}98gp|vZsWUX9yQZ8XmWbFy+t-y=CFg1_fgBHph{hZxjv=&2Qq^oG5{`0ug_xO|p_!?rcG(+l> zfmodoA_G%aP?v0FZNLUR0RvL^U-MQJXIZ*ZELo{>FqyCm+)X>jc_H<`F#qXOv-=SE zf)K-cxF&>6@oJmJ7?r2&;2a{jxoNYb!!aI#ZQ*1BSj_%FsN@{kIX`PRvfyF?g28oj zboTL>7oPtQ&=$OqkTC$K?QATqyUF}nt7$;%xN5f|)cRv~qZSpMDNzh%=+<-KW>q(3 zV^xRfL*!A%@0#U|+DHLNJec8|ctO3MN4oSQPG=QbzczG#%HZ99V(nq2n=m|)-{_MK z6sM5=shIS6PPS73Yuhf|L4I_!zM#WKL{xNuQbDTf_~?cI8<^mZ-|y%jppLsDbr)Jc zZ*o6=uXJ;b;Q#%q#CW3Y@%;x_$ypk|>@{?%f7-=_GySLlS*QKTK^p$l7HYZWiPD?^ zb0cThk;2wkYYsNuBaC;cq|(z9CUI0R;8uqr&?6k!N+X1DZccd|g|rW(*(}kla)fqG z@SEnPI8#VtMv%Nxi>O?7N3asM969k)y{ez^dp-c4`-uOKZW7YE>3sAkhC?;18Nf(- zNK02BJ3C=TjO1pmnpYLlBp}S~v}gDuLsUSxY7y|JK=ut3sPvM4cV`bPuxRx;oQ8Es zD)I}m@=}$94!Chf$he(N)xjf#I`C|CH`RNLpGRfINls_zBihwJ_pK}EikhELS~*}$KjvuZNgJ`y10)ftBE?7ujaGAt%vC@g47o*3NusKN?GtT)cWxph(cd|BSR z?~F?g^bsJ;;%W{DyHPpqM2scWtkWZPWG;88YRBeYMKMxBB-nm7O{+`4@(an(exA1z z@%3hS1u%&D4sBc>c~6dX0u8Wj|( zt91%Tcf>~CiepH5sD_|}wB*9PM5r8XF#CyY@*?w>WH$*4EpcM0Ud8>dY9pQN_+e)9 zJ_k$Fs5hYi*Ggtgw`zsmjM!tucykkC&k0(~?CyN-mgRJy8J*j%|N8L^vDFkZTP~=9 zj3qM*!n|vBl_%#e*8eul@f|iWZ_q^Gy9ajv@;qm z-j$MOzI#Q%HJ2FfuaJj>ukn1*T))iI1W)F_<#bB@Ug7Y}sKfE`9_Hz%BOl7& zJkh#Bn|}2}OEq`$cTyxX;SkL6{P%4fHp>F8l(dw%i$xJ`3j&u!LnbLaSJg2R#xGUY z#_Mn7e!hzD5w>}q1blnVdQr+?-rGeUhU)LX-pDNMtJsYaX!WsYOFPw482Rs|CoZQp zQccw>_7`8jSL#D>je?#p)RP>gwO8jpi9`%+7&`L}LrN-dd1aNbGV~jcqf9tg zInM74hxcA)3O|aUHaV}FrdS2WP~Of-;9_u79vC`L5SvEuf0dGItuQlHWrYcI=ixbV z@$TD{ShOaid8xCM+DwR|I;~1#5K$l4E*+x1Ywn|2yR(v^qUkmjsvAkD3=1txF}a== zb&^3BD1*E&j5et;9M3cumH`-YWf2)QzVGgO2*LRqym9|5;-R?plGofR^$);-n3PP> zYp=Mgb4jHw9ZL;kh1ezWUZ*;BsZLK3xU}0ZSCwGJBIOo_J(x#dxP3_f2gta1#17xf zcstr;S74T;&TEPAZ=xO)+T;H#CF?sU+JG1&Oyj65D?hZOZTDPVxK6E;b$r+vy8E7b zxWX|&&{HO3nD#w||5p3#`<+)q7u7#NuzvU>5I2Cc5RG~dO{#9JYC0*z;;symJfWc< zZ*%4K^P|`PRcgI}&N9;LyYBFIl-V)^!ot72>qHX{f-m3AGI9J9p-QJ}ZuaIRC1a9q zp5^{qsGSiEs)xIvfJx|mEefQZ=Mxi7br*{u%Ki|y;n@f&8R?TK&uBz1q17n`VlLIk z?w993K=!_c$tiL`h0LV`-%RUf8~SfMd0$a^Na4FVbg5Ul!GA^%7`yZi1{f$wrioz28ibkumM0Qah9HJ_n8&R-vkp+S3ld{!o)Y`GbiQ&qbqIb)r zp@*M1OsR`?O*10ev&Dc6#^cFXjrq`1+ee01dXYD}ZIymeI+cb~6GA0fPGx?haG2Ze z&n#&*y04wp&TFken^(sQGtGL6s&7gTXe&RnEek+&9rL32kR1G=NJDNPMhbx{y2m~J z?=Qis_@Apkh01A>3B-EaR>%jp$<%P@8a@D7G|+BSek-%GVZ?yom3cK2n76^# zdT(oWStF=(XgugxM}k6+sZ}UiR@#cl&*fnWGoN)$Sb=cPid@tD@II{ZUx2V7HZCyZ z^oOP?=|n|Hp9X#z=kU=2_#;S9M(GwsK!;<;!87A)v#pO5QX+7L&8fSmsab()Yw0~G zgAckY%qz+DgPR4crbpbe@BiNR;k#m_Ie$vlx@ATaPqugH$8~X`Jb3ik99unIi-UpC zI_YvH4B4r^BCp$qgcV6-T3#pMQ@J5K)E8mhgI8Ba++43@WTdYxP{9@&s8Cl4bZX^h zvQ|^iH{F>=f*$;)LXW^`Nme38t_$L>(>4a-ud8J)QeB56@J%G zJ$L@b+)Eme=k{6H>vxT*lq2kLUea5xZa;sL3UyNj3ek1roNN~3i?r_)M1Iq_G=#y$ z{o+E-Z1!mmP|$rOZH2jRVS=Aey`QRjflJeqUDC~)#Jz{Gl}ZOgNuk~9bPdC(>0*u} zWLF(RQPzu$%^A8a<^ckQHMSKyN$K`T1DB#$UCnH@=s8ohY@LP!tZGjDrd6-~xRl{h zD2Bt73!9;yn$8d#u$&-&2BsIs!Kt?O`dVLku$h0cKy^9ht9uD3n7*k?WoSQd6)go~ zpjo#8V%Gd4iK`z!krVHaZ2v=(&DPK`E#4J?d_T9HhpW-NC;U-G(iC^pWMrD3*`M(~ zavQ2%fnzif1;s5tWpCJZ9D4`zE(Z!ou=w%?Nz=+I2Aov@I-{ zlkcxdtlI~P=uUhUe;3>4%fCPWmA5lnn$!b*ZT{!J^D+Nl47}>biuFIW6@SYuB+QQm z(wQ{$scc+9Uz+>cDl&bz$@SYjQ>;5t$^MZCQGZjd4|<9K6Y&d0l4J`Xu)L{T)zBEy0JXRUn#L8L)*DC$xc>`sdg*LM2 z8Z^k48k^5EBn9KF8^zg|Veujb4jl@uc;lx>=ax)-K_)j}41}{X$m0cHV`cm5^4NDn z66`x3SJMs{XZ%H2m;1lE$4t6k2u9x6v<0>sa^a|k@Ec$--u z9zahk9V+EN?_P+yy*|3s_AcXrJ*tV80E542{PNLV5#2z4#B&;^*4{vjqRGLbm;5Ed zN>Z@bky16chi>pr)%m!i9Chfpxdx}EX58MOj!0=8G655*)xT!dLsrZ+s$)pT*QDwi z02jE5oIod+Z^Bb|yM!6*GU`2DstoYtGP1HbkOVsi^GV^Q3l}&CG@=ecR%4gj#T$LD zx#fkvxDCVj;sTmXE1IXxCT%el&IU4P3xG!bCWkkqo%LGRDtrN1^a4nemnpWN9s4M3 zO)|wf@Sa|EiR~5~%+E=_#r!Ny)A5=hGe*x=ESaWNb`_*llYPCAHqDb2UyCn?{P{1l zKxfr&dDtG4g;Q(O6=y0^gKi=yRf6u~jX37dlAc(@#-3Ewz> zHzuOeUu*sk&}SpIUS*-dn#hw{5r|9V0 zT!Tk-gCY_j@w*%fGouXeLx0)RHOaX^OknFJ-@^!~MS}b7Pvyv?(RhQu=~koiQ!mEA zkeyA1mR`HBsA|RNRE;05e0Bc;d+GK$Aya}0Lpq1RL%3}-Aj1(db* zOPSzWVfLl?SR9m9tg_PAcTC3RfyQlb4*WiLcHIW385>xsKHMa|cH)~f5F$Q&UaO)+ zFtiRDm4Q*$=Me#O4{8AKcP6JZ(n4c_mPB=jD|KAW)4Ps z-v{$G%EMQB$3z{*_*gCeeirl|_@cVWM%FEy$LwFhuXR8pGUxZO+gH~aMN@Cg1izwY z)7yZt<^?OWLtP~!#`tk?pQv#sUFEXmSR(YxILuq2R9}|4Xv+;}b^Janw@#*~XjRvb z*e@CCWBHS?FLP<+Lu!2E^xG_uzL26wz8VkwzKIumqbo?iK|^JbozYAkZ7VEr)Zp&` zR4Nm7V5o6mC`CX`d`qDzZ?q%aFF1gf%k#t1hTPJaML_+bOc|x~h0rqMkq9-e@_=5| z9QL5#&3aY3O?Uj(^3bwj#4R!cWan_y&)4In&q(lUThaBL*9BJ)J0xGe{{*+mOCPH^ zPGPvMFh73Z-e!hv-!>Ej0%Jz%pNS}>llY9*GG3#WzaCoijH}(UQ!EOVA7_id?YU3 zh0+doq}9(qUpdV)>EHn3GNu;i87CeL$^_*mVbP_%;%$8xo4pAs zf@)YNDlCslPNcQ#KwtEaK{<41S98$t%0gLZ=+;>nRgCQtC(8m`hx?gIj9;xF2lM8w zuj3TBr3H!Mjkwp>l!(pQim}T%*d2*e(@P@%mbTLvg(U*Q_Raq(nfO36_at2yln+bg zBZg;9JEGGpM)u21V0#EpgpM=G&r zKp?~@P98kmw2B?Uitis~-D#yBgUl6);1$Zk0?|US>=gn5+q8GcB>Wck&LagQ(l~yt zZAGv5C`V;pH+PMVE$D)BK5dym3^^g)H8~Db0**7=5Od%@g9qF?Nd4UBPSw5=T(P#L z;lA)10=ItffhWYz3#A%oimM@b=2<_;B@W28ReBsHKK@u7o=`OH#TvP&P>v-YL^ivt z!p^0^BBI$T@k$~tN3JT0*>|lS$EOuA)l-yK%jG2jXMdQXtG@7z9}Yy%;C>w=BJ!IGlWeLn{vBq?&;UErp zqj`H1$6Jg$0eL6QR-)k=i8mXCs_;TpYl^1412!~O2_=}MGQa*2e!bH6_i}bN@BF2E zmAjiJIcAYKSOj44IDYr|as+eMwFwO4r_Bg&zo3V+-* zr1>ogiPWqz_%|PcJWBlFM zTpP(c_~r9^(st?X({0+lPkd3|S8$!toFDR2=VVf6a^h|6e_%PIEAoiJ%yBGOg9St%vP;8J6rhaD?F#&J{~MHJ}28eWy*3GTq)iAG?}sE$r%N z3uOQaE7Y^&^nm%c`q==5iWvpW8NtYLK|1d0<5xsloT+3t2C35pObPwApAFcb_H^QF z^}DS#t!rZ>E3A5YRhiZr3;26@;`uephk`gaXhiDphAY2J4wCjLn(@07aUerLPFTUy z-+=fZD3wR4THdf<_WrCd_n5DSWAH99nr#$Q3L_XhWLGuT6-gr@6d$z_*T8_1S&s zmo}#~lAkWd=bu!U$-m7Fis(^R|4encicDTmt1D6Gys+%V*Pq<11pn@Ss!&4-yvTTE ze5hK5*E|GW&2(_MaccANI^GnQk9#o$R+44_U0rnf^%Ia0lR%AW?HAk`kYg@W-VIue z*x_AjhAEh>eVSv0t62ntw7289B3;uahghi0)V@_HnQz7N0-2^VmigqA)*}Fuc-z4U z_w#js`VXzdJ5`4u1^7k}mq>|o4RMks#0fm2r>E7_%*9RxD(GsMW8|VSm);Lvl+}E4 z>3HVwSRJ&J#7VIc6G351o7j-})mtb^sj2j%!nqRkn#cN9al`PDn36p3yfK}BBPBt^ zjdWZ@+tKxEs-~UTQTxL%YSw&-fQ_kWWS#@u6OQp}op51CcQBBEr#%JT)Fb0djoG)9 z9%LNAXr72HjDOvXqUEN5BVu}}#;|=RQ)>3M4%S~re~mk&F5(3_{AH8=VCt6@ecxJcaUyAy>Gx2&%x{$_DFKDP$XJp5hB0(0+V^Afl zQIAz#4)sk|1SYx7uxQwqp~Lt#(nJ`ePc|a@Ol4K>WYuIWwL}XSp((R=5#kk#q;js1 z0^}Wc8@j$#-yTrn4&4l=LStj+B>rydKVQsZOJ?tb0HMlW3pTW`msQmRt(48g>K%Jx zi5lrz@)5}JrI}it+iTo`nXKqEBz%o9x6INM&crk5>`m*t?_IZQBXFQ;HNQIXLQU2W zZsH$bG{9f*h6lM>D0na_P&AH>+8+96-4&|7ZxSSUjLMg&pi@K#z1M+sPk|0!<^@bm z)zIuoy!^%QC{!u44$hL%92`)$gyx4`4rye{16G&kVd~tVDibtyL6&-$>oyA-OEc4z zG8*;byhu6rPyCOsR^`R9z$0I}SZw;_%e46it*wl&Q@CF{4j5o_iG<1kYuDR<|Cq^x z`5LHU<_h{{r+4={vSiR3^#$P1`T0ltxyd?YIzkXQrpnT>W?aMxJ)=rz1z1N=Z6P!nCl9Wu zg}G&cD?0Ylrce_LIPdnceuA_n-7C1+IN}No8y#@lr>Y9f9Z09l2Ww72Y%rUO7oV&& z^;JY!yU9Z6+>od_u##VXk#1R|I=3zG6X6h~R<;iz{qL?OJ9gPc*1wc?m6zOvlML~0 z$mBvd+&{&P0VNnW{J)$_hpZEytU4z^9ejSw7}qtRzx|f;A(OkJ+yBRqz#;=te1(_e z#j^Zml1r`=9F}lT8lXd4m}Bj)MSVq@`r*OfydIR0OPB?VE79cw-|8U*6Mavg)pT&> zCWzdcc84Doid3~**RrPI+7=S*Cv4zcMxg!y5qoyLi`ov5Z4yANVRBBVS#(U$`4FzQ zNxS$rC8Z<5flV}OWd$*AhQ~L|@fy--st0t%{Rc4nBn7?`b;v@P*}SSP&J($&*x<4P z)FV(dv*fhz=SLj&5}rP8yH$a5+OfqsZl88Kpx@PY)bQ&!XiFCYMaPR_BvdRG1JJe# zU(7RgsBhmF2J0DgTn+IN%9B1>^0le$cbmXg<#zoCzdjC)`pN>PMg!A|&^;ZF@+_Tf zs@@So!dwp2AIt+Cver<&Hys3yF7Lcu#Dc03Ys8ANuZ5REzQEZK_9NtX9A+FTN^5>? z4gDKnRqML}XV*vC4Rv3y8Eymp0*Q~^l^?0{UQfwaR5FFv-X@g|tdpiqhz6_j6)YRB zp3N(^z0!;JvuhKB^3@o7<+g%^VhJ3K&F?JOrgj9j#iRtS(+h*s^G>_rI-i_a%&flk(*c=5EDMq;3zim%yE2yw?Re9Qp zvqj7=ox~0J^7Qzsg0J=Goo)vk(*<-if<|Z5o+G!d3zsbCjuMS`c%o1xB3bgk;`w;z zn2sBXnx9HnkW?nGFu+^nx6xREWLztht+-+Y#l`|qiAE!}Z_v^WG?F%TOJe2+Bnjiwp+j7KWy9Gfj?k+^0~t5zWrG>p9;(b1m?tw zH?9$F^D&%|)0F~FYsfi^oP^hAw2lK{B zeztIy*cw8AzT6lQuE=HFX)F1>Z`qtWIq#A1#`VeT0q4R)_E9O7dbQcT{Uh{fKh!r^ z3Pf&sxLr&a=A9~2W)4ReeXV2hD=a97Hh+Y@(D9<$UU)C$Ta=H%QvTKD!+0LL0Z4Ux zd3N8S|MO?=$-j4_7Qe=>hz&)R5$V;0oNq{MNuh2RZVQI0uo(8T=@DfKH31SBKq&J^8C^L_q#^bS!aH%}KiA(V6vaL|`Y?Z_ z{20E(uaBMReDUXa2+M2Ozq>1}tHjG&hMv8u?r8TmDJ9(ZP%IQNGCveC@o)r_$Ta8++b$?$3bvx5lNPlkG=dEvp0f}?mn#5!ZnWHu%= zoRNHpiHXHxkVp7>msm*-4L}Q!e;`WV12GNn9h5j4t0@Y(-a{K$u7x;nRHoXP-z#NzPp>ZSwKw!Nd^9 ze@lWAu?M}z7H;3`g#O3;5HW|V6?(4r->>~djt}2MWV|hIZlNK?JZh9_;v;Ff0d_MO zSBa(Mzp7Fr|0w>~U^Fm5%Ozl}h+2u9saBommp1tLGT}enP~wc4Gpj6(J}xV%dcQcM zbCO`Q>@KA)F~Z^+WBpdL%G>7UrHGY9bDnw>)e5pg^n|_xPs1An|5?3A?fe z#IZ@EhpYGvYDsTeFJcNomt!mBqX``Unwk3&U;~ zqyhUjst7cU)GF!n`B$&c3T!(dBjEDTiFCKltfxu@7%=^<8Kkm?e?7Ev)4jrcV?D1Cp(t9^ znX1W%xF!+;U@sL;>7%64yu%V7H*COBNFa}9bm4;6umUk6QIVOihBwa_JMQRRdiC5k z#mNseJ9btpwvD2W^_1Uz^<%T4u=QLYm5ywkXoeC;#e;Uz+8RhQUZV{lJV9J~*v_7} zfyd?_U?MIGi;O^R51ua&nM6tlwq!EN(s1oZ~4g)vQT_SGbnpniZz; zoW$S!A)SdCSvef^?Ff>q^Eq;PjX2%vWh$`|0)^2m*1)nQU?FUw-_C9X`GV$2?GGSh zX+Y%xuY~!Ki*{nF>$g`d1t%h89&2ab#ETX(j%cPI(z+=l&gQrE*b$0oJcdIxMfmfhR~9GA^AkJjqx%a@Z=40?XQ4=seB|*83OPwgsJe+%gtjdpv$G%e?s+(!b-ED90+e+Dr4nsZ9TT zQA$gxVoLHv*Hj%@vfqAw4*zorFW#HO#h97|QQB^blcs}p>U{7U{1L+Jg*_nyHDf;* znSf&k0SosNwIJ^IalJ~rgI|G9w%{k>Mu^k8)A~7t90`0XweEYsMTiM;)Bq~Hdrv6O z2y02DfB`*<9L?AD>}S;NcwEW2U4*>gT*w&@U1X@_!ik49POtF-a0_lD{(jsov;pJ6 zybInJ#gj8$JVy9WD4$m2jsTEOF*5P#rR}ivGTbkOy4`NOXpJbOb?cm4f3dyC)kkwx zBo1_x!6VOV1vOXT3C&*a{ey7B*-5sfIfo{ z#tg%Y|1L+SRZ8BI%c!z1@O#aiyv1)q#UpIny@E<+fTq-orj#V=I2VOQ16%ih5cZZq zZN*)`c5ru!6btTN+}$Z&v_NooX>ljG1S?vc;sh;H+_gBx-6`($&3(^#&dht}%$zUD zm(1*)ZL{|J|JHSxciU8EyH+WboTVlaF~c6GpQ>y|F-_l@Fcv{Nxt^u=T^jlwJMh9;3)8ME+ z|8Je$$)D#&>-G%JV6aKdbT-{?BtoO{oC<`So^=C5B_$261B)&x*S2BP=aPa&g)!O*6VhvB&BtD z!gxXOOxMpwCtl*A57(VCC?toYpbyzj`=qN_B=s{X*xtqiGmSGv0x3v$5Z3ajyYG}_{^%99cDLOK;ZmOzzc7Gns;e=#J>20+w=3Huj^bBa{} ziCw&dern)aIw8a)!XNfcbX(XQ+U54u5=X<0n@m~FdpG4oEGwXpUbZ~%->fjkoEp8uF!3AFDZu)P!zd_$cGx5sC#s zw+K!Gbz;02vCBB%nMZhI)KgjBo#8KtSM#LE+b!_v2g1c$sNAM7m#HczHff7Olszi4 zc(0)&B18AUZ27f6md)$wZF(XNXHDzP72#;!Ds)-1rK%hNBz*je_WYl~?-4$~`x88k z@vBnaIds)xh^^U3dZqGfDa)H{mnJi_3?qVT4Dy5`*?;pX_ZDx?ZKomiRF$J;X;k%% zrG3$IO4iJ&mOn}$;85pnd`DNp=No>TZx0$xCwK!ph(yEP0^vqQSkVrjA~PAhSw$Bn zFauRZ){QQ=!jx(|#92wN`9){4XR2h5z#E+Y?}5{9cRpQKONG%+))mEPo~+I2bs zp;-$@J=)srvha>qn3X&_`^Mp@e@)8%z=jFzO4B|shL8O2VM()q$W{`jX4qJ#54)0k zLq(MOalV2QNHHpiZProv9RzUi_6CMsX4nz?lc{Im0S!2SH4}ZR-CN>RTv{*vCBs+uFrS~uv){drscu80DyY}GuGKq zr07J#$DsMEd_ozvT6Z8}{qz+ty8n0D93N{WGQSs}_(a+eZJB96Rum?9d)^Ds9(u7p zIBAg2&MW4UCSFds1YMF~Ctuyy*LRx~d{x~kBHLeEfVQu0bcZz12lqspMmLd>AEi4l zeUtD1!RPxsilH|?vehomqs$=3!~X^;CxNj`@Yb_e${TPjdd%C@&1kf*o~g*;EVCr6 zmbceeZ?@R%ymylZb#$+DGq*T1JeRVbd+4yl&q+#p0XxEAt|eUYNA_z@*xz%%H40&0 z(Z()P DN1ZLBLqs3W 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

      8xOH=<*w=jN4`qijf9p^8v(>J-v?Gt3xvK$ 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�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%0Dw45u&odD$H;KZjq#(<&t6+qBRptoV{ zW3+#n&+^;zPi`P6kh##;$oGeBBUt*HE(6zEMN2DJCVyi5Sy%1Sx<$EVLS@Zb7|<+g z^SdgAbL^&Y1D;weCNNuR3(_sx4?%L7WQCDp%OKLF=Q;-DD(g3hAm;=;0)dakOjvY4(auS!g8x>!Mx z%_scwGk;QAAIFuT{CSzc=*Gq7@5a@hx;3N)9D22- zi(c_2FFPjTzv*Ad2CHs5QgI`NC#0BTWA(2A(xyV%b6({aH04+E92YLUxOc5nu*u31 zF3YItzqn6t)07wq^QzpjOZN2dtfz-L{>CVkOlejP^*B%F36=ZKYu>@_`ECdB0@qpa z*OVK!Gi94REpflF1?F3L9#7HoOekBcCG$YXG^WKwGfNGKTG(gX<&?1CPN%g}9%>n5 zRq#;mO2TT49flDMR^PA~;S6vZde2*C@zEGXSn8z0sFct6X@dUucgVEzz2SdE7ERqBI!rU1VgZ?B6z<^b0=LH1NKM$%8x41P0+=Ey3Rxkj ze`1|V8!Ap{qu-5&?40q3w85#m1`$i(wEW*=hg23yLx1bv9Gd8NwW|2>sH@uWb?Ll$ zTE0(;h?V^2F5Ub1xf&&dE9}*nPyXQ0n9Cn-xq%YK7Ug(rl3$uCO9%hmArh-`;b;y? zXGzzOl_fh}H=P%;vMQ-tNfl$;X12VxoQUOf&Q*BI$vKzKBi*cN#kOU=PI&Y(mp*XI zYpUrdk>!HDQe4MWp+MPe$=Y%gwey66(Qij7I=;W$tV~UcA6ZwG+VsklMHYZwTDTy;E)J2h=M&;JtcpuyZaiGthyf7+PFQl|X9ZoKmjMtF`9cc{OIR?+>xv|eQ zP?AoTl5e6eULV4XPN!VX-+0zHrA*MrzD4P(a--E&XP=$ks5YguXw9qSHOh40cFC&H z?&*4SL#b3vs$gjos4L`5{Du7R@dAw2oYbaVdTv=g({ka?9SZ}tyxP=l_-0&lD(`83 zscbw6OC1~7QszH|D`&|at~q|y>Ask3T0agY!qKU0oR$4TnZA!$QuW8rw@6C7~cOWo>ZG>bNlwyiN*hcRK1oBEs0}b@O%6+1op}MW@M- zgROd5zourxKTR$}{uwg7K>gaa$&OO7#ZJxW*%3zD8KWsYzXUQmx-SLLpMn5Ih~~`# z=%76WEN1;>?+-l|&G35^Igo7LR?)Y7>eSQE+Sn-1ra0I3cD}a#ROVj%J?X@UQhoz@6Hx`4X}Q zQCcr&SNBG#qLw7HQt+D{x&4F8>0nopY48(+?QN{hybBsI_ILR@u|egdSEYyOuY#&W zjYVaza zO|2=Nwfp1B*k~neUyblu=cTmCw1{a#%)020U)u`nXua!3E)kbnm%hUrym1ro4lUHv zn&wSa5)$<0&Gb@ujI`MG&B3J2-e0~A2yNIKitbjHGC5wuHo`bws=>-n?zGT2TNk68 z)|u0(AXik>jkb>VDo`Cx6qjd)?&08aQNLss>H1EJ!?xy@&$T9`6#cAJv(@Nasz}FtVL}^QEz&t00c{+n45_ zs|$=@o)q~lb@2QQ^^!yBOXvrK%P!H1ER%ayRkjv;U8GdgCJ~;LrGKIh_dUvz!v^H} zg3PVDXzn8B#b171o;;kiP%KTJewdCOp_Kf%mEHjV1v`pYr_UYl*oxl|IsFIN_Lct- z?G^Ya{9JQ@KUmD}8HoPeCO{e;xMV>SLph@WCo$ z=0!-7^P`ac)`#YinS7NEJN~**zi14hHyKwVobKXuPRKfAMgYyyfLRWUF`6geAM0(; z#GH@P8g|D^2Ur~X84GEO^;A2VW!793gk&Q5{7d4tI>n!uN^}#-_A1T4yKz5mlt{Qf z{f^%csJQaH>ld4PzZU>UJBJ0gxo9h8c4(%;UM~~HcGw=uh{d`c6m}&9^6FvGKLs7| zvt2B&GtG31Bw6CJd_FmOsQG(4^s*y=*>MM_r}4uJ(i&Ca#Azdy!6_0k@sepN4VqMw2vHtI-(i14~H$?ot5_ynYW z0xzdD{+!H|?Hz1FFLJPJPIMb)=u@YgV*HY%jV=ndBH&y(9jqz(#Yn5^*Jh8F1!(24 z)gdt%{OHf)x_ZX{UczOPZOb@t7;gX16pQ4^b{oofK)})>rIGERP~Mf!tmr z4?;#IHtuPeWtHWrcZRZDCo%0uaRL{plIGaJj+n&sh9z3;y6)4c5o<|O9zNsyvb;XN zayF)i!gS5|yceS5#WFcF8xb6-irkRXJ)WlUa{xpiTz$TJ4PDzh4?YB$t>h7-yiLK-!|kxDTg7ss4c*ll_J7F zHJnza?cOK209()JyVoa=7%Aj&S`O%;D6?_1%A!TOU^+0ubLM@TO*z#fW#BTH@)fY= zG|DN-H5%4@baxdaY8sN;HF&F04}+D7*cB*hQpgaSq80?KhXDndj~E~O>fZyo4^sKQ z%LwPz`WhAHqL0TYK4sr~UB|T{yQAlc1${3jEy4aI_S+d{OU^e#K8g75SA12Gv%8kh zY`ps(ghl9H2LDX_uaD$523xYJWBTdI5BO6<*W)MqD$?~he>*}bwsgFis>{o$gwcG1 zLSLcSs^EUWG$Dj81u-V9CXb1W1?*FxcleErSXYF~Q=V*Pl9`RN@6b>p*e!F;=l+vc z7nEs8rlR#dNid_(o8_d9I*}LHB@v-u(~aSu@;Yk;nnf`tS@XpCd2gd)LkbWVuS_(Q}J58D~3RsEpcNW_r8_K=)hU#5f##NFW3tBFPF>vu!Y7wO^t zlQ=S@!sDt$?ubzmI9{ty{NNQk5~H2MGtXEm4E6gnuVW+_0^Dg@^Z*X?PsI!8B{bV7 zh2*Q70E?*#$A-XBI>sY1+fOuMWC96S-P^2^5LoJF$}Yl0{KvWjwxBOl7qq&cIm{+{ ztqY!~@`>~wHX%pxvz5AjrG&^26o}D{CR_!jC)#;aMj4Rm8#Ma5G3x;krN(wDIJf2C zSpe(^geV1|_IyGpt+j}YJHxVPaDtEBR;ixSCmYy|j(fR_R$B!3(HW_QP`A+slu@uA zXqcFCR&5H6BW9SEQ1??x$lf(tj5^q}&#@!OQrX*cjFu$)u=)D!N6_EwCf?s+C2{G( zMusu3fBwJ+DZp}qLbQy+&Ld5}w?I*bq*`PZA5^k$WhCLHT-#n*Wty5iMI(8tW8X3l zOvUsSP$(pN=(Pr6`H(>7{((ZO1OY*eU2aecyj9q+)BD0v_t6F>_BzfYIT!BqBnw3S zkYx##aKffIco_~)f#aat&H;j2WTX_SYp=5$WsyM{ZPbKEx7T}E?R_l!YYC9@K{liw zCpS{4R_A|tZ$AzL6$$k+Qsf?hkr;0LIpv5E@pw*8iC#?(F$!D;1vY$_1i(0b5I*Gw zQc5R0FT-HI*ukZg6K_;YZFU85BB5E~1h02(KE8MO4J*GNtX*N^S`3k^Q1>?~PG_)x zC42;@8sW1T4w)dBA@*V=Qxc0&?#&2dofLjUjv46|1a`mjp!$&?;KoIV7!)*JM{D^S zwtrAJC`e)HCxO4Zk^%Q14AyVKkkpbFKHM?Vp!#qsR4WEkj&Ld*%?FW0V}BWq5BXV4 z_F|tQ#`?O5f1k-o*y7k>e7Fp37|Y4gty0akM5s;QUrq=Rmbws@zhJo)K+Xuz?)&}T z_p7vbf6!A93?eZRcD-5(@9bfZkb02q)9i>KB+jzL%EpfBo@_mmzMpsu`$h}w3lB>o zN(28ciS-)l`Th@y82KJXjL$v+%e)8%_5LQ>hH;TsU}Qu|sL;0)P9|^sjGi@II$u3b z-Illf=&_DjR(WmesmuE&RtgKt<FI`e%RpSO(@T zMSQR2*9{Y)u)Aow+!*^LLcT(Rw~+|uCB1WT#tvEl6iv5B^kmH5*5L?%f%2A9BbeC{ z*!j0ers}Yrz#>r4dxK>kqDP+g-S#$+?*dYcgTFUM??b^C{eBQUN;sFJ~b9AMczIu|G%u%v?U}1Hl7f;kr zbye}6()BNxQN+ZAnEx8-Z6Jm*i+=ee7tI{egTY=R^c#r`le=Gj=mg`m9^*txGSeDW7ltH@;F?r&#}0F>*h%4!?f7dJl?7w=8PBNS8$Y;_%Q@a{x(?hpPPeZFp^-ai;>q~bbvSUAsCcnWPUc;)tV?gzw^fXOUc=?6;1@ziw&;0_|T68*4VrxV*03zyHRHDCoX2 zz0lvf%tW8wukxJ6!0Fd_%8OJSTTMH3Z+hD`ykGeMUj zeDNfI@+)53X=ChE&VYi%2}#~LlT6~F0*Wm^Rc}GKDasiZLlG~lz9UgwYl8Mk6^AhQ zkSjoSR;-F(HR)FH#Qwj*mcjB)RG#k(qHrRRNX2g6a49w~y8F2?J|7~CG!=j=T7N*@ z@vT%30>f*dO396gcqLJ-i*g zUMV(gqK(|;v;OUV93VG+ds|jvX*+2>Qyvu3f#ueX?Kg-=J9JdeZN|i>$Mu z!AUNXMs-O%{2Kf{Q&ht76QRJ*uh$zZ84sB~o5js{nG%`dX;~;8cu$4f^&4SuKCl{$vPD6(e}+Ens(h z{hI45(-pfb)Ixzlm|zIvXuxl+yN#LGO-5)_gHYOv(ciL?`cY%p(>;!G#o4MC_OKd! zmf1FiHX`e`l8&t?Vf9l3++T(Lyq0OU(bpd-g5TVucQpHf>Lzov+#atmw|5{>gT?nC zjYr_SSc6w;66HNAbyxp6IEvMO*o}RGs({G$7K=y%aDIGCf}(H4m@YdKANd2lcRYbD z#jsq2XNaZ#2MnI}Tpq!&7}4IQrKfz>Ifjg${*-UJQm_wR%dOgXi z^F_*zUe7?$Tj3=ZeGbpJqix|LBUDwA+_rq`QQO&VQ4iwUGU(6ezNoG$I!chRx5Lfz z^9Z5$*;`*>hGqI6J|NUhBp{|0V1%c#Aw zJcgl!H7v0i5(0X;UQk2xsCv|jY(D1cC$-IPeT0Drxo|8zNoMWXGzk@jeE#BXv29)Y zxTtr5j_0&S+M?mANHVd<#st0zz3-b32P5`0#U{xG0dGOr`CG1@3!QAV=VhkAW-FEl z_A$g9KDVRHl}WZuQB!{r)3jD!vC}ww_QSiF5MW^|x;LkFc)r<~((cwar+$?ptVvi@ zPf@Z4*w^hxd=YgNPM$hq3oU8E%ut>QqU<=hah>4Mr5FNyN`&~-Q-=`=g2;g%G#uPU z>Y0;_rC4EPeirxP`dGuyfijxrsF9g_Lw$+X%7|$xvyLbI7B_#VC4pfhl?d6QcaA7lDS z8E|>YD{Eeb!Xp;Au_YDI0QwfuetvOs4M1yYlbC13zjw)x>0%vpA*0rwT* zZi$7g`(l|;IjkT4jl_0k^mSQ0ql{@01_@NzPnpkd z-v@N+xg!4$5HMnLLFnalX`oSrpKt$ z5KZQL`!`O(fDj7u?FhGr3vMUJM3Xnzp8;w)fM z?(lU5D)SfSDI)%&v|D^bY5C`}vS#qIag1bVl0*;3^mTK3qyCL;F8#%*v3d zu0*!-nI`7}R=-f^{^TFCL>Sm7sT?OjkPOJAhDE3_;=xWtHRn|hcEqhRENGPgR_v!~ zKRzsBw-}ro{ z&y&85l<3=T%J$c{vsa7d91$K#q(~ocBk&zLwH7@w++nQqZJKgle{p2>?Q|1Xd1TW2 zCsW)Rk*WBv9am9;GQK})f@BCkvF7RfVG>9rm44iL{tv>|QEd&O$l%dd0&V71Yzmb7 zm~dvmBh(8^#9*S@DLj9|FQh~-`CRAk^KdL(Ub=DZe2=h1z~HVw62QID}| zTLA9yNWZ9Yz`MYxgH-LT+L}I=prqV^5fo6A8VRO z;E%(!r8O8t^4<6B*?uOQDW}m~T7P>^I(oQu8Y3Rr($-(4ql8D`($^Q}Y-vOg9$W3R z?1KIsw0@NyOg!Ub%3TQjB~hc$gtpjl8ThxKS-)cEQrtlue(XpGf!*iFt9<`l8wJsOd(n9d?2W&euwgP~ESTg@(5xH-jxT9u5j~A!qQTYhJIn zoB`x;?SFRw0vkp*_em>N+?YF@;g%pdGr1c$qb@jAY=Y6&2Gcej9T(U3g_zA#J!<*%@m)y*Dy7q}A_LymjyBq}X zW%m`#VkOEDadVT;d!1oiQH`|3%}sZ_kgHFwo%KKvzv&}J-!uzETa1wy6VaxdZ6%HF82z2G%q@`{~v6i-wH;4T&g*n zNgl}Hp^49+SJMG4i*GTqkB@&YE1|e%PAap#0mEacp)vS)s5i@DYkLlm|37{QC@}g< z?BBVIH%!^YuL+%Y_~|49)XzjA1tH_D*=7QL>#<QC$c@pW>h+=zK+s?H}ajAa0$C z75QENyE2KJ7)k+VJpufqWm2_d@+S%Cv7IuPtm~7~l8o^Hb#uR#kE^X)8glqoFOVXj z0USoKcil|H9-}$7(0wv4X32bL4#Y6gqDKGiW#K7&WxClhqJ+rT8<@wQrl3ss&I_Xj zyq~-!()1j@v*lmm@Ndm4QsTKEVrv4YN%y*)V5a5vWVz_v=Rn@n#J-e4iWTXezmK~|80a?e(N zWZmx;(I6~F)x1!bUo&^D@wI{S0xb$oX~6)ed<54(P4mpL3>spOKab&7o{C#A`J}s_ zJ;XAUqG8GT{Z_@+2YP%{t<;*@jj~NMmjmE^uec=akruk4wcn3zHou|6*ZVUTKraQ) z$JB@6_2gEl%+d%vfqt>F()(JE=4!Nm&$#QtC4DdkAx9`K-dL)0o@;9}qo$_UI9G8S zM_X_iiom8L+u4txi~HJJ29AeABti=W*gt@ie6xixtP)FHMsYXtYxWg<5^BG&hT^SnPZ}IW|4%412OB*?-#bAfO44M%oiYos1vOWb037NjEv3{<*PavDfIxFK$ z%#>LoyO3-_O*{L<=Bm3ZhWq;VA4IhhhrwR4@^Br3w|V-NP&d^z(LtSpjOG z&CLZmuRQN4RAfll`OaJszXt(qzeVnM7oxA$OH5Q6X3#GDCUuXAPAkgio_G&ve5Wp$ zFQgoZeoh`fg_~BxbXIga1-p6d-G<1cJQk8Rg9~jgq}+=mtx^{ZQO|cI`Uikv&&`%e z(%6Jp7E6WNnP*iEzaJTgRE;Eu2ze*G3KT~2?)R16<+a)#c% zWj%cHmcU8AEOGhQI3LPQ(JU|6c1sGQrZBus0^K2NBzI4?Obc^kP&-;OCyhZw7=iOt zyI^lbkgYkD66xR$iHhm;!}u52YIn8CL0IYdDilClDp7^>e<7aHN$E;#+;=WEg> z=p=U96R{sb!$$0NVi`nQN@*_O~ZDsW$%P-HJ4>1QUc*@ zep;Blgv>A`BL}zzzv!ViclgX*xg0lHNLDg{<6| z6#17LeP21x+JG7i(mSQOsVxuuR%ynRmVN>UYCwnFqd0v6m@#9^SwRxios6#teNN}3a{6$(SIxD7I?6q0Tn-N#;2Y!=S6BQJN#38J$n-&*0CJFj`h z%?wQxPTbd^*0Ypk$x!*Br)*1> zJvJrp*A4S?KPc#>LbXl74iyRNGO3I2_be^OYYCPox2ej$wb3q z8_K5fO^hb1#MZ`FCzwrc+ZQNI>EK6aLco6Bdu~DlZPd8?k31E6oK8en7P!t?YvGpW z22cic^rq*;QwOGZukBHX1AaJEHel`U$B$VqNKz^)*TEgs4u70A06N%q7x4Wn0_B;i z*CgQfEbEm+3=8n&Ebj_rwF@}UFqYB5EVKOH%|`U<&gVj{&B&B5w^_u^8q;AHL}2df zy^v=>#lX)(q0&MoLgm!@y?&~V?ca$joi%!%E=gS9 zm(K!Y&N+6^DjEDR`lV+u&%+LYKicxRYbiW3PT4+{p-24M@>AoPxsTo|$+?+yWMqFI zi3MH-XgHkV{#G#LQ;Ftk(?1pe0_n3UvqJlW39VI0&A)pkFAW0?;y1 z?g-{-sOZMdmjWQ;+lk7H)ukz!Q90SJqald9`*dqYG)^Okzy%YFc3vm363|IR zImcgb9d)6|R5noJ1HT{PpN`~KQMG%}c1*lFtq{1D(_gOinPCyMcSX_9UW{}D3pk}( z&1b*iUr%&y?W9jzZqo&qGuwcn5W`Cn7-FnkzBkh77vuXJY&pF=$sYMInM zd(DhC*z4N@^w&VGK|sNgkA0Y6Gk)_$0jI6~n^@PLRiE>^AtP~tD$RmKPrpagg94MA zFF`I=Lxa0Vwb>F$hHG96UFvzt`JMjKDQv>#;&qOXoc z$=wb!FWMM{k&a4v*t_U*`>)BxkD;uj(j*hKHFmFw&IuOx3&CJ51dhB$(|((O)(wKz z5D4~(yJrGU0=4NKWVCNq#=U_xMxSBnw_kZFzI1TWsk6(KDVfTsZ(b`&wQu%;q6JGy zCGm$8G+V|{gQ_FpMgOhl=c%lN8kn_GJ1eW9b$aL44Or^F#VG1RmuY`X&c+(UvnWf< z?m`#hhdiNgEt~lb^{y_0xoP(%;HW2w7Z6M0rKxU;1ba|7v zB48122KyQg^xn%LR;I$nGp(T8={LF;??<`KD2(^7J~Xdfj?BT%&;C9CkG{- z$Pxsd%Azq=sd1lBc^+}xjJ}Ol+wSKvd&H@7m!_eG6y@Qbv8p>7DYN|?R@q=NVBl>b zo86U!FV)5K{Ztge@zCjw~xlw{JjGZcJ$ouqJqXo;_OA6Ora*>FC|ke(>j* z&~n}FIZLsDWJ2JF9%eXo!~g$0`oD+L|N9?VTz&G28co@d`;#~uN%wW{hpTYInxQV< zDWhbV#OO1>ksKII_FUs9+knedVW*V9l5=wxPm_xP{YP=e(JaL08m%kQRd5(-%K@DX7 z)=v!w&I7b^PhNG+rprg$E8r?#ZVl|fpI$TxHN(lpC^sE`Z&PcRwMsU0dfB!%zhuxS z;9^t>mvXhFgU9F-Is0sCDoelk7{@dW7=o`oNV0d`FyFb3{qE`7J>pfRMK@8**oaP+EQyLQ{{z^K8V^`29d$}bh05|v zK*fx#CK~=dXgk$XTErb$t!nYPuU^49s>o3Uhdmt&*ejo;Zl1*cRFf7C0NqX0zIw$y zmhfYfzqPEk8l<4bx5Vj|(9KFD^fvnYKHEG7j`1>PvNB2nXz_=6;Sj%j)}dO>u!i}| z`%C5pFVf9g^uOBWSzsd4hFM}KXZA-nxTxla8$kM$nB7fuaWkwqN%V+V;`4`qOcI{cjBlJv!Y9lDe`NDn*5q0Sx@@RL_I__ zO0aIjsS$yK{?{?k+#VH{=sB;P4rmr$2N|mSA4%axh?Q-HKgN$B|28}y=JjA(XhZ4- zoM0^C%6%uJhXo6597l!Qv-t#~ph-*tSg+Z*3hs2VtybH3-Jko0ao@A!Z655BOni_m z9YT*n2J3@^6U@5%I3ogAk_~q9;^doHPM;OXao3tKw60YCW ziP(GN!Xg9~kQ_@O^Bs1g%(XdTX9qyi;`WC9@BMzl{>y{-8^pfGD48Vu>R1JSZvoM^ zm^7|PYl29rk%MQtH?l?>Fn2vg2yq5a&HS@_;FKrl{aqxC3fd-<*VMJ4 z-djJYXsVc*V6e)ai_tj&vm5c*!}#Ian+zU*y!Ur&Pv;M6p3@}IX%67i)##`(?CFkw=ELSKOo4lR(F7`9OU=s(V!Aw&i^p>VZq~-sb;30fc zr)D_xLu1GELd0JtAhN&ReD{>%#uu)aS4nxRolhcO5aka3FmL}wq9Sv!n`5ctWVF4% zl9t%=6(+&o?(`P@475Q{(A4sKlx_25?I-K{=hI4DLBM@fp;*9PufONjt27W5YWIcT z7YmZn!T}P^v-cD=)9YjG`zAmaACUzq5iQNl#wb9sA8Z~{=}8BsD+gnnPrEnUba^*G zPG>)9f7yC;uOa$_*L)_aBsmFh_+FW<`*$9Y5{{eWD<{+|pZYauToAHIw2U-h`R(1X zpmz&@02+p$Zu5FvqC|ofTwoY!Iv6-Z5)d)eAmMgyaUFe@t=e+(J+JPI(!QZOdX&lR zY9oEWnOp(bIVeg8Lox6RLRN5QUxRr$=|)hXhJ{~;ukrT=jCvl5J1>!?svL%G=_!tX<#ez05%qgjsb}!SsJvw zwtSLWYUNAz3BRr+cxV|kiMV(`6yTZNYG{Dhfm|tPHRqM14Bqav8FR1B{aBt1j-{fj zd{Y-EE@jv#`2LEoTM1mJ4IsLo#-`|n8-faGHS}PJzG6==;t!$fe?dkkCHV{JJo=lo zSN$nL7?Fs`-8LqDVkA>Kg{Ee0k2Vfgw#yxM4BSoobXYMtK7U>%qn5@NojVx*%0PIK zMIEuPln4ceFZJ}r7&$XTtWN`BUVXy=wl@elUBzO1LTy41uR_^6ceU)#`8Fde!uHl| zUWp@C1NTQHIGjUJXNKmPbsR##1zCK=!$qO#pFOvq_q@m+AMeQs9t=(|U!H8> zvJhVF@cnWBfnt;^jZI1l1w-j2u$Um(k@QG63l$8|Ir_T^+^0M=;rrus;O5iQtO<4L zDQB^x?p5D#gpIA{q0kIf-2$gCj_w}<9%O;tS*00Dq}o}6#$IX4^vZqRB{B5?QXy1O z=f%{49&2Qvl~L}6a4L?bw$e0c1!od|3bxcrhy-pH*#=UKe(7|xnq7O}!|AJwKynlu zGDQ_3hE8EyBN6s}B{gNnG%Cn+pMDeey|YgWmd09|WW>qxTsIqHAl*nbRwW_sC8e$v zfIpZ@RG*|_qDlxfLuX^hbw&4FFr`53F6n9fa|7mk-cjzaD1WNC^5%aR@Uy|`ROWdDAb`5QfBtLV_9Oj8y!-DKb~-j8D4^q{;QNk#b8F&B^|2{ik{r+BH|GfE z)qTfznUg5h!o;#$JB985Q4-FQ6V`t%aH?5S#NtVB2>^`ltxP(><@P z3i`f0OGE~M$ors<_ASY}yut-F$Jw5Fd6ZP7pb>|xw~n<$AS9*er&OzCy;B- zpGX&siGN+|=t+(Sjqd)(BE1cS$P_K`*FHBry;zPZzX1wU{Gyq&^t5Ke#!auUp46pIhG1}uR?U$3Bpms13#dg*$Ar(U#VmA?1 zFgv*1Dg_nRPS;^%{Pyr8Tmjzp*~$IBMh})B+4?|!B8tm@cUNc8bBq9ECxUTpK|gdY zbTj^+r#&Wo+u8H>mccDF9h2fh=bT$LMt--Y^3nc_MUC348$A2e$R~qd^zJri&_QYz zu|VI@$>gm@5^FaF8$qC}E6?OR+J2E~`OwKjG}NmXas2m+=!06mS-nedmP>lA>_A(c zrHX>T6J(*n?B0q#eZAn)%Y#f#QU(|6%5Q19aN?7W^h$KmpJps>ngTG7l4f zB&z&>^``%OYybb~Qi*f?KPg_8zeA$j)LrTxFPpJ0Dqd4hP5zSnNf>++y-1k2OjKyc zpLM~U-xQHfQ4_?pK5 zI2mcAxXJ0ePQ(3XbdLi0cC3wGZ%C(oYr$1sFV*_QGCq*4?r`|6f zPX3_pJRr1iKmBmJc}=bFSkUtcaAGV`6F{HS{HK)3m-0)ZET`8H26D%Og4fI~$tsp$ zL+A2!M}5WnbmbFhL{R(}r1lh1!we51XLL^EpI(47~T&y^0@=lalf#fwum3B;4~ zQc9;Tim=DAVJcI|3(lUWFXgtL&g4bXzwDjysb0rudaZ6$SraYp;R{;eZf-V-?W|++ zVp&MV%E*NCL#R2WyFw!bPDy|ToR*~!WN z^cFeCdS;m8U8oH+BX+%t*dSISovX;jc$n48nz_~^_2Q#{txyF+Zkoc<$3!4enGiL5 zF_$-VqN*faIez)8LZN!Zd=W4vO-H~)RX?BEQkPXLJf-I$tpvyZLEKHxXu+}8B%;lD zh3wVg-`Ht!+J^#t6>vc?gMiPk4Wm8-OJ_a^bz|5VdX`Kz) zgVh-Yg-~a&jZXf> z|KjT{quTnTf6ZXU-Mv`Qpv9%Q1P^X4?(SZoI1~@=+TiX`++B)$ahIZPf0O^ryqJ6M zTJtt9vQ|#c`tGy$`RwQ6jclICjPY{U4WChI;1~T@{e4n{=5k}F*`g3Td+|yso8|jWHz|If>!5a8fo{A4(Ym1uZxBCQ#zk!j?jVm{NC4!tobg&AD&W&>6glGei^szN*BRb%0w(B2zEuI7wP~E-up7#Y&Gq8-$s^>Rn;aN*3XuQBIFJ9j# zMM}FE&$!k%oi^X0YvtF< zr+cVjnU<22XyXFvVSvSBWR+!WleIv3q~kb$j$kvHgs8HBCTnKQvl^Yc2}qIkeeXl4 z4Q_G+&nwBOxbR=n8)2Z?DW@(-blHDR+m~k6NrFMdqmV*i7HMNE)4b?GgfqR`#2;XIxlCrwPJ+jAPD z4Lfc#lud&_3-iyO6ScU7VXcKw9e{AN^IMvkdIfhyR@w)%@0-#;2ItuoSi+ zx9_rRe0b7_wc0=7sI3S(B@88GBwB^PEaDPJo^_4w6$;|yrb4yT7rjE^3zzTaEK*CA z*0Db0sLXY&sxrN!*3^M7X8rE1K^p?r;a9^Ci*nV%Ecz7L^)&6knkW61d zoc;q8ri+iSe5(v94yycO!@I zl!;+rNE|T_CmtpuUN&+?cL(Eu_}@p*2WYtCN7a@b(FC2vIn9Tdrt>})wzG=jd};64 zghqLWa5#O1Unz|^dQvW!794@k8_b|3qsr`Wc?$|gh%E!dA%5S>;9O3K5(YTbwKQo6 zPZDmy*i>L|enQEy7YKe_dovzZO7%A&wYf}6DpSlp&9Z4`LN4WiN2Rr|reO5eM|%+I z7;+GSmTfYxbPS?7*w`G0Rm*w;(CRq`CGo*67x#(q29=?Bo7#-wV=P|GIFigtm(F4Gy2th6SiKe;q1yLd1xA-~4-| z?hNUY;cd(3%c%n`?!m+8*Odp7owt}TGZn{+G`LTQ_&3f!F1a4UsxXLFx#WfPISDGo z^GAMsqSFW5vsRG)cicP#+Rhh(P*>pVKtSe!)nL-v$+adAC&uew#bjTVc%YR%9yZVewlj7 z2g!hC0B5ZrKn{%X+Q8CWtf3KEW8Go=UKsCU78@I=kBLJau~2B#G^lVRs42kb6iJia zx?=I?_-aq)U@JTE5Nj61-fdHmc$9}q4Gb*3n)#E(N1{e7Y#PAtsRIdH;WTcd{(N$N zGTs)P)FsE6gIzo;|u8^ zVz%&utP^;K4L8;ks>Qc}NmNm|<|v9-5WPqA{7uyhh#z~2l`Dgz63b!eP0Ol7$eJq0 z+X?#+TcE6NAdtsvZ>^T1Bd7DYg7HxLpxak}CPs^VDr4#z&y154Ymdc;C4IvE%4X-% zL7$S49;PEMmL|NF!DdK6mF}+M|8MzH?&ad_pzD#=LcsZ7FK8ub(YlG*R?ll4B!Eu2 zFbSuk%VynOdN=mYTZ5P4_@VaFI!~oV?iQ)d>o)p~lMQQ@YT3Y?}#FdJw2agYDYYVw^< zmG$GyhFyVU%f-J%LnmF>B8VhT_PqE$OCa!Nk`FkY*NrO|2RJ_U*TR?K) zRB^B-8zdeUo}!$hcB#ZXBZB&W&}M1Pf+YNdP6A33BI`}ER#m(ETPvt2zkJl*W895ywWf9b2%_lg&n)?S;x{yX{Z%XFYa`G*Htkx43*$NqgoJAi(jTZ3!l zrKQt*Yxct1eId%iuD~iOy8$FD5P?utES-zH-tCq#G&3{E_k5lns{1jXqs<-rgYPtw zr#&t2Y$w;I^7D`tC#_1)P{Pmn2p(_pU$mnKd-yO88RJz!ymvh-iwAqGfPJrP25KXb zU7=BBHXo68XVqI8F0$gg(fc!j-(z<~CJHMivsF@tvDmy7uL z%a9Kx=42WPzIHP_P^Npg&}#}R{@vG+&(+&aU$^$0yS|cu%tUUwzPa!Jd6A`ikNAOy zAXmQ&s~|Gpe;-ki<3YkaF`sjw*KA0UPO3NWfC@MCDn6`dx4$EI=a8g+mmaT}*Lk(} zwH=o>S06E#eHUS%BRP*fQX3yb>1T-c@~U3)O`LUj`uN}~UvA9?KC@@R^l_F%Fb~^c zk}|avxsXk4rJ+8IF5y%pCwYZb8IR4ljrsOV23h#`cdBrev0bjL29EBPDc5qf2Jph9 zZpmf$;D<`_&07ht*I7%g2kE)9n;$^@+S;)$S5v_!u0X~Ag>0Mz4-H9G*l5Nr!79XE z`2I({Wgnh0QWcFRI-4?Rnk+U0nF4=jG+t7#yMI&X4?|)Di2(hON4P5FD`((R!B(m> z#$)QPtPHK{8gra#`m`OHA;+CfWPkajO5fH*qI_BduXe{*^pv@VaV3oB0laWWxxN24 z0E+*Vcro)IfbvTCU#Fb-5v@g`PhnZy#u_{v5v*WlbW0K3O2jnUy z)+G0Js-A3Ei5RU`JD5Jsg#X;lTnaC;Pbra=62ru>$TjaEC z;XOUGT!N^5ugF>c4^VqPU-##^RpuX|-rpG9|FuI-jC1S~Z1rYWiL*+zdCZ=+Z=A`n zZCYpCBF*h+WFFW5ADUJ96j8*ap>#?i9NNnOE0=>|faih!+9^a(bS(r7c)!0jM8eQ1 zLFzB(&+D{P@^fCbd>D3oU_@@B(a@CRq@ctvb%SpbL zSjCAOHbt6HM_x5nsXn6*S#oCoz#5wC{3FqtZQ(LjRZ>})qpr#1C|EX~-V9H)BheE4 z<>0Ojt)EG;%Q*QPtF>~`%M?03#1rc%QQldHI?x*CO&1OHA|VvTOV1A1Vv98)hJ0TX zsmxBW{H;`;1=LU_=33jH>M6P;nJ3qy`RUkl@3ZZGQKi`nFAa_>CLO#4h|@5>U*oE= zDx8J@ zMNmOaS#rd~T9b~x027EMg#u!phMO3V8AGsn{o3kK$Gvt5TSBb9 zO2awZOv+z8|G=W6veDLpVo-}psWuic)sZxO?jQ~E$JI{2pH$@*g8GXun0Y!+U@2`| zriIyT)?Yw3dI;dphBUv+7gHl<`_`O^y|zzp>`oZk<6nxrL%KM!Vv$+htyB>g>7LRA z8I7#KVC_Mix}tda z(Fl<^70yfJbZ62Y|2}jMfP@&&b}zI0hG-vs0ZbpU1{zq?Qyiz(A%nk zRLm%sWma7KwA4bh(XeX!nlK>}FDl)xip$z}DhfxF9C9WSvALBgL8YoWv?|VadY(eeVnM{oj2kD;;F;L+ zm;KV4we`&N>@n%s5drXj}Guvb+pxdY&ijQCXp0Aox{U zT+qBH`=YnM*t|C2!`jc6lZ#8znjYH%mmJoG5++R94v6C&#sU#c*N-=RAdP&)zO1k! zc-*vUwf`aoyhN@=B4t2<2tZekvJ5%QTjdp9DJ)QQPU@j;{pLF}s#{!wF+@y9Dc9JZ zoWqASdRqGZ%Kt?XqNfnOSfqvW4y355r)bS-`0rLuq%yXmxQKe>uFH{hIC9Z@J6(z7 z9HrI(YTLMu2LxwFAq(+?lM11enJHN*M@)Q7Fm|xEK)JH)5}WZ*nJru?CDl*M6HQ;Z zglF-_&?tsy8^U#FrhMc$nlE}f8OqVu|c46yxf$HU7w z0j1+_VaYS#lr2?)YRA~2C(bxB43b{FyQ=@h*6pqA(3)sf4q}%gF(`MRXEQ^AFs_%* z)USt!K{Diuy~@C>C=Qwk?O)v|WoH(q?Fy`c`KRs#1`9+OL^CKvIuV~fD*O6?w`2dl zb8ODb?HBkDP=XCz`$I=)1MaKGE*iXzm+?2-&eP(<9xA)_I5XKYN31Gvws}nc;oNu_wAA3x zqL#`(mIJg%aRDARDSx)(*8;HzU9X{Su?;UJ9m<{gq)APYP1e=b4zpMBh^aMJ;SIq} zF~3`W|86>3*46!~J*|C~U0IoRW_%VK8#8IVwpd={0i1%Qx3J2lUhK$-S3fwcsi?a! zzshP{{56E@pFADI9uqBY#T$#E0xB1#2hkZaQM;@Atj9Adn@rM9I`ohZcWZj%UwIEI zw_*%Gx!w}w=Zsss5}aypx*Q*y71N#c#ES&jJ;N0Xfc{$6`BrMOg}p;cnW?Nw#t~EL zeXOHQB4C>d?Ub@faG3l<88S$;5`(fV8fVJZgfaf$K{Vvm)}Q>MmQX3=Vq|moO*nK8 zE;(r5ZO4_*@%g&<;fp^k&q(V@MHF{6+h62Mx30Ff&g^eq&GSl|nF2n4$K@KMFDnNp zCI9??{5kMU{-d5aW6UrD49a-~Iu1|g1YQQNHR-}qfhyh3(5WmQdp5(LEyi-nhD+eI zG6J~FS_vpr;<|>;INd^^oTA5)qQ;m%QaZX7oEpT?gD4_B*wDFEQniL%y{^=bZH4`g zIoeaRrO7)&8LFi7B9f3wTfN#roEA#Vm$>EAz-DM~x2UqntGJyhR&f%ufLhc${@`Gs zv{+8w&_e0i0~=mwH$wI2RFc3ds zdEipGcK~U_TYA6ihPVH8bB=W!aqFU4b5__(WBH=hTbL7ihD}4I$!ZKQ$Kr5dj!JER z5DfZ0f}s(&KCTwRSSxL_K0s8;`lcPh?BNRtV+tYg>De7#HJyLu$vE9O$@w3tS*NBf z43d=PUZ%XNmYmFK+|0;Ca9AWtMG#K+o{3cv9V`jAoW=bI_?%dr_;LoP8Gl<)xRv-Q z?3z#+Je`B31bkc{P*oCm%Nt+%53tMf^DjcfzZbiI#&vf*zmFG;%DJR2yG|xc$-BrI zEZk_)Zej15(1z=`;VcKhI>nTK6>(W*)sTH_LX~B`8*j0@s*aqOJVOlea+y}jk8ag$ zCY6&qNt*ly=WmbyDoV0eNkp4BcowL2*r3Wyt3mSYF&F;?6(hiulJO!b+Uv2oEOV*s zw#bFR#rcJWeS#jFO;RPj`>T%%G*RNnjyp121Q$P9*&?%pH!fRIA}?{44$dni>$XN% zVYh6m`4#!~Hi`o`euS*2%PJ8u{J!zoxk~PfyhQ}R&YgZoS^dol5NW&k4f8o#R9Gafz}X?Up2A_*GpJfYr1qjpF8p>8m1T^H)%#9ZL2i`a>---e+|pmgUwUyu z1s3$-A+xlUo9}UuvNHS2yc(=3N7yF&h~+8s&ME5=J;+I7X3I#*`iJu*FP9QVGbX55 zuCx}6{L+|oZy6JlSypUljoC-aDIRDyG{_fh0Ik#>2U zd0xMS2b+C?4_-nW0bmG_F3_aagG+K+1| zqTgh#gfaUFp3kaYIBZ$&Rn`&v>}3_T$tDuDDicag)=ILSrSxXgL4WfF%1=6Lo=U6M zkGnt0Tr^##I;I4_um!FO_}S-tP~>y`n|%~xrzzV~t8YMA6flIuS1T$DbI1fveA)-c z%HJ?D3fo{Qiz3dfrzf`0-+aDAKlzG&@}sO8)k)w}SR7`5r$R~1a7GklT&2>0QYS=b zftfZB2n8rX)jzWn_BWt6&Jkomf9r=$5RlMb%Lcl?X?aIR1`EzTPE0_EW6XR%tyuhy z_RLE8-Y`*(i8~mF)Ez#P*YunN1&~-Wd!J~#{_6*|zI|*q>KwN+p6&c3AUY#=%F6iY z(4^FLDF9>7%-HhtUK4N{PSVC$3Qq#UZa1q8ofZ~Sd~{>NOvg&;z)E82X$|{pqxKJS zkLiv$;`ABVr(Y1OR|754-H)B#q0(1TtrwKE{&HK;#ao0Ao!*%w)RtJ<;`#$;lZ6m7^O8t;iSOEpX7mll_ERvGxoqMeR%=6 zL{n9-IlxA>**2yAOy%WE`Bw4pFO&)9V3pmxQ%tZP6J#lzRd^%dbogYeo)=jBX=7r8 z;)PWsHT;5@tudlc_;lM>PdNbr}BDQ&l9N!s&CCMF?GO*?lh$*`6gbm07|F~J*5fS>yXoCGc)mq1B z^oj~1GQH&9D}k=`k$T&T{TR=o&oz=xWmH8EvJ?ic+O_NQ|Q_k}3> zNRN)}x{I!+rl!o<5S&;UbGOtp-YXjJ-#s1Iq1AZbDu1C`xz|}fp;E+qSny;NSf0n} zeoVi@PZCi(FAf=SB0Mhl93O)$a_7MjQH|iYjwa>pRE|hL1uyf$6e8)KLq3)yCFJhl z$ks25d~-i6>pRG3CN5hsn}k5T$13Ihk6%hao&Bzzeo#I=i6VFIKZ540Fec8xm$*D( z$geUj>lzOd?G|F{mGj#N&Hn)6pZ~daD*j_0J?6we)RLH?Bo;A0n(6iKbzF;ulh?C+ zx7gt|mJ!ZKtEDf4$-;F_{{zpqNDw4WN>SO+1eQW481s~P9cTl*R~C%skX(-H@HXtX z5;m~ZOaO(c(H7JMPC>x}+2ri70%qLO5q1GO{-s7jiOO=v7{%I(WMFZ*<1S1&vm<$b zR%W{UL2?Zgxh^a&ZkEHW*~-^C(O80>*J47m-{p)msnYMNqzz#$hg@9E%|o(;a;vT2 zNKloSL#?tYzwa!(|J(;e#dj|J54$);Cw3bzY1WE|{ZzY-*lbRwp#pJaT~J#HlRj2e zt8tE4j>5J!$bBj%%oR!(i&d{Sz}W%$HIFP!%0iNg>wKLv%)Tm| zG$t-)%v0i)mK7GBa^^=yM&`>=6BE<)c}A%!DJZG3^4h`d>`E`}85b89$EBGRlUd=S zQ3xTYAtXG6_v8OrZmWZ*yKsuNt9Bf;%LuefTsqMiGZ<6dgc+AoAr?jt@5bD6{-3h@ zsIWj#t3{G znY7FRN~$#HPbo{>GW%uX$WL0yC1a$=q*^m3eX-KlR0bpwj4Ps>eU(=wcCw~6P>weH z?e&59fuF$sr0RRcbXj#tWkqII^Y0HWyri67;<7Q{Ro3{*K=7;qST}-62|0-OMER0& z{W86*q))`W@7QUZQoVzTQZHPktZ03WXdHpz`avr^p4k>y1YjbBYKAROS*g}k*W{O} zeB_~{6jg0_6K*AuU40C@NOhL&Ik3q;OLc67sdiWK*MgHJ)Naw))1i-AU>q)1P`HP2P z#H0=>J`lPToxEoAY7Hr51vE@hZ;a5bEv30XJjV3Ba@Min{TULhd0VL)rt;l5Tt}T34s=x!h=!*fB;<@w3E1!tPNc;f zf3-V*%jqgJ(PIiz-7-zlE>%n+@<}h>$q}#|=Jb4-+*12MEwMo`4!;+BW_^e1C`hEY%89GgHJK0um6+gN1~E~S!q2@tTuF_%-4T#GR#vKr8U56twO*+xC0@kd@x|tZ7 zQvJ8?@on15_1&3N3=gMM?b1@U=@)@6mS-0_>_JwBk6kF)YX;xxOu4he2)VJ*&57Pg zNwyf|j-EB4p86Em6qd--g?U2jeak4;D(0P>QN+Cuu!4~J&}yj6G5`FPrdQdyUYM{O=ou3(@Uz085>-)V19#aKqi1Xlc* z{#_xN;bPJwW@AyH{9dQP?~T#q(ZHjP_U7>{kB4&l&83TP#e?PG-Ry+_I*{lDFX>C# zuP@_?b^nq-+AbqcU|go1pb%@Z*(dX6SCu;IMmiC&TGp_EGaB3Z?U{a3w4g9A?`Ix@ zxHc!O(S=lAVv~&+eu?Yos5+_2IXTI`c20EM+gF~Ql}~+#Rl>e!!kW(5n5Q8}GX)~{ zE4+?taoXdlL}fK#NDQ~M_zz0~S{rYgzAEfNOWvt{sNrR61p3c6_c=7_8i8+1h-o5S z!o10Bvn(+C3?>Z2iH-nJid-@Z0c2)aS<|aJ9wTiKD+GaV5}@Q6#Qxy$CgrxB$igDP zUiNCN?C7l)Yn-jZY-g*(8T`}K^ShnZyL! z`MEGFe<%l%M`%77tg>f{+A=JIOs5eM@@g-L8xQ^@!DkGp9rU z12-?hGqzh9YtX)QO6A2%JJVaddD+(xxHv1#yr`O|&abVd0fn&1pZRy+AhE z3253h`qDxwx8{r@P=y5rfLPvFcrSD@l@HR-UlD{^8?c3yCU+L64##CQZL8!s6>GQr zW5nISJs^Uii=PZ6zlxs{F1pMwmYfOSzuVThECj+@i%TX!|)R^}(kd$T$xM#Wu z+*RIYVX`nmtY%nQ6BF}OdNba9PBHn(1h+=UJcAT8&riM8!djicx59TTKh!@rx4fmD z4zpR}K^GvCBkdAeT>f6xzzdJn%*tYODDPj;71Hg7+5r}og_^bmu-cpBm9 zSu{>$aLzJ0J=>_Lyva8H&3!<@rxY-%oV3!&L@b{s<1|C{JWC59zzGj4($z7eG{!|7 zY0V)i>TC7E7~+|7Ak5Ep{D?8|{di^Nr#9EUmDa){z2#}8skXF+G=!)HFD->%^XW(7 zc2W?kKgn7rxhQ^{5oOdq^x27`;alM_)IijMN4SY`B1hm8tBICmcD6Rqr@5LQO62Rs zv0K6!X}rh-J{EX$ybPfASv%U=5Dsvn-gD+VTyuQ#N)J5e&w~)MR5~3<%(4ZJ6U;iM z0u8NLy;EYM!DZo`<{m~);Ko8C#T;=5*JKc586&?n3nBz_4gk&!nc7#EDUgW`4!0aX z#dHyur&~y8h?+`Pmt%!ga$iOl)ut0_$tj3ao>Y%kTCyzcw^u{6?RZH)Vh$1uq*z&b zGheUXXPkFFz!8uVpd@&M3V$hKF7v;=)MVJ}DQgOlUZ31v4En5xGjHgW9!3D@;9^v4 zQk2q!S~X6*br3i%NJmQ}utCx~n)G-*$5Tm{K!_W5*{~+dSqKyi&Ll|tl@`g7^guj3 z&X^KJNt?!*{9_o?Gbsk7L6Co3HJUfEig8*8Xx6H_b z2Y+}x@c2w>(q+Hmx1|T&jQMF)#+%_%zg}&ZT{_c73^Zs4r<0V1VT38MA`{HeX1159 zrguqYahfB@)?>_-c6d>^03K?D9H{K^!h>|E6aGIyl0<`7akICsj|ux6BUPjsiWeqI zg(XlS(q%gRus%T?BEEOx@0b#hUk;CMm&I|E$y^kk!6bR(&?bkfBgUqJ&pP}B#8nXs z6G=r?EZ7Xq^N@_~cYlwY@h1;ynJ>S6Uw_Pg%SG294PQgoux4$%T7!%dP$+IO;8*(v zowZDNUser^cP6Fq5v*&N^ICG(rOI|yx(8LA{JdzkEMf<6-%@>^Nyc!nN=J_R75r^h zD2tzWxo$+HKk#+p1LpBhO^ zsjiI~C*MKshm^h$^?Zw=bv9rHUJ;cPJ^`^ol(y`lYW-M&|lS-d9N&XXhhYk+Ob*KbbVQpth&Pb)aP#j=Nb+){EZ+ z(-xph?i9zRJl9m&0?~-9g%zid@8zm(guxI2XU+I@M1Wu}i3+pBVv?nHU(M|GU$TaA zwuWG$&&;DrAxYU8CRln&Ud$JEZ;4nW}zx&VS&bqpu*E&iM5UNUZn*kJDxH{i{H_5f1Ky40*!VGfiEh;h(T+w1WydFl7J2UK^*FI#E3Wk zSO$ngA2lGk&-L(VfJX=P5QHEg?vFI&HfO!TyJT2X<1zT|OTJT@X{G~&r`$Bw<7jr2 z>ccyo$pp)S5S(DnThkOTlu?c4oW#!g4&DJwykCM&?ZWs8&82L61q|LV?bKd?lIeZnL$!EQz5Qo$G z(ya-eIy{aLYjivSYt;Xn$T6~WLVCN41&o|B*B?{%46(RhKXvQFOpO7veMU2e^0MFO zxKG;;5_#v*GqDBTh7+`h_Ql0<+Llw$5DJ=hmhsDwNrka})4!$f`v&~O*9cER!fB-4 z*&-l~i~S~cyGT2}Z-Gct7yROJa6F@#uYvi-i4=$F-E4H0sgK7uK4^1vYgz=>UZJo8 z>zwCUfSctRLXRZmxr3Cb)OjjQ;t4q)gPph59H1pa5l9zt+&+gZlbSo&)BEJ`^)pb( z$=_>2vemEYAN4@0IPevS=N8|jxIf*-g`v;Pn@aU*QSp4JGl(@qi_WQ^ z-TGxx=$tZ}U;Ogcix1qhaX5r->|ihE@VPZB7NIJ_5M)0_`gy67jaUR;K0GI{`7$vn zyi#_Mclm52N~jYip_$X>;NLFn-3fmq1CYzMP>)7`!Ksgh&V{N(s)!sOkf7V5ta@+% zaen&a5!IVM(VCJNIcnAUWlyvw^8L)DE_bVXS8od@BWKy%;g3f7c{BelLxeFD-A4|moOZ-SBmu5P;&9Ek3E99RWFj6_e5nY%60IjR5tbt={8u1M6e z8N$$FBMZSu;0Fl$1hL=8TVc&UFa|0l=5rJDC6}soA-R0XcO#^E2jpa%_)u%GD;nAJ zEH8{~Q}gn29!HSwG1c<0xI@6w5!_EQv?MghfY+kgB=k*4USyK^BjLUUu`L3fVNU*^ zH)F#cw5d$4(Ev5<;pR5GW(yWV^Szw@T9L8%7&3u(rRRgxpIOr4(Wdm;xoIjod5Xi4 zaxH;I*WAbf960`ua>&Jp{j&{CGk*<+b9IX|fA5gE9;1@|E;Anp<0T>goMANFRd)A2 z$C!p$f@0_i49$Mr3=OsEbMhReT{37gB;`sz7~guo-8V58tW8ng z(S;RBCBcOjYW6K6XXMt>5{42N=M^1Z7-=J(%*lVAt4z2Y$TPzc=L7M){V3Fl?^+#= zj77^53VGK+(1$gcIKUATE1d;j7SVEblb~e@lj1~jjf0>3CVuX|MWp&9tW;N@x96p2 zj6hPa;leZ2wu42Z1nTjn|LTA6^gM3(M`C1qYTf%P24!*5xoIQjzU!D z+K=>)ER`|1A>_IpZpXXkITIq!xM@acvU1Ye)k@dF@CEH^IN=wqUdF=EbY4+TAI`>R zMax?{T`|$ci>==msr`3!dmSsyuu0+n?~_J2efdy`I&Lm~Uwd%pIa(#!qesd!*7#V?@q3xY9|nWhrl?zK?=Nf#YYPoS)lW@fDDG=j|Z!J==zKl`k(? z++V$P$~bIGeQx(gT*AMz0YD(lst&(ZVQP=sl+Pfx#K3DeTO4t zkAgq5#8+e0`t=m^7JFQU08E8b6HI^TKp-tcf7 zaAEk0=@&)Y|L8A};K?LWjw3+T^QC^(C+k2?q1nZ|B5OEvyN_4h9dbUNzMf?$5K4z+ z|2i%JdYkfw0DSg$I0_*Ee!z*rU4P8M?N0%~H_)>67Y{fzlj7zd;*(Khj*U#@V z-U?MS{fk=rFatLWb-MC>?{CFFKyj1V5v^)Gy z_Hl#@{!4=I8Tk`h7yfh>=Ril2oeufY_{k1ZPsmShg|%`gsd;ZaR!BMy@XL%9ui(_w zn?f&q(XWXn(=WqR=cFz)pk)_NJwM~1d50gJcr0`I{{dKJL%lmZmY>nOS*VK9x^#sy5j zzvMl{qQ?M-TKdo1x^8^KYZyMmc7=N03fPB3RfJDIaKU~6X{nJBF^{&J<0=s3-O>y6 z0`KGJKLGl>;x)BC?O+GE+#lwey$=4*1<Da*eOH_qGDv|ck$dnSc@CEb zG`D-HKh7R3^T}dw2iNi!I@78Ujl{*v2#Zn5nRp^Ryg@>k%=pyX+T3M<>!6r+T+Mh2wLd_Y1f+7ZQy&B9hNPU=AoAY{; z)xDZ@#KimZD6pLb&v4_k4qWJ)(M(X*aL!YnQi>?3bI&xc}@$O&-7r?xX zDb0(k%HTTP`NQ=g^&4pC3qvbg2Wq`H1|xg7Ahk~qS!^y4U( zhzFi>TZrR&X2P*cypG&^9>50gPr&b+eKavXe0(3rkX9e^L&x7;fhd&_N%x_zBiC1? zOTUh8G0J}%Th11cf&zqQ!zG2W_(6qzKJg*=Jn0do0Ze&!7K0gj9s8D3a7!e*1M2&u zT@tF-&2uM+wS=WWx1Z(y{{EUrv-P9~l2*B&*DXUmPkjti!;PyLb;koe8Y)fuIVGzD z;NNP-Qe48o3dv8VhItuL5{D$CZxM~NLVe(V@9_tw(SX(a*~Y~(ySXICmw-g9rsE0r z?vzh;gPB7<$@|N;MM`55WckK2qL#;OSd6TShv^+Sx?IOB@r9&XM(+>vT3(*9cC9}) z?mp7|>5lfhKh`9TrE=XWTp6w5;*#yNu^^8+;PcExD`KG2r$d$d&i=e3qY)!trnytmoAiqy-|5d}jf_!_D7x8RDE|UoY=}~QOdI3_b=%XhIXZn=$hCy03vQYq zWz5a_ki0N?d~=*2D&gK;d{}5%*X#)8*O(Y3{Y3;#l@YFO*S!H03XR!84Ni0NlDUclQ2^R-3w(2c`R5~{6yLYwroHb(1iEk1P8$f(#ecb1T zL+z#?$yGu^^|0?H|GsM{gBBbL*78%QsUG@kzl4h?$`oU9F;Nfs>(8^ux@ ztRqX{Qqmy7^-Tisp2rRs*N#Nhc1|!*?sk1-rXg)sAy5pEE8(6OLdMKk`EiaGUCER* zJlf)X{32U~1o?+ATaTkofQr@MTDMHhPVu>S8$TXOAn832S~Yujh}IJ__5u9W*=5}? zGlDMC`6;-cpoDLE5LP$yct~6VM`!hT>gSHyJfz9n=f{E`zlku7ZNqYAE^$Y8%rPut4R!nP|vGkGW z|Jlw@$+wj>(y^%Dp`=9!_Ib9-w_%f&<&W1!bfou{qZgHs&?Ezo6n;*=-yw}!`Vp>+ z&*|#EE~ft;C(z+gQJNFs-pxTj&(H2QMp^;j)IXg!TQI;t@Rb(hT#5ua*pAwA`!!J@ zhVJ->5RWiwI2iID06)h8EsN1PF3x7+i2i-pbf0$~4Y`oO;ik-Hpi#JaZnLr!WQl;# zFuicp80kfR0HQ6a$e4oaR~SUK0Cbf%Yy82xLVhonJ7mxK*_Q-2b4+}d+R1e*Ti)5= z+F4k_yC;Y4E*hw^h3ruC%-zAYW`4oPMWfJ`LGf-QeIR_&|@A7x0R_Gn!wtaC- zx$f${OZF`GgwLm9+-o2Mr9k5dUY!r#(U_MQktZ1m%)aSJr+Ja9hx#=nR_ja9BKB?L zGU~gsNXvlIZ*y$dIUnS*#E)L#3TGr1FFRZ5j}phKu99q8EHJR9dkX=zYzAX5jxx4e zVgT5%8U+B*03dObSqk&RbMhaG=l+*K{Qt?h{hu&>oVLC}LBRlGDYhw_KP72Xa`lU4&_*Y1Q-7sw1hI*t?((w_-T~D zFu_>CIXKY5C3=a?efmPp7%5Oc(0BwYH%n)Bf0^J7_R&DV^0>iHnh@2=LP5ig)61$A z%UNV;1wlgGVDC7ib&Y=;@-gF2`HxKL`?|G>{;B;Bpm;!5obSJRjpMsirSE)@CxljrmtX7$+@(Mdatb=>VArg1g8KkOeT^`+A}1mB~~rKGVfyEIk= zG#8g~xq}B3Jz?~4Pg!Da@B&Hm*y|=H#$}^MtIzZfsI<}lyl{y0?%^(vbe2# z+&XOc=qLS#fM1e<9X5AoG3MbywtrU;QnDif{M5sgMSY{k_6UsGev{FU^O_urHyI=t+N*sNJw6XcDQOtLGDk3fiRl$PwiTmPwSrx05+j9g)NV zoE{Ba(rAyPv~}#WMvr%NdlQhgncR}2k9DBrzix0`P7ZaGUpm)*a>_5}MJ_ZL1h|YQ zx;Xs)U~)EyU-0gB2{)O1h#+O^p-lbw*F5gm<(?05r&8$pVseSPE>&&eRy=@XkF5R8 zoNzgHj*zbSk@A;YPQ|9vbj{>Wx$NtFvu=+g37#UMP#*QcIR)1D3ByD+pW0Dx?tbG_ zA{`GJ-^Cy|1aXkXMa~-K-k*1yv}5{iNYqlx?2&TcDZ5Uxj1b{aYX|lpk}@>{!+$^2 zp@l>Wy3V@5m*NABiPpV(wxxcNyBXz(b&7NZ})u`*dP7iv{`iSHZ>42vY4zL@!(F|qw-D0c^% z`n3IcaS`o*kl<_Un@x4TL)H&^4($8WjuzgbNV3$my?z`xdAv-L9w2HYZtyUv8#jRt z?6Y>dGIu)M#SeJ)yDtg>MZpHa{2s$y`>Xq6<^n%f1~qU~NzzI)oJVh)WDk*)Km7|3 zzg6uw{YU;M7~j++@~+8aSwXBB7Mt9qL5m=5@_p$@^p6Eq@#EyDPl0#M<&SjLvp#~3 z9SNFA{bOCBj^FOyyPcb^*u-H-?fyF27SZ34Sk2JlM%kbcFc}R!*dgqus1~B>N(iT> zM??akAN_RxEO0o(U@&G^Gx%idcW*)Hj32loNgbsVk&yixt!+7q1o_C>D53*Ly}u>^ z05>0q31Lfg$Wb9)1j<-G5P8p??CsM_k(jNx%V%_X`8FFWcL=}SXZ+M+{HAUs`lmS3 zh$JwMwqopUf7gvd=Wnp}`=n1%5w0b6_`P|XoyGhpEIXW>PserPDjJ?YqVk_>52N4% zjYb(N`Aotx`OKyQp(2il!FJ!9c-J`0B=@Vm)b*=leP@y>!s&}mTnnoSUaaQy0K63v zu2D^I3h&{ZvPTMob`Uqw_9;p@T8@(_aOn04a$jIk33b1NvHg+xbKli_ z49zUO$;^(>++YfO=;u!1N5G}~}bFdb9u~L%&w)b~V4x%NxTAv2ozUZen zHElKV*rlV4*(_h~n!D&~!);i(cSth^GRwJnYir-S*LQvT+NZwR{tL^b%I+?bQWb7X zz<;;zJiGV%c{nFmTjHC=K4?}bGmP)*V7VgR5JJm-+`oS9c<1w#V(Fl8Fv8?t2@e!!-Fy4Z+w0Qy-ha<6HMjGOm#yIad^u{`x) zWR{Q3IVuAQQs~_WiXeJ~nR$7!fDjkbn5nk8b64`X&5SwAbzDp`AuJD0O!2#mBX#ai zjEJg~p9*ShZ;+`lha9gC`xk*%vCagP5)^_0IO^1&dzsO_8yqN`P=PZmf!F25Y*QBi z$M%gjqjPAqt;68m`3UnQmXJI}ih|fq<7ns&_6{+6;B?l7`=sC@xk^QVi7}?Wo2eqn zuS*g(qtqntcC&#s_p9aIKktZz_SfU9H0Jiz{mxmUJgF6oIz&EQF3o|F@-8|8IqBUv z5@>vHZv|tWll0q{z6E-WS^mTG=raqcp%inEMy49U{h4=*C++ug6}j76JQehZYmWeM zH1KpkzSpT(f9`E@Y`lw3<`p&3c}$>I5#c!|8}K!;VBnqpT!DBP)21FS{(bBfE%R30 zN*Yz}zfWYc0Yx{sBMFpUixcp%;lw|98md8cvlgk*TkG}tfX(ed({0>>j+a(}|KGP-$jfgVDAY&dob2-r; zDU#FRyxh%-+5_AO!x`Ne3d#X@&Y*B$wpT zB)g(9zUlS)XOJ}6Y!M(pN9_d8nU9z8I&R2AQzON%vz92EhIh*cbuE$~TiX9G-rg#z z%|816On@TADa9Jx-HJnScWH6=;_ei8cZwD%(Be?sAvj5)NO1`?#jQw?zLVdqHCMA{ z{xfqiH@V8nN}fD9`JQw3-XFOC+{2FEFDc0aG^9&Sp%bx^)kklF6!G&hNwZfjPPZ#f z6O9}b7A@42m$liZXui%9^MG%+Ppq z6PWxE;Q`Y;Y7xz@o0H_8&qIDf-HN-i{{h~bEW;<}kVEm~7#Ztz6NhP`+p$gx2Hfxc zZS$&Q+rpLk!zVxU4rK)j#lsp-3)|lfg`Np~?~2lVY+7T8Nsd5wa(_;9+aJS-%qz9D z1ntR+i@`PGr92z4asXSCUVEZmAES+D4SfolLp=Lun(ysSi*;&AaQUX^7CmyyE&^*A z+tF6ru(*tq5t(GCMDF2|mW`yu0FVGQ)HHY!>KK-KbSP6`NfelosGA zJ|l5h*FvmFj1624Y$Bb4tmjGFUmEsMev@o!|XIKtD3Ql-lfFnGJMNN zMg@;e8yLTkL3j1Um_Qg8NHqY?w8l!yqmt-Fo+JT`qGm1WFOg9}W7Q(xS{L1b@Zhe1=b1ZV67*0}eDQmQSo9{) zP$PjP@BtEI=|2u>TjBp@DZE(ls1!t1@T2F)VGVpv!>m_OAki}OK`e{fA$_LK?BeOnyh5j@x}BC2)ktN5WpbyR zjmldLQV=utVJ^3c%N>tZJEiNzJi>S^E%EuM#|HY1C@O>{5iIO2Rf)|m_j^VLoN1(; z;#1%;$rodcx;Dz7=5Tk}Ud2_kqAc^S8{?}LIWsRe<1!Ff9Mn_ETA0Nzq!|pBc7fgZP(B`7=E#EOh>rg8dMk@ zuFVwb0U>odUUg*{4WJjWb3vLOyQp+<&ywf*pxYhG8|K#a$3eCij3`LC98st08 zv&CVU>}{rDIk@8bk2wn7D}40_$s!}6&!|IzlDy0H>CfIKmh`C^?LAWWz@Iyoc?HUA z-hcub zIhIb&ijvt(cF57|ihAB6mBIv8<@P1WXPOSa^;cx0r-&|B5^?U`A5gF`g3wOGas~ zBJv52lvV~|y=1{l?)4k~EFKv+MS`$C7CtJkF=|bsVclpc?apI{(_~6Jwrh zpwZn}W~}1W+27Q6{}?w9Q8X5#{}+bt|8xJ!kTeNF^;nGQ6g~WB$8hWx##JWJFg{Ej z3FWVmAla?Q@`M#Rft*(|q99$6>@4h`U@Fr%<2zuzPXN~?!zQyDuyb7IyHb_X_l6hV z?=j;o@MFDx3a2V83|}!%xV1`Ygtoh|YLLHZa1qw7BbU5(JW1_a#J#}cymAjFEK>Sf zVPOyHDgnSuZ}UP@;K$mIZD)@PNU1JA4_4nQBDAz)CijRMd`Rotbe=(7r@Yu0vTE~Y z41<2^Hm@%XLi(@zaORRDEBA-H5gBKxigK>%e69`a6KQh$N~-zFCwA&ZZhP+-5!sfWn{;&SQHT=-`>& zw1F>T0bomOvo?`ejKMLV-!kT6PiUQRFwVH?O()G6QC)hXBdb$;;qa^^MIWoI9Sm9pOTco^kc&N zKR9&O8FW%oY;$QXE6Xyvgcb^Wo1p>;o62`;dn@NYWNZS_rNV@jj$c0NJ0yw>u3b9L zlu5q|j1BH=#ofrbbL1^(`(w(v+BqW2kRvpai^IifXsxB29@JLD!n_XfbS;gCGBD-4 zwAiR}34T8dk!`;NdT=l{)m>f0iE86f2~9q%<+`2gQ!qgqnNBoW3Olu{ z78rk`>!0Q*>2IG`0Zyu8`j&mI7qPp{RuM+VmCp7L;@I> z2cg9WVT7SdFV@TO0AEUT>7?a}He#v(I3PMZi13+?&vON_DINSEOg+ z*7&}CUS;HU_BPvRKostkJ2=#Y$a5z}{oMs=@Vhov4NHwc#W8-@o`2jI$<~zrGkl6K z<0hp8Jt42FP)XQEL=@>X?~#^8-#@YG?0;`{2R+%SD2Vz8A7aNaqPJVd4ZlYc>)`^phfAORJDuIs z<%ktob%q4*0u|+y?D#_qhfa1U;$r02tY?(HO?jyWkNG{r)V(SFN1 z8;Y;>I4_E3{Kvi5tDkvxradL@}<*CO)&EDGw1%E zt&H#_B>1S^2Mvs$yTbhGxiKVY7QD zby#6q;|0Q9++ujUK5g6gJ)4X;`tUB%8%gm!{t*Hse@E!wnTdMEB#aF1%#{mq&qNBm z2vh*(zJ2E0qvYc*@d}h{)6rje(o(mi!GlRON`*c-pZ8+0#O5LcQ|6kFOZqLEJJ<5@ z^+gPW;BaB$+5G(tM9y`eXthLTAl0GMw!q9RPcq_T=A>g~8}aLxYD$+!OlTW{fPegM z3qwf*=~o`o@RUOR!1hEckM^N*vPib)c)=*a>NO%@vRuNsEn3;R2DbX|%%xJ4RWXz8 zi+Yd`zA?MC%rl|3Qa)2%Vdc?&7uQF%@wo>#LJ6Hg@O2}`1!RvVjdOS$r8V43!swi9 ze8TySVWg*2M(b<1=6{=PX?X0$usaxfcGvtfUYPu+#ug6{fJH;?)gY7<^&jB75Csyh zbsnQsArq2Ec0GDbO!V+(3odaOPKjQP9INWZoZL8A{Y%DUady_#Y3|D~I@s6inUI8k z)hP|;Cf#J^aewgZB{*A7EV2NL%eKQW6M$d+~X~avx9%+OsDJw=lgDfEHdNM3zyE{f3RD&4rC4`=goAW_fZ*utK;k7Q&BJzD+g z+hey7tL52ihrvkq$v7^pl2Bz|TMnk?YU6*5*9i$?8Qw?ddp?LpT~`hHWNIN{#M9hAZwd3n?Ea_sq{=blv6fUv(N8* z9*JsK{H-T-2?P(SNHTrgb|@TN_mGx7^BDj>BJWuo>c7E(Ixag5C}aMo*t3V# ziN1a0unMc8NgZXE6W4)4Dd<@Q5EaC**kev3G5kzGAGSUVe)dm6nI3Ek5JMb=$G=`Tj( zX^Ry`{TAKTqYHmRT|tWV=ckU4(Nx-l8j4Tcbo_1EOXuIajssy7(+T=gAm?qPo@MYPJ@-)PPh3RWmRFDw+w({jJv3v4`xPAV+ zoefpVw|9;t?!CWN7NAd>SBQW<-AG`8sRhr9*gmB2dpmu9G*M6#rsj4!c53SRQr%R+ zKv{C1QH3|^Z?7z$Fj-Q~k`6_c?RPbP^xm0wI6VVm30m*$-)xE)z-0s8^@L!+GshY1m&kq@~8X~LuC=@n0WLl7J2_cC<7ztRR;cF75rCK~HB86Z|k`N5aL z`t#%egZ6<6Tz{z${kJgrxJ+ym0W_;(sb-Gtmy3aXZ@W=7>Tp-KWYUkx8Xjsh&FwPb zcc2&4Y3JrCOwc36ty^f;D_7ExrAKZHFb1EubD)mT>m)eBrW%Dic(Zl2#-Ic|c_LX} z@>ZB|h(h6^rX4h&kH2oi#9;PJ)bf$GL1?D9U4?O(m!ia`8i36U zgCYuCnAff;$3icwQV`Sdl7bxD|mJjYOKDm)(5O^utoXhL1MQkzt*%SN}C6t_(L+o%gm=RL3 zQSk#?EQ@NR^(3ko3#;kdHy&cU3^v@u9YQ}#Sc;9FQQV8ZU@-BA@&13I_lo62(+se6 z1Pr@!-$-;R_F*rkwiyrhu_oPlH@9$U4VB4tX8nA!jcK)c4`glH|4rHifhB3Xi2m?b`YkKYMZWqiC0 zkX#dL`QB(hqt>4<7x(_w(AM42Ur6`7h}`w@H_WKG=cJ@M&EE4weVTTDg{hNDx3bs# zRfs7@#+kijuIC2$&p+1+q8P^S%B-jp?fysj)*u4i0XKaBH64l5pH-lK%k0^UxltLtghD z_BBdV-T8kDHgAMdW|Zp+!HIe++NNp_3?FJ+#9tQr{NWdWJ)6&CQ+s^)m3?-~`}aeO zfC*XI+uQ0BB>0Cr<$Fr9I)BcE^Y$Y9b?4IDuh92(A9BU#oKHr+FerY0!8C_*b~0<^ zvfG%A#m-p7!fhT;G9t2Vbg=RE!y12@vNnHP5_PJmTs>+37^1m{rI3wOK|Qe)OAGu8%|sC?7Zq@5`C z`Ek5p3iw*4sXx!NV2C4_&n_fN@p+=oF{Zv+uu5a(!_i`$AUZdu4RZq<ic~#Bo z8^YTPcur2v-x3C2YuS_~b%l2A@eac`h0&Dj5zP9Ak$VP4Rk_+FPpvjpaMCP{xm}J= zX5XtxdfhG8V&`S^@V3&$4c7AjX!m`eK8zUoG1It~*PAm?`}U^ca5_nuCWv;Uk4GB5jUGZx8YoGq@W zy5Yyv%si=<)hwsV)QS>N6JLLP`B&)gr*W3)Y|VL^A3qDfsVU69uf!a#R`>CnD@?ZW zwJ{;#sc;{T;IIl$3g!sLura4{b0=KzP`e+XG)~`9f9DQ!&BN@@%`x(4sZ+~mBpLTI zZmnYY+C=z@TsSY9Fr&x#U2RRhXo*brouBpcbDab}7w1)gqJ*J={8`dQ09HB1VV|A; zo@rAZP;+Ra)c^66=P=z#7o2b15n}%!RsD&Kd6`sWZ8p4Q7)RjPOZ9CRLz1kwgX?sn zk?IR}U(Wn~mdDU_3D9GqA^u!zeprXz$?c5eRyD(ilk4GpVYT0H!VoSB-)A_~mh74< z+z<6aWJpQ8HAUv?UgrK%YooWSR@(yPd?M0%f&df=j)0C0Cg368{+~3XzRaycMV6fu z^<>}R%fW3AfNObp+>6H-KTg*oKK>CKskK726HC@!0e*D&XB z!_s(Wa3fbSRZ{rc=U)3#Qrv7w^UJVjut6fldqS0pLTf!Ic9hK;fuomeZ191zM*a0` zeO0)rb;qOS0;Z6(Q^&e9e`@XcSAg6lo%OX5PL;lX;#Yw~cIMZdi}MQ=np_cT zc2jb0AQOr0HbQ$cLdS)gb=EcgpzYgLIn9cVLM4M_?xG;U*S5`{?e#^-`PmE}73Nm6 zXX`XMNz zO#H6DudgCo2>#;RO=4ej{YA65eI_q*PF+t=tRPMTtKvj-Pr@fs{N;i54J%o(jAvv# z)1r!A>H61t&9@brrB*GIhg-s9=67KooBW-w{>Hai_-MV9sKrmh*J(MK7gKaE3m{IP zm{dwc+thNpQ+zg5bwE>im`r)E(*t*Vg|uUL1N|wrWOCzwEX=FZZ>m;j^2q4LHh$&} z%=X^@ZNc>ZHJ^05kXzvIEpCcY@=q)NQ=QR%#uc(Dyb1(_eg8!GFJ~dpLVln36?NHU z)eVY?dW!)$mD#nmS*yLfG+H4x6%}T6ifTM#S!P)rIH(=yrS%A+>$cv{|6;z$wW&(0 zSlE-iKtd9+$nba1#qv~kH{jxK3!PZEMJ)s$dEY!)`yN>ELW$m*_n6&Q{pW%aA0ZYipL8o1rbMcRfZ&2!?t^=#Nv3xc(3}DG4RK#^|3QQS1XDyAxwp7go26df)h`5f@Z)12VWo zdvRC)oTU&T{$>z$;yFE|EU87nMHzZQ1;GrcRgf7w?$;4iaxP zP+_3YgL=QTQ~IylhUr(J(+{+}S(-ERdD5vm)tT66Bid1(Z(BfxPcJ((M|DgI>WGFu zG3_=|I4C#rPBXv8!Mauj!O|=VW-AO9>Gq4R829mPJkHVH#03RLjxZQ3p$&=Pnzn9J zlq@vJj(o*e+BLi(mS~D4ydOF=dD(mQH?@_6M9Io?i@tXw1gSXi9d>Gl@cNja@D<+GN_ z2TL`H!*yhy>+VC~7VqB+*r*Ty=^LMldY&`W^z8gkmTV52*cYS~v@)AulqfACE?f9RC_gXXi-e-v5 zobK2DLtbATYVx|yUso0H6ui@5u;gSxx3 z5JkDBJ{7PpKp}tTYkD+NQKN<)N=tT}D)hzgu@CRvwt(urU!T>>DA9Zv=aa0%%=nl_ zVp2eVYxiBRGz&_ie3>B7g#w)Bn;mCN#4s$*%J5+O6i^|Gz$OsGw?x>K5*tt5iUD6S zdw!(hmjw)sVK|lXnA{{TGpY8H52jo69FmN4ynmh1QAK1rd0lVk0l*)&^68vr9y%7c zt?UE1N?9HWc(678ad7&wr&V|x#xTr(Pg8jhkvk7fkB{9ODo#90%9#GRiD|3J_vI5r zV*n!{rI+R@Y-FA!ozfv=MA8*i2_DFU7RVm=7af z&-}#*fAl`C-Sg>X@@i11GW_?Y`HzR>)zZxdxD!*04Yv35vm?CZ^NNKoiYE&$)!8&W z>;D%LVpGjSQFM9VSv+fIsw}m9c|F3-31}m}M3lDpHs<;q=e~g*zm^#O)RX0qT~+|;;<2c7wGXdCSx=*(%h6B&({D8+s9EFms#vcrRIN^EdKovLU(%s3i6{iP-=~v=i~A zp?IJ>dvXEMGO0{!HSN>?>35WS^D~JzQv5>4J>Zj&1pPQeaN9wA3O(5@+KQ);%YEhy zJ#kEYH~s{Vq_;3qhAN4bY$l$DRH%-Dv!|Rka3J^Tsp6waPF%~;N|)fBf<^bXz{V7; z`Cf6L>P_zj3_(gV?M-=&gpB{G#XHTM>yAuMXDhdIiIWDcALr>hzuQcOp_jQRVh`MG z*l}MTC%!azi_(?(>T_)vUELjyvj$4o!hf$FS6gDYEu<{ES>&RFAC9YR=0ZpS>~xtE z@qI4DuU{2wG-s*rpO+43*ya%qN&9LTbKLm|eZX_MfxRNj=>iy6yzVh?R32y9*0ywn zzL|R0^+&k~Qm`kBT$H$za)z=^kPw2r9j^|cnNjK+kZQV{%amOvw#yS5)^G!75Tf!jxXpSh)-<{8f_i7#Ck_3_{qZDrsw#Bl?Cx&No_WaTMSO&h(=1(W z28m|d^zK|)a$6cdRhFI+@^qzX-==5`lS`TEFnhNq$AmvgW!C?YG;z{%!l=12`iAU5 z(Pq86>^fl&LVsm_nY@b~q4IW|e=%!T$$gb(eqVtZ<;2l)TUlOCSpbqxTF}#{^?$Ay zRXkR8kQxlHrs0=T{|5jCDsVo*SI>xD zwe$#VxHkx!4EHWL&}n+^DVp&rEXldIS45MD88QG&B+tdcT?(EUAcjjtEG)BzyuQ!_ zVlgr@xOGigj(Xh@Ep3%amDG6f#gmOSvEndOCjq~15082&iu(2XrnoOWBk7#U@$zqS zl+1twPr|b!FKv}heQ^W)B1YtAQ)Z%ii|gMM?*{~wXWNiA61B!4)!lNyEEeaDS%x*VrJzaBoj>mm5z@J`?ZX5}3YJLO6=Tm~)W7THyK2qwt{lYfWSKHU zx1&9ins+2BS^#`wrC$8DSvAkKAH4>_npGC0E10l`$UBsGQz}j#(wgj%@0l3m5Dc}D zR>|e$w*3{h(bsOv%oGzRhId+1=HEi6s-FLo>*?l6uiYlgJ^gd+y{0$@P+b#lydhxX9%`B_rV4#3K*?l1SUu1@iK!ltBX878bp zSk88J@?d*EJya_tF8;VIq0dF1Pw33|$M?or=~q>1g=^rR0h9E))4)1{u=yq0w4hGO zSX@MU(NEChb?R4xU6^4sWGfVT+~<=0wm8{j1;gJp%K9{X5@y*( zkJ+cE$5~xx9jc+KmuTj#81oakv}K-&Dx%HSP5e87u8*DNZ+>61o=!_CS!D7UwY;`DTiy* z?*1>xS3>~RiD`eD)?K?&HI4n`k4~)bB|QV)*p!A0_W_~*0R*XRH_J={DA+?)I?9xh z*X;^Dsq=*=lzts0{h4+nA4!&GJign<_yy9r`^%=85}QMnFTTU8 zag<`B4oVDy1DAcX6(Rj&cizXmybW{?@FJ1Po3+cYat(9ed6Xsmj<_kYz1MpE@l{3c z{Km+noOj7^fGw`dXr?S5L2pdP)pE}2ADR#;wzGxRf33Geq9kv}4ww@FX`>SvDSp%X z2c7~miA%-Ez;gYc0KVm-hP~4Rzyt@0YNJ&WP2hL0FNDNjJXO0XzhA>FD@_Dm>5p}t zN`vdiT$W?ItpFWqZquu2@9&h3RIU49Ay1T}o?h_K6t;ub(d>i6(zmu`)=I!Qns-<= zX|g=k>sxoTW`E|{OKAnLSb6i&-LH@xx)b_3RVWqgo5!LYHP#{`1DUCN7ue>?Yn%qG zyoR6FMim)1A8F2xY>*;U-U_p_jv|g2TN??~4~Swd(!eaij*oA=r{A`+biG+MBA?Nc zGBZtU>5z-0->`3ZxC%HEAO3}izSrkKP$U_(P($kCWxFm?K8H3fkw=t6Qqu{;`}gQy z+FDVqsJN8*yN>_+GnJz%wgH0ShkQRKexX4VKbTLzpHdYyyqc;B2>z62eD6rvK9qG@ zM_naBnBz_5d1&pxG*HaFv`Y2CN<|$v3+K9$pDDkS{tc3SQ{Lxv(joLXWV{_BHvFv# zc%+&{tjG3nAioiOIhP}I@&f7UJ~W@jgJCnRI*ThhkSCJz*$N9Af@=5^=!$W@kK@ad zP}XBl^e)s$Q9sZE>1bPHr<3zL6o-4~6uX`do(_icMgJhGK?i}JO?T_*)Gg?AeTJOZ zFIkw4t=7s|=%pTRlM`~j1zjb)*w(EY@?u$aBp#vvdKP4#KeJ4) z>{nQ@|I5YDgRMkLGvCr<`B~SfybUYF|K=v}W{dOHi*Vwh3oqpvOe#5MCFQ0a20k2u zZHwAmx`>JNGHHtPCk3&$jRpOpST_j}EMUY(JZ)pec^#ZdX=*z3;?>g$36V4}agq#* zY{`7(qXlabkt4leZD(^2T1ZU8?BAO^(V?-f%a;$@QYA(^nlV z;qQC*IqCqx>|9v-N0FpzI!m~l_lfwRnSqe`J#fXMg*c}6aC_V9Z*o?aidY0vIySC* ztc(J=lhQHo=U#c9B*nSP_hmlm7>`2o| z4jL$o?c*d8TghUWpNUt5N}}Jx@egR%qBjD=BrEO}<)yAr*}S%}-=Xv`zr6;C=3PM< zV>CpxWCFtIrkH+-!s2JfX&N@F-R1k zuI?CRO0y@g3C%d$EaN3hj?yoISx&{LSiG^oI;2=E_XOV1`7L{SBW=gIQT*m&cr+pS zPrV9B){4l?jN&@V{%=cc^y6M+CZEp+{kwYha^!#)o`FOhOq+!nmH!a>E*`kSATl05 z%>w)d4u)7`=VU0p@Ign&lIpOeuq*%mWfOAYm=y6Z6bYU8HhNim5LP#q7DGWb1V2uV(1f+ms-sa=+P_*}p|0=rwVLsRq9A>LoXa2X~Tp ze99M3S>xgmnV;AjJ1%rd&Y#4!qHFcsEQNAp15(D~m*x*d7yAXIGO z9Cluz-4`7_+4tp9vV@U4PF`s<{+q8@HPlG*b-4`omp_SC4o-9HU3>31cy}$9Vo5mH z_E~8Z9Q$OlY7{%1tXdYJjg5UXef6bEl%49*rG&C9b!fzx$5PNEk$c5W!uRRNEvoCu zeBX^G$MT9tvB5>L7~_n?H5Y$OgNgdD#A6$Y49jPE-nmug$9{53j3skf;5iUYFJA zmR+o3!qQ9X9NNOs?!ob`E_kIh6q38?YutEo^?cCwf_&5$%SJuBFu-8}wZ*6wb6D(# zuatSF{STY|e>6J(i;V_@SUr)JW)s$(bKuw9p0nZTv~Ue;?czhOK+G_|wj1R1p(;~= z2>FMgtCR#;4l13&cxbm$MT4__miHFj!K|=JP~dUBTpinM4m|21SExtcd#_#4;Oo*v z?=K|%%PnHm3+@vlzugMb>QMAwJ4iK$r|RNC$n7=%^eVH*O0H?9WG$y5k7wFwz|{6P z9gz^C56)>IiBh39!@g>s)5?nSrKDvW3 zxm-NrxPH%OiA?ofJx(|t93GBu<^BY&&($!^XIA5ZBIq;1?US#`(u{S=3pshH6I}A4 zn?VPU1$%;tTU-MEHfImNI#BiCRZe*Ae}F4L*N1%PwZ|L1?O?y{fC^_dY6cjKTZOF# zyWlJ1t3(-Jt_TCP>L{?pqppRuz?nophfR)&8;8=>R|g)msvg?n~iM_R3H& zi|K2!rTct`b04EB6N94Ybw_H8a4$WakWPHwz@#%X$Issr;qLbX2U>+9{!J63M3*YP zfoRaf-}v1=)EUVJd6Q(nH=e|INl5TzQAnrb2@9c^;GcesT0ei!n_A{`n;wu>$_lWT)p1N1CqsH||CyP>#BLIQZ7dQVYXcgM^MlXFcfe%I^4b;Ui zCkeJekB>~Xc35#(6QRxqx$NU zq#tZ@VP2IDPfKnYUU2XC%Y%`=s9si0oq(mIy?;_p^gIWrwUS3dXbxWv8; z^IU;L=+=W`a3pIqwcrETi(PRFkCsPqYXj3v!vsLs@8F2(-C_*UeU6K#JH zLMc!;(s7&2lzZcv`<(u~W8;aja z%%V%BmQBQHkz_ae?^yEhz&EFhJ`aU#58u^0sSw$=Em46H=u2xaX=;aX9C>Ic85q*S2;{|SJ>#^;^1>Yx2jT{^kGPtWI1z{*gc zS>oQfVRf5?Oz_2hxTk;J+ofW=-NRIqPlz~v=CmW30skKt9%Z2v-L1axDHva1m?cv= z$y*Qr*1^3&AYVKXbnmy_OeXk4+FXz6+)jBRwMmITmy772*xr42eE&%0Bsl=P*J(AS ztSOzKzLG5_VkZmI10!f`%Fz!9G^3H%n~+oKHCl~8kiEF6=G5w|sLJWU@EQITEo}&+ z+T*iAWdc;XoI^RduXwMU_qj<5?Or)hNf6z&ZC@TawU_^y7(IMNaz?rN%laD_7zvsI z1sZKyrukn(x!F|dhupv2b)k30ixzp^pd{C@L9@R{NjYnXXd{5=(aKU$2LXGHF~lUt z)1-c{Dy5yW^Q8jw8|bUm5$M*7-ku79q6m3DvPDFBNM84kw{~YVD49!`LdTfbKS{*WwPlz4h}s zdf1cTJnB`^u+W5r$^bAFZDcgILRKp+2x&c9mV;g_E4F0eRzt(mLS4Ylfb68(?H29t zlK0KRK{wkVyL64TzD`6_#W*bUD?QH_Xu?U>tg;yU4vQ>Xt zo0dtbCdyIzG~ z{=UpaKy?zg-ZwLqO&XT=UlM*>n9CHi8!i(G?HW?^90QhtkMXWU_dF>ijA$mn!CerB zM!(TCtg8f!4%Y6~(O~^)`WwTA-SnwmtWYx@Y_}gml;o@;chbJ9*wUlZ%uC~?+CMzl zT7I0AhZSKC_H~BjFL3t7h#D()~3wdv&7Tgoh`jpY~PG4jy!?6MGM?MLle z8R+rNy%N!lH97JRDLoTr4A`22U<=o$VzHmt3F@Y8=}u_R#rU zdKF;q|Jr|cn@H0Yl_w8yw@fkb!IbSj{&fzpe0k(~(^PLX-}xzJk@*6%oA3IYHIaL+ zlTuUm^~YihA`8?GaxCm4PQiMquEt*IfUi@$q$&luSX&m7ta3gvFjm!u$K>?tdi+gI zNXqa|sc$XjAnmzehX%wjR#SN}mX?<8v zukR5#79<(FZO7-RN%Lpm+-5J>%Nd8Ngxe-)AX-cO7o?I>SLl!R)jixOC2o@v3%~H_ z`pQ->7wf>v^$C{*mRk^AQqS;=3y=w51#4y-PhHU+q?TMWLybKhoGK%zH}3%^Wte-; zd1S8v06y>i<%;$pWZSMv%(+n!{tA5rQ%l=s0{!V|AAp0ot^bA`^SM0DA7rENiN4w> zFt?paAMa4Ax^AMJXosKiJ0}~suG{u`@Y;ziilZ)Hh07(Ax(E5YD3iFvbYb&KjWYk<` zUbAZ{i#{g9SeD7%fxDZdQzhF$-wAZ~OdjA1&o1h9Zft*q*08H^U|6wX?`r|aT|c10 z1hK712wouLf1|HVMFcJzFwviw&*b--L+V$kQo0Z;U1MWkt7VuAH};>_<`8WyA6|V* z1|0nAjo=M!&lr_~?SgwPv4%vHH>XR{lwaT|LHrRX~<|_Gtmi-uZ6jQ^& z_MK7P+xTCjh}-x$tki*{J%S4%qmJuzT7(JNPqgwtQg3YdU{G(R)(k}=uwy%>I>^6;{C;hF{d|y#2=c1G7vUUR%iHP3j9#@ugIwtljSu zl1`VS4P4dyqN2lf)n4DMQLds7=veT4!!nVSm^VTV+Y^W;JKOTCvs1+T`&-XaBat1q ziCIurcs;ns&%PA1pQ{3IhlyU@3H+Jav7;O1DE~7sA-vSlY?@+DWU|I z|Em`9|E`M^pff0L{u?8I%6v`bcN4nzji9tc+-~^sOmr0z^DZb33ZM9Wp=-4U*lcqA zJ@n^ID%>5aQXEB*PccwF|J`Asp&+TTj9(}yVPmT=g}NY@@Q^#= zG6|Q`qjH2h6R=@>vr)k^Q9NiGM=i3`GIoGEwCt$Kp$*Y!p6H#GtC=rsqLb5>VS4Ex zZ&0jgAvxn@U(WNvKt(M>EuCm~!?FvW`!>5jO8&PGm-ydiUWbFBj@HkL3CFI(!oSDQ zmms6#3qC}ublqN_KA}UHPZPjAudlU~9jTA`bV5CmP$+K(-NYZPwstjxW2UJ(xi9DF zLK;(CB(pa=zq}|W;w^hOix;ahBBXxY@St2x!QB*ihjDcp=D#FLfmcu9%yc0P<|!*d z*T0iAjEYZ8q*tJTKC9Wi%j5QwupcwW6wQVW&T^ zZA5A0L6uN9T)c7>MzpW#*+gL7h-xhQxzamtlMS)evmLW!xjWYzuHbd;*v3;5uBu$V z00&kjSi^nqts^#hII6mY##>bF`=%RaWF%r^CT(i6?M4hYr?pr1^DV}tq_S(6;c4;> z-9faj^V}7$U=3?4&HQO*{l9*@K^_@d==GUMd>tGXR>3u0z2hT5A>MKj``)wFe9EV; zzxU)dgwqUD#aY9{Wd4p=$?HvdEqOn|V4pMUmUo@RwewsB3R<~OL+Lo0|f zZz4K?pI^>M(g>*QV_kl|7n(dMcJ10L%eyQ9-KeOFcuNzc^!|fl;*gb;AM41Ahyim; z>{vA|_dq+7v8atV(JpQ>UvpGNI-+4=d#~F7YyZTLZDE1|(P$fd5pN|6^z{hByYBUF zUk3?NB5rn4cn%@v$HBAO8D29FMqKtUUb8b6Y*VdAhHJm^& zSLooT+*?%Sq9a%E2J~=`JnBOe?XXIFJRH^NK_R4q?E!k)!Ylf-_Fuxx7?zl@z@XOf zr?z|CcPEZZE?L^ZrP4e^$gn!Vhmni;~`0O%$o6 zJNEYkeOF0b#-IKL#RCS35Jr=B-CVSmMNV2?cyn_Iu?@4;ht^|hmFCakyvsB#OhElK z&; zA}r0OUT-xSl;&{SnD>#F%ScA$$1lVgx&I)Iq|LCl946yS63XfomDx4)%y-$86h!jWD|~@hG}J<}T8?UY7onRc}o6i^sllm3a;Q zjk~ zG2SVT=S&nd_((#D9S)yiF3+Z;9qc`gRPE-d^aWu#SUBw~REQ_|bG_tk5FFcsaFesY zO|st;73>kWa(sZ8Od_Qj{OEIduQ0FPzuIdlou6W-g5kiyC;jqz6hx5AoJ#8H$-fZK zb$prNzSfD`(Mb*2!F3`u(;D7>?><>cfZoIExnCi4xc4&gGiyUIKY`4h@R#%9wmqw{ zco#gV=11CZo{5v8dnsJlRCzx)|2M|oGN`SvefJHNQrxWtiffSq#oZxza4+tz#oe9Y z1&Rb39D-|$7Iz6Q#oe{-&b#NF5AT`(oV{oAEi;)l>&dg${ap8b{jPvV3Hmq}lIu+Y zA79B8n(;Ott5S=Qb@#abNEY0HM`7McAAdLB7SBD7Pa^(2J}pKnwqug^`zhycg)?*= zTZOo2bv*!tYd(vUG@gyvb(KsnA;g(;bc;Zi%qU?Jmwltg&AI)!m-+=ksyp8KYKi3S zdXMs+LJ99o*ms%j#96;l#hWwBMC$Q5mh#RwCJd8GTusE>b}-}DMak_|Tt_sDaI{Bw z{Q>HvKx2p=tQjFD;@>qQjkguN-)G8s+ofyt5%W%Ud-~nfPlecF-d~o1lM6YEGU?|MI4tmSO4l z&CiB2F**U>8j2&|y+zTmr(3iH*mB>b-WiuaXM9rU(@!pyd4iKS9#*}74`c*3MH>5k z;xt)hQ{^b$Pz@!ynTn~U_OdQ4rcSjKh~(m@vXsnEM1D8Cerl9&ANcWRYckrkIhoky z!1*yucQ{E?DuWhg?=rKHRGTRBVK2qlj$u<84mrk(Mu1 zX0=U3N;ur!me@FA!T_Yrm-6S#5Xtk~r%fD7zch$*!d%1=UHQ)19mgffbJ8R`5Y;RE z8RN5$aN10|jV6KWVM-}AVH~8o&g{sL-|=}K&O+Zg%ED(AU2_EBjyGRR1xo&aVmOk~ zpvgNX`Tf7o;{Ul^#J|&>9-7Mg)(vidvxMEaoFHz8I&+GR%Ay@>uID_h4RRSvPd0Dl zCS*-?uV7}NRpDjJu|tQf>nj?~D;t2-2EYGd^dlBOHaSTB2grUH@;NN0bV0l5aalaQ zc6F?tc4*@icAB@#Y2>C?E;MUYhK=RWueE^t7|kKzj1eA&B5Q;E*9uZG4Ae>QpYr)+ zb3vtJMon)I6`3^@>0sG<%``vQdqp1O{$vMYX}MIsS#eIQ8-V^&F}5Bz2VYHu63oJ~ z1FlkkdMRmep2Co>u4inD*1!k+r7km!qo<392eW2G^VzHO8k!oDKe+7Ua{DPTTFx?> z(yVnxiqqwd1$aeerOyo$WkX5Yg=9vEt|GA+Er_WDr7R0 z(wJd2jkBWP$6%lkeN?E3i?khz?G@Dye&Fct-sRTL;c`mewcardQ;J$gP6pU3&&>+9*B%U;nff3JFi z1*iw#kd=BPi-G}ZBfpeRWGNWR3ak!+C{jn#he)E}Z3~7wHXutj>4y?gPl7iO0uQbz z=oSmBgl9Tlj(Q#+4>lgQNSUViXPSUOHCdLBAcZZVQfbCp_|ALry^S<$bpPX| z;^bvHH(Xwx7X8Z4a-h_O8G@!%V?GrDl|IS3V!y+Dxw-3kAV>WNC`Swh9y}gsPwz_z zs~IKLb98h0WEOjY7*vcH|Njd;>WHL6(t zDO_&y4`53f(Xf^YzgMZ4|FZ7>n|aCcL&xcYzQ-x64Sf8gH(TM zjh&Qg)#%w^jsy1`G#y!W8-pYTVu=w0c*CI@0?P~r=L`Db-&9T&jGA>=Awtp2La_KU zgBG+m2^b?!qL@Afd$Uy9W$`)5I%6`(a_^o}#JWS{dLz9U-;o0CJG1%xsb~h@B;Yxt z^?lGw5+9+vtto}rfk;wHzY{@OkrY8%WDto~>M+E1khGvgpFLMi^TYe$sw|am&B}L8 zHFVkk`N4Vc^HSVzCrZ!8t@(#Us~}2AwaD#T-iD8dpCrBdHHR~3wSFsWOK4=Vx_osk zT*kDoE*teQ;IkfX)SWL5m>X{V)oEn}&0`MdWzJ{uR$NfDmLlW{nz7OUea9l19nz?r z$1gV?xUAd3qT@N4Tdc3B2i~FbB?2cdx98L3^o6PICEs)<|3k#WByWyvJjDcM)&B$R zz2|y)YxobKL1p%#d-g;e6KedPVaj>NY~H;m6SU}L6bH=lp<7ASfN}2?ZzkK(ZYE-x z{R1!v1O5R7t1SKsX#|tf&CfQk&m-=|Gd%_{gazb1vCpE;){jpghB+0sjw;C6wa$bI z`v(}@4JaAtjx&kZJ6B!t20LNnu!P-wfhm<&Esv>Mi9E5~{fUls(md_kSsu_DiyC{ygEJ9#_WHh{l zIF?)KOq=~u;FSJ2J_HR>l&X)YaU3x%Sx|)t!blKUy@`f@NOqA3xtl&kJzDvaUJi$>{%W6Q9k7QB zX6E=rMk<0BCJLN%a>$|ij=4Id9E&#Gi`JP8zZ6(VA||&Gk@C&jRT=a^f*(><1CqAp z$Vpe}QVlmCLr-qQOP3%StqdBV)C?j#j|HTKp_M`3kXD*WBN2v1jVDb$P=DH^D%yUa z=Jcd&v>xy6T#36Z!rJk!&rfn$W)_PHec4DSv%>fj6x^zmFcWm?b2xYX!)E4;F=iTxuhlc>3Aom$1mbsRjUhP|@0jNo-?=ntVsN1v6gGr$* zPc>Xf?AnjXvx}#!Cc<0S-eEuXSw5;5kqT))(z3{7`%%!HL8Us^WY#S~%$q84T#12u z&m0I2ZH-9Z&^vn-b}EM(b8oqD+xNNc1TH-}8R}#j|MqDH~;frMeqnA-~NWi`yFbdxc(} z2EUD)Cx;Uo^ctX;CyY~(VHlxWP)a>F-j}7>3Z76%v?*~O%w9 z0{#pdx64dpq+T%SO{*x4IqCJoO75iZgnej!^Qxnx#~6()ArULka8PUo{OyX7wb3v+dHu{@Vb}J2@=>G{;)$jP`N>=cWv#4O16Gg_ zO3G>L3JMnzoDf$FUXm&=u!oF0OE= zi4ltxrr2tXJjN`_KGwQjZ3U@61{KU@T1qmxN9uLztl#(4%2{92no-AWbFBpm+&s7Z zO%Ya*mm2V3CwwvV)Sa#qG5eBjo2Bsc3oz`=3Y+BlFH~fSLA?1o_B_(+}l{> zfd?MbbpczywdFyCVI~JM)0a{rQ4=crb`X3(yZr|!Mtssl8JO>yJ(JQds+0TqOuSGU zH(?(Yv(K0e)r>jpqZqgq1}@wbqskm%z_=V>twBXPx6$LLlCxvz6^gf-Og_u0ytJ@? z=;_~KEx%4_^a4U%SuO_^9R7$25Gq}mxvk`vMu7%^Xw0` z9M-B3asN7|@u%wW=4#N|J9Qfe+>U=JU6cScA)jF!HW$Ey=5d=)#(ipE#U$pAy6R!H z&{8Ulo>wLqVH|@H&Kj$5n2X&jsWu@T$oF!hw2uD(z~?tGV`|6#bNz@@MoNx)0-Z*V z65L8ftps`Ws#ON$7L3{q&FJ|ELbl0rgIyN)40ii+#eDLU7A0ZgBu9?LDPT>nTZLjn zIu{61Q;Au7t4S!Gu$9ipVCvm}0UsqMN}qkUtWcij&h>oc5mRjq>^V)G^#9Z6=-BKK zm?>MWqcqM^U)<-nl*MY7E(#j>Itt^k%9phA{*vix4feLnr_aA!_`RV6)%0Ok1kPkQ zkKOY#(!>++>(iIjq~*c{2E|!YPYb1kBHD2d7fF^y(+}zF?#j_tK8LWS%kgytg;bW)4CcH%1`#OGLiHZM*Z|)_77QHoE-L~>_Ek* z=07mCW%9TU%huZAEbVsB#(0Lq&pGT44a=$UWd>T?HGP6IoN#*lG+k23a~;6G!e` zF{a?0Kr{4&yq&GYE^P{Of%#LX$_-A}J7woGXW8v&%470&7j|TW!?9_*C60IImM2Qc zQv00q!x^#YjWF5ur@8ba>#~BVh9;ln_P+^#gtofGZ%iXk0~$4_Pl+-9 z0ccM%acP{t3fr>Kk7^yxUCk-aZDlv+q}7Xjs@4qD%8i_=DGt=e21WaClX;^PzKxkxE3WN3KHSxw)|s9g)vAayXxBf;VJt2PfK(VA@~F3Y;6WJdSm@<{@%uC< z+jfu#E_3962XTUp@0#G8n6JB)V|CgBbMLLm8Mdr4*nyxlI5QZw}n z4C~FuY&#q?GELb-u7@aA?}s4^on|W z_E5Nyp?$>#8)FH@0LujwJ)b)Zr;O%9HbK+q?JZAc5l1|3+3ivi%_mmv*X+vuP(%V< z_uuw&%%p)vg(e_uP3M@nU^QN)!Loy!L9r2nA<@WTKg$7{fy63d7^2sNDB7Gd=d-(O zi2E`cOl3qOMuUiu$on%_XXKa7eZ`ha|`mar~v?@&nixH7~GkKg4Fk+Z5y zId}gTk;aF9tp??|FA97bs!tD*Y-y6)nwCAxc|M_Zmw^F?;DGx^pX7u5Yv)FY;f&0B z?}VhQr2?`6Q2`-_Hg8k5#U$qk`Sohp9>io*=XdjW=B%^uN|v}wVvTsBG^Jz@fA~g% zJV6GRMWEzjl!Vuv?=lFT%_W<{Ym#|$M@B5r(|jQybiek8ENzW!gY)I(NnGh`lGeqK zLHMsjYA75?0PoZ(8pY|3`-II%zaypapT*OD3nS~Gz;quUHx)q-#WG+v3M1!#Pf@sa zhC*3GHemLeNrHJ_oULL_#Q4LnhnI~(X7^?bPO%^^dF)f~*2T(b+^@zYRRXUHe+<0V z<8$62DK9lTQW4mSvA_qre9a~g`$T0zan)39-GV98A7z>MTl{^sIV1mkya5l*T&6&{ zgh!vz^?ro5_Kzq>Bw`QE?bRcmIN3N26k$C7zZwDRFjE@eFeElvha-`TIQo=8IX}Pb zICD*|4@&hcH1Ho2J0h`eOVefl`$(x5o=x}hOUxQU7ScTLLRLsRE(aWf7xZ}si zZ2oAyhE9F?KSX|%QxuhrGy zaS4*-Fg^YUuE^jDE%7Ip%9km>7B(<$ce`MgpELJhm+DpX(9=#?Rvert z-_W0_oOI~t7usexd&jRi?TRA>E;Ic?MBO_M`}ca^ZO33Z4}ZlVai2K3=^q+nb2;ff z$RV(q+sbD+UB^|U)f&FG*|9@xd=-%#1+8IN`FMHXM-*DEQu-Rp0agRN2q;h;ka{`k zaIaPffZqZuyHsX{%*K=lg$d=iGNmJ9jfu6P)ik51~VPH>xrll&i z%Z@2EqD6PZaySDFB=*x~p{LSlK>A7D(EJZzMeuD$mL8m%iV|)?g}m!2J!852C#+9y z&;nHPq@JN7{#jF-hREGJSH%m@19OC??O4f=G9%b%sGVsDiMoym&nik#A~Fa}^4-vG_m6RIYW@L)YX1iL z@&6T&zK!@X?^zdgY~>)KHtE}skS*`f)lUKtfM#gSJqI#*!O%U%pZ42J@_@1 z1_YMVnxiSPJgj?)D#qHBoHZ5cNj{D2;fRXy_B3-8N?=uEpU(KFgPjnZWA{NlgI2c8 z@^Kaov3@xYd0fh|wxD0A*v*4TjPo|1(b}T_^E?d-BnhnOk-6toG?|f&!0O%PFCB6xmOe+ujL(t){CX);U_zhu*~4_ zgzRLK%#8o6s1xDD>8lV`ecve*2E*;QR<8I8t&|Ob-(E3%R|1E0ih0&$5D{0-Q~hdL z;=G<+{s-7}B>(%>#nfcU8`tJs$!Xlr#Jf^->vP`HvSob5Wj08&CG8d=aNJs=8;k zP-LIS-D{IxhJ0Fy^M#f5_YUL*CF&a&V*=Z1?C1g=otsJ5ZXUX9XC`1hD|M#W& zOHcm;OrM+odCv!`wDH#0Cd;IWTd3%vT6P3#MVPma!L7}iEmd#P34W_@foF*sayGO<&E69`gl?>PKg zAtnD>$PFA>s>q|0D6DdCqnr^4m-R@*BZ_2TVY(ag1^BoVyZ@LT3&1|ym@X+z3iZx3 z!EGe-T(v+MU}YMG2Uhmlm5ujtJ-UbO`4zDml#lnh*}3CEoAg9Mf^2jcuk%ky1 zr1W1p+#d%pM3zBOky+;o9ROyAD6lH>1LKHFTP@llOtg}hJ*w+jEC(JA6T_Qb?{+Ae zYSID4LtIDW83WdpH}&^VBTx1Q%0Vi8NO6jNW!g&Lw6$r=7m6(pSy{D3O3^i$ZoAU& zZkv4e*PLU?$*p=^a=fiLX6-Tp72AF<6S62OHnM70{Ho;50Aglll%GoyvSZp2>_!$# zx$4*EDWAga8p=GUvOp1A%q;OPc%_Jx6CD2R%8L**g_no_mJo4g?!;gE2F1fa1Rv2I z&-|Sm!!VeOyx~fuu?3|xayovWX=MM8&Lb>xFr8yEpd8q*?L+?IF1C@-V^W&)MbQyWoe_TCkUV(S8vs)r|Axb|AIqaP;<#KX0t2_EraZs3NrD zXT8wy1eEZuBA_2dEnQJs5F;aOW>V_+wl;IVuD+TuR)z{E{z0&!sdQJ@0cu4Fc`4yt zPl^6Kd85CsJg`V3g39(bdqqhyEHBbVUbWtgNU_$>dFwSkdjWBk{GIkE! zIAJ-kWQB{xkR^OGJJES+v{1@Tkf$z3YxH?nWJ~~9c>jA&ku}9m8B!Kpb?czIo$>yS z&D}j2IeZJyN78ph0I zyZU`G+;tk;R1H+U(&`?A8~6IC9sr4uXq?Z!ZCTFKJ4gIgEuzeyW#pY6oVrPFTpE&j z<~MEdM>p2xaK;YX=1FV2LQiGZnaEO&omc2XNEMN?vWz5g%fp@ojI;&HaF8ZPW?_}Z zsRMD5cL!zWJomWR0Qam-x~R9XdL}!cwn}D3#iT7knMx*;A}jY^tOrR*<97xianeF0 zF#|&D#7IL2=6&Iy@={iC3pJPCN4v)@$}0H>ka?e?z2X2{@o!wwjC7JCmY0rkyd#9o z`|42GU!-$ee$^#Zeo?|0eC>FI0hv5Tq(BpKNv~f|Q z9PpiNuZ@H!jJCt6i$17SNX?3AWw4rSffbur^%^GiaB>i(eK>^l8|Kt&{PvO*MzK`S@H-O=qV3|^;=ic}_4E)-qpyTcwv1-;Os>S}ibHjt+Ot}! z`HyM+tGKvnku6mPU>2pUYt7R4iOoC3UB%zw#y#*cY3s`hw_`#zy$B9jD?w07?igQp zzQ=bi;M+K0O5B)OS#kE5%&#_3(>k|tGO8=}7|EO1%M(sbm5Bqx_W9H@Yz0&fW zapYE;n^9?l+-H;lfU4J*}zf zBu3a12q$2*q@W`%Nt1rXR~E!2$n?dq5`{*LcI6*H!c<{A`gWd3m_PdTjGQUZG;ryw zBJu6}DnaSZ?1U;#$~-~Emq#rDFL%5;btX0<_TZv}$LB+{!xs6eCYM915Bj4COOh+YTifF3;7Pw7Q8HyfmN7kH|)JiqU! zU!zoGnOJV{69h5k^8~|B4$Qa%%dTM+qqg9PR%EXV&p(G1SuALI+~y3NHF_?X6PEqM znVPoj5p#cu611SPYw8qQ+8_W*3T`ijF8aVnHaQsD-~}QwbfE5Wq^!30(m*Id9KYzh zw9Bum;>s+>vRrox7hpaMrc$(m@8S^Cic0-5M~ZhP#fnN*KXIHB&a|#_KNoObDT5wC zL@P7EXO)RiN>@`+qcy6qH~7LVQ{iXFT{@~D1xVtea)2j(gIDb>9H7ljcCb@7 zQp}5vWHjMmcvJJUzrV)lse$9VJID6D}!$=lS zOWmkSjq;6BL7mJYh7|wacv_y=70Pzw(TZ$k9jGcEJvZ6k6T*5*fV3{Lj`Av3p+6*7 zIB5h?@xj!}*>Gf@s&fXLnVc9#G9jbIW&IAWBGyHAin^5OpN4~ zR?+VlNehlab0>^~x-fq$*h9^@#hhVTIp!d9xrTO`(GTUE1DW5YYLM>=x8QkqV!qrm zO_lOIZhZ{#DyRoOFIpapZ4QSyA-B=6J>sy;hL9)>6oDzFDWy>QNMtm6vP-J+Ea?^T z8C)r0*=Ee5R8B`B{vu)Na0_MxQPQE;&ZbE33{zVql-rw995+YPnDJ}n9ffLUre_%@ zG)v?99MM~JX*sQV>8LTTO0{T$yL`}!N9h)U@x2H;oPD1#L0Aee`)3s${1+1JW%|~-0v_YfFBNP&IZScqXgNEfCHfUp;G5?Az{jAIwUV2npotEbcf&7S)&S#9l?J7p`E$`A?sW$@T+p8vf|#UZN89H_p!ieZhB`Vb(FqRIJ;a?qWo*X z4T}6!V(T*pQ?c@LQsR?FmXIH)7V)lb#;f?^L4w4xF;vH^#{IKFfn2D${eERBIWM2( zhJQw0nrz$keJY1fsS4Ztfcgs9aHIT33!qQPzu> z4IX9`^sQOf?!vec-ihnr?cQuc6Y4}lDj&b)mG;Z7(Q8ISOg%fAQAMV%gte@|LZ$3` z7GHt81|Mifphbz2#IaD>A2;EIZ*fYYqNx9{9D{XUA&ajCc_2_3?kR9a$mLiOAdj2J zv!Dbb0c!zyY>y(Ag>qwg#EjwME_wPMCZH4H&x>8F2tb#2bA?r=cG`WNb1f{lkzAyW zxu8Q3gU9hM2Qe`DZImPySmkxhdu^BTk#_!>t?P6?EhXo>d4J**a*I7s3!Uw!#L%t@ ze&=!kGR(?5%huZzk6Altd?&jZ$p~sDiBa|Q_~_$NT1XuUo{eTzDf4T47ae*DIyl6!IB}kwI}PBhoR8BijH%0U zQ^;CcDH%i&X%ZN$FVw<LrKAo^d3V)}U;nkc+@_M1s|57)FH8fk3E2*zM63Na;i9 z4km_Ap7?BRToXtPP;Xyj<#@~`kLT&sSuc!JlxvR_eliLn&EXd_I|beIk;iGTv8V{$ zHlkD^k32)b#h%;SC4O$OZ<|Ds$|$gy;|@iK6Guf@X~U_KIUJY?f@JjzCDiv5V^PSt zAApCv=<1>$@5Qx1vN%EYKLTP-Ve9uNZ5@MaV)ZNYQG4tE01=jDK=4>HruWJ^`wo@h zUEJ8zA?TxEAua{if&Xr|NPFcVR=eWokJ8uFX@1c|V%7|wLaQ>5*f-HH@avQz3|(0w zw@yN>{X+q~k=OOu>n??PviwQqL$#S9vPNH@H`1xt-6@w}&$3yfJFHr|PoFPQM<`2r zQ@ffEiBZeFIKKu+h~)h`k3|E28=$sJd4G10e>Eok;5vu@xQo4O)}hS(jZFnL!SB-y z1ZB6TH1m>a!cCxD9|!GvUt#H~lp@}mtYELFKfISixwIS<#HG7{U=1yrCeW#I=gT-3 z#&jo7)hpMX9elrtiwn_>+;xv6b@dGEH&$KK=61V1dr1xYZSZ0w zHttEXp=I;)*n@7jB81%{MS6X!Yr@yU8Z^A51Y^!1zH{vHoh5whHgR`e9r?r3wajDni`CuJ|)%_ngYqckHR zfyW2QUo}{A!~@+7tpoX5y+xNIp90;^M>;=huo>5ukmFni`}7WIvW2MTgrQxI9`*|6 zF`T4KrU!Z~ifqppn;e6gKC*H8kj~Qlu;pzEo4eg~!@*_=ebsu2$AcLf`?iO%c2_rv z%!-|Q=~)OVzx80CU|GgiDSw_JrwhItoI{$V%dG|bOu)k?7X{CH=&lbH%Hi0ey{oTl z6Cx4w=fmsdLfVj?jBzP~Fhg8;$#docy!ul5G>-7fk&yd%a@cEZQg(hIk)^W`wimy? z-uB>d7O>@h^I^qLeRvI)_~o(DoSmLL3dOaf&F8_#jvOubZ~NE!0Le+^kG4hc5~XLu z=iZBgK9x!7XZvuC^1sVY0Ev~?5v~i~Ci;~)Ld|3jEAz4h^soD2E z!ITyP8ulc92&5fwAlq&TDfa4(d}8qG{DWYSej!@jbd@+j&}IYdnBGa{e@xsFbxMUl zxlxl!BfGXyK>6b{BH{Y}2YW~$*XBP!`u$)Ph+|RIzeg|YYy`*2aWo*P8<|hBPHZ&( z&~>%e0#b|bBG|fS!xW8r+I6pQ0N+zG9r;7SDcMz$y&79pG+ z%ys7#{rr@|>z8ew(Vx@4#M|UW-8afe2!;mL4(*U&=+LmqlU$UKur?LBh^Q!`d81Mi5$S2YEc}nr_R?rDSKY0vd!heqT^iWB>qMZ=n5=Xs!lzr|`0XVE(pUozyQ(rnu zKJ(5_lBIDHYZ6Lrs$-Mmc=^_?{`IAZ?B0CcLD9!m#+r$1mY3#t&%+tms>QVeTsXOXB-NNY~ z@hm^FxIfQ*8i2PRko6ZJKuL+`BTrb{#Rjq~9MY;Pw{gW@4fTS5sE$V%ZojMFb>8om zmA5mi*fRU#mnBbIBhqA-Bh#BESO0>NPmTw?ceFW6sK2ciy??1LmT|xPqL42=_pQxy#Fg>z>~&rM6jDJSi+MK=oL@fJxRE*;QUP)#EKvvokXY; zU<=CP*ytrHe11DgX|5o}^HCioq04~lDjZkT7}&PbkR~uYKLm^CupL=SV5ewPe!I|i_3@% zW$d--+@)Ya|(ooLi(ALWB?jtQ(&Ypqz9!2YnM!Ap7D zH04)7*QKo~{?3C;z2E}?Zhv-L^B&9bgIX3&r|+Px{_ih;@r|#4_`dAmF{hBF2>q4g z1lAZ8m`0x8#znOKfjUz(xRuwGVxmwS?*A6qVOns%j3aKPf$iVKga(>MQ+mu+tU4NS zz~T=SUHzjStTzO{3B1A1Z4LArR!NH8M`0u*@nXr}BGs9Sg2Ff|)XZ`0OW zqxg>mT$*L=ZiFzhx4+pIxc4~z7L)k}saA}1b^{Dlc$*@$&A>8hD-u-T2chBEI#i=s zl%fg!^cu!w;5BwY%l(ZfCYDtUAUm@5PJq5!cY9z%tgozQqYhv-)X~jOz_3tWt!8}b zeCUc@I8msOLXUa0t}LU-uzm?D_HwS2RlOw(g+6&r8lr?wn&N^@NZqlsSHxU5D7HVW z-WPr~B2Wlum@Kr>eu@3@MhNGj(a74B^71XG2Qf8Pd_krE`PL#a%B#=!%|YkhPW?Z= z1O8Ha9TFf3;Iw~4W6CleVE_QuMLwfblZYA#FEeYsTE8Dvg{AEGeKlug%0f#?&n{UU z9ZePhvxO`)>NVx-@ihAc34u8@@!mk^L^^7*pc+zm5p(uCZS&UpC3=t*9oF*m;V)01N{ zi{tC|x|>2aRP{IN*apYqY|2qwY%=ssPNQ^Zv0iFNbuGLctrI2FBICSp3P<()7s6v# z>tP4^;wKr}FK5)21?W08vw;~Ve@>`_jU{=XyI$4+WB3H|PV+lG6GA_xoZHy2@j9W6 zExpiIP-h_^xPFBAttSW!3-?rRR2hny!svgXr>Wjoz7J#r8$uzzTu+6A@PU<$smgY) zbFAb}A&_c5s0mbhJRR3#chQ%R11kf{raikE z1CKFK6j=Qw4h5F$9%8C;)79qZcdDKmu3VzWx_9gQmC*@C#T3G*sH>)$+nmnWWDHh< z-!~Hfy1DD94A+x1cP?|?W*PgMdi@}JGoFoc_``jChcken_xDxH1pLK(y9{YOO6L)+ zA47v> z&*ZyAX_Q#;jv&Vpp)XFE&*H`_4XFg z1kx~ngvY06`qb@>lfV7cpSNE^3QPD05b*l_ev;Vx>PbeR7AsJV2eFCIdDf5r} zK^ng0cM|-9U47zs{{W^*@K2@9`4W1*DU&wdv0^8vh-vL<(Z}7h1j8f78dKGyKrUVn z;t!NQ?mO!r6S0=f-@y86O?$_K{2UmEIef7dNA7HPM#g{cWY@@DSikqX-LGjIL|LXS zIVl&0r3Cn5`+CW?WMkn5X)QFpYi^Z+Sm^Ap{j$h(83t$sZJ(e?3oq~5({64iTq;8Jv`kSz2Q zM`}qz6{6crMj=9;@+X+icReBm(8liIAx>ASc=Yr2L;&}GWg*%iiJ|28vYZrbU%Q+H z;TI)0$7M+UWD$XAge=dVO)c zbzBxR-D1sVD=`h7PNoYX;uJ_i2UWtI>N~yNxuGr6b>vzV-`Vc$+%GfS0-t<*&Z(%%`ARcTR*Z(X3THVq z>SZ>6yf+Eb_Z~!s_;uKN?d)fT_ZltezV8xhG8;{7LQ$X@@HAhxNv$Evt~t(v*fakF zkcgWg^Mm$MR$tfnwGzDU)GOesPyZ-@RO<*YxZm$fl1{LNR1u(wB)+WdlKWY92T#R+ z**Z^9J{`>d>}S6}zC-Y5YQN(bmf_FCEsCfd3Fi*WHB~WZIv?h+)S&lUS2F@PS=dXa zk*oeYKJ1bqzkiOyqdE0;aedDX+}y*2miVedkinKnuN&p>|v7VNg1W+78n8 z{;eD<8uCDr+{xbEjZnw0a%~>jc*FNy>Q_KCn#hR;STJ5vN@li zi51OwLw_p(pfsE`-kx_}@yXlYZ~s7YFJX=@xVxBlW!p@rE-^j%MqHpxR%nlVXYD%1 zBNjW><2UzYCKtL=8+2=^Aa`@xRg?6U(#1)~#btcUqxT=qS{}S}s}oPn#Y+Gh*4=AzNVa(U=0@X8j7WfQps;M8ZaZJN0tzC z!uzWD3*&e#D(5o6GX2+Q?&As8h$HveN#=~gHB^}8yET3L7v6AwtM+aaU)g-Qs);eT z&xV{v0-LmNq6IoBr^oVflov#JL)JC3oHu+5mcA+7ewm?1dzG_u6IVwMFeOmp%ipj1 zK>C`6!qznq7gzTxekx7Q=WRz1huFht)@SECDzZqbT#=(74O;E?JD(U0#$3&*0NS$B zX6tNEQQGZl06)bu+O==%vrP1_M5O!UuW~x7K_uPzgO~20f$?s+#efjXZhYY?icH=z z8&paMJ>=D^tzDCMGWioQi#w;>v6q&FV0*fN%2%mfF>Y? zu4yRWLzeBYZ~qq`O_A~Lz2kdsD|&!Jz+Yq<+0c)JoanC#1!@iu4D7lD4lkiW(J3v@ zcMj#I_-GZNvoZ4H+c?<+98a@sq5X2^u*dh^_0~v@OVX+Wq%;0Jict- zK(0xK8>aGnt;(4*LZ*CVDG#tcG+RQ*4lk?pgpsAiUZuP4>{ioK&Qs!cY>=XmwzgP3 z%GAa4l97DFMQfxFk#PJ;c^-`P8_6|L{}GWf3V6624Pjz)b6jdfOyY6HrSL}3l)yH6 z;_s6qX!n}^;Lqqx^$qS$@9svGJ1Dwt$IzHA68)2?Ep8HKtXR#n-@Lu(>t!c(^7nf= z4y5hL9THwb#^i&9PKsQSn14Rubw5vc7qrT5)+NQVpalA~;`%3iO~VQOi@){k(W2wu zFf3~B*j6c}3y;M6hT(?t=Ev1_(!RS9j9n9g5XBYgd_yMEB#N#|X34r7FzQ>|%*?4I zwkKpq58j@Wjq2fMPv?vp=U)X06_DV|rU1+_yTdE`_k9>QH+ab6vlrO?d6o{OOzy@kHA_6m=vt-^@(|7$dE5lyb4%>1VYg>WH9Pq2|)m;H!tkNIieb=%cWjsD;QL{hl_HOy}~eXn38tBGzFETYY$3WO&} zm1JDsLXjX<{2Si5zcRtB$o}i&-kYy4)Jj=9Bx&PwhGIIOU;H^Ic;J1t*yMT1VvTV% zvEuo3s9k2<*)5HF){pVf66cHWy8AK%Y5Hd89Cqb=n{5c$Q~56ECE&u8u*X53&{J z3V=&u)h6QMys3q{{HmqES5u_P)6Rv+EkY`1Ls07y9bl zPKv|B9S--q3h79t#I{zM$5(q&urrf4s6@psu~$G#hV9-q-E8#NzgDy zKbN;R5){D5#h#NNUiD`kCty0=s>4t(-nTE3+OEsreH$+dIFj^sbX#bwk|g3D?mm55 zF_zrg7N%p4Vml{_vyk{O(Ss}Cf@cKEwyG@%K>Fq4=M1J9nd^;3w+^Y_AN+Xx!omSpC>Mze)(>dH+S0jPi|x18K&qY!2*J zeq^d{Kt~Pt6SDHRHA72<5ITk1N%C zCl9CU>NGwEwcjYM-_3E-6!Z3o0miW^^5skGq%^TLVzSz{-ppO z_3OQ~0{63qGzhp}$EtG-qPv*EM9O5D4Og*sI=(->06Ev9U-j9T?S9rVp7|OK^zI|Y zvW6pt^pLk*muM!Q&(AOZ!+}?oxlov>@b`;Tl*2xhBSv@mDi8(|we`|JI%r5{RR|Gjpqyr6oY&Ty#P z@7?rIB$_y%>GnqER{U?wo&KO7E{7y)HsXT1H_sLqQG`cP@brI#88HwQ`jG z^Sy^PumOk=qOZ!iZ@1By>M|QQ^+JZ&179H|5_zMvS;j7o-`qpZ=rB*a>K0aW_6K5h z+~FVX4paE#)K&$#V$&E_KNGQ0L1_9}J1vbBE&JY-{k9;n_y`I>%%$BajCzq@=Z3Ekm6ZKCz3R5O(^z z&g)7G3S>BPSv!-AQLzNi?42ruN7q<=V1E8`sCsAh5&C!NnO9~G%~e~QrN?- zzs_kg6fY5j+@178GN_*DuhE@JX+ia&wPTEMFq`}yoZCRk7RN-8UAvdp!c{<>AN79# z6{1to6B&MaYFsaac>5pbf-wT5L)*4=gz|)w?Hs&(qq=SN3>U-f54plP3jy}R!p%e; zF?jn?0h@xv!Q$X+N8JLBFLQK)?4w>D<&<2Ww@GIqcIfcv>Fq5b==TmpWycR#oCh!Z zvragNNf)2t?id?(f?|Kp#s9#o%H}yC4 zXsKtgf%50KPTH_OtS>GD;Fvu(%EOpe?oLVyL(bIzY*!@-k{drRw)X)cfv955ZYgqN zwV&HLI^?FI;FWZmW|MS3p*PyK{Q+U*?fllSrtfR*du$%{ZVql-o;%(@oET$2T@KmbkWa|r&3*9Q&UwuL4^R#46^=NYj}TQ;g>knW5&nt5 z9O%V|F?-O~aMexui$cd;@h4TW@CF=3^TTv7$yP+DW@)D0*wn;*OGq~Zs;hh}u4|K8 zP3f@qsQE|Bd{UWCA+zrcr~AX70@^fY7*Dcfa(>2_OYJpj((#Dtkz7B@{E7Y}LdDXG z#2MtXd>fL>L=xqrK|KJMVro;ZkNe@l1MuwT*%R+o1!pFjW?qW_`Eo=NJv!f^UXtc#Z_%s;w!+7LF zib>>OYj0_bn5){5n~NZMc1M1@*tX=E@jX|sRMoZEDo=|>D3 zJrPXW?t7B4M7YR}M1+Q`=y0st$$6*Z;&Xvb3{f3~ZsK^=$tyPh=8$C&Vu-gger=3z z7y`x__NuG$M`1m>_I8F;APAlSzIwtOkoLW5$Qu2JG2bK1JsdetG0nI10W=`MADfE? z@=v!s=Z)>A`<)m)zr$Fbb-!EDpG`pt0%pGSSQ*VT=&N)aW~05kJ@{|(ht>HuG86g8 zZyG57TcJ?jk3b*1WP%_Wb1wv}BO2POpeLVaA}fQ)1d95+=9Sf4AePhQ?E#MN^BgWD zEP^R(R9S>UM*Px4A!gx3xU&dn3pcEW_$TyKpM(=@VuXA|q%;)uOQ9kPG_`UDAP3A*;ieyYj z7ryiOcX{W+s5uTb8Uc5vKOxz<`!=LxVO?l`%bk{hECshtV3dy1@ zWMu^Q^N7RrC)H|#SQXWFxr)PCgTMd(9FzWUC#h(rM0VdN8IxQi#29mb6C8Br#hMq` zvnXF#dnifni7hgC+sPBz97zLfu|waEp#&O1->Lmbm&U4nea$>4QF9Yf5QljuO-ABL zck#2H2;@qPr_ICp8%WG~9Jh%6vtJY~IKdU)v63JricXTQ&yAWll4zQPa~^`T9pIe4)m5!C0|mrbKT-qvrI0zMo~S z1b7gWN8;3FDjV06-!v>-5l;4?6AxyV5%SYqd{@`?zzq=k4M~6a(~jvEX+>zo=^IW+ zY*v<`Qpq55!gK3aKNxDXfOXS+aX_1ZXI^w3&c_&WUs+~glSacGYPzSYv;gdBurgL=KMU| zZ!KjeJ5VPd1Sl*qFcyF##Kq@yB$qRu6s^lEx{<;eo6(d7EcOzTGEd#K!%jRO^#qn! zf1?al3eLuTFx~%sN|@vfC679_dmjI!?ndoV&o3(XF-Eya5gv|xVTs>snXkEK(axxi zxB08M)i^CZ9VD0guGa56S`U+?gQwfCRtmSn^f>szlFwb!>0LE-gIHtwGmAC%^I}53 z_4_t{A1*vj<2V~o+uo0`cvMRl4u;z|y98ML{xPs>C+sT5NlVA}$ez^RoPg!!xsTsI zSrRAd_ElH`^I-UN;E)g%sks*5WvZXqg+vgEU)6xnPPCoY*LAm#-?q7!!+mMr_|;Zp&J(^cf#GpXmGnEv*yHGb+cO+mP*fR2!~nKvw4gg*quV1atyN!gjz z=vsbDgC0)&*^r4&V+>s=b{NT736-RT!dwc$6Y6`vr8>M_4%1y^8L6*@%OfvwB!4;Y zJabLZTH> zB#duyPM)n(ceni*GC%z>n-^S0ZSsC~c*izkDY}v-a3bwcrXEZU2mquobR!1M_6+9Y z@L`h=_G@1uGuPqgy<-C{9ruQ<46w#ZeVbWIO!B+(_W`CRGF!t=%RLtnsj#0&=K#uf zkE_~zF7Kufg(68l4z8#H`oR(u%ba;nhK6K<7+79{K_h&ZGr5|GSjgIo_h!3wj+S1! z@H;h!*R^rOI5OdFCM$x^typU0hDC>l(-v!$v-VPW5k@{bC=nyQq7)(m`>@w1D&5~7 z_x*sjKS|r^Wv$QSKlU`N9w&jU4k1h_6WEjm>~x27Zswzh9bm#dpHHZsuKEI z%LQ~T1zC0L52l)xVMY}jD_lfP;4B-Op3mClDK=;Noh?89#22pa#f8z-MHvN{x}_U- zFV13&Q!)M-5lbZ$BuwMDktKgUc-Y=3F~lC)xW|MBigH;J|1c|j_8Am2+?k%;y@_5y zdg2;2cO;u`$#B=Z=|IAFSUQTWoGS}{n^5JS{uvuVtVwWuW+!-*F zcHz+pUE{;VNA=5ov}$wUS=w|V-#)INShU;@3V#xru~b+=kKm1Ba0@M^)}V zQ+YeXp6v^y^+G~`*-uBIfW7t+wzXwT-nZ8%SR`x(*>HHiq zs)S;hAIo*$DQVe-y81}$_TI>CdvUoRXwy{W19T%G3Cv)b6UI*bAZ&H%gd!2hJR&XN5Os* z6!460u(Fe(!B!X*v76r|Obzie8=2u09B{W;mG?T`-7k7z1l??Jr4nC>Y;>RYGwZ`2 zJK$fck~GcJ;G`y{2#$sDX04OyAO1YVNtE^38oMnX7Dw2lWY=tT=ggq+HK^O9ftROt zGIrSp*-i3!=b3&a#zqnJ5_$M6y-)x_>BG0|E5qX{T0Q%gm=@!+J6B`|>&(c5PM-1}&^d;cChXzL~AhlFp$DuA3vSF?xOyRZB&h8aAZGWI?o< zsbjan!Ff$d4|-d-J&gY`RO}u6hT`wm)_!(lT8dyu7H=5w_0}Z-$9ohe|XAy@9Y!>-J;pf ze|s}(9A?Ac1_v>Ax4#MR^ry3pWbi->w01V;*v^*(yS1IzW|MmlC^0XbL`AOUM4h&Y zTN5z8W57ng)KL$uD9pBN#wM5m)noqp&?~QtZAVNJaX1rfBD#F9{Xk+7l5oxl&NR1O zLW#f3r{V!M1Kqv*QOz4UTWf)N*%!ax?)!0&x;$VIWV_{W9?_q%mKd0T_V4j8H@E-e zJ{mnT2ssKQ!V%~AzIxCX!J6zVI2c~l_2qD^1AA61XLQY_nwltq zs!F>JDwLSy9hMG8>AbN%`t5}!@QqOeh$~(5AHV>l_^NrUpxMH3vi`f2Rck`it6yE_ z3>S*jqsFGfdb0j0{5&7u&iUGio>T1Org|^s+_5%XHafCsNr^H-IuPN2Y&?FgfxoSj z(|t6%rE!yn??-4lkkLsb+q4m*nS?GKjwiMF$*jSC@h_Y9HM1?PQauAO|0mD)2ZHRq zB8&DyP=C=Bg$#M~1jc*>pL9t?Z{VpIh zOX_MS(@al#l@9ZA93@JcN5N!P^I08QlV6p_9rKZYm}w?ev6D=uHgEV2u_&`#=uSn|fD2G4 zSF}6LZq?A%7Dq!)heJs^j6-wGO+Bk|PK(`I7m-Cll>8sC?mqx^;C}!#s(;hF$NZ9c z^#7_wi0l&-#F7FPd&;tf#_L9VQhQk62QD&e0!U8&12DZ0V7x9@zb4dey@rV%*4!IZ zuHVNz6Rj!Tw?3v%8zp-}%6r?+|~tx-W~$g4BJr*JM>+neSV-JJ#q+oF}iiv$%0}aG3#meIWM^! zwR(Z?(odFCjJ8*m)p*!LF6`iU-j`^!zgb$qqJhQ6C-N+DM@^RlfkwVk|R2qqmWrTp+7HB z8*pgHr%zbQ;bhUEiwpCCSn2LX^+`MVMr#iK3FCAI3s3*e@Zd?@OY{HmPeG+b>^Y)1 z;i)du-)z_mqaC7>6a>I!#4j}<<;>^IyBRe-75&W<}Bz~>`N*HGzaP8BvcW+ zLa4Id8&`d5npUSuR!>&Rc`&P1?VWH(Se)NTQ`Jn|-L8e&o84@Vm?hIKG=PS4Stf1_ zN~&bHWmDOulR9QT{C~ffDHjM)_M?f|gS%+XnvFm$bR02gLpIm8d)O4ol|szhat~m- zba)|kk)a3gv)Pd@`g%6$iTmUSDND~P8wMfC!~}zgxXctT<6sH`G6j0|X`5X78n%*P zG5MD6MV6hFnxdvLcu;4jl@mTx6%`IW!#IawjF~Q3{M?t>hAx@h)U0bYl@7{Sp{khJ zwTVC-nm~y2f|XFvV?(&|3GN79d5YFe%VBB7IMWo|X8{^;))2N~DaYRR(TtTs@7u3H zrnLYiPoh$Z7jMt3TFqhn_APZtJ9sxDu_%r&y44JyNJ*r?Uwbss|)_u{@1!ayq0 zUv_3Kqh|&xXwF3V$E;U&cNMLpGO;9iOlA4&<9~Rt=}cOMrn>?*(HbUPCoSPwdhf|9 zRU90X$u`nK`_5+rCI109oxMh;bRQm}hw`@m3=g)>SfAhXR$m(R9wo1U(a8Hge=-hM zMUWs&Z}#E5uz5!C=5Pqf^cPdi*+AdEvsM*ZgpW?RHuvDJY2@)$A5 zd3~lLq9NZi#RFJ&68T3qvY%&XpFs<&+J68O{lHZI0Io+?qF!f_!m`(Nkq{Hz4XWn% zg`umHufUvD0P6!9l&92J98hQa7hqJpPgNdIb<{q4F{OPLjx#$vW0J>hmg@bD^(U)E zJ@cCICxre((+TM}H=Kg7@xtDd{Y8ZVE<;geigqLIjzdG#x5Kv)k*3=$-EY zcWFaluhyPV_UU8W)tBw3*5#(JlP?;TyLD*$ z91G0TY_iOn^fXwMz}yo`jgvVdw6lyG=Si=mX>FzSMwW*XS@u9*g(x5{xRgmh8DG65 z2!Ev{nLpe#JggYD5@hK~^{5=gb<)hZIwYhra-v>DoW;%OYks7j=mE5xo1y-93?xN* zp`m1X6}=jeIO=I=rWfu>cgbrQ93epURf;l!ldCoXQGE%LiA>NvPiK54GUuxz*<621 zfp{MSAO~8!D&6gAJODc1%mtr=g2uW6pIDOl&l0@XqH{X+5OmR zT{RFqmGjYRze*UloZX>HYl)y7l5Fi^-W4dL`F+{-xO#jqJX7^D65vu6`sps%uxUJl zL;VA-J|6og>0dO=lmIy&xS$UJz*Xp{t$>K`j84|0Q;6?(h=EpP<|aQQ#RxOkq-dv= zTIl;Vo`!fdS_eo%H%tp{85F9aK3#}XAjoYwT}P`~ETWiorm|OfC-cwi{nLMduCtkk ze_x0Ht%-DWT-sTLpFNn__plLq{Nl4)Ql8bbZ#<7Q1iPUP<$2lfk1^>lGRtc&<{jH| z3`I~0E!t=BT4#7wy26n`5bjFYu+cBF%){v;>HdP;TcI&?q68skd9>~xvAbV1@mkUZ zkoX(#v=)$z>ymN(M@2G84LX2)?8Vm~Sg86RCIj3E3}97`F2eaGs?Z8POxM zD|z^9i4YKwM>X?$q`8&OtIy5LOO`2DfGcuKfJwBVrb=@tL_5p%Pa3l=D#FN=)BpNu z!U=^vN_j!Yr;bVW27-+_CLueD{aob6+GaL=GAK#mS@8Bn)?E5y|5~gz@nFS+$@+uV z?-J-gqlXlTuvOr9{+3n!2f}OUE9uz{JAX;@rZ%fPSaQfB%__%6dQZL)4ChLxs6J(7o^C$3&-LV(Kk#O;wVu{kP0T)99^a0k-9fAwGpG$ae8BCk!tm$fXYr!Su>lxgx zI{ZF9T5VW=)iWv8t(u{a(<7q~c90x;zA>Q<)B3af@VTmczBTEETKgy-Y%tX?LR2@# zZzy zbTWdY`w*of^wL%3q|;-sE0OplRetc`UWLLiU$S|!rAgb@X3S^T`27Hml59T_rc{<| zG|KQhsUrhB&r|Dz7wx-Sz5uQkU-^RHcfMh!+^uwfGo=^U@mJoeMa&leOc=2Ze6nDo z|AkxOyjVwUbMGBSp~b;}qv`{j{}BEMD^oWgtX=~@{;&In)eQR4nn-z4|3WbZy0LHE zRp+wu-B*F{wn5(^y|Zo6%P3gV0vfh#nqL@V3uGtEYAK;tFP}1OOdSt})-;}-q%aI{ z;W4~I%CjQX7ug^a;^q(5^sQa{1e#1q5u$g$?x>&~S*6+zo_)obE7K`}JT*~QIy8rZ z)#pkE)1-valGI{_Xiz3FsR_T4VF9GR6sw+ttx%pPb2Z?|_tCC{Zx#5Sv=)ohY2_J$ zrAmNLFxPvZoLb7DWkDg`3@WQD1h1=u?T*S-ioxP6NrJ|NubDo5-x zGqpVpGOwj35zfwS!6KPjr~07Czq&YL+i3qVXMf)~4+&+)t$8@rO4WDNq(PL&J$TA)+lVkBw=uy^zx(hQA+&sfU>V7 zD0eeOULZ2AKQoG71pYzK9?0VDyLqJeEw7_HCPlSr^dPBiaY`)HVqxRiQ3>2hn#UQD zW2s>(;C{yC(Q@Dk0gFD2${^4xwSn$1O~US7E=NJ>fJG6dFXoDH5d{|V6tKk>pB4s_iPZK zd%;-heF~k{Xr+2Z#^Z6yzHdQ^lgf0Y^BIFO#Voy%6;OoQ0W~T7tOYgV@6$9{L^09e z0qn2R=F*D&W0K;9s0j_+w7_V83Ip|VBwOv>Y5G5?0Da{B^Io~0KM<`^2Gg4oTk?jF zW_=eceu;)Y<&(tB&Hr+GcJae4XWUIVG+(F;BhqwQbdwo@{i=!e2s5J#k<~*7EP6c5th2#2#tc3Rw~9NL z4>B!$=#Q&Kmfxatyci5$SN|FnDTN!A-D-ke?FkJ$^0>=Y(m9!r)0j0bUVY4G^zxgg z&Mj8SWKB6H)EU32e15P8Hv)s<%RZw3=iom1)w{E&8g_=s)xY>1MU;qS-T`}kh>x}` z8`rLPTNX~tO8I$ULGgdR6qtkIRJawDWpq(MuH)Nzw3lkA9&O4^0z z_VkvrPWXb`V`zXpl8T9h#EuXo3}nXr?ht>97YTRPxyfT;o!Rtd69d$iC&Ni9s;UAd zW=&nkPtrODkf$l>b^=xd`HI&i{Pxah84*5S4Ye-_3aoM~_tlD$ONB+L^sp$wa40cR z0VRW-C5ub?qs9Lu3u8cFB=U%8L_ji`#xYsYc`bW0G2zT#HyEy`|LR0R7ceMY8KrgS zLBPYH8K72E^SxSfuaxN?n4ULR^S5Zwm-Z|AYU!chH(xUc?LQkj4vYR!Iz2Y8*qloH zv6dgF(xKByA{q=z1wFzSDJ2T(iCxpvpppwj8W}_OU2gjc^~q<~{b_liC8~L9x;(7< zFBdLBM$7~(B!q3IQ4sh@xj)YHv9}0NN#@weLFTNl&aO+S*-{Tf)Bm*%-?4aut%Fp^8%DJp2csO+B(-qNe|V9~BD@{by%h^UD5h zj#RB)h}q`&*RS!rZ+MAJc%D_~(5HLED<$8Z9UAP(r$>46IPrCALMzXJI>Hchde1P= zdEC;8M71#%rG5K`(KHTCu%~fqYAFwK4K?P}`#w{8Wp=!+ROm>p2wNA5vtwpAY)+f3 z_#<>WrPWf?R5Jyoxc6bD6cI=;Y}owi<0^9)&6lU)6Pv0srm^AbCeu_gwCi>-PWp z7HC~*K2!CY8=@qo!jhgWgNR9hDO9Fxm@Py~s&5N)pUM;UDILROv0BjNus_c4JWD@< z6=x4N%N#2)jc!p!E0zd{#*$izFBzTY?4Vm8?M+{QC1HYs0VnHkKfRFr4-xinr|aK#`~ z$Tw7Xozro%Y`@M>;de4mtJ0dFkr=C`EuNd!q5Ivfry+cK&#yzM^-riEnOkAoCauf>ubCXcNB7q8L35o;)FQPvNc^wH@ zw3vx-;M4Lq5ehS#SSa@B@6G$^u@=Kqgb zcUPl=m9B=>!G$`D78M)MG<;xc_R!fs#Aq|-63xF5dR~?Ru&s2MGVTG1q>V%-eRUyr z8b4`*g%7*W_Z`tVZ_6d)=oPT9Q|LLnCsnk3nXqh4PEMHVm!?}-W>V(0$M%E3_4K&= zkli&l+5@PC-&|%pI7IF2D`(fk#xGMg56J-KTs)+Msk}O^)+~&U^24UnqxSTzQpY4q z71R$xC$rc%olBUiOVNfzG?JKsNo>lQWS)Au;u?t`e_Nwq*-Eu=^xj$G{P_={Xg%aS zR9AG7q#A0957b|75C)}|GJ{h!OJSl+dS*bf0sx@EP6f_i zsho;wp1;q0=f!<|6w_F^bi8zOykz{5<1L&}bA4Uj^15taCz$iav(w`2^$VD(YbZ$X z(vITzvG4Onfe$O6!fofr&Q!fe>8Z{67U9l~?3~KYTXqf1f=g|8=qR2Sza@j^>x1u1 zM=9Sak|!*t6hKyZr}*2&YX9w1y{|O57=D=b0fx*^W0h;V)US(df(N!m4(PqkJ zym5cNSzy!{tIQHoIcxkw>rj7mYSA)}++Uxof|c^=u06`cdvi?Zk3y0PYzF!Qk=yVL zkFZypo<)oNO~@QEa3NiH!pCh+{OH_sEfeiyFyQ552&X!)cEu* z>RIK6f2)Vp0SWIX|32r~Q{6`Q<+H}6$|G8W!HI~J;(d3=_i4`mGi(<6Hg0d##9rQM zvF52iB)aTn>0AR0&7tXmlhkz07nW$!@$RJmo!f@JsQQ?h zZYB$Gz(K4`K2OEk>LJ{PCa3 z(e6KX)1G1ZyYeEhvIxa@-n)s=Gs2a*Gy7_+R^*YYLr%m#yQ8YXH@=@9U$zMdh^OqE zCU|f~OhI7;41Egx32`_VRFIK3Hv^G(b_cI}N_&&F9xLCEUiRM>)~ba$-Sr&O6{ByO z^lEVJ!5}E!zMdtAA=K6j_@^X{Zcplzphef-^(;NCXoi^u1OsIS+oC9;2!$U{288Sm z2jm&CF1zdfad0l|t*5;DlLmCWL?_@(rFd}BjZ9hmGhwHaEwW(f=_nL>zO{HfXp0bKXaiIT|8aYD%8 zc{g|+0=_mmDfD&-*OaH1{nIgu-CehL;!PH#?hwIzYY^o4@F; zAu0xrcS=ECd1-B^a-Kh6Rt>R~79RJ!SQKmi!F;4kc`g!Nc$oD@?}4_=RWq0Amq0n5 zO;#$_93E`&)CKhx1V*jy zoO3uW_#~@{!09Px^E<*iQTU+b1}A7Bqy0Y;ReQNgaO%)_(5o9&CY6G6qQzbDe7S8%T2ql(1iQubyPaNz)+<}j zn~NUQQIniEw4g}=myJ**L^ zduc`9Wf{mP%PccuLgTXZwZAamFW&y)-IQE6|Mz-+;hlE2^pGBSUF9%K?ZW)qT;HE< z?@^A|FTGxgs>ATtHWv%5O=Y%aAXo2;*@CLh*J=i{>0pHD+vdLv* z7`R*6eOaM?BzLQWB9s;md4ywk^o{u5lst`X@qe~+0;5edb;Cb~Ob^+x>}?a(>5mHzAk-|ky26kGL;-Hl>JQAsPK*|w~t(6sCY9YFYFcTs2h zd)%^?lW6B=^H#3+40L!v6ecV*Fkc(KQ_A0I)LWz-VAvAX+7j~EeQc+KrfcR;|H*RQ z2W8PCd!XjxeJQm--Poz6V|FWJn#}2>XEsMnVoSSZ+)_pZz>60me9*>uu{(Z=A0b=8H_xLVOTl*2hd8GGZQYc-Ad+PeH0h^`h#H{#-#pk!w)~wo#P1IcnGt+ z$?zL*0(}iM+vFP7>oIQ~rR`j5x4k%*jBo!M;PVSb?)Zz>sHA9K!X=GPe+7%nOht71QMXGgfr@#EONvLr}40`So(7R z5m!(7OZC5!KoNtZ`(vWUe@U4Pf6O{Lf9^g}h)(Y`Jt=AC`U|*PspM(Mv*K|V+;}+H z_h_bKr}+&1@_nX@85t+DX*5uzz3=kuepy+Y-fydEt*lv^VE$e0MnJC9$ruhdRx zf$CrVJT4uU(_x%Qm|AJr8?0i`tXCcdTj#7!p;s{MZ!T|AaJUzg|8{Hzi()4s5W(i zN~~5fpk|eg<`ZstFBjU_mW%91$XF_a;!sPC2RbeWG@vC0IbXUIty+nv#AIXtsOxAf z%$=t`GuX3RhH~CLY7QYx^DZuGMF$?BzTE2VsyX!F!$0ulcr?e-Hz{7dGfj!@E4 zxL#hmM1|AuKo!V|Q}v+dYat6hi+-1bBiC#;K^xc>Q0p%{G@0q89rn!z3O( z?&lyF9jKX%ycY6Mcqcp5A$Cl0=Wajxaq{0c_N9?ZQPUTtyTy>Z`#Jmfjy^u246}-9 zJc+PMASf!cj7JDoXA#BjF5=Ja%U2ARG5o^kUPztPtQHCn&T~5?k&s#!Nm+ZZ0R9K) z^>uR5R|=l8U}@M|nvlu4tl)mc;~269T1{p-Z7GQ4mAmWHU$9>CFoucPBba9*iAkL)C$b}c3#r|PS!y!5H1#S?r+%M zMSnhiROS4eA8mz=uuS$-6MiOJn3UV<;{l6hakJ1k6Dn0{*= zdmSlvhko8#{8)T)rbvEtwJ=^bTyd?XP!MaMC*vS#t~!;aqr#B?jV4%2b1F@WrPP&P zYgP+Xnxt7d(}h;@@_4p?6s$aWXBFq(*MzI47=3G9@)nT@=0#KsFeO~ zMUbLlAm-=O-b8HqQ9CRZr*(j%J?OglRq1%+hpw^5Q2mZkwh_3^!Oi@m%_ zJhIv})x|ORb4elUffge**9A?m&yBn3Q{`v& z;1z`xS}vBozqc+34n$iA+X|K0pP$pZt4NYqFYQWjwKPul#xhQ$AL$hpsqF%jL*@>j zx7^+S9oqD?Hf(t6tF-uMLSGwq>+RFWD<@2o3!~CI=Zu?`vaEBs7eyUPXg5P2ZW(7X z+k@x;MdJ7$n=O@2tx`BZoxC|7@L?KQ*DS*0EEdtpMM}J+V)b2c_4yf|L?$f}#mcEI zjMgo-DTqT@{0)mwzf<2=9gse&?8g#ZbP*r0xBT{=dR09pXNI({bKdN>QDP#2q zntp&=bGgZ1-qg6ntcU4j=1v=Q&%^JtbLP(LCv(|=EqazQB5jJADo%v|MD1AAQ`GT&}4yc(6cY zTL%V%3pBdhZ_&C{+#?px*l(Sgz*h0Rg?~So! z(Bu9|R1F0g?;)vestNb8AzH)PW?zc1zkfL4GZ7e3*g#XQEVneD$cu8I>{H;e()lZ| z{C4tN&Qe`+*(i8Coj|A@MRUL?tdzwFP&F`CJ|L<)GP~|{{^b~g(|^k3Je79z2wzo| zB$WS+T}38ATkDSxR56{UqEu^lyqF*vzhtW1$U?+|Tl?oJn2|1ZWLl=ijj%lhzjQLQ zl-*7ZCbo=HPc3rPEK;CbPX_rWK!o|WRvdq{25gei9WU|9r+FICug=@G>a(rI;Nf_4 z=yD%$NPtSln@FOYRM5X~!WlO3IdK{*HRDFJ=aiJYE2?VWETmWH;nS(5?tv%%qPAd% z`hcANUmm5H#IQ+y)ljgVesU-cDvSP75xhFAeVtk)4iu+L27JWe3iZ;F@MUq?s39Jb zt~nF4{1ZK=nIS!?Y@`19*vqVoULnU2KiP{x9f(E-`S9w_vtECDsQcHS)ZTmLJZ0bt zS^?xD{rN0Ks0yf9UZh8K1^%Rt7F0-+O-@$tQME+kL4UwC?!Y&YpTt_0m4A{JL`M>*q>hr9sdD# ztHI*C9qL#(e)Y*`>zS>cjohWlAK9M8@>fFX;2+Op69E{XO7EA`lLnYiE+~V9gFcAG zDr|UPVVKiwpPNJLRhD$F#Bm_cTUVrVbCey@-klu3P&|={KG2EGUay#Z2=8qrPz* zEs9f;f0YJVI5RR#2Cs8$7jbIKT6Bsw5U^`sJa_uN(e{S?JS~QET8poKquL+}ezq7% z*ajp5CPGfjrx{S}a&G3}ZaFt5c2Cw#4Q_(D&!1(kjJYvUGQsi!pD)OT?+0$Hl9Fhd zap|cywlW0T6`a3VgLM(BMnc8Ki|@llE_dT-iDkygO7qUH?UiY>qNUU2_sAG&acpBg zOm8A_L}Tx+znNjvk?T$Q+2M){L=LHL&PEdY2Ve-@@;lgjBGTDj9##pAG0{vlLTsF$ zZz4yLKVR3U%{Bnu64Fy^xs+B@_ojJ$L=1*Mr^ZgebGS~-Fon6!70T-0FlLI$PpO*9 zc@?0qJ z`FjY-$gfES(TDrla$gdgT*u1Lmb|F)9gR1SisICmI)GaWEnb4{JR=sk-&cq-(oZm&O`*cX!vuoiy$a{Y~!7+^U&db*JWE>ZFp?NlxB(?{)Ti z){C^vU&XMtH!`SYi$Hw+1&m-GiPY;!kL19pY{)P#gJS8 z@qUfhugzw3tQk{eeD}9;6e*lBg$=8R=MZcA617RIiYZy>TCU022dKxnG=F3Pp0)9eS*XyfG z^f)Ekf?T~Ge*5hWJ7of;uyb8viP=aAwP`G|J2O5t$~Q|0U*he(2$LzcW3hi@D^o_S z(3=?5#28%*t`K|VbclCpG+Tyi!o~~7rI<}9==MAco|12td`OB>&eMVW))4{(DaMB} z!<&y?j%aVcMYmh;rQJ@0I6y`C%|9VV03!5iiINjtF5v$O49%a*HLKL92+#lM`bmm6 zjp%U~p}|A2n(R+17UZ;tBG zPdofBP)|vYDczrBi1ca&(0hrv3Nwr51;D{kcpN$!zCC&uRjd_WktKk=$EjkG_x%f4 zx)OZ7x(%_0TW_7$cpWcU4-qt~L-!wql%%~q7LG^RMg(>aw%cxErjs;T0L+8n)a3Oc zzDYz?Ch>EMvDV>CNO&3=b6~A+v#v1RUW=S(zqv`MRj5Rbp?83pW(5QBYar^Cb=yi! zE*w$Q)!ZRrkZN~7>#|}zm)YO}V|xe(B_n|QfXjZ)ZurX|b8cG@9GXc69GXAfn{dJ$r)W*0dfyx3;EsmpYL!uvCqOopxE)r>Mq(|;a(}d0)FjsUE2p&(vW+(`rSuqU+^J)yw0*DWsJ<~wq=f0 z10{4Lt6reS@}bA@61GsiU!_YQnE%|W?+KC|;(V!57nsS(3ZU5RPh<++ud>564TW7O zS`6aU3IDvc2IPQ9{LjCB`DssdBK^-q#RKyKd}&pXdhnU8Sq}WRb8Q;Y-8HLkNaZ+> zNuT^dx@b7QD%4;Dmf3KMTKXku*+U}7` zRs5}&S1|6bkTBQbEMeu+wEuzdJd@^F6@=0}D2wtR;3s^rBH-+G^EOX`*COkVuZRCA`&Ps?GFRw+6%=hMN6% z!tSj%|KxbiCXi1?O%1=aZxjAkRu0OV z_vkJyhpcKK%azF}AvpP*loA)=_yDROZrrCgQ(CI&a58R)27Ff-msZCs+$TmM`!(~i z$8dhZ%PfeVhO zqpjUrR1;2hEs@ZC&HfN+`e(2_}5>bnTk`f-PaCQeiPA_Q%-P=9+k@g$N zFZnoAb!Y!Up~iM&b+UaysgGkK=Dq!X1(cexYNtBUGg2^4$d9nE5I-y+o1Iw(Dn5OZ!j;9UeRx5p)*j^rm4?lJG5Q#WwBt zuZd&(xlS467r#<>DUY5F_#&^?Rthp$nzsG}z~_D1at?(%@3|HqmJY__HJz=u_AEfs zE)iXNLHEaX_}|j-Uo9O!v$*V~`Kb)sNa^F!#&G}^h^`f!1H+$O zewU950{*m9)%qpgzWp7UPwx%M+T_8^Aek0Zb8OkP+f)Y=bG`~u zr3J}jR&zT6Nuk3s&(>tz);VZ>mw zElZL43Z>L;p%4VyBCt|l163iScV3y=eHfl=mG7{U?=Q&va1KPt^A~(DTSupeZiHRW zdFkzVbd4)nO0%9OD)4E^MWNjrq344(1wi!PK>;9n# z6e~Ai_d~IYCgH`U8ci_@CLecpZRo(AC*+%BuhmnZBAP&w4Opih1JNO)4spPC!>XtdhT<-_&5BSwz%p0cG#(R%v2pnAa%g#0J5}22_yE)GI z?Dn;fs?!)1Fba}f;Sk(h#~E3z4I=INAn;XnoiD(2U8@O7yqR>hiSS$ACS^qyygL=F z#TS2%1_2&9w|L?1hesu7puCX8_O3X1r#M~kmUH{-7>M|Tr!d3af~W!-NITU z%=R{7)1yuwv~Yjod_2p#1>S#*?fgX-P7gIvI(cS4jSucudmFG+ z{X@e?`Gp;Wjk(715oQ(xkm=F3B%-K~4UzY=upbTliT6bY>)f~{F4~f62?YyjY)rIT zE-uokdpLMwTaw(*!&+#E2`UJk4GE5i`axLxxvQDepAm10-<~A5D4Z%cs5h5s-OX!% zrl=6jz1JV$AAGoy>dfx(vN>CKBgzod_XrM4@si!!1Fz)vAfwHoCy*RzDU3rkR>=e!a_ zr4h3JME0RO?+M}x>?%Xov#0Z-J9uw($T6+I^R5}hq(fDiL%Dd4=Xe-s_Y9jcJ1PC?C>4$nX|4*u0Px*?Z$BUctMXfS)G5S;Y4uSqrzZm{7s?k{>;{5;Get^?yD~@hw%Xe#)Q?>CyqX5#1F%olxWBIyY0SCQ`#O zz==a$np<9ZbTspOOm{L2VT?FP49AV=+nRy-&sN0*zr5o0d@%_0GkJycuaxC9v ztU+KvQpxg9h4Cc(g7nM)IRp^KV}_UBl6qEF!F8-4ArDo1;iv+;Bztl@$`gvNc`BDQ zsZbhL`lDc06(ET2*=5a)s#JUTUY7vf* z9A#BA&3lLfE~KEVL`IHL1{yWEW?E#33V_Req};IE!x?E{Lc|5Ob6T4Bo)T;iyMFIv z#7A5={nDV_tnu`t%Cdo}aAU?SofLzLcGboYX&FrZ?X7R|=fX2qX$3|xna2Dyh6;dA z|JBw_DKd04qG654tez^_%DF!hr!R$RVBIc9(j4mlxo{ z=H)yKuICavIx)Jo6!M1pK^#5*DElyQQM4~JbzwZS&5@L4)3~k8NcWAf0={v*bbbDd zo=hprq(Hhx!%Oevpy{5V@98oc>61XZg1Je7}!NNBC!#X1}VwgXg$F z(>M+Eu{3A!x&(N}i*L7vYB7eil>o;KjWd(rb*!plwBd@4?zP9qO&H}AJ8Vy6 z&T`Oib2!#XR}v0O{-SsA*VE_O+jBTnP2>AZ9G{d(37p*x>^~2ufN4zDP!u6Qsqdq! zypzmiy#evpJs(13AFx`s3%$mj!yWvGV4N#h2S<}BP{e_vLGuas+41qnz#}X8ur5p+ z#pA4i934{5%Egh>1805eXSxJBH<;C7g8(d}{{du|gx-c`u*i1{QU|H%+NoYv6G(N- zo%Keskc;_?z1*UNUT?#URV7v75^A{y_18-W{95 z`z0pSv*1r5k=5YnUw`z+R69rm=o5mtN62t;l6e;u*HmS*?7yjkj>Dn~fZEM_aXYRy zmnLL+PdI_30o1SjPK<}q8`U~qRf|9SgWGdY!26SwO1ii9ndgf25Z{95+>_@p3kUWv zvU`}{#p~k3n3@4$&pnF4vP@Ji(S^!T)WqS%+tUgM-v+85wN}jg%>NXVr0pI&^9zTh zS5y+4j0lbbZ#A=(ggs7uKkA4%Lq}7U3^AVIy5?f0{AY=I1z9}N$zkVVobLBi^YgL2 zOVi*FW6_&QEa>@i<+F=IX*DRN>ov^OQjaHLTL1}^ykr*9qlsgD4e|)&L(RGtJ3}1u$9~SPv#&41{g`Ee zJiMqmKC>j}H-X@vL9t&!A|;U(N4o&_LmBc|zF${VR#SbW?1Qq+GP#+_bsdipr}a=> zTsMwA6rU$dm|l+1897#)*skFF*yM>wTIBl+@2+|NVPS&^VAks*8UJKA;~IpA3qUQW zRcsUHI{0XTNvcYk+4G) zxmy1Amy_p1$+{h+G;DBP?IZMfG)FN;M+ez&+&(94@=kK#HT?M2;8*ZW1^%t(xrj1- z@!ftM)-6!rxPVZ6yXrSC))>1A94sDC$k5*m@0Y|3xR-rBY)f#lmqd{ z&B;?6k7=OFM2pbDx3L{OqOTm_{dngft8y>L26S{Wnt_PlZ8XOvnp5&fvW~@7H?jMp zN1-5Np?@OmROJlDq1qufWiZj(T@*YV8>%6%e3R9>b-}s=-q9g=SuhNq*Rqc?gQrhZ zNlLO)z5$7|-LWn3B<2X}8{q(2f`Jo&^auy@pf6$7dkf<~S*x-5tx_IQX|A4yH! zLN5?BX=SoHwR<8-?sBvvW64FT7D+?8vIp?7qOuyJ-J* zm;JjTWC~Uhzh7&h26|c1enih_NoP(A(+u<Isfr0!oV#>LQ$iA1GFRn3=e0fwzNQea4mL)#saO%eM)#WNl z_4AjZ_ z5(Rv@JU@JfyZ-dZ$J0mA-y}f!*PB`a(gIR=s0yMn7Un!*CGk#g|E{~(lq9#EpD02? z?a}_P_qU;tmMZBr;`%HPk{FZ%n0Y&|L=-#NLbNLLAD^zLSx|?XhF+zpb~9UB-IeR6 z0=1LSMjrY}jYxK-Dsz=}|HGc7z}UD@vFK%2Pg1_f20@T z3$Fda=Q*ArvXx$`(8e1LMAp@GT!y}eIVI$APOGN(hcC`X(;NTw%0peOrk;-GWwcpu zI~Hxl^JRULrDmk>vLeAN4eNKWk1KLnsIi2gWg+qkOltS&lV6CWGfy8%abVfVkTz3r z7Ws7&b@oiH5{IAc$=s&8f?CtFie-zE-2{F1mu2c}8aLymfi>v~I1^YekOU=nrKDRsJ~{e$cbo~xVio~#0qFodi@>ry#S_v>Ual55j27Da zgpzpa4ndRfSDD=9K$^jb&J+&&CKsJzSwaD$?^k#YFU0JxheTx={_N^eEbvxTJ6DLk zmOBKpbV=fXR8PB&{ZO}6zE%>c{=8#9u@ERrN>%QAyDw%b8r6VdK@y6s&GRy~u^Eyl zP1aOcZd*b10=oT6sAU;ozFdfNvY4#1_fHM!Q&@P-=0Nq`;q9b%9rI_8ckw_yHk@ObN0b`G>Wumhr+;HQNUeVZSLixMNy$ zOtkPb-`LY8FRf)Ji^T3s!cS4x_UYlW>h&;V)v1H0SS9? zg@POzV6RW;dR(xN5fL^)SUUxk%$2_h@IGHx`l!(W>ERSpRaH%uTXnA-!<4V6%gsZ2Eqi< z4HmLv`z9OS#$yB%&Ow-~;?JP{73+~qF*qKpnW2p>;{4TX_AD;6!`Kw*Kcdh-1uWSt zJKeu4XW$V3its^nWq&FiFR8J99*o|8HZFN@clKxZzC%=1m3OWcY*(v%^CG~+o8oU#||Iy-L|$a+})3o@!)hUi?-k2dBolFYt>(U6s;Jv zj9h)2=Y`Po2x3!)Ta|yi8yHsbI+zfGX>IAA+`j6SbR=&gFaf4Pg5cU>L7 zX9ZDAabL66eS zRNBMY)w6&Z|H8WX`F(%=yVZVNqNYuCi|W?_l~a+JThx$EXCTPdP9$%aoI}!kn`_>| zM3lh{-o^NGlp@*sYjORFeQg(=<(X-JQ}MCg%??9_a5yH3@3Dk}O`eJi>V0T`jMtW2;XL!UPEE=X_-S0wFMYKfhc!rNcs6{V zt6GBNRqtq34Y`vVX2imV=Zf`vYNe?9wZ-MU`hX)eiT{M-!(b>^U%j^1bXplc@8I$9 zWJ|9-W3_>#1>Kdbe z4F(@cg%cToRZ;j;lK`fJfV5le;sjDYh(5n-;;9iyDGm79LT%^@N9+zPg9%j2>oMDth{kNOfk-_a?ywjPk_E*7yev1Bl z!Ldl*Hh--@TkTe^4z>CoD6K*csp*XLKMG982ZHH>^1Hv2cgn;;vIdj zk-^|09uWs)zCcx>I-K&B$0^pK+t{KQ!hy!1VT~_f0hfK`y~~0`50VD#3D-Sh-DI#_ zE6tBI(CykbI8GPM<9MZNJAS|kZydoe8!1BHVt?G6;RXj4VF`1M{GQ#M;*M8x{o&4F z%a1dbqQ8&T@a;NEy_xI!4Sh1x+7!NK4s%Qw1vv{qLga&&-#G|nS-TVPwx(1R_g(y; z+MDEW8dZ=a7*fs|y|oW{^uruitJXFHiEJMoiH3l;woTxig{zD7t^Ak)sKcgNJaO0NWX}it2fO zVL8_=4I~GmlwimbVjhCif;aZ#Bw{K;afXbbSf_DHRN38v7Ye@X=IgF9_*lS8>jepr z3U#03O}MQM7w9Gx5?4Zd9X(Bw!`GMI^8>!V z+BveJtof19vM7CnX6iV_9V8E@4|bWQ!eEP9PJ;U3{b=a_xQ{+6B_@eMv2y=gAb^4! zd_zjt!{jzQ_`D=b(At15x5sSRJKsT-B!ksvhuzL5YIZLKlW4;%GCpcS~j%l{0r68TvW(x_1-u7IaIuj0biL;M3yuTE@Pg;AyZAGIVneb)hHxW)QTh z)^O+J=S8%;?QKve^11gfst0t`6Z8>!ZMJnD4CDo)-Z%-Mh$P3Q*eU4bkcOMEh4K?)-WJdi0*tU`1T$hsJ_N*pHuK7&?rC^2v+ytkF`8x5ig*a!5u^=9L^9D z>SGuwMEAoOnmY08Dhl=8tDor&9%=Wn+uP+6f3*O`?c}|7i>a%xTRHJA?Q8*8kRf>* z$fQk?KjK0*-n&GYHij9dA2XBYbgtGa-EXPQBZR?6bOMuPP*FSetX{`coln8?P?s5m z$AJwiCCWHhM;o}kxsA`Exb#20(WKe^Gp#^%pawD9VVq^StI_yX334)UKk=Totskq| zx*N6~FHLltbS|`KOQy@sLKE0K3Ml(!!Mx)1H*O$zUE&dQMBVZ2v=jr9EbOzvF^-IS zYHuv6jZi2EUsS_0D&&~vKR`}dPsvRmskECi=chz`ei7u>9jtO{b zJFr|@oL&SslBcb!m4gaB9?lEE_jpKkFpP3LWJoVIQo!a?LJmKIR}_Onn0OfYH>%`J zgbd|h;63Dwu99C%b0M{_Q=BeQEDv`e9=h5?EVZ%%5BJZ=HTd{gbH$?tWsb|kAwe&c z&EX(A64v3D^BnKiL|hC2>!zcC^O57+mp=ghNC7)T8|`D=*4J^tzdlIp1m-Wzk~Np3 zL)+Hq5vyT{B(HY( zYg{mHdo(K)T^hmh_0Eqd^oD8sQ;iJ>qB-S1&Y&EUG|K^F0S!|=b-bGD_si{$e$c5P zHL-@84lw{3<`JAn!+7{|IVeS$fMh|4K|cC(RY>ih6gP$6nC5^pj!c9au16sYuHp{+ zKnQ+XXF6fdB@Le0&8*5qkSF``Hj3quWt*gFlzJ$8W%KU!#INvM{WflI@Mvp2buYRE zT48eqy}A}K1quNMpzgjsvpoQFnm3|j>3U?zaW3R7&76_~_%RaIWv((8e!w=!gaXWp zOI#G7wY~}e@e(&dFaKVBdAe-J3#*=HtfnxJ1q{j}OT{c2;IXnq=`^TCF*6)i9VbM+q}*B@ z2Jd-0xi2-qXhP{Y)TtqCqJ^r!*H+BNGl>&Z%qGl~pRrJ0@-1(`7jbkHlU?#!+d0cE zbma%E)X4}4n(p5Vwip6%TmpULFz8M6Er z0U1&G{BZ3D0n<8B932I_oWQH(NM?TaX#F2g~O0iegp{@BmXhh`-9Pi)8=C%#DfJ$bM~N zq+M8;SD((VjOiFTQd^o*;8oB1K|MDSxGh{{4_Yzwa+qm)&g!nwRy;H6T;R|GtuRbR zb6oJ8^M5O_PNn7qS?W`_0cps7dtZm(J$4;zTQ*N*Fi6cV$mik|VH75P!6_InBZTnUfnx zA}DqExilXI`}hto@)`fCv<9X$6Y?&uuD>bHjh=b7Svlu=q5M{nrSZfJUNF<-dWmt4 z!^k7_kye(MmaF(zDxvii>nwUPUCoI0x`{S(@h3&qe}L4n{{SKX0saG6CqJ-Ezw58Z z=1*8Bw;Io<`kTbGFl{7LS~|rN$6OfJQ`KHKA_|XDyDcyPvHPs^znoO3pamTpZs*@O zO)8|?wnjI#CEO_I+p00eV9|QYQGG$I(4r+T823IlK>SDC%HQYP zZuPCAx6aRRrKU|q(B^6TV$dRcftm38xnXp<+~?N~v@^{XYVw&yfUB6R7=98ZN1a`F zshB>4y4Yt-Al1(f*;T&(l~lX!vY4M@au{%0_i5L9__jSvxgU`GA3%y1^@G#nKfqdv ztV;4{ugZIM-|K1O)N+9PJF}-e*uAOEtrWe3(aKX1C9liEcV+buZ@K1xN#o4<>s3j{ zt_NWJXR^y1%>%-p#6_!O%kky!sb`E&i*2}@`bSA4Hp6Gqu;{$rL7KGoPuQVzIHu>9s1&i1h)e%%N{WNpgeeUR}D8grhi&tl}`+Dp}fzieAxU>R(- z;x$#8Ebt{!P zB4U(!E8<8@zrAKKk&w;fpu0A zsEn{ZI^cdcP*!_>Tn2JalT^?FrQ6P<4Z zpfnK^xbiKtXJB2&V=`)o3g?HkluM!<1g{q#c1nuy(Xt>y8tU%T`T_yXVZAtfW$G3+ zZ%xQgk;|Y+L@O!=QSb9bNnm8*Z4-rOP5OAZaO-8Uw8oZ+%!v51a{~!o) zAQs&|RhrDwU^LfJs4btfcuH--d?K`NRljMT>b_cEWTI=@xO^IpogGv@w#YWui(6p` zIHs_#;7qFc%4if1*P`_5N*#?!&GRl%?RK$*MMD+_Q(;G3^wV5^TQTo6D9FZWz-SL3 zfARNY)7S2xApMihSFZwLM=4GRc5um$_Ks)jhpxgRtazDPoj1~|X7MG4$|;Qqw)@au zl~d-n0LF*ZR$b3=Q@8q=vd#GNQRj+O&o0YSWo>k$xK)+G9`lO!6iY?jp>(D6smw5D zgs%(|@btvLFFt*@GH4b}bmE`=jM|j?=0!X7PK&D>FGPsux~Rna#f@K`BGtkwv!Kw~vGisNeW_i*+QIEd=ws%u5cY zrw>VLYR10wZN^D4KkoQ-jnOsU+qbjw$Z^o*~beSnqJC1PUCBPX(YS59;msh1} z3!IN*lZg*Fub!nB=>KS|It@%#zl<#oKr?AbKXQg#kWj?^@BQLHwVIJm0N0knz zik-l(f%)9>ou%Y+Z<;wKb;AkAl|cqYmhS^3Au6$xMiL=NyaXcVBw4r7^&E505|_); zr^F?0%dU@p$)r}u9P90-$USF6sz`sflYT#l8UxcNgIqyE zYs(%2KwDu}M8HT3?%~G7g5ATb@~&4GjhFeXmnV}|mJs%N8|q=~n}uvj1^My+0TR$Y zO?T3F!CLOi8dF zN*+kojWdsdgjV$!e|aQJ4rrE_9jCB1gFt|8WzfFJ!mX57%T57sGOxN9DrS~C zt%rqf$Q{_P9q4e&HIpfVN&|!@%zFk3LKb89yJ)|ky; zH|S0D{l57x#$}*6fW+ZDedC`F5Y=3sIEVUa6=Vrw=W5R<)M5CIG-89vO`lEA&LGff z3VA^7J6tNc)>CxhpJ?qz&2ibVVGmqxS$ARt-DVc^jAu=dMd#JzDyvsNbrG#E`sq>p z*v^ffkeUxGHO%XrWL`C6W{^{(&!V@ifU(@4Jxh{vehC@L{8w$MBvk_WR~8voSZhwC z($JA(%m-<<)Yy{KOQ<8Hm7-xlQ3X*}v=W-}==?&C+K9d@UD|K=pSE)pP}qpcl9Nzl z@MJYHN?Z+5r~c*2CPa>vNlh_G{dL|HYf2rhg+;{ejr<{F>AB=t?x3o~p{2U^?{2XT zm-h){*!~}FdOPfJR9To*mCbk(>hg?Uj5$vP^6q*=0RB90_9d+yO$G9q_ab=tn( zm)EC+3w?Gaa=GRQf-V}7_S{eizzXl~iFDmX1li_h<@IS^yx$sVNfmz?8Au!I4iSxq zjN4dNjCST|cR&Wpt#55x2T$o9EdEo>Y0BAsozY8H<4sCA0yAbU-`kXBx8LbqPsY`? z*d3`Kwe)Bdny2b3ftnpn)Sg9pY6^z$UBjhRX{FNUoB(xkTGY9Jo0nRFTbG~}hkP29 zW8}&WA~S1-6m4y4<&i4z8biK*ELXNEpIlN{Sdn3tH7Km~n}RGZ1P#w4m8EUNVSk5~ zei8I*7ZkoyJ|1OTuBU;(b^Pd_hO{sVl=WBL!E^v?gO zP@7oEe%JN?I41ai9eV{|=6rH`R(;-^{s&m+fj`Bqd)v z>!bgOHtOR1pAw4;tjmyNE^$kCrhecNfBjA$cPI$m$Y+cju`tDHTh)MYS-cVBtDuK5 z239T*08$rXKvyhFh*SP0l_H5CCa}+t(D3EioQ6i+uy?aPniy`~C3v*KZfqE0BCrt@ zjtMJkLoHihd+)^;$u=+Oo_W7?fBp8IUP~@8x%0DlD}Syh+a6|W0<*?5XY{IJGS#$^ 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 mXonWi_9$oo^g8L*OJ#J#}HH$F_` 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

      lj04I~#{6eOMU@#cj4_CaGnQbte^Y{5As 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

      edM&r@R$!e*QZ;Xso zw+}WB&YxeXE_?tRuX{?4Gj1hG`g4^@`dd9l38OvE@AZ^&KZ1*DqQyG|tCEmGyYOjR z3_omoD!_S~H@!_*i={!!|3&ySZcK7;Nf;e$6Z`wE*)Q{V2n03?qx|jZNUaSMI-Jlq zR5D!2L3B3&XwULvUQ?IX1~Yhcm(X-I0k>J&n)9-{TJ8TixodT4QMx58%2cy)S<9ot zz4N>0FJC^a7W4Vl!`0)s=7>Y8Cri_zg=)+<`=~GAdvU9v(mMqA!RM>-!z5Gyz+t&G zsZqr@Cf3k!bwsB|N-I(QRnvRQrS7Iry`aj4;;NAuo<&#h!@@Z+&RP-GJL?v*gdX4c zLu}Hd)%Q>Z4j9dM{0q%GxCM14ko<e>>|Al0&z;Lxm zP94J;4oy|4+p+iR^{;qxLFElo;i_XC_=|v4unjVv+bW27dou8UwY4$kfn-i7( z-pQ73q}4OF8+T+&Kg3G?y;Td_t2Rbnj7A4+O*9DeP**fD9p-wODO;)L{It13`8n!1 z=3B^4)~$WU5>cv!lzI(UXyPZJk;# zr-LB_!#hxus00R46PBgw-&eUTUt+ zt!{2E1`Xyhim1qVbBSxZ*#K5;6iGKB7cLrs%<>0(I{`S25Ou^ zE0tZQKN85y4xg>9+wyXTpg-0in9+69SPG~N;L~TS>0rfDV@1{j1p-#AM}k3CT=c*& z9L6{`vCN!rR%#Q09FJg~*@kM^;fO2~=8up2QW7WrS)%W5NS-tyJt1vvl(VUFVYFU% z)Y|Iy_VV6W3n*2n?d{bHDS2jyNgFf0WRSw(b(i`C80pL}wr+T@&+S>k4{;1%N*Q8| zL9t&80A0JXmqE5rJ$?I}NTS_gx?m)37|zeNP+Q(iwK4|cC`MrXM8DXtMZTgiJ4|Ud zc3dB4CfA!{Ky4~1Do%`<+JRwTP8@74M|#d=*0Pg<8>dyfZrMFc3IMkc0&2gJs0D5;;0exDZqbGL=!NbzU}@hmPHak7erP*RIo0`x5O zI(QcWnh~#Xlx~fQl@Q_wNds^d;c3f1WYw&tHUin%L*BGarbmdO1fTtF* zKE@4g*!0pY$=x~Tqx^5W9@AXYW4e;^HPOAp14H#bo~@-sC*Ta&49l^6H!Z~4?C}Lk z^m0h3;p^LRoKK~|9=Pp!e;?wKNoiNq^fu<{D6Ufr}?($e;KSl;iM~D$fTbe;AoEEQpWIkZ!M=BtBR-l^J+~n7{LR=Bcm% zp8q+d-^UMRIUPpWkikT{YErYdzxV$EcK#hHFKX7IlFPxFvuvj8X)E0~pw)tQ?>Blo zvjGNadKI?qTVTYecyMLaiGD*6y}be(q`m&n#GK7V9^3&~LRhA}uh zn+;N_Bkh*9Z*M`#w&-SawtHxs{VJTTQf1UBRo)v#Zy-~R;NX=pL~P8RoP|?aNjZ8P z2W-GlgiO1kS@N8p=gPPiAoX$z!i(=S#%_RN+yNsnVln+%nD?+{8BdyiKJ*nPJMEa` z&ytzy7%ZaTxgOf^YNb?`8?ozhE=UT-@K~QBbca{@6mgE^J4x0Mu3Mwi5s|bP&#mFN zz$5{JxUyr1|65yDXBvsVx2=Gc^4KqY#iOg&77ORL-`I_rmNvZ+(F8K>GHvR%xo$9R z++MNek%0IU07RCGx~!yU5u4tCZ^osz2RhN1-o6Ba= z4W_dwJvr*gsiH$uIYsuAr>1O*P2B~k0Cs-Ra9$C)(?J6fYyj$*Ez})i=gZgJtYH-R zx>1a9ez8}>sp1=F#_j%Q?MmeimOp`S{bdYBgRM+6&rap zoJERKEY<70$d9$y^oFTj?(;4aNKe{X0Nz%RDi$x{5UKWM6_1|&zGCoTRIzw4iDk}7 z5s5+FH#A4rL#~hN&a2eTD<9QfRX?Fmq>Mzi*hVR)3w2)mpKtNtfCpZ{iDg1eYq=0k z?PC49$@syUGZzmIeu!I&YBJZ~w{3W0dO;6<;O&W(ZRvu@ydIA4tj{e@mF8>nw~f4c<7;4R>-)diYb?LIgbv(Z`ySQ2r%L1>X_B)i`yC{I0GlZ`k2C ztxSmh8o0rXtxv1`k?v9qi#9YKB^`Pfax!7G~h+DkkO595Z3j47=TDQvcrH zN#B)zUvgpH@*5@&D&yl~IE@Fq&$1lTyhsA?Bc+>O>)37N5HLsZ8EoNY+m!DL5udUO z4%#nTL%NC-O;;>78@)3YF@4+go{i3w>jOfcdZNEy?1Y+L8wn=BBWke@MM5KL91FN{1|YHWDLeeB zRFP!z_$AYO;L^%l)HP)8$qE2F8Ow4mMbTZ0{SlWf-3}ojEw0X*9*JQ6gRz2UZ4~uAWvRId->0;jmQJb@&+v5iYztvOU zlNA$hc)E>_`o~YfM>IH&gLbSrH(PIYp?2cZ-oNL~bJtR-REF7jz|e&zf;{ZH1(~Tq zMh;jmK>Tc?x^j*qeL#V&C!7c>KHY3ws$ei!SaGvCwUygFyRk8e5%OJ3;@&K7XtWa3t!s-xBH#|6n*5-Z!U zt~A}-fC1l$PFu`C?O)0t2jJ6S&eoji-f^g5)LyV`?1fe`@vST@$%Zwe3)z)JL6U+S z8bXR}CaX!=(1j|K6*rwzS_B#27~!T-W$rv+ZrQf$n&%SBfmJnCgQ{GKS7Jiv2{m6# z*E9&s6~j=q)*{}Ey;v8@b>Mjv-LSk)Z}eX$zETGSKG{|ZfU|hDbb*{L?KRI3yF|%o zwNwg7N4|c#mp~-BksVXls{_yxC7=a&GV5q2 zGuhB+A_-!6=9x^Y?&S0Cm&<)?SKUw6F56kVUr;#>VaWk_TC!|VZvS&5GAv6|m4RtO znJ4eSY7(M;$N{#?ujd{Eqhk2?Oj68AU99REF7xQj`Z zHzVYJ^rQPr&DvoVB}?sQvMQWWSh(L~rm9$m?a$faIu8y7z&#{%ouppQR&}LyRoe^o ze8vd?xdrPMlfj#Ezf=4DJL%sfXiQ|*u87*VezAIxIWxF5y_p$O)lAJa2M04=(FP1G zXXH~0P<{3M_P6^qmMxh0QXzBXaI{lV|rtTv#@af$rC5*JU)Ic1vl(pCjBr5+{r;$ ztrw(^N^gk>;Zu!|?Y`Q0@#YJXav|4f>>h5eZC<$G>^jGnYr5xl#;r<#a0A_`$+nuA z+DnH~Ip#`w5)FOiC~%FZ;rxZCF6i;|_Z|dG6wOCE@&|CvyNuwO0Y_3~4OJ&?b4qc{ zwZz3V#;8FvW(pR69XlwkD3jd1Zkri19H}UNoMPwG~S)I}#8>srvGeQR%5ptj~qgquI*KsS2sf9uIbILuSJphuqZ zLJdVzxEf(IPgOu_s<(*5ZiFb*bW@A7##ekI_nz;tnInnuU_O`vu#Ac|=zly7o>;vW z1nRqAew}GMdl@-3y?rIHWrae-f$d-?;!JsJ?ASIP3!pK-!t4m zWj0^1T|m~h;1v|w9REf7EkLn3uowH%ZRvsZy0ELk!+V=|F5ITo%{DA7LVrxIPzO4)<-ROyHMwP#eFibDl$tpLSyBfa&q3CbXJ^q ztk}P4QYXfdMa9KYv{VW3Hn&JIwHx3=!( z%jJ7Y7~X>`eb1Dn`n~$&_$-p`IE|g9ZOZ44M^fD^Q#*{B?-G<$KD1GPOt}R{?^LuvXNE2lxi4QmWsurq*sqt zQ^)9Z5ysI_^GQX)RoZq+(L9DK0kV8zUpd^~y@6UI&EuKH9_XmhoZam~q3684}XMOhuM^kWvhAnqLZ#s)J-2IZ^I1~LRGe!8M z#WL)XNn|E&PI{#zw}Qbqr?kN2lfIu$r3R_Nv@5U+s*JVFq~_hamDZ`|T7GDHX;INh z6ABJGe@9#x;gXr6(8MKQBenHEZdyY$iJmp32Q z?q9jLe6}=Ss?|1QUzRs_*ACW}mq#~8A49F#yVAl7C#ll;`FfvhNN`+tud6oK(uIZv zJwE1oir=1o%)0+J%Az>JF$2prWH|2hD07PFMHK2fbEi*5=ljA=fUobM{?Wea$-OP8Kca7+2P;UmWi$! zvNgy(C1(}ElkmE3$#DgCgqw;>4QI@ry4B~?K?t5kA zt2Owrm@|m1T5a!;a>I19qnwoU<@t#sr-p4=+;|};+zqxc)@@%i^P43&>{hDdZZ0{w zslzPn)01fdSXEONY<~l;t!u8wsp>K}wiK$?GnppkYT(5(A%>pKFqvol6vnY>2RCk| ztC}L~f=9aTd9Gq7)@^P#dtzE6sSEvW!c!u+ZSvstmlJi0XQdaVOBmEXThs z+YeSYZhUJV&5!)FkAB)lS5b9Ok z<@}YamV4P^*{s?F1oAs20f@2ert>OIfSBU%dm_2KWoedmLr_bUw|PMR4?>x67v{Kc zn292x5irBSg58glpG$k5DeetRPyoX2O^*ws=B;tZ(!r$Bq!;CHl3v|$sVQwsdx>3p zMf#-R()_scYWjtN`^uGj`)dm$0|RN*5|@1Uz&TKqbd=l4?eEW~XWviJe!3?C)+?KI z)Iu({rnhC{q(<}n{7iR;T7+xKM1n{{9=kTvkHZB29`VM!<-8-D$bjG~8xX9&s%;>C zg(q8P@5Z_^u#B3;U^pZgV(LsVKVUUJ8506HKyC$v2Kbts+?qO0XH>DNiv8bbsjPdV zFVs^MFKg)mqdKSTZq-p&RJC#=z#Q(u)(%A3S^cnQH7>`kHcZFaa-m zVou2TOiYbctBr|9FKTmpDbiZV?S$9YI)O{iLUu%vjwYviwUOGS&+Y2Is!2B3Np-HyR{%yA3UgfH+$YtLgj`iD(;du=r}WqyI=7M~#m&1J2xce&%V}wA zx@K$zDi^f|eO-Csm5jg!VA6UM#Q|)oziPUI`B&_Xk=&zym+PBe!&%Y@ za}+`q9pmOL>qL^^N!bonh@6)M;M1w)^k9lVPWU;6%JrMl7o@KW+gR4|mj}OyKfCdn zm*2GS4@^FhpWN8M6Zb|22eFc4K^peAiJK?-d3w-Acb|J}1E=)sB;yXEOYbBFQv0sO zEf$MoZOg~L6DGBs4~xj(LJ_UPN5*uU$f{Zh0w?Nc$tYOMyeJ{OXS(YJ%@LWMw5#hS zgndzPfh|+Bu-;jOOie`uVa>=7XKzK|&oCHK!}fHRUM-O%qvoV@a?6PR4{3|)Van76 zcQ@757!Zv~=+(>R$&W-=LcJg~%L<06UGb@)vqkg@_jHJnsLrfxjLS2WX$DDX^&7GG zUZIe`S*!`ms&>-G*uKGR-vBHRz!9s0@gd>QXmPOrF+3B!Z?n=95C#7L?DCI`-mM?m z`&#qMcfPdu#t*DzOW_@-WZY3p(w*T_srmYyJI(bcp4i)KF0HK{HV^yn@`+pBR}2!l zqM!pcPA%hWYNMMy?Ia|sjlP(x-pVv33P120UI8zoNz|+KDasPYa2^_#DpI2UGV+R+ z$JWcNhKmC1ZS0kBG&ARU9$mxC(7{|lRO2|9=)|$8Y7%BEa9j^w z$kt4ybMxVRI`?DSg~Q;jSgu9eXF|kz-<5tBd@YyK2?PEk>22vt($_`IefQkP56!&u z@bmlMKl9q#(onUKi5#ZvUt7GixWE5!VHRRpG&A$?c}aTW;S(p+?~bCs>8?gkC%EW% z-yW;q(=mA@+BjH>BA<+CL3 zF8G7tJA)5Sq(z6@mZ|{E6|5*LCyRYJ_msT1hBP%O@u{vC>*Zr-T z!c3*&Pmk~J`YGGS_`HAqm@d<)I?mI5bxyd{u=bT?v{1w$Js~CpBt4V4N!95wGM0U8 z1?@hD4_nUrw(&YvT?~<-jOH=N5EM;O*LI#CvPMQmo*kOKX}QgzM7;P}fu@Iii^aB{ zO2ue&c`z1@L}vYooIqwW2k&irnpxbgpjO{Zl3o^@{P!bWQJIj|_AKghLJcvM;G%d; zNNSXX0OA?T&w$aN1lO!8;hax1q;m1`6!1LN$b*c(x+fQzaqW1F?Tr=ynE;KnYX1+zxb)^isxnEg=eTFW%h6G-n?@s zQ(bB-HJh0WSI=I(emzr;S67{k^TFDrCv$4O^R&l>E_;0c2{uTvjV&t3iWc|%s`X=9 zU%oXNEBOFx-}$RwyKv#cZRf1+Qe^DlKdZ{!k$gKCNY*E?S z{s{PX6`X{cX08JFUBo>s?~|xR#L=kKT@n_PrvOO+DVUz+@t~x`;ab0wsX>UF+-gw* zLf(_Q9q5ePi-KUwZ25VTXv_U)=??&(m!&1a@jg^Y>xvR_#-hM=$D{G%wtBkDihX>p zF6ljs+Wz|pc_+TO%^(r~9&$bcK?QEt|lp0-kfFR4=ez3)hW zp3Hma!CKA2$vzbGaeJF9^HU=bJuzR`!LD)7tFX!mkkax(y?W>UqCFky^KO2=Hy%9w z>DgD`2G2W!Vtv!{o|#EVHeU^8)l!JAP&$Icq*osg17u9n?jty`lX1h3H=7s3$&|hw zP(5Y&gNCh5xTG8Xu9a0iAR67CSiFkPSUKoL*cdZ&Mx%)T4af^}>We_SVUoUdJ!@MPH5X+*X${y!U$cU)A|| zzRRZBEq@#py0utjnI5~6J-73J!f~rX^NW!%<(jMWi7`|kVIxEiSTZ8+sEVg2*(GLj z66Bsif?Ts^dCS4Lr_>EuE)C#Z9>6!F+i>`NxFqa0@kBKT;X$0GN%8elB#^~-&~Ffn zDT>LQlBqD4S=#)9N5aKvSr=ZIsRlQM*s~x^;|{~|*2H+)(6U*}UpHk;tIfusL!5e@ z&=*h){#Vsp3v)+Snc<{}%N5NK1zexYdJ;PulJ~v8lKxWqy>>2eLYk4bq_ePlq6T<& zqe?2bpL*il-uBeyW+gC;%EIJi#qs?L0A4_$zq0L03{K)v}{KT<4NRg)|uU-mpp2uIt1pTJY*HZ0hG2YH$*)0CqMQZ}T5Rd7{P zAE_fdXQ-?;AEI1LnL?Om(rQeKWrM*>3PVIF8gSqa>j->s+TpcgHpB|ReZ$A#jfGTL zguxlfmf`r=a8=oC=}Rl^{PDkqxOq{!0@n5mf_o_Q)+^6nKesYl^K`C&+bOa>&b)Tu zBdT6Pnzpb1A?Qp62w&Q4HQb)EtDS_`$=yEEG5wG~V6F|xg0t!#N*gYL;k;;ytq?)^#9R}b%(9Rdr8k#`2+cyU8UU1;Z;XPgH{!#|5&aic%{EL3a&#sm z2z4}v6W4*OY=Q?=b=^>8O*IS`{yE3ciMpU^oSE2B4NInaK(Xyo!-9VW>nha=rr>rR z9b24fL=`hZLR>fRg^m%bWNMZ z*-)s??11ARw!ODgJ{YU*v{u+(t&!}?{VdbRW-?4)vcq;Sd5bSXsIQ(8=Vofi@O`|s zHZg&fe4f$}hbM!l=@Wglo%yv^?Nkd}e7N;qp05slQ&+kx>E+%G3?c~dj999Yo564OI+4gbiOMtM6BB>0$MnIXQxq#Dv1LouD!lNrT>5Hqn~Y zqL@xrbuI}cXZq^ULHuYEfJTnH%j359DY!tZw#70rgkpkC`8u2d-}0tW8kJL?DZH0# z&LM8AmQl~?jOco#5<;>Gek%qaxnbI3 zB-r(?`TIJhK6aXshtm_54&a|I+Dw}_y-Axy=iKfr|F@+KMDYR@4{dn$%*y;kSB=r&wLjTBEt zPW{(WL${n!Fga)&XZ6In|E9iThxaowGAD1nI7FuI61osu;KCJ)^59S6rv`0Ltv_!u z?I%m_FOi_75R|;nzf5?PM-uGxl(XsTWjJ+BowGo>UTs7zLPcb~uY{0lGG_v{b2g(n&WJ9Awf=ER<6 zs7Bm-ruv7>yZ5(;-6i>{>;{0e$KeP^VtfHBY}Jk~~8GozVpxXt->78+bsVAP)!s z^OEI1mzC+n?FZvz@>xQcdAEQ^o_ZQ$(O|Vofv>Qs?yANyTZlf27HcA zYiF)vk0%+^yfudHtn%|th$H5Vp{kikbR1;#AZ4nKo=Vx-oU8+K&|zCJ00LLLWO=V4 z8=V!*X^~-AC1b$Q^^7d2)b3*&L$thSxvyA1N&u`7Q)9~{Ls(2NLqr&c4uA}>BGlk# zQYx}68^^JUkjAiKiY6-2e{U$B<&PRlrc7vwXl}`rH3wBFp{^q;a6*EeCERj<4)OJG zOIffq>q3nlk1x&ANbvz+j8BdZ4UMNIh&abf{mHSOVVHJrU|;{`QD!Ah^kQb`dSf!U zEIn7G-Y_>zx6YVTuc8f)g^>)aFrZuPM*)QthVVjK$eg@lJL@{Nw7RgkSaE}2G3{06 zF4=O`@)Qb=Wr;LzWnsPj`}29S_@t2LO+~t$@xchGMj@0sTpfbbpM#ekmUcy6B|kW* zZcMID&d#b6Biq}6imgBm9z$YsqWR<~gOC(udc^Q5jmF7^>8#5~-~t{d3DpOv|t~Gu~@H1z>;Q(LVG2&l&o~wV32L z4MSV9P&T$Im?Qs}O>dpK+gvU}1gh?dsSByi(f>DqQT|scm*_GbN*AOjLl7e%H0or^nX&z4-vFiLyn?d`eJ+^I+5v@f0B(cS}bY)!P| zE$yea9`@?KBwwupQ(!sjf}v{NbQ=bIfS0N3Pa$Mo5rMi@%bV`fu;qy!k*kT2^uT~w zdlEikUEU^iRTLmsVV$__`ucWhr36M!ohW&#IbwQ4qL~ox*@*FI5FX>h@Q@N6%)d$O z*I=T9naPxR9s(j2tR1ziSdAa!mE%6Rb?SRe4$*pS@MVq1^|#XRN<$DA%t2he3h_~MBRxD8FRxpJ>v62kG?$udYwEl_JzY=>r)^3Xb@W-E z9yOm?O#_#xnoJnwa=Hj4`2@r*Blelw zI@c7L+9;D{3K><`@hkxxc5Wx7a#M-+Gq6}#aNrIL({U-VDRG1pGtnSo1jNf`OwHh2 z(XnEf+8F$vsmltE2R2e9w@8xOR+yZbKkD-T7NxV&Md_-T!CyGPv~&p2u249fI(P0+ zK_=4mLqP+4SiW>=<#6ROuFLJq0z8fnxHDOFyuYd?n0oE*Oq&{>(BwHrL?sbnW>H z*kkQ>)|a{a%c4i5!ZRAd%udGw*Q%3&Vp~dT#~^VrlTL@&nGV@ko6XlVUXbc?4F0Y3 z`+ze?z{`DFXwfWW@%qJ;i=(6X#aCa&7Y?_!@C(o0xr41ZhA?I5)A-Y;m-qW|MZm}lL$f~HjTlOFtQUr3C3=NaGnyab9rqgguw;H+x zg*vuu5zD?nJsuIO7Fm4Cu6mr*MlDwV`lxLvk!#t+bttiT7F!6f8XhWXE&;?w6tzG; ztEt>JbkiE}NC8}CnOiuYHx!e(Wz#$BG{!@w4m!qjVpukV)8nQ$r-*DSn2pq^*TE&< zN&ISAs)NLZ}%Kz&=vjJ$9W;Ku>eM>zG3+u6QNa8w*h|!Y%5jv6a_-O;Kia_ae8rHJ=KF z(IA@RMCEKC^2W@bsbPyic)QHKZy}oX$Pn_WVp(NmPuV&Z)dBspflGO!uw`4^S7bG| zJU{Icb0`K(uR%y1n%v(b8WmGv8q=!~Lvs;pSl&Ku=3xYTf!U^NA> zgeP@1p5*9Sc>fOp|1C&6V)}hOSR4}^Lg{o(P*({Wq1sTXG&VL>n>v}S>(b&R6Qb|O zEYxh}8%|kRu*mH-or8UNgkoA1@a9eK?bW!uJ?!{DE+*QMv*+L}(VDjZb4bsm@fZR# z%(WQoCc#uC2N|Ya{-S{SP0QaGIi}|)tA+=6z`$@MgG*DxE*U-(a!0xBSh7lGEo}&& zL=)}^(Kj&N)-}8#JtsZ6F?eaxe5QHx+)9F!c4rrs7bIyn9GV$wHg`+;{OYlCwAQy}ywDPdIx)q7B>Fa7ji{c$7|amkFH*uANxe;~u{& z^U+?Pe~;{UMH(s>$g!2Z&zyh!?z``P?aRKB3e|~QV_Ma-gx91p1{UMcn#la z`&FS&yCE%aWb=`|V$Dy&eT$A+cxNEw<0KfSR_$zvT zUI?OMO!(UF?(TX>Dc2wlCUjRkzQ!!9X<64o1=Gtjw|*v@oni} zch_fPBXkT6d7hRA(-EdpnjQqQCZ9H|+TV3?grz$3DQ91L6F}w*x^EyyC@}9dn>TA; z9%GDaKT8{dnYH_K=`Rz$;#MrMD(;>wBiGFX zV9N(_oL?<1m1;F`sQz?*`gA_tZq4X)@!THqy5ro5y%X9$vLS}t*OD%&4S0M#Av<)Z z0$avd(IJFIL75D40i8A$7OrLgNo>GA{S^GY-oKolUYMLr4Q32|((+TP2_d3kvwLZ6 zZDFj6msb+v{ML-;{{{H7wTD@0Jn=Vx;KzmsYy zhyBwhJ5DkZcLczXX%K5Id(=16(E<9;JrECge-DJ+d`{SHWdD%nrAeM5_sg35vzvUq zR4&&Fg?g#9o+)bFRI3*%Lg(x1fTgg)%48l-J-GtkF=Zj@*Tb{?M}R6;5@l6*mt+fU z(Awr^WodP_GPk%`neb*j+pY|y$I{@?D%$Be_hY&N-H_whxUu-s;qB1WUP;hupN9}1 zzlrRd5UthmbVgW-ONv?+M3oB3&F?(TxZyY>va)77cQxfj$NQ?T-_h*XZi>g{^O0sz z#l2CENMo8%!vPR$!wHcc%|-B)TbA#Db+t`cjZCJL&6d+?*l(-LJKedzVj2r>DUiOQ7#O#$^X}dh_YwM z9uM-&)SnYb>~^eu%*J_2a zFDlABcdx11^W1w!)s*W=Q_u~Lcq2slI#14*s^x{*P~;UM{3zRETyWSSz7b7u@7){X z@v{~aL|~S$QyIeC3%1M+HMrtr4HDD@*C{7(J_rpQ%otI0SXq?i!Bb!(lm7*tvcaBy zNBV;#x3VE}e2${{3%R*mspMzlI8Sk0s1ZAL8FzXca3UH7Urz*h!YTsmb~4A18=&~ z*xK@7UA(}tEN^Uhc*$EjRamy4%P#REy#m9>&q}lHB9Gcc`vruwM!Vr@vN(zi8#`cj z;mz(_&V)hbjB0DhDqfIDNVQoe@X0mZhCmq34IpC+mC=Bv=uc{9aM^UvTkK;`Jn?32 z-*ZTMsUTvTN*YsBdBRcL{JnbJP&aOi(QNGowUh&o%C;eE#MsxZApkSU{rXSIOku0n zeOs)NS)HH9#k68a3Z;0gQo+OZ%}p#9q-@s1-qA!;U#6pT$EJJhJ8CNz+-f3d7caZr z&!^t9&bq$#9CNFtpgJ0;;!4h8v_@IE{!U?k&vGXrK+7k$slbuxVLMb5i~UQ} zyJUJdBYkCMX3it2g$ALQ2)T4=@7%d<)61k~h(*rYnj2`N^RZ9j#Ug3()(b7-Z;RZw zbY8@{MlKfw!xPQsaAT}EM(Ob3`1tVt&gP~!>>Y16Jbp%6iPWSz(S6z(#+m7P+G1hu z^~cBSUhw&UPlj%4jpWNs!Lk!-^@_-rg<1tr$mjDA5#%|tIL;>u9Q(`}F$@UNJ~9?F zebm<2Lw|{B3%+7gQ=Rt=ZRsJLhHQnY|377K9wb?E)(Jj;mp^xZ?*8r<_ni@u_kACg zSy@$CRas|ORd?Op>TXrvt?rgkw?;xjNC+WdfkljFY=FVUfD9W3X=h--hTUb3wP9dv z5NLPI_K*EzZEY993?SxU_pdeW=Px27Baaenc4cODL}pgT=bwM~_xnxHOuP7seeIfg zHo-Dy=PyOlnAioM<=66rXEDj240cYHUpk{b(4JSk!u!FB_PNJw-j7| z_%MjqoVDy$ZEglvFI~7W8jL=*LVLm{4`)fs*=KxW!{IoKUp6H+y!U`l3UQ!e>Sum- zWTd4w<*YI3ww6axUutiseYt&qIPq&#jLTL3s z@p$FSSrj{xeZ0Z^DrIPm&%ozdL-qgj+K05~wnvlQ7hbT}&$Q0eY6ne#=gywBrLknp&DnQu zUb|*fP3zd5?@`k|Ch^Sg!7V&6r#&{zd zkBDWB5?|)ps-_#FoC{fJ(`^}PtcL*tza@)i!)@L~O}F{WU>#kdmt@~KPEl6NgkJqs zDV&jZHU;jZCW!mfp2IB@>Gs$t4(+tRUC8v-rn1_?O5m&=TslB zTv1n{Y|CO+-%&l@gZX1MDYUD-pxxUZTVI^odGv@^$4X;UQ+#x!(crhYw|NAH#tTD! z^Xlcx9DL>+pL-f3`QNlBfd}ogQ~I769@kL$rqgSqb)MpY@Y4T=#Cb*IzD>n_$YZC= zw&Fs5I13*>#Jn90O@|39enKwhIUL~A>tOfe5d2Twk6;7*` zjt&uPq40C2i5C?8IOuQ54K@g|guRGeOTjz1J2!8N#51P$)YDb?B5toYuwTG6t&c~o z?1`=Av}%tlcjTITcoj^Kg8pwUw@TEChHb$pQCC??ImGm)V z|2XRhP;C@$AY}HFXmMj>brp@xoS9izKxq^)bQ%lH$qAFA0mG3&)F^%0tlo@~Dri$3 ze#JPa$0Kf2;RQMY<-Fu%b7T@#7g3(pxW6?jf={ZaBhG%`a9Ktj^zTQ{7o-s_7T_p6 zGm0oTOh$zJq3{cfBd&dshp(#O`_(>1uIO_tdD?T@J8Ef|Fhr8SOWUo!txKy6q2NgKt7!zf64z1BbA9=`L?vMAL8038o zrLKKRg#Qx6@SZ`7m#C{(6pbD-t;w20ozPX4S|rXm=AtcZaH#Jo94N8sxz=^aU-VqH z%x(t-;c()|*>JBD|(`?G-_v&UJ>Czo-Z4c_o!#X*Dv^=E@^2Hi&J_fPX6wJQr z(~BmEv340nRXr-&875PlMl-GqLp92&$Xj)#n?HI6-tNX{r8DC(JO#PlXu}ehg*~#$ zpP9PQEg1R5)F9(Z!$IP@G3f@WLlx^6=dXBudGvU#)oylMyP zgeLGQt{X|&id7n1lX4;8G7VgRI@jY3`ntn}?J$28ypLLH_GUg>W%&CIA)N~hH|B-q z%soo*%x=2`vQZ>1rs{j~09o^HkU-Sd<3;ar?R}@8%M~)ofPJbL(-4xGt)5`EOex2< z#!g`#oI5!g(5rf zqe^6R1(~!w;U?1cCvps{-LDJfjfz91eT`e(efgPZ-tdft(2SitCYUwpb|r zkGz#K{63f$wIpDhFT3`9-pI|fT1D7|H&XJTY*+4#fe@GS2AP1%X9^nNDK`j+k0D|W z4shQ8Gw4?xVxhMb&-UKrqmlXfN3ZQa*}s1Mk>UG~K(2>a??>XB!$yYMhHRc#jyrsQ z@wDeVPqRcPWc&*O_Ld+$_6qHa?o}K9s^aO?!TeANX#BL~yK=^n4sEQ@)TTSZLMX9= zz_62?rw22CJ2yduj66t~d@n;gkjO)ELHF~vr_5S~{{h!SBF(T+V1^Ud5(O-7QtZNE z7=H7rgq%v6vQxGV9M>vRp%#F9;J#zHGj~kLGj(H*`C$7MfvW30TX5Q!$MbrADKW^j ziTZVlZ-b5N-Q{WRp4tN_w_5f3(pavOE0rKkot#{Pd%bjb?atcP))L(7D@#{SuXZ0j zjMH!V_w1xRO>s|%UojV7$`&W~_n*AVyv;K6RywZ#fr{5Nr;y`potMLTaHmDdys@~) zrm1S>L0OLyQz%RDb~>35BJ3$)x$OMH!d>Q%Gk;3;TBek9cm&^LcsQ^?jv)k-mVz^T zHNfp_Q&pq77OUd9o$-CC{C!lrm2G`~TKkfkQ#9s&=#!s0_vDi=oV)wU+vnc-$h&*xG}dlF_E9kpInVS*~U9EL;N?^)AXoK8AeMwCjN8?ICdDS zr#CEm2u!NJV#rGS(HNI*;<)|@4>Bn;kg{Jk!qirFV>*ex9F9xRV2KqH)*&7dVkC3s zyYTeOiW&F5`Wr$fQ47b8H3>Pk!u@dL7|Rkd6rhJ4jQcl)j}h2(hyHhJ4GdY+ZV*8V zt+vG6mtv=Ny;IhUOF1ymhS6>YT<0Smq|;Q@@*vrrhcwzC;P>GxK9mG%LBMumm9MFl zZ(kBS$B~{e9_Ug>UY@uAYh*p_zoUP`;8(6*s&)O{%ezmq$ zafraziCPymlm^{;Wk2WJ6x;Q>LtLX?AAeNDt((<~kxW8XHx5SD4~FHg3{_nn4^XTHao7A z4SmWQ9Y?i}RdOx*75DEVsg%+*FA)d60q+r?rS}Qskx7*-baRFpa>&12rW7Zj*ylUz8+{>nLumjTLnTPDrZ3-6)|}kqY}vLQU?Pw(f0>&iF<$Q#W2?zGqO#s4!@L zUM~a`*|zPug}`-*>EsyWY7HoIAjS*6`=2s^awK#HEC!tZ2tRsaPhp1{(HE0PgFr{VsYL8sY zl2`trjQ$a4BYD>VAII4D#ql{A{aeNOSvHG*YGhj&{Vwp(7SrHmr30?FWet*FjHm*-GQ{|&X&4*eCT``Di2@G42PB7@&l z@drAuZqKwDF?ij9s61EF!8GRPpK;>(n4c zklT_Zl-sSyCPf~W=x5Tj9LFybs$j$fKZp@kUYLT^u0Wjl5aL9LwKrdS_3rKX;?1*8 zb7y{eXMNqNgUB3aS#j)Ky?Jxo89ya591PhHWsbuLenX9)^jJ}RK(Np+t;d6EaOX6g zg8yG$%5V;P)lSu4{0NHhNdF!2XB~IkQXSJzG4HbFZV^r}HKWwZxrv)o09-dB$a_rP zV7WEsEr8ATO^PgpNV9{yVv#V~;6{YMQVOV38C6TnQGwzjw;5qOWmUIBQ zkr^07?}LrkV~0$+{wC&#KwgLxv7P7XOo&g|WQBQqoai>vk*?-x^G57jUudmeNVuD% zqw6%hdzXbDXIC8vjv;WfT>4ya&8Cmn9eQ=X^@pzMyMfI;Y&!w$n7Wo_ zd$^G3rDpKNa0CriVW|w(pH-*~IArpLoPa1i=z!;A6>K@AZ0XuyCsJ{0=Cyh7d(UgH zsqK*4TK&ljH=e)p@XC!F^$?_5@3snsmHNt47x8)=y?sFr+*#jrCXhv(#JgY_RXhuQyP*!=KCLKoOepz ziqrQ!wHfeYA$(`=mA$)n!{s;Le&fQ0@b%5LwQ#aruZM1;X%EAPrwINyHQ1pSSse18 zN5(-9M6U)M`(L0IRu5sQ238jfBdd}t4}5S&eTUqesLWQcu6b%68bs$hq0mLaj%+^e z`bmV{dDq|OU?+4_*RgP1VT9hBwk4OA9Y%hJDi+_BOH`H|j5w62WFx`smz@~&VBd&cuDA0DrE>k8&X^G7W?$;9MxgiFq!ti8;Z%Wye(@lwf=;PC}^%`40tPfal;+FxMo?C~@lP zu3rONbk2)jU8D-Gz>cJ8ILl$X8u^B-6g_n%HY%vO60fM~ffYp`_eb1h7Whz=@DLDu zKn=g^af906ARy{<9PTjJ5cSJ~5R7GRhz^ookoRy*0m#pMUb?wYT2Nt2>cb zp7*8vODFEc+yIpFd*6k_CysdHgVn+m9~^<&X|mg$_TU!uEZX2$dq@bqzimZ?j=SEP zAPT`1Jg*yp@2tEAK4O*!s~mi_u3WMcfy~0BvefJ@dEj40#{$pvMoU*ht}F0b$DWOx zY_Cbz>G_2E{+t*7Gr`Db{fAdv?~23zP?&)m5Z6{PWjH2Yj_dw>ft%ny9HD^veOGe5 zHdCom(;KS_ljj*S4Q9ppCB=%MyDWyRKCnz`aMukD&nVk3sf6 zmQ8a!r@gCP-tM54b!|FatCg>BpL^rJ`}phH?`ZmpwpKp(`0=^&nzmx&cc1IxjG6S1 z-@uIWsJK>*oHL6X5d!Qf_ePF90E_{7QLldgZ@fU;*^AAMdmQWGP^Cb$cS zyctMmADqM!RiNT#bq^GO%=V}*M@P>)6mHiNWWw;J7FZVu({-M=-yvj`d1nJdw-Chl zy5mDYAVYJlTAhD0##4_xT64khIEulI{FFNIPa3LF{Qa0&(st@=5Elq%-L)ybRjIse zxGJ!MpQD4R!Zu~p5bZ#i@G!w@0#`wVDj20Eg?n<~Kg|A=^%~>@Z>pJ(+v_=2(^aQR zu2XHL)mmRzUS6M>pI;xFo?d@=_ro7vzj|hOH&_o&TpIrpzhN2!}`a2GVE8k(84nxQaY9hbIfDT(-y6#)FOm zFiS|j0rBVGdQ-i<52|5LxZZqhDXdR8PoD-tC%Lx+i<(QWT+Cy2ax4cw9UE@E>B(y1 z1U9Yk5MujEl;li<#vWv6zGGE)ume6`4}x46=HvL2%y5VsFsa~tiHsm!YcyTt+RS&P zO;mf_u|ZJ|cAr%pU*UuMx3;r+zEC-zBzMnkz_NS%Fi&++UY-11)tta=FhmJU<6LIzM8T}CwpL0KhB@Xp4bVhiSR|O&+J(MOA zTTJ(Da}~?4eD3`!JT>xzOc+_LfNdT{dPPJI8x>wIq->Q37o-c>wQfV=;ptqwpTidM z)e7<&IC}+9>=c^zXxEyYw#D`NhLP`Ku+(^a%}zn;eHb&xd`EUK07^YHfS{67tpwCx+{P3JlYQ zkRny0FxfKr78dwMkh9gOz${8hVuF)~%-r=SQ(@_lfc(bF%GUDo=Gn7nzaa&r6Zp4O zB>T^WD?nu4y$2ZLr+q*1jdUV4$YugwXSwAITL=bWZ{T{|a=m_T*V~(_g3M;XH$!e$ zCW{jroyFEhZ4niVi@s%P+T!fWot2G^Mc4E87xzyc`Z~(t(Ra-0{NnK#_0YQ5{q0u! zpyso9+9uL**?#HrJz0P}Kw6#F0)+D@8%azgk1q|`#1s;ZANK8hh zd=B!m+%3Q68UAd=$YRd_OZzW<-5b-kGqm)NDpc(!&#>{U=|y(#-X62goPo&6WYe0) za@A_7#NNB}kvsS9v5~M5rYUnoR|LT_TYlPDlYi=3&nl9bw)RMR=^pGA07fbhR`_gyS$HpC>yd z$Ab%-4dO#&>$c&91oK9#h9W(&T{t1Hta~vgs)zSX6cv)>gFJ;qn)!L^71U;8K|yEz zi^^3GLLuwAOHHmIukF&zKQ~gYmt#{3)ksgh8mG=V20^M~HDMQH-$|e8l#Sd>IZGA# z`yhX!eG5G8Imi^!ZF1Q>U)?s>t7=>E&;ksm?>YxMc<`y2#rSQzM-cu=FWO_Q) zF|uqrc`k7B`MRErUNg_;um_2%SkgD?wmiry0kIB zvAylD`rk`K`?FQOQOAR8eMp>mRDdV8SWnU1VbS72Bj!M|H(vq|kS54d%QMz2%Arb; zH)DsgZY$Shl;xR1V|+7XnpVps&!HUI;K742;a$8c{U3H6A>{=I{wazleVWTfdQyG1 zT?7+iVYf4nA;e&wXIl=oX9HU*BE>PwHbYQT$cO`7GJ_=9ADF+C^#&od*9an0&K=T?IrCE)#ZHc<>&A3h2h*_ZM} zC<0N-L^szU|9KYW>5>=Rz3M1*4Do_Te4lR!$Ur>56}>9BUW!dZ+7l_9n2Fiw1>cRL zhCaJ!m@|Qbb^c`jWA4uNUP;Mz(GB925AHOJO9obue@}}3~`O`-MLfS3d7pt z(N5<!NA&8NqPRf@#Vb#fH*P%7f_k_Y78qN8FI4@8^qg0OMg%LJ9w=76eZb&I%S~hNEswQZC>p&snm0^{pGlg2LllJ*Pe}UD41~LI21>OtSPcsd zbY(eY_C+py&~_rtNM^vD6hdZ9!M!?Ec!)EXD8M`}Y~6)hW1w-yOc(!4_-(_#=c8Dd zv_zy7kfjDZ<3i;9oX6E3Xdh_buYFeglJ-;D&uBlV{jx%))L#GU&;Px@UHi%IkNxnM zKlkZNwc6`vf2P}geRbwDn^T|p@|Ry<`1Ge=fA8&2eByOTu)^2F(^e6NHX!?c^WZ#( zt2_O|KU}IKAlnB7Vp$nED<-Syg8AV^a0q9zn{r^M24~woLNwHvIUfCIn)%nuv8wS$S-QVqPF`(dA^bLVZ#!PQ8I6eb#Y^9|loXFDNi=uBRllh&4~W9QLDv+$Pd>eo~*+ zTWYsS^?(e-ZKN0Ap-2kPFX`P^N6IFIR-*YWNNB0&N!_o1)kJmX8Wa*MM9LNpAbM3J z!_>so!eA})j_tT+2&u3m4BfS{>Is432(<`k#L_S!#Urr~Iuu1Ym+IvT()L~6Xiq)~Ja5^zGz0Kx>wtizs<_cC07f2S3-x;C${o;y=hv4 z@*^+WYWcz6Qel3?*~g7A5Y|fGGl`8!pvNr}+X31vaJ&8EW@^@)Z;0sURCD*|4Aq_Q^`T`m;9yn2U=dMY3H?PlpNM-rRLSE{KDBYXAZZJhPX=(U({UxWc#1g zCR`8nbb#A61eo3LvJSe|*@j*Aqh8%+E=_X01c5=rib+_Q;&w<&?X&lbTVrMWH$$AG zg77%02s;g`Q~E?PB4%quAIUiieD-$zONU|Mqju7L$*&4Yt!0A?V48HX6)L2W5Ni-_C`vgcWX; ziJp_fnyg7ProI9HDvr=j!0pzLTB%WE2Uu`_0rAq3wgXwgE9$PrucR+c-$~C-Z>1~K z>0yeLxzns_wS2(*lU=ADF-065?82*<2zLe_RS_P(VK@jnrY!L>o76K(KdVpk=(>Ru z9*{5$a>CRhn2ei2Fj7L}4PuNsY#pJpO(u|Uxgpm5No%bZn6W&uTQA z4968y2J>pN(V`A3a|3Ll8AaU8=bJi#IG4u8NT6d9>WjZ<+K$Pkm0`I3mG=K=-_*)| zmbF>!tlDB3*{)Ab@9d0EP5GU%F@Le$-txDORjTHOrj(AF?qfHu59BypPCr(}n(wv) z#3u>-l95a?p%o*5yB3U6+qa}#b(dpZtT?YJ)R*n6YJ1EhSo&X3pu?ML7DnR0DAWvM z`ueW#k{~FXVdz?E?w&5NW##ejEH7`atZZ#=-Wc@>$#cSv;|Dglv%vnwKD>F9ar}!8!MV_`|Lk@3)~orexgfP`($j+(ZB4tZ z?%UGrNUd|}QtnKqJr9wYCrv``J?RmCr~x@=7%ZHE@I- z>QM(2KUhl{WPathP2a%a?|=L5-PeS*8XKdt<%-Wmynss2Kt}B1s}kFSWwQ8A#*3~P z(HB4xiV+=TaqrRMrQ1oXQdnG^NoG#QJI8n8k48L0Q)P!pF3Xvz!rxnr2b%PUJgP$w z)W|oxdZ!{CFEE10N*u?WbG$2Uunv$tmAtu};>sp`&evTpB>!NN5T9{g2gwFq;X3)i zOB|QfXy{U!@?5!vyi)lWip8?7hBNb3VMLX*ScHgR2J}ckM)la@wgQm%I}GwD)jm&t z#4P*yd|Q_>1Q21{zy@SsF)9}zh=^w^9Mtt|p-o)F;n}X7fcWu0Lj0)oYdb@c0V{K* z>yOlL+`M+pKY!zfztrB^+VOWz@JJoV_itcj@Bl70>q#7$w@y#?T}PWa!6ytDOdpo!Zv4(q@m|RgK_47?p@3lI4)m43s=yT zPOK+Y)fGn@p)$c0c<0RXAKSz+-2ne<(6j2aYp69;M9wy6az--IHhwR^?K#x7S7Rp- zx3{;oKJNKnWxLOLuuB)Ts|tN@@A7E1-L4cyM>mo%Y;H793|99v@!*=-M|Yl2Bo6q5 zOb_GJUaI)JLe@)0Mnu%1%_^#o1(RTQuT%NbUDscmcKshvIM*&`w{}q2;Vvypnd8K* zLu6Wt=D?P*+8mvoLc!`k2}ACAn2H=La5ESKgH7c-Zg5WZ4bB-l_%2RDqn;YJ6B-*a zx2HlQ3ZyypT0od-N7?`nUg1rTf~9__y{Nhc>81yM4q#ZsGQ&YZFlDLb%%J?a-oz8 zOIl4(Od9Ax!^Zx6;#wmi;vTo=FPokKWk8z08N2H4dKnk1n%V92HF0;l+S=Ri&bBx7 z(RN!eb-OzCeIfMJiXf`b>A9!QI3Ie;r;Tu(g2dN65{JzlQ&T0^uc90sas9JJ*T170 zR(bf~BjlaSw&V8pzINVSaG4_tZbAtyIx&f(F2rD@G(|;c6kYz=QO8!*6#r-ri`vO0n)mn zwjxHZTpFG0Z1`iHj$a-f^@AkI`}yO5gom=pDt3(_Xx#pQ&Z#hkhr&57n>nR%ze0jG zB!c-m6V03+H%WDidK-`pgZ0`~u<7Fb`Mpr(HcRe0_kuBmK?GH6I(JLeU*;4QM^DnTSB=m1-I+Ugi=-^p+jk|;5#5> zKllT~m7ItNMi-P%M6QwKOwJ7lB7K`eux?<780jpWfhcskdgTm9e(Z%vpfE%PqWh3u zM%c7m@IOu8u&{5;mbfLos*YG7%s4)nA5it@Vn5bh(C%pWw42-Qndc@po7L;~Z6Ctp z(c8B-NA|n>*ROBhz0kUF`SRxZo#&og++2J*)$S2y^;13dkP$qZ4Ri*4+DnT^hYXMP zU}6QV-L02UI%W%;_etV#TCx%%id`^`xHRvyJE+*PUll4$+2@Ef>QpaL9 zgufCCZ$1+Kd`0*lgRk4NZPN}wWea6++JU|kyJmjcEcn8ldscV3=|<$uv9Xz{sjmph z9Pa-gh0l0-y}S*=bqgXIgFif+5>fEWV~0Er|2O0l^V)`X4zkuKYA5K)i|2M$7iUY8 z`N`SYJNK?#yVIyv?{r5-{5$?BprnTceLY$B3;3!wbOd_k1RHL@Q`$MaBRxg#EDh5B zljo6zO~08ENlAfMrEt1J&!Ixj9RY=Zds<=RDVV|M9G?>IT{HLevZ;mytgaUZp1x=< z#%;6-s#kVB$W~|tCvKRGQ9C4+W$z4%#;wgz`pERcya^FzXX`5K5URik7SqI z=QtQsX(%zf8#bfFXz>ehjZ`PG6(JjkXaW3Hxr{tGo$fs&Z?GKB=3;m@i?3{ouN5G& zysN#ZeL}ms-I{8A^y9Z5y=o*E1A|{A#*N#zjmt~dmgeV;&2ww#E?#UK?Wd7Q4fVBq zxm~u9ZTFW!dXvP1ioqc8Up%PXoq#D!Pr_Yh{CAzkn1@N8w*-SY^cb7IE&AsB?yf#NHzO=^Y<~-NgF-;GRj(RmsoA4%% z577*DT>4@0&~(E5FtTyq`Y0s-Lv%AmdwFc!X;V*!XE?Ju{6S6aXtfdB-*^9799 zQo+pD5Z$}^SV!V6;TVbgC|Cc19L~WPL>%#FiHj|Uqpy3LXqDM*$M$hGw=~a~?WYPc zr$|F5`dY2FKbpOLoKoGwj?4bIy8A#ngxf`8J9GP$)Ij#ch&?`G&u!YpWXFZ<%f9bW ziFjk*!JI!5)Etw4dK7v4=wenUKEBw}+l%eBk>mLz zTgAf#y3;ByJzw(+aDzD#b85uTHFbs0cg6K*99o6kO~LAdc0%AvC}!9B>j-nh#+Es+ zyLxKiX~*aB*9%Ef!pshGb%&C&8DQqhwr%@_xeI|56%>r)N8Rq!`1nYGapc*ha}69y zwY23XY7+Au$BV8eo?cmj5IYfgA#qhl3;v~;c~XZ|(#FI~uPP`I2M5S+S|mVgp=(BQ zq7&b>rFU0x(VCWYGERUVf8I2B@yFSe+2;Aja}VY&UE0i#C*#x8n`7-#X>)CRd3$E& z+0AEz3#JScTf7jGZaho5*p0>Av2WRs_v;Jx40G1U(n$Maz@m04ahsiQO|f`uWo2!9?P%rwaHix~i9J322{neF zEOm|yvw|0YK{&dtX6+o+OBJqX_}sBVOm_pd?q;guJLFNq^NdJPGqfNm6zCtQ?aZ$# zveyK?6?wkJJy|P20+z(O??riTCs7g#Ec{?3F)Aa4SdaYzSlid1 zU-yYncGvmtUu3u^2YA=j0ms-6Z(pA+udFOyDP7z@w>Po5x!bPQ#CsI_}-`m|zH7(uV-P74pGr+ufqB=j;i1d8^<{#?Le^UfgJZ zX9j&|9N9DD?e_SLZHBx1ZaBPn@aWNjj1I*!1erX{VkG`&|LDv)s;#tEtz~PM&5?{1I zMseLRk#xKHiLz}trLIAwWbbj#!wL^es{USrdkK%mhD#vB33D0#0?Ot=m2Eq(IH&X= zm`u-V+T_M!Yr9piPmaxWW)>FcBs~$i9h$ZSq4fI9%NdVDHaLMhC&#{q>JZ1mv>&nT zZOFkKEK}4(T`)Jhm=n{$Rx|?&zEXNtaX(fRpB>6mh_WW#a@lvv@fjYx6ok)+;5HAa zuMA+wo^d^IoQ$6?k6~Q)4EVM;I)CtjkG|83 z3HeR=U1?m2B&9OCVj7L-4Ry5-ZuYy6hS!M(&F@o25#x%EafWboa@c#QhW6L2Tpt8i z2P@i}D8V6>6I|hLQaK$81TWvT1oDs@`np%J6;9Nw0Uuf_zxY2d@fube*VwjPG8UCA zI$kvCs9!*>IWAdMRGnaTf_{y~lsY-;m53}*FQSm*8H~%#$ica-DCZgRR6ZN11zT`e z&bzrNFAQQu3$}^Lgl%CuZP}1$xFKTJjKjH@0LP{3Y=4^VUlYi*dyJURYWKG%&o11) zy}Wtj*-_tbSK=$zr@>xX-u~qayPMC(*S+0c?|S^~rd`+O){AvGf#J2T{#Mt4X+1Qt z>MRZl>cb=`$7^&$r;w4@_HI)jlXtPNg3SY81hLiU1=p!s8)3Htp5wu0TLfpFk=VDw zf}yt?dbx%&>!Pp>&qsMx5+1nquQZOC{ycqFtfrr&;Y|>z% z(p(k>d@{%a*xHu-GB!z7Qm0T4X{764Rye$qlk;O^kI6_@pNqie{FiL6y| z+^)Uw=ECI6{O$8MD$~C(|BZS5&B^&2)6+NRC*QP23adoZrsw9S=lha;+3S~jzAACXt zA8l*nxQWDbSYSPM?#9k@kpANk3kC0_qFjT9u@MU)9zYCrmRpbwSJl=;jMB(O zb;QD7gn(ehW!$FR`xla94>H?3si4lApCV2zNpclo)p!zd%>8&I(o5}fIzBVAG&A!v zm3s4S;t+;^Ey6-A>$+Q|@j|cOOdzjSy&|c_{mAxZ#dGrFt&2BqXD0Wo;$fI&GAX3aZSdX~cjMgVW0HHx4cVdi8mrA8tN=mv2 zbWT9p1p+^VTT!w6D*Ni|syIA$*79hs`_aN&YXJ|upcyZ0LM5$U8xnfZS zjHRg|j8pl!PGb!_s0bWJ@BbEgAHdD=D$LB0(7fq{^oKuCZ-`Pm_ALLa9?7T7%41hJ z=EMYK{wvedL;3QCwyV9OIu0A%)$YW^3+Gl+C*&*bCE{} z2JPU);n!A>n|=0V_=;3*H`=Fg9k!3wySHgzGgfdEYU3mBpYs^_x@s5FJ}^c|N2bV! zBG^i_U9PV4}dfhV0O;E}p(&V9@5DTyJV0S{d%usKK zilBm8p3jlV)hfN`=%%8IQ@rof1~vu7R%lwY2Dwq4^P;(8b)gglaEBR*q@O1St9yl+ zTq)Iy7gKJ_1j1E3*nLyeBl8dqorgTEc z_Wbkdl}ndW$dcM^Cv{HMiWBwNzGWL+m!+jn7MAu^1`kJgnc^HQRSzRT9GJsCj8YaV zEe?+pM!lQZyNH{4X99^-4`|k^MV#1r>=0Zb+;O-WvkACy22oqjf*B0y>_bB6cIMY- zW$@Txl6Pg;aHhx%KnJwK)FT z-kt*2Hynez{DLdETBrU2!np}&KB2I%{|*ZyFVuN}UnY zIsYhtAT55Nc5d)_3VDtFg(Pt8#7hJ?{-P5=W|Mjh$JznD?_X)(gx4|No9@ulwF?*0 zLS%8@BBYX5j=zv&GqL?FXYi}yq20KwcA6dwq7DwQr{?Ml|1OGckovw@5YwQj`|!Ux zc(qAMFO8TXAr4zpTaKYm!HADjI8I^@WGdHkB8yg@Y=trb+id>7VIUw`t7xx80$=zTGK(WMvO^gbaZWVd3S$d zcW|Gf?3D#3-gbQGd z)<;lxf+@VXH|M8JX)eE%k==tZHsQS`=mm0e-ZZ%fI zq|vxzgyEgL&pdu|{qc)0&fJ+fabJ%3j=ppb%R);_r?AX-)Z7?2@ib{R+RIC7pl8r0 z8iE5}e!AG+L*A+rfg>QyOi;j$Eq)PawDg#}`_Z$IsMX9oJdd!>4MR^=45u1JHqi@q z)-fveL!WZ->8#e3UWb&Oyu32Np^ zib2<0YL{|-Tdek{zX@{K)gEi-w`jq5(XieHcpiVwk6^*-fz1ejBwyM>umJi#ynk z2zfz-pJPd0WYTeh8TfRIdL$4IuKLkA2>pw#B0RVOK5Q8zSMj4=v3%_!y5lvL(s@X6gj0h+hh3SY<{)^ zvEWthRfRqL=((k-m)oTFa>XiwYkThg?H69X`NGRDC(k9P333PlZ19=~)s~}}!-qZG zUM8zX9}h0~!jZi7<&@a^OMWCk5FD5&3qSVd(Vy zr-~t#G9=QEY9A=HmP@*`d3IUOot^ktyC!${_nmjno^@XM*vA~Jz`~SCdDXf4w43Y? zgY+Ip)jS$`q!~+cwq}vp%cY^N`tVxCNrtuK6VgLt6zKu``z>(2%P4V1gZKtt<`5+vf8;*kb{eT<^D`OAEfD>l}%a59TtbZV!ELP5Bphx zxIwY+1|?kbJQRZu0}JnxxS;x&EZaBx7TgG_c*+MDIggcuuUu%YR8qDgZW$}~t(l$8 z)#c^wjq#P03t^gGxb*n?a}TcHy0vg&;k5g3$di4Hd7!_7J@`CmLaGhkA>yg0@M_N= zk{+LSuT~VgS6TxbkJ3g;tua5k$rFS7LhY}sQU6aP?;Y$rTq;^;vRV>lQF#KVu>tQb zKfcU2xaz(9trm5}gmBR$BZZF7B4JVy6%sv|sX>%L443f7lX>MV7ZqySO7HE{9t5hM z4>toY1;>$eQlme^N&7KFLHhyi^V%1+AJe{~y}!MBVaL(`+o>Oy&wuGlmoMv&zwjeJ zqJQwoci+|T{NNA%&=2XgPk&m!edDvA)mvk)j!jMJ2Uh4!{mrN9^(k<_N5&2R8p||z zYB;V~I#>-;iXCM}tLGm2JA_Ah4%OdOt)`=9P)7c92ng6)+##l=WM z_(yEd4Q8rQ4N}r+uR>&ml7yOJrLM>!9B%CuG4=9}YsJ{ION27Y7s{)XoxliY3UL>V zT-P&b#c@$SU(MwzrP2>r4s|R{@d5Y1ceKCM{>^|j5&VBH+&yERDVL{~nrE9^TT_ec z?e^5f+L}M*KZPan;Cy?>uyhJ<*)WFW_lPjnJ^L1tn`>ZO^d+f4x*Rg~zM#R)P1XC` zoKqj)wS5P&optR0^hZCvDK=jikv8kEYzXvYd;tr6I~ zPTX6gqt8yjThGRSJBuY1zg`_OyYjZ1gwl2MnrXK3ts^TNgDQPI2nKr$dkdWbADogx`x9`#tz4k^xt zdUM5Zlqo(N<`iyKn!H*5RHVnA1Vct$%Ve&{ug5s|D2|MHEmGUbX5o(OS~jI3R6S+V zkD1OxK3Sg%f;pKR9gQa|tyZ!76O-uclfN^m%gJtcQW|F6989e|diPk97Ua+y-dtS# zn`6lw_FD#!91j=tiNLi=9n_i$cHrf{+EM&HYUbh|h-gQIFV6GenSB|3gvv7aX(95u z6%Uu^JrSbBEJ)9EJCSR8-Mm4{kp37X^r#9Fi##mLxR9igk31g6hN-)3W;P6ZcKlDW z-Zj-0wCfO!d{}!&)gadIzuA4Vf2VunKJKFZ>2$o?y? zEOvoK2Dl&q<{;vbAjJq~kViHFQ6g!}v|*b;OeRQ5KGyLcK9($s5)~-%*!olc?yIWq z>M%>FX1iymyQjC`cfWkU@Aso>zKPayOCZbNalE%F2l;)UfHZraJL`tt0iE+_7f_+^ z&iNI&^}dt|ad#f_nlR^iKg0~dR3!^4LsLv&Vr1h?i|Tb|xE&j`__AkmO+h51nNXYS)Y|7A6miu|5S3q) zHn#IGuB<$NWuw;VXsvXy*sE@|s@2v8jxXNMN%8dk^#Rp9%#ASIBTrAl`dYnvM^zxqo=MtUjXI*oI^~i@4iEv9cl35AL7Ia__$2mdY_2`f^HFciixGs7#4# z_<_}oT{YhgxxFMWYhd!FHdp5+F z)pBJ6zEHD6H;Nn=nG6ajI2WtlWLDe3DM3?`4=kK+?Ctsfjr7NR^TlGv^`>-byK#Lm zxU$k_L{$s55Ftx30!M0oy@1*UquDeHZN=N#6*!}NV_5rh0(%1j2Vna4lDk8x#6I3} zJjy?s`=d7nd4F9GLfxcQ@OtZBm9<#)zx@YJaCyZ0_??1Ow%jr4S)D~yPB%kC)n0MK zE$TG$pqaWo?+sVbjY_Sk+darTE|cFZ6l(S4)waU|we%v_siFB**C^l*n?6=~+^`g# z*kR;@5^I)Y`I^GghGKw2aU_r!O|U2bL`siY%4Z<1ZA+h&zE%1hWPl&r-Z}sI&+dM@ z_wL6&_0~JhYO&Z>Bbv=N3YARg@~wBTzWe68zxuB7C-0zl;Xf69e)ru^y`xq*uc+^Q z>fPPX8~(jp0|A@U-=D`26K{#n-IwceThLH(GoHF9}#}OWms>wpR_Ib^&KuL6y>mpIC4@b zRTLv---XyZ)zyK)2=j9tOKGO7-F{$MULK`mMPtZzWZPFfUAbo3uVY!?HSEXd&Ye3& ze4GCwWO16R@szmoCB*g(GxYtmpS%hj=N!zdTbn*fov@kWHe99<$8!utm(`@7z_4s; zj;CSHP1m8=PU%SV%7G<&4frc0fQq6JCX0fYw*71|pgwCqYMfTxPqZI|hz{`$X8`cNHdRXPi` z_QrPZRCaCQ+QWz0s!=j5D?5W5Sl6?|g@r6U(-9`cgIvPXJ~Pk{CZmTY3gc%z{b=wa zIB=D=8W}EiW&`TX$z=obQ`HFMOctjjB!;f$40t#53y7Z;>!3TtITPu~2*KE+h7WoY z!GjR2Vu((8_Zz0(p>9{e`ubee49f{p?GVRHwPdNWMy^N3hu<;^=gJTt1FE+MjVw_} zuC@AsLCR*@SyE&?rLu$reZ+|&wb`YpLz4m%~PNJGAYCtgDQIWh152VsMuG_q|4wNRAD zk;e(SWAJq(dV*_NZpjdGe4?k}2t4X^bC$b;J|7TG$r76o9ua0}#I=kV3_q4jP_rRo z%28;>acsd`S0`$g|9Z}&3NaK6MPFFqnAdGEY3rYc9XPMRlsiRFbrKXJ`pzK!$-J0UVZx}kMM_cR_;1NJd0v8BPje>u51`M zt0hUDa?2omCifsvSq{#NGB8rZRK<>e3NbjaBDM`gsT{=w4vVHzsnLOb*Dk#7r3s?KqolJ3-JUjJ2iqldGJ3_BmGexeA*=DrZ&5T+ReB1~%}GgJDe8uE(M9zOB{h{PbP^3x0Z)5^c6kD># z%CR^KV!>oPXG9Hri0*2?M1vpqhtg!G;TmxfBYVCkx9jw2S~JD8AFIviuF=Cioh!CM z|B&eyo;Zq3QoYJBCcMBdv>R ztQM)th4hKRV2mJO$=0E9_QfNJV9^17m;JGx1Ltty7=8_vV}?|Yo=0u)<1Ute_E5KPb9esJdlJm zk{y?}95Y!^+bP{PoJsP-tH?3vr_yAW`qWKhvRry#S12A+#~!V zHFoXrgFJw6_q~hz_!>SDNWjk){VwZ)x!Wd`zLW==cN88Ln9*4sWV)`z=U*>J!oTfeAT_rY42e!qh&7GtC5WB=tp!t?zeJYOzh z@0!{6h8w3>PcJQ@R2ZW9Znue=M`76)58JqYP`ieqCO#S^J>^DonjC8RU^}QTo=oiW zVy7l^%TjFBf(L9Fj``hkY+_lcAy+I@7gDI6}&Xn zz02uKGE2#pqUws+Dwu^YsNxD?XB^Mm6{J+!wypCUUXW*bmH!hAC5yrNKhUhl;*^ZtAUrK(@_{tMQxZMQQA{mK zL+PeK8M%&TbLHh_Bx2OssZ;3c?(RO2#(_zVMfcc<)tri0qCs)!S~jujsy+-Bhs#OS z5OaXlD3R2-(wV`Ipz#B#I1TKChOHqcR9pAVb?*7rgZqYO+F^b+02ka|LED*7SIMo& zB$}FXJT!}43HWfoyWo$ot6(_HvAC#-l_`&a9VeXr`mKvay0y(@Iwi>=%kn zc^+(sg84X$l^GAG>$!w;L+FQ*^yI$*S#LVQS_h9@(0XWX*l4WzjC7M(z2OF7tWI)Zj?77&&$_gu~OyMJYC$n!TI!G*oV$Z;RT%AX= zB{>J5{DS2^L}-!NH&Qw_AshRBC^uY%vrpJ{;;7og#60fQigQaIc1&=T!(L}SR&wWd zMElV!n9l3mQWXPp=8pEs%mh#BcM`w1BC<(G3sJGT)a!x2DuU}Pmh;15r`S0xg+;f2 zP!b0`;FRqgvu8M%pmLUFj|+@_glQQ&2GJl&5wMsF#Msw3Ce~r)|DajF~+*TQ6Wu~Q{x5H~ZcqCQ`U(H$iTYn!X_mWmJFZPe&Nj*5_D#YC_ zu{Bo8BEzV!oj6hFk`&kD!=8OyokRyq_6cC!-saDHq<3Gqz!UxlWS;}Ay%f@N8Ml^k zI;#;`RgM1!Qaw3g7qFW+baYpRl!=H0>Q`^xyb@_HGqO8H6EyWr4>v<@GaMY%v za`T|0PM|X*)wp=u^ zRZKf5OzYTc1|C|V*zP4~{g={TK@1U72y~_TUX-bHe?4l)!7^436l*N7^T#+-xP7O6|gR>RdDE`8>M=68fNNn}lll zZwD`+P(|fsnfp3KKCw|}GUMso+?BW&>0r~dp62@>qAvbCr1-xoAky@&637v>-^03X ztDOH_9(x&TYsT{la!L{pM!dRz0JUNkZ2P2iOUz1c-&m6?{bGMOlv}-eZ*fsRb>oH{ zOF@v6bMMiT*<!zcWxCar~B4N(N zPBzYB90fu2Ps)V^Std43!?wH%^XvZq3GUM|I9q}M@~|RDVx~$32`2nABg`J*7f(p1 zKz5)>o5PhkZHVS>UAugF4t(R>Y<~s>S(`fqSbSh)ZERi1hUPK;F&_5EBL|I9lxPfu zx+V85Q~7j)$TL|X5uYq$?m?jlLDj2b*D!REY=E4ann!-YP(%)*)C+h`uph`Nf+|ot zV$*fygsGdKXrO9Uw^CxrhOAh2`RlUjI~ZI1C!089S=`mkyNMaTI1^`>mbAZAVNN(Z6Y;d;G2rlmK1}8T+ zgZzaHL5g!FP~O`H18oFl94B+R2WP_$b}5?APT%5jC+J@wZliK&n!0>HO5rH2L_{IC zb@$V}o!q0$a&!*E1IZXG5Rl3u9B~LeEzL33XJ==Ba_do`Ihu+PqVq4;W4XBMGgbE~ z%NtNooX;8{w&M901U?Q};g1*PE(epmpUAN?Ki{d>M|s-69s6lvm#0Cus@wMVxixh0 z+&NUr4Tmv`4!{7s?;W(>9dQXv%J&S@jd=n7Q35WcXgB<`wiGRV?v>YqTt zMO1^o-x0l0-_f`o&rrpv^zTFdp`;uPWtvu>AK(qzfwP+*Xk&LqBH2s&E+>6YmIh052l#kDW5FY>x=ot<4tke zB1h63$MEBdwxe)k)04|n8@89-I0AriC`YFNP3q@X(@pPMmk>00T?a7R{}pT8q167lqU<;hu~qYBai62T$kjBn!xj%_ z?XVl^Gi5O@N?KrgB^^8&{O|1XEY`n)oKECCC8-A0?1pqzAiA|yQv(gP+uA&Q5wC=y z=V@n7ozh6QoK2-PLn#zywb|paj1wI^lK)PwGYAb#}MfMeuPF>dR{}H=%)F@EED?)t;)?31ktFI1+ z-)4DbaPc$ZP8c++jBB0F{cfZ=OmkL4P_OTlA#Egt|Ds|-=1495ej0m$33kbnUfJ&_ z`c{(WK;uqt7q_4yXkJ`Cx4gRAT$;anwF%1BEcANKdOp9?+&LDiZHk%YZ|x5pNiq&# zfr;tnF-zV^Gc!EfMS}sqbMq$m*489xp3fgy z>N|qxC^T!LDSPgI++G;&K^Ta-d!MRvvLf1iuVUoW7jI(b$Vt0$JvMC?C-@W|^Qi#) z$3%CEF>>W*Pp&l(6Y4hW{*WAdvY=|y43IpfI@3mx7D~16TVCFjiNmSoWVw&v5r#o;j;?-2HA4*M%gD6W*?V>C&YK?4kw% zB+j}4y2Q~X>`{@;Ah}V4BdOt>%@xS!z8W%92i*%TFD~%+`qYb6IT1%vOvSlUB;0?t3??)tPGbvjy8UvKHr&BUjQq@ND?> zYDEjU=IwHdUDwtuD7fq5UPQ?FFA|&xM@m8Nw&!cY)qGA-WmPvTnN@Vk?!!O7ro=SHc_`h;i=t1f-@~Fi&Dr^M0)FYbp!U=)QV*pm z*1=vNkqq&do`kXT`-M4O|VA)HRRuakn{j9Ne`vxMb=b7*~bqa zpzDtwp%YtM>+1;o2RhR~1+@#BFP%T%Lak?p{X-1BNAKSzN%r#6G4vzHqB+Cih?|<> zQSkMK?26kuteQn!G^}xI$xW+>>_>zfx~b=jWZ>%5v}-nX#Bf+ku-8;jOX;p5#0rL` zBUUW_9yV-8q3kDexFx!T&n3;_@9ca_EpHI6eGQ_ftwQyrf7Q@J)5+1%HbG$Dy3wlp ztw7)*RJg|2YO^VNg?_TX^yktw=?+NsiRcwRcW?7vr7}CX^XSgqyR&mQZ)&sJu{Yo& z9)NKrBf6qfqePS6rU!}=t!zyB18sbrQrRE96H|~vxB^H3@~odXG*fXrIaje%)IWQv zt>D=cXuXQn)CyX6ps?Y-9Cr;r*|pX@e_%ktW1m!HhxmDw)2h`mho{uZK#`ZPZOTwa?}I;|LCDL?r5Qai$*SoRCt64@9^Su@-EeGsUEWyRZm6+> z3QdM(g}K?>TE_EmdVR!HE;}icYa5>a;L(e1-_bi8ZAd^$isGsHzMi3@4GKC!+B(;C`byz zAC19OPFil6gxRXC<^6mgEv7t`3*cj9Iff`W3^sK$GCz5h`Rv`#lH$w04$g?^XV2u7 z{MyB2=3V5|eG35&48oQ?Fu9SU+O9jx z99)OQE~w4x*y?QEP2s9F+3Wrn(l;PB&P!{c6?5BBw%uM|uFXeLH}mxxs%2^!S92^7q|ij?9`>fFO2s_a;ByC zJ^kustuPlD;6%S-WUEz1_1-L7hPnc)x@hM~<2x#0AK!p_LCmi#OQ*!0gR(J{P%cM( z1M* z#BLYQo$I|ATdGbp8gVfh2G z=31IXm33Ze{;VE6$y^QAT-;y;{flB6{#Hm14ktHiQM7GXA^Iy}1#=kz7HkGK? zMCo}?vl_Doq_8@x{YW%LhS%QIF&Zm6=52Pqi z8(FJlm|je~kkI*2wxMVyW2%@PpVSJ13vd;pf+UT<4+O0>Af@{Gu2MrI9w@l3(PwD(V{NBMC z@k4CzBg=?KHgE_-B{|CKa5D2f0S20)+G~K_Mm15-VolUvD5%M0*9Eb&bQbdeA&N-G za+X7#Urk%lyYLm8@CMG(jkS=dTGMo#Q1jY^@KxQOMRT*LRwXEQ1Bm+Q=ytQ=4~WnOqzkTEqz>IufKl1wtjE9_T=f)+Wm8n&z(6_ zD>ox>U9~H>F5bF#@2%Qfe+yasekBJP49IMGZ{uEW~}e)gTy zK1saTHL5hm7B>*z<^Q7Kk`UNJ+D|u7HL`FjmSZS5z${Ww)RmaC0eO$?={g)13yfrs zlK(KH1^D~23-7vO!q;+oY3i)Gni$kBKdHGWe`Cdi9KbOH4WVia#UeSBHO#Vk568va ziMyVhVK&w;!~Z2^>P_aia}7u`9mjWm*Z?!5y6OHX*B&LE-6$}%jODc~Pt%IjU33x< zXeEE_;2)zf;Hug#Z<{XG6ardl?+7x{}Mx{?^vkb!W>lsAVigDx2rQ zx(b;C(=xeEgoDitlbKaCKAGjrYt=4)K1;P5( z>C@}0o15zyNm^Q8dRFuGV9lBUYmQoh!wG`zf1FXC|v^0Cu@*oiXm>m)7E)XWKtVnxzkfOKRluk<*q*ny?{-uWxPsQ2nsf#Z? zd2(v!+__T`()CkY?dA1$uXl<`(#=yh4`Gh8s;nH~SMZj>3TLX>mLMS{R@95kRJW?jFH|0(ZGy}Zgw_|1Aa#s8~t~5E6W%7(C z#@gmJ94&MyuQO_!P^_AU<7QFDF_fWh=|mnO;{C&=rLU;(2a(Q1LZod+BOTKjmbGZrjB^SmBi$H;R`}Y;G2-s#@F`4&9=AWG?U!hT({&_gQEc&jh>pCXeR_P0waa z@_->efI2^eW{RMZF3!`ykhQ+<5Zlkyn3_*pAz9Guuk{uJSLFJ$NhRb$fN$1Ot*e_3 zX!g&9evo^8ZB6MEbl)~g+a|$b!%yXXdA?6IP-dp*QYi!KLLOVLW>_CuTKWYQ^g1=` z=n(fiwniG%9TLUzR9o2yO+Dd?{;TnhK@;Tpny3Z4FZ<8$R-4V;3iAD30k63`cf?8U z-!+YC>E6?X<6#_3W-X7Uc8$hduwzEp@!D;3DgZ@5y1zZ>^t~3U&Twjja)zNW^97R; z#5^IVFF~Fo7+3v@Rb4_0Wm7F`W=}?uM(S9ObR>68?>v$hO!uM&jvPBACQh8yG*N8p z*4GAupJEF4Ob_pbRNv8F(bcdUnjlmmw^{0*t)nQ`u$u9*juI5YvZ9)5+LTqIv{Ksws$XFXm9uXZ6Zmx+P9v4owd*JDb8YP_?{}6oX>E-FPk*Q_vkvnB}`Tg z^r@-scr>9Jbwr-rU4?^~O&o~LP2MP@Y)`ku8TsA^WuGbpD_#0nOdnxEj-@;@ zTpB(&%bartO}(E(eGx($YZ!Txo`qCQ6?cc}HBYmhoXqlH?f1{{EVvi&A~Pc|vS=zK z&~4?6V``_=SM=v(L2O3pLPWS=(}bcyG`vzab;Xv$#3I2gTUTf=yW70>P5%GUQVx*>d7+9a6F2-55c?V znI~weiC?+-!V52WRDa>k5OUE??XA~TO{pDDf(?Lrp$l>`$DY@QYh z8RnwaHD8Cvl991;%Ej3MCO3;D#VnMfV#r8NbWQX{yV4U8opypJt5>c($yW&&_LITg zmAkiYJ(+*J^!UMpCn-1Qa{gotqx)V9LSsCEF-TT*pLlVvKQ_JHm1yB`AIPsd?h8)F zB?RZjxPYCyp3V@{kg|0Q8)tKvgt3XaYk6yaZ0c#q z=S=L(hW|_ly=gPQLOfh_C}*mf;#f2L1nLDYR+>pJ+S`@+Q)yOOlkSRs$&jqoF5JFd zn^n_-FTGjrlnVu?<~)

      cCy!Wc++jy2C>tWQXUS^=ZV&gf(w4fz}?L1VI^=Tc1H~ zDC3)oh;)y=Aux#e%mvY$cSH4&bEqyl5`f|Wapp=n%u0*<(&EgsES&%oKrz=yhGSR zGa%YFro5dsm@!&>Xc=!8Q?}e4Fx3gEj|x81p861!XRi0xTsdA^ctZ@)S>C2wpnBf& zDpYYA8NF7pjX zcd5m^kHBX(Y=d4QD9|*u%AAv7R_w!4yU|1~(Q3k$J(D38XsNh9{ai7`^;Jx$gR_iq ziXjPfTFgHyuA9%|r)A4jAohFfX^-ex>NX&`Y-K<Y-4(uEe zLe(-irb&mUU`)a0aAfU{A+tojGU15}c5zn}v_H zQCIzjp$F8>w6dmNcA4L)m8wiH<#Wy~%4Q5z&BZkz=W5lJgd4(_4KeOYynX*G3EsoDiOwxAtznwxP&N~Nf>HIalNo@nbVAya&Pq2SD}p-np>m~j&fDp1dxMR+ zRJqBTolYtjmO{@dA{(bbgf|~HwPG>)dSp#wTUU|t+}*n`-kR%hX{KOYRc_79+)}O@1+DzxOnHhRWkk+#6#Zcjduur6i_i{i zBn`)~C&R&b^D@!&<}sQdP7ZP}`PiG(__mCA)dU7GAu2|SY^aXoqB_b%$bz8vw(XvG zk%ztor6IR)YgJT(BWpoDo7R~?P^P4$s-dYUP(uw&^0ij0H#0Lgr?)x;^#AiLTYp0T_cqVPFSZRBj#mCdfs)hw8Wouw*cmX|M#`q`5n z!fb+lC%9c7OD_oDbo$|Q&sFa}cu*ZB5!LH=E?>A%-B?|%HcOonq=5_T>rT}<1_XSc zOVK@0;h4MsQL8l}qnRwl4)-BD#Bpwc!yu+zX$d!8(M{3@eKP}* zx=|DoRZUZ8Il7IIy=pQ8+3V{ZzVHFD#KhaDsZ*nt^TBoTdYS>z{@P0)c?Zz3Um|*N|hf62c()jpG7%1i8>}xHgAAI7_v@D zQB!?Y({h%*5Vmj^4!;t-6bgp5_uHz46=c+gWxi>f z>h4ME6a5uOV=8>~g$y_KnAmMFl6g;SXH4D2Y8UdHTndv^Kr!{V5CNyK-tU*iu(M_|cDk%O^kCKR-A3V0Whf z_=Oj4->77y!b-nT=&#`5vh}&AYrzP3X&-q>ypplmkz<r|DZYf76+!54-qK`<4rV?6MPsWL&d6U z_@Z&GmzyYCFh9OaoimUl$+oKL2(>*Zlc4yn%a&<3^e(EYVnC;fh~R-z&8H5*!sVMD z)-@#S*0yPH7&M2H2^~!=b6UuUql^Tt6nqQxla407G5G??nKDu|@(R_{#o|WaSDg0n ztO2F9DO+Ot37KYWDIOf5nKPY!4p*Q$Vrh6QY!XUUi_&Fo6GSQVOb7pFp@WG4%Wx^= z$EE}IeBb?-#Dt%Y7f zvOO^Qy`l1gELccGk%~1c+VtXv{$+&bOs?y?ZEGo1V1~Y+pO#N(BLHTU`mF48BzCt| zh!I=M>0oZHL8%ey+)fKYLl80lXFCVqVzcKdw!rVHUb)r8oy(XsLla@sX1Zm6$qd8| zhiYP*v5+!i-%2n7l4t*G@KfJNHto-eXK$HRdFSLwxvUj5(_E65j(zs!1K3o1Ny?rC zrY3JkkFWP+_=1B^|3w+aaN>)WcTLv922mjm(F?A>EN^Kwp-i&tB3%Ymw2adBAmibl zczn$_nHva})&}Gj-_!RfNvD|aduEPnifQsP?WJ+!EGF9m(p`Eg$6R5RgjIN9JKCD@YnF!mg|j<5R>dybzCW~v2Su^y9@rNiJ?=E} zgtq5)4@*QOA)pdMCWkcQsT_)DRupX=#YV)u0Wq~)))J;SCworvIW?sDd7oEPL3gcU zS>S%T7aEB`xbZILKG&JonYF0_#mgJiQXE~u#`_Y8AJ8<*`7x7=i$f3yrj$mUGyBF! zBStuLe*^OPJ;=^l5Vx+1y}`l7bLZLuqp~e2%36EvaBp@Wr&8aP_nB}i2bjIaSV)Ie zV`LeJbmPUl+KAQixNoix44!diR zpPI4Cophojx=Vfy>bH-}QAMD;hb)Z1R9uXNZ|2yEUgygAgQ&Udq zoSD}Xbb!Q8{u9XL50kyoZ6T4RQk*r`S5^#{#qq2$dw5AFnNOR{=`=NcYIP*~CS`E7 zjFBA<2sel2`_T$OHDt?~ zl9+f__2|cB%R`9>JX%^`PWfndwPrCr*0>{jb)*S0VBMWg0k_UFag#$8Ev0L>-RCij zJ)KyomlKQx%l;9|5r&{JOhFV`$}IQVNE9Q#Ans9#)RY#aD`FN7U8_G`JxZq`B0-|-^W->v~)kRx*hak2Sv+v^ZF6RDc2rAetH&jqQpT=N|Dv_Usz z&mI{;KuVj-Q8>E-d9ImKY(J4l3yk28WD06Rtb!BO3PBXgCdnB!7Z>ueheKY-;Z?8$ z2khWW!VW;tmI8KwW5Z_TrmzDe*^~eGU6~XRrRS_w)Xmh|nL@$3 zcKNbplTgyabb8y`J{~mN?N2b|C-(@)WAE>q&9j3`e4OmQt2GdaIUOj>TJYvrZZ{qo zQ47z@4Oy^bwPYXUCcun1ErRoi<=#pOJfy>!8%-4HivsQ%lWf+~tGNs{s+M=c@>aPX ztj(oyZU&Rr#KsjU(~l7si@O9XFKw<*)~4W|@)7{gCM+-&(>W)x*kfVO20*(eg}8^&Su0AWv1@H0_dq z%Qf=X7piz+8NX%(SW^sB;T8={#?2eap3yxSLN(M{qr2|^Fy{QxliTjgVpsV>c*ba} z#i9{G2Dr7pZlEwUEU`p6XUrXcNivb$eudOLI3s*`SaNwJv17f`{^sO|FI~F59B9;- zhsQ_!(#_uzN2-fG-+i>u7(w@r^hI3yqT*vmjtFelb~7hNQse1Qbr>KmRVN z6PBeLP#c3i-oJQDkIH4eXZszyUe~W&yr?VYg30-&zIlwg9mdMk4udj^+oWjRn`>4D zf6~6jjn}=$@;auJ*w?oY28N=R!Qp3_yV7Rf3B(;D;F5^y7k!k%C*)Zi2`#G5Uy5fp`h_swF5rB!eAGPC%HxZb4O1bxotf{2AtNg6Q3p=gIK9cX}tn*>y~2zzat0 zAEzEzu0|0gR)T?&Il^>7l6Mh>2w}4E-GHb!eqY)EyM0+IZ}a-&Q+IFOdfcp*N@pLR zJ(OFCnGtOaPr1B&h_U7XPWEIqq#^z=v0GhK8}H@RMq>L7jF_8&hexQgiq;EQsdVIS zPSsK+xfA6<&maLg&kT?9P<4%*54BqX>mqPuK21skuTu3aCJAkvDG79JZukL>4F~zm)ZoJwVVQyD;bhKj>pwCtc znao+~?A~3=QJ3iMS#x~g{!@<@o0Bd|e+o@_gvdXfV8ZP8?WZHkGkxTjLbI~K)mFCB zlk@eo>!7Md$!S}#wVt8QOxtpH00FfuX)e3~4*Ib<|zbNaR6T*JL za=~k;Oo3_)#h}*o))>b}1;6`m$FWIIutyT^u`Ok_bOx!uy0B1saQAL0Zb>agDdnpf z(C`bT3(s8rJw~<%MxY1B4?vG17kHHB!4ghrwsuVL`e2RK>&TG{4Y}(V7^}5FK_bhiHJn6PrkOED9lwTUW<2)yJ`Hg7qFHcwbM% zUH8eA^+lhZO;@XnkM7@JBuH(mD=UkJGA~J&7BB4=GKV&Q7Y|D{k?a%~;AEz+xjb0{ zI6SfzA1~NL{`$2H%dy-`IM#G=XO|)RhT)nsH_*k(sW>mk6}>Ljw_X!G=Jsjl3)o{x z?xloA<$m9jd!w{ev4b#?uHlg1>L#yO!Pm$NINT*-n2xgR;Phr>W4C1+YS0YCE^ref zBRels&LAcD5!07dC=ronSyWDe(9K&Tv>{_G-w9{nvb330J0BExAJ_RMd3S4Vc(>o} z%5S{?{p0=hay?z=TrR35wN`s1KYG^i%D%jh;C)U_pG}hrhEv1)2e;!!qa1s+Q}f6H z92YQu1ciFl5QqwmdFFhVU_`Bp#J|oOCgQimA8%^**+4Tkm?#%uLEYZq>=ZEe+0*!S<(L(c2p{T<&?r>RsOJ>T<`o?+B0FV9FX&UCw< zsDI)JE7Nhi@P`;cCY6{N{eyIGg2gNV;I!djLNBp@)ifHo9z*btyQ+IY-4op6gCvq; z|JBgHndAH+XDLQ4$j$EGAE4^}*pcVuP}hr=>}gytGj}tkGaWIHX<5q|dKsUcbTE+x zN{*PkdE=Cr2~Fh*CClbR*|AX)b6qF`hXLws*1(rRT;^$wjgrc*cwVYXQ^Z2S0%Hq# zqH^T$Et!bTxR_DdHkj`bs`YeRGr)maUdd58RuD;1$1rUZ6Gv0{nx}()7@jN>&UC_l z7)nM(Q7BZ^mK?*!M%Jh&IPC`HNB`fro_3{*bVhnAeL(tdaqh1#yyElEk=$GA#)g0C zx%1Dx_@ciADcX(uSMNW5?0@^`KIfx_1wU0R=5l^Zl0M>pj<;365P&!1ydMJ;I)UBINll_J$%oNIh)C|Gep%9U6%fdcnfmYJTHXJTDoS800Y@1-J2xPH2RSazO=eRb zPm@AT3}R0fqC=d>vA-|KDMS$MJs?32(K5ypRFP!A;Ah2DKRAqHS+Thq*%~zrKbn0- z%mJAYR6Nx%0&ptJraxnFBHKfbScC!_S)L^b>DH;B4b(Y3F`P4onZ-}d5z|(;s?AX2 znu<+LDP?y4@o$aBC%DCJL}`|~A`??jg+>tSxgCQjlqy7Zc%sBwJ#cSkOO0A>R73m~ z$oKc8ax#x{M!G891UWz6o~@S#hVKtVCY3|z6x^0MW09i4A+OE)|DbKF54*FE?5m(m)4l^Q)V9E3cw`#Zt>bB#t)C;ZDXrcD6W z-hgVXzU|aXxyV^G*9KdI#l?LVfbkgN81NkwtUB0~r=d`$GS^X_q#x)jH>X$elJVC+ zv)vOXPA_gR|5!m4#lGrn;hZY4^VAC=$@(}mk6cteFK<@_Ovh^|)~|5?X>E%eCo+HL zBNfb4Hyge!Ymi$;hU_p|qn4B5TEoS);hjj|oZYM{jcrVrV;O`8SEzzm;o=B)>OUlS z-IH2$N#yd?c6+|iEmSHIVSSd*N26jiQUXb8M$Ka|P7c(c$5fxkY~CD3NeXwC*z!l= z?F(?;?<9rJ^0MRKzvu+N3(x(!fZMsX^c!t>&3E8+s&u*_T+jKe#@cq+b0SQ7n6&8_ zv-3YC{O>qnNfhXbx3^pK!{J6}wKF#tokiQI-HuLQ+yyB_M)_3v!i9+EXs%RRik9AM z>++Z^qkG3z5f9$~|y2INS7QYo7^TIYf>I+Np!Zq8r7%!c&{ih4bHvQr< z^KOGc1S#paBm!B07h8Oo&303>v7ix6iM1MLcnHaYI3k9+t)14bEb|LOLIq5++Sz10 zsFX>#;015Vzu&8qM>=pKiFh}pm$v7!l}anBN14n8Mncl*Tu_k(@%)0aAW0W4UAuN+ z_0*{g%PT7v&J6~|3&m%^Q2tlw%J98}wFiJV5!#{BWb_Yq2CV-MyfMW4%iOtj*>-#=6wB+x%&-+K1o*J19+vNW-}njr34gm3X@2K zV$O#YVoVs5}+UaZc}uld#a z`KrIBV5^nF(-;Kq6a&{`lJ`B2p&vlx92}UauTEuiUqcSchy`1eB6aTWe4vB70&PuX zU~M0Yo1zsPhEitEHX$?Ior$Oz@dZ#cHm+@N~CnKLpqs&&DzKAy)7$5BloBd9+* zJ60m2fF+y8<9UF;O77$4q*cfuKO?=iy_{hze(4jRc=DN(o3df#t&hL6{K}gjnyuHR z%C39U{miEI%7-eI54~b-e#X6Nv>x6$f93W0)_5*%n!?Rn*&o_HFuyw^3^5u)p^uddVZdty+z2avwZ&frG}ASueC18=>zkQV`jdC z42TEw-y?8?$tg_SL|#7Hu9-~!9&0W~&+WfMp=OzO-Lu>eiSCL?NdZ1oDIoi#jgYft z@_Q#wp8U>|TsD{{it}cmQ=H|(r9{-}n?{2=6+yf9vw53ndDH16Afga_Y(pz*ozAW8 zSm21}SMtQ}`@{3>mSmjHbFTJ$(KGHm`s@pIA;P-vzJVK9mmGAhTUgyfKTNkC8UCbzN zeEBmde&b8;Yrgmy<$F4k)cGFeGcPvZ_oX*tn)}@K59JPcr}2TnU#IGigZ^p?U1)J} z0zWmmGM}s?k4@OoBKZ_W|^_i-Fw3teLA8gsg? zU9#n+t`k*J$rtc^Dp7r%8a~wX1!C1jle3)|9N1(&83%#S6j5kIhNa7drxA-|(*}jN zhv?gKa^5hNWI{F2G@Q1e&Q}7{o->WAX&1!2`7g(DKAlbviKVRso`Drik>#gs#mi)J zazhUmbW2?psrxTwtpr9clOR<>R^vKE^9)N3#1NWlWK1V#I-#YxIBRj0g4VRaE3{Wl zom-|8Fw<$7&S43iXe>|5cbwHP zpGGO;W3Km>x7Bov;t5_a6y+t4sWC|4D?S@Gx^&5q_i28xxwzt4zqtx3a?Hv5&6>1a1*1jjL zCt%h5Q&Gy&a@2innwaSdM&|WlNombv()fPIHJ0A4T3=CAZ2YpA6xDwjzBT_p7*#aW zw4KD3oB!qCNdJ7y<1ISfL#es#)w}(gEm_@~W!1V^Nk_{5p344W3Os?pE}O7Z?E$Jz zV*nk~wQi<~gFX^PLwKCK0z$8$UY5zvC7`lD zn^8UekEpGxjM(wRwY7QE(QKv_=3nhC4d1J0!?4t*6>oEfk4v|9(is0URu3#?j31nG$VON8g14&(l>MG&YioQ z_5aWE|3)(Mr@~x6eDK490u?~c3*{ zqZW#N#&Cu5Nf{P320dpO*1^9p{8}Rq^gUob*opeZ`c~h=Kmn&!*OxRo76$@Ls-n?F ziriEvnVQD#ZJ|az7Ll zA3)|>Tpt&C+9Gh0et#G$LwZd~M5eTuhh?;=!g=kIMUw@Q@u@UlDHHmdaCkSApe+)w zTEimyEE_xbaheo9XN;+R-eXab4(1#FIrtfj*HTcQ)V~r?0~-MQz}`e#iQOJ_FIlw6 z7He&6ysJZ?>6UoI_Kjuimctz%>>!6bV9FEjSVzN_Ee#zpw`FPno{LL~rJ!zmswsQe zboZOyeq~79tr<(*Q*BJT%;-o4M82(a!?dVT3|)J#tDNTy&O{{+9C>?wc$yd#zo&%B7Tx0_~(oq{+z?2 zGO)b}8um5556f^Pa3%PVB6YZppGw zvr@pPa84&r5w_AOSss!I_aS$UN}7F)yi0P@nw^FXvqdKU%H7z|sz8Oaxv8>Zb&XED z7xmvIZdmaRw(_Ee+?8lGyf^4!HDpS(%9M*7hR*pTphKy&)bJ_?@4PDzu7_2kK4JtR zxwbOpb3C~w-9EDX+GVb8g5pHf;cSHmjCmRd`wXX*2Svso7VS|7QBp$5oYzah!bCVC z1Yu{0N6Xwc$`K~iQeNSCo1&9YceX3vvII+5iV&4@UugtNik-@V#%C>AOIL^=ql&eP|_UO1PSRN<(E0 z16;Ofv_aCehQ?*fY8z_D8j>-`JR6(FSi?-Wosnj2H!|YSx-I3gC>aNBZ76b@zZ!ws zG}27uzAd6Q#EJgLB)x~zNuOVWx=0Nl2$2pCy#wa<7>o+PRVD-nW!LSc9(7xZi?axl z97{Q_8R5S%Xy0)gK|2u@@7#gDc&XstR(7{qVB18 zvvucU=*Mk}$Lrvw51h6LJnQtDGOpk7bN?N~p3W-Ry0s^QRwB9@@I6h{UjSc2J&;k* zQ(fHyqO@31*CM9tV%zofjEXv4ThgT^WA%QTUFW3rySAufY*e<64i}-*ykq5Nnozot zad$OtQM|gQR9VXfg>_f6b|}M3OSCA8E;Yi-oJUb9$woL;Mqudrm1oP!KE!aB6tv`F ziHGH3zH(aqE}ejCkknec)k@hN=axL>b1EF1{vJ=?dh&{vFIJ!A?|RVD(u4&gnBQTw|kj#NJZcFwclT zq11SzIm0`BRB}uf{CztomzF3NPgtWOqYjL|N-N)HEv5~h54qF12P^%z|K~++#hKx=rGy+?N{AsI0^)VD(X!4v- zkr~16kOYRIIqSnMWlqxB?2}2SXr)~KcYD`)SWeUkzDlyz)KGl6v36ipn9-#dzQwwq zSCPxh#fr^Nvo0EDIw+a?-G+StFO(a91LKT_nqR9Sx!(ugj>ep}c5f2;yL*MY?rNc< zyE`NcLdd3Rp>mRRyF(EGLifM@?Yl#}bK7XnVGws@^{f$3>4PIMo-?A_6y#GD!(3?w z91IH%&8DfND^OxhGo00B+v1b>=x{dP{CUjSCrG< z!3ZS9vH}}}8I_|5Sm&{#P;H08A}jf5V`iPa)MGIw{m7p&>R9+QKA`B7XmiMv$TK!a z>F1nMq^eC~WTPj@Lr^Twky>R)A~jJbNB(OnA<2hMT zb=2!1YF107#sog&7GRyxBDs7{iws2uo~3=x4m8il17)gL!S|qEi+mm;zcC$9w>=03 z6ZNsM$_BbcqN}34u6*MIHdnZdxY|Xi?Zns0i9lC-`2#N31Lf^q0mgB#Z|Nq}v~;Qq zal4^;rFR~hCTOw-id)C5H8=bAvPVx%ttzd5*Yup2HMb0@l&3hTDg>TC2JjDaN}6nMb{DPZ4sNpz=|dBq8OE=Q+;i zDN_b1L854mmvj-irWN(0P@?^Y%a|b@us$6OHfSN0g(uLhEYBXL2yV;6OmJlhDn)~^ zVplEHmsKQ_b;1PESR}+T7CPcde49gM%4N(U8ClEJ29|+-@BrAIXbszJ0hiShC1@V3 zTDPuiZ9_%H@{X2$JAOd_nkGNE_6KW8SCj^8TXyVdSqtc>i}l8Lc{6OD7`^Nnx^Svf zH+{|11j;Z<0Am_;YATj1JyDtT#=x2KTanoyoZPr^<4$FRF}z!fjL0J!RWMQ3mM8?@ zPDrHAGBHuVR~BVb5jbQ;zFp_gj8gq^c-WBqn5I#(N?28$mP93pYPuk&^82CE>u^*- zv4bhsErLt71w_VydQ&YHTYRmek(@v=7MNfJ2}LCOK$#lyYLo;U2_oQA z7hhv)PuFr#tTS~nJ~_r28Xa37L~90?u4`PowzYNLs+u)54Grs7RIIFs$JdodmoHxj z0)h5*?YTsktkv-&J?1GbBV+AnTb4^X^94CVOV)mH51ZX}W?uoTe@T`lsJKy#=!=jM zhwP(*k|4xn@d?htEm!nrn`CXU$<{`{qCcPznoQ{~OT-L})504bc0UQLklL{7VHi=d zTjO3T8n?%&h~loL$}Eyyw#AMAdfBEjLGL!NLVB0`+v7|;-dJD%hpIraf~aaq`#q+e zlPIW#x?C&NJvJrcom;jfHU|kJ((LhoK)v1GMImtMozSxJTe+vC{1hI-MI-CU2{SC2#?Mqr!#DU16Dq5~E>5 zj7j3;^6M2y`FuER~C1PtgDvXemX*&CW+JA zi3quUQ$tr*!=~+Igo&-N#xiP-?Xc!ZYR_f_*BO>b8XHGkOtiISc&W}XA;YGx!Dwr8 zL|J1|JHsT6dX7=Ojp5d)y&N8B91J6>?NAM=j`3ZLO#h z>q$mI-XbVseFHrBeX^~;kJlMhrlfU!H8t>{ZT0mDWc0(P@w~(?QY|t~6Kq?8UA2r| z-OD<&J2T7PM>N1}vmt`qa8<*XUc$)| zji{s0$<~W{Z;hy~YLhijnUCTdD83Hff4RthvZA9(<{JLc4J8xFS|{oalGX6}{7TZ6 zR!P#YL<5=$-t(B}LWmP4Sh@=QC8;}ASGoi9%wo&hnnd|z;%#$0L zWgkrzx(BKnI4Yrv{52@_tAfPsVl|dfKZcUGdPRJ9RaI48JifzaN6R=kN{5HATRK_0 z!bT5;IOca?C@YIsRG2pBwc%faUm4@oXdQlOLW@^ujMJ%UBn`aYC>hOVdm%mVrZ4er zGwrLHot~~yyP&o&YL4Ajc7@>s@DRGs5{B%Q#UVFGSgTu!=1N{$6h=}S7pl0bI=skV zUxP>CcJJWbOGCWFMzxDvWkX1ymCBBKo5M{B9+%l?pcv)&MW~C^LW!&!jj1FS)xi3w zrY58#S-K?P^)`o^Gv}nGdy;cyu3L(_QqNMJ^`L3}p=lk3D=Nq(c2W|9$VS9+S*xl? z4o_&p4?iAJ^aLX{AVovzZ{zf`7+L3KNv%qQ<%Z_$_I8=}$rd{)96^&1-{tKNa()q& zB_ROCpu2P{_u#%YTx+FYpd7K5@_U>zZ;@HaWzIJ+Z6SUa%B40CgqrM1umSZ>^{rau z^2bG`oB{EAG}IEWttu~H8ef`~oTLASHfy&VHFxu9XRkTUsKpplG9#v?fQTt^aEzC- zQvqbIiU<)3dbgp)+zguRv0Ks?u~H3kP^heF=BSctqTEXoTDc50Tbj`v-xApH$|WUa zbXVECE7z3p%r?R4uhlss(xw!+_Z0kDKh3(n$6%p`Mh&^OS8RRCZwDC5#5rMykA{R2GpKhom}AR~(e$ za}e&mFgC5Q>4batDAq-+Tw{0)SlP%!#fXUeEU;FPEF?)1R;R9Qpm`A?KMGykpS>Z|=SjMBxCAs5tZWtee2$^7?AV?7dQ*uX}T z-X7!$Z;5o@P;ld5Z*67JUQtpK3`)ydT6%jW)n=0tov^K!EMtA3>!bc}Q<>6S&1@<^ zEm>|SM)X_b3pUwVHHqSTMCaYrr9`|cKsY!}RI6-~w%E$bZW&F4cW|7Q6(t+#+y|rD zMjKJROV(RiDQ@`8S=q$PrDa4#$U;ak=c1_Ap$uXvjX*J_VQGi#NiY^_HkZFZdsx<_JMvT`9_8Y%H?ePvLhtg*!h7bTMAEKD2=_Z7qTc1f*^k>Yvy;IG(b?d)HaYRv`+s z#35@RoT$^hDr+<+Sz;M|TP1t^D;lQs%8g;aampse%kc57ehxHGueN3h8KBt4DB|$Bz3{asOHB9PG zCGfsD;R|q-T(c&zF<$E@y^T$ta7Yjpwy(_xfVpn*7fIhItg)Un0oH)6U_V%&DBY;; z*jLuQw5g^>^+%)OuxcTEL|K`7PhX!3^ScBf5jk=nfoAhMxe``^f<>fSRv&{}PIqK0q4c3jqL)>>T|8S_N0jWEwp}r6o z(-gDu%R5;|wa)RfB(im3juIWEc3E{$oK@c%E47pUrMgT+1)YfPh){KsX5qUXP)A6~ zu)j_AV~J3Tg?dGUE5tW7g)AHwg7tQ&5;>{~MXi3-UtZo4YDvXDp`oYgr(-H!zMqv3EF{EtL7=o*wG z>@p=P49mH_$kCGOkQ}1K!nTrgYOH+1!JE%38}l^338jZBupG*(OB2D>fkpk*Yngsh z>h13jgdGk^3anbYHsEu+D*_ec_$N$jnar80Fq4?GCXxFoRN;+`8H`wyY%Ncg&FrGd zruiX)r;uGOq}D)stv12Zf#x&P4wj4XXdX&83zcFXN?8_0wh``6SvgTczFa8_C)mA| zUzS~@?o!qfN{^)NSuN{(IXObA6k}&33sqVND6c2t+kq4wAjt#q3l8N*p+X`@+VIxsV$xh&zlwB6VoN0rDuOa)v%n^ou%l5e0(lv4cd(k(qgW5Y_+Ib* z+7eFX1(t!rya4qmKjBw+x`CBhG|h(#2tirY>`g=m{X@ypB_O8-?VUl&y`&cwP!}20 zEQ~~0t>t8ipA(c4S)oefXwk-o!?42N%t4XME0XYx3=wGIB)Y>YGM!tf_mBdua{y{q zNalKd)E-CBur0G2JP1Aj&Ldg(grQn_(PCEwQKA@5aU$1_qCj!H zCR3|*(n1MtJEyWjfTsw-+t?9cV#_Fsvgko5iO7`Cs>q5+d7cwsIfN(b^75q2(-tz& z!its_x5#weN4;O=DW72II_8>R3Phj=SqD}?EfUt%^~Cb!o|OQ2n!CF_{>mDgjbS{o zc--TPMi+as20)v#{Z@_0awASDkvum#Ip6G{aHP-FA063org{$1Y|y*6M8)R`nTEk4 zP;`(`wm>B^$io^+Ib8{>t>~7@cGL?fK)uq+c)k3VEld3VQn${c88(zE$%|}g)O?X> zg>uDqk07(YC81F0%aLVa7~Sj^jnya%$$ILJcsxd3q$lk=^FRY-par&GJ)jrq)$TQ2 zT}1cl)r8;aB%n@BRJXPgf}+HT*hE9Zs7EF_*Muj=8Ye>lzLangkVSilX;? zThhNFiy!hxA4ej<9|;Q2h;;CNg3tzd8Hx#;H^beX=(|O{+~4^k1(jr$6CJP$`7}jv z>vpoi#X%G|>jaTj*nL`1MN>B1vPEPo{r;_P8>8^79?@A|CQC}j+9^lt=4^&{xs7NQ zZoF*$+GV;dFI!e-;U!+v%3K|E2gj8)2M90G-dD~jtmc|M(r}9EbMN-CvEX%^Lkh-_aQO86-rs{P(BJt*1KSpdZZaS`&J(H z>S9BDePeWHL9=dbPHax>Oq{%#BoiAG+qP{x6Wg|J+qUiGjZeOF&syjHxa#G*>z97PEI`cN3t%&CGxO(=X5GQVES zC`X|vjwH+Z)iph$c}+f@@^|X4i3k9`@5!2A!QI8ba|ebKHVcFZ;`yg}mgnV(lCx?aKPGdC;i!49cu z0{d7D(XIeFGKa>afYFXO#{N*GqKUY9ugIX(aJy=@4|nrD|2E6{tYNZwK(8TrY)OXV zfQ@F60Wz?bxtZMu}`}a%EE~7};icUXj*Zd-)sq zh<-RxleG{NEBAWA4jyz6lQ4v$Y_k*AM=%`E0GQm)WF2W&p!;f@ccSG7#T|lp%Su4x z_!*|DeB+xrzN6#fI#9cL#HwqZ%)ZlF1QXzyETpShSBcJbYZlNZ3l0JyQ7`-zN%#n8 zy#E40y#(1|WT4}T+VW{TQJhBldcKivd8T-$63ATR1?k+v?}F8b@ZJ7`291AH^uulk z4}rvz`Mo+Gk*}8&K=j9sobKd?M9#b;go2X-;cLRz0Uqg|3|olPS9YE3H_o8BXMXe* znqRClMD{)}Da!nmub|6-2HO!fvE=)}f-2F*8WH9`knSyA2WQW#lVRQ%TWu-x$ngw@=;%X$IllO9J-k zB&L)m8Jz~fp5fhi6CKwnsf@SqznTT*_q>g-T4y}cvnW%hdiE)deh9Ff@zfI%P^+vJ z=xd8Dbu2~Rm6AJDaSI@7rye^!i2uX3*s6`y;ZszFPoXcq+iw_u=X{RyX8UGJe1~`p z$Y5=PE9d%`cT{y6n>N$VbaWBKm(N~aC_`6Mg%RPn`Flw%$WB3GLQS+F#`y3j#>8gNw3v3b zr>$Ns2sD0?aCOQxNqj}VpL}<+6xDeYR^I%aK?!xF+Q(Ifr_Qn+NJDR$W4MhP=8 z6!~NatSl^ed|RIO2O6|M>X%tw`U9uTmv}`M$?^=92wbYQNBC**E!cAmx4u`=5!%VX z4)uihv!=fB=*byDYn@}Y`-Q&;VD`mK(p(k{5YX0`MFqQO!qmvB8d==}66IL(r_PvM zg@GMs1%h|gw(0jKQ#9lJ*CS|If9YJWRGx4G^9~%StJSrz`2-2?Bj!W{drCK2 zwQK&FPDRo=Z@0OwAE#uZGI}d3dXhkVBAG4^*conWnw1{RAP!I;i7mx-UP2X@SGr98|TIQ5$?1;?XriJ6a2lA2cPYO9tlq-

      $O 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 z z;!q?Ssd{_c8l((i}e+5n<2vZacc8AA0IX?vU2&P`HcCjIon*^sd-3TkF`#jxGiFEI@Y-s zNsB`K$|k;hb(hvHvagICR*qBo^`3OkC)b{Pg%03f*}LVOkKZduYw7SSbKlNE6Sg*3 z=ik!ASKJo)RSNv?rH7@wu@*Catx+pC+PM+sMjJQinF8!G#g-J?Ex)Uf8xHZMHofx2 zwFQD6lbtJ7zL0*rAwO{-J9ST!M588OK217?1eiQea3l3w%j7eXk3s;zdo=|H<{p_F{QD>2%C+Y5bnhD{!8h`z~W4BoWi z)9cFX>+ktvPtTTvk9T~$DbH-P%sw^(H7O(2uGu$~?vcQO-+SVdc+hw0aUp%e;IrFn`PT95YlfqQQRbIf{ z-tuxsw(gBAx5Y4G7wmRhpsGq3$vK-N=8$O7;)|=x%jE66*Wt`(HhzB4W!q*Ou}#{} z*v{Hsv+2$74AqIrg3T& zjY=O;PFv$G`R>-@CSRo^82kI{g&*?3Q#|Zc`rS<@Wc5YW?U<*u5s%(u%nR%I!z#V8 z*qG2Kq&KCkD&tb)LGQHitm#ElcIrzImtFKKKRKS8ndUF^J-LyBNIt2!SrxT5uIgsW z$(*#FNgeaJomKX1jo!_d`+D6QPIrz$>+!hxYY-+jBHS;W6;%9{w_>0BAyLPQSqWd@ zTPzb+!Nu>GS~!1!f1cJmvf?(QgSBvzb#Cr?K!*W0bwNDa!l$Op7hHJbo_kUyYpSDf9|KX-%E90N@x#XooxOv6lgfeGbZ05`JU}fd{)r+qYNaz>8+`POdB78M9Z{Sb; z6y)y_o_Nq?W_hBOAMAd|V61zB3D!IsLv^~AO&*DxTtN&=Az)^5M|2q<<+x;Lr4!`k zgxlj`DdF;3!mfy_PuAXeW`2^(uKRkx*(or3u5PfHZ5HOSm_4%F%JsT<9+|bIxEMRT zY=#PZz-q7x4>bxMAUU%cb@y8Om0)@c1^HfG;Bj?tpCDD#=bi2@tlF z=XokJUKTDb6-tH7d$ln}io5=$yRbIAO0e?=6!Z+^s;qcCpLmTZwZeWU5)Zu z<6^V;u)K`D1B@lzzx~~|ZQHhc+O}=mcK5XHK5g5!rtO}#J#G6x&wYN$y>D`J^Cmkh zpPc%pcI70My=&L5wXQ53vrb=kx-5CWLG8w>-c(FykuMT`l_;}R*N)uhOK7P2Sg&DQ zPlhdOW)B7Rz8YT&AKP9}CZ|21Jt930{pO!W?s&V`R#;b9UmF__s{T|z+J4dbOuu>e z2FbBG%Sldk+YV9>Xe!Q9{JgMB+<)T(S{>q_7nV*oO-|D)s{Zlo(n~s(5OUBUJgZ)w zs+x_#yfy2-t&zb-<4bAuzD9>CEuAwmdXjhK=?+oH8%7|_qw5lLuxMYQMsUJs^GWh6 zesb1x2gRJ8BR7Hme4?qxeSlhf0=9cHRBT&KB-8`hiZl3@@ur{#Ew}WtB=2$I+ax-NXq=Y9oi4mRHGi zb{&l&O#{g+O*vg7LrLsW=KXLtpOOVH^`E$mT=@vmx>d7D>D0I2#r^v!5&=RdiMb>3 z^2J=UI%fEtU-tr@U<7M1YU&>!DK}D6*6y%+#lBa%;R57##J~EeAKeA`CrEANOOl?a zxKk%yx00(=c+lLWBMRmJ2GmoBdA+4PwCCrKYhumNPP90xO-M+2Q9C%j!D8x8FMx&+ z@N1{gqEC38v|xmdkYHs>VEMGw&-bL4)0DAO4vbdf5h!glA!?&%Z;l74HQc8%IH>)R zm6NeoA%v!S010cvtzxe-KA~;1{I8O#za>`pTm89X@bDV?HAW`vJY|EKoxS0zT&Y18 zO4?yAs}{ZA(8Zmj_}-3%HgZZ--RJLBgEAO9@9~4NtZk8qRXCFImD)5} zUXq%;E+UaM4t}ca<%}GY9%S!K$G-3;@*!OQKefyaVl=fc)k6JDp*hoXa{Lk< zXtq8`63B&MJ_K(Rvh(h$G}4;i0TbTR-?}p{D`mC{Yk)dmfrr*#_3O=RuGweIi}9aY zwY82tq$s5fyy&$KT-?0aR)IB_wW~}uE>Q_g`VLd;M{mJ0Q<#4cx-K*Z??*B57~B1q z^FPCcBe7d?5OA+J`E18ouwq>KcYb~hb{aDE--Sx*Yi$46Zs`8iUER&+q6P-6rl#r5 zp7AL_yvx)Pa|}^Ny2}D1o^E6OX}E>q&kpaMzfAeNp2iZ23vaV)gP5!RnR6PRqp2h4 z0+**H>@B>XdWSl_sg>_t=^%bO{>2~1bJY|0J<0=QefF&vt$p@|{oW&%atiT<0EW;0 zqu^DdcMOCZ1Hiibqy~xcngvqR%O125!qnE&G|;}*J-*<5u2S`g>m)QUW(?U1IvN*ZDAc57^KdG4LAz*MRy`kK+d{RMMG zYh-}FS4NvKy88MmgWlO3w_fgiNtC=}dK3@8Ewk(xrI@#d36nl`0Vb>2=t|9R1h49Q z>ky(wtN!V(=6R+}%y!>*o*t@^8+1@-4|W&dEdw<>(@pFVVYr6!DaU!Vqz?AlbpcO9 zeA3-%L=5sVIpIM;gAsQ4CG2NXs^Q1@CN7jp*ikXUHasfZma#6CJHGR_&M<58$$W z={t9e^}aWwOEI}N+*E2W>Nl} z-4jP)(q&a-)#O#=f+&OK!Q)`ciF0l8oasNN&(SkNM}Ev_QL)R+z}}L*o-^B6mcvt3 zocxd^Jdx-evSO$|hcUGZPHz+wwAWovpF=nqz1GYuGles`W4&g*mDRS~%5HFx@bd8M z(Ur6Vk2Ny}Nsh=c?V1+(xH*kctM(YmrE)TJM}SE}wy?VT&pqUCAAh_3jk~Zi7Ru!u zk~{L}9h}7-3B{5b+}yYrKiU2>rtFwt@dI{9kdL7{p0c6v%q2?}r}PkLj_{Js{9zOA zx@!9vt(C~nUB4-6e_~_z3=4tbC#J+L?!E_NifE7N$M>J$1HgKJ)Uc*g32Q`DM*_No|hy)3gc|4`~sFvegA`Y$@5$=z0c_ z;`<_)0Y&>#Bc-UckN|w6Z2nRR($x!gYF1gow|a+bj8{-L3T>3GL0j}=!9_66g`b5d zFJnT#6!jYeKL1Mnt+v#~Oi)tda z^?Yf=s*mhk!!gzZwA$1DK8C}>?5V}u3@5M2&>j_iWzy_ndxgayyk5C`-NC3X3S4j< z*8shl2Qgt$ZxnnN=})buqeUv5&0dUPh&JycKdFSgaX&Q*H)CMAIKN)BF#g~R-{cVm z69>OPmx1rG6&2n@Vw}_66Q$Ip=Bh!p%}{~iKpXEOPyXnT0A0j9b%vV>PTtQ(bRNMD zItvnaor;Pp=n&}JE#8gGkb`IGlB>%pD_MVymixGHs4&w?+~hi5QTw1BM{R_-8HOGy{p-U1L5wWZ zBWRZqsFc6?EEl||(RfbXVeyq(?VK8KPwhdg5X|xrmfn6JCJ5c73J+U_yWJzD%XAM_ zfl$@yzY>`GE5rcv-tMDtd1rIdEsS$IM+twNr2**uVtg>4LGy|E39_`71?Ktpc5^gN z7iPFdnR(cDtbJ1{`%TTki7PzsKsIkBqA2MH@z>@&Fa)GDoXPaV!r zE2Ckc0j8RN5a~D$*D+vl!}}Hv>#Ub>?yJn@B{c4@!C_e~h5;7XS^`yH@*G(hI>suA zFwIU;zz5D$5>pMBrsYC_WCOgi*;ea?S%z~{v+6;Rxdn#X6oz^80fxtZb&uY~lzMJV zhLmdP$9O20wZrQIebCqVgbzgV;AgbH#MwTp6oVsWFW0NajWw~SR%V$4z4FO6-U>SWM<#U8;1Slrnj6}>m)uD% z4}`V7clud;azgZBH?FME(`dUoY^`-RJJc zt=zSyh$2+Ep;IUGR~u-`)ZnYx#o?gKQ*)$;tyrOMkE2(_SH00SX+5u1#YJ(ZA4AhM zgt!o-Y9C)(NrtI4K3ch^Y0t{6=~KF)OEdWl3ASkByAT6ktta;~2VZS0>_z}zWj5JX z2cKOozpDi`6RrVaG`WoouF7nCA==ZrS;gF`*|k2V{=(SPty~*XplZ+Jjs{TZ4jrlc z{@o){weJDFIw)9X8Wdcmr6ona$Ah+@)hIq-_Bz>47l569#CXv7VWykb7c+U6?xgj_ z!Z2wt`uCt`ZNqp&wj)1d*R=^uT;qEjl6_#`@^gN0)tbnT0@UoD*L_dz?s)vQ-C%5Y z$!j#a?ljFOEHtMJ&zC(oB>p$io|kU;*DMv6>FGD#9!DPGcS*oV$ZZ_*R;|LUQGv8-YXSo?md+PABwnh<>fdI9st! zq$VQ^Qj+@1i}xHBpC1WO7?Hs?;Ix8iGH#6Q*RM8`jV_YmT5#4Q-&uv(pmA}&?*a0$ zmZ7XhCAq=6aQ%4`{c~ayX%Tqie!m+bC{O8rs1LT__d2-)2{0E5!1YoK*a&?>%xy#R zpqx?&vkpK6A_5T#|F+DEPnq$9Drz0>wpv9wF5`O$8HC!G-rYbH$QcE4r*z&_bG!^@ zMBIwtiz}HNK1#@UhSOsgn6X8Y0mNfz~LmU2dxnj}4JMkoSV-o4oZ+Kfna zN%i_iv|2bR2kcwb&y_?$mj_y!Q?^l0{OkaYbfy+mf#FP;g`8ZXq8;TmejsAfflM#N zBU|bA@dWHuGU@_Kfts#gt3+t$JNq@UWUOZ!P?vRw!%72J*Rq-b~f674+{z&0YC;XLi~ zT3w2RC9&vkPDuuUK0rTI~dLP|>O)pj`8^fWci`obWz& zY9_$DV0Kfs<-))3d=``7gJcD<`$XFl5--GJ5Rf%nLN2K|$s^>9lYhG}&BB|X!X`}m z3n>=6qTy0`?Ve3ERE@-cxtqY-?A)2)OL@)wDL~$e@Wyx ztQlAzrGxHZm~lBv!fL8LXdTgEc8E>>$)Kg!dE)}GT6wsgsVdu{$}%IdjcoRD)FHQQ z{u3eom&EI{b|HTA5+vVUc! z{~%y?LZ*(&@ zwX|CZ|y0aDTbZu40W_d~6WWs8B zauJL4C4wgCE@z%k-}wv+DCcF3E*<144gQK}RiOF)xeF3+CpFM0Y_PFP8>)AnkDcJ# ztO58T>$MXJ^F-4uqW7bjlant550(#dik+%|Xyfg_WW?K2{xHf-mr%r)Wgf{N*|=_N zt1}F3%BEC`3dTN5?KhHM##uBY3E2N)XM?bIVXe-&xJ*fJXHmJ7Sv5P>Bw005thi-9 zCl@{AD}HJWGESbu&I&M4Tmck?A)_=xaF|p>@t!gw9W4VpNgG>75HS^1i z(-_Wl3jg4mnP8Iin<$lt{eXQ2cjR4|S&DQf)dT%*f}VYH>X(IvcV7EK28-Y_RxG-+ zo}I>o-w}7)Hw`;a7Q-i2%YsoM!!wE3@pR7o_X0*j){c53RoJK|uP!dLj(f5K<;M#z z$`;fbkOr>r#;!^b7QeJ7`0|o?R)jjqws+QnDb5zt>cEzSi7xN-(8YKQ&h2Uth61ix zcBBN_k~ft(=e$1b4tsr(G+$mJy1>QWu_t6~FiW4CB>8nBPb#<4j1}WYi7WKUNo6uu zsdFnvt^J%qMJPvzJLUYr>&eFkv_bleMOV_Ic@lEjlvOK;v;)Nnu?o8X*mN1Oom7EB{e|^IN9T|5 z#P+2uJbbCRr+CVwp=IU!xrC+M-yJr-vgdK}BNESJkX0p{o2j>#MYo{JwqydElZ(}7 zeZ(COx;WBTvT%~1zY=l9y>OzE5$Th%{hLmm_@a4||) z)HPEuBM}lrGbWGjJ5l>@J-zH2`u9C{V_0I0Yinc~zC{`F< z!FU&D7Y8doYWSGZ_pt+iD<)% zDMVw)fp1uH#JpUPf^8Kf3v1ZeatK$rSkE%uz{E9xGAU+BI2lNHatL>`!#_Y76ycEJ zPw;muX%l|Vo~IBMEK1}Wmg268o^_iOj{vM~>e$h-Q3+H~U1t|K&pWmnGqRuwu=bd- zx&vbZxxfp14UHw(wBvH{{pnQ`*%Rd*MzL*c$xpV9fDx}Ld|3<(qV8M+>R3VZ* zk%{kzM17qfp3V??fFrw9E#Ouv_AJqjdX92s(t7OBx^)@QFt6NT_3ayP=l;lSx7>d} z5Is#IyL!dXiFVe+-a8NSEr9ZMb-S?VS;PR`L6{rZds}?8ca(v*C_gd7{4;nIxPrOKQ%3_kuM4 z1lD~O&BVMR9vG@Kzb07P;O-U9HU-3 zp6s7p_Z%>mMnrI&4KaL-;2xWZi%C%BFL{tNBI1@tBw56}7(-dGZ= ziQyo_kS2NMKxsHHS!8D2=7=3ZuA zPH$^IkAQlG-mUghdl5U#;G}bf{bGY>)lHIKvW+1ey8@LT`G=1QibZ+CdCZfeu}#rd z4eg$-{h99K+Qv!xIFQ`RNXI-MK4$FqBDt-<0Zy<5%o)z8Nt1HJI3t8TS6*AVHa z>!+RD){bESv@M{BrKU!&X&mFf(}Rxd(vOzW&bLlpUiBwwS`(Y~!W-Kt5{qein?e>^ zw7-t_E+^W3ODo;29i-9~#`z0!^C_Ely4d85H#VaIHVziH_>AH40`R=o@@(xCvS^TQXDf4s8yC3kHfjr^<#-4FGOuP?a&Hc`@;Bmh6bF94| z==ghthcM?tmnSR0v6c1PmXbUdamGV{Yv*;>_e5~(72(bNTuWl#j~_YF=Tuh-~8)UCyOj9+1XU!K(yHvYayX-<3(dFjySTQZN#|X=CNi+4x{Yrs2QYX4~NwY>H zZgBa=6mA&bcMMZZyG*-k3$Tf**MmFN-Vx-$W4k=CiXm?s<6segS9P8^f<1t)8zYPa zfj!~#0sKX8i%~Y-)>NLlmYeP(^o)BdlT3Nw$TJQA{1k#Sr~oNQ}=WoyN@&{|xA zRWLSKC@^!sQU7P4ZG8t*$z*{mW+@JiO}1AeLp?>Sr8|f_qHVi^?jn2#?;bM5Fc9Aj zv=GLrz7Pdt;3D{Fa^=7!2$yc)2V*|RE+|T!0=+#ML!Cm+MU9>Q81oaEQb6vfbOWL4 zpE{Z+`k#JH#)z~}3?tk5zxjXmh%}_rx+fd2(zwSOr_;7dG?0(DCw@j$oKwV#R0_uQvh24DFC_tiPWBEL<)`at@xs{A3i(;*;!Y zVwwhmMgsW(q!(x#$`_JgkrDZHPumPIa7ty#Fb@QS0wxKp_F_mqkJwjt^-n*ycbZ(v zr;Rjc3j3$^r~1uQ=7H5vMy(|0Kawd6MlC6jJSP9JnJH1W%TtE$l&|z>TArx61~?*i z%1*OaswX&z$ykd8X;&Du3Q1ZR=7C3AD$zsP0ViS%TM8%YXr@()9+~JD+oEvRd;gx? zJ$5geP;d`1W>kAEJs%h=f(ep_vP-tH%v42pRO?q0u4QST*roaFEXFjM&Aqxd!%>bw1b|I=hf#y}fgmEOH?1s9 zOG=e(@t}el{ku=EQW1|t|8*bNGLj(`-W~l9--x>$w~lUEsJRoWbx;BRkECeY>_4MIE&aHmN|d7ROWOUHqa;xN z!?%*b|1udtRljJU7ym9qe{5iU!uS8(NBT=D+(!}*2o7XF5Ff1jRK?c7q~#S1WWtO!~LtU;eM^6eIW!T&NDf$+`0 zJWLApFDH1)hK$`0o8a)34*VlgV{HHY@>fvft!^?P{t*g-#a(9je?;y-RRbnj_ekH; z?Ghi6iZS|k2;P$$r|bs8J6z!c&S-vSNPgy|-r|tnlC<8^sNS+rpCo}_dlG^bLIKp6 zuWf1WteoCaq1*dt9>K>5b1_XGSu%+iZHe!7MDb$@t3~7YM0dT&+<%1RbrKIK4*5bq zz!MY%?{tEE(@8xD4i{oKrHvJaueuKuLTVNM-W)!_?19$(QUzSf@u~B?fhK_nLa0Pw zC&j8kHEVD9SrC(7u~`rkI>M(ASa3>Fu4Y&7f*H0*se>`gSTLSDK@u02ZUf3istm8b{B_`M;bhAhiV&!a>vs%RM;?(Pw zt(#h`Ys$^Ear^uxW*sE!&9XaEIdP{!PsT^fP~59l zjV$xi51#*G1+{&2x4N6oTSyN6%9>8rDxn`Nc4ODs+StdX)#kUl*5Y4tnLd`I963rx zwW}ikkX!HiMCncr32H5Y3K* z9kh7c%|a6drs>I+hiTfpI8KtXq3vVVbKLqkL$ROT{y6IuP_Gx%MQg3CXKQZL8~9zC zf$i~#HeHb8u?nAvx7x;5TRz$%c|f!5_`S@3!*@qNomhShMI-V==PbM3&}p%FSPcrU zlCWIfLU1;eEgxm%xG*EWDnA7@J)Cl<6-Zo4%=WBzd1U5aNU z4SJDJGE3E~&5rQ*$mQ3Ilu;+!Hb+NwvmDQM&-dNUuTQ@AuI5Xw4Z_PUSKk1#ZH{I9 zv$(XUw#VGaOE|=7ljmP(T?c!)8bqzhsIV^j4F$Adh_|~~C+x#s@J{*-k};lQsNK(Q zc09Fa^nNvjX_u&l!tv^THN#u0%7z45!g_|8U8jb>tZYB8%^(bROy#X6O&J0q!LvZ8 z`JnItkl1^6%E3Po7+lhGFs{^sr*2wPTA5sfCcg^pzMlgQ9yp%_zP1%)(_jc0e^RWo zd{?NvkNTOsJYUM72E&G~W$ZHx9GiTw)aTftZ+vX!g=Hg=gpXu># zYCevrW7vXHY0bnUXkEq&E0UO!Ai2Y%d<#NW;ZA%RNN{^bIsK7}YXVx0p{B*jVMlFD zjYqTIYmIaVkWew`wjYu+G0eH)7WpZjDEY;rrBbZKCJSeC?r^5Fc+;-4QxEa(jXN_Q zJ6HbC{O$oewV~2d1!O3{T)ZGwY&UEf&GA~NAy!fva;crP;1QhcNC7j9V5w=V%H8sV zi^^YK*x$N8^EG~PsZAh$o*}B8-Ip$&_){84D*aswCHWrvcz89d6#Jn%Q?8F>QL4(Q zEKN;baI6ALMgQ1%2>wf3YWw?blA#ro1veTS*T$R{1}kFGwrzfrb+x;bVoYCsk10Jv z(_3ui4jmgiw5~AL9g-iH`;*O8yIHI+7a)VFKIdS%;DG&;&b@8X*gtGLOX}JXpI}t` zu%dnrLZ^YNY1y`Zx^__}3Lr9ST90GZl{jOuU7{zypU2?zThDC9zVjvvRc6{XL5Ll#d&8t36R*vZ1I_ff5Ey2`o~s(1kQ#@CpS~jndLj3Lu{RO2~S$A zL|J<+6^+b*#Gn!{$064tJ<*QRj)7f+FAz;yAyz5)5MC&K>wrx51 z%mCB$#b%%?C|~dtk*+s6`Y}+WppORn8}5Q|6B-Oe7)s z^~yq}u5jOrTi?zOn4HjN7%@;#nhMa4Lt9dn^g})d!x2Gp6fC)wA z<|e`$P-};|N!01AZii?j?xL8@Z5dDl^D&g^d!Ia~y&>NW7aRZ}8t}c1JQkS*GW2&W zNp#sD{q{m+&VPuZFrJAe){OV-8}T*`&sSWk9nmYZ?4EUx#MQQSZj?P&bZ^| zk8FU)7WIM(twIb45%D}&Hab9g8~uje=s)*bq?$|3mJ9E3gwmvnFKW*0b=;>SQ|ha# zu?Cp*nay5r9jr@Xbs)#MVoCh01Ig-*VfVY#w_NZV*g18eD&gd!SAe)JR4@6ZPMR>454dKs`rymCs-GA6xg!XUYm3Efm@U`e9 z==#a2r{Lq7SGSjL?Oj=lZTi{PHm#cez^V$97{1ewhVNjzYzm9f?&uaT^ zmOD;qS(0Yl*G$=jXl^l&c4AhU$x(X{sh)Gx!L>`{*jh0g(E`>JckRnErL@iR| z3}e|SFA+aJun-7kj;2?w8A|w%9qu^UnG~P>#R_fb=0vZ6&`qIXr$u;BSO8FWAqAt6 z9Mw>wRKHO~0DoTxKDR~{D(ta*6g+Q2_TgfGmf!P9`=H2!p*n)KzbQQn*?Bw~DOB@| zl*jUV{Wal+06z#qAli8Kl!%9*`6K|0O{y}fZwx>03564Wdvzf2yMxArR-b3^;i;L1_V#l*_E$ThC%oQxam{u`LS(Ilg-4&=~nt& z_Td*xJ8y zMMGmOAfUG9pnC052pS!RekPc4;2fY=C=km3tq-pMKYcK>{LenBz7Zh_fh6i+&HuL( za{u=U|Gh$HB35<|X3qa>lEKZ*`u~|_{ON)AR2A!F(p5Xj5%BZAmcN!7Kl>v^Nk#@w zjPwgyOVU(|$S4X&N)iVpjLejHzkC-an3St1cmoL^ye%;Sij0nwhm~h0Mq|`&4%?!g zmFhf|mK8ukbN01UxrmR_cD?=1xAXnIbDvQv-_z2qcCGHv<5r1^Bo1{pFFstbdA^>* zCvlw$s^|iyY;xa8!2MBWFeMB%Moh+0`$xCsSTW0uQ)K-DX<e)yybH3RkrOCDn^yI=eS$I)4W|%yhnw6idjJ({ybw3$=pWs!`At_-)7?5K zwFlAn0(QAoS8Gh(s~?s#=!$6@*(+csWqoU~W*H6>+cUL>lp6e(*r6*H#HOEcPMf%g zP$&uN?FQo!$R^7<@1)vNw%S3bVtI3fUu0Q$0^zkCc;cx<1)Z-YEWrvd!8hKP#50%{ zd&1y*j$AQF02;i)CQ`^lC%Q{vCtn&6>`(G=bFMLzh5}X5`V&!0|p?}9Rq0CbR|1L+7_4q51hz5#HJbTe(MUr)qkG;0R0MUwa zf=@htc(&JD=3bQ7x#d&!W>lYcOyEvP{+}Yhg>c%H_qa1EVCaP}%MtB_6$*EZaBGp} zp)7_3VF2PdXdw$hr5q2$c|T8*$2>(n)nD*kxp9R1!2QooumZUIB-;5@@%*ViK%DbK zG$Z17Pr~^2X6A8+5F-G>5cw7`lBU2@O(0t_c@m680fhmH@O$v(D9eLWeFL|eqZLHA zZIKb1LiW4*63Iau5c#c`mm;9~iK3@WJTQ%~tUOWML+*Idj3cx+dM^gULfYe1o1mLb zo49<(03a{Q0<;7rL~l5Jp#Y(}e2oU6gOhz6U-YYf-W$;uGHfEk7GL7L)l z`S4yCMyP=B&GG2t0-Je=gv;4^ByWsQTyNA**iS}R1f3h#&7Xv$pf6-!8Ioj)s>$-s zj9xJx!8-k0BmA=pM;7-Q_jNbdP;JmUBNWW8MjoeS1qPvCSOQpIq`%{!M-{}-iRN(! zXb41S3s#LD+UC1Xub2D{KQdofe95O4VmS}GZW(VJZU}EB`pJy}KUk7e2CDIkVGmtV zU#UBA%>&Q{#(wc0>fI3@vdZtGbXfhhmNK#r#66C4xxU8`NCiwO>{Y!^zA#x*C}fZ> z!NkKVKr=#Fu#073$dw&~-csCRToQ`2N_^vp6s*h%Swh)rz^1voI)Ud!pB$9Dz~BvY?#aDSdQ$oW2?hgz5dtAeKra22MXaSz zp_6pRDeg?}=zI|p(|_q4f^mbUbhVSs%*yRmwokTCcDU~rM05ppfs^@QK9fDuJo9*D zy$AAwYP;MfzvzEye+l>_e$#zR80FPN2*g9pLXU+C!eEBN;uPLm@3V1dRk6j}d@)!L zTN%fCcD;nZ^fl*lAy|MMvEV$5^3_97CQ?S_?gY*XiSZpLVskx*5Lg?jeK4v{g$XfI ztRpmYM@GaKWZ;BB0%W{zjM&h>A?)Um5V~2oYJ@*9os+)NJHUFPa2q0ahFW0zNCh6y zJc}+5p}1o#iY%m%wL}OGk^B(_qfUuseK`4`&SP@x`BIyb9Cu@!O_DA ziTTnT(FLLdL0n09f@^>5yobQf8_Y!%0B*&hH^I)ZhO$EfS3 z_@??sW)FQDE#Zm&6uADhFNFOfFvR>p;sN;$&qkP&ASDb$=-M^k4_jOAyrZZb%}0r{ zdd>Cbpouicb%=^H=z$>g(HCuHRO<#+Bj2D9HNz0oaS86;#we$Q=;Ub5htu-LoDYnh zez%2nJ^*Nkf-m=>-xnsvmC>`tL}<}q?w#n8sfZT#Lj+qN#KbQytq>!_2&Z!3T?iCX zk=S#EDd&4sTZ_nTEE>in{`uCTmoU4PjhSjk#eqaC5x#7pf1~bWkd*r@*z@&U|H#>A+G~A=AZiyA<4J zwe55_+e!Q(jON052TLhyt4`xJpjB0cllnKK?MC3$maz zXq{HuB*-{=U5?&m3Bcnc6U1&(%Fj`Hbf!mqqT!AfmML-j8Uv0%hcIfh3Fsr~BgPC> zc^jO%B*^08HK`h%T5GUn&o;Pxu?xQt{W=yDfvE1IyR=R-sotRd-^FjGjqQH!&1Um& z#PK9P6s@Kfmra^#16Qn>q=5rm1W<7;%#m(obDLr&Nh2wR#WYNjz#Uo;(rM(t3X5l? zT=;fYc?es(WdxurLa>&_c0x3Eo5q>K7t~*Y3C2=MZNB0CAW47y2pUSMm5Zbre8Z_E zFHNVG^7&y9Up_%IGnal0E6-8SaYd(=nOoH0QYZASIvkQr)OI;~eT>-a zX|Y1xh4tDZHdf^HOIFLBvDViQk`DCEnwFEqU;_9J;*SwLu?wAM2h%|{4R5wM&Puqb zyP(LCk>-Ljj*_GZ$;RXm(7utPJc)=#hx683Kus0b=7fo-~)HnS?7vPz^?!w4(8j{EH!dPG@)S-Y;f(%+Mr-U;}3FT=jV1%C? za~nf-+9yv#3Gnw4O1B@ZD$e&t)qn+1`BOI7BBC!b-AYF|`Ft6)GwVCj##F~p!clC| zNpL#2WLiXPa$wRBFv>64M zPs@x+(E6u z7YC<)nR8m5sm5@9Nyu8cP+T@MEe8N8{8N1C1}BkISF-6L;6vs+#_+RI-R=|=ai#a= z>6QEbUi9Rcs{!fl+@9{!%iwllL<6GkP3iCR`TJ?+aRE9xV5PXy`){1+^jL5n%iMp2mEK1sN zYf|-?jhJD};Ta=YG#3$BdAO(okhnE`T0^8af7ss`zlkC#5i4J}tVV%{nCF5AthgJ9 zjdTWULwlfS$)TVrM^Kl4ajji=p^hhGFOOoY;U{qBG+-RF{ZJJlY;J#oE8VAy zfl8e~ABF+>0nbb=Z{eRuBiPW-O);)TCKw;?Q;14HMa}Fb(2CWC!Ekw@&1PpWvdTVL zNuzNtTGU|U-}1G5q0!?%6gT%?*Ms(kvU6@@*H?01d4YHBWGBO@x3ZAoc2PU&pw;vG zdi9&MO@NT+ouHZ;iO~SUd6}5>EnC?#AvP>&z~lzk8eRkU%YH70*%_FU2IeWwZe!0?BBEtm;covM6BVak_MJr2 z5p`L6EWaGx=i4CAf~JBVu1mbfO`149COP8%G_lq03z-xIn8h>*9umnqf*Q|ia#DyJd{-j^V zm=WpHKGkJ5Z;Im7=_iWss^1@Ea0s@-dPmD{KqTajs}FWB=-D;yH;CEgMz)ZezDLWT z1}$G~W{L+!|6;bW)3i|wvjN%LXO1>o;Tcd}G!|;yZ~ou|a`#(& z8&%o(bvFM!)#*H9G}UGY`za7}^Y(ItztQTj?%ERXi~hDBoin%A_Pp~t$m{woA|rg9 zX&BFt5*kOtTDS0Q&1vP~`2^+DtdNlxgUyUzPY}y(?#DiQid3pKNw>=LoV-dmcDZl# zK$Cy3>AFGJz|zh@Gb}|^{CmsXB$#nb!dKO_cWVSiz4$;`bHCU~m%ka)M0O-KqyHq( z7_AgN0!XIQVIj&Il*3bHlhQWtu;B<_YqPTIvl;k@=V)Im77DvGn%1nLy{4quB<7*9 z$s~prJro~FYrK^FP`0Rrn_J1FU}G~s*NxigM^ym)C%(nkNuFT5fbY;CculSwEbr^O zlpFhJ(Q250-@%Tkg%f`-{x@11UhmD`<+E;=+eQs;zkK>2j(bS%`Me!zBqBhyG@}MM zce@HOps=b2BlDne9#9b=_T8#~vS`9jSqSDAmv?v?{kZHcufV-RNb(suq(Ddpc3-%X zA9lo@LTVg|kAsd{am;kWF0yMFDOnJC#aT}wvF2{WJrn~e;q^SG>4yMM%mA2HuTSym zz21!FdQiBXivAeVd=YgxT~M5Yw~nRwk&-Lzx8r>sD%O<+Oj;K-b!s3;Z*kbD`wOy%I+@8 zOR0_A#~)Xb&%0zA22*y-ZEKt*x4c5}yh6%O$sQnw=~Ov`a;4Rn3blE%6oe!mgW>M7 z4P0A6GwrcX#exW9BUZL&OFzj@)3R&-e(Y-GTxQ&i9gSLrDn&9PU(Bu_o8TyNeh(<; zFlpkPbqT(Z;of_YeLao?5_cKhQRG|SZL9C;4=5d&9TrDz${n{4T;X{6**-iiGhUuo z7@!~OCKKBGKGd`k=ylM#Oe7M13M{#AMfIlN40h6{uc|RR;Pn)rlwPdXbbiS{!Nd!M zo`i}b$(=j?fj-%Si+F~TpqaE4n{3R1Lf zhtU%Y-jps->ymy3w&+y_)rkz{&Lz7o3~h+{!7EZIzVD?q_ZwWeXqkHZMT_Scrsoz| z4`z=G9#Q5g(s&{A$F5gQGer6%EVD{-p+f)vYN z+qP}nwmonDyYJ=gCT}{}> zn;6qTBIbMi*i`P^F9|w&mb*QdOYNBl!#)nw((M~_Rse2L_WRHIJB#+ug>=Fe6Ed~1 zaEAAng;R)|3Y6F|!2Lp%@wIQa^K~yV#IPs=IvlLI+g6?}1hJETPH+wnHxho?T++-) zANYp>n~W>X<3v;e_;QF2F{7RS@r};lgP>r49<*jCm%BogTY7&<5LM7h9C}yL-&X1N zE$VrBC)ezN5f$5fi4T;icN2zx4#3NLipw^R5f$aJ5?CnJ@zOp5qABTvsCyY-$?6`HA8@wo}DDLkN<8AFTB4$ zcAjfI;sAI53T9LCVtBe$n>IT7tTTG8sci|?at})aD5mW| z-*Wj!9Z}mUv!13^O5{${(K;xedG>U=V)dl^LI+nBCefcezyEH=%DVpX6M#uwqU@d0e{2ZKpDNRnu7HiR12VV(19oA2e#dyVe zLdPGVOc2!?%goBeT@qdcqFCWrP0%YdeICL^MRiBcZgf=T+B!>3ovtds`tw>B(FIC= ztbV4xrW_cNU(so#nAeg&kH^U1D;v|4INQKKf7ExCW16W_OhIjTDX=vCeI0_jfDl2# z4itA+D-skQ#i-1W?F$t`^oVZ9hqVfT`Y>t7Qt^a(|N4>*xMrs!^(~-#X)q0=K4@J^ z5%%i;>6Y_#c*{*O{xCSD&&T7i1FA%KK6ZHhbB5Rb+8=UwSUPzG9WosP=Yyy5!Cvq~ znEOM&hsoBglkaLFR7=wz@b!n9)>XJaicE&l*oe!HP-4kb0&UCX6ma3h6`~{|p`TG# z*-K_*8`3!zq(1Jphk`V0!IV2wa$=)#S2}pWbhMcExHO;E24Yrgtg;H))-8XTCR{^C z@)u3bMTmsr3i^Hv)%f6+uDbT-Sg|kv$owwCy;8PQO7`_`=>F%z;Yp|_=}&;fWv;R& zcI-U{`pBs|{Ohdr8SVkF7Hq1_z8?8DJF* zyu=g#t*}NAJ2B-KMO#tj$}sSI*?QD_S!A7LX9DoLhATv7!o&eebj_~ylJ&~71$a{l z+f+@PYSWD=d)mYtSZmt4`IT&|_PV!qjkB+ZOob}0*Y_fT{C!#hZyAQeJ&;f_{2ULe zxifjZjlJ(;U%*p!DzP9Wp2nYW>;AUEzwxBg#BcjR`Jt+@B>6^Ub^D$QG~2X1B;VPc z(mVtuL$skhQH2pH;VYpTLnUEg0c!1^bNE6_968*~m@qk6PG zI`&u=s+u>hGH^4rGqzgXVDn)u`z~tTu5?-ksD_QONo1Qx*%zMA>E_iP>!TOs;R#QM zsqUigvhJ`CJ`R}eKi6E5Y{V}_Q@atzj5T@;$*+TTquNA|sj*U9*c3g3apjl$5$WXU zV54W>5KBU9w^*7xR#J|?43@40TVZyv+6f(*n2_25W!-#sx_vr5Zg<7+hsUzA0=_Zx zo@c-ELIiMku{3)if(G`WPkQq0b9wf;DuF3Ocu0haB3DH>H*o-KkhYORr_v3W(&Q?G zIG`BkIePX0vmo!<5WfRmBiugIBQs7xMm!0gP%UYr-udM)Tivjx|#<5>} zJ#KUA%;sQat5@rG%TscEjBeWJsi;bxp+hpeU0$rQtQ$B)eg=CG%riUl3yYUZ1Dw1l z2BUs}x=i*C#z}~l_g;a|Xie^F0Xg)59b3Qn2~)QV+J;vXzMJ=|hy}Z>>&)y7yc8<* zi>#7rsJ)a`bU&@`UfyAviEEGZ#32FGsrX}9Yw7It=O4mm$nGqD?IyQUT@B}Z$i6+| zhifL7NXbaaP_cl;9h@AZjKhk=RWSp^FQQgRx2-qhTQyroUR@0$3lk#Kg{0#}Pv|+2 zhX#qW;zp`TtcQreIW}7dx+bJIL&Ok<`myL;p^**jESs|glTvBYDQj?YM~1LAAx?(8 zxqM^vslR1)?$9(`C;$DExR&j=?N>C=0$kCer(WV@C#>3G0O*+0`V3Q64kP<$3gtOo zrr8KdJbSuS1`*1Q{pdJ#?p*#c3;0P)cX^Xt(+WE8H;~~*JVeCig+8?7ivKaBE2cvn z1jbC%!E2nGw;QsgVj6E2z?C%7c=0n};LEC$J1M3pp5^@}dp94W7i1k^W45Clts7TM zSBq=Zd=biz&RSTyvcI%U8|Fc{?f2hZy5(DByQCqTsSF*4OEFmMuvlpBph-i=c$*oP z#^!MY+NhI+$qH@ze#fq`uP;9EQ}wukC^!+o58Cd(8QyAg`|9UYuC%(JB)P~r`&=6L z`I>HRb~887Cm{KElwP1|^E$DFvEW4ny*vRC;n9&;h(nPwgKAzV6H4A9nGXg{9CQ*I z+K2>_`w7;Ly=y64f=CD^jD6bfo1etE6f097XGz9&XDXT#ZECz%?*-DRP}sfT3qF`r z^5>!`)XL~l7<7yAZb#tZ4L=0!mNt|3XX$UVYB&Ok4QM+ITjlC!rY_ON!xPuMUe|sW z;%qM-7YI8m4gRB4koIZgpE>e%V0gjCKvVHtXWg4f_*(`pA@O-L7@fmd2Dxxz?@~^y zSFLw}mo|P^aaZ-1_&wam;K$}`>H*PHZgKbUpSIh?Yx)6wZ!xyY4VzbLTIpltAe<~q zSKptqTic+wqTZjlQQlxo? zH5BzeDP=(eO~cCu+EX`vJh&4$Ge@LDw{cV)hS5+Wq2W(RZ2TI?rfi}SdqSBNr$$rq zU-Bg2(F2X9v1f4sdNK6w<+tv~F)XfI1qC`YrU9JpwY9YgK_vJ3ivzqCdGAmY%B|w5 zyx)cN^olNySkwb{@>`&1hE~AbB6|4IemI6WFx>tQ+e2WtIIlZ)CZ~O~5eOVT(AfD& zABRBub1A5vN2&vp!KZ1}$-@z@#rL&IF-z2kvaWR4vijX$}zj@mU}IUQZ@Ivl?~ zu|IX4hJn1>uS-6G+f!asoJQQ_MTw(y4jZw!XUsrB+EHT*kJ!@q{sMqT>Ch4ZPWu6o z!!4F35p(+|IUVMTgxP^GIh>u@h+Qz-huk6x^^ZIYQm0jv{1fmRe8ViIT-pgJ>qzw~y<6RV}( z$ASgPgkI)rEL)kw)fbb2)@$c8By1nZES1j{AQI#s;18WdrVpZtVH_&ZQ}X8Z&})}l zg_6e!Oy?%8#Rw%;BtTGl0GS>sgSxykfKqD_DP44yNDV5Zh$kd)BSNgoo(UqT3$_S! zL#rbI3#{n4b#yEV5t;$>c4m{aiQN7-!-%*i(k}-iH8>8~+(j~%0*qayh^kdq)<@kc zxDdu_%3?qr=XC}s@8@mA*6A_Jp)A`W+vExaJqT8p))=OJ=zce{?`^M^xF04wNm{Qa zWlvOR6xAAJxoEYJL-tSD;jl95v;mLx^`R=2L-Epqjh&%AHOGEW+nQzB0eq&%hw#h+ zjYuVkcbDv;K@Mqrz#>Uyt|AI~KWkg^m&jMH@NM~)p`3nPcKcUa`%FE_UGrR)i}&gJ zIeM`B@XM-_zkr@26Dx*MI$^K$F^_*3>(21^XH- zKI5&!gyE#V$dwy)G&^a38VAaaGE|+zM53HQScH9n4ATKa4EPKU%tB83uXnc!ZkLZ} zbw8_3ukDxhd_?ofieBwZ?c&tRmO|E3MT}JB+}E$}QOvK*M3t3KyEo%&+D9@V|LaN5 z@=Pk(wA+{I+S&Xq^;jAY6Oyp{%BO8F$zXQ7qL}4tY)=}|K38RxJ3(QE0QhQv29!w8;`sF&@boH zL`QmLlf(0jDbVlt-aUZ%s-dx>E(tB`*jXG+lG#iuq^Y!f6 zEc)**m&ZWqR~KloQiy=_|Cw#tnqbIaO#=1RwkhjT1$ zFgi7D`;U>^#8=+2;8h4cKF73$LGg%`iZ}mbH4+1j2ru#xF~EYF^+4%uwYh&Ut|>`cp0Yc1zyC-V7`@+t%J&j=y?#L2&WBb+ zc4iqn(p3oL8X`IiPD%p52Nt!qoWFuAEL1pZw|>s3@PogBIcGX=@!r^Kny;(LVt8EL zM5k$W0a9iR5lb%foE5?AEy7o)oJlrRYRXoYHk2&ZAdBsE;yK8yGKEZR0S912dmSiL zO5S%bPM*Id^6W>xdh!EE}o(tX;=ff}t&(jtCRuky6*sp3;9_RZFqP~}-Y!-c+ zY|Ex|<-WC6)J2WM66e{x$yrPM*p$+7DFKfaZx-jayYQoGk9rGo!0pbVfPNb1M6Oqq z4JCnD&zbAQb*Ya%m060?q-_k8{jJV`F2jpgqrlqZ{HR0*c{T@z;xe$9ovg~(laI1#&#&5DIJrKyJ%Kj8mfsHj8w4 zkq&Px$V&_$e=to#68Bl*20ub^)(BKd&!NAM6}-Y;rob87g}#YWjtaO z|A%|cnGAK7)7avQ4s@1xtZY@=Rr30wt|k=vwAV{Ne|31(*Q`Ky+zK9)Z290*_-9ulN&~6Q^aTCd}_Bg8ol67xy$TwOjJ8EP?I zJ*_AGnM5Jglvr&GLe}2*-d0DjJqTjmjammnEsatG}4^JkZExFFx|+T|(=hljm7kRgPpVDt+%AS9&V z%^e?Gg$rKG(mZyCto0=vxRX}=JKo?t7rk&X6>6xT>oh)xLtK0(e@LDJVM;O>2^7(x zYa4~*EKIQor2fFs9RX}yGocL1TJfwu>N$CyHg?{|hd+PLnn6HsZz!*|xowO+D=?l?`VN3GB$ zfX*7m`vy1`MDK1-l>Iu#WqQ_T5;3IiNReY84-$ytV}Szhr{8P64I?0ii0TK+!>0rx z2npZ|kQ^eHfWE)o$t7X%IIOVf&!eT%tHwr{zYJ{34*nON3)5@u+t%BHg@aW>*bCYS z=t58ynP@SwWh@SsHZfM3gvH2Wayjm*)F8TPwOX@ggE7jMZO1SW$Y9T4p1ao;*<)^^Tr9eNGWX9)$1V!AJvn zSlE^R+`=@SnH<|pA0=pJuVJmh7A5;o_)|dc&KBCatjNtb$G$q$JC_}BpgJcUU{u4? zOE1)e4S0WfulO(Gi=GEO>O=eQy9;}oUvU)Xsjy}jpo3;iRVQo9ejJrMzBqV9l&mIO zgOmN~W8uCTN!423g6Fxm>>{;}R?BC2eOAGf(c26uy0Uc_tB}|baEh_=rv1(-=K zZo|Iw$1*VFq?$QX49ylWPc+Y$L8l4gr>LR{9m&Wc>uyNsBuL0)T3vjOtj^ln@)7uB zT1&64z3+1nhO@KX$8=3FK}gT@fSKgx?R%o9X+y+8;}_r>keHw zK`hVFgHK=96cmTwZiF>O@IT4m0(HJ$$?|4e^xn3gpFOV4Y&uKFUNtg|aGu|lYADiY>t!_PQK32})Z)2v;>j@SS zJQ1)_{fqY%i;d}io|nfRa|x8N8Hk|T>*}K=zC)-t7HAQaBv8|Pw3?izA)UpdLzV^$ z306Oaz!Ga9*yM*1ES?ij7_PU6Gj}>4XB1~&Bomg>iEY_oY1C#FU{!O~8r7mMN9nZ$ z`H5VQ__E-VwY-mr6Ouo&L?6JjvYS>DtV#e`d(+RQjAAjj38;Ft=~o6#tJy4@!rGPX zMWvb)h-GS4*_yNNc(!C5^(1+s#o!{ zuYO)Wn7k<6Ed9KJWFwOdr7*#a`Ysu@bPTm~DMU}tPTkZ?wFKJ zNKa2ME+wN>-wwO7y280^{AgnByczG-bC5mx4>?Dg!Fq5*%cb>Z!t;*l$hJsl5el&cc>zM`C5U6(xDfEfSUgqCS=CKruzGP3fX%Wwc z_bV9fx^~7n5AB$rbbZQu=v|vN&a_bYJXWj4hS!5BFh>S+GGNIvg1K^~xjuGr7v|4XB1-YLMW7nm~ za$}ZvjNzky$e4Wh-&4Hos>*hMo1Qwy&cyW1EZ&zP5OI~ZCTpmw-=MOIAIzb|{khO$ zSaDAe{af5}?@l()erfwRsKKm!z^^odiCw)g7f-K;Od+<>kkB73XUX8oCFJ>>^q~nN zkKZfq*ZB8cskubDfS^Thc&@o3Co_Z_G9sL+gQ4!<%08+pj~ne7e48xTKb4p4{t?sK z$TOQyi(=p$u+M4+(6c%?vrrk7LbXHU1lNjP)T?>otR+1?^hoh{foeI$F=caSdrsy{ z-0b-jX0lvC_iS`m@tOnJy3q+v(2m17c9>w|#OV^qHHCJXDLPP8h=xKarjSWQ$|1@! zc~H87-?@tJCU2px zi3ax}H3-XWd?qxYl#{-uQ&iw8cIfILMMl`Jl$C|~vC@LO3Re8kErj7&pVbk&Rvsqb zDq7sZW3Qf(=vl=)A6(C5S==h(0Vb~}I5%@g`qf~-{X>yjSnlmIOKEhUiG-|uh;QiM zslNqEV}6Q@#XK{pX?ru$%E5(gO{wINw;fhCp~|l0P}ciH`a^zVe@S>+I{>es>NxG} zSNO{G!qVMSJDPXYHI`@Bwe`2oUF@~=H*GsK2hm7`t$_1ALr&SmNrV$>=ix4QJ7zm* zdxew7YryA3yF({2P>Uc7YgYm%{h@6gC&!R}Ef`%5vRgU(XyYXdq6VCi5qSS&JQ_z@ z))*ko(>|d+iBM0D>T~t4hQtEeC^K(ahRy|)raK^S2BQ}Qw1l#MSOb3i zycx1pp(5^1!Ag6e=l_UlnsKAg+&Tc#0-k$Mev=9i#^*+VZ>5_3Y|J1%uZ5{1v#w1s z+w0y>1U}k$ZliCnZ05fy{MtwSYiL#PP-hV1ek|}%a!K}vVHvO+usirV;4K!Ntba>M zHe3F4fw+-CpGLn@HZQs|1)X$u-a)~NoWwF8oMHg*p6+s%Vo^Z z&PRrHqQNT&^wI1_{ep-JkPw{$8D{9pp|ZdFrXm?nL>FQbR|zpm#F>Wb2YN`VDy#?F z%POpg*cAIgRExG;MFAvf3Joc&R}gl>A{vE-UF9OA7YVZAg_ugP{oDXCnFq2#gqSMI zv7v~l#s{|XfT#w1ONFQ=q-bd)sz+_F>4W7*qJ&ov(JK-+s5CH|dZI^@;Gz$59JkVu z*{7tzar6Fr^O6@6FvT+S&KF@lytU2_jK2zPZohGCl1pHpMk%YSZdfmuy~mCT-5`Wf z{L8O(X;KeV#l5P&@;7DWxNea0TSYCU4=UPRxT^z*%27>!`KR)#Y5hozac%Vdbq_NT z@XdD)gBtu3%Ma}zx){>89K%|_`C}heAYktA7Yxh%`wO&ScX|_{f5rA@F*2sh8BKe|)(vy;jy?Ru8o3ZbSe`^UPKq(@TH%PA#wxIusP4fHv{lGu(`U< z?U4T5L7s=N%&-V(m6jY|W?-cKB88 zE9eE<3ScZPt*v(PxX&B=UkN<|$sD6C zRsXUSB_ma;6ttNxx@@xAWM2D?w|?8^xzjYvxY7py(F#0EQBxZ-r#W=HKF!O?cX9)R z6wUfsn$CS5qrkq-s<0jBSX3J=J6d1cI4S(;mjO@g{^-~!7rs|q7L;**hX3ipuuRIcM`4!u6N_s1zE?2qDF zwC=JcVrI`QPF+Qm_`G%iRo}j|(cotSg~MI&vlUU(59S*nUNZ+G!5?lId7yfJB)Y_-BvKP z>mM6kn#(Jlno7^QBgG1eUuUk}1&&VAp<2p#G}l7%xF+;IJAEeV>?&~44G8BgO0Z4? zrsyteN$04M$$Ca5=eP?;uDbc>bY%H=*3A+sF>?soE67%7Jv2*qoSoxGuURJf(z=O4 z_z4H;KY4fs9e`1;8$|Jt(FM6d+-I5SNA{?Xrg$wbkDf8SD%?KM2L$a0Q>nW{8G3_o z$9COcFnPm1bK1xGo*E<1VKxsG$aU>$HF8c(fBIiqZrY@G^5&}PuRGF`nj7YplnZ~U zKQ50yWuQVYEfPx88Wr-OiOK!eZJ|p_{J2q?==>8%a!zOS0D16@eYsTyip2J z%+UnX`W;fyl}MB-U6TLZn zKm*Vt=hPAN8Ux2dqoqdvf`%X0AysL^xWPVF7(b-YWhTuI?DjhiO@=-!&G80rx~w7xyQ=QjOGQ`xLAdghfOt(T+krxx(}TsZ+TEV z`=eT3EP=_YRIYxBq68!dS@5#2wS=gF7KLqx+QQd(3Lb;!<8n+=9%A||(N&Z6Vq!dpyj01n^%2gv@h1zEZOI|dr znKs(=J;OdvfmWX(&v7Yw>QkFY)>~kDB1?f_r3vil4fhI{`+_sT-b_^WpQx&$tfuIP zQJc||xtsh(`Es_kn|v+jY7@;WgE|WqRRC4Hzn8t!zuKh zj@38$Yz(+OthzEq>io%_rDjh5Dzw%Xw>RfJnHP1|=hkUdpPL;Q(#|zD+K-kFM%35l zNM@`x>)NZ@%$ji05Z@hp3+-J*ZB!i)>XW#=q_z3mTDnM9NnYf5%Fhqotfu;&uXm-| zI583fEL1==HT zy?(t9Rl&1p4aI9KGWOA=rnCCpjTj3#npovliC-LZMO2*|U!;;RINgt!r7wN_*4vU}B+8Qcg zH8S!f5$=nv+Zb1yimOV%gEi~2Az3K9@k{}z9fkdp9E1O+Gv39-Evzlg&2MZbkSI0) zZvG8N&H})=umGJNmR|->Xl`Pyxwgtwl52FwYuqpjwqa z5+U)n0}AJ1S(YO8dt^y1B5MsUFZuOWwK_Ys(A}C_WRQ24E-&p}_sxP!h05;Y&eCh5 z<{u}$TENoUVwcaajbC38ZC4EH^(DwzZbr4@doU`9TOS>dUaH_sg%lFXBB?Pw2h-qO zANk8!9{9MNojr}o&ffPt=4GYY;smC-o=)oGST&wkgmc=)RS(9%*ERXKokHI+)ke2* zr+HN;;xSd!qf=(cQyKhLNElfQT?-aEF3e-UzBoU#wl-=Qt31=X*~Hfdfghn(#fjO^ zNTdERNxN38&pll;qg@4XMroLUYL+~A;JEsg$?K!=hnv1Xu&#jlIS+9Rgr3twyD68 zF5rFY0}x6ph!kE_W#|4O6idR$aZE({HBE+7FSlYT{5Gnb2*^gjjgG$HCXHICme*le ztHPXM2R3Gg&^E#5`_fb#%b+7x2)jS0@%oRm!pm-R3V)=xs-%0D!gm9cHkhL4XgIuF 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 diff --git a/PaperBell/Outputs/demo/Index.md b/PaperBell/Outputs/demo/Index.md deleted file mode 100644 index 5dc5940f..00000000 --- a/PaperBell/Outputs/demo/Index.md +++ /dev/null @@ -1,169 +0,0 @@ ---- -cssclasses: longform-props -longform: - format: scenes - title: PaperBell学术写作完全指南 - workflow: PaperBell-Standard - sceneFolder: source - scenes: - - DEMO_引言 - - DEMO_结果 - - DEMO_讨论 - - DEMO_方法 - sceneTemplate: 40 - Obsidian/模板/学术长文本模板 Longform academic template.md - ignoredFiles: [] -title: PaperBell:基于 Obsidian 的学术写作管理系统 -subtitle: 从 Markdown 到专业论文的完整工作流 -date: 2025-10-11 -authors: - - name: Shuang Song - affiliation: - - 1 - - 2 - corresponding: paperbell@songshgeo.com - - name: Sen Jiang - affiliation: - - 2 -affiliations: - - index: 1 - name: Max Planck Institute of Geoanthropology, Jena, Germany - - index: 2 - name: PaperBell Technology, Beijing, China -abstract: 本文介绍了 PaperBell 学术写作管理系统,一套基于 Obsidian、Longform、Pandoc 和 LaTeX 的现代化学术写作解决方案。传统的 Microsoft Word 写作存在版本追踪混乱、输入输出分离、格式调整分散注意力等问题。虽然 Markdown 写作具有纯文本、版本控制友好、易于自动化等优势,但传统 Markdown 工作流在长文本管理、导出格式和手动调整方面仍有局限。PaperBell 通过整合项目化管理、数据驱动写作、智能元数据管理和专业级 PDF 导出等核心特性,系统性地解决了这些问题。本文从引言、结果、讨论、方法四个方面全面介绍了 PaperBell 的设计理念、核心特性、配置方案、最佳实践和安装步骤,为学术研究者提供了一套完整的现代化写作工具链。 -keywords: - - academic writing - - Obsidian - - Longform - - Pandoc - - LaTeX - - knowledge management - - workflow automation -target: PaperBell Documentation -acronym: DEMO -csl: nature -lineno: "false" -figures-at-end: "false" -titlepage: true -numbersections: true ---- - -这是一个完整的 PaperBell Longform 演示项目,展示了如何使用 PaperBell 进行学术论文写作。 - -## 📚 项目结构 - -```bash -demo/ -├── Index.md # 项目元数据配置 -├── source/ # 章节源文件 -│ ├── DEMO_引言.md # 第一章:引言 -│ ├── DEMO_结果.md # 第二章:结果 -│ ├── DEMO_讨论.md # 第三章:讨论 -│ └── DEMO_方法.md # 第四章:方法 -├── imgs/ # 图片资源文件夹 -└── README.md # 本文件 -``` - -## 🎯 内容概览 - -这份文档模仿学术论文的结构,分为四个章节: - -### 1️⃣ 引言 - -- 传统学术写作的挑战 -- Markdown 写作的优势与局限 -- PaperBell 工作流的创新价值 -- 本文的目标与结构 - -### 2️⃣ 结果 - -展示 PaperBell 的八大核心特性: - -- 项目化的长文本管理 -- 数据驱动的动态写作 -- 智能化的元数据管理 -- 专业级的 PDF 导出 -- 完整的引用管理集成 -- 交叉引用与编号系统 -- 版本控制与协作 -- 可扩展的自动化系统 - -### 3️⃣ 讨论 - -- 常用配置方案(快速投稿、审稿讨论、修订响应、期刊特定) -- 最佳实践(元数据管理、数据文本分离、渐进式写作等) -- 进阶自定义(扩展占位符、多语言支持、自动化等) - -### 4️⃣ 方法 - -- 前期准备(系统要求、软件安装) -- 配置 PaperBell(插件、模板、导出) -- 创建第一个项目 -- 故障排除 - -## 📝 标题层级规则 - -在 PaperBell 的 Longform 写作中,标题层级遵循以下规则: - -- **文档标题**(`title` in YAML)→ LaTeX 的 `\maketitle` -- **Scene 标题**(`scene_title` in frontmatter)→ LaTeX 的 `\section`(二级标题 `##`) -- **Scene 内的标题** → 从 `\subsection` 开始(三级标题 `###`) - -这样可以确保最终 PDF 文档的标题层级结构清晰一致。 - -## 🚀 如何使用 - -### 在 Obsidian 中查看 - -1. 在 Obsidian 中打开 PaperBell 仓库 -2. 在左侧边栏找到 Longform 图标 -3. 选择 "PaperBell学术写作完全指南" 项目 -4. 点击各个 scene 查看内容 - -### 编译为完整手稿 - -1. 在 Longform 面板中选择本项目 -2. 点击 **Compile** 选项卡 -3. 确保编译步骤包含: - - Strip Frontmatter - - Remove Links - - Prepend Title - - Concatenate Text - - Add YAML Metadata (Note Name: `Index`) - - Save as Note -4. 点击 **Compile** 生成 `manuscript.md` - -### 导出为 PDF - -方法 1:使用 Enhancing Export - -1. 右键点击编译生成的 `manuscript.md` -2. 选择 "Export with Enhancing Export" -3. 选择 "PaperBell Academic" 配置 - -方法 2:使用命令行 - -```bash -cd Outputs/demo -pandoc manuscript.md -o PaperBell_Guide.pdf \ - --defaults="../../40 - Obsidian/脚本/Pandoc/defaults/pdf.yaml" -``` - -## 📖 文档特点 - -- **内容全面**:涵盖 PaperBell 的所有核心功能和最佳实践 -- **结构清晰**:遵循学术论文的标准结构(引言-结果-讨论-方法) -- **实用导向**:包含大量代码示例、配置模板和操作步骤 -- **可操作性强**:提供详细的安装指南和故障排除方案 - -## 🎓 适合人群 - -- 初次接触 PaperBell 的用户 -- 想要了解 Longform 学术写作流程的研究者 -- 需要参考最佳实践的高级用户 -- 准备自定义 PaperBell 工作流的开发者 - -## 📧 联系方式 - -- **PaperBell**: -- **Shuang Song**: -- **GitHub**: diff --git a/PaperBell/Outputs/demo/figs/formatting.png b/PaperBell/Outputs/demo/figs/formatting.png deleted file mode 100644 index a997e76f39dc7f2f57dac49aa770f31e5104fb11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248402 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 diff --git a/PaperBell/Outputs/demo/figs/switching.png b/PaperBell/Outputs/demo/figs/switching.png deleted file mode 100644 index 593c64738564455398e5945c0a17024493d43887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388836 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�*PS93uW3}B9ZC{(-zxn+P3nZXfLZ$x$vvA6q%TUczZiD?Jp z1_Www-kn(ZDiHq~DniwDKaerT9}j}g#MoU6y1|?t=jH_0){FqVk?9AGz(Gr>9)G4K zZKkMhDv^r_Dv3W(HvB5D<)FPF%+@0QD%FfA7k_KXvX^0$r~SwNZIUDm3u0AGcf`^V zQ1ckF0R_3xF3XN`yZ6WibH_$tErcBq1kC9+ZFzIDI|5O(7$3YQ$5Dm{pQ&2}d_F_Pes3ksGH@ z=6DslJFUQ1<7+?ls7nmgR^&q}xVX>8%6FW7N=m|(?Lh#Zvh$XI#A=LOZKUm8lUN#u zZQWS)n!f^?m#pr&BrhBho~bdyE0BdE#2cI2Q!9a3lH6(6+yRT4I?#Iue(d!Z8!gU- z4`ZmgO3M-IFDS^%y24(QN<#DMHW{U@YPhlIUd0HcC3JwZdMYi(h&w?s!@MfXmVv>n z{*8st2GU-&d&pPP$}6HqV+q%gmUerwl>G)`59GKgL>dg$JXAAg*NaXVKPFNk3<~YO zZ}||7Ecfc2TsD|EZ&@JFmY$H?IxDFc?+WyB{3l!uV1QSCWDfBZ9H7a-4&4I=8D`== zgY8WV1U77?3)40!Q|u~pS)LZVv@@7GzkN5--uk z)7@8=$;+ydQIN7S3#uvMDAa#^{LZ{6{(WG*&OZZOPMZBKvtzee8%o`n_^Yuv<*}-f z-y??Wuns?aa-H87Rwq-jnZI5u3x0E~t*BfOzq8;2)tbesF*lG>e3PV4b>?Q|lXN-! z2-N_|W)T+uHz>xqUmF1Xb0MthXB^xD;6t54#A`IMbYz6#Z2{LKt>**Sg}o` z#gV`bGc=3gY^^c?WUKqXj<&kM|8k?m#i;q0R_~77x7ueP^JZz7%#C45VOchFw0Gwn?##; zatq|Mq zJQ}n2ji%se7X}3aJKqH+xYmSIYN0a^b(G_%kwc{Jk{I`$)qj_q|BaR2g}#@h5uGZx z5@RYX?4uM#j$Gb+wSvD!w0Xlx`?GF>My5H{lrJP0@TGL1fE2Hsk9-uji4ApMiL+r= zIGtuV!-CIA)mu2g#c82J2Z=xKFH{63JElBu1Z&=oEpi*p;NPM(Mrlm9 z%73G{z3xXQqK?z_?!YR%ce6Nl^DM&Ns1jsRHOLcJ&B7<%6OJckIOIHOf7~{*>IVRB zFxaRJ5M4DRsu8Nm!8LvdU|fdksh90bmrt48p}CNL63xLk%-&I3>`~Z$-J&p+zG*c^ zX$5n>f3Ia)$!;U(rH?CXUKrbYDy%mA&cThublCKzniIA1 z<+_v|S2LDrVvOmwLpDs+kHj(|X25so`c%oO5;es+`VEm9{!gyccDXJ~Xedx8=}TO3ibth(gnr|1kJ0jJnZ<}=%0xQeU&fkG5S~k*VVvmLSxs_ zCxS?oDs-Hg=zqx2!5@sl`%8vH>?QkuV$avG@>W}b!iB#0QC#P3;u@lEI z`38#NQ~$`%l`pXi9k86}2k(X`fI6-MomC7dWOex8CXC;#?l@Tc16^%N)(2S*N<55F zZ8=a|_Ys-J`-LzoEW$sL{Vdpw5=<+1%++3e{;$KE2q^FlV2* zqkNTEzOf^xDjE!t)&DJ8W>Iv{bv3K=X!hgk$GdWU-02b?N~gj*0NEyIy}T1N=#-V6W4K%gL%g2r_R=L=id)U`TuZYPR6NB8 zH7qK7UQI=tw-k0i_i6L3t_k(6glr0J?#?P-yE{cI4xW)&XZ}T3BZSZvOjO`zo<|sU z0u>k81^=BdeIZUrj0n$TuCE4u)(mk$m`8Q7!oetG!10$U6ZL`qXdss|=UoQEq~MD! zHkqNu^6!|WK*sBRHQArI-{tMkiTq#`Stayz@i;#d@-0O+yV5H}flYR7 zY1as`F11(M5tQL)yn2MOH}zHIFa6^2^`&qzQwIA8#+H^%g5(+?R?m!`nTx;xtv>gA zB3?z2@%bUJ8%2gT1y>Z#(sD20zmX<=?_@oCiFTq92E6btMavi6T?d(qQyx;E+x$rc zZkD$9;~21h^hHy}j=u@AZZQ^ffU`4)T5wQnhXbxz%gMK>;_5G0fO^H`4>z`ce)^Pg zhzFk@h;tDi*}>B*VehKfiD|4fjBUvPWo&>Ih%SWUhBt~>N-o7`Oee#>grW{p0QZln z<+S#^!Aag!96LcP*Z;%*BDUxABz3`NjR6)|YQxLjf>P!RwHal(9dC(H*@2AjkgW{r zv+Ld1ogwtvzA!RJ_fl65h?k=Hz2c2#hAn#<~?!8q63qMpN_nRj}!3@fEFqKc-&U4w-*(0@pU2ZQDt#X7nu0;7vhDBQd3 zJ^wg{8TX;(XMGoQ(4C8)=C27;ITYeARcFI+S6NMpNqA{fATuWBS7q(<+UrfKkQfsA zc+91(75^l?ZEd338z+(L1+*E=CE+-$ZbqmM7*HTKwsBM?;ekYV2-U1P6pi5eK|1vs zo0##t9W!zF@l-1@j|>Wc9d}fYFX0)chT#fN_?3UVuE}RF&0-kSiUayfWm8{!~4wW(9)iw*#W_T7?o0`O7pSEt!if1P# z*j%B2@rEw72Q zT)`Sg*9jyx{urM43@Cbh+|<@ztC)qxyMHSK16sA`5zSDw^-P%XDZ@gIxXkdkp1eyT zh$kw~(~mawW~flmVEGKgYOm&g@2zUq(H&MeZ;gby`Om0f2pZ&L*#eudQoP0BQ~NUf%yIF?Y6DFR;?=(llx-50 zv~X6o(x#OqI&qY<>u1TMs!M=Wn>iZo=5DD+n2%!4qh@o~J^IFHoEqFP4oi?3d5>;p zxQX>fbs;hTk%|t0al`yN=aYHJ=YlM7WeO~Jwrkq7-;3;Ic@1{g};16_VONO0BW56N@iG$ZrguRE^U>rO&YM}&Hcbj6!Llk#Gt?W za&r#-DO$=B$m%}7P+uwZU(%FFD*&xB_ezghXpmDadiqp-z*(>YHAnqFr@=p=4^A}& z2ceN#brJm4MMffY9>&^9izW7!&qSfhB5qHqun!ydEiH=hL6T>fYsx41Tk0TWQ&)v^FfBU z$fn{T-m+I>K|ae$+Vp&i`F8+%OSN_IIsgbf5g~1bzkz6YHI=k$&o*Q{*iG0KsYnxe z56nfCLO@xmCZ~cni0N^u z#?LoLOJT7`43Z5Bkj0vze6xydo1OXt%GI6;2jNnH+Cle2sNaV;wZhA~i@?RObT!Mw z5+^XF&}EAvd>P#ce1U2y598Yg=!@B+;4RqT(Pd?OxiH}MycTbXCSiPL!`wmbP@B}B zb`SX+Qqq1gU^^!3oXOO~S)nKyRj*ND9|%B>zWzh5F^WdXu4ZASM~wd4hA}Aw&BWp% zVR2Td+L%#lMiWGS%2)oM-s=(0}W?1N!ixhCwm zkGH@+!>HV36V}IAE@t8RjY#OReL^&51P!Io{;2chK$@2ER_f4gC*W#028i_R1_{(a^OlI4ErL#0ycEx{}sa2Exq-Pblyh zSFdDtO7`Zf?Py;mTXwN+>D@JlYCeN=wr=k!&c29J8g{^iH~QS^RE2L)Va^Pzqb5b? zRRc9YmJiP>C%tU25Bg_YwLrI96|EW?M-jSK4xv`?JD%AWJ45^>;F@NWt8kkh;@q=n z#BCe?A%#*uSwMM?rzE$j|1qGSBUZybFGJGuM-j3 z&mwF&m$d#lOSE0q0gLGzDFR!K%1ElD535j*=3Jfg3C#_Fvwgo15Uv@dg$INF5}I0J z1)zo0`h6V(q3akYHQUDAbfp?+3kV$8$?8K3H?|f5eayxB_7ft!4_So1c&SS5^0Veq ze~fIij=YQb!}MM1%c@6Sv9_xRnB%x%V-fRP1>$*N;Laq^2wS>0w#<3j+UhRJnL=f@ z6MuoiilAE&O@55xO3j1mG?bp5P3CSD?9-ClRs3a)45?uCNlI!!OT$}??j&D#V%#`U zG5hxs?hr*Y1ghUvMtQ2r$(Q7M+4Lo*L$g?u_-j<5Fy`mbfAG{5Ntb3nQ}VO2 zvDlJ5$jqOF2M&6V+@_6Qbx&;sSS?&-{uaA?i+#!c!TDP{--{$+{F$lWQsF{GV+`B) zww5VXdA{A1qw5KK?WG+?54}=ge6Z<0;6Vl9cJ-Ao~&`Cj+i4 zTHX+N?y92X`!fVK-MQhgPeO_mDpJ(szHr*O(^ZDjRls&XipJd>Q!FIx@MS(~_9yFL zCJUok1qFNx8rs&%w5PN~`1LkDv8G(qUwid1s??iW7%4o0sHchqaJ%C1SJLI3Z7)JfrxQ#Qm}Gly~!nVC)BedujijnB&$7rk&MN!wf+#HKXMe; zV|8S&4=cfu>&Jjzqs9D1vU9|p`=6sCB`|y!^8+KOHO+mt+MlVKOiI`kA0rhsd@Jaw z8bVfDiL1vir{5qGqJ7CvR9M7J%{`A2dPUiJ>T_YyuIFfB6E6<$*2)?j7deIF?JSAI ztJtUYt+P${6_2n{Yupyi8={@~)I@ai76a#k;xq1v(Qbd{b5Rmcp=8x2ZjZ4=&!UtI zZk7E`DsB;SXs%^dE~@TOvbwhv7b&|=`3C(+#gC;%U0xrKXgaqp$1o77zzaAmYu$x# z4dZ-%(q6NrC!cR)39J1F=E_R*e;bOFo+d~zIu__L;s!usfKr|{?zE068o-m1_zEpU zxrR_{=-=?)R)gg3NW_IIvry#4=wD#QHU~QeS=Ci?tJ!rJkYo0BRk-aez*$jsrRy$nsff3*`Z$<_7d11T2_vvSdz zTdfT|vDHK=rzGeuXAA z|DR!}>imbhytATJ%4Y z{`}udG+EmvNn>G?lBBh0QcfN*$BU-KCwL`0R232P641%czM~uu))T4jM9{!nRsySp zj3ZX-fpeK^;;mpi%+psb^Jvc9AI$y|2v{1eUhL?_LB`O8)4B^V5gR}mm|dw{_~~1e zt9+uJVoTF14lDW7;4&>>iktYsQI;(%$*wFgP#-dNU(2lHbY{A&cN)Hr^hKw%xrVEA z>E(q9N2A%hFzXgAlFi88OAuBO#2uX_l<|@=J{th_r&>abGv1W_`m4#Y<=SsOOUfdc zVySF;)n(}m*jQxCStmQj3XBUqRmT{5%D-dEHq6mfrFas+u1pSH^KMdB!&W?tKGCNj zBxRVmGQ75Cu6xHqPN?^O+7U&1{Jpx%{94gln5n2Fc+jKSbk+YX*IX#_JEoZC(ISoQ zJQ_cw4ZL+>e{zO~-plVq!8#nh|@wTeU1iE6R`< zq0pC`9$$jc-RhG$ngfRg+4531;wnnB^7ry)pn;UCl>S>*daIw>4$7J13L3Vz5o6$Zz8*XA$LJ-vtuX`YD_ zJI*o>pg|1J?|tXJ#s|t411&-QrS?vJM@cWy#%e(?8II5Y%`ZVo;9LNCFs0pKYc-IO-9`?WkmJrhyq0mu zj0s4xqI^(hfohwC6PEaNn*wBLG>kq<>GyyFN%$cPM1Y8}H%iOUvpN*bLLgL{R&v8~ z)(Y1*ywFDipQ>(dCCpnw*+?G1XI{=+V5}1_E7EN|qsEawU zRp?#RR}htDQ{JWPJ=$-g>3R*guOFaRG}D)9E8^!A+##Iqx9*T(E{(^YK!~Q-UppjJ z!+SCjI+9irOt-AH0_W641!a#4=v=jl?@!+%Ok@oEivhPSk`a^_w>mt)x=FQykGXR& zZ!??*SQ&L6OJeEXOEeEKcmG{diIsZVXC*wbW!Xyj_mD z6kk%00xFF+$JD$TdalmiG#zJ^9Al`M9|$YIDtb+C60_+AIn?5gj#v1??vDNA$SGUhbxoZ}a3yIqHlG&XK#07-Q(h zq>5XpZ;3#GjDKkCEF(E|5taz7s%sIGcn7Kg3|W8mmq;&|dxLLm1B{6Kw9b^GS83w9 z!|;FN`J#oyBOi{4nm?KU;HSJlt>Ow16F|33TGxD=Jk);ay%ZHz#6WXFM(Q zaYVmGEPBSei})L%PZLSK9e26Sxq;QWcyiQ>b<^}#v=JvoW+~#Hl!Ds3P z&Usku!kLiPS0#}1*1jz$7M$tzQs&uptM_EboXb={K+j8h3MGtJvef&csOpZ54OCRs zFmwn0;vL|cn=zK*!nN9Sfn_}>%5^TZ;{`Ow%rYnEtt;`+DpZ25p0CkEvT$1{Pq8?jXUNBfp7_eJ$d2JHgFX9GbM%PS>ka?&ysPRD zDDE*HGfaGK*Gc0NTOZ5yzkmOeG4vd4-M^tw4XfE*$?!x*2=XDjRTn#04MF2NjUzaO-YmI3hz%z1v+ zbT98b`j5ZkQHUstFpOMg@yp$FO2y5qF3TafbM@R#7`9SKNtryPPZ@RT8Nq%__xx%(CkT(@6!##?kM(& zZQA;*3Itcw(i6~3%f-DKvIRLfE}Hr=Bg-ItU;Mv|bFBw zk>yuJ7U#p3NJsn#Py&DkdIGv5uau*)+W8)_2Tu}@j4U&*LJ2GRM}0O7ZJ=g#|7u{Z z@|KV(qnU=&=D}|+s^~0+N9jny7-u5-Hwv;*@|uaaFCq!iqDnr)hTb3e#EVNWH4^?`5q@T@-GQ6u{PYI(<}Ug zK!B+3Iia;`UvFK_$g(NqhCdd`1ndO}LT2P`=RzE9yTZ5o}!x%#1B=MXRj9_@a zg}QFgL(!e|?>AEl+o;S0aV-lfwv>WwLT4*jmvATo*OX79b&P{H+;W^8P~;;t{0_iT z`e=~9NQfqp=%Usuy`l8s+dpIYdjd*EO*Nt%=6r#xOYMqPYa-<>^e>*j;8iNBz?wId z`0!xGnhhitc8bma7hl|@lf*1|6PZO`=3N~JCG{GxCZ@n;b(2nF)gDQa!;Uoh2)SZy zK#Z}hvh=t?q32#lz(;oC4vXh8HyFxT(jvdbCj<9!$^0gI|ChoCu6J2UUjY{3b9CWb z-8&*=T<h>RN@jBrr80qX){gmFaUAWdK|Q0)@i+^0 zR|qX}zgKkKVwVzZ52onkS&_oZc=1Qv|5l^b__@2CsYa2k6POfwr-nZSC`dHag&dg}(Zi3s)gPX*m{E2kBOB+M+8I*zY5fj14IhHF&Y%Qh3pEO4!EjiZrk0*J#ssBR zs=3_87GeKo8?$q;I~S~fE2$J_tJjF=92Cefj_F7uek?j*>1baj?T(_EWYMVEG;v;g zLWj5lA7!B)bi1p{R{3#aY2#OS{ssH^&+Fr-sPFJR+ssu-?)AbI*=_B0>iip$h=a4K zQYbb3%Hp&!2O$mn3qEz-jhr|oR*-a-CA$JLC>)210YY|1pMJ?8>XVip!u2&(JGH3E4`I!gUNr^n~E#aupJ z%m@6O-{_~dtF_rvSU@x_p=7P0 zO)7B5Z2;q0tG&L4wN#u^HAO*NFgJsD-t1j|cUo7giBvGTpdyAl)VN=8fmAva8X6+ zO*PhOB*nD>uo#yrGtV6V=I3`MdL{iGpOcOcU7aK93P}8ib8@#8uvVxS&Qog7e8$Ul zAmO*PLRX{J85KAKlxtG;ZX*P{%em&-3q+Z7!d{sUqs>ZOd={{>r)3yBg*($B94rK} zut08m1tFBx9Tx=9kL@$Ce~VH)4bAwft;I$NS)>OlC0tx-oWw2v_}XtDD&|E1?6dFX_OHnuBf22<3%%DliS*u&34Hs(lZt z1Jle9x@DypL$VP|lgageT3AGHi66mXl`ZGr? z!zh3O7fhSU9p3ucusJY4KABU>)l;a;3O)FdsVwmE^JI$SGi-#dOZf0+)Gb2%RG8}0 znA)C_l?29u`)4!F(2%r&@o>OXNgTHHXphm+y{Ul4r;93>?N%)fw!+eGle4))rFyVx z{sc@Doo}_zU7=5e#8~xq_=fsQq>eG-*WK2rM%khA0Z*xI2sQt%0&#J_yRX<9Srb0pB`x|joy{yXW6owXm{GI!^07+|h%g_nGVVN6zbM&L zNFR`Al#Ztf;}@PTDs+i)9z$}y0;VUU@8kbRlok1K@FI}D2pc#Xf~3g>@&QiD0-To$Qhi$FL9iAmVVAAfFfqBhktsh=hyfR+q9s=!9YqC;meNE|~^L0noU zt8*D7UMFh`Rh3NWAFB6I?SR~3Rv;wdTBvFJ6CVQ zO%0AQdK^7K#;_lz_o)5&pM+CfPjq}pb=!672yDWyU3=UuT#NLOcPYiw-m6{2aj7BOU+)f1!}lkE0R=m)6|SAjU% zA`TxvoEyKifCzjR?Mo{)*KqP+DKL^VfmH~FWhd~KYSlxKJd%Sj48c>!l8C%p#R|um zH3}?wcoPzyXQEMaS|;n}i^bz8GVRScXWD4TieI&FZzOdV)xut2 zJcLnw1&WB>qFptz5WRB)u~c2XJPEizG+I>pN#E+~_?Sf~LzfK|$Ne$KZdAwewAVYB zq^(RDXOE$It!KWe8*L660_gUsep6M<$t!L;6tu$jc9%j;t3Vi2WLLyZLO{`>hGnQB zX@@?pQWuo`tAV=(%v?QGRibl~-rGh+hOs_SNd~)568FEsu2ttbYAFc|7*Q7B*FT{$ z9LRttg&`!|^c5|7nR@E$;U|3v)N$JaA4W?tbeAJOy1wbQ(CA4D7}|pV!$u=}{Eqm4 zbh@iu_8@uM2{E~axp11&A`NRB^=NM@O^hr(9!5*1S?~l7uItLt*vR;`9Tqv&6IGq-QP^Jd5Au1A(NHsYP#Laq*@RX`pqHI_6B#bQb)Z*hw< zC&%f;Ie$=@LJcf0Voq8emQ1PIyq#wo+o`}jZi_=Ha&AI!=q2C(if0-LGAoH|&<+I&ql}$?XWO| zp^F%*fyzW?_H13v)|Dru0=^t^rFCDK^JaVKYh@FDZU0_9Y$-aAF$X&3ry-s z1iZrFYH1ku0JtTP;||AeNk!px`MyCJ2D>Q4txt6w<^zYYYBzn5*xg!4=yT(Ce14xI zfYE3Tiqzkgdr7y|6-wKc>^ALfr<}v~!v(KP=7o&Aj5x4ot1G`}i)v;Eu;WOWh>_kDZC71_Wjd*U6!z*>W@ zD^lQh0PfOqI_lZ{ozzQN7AP{ad`h-YXlX-IEz=%o-CDFu)Gf+Ff@dCMCtLvmsz}t@u8dzOKMCKR2iVeD-^<`=1hTj&DqX9{~ixE z5PxZ`(v@z6GL+KOk!iO<7I9>4G1~`?_k0-m*8oHPS)Cp^UYozQr1^gk8L-?iFWvM| zlobAkH6;10K~f0guq`Wygx?BB(EdBdFz<-i0oMlLAx6!nSAiw*RaJWIRZP^u_W)Q@ z#cn)UHI?Z(>A^TMJx&9yEOygl3Q2Zs&7Ik2IVbB-CZMRHE6Jor&q!AnE1f znhPq&b{enO*%zn-$O=F)pyVN2GhoXCA$#PZo4!ZT#_V}D=R;??x10%nGGnGj4)U^$ zGHTz%SjG9Y6_=ouwTycPY(SH-^QJz7>dKE(n$_>K9Dl|n$a=7dI;!QXonxMd;` zPG*;o=FgaVnQm^4)dIW#iHA4z8qy~lpY>7#8lpBRME_(h6)RHQqkb%YOFzC}&{{*nYOS(veKdPF`&EoYYR?2{YFLO zBMpqApdZaO!@@o(=*kw4^$*@=%W*|j5PO*VAG(soq9L z^pEW9B|u}Lo-Q;i2z0{oeVg}N^u$4H=+IMOE9MboVhbd?{W$4x1|j;a_C+^^8WLu% z>qWBtk}yp8FfP8fJMP%BOe=6+$v&*NhKtJ@wOoxX2bJ5R+hlp7{#Qoi_fThFih)tJ zK!1{A>tONcdDsbq&|$a1T|VT7{vlt^K%@ZDQZvKqk^L4UV79=&*{3>W<0v4mF^*rj z8{?+DgB75B``L0n%P-#rJB8O|4gQQ@g-xc#2h=;h=ZK#sgBjEMx#J;!|NCzX@l*A1 z+aO~d_xEVB?E?rs!$R!uDT>os*!bvg>VB+-1=Est7ezHfo?#Y8%smbFhym^|0kqT( zg-~-TwF#Y4D^X08#X#MRfg7}Eq9&tz6{P)y>?}$PvHxTnaMg_tF%_S9pNhRqR9K4U zX`J7nq8Qfw02^wy7fOh!~oWAk9f0)t?Z zUgNAdJb7Na63u7bp~(`QJ$Ey*WnpxnUk7c?cL45?TK-OfVK!KAQGmRC=7&BW{U71t zUd8dp5^yDA{)Y2Y%g?bgsE#I6cTr)8`eR$B>iAK%v;lg>mtLU-Tl8b1{FM~XlDxA_Ej><7`BZ93c}^c> zw(-j~rvA*A!SI{R4kCG6Fv=>+aw26#OCsGx*kBV@n2-smggKi9V`0p!wBr;mMdQoh z$|s2u`pi+WrTW#&Yj9HZxEit=k@T#^cv=#})!ByvK;1WX~EwK-wnzfgP#_ zJd40Kuh4*&-KU5zdWNS7?M_8QJ2mu1;pxiX0a$1rw4pDD z2heRoUn_OAnp{p~9C0N+_)^$-4LKUKDWD`q3w&Cy3V6!64zR?H_X6prFP7q)`q>C6 zQ;@cX%sBC7bCEFY9V6Rdt(%`7qikOvJS2&PEFQy|3IrE2guyaf)Iw%{pJpzP_6y_5p*x-YU?rA^jz(@E2Gu zy;&$w6ZV-VAek`Hov2I9E(Hi#YgSxUe>{Aq6n3O}q#$>9X<5rz4L@G`tzdx;;-w_i zXEYu)09in$zd_RCAn-R8yi{hNmar%;_7kG!tk6}}B5z)7$We&KIWs9P8@=ErQO`5K zMeDo#G~WR*5WA?VV~&iFoM^IZg^VSZ0(%X=433o{u1L)(VFCnZDH*^N0tzE3E;95P%TH6Kdf5vm%xwKSF!_s* z)S?3!FOR`LKy0~=wV9pFj1{MFjV=7r;Z{$qC1X-9dUwI=2`$~)(GQ2=;AOGiN&eYt zEdzhFN3o<&ZVWkOmf+`^9WEnjJd@4iJiSW6_O}C;i|!XCj2WBH*pKLRB8DhLv8PI{#506ER=57txb6af^sK!nGt@mizh*eIQvtVS)T7z#<33h=%*zt+;5OGY+Za;Ais>b#(q z80S7szC;w9t)~7Kzv;s$^f}u0x)$;oCG=9!b3&)b6iwKyU}rA69;slL^)$H-mlHEn zwAyl)+8ATa0YFH?)H?KRwPXGkub5J)^Ur;{z~oGUGjXE*)u=S`_^zAOE(w^d-zEae z&zOW|QcP{V=o!j1K!)(@xN)m1>yG`N&v0%!*7_;tY@(YLR(BpBpA=x9dt5{;S;!;m zw4|-3qYwZ({26RRU^La>d9F6UfODuyfao?qzqB0c2avBbCX?tzA0K7|P~(^zbVhk* z_k2+QESSsQhh1vF1U))b%_!gP}smMAz&K(~)RN(c9AH4FI7@ zjU$~eBLE!v?t`5yR#6f~R-GXFpkcSTq~lOOa1q6JCDp?nr<^y08GiG=L$b6`QIDP{ z*A4h025B%NX9`4VOp&ZP|3;ldY%L=kF3qPD1c+c`DRuEyjmqHE4PvFNJHDC1dX24_ z_e;W(6=AB!EDNu%&w ze{h@2-T5Lk7@9}R@@Er2$6=R$XbLnISQL^jemEDnYh7eBMYqE09=TK#Q;z0!o$SS0cww=TaX#_%;HSYgj6*L`(LT53NW$v9ZNK5$3?X#0c(r`-1wW+B?kve$UXA^^yKfjS^b#fM zKm-l4S{uyQ2OJa2r@=$v@K#<-1u}+rNdio16t`-btgB_D5Pf}8a&#(J=UWJFI@m;H zpUih+0oP)hlzOwztOu``j%yGTXKLgM{cgX#64{E_wZm>7Un+8jJ*H}dUvIS z-7^@cubU&PoB3s4moaqc!t{lI65AhRz2ePZnsB-ExqEl???0Eody%5~OS@44mFfty zpR5fdg%#6T{;muXX5D^VQxWX^9tpfMMf0O@VbK-8#eg>p9L{P^&teo=`R-_kD84^< z*DrGZoBUD~c%vvzk6LZj-0(IMm+URzc1mLP+|s&jI+-aZXDxaa{hJqj|1(cZhzG*1 zWm3z0Kp6Jt${0go2}?!_s{-+M73!yIvHU*WYxNy&UhnH?RS@3{HxE`l!<%mcv3W^J0xo7ruOhd6I_pU`$GRZnsL64kEWDr=r%77~?VQQLfp|gI0vI{K zwG#biuT3b+@LXJ`6qd@a+`WrLXcQM(9h%;v*>m#xCc5FKqjZxogdIh)rqlROp+t^c zLsnJ`MPD-GIk__YtjIE*Ea?k)4CsySM_&qb#AHSxlV+)oxa}EdcNsDiv%>b9+i9t1 z^oTjLBy?zo)%3bJJv?6`NFW??-MjkUg8~8vg%X45kwYa^`!K@!iK+S7$9u{n=Ctm8 z58Qfrrx-OZ){%UQ34dnjJWv~uhJ6^T;q?Q}vc28Px-}~1v z{Jcj8F)WsG)i<2FE@{g(Ad)QxbO`I4xXv^qmPa*>C^-$qj1UHgZf^h8#y}O+yhhL; zb%5hJ^imRvc=)Z*H53V#W*N)}lgqcWb=7GOU)u&ISNHsk;cS~KiObKJ6h&(c5pb4W zflO99g|)hi#9^Bzqkbhc`n zT!;pVdLfoxb76NgFpG~pv(UsMq>+f3Uy0s&)=-~9P~p`Z3{7O>ojeQ1h>0>(*GSuN zoatU8G{jeQJVyPsmfGXK588Iz=_k%~_RV~%blm`U<7rjl=R;}YS2K%)(N3_Sz|dIkJAzD#Y1@A5F(EP=JQtiyJ?B-<2DH7{ap*7%u^DCYZ)V)2 z&}EZvXZ2_=A`fU_w*BP0qvCX!_E2}?BK|{Q8&p);yd_J3_!+#FxSmV}9ml=@`P!Bs z3BYBS$xD>WX!u3ol01RpT9=ArQQo&t}b&(nN_7UxcXsU9EH9UhN3OIB*m+e?uukS zkAdWRc^Han0PE$zMcCIx&DT)b{E+>EOykMWKhaJ-==b3&*{qU6$59@Y4L4^)*lJ{p$IAhCJEmihVTm|-sHY1t6LHQt#O&vxf5T9BuIvpp&~&JUx{=Q(2U zsln(EphIKuqR_29N!sdhIM@afaakr`M+ z4;-h@*XefvDv3L#lvZJz@-7a5Vo5@=RlJ~ zTtTR|{EFsRFNl{iTioqb0Qp!+iEQooqyiI zELA81gq%Vt*_Ng7T^*S&g%Y)%wLc;Y8$u4(84@W7Ntw$+nh(#p)Q_(7x~QTD3}!-GWQ(u z$H3d`g4FVYSC(ZOt~&lc@+6#OwFZ4^&+}eeD`ji8KbENOIXslGtX5`9=!s+GI@biQ zDXJ?8)!c~r9Dmd^h>O&O)m4OUvzfsD{H&^z^^ z2Om({e5aCWOmj#uFBM$BNAzxm#v|Hw*Cg;#M-}-&D}Hg-7QD8MFz=cW+B)1X)Xo9d zuxx`)3m|NnaBONuiQ})o9n;JF!>A7*GdFzrzm$EL1qdN<*&9m#p$P#e}?%+E?j*^-pXls3%e%l>L6Qrx?LP5 zT1I4WalPWo)-7?NbGeh6DGm0VOw;X88bvGY6>cn3tw5XI7@Dp95UkhPqqi2a2Xkiuist_mXi-ar~G6`N- z<}ic$D13=RC?Tx5!7Uy)VTXfDB>fjPMEx=XbANn2!|ui+6X|oynD46YHNu@P*z~ZHAfbx`fw}yc)61~=lgdW~wP!9Y1_wP}SbjOs|g=v07bwWVI3aHWL78YD*BiHk~&!ReY z9UQ6~Pi>iH+Lb6~%j$(#K4O#mRv)sy8*n_&M1829mSb|BU(Ed~^Ovd$Vw_P~Cu_G? zo3Jm}w~`Q|IWhWTE)}_4k=H&X6k5;a?6NXY={_&0=`O})4|qSnOySyPh2>;ejbn zG$3_{$@I(cMp#gmn5))`olJ{>&)+4jVNIn)|3ZsZXi|%>i?Qc^DhrKuKfT?(Z%h>b z-OzLtxJKguH`EVQpSeqV-sKCM*K=kWymZ!i@i^$1xf;Wg*Y-qvOlxP0pe&?_Q?B7l zL-Fcrzc%AP2-<`jMF9!g4(|(cwQk1N?D#jR6(EWq(|trCG6%hCs6x1bP_a_(=1{gTR75V}N8;euIRxH1XerdO%X_p{NC7OprY5LyJ_Zz$by04zmj#%`$Da-Jsbwfz z^X04pp<~!esso-&Xll^GK*(IT3L8cMY66E4zSln0{yJj_aaMG*WY6qhgu0TW1-CFG z1Hs7E_TZx6IwqYQpr}`lB)?oF=0M!Q4RPnhZuKzMxq`ti+d`7YVuQ_(1NyT*+2r~R zm4V}JTE)b>NW#d~0=Mjmz@?sdjAVT)ldww#<6WNO!{p*ak$Y~3x>gibxuqgycf)+j zs%t4$XF`SFZz*S;($X=j=vYw5l^f>8ccg=QeO8nT8?#p94Dt%3KoijdQ%@YF1@399 zMxU_Zu^Oao)vqU0A_SuNW7`_Nv*j%Hg#6cemsNoJG$hfDNV7|MNKR;@ec-NYZlve4 zmAgtdyX2Q?{s!n6?UE!{s5~iRfhCfE3Q)TTJ8IfANI5ew$ij4u>@8Rk!eI&_o8YCY zYHG$fH!b7nYUED9>7O*xup;{G-Nh&fbo z(=)4ecm?=^Jr(?GS=j3D4V7Op&jmFcujk0jR%w6CV=E%~-luC`sfHcu z?c*L31#7I@&{`qMrH!hBE%*7dcR0)?*v&j;mO+`$VxP4BW!-8~d-L4qR1e6Sh4nMN zInY-S`y0K7Q17Pbass!ei`DS2b|d1Za2u%|ku%M5GMKm-K71>OJ?TCz+HE8@be9nL+fLbpv78xPJ?s&?2(bO_{YuVwS14P>@$_ zYZ5btyK4>yH&L(06RnspunALd1}XBVP$uf0MQ~p|I;IZXWJ|POy1JEKPRX4cF)lp8 z`XN#Lu|-7^-z>p~$Pc+67g{ZDda?pKEj^fzo~%vB&~;9Aqy;k|lqqt37xxq##w*2E z!vCLgTJq^6daz!$#i~W%L0121TUpjQ=_%GO{GMo36%iSV6ax&`RVZ;Xsz>be4+SA- zxfWZ;XE0sIIG}R%ZKc{&3vsK=oS1=*-E(v^XTCuJR6WokWWjc2lc~o+=MRC+Ad(S> zyiN(u3&48Jmv*h#GS3NWsx^sMlZq0~sJWpV=*)Jz$55YjDNsH?H54E3<)isVmugnS zVj|9>sIR|M?c*Ubtk}@7Y{?2i{B^2An+8wRf`D>g{KCiBf_?g6G@57$qv#Gfoa{T* zcTwAB=DO6pAvS-CJ7rIyK>`zwTvu{2tgI7nP}MeQ$^2O*KSaduAfb$UdQpFN)l>Mp zO8_)#1u}$(O5sGBVqrXoCi_c!9W#8fx9&*6R$GkhNU3pr-@jpcnAo&l(d-;AM7wkT z$m4AIVTBUsfql30&TmDX2}PS^rd>F>rMt64IkZ-(nwne-JuOtZY&mXzcJgO(??d9F zaN=03`OtO;49VCdwU#*h``^ERWr$AYfaUD{6nI@HJ7VEGiP#Tg*%Gmq7olEje+M4GrGJx0uY?8Ov#F^AHq4hW32F+7?8&OfIOhrJfV|6;n@y z8bxNBiMK|iHN$+vk-g%cu}rH&&G9s*4w&1(j$6Usi5>0v z;s)nh=zt|`*^*LI`KZV6&fez2l(=OgZ73q%Q#zf0MqXto?0$GfmKZk_XtAkyj|SF06HO{!fbIa_?0nLNiYKNjJtAsv`2y%4`5AJ}7B>1Mrz8PSi4v6@8v6aqy>1K05>l;+Kur zpR{0+PHI)#UgBo82q7~V0>Q$qb_WAdOX!6&!NRc8*DZyF7_N08pG_MR)OPE0s29|I>+2bqUa$R zoEn#9E~T4$m`X3lB#5oK-NcI^5traJY9A`tavNFcPg3G#-N*rLCBr?O+ZnyW` z(2zDx4C-!Sz1N2agdJ#HFU`K^MidB%R`e4#J;S)8Zx*i(W%ZDr;oC2mL{h zstVjvj=x$dVgkdiF=*7ON$G_)?nVV_uAMQoVl=@V4pSzZhWd>_E&6%33E6_D0d*rS z%R8!37Zt*SYS2l6zCksuX1A#W$2*sBM{!-~ZCYrndb%I*yQWTWN!9wNbm0p1zyB}} z4E!Vown&H0$JB>+0REex+}gDXN#pJLhUe`sJ49Be0%DmPCB&AzY>xrDPAn+!)FAR1 z+^n5~iK1LM({Ic-&>Fwo?rJTb`+cLi3v#KOgj~%qb49FT6jodAjY{XLq>ayU1l2Gx za+?r+Es`l4kpbtWDU<015U&NL`qP901yawRE@&3{EKag`+wC2t}6m*{F+x*_7 z6A53a%3*hB!tP!Pm6I%wrdCWCGnT2 zbltB`mU-3;Z&No@W}0u(hPGKDqNp>RDZ1Kt8T}9D^v)L}ak{{wsfdvbqtGDehX0Ux zla@PMKK^y!oKco?rj#vrS#MFz*o${Wc4%}wndAf? z_TmM6PYw?8&j*`i&`gb2jc$5gLLaN;fU#ohP6taZhB%7JEQj&ctY$6tRwAK)XwSB0 z4ruI2$solVjW2t~{|2F6=#dKjTT)=hR&>3?raq*T@l(%{8A+}IF+gFo;)|I7$!ODv zwtC*2y|m#C|D%Gp0ao*J6Nd>iXGasqnX)LDvcOXaZ%QFBWR~vJ<2F>q49n=XY}UAh zOi(5ffsviNrRP#sNU3^oQ(RFSoctqk+!A9|J|wxE^+-hJ&p|39CG zd(GA{%+oeC%e|C;?7}lc;x`n>@spGMQK5rjDFml%b#^)Fb43H6*~#+vI$h`6CxnF) zF1r267%oT)ZFVSz3I(PN`+g-)U{R7+(hQLnNcB1Lz>eGEX&o%rVVo;|8SUal)w@Di zJ=+k;Ce)*Vuv!_z{-`?!p_7(Y16>`5>h-0`#oot&|EgGT4nRdsrT&1$s zIxQg){%l`cLky?+e^=ZS1s9G8)*KKM37)&>;-yyBEPZ@KLq0=h_tXwR@U?sa5gob# zk;lrOoSrN!1k%ZGX|CNJ&bKKkx^BQ$ccyId%(C7T)o%oS9;R!b#2@>LfkVQ{r8l?S zoiPtO20DHT_ydDbmgfmstP#CwUKC+>&el04v@ukRE3>u`e| z`TlHw!i=Z1m5X>5^*1_nO6r|>hB-7A-R0eoEP+?SKUhAq7D8c6?N}5FbTf7E0Z0JBa``{weB!ZIo#sv{^E?mMHu0?!_tzwsS#AyWmEBhBN*$G%*la+jKn*~xNMY;)=M92| z?CfR3>vnNr<8vP+=)%mI8sSVRw&rgRp}i*P7gL${FSIJYH#~OF0)yj zQd?u$PXuL@^(D3O&hp%*T^)y=tICDk4R6rxex~e-gjZQR3IpDieh`+dVk7Q1^qqn* z*sdZ)cX>v25)FHGOfM z>9Dfi8@q)9DuOM6ZY^w|+@h1CGXG`)&+nC-qgDB;1=PG=24e;@70t`Xe}6NJymj^< z-y!Y=US!*d;ePQ)&4Y!<8}~aFR0;?i$S~t8x+Rc?41*-pMlM_A(A0l-nY5o{m&Woe z<<-8pCZz=-X>$RU#Oh&-+7A%zNBNMfdD?D#JDzEQ6?z!I1bogcz)Gc7wyccjZtMp+ zh9g!1{cLi;F{Ar@kujSCMDeiLN{8Ggl-;b0>l(rh&DHOS^Q@F$5`0lmMp zOqN!=Yf^9}kh#e-e+NL$nuR}#WaCB)#<)EnW0;4gUutPGxJ|COXTKSw^Lj37OASAG ze#togphKHs_??S-C-6S)G7YInHyLzREoi4^kXWk2y$~%&v@27A|FTu!X)C^YMHyO+ z=x%GJY1D$xx)&&!9_JoagLt#fOE)UInP0RcQI%>Yx#=@}bFUOp9fiH*SjQ@ql+6Jg z+>Az<-=^0Y4i`cNBwP{!(g*7 zpToP#!wmswH)2Ve=S{g!(n^X~T_W2U3IE?HZ5X}QO{3JsEwp$2@YIBFidby%e1eA@ro}Bwo;|?qn|46#TWmVaCf~Zxr-Z z%Cri!FXG*_%X%&6FTPZ(KR;aIN_!l_lpC&};&{t_gLM80>5}LZSE26eJZC$y6%`S(f=G4ywi7rV`%y*QTLQe-UioO zQXlSXS(}E7UWl)1%YE8?1+O4DOOEd-Lkk>wfxP%F38&MP$+G-qYpN*!@jJod_`E1+fFbmgk( z2%rROJ^!KSreXN78ATLJS_D};w|}0LTR>kHFb%VIx>__89tT0R`_`d5j>1Coy)LW| zD*+-T6pe|+$I$~5jhEFkOqZ2Ar!P#ls4H8;bHeb*Je5M-^o06FDEkTuk!u}8qjVf` zr4Yykvmk3~64gn-?jlq=WGd3UHP&QELtw;sbmMoa2;K??s-~9OOX#xY=2Lp1uH_(x(Pi)Qm8*pEx|6x`M;_y4x*MM=Tpj1MI|*ux7AE6Ghs@B zQn#F&b^vpS`eb@V(jU?f498Rhs$hZsPoc9+w`rY!_6E;Y{a*q4wNmDtjVRH@j4ANR zBIM*&SO#ai?6RP63z`RoMyXaiI%oPsF=m1)_~k>8Pf39gDEC1OVpJ%d5wx;3aqbSWf^RrSDt_7^ql9;07R6P#c0|&5=Cq%yDL|GVwP^ngx z;8#MD9YUondr-4d zP^n^yxo=<7LKHSgW|!saBb$3jmCYYYwfG27SD=l`!t^-4i99Y! zP4wWGu~)^m*pb^<@YpQKyJaJ)^@x_|4~w{*i(wGJw~upGqi2|9*D_2b z3}%tU7K^AUFRNEP^sq1O0dU=X1iI1=@XB3bi5BY=+c;B;({54=Htren`iXb{o?FD| z6$>~s$s{dBvm)X$iAR<4*GNUz!QUL}shV#-#FP|v)^ zLFWQwxWyE>ioYyY(qG}o&HlOA`1*JpFxeJW@m#VkGDT}mePJ);ZM|56dW%j?ssPJc zTQ}|EbiEVN1Vr1!?;h5*9~3az+T#}YGZ6|%!H?LWN^OL^Z6dp zf1&qN_d?U1JmXwS)E@yrj4_f&3=I+)39GutzVWEIg*X^i4VfOqWz%T^n9H%HnO9=r z>X4ac8&c-6S9SuJaNNIPC~i=OF`$Cx08E|8>SVAoCpmM<4XF)u%Y2_-XTNTcKk3?N zee9oE5;efw@LtO3vRTa;rFd0sQ&`x9wxPgZjwtGQDNVN(t_thOG$$vsu9m4gpXMaj z(kimP$Wm{dhRUI^n`JWzFO~bHpxUsu%Gkm*bh{4nn*)m~EygS?K4@jKFdgkj&CHqR z=fd7;ek;!l&b_k2zje7g`H^1KC6534BF;19c3msvrFw2VXm?v-$e{RVnhht*H1C~k5FMg>@ z=r^$lz7Ig1%j+T|O-B*NO+YG1%7n1IU4+cUBJe(CSHh>9tyXnXOPmD`VH9FF2x3(T z^`boP(cFIqo;>cbOIv^fdgy@ov28!RtZF3UAP#cH9%O(is<=a99-C%6!V)oevds8E zvhNZ0ltkV|eYNwX6~s6V-U{}4yvB1O>-9*ejt|Gu{7ihY(4q{VL>}myFA#8E|Maeqm%Br*JTaeFuPcYK{~$F$zf%Vj9m_CW|8X zHf{MQXu*xSDSt-E=W}3^TKg<_ZS^FcKT1q8ygYSkFg6!USuHutbwZiwR6{N<8$$zi z?#%=)g}EUHu<-fkR3Hi!H@f8kDFZ_*m)JAli=2vP`dloLDnB zL{TwZiy9>oh>O>;Xx%3X|96~uirH28*dr`X6)$ev>Z*~%9Vw=%f8aQIZ2!A8_|rA5 zr$=V8saAuh9o$5OH~?azDEzaA4|A{ddKRw{Ah0141aLVNU<#zD$-miovniWu0r;qY4&Rh4*N$Cw*{Oo`BE7sSeh zeP9SpsOjl=&*{eqomya~1PN`#5Ox~jmI)d;>KIDnA)RzFFYGU2Xp1m%uOx4UY z^-ly$&xVe!S6XDc0-`U6Ej#{0WE-&Ds*|#rMc##wsJmLqWier*So?mu^GoHD9a8sK zhj-{$nruaBgITGBe9R@RUNM%%tR>?~$uKHxpn)w8mGJ*~vA`q)7pNxQP!{Ni*OeJ9 z($X~ofBoSF9&m1_?1qyz$g?F&GC)8>sm#vRl#bO1;?~(HYs@zDjuw*{LUQD$+9wm9 zEk?1hpPcIq7JQ)>+j-tzIk0{XkSuz^sGv%MDo|Pr`{Ts3%d`IHxg}q9&=DoxuCg(f z3SQ?>_e;QQra%Z9;~Dk?kRi*iQxB{E7G>gSa6Dl+e7LJWGg5Fy8}7E90vG=hot082 zJr0wBHVM;$E`=sXi z^W=_kX6G&GX9&ff_ttmWGYv;WNorN0uLxlmZ&4#YxvY7F3Gdl&aO(`J(4~_b*-}*- z?M7^=nW)8xCS7J=_%^i!C9?q|A13MWprF-)z@bb-s;aS!vT%*As#{qs5QglRqCGe&SQ%+&L* zo>OEDks+@%fI!kyJ-dpI5jf~DRL>9wE1aXuaM)V<#D%BD?Fz22&+wBi)_n)jXZ#Hl zA9XwJ5DB$bXQ@cd|Mdz^X9qF=ntD#qoT&GS|0`?p=IeY33zOA-CYi%nfty~P_gaP- z8RnAT?^EiBT#xdcWkpe3`7%bh7bR4;KM4TV=$UCTnS$4`6m2LQH zjpta2M||Q^s0*Pm>#gsyCtbOvr1AtgUg`DsbBWaIP$D{HxNOb1>Jq4WoYBjwbv(D^ zib*sIR!+-U4B$FT(KjUV;jI~?MKiW^t`vAzSDB#!2e08?FakV?(M4isqL84q# zk*y(&?dJ;Rz0hHdF~*--NFCwBJI*FftO7VCK#*4+;ZKurmv08v#oO_@x*v2RcV@y=EuDP3<>24C1%ALic3Y}mOh_(pQ5*(pA@V+ zPhL{IL9PYb(MhxnzYR!T1V0XHd*{SAmMzveT$+s4TL-=FNUCQ&i7r^<64VR`Iqf8Z z;AZ`$3b*FkDk*Tr472{4W9*)7g9>$RYbP%Wf4L+(*iF&PZW_B0)`IAkdKiWvj6&+P@QPKvM#NaEA678E=+m_kVincWP!WRU0YeJd&V5TOzyLJ@W8xf%} z`@$DO2D>omo(Gq}h|_v}XZrd?#1VGAJ5 z9&LG&tpQ?}f^#fnV+?Xz>Kan=L_c54gvQMUfKoijgN*avy!pacPy3l|b)owMi%$4- zBb_IOtTzB5t!kaJc27q7dZVMil$GE~s4FfYdnx{(mqMP8vD<__07|Z3S)<1O%Md*- ze?;hYgL!^vd!AGSjAGhk{_`u{yF(<4>YkoC=iXg>lz4Z}Om}s4b#>LRdS-gUCRFE+08BG=LrpFte>>j?x7u{AZIE(oU=O z^E2Tr@J-P<4e+1A0MA+)$RBIFtq?^7CQ&P=1$FKWL&AipJ|~6ZkW|AoZCeXDWmO5C zWE)|uU*TpcF_S%3qYm@Kp-@VB!C9RTep~!CP@QumQe+VauQ}jYm6o?2cpg&DrDSOk zGAxbhbF5yYaiTtuV(u#fV@4AcVU$!&T5lML#J{HOS#r}SBV5LRb~MV=<+;bhijl;{r#l87X5aE%mt4G9fHj`7~sb(yryAXp$i&Wrp~=+y|t z@nV+Ro|xFC!*Vo2?-j_~d~Ha?V@$f<%--O$sH4v#KAWQgGNz(@BPz-as1+k`u&|C0 zUc^tvhJ5o5rAoQJOs0?$k3W*$owQ)gAL_;6Du^*s;f5ba(O*Hg#rWRm?j10-!=Xiv z>dgU8p*LY$dOLj+8}$$zC!A-J8Y}TwjBEii22Aa35EZv`$FD0g5tkDYOZAW{hghQs z;NPeeNUM3(Dd}B3zWMkj6qsvJfB}*P8<|PhCq|Zn|AMkHheM)VjO`67?E9D|`v?Ad`EPp;osMm0ksKXLX1&$##+;;TS19!ZI(d^SQ3^De+vDp*ajnp!%IlS=mR^a`yq6Q0S4g0 zOQU9HoXNcUCuVQrh21XXOOFOMdIH$v*j^C=F`EO=qS<$U`4;B-eu9l%>gI3Tme*SG z`pV`ni9(@HG$PFEu3pzZhJ=CA_(aksi8|4gv9RUTnTDFKgf=v^sz`9d353Au2ebq5>yX0zL5WKVY=KF-+As3B*B2 zI4H|T10^GQ(l@sAv{9MzCvC8KTne1=%i;aRrW(q5N|s171#bXDXsT*bK#GQDHJb}J z_zRm(vGR%UI9B^abV8~TP=?9a@hac2xh#8iZho zd3iael6$~Tb@XA}Np!Lq)49mPYw)1ckus%Xn&IHVl}cECvRSnrg`<%0h5?XJ8-g4? zQNT?@N{Z9=qjL(>r7&`{v8Za0yh)Civg0r`teXh_DKpEPWeEm3lvYUNC233UpL%GE zOcBZajSpgdH7r2de;!lOOeTrjL*k23p_EK9#0v7iq2!U4ea@{YU}}vu*9n4Kr2Xs}gqh9c)FH+^z5q8o_`%g@Jz z;_b)cS;)MDWC+YWBE0I@fbs?)1!XX}5PEK1mD)-Bs1JYLTzmmkky(u^H6!-dR#&M} zr*>epie7wCH|FGKpW|u(wEZWA&U_R#j4x#kMk(`o zKZnANdl3)I5oq^Am;e%{=EP$Ed>0@Q@%a>K2ZO8plHw&mcNST90C+tNtV~Vty=rlFz0b&ynNyIOiOSKDp7@44ZmVc=kmwrA5CTIcFp7q8QY$xcbS+#$eNm z8aX5ipmsg2-b6goN~KAdEhSplT#!^`1nD*_m?8#-+HrbfsA>`BCB)`4sGBiF#>HD0 z4yLrKF&q0RD4%W_axhYiLKcyB)d6iahtkH`ZfZtiK&JgSmPsg9DH)X3;ZT0~;m(0v zztjMcKn-bM&b!dXT{uykh^cn~$W+UTRmcuhQItBFtaA!j7#j1oM!_-$M_jY$l-@LI zB~o>K3igrU^)h+r#X_x;`&Zbd<$z)N@Ul6B!6ikJ!2*Mnwpx28Cs@2otO4>GBPJ|q z#dYB@=zpX*CD`T+l6?;^2sT+1+C;vq>q_}1oX?PR#^4P2dZs4l(>znSE2!L^eJjb{ zHqo}9Q@N>trvrt|8=LFEl+RRUDV@1LeeOf8uAF9d^dA;(QgIj%T5sZ+Lrv*W!x?K% z}6}6EBfC-^fI9%i(42Al9w#eG`tB@yTbq65k!$Wt25j$2ns7a4t(wqb2 zOm$?k#zfQv76mEb6pE=x6e=htHb#_!Qie219wM!Y_?x!;b;UFP$fH+i_i6sNaJm&v z-ZS)(d+51X%@;dvGMS>W3#k3{S2x3t+h>vAx6wYSKW(IXy3i(Lis7cM8h~0Q;a*ka z$>*=ilS7R%tCC125oeN8riLpMlB>>8<)mLT+LvFS5HrHb;tH%~3Vjp0dFRD14Ek%A zHp5t$40tt4A2R~IekP(6#RA*n@`pXOB8eOzA(!_%)RcND z*1S30XcJavdKifP%(gjdkTKFiWYed#0<)qHt3weLsh~dv)5R?04@zoV=GjUO0~Ge( zun_1!6g!K2A=WxTN>E}HVmLBO!~W>y7%FPQ)D39^5%mm7k;3CxEiONwGU8`*lXihT zR9Rx}JONp>g5h7*zNt+SvC%{SLL?4(RX8PrD7Mhfh$!u)`NC&RtFbISC{KJec`G@@ z)xvz57XR5HYA4%LJm%`GDPrivBo7(p;F3n!a(Wo*O#>;86Z(JoTqBXctJ zZ|IIEF!cZd002ouK~$?=u`aFxjHm-x0q(LR6mu-fbc)$U1g3Mv6wWm@#6PV= zg!&T);B!XyPw2)&#F7#~Ls4O^_`LKA2)}5NF@K7za#M}Q!#9AB+DqID!x4!pDii=} zK$X9Sq^>Kt;N%Y)vNC(jeJ1OW$&>x#1zYc12VgW4ngX&og)SiRZ?46LEEgSy$Se$| zZ567*RaH3Dt_pbsXSHK7ILt$MY$n9cCp4>-@^r}oBLylI{)HKX8n|QX&mESyE3tlq z10iN;9j8)5NKIUBJ4WpZgJH2P)Mi5N46h~poAQzGp{Al&HUWp)Qo?xB0ZX3eF9D}} zB&?P+%TCwzs)2u?77*=ug8L^?DU1HG7cUXED{>G#c3%E?h&05x)TuG*Q(eqV8Pq-` zk&wqEaJ@x>@Yi9S!E+eRY4`hAxczW z6-36aiUUT%##`wp3<~*RI~7pa6Ug2jfHZdva_4plL*_!8#28Wh5(H(C731fUn=yIk zO;4paU(HO*1X)0J02)^CQJ4@3&hTbLhcT}~(g{StPx$sQYg ztazRrpCkANwaKrc+rK=D`V8-*xo9Sx{lpK)Nq$>iD;XhBb;Bw{V&@eP?^hS?+kHQI z-O%x3P{rdo)x?^QZXX^-E1!XLA3S8*Q6pCpK{r=omBKco#Qi5UXe<#IlzM#Fgk`96 zfEu)<$gEzZx`=d75>q7=Pqu!J&*C-6? z!g26oUHfXfi2!Q4#Rs?g&)hCgw;RTq7+X1$GRWrUhETUs5pc*K*+%_)ztxZ&@KOy{H7#ON zt98Q`Ji*BPu?MkgRb5s;9)5Kmew&J>L-Ej55P~89C)58XiW&8xhHZ6+%*D`5H8DkE z*pqx=)xwTR`Vk=VJ45llWraEl#tO7E;H$x&vjN-hRw7b+M~QNNuQF{>@^^w}`>Z(V z40WERWiApc+zq1(W~$>DhG)CxlkJjjGEGeeU?=o1&}KZF+ie-rl+A*YHop#1qkqqt z{bF4Bxa9|ERVo?AVr^4!49#Y#@(#s-h~e2wcKRdlz8=kdF)b9(_U!6lMPUd~oqE_A zxeHJLc3b(jVL@Rdu};>?WIrh!uf`A%3^0G7t12&&BBvi-zGHtfC~&jw+R`CUC-0d# zPatW0!nfzkpp8W{hprx3%mRhf=@Elc5U4%K@Y7;|Hj+`f5@IN&HDAgqWx`1G|EdMT zl0q~Is9KtbkUxfDy`czn)oMoPK<+Ry>duOZB)QhjZB3;jChU~v#NL3H#jQ&-OY%vsL z7&4D`UULD&uAnboYpTqcz4Pa}q70^X=xvqZ^`F(^(A7mp6NPhnL~IPjh{P00el733 zxsN2aUU5?_W{YYYK93kBP>qw;JW{CROY*cTyUlt_pgh zG>3#8SQ%7Utk%jCz=1xIrg9L2SM0=0T>7Xw7ahv ze6rkYIGr1P2L;2V`XV*J@g~A{8JAWzi~1l?AVsW@(Q1FEx8Je9d7w*k#`>tPvU$DA8wGm*^)Lz-ry1Ub%6?O2i{ z1*O6>V3v40Ln^NxiGMZhLd}vlwx|vYCe;slmoi(A^#Ivl-cZaXCeDzksWvI*bEXFh z&yaS8Z^uRe8DCe`n+W)K);~eLFsxWIE0Awr#0IpT7_1g|hB~W2Z&rRjXbImH^Fjo2 zMOp6%1~DLP!<35Is^}W;g6)ahwVLS zYC8wxv8-_zxxDE%h1-$W5)mte<}tuTu87r=6ffdQq*?=i7LIv0hbJRo(CgNB03ec1 zg;|TD;q(Z{;3xVmYHdrANO{82HPL8j=pE*C-?5EePPLLt3B3WH@mtC`>#(|R)3 zkjJX*O__4rPLf#RYp%yt5Kbhapw6)h9ghwq7P;MdAy?&$(7V*kJb6_OYGDEOYNM-( zm60XD`2>4KdX)rU)eD$fjSxs}#FN27K%;q25^$rI>S-I#)9CZtQhq!QTNG!=Ka0YR zCt%HJN!yT=w+X^Pa%4!`Iyj388&#}F6(wX#@t<1jx;5vU_y{RB??iL?mLF-Q9=E;5XYBVu!p~~Q^=u@?sglrx3A4F$m&V{1KBpfEt zv+5M|roJCut*0OWu>>H|d@lO2&4j}<5+e=~RXi$7@rG-TLn3_+beOAo-XY9wT=j&% z&S<$q>=&wS3wo%rj*o;OuqBl(G%7wD7zysFQ4I$@RBMhaX@lFK^-w#qKB!r5fx2`2 zGB2z?c+&_`VoJ(zm|jH;1}Ej!6N8c%8WjKLlH{slS#%@i)|io7GM zRf|&uwKM%@D})MDBW>PrBiH0?n-wvZQ5y~#3^Sux@fhHa zFwUZ=(lQjIhQGEBa~P{|w~`V)r@#p9k}W&wtw5*YaN3gFtU6l(Eqf_7(bB<;r*Mvz9xZ9tEaDt{(+XRxOZ zVhoz*@QHq6NwuVyHBT8e?$;qFPA=a_N@0%0Yi|ugq#Lq)_!-jlnPV1Oh>_DRCdn|s zD_jw?@_2HzX6rE#=OJ=6ldY|u59naZz>L~cO|Z~5y?Ucg0D}1GQMw(^_JpjNASUKy z^7|OPm8#5a7K56jTKr;cToO*$b0aJPknaG9W^%`u0R_D;Q-l8Nr_d}<)vQ~G=Ribs zs_;5UL2?_eA|8h|HGG7?!HOjK~WEl$n zs%2Uz%}=9AQ(p`35dXSOSkgO)V-CG8M_~Zr5Ry4begN|*5dxWPonZi%$l;iHi^w1z zf8UWbZ8a)N9mEb3w7GBycgQ=Tpknj&A5{(h0qbi8+B$_mF9z_lLH8Qj^JGA8$>(Xe zJG4nr2eS4ai%(H`jM54GeSQ+ANV14`g=Ddo6iJUn>sAI8A~z_pDYhF2LZWzuU@}K2 zQH=cmvIz}@QU*HISqxfHVB|6JIP)+ou-kMFi6UB>Yy-yV*4$bl)!V8=6O4#Al9*vm znc$RJk!2RTgp~Sur%*9SQjMR2>akFyw5?i65FNH`avcKANds)8OKH&eLJ3#l5{ z*$RD8T-cmpOnTsqHbzLo4=F8^y%^%4Omk5i41h~Du1Wyl&zZ%v!p>tLU}CJ$|3S(H zNipZ?L4=A`lQP2V!wz{XtMR=_t*#shmOSryw1}Ew8^Y=hw4VyD2H8JcEYl8m`hn4? zW}Y>76Y}^62^@%~RTiHY~JP82MiV{*c z>cqw(qQLTFu}5VZ3)@{NsfqL)ZxA3-xe;xU2->j_lShfV5u0cT-6lP7vnO{f#d;wvESL1n5X38bj!Od*Qq$|6XGHTmH&tK<+7vUSyX0;~4D z8wd(H69D@XkOEEAKrTM|6Nph;1xXvSqqU1I_=jCp`ny0G1e8LB7P!DmJP*h zjoOS02cc~6Ly(%HV4g=?x2;%b!Tq_4f@5h`CQ-&xmTKE<#QA9+JGvQuOfj)bvE0B3 zfWBntm9RH4Yq-tex}+lRDWas5kFaRP8MVL8jWBH>yVPy$#MF*YXj6>pziwMn zVfpF$tuD2uCKKis1JX#6g2dT|$Ub37F+_+`m=3bIEYTW-7@#C8@2V;ckB`<|8hfh! zq+lqz&{PBcraY&G7U#Dx>JLIOSQd>v#qrkHBu zchpM$UK3yW)htypbZ@yRx>2divl0DSMPa$q{^( zs+;zQsshMwLM2h4(TFn;WTWSHZHCdRm01|K(CtCKM$R!|a$6(uBRvwGNX=|9D8uJz ze)~M%OCtl3Enrh?vB??(Ow&R&#PY#gEr=gIW8zV~XO?HYw$Dh^u_o@@y1N5lXH-^1 z5A8b{=2Ie01)Aahx*h*W=@6$-yj?>|?JnPMOp?423~2*<>qux_`AX*>Fnpz@|wO(qhAP zuPtw$rAr61#O46*q!G{YY^$iwZ+|jL#gyU^d4%JJhC8x*7b9V-4xgKOWd0&}1=&3r zrGA1au!KetbIUd1H8jpMH`p}|qpvawPx4k&{pPos224%jMIkbeM-a?Xb)3Y>U=E1T zD#amoDSYmzF=k+JW=bhA)&|p!Ui0VKXlJj$0mQDV*;s??4=884Qt)3aa>d|_2sbeD z!EKnx1WHC)yNkr+Wy(?UpxT<^t<=sc&cx$ggoUV4Zvy>usau9DFJ~Hlv_k#yG-K$X zhx}8WqTOzsLv?AZ5srOh3OGR3s-uwBi^JN1Lka=Y_Tv^3sJu4ONg_%aW}fEj3xW@vfAMSElpuy?dK0O$7${9+*Sd+I76nr#O`>FDf~L;O=2k{%t4vlo z#X@5est&XhGnhPh&_ZNVU#3@E&lv;r7h^{Me~&`T?=s)>Nt-ir*ZkpI52xHzl9*7T zo7Jb1!bsHAE}=Y~YxyCi8-k#gn&GG-#bIYk*kPT;aMd#|3h$^iI1EZ@yp$uKi1ab! z(^*|{D1{imF__a18L#4u*_> zR#~masR{k33g?2R+VS}S%w%`l7XN>!6G$&ckD#w}(T_@|NTUNC>?eW1gRT%LB+i}EDr z4Eku=)&NGgPEWPx?7V^Ie<~%$wlW6)-YL0i=Dc=uHDbJhrSY3ND2fd;PUH@_g%8U% zAUm7t$!pqGkPvC!EVr4c50&RI_)iUdyfFBqDJ~_-+mnH$VZ8>?+X4yB*V<2LHu-K^ zYh5)%don6-V~goXke@<`m>60Ymn4x4v?3nP{TnZCKMV}2aEc8IX~!dW)_&Wf73MUm z|Hv<1c@pt*V8|?SCMJ+-x$cYv#smO`Je|{8h_KU$Jd@clgJcwd)^&=D6wyM2k4|=m z2+!3vWlIYH%3Wr%$=h)L4t={-5*a?jlPQQ(0D3>kp8_pJjWmHlr(2TZS$+Bu*G1@f*BNd#Vh+{gY@))BK;q)}zIyXl8rP@OmgAy4ms z*KT7Cy&{t$>?L{jB1G>#(8vNG*|7*gPA0E_i18!MFY1bFbb|T)%^3;Q^sWSQR%Rq2 z(9ZqvJTYO^&NjxsbjjA#pm$V@2(ZClIkPcc>tKEq6Xq0-Rc+D|!61Ym0&|aJCR$QW zBu421!y-FYx3Z)NQX|wrNm?FYc|}-DSM#uG4BAG!WrA_eE*OVAMb@OcC}M@p9xT>r z+De`~<2g)@S|amYbv_*_Kn>H4RO+WK<0}XhhP1@cUrHG{8M)7`~!u zkm?BRq!JU5aj$Zu=6&IKTOfv(wH3+$b&OE2NY26K1Xn3QC}jIlcg-2qNglDtj=_JC z>uEL+b|`JWjk!TsUUjmV1R)2I{@Y{*SsRckSa#6{}x9gxZ^HO_+rN>`d&FH zKgD{vJL)E32GtM1F$0pV<+Q7cr#-YF*~YP&6GgA@^sjrBR_a3aFpKgBXPtunoOI#I z8^N4RwjRup7^;Q%T0@cI4la9VVCkk9eeMVV(P#sdP zP8%QV8f}JV;YiIj#NTb3%YKSXG5EBb3&WXzD4e~=PmElIiGv5^|K^R8J0p7$7gjx^ zkUHPHBBm(zP(xZ;^SoFSjE|0FW*BQMqb46YGcN+lIghB<9$myqahoy>=2MbMr&YiW(9)QV#9mh4NP_4^0>9e|)I3Jyj|%x`)RD-YRf1=-_fTxD<&?&K4*BvXcO zObI+OjZx#!#S4g46A@x^DX=^H;&1iW+klV!@lF^#vNE<7I;C?k=H6kT?q<|sj^`)} zyUwoZAze13VXIExDm|*aGntt_GSV7D_Sc?K#ypAsg=LARLN|*1hjKR2W{PTyX0b

      6iGSrq-T8;}O;E&X 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%0DeCV$wUeG8FAq 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

      !;-87Ib~u{ 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%0D^O=K2x`%vkItdVXlkS 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

      7g=MZ;@%yG z8D_~(7Yk5Q_AF%rUJ_sq8Z z($_ETCcz(lse2fwacGJIs!S#m#G$GnF3XUJIRMjKdD0UcwFldQ+Zv~f7+y`?4Vn&e zMy!Z%FsfWivnf#k)Ja+VD=tBJD1TtEL(%Q^&Ox_SCDHZJH?Vg3OGsUPh zm^TWLN}$VwBRj?L88lnR$0xb->~$o*1W5c6u$?ocHefhpdx1L#m zoFGM5!4}F20Z^5`vPS-DvL4;1A>=H+?X3t{d4OK#_5@ zs1)bDyHv@{u=C2_3}JZ1CxN-;<3)!R>n<}7^b8XR%aJmx+@h!xDwMBnsNI5iE@}9< zapUPnDa9`U0{`Oe$~1y|gJqb0FiBr&i8^1bOI?1{0IxRa-m63{IT_YPYW}wY{LP|` zL1l-9S&-gm3-{7Z1b#uKJLV+?NzKc`9U6T4{tZI(a$+-Wiecthan=&lNaobsZihM7 z=U{GoV&9ddxh{%)#%%gSlb?(!?SeF}z+)G<6yR0`3n~gP?o5CaFB4Ocdf_Dy+a2;a z;*!M0IJa?oAxn?-VaueOQC%;H>jMJj8Y?oe$8oWC(32gGROKtRBU3DhTcja)fxrV6 z4@$%;v0g`#l#E}QE`wq_*bDS>USKWO9=S-o1?ZqlA;s=YDzTQ$hB>HQt;-lnS%tA6 z+Ks|fzS!8<`lompbHuwHHhrHiiB7s{;&Xk1a)Twu5!#$LS@`wpTDYRdg-#I1lk87Cz2g_+&37XB6?B|#*z9FFm?ZtyBiWq36T`{UQqCorS2qX zmF7}RUonuait#Z^ysrk}DV>*c2s#vIBvogywhtDC-aZ1K1wb;t$&Iz=Rw`)v#|fB$ z&6KIBg`R*OPD+C5y4Bu8px2D`VIooWSvg@%b9?Jvbp42zJ(t$&&F_VNdtKMRjmZNI z%?xFMJ$7xxR8iB>o6Vlj$HpAjE21#XEjy%SDscCfd#2cC$ELn{?VH=V8OKo7B->T$ zrKd}^Tero^6y>rkI!qSdik6EbUnBYA9Jq;J!@W{(27Q6?ig|CV8D=VJIvi9dk1Z)F zb6YXLM|I68Dq4M@jWyORnt;;PA!=q}gCgQ7X>4ce=nWN@luM zRJZ#TtVn8J(${Ay?8?t{F}j4y{^%h3MPEmp*`LnEZp|7vGX-vqI*G2z<8V1g%x8Ui zfSC!IjuKDG`gtNdC;01erN(SbsqaSD1Kb2!%Q&R}DUPbmNrZ9awO%$J5WymoD_3);lVac%W>$&WYY-G zcTFWGxW&8ORdF9Qi=fvwt zj~khInf=$yGCn_V8}a~Kaf{JoV2<~09}`|uHJM3fl8m1Y>Ol$pk^aG}JGNwf+#X;qB+r|zftxUATo`lB zG^76WY*|HibBY9qtUm*w{D{NVPE3;<^8VER-55D!X<^P1@G~({fP39NohxEKzR#fc zCq@iyh{@hy`n=+30p~YD-0?)EfH2KsRY}uJ?oEOo&7Te_mLH^TaoHvZ;DL&!a@Ae{ z9^p$pocKXPeH+L!PYH%?`VolJ#5I@^7({5~Rs@cZkCBD0=Us&v6KgF77b%})Q7o?bsrc)6z~ip|SzlIoCo+S0d*x-FxwHqC}b#V!~f zE6P8)Qm>-Edt)9*bY!9$S42Mru>(|X9_;#{*`@??v{d;xAj!z>(d4IZS+O>P;cD61 z+j;<*Cc-Sb+kQ4&g6m|BJTzXXX9guI?Wc+dab*?El6>HXqPU@ph>iUkbIv=I(3^v4BQK`*1fe6I7DZPFX@Q!;}9$%G)6{V#P4r!mw@xDBU-^3%jAwbKL>=Ck6) zohJZ_Jvk+}*+$EqdN804KEHI#v{OHge+Iu=U?VEb9T}aDdb2dBZviqwY4kwl2UT1L zs!TI{5BZ1E%K%j3Th3cdB%k|qxjO&RE#Z}@B%T0d^f=}&y!y$hX@H>gJGF^}VH(o& zn-pb{gd-{3rr?qy_{>gt%go$3gl=gemG6hSLI-3W%R)%`x|vO{`ebYPEmDjdJwF1T zT*g;KM_aldhz5`$5%`ejKxadf1v{CyTW&#;@wNZKTY%#FyE$K< z!Ce<+Cyv`CujrbYR}~{biCAz1{-UryPtBRm#lmKQ^Ez+j%8vTqs6)54y#GD1|T0 z!JAWw9!%ylndqDisJkAncHWCv875PI`O?^uTjaVcvVI_jS48fMTiNj9yJ^d7Q-$}k zm9`AU$BRF@+3~6O{hY_fDZKR{(4OP-TfCd?kO5-Expg}v*PsU=nrENroXzI|s`{Fy zTm&_#k}2WWCjc!U^sW}aGvT9qnprpYz`R_RoU7i(Z&~Vk6_J@E@o-_FL$KT;>Q)n< zj8m0Jxw5_h;z4Ge$*rd_9|%Yex_oRF{dmcW%VFQdMky;9;+fwVX5Q|3xd?XI`*#rG zdm-Y_(fnrTw?}SgA~REOz^3MytOSN2SHkB9S~PVWJq|ug41y;B8TP^uWlT07&2o`p*Jq|$Yh9|=s&8sGP2=0;L0%T*9B+X| zd}kqWwInF{5db|q<`bA)%96<-VMFTc8#Qxr>LH(yA|$h6ZqMK?nCp+)#ppEz_RZ-?plgXdO1I}-f(66jQH@#&WMnhl+pg?BZ)jx^5*Ox{9VpD6IiZLPBLixUJOK`s zRldAc>NFFROt2(q#ytC`ptU0@^6BnT`0<&KYOZ*iqyCoG$uL~?$ad?c9m+IQ`H0~x zENrK4OU*Nv&k6Y$Ftg9M#DI6=vHXN=$Jn?D)9B6P4VddDh`UWcAFGb(2E>i(L_mzo zWo}xA$N!|sY>*xH+A_JM;Hs`LW=6FlQoy$pg$X`fPhgq_l<_rU70_Fe|u>RfSTE5|EKiS1KK&=k$E z5dJ!EYshg+sTOk0xYaH*w~Lu3GOI`0IWpmz)J_z7?a%$p!JjRn`De_Lp3A_e`I_dfU_WY0nw|qXvt2ijLloDp64eBl?-x3c;F)vdO$`!Ru z)LYR}6vC&&(b0Eo#(n}|a@Wkl*6|p+<>>^SF3ipN{czXnUf&{pP-oL~)~_yTPb%)X z9;pLNwt8#%s01~`jMIyezq{8AGg<>m^5j?(owCkUA*QGJDBw2;W(8H+AcF7o1ajE;8wHSi}r;Q8guyJmYHE}RN z?_}R>d({$SB_F~9MK=Cth`x%Ivn27yc|7~KoYrbL0hOH1q~CKPS@|hHY$pB1(#9?5 ziYv(V>wsh$ZIdN?Kz!1G`z=6{DQ!4Q^0Y}lh3fe}CV1Zhndoc>mr|J7`EIiFTN0YL z2jWO}jASrin^`McG4Bp|t=1T*eWDG;<#cFD60B}eQ<`#{h`8P?c_ME~v()l2B$!h2 zx}enlGZ8oCZWcmjXW04sVW^)f>a?onF_C@VgHaZ`wE}S1eh-NbKc2&j#j*8; zq6x%uDgp^IUH&RNMqi)g(eZD~m)nXD0T=m=+YW6jHRIAgurRaaVY{erIOJw#iyft7 zrb{+2^&1wRe~#UE6D-fnq3W;xFij%8ocIL1EC}IcqxldFIS!j6k zj7Bibo<1fFT(~1YReG~|3i0b-UJ=|TRc=pDS}y^^ad9uOOJC*?xYi2olBMs2VNy@c zc+;C8ebsA?1Wq~z_A@f(wzxwq79#)Q)X6j*6u9{tCnbu`o!%x0x{3=k9ZXH|sH>C- z+3|YPbxFlDL*s7*bH}mB^%mW={&`m7ltDTQuTV#SA`ixcLVMpqh$2O2;13r`HOh&+ zX8z5wiawpc(|U$cvc81$ni$ujzW`K@#}GVd^>N@UuxZ>#N$bdJBLy`lxOp)z!t_$T zoX~(O6tc{R+y8INX1~PTI9pGU18zF@$fm!Li=@P+nv;5|)`wstGjcQ9Dr<{BdU?7p zsy^=f`&&-ZFmmZ@*GXLWxU+sBl;(RiPG`h*(J+94@9Ybv?~=d(tTN#4)N`I_;w}tk zUeNFyQ$B+)vpz@7^@sv{vb6H0+~VgG@I6=+TOj#Qbtwnd*z*D`>zHtyl$x_aTQRd& zSv0lhi)GYB43-C~9!S_Gs&JdxD0g5?&*z(HEI-#UvEnKme0@(B(m$jI*c*z>RP6L~d+3)h@dV(TznklJPHZ-Ky7;u6YLSeT%@}7z zr_g4bMhuQ)=-y(j#OXcEpv%}0=gO$P8bDP)%G#{BK@L(3<9Fp^maI*=oRYWgeX~%SJ&>D@fIvCTF$L@` zfT_k_hFsONYa=O7(k}pvT6=?Fm8#)vb=dS|X2YPE3$muZ6%VBd*>{l)P^41$)feIK zHkarxMJY6c99D9#2Qjf}RR4FBWOV-i(c$CAehVp+Xg;9K-6;Z_THIgs^4$I-ks@@9 z93-oTb-9(U47(V~+0)3hnanul&Mf6=?pmB{Bmm5qKWq92dk|;{y5XH*u+8AWM34`t ziAt!k4q-vw)p8ccBYouN+wm7c^m+@>nIN|pk0BxitJS$Bf*CcG7*&q%acI@;G0ZGq z`s@NlX)2M%%mLd#-uNz(gUygMG==70g)D*V88zUA&8Clz-5XP<_Xe1IWIE2Y2eT@L`c%r$@^ocUM;|{7%=rC` zgJ>h_VMT)E!82o3Z4qiNsF*9aOi2=mpBHQQ>h*HC2Jlqi+=+3Ol$yZN5@xWX%yUr1 z*!hofIt-~Kf!U?_r~hJ+r|C=1Lp9qMJgw}F~(Mp=_`#?RhrSut59 zkW6-xq})Z(LD}$2IP&WX>O}WO<(3ky$@~rR1wMK>Y^Ks5u7Vz3-A$8^Fxu+USfPR7_(3 z7;ro@o@`%kdP8i$(?n{KsYuImNv-O!U@kMN4u@K+0N`sI_W1{y8nQT%R+)LR-l+~{ z^mJRKXA&`;cS&2#TWUEoZN>931r;wn;u#_)Gi8Htx=PqFEHlEZGN81gQ27zV0GEv> z^&eAMuar^;p4%Uu?!OPSv zRsm4EHmJia{$+tXgmGfjWe1@MdG)xWcBEwT0SwF0qL8_|)8;rP_a+tr8>f{ZUPYcFlv zg?ta0S(L?pUiMjFD5-vx!~x?RwrIaBk0YTh?h4eT8sl~zd(mNe@8 zoQVZ@d0{u1n*{^dIfLib%dtjw_!)pbJ4%8r{99*I%S+C!e1|kbf~$(GDzG@Qa}(H+ z;4Oi6Smw*A75@I7BG%2Zim&2t65DntBM`pROHvYuy#B1b z1SZX1u7f90$vuajFEC=ZB|(+to1~g(?r_NMzh$h_FgLU=L0&S$!3GY-F+C%yz3(%J zcyU#U2X{OuW6UH>saetsCK7h7%+~dCO}g3o{|C&<++S|DetKh3=QpNsL(QWuFpo|1L2&_aW+!WqiFKfP zdl9%HGyW+icR?v)#&c!R)eOCmUDf&b_58l+L4?RCrRjz?B^l8~vzTx!Qon>c$leQ; zwAD9srL$Oce8m@$(%zxnk!jgFCRXRon_mUC5(o~wnCj8tR;uQW0q0$ARcOTih$;-s z{5YvmJ8IYt82(BsSl4BI$YSm{1a5aBc}oR>^3;R1Rb-9QRI2=q1$-2)NKWAu>Jtov zBYE+Y=$$*KgKvF)aItr$WGJ8m`V@N?+A#wx%AfW*(t!jY_W)CWIr~Z|l*(z=0D-R_ z&316==_GmBG`^yt{o*GxUyxX@=LB(!knVDl z5$~=3LIu&SB=htv?{paepK-`T)TNVyZc=7~m(;o{lRpgGyEa zC@z`2tU6#GgPBJ>hMa<0nx+r&vg%AIolbL-Bl2!Ux!FZ$yAgAos0dzEoba7&VJ|9w*HNlw{2E zZuigHO^^<(UjlxmA@kik&~;c3jQHS%40kil)ZDzZ0;$s8nc%LQ_(_g52V)*X z;dWv%VyyZJ6gd?UfX5R-Xrjqk|SaVbN|7;|P~*Dr#dvDf2c1QP|@r@?fjSS=4( zx|i$A14%Y6R^#4~#{l{$QX~9(<#B&o%_jhK&A6HvW7eyfTZx5>9$X5D#n!G9H%Sr9 z*d?+UN69>#rbXra?oVk2S$G{RX|9UbAL5nr-kr`vb_{EE#me8^m*Q|w2|8s?Zi)b- zDricUVF$X!j2uRA-ek|rQ8F{C@i)nkELY<>Lvuw1On4(q%JG)PrD+_n-w0eICa+$& zR9-Y((SSL|8F4oe?WX>7@Jex$>_iGU3eN*n-p>4ejEnOZ#i(4L0M`F+=5u(%2-~~K z9y|@j!$x0$Y1<3=#K|9P0@{Of$ z#U0!(Lj{lQVi(+Qs#h!qoe8WT=CLc4{uaHA1q)X38^gJ|BR>}4qtrL1U9VQG;i5!v zGElP&LGPr>wB!N9!Ir7jfYC(-Zr3|M7bAm=B*U|&2W5c z{b|x4O)oaM)=kLEDky#!3~&*1`hVZPD_3KtVx`P@hDBhd)aW4>@4fPHo9{V1v6?CH zaiR0woF-4x*|P@GJq0DoV<|26nSC*3-y2&1|$ z^~W^j26%;DDTTB*lE1b=8v?g!ebWh2^4YI>~z8`G~**OyQJy2GAqKnzLDjPBLqwpTTtSMs_8`7OwZ zH&0NBMYboXJ-HWSiiBaaDO~IzX{e$-<+M_&3{e`(rG;<@*-FdET7rf;k^HPCapp?=w%Ay~1NtR0~WUkX#B#EoF zyeCXZDsPz{$GXr=;XG4a@7nQhwi!%~kwTp>aMesiJuzZ_k>wK$fMijQgS)9!OxcXw zF|Z~x33iFdzbbNX)KTgYB+EnKEoxn6O?elX#S?(}-lRND2&kK#{*c6S>+J zcrotypBvI@Gf1E3*Tt_dyHVRQhWZNu?D>#*zc4gU!=tdpe&1WAn@gz969a)96C`iw zc)d!%ODt0v)L#xO77;x}MLQFo@AmG(XsRYAcsUB(6r9t*~upWi@FqlzV4)1Z{;RZ?9W515&SnVg&cpt&b` zQcctCTzC}}(oyDV<}qC-5Krxa{Ha%fOYnn*9=VYdwMP%SyAMSiR;=M%n6BeAq!Y+< zmGl6fv${i*AAqt!dA=jTMxpuqbAEXEAO7Ksa&ovRc)Zwb8#LON6QT3r9ekIbB(q-x zx5rqrVw#FYMR%gk_WzX`r1!B&0nND?4$LvhJ=>MzN+~0UhSA=JZs4y-RtU=2?h1{f zW4)Z@396-(Hh(Ig;rDm&0G`|2Cn}4*|G0FNlcNb#$;+4Bv^c{|X&qLY4jacrcc}Hy z(z?E0?gCp&mZBgyS$zAQ&ZxFS>4}H?*pO>{V7;G!WG>}j#k{(YOc3|x9g6JU`JcG6 zt|&S}gsq`Muh7Aze0}|cJyWaxm+v?~Y1YP+Wa+N*ys>(*CG{9STvdV;z#D+k0Yi)$ z&oH2G@PApnS~mT5^sci`pf8Gv7_$eBL3QAMY2@C>E0&39mYu z%c$-)87x!+SG?DXF(Tse?~Ogph!LyFgvdp%78?x@BAayJimo%}@}zu;+HV1(dcJ8R zAw}FI;53k}HRW~7M2)TT(YJZ(PenI{oACdW>68Be;8!9aqnu9Qug`XM7Kg-U$}u=^dQ3O~YYXlWY|hIu7Tt?264J$H#s zfm+>=Jm;HyiwtbIf5Gf|&1tMmS}ZwZE}IF@9|Cez$Q-$g`43JFKLU{<6CMAm_EEMT zH-qCwm<-9|1jnz?~WoK0^PUdRQx#=V}0%7@x;F)oPf*gk1CLGLNS7qImuiFtge@ z<0j+Ul~1aNz?eS8VjUH_vVGLdzisN@g(;TI?o=lr2OmZs+-&|3*n~E8bBj^;Z8|m8 z$m|wI-L{{qC`<~w@UX^<#|!%wQGb)1sL=7jq~yA~N`+40!$bZ^(a6^g4KT3Xq9)uL zl$z`T&FpL?a&X2zd*sIK@=pA&LC$=-%hnh?KY_HC{;u*K0GXll+Kk$0NCh`9^~aXn zooKU|=JCZdt_x&kO*_L%Tv~m9A1i0;cL0!-5nPOSAF!z*>Nbnbe8=`D_~v`jm4GRw zd^pZH-jf!zZY92~D;D<=SDc8*rW5g~m7FZ{Ii)A=px%0q65rv_csJ4dBw4&#CyDvQ zhsX1N8w0=m2TN^IgKyD068{*Y!hNbP+Y;d{^<4^Oq{06N1qtc;kxxq!%&F zMj#Bzim>S>w#N_YHnm@&R%d;c0rccE0lxl!tlt%*_WK^6QU1a8r#9*P``a3*?~?ys zj2<5z=!Ge9EQvW|Eh2a|w=VLJ%=H_yb5z6JH zA5Ro(M=xXEX;dQJpdx;FS7s&cypDo3L)Wzb`pKQ|@9&|9%}PqlEV@7SvB&;g$kpnceu689|2Y*-eAGO_rQ9qqdXZw`YZ{3bZ4CO|2*9O|? zzJfJpx%poX(l?(k)DwVgHq-PUqtpBW@|t7WQ+6mmW?}F|69U2#Iz~GMABF0qqP{iISok1T8f@Sz-e~1= zbMv{Q9Bpv&FKYk&))?%ZmqRFtoMP75aw#k*$1R0GL8v)Q?&CEHsn-cm^SKDgG86*m zaV{ubl)$EqCCCbYhzUXFgN8%N4A=`#6w7|FGFRhS%Oo(5fS&!CMT0yf99 za2(_4wmF_fY>M?4)>!1hW5HuAKzKJ#D@@mal~mXq-)eGSOk-U?J|(tjY~ah=Xc;i7 z7tPJ55(!DOyP-m1b%sJYtqdrS-tk=An3@Tsw2kt4Uxzp*6|q-LWH8O7>;%quO@7x~ z&0bTm{9C6{}L%=y9Ad?ra^gG$JGxO#6Ozq*mBiGO1Q(ba8Qz7f5Lrtlj zKZE=l(4L;U$ym%#f?ea~MBmrrICG;)fR?dBW8hw8f#&61icdv2KIZ8q-XDi&Z+Z?Y zuC(Fs^+fw}`Zb%%EGo6|q@_%EOvY4bXS z=4Mp}k|Cvt@!c(&VE+mAo0{V#pH8?~0Okf6@tPTh>O&4$5;-+PezD4Xon=66&>T+* zIs~~AgKzJ&1yfHppLpi)gIX^&Gn?%UXVS9F6ioHtLwcqylCknrxc2yvZBS3=>Q%$# zb{nYmEkNm;l-*L-Mkf+JYB#4FOS&q^a9~p2=M+~cP2L;Hc~#Ge6kFE^ls439#~jwM zIFI~cVC9luCvn(0l9g^|#E=pddOozEmF(YRh$81wYs;yL6_Ev)-LF4TFoUO=btEVy z;q^}W`l@@~S#IAsQQzDB!yU@FOO(#~_+I(jI0}3=w>}^d)jcv2uVU}g$d#o93BqhW zJKDdmM>WRQZ{I#%!d)s=Qnq(}7e%u49p+bV`DfVHwpjTLl~~P_Q@C|Ppn)Sl1Sa{h zlk<&x-)$mFn7$;gw7oI!RNpDXj0DBgR5hW?6H&AG8xa%+<4gDnRm0U)@_S&7>2A(T z$&sy9rlgRm!~KZ5W51Rq^hq)72Ouc+%0Twt8Q5-$Qd`m6e)*>Q6)wjw;F>ccv%fvg zV9@mI)?JEf8enOm8hV&0ayzUCyLdTU_4j)I0m^3uI><~T&Kh=-xH~&YoR28UUh!Y~| zrhUm>&9wiEl`9j>^)^_t=vuvL@|(-?+Q|_4fBsWRTPFWaa6LD{)=37psHcp~-6XzC z$9pLu^|Mh_JG!rMF?{nIJ;0As_56-INa;UR3E;wIkMr0=76VToe@musKWIBFbQ0 znV?_Pk?bc22ZoJdPzdF5l`<@W&d&gg#zvC#qEzqh?ZoqzL?xC&^C-4IdSZrkq`I;I z+@QRC4hb9m+9#k&u?;oI-xVv>qXi6M@_Pqfz07mR8s&Rs|L8E@DX~feEcKx5gGH@gTmuhSGzYXmfgi?Io(C| zt#?W{86o!>04(insbyx&q~jTCc>yK0;NcV`$-m;N^@94Oe`d?dUOz4^Gz>Vo52~T` zu3)a5>M$quU8+a!5-VNxXlnid!&>Z747z`6nDp{hCc_U9#(q^IiIkhl_genIgXyD+ zCD=7jgc*g%*!cC;1i~|geeU02(+7ol---#g-An(5azf9W)sKDG>+`8*Plh+EiEc01 z)1@{#iX@oAtwOcN$T}G_bq~yys>e`IwAC`;#(!NWC6)x(U7TM4pzLH_H6yjW4q`Qn zn0UsMVOna+t*W6?d2g8$%cl`hPh&X4TbK*&WMOwYjC1?1fMs$!OdS{8GHQQ)laYs* zrJ;pJgS~4wJ%fIlM6eK2R|i<<*&u3La|k=%f}Ydi5qs z``&ggukR`|-U&1@^=_<&b#zmSId|3AW;n&FU$$#95mA_gXX(!tvE6K&5+Tv_#4&bHQM3s?*G*rAPl>cbfE(X zn8}Rf1kDWc#pur3YYVlTTsvyv~SUW#_p2GM=_I z%A<6lQeMwaTT*L3zc8l>=oNh?LWl8+szikgae4h$uN@)RoV%YwQFroD1aT|4^ln>I z_=xPk^xVGL*UlMbTC_=sO-NuFN=Sb#XlH_oBXH%%`-uHOregck*3wu1+$~! zMGRO&%>pz0mSWXBM)Bs{SSQ%Ef1eVR62N^#&u!H%G33{sEXq-D69^cPVdzYYg}qV&gLX!9IXR4-mLS@hRYum zUm7(GjfzW%nl8oZQb~LUpl{?dGaJ>i%=nIV?SOIt$yEdvN39!^ZlYtS{`sakkQeoy zw^kgF(`!$rG?lp3NMpP=)*3x9*rn5B-_zc3Nk^TpXjXZS?q zAH`i;G!*o`F3IHLUw0B;5$jr|{Gz?u&u_<|;h9s|qbFfXz`LYW=m)vDcVRm3_sZoC zumG?O-p%xKEr$r6U#?Iwz#OxPx&*Ue?K;ZjRkbUoRRnFSIU!RiOj`s-uXnI;rF$~| zyj4F_atx&f0ZUEFOtQ#1d;qM?DFT$0qgdDsvx!?QLmrIdv0V=Pi z#8b031Y5GodgtfFz1x*DIY{l{E^Qw|QdiAHZ4^`%vj1yh@y_N~QjuU~s0ljcmytp9 zQk<%8#9ZGYAQiy#qH*{)9}AE_pjZUip@YYYw={-#>F$h&tW_s(G*6n_lonBtPDhBd z$vLQCt<aF07d*dl;PJVab*3J}nz?*w6!OOQS4`2b{D1=LMi-XJf9gHYj=2bitkN~#rV<~$D zOc6vXg=9@U?U6T!A3h%e5M4diXKQ4r!3K08Ic{SR>dn)~zQ*`Y3N@vBVMl&Bb@#== zu$HkOh_x$#7uyiNCtFzhFs~TUr zn~vu*H%if^bE!Nd2KI_lt}$4`kZCVG>pPni+2oGf8J*i)?hQ-znzmjI$*luq#|)8( zx5Vu=0IsM`v@z=4nh$uAPr@_jl$NER0MyNm7~9o{h_CK#e#`uRC_c%-O8Q+dhGpvz z&z`y3Blo=puoOKp!eS9vKV6|x-mY!*VBYpdCX%kIU~!KQCF)2zrolyknA#+Ny<${ z^5of_=z+G#-sTI5e;hWa)tR{R8Hy2@HXIMq-PS*nfc8d8MxBIhC|P7Mt|DHdlksMq zs=6btuq>JGmLkk0@5Mv{+{J*k<_dr~j_icAPczb>B?qMP`E-G>fm7p4oRM1J5sZ|# zsPjV&i7xiJR4Rq`e4==biF&Z2j$SLTUR_Ca_F^taAyCLNo68nQG6f1?FEn~eNC%^* zQSukbp_ngR((&OH`Zb zq<>T@_4m>28>Pn%AQKWaF-7e|5LdiIba*6<+>351xCeuu0nq%gWj|Zs#lq3)l2)p2 zL5nqYNHHljCNpnbCC7K=C9u_>)^980i-%|JgG(vP-x*nQJr6Z(F*rS6NK}O^X@?Tz zi$%~O=Vh_v=Hc+IEBSTp{kuQ;I*&|4%izc|fA#W?Iv;Ng>M`VDXhttn%-j_i(Hsww z6SJS`i%bx^z5?cRekxakT&Q1t(y{$EI zuc?rWY?!Swj1&2cftx|&0;UqwfO*O$x`axiG&2@2aB=>n(?WZd`5l#T0k*yE zrq<}pNNwi3Y(;h??wXtBx~_@D69DG#Yu>EwksKUL7>gq1L-P4pCfrD2K7(m@I(Flp zFS0w35&H(1PXMfmP2C8_m$DEix^|Vpv;@7VpIK%c!Z9Ix093Yo41f!l^8NkYo)}7u zRza_63)Mcz!mynT1;V28qc3x6-?%Wy7V%71dl&AdvbT;tKvZ$2Q7IqVU0ni+&- zyc!ogN^Rsz(~}NalLsl%x@9=gdUT05S4qa~jNmP!5jPktovKX1$H^RxZEc>e4 zWusd+C-n+*KC_5bgV{b^j_{CsC>Q9)v_<4S4_g9H?r3J1GJk(Xq({)vbSvNdeSCU& zsL(qeipC0n*-m$GS|6^v(7Lw-N7HFM9(HS)Wh(DvF0j6?)cD@-07&)l2-5UBGE`73 ztri9ex6Cs2TyGj;*yEe+ehgYso-UnjtPj`A>9*Y zI9`;0H&ZrejFAzwcMBQgsFXs5h_25-T|-_t2OcR_=Pf{}GOsCSBx(9av#$0y$V_pE ziAkfr&x+d#o%8dlal`pgoEj@Q{z?&4$+^P3gvswupnamc+?NGrs^MKz1XtsDIWke) z1xVxgK@z%-N7$HG6k!Sve+t>uguu}cQXhDa?BopANmCoB^*GArs;IhHM_Dzs4o62VkilK|$ChvWtxhv-n{Uf>$2n;El-GPOx|8 zNH0XHk+M?4!Pw*IZjHkjtN(jIPokDn9A%DaPJny+o*`>mu|<#y6=FVjf#_&wP@(h3 z0*L7A>+2xfEoZQ{m6tdvJ-G`>u`k-l-0f`XhSvyqKd4Mc`Mf1ojJ0*b4*^SkxJ!~= zHHl|LV_~c$`Y}kzSOu``u55gFTCHin`TKbTn@RR&Abkq<&y?Q@80w|A?@?iCbOdIV zyuCX{xsTuvU>#Cs?(C2#UO#q)Mf>OWal8{iB-VSAHFWAwC3ye z7NAnf-Y}WgeF<YJmJ9C0o#3W5G9Op-vndMOl1}(umfZERB+qoUt-HM4qVsrq`sF>VARZlSiPfudM zG&*n1p5-3N8^e{0@A@1`TjJ*xqfq&COoXlR$ti|#-ePt!s<`AEe$G4S>#H5>I6bmn z+TDPaV#dVVo3I4!xzf?WEi5}m_OgQGEfTU|oA(>s?qxUPR27loz{TL#fNoA{f=W*M zBd<tdDChus>~@(@0TBm#tw?GUdUd1k2{kZEcitKvd|=8P0n*j)iYsV&b8u zeRkk0I$NJA6wQn<5`KCp}A1L3?Llj9KbV3-pO&=sR_IVfiUZ*^dSH@s` zP>lkL8J1p)OW;odeHAR6kp^i@>n|6}>b|GNh&wa8IM~cCzUWp}VUC zWnDMD%W(59D8Vx9%X{!j`kO?*o);&Hgp~X8&ezcBTFp+AhE)JeRDk_kG7Xrnq4ws0 zA=mGaFX+ar|9tJ)M_{N?a5QC>k^ySG7!`OxxgTcL_ZCzyqpA@G)$Mld?n83M2a?VK zh@ZOwp2Tz2+t?jV$fjp8-H=&N=IGrpbQ6NL4EKaB1euvPdshgLNvSUZ%dM&g1eQ;# zFGj5+A{bz@VMbwdFa!PO)+;F+lPem+=)MFs0A%DEWUHcfkCJpF}LIKFvpk9>)jHnbeL1+ZX1K1_LkU)zU)DHZOxAK+>J>HH!?Q| z^b3yf&E-<~%wPu%v2m;O-|D&-K{LjDxlPOHtR;B3%`*{$qguB45}4a}MFrI2q;#L5 z9UVL*vLsl1mw&_)DBDz*v5N=9!qyh3Yb zLe`jV5=W1rw_Ei8<2*cW(vcc?KvqYyrxStxsEAC4mZXXD)hk z6!S{`3twWWKwc##3$4JY%&OWOoFIIjsb9%7B=hRX)aFfM!)A9S?k>^x3`5g4RQGCb z%$fFi&G#YP>%mmJ%L}fF9PaOlWK!3o;VAUfbOY0GOhjIoEx`D?^UAJ15mZ|Q=gR`@ zRv(2Wfq56+9vI*~Sc=wOnjYsUPFhhf9S21m1R@POZg}3SQhew33a{Mzu_}8;$>AOQ z=xHOvO64tO+%uRZ?kvtUQP0-UX6t;d9aNRz72Y2U>}lrNro<*LgBoojD}^m+5$tuM zcd$CLpJxFe*$JG|Qf|ZTegqC^!HQZp-F)u8=V@(fMZep4)m&o7J9fXB>zjm@73*+D z;)|__?yj)`*vokU{V)zpf1NbELL zd9o-582mrO;9`Y_d}^qw0=#M-=Wu4XvwqYoZ{~slrsF#05HATd+*Ek7HUg8aUQlkY z6LMtWfd-0MK&oubV{B-OZ5gMV@Ov|xL$9s&%7~BcRdpMJ`2hn_VGLwQluuVjFzjOJ zyw-t3;Q9$z_VhF#@5*+cN3Y@M zU7r%nN@+?p2>$kaQc6LSe!2!860(dF*xWKRFof63H^FCeR1dsivoMW`rug-2j|I}w*+I};)zI==|$%DA2agTv)|bmye% zr5S7QXXFhaZ46ytg0~gym=bprNQ+p0+Vsf#f!g=Rf@iGFTiuiy0#Ip8w>H-~V#pYt zuM}0%YzfU3Bsp$}#7oZx2wuu#Y7b0qO{loa*Z&911+(+f+%)EpotK{LCZ}Tb8i(p& zo1=I&{0(yC(ky$p002NfNklfp>(ls6j>=<~>*XwdxUx97@>#anl?Rn) z$3l?xhC1)un4xMAoKO$1bV;HzN|u!B7%2fWpC#N`Q{|(ij2|Iu4(M9uk1bDmGtjNotulnnAp4byoNM$cT-2F2Gi;8`2heb zwo5N1VP)|EhJ!xBYK-S-UgPPDsC|24r%R#k-;8~^Y(rBL$K#3>eSQFe<0H!+36|Lt zqj!B`2NIvXm zdSfo9^Yf_$OD7U*{A4IGmUd^oV!-UqOjMFxWKDnL4KG!*ya@F!bQv(!m_W(B1nXT3RG~A^hF8Gf z3+F9BqipxbQ*Y1m$V%s`Gq6gBdcY-&nIT+1uBz?p?ta&oZiVhE%@KhgLnimdUd)wi zbLN+4gRJRf9sgjFmx9b2B%d-Rs*5taeYbJe+p9~~Z397n2Um1=axF;lQBkCTp>W{N ziA(EukR{m7bM(NDd5)$dE3;d3v0y@XYXWNZz|&8*98>`_kCQ4XF^`iW`!b7-iQBnx z1WVz~TYDf_c^q**%@%#-KBC!CWZa!~ajgR-X09PF0|Mf2^wrYL^K5Wyo^#OZ+MV9f zux=Bfj+swkyA2^vBHRwJIH2Q;K?r|IJ)UqHTek1hVe~TEcEcxRNOz>&-quR>lYgtj zeOMJtYgAERW&Gx_N83fmcibg5?fQ_tK_!^LpcF1Dkj$+Zp}(1_St=WxzXAsDo5U^y z*r>-CWy$m##;DoPRe5=Eur7353|I5q$XG1XO>VCu&y`Qbd|Y*4BL+`SAkK`{Dx|AV zP#t80%0;;O?s9}Fj1(W3N_B5pL7-Hq48dOHUH3FFvIoPGbmYkx)2rZCdi|OH>d;X= zf+Akd=!Puvx>UOD8OdS`7F)N#dH-z*KPT5`xtxT{YKPQs{ghw0Xx{e;_0M(=CJgc! zDX5K-U3?aHE8{E1T92|Kdk?6T`YrzcJoXQ)NWT<&X>-==n(`z{bWgVb>!j+~8nqLc zbKkMvII}lX!25urE>TQrFe)6fG>uC+o$~oc5uxX|W;uI%6Uy7Xfcxl8+6qLwtP&Z5 zo?-$jCuIzx-qmpFNH)qQX4avXL&lMT*N1t|-^1B6wZ%wvI5%a$ zh&9cO?#`5X!$h~jY+XLArLxSsi2)_gHqm^2M+K?W-{XWtqGQ%eb9=Yw9B^ut;gPT@ zHJ8V>EE@{k(k%&wFef^-3k-W9Ud(Z7|HhEdOPTOnigR;-I+#OuqZhH!V-GQ@6g5L! zYVS}ju^)*a0^49~t+%?e@HoNldZk`IYAs~U8eg~68(&ktF%2HWo}8~;>qYR{uK|r0 zB3G)mNBQNU&67Sg6C}LwhQ~t;1ZTR-VOaHhbyx2rb5>8OTH@qVymV7`oA9L>;MZX~ z+0v@g?+p_9O-sc|SY6p>jyn&E$! z+GF0P5|QqVW@z_D;w_&58rR9~3>0BO=60`FV(k_;3q1@RnkhkAsiKhQ%1n87bH4jv zZnT#J#5Zm)Py>Qy0;l%WtHCaC8ItkwS-Ri{g|rfN0-D*>=cr_e&p z@nwhEW(LT=*#5)S#VHXK>sUI%(5qr3=J4a;sTxEz8cMionbDTe z$;1?J%VI9EIF!`ld+RM`9J~WwAdWq=)cG2Nh74gR%mP3(Dm<>JjvUR0lJK^FgzViq zFuZG{JDn6S7NgPh8OX$65@qoNz?82iZh_~>Om`>;o5$1BWo}G1U4luKH6k@H*ID14 zX$lF|^}eKQjEmSmpwZQr%1vkVVWYOIJ?i9PJYZ^Zp2V#L-iuoqz=eA=nq^p7i_OaL z)d5zX^(xLd;Xu0MlMyziFfnY=6ZXU00)nE;94wi^oR8J$S*G~=`y1y@W2oCTk>wAv z(=cNO$Jpqw^iuph>C?Olr@#_a-d|7FGaEzp0CH~ua<9(0fbRJ^$71)TH%XrTZJRwtO>pFy33dV8o1_s<@ZFxNw?5hr*MZinaiZj#BLO3_8(8GcE3x1 z5mNIfg#SkGf1m4~p2Exau5%;3vbK0&C$*gm=($OIS$OfoP|OyF<{?!NBKv#W8EEXX z!JoYMX{6r*6v5;^c4zsdWI7AEy4bGaCB?oo`!B+H5=|Ns$JtO6ju{gqFj=cAD)3S6 zx5oq3&5Z}+ad(PjGR^J3AOr56sdG_#>~Uz`ZcfxiLO+Lf$p9zvTDFUXWC&4-zT6Sq zN*3mcWSJFLfE~o>|1*b=@w8 z^E7cJwh{{J+du)&RLc2`-JZA7=HR-ukW^BjARjOLRswK+>V5opI^Nry85Pzfn=hw-_t9p9~HQxp+4X*{R-0@ zJVd-W!pbPtXkb<E?aVN%`%Zo9vUrnz-} z0(vp=BzxiyJ#KDcxWSW1JU)W_9vKM?+ls?ask%2O=Z2) z;as+Pw!>nZF_#xuAVWWMOOi_~2>CU$D*^>)RWAh1!ZZ@Aa7 z=#oB@frmNl?XT=2Wzvz_()B!8b(^G;=W#l()Kt6QrHof6l4DcVe*_+2JD>L`^R$KU z)c`t$r1N)Au3zDVd*fbKUoeYdksX_o0SJkk>kkY{Rxfc$yh|BI>5!iZU{QoqEVf{l zkb45)I>Ynq4F8#XG6`0XRDT|oF5kTwX0f=DveVR*iNqx3@^VYB11@Fur|UC0$^@_t zz;I~=s^Ougm_U#&m{A-z&(xn?;!TE!q#+x}6{DIqy*8JjmY;Z+uM3yQEx%7hhE4AkRP$=Fu0)tvBmHIV_))n0F+w@UQPUa`>&F#zUgbJ%HJ_KxMVcrA>cT%6R^$?d4T__J`W>ad?ATE0v zrM$ho`dIlIsErvl)OidaX2Q0@+i*oU@)-bwEcutZe3;v&d}3^qT{oS?1FAEDA+?YO z=9mPF_WvYE{$c&IOnKx(TAp1@A%paK2uOKIj%b-d?ua#v$5PCL^h(^S$9Bvo4cAW~ zmG=2K`8D-d~V|cu}B8)R*VcX1#Ntn@A0m|LEaEZ zX;*s!s{(o8Etz3a8Ghv8{Qgdxu$p4K7I~ucz&)wfVUp%F+opKEW`v%fqW$C|N`hbC z-=aJ)NI4A_H8u{2u_1Ud3v;lb#!z>emv9PnW$Q&t21q;(+2&nAtS?siI$g}TyB=et z0IL7#FH~tOym~1@vByI-2dy>_u6-WW^8yUiC50Z3!I}o2l1OM ze}{9asBBWsWNh-li3fUoH_HjIxVe%;f|CaDLvlw|VBd!cdSJgRO7CsoF3K1_$zM^D zEOMp9l`J)r)6D@>r8y$qCCF^pi?0MC+M8aW%;PPHcQC#r6R%7)SdrWjm2IqxE?yeu zk#lvU2}RQ^zvHIC=$LCmBP^hpdw(%vkKHr6UKl-o=02zm6FuJka!jjRvdIzK;V)=FJ)Lr^>Zq!%Y z1!FljhUoRyfBO0=`1_T^7|lO|j)K%2GmORIe-r@&ffrN!dz}@N$Y}6Wirp<3HX`Wv zq=f&<`?&^O+5De1-}CzNQjC8 z*=c6-a`!nu5LZgdrj)zR)O%_!rB{;qn-H@qSA;q*D;x|QoGG@lz73R0+%9#SVUXm$G z(tCHuU>1Re^ZgF=a^CjM5X7DE2i4KvRrGR__)k^NZ$#Ay|ejQUO z{OX=fx6rC{tnFHrV;6i$t?muUcF{Vjb2DSKr&Jk!Zbec=u~A@g9@kE#-Ahv~J^I73 zuND9>hxAb$A(-)C``&o2WZ~}L6L$x&QcB_P@=yQtPv74|9>j|%sKG-Be4baDufR0g zu18DKDIlm|E#~ar6u9v9v?;zfV9W;d>Fp^0o!RWayw4C8oAfV85n&ItI4|?W|w;Q&1b0vc7K$!!4E`y4pT5i8n<3UCa)%;Cdr`Yy z)V@qW>BfB~upWxM#4ZRkqev#Q8RE)#&GMVYu(E7!Dn=66!mYST=h1879$|@PrW8^j z1pBhWzjQm8mwP@ZX>OQks`OE}O`*>=N%d_9E11#26>C?>A zVU$&MEb9UE-m#W?-d@#;n98V;TXxHn{Dh$eiFS9qb%6{1|CP@Fm;dE|RZ1z$|MFk{ z%fJ5NugUQ31>TODk!9w1#+2uFJfC-})LcOovE~4@reGp@7l9!lSH;;HmFo26_7_Y; z4Snfbu;hCWmW#soFJT>QX^AP8J#LhUzWMvV{%`)9|M6e{>;L87{kwnlul|Ss{=fTg zzmIPxh=~UgBG9VX(R7#vQUnvt@w|fkVvFT}?Uex7M+@0KL!^ z$fw~}K4pB8=07A?rEI48m`3_`_nK%&Jb}zKrgM(PNbN3Qckm7b{-g_TT|Fj7ak7Q8 zuK??fQQ~Hq6f>_RaJ;1BQvijTsT^PXLxs37mGb@l{crxw|Mb88hyU>X{rzwM=YI># zk3hTpq0~Q?l1w^fq3ewtf>}TY%xpxEJ#%lzu@dX%(|Pwd?)UFEv6sFse~Il1%yO#O&SiL6=7C~D|EIp>j3cTvya?y2_% zTuBy-z#?oGGVtauiSAAfB82p-s_Qdh6dAa~V9WhAhF1WybzETKaW1Yh zjR@%i;D^Esl;tBAHOZJtDAgsZ9$`(Xk9TIUq|0$d5nLOsCNnWIn8>^(zHt{a0Um*h zJI!b8BE76`h33lO8vvoLUjW?F=}_fs*E+hFy5*vrx3sGY>d%re&p4_5U?kVK0V_7* zbvgnp$o~mZcoPR#<(R!NE8e(HSgF{_`g>fWGrwmpMEttQWo}0@Zrn>T^E6HO)tzyr z-=R2JC%b|_q)ooSIKg7c~U^sXke_-}sCKyvSjoSD|Q>iSinhU-D zy;R|t&sB-8y5Lo659(j^%P6K`E^3bn&fEtSHv{u(;}lFGjH0^{ra)Gra(;L22bJJkg591NDufm&TsCZ@)7`!Z(lU14|@oLJu;49SEn z=OF2jb+YUU%(s_s%JGt=b-0k5c#_2xTM9AVDGcJb^0C*X*A2&;|0lA4jB6PLtjd2% z8uhsA~3gn&nzHXvv+5 zmX)x|VtXvrOlS~X3NsyFSj<#7P<`|)8JGzTHVHg4NSY$jTuh+5@G>gp6ihct;()A6 zyV$E_%L3(};1oJc86}V@ zY=^dWFM7;wOP~vE@Z6medNxDtKE@G95tJ0_v6^v$&&=!@I!NRJIiGmiL9J_4Uh-Yy zv77epodH=TrrL|mGIOGqH+If{61>{{QN%mdWe#`YV-T5PUg)>XVVOYsTho1h*(bVKZRw z>P8LToPDJaG>F6uuOFM={WO4QU1Yw|)fHo`-i9k^<5pfGvPY%vWw7E=+^i(ZIpxK_ z8G*LoPJL2xZ$K)4rfxxpk4{W^&b?ZJK@+EA(3Kcn4ub~PuKmr(A8%0yMabWyCMziP zAt+llMLv$ldg6`0111mN8rczS2D?)2lpMmh0Lj&D7VK|RNuZ|~gx4<^z9&#Pr~yVC z#kIUk4ZJ+Bt0nQoUKBAKU9$4dKzgP7LQ4`}Fc@lJV8r5{ghw%&6y|w&n+ISnRJOeJ z|CuGAQ7DDMt(PNBdto?9t?mu&yPP_(%8aW^Y zc-z5ZK*sH7as%^UaVWn_;njJ`q*qc-U@_rN%`OW7P?s2>%K9U4L&Z5MlGv44 z^PHc6%p^kxQNzYP*XEH448zQ90%|2xB=qT~D~Vejw?ZXq*moKAr_-v~ZTWb>7)kyv z%V<&BEslxr#va0f?Qi59jRJXyYj3qRaV{$(S+W>V>5<2(IcZl=vB&V(+v1bGK1afmce&aQgqKCe#WEfeM${g;6jgk(c6U7|x98CSEGtH2pxF zNhdS0WH2>3k0E;yc)nX81=#3>J(VyWS}d7B@iLQc#$ValH#5T{rt-0H{agoTMB64| zFY$u2xs>m^nF~>^7OF33J!7iwHThA_1sziy3A}y=dc%!*^9np6kTs^OX~X58HTA^p z$-+;KVQZti#23)2*>569E!hK?LWRT!SX0y#x3Myai8eqHRDZo&a8HvCbCGA{w$j8@ zJ|8B$lSsi_yUBpM#SG%|UM~=<BX*KyZXH!)(?R-=5R_mmDqKGO57d%B=R!` zNw!yEhf{Q2P&9jNjphW`o|0tTVvUQqsmcD$S-Qxq5dAU%6P|M!>OC+VulsB1#qx^{ z_(AWv3+SWsI~arw%@jdm zV6&zVF9}l(cmuVGj!iFtSG~Z!MMFwB-9X0XV_KejPzwNg?k0Y)E-cPIy(?WXISd9@ zct+J-=>#w{j=3^xmFq^#I!O*Z3GCL0QF>k;oRNTcetY(><{GkXFFisE>m`aw#Pi4= zkvN!jmD3wDiY$fxum29uxK7IqdvTIs)(K_-Szs@Ml5$HhQ}EJ`3X>lsQhMw?87wdn z31;sWMK__Fr|!Zj4Lk3TgF8ALGqi0?1{icQnHHOTmR5lmc~-XIg@b@MBxn**3>Ql# z%IJbHx}w8@Pr#Ahd6U9oF<^?Ti_9=ju->-bUKps)0C4-VHJ$auOHf3U_iQdVJnJRHArCguj(pf(puY;*4a(eYoo-eJ$6!Ac+fm1LE z*11+T$do{!z2`O;MFskS-h!(^O-^@W1HL_WEL`qz=yUBou7Eg&5iu`rx=In za`B`oIxnbucbVA<76XqZ(@9~XQJ}|IpQU?y;9X-?4{(#HsXbVqCH7;b6fgTPJy9@( zP6oEO`-=KEurjlbT)9#CvfTR9BO?V#y(ve3zd9%52$}61B(Z015WR zyw^KZAvaO7VWw~ahHOoF<6v8FNBs;yPmW8>m@0+EB}{5ZJM+eApo?diH#rv?VVrc% zp)Q|=Z6r0-T;p}&q#_)I>)Fw9bYaQ|Zw!Ji3Q#d)5=3fBXzLnf+JDT9=Se-W;4qw# zK@&VD&b}gbMS*#wc~vn?u(RvQ8LEAMA9J%J5r)5c1o}yWrn&E?mU_aBmEZGqDj^`B znIy1wMSd`@cgN##vIbZW7D}r<^(cw8mj%IQuqDbU%#rfEQwf8}9sGNN!yBefQfqzY zNHcdF!6A&QKY0q?$YfCVY5>pZxX|OUqGxs-U7@cqirg$aI zA!@6zz6R8rU1yAe4Rqn{N@nEBya)n4@Dv>*H&P&L08Up1GYNBQYLy9ZVYnsc%^X3c zkoDDWyL6N+0g|;57%ED8BOa7c(*pTSfMHMbNdPW352d|DxHi-@2KI({R`U)qhB0_$ z)h3;dohFt_% zDY~rUr%LgejR?$Pnjj*ndvY+rUr$dKJww1uGPlMsq!Q&IW-+WK2AA`Lc(ZHv)H_La zR8LU7C;UvYq$H(>an0mG5%J{Um3CObjHaetcn;7rtLL)+Qp^tlqlFOYzXslJ7HXKV z;!AE1N<8seh?<5arKr{{?MhJ~Cd?_kdjoN)VUfhB*`&^{!xW|j)bhJK+w~@0iJ8ks zy~+>_(ADt3AC*=JCUJF(`n0MuMykZ`S2U@fddlR^c zsmq%FlvXVjR@Rl*%pjtvP4q0tq@$QA?a6+md<4_>iwL5*9FQa;*)zFS1Gc+}E==A^ z$badHNb+M`x^5%yLrU>N0u4`6$j~fK{lE?#wM6xVI#oa?7uq;W~*vg zkl%X*y%{rk;U{1vhwd)Ffbe5F6Mk}<|MfZ(k5`CPu9_9eFDD3nw<$Nz(Zz-kvno$2 z29U=)3IH?Gjgs=x(O8CmJG|Zk6t2HfgKk)TiCBuBEY%Ds1VBEyJ?8U_{7b;Y76g^3 z8kSKnIgH!2)RRFP&DKeERdLvH*4&|~Zo!Q(r$|~_X0u{t7$xX2oFtf+RhN_rbGud1 zBI#_*dgWYQvLp_Ybt4)`X0C3k5f4-2@h%G4_>h3{A#5aZAGZw0LFTH)U}zw4zorh5 zNGY}lm(M}o3tWYzd zOPx$EVJHBzpi8+4Flw4jg~ctVR#jBDAmFV_R*lTxV&)JrKLM#cJZZ0IT9T|u*{o4b z3MS$P!O%j`Z;+rIphh)}F*4?TI6j<1vm4aeMgP#F>>UIZN3lrDQHG;{)?k#HeOv))*7iMl%gF z5d8jly#=T_lNN-xTLdoy%TXE3x;~kSvYcX(a#k52>*|n$ zW6-pEta^BOR|!|t?G7f{+Y3(ktM_6%W3er-&uDt%?J(7ed_AOAvAr0?jwno9{&3Bi zLl9`XMSi^9!Bx|xOm~8lBkM$6mI8IENH$8sIitHgja6f&vwxFknXz!I{5P5QVpl%X z8}j1yE}(p-vq$r;C9zvy1DYahs=G%e)=>{hn>V#k<)9PstkRj&3Gc3IJeWVlVHoKo z<3XDZ#|p{s`z z89;Iq>ylAJXxuElq2qllOGdYb2FtMN`G`|*DdH~rV9l8Z z#?b90df;akJ3Czl7^1w{1@N|*;PxUenMAtI*<;&`GDCql4{Et3_*dEia}`-harDaX_`Kl{Y#mNcBz*~+;b>i`dF`; zD_zGfy}W~RelO&v=O^`)r}+94PfBnpm|EU4At;m2zUdCqN0_!hG}qp2$#b%qSqikd*T1U6ch#hPJbN2i|9MN_y@JZ)6gvCN`)HzQ(icFvnqAIlq zW^hr8O>l2XsAZDdlC#q}wJ{l1u`J2t;-q-#4&ZX`o)KqxW=5ZtQ~}^3?`K=$(d|Pv zfccY3N8-vP&ddS|9=6on9y7(#o1_BWp=W{VZsa6cGzN9lL@|&|8M{*?#S#~R-FuNM ztdNKJ3FgY!wPYqQ{L!r4oX#VgNz^_z-`PHJ&EucSE*WeXRp?$nAJ6vJ4AH765Z@ zE=agX7rbR_O;03|Ox+Yg6VnCE1m0XJeg=a4-t^$pvvAKSf|Pn9<=vZ?Ki^>35(B!F zV|16S!ucO-8b#3BeBr$!-4eet^s#K{Mwz!`V;K_gA>fmi88_ARTyKeUAO(iM z1&;HWc*39zyIQsBqo=Xrq`DCzQrdxjNy{{JFU;bEuMHMBDBi1%-PqUjeJhe<^$nbz2`~1^H_oJ)w;cR$%yVf zG8%GI8H?*afVv}lxG5u1OEy<+z8vZlJeg2-)7+peG;euVHXJ+x9fjK2c**OzQ_RUC z;#gpA=$vCQ)qZ37I*|c7L(jJWwYPKo*G2xF5{i1}WD;8h8YFGg^fN2MxrQ?J#fHQL zhuy&yN_)sUIRum1D2Jm{1jx*;wh3#P(hitFY=9LTMPw4E_8>pwtuazc{!b0C7hM;$ z?xXU^Yf+qeo9}SI8a@tro{f~8b(l_Ly#{s|-eVbE7lh$pG!~3HiiuTW{8BG5F~TJv zpF;`KCqqe~i%hfpLnL7Ko75V&JpVBb;cZY~0}2lT%v`;6cRyH?d8z9S&GU4!xG2G( zqr8%xBrQaC3-X0~a@9dg1GSvmf8Om~FdWpE8FddPH4AHXelej;-p*|`Z*~sM$ju-h z)0qw>G+*y6lP>Y#uwmF2COz>qRO&))Nh*GSF|nlN1uZo0>Sayur6$sO6UaSWDd zI>wT-HPiJ;#8OfWtXMa9Ci3=h4BhPCJfk9SK>PvQl+q5GxOL1kT-}NwJ;0M{?J+#( zfWwNA?ZfiKxUil~D*7@_Exkt&yCxkO{p;5+Ds*zhrBE($jSIo);ycJ@)OixxldMNQ zn7x@a!G88733k)9e2g(~RFlTz84kP~lPRVt!=bexSL%{-LnzO#cqb~53@0Vj9OQ6g z)-EZV2n?sp$|Qzon`Ts)=%-E~$;sakXh9`y??Jch8F|iW<`5kQnPd_mY7g?9l$=kF z5p2!Kt$U!nL7w{bD(0rZiO^}F4>8S0F*Bh99|EO{8Dw_(1D&l`Z)3_aN;7%O8)V`X z0OJ1*7^TFPl|HkK1s|t@mfWi=$W$7t%K{v&5~0T?GJA{sRRs1ZHmZ%)}g%B$XLFgo(V+tM(TsO4{AJ zmX4cGs-YMm}$H$vqYOE}*G zM9u%oIfFfQ^HPe2#D$5loxFuCZDV-3I6I32#_Lqt<#tGt_@{2@p2Te*i*ScETszQ(tru= z#(k9MuxKe;Fx^iv3%_oyI|?KGOf}@ZOHw&8Z)2g`@*g6Z*(;xKdXfUeM&U6T-qD#5 z&o1t@85!|v7lB_@V-$Tkk#cdU1EVgwoBhAn@H0ly9VQQkGL|QiR7+`hiyf$>0EfUm zJs+6pd;)NIJTB#W0?=opR987s9&Lw;K%?1ehd5E;O#fGjael@hhoGn!BJy@YVJb6s z7bYljOt8`kAq3jKz3rMrWFc_Ugc{kkXaZ>m4;KF5$HCK5UooybGEK^u{&bu3qkP%| zfh*AGY2MVq!Ttgco|}4Zi{nX0UC;^-_hG08`-7i>FY_$6CXC9CN-5l0;(Pbrtj@b; zR(kD+lTd~*3(B0KdI#c)Q!N(8%yX*>)A7zzld)}=TApCg=E>Y!td>>v>6{3n6H`w! zJU!#$M5@h}e-M%Bz@;qu4}KcPwe-4UI{R1T=4|urSmvQ2&~3@z(M>3a{Ha*pRhc}O zQVI>3zjV=a@NP8I64PIK<3GWhv2*N=`OWa-LP?5Y`t|D<5jC|vG|mVv7B&7j^C8>6 zvQ=i2f8(>8_af6LUTlHHSeL*jw9{fJA()-%7;{e^GPr45i?9^$Vc?t*Wu8UOksZZn zw&k|tjmwOuR#&IBBBqd3+MlQfyB-28B2PjjA}SOQJUVT++jx#qngPR1Msr(~lQ8oT zkMc9xxc&qnctY|M4Qc`(x6-dtBui%po35G~)0qSHGMB>q1G9e?2T?zNV9#!^67QQp z?)FLxLpTndX7Tee4!!hDLB}>5@)R*G=nxth$TB z_tgGLr!*I~GG)~dHKX^@d`a(qkzq|Pk2Q2!h~uP9Gmao7$JPn*t_40 z3N&58uSDGHd@~e2(L&Y`=bF4wtm)m3%KnbgfNwc9U3obC8S|=PU z_QvuODNl@FPDOTNPX9NyrT(A`Dy59P^Nr}&uWu@asWDGgwV8$I`9HHdkSEP!m!ZM& z=3VQkF5?ce(|ED~2;8N|MnHd*?H^qU#LTyrW>g466|C0~3y`rd#hx0kW|?@lb3Y7; zu4~kfR?9gIIbns3vT~GXWC%%yx6f{&wdD2wy%Hh`NsZE#cO;B*xV3q|GiGp(PN`h&YusvN_RBlOtKP; z4*=HN(N*&qR=YkD9f(>{VKpAK4D`u${oZFGu6%Hhl97*sSL686z943vVNA7@iRZbp zRptww%oo92$V@OxrmL4z2x^b1UEk}^kZMgxv_tOihM^_Pe(cTJ|6-$-UNP%5Ju1DT zT}_u>o!gC*21W4l4ut*zP45L3XJXb;K`=(}P|k@jBt>VstjwfySw|8Hv3tVrlg;`6 zyJ4g{m^{|w=+2*jT|5tU`iAdKz9s*90ziB`2SAr)bSc%T`Y7O|dt}WDdLy~iFa9Lb zl`4q?R%g|5cdoa?+%vBYlc6SWoKuL8R-+w=v+&=3`G{J&Uq(lVpJ{t_9ofk0y;|t+ zDa^l}mK?f)>9}&m^;DOd97%$TqLrzc$04=!I+}L8sVSWdOj!+EyjA2I`FmF(gRWrX z*vB}te6OL9y|XgY>If`ox_!n&fF=?8gSP_Qm8DsSPSUSm-*fS9`_~Em3qk@OwddEaf2{xqz!^68@Kq7+WbH%o3HrGL%vGeJ-n6<5 zeKR}-8Hi_R;-1%UmebX6Q0)pnNr82Q(TqLRciO8{o5R97iUiiB> z&%gBCj2b%@+_agV(l(04Qfq+o8ut5w2A7nT(J8ao=(5_F=Xsl(6;}qF%==v+wctRF zorLW@sNET98mEwz2fp^2?B+`{0sDJm%PuGS6-0##6)sl+aD`RUifN>X)n%!8{JHQv zR&1001Cb(|iyxjT2=-oK22GU8`9YBNxyolt43}Zz%ynCq>E>x%xGsE*XVm_`G zNLNa0g+=BVIwqBC_#dr&9y?tlUH_NG{mzAaGMLjZ@#Nsm7kv z=OLmtX!AEd9?HFrxxM+7)aiM+@N!*a+#jnHiQWF3?4L?0M9gd@{i?Rb+N{}<^6qu% zCFo~qbyQZRKV*-7TUd_m`09V-2|#fwQ&drVf*ODq-R0(_Iw)$yN%@pHf1kWsRGt!u z4H)D?MBJBK+;?qLqpNh24|ciEr_Z}l(3!fa0uL&!N#BtI{2*^(_RV5%IHUlgJ=3K< zjB_7JGy?lKol4cTHicEZQhI&`#gk{tthjK~j^I+rH9=M-`T2jAL)aFcUi6Qs>-S*WMV1j6Q$i0&;}JyE4FuzgUgr1yO~S9ueZ?#0C$iY2(^9CnY6)pB%pf@>|X zDl0>O#r422ev=ji*gr(5N<-Leeh94Ep~w2qoG+(#;| za#f3ysE^=C__(|EjZw95{?)m?IqOXYfSTh~V)4r>ajib&)H;opsf9`=>^X|9JU!M@ zw^(&aQ_Qq!4+6=PuP-TZ9P zy-gz0MQgAelf0{Zp7es0MZ4OgKz+S#a{7zHk+fX|Y79NbUi4nCt{%kIgnR{G;LH33 z;ReiX$)|1OhXUSkV%UnG?OhJdvahCnV+Ors&J-Z1Tn-jE(#cE9t#Fpnp&>m}@2D~P z$K`k#pO;^VTcY<2wNvPKaEYhcorEN=sqTQWSw|PPfMyjbS9F__X0bG3`$D7usX2|c zNf5Y{O*!uyYge?Mi!0`P`#$`ZwP(Hd(rnkw;xhne0U(oD1X{e(zKi_z`Jp<3jtZlW zZQgEv1!+koyCl>$0+ve4u_>9Bf;{JW5gY1JDN8?Pn&`X#rChfV1t=4r-?XOVR(?a1B@BNn&@zxX-mvwcqPcJs*qLThbv_D~h`39O0PhXaS3 zcpX=Ru713EZ%=#M#V?=9ccU+8T$b`RAxHU?q9%s7D4^U+DMt;^%|mW|*Y^kFe0#TW zm|Un3Q=!7uBPFAwP>kGr8v7JY-^1<83hi#|+1OT?8(m||xGsHd@|qs|?I#tAQtfu^ z!Al#-q+YUQfSTJ1xLhJS3*Y18H1eG}$7{^v46b^ML=Wlb6 zZiKOTE{+Ao^-3&K@a7k>bF0s1;@}SDq*4Ir!MHtE6g*L&1aZcXLSO3=6khNGttT#a z#OvL)U5uv7AxC5JMqrW(RFYhZXzGgl_*-$D?J{_cC6~gJ+7M78Q$v-BZ7vJrNDV2B4%vG$N(q|wvq0c{7F0bBBVb*T}>fqWwGcSA>M88gb&ZYzOgMPd*);gD+zXc)~ zRxEud%t69RWYxpj&lJe#!z{_3N02Bi(3BNv{G~lZ-zcC4t9J$DpXmJ2*^dL1pz+&| z3uu?ALd^##odKHc_H+be5LW)ll0%F%K3=?qRl#t#n{iXe^q4o9CX(Z1RH1bftLbX0 zVZ>Zfu4LW35dVGQE-$s5g|}&4>48ve>9mb^aQ%TmQ0aGXu_(~@_xDR}nn#ZK>DF?a zG2e^4_pIZC!PsW_gFpC#Klp=pfz;FQA0<+13U8|a`zc%h2j#U{*Jl9gsbYNK zM&0(Q+3%r&>m7*K8)jZBeLX4p)FuDHkH&o;-uhkf=h@q>_?-83#t>ad>nl6?_`mrE zw&?|azF4}rsXc#)+Is3zgR*(`87Qs3<6VtO9u~)Zh$N8UbDSr=~KLmEX z@2AwgY;??iE8*MKP(i=L-6=-929z&h?|b9jAN;Q9YS+-aet%=g!uyXv9)tNN(~t6R zjs=l?^Km=S<~@^Yc`tXt6f%uFf%qNp6%Z4ncbq5ZwaDW2hKC2BCZ^^Jyt(;KHq?8D z=Ukbo8x@b)Ce=R%8bwwsHQzfOhr-A7`(yeLRLNd3QDUkbV2OKs!B z`6p~u%JG5qjXsdZcXQJBPT(@RzCY3`CK9D8 zjY~I~gI}M@Dx}G9SP(bc|8rBfq{iCAsQwNB*I$FRH=}h!-H@t=X}`M%tx0X z7lL#KV!u+$uzY2EZ|d8!)$bJYMaHUIHh_S#3gE8`;wutu1{$%8WGRmS&B?)M(A3Pc zSuEY@@cbw>DXxREd>r0$s9cQq!na>oenuLx5$s#S#@K#?EkV%#= zg7LAm4H@A?MMI<{a8VHA!t4{}_&RNTXf&y5R`PS*UgmVhRf*F@gNDv(W>90ap%-Lf zdeFNA=}WO$i(PT#B%dad5zV_XoTIM*r^u-I+M3ZxC)5_h7Ua)p3u5B`@jiy1%OPhM z8eLK&=JOY0j!UDPA0yIEP2SX6Q(HqdLkI2IOWL~{+KIUVcGsuYZ$kTX2UjNS3#cZS zW|&ep@L9hMGw%O~SzX77rz=ILUR>ylh<^Rk|40Au4~1EM<@5BW{lPO>F|0qBM#iK3 z!5?(-M{|BBOjioBw}83>^V3c|Css0000] Page <%= it.pageLabel %> - -<%= it.imgEmbed %><%= it.text %> -<% if (it.comment) { %> ---- -<%= it.comment %> -<% } %> - -<%= it.tags.filter(t => t.type === 0).map(t => `#${t.name}`).join(' ') %> -``` - - -zt-annots.eta - -```markdown -<% const byColor = Object.groupBy(it, (annot) => annot.colorName); -const label = { - "red": "Conclusion", - "orange": "Keyword", - "yellow": "Highlight", - "gray": "Comment", - "green": "Quote", - "cyan": "Task", - "blue": "Definition", - "navy": "Definition", - "purple": "Question", - "brown": "Source", - "magenta": "To Do" -}; -// Merge colors with customized label with unexpected colors, if any -// Keep the order of the colors from the original color-label map -const colorSet = new Set([...Object.keys(label), ...Object.keys(byColor)]); -for (const color of colorSet) { -if (!(color in byColor)) continue -%> - -### <%= label[color] ?? color %> - <%_ for (const annot of byColor[color]) { %> - -<%~ include("annotation", annot) %> - <%_ } %> -<% } %> -``` - - -zt-cite.eta - -```markdown -[<%= it.map(lit => `@${lit.citekey}`).join("; ") %>] -``` - - -zt-cite2.eta - -```markdown -<%= it.map(lit => `@${lit.citekey}`).join("; ") %> -``` - - -zt-colored.eta - -```markdown -<%= it.content %> -``` - - -zt-field.eta - -```markdown -title: "<%= it.title %>" - -citekey: "<%= it.citekey %>" - -tags: [paper, <% = it.tags.filter(t => t.name && t.name.startsWith('#')).map(t => '"' + t.name.slice(1) + '"').join(', ') %>] - -cate: 论文 - -concepts: [<%let excludeEndings = ['更新', '推荐', '关联', '检索', '浏览', '初读', '精读', '星标']; -let filteredConceptTags = (Array.isArray(it.tags) ? it.tags : []).filter(t => - t.name && - !t.name.startsWith('#') && - !excludeEndings.some(ending => t.name.endsWith(ending)) -).map(t => '"' + t.name + '"'); -%> <%= filteredConceptTags.join(', ') %>] - -read: [<% let endings = ['浏览', '初读', '精读']; let filteredTags = it.tags.filter(t => t.name && endings.some(ending => t.name.endsWith(ending))); if (filteredTags.length === 1) { %> "<%= filteredTags[0].name %>" <% } else if (filteredTags.length > 1) { %> 错误:存在多个符合条件的标签。 <% } else { %> 错误:没有找到符合条件的标签。 <% } %>] - -source: [<% let endings_2 = ['更新', '推荐', '关联', '检索']; let filteredTags_2 = it.tags.filter(t => t.name && endings_2.some(ending => t.name.endsWith(ending))); if (filteredTags_2.length === 1) { %> "<%= filteredTags_2[0].name %>" <% } else if (filteredTags_2.length > 1) { %> 错误:存在多个符合条件的标签。 <% } else { %> 错误:没有找到符合条件的标签。 <% } %>] - -authors: [<%= it.authors %>] - -journal: <%= it.publicationTitle %> - -paper_date: <%= it.date %> - -date: <%= (new Date(it.dateModified || Date.now())).toISOString().slice(0, 10) %> - -<% -let isImportant = it.tags.some(t => t.name === '🌟星标'); -%> - -important: <%= isImportant ? 'True' : 'False' %> -``` - - -zt-note.eta - -```markdown -| Zotero | File | Journal | -| ---------------------------- | ------------------ | ------------------------------------------ | -| [Zotero](<%= it.backlink %>) | <%= it.fileLink %> | [<%= it.publicationTitle %>](<%= it.url%>) | - -## Annotations - -<%~ include("annots", it.annotations) %> -``` - - - -#### 步骤六:配置 Enhancing Export - -Settings → Obsidian Enhancing Export: - -**添加 PaperBell Academic 导出配置**: - -```json -{ - "name": "PaperBell Academic", - "type": "pandoc", - "arguments": "-f ${fromFormat} --resource-path=\"${currentDir}\" --resource-path=\"${currentDir}/imgs\" --resource-path=\"${currentDir}/figs\" --resource-path=\"${attachmentFolderPath}\" --pdf-engine=xelatex --template=paperbell -o \"${outputPath}\" -t pdf", - "customArguments": "--bibliography=\"${vaultDir}/40 - Obsidian/mybib.bib\" --filter pandoc-crossref --number-sections --citeproc -M reference-section-title=References --listings", - "extension": ".pdf", - "outputPath": "${currentDir}/${fileName}.pdf" -} -``` - -**添加带行号版本**: - -```json -{ - "name": "PaperBell Academic (Line Numbers)", - "type": "pandoc", - "arguments": "-f ${fromFormat} --resource-path=\"${currentDir}\" --resource-path=\"${currentDir}/imgs\" --pdf-engine=xelatex --template=paperbell -M lineno=true -o \"${outputPath}\" -t pdf", - "customArguments": "--bibliography=\"${vaultDir}/40 - Obsidian/mybib.bib\" --filter pandoc-crossref --number-sections --citeproc -M reference-section-title=References", - "extension": ".pdf", - "outputPath": "${currentDir}/${fileName}_lineno.pdf" -} -``` - -### 创建第一个项目 - -#### 步骤一:创建 Longform 项目 - -1. 打开 Obsidian 左侧边栏的 Longform 图标 -2. 点击 **New Project** -3. 配置项目: - - Name: `MyFirstPaper` - - Type: Manuscript - - Location: `Outputs/` -4. 点击 **Create** - -#### 步骤二:添加项目结构 - -手动创建以下文件和文件夹: - -```bash -cd Outputs/MyFirstPaper -mkdir imgs -touch results.json -``` - -创建章节文件: - -```bash -cd source -touch Introduction.md Methods.md Results.md Discussion.md -``` - -#### 步骤三:配置元数据 - -编辑 `Index.md`: - -```yaml ---- -title: "My First Academic Paper with PaperBell" -date: "2025-10-11" - -authors: - - name: "Your Name" - affiliation: [1] - corresponding: "your.email@institution.edu" - -affiliations: - - index: 1 - name: "Your Institution" - -abstract: "This is my first paper using PaperBell workflow." -keywords: - - "academic writing" - - "Obsidian" - - "automation" - -target: "Test Journal" -acronym: "MyPaper" -csl: "nature" - -lineno: "false" -figures-at-end: "false" -titlepage: true ---- -``` - -#### 步骤四:编写示例内容 - -`source/Introduction.md`: - -```markdown -# Introduction - -This is a demonstration of the PaperBell workflow. - -We analyzed {{demo.n_samples}} samples and found a correlation of {{demo.correlation}}. - -Previous studies have shown [@example2024paper] that this approach is effective. - -![Example figure](imgs/demo.png){#fig:demo width=80%} - -As shown in [@fig:demo], our method works well. -``` - -`results.json`: - -```json -{ - "demo": { - "n_samples": 100, - "correlation": 0.75, - "pvalue": 0.001 - } -} -``` - -#### 步骤五:添加引用和图片 - -**添加测试引用**: - -在 `40 - Obsidian/mybib.bib` 中添加: - -```bibtex -@article{example2024paper, - title={An Example Paper}, - author={Author, A. and Coauthor, B.}, - journal={Example Journal}, - volume={1}, - pages={1--10}, - year={2024}, - publisher={Example Publisher} -} -``` - -**添加测试图片**: - -将任意图片复制到 `imgs/demo.png`。 - -#### 步骤六:编译项目 - -1. 在 Longform 面板中选择 `MyFirstPaper` -2. 点击 **Compile** 选项卡 -3. 配置编译步骤(按顺序): - - Strip Frontmatter - - Remove Links - - Prepend Title - - Concatenate Text - - **Add YAML Metadata** (Note Name: `Index`) - - **Replace placeholders from JSON** - - Save as Note (输出:`manuscript.md`) -4. 点击 **Compile** - -**验证编译结果**: - -打开 `manuscript.md`,检查: - -- [ ] YAML 前置内容包含完整元数据 -- [ ] 占位符 `{{demo.n_samples}}` 已替换为 `100` -- [ ] 章节按顺序合并 - -#### 步骤七:导出 PDF - -##### 方法 1:使用 Enhancing Export - -1. 右键点击 `manuscript.md` -2. 选择 "Export with Enhancing Export" -3. 选择 "PaperBell Academic" -4. 等待编译完成(首次编译可能需要 1-2 分钟) - -##### 方法 2:使用命令行 - -```bash -cd Outputs/MyFirstPaper -pandoc manuscript.md -o output.pdf \ - --defaults="../../40 - Obsidian/脚本/Pandoc/defaults/pdf.yaml" -``` - -**检查 PDF 输出**: - -打开 `output.pdf`,验证: - -- [ ] 标题页显示正确 -- [ ] 作者和机构信息完整 -- [ ] 参考文献正确格式化 -- [ ] 图片正常显示 -- [ ] 图表编号和引用正确 - -### 故障排除 - -#### 问题 1:占位符未替换 - -**症状**:编译后的 `manuscript.md` 中仍有 `{{placeholder}}` - -**可能原因**: - -1. `results.json` 不在项目根目录或 `source/` 目录 -2. JSON 语法错误 -3. 路径拼写错误 - -**解决方案**: - -```bash -# 1. 检查文件位置 -ls Outputs/MyFirstPaper/results.json -ls Outputs/MyFirstPaper/source/results.json - -# 2. 验证 JSON 语法 -cat results.json | python -m json.tool - -# 3. 启用调试模式 -# 在 Longform 编译选项中勾选 "Enable debug log" -# 查看 Obsidian 控制台输出(Cmd+Option+I) -``` - -#### 问题 2:Pandoc 编译失败 - -**症状**:导出 PDF 时报错 - -**常见错误及解决方案**: - -##### 错误:`xelatex not found` - -```bash -# 验证 LaTeX 安装 -which xelatex - -# macOS: 添加到 PATH -echo 'export PATH="/Library/TeX/texbin:$PATH"' >> ~/.zshrc -source ~/.zshrc - -# Windows: 在系统环境变量中添加 MiKTeX bin 目录 -``` - -##### 错误:`Template paperbell.latex not found` - -```bash -# 检查模板路径 -ls "40 - Obsidian/脚本/Pandoc/templates/paperbell.latex" - -# 使用绝对路径 -pandoc manuscript.md -o output.pdf \ - --template="/full/path/to/paperbell.latex" -``` - -##### 错误:`File 'tikz.sty' not found` - -```bash -# 安装缺失的 LaTeX 包 -sudo tlmgr install tikz # macOS/Linux -mpm --install=tikz # Windows MiKTeX -``` - -##### 错误:`pandoc-crossref not found` - -```bash -# 验证安装 -which pandoc-crossref - -# 重新安装 -brew reinstall pandoc-crossref # macOS -``` - -#### 问题 3:字体问题 - -**症状**:PDF 中文显示为方块或编译报错 - -**解决方案**: - -```bash -# 检查系统字体 -fc-list | grep "Times New Roman" -fc-list | grep "Songti" # 中文字体 - -# macOS: 安装中文字体 -# 系统字体册 → 全部字体 → 确认有 "宋体" - -# Linux: 安装中文字体 -sudo apt install fonts-noto-cjk # Debian/Ubuntu - -# 修改 pdf.yaml 使用系统可用字体 -metadata: - CJKmainfont: "Noto Serif CJK SC" # 替代宋体 - mainfont: "Liberation Serif" # 替代 Times New Roman -``` - -#### 问题 4:引用无法解析 - -**症状**:PDF 中显示 `[@unknown]` 而非正确引用 - -**诊断步骤**: - -```bash -# 1. 检查 .bib 文件路径 -ls "40 - Obsidian/mybib.bib" - -# 2. 验证引用键存在 -grep "@article{unknown" "40 - Obsidian/mybib.bib" - -# 3. 测试 citeproc -pandoc test.md -o test.pdf \ - --bibliography="40 - Obsidian/mybib.bib" \ - --citeproc -``` - -**常见问题**: - -- 引用键拼写错误(区分大小写) -- .bib 文件编码问题(应为 UTF-8) -- 引用键格式不符合 Better BibTeX 规则 - -#### 问题 5:行号显示异常 - -**症状**:行号未显示或参考文献也有行号 - -**解决方案**: - -```yaml -# 确保使用最新的 paperbell.latex 模板 -# 检查模板中是否有以下代码: - -% 在参考文献前关闭行号 -\AtBeginEnvironment{thebibliography}{ - \linenomathNonumbers - \nolinenumbers -} -``` - -如果模板过旧,从 PaperBell 仓库下载最新版本。 - -#### 问题 6:图表位置错误 - -##### 症状 - -启用 `figures-at-end: true` 但图表未移到文末 - -##### 检查项 - -1. YAML 元数据中是否正确设置: - -```yaml -figures-at-end: "true" # 注意是字符串格式 -``` - -2. 模板是否支持该功能(检查 `paperbell.latex` 版本) - -3. 图表标记是否正确: - -```markdown -![Caption](image.png){#fig:label} # ✅ 正确 -![Caption](image.png) # ❌ 不会被识别 -``` - -#### 问题 7:Longform 脚本未加载 - -**症状**:编译步骤中看不到自定义脚本 - -**解决方案**: - -```bash -# 1. 检查脚本位置 -ls "40 - Obsidian/脚本/longform/" - -# 2. 检查脚本格式 -# 确保文件名为 .js 且导出 module.exports - -# 3. 验证脚本语法 -node --check "40 - Obsidian/脚本/longform/编译后增加头文件.js" - -# 4. 重启 Obsidian -# 或重新加载 Longform 插件(Settings → Community plugins → Reload) -``` - -#### 问题 8:编译速度慢 - -**优化方案**: - -1. **缓存图片**: - -```yaml -# pdf.yaml -resource-path: - - . - - imgs -``` - -2. **使用增量编译**: - -```bash -# 仅在内容变化时重新编译 -make -f Makefile -``` - -3. **减少过滤器**: - -```yaml -# 调试时暂时禁用部分过滤器 -filters: - # - some-slow-filter - - pandoc-crossref - - citeproc -``` - -4. **使用 LuaLaTeX 替代 XeLaTeX**(如不需要复杂字体): - -```yaml -pdf-engine: lualatex -``` - -#### 调试工具和日志 - -**Obsidian 控制台**: - -```javascript -// 在 Obsidian 中按 Cmd+Option+I (Mac) 或 Ctrl+Shift+I (Windows) -// 查看 Longform 脚本的 console.log 输出 -``` - -**Pandoc 详细日志**: - -```bash -pandoc manuscript.md -o output.pdf \ - --defaults=pdf.yaml \ - --verbose 2>&1 | tee pandoc.log -``` - -**LaTeX 日志**: - -```bash -# 编译失败时查看详细日志 -cat output.log | grep "Error" -``` - -**测试最小示例**: - -创建 `test.md`: - -```markdown ---- -title: "Test" ---- - -# Test - -This is a test [@example2024]. -``` - -逐步测试: - -```bash -# 1. 测试 Markdown 到 PDF -pandoc test.md -o test.pdf - -# 2. 测试引用 -pandoc test.md -o test.pdf --bibliography=mybib.bib --citeproc - -# 3. 测试模板 -pandoc test.md -o test.pdf --template=paperbell.latex -``` - -### 更新和维护 - -#### 更新 PaperBell 模板 - -```bash -# 进入 PaperBell 目录 -cd /path/to/PaperBell - -# 拉取最新更新 -git pull origin main - -# 复制更新的模板文件 -cp templates/paperbell.latex YourVault/40\ -\ Obsidian/脚本/Pandoc/templates/ -``` - -#### 更新插件 - -在 Obsidian 中: - -1. Settings → Community plugins -2. 点击 "Check for updates" -3. 更新所有可用更新 - -#### 备份策略 - -**每日自动备份**(使用 Obsidian Git): - -Settings → Obsidian Git: - -```yaml -Automatic pull/push/commit: - - Auto pull: Every 10 minutes - - Auto commit: Every 30 minutes - - Auto push: Every 60 minutes -``` - -**手动备份**: - -```bash -# 备份整个 Vault -tar -czf paperbell_backup_$(date +%Y%m%d).tar.gz YourVault/ - -# 仅备份项目文件 -tar -czf projects_backup_$(date +%Y%m%d).tar.gz YourVault/Outputs/ -``` - -### 小结 - -本章详细介绍了 PaperBell 的完整安装配置流程,从系统准备、软件安装、插件配置到创建第一个项目。我们提供了常见问题的系统化诊断和解决方案,以及更新维护建议。 - -通过遵循本章的步骤,研究者可以在 1-2 小时内完成 PaperBell 的完整配置,开始享受现代化学术写作的便利。 - ---- - -**相关资源**: - -- [PaperBell GitHub](https://github.com/SongshGeo/PaperBell) -- [Pandoc 文档](https://pandoc.org/MANUAL.html) -- [Longform 插件](https://github.com/kevboh/longform) -- [问题反馈](mailto:paperbell@songshgeo.com) - -![请关注我们 PaperBell 的官方账号](https://songshgeo-picgo-1302043007.cos.ap-beijing.myqcloud.com/uPic/follow_paperbell.jpeg) diff --git "a/PaperBell/Outputs/demo/source/DEMO_\347\273\223\346\236\234.md" "b/PaperBell/Outputs/demo/source/DEMO_\347\273\223\346\236\234.md" deleted file mode 100644 index 131b1a63..00000000 --- "a/PaperBell/Outputs/demo/source/DEMO_\347\273\223\346\236\234.md" +++ /dev/null @@ -1,414 +0,0 @@ ---- -scene_alias: 结果 -tags: - - paper - - results - - features -status: completed -date: 2025-10-11 -longform: true ---- - -本章展示 PaperBell 学术写作系统的核心特性和功能实现,通过具体示例说明各个组件如何协同工作,实现从写作到发布的完整流程。 - -### 特性一:项目化的长文本管理 - -#### Longform 插件集成 - -PaperBell 通过 Longform 插件实现论文的项目化管理,解决了单文件长文本难以维护的问题。每个研究项目以文件夹形式组织: - -```text -Outputs/DEMO_Manuscript/ -├── source/ # 章节源文件 -│ ├── Introduction.md -│ ├── Methods.md -│ ├── Results.md -│ └── Discussion.md -├── imgs/ # 图片资源 -├── Index.md # 元数据配置 -├── results.json # 分析数据 -└── manuscript.md # 编译输出 -``` - -这种结构化组织具有显著优势: - -- **模块化写作**:每个章节独立编辑,降低认知负担(建议每章 < 500 行) -- **灵活排序**:通过拖拽调整章节顺序,无需重命名文件 -- **协作友好**:多人可同时编辑不同章节,避免版本冲突 -- **版本追踪**:Git 可精确追踪每个章节的修改历史 - -#### 场景(Scenes)系统 - -Longform 的场景系统支持复杂的文档结构。研究者可以创建章节组(如 Part I: Background),也可以将章节标记为草稿或待审阅状态: - -```yaml ---- -scene_title: "Methods" -tags: [draft, peer-review] -status: in-progress ---- -``` - -编译时,Longform 会按照预设顺序自动合并所有章节,生成完整手稿。需要注意小标题的层级排布: - -> [!tip] 标题层级说明 -> -> 在 PaperBell 的 Longform 写作中,标题层级遵循以下规则: -> -> 1. **文档标题**(`title` in YAML)→ LaTeX 的 `\maketitle` -> 2. **Scene 标题**(`scene_title` in frontmatter)→ LaTeX 的 `\section`(二级标题 `##`) -> 3. **Scene 内的标题** → 从 `\subsection` 开始(三级标题 `###`) -> -> 这样可以确保最终 PDF 文档的标题层级结构清晰一致。 - -### 特性二:数据驱动的动态写作 - -> [!warning] -> -> 注意,本功能通过 Longform 的编译脚本 "Replace placeholders from JSON" 实现,如果你需要启用此功能,请将在“PaperBell 编译标准流程”(PaperBell-Standard)的基础上,将该脚本加入编译流程,并置于保存笔记(Save as Note)流程之前。 - -#### 占位符系统 - -PaperBell 的占位符系统实现了数据与文本的动态绑定。研究者在写作时使用占位符引用数据: - -```markdown -我们整合了 {{results1.n_datasets}} 个重建数据集, -Pearson 相关系数为 {{results1.corr}}(p < 0.01)。 -``` - -对应的 `results.json` 文件包含实际数值: - -```json -{ - "results1": { - "n_datasets": 10, - "corr": 0.41, - "n_pass_years": 30, - "sig_sites_ratio": 0.9 - } -} -``` - -编译时,自定义脚本 `替换结果占位符.js` 自动将占位符替换为实际数值,生成: - -```markdown -我们整合了 10 个重建数据集, -Pearson 相关系数为 0.41(p < 0.01)。 -``` - -#### 路径解析能力 - -占位符系统支持复杂的数据结构访问: - -- **嵌套对象**:`{{study.phase1.participants}}` → 访问 study.phase1.participants -- **数组索引**:`{{datasets[0].name}}` → 访问 datasets 数组第一个元素的 name 属性 -- **混合路径**:`{{results.sites[2].correlation}}` → 嵌套对象与数组组合 - -这种灵活性使得研究者可以高效管理复杂的分析结果,实现真正的数据驱动写作。 - -#### 自动化优势 - -当实验数据更新时,研究者只需修改 `results.json` 文件,重新编译即可更新文档中所有相关数值。这避免了手动查找替换的错误风险,特别适合多次修订的论文项目。 - -### 特性三:智能化的元数据管理 - -#### YAML 前置元数据 - -PaperBell 使用 YAML 格式集中管理论文元数据,包括标题、作者、机构、摘要、关键词等: - -```yaml ---- -title: "Archival documentation reveals perceptual bias" -date: "2025-10-11" - -authors: - - name: "Shuang Song" - affiliation: [1, 2, 3] - corresponding: "song@gea.mpg.de" - - name: "Bo Hu" - affiliation: [4] - -affiliations: - - index: 1 - name: "Max Planck Institute of Geoanthropology" - - index: 2 - name: "Beijing Normal University" - -abstract: "It is well-documented that..." -keywords: ["collective memory", "extreme events"] - -target: "Nature Human Behaviour" -acronym: "DEMO" -csl: "nature" ---- -``` - -#### 自动化元数据注入 - -Longform 自定义脚本 `编译后增加头文件.js` 在编译时自动读取元数据,并注入到最终文档。该脚本具有以下特点: - -1. **用户选项优先**:如果在编译时手动指定选项(如引用样式),会覆盖元数据中的默认值 -2. **完整作者信息处理**:自动解析作者-机构索引关系,标记通讯作者 -3. **灵活格式配置**:支持行号、图表位置、引用样式等动态选项 - -#### 多期刊适配 - -同一份手稿可以通过调整元数据快速适配不同期刊: - -```yaml -# 投稿 Nature 系列 -csl: "nature" -target: "Nature Human Behaviour" - -# 投稿 APA 期刊 -csl: "apa" -target: "Journal of Environmental Psychology" -``` - -编译时自动应用对应的引用格式和排版样式,无需手动调整。 - -### 特性四:专业级的 PDF 导出 - -#### PaperBell 学术模板 - -PaperBell 提供了基于 Eisvogel 定制的 LaTeX 模板 `paperbell.latex`,专为学术手稿设计。模板特性包括: - -1. **统一字体系统**:全文使用 Times New Roman(标题、正文、图表标题、页眉页脚),符合国际期刊标准 -2. **智能行号控制**:支持 `lineno: "true"` 选项显示行号,便于审稿和讨论;参考文献部分自动关闭行号 -3. **图表位置灵活性**:支持 `figures-at-end: "true"` 将所有图表置于文末(参考文献之前) -4. **页眉页脚定制**: - - 左页眉:Manuscript: {acronym} - - 右页眉:{date} - - 左页脚:Submission: {target} - - 右页脚:页码 -5. **图表标题格式化**:无缩进、两端对齐、Times New Roman 字体、加粗标签 -6. **紧凑学术格式**:优化标题间距,移除不必要的空白 - -#### Pandoc 编译流程 - -PaperBell 使用 Pandoc 作为文档转换引擎,配置文件 `pdf.yaml` 定义了完整的编译流程: - -```yaml -from: markdown+tex_math_single_backslash+wikilinks_title_after_pipe -pdf-engine: xelatex -template: paperbell.latex - -filters: - - pandoc-crossref # 交叉引用 - - citeproc # 引用处理 - -metadata: - numbersections: true - link-citations: true -``` - -编译过程如下: - -1. **Markdown 解析**:支持扩展语法(数学公式、Wiki 链接、表格) -2. **交叉引用处理**:`pandoc-crossref` 解析 `{#fig:label}` 和 `[@eq:label]` -3. **引用格式化**:`citeproc` 根据 CSL 文件格式化参考文献 -4. **LaTeX 渲染**:`xelatex` 生成最终 PDF - -#### 多种导出选项 - -PaperBell 支持通过 Obsidian Enhancing Export 插件或命令行进行 PDF 导出: - -**插件导出(推荐)**: - -- 在 Obsidian 中右键点击 `manuscript.md` -- 选择 "Export with Enhancing Export" -- 选择 "PaperBell Academic" 配置 -- 自动生成 PDF - -**命令行导出**: - -```bash -pandoc manuscript.md -o output.pdf \ - --defaults="40 - Obsidian/脚本/Pandoc/defaults/pdf.yaml" \ - -M lineno=true \ - -M figures-at-end=false -``` - -命令行方式适合批量编译和自动化流程(如 GitHub Actions)。 - -### 特性五:完整的引用管理集成 - -#### Zotero 联动 - -PaperBell 通过 ZotLit 插件实现与 Zotero 的深度集成: - -1. **文献导入**:在 Zotero 中标注文献后,右键选择 "Create Literature Note(s)",自动导入到 Obsidian -2. **高亮同步**:Zotero 中的彩色高亮和批注自动转换为 Obsidian 笔记 -3. **引用键生成**:自动生成引用键(如 `song2025collective`),用于文中引用 - -#### 引用工作流 - -在写作时使用 Pandoc 引用语法: - -```markdown -已有研究表明集体记忆影响气候适应 [@song2025collective; @smith2023memory]。 -如 @jones2024perception 所述,认知偏差广泛存在。 -``` - -编译时自动格式化为: - -> 已有研究表明集体记忆影响气候适应 (Song et al., 2025; Smith et al., 2023)。 -> 如 Jones et al. (2024) 所述,认知偏差广泛存在。 - -参考文献列表自动生成并格式化: - -> **References** -> -> Jones, A., et al. (2024). Perception and cognition. *Nature*, 123, 456-789. -> -> Smith, B., et al. (2023). Memory studies. *Science*, 234, 567-890. - -#### 多样化的引用样式 - -PaperBell 支持数千种期刊的引用样式(通过 CSL 文件): - -- **Nature 系列**:数字上标 [1, 2] -- **APA 格式**:作者-日期 (Author, 2024) -- **国标格式**:[1] 作者, 标题, 期刊, 年份 - -只需在元数据中指定 `csl: "nature"` 或 `csl: "apa"`,即可自动应用对应样式。 - -### 特性六:交叉引用与编号系统 - -#### 图表自动编号 - -使用 `pandoc-crossref` 过滤器,PaperBell 实现了智能的图表编号: - -```markdown -![研究区域地图](imgs/study_area.png){#fig:map} - -如 [@fig:map] 所示,研究区域位于... -``` - -编译后自动生成: - -> **Figure 1.** 研究区域地图 -> -> 如 Figure 1 所示,研究区域位于... - -#### 公式编号 - -数学公式同样支持自动编号: - -```markdown -我们使用以下模型: - -$$ y = \beta_0 + \beta_1 x + \epsilon $$ {#eq:model} - -根据 [@eq:model],我们估计参数... -``` - -编译后: - -> 我们使用以下模型: -> -> $$ y = \beta_0 + \beta_1 x + \epsilon \quad (1) $$ -> -> 根据 Equation 1,我们估计参数... - -#### 表格编号 - -表格编号与图表一致: - -```markdown -| 变量 | 均值 | 标准差 | -|------|------|--------| -| 温度 | 15.3 | 2.1 | -| 降水 | 800 | 120 | - -Table: 描述统计 {#tbl:stats} - -[@tbl:stats] 展示了描述统计结果。 -``` - -编译后自动编号并生成引用。 - -### 特性七:版本控制与协作 - -#### Git 集成 - -PaperBell 项目天然适合 Git 版本控制: - -```bash -# 追踪修改 -git add Outputs/DEMO_Manuscript/source/Results.md -git commit -m "Add correlation analysis" - -# 创建版本标签 -git tag -a v1.0-draft -m "First complete draft" - -# 多人协作 -git checkout -b coauthor-revision -``` - -纯文本格式使得 Git 可以精确显示每一行的修改,方便审阅和回滚。 - -#### 协作写作场景 - -PaperBell 支持多种协作模式: - -1. **分章节协作**:作者 A 编辑 Methods.md,作者 B 编辑 Results.md,互不干扰 -2. **审阅-修订循环**:导出带行号的 PDF 供审稿人标注,根据行号快速定位修改 -3. **版本对比**:使用 Git diff 精确对比不同版本的修改内容 - -#### 云同步支持 - -除 Git 外,PaperBell 项目也兼容各种云同步服务: - -- **iCloud**:Mac 用户的自动同步方案 -- **OneDrive/Dropbox**:跨平台云存储 -- **Obsidian Sync**:官方加密同步服务 - -小文件特性确保同步速度快且不易产生冲突。 - -### 特性八:可扩展的自动化系统 - -#### 自定义 Longform 脚本 - -PaperBell 提供了两个核心自定义脚本,用户也可以编写自己的脚本: - -1. **编译后增加头文件.js**: - - 从 Index.md 读取元数据 - - 注入 YAML 前置内容 - - 支持用户选项覆盖 - -2. **替换结果占位符.js**: - - 解析 results.json - - 替换 {{path.to.value}} 占位符 - - 支持嵌套对象和数组 - -#### Pandoc 过滤器 - -用户可以编写 Lua 过滤器扩展 Pandoc 功能: - -```lua --- 自动添加图表前缀 -function Image(elem) - elem.caption = pandoc.Str("Figure: ") .. elem.caption - return elem -end -``` - -#### 批量处理脚本 - -PaperBell 支持批量编译多个项目: - -```bash -#!/bin/bash -for project in Outputs/*/manuscript.md; do - pandoc "$project" --defaults=pdf.yaml -o "${project%.md}.pdf" -done -``` - -这些自动化能力使 PaperBell 能够适应各种复杂的科研写作场景。 - -### 小结 - -本章展示了 PaperBell 的八大核心特性:项目化管理、数据驱动写作、智能元数据、专业导出、引用集成、交叉引用、版本控制和可扩展性。这些特性协同工作,构建了一套完整的现代化学术写作系统。 - -下一章将讨论如何根据不同场景配置 PaperBell,分享最佳实践和进阶自定义技巧。 diff --git "a/PaperBell/Outputs/demo/source/DEMO_\350\256\250\350\256\272.md" "b/PaperBell/Outputs/demo/source/DEMO_\350\256\250\350\256\272.md" deleted file mode 100644 index 78ae920c..00000000 --- "a/PaperBell/Outputs/demo/source/DEMO_\350\256\250\350\256\272.md" +++ /dev/null @@ -1,781 +0,0 @@ ---- -scene_alias: 讨论 -tags: - - paper - - discussion - - best-practices -status: completed -date: 2025-10-11 -longform: true ---- - -本章探讨 PaperBell 在不同学术写作场景下的配置方案,分享经过实践验证的最佳实践,并介绍进阶自定义技巧。 - -### 常用配置方案 - -> [!tip] Pandoc Defaults 与 Template 配置说明 -> -> PaperBell 的导出系统基于 Pandoc 的 defaults 文件配置。在 `40 - Obsidian/脚本/pandoc/defaults/` 目录下,我们提供了两个预配置的 defaults 文件: -> -> - **paperbell.yaml** - macOS/Linux 系统使用(中文字体:Songti SC、Heiti SC、STFangsong) -> - **paperbell-windows.yaml** - Windows 系统使用(中文字体:SimSun、SimHei、FangSong) -> -> 这两个配置文件的主要区别在于**中文字体设置**,以适应不同操作系统的字体可用性。 -> -> #### 自动检测与手动指定 -> -> 在 Longform 编译时,"Add YAML Metadata" 脚本会: -> -> 1. **自动检测操作系统**(如果 Template 选项留空): -> - macOS/Linux → 使用 `paperbell` 模板 -> - Windows → 使用 `paperbell-windows` 模板 -> -> 2. **支持手动指定**:在 Template 文本框中输入任何模板名称,如: -> - `paperbell` - 使用 Unix 版本 -> - `paperbell-windows` - 使用 Windows 版本 -> - `eisvogel` - 使用 Eisvogel 模板 -> - `my-custom` - 使用你自己的自定义模板 -> -> #### 创建自定义工作流 -> -> 你完全可以定义自己的 defaults 配置文件和工作流: -> -> 1. 在 `40 - Obsidian/脚本/pandoc/defaults/` 创建新的 `.yaml` 文件 -> 2. 在 `40 - Obsidian/脚本/pandoc/templates/` 创建新的 `.latex` 模板 -> 3. 在 Longform 编译时的 Template 选项中指定你的配置名称 -> -> 例如,创建 `my-workflow.yaml` 后,在编译时输入 `my-workflow` 即可使用。 -> -> **相关文件路径**: -> -> ```bash -> 40 - Obsidian/脚本/pandoc/ -> ├── defaults/ # Pandoc 默认配置文件 -> │ ├── paperbell.yaml -> │ ├── paperbell-windows.yaml -> │ ├── beamer.yaml -> │ └── crossref.yaml -> ├── templates/ # LaTeX 模板文件 -> │ └── paperbell.latex -> ├── filters/ # Pandoc Lua 过滤器 -> └── csl/ # 引用样式文件 -> ``` - -#### 方案一:快速投稿配置(Clean Submission) - -**适用场景**:论文已基本定稿,准备首次投稿 - -**配置要点**: - -```yaml ---- -title: "Your Research Title" -date: "2025-10-11" -target: "Nature Human Behaviour" -acronym: "YourAcronym" -csl: "nature" - -# 关键设置 -lineno: "false" # 不显示行号 -figures-at-end: "false" # 图表嵌入正文 -titlepage: true # 生成封面页 ---- -``` - -**Longform 编译步骤**: - -1. Strip Frontmatter -2. Remove Links -3. Prepend Title -4. Concatenate Text -5. Add YAML Metadata(Note Name: `Index`) -6. Replace placeholders from JSON -7. Save as Note - -**导出设置**: - -- 使用 "PaperBell Academic" 配置 -- 确保所有图片为高分辨率(≥300 DPI) -- 检查参考文献格式与目标期刊一致 - -**检查清单**: - -- [ ] 字数符合期刊要求 -- [ ] 图表数量在限制内 -- [ ] 所有引用在 .bib 文件中 -- [ ] 作者信息完整准确 -- [ ] 摘要和关键词符合要求 - -#### 方案二:审稿讨论配置(Review Version) - -**适用场景**:发送给合作者或审稿人审阅 - -**配置要点**: - -```yaml ---- -lineno: "true" # 显示行号便于标注 -figures-at-end: "false" # 图表嵌入便于阅读 -titlepage: true ---- -``` - -**为什么显示行号?** - -- 便于审稿人精确指出需要修改的位置 -- 便于作者团队讨论时引用具体段落 -- 便于记录修订历史(如 "Line 156: revised as suggested") - -**协作建议**: - -- 导出 PDF 时在文件名中注明版本和日期:`manuscript_v2_20251011_review.pdf` -- 使用 Git 标签标记审稿版本:`git tag -a review-v2 -m "Sent to co-authors"` -- 创建修订记录文档,记录每个行号的修改内容 - -#### 方案三:修订响应配置(Revision Response) - -**适用场景**:响应审稿意见,准备修订稿 - -**工作流程**: - -1. **创建修订分支**: - -```bash -git checkout -b revision-round1 -``` - -2. **配置双版本对比**: - -```yaml -# original.yaml -lineno: "true" -csl: "nature" - -# revised.yaml -lineno: "true" -csl: "nature" -highlight-changes: true # 标记修改内容(需自定义过滤器) -``` - -3. **使用占位符记录修改**: -在 `results.json` 中添加修订信息: - -```json -{ - "revision": { - "response_to_reviewer1": "We have added additional analysis as suggested...", - "new_sample_size": 150, - "previous_sample_size": 120 - } -} -``` - -在修订说明文档中引用: - -```markdown -**Reviewer 1, Comment 3**: Sample size seems insufficient. - -**Response**: We have increased the sample size from -{{revision.previous_sample_size}} to {{revision.new_sample_size}}. -``` - -#### 方案四:期刊特定配置 - -##### Nature 系列期刊 - -```yaml ---- -csl: "nature" -target: "Nature Human Behaviour" -reference-section-title: "References" - -# Nature 特定要求 -lineno: "false" -figures-at-end: "false" # 图表嵌入正文 -titlepage: false # 不需要单独封面 -numbersections: true ---- -``` - -**注意事项**: - -- Nature 系列使用数字上标引用 [1, 2] -- 图表标题格式:**Figure 1 |** Title in sentence case. -- 参考文献按引用顺序排列 - -##### Science 系列期刊 - -```yaml ---- -csl: "science" -target: "Science" -reference-section-title: "References and Notes" - -# Science 特定要求 -lineno: "true" # 初稿需要行号 -figures-at-end: "true" # 图表置于文末 -titlepage: false ---- -``` - -**注意事项**: - -- Science 要求图表和说明分离 -- 参考文献格式较为严格,需仔细检查 -- 补充材料需单独准备 - -##### 社会科学期刊(APA 格式) - -```yaml ---- -csl: "apa" -target: "Journal of Environmental Psychology" -reference-section-title: "References" - -# APA 格式要求 -lineno: "false" -figures-at-end: "false" -titlepage: true # 需要封面页 -abstract-title: "Abstract" -keywords-title: "Keywords" ---- -``` - -**注意事项**: - -- APA 使用作者-日期引用格式 (Author, 2024) -- 参考文献按字母顺序排列 -- 标题层级有严格规定 - -### 最佳实践 - -#### 实践一:元数据集中管理 - -**问题**:多个项目的元数据分散,难以统一维护。 - -**解决方案**:创建元数据模板和复用策略。 - -**实施步骤**: - -1. 创建作者信息库 `40 - Obsidian/authors.yaml`: - -```yaml -authors: - songshgeo: - name: "Shuang Song" - email: "song@gea.mpg.de" - affiliations: - - "Max Planck Institute of Geoanthropology" - - "Beijing Normal University" - orcid: "0000-0002-XXXX-XXXX" - - coauthor1: - name: "Bo Hu" - email: "bohu@nju.edu.cn" - affiliations: - - "Nanjing University" -``` - -2. 在新项目中引用: - -```yaml -# 使用 templater 插件动态插入 -<%* -const authors = await tp.file.include("[[authors]]"); -%> -``` - -3. 维护机构索引映射表,确保一致性。 - -**优势**: - -- 作者信息一处修改,所有项目同步更新 -- 避免拼写错误和格式不一致 -- 便于管理大型合作项目(多作者、多机构) - -#### 实践二:数据与文本分离 - -**原则**:所有可能变化的数值都应使用占位符,而非硬编码。 - -**示例**: - -**❌ 不推荐**: - -```markdown -我们分析了 150 个样本,发现相关系数为 0.45(p < 0.01)。 -``` - -**✅ 推荐**: - -```markdown -我们分析了 {{study.n_samples}} 个样本, -发现相关系数为 {{study.correlation}}(p < {{study.pvalue}})。 -``` - -对应 `results.json`: - -```json -{ - "study": { - "n_samples": 150, - "correlation": 0.45, - "pvalue": 0.01 - } -} -``` - -**优势**: - -- 数据更新时无需逐行查找修改 -- 降低人为错误(如漏改某个数值) -- 便于进行敏感性分析(替换不同数据集) -- 便于审稿人要求的额外分析 - -**进阶技巧**: - -- 在 `results.json` 中包含数据来源和计算日期: - -```json -{ - "metadata": { - "generated_date": "2025-10-11", - "script": "analysis/main_analysis.R" - }, - "study": { - "n_samples": 150 - } -} -``` - -#### 实践三:渐进式写作策略 - -**问题**:论文初稿往往需要反复调整结构和内容。 - -**解决方案**:采用渐进式写作,充分利用 Longform 的灵活性。 - -**阶段一:大纲阶段**(Outline Phase) - -创建章节骨架,每个文件只包含标题和要点: - -```markdown -# Introduction - -### Background -- Point 1: Traditional methods -- Point 2: Current challenges -- Point 3: Our innovation - -### Research Questions -- RQ1: ... -- RQ2: ... -``` - -**阶段二:初稿阶段**(Draft Phase) - -逐章节扩展内容,标记状态: - -```yaml ---- -status: draft -completeness: 60% -next_steps: - - Add literature review - - Expand methodology ---- -``` - -**阶段三:修订阶段**(Revision Phase) - -使用 Git 分支管理不同版本: - -```bash -git checkout -b draft-v2 -# 大幅修改 -git checkout main -git merge draft-v2 -``` - -**阶段四:抛光阶段**(Polish Phase) - -- 启用 Linting 检查拼写和语法 -- 检查段落逻辑和过渡 -- 统一术语和表达方式 - -**优势**: - -- 降低初稿心理压力(先完成后完美) -- 便于追踪写作进度 -- 易于回滚不成熟的修改 - -#### 实践四:图表管理规范 - -**问题**:图片文件命名混乱,难以维护。 - -**解决方案**:建立图表命名和组织规范。 - -**命名规范**: - -```text -imgs/ -├── fig1_study_area_map.png # 主文图 -├── fig2_temporal_trends.png -├── fig3_spatial_patterns.png -├── figS1_validation_results.png # 补充图 -├── figS2_sensitivity_analysis.png -└── raw/ # 原始图片 - └── fig1_raw_from_gis.png -``` - -**命名模式**:`{type}{number}_{descriptive_name}.{ext}` - -**在文中引用**: - -```markdown -![Study area and sampling sites](imgs/fig1_study_area_map.png){#fig:study-area width=80%} - -As shown in [@fig:study-area], our study area covers... -``` - -**版本控制**: - -使用 `.gitattributes` 管理图片: - -```gitattributes -*.png filter=lfs diff=lfs merge=lfs -text -*.jpg filter=lfs diff=lfs merge=lfs -text -*.pdf filter=lfs diff=lfs merge=lfs -text -``` - -大型图片文件使用 Git LFS(Large File Storage)。 - -**优势**: - -- 文件名即说明,易于理解 -- 便于快速定位和替换 -- 版本控制更高效 - -#### 实践五:引用管理工作流 - -**工作流程**: - -1. **文献阅读阶段**(Zotero): - - 使用彩色高亮标注关键内容: - - 🟡 黄色:重要发现 - - 🟢 绿色:方法论 - - 🔵 蓝色:理论框架 - - 🔴 红色:局限性/疑问 - - 添加标签:`#project/DEMO`、`#method/ABM` - -2. **笔记导入阶段**(ZotLit): - - 右键选择 "Create Literature Note(s)" - - 自动导入到 `Inputs/Zotero/` - - 验证引用键格式(如 `song2025collective`) - -3. **写作引用阶段**(Obsidian): - - 使用自动完成:输入 `[@song` 触发补全 - - 多引用:`[@author1; @author2; @author3]` - - 文内引用:`@author2024 demonstrated that...` - -4. **编译检查阶段**(Pandoc): - - 检查是否有未解析的引用(会显示为 `[@unknown]`) - - 验证参考文献格式与期刊要求一致 - - 检查引用顺序(Nature 系列按引用顺序,APA 按字母顺序) - -**常见问题处理**: - -| 问题 | 解决方案 | -|------|----------| -| 引用无法解析 | 检查 .bib 文件路径,验证引用键拼写 | -| 参考文献格式错误 | 更换 CSL 文件,检查 Zotero 中的元数据 | -| 多次引用同一文献 | 使用 `-@author` 隐藏作者名,只保留年份 | - -#### 实践六:模板复用与项目快速启动 - -**问题**:每次创建新项目都需要重新配置,效率低下。 - -**解决方案**:创建项目模板和快速启动脚本。 - -**创建项目模板**: - -1. 在 `40 - Obsidian/模板/` 创建 `Longform_Project_Template/`: - -```text -Longform_Project_Template/ -├── source/ -│ ├── 01_Introduction.md -│ ├── 02_Methods.md -│ ├── 03_Results.md -│ └── 04_Discussion.md -├── imgs/.gitkeep -├── Index.md -└── results.json -``` - -2. `Index.md` 包含常用元数据框架: - -```yaml ---- -title: "{{TITLE}}" -date: "{{DATE}}" -authors: - - name: "{{AUTHOR}}" - affiliation: [1] - corresponding: "{{EMAIL}}" -affiliations: - - index: 1 - name: "{{INSTITUTION}}" -abstract: "" -keywords: [] -target: "" -acronym: "" -csl: "nature" -lineno: "false" -figures-at-end: "false" ---- -``` - -3. 使用 Templater 插件创建快速启动命令: - -```javascript -// QuickAdd script: Create Longform Project -const projectName = await tp.system.prompt("Project name"); -const acronym = await tp.system.prompt("Project acronym"); - -const template = "40 - Obsidian/模板/Longform_Project_Template"; -const target = `Outputs/${projectName}`; - -await tp.file.create_new("", projectName, false, tp.file.folder(target)); -// Copy template files... -``` - -**优势**: - -- 新项目 1 分钟内完成初始化 -- 确保项目结构一致性 -- 避免遗漏必要文件 - -### 进阶自定义 - -#### 自定义一:扩展占位符功能 - -**需求**:希望占位符支持计算和格式化(如保留小数位数、千位分隔符)。 - -**解决方案**:扩展 `替换结果占位符.js` 脚本。 - -**示例代码**: - -```javascript -// 支持格式化语法:{{value | format}} -const pattern = /{{\\s*([^|]+?)\\s*(\\|\\s*([^}]+?))?\\s*}}/g; - -const replaced = input.contents.replace(pattern, (match, path, _, format) => { - let value = getByPath(data, path.trim()); - - if (format) { - const fmt = format.trim(); - if (fmt.startsWith('toFixed')) { - const digits = parseInt(fmt.match(/\\d+/)[0]); - value = Number(value).toFixed(digits); - } else if (fmt === 'percent') { - value = (Number(value) * 100).toFixed(1) + '%'; - } else if (fmt === 'comma') { - value = Number(value).toLocaleString(); - } - } - - return String(value); -}); -``` - -**使用示例**: - -```markdown -相关系数为 {{study.correlation | toFixed2}} -样本量为 {{study.n_samples | comma}} -显著性比例为 {{study.sig_ratio | percent}} -``` - -输出: - -```text -相关系数为 0.45 -样本量为 1,250 -显著性比例为 87.3% -``` - -#### 自定义二:多语言支持 - -**需求**:同一手稿需要中英文两个版本。 - -**解决方案**:使用条件渲染和多元数据文件。 - -**实施方案**: - -1. 创建双语元数据: - -```json -{ - "title": { - "en": "Perceptual bias in collective memory", - "zh": "集体记忆中的感知偏差" - }, - "abstract": { - "en": "It is well-documented that...", - "zh": "已有充分研究表明..." - } -} -``` - -2. 修改脚本支持语言选择: - -```javascript -{ - id: "language", - name: "Document Language", - type: "Dropdown", - options: [ - { value: "en", label: "English" }, - { value: "zh", label: "中文" } - ], - default: "en" -} - -// In compile function -const lang = context.optionValues["language"]; -title = metadata.title[lang] || metadata.title; -``` - -3. 章节文本也可以使用占位符: - -```markdown -# {{headings.introduction}} - -{{text.intro_para1}} -``` - -#### 自定义三:高级交叉引用 - -**需求**:希望引用时自动包含页码或章节信息。 - -**解决方案**:创建自定义 Pandoc Lua 过滤器。 - -**示例过滤器**(`enhanced_crossref.lua`): - -```lua -function Cite(elem) - -- 为图表引用添加 "on page X" - if elem.citations[1].id:match("^fig:") then - return { - pandoc.Str("Figure"), - pandoc.Space(), - elem, - pandoc.Str(" (on page \\pageref{" .. elem.citations[1].id .. "})") - } - end - return elem -end -``` - -在 `pdf.yaml` 中启用: - -```yaml -filters: - - enhanced_crossref.lua - - pandoc-crossref - - citeproc -``` - -#### 自定义四:自动化补充材料 - -**需求**:自动生成补充材料文档(Supplementary Information)。 - -**解决方案**:创建独立的 Longform 项目和编译配置。 - -**项目结构**: - -```text -Outputs/DEMO_Manuscript/ -├── main/ -│ └── manuscript.md # 主文档 -└── supplementary/ - ├── source/ - │ ├── S1_Methods.md - │ ├── S2_Results.md - │ └── S3_Figures.md - ├── Index_SI.md - └── supplementary.md # 补充材料编译输出 -``` - -**配置差异**: - -```yaml -# Index_SI.md ---- -title: "Supplementary Information" -subtitle: "Perceptual bias in collective memory" -numbersections: true -section-numbering: "S" # 章节编号前缀 S -figure-numbering: "S" # 图表编号前缀 S ---- -``` - -**批量编译**: - -```bash -# compile_all.sh -pandoc main/manuscript.md -o manuscript.pdf --defaults=pdf.yaml -pandoc supplementary/supplementary.md -o SI.pdf --defaults=pdf_si.yaml -``` - -#### 自定义五:集成外部数据源 - -**需求**:直接从数据库或 API 获取最新数据,而非手动更新 JSON。 - -**解决方案**:创建数据同步脚本。 - -**示例**(Python): - -```python -# sync_data.py -import json -import requests -from pathlib import Path - -def fetch_analysis_results(project_id): - """从远程服务器获取分析结果""" - response = requests.get(f"https://api.example.com/results/{project_id}") - return response.json() - -def update_results_json(project_path, data): - """更新 results.json""" - results_file = Path(project_path) / "results.json" - with open(results_file, 'w') as f: - json.dump(data, f, indent=2) - -if __name__ == "__main__": - data = fetch_analysis_results("DEMO_2025") - update_results_json("Outputs/DEMO_Manuscript", data) - print("✅ Data synchronized successfully") -``` - -**配合 Makefile 自动化**: - -```makefile -.PHONY: sync compile all - -sync: - python scripts/sync_data.py - -compile: - pandoc Outputs/DEMO_Manuscript/manuscript.md -o output.pdf --defaults=pdf.yaml - -all: sync compile -``` - -运行 `make all` 即可自动同步数据并编译文档。 - -### 小结 - -本章讨论了 PaperBell 在不同场景下的配置方案,包括快速投稿、审稿讨论、修订响应和期刊特定配置。我们分享了六大最佳实践:元数据集中管理、数据文本分离、渐进式写作、图表管理规范、引用工作流和模板复用。最后,我们探讨了五种进阶自定义方案:扩展占位符、多语言支持、高级交叉引用、自动化补充材料和外部数据集成。 - -这些方案和实践经过实际项目验证,能够显著提升学术写作效率和质量。下一章将详细介绍 PaperBell 的安装配置方法和故障排除技巧。 diff --git "a/PaperBell/Outputs/demo/\344\270\200\347\257\207\350\256\272\346\226\207.docx" "b/PaperBell/Outputs/demo/\344\270\200\347\257\207\350\256\272\346\226\207.docx" deleted file mode 100644 index 62013d47645fa0bdb9f00ba11176aa5ca5d55e40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10820 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